aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json3625
-rw-r--r--src/Utils.ts7
-rw-r--r--src/client/documents/Documents.ts127
-rw-r--r--src/client/goldenLayout.js2
-rw-r--r--src/client/util/CurrentUserUtils.ts231
-rw-r--r--src/client/util/DocumentManager.ts5
-rw-r--r--src/client/util/DragManager.ts56
-rw-r--r--src/client/util/DropConverter.ts49
-rw-r--r--src/client/views/ContextMenu.tsx5
-rw-r--r--src/client/views/DashboardView.tsx10
-rw-r--r--src/client/views/DocComponent.tsx16
-rw-r--r--src/client/views/DocumentButtonBar.tsx48
-rw-r--r--src/client/views/DocumentDecorations.tsx24
-rw-r--r--src/client/views/FieldsDropdown.tsx120
-rw-r--r--src/client/views/FilterPanel.tsx243
-rw-r--r--src/client/views/GlobalKeyHandler.ts3
-rw-r--r--src/client/views/InkingStroke.tsx2
-rw-r--r--src/client/views/MainView.tsx8
-rw-r--r--src/client/views/MarqueeAnnotator.tsx4
-rw-r--r--src/client/views/OverlayView.tsx4
-rw-r--r--src/client/views/PreviewCursor.tsx2
-rw-r--r--src/client/views/PropertiesButtons.tsx3
-rw-r--r--src/client/views/PropertiesDocContextSelector.tsx4
-rw-r--r--src/client/views/PropertiesView.tsx3
-rw-r--r--src/client/views/TemplateMenu.tsx24
-rw-r--r--src/client/views/collections/CollectionDockingView.tsx13
-rw-r--r--src/client/views/collections/CollectionMasonryViewFieldRow.tsx15
-rw-r--r--src/client/views/collections/CollectionMenu.tsx4
-rw-r--r--src/client/views/collections/CollectionNoteTakingView.scss1
-rw-r--r--src/client/views/collections/CollectionNoteTakingView.tsx107
-rw-r--r--src/client/views/collections/CollectionNoteTakingViewColumn.tsx22
-rw-r--r--src/client/views/collections/CollectionPileView.tsx3
-rw-r--r--src/client/views/collections/CollectionStackingView.tsx88
-rw-r--r--src/client/views/collections/CollectionStackingViewFieldColumn.tsx23
-rw-r--r--src/client/views/collections/CollectionSubView.tsx5
-rw-r--r--src/client/views/collections/CollectionTimeView.tsx55
-rw-r--r--src/client/views/collections/CollectionTreeView.tsx24
-rw-r--r--src/client/views/collections/TabDocView.tsx10
-rw-r--r--src/client/views/collections/TreeView.tsx14
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormInfoUI.tsx6
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx78
-rw-r--r--src/client/views/collections/collectionFreeForm/MarqueeView.tsx12
-rw-r--r--src/client/views/collections/collectionMulticolumn/CollectionMulticolumnView.tsx62
-rw-r--r--src/client/views/collections/collectionMulticolumn/CollectionMultirowView.tsx1
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.scss155
-rw-r--r--src/client/views/collections/collectionSchema/CollectionSchemaView.tsx72
-rw-r--r--src/client/views/collections/collectionSchema/SchemaTableCell.tsx9
-rw-r--r--src/client/views/global/globalScripts.ts33
-rw-r--r--src/client/views/linking/LinkMenuItem.tsx14
-rw-r--r--src/client/views/nodes/CollectionFreeFormDocumentView.tsx175
-rw-r--r--src/client/views/nodes/ComparisonBox.tsx4
-rw-r--r--src/client/views/nodes/DataVizBox/DataVizBox.scss4
-rw-r--r--src/client/views/nodes/DataVizBox/DataVizBox.tsx86
-rw-r--r--src/client/views/nodes/DataVizBox/components/Chart.scss2
-rw-r--r--src/client/views/nodes/DataVizBox/components/Histogram.tsx22
-rw-r--r--src/client/views/nodes/DataVizBox/components/LineChart.tsx84
-rw-r--r--src/client/views/nodes/DataVizBox/components/PieChart.tsx15
-rw-r--r--src/client/views/nodes/DataVizBox/components/TableBox.tsx38
-rw-r--r--src/client/views/nodes/DataVizBox/utils/D3Utils.ts4
-rw-r--r--src/client/views/nodes/DocumentView.scss1
-rw-r--r--src/client/views/nodes/DocumentView.tsx88
-rw-r--r--src/client/views/nodes/EquationBox.tsx5
-rw-r--r--src/client/views/nodes/FontIconBox/FontIconBox.tsx31
-rw-r--r--src/client/views/nodes/ImageBox.tsx1
-rw-r--r--src/client/views/nodes/LabelBox.tsx10
-rw-r--r--src/client/views/nodes/LinkAnchorBox.tsx4
-rw-r--r--src/client/views/nodes/MapBox/MapBox.tsx4
-rw-r--r--src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx4
-rw-r--r--src/client/views/nodes/RecordingBox/RecordingBox.tsx4
-rw-r--r--src/client/views/nodes/ScriptingBox.tsx32
-rw-r--r--src/client/views/nodes/VideoBox.tsx3
-rw-r--r--src/client/views/nodes/WebBox.tsx6
-rw-r--r--src/client/views/nodes/formattedText/DashFieldView.tsx27
-rw-r--r--src/client/views/nodes/formattedText/FormattedTextBox.tsx59
-rw-r--r--src/client/views/nodes/trails/PresBox.tsx13
-rw-r--r--src/client/views/search/SearchBox.tsx10
-rw-r--r--src/client/views/topbar/TopBar.tsx27
-rw-r--r--src/fields/Doc.ts70
-rw-r--r--src/fields/documentSchemas.ts6
-rw-r--r--src/mobile/MobileInterface.tsx1
80 files changed, 3269 insertions, 3022 deletions
diff --git a/package-lock.json b/package-lock.json
index 4cc6d8d2a..7b86365c2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -305,66 +305,66 @@
}
},
"node_modules/@adobe/react-spectrum": {
- "version": "3.34.0",
- "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.34.0.tgz",
- "integrity": "sha512-FI+kUI/SefYXCBdmKTwASijMuyaXONgU6uuBt0rddaasiHWytTVzxWHMRAZlxixQHks9nfvD11+DXvI58rNZNw==",
- "dependencies": {
- "@internationalized/string": "^3.2.0",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/ssr": "^3.9.1",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-spectrum/actionbar": "^3.4.2",
- "@react-spectrum/actiongroup": "^3.10.2",
- "@react-spectrum/avatar": "^3.0.9",
- "@react-spectrum/badge": "^3.1.10",
- "@react-spectrum/breadcrumbs": "^3.9.4",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/buttongroup": "^3.6.10",
- "@react-spectrum/calendar": "^3.4.6",
- "@react-spectrum/checkbox": "^3.9.3",
- "@react-spectrum/combobox": "^3.12.2",
- "@react-spectrum/contextualhelp": "^3.6.8",
- "@react-spectrum/datepicker": "^3.9.3",
- "@react-spectrum/dialog": "^3.8.8",
- "@react-spectrum/divider": "^3.5.10",
- "@react-spectrum/dnd": "^3.3.7",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/icon": "^3.7.10",
- "@react-spectrum/illustratedmessage": "^3.4.10",
- "@react-spectrum/image": "^3.4.10",
- "@react-spectrum/inlinealert": "^3.2.2",
- "@react-spectrum/labeledvalue": "^3.1.11",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/link": "^3.6.4",
- "@react-spectrum/list": "^3.7.7",
- "@react-spectrum/listbox": "^3.12.6",
- "@react-spectrum/menu": "^3.18.0",
- "@react-spectrum/meter": "^3.4.10",
- "@react-spectrum/numberfield": "^3.9.0",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/picker": "^3.14.2",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/provider": "^3.9.4",
- "@react-spectrum/radio": "^3.7.3",
- "@react-spectrum/searchfield": "^3.8.3",
- "@react-spectrum/slider": "^3.6.6",
- "@react-spectrum/statuslight": "^3.5.10",
- "@react-spectrum/switch": "^3.5.2",
- "@react-spectrum/table": "^3.12.7",
- "@react-spectrum/tabs": "^3.8.7",
- "@react-spectrum/tag": "^3.2.3",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/textfield": "^3.11.3",
- "@react-spectrum/theme-dark": "^3.5.7",
- "@react-spectrum/theme-default": "^3.5.7",
- "@react-spectrum/theme-light": "^3.4.7",
- "@react-spectrum/tooltip": "^3.6.4",
- "@react-spectrum/view": "^3.6.7",
- "@react-spectrum/well": "^3.4.10",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/data": "^3.11.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.34.1",
+ "resolved": "https://registry.npmjs.org/@adobe/react-spectrum/-/react-spectrum-3.34.1.tgz",
+ "integrity": "sha512-J1HOjntW+H8xusfc5xLnIlUXNOzllp4f7qzh3LlDOsZuH8oBH8sIYmBVp4ijVhRFUKa10qg088role1On3UGbg==",
+ "dependencies": {
+ "@internationalized/string": "^3.2.1",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-spectrum/actionbar": "^3.4.3",
+ "@react-spectrum/actiongroup": "^3.10.3",
+ "@react-spectrum/avatar": "^3.0.10",
+ "@react-spectrum/badge": "^3.1.11",
+ "@react-spectrum/breadcrumbs": "^3.9.5",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/buttongroup": "^3.6.11",
+ "@react-spectrum/calendar": "^3.4.7",
+ "@react-spectrum/checkbox": "^3.9.4",
+ "@react-spectrum/combobox": "^3.12.3",
+ "@react-spectrum/contextualhelp": "^3.6.9",
+ "@react-spectrum/datepicker": "^3.9.4",
+ "@react-spectrum/dialog": "^3.8.9",
+ "@react-spectrum/divider": "^3.5.11",
+ "@react-spectrum/dnd": "^3.3.8",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/icon": "^3.7.11",
+ "@react-spectrum/illustratedmessage": "^3.4.11",
+ "@react-spectrum/image": "^3.4.11",
+ "@react-spectrum/inlinealert": "^3.2.3",
+ "@react-spectrum/labeledvalue": "^3.1.12",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/link": "^3.6.5",
+ "@react-spectrum/list": "^3.7.8",
+ "@react-spectrum/listbox": "^3.12.7",
+ "@react-spectrum/menu": "^3.18.1",
+ "@react-spectrum/meter": "^3.4.11",
+ "@react-spectrum/numberfield": "^3.9.1",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/picker": "^3.14.3",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/provider": "^3.9.5",
+ "@react-spectrum/radio": "^3.7.4",
+ "@react-spectrum/searchfield": "^3.8.4",
+ "@react-spectrum/slider": "^3.6.7",
+ "@react-spectrum/statuslight": "^3.5.11",
+ "@react-spectrum/switch": "^3.5.3",
+ "@react-spectrum/table": "^3.12.8",
+ "@react-spectrum/tabs": "^3.8.8",
+ "@react-spectrum/tag": "^3.2.4",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/textfield": "^3.11.4",
+ "@react-spectrum/theme-dark": "^3.5.8",
+ "@react-spectrum/theme-default": "^3.5.8",
+ "@react-spectrum/theme-light": "^3.4.8",
+ "@react-spectrum/tooltip": "^3.6.5",
+ "@react-spectrum/view": "^3.6.8",
+ "@react-spectrum/well": "^3.4.11",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/data": "^3.11.2",
+ "@react-types/shared": "^3.22.1",
"client-only": "^0.0.1"
},
"peerDependencies": {
@@ -2505,18 +2505,6 @@
"node": "*"
}
},
- "node_modules/@eslint/eslintrc/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@eslint/js": {
"version": "8.56.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
@@ -2715,30 +2703,30 @@
}
},
"node_modules/@fullcalendar/core": {
- "version": "6.1.10",
- "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.10.tgz",
- "integrity": "sha512-oTXGJSAGpCf1oY+CKp5qYjMHkJCPBkJ3SHitl63n8Q6xKeiwQ4EF6Au451euUovREwJpLmD1AyZrCnWmtB9AVg==",
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.11.tgz",
+ "integrity": "sha512-TjG7c8sUz+Vkui2FyCNJ+xqyu0nq653Ibe99A66LoW95oBo6tVhhKIaG1Wh0GVKymYiqAQN/OEdYTuj4ay27kA==",
"dependencies": {
"preact": "~10.12.1"
}
},
"node_modules/@fullcalendar/daygrid": {
- "version": "6.1.10",
- "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.10.tgz",
- "integrity": "sha512-Z4GRm1IyHKgxXFTWGcEI0nTsvYOIkpE0aMt3/o3ER2SZkF+hfwcDFhtj0c9+WhMjXFIWYeoTnA9rUOY7Zl/nxA==",
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.11.tgz",
+ "integrity": "sha512-hF5jJB7cgUIxWD5MVjj8IU407HISyLu7BWXcEIuTytkfr8oolOXeCazqnnjmRbnFOncoJQVstTtq6SIhaT32Xg==",
"peerDependencies": {
- "@fullcalendar/core": "~6.1.10"
+ "@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/multimonth": {
- "version": "6.1.10",
- "resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.10.tgz",
- "integrity": "sha512-mLGEgD+sv8rNfKphyOCWRQapX7/nAvHgQmDTjuy4STlhHsddCYVmFlsSgF373ph1tXh41wAJUVdNO/pDmCvUfA==",
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.11.tgz",
+ "integrity": "sha512-7DbPC+AAlaKnquGVdw1Z85Q3nSZ4GZ1NcVIk4k7bLnqDlntwHPPsrDlSIzUWKcN0q5/u7jQHm4PU1m3LAl70Sg==",
"dependencies": {
- "@fullcalendar/daygrid": "~6.1.10"
+ "@fullcalendar/daygrid": "~6.1.11"
},
"peerDependencies": {
- "@fullcalendar/core": "~6.1.10"
+ "@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@googlemaps/js-api-loader": {
@@ -2822,34 +2810,34 @@
}
},
"node_modules/@internationalized/date": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.1.tgz",
- "integrity": "sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.2.tgz",
+ "integrity": "sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==",
"dependencies": {
"@swc/helpers": "^0.5.0"
}
},
"node_modules/@internationalized/message": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.1.tgz",
- "integrity": "sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.2.tgz",
+ "integrity": "sha512-MHAWsZWz8jf6jFPZqpTudcCM361YMtPIRu9CXkYmKjJ/0R3pQRScV5C0zS+Qi50O5UAm8ecKhkXx6mWDDcF6/g==",
"dependencies": {
"@swc/helpers": "^0.5.0",
"intl-messageformat": "^10.1.0"
}
},
"node_modules/@internationalized/number": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.0.tgz",
- "integrity": "sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.1.tgz",
+ "integrity": "sha512-N0fPU/nz15SwR9IbfJ5xaS9Ss/O5h1sVXMZf43vc9mxEG48ovglvvzBjF53aHlq20uoR6c+88CrIXipU/LSzwg==",
"dependencies": {
"@swc/helpers": "^0.5.0"
}
},
"node_modules/@internationalized/string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.0.tgz",
- "integrity": "sha512-Xx3Sy3f2c9ctT+vh8c7euEaEHQZltp0euZ3Hy4UfT3E13r6lxpUS3kgKyumEjboJZSnaZv7JhqWz3D75v+IxQg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.1.tgz",
+ "integrity": "sha512-vWQOvRIauvFMzOO+h7QrdsJmtN1AXAFVcaLWP9AseRN2o7iHceZ6bIXhBD4teZl8i91A3gxKnWBlGgjCwU6MFQ==",
"dependencies": {
"@swc/helpers": "^0.5.0"
}
@@ -3621,9 +3609,9 @@
}
},
"node_modules/@mui/core-downloads-tracker": {
- "version": "5.15.10",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.10.tgz",
- "integrity": "sha512-qPv7B+LeMatYuzRjB3hlZUHqinHx/fX4YFBiaS19oC02A1e9JFuDKDvlyRQQ5oRSbJJt0QlaLTlr0IcauVcJRQ==",
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz",
+ "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
@@ -3699,12 +3687,12 @@
}
},
"node_modules/@mui/private-theming": {
- "version": "5.15.9",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.9.tgz",
- "integrity": "sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg==",
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz",
+ "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==",
"dependencies": {
"@babel/runtime": "^7.23.9",
- "@mui/utils": "^5.15.9",
+ "@mui/utils": "^5.15.11",
"prop-types": "^15.8.1"
},
"engines": {
@@ -3725,9 +3713,9 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "5.15.9",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.9.tgz",
- "integrity": "sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og==",
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz",
+ "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==",
"dependencies": {
"@babel/runtime": "^7.23.9",
"@emotion/cache": "^11.11.0",
@@ -3834,9 +3822,9 @@
}
},
"node_modules/@mui/utils": {
- "version": "5.15.9",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.9.tgz",
- "integrity": "sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg==",
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz",
+ "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==",
"dependencies": {
"@babel/runtime": "^7.23.9",
"@types/prop-types": "^15.7.11",
@@ -3978,9 +3966,9 @@
}
},
"node_modules/@octokit/types": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz",
- "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==",
+ "version": "12.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz",
+ "integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==",
"dependencies": {
"@octokit/openapi-types": "^19.1.0"
}
@@ -4024,17 +4012,17 @@
}
},
"node_modules/@react-aria/actiongroup": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-aria/actiongroup/-/actiongroup-3.7.2.tgz",
- "integrity": "sha512-H8VLxkelhppaFGuPCOuZVryKBUeKVhCtkRIlR3ZnVcNR5jV9Qlc1J3rWOmMNJxcVTszXEbOcJL+/xX1fpBhA5g==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/list": "^3.10.2",
- "@react-types/actiongroup": "^3.4.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/actiongroup/-/actiongroup-3.7.3.tgz",
+ "integrity": "sha512-o1qw7w7GdL8vsOuzBc2mil+MM1CWWDDZ1+VhWnVwoDVt5Pxj36981leTh/WTS58IQ34N7p/jVdQMraQ25EJJyA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/actiongroup": "^3.4.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4043,15 +4031,15 @@
}
},
"node_modules/@react-aria/breadcrumbs": {
- "version": "3.5.10",
- "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.10.tgz",
- "integrity": "sha512-Z6UMVvobmBg4uLewAXkp9/X6AFN+S/4uHk3IShHCaI8ONNZrIewbPYR1B9qNsgMMnYWmDfaOp40krdJSgYdGUw==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/link": "^3.6.4",
- "@react-aria/utils": "^3.23.1",
- "@react-types/breadcrumbs": "^3.7.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.11.tgz",
+ "integrity": "sha512-bQz4g2tKvcWxeqPGj9O0RQf++Ka8f2o/pJMJB+QQ27DVQWhxpQpND//oFku2aFYkxHB/fyD9qVoiqpQR25bidw==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/link": "^3.6.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/breadcrumbs": "^3.7.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4059,16 +4047,16 @@
}
},
"node_modules/@react-aria/button": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.2.tgz",
- "integrity": "sha512-7ZVUASmdOdi1FNP528oDggxO1SNoAhyuMutaJd7nNBjAJ4Zagi/T9qaAFoVha1hyejfLY/ZzXRdWhnkUYljSbA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/button": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.3.tgz",
+ "integrity": "sha512-ZXo2VGTxfbaTEnfeIlm5ym4vYpGAy8sGrad8Scv+EyDAJWLMKokqctfaN6YSWbqUApC3FN63IvMqASflbmnYig==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4076,19 +4064,19 @@
}
},
"node_modules/@react-aria/calendar": {
- "version": "3.5.5",
- "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.5.tgz",
- "integrity": "sha512-9CmW7mwIJwuM8wsw4W8ads3mxUftaSSfYaWH1h+m0C9ycNJ1FP2QO+re4I821+LhuuyJTj1GOUJ7Tzk+c9yWJA==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/calendar": "^3.4.3",
- "@react-types/button": "^3.9.1",
- "@react-types/calendar": "^3.4.3",
- "@react-types/shared": "^3.22.0",
+ "version": "3.5.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.6.tgz",
+ "integrity": "sha512-PA0Ur5WcODMn7t2gCUvq61YktkB+WlSZjzDr5kcY3sdl53ZjiyqCa2hYgrb6R0J859LVJXAp+5Qaproz8g1oLA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/calendar": "^3.4.4",
+ "@react-types/button": "^3.9.2",
+ "@react-types/calendar": "^3.4.4",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4097,20 +4085,20 @@
}
},
"node_modules/@react-aria/checkbox": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.0.tgz",
- "integrity": "sha512-eOIeIIhnoQkin+1kmz+pv/YjRSkMWAF4uyi1THwkTlLZmpJvxUqEbSzQhfBEH30tKAlFLAcpY3+XOUCm74tHng==",
- "dependencies": {
- "@react-aria/form": "^3.0.2",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/toggle": "^3.10.1",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/checkbox": "^3.6.2",
- "@react-stately/form": "^3.0.0",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/checkbox": "^3.7.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.1.tgz",
+ "integrity": "sha512-b4rtrg5SpRSa9jBOqzJMmprJ+jDi3KyVvUh+DsvISe5Ti7gVAhMBgnca1D0xBp22w2jhk/o4gyu1bYxGLum0GA==",
+ "dependencies": {
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/toggle": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/checkbox": "^3.6.3",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4118,24 +4106,24 @@
}
},
"node_modules/@react-aria/combobox": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.8.3.tgz",
- "integrity": "sha512-7SteX1MjDV0077IZVMuaXAuIiSaQeGYh1sT5Y6eDOCiOArkPaEmXWzCjBDkLYex0jl6z51gl0gLU3dwq9kB6Gw==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/listbox": "^3.11.4",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/menu": "^3.13.0",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/textfield": "^3.14.2",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/combobox": "^3.8.1",
- "@react-stately/form": "^3.0.0",
- "@react-types/button": "^3.9.1",
- "@react-types/combobox": "^3.10.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.8.4.tgz",
+ "integrity": "sha512-HyTWIo2B/0xq0Of+sDEZCfJyf4BvCvDYIWG4UhjqL1kHIHIGQyyr+SldbVUjXVYnk8pP1eGB3ttiREujjjALPQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/listbox": "^3.11.5",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/textfield": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/combobox": "^3.8.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/combobox": "^3.10.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4144,27 +4132,27 @@
}
},
"node_modules/@react-aria/datepicker": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.9.2.tgz",
- "integrity": "sha512-8iTfhHEfPPmf7DmqnzCttvzZms15CstAVdvbOVqUuBqH8Ai693aIuVfOEkyqL5Vqohy4/+ViA5LZ3WM4m7QLiQ==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@internationalized/number": "^3.5.0",
- "@internationalized/string": "^3.2.0",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/form": "^3.0.2",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/spinbutton": "^3.6.2",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/datepicker": "^3.9.1",
- "@react-stately/form": "^3.0.0",
- "@react-types/button": "^3.9.1",
- "@react-types/calendar": "^3.4.3",
- "@react-types/datepicker": "^3.7.1",
- "@react-types/dialog": "^3.5.7",
- "@react-types/shared": "^3.22.0",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.9.3.tgz",
+ "integrity": "sha512-1AjCAizd88ACKjVNhFazX4HZZFwWi2rsSlGCTm66Nx6wm5N/Cpbm466dpYEFyQUsKSOG4CC65G1zfYoMPe48MQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@internationalized/number": "^3.5.1",
+ "@internationalized/string": "^3.2.1",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/spinbutton": "^3.6.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/datepicker": "^3.9.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/calendar": "^3.4.4",
+ "@react-types/datepicker": "^3.7.2",
+ "@react-types/dialog": "^3.5.8",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4173,15 +4161,15 @@
}
},
"node_modules/@react-aria/dialog": {
- "version": "3.5.11",
- "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.11.tgz",
- "integrity": "sha512-oT+FBOtPZRWVBxPt1K8F5XaKGYpi+ZV3oFFzub8w+D6m+9WN4pktUx7YBz95Kunw7M1HcAsyQZX0fsAuDPL7Rw==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-types/dialog": "^3.5.7",
- "@react-types/shared": "^3.22.0",
+ "version": "3.5.12",
+ "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.12.tgz",
+ "integrity": "sha512-7UJR/h/Y364u6Ltpw0bT51B48FybTuIBacGpEJN5IxZlpxvQt0KQcBDiOWfAa/GQogw4B5hH6agaOO0nJcP49Q==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/dialog": "^3.5.8",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4190,19 +4178,19 @@
}
},
"node_modules/@react-aria/dnd": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.5.2.tgz",
- "integrity": "sha512-isEYONbkZMvx1DUmeAo/NwazFz9ZEKdosszWDhzxSk6a38C5kAHBIV2GBntwsL3W9EQn1fzUY/X13ykcHvjJAA==",
- "dependencies": {
- "@internationalized/string": "^3.2.0",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/dnd": "^3.2.7",
- "@react-types/button": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.5.3.tgz",
+ "integrity": "sha512-0gi6sRnr97fSQnGy+CMt+99/+vVqr+qv2T9Ts8X9TAzxHNokz5QfSL88QSlTU36EnAVLxPY18iZQWCExSjKpEQ==",
+ "dependencies": {
+ "@internationalized/string": "^3.2.1",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/dnd": "^3.2.8",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4211,13 +4199,13 @@
}
},
"node_modules/@react-aria/focus": {
- "version": "3.16.1",
- "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.16.1.tgz",
- "integrity": "sha512-3ZEYc+hWqDQX7fA54ZOTkED8OGXs9+K9fYmjD1IdjZJAJS/2/AJ95PgIQ29zBkl9D9TAi4Nb3tJ/3+H/02UzoA==",
+ "version": "3.16.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.16.2.tgz",
+ "integrity": "sha512-Rqo9ummmgotESfypzFjI3uh58yMpL+E+lJBbQuXkBM0u0cU2YYzu0uOrFrq3zcHk997udZvq1pGK/R+2xk9B7g==",
"dependencies": {
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0",
"clsx": "^2.0.0"
},
@@ -4226,14 +4214,14 @@
}
},
"node_modules/@react-aria/form": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.2.tgz",
- "integrity": "sha512-iQBbol9vSPd+s2rNlkmu646wGlrDNr/u+Uf/NRXNl5MNvDIWAQ3mliGL1ERGtT5GGq0WzSka4hjbzwf67BdQKw==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.3.tgz",
+ "integrity": "sha512-5Q2BHE4TTPDzGY2npCzpRRYshwWUb3SMUA/Cbz7QfEtBk+NYuVaq3KjvqLqgUUdyKtqLZ9Far0kIAexloOC4jw==",
"dependencies": {
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/form": "^3.0.0",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4241,23 +4229,23 @@
}
},
"node_modules/@react-aria/grid": {
- "version": "3.8.7",
- "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.8.7.tgz",
- "integrity": "sha512-gpWiZptCA+65jVbCu9vzkfBfzfgLucSOZFy9P+fVrGB6fE6pDGj13oyyr+Nmr6jihQmOv+y9eJsU7u9Xlyl2Xg==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/grid": "^3.8.4",
- "@react-stately/selection": "^3.14.2",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/checkbox": "^3.7.0",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
+ "version": "3.8.8",
+ "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.8.8.tgz",
+ "integrity": "sha512-7Bzbya4tO0oIgqexwRb8D6ZdC0GASYq9f/pnkrqocgvG9e1SCld4zOioKbYQDvAK/NnbCgXmmdqFAcLM/iazaA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/grid": "^3.8.5",
+ "@react-stately/selection": "^3.14.3",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4266,18 +4254,18 @@
}
},
"node_modules/@react-aria/gridlist": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.7.4.tgz",
- "integrity": "sha512-9GeKXfMd4WqyaRs7PMvuL9ryLND0EBkgf14dycbZCb/QKxgNYRLPFZN6fV3LiMh2CiqAXEpmDOo60PxSxh618A==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/grid": "^3.8.7",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/list": "^3.10.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.7.5.tgz",
+ "integrity": "sha512-RmHEJ++vngHYEWbUCtLLmGh7H3vNd2Y9S0q/9SgHFPbqPZycT5mxDZ2arqpOXeHRVRvPBaW9ZlMxI2bPOePrYw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/grid": "^3.8.8",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4286,17 +4274,17 @@
}
},
"node_modules/@react-aria/i18n": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.10.1.tgz",
- "integrity": "sha512-o05AozIXhropvN8vg0YD0Z0vajYuaALxB1+Km00FE5uGim4u2UKeBXqAk+8QsOs4CHg91paa3C15DcTDDEMJSg==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@internationalized/message": "^3.1.1",
- "@internationalized/number": "^3.5.0",
- "@internationalized/string": "^3.2.0",
- "@react-aria/ssr": "^3.9.1",
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.10.2.tgz",
+ "integrity": "sha512-Z1ormoIvMOI4mEdcFLYsoJy9w/EzBdBmgfLP+S/Ah+1xwQOXpgwZxiKOhYHpWa0lf6hkKJL34N9MHJvCJ5Crvw==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@internationalized/message": "^3.1.2",
+ "@internationalized/number": "^3.5.1",
+ "@internationalized/string": "^3.2.1",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4304,13 +4292,13 @@
}
},
"node_modules/@react-aria/interactions": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.0.tgz",
- "integrity": "sha512-sPuzEl4Xq/BR5gbYr2R/sDzwlX9NdJ02i8Ew2rEy2hLMlf1jAeUAdTg/G+K9baWJ8acV9fZv6h/mdV3dXGLPSg==",
+ "version": "3.21.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.1.tgz",
+ "integrity": "sha512-AlHf5SOzsShkHfV8GLLk3v9lEmYqYHURKcXWue0JdYbmquMRkUsf/+Tjl1+zHVAQ8lKqRnPYbTmc4AcZbqxltw==",
"dependencies": {
- "@react-aria/ssr": "^3.9.1",
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4318,12 +4306,12 @@
}
},
"node_modules/@react-aria/label": {
- "version": "3.7.5",
- "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.5.tgz",
- "integrity": "sha512-1hlTer4X9zlzC2PHC9SlAeY/E55dYyzxxpM75kqhtma8XFgDUB0Rztvi+R/Uenl0VDuy1Ny95OdhBM0j70qBnA==",
+ "version": "3.7.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.6.tgz",
+ "integrity": "sha512-ap9iFS+6RUOqeW/F2JoNpERqMn1PvVIo3tTMrJ1TY1tIwyJOxdCBRgx9yjnPBnr+Ywguep+fkPNNi/m74+tXVQ==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4331,15 +4319,15 @@
}
},
"node_modules/@react-aria/link": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.6.4.tgz",
- "integrity": "sha512-oCUWAvnJYD7IUR6ujQJqCChiSFJMsBncoInMvfbnlD3ZX5AqLWEPkJUZ7aM8XB6fGEapiYoY1IUHzOM63XsmjQ==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-types/link": "^3.5.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.6.5.tgz",
+ "integrity": "sha512-kg8CxKqkciQFzODvLAfxEs8gbqNXFZCW/ISOE2LHYKbh9pA144LVo71qO3SPeYVVzIjmZeW4vEMdZwqkNozecw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/link": "^3.5.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4347,18 +4335,18 @@
}
},
"node_modules/@react-aria/listbox": {
- "version": "3.11.4",
- "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.11.4.tgz",
- "integrity": "sha512-ml2dUy1R0kSuDmFrW0xtAnI04nZBfzLLmINSl1k9N5Tr/PVZ/TVGjFimHfpG7g3uvTxGXpjFfA9DR+2Nyuj/SA==",
- "dependencies": {
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/list": "^3.10.2",
- "@react-types/listbox": "^3.4.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.11.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.11.5.tgz",
+ "integrity": "sha512-y3a3zQYjT+JKgugCMMKS7K9sRoCoP1Z6Fiiyfd77OHXWzh9RlnvWGsseljynmbxLzSuPwFtCYkU1Jz4QwsPUIg==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/listbox": "^3.4.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4367,30 +4355,30 @@
}
},
"node_modules/@react-aria/live-announcer": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.1.tgz",
- "integrity": "sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.2.tgz",
+ "integrity": "sha512-aOyPcsfyY9tLCBhuUaYCruwcd1IrYLc47Ou+J7wMzjeN9v4lsaEfiN12WFl8pDqOwfy6/7It2wmlm5hOuZY8wQ==",
"dependencies": {
"@swc/helpers": "^0.5.0"
}
},
"node_modules/@react-aria/menu": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.13.0.tgz",
- "integrity": "sha512-2vNZV77I36sbAINj3QVbq4yxOfytzQpdQAhHy7QFr7WjvTYqPAVNuD4LgiGn97I5skLRakCs+tGiLgIQGY/0Ig==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/menu": "^3.6.0",
- "@react-stately/tree": "^3.7.5",
- "@react-types/button": "^3.9.1",
- "@react-types/menu": "^3.9.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.13.1.tgz",
+ "integrity": "sha512-jF80YIcvD16Fgwm5pj7ViUE3Dj7z5iewQixLaFVdvpgfyE58SD/ZVU9/JkK5g/03DYM0sjpUKZGkdFxxw8eKnw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/menu": "^3.6.1",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/button": "^3.9.2",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4399,13 +4387,13 @@
}
},
"node_modules/@react-aria/meter": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.10.tgz",
- "integrity": "sha512-8x4Y9NKRzJNPlcU9kn0kflYSLCyMwaIAx0JJFL576+HdZhyIbEPFk/vaaYWbyJgo5xYsicaeynwJ7j6lCyxF8w==",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.11.tgz",
+ "integrity": "sha512-P1G3Jdh0f/uieUDqvc3Ee4wzqBJa7H077BVSC3KPRqEp6YY7JimZGWjOwbFlO2PXhryXm/dI8EzUmh+4ZXjq/g==",
"dependencies": {
- "@react-aria/progress": "^3.4.10",
- "@react-types/meter": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/progress": "^3.4.11",
+ "@react-types/meter": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4413,20 +4401,20 @@
}
},
"node_modules/@react-aria/numberfield": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.0.tgz",
- "integrity": "sha512-fdl+d6sIwHRMiraXMQ5JyPlrmsQ3YECh9W7fzbY3CBcsG9mXVQjoQ50cV7u5VeakLXaBsgL4EmVe/zmTk2G0Aw==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/spinbutton": "^3.6.2",
- "@react-aria/textfield": "^3.14.2",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/form": "^3.0.0",
- "@react-stately/numberfield": "^3.9.0",
- "@react-types/button": "^3.9.1",
- "@react-types/numberfield": "^3.8.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.1.tgz",
+ "integrity": "sha512-JQ1Z+Ho5H+jeav7jt9A4vBsIQR/Dd2CFbObrULjGkqSrnWjARFZBv3gZwmfGCtplEPeAv9buYKHAqebPtJNUww==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/spinbutton": "^3.6.3",
+ "@react-aria/textfield": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/numberfield": "^3.9.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/numberfield": "^3.8.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4435,20 +4423,20 @@
}
},
"node_modules/@react-aria/overlays": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.21.0.tgz",
- "integrity": "sha512-ulE5RQP3ZUFqY6Zok4L/CCZW5HCPZeuyDEezPw4/4Y/WD6TjGZ1ChbPuGsAl+X+fo/iKTpe7joN4kYrKmTb5WA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/ssr": "^3.9.1",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-stately/overlays": "^3.6.4",
- "@react-types/button": "^3.9.1",
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0",
+ "version": "3.21.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.21.1.tgz",
+ "integrity": "sha512-djEBDF+TbIIOHWWNpdm19+z8xtY8U+T+wKVQg/UZ6oWnclSqSWeGl70vu73Cg4HVBJ4hKf1SRx4Z/RN6VvH4Yw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/button": "^3.9.2",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4457,15 +4445,15 @@
}
},
"node_modules/@react-aria/progress": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.10.tgz",
- "integrity": "sha512-q82LbDjimIo5a21Kg9aUYG94oFsDtpAwaQDj2YPVDt9kNie4BHOLHnHZWYk8jPoZDHMEk80jZBKWcDnk8+wWtw==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/label": "^3.7.5",
- "@react-aria/utils": "^3.23.1",
- "@react-types/progress": "^3.5.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.11.tgz",
+ "integrity": "sha512-RePHbS15/KYFiApYLdwazwvWKsB9q0Kn5DGCSb0hqCC+k2Eui8iVVOsegswiP+xqkk/TiUCIkBEw22W3Az4kTg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/progress": "^3.5.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4473,19 +4461,19 @@
}
},
"node_modules/@react-aria/radio": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.1.tgz",
- "integrity": "sha512-UEeQncLloHz/H4iwHbiBXiYLCDsMmRDkL/GMcpUCx0OaQSuKB/kJTOR0rFEMVyCiDVXx7hJ16fcSh1lXpLL9gA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/form": "^3.0.2",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/radio": "^3.10.1",
- "@react-types/radio": "^3.7.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.2.tgz",
+ "integrity": "sha512-CTUTR+qt3BLjmyQvKHZuVm+1kyvT72ZptOty++sowKXgJApTLdjq8so1IpaLAr8JIfzqD5I4tovsYwIQOX8log==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/radio": "^3.10.2",
+ "@react-types/radio": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4493,17 +4481,17 @@
}
},
"node_modules/@react-aria/searchfield": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.2.tgz",
- "integrity": "sha512-YpmvbWOgECTK9KjMYqWwSFPi57b7m0rdAQPMjB3Call0CE7tQiSP5TbwkpOa4Id8Kghm8ySV5fNkBKP2xhHxdg==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/textfield": "^3.14.2",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/searchfield": "^3.5.0",
- "@react-types/button": "^3.9.1",
- "@react-types/searchfield": "^3.5.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.3.tgz",
+ "integrity": "sha512-mnYI969R7tU3yMRIGmY1+peq7tmEW0W3MB/J2ImK36Obz/91tTtspHHEeFtPlQDLIyvVPB0Ucam4LIxCKPJm/Q==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/textfield": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/searchfield": "^3.5.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/searchfield": "^3.5.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4511,23 +4499,23 @@
}
},
"node_modules/@react-aria/select": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.14.2.tgz",
- "integrity": "sha512-8kwqzNwJI+oC8PqotElEeWF24Ae58nnyeujcM0yCnuglTGqacGqCHmAOFHb99SxxSXmNC6OppAZNmRV3kUxdLA==",
- "dependencies": {
- "@react-aria/form": "^3.0.2",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/listbox": "^3.11.4",
- "@react-aria/menu": "^3.13.0",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-stately/select": "^3.6.1",
- "@react-types/button": "^3.9.1",
- "@react-types/select": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.14.3.tgz",
+ "integrity": "sha512-9KCxI41FI+jTxEfUzRsMdJsZvjkCuuhL4UHig8MZXtXs0nsi7Ir3ezUDQ9m5MSG+ooBYM/CA9DyLDvo5Ioef+g==",
+ "dependencies": {
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/listbox": "^3.11.5",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/select": "^3.6.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/select": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4536,16 +4524,16 @@
}
},
"node_modules/@react-aria/selection": {
- "version": "3.17.4",
- "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.17.4.tgz",
- "integrity": "sha512-COq5qGbJebn9Wbo/3UGluhYLK4uUijuacew/7PgLArHIjiqPvK7kqcQA5Kdwrxzv4Z94f2x9fVf8Uf65zB543Q==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/selection": "^3.14.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.17.5.tgz",
+ "integrity": "sha512-gO5jBUkc7WdkiFMlWt3x9pTSuj3Yeegsxfo44qU5NPlKrnGtPRZDWrlACNgkDHu645RNNPhlyoX0C+G8mUg1xA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/selection": "^3.14.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4554,12 +4542,12 @@
}
},
"node_modules/@react-aria/separator": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.10.tgz",
- "integrity": "sha512-/wM8yOY0XPWDJXbyiKo9lgDTePDCa0ZDoXAn+Hg4dwh6lQLBmEQBugN5sVJJ4BBdbyQbcRZcI2+eM4DfcU2kNg==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.11.tgz",
+ "integrity": "sha512-UTla+3P2pELpP73WSfbwZgP1y1wODFBQbEOHnUxxO8ocyaUyQLJdvc07bBLLpPoyutlggRG0v9ACo0Rui7AjOg==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4567,18 +4555,18 @@
}
},
"node_modules/@react-aria/slider": {
- "version": "3.7.5",
- "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.5.tgz",
- "integrity": "sha512-AV0ZDWmdO8mvh3wS09uOAoenRCxkqaN7ZYb0rQLRvP2vhZJzaJPaN7/0f9/TLnvrZmmUspm4IqXD+Ci9q49lWA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/slider": "^3.5.1",
- "@react-types/shared": "^3.22.0",
- "@react-types/slider": "^3.7.0",
+ "version": "3.7.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.6.tgz",
+ "integrity": "sha512-ZeZhyHzhk9gxGuThPKgX2K3RKsxPxsFig1iYoJvqP8485NtHYQIPht2YcpEKA9siLxGF0DR9VCfouVhSoW0AEA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/slider": "^3.5.2",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/slider": "^3.7.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4586,15 +4574,15 @@
}
},
"node_modules/@react-aria/spinbutton": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.2.tgz",
- "integrity": "sha512-ivrSmyjm/FSEBBD/Io3cwad88Kx8CiulLXZNJPvvEsTrsowDIyaLZ55oTrNIXXQZJY4Ns9ccaQUwD+QGBX/eIQ==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/utils": "^3.23.1",
- "@react-types/button": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.3.tgz",
+ "integrity": "sha512-IlfhRu/pc9zOt2C5zSEB7NmmzddvWisGx2iGzw8BwIKMD+cN3uy+Qwp+sG6Z/JzFEBN0F6Mxm3l5lhbiqjpICQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4603,9 +4591,9 @@
}
},
"node_modules/@react-aria/ssr": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.1.tgz",
- "integrity": "sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==",
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.2.tgz",
+ "integrity": "sha512-0gKkgDYdnq1w+ey8KzG9l+H5Z821qh9vVjztk55rUg71vTk/Eaebeir+WtzcLLwTjw3m/asIjx8Y59y1lJZhBw==",
"dependencies": {
"@swc/helpers": "^0.5.0"
},
@@ -4617,13 +4605,13 @@
}
},
"node_modules/@react-aria/switch": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.1.tgz",
- "integrity": "sha512-WaDJ4KJlrYvkLK4h3/KRGRfHlYjPmqDEh83ya0wtkZbKZte7/2+a1bnpwcrQeTmuDVSPthiieL1dQggg8sOuxA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.2.tgz",
+ "integrity": "sha512-X5m/omyhXK+V/vhJFsHuRs2zmt9Asa/RuzlldbXnWohLdeuHMPgQnV8C9hg3f+sRi3sh9UUZ64H61pCtRoZNwg==",
"dependencies": {
- "@react-aria/toggle": "^3.10.1",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/switch": "^3.5.0",
+ "@react-aria/toggle": "^3.10.2",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/switch": "^3.5.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4631,25 +4619,25 @@
}
},
"node_modules/@react-aria/table": {
- "version": "3.13.4",
- "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.13.4.tgz",
- "integrity": "sha512-dhYumqv2kCH3LOtmXJlq0Qc3VVFwaDaHaTV6xgen2EZxUZQa3mZDoCoxSu8/w3LvKwQAk+NAOqmrOHzMMyOlOQ==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/grid": "^3.8.7",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/flags": "^3.0.0",
- "@react-stately/table": "^3.11.5",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/checkbox": "^3.7.0",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
- "@react-types/table": "^3.9.2",
+ "version": "3.13.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.13.5.tgz",
+ "integrity": "sha512-P2nHEDk2CCoEbMFKNCyBC9qvmv7F/IXARDt/7z/J4mKFgU2iNSK+/zw6yrb38q33Zlk8hDaqSYNxHlMrh+/1MQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/grid": "^3.8.8",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/flags": "^3.0.1",
+ "@react-stately/table": "^3.11.6",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/table": "^3.9.3",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4658,17 +4646,17 @@
}
},
"node_modules/@react-aria/tabs": {
- "version": "3.8.4",
- "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.8.4.tgz",
- "integrity": "sha512-q8c3QorgVqi9hxa1FisWuZ5rRkS0EyzynmJ2hNhyznIlGuMP30HsnsTIf1Y+hNNj3ofL04Xc5BkJpLrQvsBPAQ==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/tabs": "^3.6.3",
- "@react-types/shared": "^3.22.0",
- "@react-types/tabs": "^3.3.4",
+ "version": "3.8.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.8.5.tgz",
+ "integrity": "sha512-Jvt33/W+66n5oCxVwHAYarJ3Fit61vULiPcG7uTez0Mf11cq/C72wOrj+ZuNz6PTLTi2veBNQ7MauY72SnOjRg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tabs": "^3.6.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tabs": "^3.3.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4677,19 +4665,19 @@
}
},
"node_modules/@react-aria/tag": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.3.2.tgz",
- "integrity": "sha512-AWgwRBwhhrmfdvvV7cSp3VTsLkw1e04IKQCKss3hF7zd75T+LfwvCa8g4CUDsFXx3lvIh0rB/6evhBfn3D0rDw==",
- "dependencies": {
- "@react-aria/gridlist": "^3.7.4",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/list": "^3.10.2",
- "@react-types/button": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.3.3.tgz",
+ "integrity": "sha512-tlJD9qj1XcsPIZD7DVJ6tWv8t7Z87/8qkbRDx7ugNqeHso9z0WqH9ZkSt17OFUWE2IQIk3V8D3iBSOtmhXcZGQ==",
+ "dependencies": {
+ "@react-aria/gridlist": "^3.7.5",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4698,18 +4686,18 @@
}
},
"node_modules/@react-aria/textfield": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.2.tgz",
- "integrity": "sha512-l9FulRr7Kpchy+dt0hIZ7rMwMReJrZnjeWT7iwmZWFMleEYjSuRUnmM+L82oZBY9BSwftJ5kk6vG4AP7MLBulg==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/form": "^3.0.2",
- "@react-aria/label": "^3.7.5",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/form": "^3.0.0",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
- "@react-types/textfield": "^3.9.0",
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.3.tgz",
+ "integrity": "sha512-wPSjj/mTABspYQdahg+l5YMtEQ3m5iPCTtb5g6nR1U1rzJkvS4i5Pug6PUXeLeMz2H3ToflPWGlNOqBioAFaOQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/textfield": "^3.9.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4717,15 +4705,15 @@
}
},
"node_modules/@react-aria/toggle": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.1.tgz",
- "integrity": "sha512-Z+T/fyWvglLDMsNDCee/OF3Josntzlfq1/Iez+ShqIaSI/FgZIjglQbEFqXvM9gSGOX1fYfv9n4Ztj6DDT6J2Q==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/checkbox": "^3.7.0",
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.2.tgz",
+ "integrity": "sha512-DgitscHWgI6IFgnvp2HcMpLGX/cAn+XX9kF5RJQbRQ9NqUgruU5cEEGSOLMrEJ6zXDa2xmOiQ+kINcyNhA+JLg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/checkbox": "^3.7.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4733,16 +4721,16 @@
}
},
"node_modules/@react-aria/tooltip": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.1.tgz",
- "integrity": "sha512-2lf72hIw3gfQLvKU9SHkh3a/CP8GJ3MbKlPq8x0gX7444zaYII/UDqIkde1TiR2fB71I/MqKSOx6mg28B9lj4w==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/tooltip": "^3.4.6",
- "@react-types/shared": "^3.22.0",
- "@react-types/tooltip": "^3.4.6",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.2.tgz",
+ "integrity": "sha512-6jXOSGPao3gPgUQWLbH2r/jxGMqIaIKrJgfwu9TQrh+UkwwiTYW20EpEDCYY2nRFlcoi7EYAiPDSEbHCwXS7Lg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tooltip": "^3.4.7",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tooltip": "^3.4.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4750,13 +4738,13 @@
}
},
"node_modules/@react-aria/utils": {
- "version": "3.23.1",
- "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.23.1.tgz",
- "integrity": "sha512-iXibf9ojqdoygbvy/++v5cKLKgjc/5ZmKV8/9u/2Hkpha1cf5Td/Z+Vl42B6giUBAsuDio5kuZYfYC7Uk+t8ag==",
+ "version": "3.23.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.23.2.tgz",
+ "integrity": "sha512-yznR9jJ0GG+YJvTMZxijQwVp+ahP66DY0apZf7X+dllyN+ByEDW+yaL1ewYPIpugxVzH5P8jhnBXsIyHKN411g==",
"dependencies": {
- "@react-aria/ssr": "^3.9.1",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0",
"clsx": "^2.0.0"
},
@@ -4765,15 +4753,15 @@
}
},
"node_modules/@react-aria/virtualizer": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-3.9.9.tgz",
- "integrity": "sha512-nso567w/vEd5wRLqF2tJF24XYx9wnf0NxrJZW/26xUVSUBgIy4QkYjxb2ylWQCLiRe8iA6xfC27dyvJVeQXwUg==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/shared": "^3.22.0",
+ "version": "3.9.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-3.9.10.tgz",
+ "integrity": "sha512-oDvGgexK6phB9XECWvAaKTq/nRKxHjmJSiZ2gv9j72JFoky4iVEHKAV6Qnar0VBcEpk16JcJVI/wf1xr9F+sjQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4782,13 +4770,13 @@
}
},
"node_modules/@react-aria/visually-hidden": {
- "version": "3.8.9",
- "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.9.tgz",
- "integrity": "sha512-yUUj4M8YjtwzS45n0nB4bCKCYd3Dl6wmCZKAcAqZG9hMh6DUAcSp2xqYKOAzvNrtZZmAoopgMP4UC9hKlY6swQ==",
+ "version": "3.8.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.10.tgz",
+ "integrity": "sha512-np8c4wxdbE7ZrMv/bnjwEfpX0/nkWy9sELEb0sK8n4+HJ+WycoXXrVxBUb9tXgL/GCx5ReeDQChjQWwajm/z3A==",
"dependencies": {
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4823,24 +4811,24 @@
"integrity": "sha512-x9ibmsP0ZVqzyCo1Pitbw+4b6iEXRw/r1TCy3vOUR3eKrzWLnHYZMR325BkZW2r8fnuWE/V3Fp4QZOP9qYORCw=="
},
"node_modules/@react-spectrum/actionbar": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/actionbar/-/actionbar-3.4.2.tgz",
- "integrity": "sha512-7vgDP/Q+GbkZN5bMspqUnpVBXDysaznN15s0ZtShOwfWSqbBFHFzMSKcH7IzQoF1C49TWOKwy6LEOGAsfG0RnA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/live-announcer": "^3.3.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/actiongroup": "^3.10.2",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-types/actionbar": "^3.1.4",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/actionbar/-/actionbar-3.4.3.tgz",
+ "integrity": "sha512-LIg3a5z0bnFIkA1teaGUo/RdT4ZKPpUUF0RxPSm0nHWEzolSgD7BN4ijK5UxsDLA2cfNxv78s+vwHHKkKnsjSA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/live-announcer": "^3.3.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/actiongroup": "^3.10.3",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-types/actionbar": "^3.1.5",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4850,25 +4838,25 @@
}
},
"node_modules/@react-spectrum/actiongroup": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/actiongroup/-/actiongroup-3.10.2.tgz",
- "integrity": "sha512-8IslvMwN0c0+PaZfn6zdQokefpUynyQjUPOJMrDcP6CFUKrNkjEexxwipSmgw0OGb1AdGCzCAXpqNXGS0OwBVw==",
- "dependencies": {
- "@react-aria/actiongroup": "^3.7.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/menu": "^3.18.0",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/tooltip": "^3.6.4",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/list": "^3.10.2",
- "@react-types/actiongroup": "^3.4.6",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
- "@spectrum-icons/workflow": "^4.2.9",
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/actiongroup/-/actiongroup-3.10.3.tgz",
+ "integrity": "sha512-VJASE+Y75Q885z9mx7CVELrX8PuZPbRnGFQnkoRnwZOTpMVZM6wQxA4IcAfsFVvaVIpHgBwtQTI1Ib+gAdtqgw==",
+ "dependencies": {
+ "@react-aria/actiongroup": "^3.7.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/menu": "^3.18.1",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/tooltip": "^3.6.5",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/actiongroup": "^3.4.7",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
+ "@spectrum-icons/workflow": "^4.2.10",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4878,14 +4866,14 @@
}
},
"node_modules/@react-spectrum/avatar": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@react-spectrum/avatar/-/avatar-3.0.9.tgz",
- "integrity": "sha512-zGgfK7tAFOJ9FvJdlvpi++L6YF/RFBONlfJ/acCcls/ki+spzzlmmtml/RFzzO//4vsw/5iayfknWsYdSAl/2g==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/avatar/-/avatar-3.0.10.tgz",
+ "integrity": "sha512-PvsCTTcjNN7QSsa3iCc2UF5LeQCwFNaiR0/xvpk+/ViP1wVq+xFR1tfSrbAq7TAF1B3NQNfI+wepy2ol5l8X2g==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/avatar": "^3.0.4",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/avatar": "^3.0.5",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4894,15 +4882,15 @@
}
},
"node_modules/@react-spectrum/badge": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/badge/-/badge-3.1.10.tgz",
- "integrity": "sha512-XsdwwbtIP0rxI2tRGrA3Nf46GSsekoO0tt1A/69P7dU230LkxTdILMLABCblP/lb6gxa1ksXkbWvB93L9ScDzw==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/badge": "^3.1.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.1.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/badge/-/badge-3.1.11.tgz",
+ "integrity": "sha512-YOuUBdWmqDQQrNI0uUpazWv/qYmFeDCsJVfQnl/K4J0A6/x7wuvz3iLPJKYuvmqG45/I+WXYFFaNuWOm4jCMzA==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/badge": "^3.1.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4911,22 +4899,22 @@
}
},
"node_modules/@react-spectrum/breadcrumbs": {
- "version": "3.9.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/breadcrumbs/-/breadcrumbs-3.9.4.tgz",
- "integrity": "sha512-IYo+N6hp6FjZFYZu3eD2tiGDNX+XXluxVKRVX0wCKo7jjylRrEUhaDe0vJ9OZjtmU3RRUzczUHmsnn4maSuAqw==",
- "dependencies": {
- "@react-aria/breadcrumbs": "^3.5.10",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/menu": "^3.18.0",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-types/breadcrumbs": "^3.7.2",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/breadcrumbs/-/breadcrumbs-3.9.5.tgz",
+ "integrity": "sha512-MV1b077f189biweuI8H1/D6F7Nwrao0phYzAKqjaTa8bhXf180ej3VhtEEhrSyEhhMrHG3pPzCCbNUn2VMXDlg==",
+ "dependencies": {
+ "@react-aria/breadcrumbs": "^3.5.11",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/menu": "^3.18.1",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-types/breadcrumbs": "^3.7.3",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4936,22 +4924,22 @@
}
},
"node_modules/@react-spectrum/button": {
- "version": "3.16.1",
- "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.16.1.tgz",
- "integrity": "sha512-B1U4Mwq1BMId4pWJdDG0sgHDC05Ccu2ofoe3iR2444A4yzKpKC5OFr4lZXlevkxrwSLPwCmIBvpkGHxZswvJSA==",
- "dependencies": {
- "@react-aria/button": "^3.9.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/button": "^3.9.1",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.16.2",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/button/-/button-3.16.2.tgz",
+ "integrity": "sha512-T0B4EUeAAfsocTMZpfKYIsPMIbuwjB1+hfbZyBBvWt8gerLiEiPAwt6+ga1YzV7C6aAz2FPeTT+zd/RxouDTPw==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4960,14 +4948,14 @@
}
},
"node_modules/@react-spectrum/buttongroup": {
- "version": "3.6.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/buttongroup/-/buttongroup-3.6.10.tgz",
- "integrity": "sha512-UunM+1u8Fwc5K6Th07ld2JbbP5PEpwt8ezQ+imA2YIeGXS+uKDi36ZCO0BM0VqZ92bd9k2UarZQwza4oRuIWYw==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/buttongroup": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.6.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/buttongroup/-/buttongroup-3.6.11.tgz",
+ "integrity": "sha512-yJv6yBZRLIPYdOAch4FVhdrI0xZz5PPuLiSA6HF/9LlIimALj0qBgCsbQPPThz/UV8+8Y1F76wQUsDcj+iub/A==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/buttongroup": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -4976,25 +4964,25 @@
}
},
"node_modules/@react-spectrum/calendar": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-spectrum/calendar/-/calendar-3.4.6.tgz",
- "integrity": "sha512-uwBOyctISMNgZwpC33tvi5ResoKkcwRmUt8ifQwaYPxUHfUJCja30IQbsIbQ3EcWFkIJsdWgyqOGIhD04XNlPg==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-aria/calendar": "^3.5.5",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/calendar": "^3.4.3",
- "@react-types/button": "^3.9.1",
- "@react-types/calendar": "^3.4.3",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/calendar/-/calendar-3.4.7.tgz",
+ "integrity": "sha512-eBH8SAHHbhprbzk445wnNrW80bnm7Kv5rwmcDBd7/FGb5EhWnQgcQtBo3z79dpCXCl8UtpLsih3eDV9QQSjIDA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@react-aria/calendar": "^3.5.6",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/calendar": "^3.4.4",
+ "@react-types/button": "^3.9.2",
+ "@react-types/calendar": "^3.4.4",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5004,21 +4992,21 @@
}
},
"node_modules/@react-spectrum/checkbox": {
- "version": "3.9.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/checkbox/-/checkbox-3.9.3.tgz",
- "integrity": "sha512-cho26UkAaIldsmHxueLUyjI6LJVAW+8n+M+wibZTW2QAI456G/NS9+bUC1ZRbK+d49meHOk9y6rcKUnzcTq5jg==",
- "dependencies": {
- "@react-aria/checkbox": "^3.14.0",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/checkbox": "^3.6.2",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/checkbox": "^3.7.0",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/checkbox/-/checkbox-3.9.4.tgz",
+ "integrity": "sha512-PzUaSza13wh7YipWJLd/0q/nkAnEnxso7hdvMzDLYcw0iKhXNTM2fUoouUuY1SsbithlF2GS5REYyMpQ4FNO3g==",
+ "dependencies": {
+ "@react-aria/checkbox": "^3.14.1",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/checkbox": "^3.6.3",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5027,34 +5015,34 @@
}
},
"node_modules/@react-spectrum/combobox": {
- "version": "3.12.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/combobox/-/combobox-3.12.2.tgz",
- "integrity": "sha512-w3z9myQ/NYpxh0UQoVhWB9b1QV3wguR+bb3KdBBp3ECgGAOsN7eSe5A+pIWFAjgbBxHWK/JuY0agFs9IWkauOA==",
- "dependencies": {
- "@react-aria/button": "^3.9.2",
- "@react-aria/combobox": "^3.8.3",
- "@react-aria/dialog": "^3.5.11",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/form": "^3.0.2",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/label": "^3.7.5",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/listbox": "^3.12.6",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/textfield": "^3.11.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/combobox": "^3.8.1",
- "@react-types/button": "^3.9.1",
- "@react-types/combobox": "^3.10.0",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.12.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/combobox/-/combobox-3.12.3.tgz",
+ "integrity": "sha512-hskwbdqXSSNEBRYTn3XESSnLGjELU4Lfht3GkZCvcQt02TVvu9NMETSkVe4lwCYV2hwXtPFGyl3jXvmA3MQurQ==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/combobox": "^3.8.4",
+ "@react-aria/dialog": "^3.5.12",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/listbox": "^3.12.7",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/textfield": "^3.11.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/combobox": "^3.8.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/combobox": "^3.10.1",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5064,18 +5052,18 @@
}
},
"node_modules/@react-spectrum/contextualhelp": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/@react-spectrum/contextualhelp/-/contextualhelp-3.6.8.tgz",
- "integrity": "sha512-3o1zCtDeDd3KGoKDS8uAdKcbUke1FPMErjPjhU/viKR/RY2uA2pjpPBpLSLKG3jV2IWOojAnCPvdOk3FVB7dKQ==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/dialog": "^3.8.8",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/contextualhelp": "^3.2.7",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/workflow": "^4.2.9",
+ "version": "3.6.9",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/contextualhelp/-/contextualhelp-3.6.9.tgz",
+ "integrity": "sha512-M0GUmZSLWm6pBAqy0Wwv1srlUPxBSvhQxTxvxtBcRSQwCIE1BcnQ6VaJxlx6n+Ocr14GwYH6MTpD1ZLMUvWeiA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/dialog": "^3.8.9",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/contextualhelp": "^3.2.8",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/workflow": "^4.2.10",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5085,29 +5073,29 @@
}
},
"node_modules/@react-spectrum/datepicker": {
- "version": "3.9.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/datepicker/-/datepicker-3.9.3.tgz",
- "integrity": "sha512-d8JCrgF7UyET+7tfaNKO+7/vTZ6LDgUqQ7yfMorh/IdM9o8PH1IpRLQlYY3E2o9PFGiP90raI37JEoeoLd0Rwg==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-aria/datepicker": "^3.9.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/calendar": "^3.4.6",
- "@react-spectrum/dialog": "^3.8.8",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-spectrum/view": "^3.6.7",
- "@react-stately/datepicker": "^3.9.1",
- "@react-types/datepicker": "^3.7.1",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
- "@spectrum-icons/workflow": "^4.2.9",
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/datepicker/-/datepicker-3.9.4.tgz",
+ "integrity": "sha512-NyFIH68WqbGajBMe/UMxZDwNwaPL/AKJeLC9CY+GcLp4uncWjI42LdcoBPSQFoEJHLtJlLhx+r7qWO/PMOhg3Q==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@react-aria/datepicker": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/calendar": "^3.4.7",
+ "@react-spectrum/dialog": "^3.8.9",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-spectrum/view": "^3.6.8",
+ "@react-stately/datepicker": "^3.9.2",
+ "@react-types/datepicker": "^3.7.2",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
+ "@spectrum-icons/workflow": "^4.2.10",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5117,28 +5105,28 @@
}
},
"node_modules/@react-spectrum/dialog": {
- "version": "3.8.8",
- "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.8.8.tgz",
- "integrity": "sha512-4FJG/B287UKh67+3QQfJ6ZoTS0PSZ+H7DTbtRgS0+t47EL8R1z09LsPSLysB7s9ZUUTvYgYfUqCJwADHipe/ng==",
- "dependencies": {
- "@react-aria/dialog": "^3.5.11",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/buttongroup": "^3.6.10",
- "@react-spectrum/divider": "^3.5.10",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-spectrum/view": "^3.6.7",
- "@react-stately/overlays": "^3.6.4",
- "@react-types/button": "^3.9.1",
- "@react-types/dialog": "^3.5.7",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.8.9",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/dialog/-/dialog-3.8.9.tgz",
+ "integrity": "sha512-CxyARi0qYOJi24YVqXZp7tHVreYQoYc7+VBZzcn8dTbIL1CSxcSGbRGXOpHiaAejZ9/3lPm/PTbrWrKUBLbckA==",
+ "dependencies": {
+ "@react-aria/dialog": "^3.5.12",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/buttongroup": "^3.6.11",
+ "@react-spectrum/divider": "^3.5.11",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-spectrum/view": "^3.6.8",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/button": "^3.9.2",
+ "@react-types/dialog": "^3.5.8",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5148,14 +5136,14 @@
}
},
"node_modules/@react-spectrum/divider": {
- "version": "3.5.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/divider/-/divider-3.5.10.tgz",
- "integrity": "sha512-KcvVGd0fKwsveD7JPtz6DY/VBzI/kRWqr9kX7tC5dhSB/ob5C9EPABePQk1ei2C02/VX7GUF5zpL1PxpRZlxOg==",
- "dependencies": {
- "@react-aria/separator": "^3.3.10",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/divider": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/divider/-/divider-3.5.11.tgz",
+ "integrity": "sha512-u6pyqBEc4JRpntF+KGuzmkzn+rJh04kfvjJ3Tx4F9IucaY8xCfglhunf6/yvRqQB0VaMdlxKy5BGhHgBJzUBiA==",
+ "dependencies": {
+ "@react-aria/separator": "^3.3.11",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/divider": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5163,13 +5151,13 @@
}
},
"node_modules/@react-spectrum/dnd": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/dnd/-/dnd-3.3.7.tgz",
- "integrity": "sha512-PxODjyRbBLvHmE8ivsvm8BL+pkmyyG1HhlqvxFdlYq6wkWNwINuMBvn531B5AgJb2wwz6jKZ2PSAxegTxaxFrw==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/dnd/-/dnd-3.3.8.tgz",
+ "integrity": "sha512-GfLqduIBpH2LArBsFpNa4i9cYeFg7lJpqwrLVJRl96DbhdXEcwt9a4tqvsegkqKn6KPHDPG7uTX0OqPoQJluXQ==",
"dependencies": {
- "@react-aria/dnd": "^3.5.2",
- "@react-stately/dnd": "^3.2.7",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/dnd": "^3.5.3",
+ "@react-stately/dnd": "^3.2.8",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5179,15 +5167,15 @@
}
},
"node_modules/@react-spectrum/form": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/form/-/form-3.7.3.tgz",
- "integrity": "sha512-KYnRXwYPpEnFLxLMm2GQwXwA3RvNNilLdLykksH2N0x30YYKU+QCU+6RMVKv1jpTSTXdFK8q+pjXMpmbEDib3g==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/form": "^3.0.0",
- "@react-types/form": "^3.7.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/form/-/form-3.7.4.tgz",
+ "integrity": "sha512-xAS6vFM6dzKJc7gkC8Qy76VXLxZ9VqPZq4xxQeySvsO8pOujTFCL97QkS0mDjMOdpu72VDIF5JegK1Edlewr7g==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/form": "^3.0.1",
+ "@react-types/form": "^3.7.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5196,13 +5184,13 @@
}
},
"node_modules/@react-spectrum/icon": {
- "version": "3.7.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/icon/-/icon-3.7.10.tgz",
- "integrity": "sha512-vz5vaFeJK9trnzKCzCusHZbk62c0x7CYznBthxXUj+8vLr5VBfwHxsdJe20dcOyjEj3klA/nUTtUf2GZ6jPWEg==",
+ "version": "3.7.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/icon/-/icon-3.7.11.tgz",
+ "integrity": "sha512-CTvbukq0g2oEjMqwMDx2qjfmFAv6u7/KwHRn9pGf6BUiU53Zlnl6Fjtm+c9cw8d9GcwlXyIWYBMIKyMm4+7g5A==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5211,15 +5199,15 @@
}
},
"node_modules/@react-spectrum/illustratedmessage": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/illustratedmessage/-/illustratedmessage-3.4.10.tgz",
- "integrity": "sha512-Kl6MYZ2FYsXT9/G+VZ2fwZIENhWtVEGiXLqBww7oeSUw1S9HuCQU4xhvp1Jln3/4RUihEiaKbCukJtzwSIohBA==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/illustratedmessage": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/illustratedmessage/-/illustratedmessage-3.4.11.tgz",
+ "integrity": "sha512-KJdcF+YY2rPZBTP5P38MEQBoNLglP1QUaCmbPH8a5dSZ+wj5EsOgseFa0fxAEZ23q9Wo9Fv9P9niRq0/479KTQ==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/illustratedmessage": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5228,14 +5216,14 @@
}
},
"node_modules/@react-spectrum/image": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/image/-/image-3.4.10.tgz",
- "integrity": "sha512-r7guBwH6sjx/GlGwT/qGYO3T+IZHczrkMKleWS1mxB/8lc75R9+4lxD7AY/DZzgyvKMvX+hJltakPMFN/eCdJA==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/image": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/image/-/image-3.4.11.tgz",
+ "integrity": "sha512-pzYubgkkC5Ic3eKrNlPUFPbVUTUvZ7DObmGpQvmgmG0xipmUAscYKFEBr4LhCsy/29Sm7Tz4zsGUdA2vM5eA8g==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/image": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5244,17 +5232,17 @@
}
},
"node_modules/@react-spectrum/inlinealert": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/inlinealert/-/inlinealert-3.2.2.tgz",
- "integrity": "sha512-PZsHIeMsrZy66WyXmYlWd1RCISulz4Afloslg3mHHsJC6nsafbqXxDLoDZM+8BvH8eXRV0zroBG22nbY3V+5Og==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/inlinealert/-/inlinealert-3.2.3.tgz",
+ "integrity": "sha512-NX1bZvmI3EOBTRWaT4dzVyFxAuePPbXASZeJ4/wAnhvWDN65rKrctn+VZW3x6ZQoZ/WkQl4qW1txjVcLHkRBWg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5263,18 +5251,18 @@
}
},
"node_modules/@react-spectrum/label": {
- "version": "3.16.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/label/-/label-3.16.3.tgz",
- "integrity": "sha512-RR/oEICzx2GeEC2w4CV5hoodv2Iz8bmb5z8yF98190yOBGWq8ai+gq0JXYOwqBj2McRmp5AaWgecj8HhGmdV2Q==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/label": "^3.9.0",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.16.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/label/-/label-3.16.4.tgz",
+ "integrity": "sha512-38hk6wqUwDCyYeScF1NIaxlPaltkTRTv6/XtIkm528eilLyOMxtMGXcP0Bl7nv0oDLxDZSm9TkgXjN24SyY0KQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/label": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5283,16 +5271,16 @@
}
},
"node_modules/@react-spectrum/labeledvalue": {
- "version": "3.1.11",
- "resolved": "https://registry.npmjs.org/@react-spectrum/labeledvalue/-/labeledvalue-3.1.11.tgz",
- "integrity": "sha512-OW4fHEVoVhp/A/urNSns9mvrBYmBNDgvR4R4fCpfio5AXevYUqgIzYmTSMY8LUWa9+EkbtCnp5JSmD3KM25wrA==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/labeledvalue/-/labeledvalue-3.1.12.tgz",
+ "integrity": "sha512-Pa/eYf9FKr8QF7xKLoCv6a+Ezudfi7N1jFJLZ71zaVcDOcNByYKiy1lAquwLB+36PpsWt/EwKLE2/U7OuiWyfQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5301,14 +5289,14 @@
}
},
"node_modules/@react-spectrum/layout": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.6.2.tgz",
- "integrity": "sha512-B5asGN+uFlfThTms4KraAU4OapMmN9Ryr1uj5uhHLtCwyQcLphg1Q+LMX8LfrNr7vPLxgoZ4L3em7ohkSb8Okg==",
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/layout/-/layout-3.6.3.tgz",
+ "integrity": "sha512-JsG4KclsgzKfRbe+PyMo8QryG5SmwYlym8JRuSLmZ+nfIKhESVbqSJE3IXblmDDWUb0rabQhSvW4p5h5nOil4w==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/layout": "^3.3.12",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/layout": "^3.3.13",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5317,16 +5305,16 @@
}
},
"node_modules/@react-spectrum/link": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.6.4.tgz",
- "integrity": "sha512-qxTCuGJuQd88j/Cq9yRTu3h48QV1h8Y9GVBoEVHnNQ4HGQjpDLkQkAFQwIZHku87RKhVY9LgA3YmBuo/1AJbsg==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/link": "^3.6.4",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/link": "^3.5.2",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/link/-/link-3.6.5.tgz",
+ "integrity": "sha512-pnPIzkM0/Nxm460dHuR195bD0BAaIvasqW8TqUFT0Igxfw0NFYyWZr5d4OkHKyypyUoQKaobpOgeAJHXxPtzTg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/link": "^3.6.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/link": "^3.5.3",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5335,30 +5323,30 @@
}
},
"node_modules/@react-spectrum/list": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/list/-/list-3.7.7.tgz",
- "integrity": "sha512-qL3lKLUauZ8fZsujPWa8K/Rz+zsY5eRktdqckQGVKBRLGOTc/WQcn9csb2hNOBSlYX5rYUabU5Ia7yGfMMauuA==",
- "dependencies": {
- "@react-aria/button": "^3.9.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/gridlist": "^3.7.4",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/virtualizer": "^3.9.9",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-spectrum/checkbox": "^3.9.3",
- "@react-spectrum/dnd": "^3.3.7",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/layout": "^3.13.6",
- "@react-stately/list": "^3.10.2",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/list/-/list-3.7.8.tgz",
+ "integrity": "sha512-w+fxiX+wz8X0bASAtKsf/myMrFI1Z0OXamttPRAJS5Ene6x09kf+K2djpZO1t9nT70IPnCcthhkMaCHk6eyUIw==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/gridlist": "^3.7.5",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/virtualizer": "^3.9.10",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-spectrum/checkbox": "^3.9.4",
+ "@react-spectrum/dnd": "^3.3.8",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/layout": "^3.13.7",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0",
"react-transition-group": "^4.4.5"
},
@@ -5369,27 +5357,27 @@
}
},
"node_modules/@react-spectrum/listbox": {
- "version": "3.12.6",
- "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.12.6.tgz",
- "integrity": "sha512-PXGxWtPIbWjFxAnBOkUHlcoqy6QfvHYPwoGnS0cObEwPP6J4Int9MynMVg1S3wwxKl8quYPojoidsrp04CGmIA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/listbox": "^3.11.4",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/virtualizer": "^3.9.9",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/layout": "^3.13.6",
- "@react-stately/list": "^3.10.2",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/listbox": "^3.4.6",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.12.7",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/listbox/-/listbox-3.12.7.tgz",
+ "integrity": "sha512-cFUIKPRtz5ViQYS0vO+oQmiFmbJjA04GCpyZKnBJAEonNDiY1RIHfFg/53Mr8IwstwNvGbxHVjMilPy6DtWDjA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/listbox": "^3.11.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/virtualizer": "^3.9.10",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/layout": "^3.13.7",
+ "@react-stately/list": "^3.10.3",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/listbox": "^3.4.7",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5399,31 +5387,31 @@
}
},
"node_modules/@react-spectrum/menu": {
- "version": "3.18.0",
- "resolved": "https://registry.npmjs.org/@react-spectrum/menu/-/menu-3.18.0.tgz",
- "integrity": "sha512-LSCvhs1IoEYZs798VzOPJia4V1/xGMbKIF0Ai7xqi+9DU+M/PSzWlhIRa1Ya/nTRxdUNOygG13CaY+WYnjYzEA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/menu": "^3.13.0",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/separator": "^3.3.10",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/menu": "^3.6.0",
- "@react-stately/overlays": "^3.6.4",
- "@react-stately/tree": "^3.7.5",
- "@react-types/menu": "^3.9.6",
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
- "@spectrum-icons/workflow": "^4.2.9",
+ "version": "3.18.1",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/menu/-/menu-3.18.1.tgz",
+ "integrity": "sha512-3KutRgn9/uYcRH2IzUT6qiPlS9SK9+4R2W4Z1Ox27lQ30ZgC68kE37uOwZX10bDgTOWV/COYvm6qBBScZ+VFUg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/separator": "^3.3.11",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/menu": "^3.6.1",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
+ "@spectrum-icons/workflow": "^4.2.10",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5433,15 +5421,15 @@
}
},
"node_modules/@react-spectrum/meter": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/meter/-/meter-3.4.10.tgz",
- "integrity": "sha512-cC4WnAoUSTD7ikGN4KSS92Dd3XRFxkzYlSQYt/ijBg3RR8k2sIerqbv6eEbYqMoErt6a0VXgBqSdon9Qj1jkuQ==",
- "dependencies": {
- "@react-aria/meter": "^3.4.10",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/meter": "^3.3.6",
- "@react-types/shared": "^3.22.0",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/meter/-/meter-3.4.11.tgz",
+ "integrity": "sha512-OBYIHnumb2cfeT48py6Qtsfs7m9DmddaHSCVB8MXNnn3fzrpPr5t4Wz2dYUWXnkPPC11D8WarjJ+6EgrNwNvdQ==",
+ "dependencies": {
+ "@react-aria/meter": "^3.4.11",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/meter": "^3.3.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5450,26 +5438,26 @@
}
},
"node_modules/@react-spectrum/numberfield": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-spectrum/numberfield/-/numberfield-3.9.0.tgz",
- "integrity": "sha512-Zj51Q3mm7LSCClaN6StYAj11hXf23RD/KiBiKRb+0q2OfJAszAgxVzx71BWOHj0OnK5INlF5INp7GWhiVZ7rJQ==",
- "dependencies": {
- "@react-aria/button": "^3.9.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/numberfield": "^3.11.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/textfield": "^3.11.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/numberfield": "^3.9.0",
- "@react-types/button": "^3.9.1",
- "@react-types/numberfield": "^3.8.0",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
- "@spectrum-icons/workflow": "^4.2.9",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/numberfield/-/numberfield-3.9.1.tgz",
+ "integrity": "sha512-s6QNRncVrVjOYihKeyQ8fkdD1YJTqYttog/Rj96rD66vfUlI0bTr3q6mK6hZpU1YM29SL24BUCn6NdqOxqVeiQ==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/numberfield": "^3.11.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/textfield": "^3.11.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/numberfield": "^3.9.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/numberfield": "^3.8.1",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
+ "@spectrum-icons/workflow": "^4.2.10",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5479,17 +5467,17 @@
}
},
"node_modules/@react-spectrum/overlays": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.5.4.tgz",
- "integrity": "sha512-xiIm84B1YbUOh8LxdpLMQN220/E6dyqTqB4KCTZ89YiKygJiEH9YPqM1GBsOEcpVUT+MEDPASixh2ADjY/YeIA==",
- "dependencies": {
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/overlays": "^3.6.4",
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/overlays/-/overlays-5.5.5.tgz",
+ "integrity": "sha512-rFwbWuagFo/Tuo45UE8KHUMz1Li1j5CNzsZdIfKZydHd0u4t69yR8bCn3pDUNIYEwclrLGUD2XFJaN9jYq1H4A==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0",
"react-transition-group": "^4.4.5"
},
@@ -5500,27 +5488,27 @@
}
},
"node_modules/@react-spectrum/picker": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/picker/-/picker-3.14.2.tgz",
- "integrity": "sha512-ZswvbG+2u6+c6qdy6wjh9IinT/Bkt1+Q7tuLGSTsPPAtWJoFEKQ9tntuvtYJx23vBZ2lrtGOWidJOeqKlOfshQ==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/select": "^3.14.2",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/listbox": "^3.12.6",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/select": "^3.6.1",
- "@react-types/select": "^3.9.1",
- "@react-types/shared": "^3.22.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/picker/-/picker-3.14.3.tgz",
+ "integrity": "sha512-xaewWrOtGt/dQbiSwZe9UYH58berRlxyqIeAZQ7+FCRGoG/gl1p+l+7rfNKFS5OjVy6Adh6BZrrY6A99j4PbQA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/select": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/listbox": "^3.12.7",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/select": "^3.6.2",
+ "@react-types/select": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5530,15 +5518,15 @@
}
},
"node_modules/@react-spectrum/progress": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/progress/-/progress-3.7.4.tgz",
- "integrity": "sha512-xEz8RX54rPPw/WS6bgBpop2C3s7wjakwOT42KIZz0vVQrRCa596Mtmy7IrLLtyfHuIgNgNHs/BVaH46Nzrr9Uw==",
- "dependencies": {
- "@react-aria/progress": "^3.4.10",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/progress": "^3.5.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/progress/-/progress-3.7.5.tgz",
+ "integrity": "sha512-ku+RTtgXWaxUwjopzWpvgNxJsn/gohMWO4len2K2yDQp6b4SY67ojRFBwyIDZ9Oi9RPTAvZOc3wJu5QPftfVcg==",
+ "dependencies": {
+ "@react-aria/progress": "^3.4.11",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/progress": "^3.5.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5547,16 +5535,16 @@
}
},
"node_modules/@react-spectrum/provider": {
- "version": "3.9.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.9.4.tgz",
- "integrity": "sha512-GEfmQCC/s0JRxMR7WA41vyGnSPssJTA1+ijTkDLGbhCyKmUq6pmNFaCj3WRW/ki+Gg42eWaNXth5sPexbxr9qA==",
- "dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/provider": "^3.7.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/provider/-/provider-3.9.5.tgz",
+ "integrity": "sha512-FE5RQC1EwMMXUAtslekheyA0IrXSev4flaY4CT3exC/ohB1PuiXUDg4qqaHos2vVhsdUPNq5SeathtHEr8ryJA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/provider": "^3.7.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0",
"clsx": "^2.0.0"
},
@@ -5566,19 +5554,19 @@
}
},
"node_modules/@react-spectrum/radio": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/radio/-/radio-3.7.3.tgz",
- "integrity": "sha512-wi0ielcjBbsDm3kgDXutWyJVQa31+8r2++1N+omj0zkffOiHqK5m+9faUikX7DKwQ4d/CkbAegrkN6q4yxkwbw==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/radio": "^3.10.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/radio": "^3.10.1",
- "@react-types/radio": "^3.7.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/radio/-/radio-3.7.4.tgz",
+ "integrity": "sha512-FmWcJlOeo5KsbWYpnEtoB9oC+haUeowfRda8dq0kBptR5WlagWD4Arez55/hjXCHLqQZ4r6vY6rYgMya2xiddQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/radio": "^3.10.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/radio": "^3.10.2",
+ "@react-types/radio": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5587,19 +5575,19 @@
}
},
"node_modules/@react-spectrum/searchfield": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/searchfield/-/searchfield-3.8.3.tgz",
- "integrity": "sha512-eHdfbQn2Jp2/USsKHOjLlVTqcnPHKUYa9f4bW9cXO0y08gfI1CSOhNlK3TYs625lvsRGCraCpsi6X2oStRWb8w==",
- "dependencies": {
- "@react-aria/searchfield": "^3.7.2",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/textfield": "^3.11.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/searchfield": "^3.5.0",
- "@react-types/searchfield": "^3.5.2",
- "@react-types/textfield": "^3.9.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/searchfield/-/searchfield-3.8.4.tgz",
+ "integrity": "sha512-O8pM9dGlRZoFhNtZLVFpIOHM2+sy5/t23Lv0z0jXvVYmzHOaib8wPPJELnPRsDUIylqpnVxfiYSz051Gx5Zq8g==",
+ "dependencies": {
+ "@react-aria/searchfield": "^3.7.3",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/textfield": "^3.11.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/searchfield": "^3.5.1",
+ "@react-types/searchfield": "^3.5.3",
+ "@react-types/textfield": "^3.9.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5608,20 +5596,20 @@
}
},
"node_modules/@react-spectrum/slider": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.6.6.tgz",
- "integrity": "sha512-Meav6BLiTuuGxk+qFM3MJJubSIdBytb+Cfa3SIsZ8zx1X0O3eY517byJYjOVLo/FhzloWWNupr7aMPAGfOKb2A==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/slider": "^3.7.5",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/slider": "^3.5.1",
- "@react-types/shared": "^3.22.0",
- "@react-types/slider": "^3.7.0",
+ "version": "3.6.7",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/slider/-/slider-3.6.7.tgz",
+ "integrity": "sha512-mhTG+sGZwQfNW9z+uzvmTQzzV2Qzcack3qYSw8HXEfd4BOjkgwTinS9aN8MLv147TF5RMvI0y3dmNirAoDi+yQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/slider": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/slider": "^3.5.2",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/slider": "^3.7.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5630,14 +5618,14 @@
}
},
"node_modules/@react-spectrum/statuslight": {
- "version": "3.5.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/statuslight/-/statuslight-3.5.10.tgz",
- "integrity": "sha512-s697KmFlwF1dbM0nTNDanL6jqqC6da86tu8sqU7IWqowymbpkIdorFFHuFDiOUg+rKa+QXKzeLicaxH75o6oyw==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
- "@react-types/statuslight": "^3.3.6",
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/statuslight/-/statuslight-3.5.11.tgz",
+ "integrity": "sha512-zbIrI8rPLmMu3Jnl2fpA/kb0V3azdRBsv1KfhGNQkHM17Gy6ufrzzzh6cmnvQh8FREllMcIjC4eaBkYHFArtyg==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/statuslight": "^3.3.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5646,17 +5634,17 @@
}
},
"node_modules/@react-spectrum/switch": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.5.2.tgz",
- "integrity": "sha512-gpxgU5z0BlaorNjCw6J9c2kSQA9ZR7tjg3hF3491i+h2+xc2NuTQe18WYEHTXFTmlXVEEXE97BEtoX4KY7YU0g==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/switch": "^3.6.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/toggle": "^3.7.1",
- "@react-types/shared": "^3.22.0",
- "@react-types/switch": "^3.5.0",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/switch/-/switch-3.5.3.tgz",
+ "integrity": "sha512-NJMk/b/Lrmgl0RB9QPF0wSuD5CgTPODaLuZD1uxXAcESKFVdN58eW8CU99e+ZC0tHgFofroTpEF073Yiz2LnkQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/switch": "^3.6.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/switch": "^3.5.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5665,33 +5653,33 @@
}
},
"node_modules/@react-spectrum/table": {
- "version": "3.12.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/table/-/table-3.12.7.tgz",
- "integrity": "sha512-A+jirOXULysnKvrN0Q8hS4t64I8fFoyyXYAlfSTnza3n2hXKxYnYenKP/VjB7PvdFwZiBAY4+VVg37E0JfFUWw==",
- "dependencies": {
- "@react-aria/button": "^3.9.2",
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/table": "^3.13.4",
- "@react-aria/utils": "^3.23.1",
- "@react-aria/virtualizer": "^3.9.9",
- "@react-aria/visually-hidden": "^3.8.9",
- "@react-spectrum/checkbox": "^3.9.3",
- "@react-spectrum/dnd": "^3.3.7",
- "@react-spectrum/layout": "^3.6.2",
- "@react-spectrum/menu": "^3.18.0",
- "@react-spectrum/progress": "^3.7.4",
- "@react-spectrum/tooltip": "^3.6.4",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/flags": "^3.0.0",
- "@react-stately/layout": "^3.13.6",
- "@react-stately/table": "^3.11.5",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
- "@react-types/table": "^3.9.2",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.12.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/table/-/table-3.12.8.tgz",
+ "integrity": "sha512-4JyDlvKljhvqqUHYk6X5JjmxXy03IZergKTu//MbELW4v9bwiwf94Ap8zTcUZPh/pcw7IQhpUDLPAi6RFBAUpA==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/table": "^3.13.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/virtualizer": "^3.9.10",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-spectrum/checkbox": "^3.9.4",
+ "@react-spectrum/dnd": "^3.3.8",
+ "@react-spectrum/layout": "^3.6.3",
+ "@react-spectrum/menu": "^3.18.1",
+ "@react-spectrum/progress": "^3.7.5",
+ "@react-spectrum/tooltip": "^3.6.5",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/flags": "^3.0.1",
+ "@react-stately/layout": "^3.13.7",
+ "@react-stately/table": "^3.11.6",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/table": "^3.9.3",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5701,24 +5689,24 @@
}
},
"node_modules/@react-spectrum/tabs": {
- "version": "3.8.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.8.7.tgz",
- "integrity": "sha512-DcPn/pcYuXiS6cwuMT4k3tusDoMuUTjWUYpAcHwDue9xcUGsb6BrNmMxrQ6J08nQN6DhUizqtGA9CCTS9NwcnA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/tabs": "^3.8.4",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/picker": "^3.14.2",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/list": "^3.10.2",
- "@react-stately/tabs": "^3.6.3",
- "@react-types/select": "^3.9.1",
- "@react-types/shared": "^3.22.0",
- "@react-types/tabs": "^3.3.4",
+ "version": "3.8.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/tabs/-/tabs-3.8.8.tgz",
+ "integrity": "sha512-oBXKLD7cyCLQV3SUXIjEn9ttdyoGwpiTUfM3DNY3ki097pRdoBgMxPk1Sp7jKQs6tRUg4osK53iOG4LvEs6eTg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/tabs": "^3.8.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/picker": "^3.14.3",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/list": "^3.10.3",
+ "@react-stately/tabs": "^3.6.4",
+ "@react-types/select": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tabs": "^3.3.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5728,24 +5716,24 @@
}
},
"node_modules/@react-spectrum/tag": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/tag/-/tag-3.2.3.tgz",
- "integrity": "sha512-9LZ6SplsNUtvH3VjWZEMpDxbcQSNLNUuoYp9mISzeD8Zf2aNhHLIzm5kyB29hZcZO7lZzZY8GdX44a5awmKLZw==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/selection": "^3.17.4",
- "@react-aria/tag": "^3.3.2",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/button": "^3.16.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/text": "^3.5.2",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/collections": "^3.10.4",
- "@react-stately/list": "^3.10.2",
- "@react-types/shared": "^3.22.0",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/tag/-/tag-3.2.4.tgz",
+ "integrity": "sha512-d6cqX+n10pokLsBGEC/ksLLHM3vBoR7zc0AAlBAUrBN6VMBWUQRyazDHeXPLLZs/S4+ICL80UXRf8NwWfA7Efg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/tag": "^3.3.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/button": "^3.16.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/text": "^3.5.3",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5755,14 +5743,14 @@
}
},
"node_modules/@react-spectrum/text": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-spectrum/text/-/text-3.5.2.tgz",
- "integrity": "sha512-cv2WrZrM24btD2zRDs/Qg5n/1+EE2D69RbGySQrJWerohPRJzYoID/ZXPsn0W6gKVivbn6lRQ1+c9ptoXA7b8Q==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/text/-/text-3.5.3.tgz",
+ "integrity": "sha512-28WiSnIPm8WC4JOsHPLudCGjPc3tk7zKm3L+8xqzr374j1+HdMGivrhVOf1t4jbUMcT5dOxR7huuDe7E97qe5A==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
- "@react-types/text": "^3.3.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/text": "^3.3.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5771,21 +5759,21 @@
}
},
"node_modules/@react-spectrum/textfield": {
- "version": "3.11.3",
- "resolved": "https://registry.npmjs.org/@react-spectrum/textfield/-/textfield-3.11.3.tgz",
- "integrity": "sha512-859j6VUgXYdF/LoYnindXTirZHfyhX22/6BreQl7mxJT0JDqYn8G/k7pauRSGyw+Di3zuvujEKu8ZdJAMm/0JA==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/interactions": "^3.21.0",
- "@react-aria/textfield": "^3.14.2",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/form": "^3.7.3",
- "@react-spectrum/label": "^3.16.3",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
- "@react-types/textfield": "^3.9.0",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.11.4",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/textfield/-/textfield-3.11.4.tgz",
+ "integrity": "sha512-J70Q1ddpX0v+R7x8w5DaJLixnp5mBWm39lUnekiahEUuA420U1eZCW80GiHXFS/GO6wpwjIZpWHcpBQuF/EDCQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/textfield": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/form": "^3.7.4",
+ "@react-spectrum/label": "^3.16.4",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/textfield": "^3.9.1",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5794,11 +5782,11 @@
}
},
"node_modules/@react-spectrum/theme-dark": {
- "version": "3.5.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/theme-dark/-/theme-dark-3.5.7.tgz",
- "integrity": "sha512-WaBVkhJKsZNcsHCcm6HQOSV934KLxZK6cbTt/FjUZtNTHcQTb5s2xf2jPeMwcRbRJfzagfTuTr5BkM38B9Zi1Q==",
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/theme-dark/-/theme-dark-3.5.8.tgz",
+ "integrity": "sha512-ep78rIrgrXu5MHe6LQAiK8+Us/4PoeHcixm+xFJk8I7AP+6wrh+9+QSWdIi3/NJY9fIjXsMm+VyehFVtEq8PAg==",
"dependencies": {
- "@react-types/provider": "^3.7.1",
+ "@react-types/provider": "^3.7.2",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5806,11 +5794,11 @@
}
},
"node_modules/@react-spectrum/theme-default": {
- "version": "3.5.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.7.tgz",
- "integrity": "sha512-5GgCKfzA1be3pE5XtQ+5hk39I4BhU1qY+fHCDxvE/tndm2I7pCk26d6ifxA0H2RVKH8V3eiH0WG1TNXHcHIO1g==",
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/theme-default/-/theme-default-3.5.8.tgz",
+ "integrity": "sha512-vZ9GH4l6H2Ks/PD15k2mx6XgA1EYKxQbB+ai9UZ3ALXf0KYlVIFSoHk4Vp3hP16D12KsuB7V0Gk8SvHlsRNo+Q==",
"dependencies": {
- "@react-types/provider": "^3.7.1",
+ "@react-types/provider": "^3.7.2",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5818,11 +5806,11 @@
}
},
"node_modules/@react-spectrum/theme-light": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/theme-light/-/theme-light-3.4.7.tgz",
- "integrity": "sha512-3NeIDN9QU8c40rqRSzurTdJRTZ5Uag4c2fLlF9Bve/yF7N6KlzK29H3EWNLBizAfozhPe5/HDEYqdArz7bxhlQ==",
+ "version": "3.4.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/theme-light/-/theme-light-3.4.8.tgz",
+ "integrity": "sha512-6kjtQ6IGrh2E0WJKQ9eAR5yhcWFI2mNvd+wi8Uy3rtRdBB1L3iSfr2RmgxgcTCl50DnKqmcFsHbHaKMMKqhkaQ==",
"dependencies": {
- "@react-types/provider": "^3.7.1",
+ "@react-types/provider": "^3.7.2",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5830,21 +5818,21 @@
}
},
"node_modules/@react-spectrum/tooltip": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/tooltip/-/tooltip-3.6.4.tgz",
- "integrity": "sha512-z8RGtQjUHRT2haI1tz7lB9STuv6kj8GBGr++Zo5xE8nhY2QASRXE4gZ16YnGI8l2c7EFyLFstAEtbrxt835GWQ==",
- "dependencies": {
- "@react-aria/focus": "^3.16.1",
- "@react-aria/overlays": "^3.21.0",
- "@react-aria/tooltip": "^3.7.1",
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/overlays": "^5.5.4",
- "@react-spectrum/utils": "^3.11.4",
- "@react-stately/tooltip": "^3.4.6",
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0",
- "@react-types/tooltip": "^3.4.6",
- "@spectrum-icons/ui": "^3.6.4",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/tooltip/-/tooltip-3.6.5.tgz",
+ "integrity": "sha512-TnVUX8gNx65wOfHE5UIzuzpC4kUd6RuFeDykcu+3OM+fsK6qvDYg2MQq/3UiZHFI0ZHhX89yPf4uLaP0hcT8sg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/tooltip": "^3.7.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/overlays": "^5.5.5",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-stately/tooltip": "^3.4.7",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tooltip": "^3.4.7",
+ "@spectrum-icons/ui": "^3.6.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5854,14 +5842,14 @@
}
},
"node_modules/@react-spectrum/utils": {
- "version": "3.11.4",
- "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.11.4.tgz",
- "integrity": "sha512-x1GfD25riFzbkscmLR7EUVDJolwjz7QSn8udtAW09kCcpCBjyA+SMmjt+rCpzYM4mtGfPlcJJrYDGDarGjNWxQ==",
+ "version": "3.11.5",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.11.5.tgz",
+ "integrity": "sha512-V4heIuCBXhYOP3om5B0KNs2+RK6RKwAhHVjjJZ3RBeNqsF9UDxv+D/+dk3sAM2dsM1F8l38BNXQMMWXWW/BZYA==",
"dependencies": {
- "@react-aria/i18n": "^3.10.1",
- "@react-aria/ssr": "^3.9.1",
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/ssr": "^3.9.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0",
"clsx": "^2.0.0"
},
@@ -5870,14 +5858,14 @@
}
},
"node_modules/@react-spectrum/view": {
- "version": "3.6.7",
- "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.6.7.tgz",
- "integrity": "sha512-eCwFfoMN7j4G44GZfGmFM+jWsD4zBxbmLsbrm6H1kEmxeeJkCM1jwF2H3Vc4WJxaBuOBY7tce8IHBRwQ3l0Wng==",
+ "version": "3.6.8",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/view/-/view-3.6.8.tgz",
+ "integrity": "sha512-jAKh22xUjFY5sxPTtLc53fw3C+dki+DEDxArFK06/tF+ntV6lDat91j+YedcOtDT2p7C2PSfaToX5moyEAQ+NA==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
- "@react-types/view": "^3.4.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/view": "^3.4.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5886,14 +5874,14 @@
}
},
"node_modules/@react-spectrum/well": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/@react-spectrum/well/-/well-3.4.10.tgz",
- "integrity": "sha512-k1xnXk75R7V2DEbI8+rejT3d2pQR5j6DHZt/JzBbpmuGxvKqlkMgr364vBmusOEu8lvUE5/Q6O+qdnNTZeirWw==",
- "dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-spectrum/utils": "^3.11.4",
- "@react-types/shared": "^3.22.0",
- "@react-types/well": "^3.3.6",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@react-spectrum/well/-/well-3.4.11.tgz",
+ "integrity": "sha512-oCQqKKcKXNoF18dNz5GHBdSXrNPsVH5jsH17suqQevzDQkMN2X02Ov0oyOYMAUQM0xSE3ensLdjvLzUL0yl36g==",
+ "dependencies": {
+ "@react-aria/utils": "^3.23.2",
+ "@react-spectrum/utils": "^3.11.5",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/well": "^3.3.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5901,14 +5889,14 @@
}
},
"node_modules/@react-stately/calendar": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.4.3.tgz",
- "integrity": "sha512-OrEcdskszDjnjVnFuSiDC2PVBJ6lWMCJROD5s6W1LUehUtBp8LX9wPavAGHV43LbhN9ldj560sxaQ4WCddrRCA==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-stately/utils": "^3.9.0",
- "@react-types/calendar": "^3.4.3",
- "@react-types/shared": "^3.22.0",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.4.4.tgz",
+ "integrity": "sha512-f9ZOd096gGGD+3LmU1gkmfqytGyQtrgi+Qjn+70GbM2Jy65pwOR4I9YrobbmeAFov5Tff13mQEa0yqWvbcDLZQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/calendar": "^3.4.4",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5916,14 +5904,14 @@
}
},
"node_modules/@react-stately/checkbox": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.2.tgz",
- "integrity": "sha512-IzeyGd3MKoOAzvgbmds8wnCWRFUmQUznXEMxl1DbpqYpB+OH4nMS81D7yLSVeQPRtxcqKCSx+/98oycMThCilw==",
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.3.tgz",
+ "integrity": "sha512-hWp0GXVbMI4sS2NbBjWgOnHNrRqSV4jeftP8zc5JsIYRmrWBUZitxluB34QuVPzrBO29bGsF0GTArSiQZt6BWw==",
"dependencies": {
- "@react-stately/form": "^3.0.0",
- "@react-stately/utils": "^3.9.0",
- "@react-types/checkbox": "^3.7.0",
- "@react-types/shared": "^3.22.0",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5931,11 +5919,11 @@
}
},
"node_modules/@react-stately/collections": {
- "version": "3.10.4",
- "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.4.tgz",
- "integrity": "sha512-OHhCrItGt4zB2bSrgObRo0H2SC7QlkH8ReGxo+NVIWchXRLRoiWBP7S+IwleewEo5gOqDVPY3hqA9n4iiI8twg==",
+ "version": "3.10.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.5.tgz",
+ "integrity": "sha512-k8Q29Nnvb7iAia1QvTanZsrWP2aqVNBy/1SlE6kLL6vDqtKZC+Esd1SDLHRmIcYIp5aTdfwIGd0NuiRQA7a81Q==",
"dependencies": {
- "@react-types/shared": "^3.22.0",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5943,18 +5931,18 @@
}
},
"node_modules/@react-stately/combobox": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.1.tgz",
- "integrity": "sha512-FaWkqTXQdWg7ptaeU4iPcqF/kxbRg2ZNUcvW/hiL/enciV5tRCsddvfNqvDvy1L30z9AUwlp9MWqzm/DhBITCw==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/form": "^3.0.0",
- "@react-stately/list": "^3.10.2",
- "@react-stately/overlays": "^3.6.4",
- "@react-stately/select": "^3.6.1",
- "@react-stately/utils": "^3.9.0",
- "@react-types/combobox": "^3.10.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.2.tgz",
+ "integrity": "sha512-f+IHuFW848VoMbvTfSakn2WIh2urDxO355LrKxnisXPCkpQHpq3lvT2mJtKJwkPxjAy7xPjpV8ejgga2R6p53Q==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/list": "^3.10.3",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-stately/select": "^3.6.2",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/combobox": "^3.10.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5962,11 +5950,11 @@
}
},
"node_modules/@react-stately/data": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.11.1.tgz",
- "integrity": "sha512-JedDhZ5e6Qetf+TGXKBdVVEvB50BymNJHKRFRQ9E3mmh/KFeY4V8THHKrNE/BhzB6Z3onsp5r14Z66Nku+klTg==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.11.2.tgz",
+ "integrity": "sha512-yhK2upk2WbJeiLBRWHrh/4G2CvmmozCzoivLaRAPYu53m1J3MyzVGCLJgnZMbMZvAbNcYWZK6IzO6VqZ2y1fOw==",
"dependencies": {
- "@react-types/shared": "^3.22.0",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5974,17 +5962,17 @@
}
},
"node_modules/@react-stately/datepicker": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.1.tgz",
- "integrity": "sha512-o5xLvlZGJyAbTev2yruGlV2fzQyIDuYTgL19TTt0W0WCfjGGr/AAA9GjGXXmyoRA7sZMxqIPnnv7lNrdA38ofA==",
- "dependencies": {
- "@internationalized/date": "^3.5.1",
- "@internationalized/string": "^3.2.0",
- "@react-stately/form": "^3.0.0",
- "@react-stately/overlays": "^3.6.4",
- "@react-stately/utils": "^3.9.0",
- "@react-types/datepicker": "^3.7.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.2.tgz",
+ "integrity": "sha512-Z6FrK6Af7R5BizqHhJFCj3Hn32mg5iLSDdEgFQAuO043guOXUKFUAnbxfbQUjL6PGE6QwWMfQD7PPGebHn9Ifw==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@internationalized/string": "^3.2.1",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/datepicker": "^3.7.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -5992,12 +5980,12 @@
}
},
"node_modules/@react-stately/dnd": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.2.7.tgz",
- "integrity": "sha512-QqSCvE9Rhp+Mr8Mt/SrByze24BFX1cy7gmXbwoqAYgHNIx3gWCVdBLqxfpfgYIhZdF9H72EWS8lQkfkZla06Ng==",
+ "version": "3.2.8",
+ "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.2.8.tgz",
+ "integrity": "sha512-oSo+2Bzum3Q1/d+3FuaDmpVHqqBB004tycuQDDFtad3N1BKm+fNfmslRK1ioLkPLK4sm1130V+BZBY3JXLe80A==",
"dependencies": {
- "@react-stately/selection": "^3.14.2",
- "@react-types/shared": "^3.22.0",
+ "@react-stately/selection": "^3.14.3",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6005,9 +5993,9 @@
}
},
"node_modules/@react-stately/flags": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.0.tgz",
- "integrity": "sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.1.tgz",
+ "integrity": "sha512-h5PcDMj54aipQNO18ig/IMI1kzPwcvSwVq5M6Ib6XE1WIkOH0dIuW2eADdAOhcGi3KXJtXVdD29zh0Eox1TKgQ==",
"dependencies": {
"@swc/helpers": "^0.4.14"
}
@@ -6022,11 +6010,11 @@
}
},
"node_modules/@react-stately/form": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.0.tgz",
- "integrity": "sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.1.tgz",
+ "integrity": "sha512-T1Ul2Ou0uE/S4ECLcGKa0OfXjffdjEHfUFZAk7OZl0Mqq/F7dl5WpoLWJ4d4IyvZzGO6anFNenP+vODWbrF3NA==",
"dependencies": {
- "@react-types/shared": "^3.22.0",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6034,14 +6022,14 @@
}
},
"node_modules/@react-stately/grid": {
- "version": "3.8.4",
- "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.4.tgz",
- "integrity": "sha512-rwqV1K4lVhaiaqJkt4TfYqdJoVIyqvSm98rKAYfCNzrKcivVpoiCMJ2EMt6WlYCjDVBdEOQ7fMV1I60IV0pntA==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/selection": "^3.14.2",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
+ "version": "3.8.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.5.tgz",
+ "integrity": "sha512-KCzi0x0p1ZKK+OptonvJqMbn6Vlgo6GfOIlgcDd0dNYDP8TJ+3QFJAFre5mCr7Fubx7LcAOio4Rij0l/R8fkXQ==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/selection": "^3.14.3",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6049,16 +6037,16 @@
}
},
"node_modules/@react-stately/layout": {
- "version": "3.13.6",
- "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.13.6.tgz",
- "integrity": "sha512-lfkLbPjwsvmA/Rk4OodtrBfFNiApvk5t2cehYHtUU5OFvHGaqt/n//dZ85XI2ooUq1FwfBZZ0ZXAAvJeaWR1QA==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/table": "^3.11.5",
- "@react-stately/virtualizer": "^3.6.7",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
- "@react-types/table": "^3.9.2",
+ "version": "3.13.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.13.7.tgz",
+ "integrity": "sha512-9HH/aSxpEHwUW1T1vGN3+iznkAXQUzoMrsoEepNzesOsUGSm/MFZmEk4+9cdPA7y3ou2eHpGNUB1YIDDVptElg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/table": "^3.11.6",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/table": "^3.9.3",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6066,14 +6054,14 @@
}
},
"node_modules/@react-stately/list": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.2.tgz",
- "integrity": "sha512-INt+zofkIg2KN8B95xPi9pJG7ZFWAm30oIm/lCPBqM3K1Nm03/QaAbiQj2QeJcOsG3lb7oqI6D6iwTolwJkjIQ==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/selection": "^3.14.2",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.3.tgz",
+ "integrity": "sha512-Ul8el0tQy2Ucl3qMQ0fiqdJ874W1ZNjURVSgSxN+pGwVLNBVRjd6Fl7YwZFCXER2YOlzkwg+Zqozf/ZlS0EdXA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/selection": "^3.14.3",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6081,13 +6069,13 @@
}
},
"node_modules/@react-stately/menu": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.6.0.tgz",
- "integrity": "sha512-OB6CjNyfOkAuirqx1oTL8z8epS9WDzLyrXjmRnxdiCU9EgRXLGAQNECuO7VIpl58oDry8tgRJiJ8fn8FivWSQA==",
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.6.1.tgz",
+ "integrity": "sha512-3v0vkTm/kInuuG8jG7jbxXDBnMQcoDZKWvYsBQq7+POt0LmijbLdbdZPBoz9TkZ3eo/OoP194LLHOaFTQyHhlw==",
"dependencies": {
- "@react-stately/overlays": "^3.6.4",
- "@react-types/menu": "^3.9.6",
- "@react-types/shared": "^3.22.0",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6095,14 +6083,14 @@
}
},
"node_modules/@react-stately/numberfield": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.0.tgz",
- "integrity": "sha512-8O802S38e1htZbSzpPjbbIGAGxGC/DIzcW8H03UmBXiIFosEjpdmm8qRrJbhGfJGpwnehtzJQ6EaOLgLZMCFKg==",
- "dependencies": {
- "@internationalized/number": "^3.5.0",
- "@react-stately/form": "^3.0.0",
- "@react-stately/utils": "^3.9.0",
- "@react-types/numberfield": "^3.8.0",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.1.tgz",
+ "integrity": "sha512-btBIcBEfSVCUm6NwJrMrMygoIu/fQGazzD0RhF7PNsfvkFiWn+TSOyQqSXcsUJVOnBfoS/dVWj6r57KA7zl3FA==",
+ "dependencies": {
+ "@internationalized/number": "^3.5.1",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/numberfield": "^3.8.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6110,12 +6098,12 @@
}
},
"node_modules/@react-stately/overlays": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.4.tgz",
- "integrity": "sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA==",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.5.tgz",
+ "integrity": "sha512-U4rCFj6TPJPXLUvYXAcvh+yP/CO2W+7f0IuqP7ZZGE+Osk9qFkT+zRK5/6ayhBDFpmueNfjIEAzT9gYPQwNHFw==",
"dependencies": {
- "@react-stately/utils": "^3.9.0",
- "@react-types/overlays": "^3.8.4",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/overlays": "^3.8.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6123,14 +6111,14 @@
}
},
"node_modules/@react-stately/radio": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.1.tgz",
- "integrity": "sha512-MsBYbcLCvjKsqTAKe43T681F2XwKMsS7PLG0eplZgWP9210AMY78GeY1XPYZKHPAau8XkbYiuJqbqTerIJ3DBw==",
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.2.tgz",
+ "integrity": "sha512-JW5ZWiNMKcZvMTsuPeWJQLHXD5rlqy7Qk6fwUx/ZgeibvMBW/NnW19mm2+IMinzmbtERXvR6nsiA837qI+4dew==",
"dependencies": {
- "@react-stately/form": "^3.0.0",
- "@react-stately/utils": "^3.9.0",
- "@react-types/radio": "^3.7.0",
- "@react-types/shared": "^3.22.0",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/radio": "^3.7.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6138,12 +6126,12 @@
}
},
"node_modules/@react-stately/searchfield": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.0.tgz",
- "integrity": "sha512-SStjChkn/33pEn40slKQPnBnmQYyxVazVwPjiBkdeVejC42lUVairUTrGJgF0PNoZTbxn0so2/XzjqTC9T8iCw==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.1.tgz",
+ "integrity": "sha512-9A8Wghx1avRHhMpNH1Nj+jFfiF1bhsff2GEC5PZgWYzhCykw3G5bywn3JAuUS4kh7Vpqhbu4KpHAhmWPSv4B/Q==",
"dependencies": {
- "@react-stately/utils": "^3.9.0",
- "@react-types/searchfield": "^3.5.2",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/searchfield": "^3.5.3",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6151,15 +6139,15 @@
}
},
"node_modules/@react-stately/select": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.1.tgz",
- "integrity": "sha512-e5ixtLiYLlFWM8z1msDqXWhflF9esIRfroptZsltMn1lt2iImUlDRlOTZlMtPQzUrDWoiHXRX88sSKUM/jXjQQ==",
- "dependencies": {
- "@react-stately/form": "^3.0.0",
- "@react-stately/list": "^3.10.2",
- "@react-stately/overlays": "^3.6.4",
- "@react-types/select": "^3.9.1",
- "@react-types/shared": "^3.22.0",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.2.tgz",
+ "integrity": "sha512-duOxdHKol93h6Ew6fap6Amz+zngoERKZLSKVm/8I8uaBgkoBhEeTFv7mlpHTgINxymMw3mMrvy6GL/gfKFwkqg==",
+ "dependencies": {
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/list": "^3.10.3",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/select": "^3.9.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6167,13 +6155,13 @@
}
},
"node_modules/@react-stately/selection": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.14.2.tgz",
- "integrity": "sha512-mL7OoiUgVWaaF7ks5XSxgbXeShijYmD4G3bkBHhqkpugU600QH6BM2hloCq8KOUupk1y8oTljPtF9EmCv375DA==",
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.14.3.tgz",
+ "integrity": "sha512-d/t0rIWieqQ7wjLoMoWnuHEUSMoVXxkPBFuSlJF3F16289FiQ+b8aeKFDzFTYN7fFD8rkZTnpuE4Tcxg3TmA+w==",
"dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6181,13 +6169,13 @@
}
},
"node_modules/@react-stately/slider": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.1.tgz",
- "integrity": "sha512-NRZ5m1wOVxGZF1CQC6hOzt/LmHNUF2xpFSkzN29fW/InPH4jb3BuOkRbbWv76QaVe0Kdg2ZLWcMl2+Qt6adIeQ==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.2.tgz",
+ "integrity": "sha512-ntH3NLRG+AwVC7q4Dx9DcmMkMh9vmHjHNXAgaoqNjhvwfSIae7sQ69CkVe6XeJjIBy6LlH81Kgapz+ABe5a1ZA==",
"dependencies": {
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
- "@react-types/slider": "^3.7.0",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/slider": "^3.7.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6195,18 +6183,18 @@
}
},
"node_modules/@react-stately/table": {
- "version": "3.11.5",
- "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.5.tgz",
- "integrity": "sha512-l84iZJxpR0vlprHNEeGCVZTjOivP5fLpllmG+GswGxN4JXDqCEZ6gCQzpXxLyQTyBZ8lTRmmmmW20V2nCmDO4w==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/flags": "^3.0.0",
- "@react-stately/grid": "^3.8.4",
- "@react-stately/selection": "^3.14.2",
- "@react-stately/utils": "^3.9.0",
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0",
- "@react-types/table": "^3.9.2",
+ "version": "3.11.6",
+ "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.6.tgz",
+ "integrity": "sha512-34YsfOILXusj3p6QNcKEaDWVORhM6WEhwPSLCZlkwAJvkxuRQFdih5rQKoIDc0uV5aZsB6bYBqiFhnjY0VERhw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/flags": "^3.0.1",
+ "@react-stately/grid": "^3.8.5",
+ "@react-stately/selection": "^3.14.3",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/table": "^3.9.3",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6214,13 +6202,13 @@
}
},
"node_modules/@react-stately/tabs": {
- "version": "3.6.3",
- "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.3.tgz",
- "integrity": "sha512-Nj+Gacwa2SIzYIvHW40GsyX4Q6c8kF7GOuXESeQswbCjnwqhrSbDBp+ngPcUPUJxqFh6JhDCVwAS3wMhUoyUwA==",
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.4.tgz",
+ "integrity": "sha512-WZJgMBqzLgN88RN8AxhY4aH1+I+4w1qQA0Lh3LRSDegaytd+NHixCWaP3IPjePgCB5N1UsPe96Xglw75zjHmDg==",
"dependencies": {
- "@react-stately/list": "^3.10.2",
- "@react-types/shared": "^3.22.0",
- "@react-types/tabs": "^3.3.4",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tabs": "^3.3.5",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6228,12 +6216,12 @@
}
},
"node_modules/@react-stately/toggle": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.1.tgz",
- "integrity": "sha512-pZyhPJNdhidm/Uq/Pt58H0I6CUNyfnhfGAAn9Et6T3/SymcX1Zti5mZg5gXgICFlwGbucfLBe+Jt691Rnt2vaA==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.2.tgz",
+ "integrity": "sha512-SHCF2btcoK57c4lyhucRbyPBAFpp0Pdp0vcPdn3hUgqbu6e5gE0CwG/mgFmZRAQoc7PRc7XifL0uNw8diJJI0Q==",
"dependencies": {
- "@react-stately/utils": "^3.9.0",
- "@react-types/checkbox": "^3.7.0",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/checkbox": "^3.7.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6241,12 +6229,12 @@
}
},
"node_modules/@react-stately/tooltip": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.6.tgz",
- "integrity": "sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.7.tgz",
+ "integrity": "sha512-ACtRgBQ8rphBtsUaaxvEAM0HHN9PvMuyvL0vUHd7jvBDCVZJ6it1BKu9SBKjekBkoBOw9nemtkplh9R2CA6V8Q==",
"dependencies": {
- "@react-stately/overlays": "^3.6.4",
- "@react-types/tooltip": "^3.4.6",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/tooltip": "^3.4.7",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6254,14 +6242,14 @@
}
},
"node_modules/@react-stately/tree": {
- "version": "3.7.5",
- "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.7.5.tgz",
- "integrity": "sha512-xTJVwvhAeY0N5rui4N/TxN7f8hjXdqApDuGDxMZeFAWoQz8Abf7LFKBVQ3OkT6qVr7P+23dgoisUDBhD5a45Hg==",
- "dependencies": {
- "@react-stately/collections": "^3.10.4",
- "@react-stately/selection": "^3.14.2",
- "@react-stately/utils": "^3.9.0",
- "@react-types/shared": "^3.22.0",
+ "version": "3.7.6",
+ "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.7.6.tgz",
+ "integrity": "sha512-y8KvEoZX6+YvqjNCVGS3zA/BKw4D3XrUtUKIDme3gu5Mn6z97u+hUXKdXVCniZR7yvV3fHAIXwE5V2K8Oit4aw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/selection": "^3.14.3",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6269,9 +6257,9 @@
}
},
"node_modules/@react-stately/utils": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.9.0.tgz",
- "integrity": "sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw==",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.9.1.tgz",
+ "integrity": "sha512-yzw75GE0iUWiyps02BOAPTrybcsMIxEJlzXqtvllAb01O9uX5n0i3X+u2eCpj2UoDF4zS08Ps0jPgWxg8xEYtA==",
"dependencies": {
"@swc/helpers": "^0.5.0"
},
@@ -6280,12 +6268,12 @@
}
},
"node_modules/@react-stately/virtualizer": {
- "version": "3.6.7",
- "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.6.7.tgz",
- "integrity": "sha512-huhQSrfwiUq2idceSE2aQ54d9gttAovKDtw7uERWFt+UAxiprWq8hr6sl7rTdN2NB7fz/t+MAJJuwWMkzLUlOw==",
+ "version": "3.6.8",
+ "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.6.8.tgz",
+ "integrity": "sha512-Pf06ihTwExRJltGhi72tmLIo0pcjkL55nu7ifMafAAdxZK4ONxRLSuUjjpvYf/0Rs92xRZy2t/XmHREnfirdkQ==",
"dependencies": {
- "@react-aria/utils": "^3.23.1",
- "@react-types/shared": "^3.22.0",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6293,470 +6281,470 @@
}
},
"node_modules/@react-types/actionbar": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@react-types/actionbar/-/actionbar-3.1.4.tgz",
- "integrity": "sha512-/z9N7ztd/MOdEDQNHTCNviYe0+rqy1s19Xg3tv/PV1oUCOsjrnja85VVxoa+AWR8IbwgDNIfpXg2Wa66b1FDbw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@react-types/actionbar/-/actionbar-3.1.5.tgz",
+ "integrity": "sha512-Z3hfIoaOaW8wJxQm1NyWVvSftpNDYv9iWqpEWBEdhxuqsUkOVszZ7KcNaF4qsm4bJIcJWn3FNKhaTKGwISZcdQ==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/actiongroup": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-types/actiongroup/-/actiongroup-3.4.6.tgz",
- "integrity": "sha512-Dho2mEDCU9ZAW+QX2HZkZhyxHK/EGfTvSWdHBFaCYsh4CPI/6PcvtirpSKMrzNNaZ97Exthv3GcLpAnLwM9jZw==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-types/actiongroup/-/actiongroup-3.4.7.tgz",
+ "integrity": "sha512-VsyHn6mGqEHKEIGFiHTq7rSuzuQjGVZGtnhh/9jQXW6zoSJyoM4fAnHEt+RE92NdiRv5e3+OzzrwG0TZsi87cQ==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/avatar": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@react-types/avatar/-/avatar-3.0.4.tgz",
- "integrity": "sha512-fQ+qGce0EqcX0s2glnFjfvxSq42GHaqvl+eL8TnsDz0OIvB8KKzTO/rV/q1CIy/LtMP8fjCb6oqVFQcLfuODfw==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-types/avatar/-/avatar-3.0.5.tgz",
+ "integrity": "sha512-/hM/BnRoUhusT16G4hf2hfe4FocxaM5H/a7aetUrmlr9e5ppX3n0VsU0btIwxdh+aJL8u2BBt2scoiJaujQPNg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/badge": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@react-types/badge/-/badge-3.1.6.tgz",
- "integrity": "sha512-6xjgfRnCVSBI6l/RQkI4u3tXiXw1aeFKRqXPcyIyt/kuu7rP0nKeYcM2XYyXXQp7vHfBdOEL2f6LwIHR/lx4uQ==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@react-types/badge/-/badge-3.1.7.tgz",
+ "integrity": "sha512-2Q5W9gleI83WpL1i6qPdcPC8l1V7364dpkNLcMi9DFmM2l69+QcPvSWVQMQLevmRo4cnaQ+TYsOgYv8I4rRJCg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/breadcrumbs": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.2.tgz",
- "integrity": "sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw==",
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.3.tgz",
+ "integrity": "sha512-eFto/+6J+JR58vThNcALZRA1OlqlG3GzQ/bq3q8IrrkOZcrfbEJJCWit/+53Ia98siJKuF4OJHnotxIVIz5I3w==",
"dependencies": {
- "@react-types/link": "^3.5.2",
- "@react-types/shared": "^3.22.0"
+ "@react-types/link": "^3.5.3",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/button": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.1.tgz",
- "integrity": "sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw==",
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.2.tgz",
+ "integrity": "sha512-EnPTkGHZRtiwAoJy5q9lDjoG30bEzA/qnvKG29VVXKYAGeqY2IlFs1ypmU+z1X/CpJgPcG3I5cakM7yTVm3pSg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/buttongroup": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/buttongroup/-/buttongroup-3.3.6.tgz",
- "integrity": "sha512-aKFDzAWM6bk2+EBDSZe3zq4NMuguXsPyZ9OexN0YLleK4IkRKE2S51PdChY/GAFhfs7VsOKgjHrYWUnrmCCYvw==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/buttongroup/-/buttongroup-3.3.7.tgz",
+ "integrity": "sha512-EZ/1k66GtDtWfE/udNRz2UBbt4YJumeyW1SGcZEO3jketvpms58WapLsMkCezlLz7WYaa5ADV0kU8v88APjI6g==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/calendar": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.3.tgz",
- "integrity": "sha512-96x57ctX5wNEl+8et3sc2NQm8neOJayEeqOQQpyPtI7jyvst/xBrKCwysf9W/dhgPlUC+KeBAYFWfjd5hFVHYA==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.4.tgz",
+ "integrity": "sha512-hV1Thmb/AES5OmfPvvmyjSkmsEULjiDfA7Yyy70L/YKuSNKb7Su+Bf2VnZuDW3ec+GxO4JJNlpJ0AkbphWBvcg==",
"dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-types/shared": "^3.22.0"
+ "@internationalized/date": "^3.5.2",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/checkbox": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.7.0.tgz",
- "integrity": "sha512-3ZW/+Fh5GkL7mQhayyESB9+YQ6y7nImLQ8jB2lg42esaK5UF7IpG3xlrYm2z4KWLvQFXncX7SJsnwzYiBMLY+g==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.7.1.tgz",
+ "integrity": "sha512-kuGqjQFex0As/3gfWyk+e9njCcad/ZdnYLLiNvhlk15730xfa0MmnOdpqo9jfuFSXBjOcpxoofvEhvrRMtEdUA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/combobox": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.10.0.tgz",
- "integrity": "sha512-1IXSNS02TPbguyYopaW2snU6sZusbClHrEyVr4zPeexTV4kpUUBNXOzFQ+eSQRR0r2XW57Z0yRW4GJ6FGU0yCA==",
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.10.1.tgz",
+ "integrity": "sha512-XMno1rgVRNta49vf5nV7VJpVSVAV20tt79t618gG1qRKH5Kt2Cy8lz2fQ5vHG6UTv/6jUOvU8g5Pc93sLaTmoA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/contextualhelp": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/@react-types/contextualhelp/-/contextualhelp-3.2.7.tgz",
- "integrity": "sha512-BHwBSBhPekKc/PxDpnkvfcEgpaYLMrV6WYgMfUz2/BMYOjdm+pb1y80vpNkWtrJKytyqp1zeZ+Ca+xzX1HdazA==",
+ "version": "3.2.8",
+ "resolved": "https://registry.npmjs.org/@react-types/contextualhelp/-/contextualhelp-3.2.8.tgz",
+ "integrity": "sha512-Yb0zOqkWfjKCO+gpfVj69CfWPhVq6RTgwLBV47ntIlHitpbh7RDYwDVulPyaVoopPbNSFUoV4YIJZPlOgpbKjg==",
"dependencies": {
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0"
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/datepicker": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.1.tgz",
- "integrity": "sha512-5juVDULOytNzkotqX8j5mYKJckeIpkgbHqVSGkPgLw0++FceIaSZ6RH56cqLup0pO45paqIt9zHh+QXBYX+syg==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.2.tgz",
+ "integrity": "sha512-zThqFAdhQL1dqyVDsDSSTdfCjoD6634eyg/B0ZJfQxcLUR/5pch3v/gxBhbyCVDGMNHRWUWIJvY9DVOepuoSug==",
"dependencies": {
- "@internationalized/date": "^3.5.1",
- "@react-types/calendar": "^3.4.3",
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0"
+ "@internationalized/date": "^3.5.2",
+ "@react-types/calendar": "^3.4.4",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/dialog": {
- "version": "3.5.7",
- "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.7.tgz",
- "integrity": "sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w==",
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.8.tgz",
+ "integrity": "sha512-RX8JsMvty8ADHRqVEkppoynXLtN4IzUh8d5z88UEBbcvWKlHfd6bOBQjQcBH3AUue5wjfpPIt6brw2VzgBY/3Q==",
"dependencies": {
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0"
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/divider": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/divider/-/divider-3.3.6.tgz",
- "integrity": "sha512-Iwwe349IiCX7ZQK1Oz4AN5kWwiXG0DECSN4qB3h+14n97JKy3chWJC7UA+V6+2p5DbxmLVZm4XxDRgx7y0lVTg==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/divider/-/divider-3.3.7.tgz",
+ "integrity": "sha512-enAlzHVwzqBPpmE+/VAO5IGVPxPrscHkdbnEkTqW9JQeMUGXd4L0TdHOGd+vtcA+gILJMnhUfT3XE4wQ4HlpVw==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/form": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.1.tgz",
- "integrity": "sha512-Wr44McYcB5Od3SwMzLhe1qaaZIy+YUe16jYRc/0io1gyCELXmplpIw8VQmf9/x62ze9CC/aZVdEJ/V9CogXmOA==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.2.tgz",
+ "integrity": "sha512-6/isEJY4PsYoHdMaGQtqQyquXGTwB1FqCBOPKQjI/vBGWG3fL7FGfWm4Z62eTbCH4Xyv3FZuNywlT8UjPMQyKA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/grid": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.3.tgz",
- "integrity": "sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.4.tgz",
+ "integrity": "sha512-sDVoyQcH7MoGdx5nBi5ZOU/mVFBt9YTxhvr0PZ97dMdEHZtJC1w9SuezwWS34f50yb8YAXQRTICbZYcK4bAlDA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/illustratedmessage": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/illustratedmessage/-/illustratedmessage-3.3.6.tgz",
- "integrity": "sha512-1FdJl1tR6mirmXT8yaTFeHNWdLXV6Dll66Mv1liEtTYsmCgn2anxwM73jK63t3jdT6ez/M1wGiwMlMtyiqo+ZQ==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/illustratedmessage/-/illustratedmessage-3.3.7.tgz",
+ "integrity": "sha512-r8WAv+w0WQSDRmDmG6jL0dXK8MjMr/lr2gBpVYVvC45Gu+fqf4VL+4zphgwASRysWclFbjQhgkgC7OEXk3GUKg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/image": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/image/-/image-3.3.6.tgz",
- "integrity": "sha512-GSb0deyquS3kFt0e9SfPP9I/YaYYUToYYPzx9As0R0mzuVn6qTHhUtpKhBqQAOpE1Cd8XdEQeYsDB3sdOurI+A==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/image/-/image-3.3.7.tgz",
+ "integrity": "sha512-ty6wuan6p3Z8OzSrbjtL2k8yXHW+n0qiYKyqKpSA8TcRLDLhtvRceI7X12RuDfbAiEN6/zfLCuF47O3y7OeKug==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/label": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.9.0.tgz",
- "integrity": "sha512-nTmPf5ED8aLGqvFsZHIHwMPrRX0cfbOyayva//Rdis41KWQoKUB80DIQjE+iUDOgTivIxGBkpqdIZVqRuehTnw==",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.9.1.tgz",
+ "integrity": "sha512-0N/UOhwrKjE9VjVbUoJCsH5UwTzSu3d5B3xtvhH8YFqSbJCI+HMKILby8i8ys55RA9fQDMScIjCJafEFWW7UWA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/layout": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.12.tgz",
- "integrity": "sha512-Ai6limgTVYQoGiXUvsXg8MHik+YAtRWEVLQhT5E1nQkDkNkQyccB+waUSfORhRkjJcnp+KMcbmPZ8V5ZO42rvQ==",
+ "version": "3.3.13",
+ "resolved": "https://registry.npmjs.org/@react-types/layout/-/layout-3.3.13.tgz",
+ "integrity": "sha512-Y3pmSsfDB+bV299F5SJannR6m/XM5IyfdqjPS0/Qx8KBBf0A3UWfL6qUr4BMEAKsEJuIXA7zT3RSo/AbGSbSyg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/link": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.2.tgz",
- "integrity": "sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.3.tgz",
+ "integrity": "sha512-yVafjW3IejyVnK3oMBNjFABCGG6J27EUG8rvkaGaI1uB6srGUEhpJ97XLv11aj1QkXHBy3VGXqxEV3S7wn4HTw==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/listbox": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.6.tgz",
- "integrity": "sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.7.tgz",
+ "integrity": "sha512-68y5H9CVSPFiwO6MOFxTbry9JQMK/Lb1M9i3M8TDyq1AbJxBPpgAvJ9RaqIMCucsnqCzpY/zA3D/X417zByL1w==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/menu": {
- "version": "3.9.6",
- "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.6.tgz",
- "integrity": "sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg==",
+ "version": "3.9.7",
+ "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.7.tgz",
+ "integrity": "sha512-K6KhloJVoGsqwkdeez72fkNI9dfrmLI/sNrB4XuOKo2crDQ/eyZYWyJmzz8giz/tHME9w774k487rVoefoFh5w==",
"dependencies": {
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0"
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/meter": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.3.6.tgz",
- "integrity": "sha512-1XYp1fA9UU0lO6kjf3TwVE8mppOJa64mBKAcLWtTyq1e/cYIAbx5o6CsuUx0YDpXKF6gdtvIWvfmxeWsmqJ1jQ==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.3.7.tgz",
+ "integrity": "sha512-p+YJ0+Lpn5MLmlbFZbDH1P0ILv1+AuMcUbxLcXMIVMGn7o0FO7eVZnFuq76D+qTDm9all+TRLJix7bctOrP+5Q==",
"dependencies": {
- "@react-types/progress": "^3.5.1"
+ "@react-types/progress": "^3.5.2"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/numberfield": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.0.tgz",
- "integrity": "sha512-2xnVvOVVSnvzT5JxldJdVRh/IMry9//PyQ5VcK3ze0m+bcD6zZspIdspzu8jiYyUPmZLHN1cZzx5GZSak1V6ig==",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.1.tgz",
+ "integrity": "sha512-GaCjLQgXUGCt40SLjKk3/COMWFlN2vV/3Xs3VSLAEdFZpk99b+Ik1oR21+7ZP5/iMHuQDc1MJRWdFfIjxCvVDQ==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/overlays": {
- "version": "3.8.4",
- "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.4.tgz",
- "integrity": "sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w==",
+ "version": "3.8.5",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.5.tgz",
+ "integrity": "sha512-4D7EEBQigD/m8hE68Ys8eloyyZFHHduqykSIgINJ0edmo0jygRbWlTwuhWFR9USgSP4dK54duN0Mvq0m4HEVEw==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/progress": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.1.tgz",
- "integrity": "sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.2.tgz",
+ "integrity": "sha512-aQql22kusEudsHwDEzq6y/Mh29AM+ftRDKdS5E5g4MkCY5J4FMbOYco1T5So83NIvvG9+eKcxPoJUMjQQACAyA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/provider": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.7.1.tgz",
- "integrity": "sha512-WKwHwG5b0LkI570tbHCy4hBhT/E+OrdgIybScDxM713B2OwmMKKyaPKdV05SeoomP8oiPvkaAeXhLZa1ah7CYg==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-types/provider/-/provider-3.7.2.tgz",
+ "integrity": "sha512-nzxbfuh/ZJXt/blGAiRPkxi9jAUnnBkHcvljqdfizfLJlN5epaYYaTWNUSde27Oe1tAnpm2WDlLQo5+0C6C0FA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/radio": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.7.0.tgz",
- "integrity": "sha512-EcwGAXzSHjSqpFZha7xn3IUrhPiJLj+0yb1Ip0qPmhWz0VVw2DwrkY7q/jfaKroVvQhTo2TbfGhcsAQrt0fRqg==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.7.1.tgz",
+ "integrity": "sha512-Zut3rN1odIUBLZdijeyou+UqsLeRE76d9A+npykYGu29ndqmo3w4sLn8QeQcdj1IR71ZnG0pW2Y2BazhK5XrrQ==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/searchfield": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.2.tgz",
- "integrity": "sha512-JAK2/Kg4Dr393FYfbRw0TlXKnJPX77sq1x/ZBxtO6p64+MuuIYKqw0i9PwDlo1PViw2QI5u8GFhKA2TgemY9uA==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.3.tgz",
+ "integrity": "sha512-gBfsT1WpY8UIb74yyYmnjiHpVasph2mdmGj9i8cGF2HUYwx5p+Fr85mtCGDph0uirvRoM5ExMp4snD+ueNAVCg==",
"dependencies": {
- "@react-types/shared": "^3.22.0",
- "@react-types/textfield": "^3.9.0"
+ "@react-types/shared": "^3.22.1",
+ "@react-types/textfield": "^3.9.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/select": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.1.tgz",
- "integrity": "sha512-EpKSxrnh8HdZvOF9dHQkjivAcdIp1K81FaxmvosH8Lygqh0iYXxAdZGtKLMyBoPI8YFhA+rotIzTcOqgCCnqWA==",
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.2.tgz",
+ "integrity": "sha512-fGFrunednY3Pq/BBwVOf87Fsuyo/SlevL0wFIE9OOl2V5NXVaTY7/7RYA8hIOHPzmvsMbndy419BEudiNGhv4A==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/shared": {
- "version": "3.22.0",
- "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.22.0.tgz",
- "integrity": "sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==",
+ "version": "3.22.1",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.22.1.tgz",
+ "integrity": "sha512-PCpa+Vo6BKnRMuOEzy5zAZ3/H5tnQg1e80khMhK2xys0j6ZqzkgQC+fHMNZ7VDFNLqqNMj/o0eVeSBDh2POjkw==",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/slider": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.0.tgz",
- "integrity": "sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.1.tgz",
+ "integrity": "sha512-FKO3YZYdrBs00XbBW5acP+0L1cCdevl/uRJiXbnLpGysO5PrSFIRS7Wlv4M7ztf6gT7b1Ao4FNC9crbxBr6BzA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/statuslight": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/statuslight/-/statuslight-3.3.6.tgz",
- "integrity": "sha512-MB/CnsbaE6reOrnpowJfgkpeSNY0ZuqA6g/k8331a+TP2yIO6X0cUYyEGG8S/k9hFyFCMKlcmmm4pwMrX4sZtQ==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/statuslight/-/statuslight-3.3.7.tgz",
+ "integrity": "sha512-PFctvM8NJFENNWHydEK4pCMXKmjrHB2PJ/fdJ2Bi6ABRcTBXzi/qgUUdbeTG7STXlA+P2/xNgKtHheus8K+K3g==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/switch": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.0.tgz",
- "integrity": "sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.1.tgz",
+ "integrity": "sha512-2LFEKMGeufqyYmeN/5dtkDkCPG6x9O4eu6aaBaJmPGon7C/l3yiFEgRue6oCUYc1HixR7Qlp0sPxk0tQeWzrSg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/table": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.2.tgz",
- "integrity": "sha512-brw5JUANOzBa2rYNpN8AIl9nDZ9RwRZC6G/wTM/JhtirjC1S42oCtf8Ap5rWJBdmMG/5KOfcGNcAl/huyqb3gg==",
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.3.tgz",
+ "integrity": "sha512-Hs/pMbxJdga2zBol4H5pV1FVIiRjCuSTXst6idJjkctanTexR4xkyrtBwl+rdLNoGwQ2pGii49vgklc5bFK7zA==",
"dependencies": {
- "@react-types/grid": "^3.2.3",
- "@react-types/shared": "^3.22.0"
+ "@react-types/grid": "^3.2.4",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/tabs": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.4.tgz",
- "integrity": "sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w==",
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.5.tgz",
+ "integrity": "sha512-6NTSZBOWekCtApdZrhu5tHhE/8q52oVohQN+J5T7shAXd6ZAtu8PABVR/nH4BWucc8FL0OUajRqunqzQMU13gA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/text": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/text/-/text-3.3.6.tgz",
- "integrity": "sha512-cO3IQ/DQ/xUGGskJ8/zCLkbzvrjlQbRnrJl95BEGs97CmiN+zqGoCqvDhjWEbuPRtfGXJ27CYZDC2oVZetUG4w==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/text/-/text-3.3.7.tgz",
+ "integrity": "sha512-URkJHS314ppyq6JjMPZbg/P4j9vey0H/Lc2+YB96qIcebBKy8iNN0IlwRsLFXimlGDp7dgn6tv+51bdJh+CRCQ==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/textfield": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.0.tgz",
- "integrity": "sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA==",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.1.tgz",
+ "integrity": "sha512-JBHY9M2CkL6xFaGSfWmUJVu3tEK09FaeB1dU3IEh6P41xxbFnPakYHSSAdnwMXBtXPoSHIVsUBickW/pjgfe5g==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/tooltip": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.6.tgz",
- "integrity": "sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.7.tgz",
+ "integrity": "sha512-rV4HZRQxLRNhe24yATOxnFQtGRUmsR7mqxMupXCmd1vrw8h+rdKlQv1zW2q8nALAKNmnRXZJHxYQ1SFzb98fgg==",
"dependencies": {
- "@react-types/overlays": "^3.8.4",
- "@react-types/shared": "^3.22.0"
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/view": {
- "version": "3.4.6",
- "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.6.tgz",
- "integrity": "sha512-GAdvvabJAYrVCgOUsZp8KkmNLfkKnDmoMNmwCN9I2OnSS+5JyjTrgNIOiznMjDEqhXTbaefcsVofoUfTYXjtyQ==",
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/@react-types/view/-/view-3.4.7.tgz",
+ "integrity": "sha512-AcgLrlaZkCXH+pD4I7pTPB52Rstg1M+V2yKPP29lnqg/rOjsqLjN/gLLy/EBi97cQ+TbDbg0854vcxAKs6qclg==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
}
},
"node_modules/@react-types/well": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@react-types/well/-/well-3.3.6.tgz",
- "integrity": "sha512-NX4+bMmNYrbjllKR9Xxg0YHNWrscHzZQmcdYiM/Z8qZ1TNVPhXeLmKxCDamlmUSZudCqwui4q5xwzuUyrRRA6w==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/well/-/well-3.3.7.tgz",
+ "integrity": "sha512-BaZ4utlEeweD8+mAYdqwq2bS8aDrXqi4xFPdfqZpHcpbSJjmGBCCS+GU2y/N2Yl1aODu5l0+gcrvxxr63bV+GA==",
"dependencies": {
- "@react-types/shared": "^3.22.0"
+ "@react-types/shared": "^3.22.1"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -6799,12 +6787,12 @@
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
},
"node_modules/@spectrum-icons/ui": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.6.4.tgz",
- "integrity": "sha512-ojjICGgVaBeMKbeMB9/KCAs7l2ToJlNrJUVljkLv2Os6fukGHsAgVgO6wyw9diUIZGgentpx441+CQLooi9J6w==",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@spectrum-icons/ui/-/ui-3.6.5.tgz",
+ "integrity": "sha512-L1QISmlzoA4xuBdMpWT2vkR7NDxuROjSwC5BxS8R2SAZR4oKs0dPfODaw2uju6D/xqJIqVrSM6yQDhV51lPKyA==",
"dependencies": {
"@adobe/react-spectrum-ui": "1.2.0",
- "@react-spectrum/icon": "^3.7.10",
+ "@react-spectrum/icon": "^3.7.11",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -6813,12 +6801,12 @@
}
},
"node_modules/@spectrum-icons/workflow": {
- "version": "4.2.9",
- "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.2.9.tgz",
- "integrity": "sha512-JdDzhnI7ASToodB1V5iy/CZNNHXxE7fwaPCS4+BpdwoibowgK5c1tnu1nHhzMHilw94UosYQjPbf3zzjSSYbjw==",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/@spectrum-icons/workflow/-/workflow-4.2.10.tgz",
+ "integrity": "sha512-CaDYaGMe2bYDozzHztrgEy0tljQWn4OBE9hJC2fAM5cMTve4viiWhcmHYYWFv3MZQyavHy1UwCL1jlXg7bK3PA==",
"dependencies": {
"@adobe/react-spectrum-workflow": "2.3.4",
- "@react-spectrum/icon": "^3.7.10",
+ "@react-spectrum/icon": "^3.7.11",
"@swc/helpers": "^0.5.0"
},
"peerDependencies": {
@@ -9117,9 +9105,9 @@
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
},
"node_modules/@types/node": {
- "version": "20.11.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.18.tgz",
- "integrity": "sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw==",
+ "version": "20.11.20",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz",
+ "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==",
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -9254,9 +9242,9 @@
}
},
"node_modules/@types/react": {
- "version": "18.2.55",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.55.tgz",
- "integrity": "sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==",
+ "version": "18.2.57",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz",
+ "integrity": "sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -10343,6 +10331,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -10432,9 +10428,12 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/available-typed-arrays": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
- "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -10830,9 +10829,9 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/bootstrap": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz",
- "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
+ "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
"funding": [
{
"type": "github",
@@ -14035,9 +14034,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001587",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz",
- "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==",
+ "version": "1.0.30001589",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
+ "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==",
"funding": [
{
"type": "opencollective",
@@ -15667,6 +15666,18 @@
}
}
},
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
@@ -16143,9 +16154,9 @@
}
},
"node_modules/dotenv": {
- "version": "16.4.4",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz",
- "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==",
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"dev": true,
"engines": {
"node": ">=12"
@@ -16201,9 +16212,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.670",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz",
- "integrity": "sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A=="
+ "version": "1.4.680",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz",
+ "integrity": "sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A=="
},
"node_modules/elkjs": {
"version": "0.9.2",
@@ -16465,14 +16476,14 @@
"integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w=="
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -18053,18 +18064,6 @@
"node": ">=8"
}
},
- "node_modules/eslint/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -18163,6 +18162,11 @@
"node": ">=6"
}
},
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ },
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -18460,7 +18464,8 @@
"node_modules/fast-diff": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
- "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true
},
"node_modules/fast-equals": {
"version": "4.0.3",
@@ -18827,9 +18832,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/flexlayout-react": {
@@ -19351,9 +19356,9 @@
}
},
"node_modules/gaxios": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.2.0.tgz",
- "integrity": "sha512-H6+bHeoEAU5D6XNc6mPKeN5dLZqEDs9Gpk6I+SZBEzK5So58JVrHPmevNi35fRl1J9Y5TaeLW0kYx3pCJ1U2mQ==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz",
+ "integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==",
"dependencies": {
"extend": "^3.0.2",
"https-proxy-agent": "^7.0.1",
@@ -19376,9 +19381,9 @@
}
},
"node_modules/gaxios/node_modules/https-proxy-agent": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz",
- "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+ "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
@@ -19888,9 +19893,9 @@
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"engines": {
"node": ">= 0.4"
},
@@ -20363,9 +20368,9 @@
}
},
"node_modules/http-proxy-agent": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz",
- "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"dependencies": {
"agent-base": "^7.1.0",
@@ -20423,12 +20428,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/http-proxy/node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
- },
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -20503,14 +20502,6 @@
"npm": ">=5.3.0"
}
},
- "node_modules/hyperdyperid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
- "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
- "engines": {
- "node": ">=10.18"
- }
- },
"node_modules/i": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
@@ -21467,9 +21458,9 @@
}
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -21510,6 +21501,17 @@
"node": ">=8"
}
},
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -21557,12 +21559,15 @@
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -21968,9 +21973,9 @@
}
},
"node_modules/jsdom/node_modules/https-proxy-agent": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz",
- "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+ "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
"dev": true,
"dependencies": {
"agent-base": "^7.0.2",
@@ -22473,12 +22478,6 @@
"resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
"integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w=="
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "peer": true
- },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -22489,12 +22488,6 @@
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
},
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "peer": true
- },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -24635,9 +24628,9 @@
}
},
"node_modules/mongoose": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.1.2.tgz",
- "integrity": "sha512-5KMq7k6KmFCIB8/YMKMFsWdsdNkBwuARDRHDRpp5GKC78eT0LwHIaMEKo6gDUg3zBuMoy9OdcM/6f4dkW06C/A==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.0.tgz",
+ "integrity": "sha512-la93n6zCYRbPS+c5N9oTDAktvREy5OT9OCljp1Tah0y3+p8UPMTAoabWaLZMdzYruOtF9/9GRf6MasaZjiZP1A==",
"dependencies": {
"bson": "^6.2.0",
"kareem": "2.5.1",
@@ -24733,14 +24726,6 @@
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ=="
},
- "node_modules/multimatch/node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/multimatch/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -24953,17 +24938,17 @@
}
},
"node_modules/nodemailer": {
- "version": "6.9.9",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.9.tgz",
- "integrity": "sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==",
+ "version": "6.9.10",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.10.tgz",
+ "integrity": "sha512-qtoKfGFhvIFW5kLfrkw2R6Nm6Ur4LNUMykyqu6n9BRKJuyQrqEGwdXXUAbwWEKt33dlWUGXb7rzmJP/p4+O+CA==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/nodemon": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz",
- "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
+ "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
"dependencies": {
"chokidar": "^3.5.2",
"debug": "^4",
@@ -27941,9 +27926,9 @@
}
},
"node_modules/openai/node_modules/@types/node": {
- "version": "18.19.16",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.16.tgz",
- "integrity": "sha512-mjtrR7Wco9ZwcGBc1zre6fENlj9z42/+0W26lBGtGBTPiR3Zm9iZAaiPhxreG6magwGCILLVYwlQ48GjAaqM6w==",
+ "version": "18.19.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz",
+ "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==",
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -28120,9 +28105,9 @@
"integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
},
"node_modules/parse-bmfont-xml": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.5.tgz",
- "integrity": "sha512-wgM+ANC5G5Yu08/IEFMxr9x+PpHg+R8jf8U8q0P91TBDaTdjcf4IwupUiPwEcJJKNqSshC2tOkDQW3Q30s1efQ==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
+ "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
"dependencies": {
"xml-parse-from-string": "^1.0.0",
"xml2js": "^0.5.0"
@@ -28482,7 +28467,8 @@
"node_modules/phin": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
- "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
+ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
},
"node_modules/picocolors": {
"version": "1.0.0",
@@ -28643,6 +28629,14 @@
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
"integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
@@ -28956,9 +28950,9 @@
}
},
"node_modules/prosemirror-view": {
- "version": "1.32.7",
- "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.7.tgz",
- "integrity": "sha512-pvxiOoD4shW41X5bYDjRQk3DSG4fMqxh36yPMt7VYgU3dWRmqFzWJM/R6zeo1KtC8nyk717ZbQND3CC9VNeptw==",
+ "version": "1.33.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.1.tgz",
+ "integrity": "sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==",
"dependencies": {
"prosemirror-model": "^1.16.0",
"prosemirror-state": "^1.0.0",
@@ -29219,20 +29213,6 @@
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
},
- "node_modules/quill-delta": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz",
- "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",
- "peer": true,
- "dependencies": {
- "fast-diff": "^1.3.0",
- "lodash.clonedeep": "^4.5.0",
- "lodash.isequal": "^4.5.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
"node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -29335,9 +29315,9 @@
}
},
"node_modules/rc-util": {
- "version": "5.38.1",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.1.tgz",
- "integrity": "sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==",
+ "version": "5.38.2",
+ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.38.2.tgz",
+ "integrity": "sha512-yRGRPKyi84H7NkRSP6FzEIYBdUt4ufdsmXUZ7qM2H5qoByPax70NnGPkfo36N+UKUnUBj2f2Q2eUbwYMuAsIOQ==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"react-is": "^18.2.0"
@@ -29529,9 +29509,9 @@
}
},
"node_modules/react-intersection-observer": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.8.0.tgz",
- "integrity": "sha512-wXHvMQUsTagh3X0Z6jDtGkIXc3VVCd2tjDRYR9kII3GKrZr0XF0xtpfdamo2n8BSF+zzfeeBVOTjxZWpBp9X0g==",
+ "version": "9.8.1",
+ "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.8.1.tgz",
+ "integrity": "sha512-QzOFdROX8D8MH3wE3OVKH0f3mLjKTtEN1VX/rkNuECCff+aKky0pIjulDhr3Ewqj5el/L+MhBkM3ef0Tbt+qUQ==",
"peerDependencies": {
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
@@ -29873,13 +29853,13 @@
"integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
},
"node_modules/recharts": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.0.tgz",
- "integrity": "sha512-rVNcdNQ5b7+40Ue7mcEKZJyEv+3SUk2bDEVvOyXPDXXVE7TU3lrvnJUgAvO36hSzhRP2DnAamKXvHLFIFOU0Ww==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.1.tgz",
+ "integrity": "sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==",
"dependencies": {
"clsx": "^2.0.0",
"eventemitter3": "^4.0.1",
- "lodash": "^4.17.19",
+ "lodash": "^4.17.21",
"react-is": "^16.10.2",
"react-smooth": "^4.0.0",
"recharts-scale": "^0.4.4",
@@ -29902,11 +29882,6 @@
"decimal.js-light": "^2.4.1"
}
},
- "node_modules/recharts/node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
"node_modules/recharts/node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -30663,9 +30638,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sass": {
- "version": "1.70.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz",
- "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
+ "version": "1.71.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
+ "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -31016,13 +30991,14 @@
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -31334,10 +31310,11 @@
}
},
"node_modules/socket.io-adapter": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
- "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz",
+ "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==",
"dependencies": {
+ "debug": "~4.3.4",
"ws": "~8.11.0"
}
},
@@ -31660,9 +31637,9 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/streamx": {
- "version": "2.15.8",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.8.tgz",
- "integrity": "sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
+ "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
"dependencies": {
"fast-fifo": "^1.1.0",
"queue-tick": "^1.0.1"
@@ -32198,9 +32175,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/terser": {
- "version": "5.27.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.1.tgz",
- "integrity": "sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==",
+ "version": "5.27.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz",
+ "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -32280,25 +32257,13 @@
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
},
"node_modules/textarea-caret": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/textarea-caret/-/textarea-caret-3.1.0.tgz",
"integrity": "sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q=="
},
- "node_modules/thingies": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.16.0.tgz",
- "integrity": "sha512-J23AVs11hSQxuJxvfQyMIaS9z1QpDxOCvMkL3ZxZl8/jmkgmnNGWrlyNxVz6Jbh0U6DuGmHqq6f7zUROfg/ncg==",
- "engines": {
- "node": ">=10.18"
- },
- "peerDependencies": {
- "tslib": "^2"
- }
- },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -33135,6 +33100,18 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -33148,12 +33125,12 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz",
- "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.6",
+ "call-bind": "^1.0.7",
"es-errors": "^1.3.0",
"is-typed-array": "^1.1.13"
},
@@ -33162,15 +33139,16 @@
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -33180,16 +33158,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -33199,14 +33178,20 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz",
+ "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -33367,17 +33352,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unified/node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/uninstall": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/uninstall/-/uninstall-0.0.0.tgz",
@@ -33906,9 +33880,9 @@
}
},
"node_modules/web-streams-polyfill": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz",
- "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
"engines": {
"node": ">= 8"
}
@@ -33927,9 +33901,9 @@
}
},
"node_modules/webpack": {
- "version": "5.90.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz",
- "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==",
+ "version": "5.90.3",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
+ "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
"dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
@@ -34070,49 +34044,12 @@
}
}
},
- "node_modules/webpack-dev-middleware/node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
- },
- "node_modules/webpack-dev-middleware/node_modules/json-joy": {
- "version": "11.28.0",
- "resolved": "https://registry.npmjs.org/json-joy/-/json-joy-11.28.0.tgz",
- "integrity": "sha512-WTq2tYD2r+0rUFId4gtUjwejV20pArh4q2WRJKxJdwLlPFHyW94HwwB2vUr5lUJTVkehhhWEVLwOUI0MSacNIw==",
- "dependencies": {
- "arg": "^5.0.2",
- "hyperdyperid": "^1.2.0",
- "thingies": "^1.14.1"
- },
- "bin": {
- "jj": "bin/jj.js",
- "json-pack": "bin/json-pack.js",
- "json-pack-test": "bin/json-pack-test.js",
- "json-patch": "bin/json-patch.js",
- "json-patch-test": "bin/json-patch-test.js",
- "json-pointer": "bin/json-pointer.js",
- "json-pointer-test": "bin/json-pointer-test.js",
- "json-unpack": "bin/json-unpack.js"
- },
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "quill-delta": "^5",
- "rxjs": "7",
- "tslib": "2"
- }
- },
"node_modules/webpack-dev-middleware/node_modules/memfs": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.7.0.tgz",
- "integrity": "sha512-FGbf9Yz2gzXCUmpymkKnzAQOitriZQlIMtmnzb2LOcT0FTUdzL6AAwNGQrSOACx/UiW7XQsG65vrIA9+L01Edw==",
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.7.7.tgz",
+ "integrity": "sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw==",
"dependencies": {
- "json-joy": "^11.0.0",
- "thingies": "^1.11.1"
+ "tslib": "^2.0.0"
},
"engines": {
"node": ">= 4.0.0"
@@ -34120,18 +34057,6 @@
"funding": {
"type": "github",
"url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "tslib": "2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "peer": true,
- "dependencies": {
- "tslib": "^2.1.0"
}
},
"node_modules/webpack-dev-server": {
@@ -34896,18 +34821,6 @@
"node": ">=10"
}
},
- "node_modules/yargs-unparser/node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/yargs-unparser/node_modules/is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
diff --git a/src/Utils.ts b/src/Utils.ts
index e8bd35ac4..38325a463 100644
--- a/src/Utils.ts
+++ b/src/Utils.ts
@@ -902,6 +902,13 @@ export function setupMoveUpEvents(
document.addEventListener('click', _clickEvent, true);
}
+export function DivHeight(ele: HTMLElement): number {
+ return Number(getComputedStyle(ele).height.replace('px', ''));
+}
+export function DivWidth(ele: HTMLElement): number {
+ return Number(getComputedStyle(ele).width.replace('px', ''));
+}
+
export function dateRangeStrToDates(dateStr: string) {
// dateStr in yyyy-mm-dd format
const dateRangeParts = dateStr.split('|'); // splits into from and to date
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index a6e229ba7..2f177b62a 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -3,7 +3,7 @@ import { action, reaction, runInAction } from 'mobx';
import { basename } from 'path';
import { DateField } from '../../fields/DateField';
import { Doc, DocListCast, Field, LinkedTo, Opt, StrListCast, updateCachedAcls } from '../../fields/Doc';
-import { Initializing } from '../../fields/DocSymbols';
+import { DocData, Initializing } from '../../fields/DocSymbols';
import { Id } from '../../fields/FieldSymbols';
import { HtmlField } from '../../fields/HtmlField';
import { InkField, PointData } from '../../fields/InkField';
@@ -69,13 +69,24 @@ class EmptyBox {
return '';
}
}
+
+export enum FInfoFieldType {
+ string = 'string',
+ boolean = 'boolean',
+ number = 'number',
+ Doc = 'Doc',
+ enumeration = 'enum',
+ date = 'date',
+ list = 'list',
+ rtf = 'rich text',
+}
export class FInfo {
description: string = '';
readOnly: boolean = false;
- fieldType?: string = '';
+ fieldType?: FInfoFieldType;
values?: Field[];
- filterable?: boolean = true;
+ filterable?: boolean = true; // can be used as a Filter in FilterPanel
// format?: string; // format to display values (e.g, decimal places, $, etc)
// parse?: ScriptField; // parse a value from a string
constructor(d: string, readOnly?: boolean) {
@@ -85,7 +96,7 @@ export class FInfo {
searchable = () => true;
}
class BoolInfo extends FInfo {
- fieldType? = 'boolean';
+ fieldType? = FInfoFieldType.boolean;
values?: boolean[] = [true, false];
constructor(d: string, filterable?: boolean) {
super(d);
@@ -94,7 +105,7 @@ class BoolInfo extends FInfo {
override searchable = () => false;
}
class NumInfo extends FInfo {
- fieldType? = 'number';
+ fieldType? = FInfoFieldType.number;
values?: number[] = [];
constructor(d: string, filterable?: boolean, readOnly?: boolean, values?: number[]) {
super(d, readOnly);
@@ -104,7 +115,7 @@ class NumInfo extends FInfo {
override searchable = () => false;
}
class StrInfo extends FInfo {
- fieldType? = 'string';
+ fieldType? = FInfoFieldType.string;
values?: string[] = [];
constructor(d: string, filterable?: boolean, readOnly?: boolean, values?: string[]) {
super(d, readOnly);
@@ -113,7 +124,7 @@ class StrInfo extends FInfo {
}
}
class DocInfo extends FInfo {
- fieldType? = 'Doc';
+ fieldType? = FInfoFieldType.Doc;
values?: Doc[] = [];
constructor(d: string, filterable?: boolean, values?: Doc[]) {
super(d, true);
@@ -123,45 +134,55 @@ class DocInfo extends FInfo {
override searchable = () => false;
}
class DimInfo extends FInfo {
- fieldType? = 'enumeration';
+ fieldType? = FInfoFieldType.enumeration;
values? = [DimUnit.Pixel, DimUnit.Ratio];
readOnly = false;
filterable = false;
override searchable = () => false;
}
class PEInfo extends FInfo {
- fieldType? = 'enumeration';
+ fieldType? = FInfoFieldType.enumeration;
values? = ['all', 'none'];
readOnly = false;
filterable = false;
override searchable = () => false;
}
class DAInfo extends FInfo {
- fieldType? = 'enumeration';
- values? = ['embed', 'copy', 'move', 'same', 'proto', 'none'];
+ fieldType? = FInfoFieldType.enumeration;
+ values? = ['embed', 'copy', 'move', 'same', 'add', 'inSame', 'proto'];
readOnly = false;
filterable = false;
override searchable = () => false;
}
class CTypeInfo extends FInfo {
- fieldType? = 'enumeration';
+ fieldType? = FInfoFieldType.enumeration;
values? = Array.from(Object.keys(CollectionViewType));
readOnly = false;
filterable = false;
override searchable = () => false;
}
class DTypeInfo extends FInfo {
- fieldType? = 'enumeration';
+ fieldType? = FInfoFieldType.enumeration;
values? = Array.from(Object.keys(DocumentType));
override searchable = () => false;
}
class DateInfo extends FInfo {
- fieldType? = 'date';
+ constructor(d: string, filterable?: boolean) {
+ super(d, true);
+ this.filterable = filterable;
+ }
+ fieldType? = FInfoFieldType.date;
values?: DateField[] = [];
- filterable = true;
+}
+class RtfInfo extends FInfo {
+ constructor(d: string, filterable?: boolean) {
+ super(d, true);
+ this.filterable = filterable;
+ }
+ fieldType? = FInfoFieldType.rtf;
}
class ListInfo extends FInfo {
- fieldType? = 'list';
+ fieldType? = FInfoFieldType.list;
values?: List<any>[] = [];
}
type BOOLt = BoolInfo | boolean;
@@ -169,6 +190,7 @@ type NUMt = NumInfo | number;
type STRt = StrInfo | string;
type LISTt = ListInfo | List<any>;
type DOCt = DocInfo | Doc;
+type RTFt = RtfInfo | RichTextField;
type DIMt = DimInfo | typeof DimUnit.Pixel | typeof DimUnit.Ratio;
type PEVt = PEInfo | 'none' | 'all';
type COLLt = CTypeInfo | CollectionViewType;
@@ -177,19 +199,20 @@ type DATEt = DateInfo | number;
type DTYPEt = DTypeInfo | string;
export class DocumentOptions {
// coordinate and dimensions depending on view
- x?: NUMt = new NumInfo('x coordinate of document in a freeform view', false);
- y?: NUMt = new NumInfo('y coordinate of document in a freeform view', false);
+ x?: NUMt = new NumInfo('horizontal coordinate in freeform view', false);
+ y?: NUMt = new NumInfo('vertical coordinate in freeform view', false);
z?: NUMt = new NumInfo('whether document is in overlay (1) or not (0)', false, false, [1, 0]);
- overlayX?: NUMt = new NumInfo('x coordinate of document in a overlay view', false);
- overlayY?: NUMt = new NumInfo('y coordinate of document in a overlay view', false);
+ overlayX?: NUMt = new NumInfo('horizontal coordinate in overlay view', false);
+ overlayY?: NUMt = new NumInfo('vertical coordinate in overlay view', false);
+ text?: RTFt = new RtfInfo('plain or rich text', true);
_dimMagnitude?: NUMt = new NumInfo("magnitude of collectionMulti{row,col} element's width or height", false);
_dimUnit?: DIMt = new DimInfo("units of collectionMulti{row,col} element's width or height - 'px' or '*' for pixels or relative units");
- latitude?: NUMt = new NumInfo('latitude coordinate for map views', false);
- longitude?: NUMt = new NumInfo('longitude coordinate for map views', false);
+ latitude?: NUMt = new NumInfo('latitude coordinate', false);
+ longitude?: NUMt = new NumInfo('longitude coordinate', false);
routeCoordinates?: STRt = new StrInfo("stores a route's/direction's coordinates (stringified version)"); // for a route document, this stores the route's coordinates
- markerType?: STRt = new StrInfo('Defines the marker type for a pushpin document');
- markerColor?: STRt = new StrInfo('Defines the marker color for a pushpin document');
- map?: STRt = new StrInfo('text location of map');
+ markerType?: STRt = new StrInfo('marker type for a pushpin document');
+ markerColor?: STRt = new StrInfo('marker color for a pushpin document');
+ map?: STRt = new StrInfo('map location name');
map_type?: STRt = new StrInfo('type of map view', false);
map_zoom?: NUMt = new NumInfo('zoom of a map view', false);
map_pitch?: NUMt = new NumInfo('pitch of a map view', false);
@@ -199,11 +222,11 @@ export class DocumentOptions {
date_range?: STRt = new StrInfo('date range for calendar', false);
wikiData?: STRt = new StrInfo('WikiData ID related to map location');
- description?: STRt = new StrInfo('A description of the document');
- _timecodeToShow?: NUMt = new NumInfo('the time that a document should be displayed (e.g., when an annotation shows up as a video plays)', false);
- _timecodeToHide?: NUMt = new NumInfo('the time that a document should be hidden', false);
- _width?: NUMt = new NumInfo('displayed width of a document');
- _height?: NUMt = new NumInfo('displayed height of document');
+ description?: STRt = new StrInfo('description of document');
+ _timecodeToShow?: NUMt = new NumInfo('media timecode when document should appear (e.g., when an annotation shows up as a video plays)', false);
+ _timecodeToHide?: NUMt = new NumInfo('media timecode when document should disappear', false);
+ _width?: NUMt = new NumInfo("width of document in container's coordinates");
+ _height?: NUMt = new NumInfo("height of document in container's coordiantes");
data_nativeWidth?: NUMt = new NumInfo('native width of data field contents (e.g., the pixel width of an image)', false);
data_nativeHeight?: NUMt = new NumInfo('native height of data field contents (e.g., the pixel height of an image)', false);
linearBtnWidth?: NUMt = new NumInfo('unexpanded width of a linear menu button (button "width" changes when it expands)', false);
@@ -256,15 +279,15 @@ export class DocumentOptions {
layout_borderRounding?: string;
_layout_modificationDate?: DATEt = new DateInfo('last modification date of doc layout', false);
_layout_nativeDimEditable?: BOOLt = new BoolInfo('native dimensions can be modified using document decoration reizers', false);
- _layout_reflowVertical?: BOOLt = new BoolInfo('native height can be changed independent of width by dragging decoration resizers');
- _layout_reflowHorizontal?: BOOLt = new BoolInfo('whether a doc with a native size can be horizonally resized, causing some form of reflow');
+ _layout_reflowVertical?: BOOLt = new BoolInfo('permit vertical resizing with content "reflow"');
+ _layout_reflowHorizontal?: BOOLt = new BoolInfo('permit horizontal resizing with content reflow');
layout_boxShadow?: string; // box-shadow css string OR "standard" to use dash standard box shadow
+ layout_maxShown?: NUMt = new NumInfo('maximum number of children to display at one time (see multicolumnview)');
_layout_autoHeight?: BOOLt = new BoolInfo('whether document automatically resizes vertically to display contents');
_layout_curPage?: NUMt = new NumInfo('current page of a PDF or other? paginated document', false);
_layout_currentTimecode?: NUMt = new NumInfo('the current timecode of a time-based document (e.g., current time of a video) value is in seconds', false);
_layout_centered?: BOOLt = new BoolInfo('whether text should be vertically centered in Doc');
_layout_fitWidth?: BOOLt = new BoolInfo('whether document should scale its contents to fit its rendered width or not (e.g., for PDFviews)');
- _layout_fitContentsToBox?: BOOLt = new BoolInfo('whether a freeformview should zoom/scale to create a shrinkwrapped view of its content');
_layout_fieldKey?: STRt = new StrInfo('the field key containing the current layout definition', false);
_layout_enableAltContentUI?: BOOLt = new BoolInfo('whether to show alternate content button');
_layout_showTitle?: string; // field name to display in header (:hover is an optional suffix)
@@ -296,7 +319,6 @@ export class DocumentOptions {
_label_minFontSize?: NUMt = new NumInfo('minimum font size for labelBoxes', false);
_label_maxFontSize?: NUMt = new NumInfo('maximum font size for labelBoxes', false);
stroke_width?: NUMt = new NumInfo('width of an ink stroke', false);
- icon_label?: STRt = new StrInfo('label to use for a fontIcon doc (otherwise, the title is used)', false);
mediaState?: STRt = new StrInfo(`status of audio/video media document: ${media_state.PendingRecording}, ${media_state.Recording}, ${media_state.Paused}, ${media_state.Playing}`, false);
recording?: BOOLt = new BoolInfo('whether WebCam is recording or not');
slides?: DOCt = new DocInfo('presentation slide associated with video recording (bcz: should be renamed!!)');
@@ -375,6 +397,7 @@ export class DocumentOptions {
_freeform_panY?: NUMt = new NumInfo('vertical pan location of a freeform view');
_freeform_noAutoPan?: BOOLt = new BoolInfo('disables autopanning when this item is dragged');
_freeform_noZoom?: BOOLt = new BoolInfo('disables zooming (used by Pile docs)');
+ _freeform_fitContentsToBox?: BOOLt = new BoolInfo('whether a freeformview should zoom/scale to create a shrinkwrapped view of its content');
//BUTTONS
buttonText?: string;
@@ -461,7 +484,6 @@ export class DocumentOptions {
sidebar_type_collection?: string; // collection type of text sidebar
data_dashboards?: List<any>; // list of dashboards used in shareddocs;
- text?: string;
textTransform?: string;
letterSpacing?: string;
iconTemplate?: string; // name of icon template style
@@ -631,8 +653,8 @@ export namespace Docs {
[
DocumentType.LABEL,
{
- layout: { view: LabelBox, dataField: defaultDataKey },
- options: { _singleLine: true },
+ layout: { view: LabelBox, dataField: 'title' },
+ options: { _singleLine: true, layout_nativeDimEditable: true, layout_reflowHorizontal: true, layout_reflowVertical: true },
},
],
[
@@ -670,8 +692,8 @@ export namespace Docs {
[
DocumentType.BUTTON,
{
- layout: { view: LabelBox, dataField: 'onClick' },
- options: {},
+ layout: { view: LabelBox, dataField: 'title' },
+ options: { layout_nativeDimEditable: true, layout_reflowHorizontal: true, layout_reflowVertical: true },
},
],
[
@@ -685,7 +707,7 @@ export namespace Docs {
DocumentType.FONTICON,
{
layout: { view: FontIconBox, dataField: 'icon' },
- options: { defaultDoubleClick: 'ignore', waitForDoubleClickToClick: 'never', layout_hideLinkButton: true, _width: 40, _height: 40 },
+ options: { defaultDoubleClick: 'ignore', waitForDoubleClickToClick: 'never', layout_hideContextMenu: true, layout_hideLinkButton: true, _width: 40, _height: 40 },
},
],
[
@@ -737,7 +759,7 @@ export namespace Docs {
{
data: '',
layout: { view: ComparisonBox, dataField: defaultDataKey },
- options: { backgroundColor: 'gray', dropAction: 'move', waitForDoubleClickToClick: 'always', layout_reflowHorizontal: true, layout_reflowVertical: true, layout_nativeDimEditable: true, systemIcon: 'BsLayoutSplit' },
+ options: { backgroundColor: 'gray', dropAction: dropActionType.move, waitForDoubleClickToClick: 'always', layout_reflowHorizontal: true, layout_reflowVertical: true, layout_nativeDimEditable: true, systemIcon: 'BsLayoutSplit' },
},
],
[
@@ -1011,6 +1033,15 @@ export namespace Docs {
return InstanceFromProto(Prototypes.get(DocumentType.PRES), new List<Doc>(), options);
}
+ /**
+ * Creates a Doc to edit a script and write the compiled script into the specified field.
+ * Typically, this would be used to create a template that can then be applied to some other Doc
+ * in order to customize a behavior, such as onClick.
+ * @param script
+ * @param options
+ * @param fieldKey the field that the compiled script is written into.
+ * @returns the Scripting Doc
+ */
export function ScriptingDocument(script: Opt<ScriptField> | null, options: DocumentOptions = {}, fieldKey?: string) {
return InstanceFromProto(Prototypes.get(DocumentType.SCRIPTING), script ? script : undefined, { ...options, layout: fieldKey ? ScriptingBox.LayoutString(fieldKey) : undefined });
}
@@ -1193,7 +1224,7 @@ export namespace Docs {
return InstanceFromProto(
Prototypes.get(DocumentType.COL),
new List(documents),
- { backgroundColor: 'transparent', dropAction: 'move', _forceActive: true, _freeform_noZoom: true, _freeform_noAutoPan: true, ...options, _type_collection: CollectionViewType.Pile },
+ { backgroundColor: 'transparent', dropAction: dropActionType.move, _forceActive: true, _freeform_noZoom: true, _freeform_noAutoPan: true, ...options, _type_collection: CollectionViewType.Pile },
id
);
}
@@ -1869,8 +1900,7 @@ export namespace DocUtils {
const hasContextAnchor = LinkManager.Links(doc).some(l => (l.link_anchor_2 === doc && Cast(l.link_anchor_1, Doc, null)?.annotationOn === context) || (l.link_anchor_1 === doc && Cast(l.link_anchor_2, Doc, null)?.annotationOn === context));
if (context && !hasContextAnchor && (context.type === DocumentType.VID || context.type === DocumentType.WEB || context.type === DocumentType.PDF || context.type === DocumentType.IMG)) {
const pushpin = Docs.Create.FontIconDocument({
- title: 'pushpin',
- icon_label: '',
+ title: '',
annotationOn: Cast(doc.annotationOn, Doc, null),
followLinkToggle: true,
icon: 'map-pin',
@@ -1962,10 +1992,8 @@ export namespace DocUtils {
}
}
- export function GetNewTextDoc(title: string, x: number, y: number, width?: number, height?: number, noMargins?: boolean, annotationOn?: Doc, backgroundColor?: string) {
+ export function GetNewTextDoc(title: string, x: number, y: number, width?: number, height?: number, annotationOn?: Doc, backgroundColor?: string) {
const tbox = Docs.Create.TextDocument('', {
- _xMargin: noMargins ? 0 : undefined,
- _yMargin: noMargins ? 0 : undefined,
annotationOn,
backgroundColor,
_width: width || 200,
@@ -1978,11 +2006,14 @@ export namespace DocUtils {
_layout_enableAltContentUI: BoolCast(Doc.UserDoc().defaultToFlashcards),
title,
});
+
const template = Doc.UserDoc().defaultTextLayout;
if (template instanceof Doc) {
+ // if a default text template is specified
tbox._width = NumCast(template._width);
tbox.layout_fieldKey = 'layout_' + StrCast(template.title);
- Doc.GetProto(tbox)[StrCast(tbox.layout_fieldKey)] = template;
+ Doc.GetProto(tbox)[StrCast(tbox.layout_fieldKey)] = template; // set the text doc's layout to render with the text template
+ tbox[DocData].proto = template; // and also set the text doc to inherit from the template (this allows the template to specify default field values)
}
return tbox;
}
diff --git a/src/client/goldenLayout.js b/src/client/goldenLayout.js
index 2b94d35ee..cb1dfd76a 100644
--- a/src/client/goldenLayout.js
+++ b/src/client/goldenLayout.js
@@ -4727,7 +4727,7 @@
*/
} else {
type = isVertical ? 'column' : 'row';
- if (this.parent.contentItems.length === 1) {
+ if (this.parent.contentItems.length === 1 && this.contentItems.length === 1) {
let grandparent = this.parent.parent;
let correctRowOrCol = this.layoutManager.createContentItem({ type: type }, this);
grandparent.replaceChild(this.parent, correctRowOrCol);
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 0279ca2c4..a41fd8796 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -2,6 +2,7 @@ import { observable, reaction, runInAction } from "mobx";
import * as rp from 'request-promise';
import { OmitKeys, Utils } from "../../Utils";
import { Doc, DocListCast, DocListCastAsync, Opt } from "../../fields/Doc";
+import { DocData } from "../../fields/DocSymbols";
import { InkTool } from "../../fields/InkField";
import { List } from "../../fields/List";
import { PrefetchProxy } from "../../fields/Proxy";
@@ -14,14 +15,14 @@ import { SetCachedGroups, SharingPermissions } from "../../fields/util";
import { GestureUtils } from "../../pen-gestures/GestureUtils";
import { DocServer } from "../DocServer";
import { CollectionViewType, DocumentType } from "../documents/DocumentTypes";
-import { DocUtils, Docs, DocumentOptions, FInfo } from "../documents/Documents";
+import { DocUtils, Docs, DocumentOptions, FInfo, FInfoFieldType } from "../documents/Documents";
import { DashboardView } from "../views/DashboardView";
import { OverlayView } from "../views/OverlayView";
import { CollectionTreeView, TreeViewType } from "../views/collections/CollectionTreeView";
import { Colors } from "../views/global/globalEnums";
import { media_state } from "../views/nodes/AudioBox";
import { OpenWhere } from "../views/nodes/DocumentView";
-import { ButtonType } from "../views/nodes/FontIconBox/FontIconBox";
+import { ButtonType, FontIconBox } from "../views/nodes/FontIconBox/FontIconBox";
import { ImportElementBox } from "../views/nodes/importBox/ImportElementBox";
import { DragManager, dropActionType } from "./DragManager";
import { MakeTemplate } from "./DropConverter";
@@ -66,7 +67,7 @@ export class CurrentUserUtils {
const userTemplates = DocListCast(userDocTemplates?.data).filter(doc => !Doc.IsSystem(doc));
const reqdOpts:DocumentOptions = {
title: "User Tools", _xMargin: 0, _layout_showTitle: "title", _chromeHidden: true, hidden: false,
- _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, isSystem: true, _forceActive: true,
+ _dragOnlyWithinContainer: true, layout_hideContextMenu: true, isSystem: true, _forceActive: true,
_layout_autoHeight: true, _width: 500, _height: 300, _layout_fitWidth: true, _columnWidth: 35, ignoreClick: true, _lockedPosition: true,
};
const reqdScripts = { dropConverter : "convertToButtons(dragData)" };
@@ -103,9 +104,12 @@ export class CurrentUserUtils {
{ opts: { title: "onCheckedClick"}, script: "console.log(heading, checked, containingTreeView)"},
];
const reqdClickList = reqdTempOpts.map(opts => {
+ const title = opts.opts.title?.toString();
const allOpts = {...reqdClickOpts, ...opts.opts};
- const clickDoc = tempClicks ? DocListCast(tempClicks.data).find(doc => doc.title === opts.opts.title): undefined;
- return DocUtils.AssignOpts(clickDoc, allOpts) ?? MakeTemplate(Docs.Create.ScriptingDocument(ScriptField.MakeScript(opts.script, {heading:Doc.name, checked:"boolean", containingTreeView:Doc.name}), allOpts), true, opts.opts.title?.toString());
+ const clickDoc = tempClicks ? DocListCast(tempClicks.data).find(doc => doc.title === title): undefined;
+ const script = ScriptField.MakeScript(opts.script, {heading:Doc.name, checked:"boolean", containingTreeView:Doc.name});
+ const scriptDoc = Docs.Create.ScriptingDocument(script, allOpts, title)
+ return DocUtils.AssignOpts(clickDoc, allOpts) ?? MakeTemplate(scriptDoc);
});
const reqdOpts:DocumentOptions = {title: "click editor templates", _height:75, isSystem: true};
@@ -116,14 +120,14 @@ export class CurrentUserUtils {
static setupNoteTemplates(doc: Doc, field="template_notes") {
const tempNotes = DocCast(doc[field]);
const reqdTempOpts:DocumentOptions[] = [
- { noteType: "Postit", backgroundColor: "yellow", icon: "sticky-note"},
- { noteType: "Idea", backgroundColor: "pink", icon: "lightbulb" },
- { noteType: "Topic", backgroundColor: "lightblue", icon: "book-open" }];
- const reqdNoteList = reqdTempOpts.map(opts => {
- const reqdOpts = {...opts, isSystem:true, title: "text", width:200, layout_autoHeight: true, layout_fitWidth: true};
- const noteType = tempNotes ? DocListCast(tempNotes.data).find(doc => doc.noteType === opts.noteType): undefined;
- return DocUtils.AssignOpts(noteType, reqdOpts) ?? MakeTemplate(Docs.Create.TextDocument("",reqdOpts), true, opts.noteType??"Note");
- });
+ { title: "Postit", backgroundColor: "yellow", icon: "sticky-note"},
+ { title: "Idea", backgroundColor: "pink", icon: "lightbulb" },
+ { title: "Topic", backgroundColor: "lightblue", icon: "book-open" }];
+ const reqdNoteList = [...reqdTempOpts.map(opts => {
+ const reqdOpts = {...opts, isSystem:true, width:200, layout_autoHeight: true, layout_fitWidth: true};
+ const noteTemp = tempNotes ? DocListCast(tempNotes.data).find(doc => doc.title === opts.title): undefined;
+ return DocUtils.AssignOpts(noteTemp, reqdOpts) ?? MakeTemplate(Docs.Create.TextDocument("",reqdOpts));
+ }), ... DocListCast(tempNotes?.data).filter(note => !reqdTempOpts.find(reqd => reqd.title === note.title))];
const reqdOpts:DocumentOptions = { title: "Note Layouts", _height: 75, isSystem: true };
return DocUtils.AssignOpts(tempNotes, reqdOpts, reqdNoteList) ?? (doc[field] = Docs.Create.TreeDocument(reqdNoteList, reqdOpts));
@@ -147,23 +151,23 @@ export class CurrentUserUtils {
const templateIconsDoc = DocUtils.AssignOpts(DocCast(doc[field]), reqdOpts) ?? (doc[field] = Docs.Create.TreeDocument([], reqdOpts));
const makeIconTemplate = (type: DocumentType | undefined, templateField: string, opts:DocumentOptions) => {
- const iconFieldName = "icon" + (type ? "_" + type : "");
- const curIcon = DocCast(templateIconsDoc[iconFieldName]);
+ const title = "icon" + (type ? "_" + type : "");
+ const curIcon = DocCast(templateIconsDoc[title]);
let creator = labelBox;
switch (opts.iconTemplate) {
case DocumentType.IMG : creator = imageBox; break;
case DocumentType.FONTICON: creator = fontBox; break;
}
- const allopts = {isSystem: true, onClickScriptDisable: "never", ...opts};
+ const allopts = {isSystem: true, onClickScriptDisable: "never", ...opts, title};
return DocUtils.AssignScripts( (curIcon?.iconTemplate === opts.iconTemplate ?
- DocUtils.AssignOpts(curIcon, allopts):undefined) ?? ((templateIconsDoc[iconFieldName] = MakeTemplate(creator(allopts), true, iconFieldName, templateField))),
+ DocUtils.AssignOpts(curIcon, allopts):undefined) ?? ((templateIconsDoc[title] = MakeTemplate(creator(allopts, templateField)))),
{onClick:"deiconifyView(documentView)", onDoubleClick: "deiconifyViewToLightbox(documentView)", });
};
- const labelBox = (opts: DocumentOptions, data?:string) => Docs.Create.LabelDocument({
- textTransform: "unset", letterSpacing: "unset", _singleLine: false, _label_minFontSize: 14, _label_maxFontSize: 14, layout_borderRounding: "5px", _width: 150, _height: 70, _xPadding: 10, _yPadding: 10, ...opts
+ const labelBox = (opts: DocumentOptions, fieldKey:string) => Docs.Create.LabelDocument({
+ layout: LabelBox.LayoutString(fieldKey), textTransform: "unset", letterSpacing: "unset", _singleLine: false, _label_minFontSize: 14, _label_maxFontSize: 14, layout_borderRounding: "5px", _width: 150, _height: 70, _xPadding: 10, _yPadding: 10, ...opts
});
- const imageBox = (opts: DocumentOptions, url?:string) => Docs.Create.ImageDocument(url ?? "http://www.cs.brown.edu/~bcz/noImage.png", { "icon_nativeWidth": 360 / 4, "icon_nativeHeight": 270 / 4, iconTemplate:DocumentType.IMG, _width: 360 / 4, _height: 270 / 4, _layout_showTitle: "title", ...opts });
- const fontBox = (opts:DocumentOptions, data?:string) => Docs.Create.FontIconDocument({ _nativeHeight: 30, _nativeWidth: 30, _width: 30, _height: 30, ...opts });
+ const imageBox = (opts: DocumentOptions, fieldKey:string) => Docs.Create.ImageDocument( "http://www.cs.brown.edu/~bcz/noImage.png", { layout:ImageBox.LayoutString(fieldKey), "icon_nativeWidth": 360 / 4, "icon_nativeHeight": 270 / 4, iconTemplate:DocumentType.IMG, _width: 360 / 4, _height: 270 / 4, _layout_showTitle: "title", ...opts });
+ const fontBox = (opts:DocumentOptions, fieldKey:string) => Docs.Create.FontIconDocument({ layout:FontIconBox.LayoutString(fieldKey), _nativeHeight: 30, _nativeWidth: 30, _width: 30, _height: 30, ...opts });
const iconTemplates = [
makeIconTemplate(undefined, "title", { iconTemplate:DocumentType.LABEL, backgroundColor: "dimgray"}),
makeIconTemplate(DocumentType.AUDIO, "title", { iconTemplate:DocumentType.LABEL, backgroundColor: "lightgreen"}),
@@ -174,7 +178,7 @@ export class CurrentUserUtils {
makeIconTemplate(DocumentType.COL, "icon", { iconTemplate:DocumentType.IMG}),
makeIconTemplate(DocumentType.COL, "icon", { iconTemplate:DocumentType.IMG}),
makeIconTemplate(DocumentType.VID, "icon", { iconTemplate:DocumentType.IMG}),
- makeIconTemplate(DocumentType.BUTTON,"data", { iconTemplate:DocumentType.FONTICON}),
+ makeIconTemplate(DocumentType.BUTTON,"title", { iconTemplate:DocumentType.FONTICON}),
//nasty hack .. templates are looked up exclusively by type -- but we want a template for a document with a certain field (transcription) .. so this hack and the companion hack in createCustomView does this for now
makeIconTemplate("transcription" as any, "transcription", { iconTemplate:DocumentType.LABEL, backgroundColor: "orange" }),
//makeIconTemplate(DocumentType.PDF, "icon", {iconTemplate:DocumentType.IMG}, (opts) => imageBox("http://www.cs.brown.edu/~bcz/noImage.png", opts))
@@ -209,7 +213,7 @@ export class CurrentUserUtils {
};
const headerBtnHgt = 10;
const headerTemplate = (opts:DocumentOptions) => {
- const header = Docs.Create.RTFDocument(new RichTextField(JSON.stringify(json), ""), { ...opts, title: "text",
+ const header = Docs.Create.RTFDocument(new RichTextField(JSON.stringify(json), ""), { ...opts, title: "Untitled Header",
layout:
"<HTMLdiv transformOrigin='top left' width='{100/scale}%' height='{100/scale}%' transform='scale({scale})'>" +
` <FormattedTextBox {...props} dontScale='true' fieldKey={'text'} height='calc(100% - ${headerBtnHgt}px - {this._headerHeight||0}px)'/>` +
@@ -222,7 +226,7 @@ export class CurrentUserUtils {
// " <FormattedTextBox {...props} fieldKey={'header'} dontSelectOnLoad={'true'} ignoreAutoHeight={'true'} pointerEvents='{this._headerPointerEvents||`none`}' fontSize='{this._headerFontSize}px' height='{this._headerHeight}px' background='{this._headerColor||this.target.mySharedDocs.userColor}' />" +
// " <FormattedTextBox {...props} fieldKey={'text'} position='absolute' top='{(this._headerHeight)*scale}px' height='calc({100/scale}% - {this._headerHeight}px)'/>" +
// "</div>";
- MakeTemplate(Doc.GetProto(header), true, "Untitled Header");
+ MakeTemplate(Doc.GetProto(header));
return header;
}
const slideView = (opts:DocumentOptions) => {
@@ -230,11 +234,105 @@ export class CurrentUserUtils {
[
Docs.Create.MulticolumnDocument([], { title: "hero", _height: 200, isSystem: true }),
Docs.Create.TextDocument("", { title: "text", _layout_fitWidth:true, _height: 100, isSystem: true, _text_fontFamily: StrCast(Doc.UserDoc().fontFamily), _text_fontSize: StrCast(Doc.UserDoc().fontSize) })
- ], opts);
+ ], {...opts, title: "Untitled Slide View"});
- MakeTemplate(Doc.GetProto(slide), true, "Untitled Slide View");
+ MakeTemplate(Doc.GetProto(slide));
+ return slide;
+ }
+ const plotlyApi = () => {
+ var plotly = Doc.MyPublishedDocs.find(doc => doc.title === "@plotly");
+ if (!plotly) {
+ const plotly = Docs.Create.TextDocument(
+ `await import("https://cdn.plot.ly/plotly-2.27.0.min.js");
+ Plotly.newPlot(dashDiv.id, [ --DOCDATA-- ])`
+ , {title: "@plotly", title_custom: true, _layout_showTitle:"title", _width:300,_height:400});
+ Doc.AddToMyPublished(plotly);
+ }
+ }
+ const plotlyView = (opts:DocumentOptions) => {
+ const rtfield = new RichTextField(JSON.stringify(
+ {doc: {type:"doc",content:[
+ {type:"code_block",content:[
+ {type:"text",text:"^@plotly"},
+ {type:"text",text:"\n"},
+ {type:"text",text:"\n{"},
+ {type:"text",text:"\n x: [1,2,3,5,19],"},
+ {type:"text",text:"\n y: [1, 9, 15, 12,3],"},
+ {type:"text",text:"\n mode: 'lines+markers', "},
+ {type:"text",text:"\n type: 'scatter'"},
+ {type:"text",text:"\n}"}
+ ]}
+ ]},
+ selection:{type:"text",anchor:2,head:2}}),
+ `^@plotly
+ {
+ x: [1,2,3,5,19],
+ y: [1, 9, 15, 12,3],
+ mode: 'lines+markers',
+ type: 'scatter'
+ }`);
+ const slide = Docs.Create.TextDocument("", opts);
+ slide[DocData].text = rtfield;
+ slide[DocData].layout_textPainted = `<CollectionView {...props} fieldKey={'text'}/>`;
+ slide[DocData]._type_collection = CollectionViewType.Freeform;
+ slide.onPaint = ScriptField.MakeScript(`toggleDetail(documentView, "textPainted", "")`, {documentView:"any"});
+ return slide;
+ }
+ const mermaidsApi = () => {
+ var mermaids = Doc.MyPublishedDocs.find(doc => doc.title === "@mermaids");
+ if (!mermaids) {
+ const mermaids = Docs.Create.TextDocument(
+ `const mdef = (await import("https://cdn.jsdelivr.net/npm/mermaid\@10.8.0/dist/mermaid.esm.min.mjs")).default;
+ window["callb"] = (x) => {
+ alert(x);
+ }
+ mdef.initialize({
+ securityLevel : "loose",
+ startOnLoad: true,
+ flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
+ });
+ const mermaid = async (str) => (await mdef.render("graph"+Date.now(),str));
+ const {svg, bindFunctions} = await mermaid(\`--DOCDATA--\`);
+ dashDiv.innerHTML = svg;
+ if (bindFunctions) {
+ bindFunctions(dashDiv);
+ }`
+ , {title: "@mermaids", title_custom: true, _layout_showTitle:"title", _width:300,_height:400});
+ Doc.AddToMyPublished(mermaids);
+ }
+ }
+ const mermaidsView = (opts:DocumentOptions) => {
+ const rtfield = new RichTextField(JSON.stringify(
+ {doc: {type:"doc",content:[
+ {type:"code_block",content:[
+ {type:"text",text:"^@mermaids"},
+ {type:"text",text:"\n\n"},
+ {type:"text",text:"pie "},
+ {type:"text",text:"title"},
+ {type:"text",text:" "},
+ {type:"text",text:"Minerals in my tap water"},
+ {type:"text",text:"\n \"Calcium\" : "},
+ {type:"dashField",attrs:{fieldKey:"calcium",docId:"","hideKey":false,editable:true}},
+ {type:"text",text:"\n \"Potassium\" : "},
+ {type:"dashField",attrs:{fieldKey:"pot",docId:"",hideKey:false,editable:true}},
+ {type:"text",text:"\n \"Magnesium\" : 10.01"}
+ ]}
+ ]},
+ selection:{type:"text",anchor:109,head:109}
+ }),
+ `^@mermaids
+pie title Minerals in my tap water
+ "Calcium" : 42.96
+ "Potassium" : 50
+ "Magnesium" : 10.01`);
+ const slide = Docs.Create.TextDocument("", opts);
+ slide[DocData].text = rtfield;
+ slide[DocData].layout_textPainted = `<CollectionView {...props} fieldKey={'text'}/>`;
+ slide[DocData]._type_collection = CollectionViewType.Freeform;
+ slide.onPaint = ScriptField.MakeScript(`toggleDetail(documentView, "textPainted", "")`, {documentView:"any"});
return slide;
}
+ const apis = [plotlyApi(), mermaidsApi()]
const emptyThings:{key:string, // the field name where the empty thing will be stored
opts:DocumentOptions, // the document options that are required for the empty thing
funcs?:{[key:string]: any}, // computed fields that are rquired for the empth thing
@@ -259,14 +357,16 @@ export class CurrentUserUtils {
{key: "DataViz", creator: opts => Docs.Create.DataVizDocument("/users/rz/Downloads/addresses.csv", opts), opts: { _width: 300, _height: 300 }},
{key: "Header", creator: headerTemplate, opts: { _width: 300, _height: 70, _headerPointerEvents: "all", _headerHeight: 12, _headerFontSize: 9, _layout_autoHeight: true, treeView_HideUnrendered: true}},
{key: "ViewSlide", creator: slideView, opts: { _width: 400, _height: 300, _xMargin: 3, _yMargin: 3,}},
- {key: "Trail", creator: Docs.Create.PresDocument, opts: { _width: 400, _height: 30, _type_collection: CollectionViewType.Stacking, dropAction: "embed" as dropActionType, treeView_HideTitle: true, _layout_fitWidth:true, layout_boxShadow: "0 0" }},
+ {key: "Trail", creator: Docs.Create.PresDocument, opts: { _width: 400, _height: 30, _type_collection: CollectionViewType.Stacking, dropAction: dropActionType.embed, treeView_HideTitle: true, _layout_fitWidth:true, layout_boxShadow: "0 0" }},
{key: "Tab", creator: opts => Docs.Create.FreeformDocument([], opts), opts: { _width: 500, _height: 800, _layout_fitWidth: true, _freeform_backgroundGrid: true, }},
{key: "Slide", creator: opts => Docs.Create.TreeDocument([], opts), opts: { _width: 300, _height: 200, _type_collection: CollectionViewType.Tree,
treeView_HasOverlay: true, _text_fontSize: "20px", _layout_autoHeight: true,
- dropAction:'move', treeView_Type: TreeViewType.outline,
+ dropAction:dropActionType.move, treeView_Type: TreeViewType.outline,
backgroundColor: "white", _xMargin: 0, _yMargin: 0, _createDocOnCR: true
}, funcs: {title: 'this.text?.Text'}},
- ];
+ {key: "Mermaids", creator: mermaidsView, opts: { _width: 300, _height: 300, }},
+ {key: "Plotly", creator: plotlyView, opts: { _width: 300, _height: 300, }},
+ ];
emptyThings.forEach(
thing =>{ DocUtils.AssignDocField(doc, "empty"+thing.key, (opts) => thing.creator(opts), {...standardOps(thing.key), ...thing.opts}, undefined, thing.scripts, thing.funcs);
@@ -277,6 +377,8 @@ export class CurrentUserUtils {
{ toolTip: "Tap or drag to create a note", title: "Note", icon: "sticky-note", dragFactory: doc.emptyNote as Doc, clickFactory: DocCast(doc.emptyNote)},
{ toolTip: "Tap or drag to create a flashcard", title: "Flashcard", icon: "id-card", dragFactory: doc.emptyFlashcard as Doc, clickFactory: DocCast(doc.emptyFlashcard)},
{ toolTip: "Tap or drag to create an equation", title: "Math", icon: "calculator", dragFactory: doc.emptyEquation as Doc, clickFactory: DocCast(doc.emptyEquation)},
+ { toolTip: "Tap or drag to create a mermaid node", title: "Mermaids", icon: "rocket", dragFactory: doc.emptyMermaids as Doc, clickFactory: DocCast(doc.emptyMermaids)},
+ { toolTip: "Tap or drag to create a plotly node", title: "Plotly", icon: "rocket", dragFactory: doc.emptyPlotly as Doc, clickFactory: DocCast(doc.emptyMermaids)},
{ toolTip: "Tap or drag to create a physics simulation",title: "Simulation", icon: "rocket",dragFactory: doc.emptySimulation as Doc, clickFactory: DocCast(doc.emptySimulation), funcs: { hidden: "IsNoviceMode()"}},
{ toolTip: "Tap or drag to create a note board", title: "Notes", icon: "folder", dragFactory: doc.emptyNoteboard as Doc, clickFactory: DocCast(doc.emptyNoteboard)},
{ toolTip: "Tap or drag to create a collection", title: "Col", icon: "folder", dragFactory: doc.emptyCollection as Doc, clickFactory: DocCast(doc.emptyTab)},
@@ -308,16 +410,16 @@ export class CurrentUserUtils {
const creatorBtns = CurrentUserUtils.creatorBtnDescriptors(doc).map((reqdOpts) => {
const btn = dragCreatorDoc ? DocListCast(dragCreatorDoc.data).find(doc => doc.title === reqdOpts.title): undefined;
const opts:DocumentOptions = {...OmitKeys(reqdOpts, ["funcs", "scripts", "backgroundColor"]).omit,
- _width: 60, _height: 60, _layout_hideContextMenu: true, _dragOnlyWithinContainer: true,
+ _width: 60, _height: 60, _dragOnlyWithinContainer: true,
btnType: ButtonType.ToolButton, backgroundColor: reqdOpts.backgroundColor ?? Colors.DARK_GRAY, color: Colors.WHITE, isSystem: true,
};
return DocUtils.AssignScripts(DocUtils.AssignOpts(btn, opts) ?? Docs.Create.FontIconDocument(opts), reqdOpts.scripts, reqdOpts.funcs);
});
const reqdOpts:DocumentOptions = {
- title: "Document Creators", _layout_showTitle: "title", _xMargin: 0, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, _chromeHidden: true, isSystem: true,
+ title: "Document Creators", _layout_showTitle: "title", _xMargin: 0, _dragOnlyWithinContainer: true, layout_hideContextMenu: true, _chromeHidden: true, isSystem: true,
_layout_autoHeight: true, _width: 500, _height: 300, _layout_fitWidth: true, _columnWidth: 40, ignoreClick: true, _lockedPosition: true, _forceActive: true,
- childDragAction: 'embed'
+ childDragAction: dropActionType.embed
};
const reqdScripts = { dropConverter: "convertToButtons(dragData)" };
return DocUtils.AssignScripts(DocUtils.AssignOpts(dragCreatorDoc, reqdOpts, creatorBtns) ?? Docs.Create.MasonryDocument(creatorBtns, reqdOpts), reqdScripts);
@@ -353,13 +455,13 @@ export class CurrentUserUtils {
const btnDoc = myLeftSidebarMenu ? DocListCast(myLeftSidebarMenu.data).find(doc => doc.title === title) : undefined;
const reqdBtnOpts:DocumentOptions = {
title, icon, target, toolTip, hidden, btnType: ButtonType.MenuButton, isSystem: true, undoIgnoreFields: new List<string>(['height', 'data_columnHeaders']), dontRegisterView: true,
- _width: 60, _height: 60, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true,
+ _width: 60, _height: 60, _dragOnlyWithinContainer: true,
};
return DocUtils.AssignScripts(DocUtils.AssignOpts(btnDoc, reqdBtnOpts) ?? Docs.Create.FontIconDocument(reqdBtnOpts), scripts, funcs);
});
const reqdStackOpts:DocumentOptions ={
- title: "menuItemPanel", childDragAction: "same", layout_boxShadow: "rgba(0,0,0,0)", dontRegisterView: true, ignoreClick: true,
+ title: "menuItemPanel", childDragAction: dropActionType.same, layout_boxShadow: "rgba(0,0,0,0)", dontRegisterView: true, ignoreClick: true,
_chromeHidden: true, _gridGap: 0, _yMargin: 0, _xMargin: 0, _layout_autoHeight: false, _width: 60, _columnWidth: 60, _lockedPosition: true, isSystem: true,
};
return DocUtils.AssignDocField(doc, field, (opts, items) => Docs.Create.StackingDocument(items??[], opts), reqdStackOpts, menuBtns, { dropConverter: "convertToButtons(dragData)" });
@@ -442,14 +544,13 @@ export class CurrentUserUtils {
/// Search option on the left side button panel
static setupSearcher(doc: Doc, field:string) {
return DocUtils.AssignDocField(doc, field, (opts, items) => Docs.Create.SearchDocument(opts), {
- dontRegisterView: true, backgroundColor: "dimgray", ignoreClick: true, title: "Search Panel", isSystem: true, childDragAction: "embed",
+ dontRegisterView: true, backgroundColor: "dimgray", ignoreClick: true, title: "Search Panel", isSystem: true, childDragAction: dropActionType.embed,
_lockedPosition: true, _type_collection: CollectionViewType.Schema });
}
/// Initializes the panel of draggable tools that is opened from the left sidebar.
static setupToolsBtnPanel(doc: Doc, field:string) {
- const myTools = DocCast(doc[field]);
- const allTools = DocListCast(myTools?.data);
+ const allTools = DocListCast(DocCast(doc[field])?.data);
const creatorBtns = CurrentUserUtils.setupCreatorButtons(doc, allTools?.length ? allTools[0]:undefined);
const userTools = allTools && allTools?.length > 1 ? allTools[1]:undefined;
const userBtns = CurrentUserUtils.setupUserDocumentCreatorButtons(doc, userTools);
@@ -457,7 +558,7 @@ export class CurrentUserUtils {
const reqdToolOps:DocumentOptions = {
title: "My Tools", isSystem: true, ignoreClick: true, layout_boxShadow: "0 0",
layout_explainer: "This is a palette of documents that can be created.",
- _layout_showTitle: "title", _width: 500, _yMargin: 20, _lockedPosition: true, _forceActive: true, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, _chromeHidden: true,
+ _layout_showTitle: "title", _width: 500, _yMargin: 20, _lockedPosition: true, _forceActive: true, _dragOnlyWithinContainer: true, layout_hideContextMenu: true, _chromeHidden: true,
};
return DocUtils.AssignDocField(doc, field, (opts, items) => Docs.Create.StackingDocument(items??[], opts), reqdToolOps, [creatorBtns, userBtns]);
}
@@ -468,7 +569,7 @@ export class CurrentUserUtils {
const newDashboard = `createNewDashboard()`;
- const reqdBtnOpts:DocumentOptions = { _forceActive: true, _width: 30, _height: 30, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true,
+ const reqdBtnOpts:DocumentOptions = { _forceActive: true, _width: 30, _height: 30, _dragOnlyWithinContainer: true,
title: "new Dash", btnType: ButtonType.ClickButton, toolTip: "Create new dashboard", buttonText: "New trail", icon: "plus", isSystem: true };
const reqdBtnScript = {onClick: newDashboard,}
const newDashboardButton = DocUtils.AssignScripts(DocUtils.AssignOpts(DocCast(myDashboards?.layout_headerButton), reqdBtnOpts) ?? Docs.Create.FontIconDocument(reqdBtnOpts), reqdBtnScript);
@@ -482,8 +583,8 @@ export class CurrentUserUtils {
const childContextMenuIcons = ["tv", "camera", "users", "times", "trash"]; // entries must be kept in synch with childContextMenuScripts, childContextMenuLabels, and childContextMenuFilters
const reqdOpts:DocumentOptions = {
title: "My Dashboards", childHideLinkButton: true, treeView_FreezeChildren: "remove|add", treeView_HideTitle: true, layout_boxShadow: "0 0", childDontRegisterViews: true,
- dropAction: "inSame", treeView_Type: TreeViewType.fileSystem, isFolder: true, isSystem: true, treeView_TruncateTitleWidth: 350, ignoreClick: true,
- layout_headerButton: newDashboardButton, childDragAction: "inSame",
+ dropAction: dropActionType.inPlace, treeView_Type: TreeViewType.fileSystem, isFolder: true, isSystem: true, treeView_TruncateTitleWidth: 350, ignoreClick: true,
+ layout_headerButton: newDashboardButton, childDragAction: dropActionType.inPlace,
_layout_showTitle: "title", _height: 400, _gridGap: 5, _forceActive: true, _lockedPosition: true,
contextMenuLabels:new List<string>(contextMenuLabels),
contextMenuIcons:new List<string>(contextMenuIcons),
@@ -509,16 +610,16 @@ export class CurrentUserUtils {
var myFilesystem = DocCast(doc[field]);
const newFolderOpts: DocumentOptions = {
- _forceActive: true, _dragOnlyWithinContainer: true, _embedContainer: Doc.MyFilesystem, _layout_hideContextMenu: true, _width: 30, _height: 30, undoIgnoreFields:new List<string>(['treeView_SortCriterion']),
+ _forceActive: true, _dragOnlyWithinContainer: true, _embedContainer: Doc.MyFilesystem, _width: 30, _height: 30, undoIgnoreFields:new List<string>(['treeView_SortCriterion']),
title: "New folder", color: Colors.BLACK, btnType: ButtonType.ClickButton, toolTip: "Create new folder", buttonText: "New folder", icon: "folder-plus", isSystem: true
};
const newFolderScript = { onClick: CollectionTreeView.AddTreeFunc};
const newFolderButton = DocUtils.AssignScripts(DocUtils.AssignOpts(DocCast(myFilesystem?.layout_headerButton), newFolderOpts) ?? Docs.Create.FontIconDocument(newFolderOpts), newFolderScript);
const reqdOpts:DocumentOptions = { _layout_showTitle: "title", _height: 100, _forceActive: true,
- title: "My Documents", layout_headerButton: newFolderButton, treeView_HideTitle: true, dropAction: 'add', isSystem: true,
+ title: "My Documents", layout_headerButton: newFolderButton, treeView_HideTitle: true, dropAction: dropActionType.add, isSystem: true,
isFolder: true, treeView_Type: TreeViewType.fileSystem, childHideLinkButton: true, layout_boxShadow: "0 0", childDontRegisterViews: true,
- treeView_TruncateTitleWidth: 350, ignoreClick: true, childDragAction: "embed",
+ treeView_TruncateTitleWidth: 350, ignoreClick: true, childDragAction: dropActionType.embed,
layout_explainer: "This is your file manager where you can create folders to keep track of documents independently of your dashboard."
};
const fileFolders = new Set(DocListCast(DocCast(doc[field])?.data));
@@ -528,8 +629,8 @@ export class CurrentUserUtils {
/// initializes the panel displaying docs that have been recently closed
static setupRecentlyClosed(doc: Doc, field:string) {
const reqdOpts:DocumentOptions = { _layout_showTitle: "title", _lockedPosition: true, _gridGap: 5, _forceActive: true, isFolder: true,
- title: "My Recently Closed", childHideLinkButton: true, treeView_HideTitle: true, childDragAction: "move", isSystem: true,
- treeView_TruncateTitleWidth: 350, ignoreClick: true, layout_boxShadow: "0 0", childDontRegisterViews: true, dropAction: "same",
+ title: "My Recently Closed", childHideLinkButton: true, treeView_HideTitle: true, childDragAction: dropActionType.move, isSystem: true,
+ treeView_TruncateTitleWidth: 350, ignoreClick: true, layout_boxShadow: "0 0", childDontRegisterViews: true, dropAction: dropActionType.same,
contextMenuLabels: new List<string>(["Empty recently closed"]),
contextMenuIcons:new List<string>(["trash"]),
layout_explainer: "Recently closed documents appear in this menu. They will only be deleted if you explicity empty this list."
@@ -537,7 +638,7 @@ export class CurrentUserUtils {
const recentlyClosed = DocUtils.AssignDocField(doc, field, (opts) => Docs.Create.TreeDocument([], opts), reqdOpts);
const clearAll = (target:string) => `getProto(${target}).data = new List([])`;
- const clearBtnsOpts:DocumentOptions = { _width: 30, _height: 30, _forceActive: true, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true,
+ const clearBtnsOpts:DocumentOptions = { _width: 30, _height: 30, _forceActive: true, _dragOnlyWithinContainer: true, layout_hideContextMenu: true,
title: "Empty", target: recentlyClosed, btnType: ButtonType.ClickButton, color: Colors.BLACK, buttonText: "Empty", icon: "trash", isSystem: true,
toolTip: "Empty recently closed",};
DocUtils.AssignDocField(recentlyClosed, "layout_headerButton", (opts) => Docs.Create.FontIconDocument(opts), clearBtnsOpts, undefined, {onClick: clearAll("this.target")});
@@ -552,7 +653,7 @@ export class CurrentUserUtils {
static setupUserDocView(doc: Doc, field:string) {
const reqdOpts:DocumentOptions = {
_lockedPosition: true, _gridGap: 5, _forceActive: true, title: Doc.CurrentUserEmail +"-view",
- layout_boxShadow: "0 0", childDontRegisterViews: true, dropAction: "same", ignoreClick: true, isSystem: true,
+ layout_boxShadow: "0 0", childDontRegisterViews: true, dropAction: dropActionType.same, ignoreClick: true, isSystem: true,
treeView_HideTitle: true, treeView_TruncateTitleWidth: 350
};
if (!doc[field]) DocUtils.AssignOpts(doc, {treeView_Open: true, treeView_ExpandedView: "fields" });
@@ -571,8 +672,7 @@ export class CurrentUserUtils {
})
static createToolButton = (opts: DocumentOptions) => Docs.Create.FontIconDocument({
- btnType: ButtonType.ToolButton, _layout_hideContextMenu: true,
- _dropPropertiesToRemove: new List<string>([ "_layout_hideContextMenu"]),
+ btnType: ButtonType.ToolButton, _dropPropertiesToRemove: new List<string>([ "layout_hideContextMenu"]),
/*_nativeWidth: 40, _nativeHeight: 40, */ _width: 40, _height: 40, isSystem: true, ...opts,
})
@@ -593,7 +693,7 @@ export class CurrentUserUtils {
];
const btns = btnDescs.map(desc => dockBtn({_width: 30, _height: 30, defaultDoubleClick: 'ignore', undoIgnoreFields: new List<string>(['opacity']), _dragOnlyWithinContainer: true, ...desc.opts}, desc.scripts));
const dockBtnsReqdOpts:DocumentOptions = {
- title: "docked buttons", _height: 40, flexGap: 0, layout_boxShadow: "standard", childDragAction: 'move',
+ title: "docked buttons", _height: 40, flexGap: 0, layout_boxShadow: "standard", childDragAction: dropActionType.move,
childDontRegisterViews: true, linearView_IsOpen: true, linearView_Expandable: true, ignoreClick: true
};
reaction(() => UndoManager.redoStack.slice(), () => Doc.GetProto(btns.find(btn => btn.title === "Redo")!).opacity = UndoManager.CanRedo() ? 1 : 0.4, { fireImmediately: true });
@@ -617,9 +717,7 @@ export class CurrentUserUtils {
return [
{ title: "Snap", icon: "th", toolTip: "Show Snap Lines", btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"snaplines", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
{ title: "Grid", icon: "border-all", toolTip: "Show Grid", btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"grid", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
- { title: "View All", icon: "object-group", toolTip: "Keep all Docs in View",btnType: ButtonType.ToggleButton, ignoreClick:true, expertMode: false, toolType:"viewAll", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
- // want the same style as toggle button, but don't want it to act as an actual toggle, so set disableToggle to true,
- { title: "Fit All", icon: "arrows-left-right", toolTip: "Fit Docs to View (once)",btnType: ButtonType.ClickButton,ignoreClick:false,expertMode: false, toolType:"fitOnce", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
+ { title: "Fit All", icon: "object-group", toolTip: "Fit Docs to View (double click to make sticky)",btnType: ButtonType.ToggleButton, ignoreClick:true, expertMode: false, toolType:"viewAll", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}', onDoubleClick: '{ return showFreeform(this.toolType, _readOnly_, true);}'}}, // Only when floating document is selected in freeform
{ title: "Clusters", icon: "braille", toolTip: "Show Doc Clusters", btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"clusters", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
{ title: "Cards", icon: "brain", toolTip: "Flashcards", btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"flashcards", funcs: {}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
{ title: "Arrange", icon:"arrow-down-short-wide",toolTip:"Toggle Auto Arrange", btnType: ButtonType.ToggleButton, ignoreClick: true, expertMode: false, toolType:"arrange", funcs: {hidden: 'IsNoviceMode()'}, scripts: { onClick: '{ return showFreeform(this.toolType, _readOnly_);}'}}, // Only when floating document is selected in freeform
@@ -694,7 +792,8 @@ export class CurrentUserUtils {
CollectionViewType.Grid, CollectionViewType.NoteTaking]),
title: "Perspective", toolTip: "View", btnType: ButtonType.DropdownList, ignoreClick: true, width: 100, scripts: { script: 'setView(value, _readOnly_)'}},
{ title: "Pin", icon: "map-pin", toolTip: "Pin View to Trail", btnType: ButtonType.ClickButton, expertMode: false, width: 30, scripts: { onClick: 'pinWithView(altKey)'}, funcs: {hidden: "IsNoneSelected()"}},
- { title: "Header", icon: "heading", toolTip: "Doc Titlebar Color", btnType: ButtonType.ColorButton, expertMode: true, ignoreClick: true, scripts: { script: 'return setHeaderColor(value, _readOnly_)'} },
+ { title: "Header", icon: "heading", toolTip: "Doc Titlebar Color", btnType: ButtonType.ColorButton, expertMode: false, ignoreClick: true, scripts: { script: 'return setHeaderColor(value, _readOnly_)'} },
+ { title: "Template",icon: "scroll", toolTip: "Default Note Template",btnType: ButtonType.ToggleButton, expertMode: false, toolType:DocumentType.RTF, scripts: { onClick: '{ return setDefaultTemplate(_readOnly_); }'} },
{ title: "Fill", icon: "fill-drip", toolTip: "Fill/Background Color",btnType: ButtonType.ColorButton, expertMode: false, ignoreClick: true, width: 30, scripts: { script: 'return setBackgroundColor(value, _readOnly_)'}, funcs: {hidden: "IsNoneSelected()"}}, // Only when a document is selected
{ title: "Overlay", icon: "layer-group", toolTip: "Overlay", btnType: ButtonType.ToggleButton, expertMode: true, toolType:CollectionViewType.Freeform, funcs: {hidden: '!SelectionManager_selectedDocType(this.toolType, this.expertMode, true)'}, scripts: { onClick: '{ return toggleOverlay(_readOnly_); }'}}, // Only when floating document is selected in freeform
{ title: "Back", icon: "chevron-left", toolTip: "Prev Animation Frame", btnType: ButtonType.ClickButton, expertMode: true, toolType:CollectionViewType.Freeform, funcs: {hidden: '!SelectionManager_selectedDocType(this.toolType, this.expertMode)'}, width: 30, scripts: { onClick: 'prevKeyFrame(_readOnly_)'}},
@@ -719,7 +818,7 @@ export class CurrentUserUtils {
_nativeWidth: params.width ?? 30, _width: params.width ?? 30,
_height: 30, _nativeHeight: 30, linearBtnWidth: params.linearBtnWidth,
toolType: params.toolType, expertMode: params.expertMode,
- _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, _lockedPosition: true,
+ _dragOnlyWithinContainer: true, _lockedPosition: true,
};
const reqdFuncs:{[key:string]:any} = {
...params.funcs,
@@ -749,7 +848,7 @@ export class CurrentUserUtils {
/// Initializes all the default buttons for the top bar context menu
static setupContextMenuButtons(doc: Doc, field="myContextMenuBtns") {
- const reqdCtxtOpts:DocumentOptions = { title: "context menu buttons", undoIgnoreFields:new List<string>(['width', "linearView_IsOpen"]), flexGap: 0, childDragAction: 'embed', childDontRegisterViews: true, linearView_IsOpen: true, ignoreClick: true, linearView_Expandable: false, _height: 35 };
+ const reqdCtxtOpts:DocumentOptions = { title: "context menu buttons", undoIgnoreFields:new List<string>(['width', "linearView_IsOpen"]), flexGap: 0, childDragAction: dropActionType.embed, childDontRegisterViews: true, linearView_IsOpen: true, ignoreClick: true, linearView_Expandable: false, _height: 35 };
const ctxtMenuBtnsDoc = DocUtils.AssignDocField(doc, field, (opts, items) => this.linearButtonList(opts, items??[]), reqdCtxtOpts, undefined);
const ctxtMenuBtns = CurrentUserUtils.contextMenuTools().map(params => this.setupContextMenuBtn(params, ctxtMenuBtnsDoc) );
return DocUtils.AssignOpts(ctxtMenuBtnsDoc, reqdCtxtOpts, ctxtMenuBtns);
@@ -775,7 +874,7 @@ export class CurrentUserUtils {
];
const btns = btnDescs.map(desc => dockBtn({_width: desc.opts.width??30, _height: 30, defaultDoubleClick: 'ignore', undoIgnoreFields: new List<string>(['opacity']), _dragOnlyWithinContainer: true, ...desc.opts}, desc.scripts, desc.funcs));
const dockBtnsReqdOpts:DocumentOptions = {
- title: "docked buttons", _height: 40, flexGap: 0, layout_boxShadow: "standard", childDragAction: 'move',
+ title: "docked buttons", _height: 40, flexGap: 0, layout_boxShadow: "standard", childDragAction: dropActionType.move,
childDontRegisterViews: true, linearView_IsOpen: true, linearView_Expandable: false, ignoreClick: true
};
return DocUtils.AssignDocField(doc, field, (opts, items) => this.linearButtonList(opts, items??[]), dockBtnsReqdOpts, btns);
@@ -815,7 +914,7 @@ export class CurrentUserUtils {
// childContextMenuLabels: new List<string>(["Add to Dashboards",]),
// childContextMenuIcons: new List<string>(["user-plus",]),
"acl-Guest": SharingPermissions.Augment, "_acl-Guest": SharingPermissions.Augment,
- childDragAction: "embed", isSystem: true, childContentPointerEvents: "none", childLimitHeight: 0, _yMargin: 0, _gridGap: 15, childDontRegisterViews:true,
+ childDragAction: dropActionType.embed, isSystem: true, childContentPointerEvents: "none", childLimitHeight: 0, _yMargin: 0, _gridGap: 15, childDontRegisterViews:true,
// NOTE: treeView_HideTitle & _layout_showTitle is for a TreeView's editable title, _layout_showTitle is for DocumentViews title bar
_layout_showTitle: "title", treeView_HideTitle: true, ignoreClick: true, _lockedPosition: true, layout_boxShadow: "0 0", _chromeHidden: true, dontRegisterView: true,
layout_explainer: "This is where documents or dashboards that other users have shared with you will appear. To share a document or dashboard right click and select 'Share'"
@@ -829,14 +928,14 @@ export class CurrentUserUtils {
static setupImportSidebar(doc: Doc, field:string) {
const reqdOpts:DocumentOptions = {
title: "My Imports", _forceActive: true, _layout_showTitle: "title", childLayoutString: ImportElementBox.LayoutString('data'),
- _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, childLimitHeight: 0, onClickScriptDisable:"never",
- childDragAction: "copy", _layout_autoHeight: true, _yMargin: 50, _gridGap: 15, layout_boxShadow: "0 0", _lockedPosition: true, isSystem: true, _chromeHidden: true,
+ _dragOnlyWithinContainer: true, layout_hideContextMenu: true, childLimitHeight: 0, onClickScriptDisable:"never",
+ childDragAction: dropActionType.copy, _layout_autoHeight: true, _yMargin: 50, _gridGap: 15, layout_boxShadow: "0 0", _lockedPosition: true, isSystem: true, _chromeHidden: true,
dontRegisterView: true, layout_explainer: "This is where documents that are Imported into Dash will go."
};
const myImports = DocUtils.AssignDocField(doc, field, (opts) => Docs.Create.MasonryDocument([], opts), reqdOpts, undefined, {onClick: "deselectAll()"});
const reqdBtnOpts:DocumentOptions = { _forceActive: true, toolTip: "Import from computer",
- _width: 30, _height: 30, color: Colors.BLACK, _dragOnlyWithinContainer: true, _layout_hideContextMenu: true, title: "Import", btnType: ButtonType.ClickButton,
+ _width: 30, _height: 30, color: Colors.BLACK, _dragOnlyWithinContainer: true, title: "Import", btnType: ButtonType.ClickButton,
buttonText: "Import", icon: "upload", isSystem: true };
DocUtils.AssignDocField(myImports, "layout_headerButton", (opts) => Docs.Create.FontIconDocument(opts), reqdBtnOpts, undefined, { onClick: "importDocument()" });
return myImports;
@@ -892,7 +991,7 @@ export class CurrentUserUtils {
this.setupDocTemplates(doc); // sets up the template menu of templates
//this.setupFieldInfos(doc); // sets up the collection of field info descriptions for each possible DocumentOption
DocUtils.AssignDocField(doc, "globalScriptDatabase", (opts) => Docs.Prototypes.MainScriptDocument(), {});
- DocUtils.AssignDocField(doc, "myHeaderBar", (opts) => Docs.Create.MulticolumnDocument([], opts), { title: "My Header Bar", isSystem: true, _chromeHidden:true, childLayoutFitWidth:false, childDocumentsActive:false, dropAction: 'move'}); // drop down panel at top of dashboard for stashing documents
+ DocUtils.AssignDocField(doc, "myHeaderBar", (opts) => Docs.Create.MulticolumnDocument([], opts), { title: "My Header Bar", isSystem: true, _chromeHidden:true, layout_maxShown: 10, childLayoutFitWidth:false, childDocumentsActive:false, dropAction: dropActionType.move}); // drop down panel at top of dashboard for stashing documents
Doc.AddDocToList(Doc.MyFilesystem, undefined, Doc.MyDashboards)
Doc.AddDocToList(Doc.MyFilesystem, undefined, Doc.MySharedDocs)
@@ -915,9 +1014,9 @@ export class CurrentUserUtils {
const options = pair[1] as FInfo;
const opts:DocumentOptions = { isSystem: true, title: pair[0], ...OmitKeys(options, ["values"]).omit, fieldIsLayout: pair[0].startsWith("_")};
switch (options.fieldType) {
- case "boolean": opts.fieldValues = new List<boolean>(options.values as any); break;
- case "number": opts.fieldValues = new List<number>(options.values as any); break;
- case Doc.name: opts.fieldValues = new List<Doc>(options.values as any); break;
+ case FInfoFieldType.boolean: opts.fieldValues = new List<boolean>(options.values as any); break;
+ case FInfoFieldType.number: opts.fieldValues = new List<number>(options.values as any); break;
+ case FInfoFieldType.Doc: opts.fieldValues = new List<Doc>(options.values as any); break;
default: opts.fieldValues = new List<string>(options.values as any); break;// string, pointerEvents, dimUnit, dropActionType
}
DocUtils.AssignDocField(infos, pair[0], opts => Doc.assign(new Doc(), OmitKeys(opts,["values"]).omit), opts);
diff --git a/src/client/util/DocumentManager.ts b/src/client/util/DocumentManager.ts
index 7407fa2b3..a38a330da 100644
--- a/src/client/util/DocumentManager.ts
+++ b/src/client/util/DocumentManager.ts
@@ -248,6 +248,11 @@ export class DocumentManager {
Doc.RemoveDocFromList(Doc.MyRecentlyClosed, undefined, targetDoc);
const docContextPath = DocumentManager.GetContextPath(targetDoc, true);
if (docContextPath.some(doc => doc.hidden)) options.toggleTarget = false;
+ const tabView = Array.from(TabDocView._allTabs).find(view => view._document === docContextPath[0]);
+ if (!tabView?._activated && tabView?._document) {
+ options.toggleTarget = false;
+ TabDocView.Activate(tabView?._document);
+ }
let rootContextView =
docContextPath.length &&
(await new Promise<DocumentView>(res => {
diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts
index 1f093a33c..aa0f77c72 100644
--- a/src/client/util/DragManager.ts
+++ b/src/client/util/DragManager.ts
@@ -1,10 +1,24 @@
+/**
+ * The DragManager handles all dragging interactions that occur entirely within Dash (as opposed to external drag operations from the file system, etc)
+ *
+ * Events are generated for
+ * a pause in the drag movement (dashDragMovePause) as a Doc(s) is dragged,
+ * just before (dashPreDrop) a Doc(s) is dropped,
+ * and just after (dashDropEvent) a Doc(s) is dropped
+ * If the document is dragged and paused over the golden layout header tabs, the
+ * drag interaction will switch to a golden layout tab drag.
+ *
+ * All drag operations can be aborted by hitting the Esc key
+ *
+ */
+
import { action, observable, runInAction } from 'mobx';
import { DateField } from '../../fields/DateField';
import { Doc, Field, Opt, StrListCast } from '../../fields/Doc';
import { List } from '../../fields/List';
import { PrefetchProxy } from '../../fields/Proxy';
import { ScriptField } from '../../fields/ScriptField';
-import { ScriptCast, StrCast } from '../../fields/Types';
+import { ScriptCast } from '../../fields/Types';
import { emptyFunction, Utils } from '../../Utils';
import { Docs, DocUtils } from '../documents/Documents';
import { CollectionFreeFormDocumentView } from '../views/nodes/CollectionFreeFormDocumentView';
@@ -16,7 +30,15 @@ import { UndoManager } from './UndoManager';
import { DocData } from '../../fields/DocSymbols';
const { default : { contextMenuZindex } } = require('../views/global/globalCssVariables.module.scss'); // prettier-ignore
-export type dropActionType = 'embed' | 'copy' | 'move' | 'add' | 'same' | 'inSame' | 'proto' | 'none' | undefined; // undefined = move, "same" = move but don't call dropPropertiesToRemove
+export enum dropActionType {
+ embed = 'embed', // create a new embedding of the dragged document for the new location
+ copy = 'copy', // copy the dragged document
+ move = 'move', // move the dragged document to the drop location after removing it from where it was
+ add = 'add', // add the dragged document to the drop location without removing it from where it was
+ same = 'same', // only allow drop within same collection (or same hierarchical tree collection)
+ inPlace = 'inSame', // keep document in place (unless overridden by a drag modifier)
+ proto = 'proto',
+} // undefined = move, same = move but doesn't call dropPropertiesToRemove
/**
* Initialize drag
@@ -79,8 +101,6 @@ export namespace DragManager {
export interface DragOptions {
dragComplete?: (e: DragCompleteEvent) => void; // function to invoke when drag has completed
hideSource?: boolean; // hide source document during drag
- offsetX?: number; // offset of top left of source drag visual from cursor
- offsetY?: number;
noAutoscroll?: boolean;
}
@@ -129,9 +149,9 @@ export namespace DragManager {
treeViewDoc?: Doc;
offset: number[];
canEmbed?: boolean;
- userDropAction: dropActionType; // the user requested drop action -- this will be honored as specified by modifier keys
+ userDropAction?: dropActionType; // the user requested drop action -- this will be honored as specified by modifier keys
defaultDropAction?: dropActionType; // an optionally specified default drop action when there is no user drop actionl - this will be honored if there is no user drop action
- dropAction: dropActionType; // a drop action request by the initiating code. the actual drop action may be different -- eg, if the request is 'embed', but the document is dropped within the same collection, the drop action will be switched to 'move'
+ dropAction?: dropActionType; // a drop action request by the initiating code. the actual drop action may be different -- eg, if the request is 'embed', but the document is dropped within the same collection, the drop action will be switched to 'move'
dropPropertiesToRemove?: string[];
moveDocument?: MoveFunction;
removeDocument?: RemoveFunction;
@@ -170,8 +190,8 @@ export namespace DragManager {
dropDocCreator: (annotationOn: Doc | undefined) => Doc;
dropDocument?: Doc;
offset: number[];
- dropAction: dropActionType;
- userDropAction: dropActionType;
+ dropAction?: dropActionType;
+ userDropAction?: dropActionType;
}
let defaultPreDropFunc = (e: Event, de: DragManager.DropEvent, targetAction: dropActionType) => {
@@ -189,7 +209,7 @@ export namespace DragManager {
const handler = (e: Event) => dropFunc(e, (e as CustomEvent<DropEvent>).detail);
const preDropHandler = (e: Event) => {
const de = (e as CustomEvent<DropEvent>).detail;
- (preDropFunc ?? defaultPreDropFunc)(e, de, StrCast(doc.dropAction) as dropActionType);
+ (preDropFunc ?? defaultPreDropFunc)(e, de, doc.dropAction as any as dropActionType);
};
element.addEventListener('dashOnDrop', handler);
element.addEventListener('dashPreDrop', preDropHandler);
@@ -218,19 +238,19 @@ export namespace DragManager {
dragData.draggedDocuments.map(async d =>
!dragData.isDocDecorationMove && !dragData.userDropAction && ScriptCast(d.onDragStart)
? addAudioTag(ScriptCast(d.onDragStart).script.run({ this: d }).result)
- : docDragData.dropAction === 'embed'
+ : docDragData.dropAction === dropActionType.embed
? Doc.BestEmbedding(d)
- : docDragData.dropAction === 'add'
+ : docDragData.dropAction === dropActionType.add
? d
- : docDragData.dropAction === 'proto'
+ : docDragData.dropAction === dropActionType.proto
? d[DocData]
- : docDragData.dropAction === 'copy'
+ : docDragData.dropAction === dropActionType.copy
? (await Doc.MakeClone(d)).clone
: d
)
)
).filter(d => d);
- !['same', 'proto'].includes(docDragData.dropAction as any) &&
+ ![dropActionType.same, dropActionType.proto].includes(docDragData.dropAction as any) &&
docDragData.droppedDocuments
// .filter(drop => !drop.dragOnlyWithinContainer || ['embed', 'copy'].includes(docDragData.dropAction as any))
.forEach((drop: Doc, i: number) => {
@@ -504,7 +524,7 @@ export namespace DragManager {
const moveHandler = (e: PointerEvent) => {
e.preventDefault(); // required or dragging text menu link item ends up dragging the link button as native drag/drop
if (dragData instanceof DocumentDragData) {
- dragData.userDropAction = e.ctrlKey && e.altKey ? 'copy' : e.shiftKey ? 'move' : e.ctrlKey ? 'embed' : dragData.defaultDropAction;
+ dragData.userDropAction = e.ctrlKey && e.altKey ? dropActionType.copy : e.shiftKey ? dropActionType.move : e.ctrlKey ? dropActionType.embed : dragData.defaultDropAction;
}
if (['lm_tab', 'lm_title_wrap', 'lm_tabs', 'lm_header'].includes(typeof (e.target as any).className === 'string' ? (e.target as any)?.className : '') && dragData.draggedDocuments.length === 1) {
if (!startWindowDragTimer) {
@@ -530,7 +550,7 @@ export namespace DragManager {
if (target && !Doc.UserDoc()._noAutoscroll && !options?.noAutoscroll && !dragData.draggedDocuments?.some((d: any) => d._freeform_noAutoPan)) {
const autoScrollHandler = () => {
target.dispatchEvent(
- new CustomEvent<React.DragEvent>('dashDragAutoScroll', {
+ new CustomEvent<React.DragEvent>('dashDragMovePause', {
bubbles: true,
detail: {
shiftKey: e.shiftKey,
@@ -552,7 +572,7 @@ export namespace DragManager {
screenY: e.screenY,
detail: e.detail,
view: e.view ? e.view : (new Window() as any),
- nativeEvent: new DragEvent('dashDragAutoScroll'),
+ nativeEvent: new DragEvent('dashDragMovePause'),
currentTarget: target,
target: target,
bubbles: true,
@@ -566,7 +586,7 @@ export namespace DragManager {
isPropagationStopped: () => ('not implemented for this event' ? false : false),
persist: emptyFunction,
timeStamp: e.timeStamp,
- type: 'dashDragAutoScroll',
+ type: 'dashDragMovePause',
},
})
);
diff --git a/src/client/util/DropConverter.ts b/src/client/util/DropConverter.ts
index 54066d267..3df3e36c6 100644
--- a/src/client/util/DropConverter.ts
+++ b/src/client/util/DropConverter.ts
@@ -12,43 +12,55 @@ import { ButtonType, FontIconBox } from '../views/nodes/FontIconBox/FontIconBox'
import { DragManager } from './DragManager';
import { ScriptingGlobals } from './ScriptingGlobals';
-export function MakeTemplate(doc: Doc, first: boolean = true, rename: Opt<string> = undefined, templateField: string = '') {
- if (templateField) doc[DocData].title = templateField; /// the title determines which field is being templated
- doc.isTemplateDoc = makeTemplate(doc, first, rename);
+/**
+ * Converts a Doc to a render template that can be applied to other Docs to customize how they render while
+ * still using the other Doc as the backing data store (ie, dataDoc). During rendering, if a layout Doc is provided
+ * with 'isTemplateDoc' set, then the layout Doc is treated as a template for the rendered Doc. The template Doc is
+ * "expanded" to create an template instance for the rendered Doc.
+ *
+ *
+ * @param doc the doc to convert to a template
+ * @returns 'doc'
+ */
+export function MakeTemplate(doc: Doc) {
+ doc.isTemplateDoc = makeTemplate(doc, true);
return doc;
}
-//
-// converts 'doc' into a template that can be used to render other documents.
-// the title of doc is used to determine which field is being templated, so
-// passing a value for 'rename' allows the doc to be given a meangingful name
-// after it has been converted to
-function makeTemplate(doc: Doc, first: boolean = true, rename: Opt<string> = undefined): boolean {
+
+/**
+ * Recursively converts 'doc' into a template that can be used to render other documents.
+ *
+ * For recurive Docs in the template, their target fieldKey is defined by their title,
+ * not by whatever fieldKey they used in their layout.
+ * @param doc
+ * @param first whether this is the topmost root of the recursive template
+ * @returns whether a template was successfully created
+ */
+function makeTemplate(doc: Doc, first: boolean = true): boolean {
const layoutDoc = doc.layout instanceof Doc && doc.layout.isTemplateForField ? doc.layout : doc;
if (layoutDoc.layout instanceof Doc) {
- // its already a template
- return true;
+ return true; // its already a template
}
const layout = StrCast(layoutDoc.layout).match(/fieldKey={'[^']*'}/)![0];
const fieldKey = layout.replace("fieldKey={'", '').replace(/'}$/, '');
const docs = DocListCast(layoutDoc[fieldKey]);
- let any = false;
+ let isTemplate = false;
docs.forEach(d => {
if (!StrCast(d.title).startsWith('-')) {
- any = Doc.MakeMetadataFieldTemplate(d, layoutDoc[DocData]) || any;
+ isTemplate = Doc.MakeMetadataFieldTemplate(d, layoutDoc[DocData]) || isTemplate;
} else if (d.type === DocumentType.COL || d.data instanceof RichTextField) {
- any = makeTemplate(d, false) || any;
+ isTemplate = makeTemplate(d, false) || isTemplate;
}
});
if (first && !docs.length) {
// bcz: feels hacky : if the root level document has items, it's not a field template
- any = Doc.MakeMetadataFieldTemplate(doc, layoutDoc[DocData], true) || any;
+ isTemplate = Doc.MakeMetadataFieldTemplate(doc, layoutDoc[DocData], true) || isTemplate;
} else if (layoutDoc[fieldKey] instanceof RichTextField || layoutDoc[fieldKey] instanceof ImageField) {
if (!StrCast(layoutDoc.title).startsWith('-')) {
- any = Doc.MakeMetadataFieldTemplate(layoutDoc, layoutDoc[DocData], true);
+ isTemplate = Doc.MakeMetadataFieldTemplate(layoutDoc, layoutDoc[DocData], true);
}
}
- rename && (doc.title = rename);
- return any;
+ return isTemplate;
}
export function convertDropDataToButtons(data: DragManager.DocumentDragData) {
data?.draggedDocuments.map((doc, i) => {
@@ -73,7 +85,6 @@ export function convertDropDataToButtons(data: DragManager.DocumentDragData) {
_nativeHeight: 100,
_width: 100,
_height: 100,
- _layout_hideContextMenu: true,
backgroundColor: StrCast(doc.backgroundColor),
title: StrCast(layoutDoc.title),
btnType: ButtonType.ClickButton,
diff --git a/src/client/views/ContextMenu.tsx b/src/client/views/ContextMenu.tsx
index 8c3c9df2e..8f4e43978 100644
--- a/src/client/views/ContextMenu.tsx
+++ b/src/client/views/ContextMenu.tsx
@@ -7,6 +7,7 @@ import { SettingsManager } from '../util/SettingsManager';
import './ContextMenu.scss';
import { ContextMenuItem, ContextMenuProps, OriginalMenuProps } from './ContextMenuItem';
import { ObservableReactComponent } from './ObservableReactComponent';
+import { DivHeight, DivWidth } from '../../Utils';
@observer
export class ContextMenu extends ObservableReactComponent<{}> {
@@ -214,8 +215,8 @@ export class ContextMenu extends ObservableReactComponent<{}> {
className="contextMenu-cont"
ref={action((r: any) => {
if (r) {
- this._width = Number(getComputedStyle(r).width.replace('px', ''));
- this._height = Number(getComputedStyle(r).height.replace('px', ''));
+ this._width = DivWidth(r);
+ this._height = DivHeight(r);
}
})}
style={{
diff --git a/src/client/views/DashboardView.tsx b/src/client/views/DashboardView.tsx
index 472d419fc..146ac5b01 100644
--- a/src/client/views/DashboardView.tsx
+++ b/src/client/views/DashboardView.tsx
@@ -28,6 +28,7 @@ import { Colors } from './global/globalEnums';
import { MainViewModal } from './MainViewModal';
import { ButtonType } from './nodes/FontIconBox/FontIconBox';
import { ObservableReactComponent } from './ObservableReactComponent';
+import { dropActionType } from '../util/DragManager';
enum DashboardGroup {
MyDashboards,
@@ -403,7 +404,7 @@ export class DashboardView extends ObservableReactComponent<{}> {
_layout_fitWidth: true,
_gridGap: 5,
_forceActive: true,
- childDragAction: 'embed',
+ childDragAction: dropActionType.embed,
treeView_TruncateTitleWidth: 150,
ignoreClick: true,
contextMenuIcons: new List<string>(['plus']),
@@ -411,7 +412,7 @@ export class DashboardView extends ObservableReactComponent<{}> {
_lockedPosition: true,
layout_boxShadow: '0 0',
childDontRegisterViews: true,
- dropAction: 'same',
+ dropAction: dropActionType.same,
isSystem: true,
layout_explainer: 'All of the calendars that you have created will appear here.',
};
@@ -427,7 +428,6 @@ export class DashboardView extends ObservableReactComponent<{}> {
_width: 30,
_height: 30,
_dragOnlyWithinContainer: true,
- _layout_hideContextMenu: true,
title: 'New trail',
toolTip: 'Create new trail',
color: Colors.BLACK,
@@ -450,7 +450,7 @@ export class DashboardView extends ObservableReactComponent<{}> {
_layout_fitWidth: true,
_gridGap: 5,
_forceActive: true,
- childDragAction: 'embed',
+ childDragAction: dropActionType.embed,
treeView_TruncateTitleWidth: 150,
ignoreClick: true,
layout_headerButton: myTrailsBtn,
@@ -459,7 +459,7 @@ export class DashboardView extends ObservableReactComponent<{}> {
_lockedPosition: true,
layout_boxShadow: '0 0',
childDontRegisterViews: true,
- dropAction: 'same',
+ dropAction: dropActionType.same,
isSystem: true,
layout_explainer: 'All of the trails that you have created will appear here.',
};
diff --git a/src/client/views/DocComponent.tsx b/src/client/views/DocComponent.tsx
index 3d5a5b945..a25a8f77a 100644
--- a/src/client/views/DocComponent.tsx
+++ b/src/client/views/DocComponent.tsx
@@ -182,19 +182,19 @@ export function ViewBoxAnnotatableComponent<P extends FieldViewProps>() {
const docs = indocs.filter(doc => [AclEdit, AclAdmin].includes(effectiveAcl) || GetEffectiveAcl(doc) === AclAdmin);
// docs.forEach(doc => doc.annotationOn === this.Document && Doc.SetInPlace(doc, 'annotationOn', undefined, true));
- const targetDataDoc = this.dataDoc;
+ const targetDataDoc = this.Document[DocData]; // this.dataDoc; // we want to write to the template, not the actual data doc
const value = DocListCast(targetDataDoc[annotationKey ?? this.annotationKey]);
const toRemove = value.filter(v => docs.includes(v));
if (toRemove.length !== 0) {
- const recent = this.Document !== Doc.MyRecentlyClosed ? Doc.MyRecentlyClosed : undefined;
+ const recentlyClosed = this.Document !== Doc.MyRecentlyClosed ? Doc.MyRecentlyClosed : undefined;
toRemove.forEach(doc => {
leavePushpin && DocUtils.LeavePushpin(doc, annotationKey ?? this.annotationKey);
Doc.RemoveDocFromList(targetDataDoc, annotationKey ?? this.annotationKey, doc, true);
- Doc.RemoveEmbedding(doc, doc);
doc.embedContainer = undefined;
- if (recent && !dontAddToRemoved) {
- doc.type !== DocumentType.LOADING && Doc.AddDocToList(recent, 'data', doc, undefined, true, true);
+ if (recentlyClosed && !dontAddToRemoved && doc.type !== DocumentType.LOADING) {
+ Doc.AddDocToList(recentlyClosed, 'data', doc, undefined, true, true);
+ Doc.RemoveEmbedding(doc, doc);
}
});
if (targetDataDoc.isGroup && DocListCast(targetDataDoc[annotationKey ?? this.annotationKey]).length < 2) {
@@ -228,7 +228,7 @@ export function ViewBoxAnnotatableComponent<P extends FieldViewProps>() {
if (this._props.filterAddDocument?.(docs) === false || docs.find(doc => Doc.AreProtosEqual(doc, this.Document) && Doc.LayoutField(doc) === Doc.LayoutField(this.Document))) {
return false;
}
- const targetDataDoc = this.dataDoc;
+ const targetDataDoc = this.Document[DocData]; // this.dataDoc; // we want to write to the template, not the actual data doc
const effectiveAcl = GetEffectiveAcl(targetDataDoc);
if (effectiveAcl === AclPrivate || effectiveAcl === AclReadonly) {
@@ -245,9 +245,9 @@ export function ViewBoxAnnotatableComponent<P extends FieldViewProps>() {
inheritParentAcls(targetDataDoc, doc, true);
});
- const annoDocs = Doc.Get(targetDataDoc, annotationKey ?? this.annotationKey, true) as List<Doc>; // get the dataDoc directly ... when using templates there may be some default items already there, but we can't change them. maybe we should copy them over, though...
+ const annoDocs = Doc.Get(targetDataDoc, annotationKey ?? this.annotationKey, true) as List<Doc>; // get the dataDoc directly ... when using templates there may be some default items already there, but we can't change them, so we copy them below (should really be some kind of inheritance since the template contents could change)
if (annoDocs instanceof List) annoDocs.push(...added.filter(add => !annoDocs.includes(add)));
- else targetDataDoc[annotationKey ?? this.annotationKey] = new List<Doc>(added);
+ else targetDataDoc[annotationKey ?? this.annotationKey] = new List<Doc>([...added, ...(annoDocs === undefined ? DocListCast(targetDataDoc[annotationKey ?? this.annotationKey]) : [])]);
targetDataDoc[(annotationKey ?? this.annotationKey) + '_modificationDate'] = new DateField();
}
}
diff --git a/src/client/views/DocumentButtonBar.tsx b/src/client/views/DocumentButtonBar.tsx
index 8a4b42ae0..d65e0b406 100644
--- a/src/client/views/DocumentButtonBar.tsx
+++ b/src/client/views/DocumentButtonBar.tsx
@@ -4,12 +4,12 @@ import { Tooltip } from '@mui/material';
import { action, computed, makeObservable, observable, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
-import { emptyFunction, returnFalse, setupMoveUpEvents, simulateMouseClick } from '../../Utils';
+import { emptyFunction, returnFalse, returnTrue, setupMoveUpEvents, simulateMouseClick } from '../../Utils';
import { Doc } from '../../fields/Doc';
import { Cast, DocCast } from '../../fields/Types';
import { DocUtils } from '../documents/Documents';
import { CalendarManager } from '../util/CalendarManager';
-import { DragManager } from '../util/DragManager';
+import { DragManager, dropActionType } from '../util/DragManager';
import { IsFollowLinkScript } from '../util/LinkFollower';
import { SelectionManager } from '../util/SelectionManager';
import { SharingManager } from '../util/SharingManager';
@@ -24,6 +24,9 @@ import { DocumentView, DocumentViewInternal, OpenWhere } from './nodes/DocumentV
import { DashFieldView } from './nodes/formattedText/DashFieldView';
import { PinProps } from './nodes/trails';
import { faCalendarDays } from '@fortawesome/free-solid-svg-icons';
+import { Popup } from 'browndash-components';
+import { TemplateMenu } from './TemplateMenu';
+import { FaEdit } from 'react-icons/fa';
@observer
export class DocumentButtonBar extends ObservableReactComponent<{ views: () => (DocumentView | undefined)[]; stack?: any }> {
@@ -306,7 +309,7 @@ export class DocumentButtonBar extends ObservableReactComponent<{ views: () => (
const dragDocView = this.view0!;
const dragData = new DragManager.DocumentDragData([dragDocView.Document]);
const [left, top] = dragDocView.screenToContentsTransform().inverse().transformPoint(0, 0);
- dragData.defaultDropAction = 'embed';
+ dragData.defaultDropAction = dropActionType.embed;
dragData.canEmbed = true;
DragManager.StartDocumentDrag([dragDocView.ContentDiv!], dragData, left, top, { hideSource: false });
return true;
@@ -316,35 +319,24 @@ export class DocumentButtonBar extends ObservableReactComponent<{ views: () => (
_ref = React.createRef<HTMLDivElement>();
@observable _tooltipOpen: boolean = false;
+ @computed get templateMenu() {
+ return (
+ <div ref={this._ref}>
+ <TemplateMenu
+ docViews={this._props
+ .views()
+ .filter(v => v)
+ .map(v => v as DocumentView)}
+ />
+ </div>
+ );
+ }
@computed
get templateButton() {
- const view0 = this.view0;
- const views = this._props.views();
- return !view0 ? null : (
+ return !this.view0 ? null : (
<Tooltip title={<div className="dash-tooltip">Tap to Customize Layout. Drag an embedding</div>} open={this._tooltipOpen} onClose={action(() => (this._tooltipOpen = false))} placement="bottom">
<div className="documentButtonBar-linkFlyout" ref={this._dragRef} onPointerEnter={action(() => !this._ref.current?.getBoundingClientRect().width && (this._tooltipOpen = true))}>
- {
- /* <Flyout
- anchorPoint={anchorPoints.LEFT_TOP}
- onOpen={action(() => (this._embedDown = true))}
- onClose={action(() => (this._embedDown = false))}
- content={
- !this._embedDown ? null : (
- <div ref={this._ref}>
- {' '}
- <TemplateMenu docViews={views.filter(v => v).map(v => v as DocumentView)} />
- </div>
- )
- }>
- <div className={'documentButtonBar-linkButton-empty'} ref={this._dragRef} onPointerDown={this.onTemplateButton}>
- <FontAwesomeIcon className="documentdecorations-icon" icon="edit" size="sm" />
- </div>
- </Flyout> */
-
- <div className={'documentButtonBar-linkButton-empty'} ref={this._dragRef} onPointerDown={this.onTemplateButton}>
- <FontAwesomeIcon className="documentdecorations-icon" icon="edit" size="sm" />
- </div>
- }
+ <Popup icon={<FaEdit />} popup={this.templateMenu} popupContainsPt={returnTrue} />
</div>
</Tooltip>
);
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index e9c4d9cc5..2fb9f0fc1 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -77,7 +77,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
const {x,y} = Utils.rotPt(e.clientX - center.x,
e.clientY - center.y,
NumCast(SelectionManager.Views.lastElement()?.screenToViewTransform().Rotate));
- (this._showNothing = !(this.Bounds.x !== Number.MAX_VALUE && //
+ (this._showNothing = !DocumentButtonBar.Instance?._tooltipOpen && !(this.Bounds.x !== Number.MAX_VALUE && //
(this.Bounds.x > center.x+x || this.Bounds.r < center.x+x ||
this.Bounds.y > center.y+y || this.Bounds.b < center.y+y )));
})); // prettier-ignore
@@ -323,7 +323,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
SelectionManager.Docs.map(doc => {
const docMax = Math.min(NumCast(doc.width) / 2, NumCast(doc.height) / 2);
const radius = Math.min(1, dist / maxDist) * docMax; // set radius based on ratio of drag distance to half diagonal distance of bounding box
- doc.layout_borderRounding = `${radius}px`;
+ doc._layout_borderRounding = `${radius}px`;
});
return false;
},
@@ -514,7 +514,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
//
// determines if anything being dragged directly or via a group has a fixed aspect ratio (in which case we resize uniformly)
//
- hasFixedAspect = (doc: Doc): boolean => (doc.isGroup ? DocListCast(doc.data).some(this.hasFixedAspect) : !BoolCast(doc.layout_nativeDimEditable));
+ hasFixedAspect = (doc: Doc): boolean => (doc.isGroup ? DocListCast(doc.data).some(this.hasFixedAspect) : !BoolCast(doc._layout_nativeDimEditable));
//
// resize a single DocumentView about the specified reference point, possibly setting/updating the native dimensions of the Doc
@@ -533,9 +533,9 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
const [initWidth, initHeight] = [NumCast(doc._width, 1), NumCast(doc._height)];
const modifyNativeDim =
- (opts.ctrlKey && doc.layout_nativeDimEditable) || // e.g., PDF or web page
- (doc.layout_reflowHorizontal && opts.dragHdl !== 'bottom' && opts.dragHdl !== 'top') || // eg rtf or some web pages
- (doc.layout_reflowVertical && (opts.dragHdl === 'bottom' || opts.dragHdl === 'top' || opts.ctrlKey)); // eg rtf, web, pdf
+ (opts.ctrlKey && doc._layout_nativeDimEditable) || // e.g., PDF or web page
+ (doc._layout_reflowHorizontal && opts.dragHdl !== 'bottom' && opts.dragHdl !== 'top') || // eg rtf or some web pages
+ (doc._layout_reflowVertical && (opts.dragHdl === 'bottom' || opts.dragHdl === 'top' || opts.ctrlKey)); // eg rtf, web, pdf
if (nwidth && nheight && !modifyNativeDim) {
// eg., dragging right resizer on PDF -- enforce native dimensions because not expliclty overridden with ctrl or bottom resize drag
scale.x === 1 ? (scale.x = scale.y) : (scale.y = scale.x);
@@ -545,7 +545,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
const setData = Doc.NativeWidth(doc[DocData]) === doc.nativeWidth;
doc.nativeWidth = scale.x * Doc.NativeWidth(doc);
if (setData) Doc.SetNativeWidth(doc[DocData], NumCast(doc.nativeWidth));
- if (doc.layout_reflowVertical && !NumCast(doc.nativeHeight)) {
+ if (doc._layout_reflowVertical && !NumCast(doc.nativeHeight)) {
doc._nativeHeight = (initHeight / initWidth) * nwidth; // initializes the nativeHeight for a PDF
}
}
@@ -562,7 +562,13 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
doc.y = NumCast(doc.y) + deltaY;
doc._layout_modificationDate = new DateField();
- scale.y !== 1 && (doc._layout_autoHeight = undefined);
+ if (scale.y !== 1) {
+ docView.layoutDoc._layout_autoHeight = undefined;
+ if (docView.layoutDoc._layout_autoHeight) {
+ // if autoHeight is still on because of a prototype
+ docView.layoutDoc._layout_autoHeight = false; // then don't inherit, but explicitly set it to false
+ }
+ }
}
};
@@ -597,7 +603,7 @@ export class DocumentDecorations extends ObservableReactComponent<DocumentDecora
this._resizeUndo?.end();
// detect layout_autoHeight gesture and apply
- SelectionManager.Docs.forEach(doc => NumCast(doc._height) < 20 && (doc._layout_autoHeight = true));
+ SelectionManager.Views.forEach(view => NumCast(view.Document._height) < 20 && (view.layoutDoc._layout_autoHeight = true));
//need to change points for resize, or else rotation/control points will fail.
this._inkDragDocs
.map(oldbds => ({ oldbds, inkPts: Cast(oldbds.doc.data, InkField)?.inkData || [] }))
diff --git a/src/client/views/FieldsDropdown.tsx b/src/client/views/FieldsDropdown.tsx
new file mode 100644
index 000000000..5638d34c6
--- /dev/null
+++ b/src/client/views/FieldsDropdown.tsx
@@ -0,0 +1,120 @@
+/**
+ * This creates a dropdown menu that's populated with possible field key names (e.g., author, tags)
+ *
+ * The set of field names actually displayed is based on searching the prop 'Document' and its descendants :
+ * The field list will contain all of the fields within the prop Document and all of its children;
+ * this list is then pruned down to only include fields that are not marked in Documents.ts to be non-filterable
+ */
+
+import { computed, makeObservable, observable, runInAction } from 'mobx';
+import { observer } from 'mobx-react';
+import * as React from 'react';
+import Select from 'react-select';
+import { Doc } from '../../fields/Doc';
+import { DocOptions, FInfo } from '../documents/Documents';
+import { SearchUtil } from '../util/SearchUtil';
+import { SettingsManager } from '../util/SettingsManager';
+import './FilterPanel.scss';
+import { ObservableReactComponent } from './ObservableReactComponent';
+
+interface fieldsDropdownProps {
+ Document: Doc; // show fields for this Doc if set, otherwise for all docs in dashboard
+ selectFunc: (value: string) => void;
+ menuClose?: () => void;
+ placeholder?: string | (() => string);
+ showPlaceholder?: true; // if true, then input field always shows the placeholder value; otherwise, it shows the current selection
+ addedFields?: string[];
+}
+
+@observer
+export class FieldsDropdown extends ObservableReactComponent<fieldsDropdownProps> {
+ @observable _newField = '';
+ constructor(props: any) {
+ super(props);
+ makeObservable(this);
+ }
+
+ @computed get allDescendantDocs() {
+ const allDocs = new Set<Doc>();
+ SearchUtil.foreachRecursiveDoc([this._props.Document], (depth, doc) => allDocs.add(doc));
+ return Array.from(allDocs);
+ }
+
+ @computed get fieldsOfDocuments() {
+ const keys = new Set<string>();
+ this.allDescendantDocs.forEach(doc => SearchUtil.documentKeys(doc).filter(key => keys.add(key)));
+ const sortedKeys = Array.from(keys.keys())
+ .filter(key => key[0])
+ .filter(key => key.indexOf('modificationDate') !== -1 || (key[0] === key[0].toUpperCase() && !key.startsWith('_')) || !Doc.noviceMode)
+ .sort();
+
+ Array.from(keys).forEach(key => sortedKeys.splice(sortedKeys.indexOf(key), 1));
+
+ return [...Array.from(keys), ...sortedKeys];
+ }
+
+ render() {
+ const filteredOptions = ['author', ...(this._newField ? [this._newField] : []), ...(this._props.addedFields ?? []), ...this.fieldsOfDocuments.filter(facet => facet[0] === facet.charAt(0).toUpperCase())];
+
+ Object.entries(DocOptions)
+ .filter(opts => opts[1].filterable)
+ .forEach((pair: [string, FInfo]) => filteredOptions.push(pair[0]));
+ const options = filteredOptions.sort().map(facet => ({ value: facet, label: facet }));
+
+ console.log(options);
+ return (
+ <Select
+ styles={{
+ control: (baseStyles, state) => ({
+ ...baseStyles,
+ minHeight: '5px',
+ maxHeight: '30px',
+ color: SettingsManager.userColor,
+ backgroundColor: SettingsManager.userBackgroundColor,
+ padding: 0,
+ margin: 0,
+ }),
+ singleValue: (baseStyles, state) => ({
+ ...baseStyles,
+ color: SettingsManager.userColor,
+ background: SettingsManager.userBackgroundColor,
+ }),
+ placeholder: (baseStyles, state) => ({
+ ...baseStyles,
+ color: SettingsManager.userColor,
+ background: SettingsManager.userBackgroundColor,
+ }),
+ input: (baseStyles, state) => ({
+ ...baseStyles,
+ padding: 0,
+ margin: 0,
+ color: SettingsManager.userColor,
+ background: 'transparent',
+ }),
+ option: (baseStyles, state) => ({
+ ...baseStyles,
+ color: SettingsManager.userColor,
+ background: !state.isFocused ? SettingsManager.userBackgroundColor : SettingsManager.userVariantColor,
+ }),
+ menuList: (baseStyles, state) => ({
+ ...baseStyles,
+ backgroundColor: SettingsManager.userBackgroundColor,
+ }),
+ }}
+ placeholder={typeof this._props.placeholder === 'string' ? this._props.placeholder : this._props.placeholder?.()}
+ options={options as any}
+ isMulti={false}
+ onChange={val => this._props.selectFunc((val as any as { value: string; label: string }).value)}
+ onKeyDown={e => {
+ if (e.key === 'Enter') {
+ runInAction(() => this._props.selectFunc((this._newField = (e.nativeEvent.target as any)?.value)));
+ }
+ e.stopPropagation();
+ }}
+ onMenuClose={this._props.menuClose}
+ closeMenuOnSelect={true}
+ value={this._props.showPlaceholder ? null : undefined}
+ />
+ );
+ }
+}
diff --git a/src/client/views/FilterPanel.tsx b/src/client/views/FilterPanel.tsx
index 818c81c9a..0521c4a4b 100644
--- a/src/client/views/FilterPanel.tsx
+++ b/src/client/views/FilterPanel.tsx
@@ -4,19 +4,16 @@ import * as React from 'react';
import { Handles, Rail, Slider, Ticks, Tracks } from 'react-compound-slider';
import { AiOutlineMinusSquare, AiOutlinePlusSquare } from 'react-icons/ai';
import { CiCircleRemove } from 'react-icons/ci';
-import Select from 'react-select';
import { Doc, DocListCast, Field, LinkedTo, StrListCast } from '../../fields/Doc';
import { Id } from '../../fields/FieldSymbols';
import { List } from '../../fields/List';
import { RichTextField } from '../../fields/RichTextField';
-import { DocOptions, FInfo } from '../documents/Documents';
import { DocumentManager } from '../util/DocumentManager';
-import { UserOptions } from '../util/GroupManager';
import { SearchUtil } from '../util/SearchUtil';
import { SettingsManager } from '../util/SettingsManager';
import { undoable } from '../util/UndoManager';
+import { FieldsDropdown } from './FieldsDropdown';
import './FilterPanel.scss';
-import { FieldView } from './nodes/FieldView';
import { Handle, Tick, TooltipRail, Track } from './nodes/SliderBox-components';
import { ObservableReactComponent } from './ObservableReactComponent';
@@ -26,9 +23,7 @@ interface filterProps {
@observer
export class FilterPanel extends ObservableReactComponent<filterProps> {
- public static LayoutString(fieldKey: string) {
- return FieldView.LayoutString(FilterPanel, fieldKey);
- }
+ @observable _selectedFacetHeaders = new Set<string>();
constructor(props: any) {
super(props);
@@ -38,45 +33,19 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
/**
* @returns the relevant doc according to the value of FilterBox._filterScope i.e. either the Current Dashboard or the Current Collection
*/
- get targetDoc() {
+ get Document() {
return this._props.Document;
}
@computed get targetDocChildKey() {
- const targetView = DocumentManager.Instance.getFirstDocumentView(this.targetDoc);
+ const targetView = DocumentManager.Instance.getFirstDocumentView(this.Document);
return targetView?.ComponentView?.annotationKey ?? targetView?.ComponentView?.fieldKey ?? 'data';
}
@computed get targetDocChildren() {
- return [...DocListCast(this.targetDoc?.[this.targetDocChildKey] || Doc.ActiveDashboard?.data), ...DocListCast(this.targetDoc[Doc.LayoutFieldKey(this.targetDoc) + '_sidebar'])];
- }
-
- @computed get allDocs() {
- const allDocs = new Set<Doc>();
- const targetDoc = this.targetDoc;
- if (targetDoc) {
- SearchUtil.foreachRecursiveDoc([this.targetDoc], (depth, doc) => allDocs.add(doc));
- }
- return Array.from(allDocs);
- }
-
- @computed get _allFacets() {
- const noviceReqFields = ['author', 'tags', 'text', 'type', LinkedTo];
- const noviceLayoutFields: string[] = []; //["_layout_curPage"];
- const noviceFields = [...noviceReqFields, ...noviceLayoutFields];
-
- const keys = new Set<string>(noviceFields);
- this.allDocs.forEach(doc => SearchUtil.documentKeys(doc).filter(key => keys.add(key)));
- const sortedKeys = Array.from(keys.keys())
- .filter(key => key[0])
- .filter(key => key.indexOf('modificationDate') !== -1 || (key[0] === key[0].toUpperCase() && !key.startsWith('_')) || noviceFields.includes(key) || !Doc.noviceMode)
- .sort();
-
- noviceFields.forEach(key => sortedKeys.splice(sortedKeys.indexOf(key), 1));
-
- return [...noviceFields, ...sortedKeys];
+ return [...DocListCast(this.Document?.[this.targetDocChildKey] || Doc.ActiveDashboard?.data), ...DocListCast(this.Document[Doc.LayoutFieldKey(this.Document) + '_sidebar'])];
}
@computed get rangeFilters() {
- return StrListCast(this.targetDoc?._childFiltersByRanges).filter((filter, i) => !(i % 3));
+ return StrListCast(this.Document?._childFiltersByRanges).filter((filter, i) => !(i % 3));
}
/**
@@ -84,7 +53,7 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
* ["#tags::bob::check", "tags::joe::check", "width", "height"]
*/
@computed get activeFilters() {
- return StrListCast(this.targetDoc?._childFilters).concat(this.rangeFilters);
+ return StrListCast(this.Document?._childFilters).concat(this.rangeFilters);
}
@computed get mapActiveFiltersToFacets() {
@@ -100,32 +69,27 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
// this wants to return all the filter facets that have an existing filter set on them in order to show them in the rendered panel
// this set may overlap the selectedFilters
// if the components reloads, these will still exist and be shown
-
+ //
// ["#tags", "width", "height"]
//
-
@computed get activeFacetHeaders() {
const activeHeaders = new Array();
this.activeFilters.map(filter => activeHeaders.push(filter.split(Doc.FilterSep)[0]));
return activeHeaders;
}
- /**
- * @returns a string array of the current attributes
- */
- // @computed get currentFacets() {
- // return this.activeFilters.map(filter => filter.split(Doc.FilterSep)[0]);
- // }
static gatherFieldValues(childDocs: Doc[], facetKey: string, childFilters: string[]) {
const valueSet = new Set<string>(childFilters.map(filter => filter.split(Doc.FilterSep)[1]));
let rtFields = 0;
let subDocs = childDocs;
+ let gatheredDocs = [] as Doc[];
if (subDocs.length > 0) {
let newarray: Doc[] = [];
while (subDocs.length > 0) {
newarray = [];
subDocs.forEach(t => {
+ gatheredDocs.push(t);
const facetVal = t[facetKey];
if (facetVal instanceof RichTextField || typeof facetVal === 'string') rtFields++;
facetVal !== undefined && valueSet.add(Field.toString(facetVal as Field));
@@ -135,7 +99,7 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
DocListCast(t[annos ? fieldKey + '_annotations' : fieldKey]).forEach(newdoc => newarray.push(newdoc));
annos && DocListCast(t[fieldKey + '_sidebar']).forEach(newdoc => newarray.push(newdoc));
});
- subDocs = newarray;
+ subDocs = newarray.filter(d => !gatheredDocs.includes(d));
}
}
// }
@@ -145,8 +109,8 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
}
public removeFilter = (filterName: string) => {
- Doc.setDocFilter(this.targetDoc, filterName, undefined, 'remove');
- Doc.setDocRangeFilter(this.targetDoc, filterName, undefined);
+ Doc.setDocFilter(this.Document, filterName, undefined, 'remove');
+ Doc.setDocRangeFilter(this.Document, filterName, undefined);
};
// @observable _chosenFacets = new ObservableMap<string, 'text' | 'checkbox' | 'slider' | 'range'>();
@@ -154,18 +118,16 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
@observable _collapseReturnKeys = new Array();
// this computed function gets the active filters and maps them to their headers
-
//
// activeRenderedFacetInfos()
// returns renderInfo for all user selected filters and for all existing filters set on the document
// Map("tags" => {"checkbox"},
- // "width" => {"rangs", domain:[1978,1992]})
+ // "width" => {"range", domain:[1978,1992]})
//
-
@computed get activeRenderedFacetInfos() {
return new Set(
Array.from(new Set(Array.from(this._selectedFacetHeaders).concat(this.activeFacetHeaders))).map(facetHeader => {
- const facetValues = FilterPanel.gatherFieldValues(this.targetDocChildren, facetHeader, StrListCast(this.targetDoc.childFilters));
+ const facetValues = FilterPanel.gatherFieldValues(this.targetDocChildren, facetHeader, StrListCast(this.Document.childFilters));
let nonNumbers = 0;
let minVal = Number.MAX_VALUE,
@@ -185,7 +147,7 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
} else if (facetHeader !== 'tags' && nonNumbers / facetValues.strings.length < 0.1) {
const extendedMinVal = minVal - Math.min(1, Math.floor(Math.abs(maxVal - minVal) * 0.1));
const extendedMaxVal = Math.max(minVal + 1, maxVal + Math.min(1, Math.ceil(Math.abs(maxVal - minVal) * 0.05)));
- const ranged = Doc.readDocRangeFilter(this.targetDoc, facetHeader); // not the filter range, but the zooomed in range on the filter
+ const ranged = Doc.readDocRangeFilter(this.Document, facetHeader); // not the filter range, but the zooomed in range on the filter
return { facetHeader, renderType: 'range', domain: [extendedMinVal, extendedMaxVal], range: ranged ? ranged : [extendedMinVal, extendedMaxVal] };
} else {
return { facetHeader, renderType: 'checkbox' };
@@ -194,8 +156,6 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
);
}
- @observable _selectedFacetHeaders = new Set<string>();
-
/**
* user clicks on a filter facet because they want to see it.
* this adds this chosen filter to a set of user selected filters called: selectedFilters
@@ -229,7 +189,7 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
facetValues = (facetHeader: string) => {
const allCollectionDocs = new Set<Doc>();
SearchUtil.foreachRecursiveDoc(this.targetDocChildren, (depth: number, doc: Doc) => allCollectionDocs.add(doc));
- const set = new Set<string>([...StrListCast(this.targetDoc.childFilters).map(filter => filter.split(Doc.FilterSep)[1]), Doc.FilterNone, Doc.FilterAny]);
+ const set = new Set<string>([...StrListCast(this.Document.childFilters).map(filter => filter.split(Doc.FilterSep)[1]), Doc.FilterNone, Doc.FilterAny]);
if (facetHeader === 'tags')
allCollectionDocs.forEach(child =>
StrListCast(child[facetHeader])
@@ -253,59 +213,13 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
return nonNumbers / facetValues.length > 0.1 ? facetValues.sort() : facetValues.sort((n1: string, n2: string) => Number(n1) - Number(n2));
};
- @computed get fieldsDropdown() {
- const filteredOptions = ['author', 'tags', 'text', 'acl-Guest', ...this._allFacets.filter(facet => facet[0] === facet.charAt(0).toUpperCase())];
-
- Object.entries(DocOptions)
- .filter(opts => opts[1].filterable)
- .forEach((pair: [string, FInfo]) => filteredOptions.push(pair[0]));
- const options = filteredOptions.map(facet => ({ value: facet, label: facet }));
-
- return (
- <Select
- styles={{
- control: (baseStyles, state) => ({
- ...baseStyles,
- color: SettingsManager.userColor,
- background: SettingsManager.userBackgroundColor,
- }),
- placeholder: (baseStyles, state) => ({
- ...baseStyles,
- color: SettingsManager.userColor,
- background: SettingsManager.userBackgroundColor,
- }),
- input: (baseStyles, state) => ({
- ...baseStyles,
- color: SettingsManager.userColor,
- background: SettingsManager.userBackgroundColor,
- }),
- option: (baseStyles, state) => ({
- ...baseStyles,
- color: SettingsManager.userColor,
- background: !state.isFocused ? SettingsManager.userBackgroundColor : SettingsManager.userVariantColor,
- }),
- menuList: (baseStyles, state) => ({
- ...baseStyles,
- backgroundColor: SettingsManager.userBackgroundColor,
- }),
- }}
- placeholder={'add a filter'}
- options={options}
- isMulti={false}
- onChange={val => this.facetClick((val as UserOptions).value)}
- onKeyDown={e => e.stopPropagation()}
- //onMenuClose={onClose}
- value={null}
- closeMenuOnSelect={true}
- />
- );
- }
-
render() {
return (
<div className="filterBox-treeView">
<div className="filterBox-select">
- <div style={{ width: '100%' }}>{this.fieldsDropdown}</div>
+ <div style={{ width: '100%' }}>
+ <FieldsDropdown Document={this.Document} selectFunc={this.facetClick} showPlaceholder={true} placeholder="add a filter" addedFields={['acl-Guest', LinkedTo]} />
+ </div>
{/* THE FOLLOWING CODE SHOULD BE DEVELOPER FOR BOOLEAN EXPRESSION (AND / OR) */}
{/* <div className="filterBox-select-bool">
<select className="filterBox-selection" onChange={action(e => this.targetDoc && (this.targetDoc._childFilters_boolean = (e.target as any).value))} defaultValue={StrCast(this.targetDoc?.childFilters_boolean)}>
@@ -341,11 +255,11 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
className="filterBox-facetHeader-remove"
onClick={action(e => {
if (renderInfo.facetHeader === 'text') {
- Doc.setDocFilter(this.targetDoc, renderInfo.facetHeader, 'match', 'remove');
+ Doc.setDocFilter(this.Document, renderInfo.facetHeader, 'match', 'remove');
} else {
for (var key of this.facetValues(renderInfo.facetHeader)) {
if (this.mapActiveFiltersToFacets.get(key)) {
- Doc.setDocFilter(this.targetDoc, renderInfo.facetHeader, key, 'remove');
+ Doc.setDocFilter(this.Document, renderInfo.facetHeader, key, 'remove');
}
}
}
@@ -353,7 +267,7 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
this._chosenFacetsCollapse.delete(renderInfo.facetHeader);
if (renderInfo.domain) {
- Doc.setDocRangeFilter(this.targetDoc, renderInfo.facetHeader, renderInfo.domain, 'remove');
+ Doc.setDocRangeFilter(this.Document, renderInfo.facetHeader, renderInfo.domain, 'remove');
}
})}>
<CiCircleRemove />{' '}
@@ -377,16 +291,16 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
case 'text':
return (
<input
- key={this.targetDoc[Id]}
+ key={this.Document[Id]}
placeholder={'enter text to match'}
defaultValue={
- StrListCast(this.targetDoc._childFilters)
+ StrListCast(this.Document._childFilters)
.find(filter => filter.split(Doc.FilterSep)[0] === facetHeader)
?.split(Doc.FilterSep)[1]
}
style={{ color: SettingsManager.userColor, background: SettingsManager.userBackgroundColor }}
- onBlur={undoable(e => Doc.setDocFilter(this.targetDoc, facetHeader, e.currentTarget.value, !e.currentTarget.value ? 'remove' : 'match'), 'set text filter')}
- onKeyDown={e => e.key === 'Enter' && undoable(e => Doc.setDocFilter(this.targetDoc, facetHeader, e.currentTarget.value, !e.currentTarget.value ? 'remove' : 'match'), 'set text filter')(e)}
+ onBlur={undoable(e => Doc.setDocFilter(this.Document, facetHeader, e.currentTarget.value, !e.currentTarget.value ? 'remove' : 'match'), 'set text filter')}
+ onKeyDown={e => e.key === 'Enter' && undoable(e => Doc.setDocFilter(this.Document, facetHeader, e.currentTarget.value, !e.currentTarget.value ? 'remove' : 'match'), 'set text filter')(e)}
/>
);
case 'checkbox':
@@ -397,12 +311,12 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
<input
style={{ width: 20, marginLeft: 20 }}
checked={['check', 'exists'].includes(
- StrListCast(this.targetDoc._childFilters)
+ StrListCast(this.Document._childFilters)
.find(filter => filter.split(Doc.FilterSep)[0] === facetHeader && filter.split(Doc.FilterSep)[1] == facetValue)
?.split(Doc.FilterSep)[2] ?? ''
)}
type={type}
- onChange={undoable(e => Doc.setDocFilter(this.targetDoc, facetHeader, fval, e.target.checked ? 'check' : 'remove'), 'set filter')}
+ onChange={undoable(e => Doc.setDocFilter(this.Document, facetHeader, fval, e.target.checked ? 'check' : 'remove'), 'set filter')}
/>
{facetValue}
</div>
@@ -412,64 +326,51 @@ export class FilterPanel extends ObservableReactComponent<filterProps> {
case 'range':
const domain = renderInfoDomain;
const range = renderInfoRange;
-
- if (range) {
- console.log('this is info range ' + range[0] + ' , ' + range[1]);
- }
-
if (domain) {
- console.log('this is info domain ' + domain[0] + ', ' + domain[1]);
-
return (
- <>
- {/* <div className="sliderBox-outerDiv-checkBox" style={{ float: 'left' }}>
- <Checkbox color="primary" onChange={action(() => console.log('on change'))} />
- </div> */}
-
- <div className="sliderBox-outerDiv" style={{ width: '95%', height: 45, float: 'right' }}>
- <Slider
- mode={2}
- step={Math.min(1, 0.1 * (domain[1] - domain[0]))}
- domain={[domain[0], domain[1]]} // -1000, 1000
- rootStyle={{ position: 'relative', width: '100%' }}
- onChange={values => Doc.setDocRangeFilter(this.targetDoc, facetHeader, values)}
- values={renderInfoRange!}>
- <Rail>{railProps => <TooltipRail {...railProps} />}</Rail>
- <Handles>
- {({ handles, activeHandleID, getHandleProps }) => (
- <div className="slider-handles">
- {handles.map((handle, i) => {
- // const value = i === 0 ? defaultValues[0] : defaultValues[1];
- return (
- <div>
- <Handle key={handle.id} handle={handle} domain={domain} isActive={handle.id === activeHandleID} getHandleProps={getHandleProps} />
- </div>
- );
- })}
- </div>
- )}
- </Handles>
- <Tracks left={false} right={false}>
- {({ tracks, getTrackProps }) => (
- <div className="slider-tracks">
- {tracks.map(({ id, source, target }) => (
- <Track key={id} source={source} target={target} disabled={false} getTrackProps={getTrackProps} />
- ))}
- </div>
- )}
- </Tracks>
- <Ticks count={5}>
- {({ ticks }) => (
- <div className="slider-ticks">
- {ticks.map(tick => (
- <Tick key={tick.id} tick={tick} count={ticks.length} format={(val: number) => val.toString()} />
- ))}
- </div>
- )}
- </Ticks>
- </Slider>
- </div>
- </>
+ <div className="sliderBox-outerDiv" style={{ width: '95%', height: 45, float: 'right' }}>
+ <Slider
+ mode={2}
+ step={Math.min(1, 0.1 * (domain[1] - domain[0]))}
+ domain={[domain[0], domain[1]]} // -1000, 1000
+ rootStyle={{ position: 'relative', width: '100%' }}
+ onChange={values => Doc.setDocRangeFilter(this.Document, facetHeader, values)}
+ values={renderInfoRange!}>
+ <Rail>{railProps => <TooltipRail {...railProps} />}</Rail>
+ <Handles>
+ {({ handles, activeHandleID, getHandleProps }) => (
+ <div className="slider-handles">
+ {handles.map((handle, i) => {
+ // const value = i === 0 ? defaultValues[0] : defaultValues[1];
+ return (
+ <div>
+ <Handle key={handle.id} handle={handle} domain={domain} isActive={handle.id === activeHandleID} getHandleProps={getHandleProps} />
+ </div>
+ );
+ })}
+ </div>
+ )}
+ </Handles>
+ <Tracks left={false} right={false}>
+ {({ tracks, getTrackProps }) => (
+ <div className="slider-tracks">
+ {tracks.map(({ id, source, target }) => (
+ <Track key={id} source={source} target={target} disabled={false} getTrackProps={getTrackProps} />
+ ))}
+ </div>
+ )}
+ </Tracks>
+ <Ticks count={5}>
+ {({ ticks }) => (
+ <div className="slider-ticks">
+ {ticks.map(tick => (
+ <Tick key={tick.id} tick={tick} count={ticks.length} format={(val: number) => val.toString()} />
+ ))}
+ </div>
+ )}
+ </Ticks>
+ </Slider>
+ </div>
);
}
diff --git a/src/client/views/GlobalKeyHandler.ts b/src/client/views/GlobalKeyHandler.ts
index 733383002..e800798ca 100644
--- a/src/client/views/GlobalKeyHandler.ts
+++ b/src/client/views/GlobalKeyHandler.ts
@@ -24,6 +24,7 @@ import { MainView } from './MainView';
import { DocumentLinksButton } from './nodes/DocumentLinksButton';
import { OpenWhereMod } from './nodes/DocumentView';
import { AnchorMenu } from './pdf/AnchorMenu';
+import { FormattedTextBox } from './nodes/formattedText/FormattedTextBox';
const modifiers = ['control', 'meta', 'shift', 'alt'];
type KeyHandler = (keycode: string, e: KeyboardEvent) => KeyControlInfo;
@@ -61,6 +62,8 @@ export class KeyManager {
});
public handle = action((e: KeyboardEvent) => {
+ // accumulate buffer of characters to insert in a new text note. once the note is created, it will stop keyboard events from reaching this function.
+ if (FormattedTextBox.SelectOnLoadChar) FormattedTextBox.SelectOnLoadChar = FormattedTextBox.SelectOnLoadChar + (e.key === 'Enter' ? '\n' : e.key);
e.key === 'Control' && (CtrlKey = true);
//if (!Doc.noviceMode && e.key.toLocaleLowerCase() === "shift") DocServer.UPDATE_SERVER_CACHE(true);
const keyname = e.key && e.key.toLowerCase();
diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx
index 92644d3c5..122e5c4c3 100644
--- a/src/client/views/InkingStroke.tsx
+++ b/src/client/views/InkingStroke.tsx
@@ -438,7 +438,7 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps>() impleme
<svg
className="inkStroke"
style={{
- transform: isInkMask ? `rotate(-${NumCast(this._props.CollectionFreeFormDocumentView?.()._props.w_Rotation?.() ?? 0)}deg) translate(${InkingStroke.MaskDim / 2}px, ${InkingStroke.MaskDim / 2}px)` : undefined,
+ transform: isInkMask ? `rotate(-${NumCast(this._props.CollectionFreeFormDocumentView?.()._props.rotation ?? 0)}deg) translate(${InkingStroke.MaskDim / 2}px, ${InkingStroke.MaskDim / 2}px)` : undefined,
// mixBlendMode: this.layoutDoc.tool === InkTool.Highlighter ? 'multiply' : 'unset',
cursor: this._props.isSelected() ? 'default' : undefined,
}}
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index b6cb845a6..715d7ed2c 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -19,7 +19,7 @@ import { Docs } from '../documents/Documents';
import { CalendarManager } from '../util/CalendarManager';
import { CaptureManager } from '../util/CaptureManager';
import { DocumentManager } from '../util/DocumentManager';
-import { DragManager } from '../util/DragManager';
+import { DragManager, dropActionType } from '../util/DragManager';
import { GroupManager } from '../util/GroupManager';
import { HistoryUtil } from '../util/History';
import { Hypothesis } from '../util/HypothesisUtils';
@@ -397,6 +397,7 @@ export class MainView extends ObservableReactComponent<{}> {
fa.faPaintBrush,
fa.faTimes,
fa.faFlag,
+ fa.faScroll,
fa.faEye,
fa.faArrowsAlt,
fa.faQuoteLeft,
@@ -452,6 +453,7 @@ export class MainView extends ObservableReactComponent<{}> {
fa.faAngleDown,
fa.faPlayCircle,
fa.faClock,
+ fa.faRoute,
fa.faRocket,
fa.faExchangeAlt,
fa.faHashtag,
@@ -623,7 +625,7 @@ export class MainView extends ObservableReactComponent<{}> {
isContentActive={returnTrue} // headerBar is awlays contentActive which means its items are always documentActive
ScreenToLocalTransform={this.headerBarScreenXf}
childHideResizeHandles={true}
- childDragAction="move"
+ childDragAction={dropActionType.move}
dontRegisterView={true}
hideResizeHandles={true}
PanelWidth={this.headerBarDocWidth}
@@ -905,7 +907,7 @@ export class MainView extends ObservableReactComponent<{}> {
Document={Doc.MyDockedBtns}
docViewPath={returnEmptyDocViewList}
fieldKey="data"
- dropAction="embed"
+ dropAction={dropActionType.embed}
styleProvider={DefaultStyleProvider}
select={emptyFunction}
isAnyChildContentActive={returnFalse}
diff --git a/src/client/views/MarqueeAnnotator.tsx b/src/client/views/MarqueeAnnotator.tsx
index a4303c3aa..f59042b04 100644
--- a/src/client/views/MarqueeAnnotator.tsx
+++ b/src/client/views/MarqueeAnnotator.tsx
@@ -88,7 +88,7 @@ export class MarqueeAnnotator extends ObservableReactComponent<MarqueeAnnotatorP
const textRegionAnno = Docs.Create.HTMLMarkerDocument([], {
annotationOn: this.props.Document,
- text: this.props.selectionText(),
+ text: this.props.selectionText() as any, // text want an RTFfield, but strings are acceptable, too.
backgroundColor: 'transparent',
presentation_duration: 2100,
presentation_transition: 500,
@@ -198,7 +198,7 @@ export class MarqueeAnnotator extends ObservableReactComponent<MarqueeAnnotatorP
const sourceAnchorCreator = () => this.highlight(this.props.highlightDragSrcColor ?? 'rgba(173, 216, 230, 0.75)', true, undefined, true); // hyperlink color
const targetCreator = (annotationOn: Doc | undefined) => {
- const target = DocUtils.GetNewTextDoc('Note linked to ' + this.props.Document.title, 0, 0, 100, 100, undefined, annotationOn, 'yellow');
+ const target = DocUtils.GetNewTextDoc('Note linked to ' + this.props.Document.title, 0, 0, 100, 100, annotationOn, 'yellow');
FormattedTextBox.SetSelectOnLoad(target);
return target;
};
diff --git a/src/client/views/OverlayView.tsx b/src/client/views/OverlayView.tsx
index 20dc6c9fa..15b1f0275 100644
--- a/src/client/views/OverlayView.tsx
+++ b/src/client/views/OverlayView.tsx
@@ -9,7 +9,7 @@ import { Height, Width } from '../../fields/DocSymbols';
import { Id } from '../../fields/FieldSymbols';
import { NumCast } from '../../fields/Types';
import { DocumentType } from '../documents/DocumentTypes';
-import { DragManager } from '../util/DragManager';
+import { DragManager, dropActionType } from '../util/DragManager';
import { Transform } from '../util/Transform';
import { LightboxView } from './LightboxView';
import { ObservableReactComponent } from './ObservableReactComponent';
@@ -196,7 +196,7 @@ export class OverlayView extends ObservableReactComponent<{}> {
if (e.metaKey) {
const dragData = new DragManager.DocumentDragData([d]);
dragData.offset = [-offsetx, -offsety];
- dragData.dropAction = 'move';
+ dragData.dropAction = dropActionType.move;
dragData.removeDocument = this.removeOverlayDoc;
dragData.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => {
return dragData.removeDocument!(doc) ? addDocument(doc) : false;
diff --git a/src/client/views/PreviewCursor.tsx b/src/client/views/PreviewCursor.tsx
index 456b753b4..a94c18295 100644
--- a/src/client/views/PreviewCursor.tsx
+++ b/src/client/views/PreviewCursor.tsx
@@ -85,7 +85,7 @@ export class PreviewCursor extends ObservableReactComponent<{}> {
} else {
FormattedTextBox.PasteOnLoad = e;
if (e.clipboardData.getData('dash/pdfAnchor')) e.preventDefault();
- UndoManager.RunInBatch(() => this._addLiveTextDoc?.(DocUtils.GetNewTextDoc('', newPoint[0], newPoint[1], 500, undefined, undefined, undefined)), 'paste');
+ UndoManager.RunInBatch(() => this._addLiveTextDoc?.(DocUtils.GetNewTextDoc('', newPoint[0], newPoint[1], 500, undefined, undefined)), 'paste');
}
}
//pasting in images
diff --git a/src/client/views/PropertiesButtons.tsx b/src/client/views/PropertiesButtons.tsx
index cb38ab602..3cb835e39 100644
--- a/src/client/views/PropertiesButtons.tsx
+++ b/src/client/views/PropertiesButtons.tsx
@@ -486,8 +486,7 @@ export class PropertiesButtons extends React.Component<{}, {}> {
const isImage = layoutField instanceof ImageField;
const isMap = this.selectedDoc?.type === DocumentType.MAP;
const isCollection = this.selectedDoc?.type === DocumentType.COL;
- //TODO: will likely need to create separate note-taking view type here
- const isStacking = this.selectedDoc?._type_collection === CollectionViewType.Stacking || this.selectedDoc?._type_collection === CollectionViewType.NoteTaking;
+ const isStacking = [CollectionViewType.Stacking, CollectionViewType.Masonry, CollectionViewType.NoteTaking].includes(this.selectedDoc?._type_collection as any);
const isFreeForm = this.selectedDoc?._type_collection === CollectionViewType.Freeform;
const isTree = this.selectedDoc?._type_collection === CollectionViewType.Tree;
const isTabView = this.selectedTabView;
diff --git a/src/client/views/PropertiesDocContextSelector.tsx b/src/client/views/PropertiesDocContextSelector.tsx
index 361451c4d..b8bbde9de 100644
--- a/src/client/views/PropertiesDocContextSelector.tsx
+++ b/src/client/views/PropertiesDocContextSelector.tsx
@@ -30,12 +30,12 @@ export class PropertiesDocContextSelector extends ObservableReactComponent<Prope
const targetContext = this._props.DocView.containerViewPath?.().lastElement()?.Document;
const embeddings = Doc.GetEmbeddings(target);
const containerProtos = embeddings.filter(embedding => embedding.embedContainer && embedding.embedContainer instanceof Doc).reduce((set, embedding) => set.add(Cast(embedding.embedContainer, Doc, null)), new Set<Doc>());
- const containerSets = Array.from(containerProtos.keys()).map(container => Doc.GetEmbeddings(container));
+ const containerSets = Array.from(containerProtos.keys()).map(container => (Doc.GetEmbeddings(container).length ? Doc.GetEmbeddings(container) : [container]));
const containers = containerSets.reduce((p, set) => {
set.map(s => p.add(s));
return p;
}, new Set<Doc>());
- const doclayoutSets = Array.from(containers.keys()).map(dp => Doc.GetEmbeddings(dp));
+ const doclayoutSets = Array.from(containers.keys()).map(dp => (Doc.GetEmbeddings(dp).length ? Doc.GetEmbeddings(dp) : [dp]));
const doclayouts = Array.from(
doclayoutSets
.reduce((p, set) => {
diff --git a/src/client/views/PropertiesView.tsx b/src/client/views/PropertiesView.tsx
index e4e7bec32..cbd3ff358 100644
--- a/src/client/views/PropertiesView.tsx
+++ b/src/client/views/PropertiesView.tsx
@@ -135,7 +135,7 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
return this.selectedDoc?.isGroup;
}
@computed get isStack() {
- return [CollectionViewType.Stacking, CollectionViewType.NoteTaking].includes(this.selectedDoc?.type_collection as any);
+ return [CollectionViewType.Masonry, CollectionViewType.Multicolumn, CollectionViewType.Multirow, CollectionViewType.Stacking, CollectionViewType.NoteTaking].includes(this.selectedDoc?.type_collection as any);
}
rtfWidth = () => (!this.selectedLayoutDoc ? 0 : Math.min(NumCast(this.selectedLayoutDoc?._width), this._props.width - 20));
@@ -1076,6 +1076,7 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
<div className="transform-editor">
{!this.isStack ? null : this.getNumber('Gap', ' px', 0, 200, NumCast(this.selectedDoc!.gridGap), (val: number) => !isNaN(val) && (this.selectedDoc!.gridGap = val))}
{!this.isStack ? null : this.getNumber('xMargin', ' px', 0, 500, NumCast(this.selectedDoc!.xMargin), (val: number) => !isNaN(val) && (this.selectedDoc!.xMargin = val))}
+ {!this.isStack ? null : this.getNumber('yMargin', ' px', 0, 500, NumCast(this.selectedDoc!.yMargin), (val: number) => !isNaN(val) && (this.selectedDoc!.yMargin = val))}
{!this.isGroup ? null : this.getNumber('Padding', ' px', 0, 500, NumCast(this.selectedDoc!.xPadding), (val: number) => !isNaN(val) && (this.selectedDoc!.xPadding = this.selectedDoc!.yPadding = val))}
{this.isInk ? this.controlPointsButton : null}
{this.getNumber('Width', ' px', 0, Math.max(1000, this.shapeWid), this.shapeWid, (val: number) => !isNaN(val) && (this.shapeWid = val), 1000, 1)}
diff --git a/src/client/views/TemplateMenu.tsx b/src/client/views/TemplateMenu.tsx
index 5fc33207e..eed197b0b 100644
--- a/src/client/views/TemplateMenu.tsx
+++ b/src/client/views/TemplateMenu.tsx
@@ -3,7 +3,7 @@ import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc, DocListCast } from '../../fields/Doc';
import { ScriptField } from '../../fields/ScriptField';
-import { Cast, StrCast } from '../../fields/Types';
+import { Cast, DocCast, StrCast } from '../../fields/Types';
import { TraceMobx } from '../../fields/util';
import { emptyFunction, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnTrue } from '../../Utils';
import { Docs, DocUtils } from '../documents/Documents';
@@ -45,7 +45,6 @@ class OtherToggle extends React.Component<{ checked: boolean; name: string; togg
export interface TemplateMenuProps {
docViews: DocumentView[];
- templates?: Map<string, boolean>;
}
@observer
@@ -61,17 +60,6 @@ export class TemplateMenu extends React.Component<TemplateMenuProps> {
this.props.docViews.map(dv => dv.switchViews(false, 'layout'));
};
- @undoBatch
- @action
- toggleTemplate = (event: React.ChangeEvent<HTMLInputElement>, template: string): void => {
- this.props.docViews.forEach(d => (Doc.Layout(d.layoutDoc)['_show' + template] = event.target.checked ? template.toLowerCase() : ''));
- };
-
- @action
- toggleTemplateActivity = (): void => {
- this._hidden = !this._hidden;
- };
-
// todo: add brushes to brushMap to save with a style name
onCustomKeypress = (e: React.KeyboardEvent) => {
if (e.key === 'Enter') {
@@ -81,8 +69,11 @@ export class TemplateMenu extends React.Component<TemplateMenuProps> {
componentDidMount() {
!this._addedKeys && (this._addedKeys = new ObservableSet());
[...Array.from(Object.keys(this.props.docViews[0].Document[DocData])), ...Array.from(Object.keys(this.props.docViews[0].Document))]
- .filter(key => key.startsWith('layout_'))
- .map(key => runInAction(() => this._addedKeys.add(key.replace('layout_', ''))));
+ .filter(key => key.startsWith('layout_') && (
+ StrCast(this.props.docViews[0].Document[key]).startsWith("<") ||
+ DocCast(this.props.docViews[0].Document[key])?.isTemplateDoc
+ ))
+ .map(key => runInAction(() => this._addedKeys.add(key.replace('layout_', '')))); // prettier-ignore
}
return100 = () => 300;
@@ -101,8 +92,7 @@ export class TemplateMenu extends React.Component<TemplateMenuProps> {
const noteTypes = DocListCast(Cast(Doc.UserDoc()['template_notes'], Doc, null)?.data);
const addedTypes = DocListCast(Cast(Doc.UserDoc()['template_clickFuncs'], Doc, null)?.data);
const templateMenu: Array<JSX.Element> = [];
- this.props.templates?.forEach((checked, template) => templateMenu.push(<TemplateToggle key={template} template={template} checked={checked} toggle={this.toggleTemplate} />));
- templateMenu.push(<OtherToggle key={'default'} name={'Default'} checked={templateName === 'layout'} toggle={this.toggleDefault} />);
+ templateMenu.push(<OtherToggle key="default" name={firstDoc.layout instanceof Doc ? StrCast(firstDoc.layout.title) : 'Default'} checked={templateName === 'layout'} toggle={this.toggleDefault} />);
addedTypes.concat(noteTypes).map(template => (template.treeView_Checked = this.templateIsUsed(firstDoc, template)));
this._addedKeys &&
Array.from(this._addedKeys)
diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx
index 31ca86f0f..8f1633122 100644
--- a/src/client/views/collections/CollectionDockingView.tsx
+++ b/src/client/views/collections/CollectionDockingView.tsx
@@ -11,7 +11,7 @@ import { List } from '../../../fields/List';
import { ImageCast, NumCast, StrCast } from '../../../fields/Types';
import { ImageField } from '../../../fields/URLField';
import { GetEffectiveAcl, inheritParentAcls } from '../../../fields/util';
-import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, emptyFunction, incrementTitleCopy } from '../../../Utils';
+import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, DivHeight, DivWidth, emptyFunction, incrementTitleCopy } from '../../../Utils';
import { DocServer } from '../../DocServer';
import { Docs } from '../../documents/Documents';
import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
@@ -421,7 +421,6 @@ export class CollectionDockingView extends CollectionSubView() {
if (map?.DashDoc && DocumentManager.Instance.getFirstDocumentView(map.DashDoc)) {
SelectionManager.SelectView(DocumentManager.Instance.getFirstDocumentView(map.DashDoc), false);
}
- if (!className.includes('lm_close')) DocServer.UPDATE_SERVER_CACHE();
}
}
}
@@ -433,8 +432,8 @@ export class CollectionDockingView extends CollectionSubView() {
public CaptureThumbnail() {
const content = this.DocumentView?.()?.ContentDiv;
if (content) {
- const _width = Number(getComputedStyle(content).width.replace('px', ''));
- const _height = Number(getComputedStyle(content).height.replace('px', ''));
+ const _width = DivWidth(content);
+ const _height = DivHeight(content);
return CollectionFreeFormView.UpdateIcon(this.layoutDoc[Id] + '-icon' + new Date().getTime(), content, _width, _height, _width, _height, 0, 1, true, this.layoutDoc[Id] + '-icon', (iconFile, _nativeWidth, _nativeHeight) => {
const proto = this.dataDoc; // Cast(img.proto, Doc, null)!;
proto['thumb_nativeWidth'] = _width;
@@ -489,8 +488,10 @@ export class CollectionDockingView extends CollectionSubView() {
Doc.AddDocToList(Doc.MyHeaderBar, 'data', tab.DashDoc, undefined, undefined, true);
// if you close a tab that is not embedded somewhere else (an embedded Doc can be opened simultaneously in a tab), then add the tab to recently closed
if (tab.DashDoc.embedContainer === this.Document) tab.DashDoc.embedContainer = undefined;
- if (!tab.DashDoc.embedContainer) Doc.AddDocToList(Doc.MyRecentlyClosed, 'data', tab.DashDoc, undefined, true, true);
- Doc.RemoveEmbedding(tab.DashDoc, tab.DashDoc);
+ if (!tab.DashDoc.embedContainer) {
+ Doc.AddDocToList(Doc.MyRecentlyClosed, 'data', tab.DashDoc, undefined, true, true);
+ Doc.RemoveEmbedding(tab.DashDoc, tab.DashDoc);
+ }
}
if (CollectionDockingView.Instance) {
const dview = CollectionDockingView.Instance.Document;
diff --git a/src/client/views/collections/CollectionMasonryViewFieldRow.tsx b/src/client/views/collections/CollectionMasonryViewFieldRow.tsx
index 41c5d5b42..763d2e3a6 100644
--- a/src/client/views/collections/CollectionMasonryViewFieldRow.tsx
+++ b/src/client/views/collections/CollectionMasonryViewFieldRow.tsx
@@ -33,8 +33,7 @@ interface CMVFieldRowProps {
createDropTarget: (ele: HTMLDivElement) => void;
screenToLocalTransform: () => Transform;
setDocHeight: (key: string, thisHeight: number) => void;
- observeHeight: (myref: any) => void;
- unobserveHeight: (myref: any) => void;
+ refList: any[];
showHandle: boolean;
}
@@ -68,20 +67,20 @@ export class CollectionMasonryViewFieldRow extends ObservableReactComponent<CMVF
createRowDropRef = (ele: HTMLDivElement | null) => {
this._dropDisposer?.();
- if (ele) {
- this._ele = ele;
- this._props.observeHeight(ele);
- this._dropDisposer = DragManager.MakeDropTarget(ele, this.rowDrop.bind(this), this._props.Document);
- }
+ if (ele) this._dropDisposer = DragManager.MakeDropTarget(ele, this.rowDrop.bind(this), this._props.Document);
+ else if (this._ele) this.props.refList.splice(this.props.refList.indexOf(this._ele), 1);
+ this._ele = ele;
};
@action
componentDidMount() {
this.heading = this._props.headingObject?.heading || '';
this.color = this._props.headingObject?.color || '#f1efeb';
this.collapsed = this._props.headingObject?.collapsed || false;
+ this._ele && this.props.refList.push(this._ele);
}
componentWillUnmount() {
- this._props.unobserveHeight(this._ele);
+ this._ele && this.props.refList.splice(this.props.refList.indexOf(this._ele), 1);
+ this._ele = null;
}
getTrueHeight = () => {
diff --git a/src/client/views/collections/CollectionMenu.tsx b/src/client/views/collections/CollectionMenu.tsx
index 0f90818ef..8729ef549 100644
--- a/src/client/views/collections/CollectionMenu.tsx
+++ b/src/client/views/collections/CollectionMenu.tsx
@@ -11,7 +11,7 @@ import { RichTextField } from '../../../fields/RichTextField';
import { BoolCast, Cast, DocCast, NumCast, StrCast } from '../../../fields/Types';
import { emptyFunction, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnTrue, setupMoveUpEvents, Utils } from '../../../Utils';
import { CollectionViewType, DocumentType } from '../../documents/DocumentTypes';
-import { DragManager } from '../../util/DragManager';
+import { DragManager, dropActionType } from '../../util/DragManager';
import { SelectionManager } from '../../util/SelectionManager';
import { SettingsManager } from '../../util/SettingsManager';
import { Transform } from '../../util/Transform';
@@ -91,7 +91,7 @@ export class CollectionMenu extends AntimodeMenu<CollectionMenuProps> {
Document={selDoc}
docViewPath={returnEmptyDocViewList}
fieldKey="data"
- dropAction="embed"
+ dropAction={dropActionType.embed}
styleProvider={DefaultStyleProvider}
select={emptyFunction}
isContentActive={returnTrue}
diff --git a/src/client/views/collections/CollectionNoteTakingView.scss b/src/client/views/collections/CollectionNoteTakingView.scss
index 91a82d40f..4c2dcf9ab 100644
--- a/src/client/views/collections/CollectionNoteTakingView.scss
+++ b/src/client/views/collections/CollectionNoteTakingView.scss
@@ -98,6 +98,7 @@
overflow: auto;
display: flex;
flex-direction: column;
+ height: max-content;
}
.collectionSchemaView-previewDoc {
diff --git a/src/client/views/collections/CollectionNoteTakingView.tsx b/src/client/views/collections/CollectionNoteTakingView.tsx
index b8133806f..6318620e0 100644
--- a/src/client/views/collections/CollectionNoteTakingView.tsx
+++ b/src/client/views/collections/CollectionNoteTakingView.tsx
@@ -1,4 +1,4 @@
-import { action, computed, IReactionDisposer, makeObservable, observable, reaction } from 'mobx';
+import { action, computed, IReactionDisposer, makeObservable, observable, observe, reaction } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc, Field, Opt } from '../../../fields/Doc';
@@ -9,7 +9,7 @@ import { listSpec } from '../../../fields/Schema';
import { SchemaHeaderField } from '../../../fields/SchemaHeaderField';
import { BoolCast, Cast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
import { TraceMobx } from '../../../fields/util';
-import { emptyFunction, returnFalse, returnZero, smoothScroll, Utils } from '../../../Utils';
+import { DivHeight, emptyFunction, returnFalse, returnZero, smoothScroll, Utils } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { DragManager, dropActionType } from '../../util/DragManager';
import { SnappingManager } from '../../util/SnappingManager';
@@ -45,6 +45,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
public DividerWidth = 16;
@observable docsDraggedRowCol: number[] = [];
@observable _scroll = 0;
+ @observable _refList: any[] = [];
constructor(props: any) {
super(props);
@@ -157,8 +158,16 @@ export class CollectionNoteTakingView extends CollectionSubView() {
document.addEventListener('pointerup', this.removeDocDragHighlight, true);
this._disposers.layout_autoHeight = reaction(
() => this.layoutDoc._layout_autoHeight,
- layout_autoHeight =>
- layout_autoHeight && this._props.setHeight?.(Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), this.headerMargin + Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', ''))))))
+ layout_autoHeight => layout_autoHeight && this._props.setHeight?.(this.headerMargin + Math.max(...this._refList.map(DivHeight)))
+ );
+
+ this._disposers.refList = reaction(
+ () => ({ refList: this._refList.slice(), autoHeight: this.layoutDoc._layout_autoHeight && !LightboxView.Contains(this.DocumentView?.()) }),
+ ({ refList, autoHeight }) => {
+ if (autoHeight) refList.forEach(r => this.observer.observe(r));
+ else this.observer.disconnect();
+ },
+ { fireImmediately: true }
);
}
@@ -345,7 +354,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
// get the index for where you need to insert the doc you are currently dragging
const clientY = this.ScreenToLocalBoxXf().transformPoint(ex, ey)[1];
let dropInd = -1;
- let pos0 = (this.refList.lastElement() as HTMLDivElement).children[0].getBoundingClientRect().height + this.yMargin * 2;
+ let pos0 = (this._refList.lastElement() as HTMLDivElement).children[0].getBoundingClientRect().height + this.yMargin * 2;
colDocs.forEach((doc, i) => {
let pos1 = this.getDocHeight(doc) + 2 * this.gridGap;
pos1 += pos0;
@@ -424,7 +433,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
if (super.onInternalDrop(e, de)) {
// filter out the currently dragged docs from the child docs, since we will insert them later
const rowCol = this.docsDraggedRowCol;
- const droppedDocs = this.childDocs.slice().filter((d: Doc, ind: number) => ind >= this.childDocs.length); // if the drop operation adds something to the end of the list, then use that as the new document (may be different than what was dropped e.g., in the case of a button which is dropped but which creates say, a note).
+ const droppedDocs = this.childDocs.filter((d: Doc, ind: number) => ind >= this.childDocs.length); // if the drop operation adds something to the end of the list, then use that as the new document (may be different than what was dropped e.g., in the case of a button which is dropped but which creates say, a note).
const newDocs = droppedDocs.length ? droppedDocs : de.complete.docDragData.droppedDocuments;
const docs = this.childDocList;
if (docs && newDocs.length) {
@@ -489,65 +498,45 @@ export class CollectionNoteTakingView extends CollectionSubView() {
headings = () => Array.from(this.Sections);
- refList: any[] = [];
-
editableViewProps = () => ({
GetValue: () => '',
SetValue: this.addGroup,
contents: '+ New Column',
});
+ refList = () => this._refList;
+
// sectionNoteTaking returns a CollectionNoteTakingViewColumn (which is an individual column)
- sectionNoteTaking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => {
- const type = 'number';
- return (
- <CollectionNoteTakingViewColumn
- key={heading?.heading ?? 'unset'}
- unobserveHeight={ref => this.refList.splice(this.refList.indexOf(ref), 1)}
- observeHeight={ref => {
- if (ref) {
- this.refList.push(ref);
- this.observer = new _global.ResizeObserver(
- action((entries: any) => {
- if (this.layoutDoc._layout_autoHeight && ref && this.refList.length && !SnappingManager.IsDragging) {
- const height = this.headerMargin + Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', '')))));
- if (!LightboxView.Contains(this.DocumentView?.())) {
- this._props.setHeight?.(height);
- }
- }
- })
- );
- this.observer.observe(ref);
- }
- }}
- PanelWidth={this._props.PanelWidth}
- select={this._props.select}
- addDocument={this.addDocument}
- chromeHidden={this.chromeHidden}
- colHeaderData={this.colHeaderData}
- Document={this.Document}
- TemplateDataDocument={this._props.TemplateDataDocument}
- resizeColumns={this.resizeColumns}
- renderChildren={this.children}
- numGroupColumns={this.numGroupColumns}
- gridGap={this.gridGap}
- pivotField={this.notetakingCategoryField}
- fieldKey={this.fieldKey}
- dividerWidth={this.DividerWidth}
- maxColWidth={this.maxColWidth}
- availableWidth={this.availableWidth}
- headings={this.headings}
- heading={heading?.heading ?? 'unset'}
- headingObject={heading}
- docList={docList}
- yMargin={this.yMargin}
- type={type}
- createDropTarget={this.createDashEventsTarget}
- screenToLocalTransform={this.ScreenToLocalBoxXf}
- editableViewProps={this.editableViewProps}
- />
- );
- };
+ sectionNoteTaking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => (
+ <CollectionNoteTakingViewColumn
+ key={heading?.heading ?? 'unset'}
+ PanelWidth={this._props.PanelWidth}
+ refList={this._refList}
+ select={this._props.select}
+ addDocument={this.addDocument}
+ chromeHidden={this.chromeHidden}
+ colHeaderData={this.colHeaderData}
+ Document={this.Document}
+ TemplateDataDocument={this._props.TemplateDataDocument}
+ resizeColumns={this.resizeColumns}
+ renderChildren={this.children}
+ numGroupColumns={this.numGroupColumns}
+ gridGap={this.gridGap}
+ pivotField={this.notetakingCategoryField}
+ fieldKey={this.fieldKey}
+ dividerWidth={this.DividerWidth}
+ maxColWidth={this.maxColWidth}
+ availableWidth={this.availableWidth}
+ headings={this.headings}
+ heading={heading?.heading ?? 'unset'}
+ headingObject={heading}
+ docList={docList}
+ yMargin={this.yMargin}
+ createDropTarget={this.createDashEventsTarget}
+ screenToLocalTransform={this.ScreenToLocalBoxXf}
+ editableViewProps={this.editableViewProps}
+ />
+ );
// addGroup is called when adding a new columnHeader, adding a SchemaHeaderField to our list of
// columnHeaders and resizing the existing columns to make room for our new one.
@@ -619,7 +608,7 @@ export class CollectionNoteTakingView extends CollectionSubView() {
return this.isContentActive() === false ? 'none' : undefined;
}
- observer: any;
+ observer = new _global.ResizeObserver(() => this._props.setHeight?.(this.headerMargin + Math.max(...this._refList.map(DivHeight))));
render() {
TraceMobx();
diff --git a/src/client/views/collections/CollectionNoteTakingViewColumn.tsx b/src/client/views/collections/CollectionNoteTakingViewColumn.tsx
index 38846c79d..db178d500 100644
--- a/src/client/views/collections/CollectionNoteTakingViewColumn.tsx
+++ b/src/client/views/collections/CollectionNoteTakingViewColumn.tsx
@@ -36,15 +36,13 @@ interface CSVFieldColumnProps {
yMargin: number;
numGroupColumns: number;
gridGap: number;
- type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function' | undefined;
headings: () => object[];
select: (ctrlPressed: boolean) => void;
renderChildren: (docs: Doc[]) => JSX.Element[];
addDocument: (doc: Doc | Doc[]) => boolean;
createDropTarget: (ele: HTMLDivElement) => void;
screenToLocalTransform: () => Transform;
- observeHeight: (myref: any) => void;
- unobserveHeight: (myref: any) => void;
+ refList: any[];
editableViewProps: () => any;
resizeColumns: (headers: SchemaHeaderField[]) => boolean;
maxColWidth: number;
@@ -78,15 +76,18 @@ export class CollectionNoteTakingViewColumn extends ObservableReactComponent<CSV
createColumnDropRef = (ele: HTMLDivElement | null) => {
this.dropDisposer?.();
- if (ele) {
- this._ele = ele;
- this._props.observeHeight(ele);
- this.dropDisposer = DragManager.MakeDropTarget(ele, this.columnDrop.bind(this), this._props.Document);
- }
+ if (ele) this.dropDisposer = DragManager.MakeDropTarget(ele, this.columnDrop.bind(this), this._props.Document);
+ else if (this._ele) this.props.refList.slice(this.props.refList.indexOf(this._ele), 1);
+ this._ele = ele;
};
+ componentDidMount(): void {
+ this._ele && this.props.refList.push(this._ele);
+ }
+
componentWillUnmount() {
- this._props.unobserveHeight(this._ele);
+ this._ele && this.props.refList.splice(this._props.refList.indexOf(this._ele), 1);
+ this._ele = null;
}
@undoBatch
@@ -289,11 +290,10 @@ export class CollectionNoteTakingViewColumn extends ObservableReactComponent<CSV
render() {
TraceMobx();
- const heading = this._heading;
return (
<div
className="collectionNoteTakingViewFieldColumn"
- key={heading}
+ key={this._heading}
style={{
width: this.columnWidth,
background: this._background,
diff --git a/src/client/views/collections/CollectionPileView.tsx b/src/client/views/collections/CollectionPileView.tsx
index d0df77cbe..7d7f0bb61 100644
--- a/src/client/views/collections/CollectionPileView.tsx
+++ b/src/client/views/collections/CollectionPileView.tsx
@@ -13,6 +13,7 @@ import { computePassLayout, computeStarburstLayout } from './collectionFreeForm'
import { CollectionFreeFormView } from './collectionFreeForm/CollectionFreeFormView';
import './CollectionPileView.scss';
import { CollectionSubView } from './CollectionSubView';
+import { dropActionType } from '../../util/DragManager';
@observer
export class CollectionPileView extends CollectionSubView() {
@@ -72,7 +73,7 @@ export class CollectionPileView extends CollectionSubView() {
// pile children never have their contents active, but will be document active whenever the entire pile is.
childContentsActive={returnFalse}
childDocumentsActive={this._props.isDocumentActive}
- childDragAction="move"
+ childDragAction={dropActionType.move}
childClickScript={this.toggleIcon}
/>
</div>
diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx
index 54314f62c..ea1caf58f 100644
--- a/src/client/views/collections/CollectionStackingView.tsx
+++ b/src/client/views/collections/CollectionStackingView.tsx
@@ -11,12 +11,11 @@ import { listSpec } from '../../../fields/Schema';
import { SchemaHeaderField } from '../../../fields/SchemaHeaderField';
import { BoolCast, Cast, DocCast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
import { TraceMobx } from '../../../fields/util';
-import { emptyFunction, returnEmptyDoclist, returnFalse, returnNone, returnZero, setupMoveUpEvents, smoothScroll, Utils } from '../../../Utils';
+import { DivHeight, emptyFunction, returnEmptyDoclist, returnFalse, returnNone, returnZero, setupMoveUpEvents, smoothScroll, Utils } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { CollectionViewType } from '../../documents/DocumentTypes';
import { DragManager, dropActionType } from '../../util/DragManager';
import { SettingsManager } from '../../util/SettingsManager';
-import { SnappingManager } from '../../util/SnappingManager';
import { Transform } from '../../util/Transform';
import { undoBatch, UndoManager } from '../../util/UndoManager';
import { ContextMenu } from '../ContextMenu';
@@ -45,17 +44,16 @@ export type collectionStackingViewProps = {
@observer
export class CollectionStackingView extends CollectionSubView<Partial<collectionStackingViewProps>>() {
+ _disposers: { [key: string]: IReactionDisposer } = {};
_masonryGridRef: HTMLDivElement | null = null;
// used in a column dragger, likely due for the masonry grid view. We want to use this
_draggerRef = React.createRef<HTMLDivElement>();
- // Not sure what a pivot field is. Seems like we cause reaction in MobX get rid of it once we exit this view
- _pivotFieldDisposer?: IReactionDisposer;
- // Seems like we cause reaction in MobX get rid of our height once we exit this view
- _layout_autoHeightDisposer?: IReactionDisposer;
// keeping track of documents. Updated on internal and external drops. What's the difference?
_docXfs: { height: () => number; width: () => number; stackedDocTransform: () => Transform }[] = [];
// Doesn't look like this field is being used anywhere. Obsolete?
_columnStart: number = 0;
+
+ @observable _refList: any[] = [];
// map of node headers to their heights. Used in Masonry
@observable _heightMap = new Map<string, number>();
// Assuming that this is the current css cursor style
@@ -207,27 +205,27 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
this._props.setContentViewBox?.(this);
// reset section headers when a new filter is inputted
- this._pivotFieldDisposer = reaction(
+ this._disposers.pivotField = reaction(
() => this.pivotField,
() => (this.dataDoc['_' + this.fieldKey + '_columnHeaders'] = new List())
);
- this._layout_autoHeightDisposer = reaction(
+ this._disposers.autoHeight = reaction(
() => this.layoutDoc._layout_autoHeight,
- layout_autoHeight =>
- layout_autoHeight &&
- this._props.setHeight?.(
- Math.min(
- NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER),
- this.headerMargin + (this.isStackingView ? Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', '')))) : this.refList.reduce((p, r) => p + Number(getComputedStyle(r).height.replace('px', '')), 0))
- )
- )
+ layout_autoHeight => layout_autoHeight && this._props.setHeight?.(this.headerMargin + (this.isStackingView ? Math.max(...this._refList.map(DivHeight)) : this._refList.reduce((p, r) => p + DivHeight(r), 0)))
+ );
+ this._disposers.refList = reaction(
+ () => ({ refList: this._refList.slice(), autoHeight: this.layoutDoc._layout_autoHeight && !LightboxView.Contains(this.DocumentView?.()) }),
+ ({ refList, autoHeight }) => {
+ this.observer.disconnect();
+ if (autoHeight) refList.forEach(r => this.observer.observe(r));
+ },
+ { fireImmediately: true }
);
}
componentWillUnmount() {
super.componentWillUnmount();
- this._pivotFieldDisposer?.();
- this._layout_autoHeightDisposer?.();
+ Object.keys(this._disposers).forEach(key => this._disposers[key]());
}
isAnyChildContentActive = () => this._props.isAnyChildContentActive();
@@ -235,10 +233,6 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => {
return this._props.removeDocument?.(doc) && addDocument?.(doc) ? true : false;
};
- createRef = (ele: HTMLDivElement | null) => {
- this._masonryGridRef = ele;
- this.createDashEventsTarget(ele!); //so the whole grid is the drop target?
- };
onChildClickHandler = () => this._props.childClickScript || ScriptCast(this.Document.onChildClick);
@computed get onChildDoubleClickHandler() {
@@ -523,7 +517,6 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
});
};
headings = () => Array.from(this.Sections);
- refList: any[] = [];
// what a section looks like if we're in stacking view
sectionStacking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => {
const key = this.pivotField;
@@ -536,23 +529,7 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
}
return (
<CollectionStackingViewFieldColumn
- unobserveHeight={ref => this.refList.splice(this.refList.indexOf(ref), 1)}
- observeHeight={ref => {
- if (ref) {
- this.refList.push(ref);
- this.observer = new _global.ResizeObserver(
- action((entries: any) => {
- if (this.layoutDoc._layout_autoHeight && ref && this.refList.length && !SnappingManager.IsDragging) {
- const height = this.headerMargin + Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace('px', '')))));
- if (!LightboxView.Contains(this.DocumentView?.())) {
- this._props.setHeight?.(height);
- }
- }
- })
- );
- this.observer.observe(ref);
- }
- }}
+ refList={this._refList}
addDocument={this.addDocument}
chromeHidden={this.chromeHidden}
colHeaderData={this.colHeaderData}
@@ -591,21 +568,7 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
Document={this.Document}
chromeHidden={this.chromeHidden}
pivotField={this.pivotField}
- unobserveHeight={ref => this.refList.splice(this.refList.indexOf(ref), 1)}
- observeHeight={ref => {
- if (ref) {
- this.refList.push(ref);
- this.observer = new _global.ResizeObserver(
- action((entries: any) => {
- if (this.layoutDoc._layout_autoHeight && ref && this.refList.length && !SnappingManager.IsDragging) {
- const height = this.refList.reduce((p, r) => p + Number(getComputedStyle(r).height.replace('px', '')), 0);
- this._props.setHeight?.(2 * this.headerMargin + height); // bcz: added 2x for header to fix problem with scrollbars appearing in Tools panel
- }
- })
- );
- this.observer.observe(ref);
- }
- }}
+ refList={this._refList}
key={heading ? heading.heading : ''}
rows={rows}
headings={this.headings}
@@ -709,7 +672,11 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
@computed get backgroundEvents() {
return this._props.isContentActive() === false ? 'none' : undefined;
}
- observer: any;
+
+ observer = new _global.ResizeObserver(() => this._props.setHeight?.(this.headerMargin + (this.isStackingView ? Math.max(...this._refList.map(DivHeight)) : this._refList.reduce((p, r) => p + DivHeight(r), 0))));
+
+ onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
+ _oldWheel: any;
render() {
TraceMobx();
const editableViewProps = {
@@ -730,7 +697,14 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
<div className="collectionStackingMasonry-cont">
<div
className={this.isStackingView ? 'collectionStackingView' : 'collectionMasonryView'}
- ref={this.createRef}
+ ref={ele => {
+ this._masonryGridRef = ele;
+ this.createDashEventsTarget(ele); //so the whole grid is the drop target?
+ this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
+ this._oldWheel = ele;
+ // prevent wheel events from passively propagating up through containers and prevents containers from preventDefault which would block scrolling
+ ele?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
+ }}
style={{
overflowY: this.isContentActive() ? 'auto' : 'hidden',
background: this._props.styleProvider?.(this.Document, this._props, StyleProp.BackgroundColor),
diff --git a/src/client/views/collections/CollectionStackingViewFieldColumn.tsx b/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
index c455f20d8..6a3cb759e 100644
--- a/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
+++ b/src/client/views/collections/CollectionStackingViewFieldColumn.tsx
@@ -9,7 +9,7 @@ import { ScriptField } from '../../../fields/ScriptField';
import { BoolCast, NumCast } from '../../../fields/Types';
import { ImageField } from '../../../fields/URLField';
import { TraceMobx } from '../../../fields/util';
-import { emptyFunction, returnEmptyString, setupMoveUpEvents } from '../../../Utils';
+import { DivHeight, DivWidth, emptyFunction, returnEmptyString, setupMoveUpEvents } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { DocumentType } from '../../documents/DocumentTypes';
import { DragManager } from '../../util/DragManager';
@@ -44,8 +44,7 @@ interface CSVFieldColumnProps {
addDocument: (doc: Doc | Doc[]) => boolean;
createDropTarget: (ele: HTMLDivElement) => void;
screenToLocalTransform: () => Transform;
- observeHeight: (myref: any) => void;
- unobserveHeight: (myref: any) => void;
+ refList: any[];
}
@observer
@@ -53,7 +52,7 @@ export class CollectionStackingViewFieldColumn extends ObservableReactComponent<
private dropDisposer?: DragManager.DragDropDisposer;
private _disposers: { [name: string]: IReactionDisposer } = {};
private _headerRef: React.RefObject<HTMLDivElement> = React.createRef();
- @observable private _background = 'inherit';
+ @observable _background = 'inherit';
@observable _paletteOn = false;
@observable _heading = '';
@observable _color = '';
@@ -71,15 +70,14 @@ export class CollectionStackingViewFieldColumn extends ObservableReactComponent<
// is that the only way to have drop targets?
createColumnDropRef = (ele: HTMLDivElement | null) => {
this.dropDisposer?.();
- if (ele) {
- this._ele = ele;
- this._props.observeHeight(ele);
- this.dropDisposer = DragManager.MakeDropTarget(ele, this.columnDrop.bind(this), this._props.Document);
- }
+ if (ele) this.dropDisposer = DragManager.MakeDropTarget(ele, this.columnDrop.bind(this), this._props.Document);
+ else if (this._ele) this.props.refList.splice(this.props.refList.indexOf(this._ele), 1);
+ this._ele = ele;
};
@action
componentDidMount() {
+ this._ele && this.props.refList.push(this._ele);
this._disposers.collapser = reaction(
() => this._props.headingObject?.collapsed,
collapsed => (this.collapsed = collapsed !== undefined ? BoolCast(collapsed) : false),
@@ -88,7 +86,8 @@ export class CollectionStackingViewFieldColumn extends ObservableReactComponent<
}
componentWillUnmount() {
this._disposers.collapser?.();
- this._props.unobserveHeight(this._ele);
+ this._ele && this.props.refList.splice(this.props.refList.indexOf(this._ele), 1);
+ this._ele = null;
}
//TODO: what is scripting? I found it in SetInPlace def but don't know what that is
@@ -217,8 +216,8 @@ export class CollectionStackingViewFieldColumn extends ObservableReactComponent<
const layoutItems: ContextMenuProps[] = [];
const docItems: ContextMenuProps[] = [];
const dataDoc = this._props.TemplateDataDocument || this._props.Document;
- const width = this._ele ? Number(getComputedStyle(this._ele).width.replace('px', '')) : 0;
- const height = this._ele ? Number(getComputedStyle(this._ele).height.replace('px', '')) : 0;
+ const width = this._ele ? DivWidth(this._ele) : 0;
+ const height = this._ele ? DivHeight(this._ele) : 0;
DocUtils.addDocumentCreatorMenuItems(
doc => {
FormattedTextBox.SetSelectOnLoad(doc);
diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx
index fdbd1cc90..59a695a3d 100644
--- a/src/client/views/collections/CollectionSubView.tsx
+++ b/src/client/views/collections/CollectionSubView.tsx
@@ -219,12 +219,13 @@ export function CollectionSubView<X>(moreProps?: X) {
const targetDocments = DocListCast(this.dataDoc[this._props.fieldKey]);
const someMoved = !dropAction && docDragData.draggedDocuments.some(drag => targetDocments.includes(drag));
if (someMoved) docDragData.droppedDocuments = docDragData.droppedDocuments.map((drop, i) => (targetDocments.includes(docDragData.draggedDocuments[i]) ? docDragData.draggedDocuments[i] : drop));
- if ((!dropAction || dropAction === 'inSame' || dropAction === 'same' || dropAction === 'move' || someMoved) && docDragData.moveDocument) {
+ if ((!dropAction || dropAction === dropActionType.inPlace || dropAction === dropActionType.same || dropAction === dropActionType.move || someMoved) && docDragData.moveDocument) {
const movedDocs = docDragData.droppedDocuments.filter((d, i) => docDragData.draggedDocuments[i] === d);
const addedDocs = docDragData.droppedDocuments.filter((d, i) => docDragData.draggedDocuments[i] !== d);
if (movedDocs.length) {
const canAdd =
- (de.embedKey || dropAction || Doc.AreProtosEqual(Cast(movedDocs[0].annotationOn, Doc, null), this.Document)) && (dropAction !== 'inSame' || docDragData.draggedDocuments.every(d => d.embedContainer === this.Document));
+ (de.embedKey || dropAction || Doc.AreProtosEqual(Cast(movedDocs[0].annotationOn, Doc, null), this.Document)) &&
+ (dropAction !== dropActionType.inPlace || docDragData.draggedDocuments.every(d => d.embedContainer === this.Document));
const moved = docDragData.moveDocument(movedDocs, this.Document, canAdd ? this.addDocument : returnFalse);
added = canAdd || moved ? moved : undefined;
} else if (addedDocs.length) {
diff --git a/src/client/views/collections/CollectionTimeView.tsx b/src/client/views/collections/CollectionTimeView.tsx
index 38f6aa3e7..b92edd165 100644
--- a/src/client/views/collections/CollectionTimeView.tsx
+++ b/src/client/views/collections/CollectionTimeView.tsx
@@ -1,12 +1,10 @@
-import { toUpper } from 'lodash';
import { action, computed, makeObservable, observable, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
-import { emptyFunction, returnEmptyString, returnFalse, returnTrue, setupMoveUpEvents } from '../../../Utils';
+import { emptyFunction, returnFalse, returnTrue, setupMoveUpEvents } from '../../../Utils';
import { Doc, Opt, StrListCast } from '../../../fields/Doc';
import { List } from '../../../fields/List';
import { ObjectField } from '../../../fields/ObjectField';
-import { RichTextField } from '../../../fields/RichTextField';
import { listSpec } from '../../../fields/Schema';
import { ComputedField, ScriptField } from '../../../fields/ScriptField';
import { Cast, NumCast, StrCast } from '../../../fields/Types';
@@ -15,7 +13,7 @@ import { DocumentManager } from '../../util/DocumentManager';
import { ScriptingGlobals } from '../../util/ScriptingGlobals';
import { ContextMenu } from '../ContextMenu';
import { ContextMenuProps } from '../ContextMenuItem';
-import { EditableView } from '../EditableView';
+import { FieldsDropdown } from '../FieldsDropdown';
import { DocumentView } from '../nodes/DocumentView';
import { FocusViewOptions } from '../nodes/FieldView';
import { PresBox } from '../nodes/trails';
@@ -192,51 +190,6 @@ export class CollectionTimeView extends CollectionSubView() {
ContextMenu.Instance.addItem({ description: 'Options...', subitems: layoutItems, icon: 'eye' });
};
- @computed get _allFacets() {
- const facets = new Set<string>();
- this.childDocs.forEach(child => Object.keys(Doc.GetProto(child)).forEach(key => facets.add(key)));
- Doc.AreProtosEqual(this.dataDoc, this.Document) && this.childDocs.forEach(child => Object.keys(child).forEach(key => facets.add(key)));
- return Array.from(facets);
- }
- menuCallback = (x: number, y: number) => {
- ContextMenu.Instance.clearItems();
- const keySet: Set<string> = new Set(['tags']);
-
- this.childLayoutPairs.map(pair =>
- this._allFacets
- .filter(fieldKey => pair.layout[fieldKey] instanceof RichTextField || typeof pair.layout[fieldKey] === 'number' || typeof pair.layout[fieldKey] === 'boolean' || typeof pair.layout[fieldKey] === 'string')
- .filter(fieldKey => fieldKey[0] !== '_' && (fieldKey === 'tags' || fieldKey[0] === toUpper(fieldKey)[0]))
- .map(fieldKey => keySet.add(fieldKey))
- );
-
- const docItems: ContextMenuProps[] = Array.from(keySet).map(fieldKey =>
- ({ description: ':' + fieldKey, event: () => (this.layoutDoc._pivotField = fieldKey), icon: 'compress-arrows-alt' })); // prettier-ignore
- docItems.push({ description: ':default', event: () => (this.layoutDoc._pivotField = undefined), icon: 'compress-arrows-alt' });
- ContextMenu.Instance.addItem({ description: 'Pivot Fields ...', subitems: docItems, icon: 'eye' });
- ContextMenu.Instance.displayMenu(x, y, ':');
- };
-
- @computed get pivotKeyUI() {
- return (
- <div className={'pivotKeyEntry'}>
- <EditableView
- GetValue={returnEmptyString}
- SetValue={(value: any) => {
- if (value?.length) {
- this.layoutDoc._pivotField = value;
- return true;
- }
- return false;
- }}
- background={'#f1efeb'} // this._props.headingObject ? this._props.headingObject.color : "#f1efeb";
- contents={':' + StrCast(this.layoutDoc._pivotField)}
- showMenuOnLoad={true}
- display={'inline'}
- menuCallback={this.menuCallback}
- />
- </div>
- );
- }
render() {
let nonNumbers = 0;
@@ -263,7 +216,6 @@ export class CollectionTimeView extends CollectionSubView() {
return (
<div className={'collectionTimeView' + (doTimeline ? '' : '-pivot')} onContextMenu={this.specificMenu} style={{ width: this._props.PanelWidth(), height: '100%' }}>
- {this.pivotKeyUI}
{this.contents}
{!this._props.isSelected() || !doTimeline ? null : (
<>
@@ -272,6 +224,9 @@ export class CollectionTimeView extends CollectionSubView() {
<div className="collectionTimeView-thumb-mid collectionTimeView-thumb" key="max" onPointerDown={this.onMidDown} />
</>
)}
+ <div style={{ right: 0, top: 0, position: 'absolute' }}>
+ <FieldsDropdown Document={this.Document} selectFunc={fieldKey => (this.layoutDoc._pivotField = fieldKey)} placeholder={StrCast(this.layoutDoc._pivotField)} />
+ </div>
</div>
);
}
diff --git a/src/client/views/collections/CollectionTreeView.tsx b/src/client/views/collections/CollectionTreeView.tsx
index 786301136..3b37bdcfa 100644
--- a/src/client/views/collections/CollectionTreeView.tsx
+++ b/src/client/views/collections/CollectionTreeView.tsx
@@ -8,7 +8,7 @@ import { listSpec } from '../../../fields/Schema';
import { ScriptField } from '../../../fields/ScriptField';
import { BoolCast, Cast, NumCast, ScriptCast, StrCast } from '../../../fields/Types';
import { TraceMobx } from '../../../fields/util';
-import { emptyFunction, returnAll, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnNone, returnOne, returnTrue, returnZero, Utils } from '../../../Utils';
+import { DivHeight, emptyFunction, returnAll, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnNone, returnOne, returnTrue, returnZero, Utils } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { DocumentManager } from '../../util/DocumentManager';
import { DragManager, dropActionType } from '../../util/DragManager';
@@ -113,8 +113,8 @@ export class CollectionTreeView extends CollectionSubView<Partial<collectionTree
computeHeight = () => {
if (!this._isDisposing) {
- const titleHeight = !this._titleRef ? this.marginTop() : Number(getComputedStyle(this._titleRef).height.replace('px', ''));
- const bodyHeight = Array.from(this.refList).reduce((p, r) => p + Number(getComputedStyle(r).height.replace('px', '')), this.marginBot()) + 6;
+ const titleHeight = !this._titleRef ? this.marginTop() : DivHeight(this._titleRef);
+ const bodyHeight = Array.from(this.refList).reduce((p, r) => p + DivHeight(r), this.marginBot()) + 6;
this.layoutDoc._layout_autoHeightMargins = bodyHeight;
!this._props.dontRegisterView && this._props.setHeight?.(bodyHeight + titleHeight);
}
@@ -153,12 +153,18 @@ export class CollectionTreeView extends CollectionSubView<Partial<collectionTree
return res;
}
- protected onInternalPreDrop = (e: Event, de: DragManager.DropEvent, dropAction: dropActionType) => {
+ protected onInternalPreDrop = (e: Event, de: DragManager.DropEvent, targetDropAction: dropActionType) => {
const dragData = de.complete.docDragData;
if (dragData) {
- const sameTree = Doc.AreProtosEqual(dragData.treeViewDoc, this.Document) ? true : false;
+ const sourceDragAction = dragData.dropAction;
+ const sameTree = () => Doc.AreProtosEqual(dragData.treeViewDoc, this.Document);
const isAlreadyInTree = () => sameTree || dragData.draggedDocuments.some(d => d.embedContainer === this.Document && this.childDocs.includes(d));
- dragData.dropAction = dropAction && !isAlreadyInTree() ? dropAction : sameTree && dragData.dropAction !== 'inSame' ? 'same' : dragData.dropAction;
+ dragData.dropAction =
+ targetDropAction && !isAlreadyInTree() // if dropped document is not in the tree
+ ? targetDropAction // then use the target's drop action if it's specified
+ : !sameTree() || sourceDragAction === dropActionType.inPlace // if doc from another tree, or a non inPlace source drag action is specified
+ ? sourceDragAction // use the source dragAction
+ : dropActionType.same; // otherwise use same tree semantics to move within tree
e.stopPropagation();
}
};
@@ -287,7 +293,7 @@ export class CollectionTreeView extends CollectionSubView<Partial<collectionTree
@observable _renderCount = 1;
@computed get treeViewElements() {
TraceMobx();
- const dragAction = StrCast(this.Document.childDragAction) as dropActionType;
+ const dragAction = StrCast(this.Document.childDragAction) as any as dropActionType;
const addDoc = (doc: Doc | Doc[], relativeTo?: Doc, before?: boolean) => this.addDoc(doc, relativeTo, before);
const moveDoc = (d: Doc | Doc[], target: Doc | undefined, addDoc: (doc: Doc | Doc[]) => boolean) => this._props.moveDocument?.(d, target, addDoc) || false;
if (this._renderCount < this.treeChildren.length) setTimeout(action(() => (this._renderCount = Math.min(this.treeChildren.length, this._renderCount + 20))));
@@ -414,7 +420,7 @@ export class CollectionTreeView extends CollectionSubView<Partial<collectionTree
return (
<div style={{ display: 'flex', flexDirection: 'column', height: '100%', pointerEvents: 'all' }}>
{!this.buttonMenu && !this.noviceExplainer ? null : (
- <div className="documentButtonMenu" ref={action((r: HTMLDivElement | null) => r && (this._headerHeight = Number(getComputedStyle(r).height.replace(/px/, ''))))}>
+ <div className="documentButtonMenu" ref={action((r: HTMLDivElement | null) => r && (this._headerHeight = DivHeight(r)))}>
{this.buttonMenu}
{this.noviceExplainer}
</div>
@@ -473,7 +479,7 @@ export class CollectionTreeView extends CollectionSubView<Partial<collectionTree
isAnnotationOverlayScrollable={true}
childDocumentsActive={this._props.isContentActive}
fieldKey={this._props.fieldKey + '_annotations'}
- dropAction="move"
+ dropAction={dropActionType.move}
select={emptyFunction}
addDocument={this.addAnnotationDocument}
removeDocument={this.remAnnotationDocument}
diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index 02aa76d82..699ec3b95 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -564,6 +564,12 @@ export class TabMinimapView extends ObservableReactComponent<TabMinimapViewProps
const dim = Math.max(xbounds, ybounds);
return { l: bounds.x + xbounds / 2 - dim / 2, t: bounds.y + ybounds / 2 - dim / 2, cx: bounds.x + xbounds / 2, cy: bounds.y + ybounds / 2, dim };
}
+ @computed get xPadding() {
+ return !this.renderBounds ? 0 : Math.max(0, this._props.PanelWidth() / NumCast(this._props.document._freeform_scale, 1) - 2 * (this.renderBounds.cx - this.renderBounds.l));
+ }
+ @computed get yPadding() {
+ return !this.renderBounds ? 0 : Math.max(0, this._props.PanelHeight() / NumCast(this._props.document._freeform_scale, 1) - 2 * (this.renderBounds.cy - this.renderBounds.l));
+ }
childLayoutTemplate = () => Cast(this._props.document.childLayoutTemplate, Doc, null);
returnMiniSize = () => NumCast(this._props.document._miniMapSize, 150);
miniDown = (e: React.PointerEvent) => {
@@ -620,6 +626,8 @@ export class TabMinimapView extends ObservableReactComponent<TabMinimapViewProps
childFiltersByRanges={CollectionDockingView.Instance?.childDocRangeFilters ?? returnEmptyDoclist}
searchFilterDocs={CollectionDockingView.Instance?.searchFilterDocs ?? returnEmptyDoclist}
fitContentsToBox={returnTrue}
+ xPadding={this.xPadding}
+ yPadding={this.yPadding}
/>
<div className="miniOverlay" onPointerDown={this.miniDown}>
<TabMiniThumb miniLeft={miniLeft} miniTop={miniTop} miniWidth={miniWidth} miniHeight={miniHeight} />
@@ -630,7 +638,7 @@ export class TabMinimapView extends ObservableReactComponent<TabMinimapViewProps
render() {
return this._props.document.layout !== CollectionView.LayoutString(Doc.LayoutFieldKey(this._props.document)) || this._props.document?._type_collection !== CollectionViewType.Freeform ? null : (
<div className="miniMap-hidden">
- <Popup icon={<FontAwesomeIcon icon="globe-asia" size="lg" />} color={SettingsManager.userVariantColor} type={Type.TERT} onPointerDown={e => e.stopPropagation()} placement={'top-end'} popup={this.popup} />
+ <Popup icon={<FontAwesomeIcon icon="globe-asia" size="lg" />} color={SettingsManager.userVariantColor} type={Type.TERT} onPointerDown={e => e.stopPropagation()} placement="top-end" popup={this.popup} />
</div>
);
}
diff --git a/src/client/views/collections/TreeView.tsx b/src/client/views/collections/TreeView.tsx
index 85f7cf7fe..c6bbcb0a5 100644
--- a/src/client/views/collections/TreeView.tsx
+++ b/src/client/views/collections/TreeView.tsx
@@ -439,7 +439,7 @@ export class TreeView extends ObservableReactComponent<TreeViewProps> {
droppedDocuments: Doc[],
before: boolean,
inside: number | boolean,
- dropAction: dropActionType,
+ dropAction: dropActionType | undefined,
removeDocument: DragManager.RemoveFunction | undefined,
moveDocument: DragManager.MoveFunction | undefined,
forceAdd: boolean,
@@ -449,10 +449,10 @@ export class TreeView extends ObservableReactComponent<TreeViewProps> {
const addDoc = inside ? this.localAdd : parentAddDoc;
const canAdd = !StrCast((inside ? this.Document : this._props.treeViewParent)?.treeView_FreezeChildren).includes('add') || forceAdd;
- if (canAdd && (dropAction !== 'inSame' || droppedDocuments.every(d => d.embedContainer === this._props.parentTreeView?.Document))) {
- const move = (!dropAction || canEmbed || dropAction === 'proto' || dropAction === 'move' || dropAction === 'same' || dropAction === 'inSame') && moveDocument;
+ if (canAdd && (dropAction !== dropActionType.inPlace || droppedDocuments.every(d => d.embedContainer === this._props.parentTreeView?.Document))) {
+ const move = (!dropAction || canEmbed || dropAction === dropActionType.proto || dropAction === dropActionType.move || dropAction === dropActionType.same || dropAction === dropActionType.inPlace) && moveDocument;
this._props.parentTreeView instanceof TreeView && (this._props.parentTreeView.dropping = true);
- const res = droppedDocuments.reduce((added, d) => (move ? move(d, undefined, addDoc) || (dropAction === 'proto' ? addDoc(d) : false) : addDoc(d)) || added, false);
+ const res = droppedDocuments.reduce((added, d) => (move ? move(d, undefined, addDoc) || (dropAction === dropActionType.proto ? addDoc(d) : false) : addDoc(d)) || added, false);
this._props.parentTreeView instanceof TreeView && (this._props.parentTreeView.dropping = false);
return res;
}
@@ -631,7 +631,7 @@ export class TreeView extends ObservableReactComponent<TreeViewProps> {
}
return (
<div>
- {!docs?.length || this._props.AddToMap /* hack to identify pres box trees */ ? null : (
+ {!docs?.length || this.treeView.outlineMode || this._props.AddToMap /* hack to identify pres box trees */ ? null : (
<div className="treeView-sorting">
<IconButton
color={sortings[sorting]?.color}
@@ -884,7 +884,7 @@ export class TreeView extends ObservableReactComponent<TreeViewProps> {
// prettier-ignore
switch (property.split(':')[0]) {
case StyleProp.Opacity: return this.treeView.outlineMode ? undefined : 1;
- case StyleProp.BackgroundColor: return this.selected ? '#7089bb' : StrCast(doc._backgroundColor, StrCast(doc.backgroundColor));
+ case StyleProp.BackgroundColor: return this.selected ? '#7089bb' : undefined;//StrCast(doc._backgroundColor, StrCast(doc.backgroundColor));
case StyleProp.Highlighting: if (this.treeView.outlineMode) return undefined;
case StyleProp.BoxShadow: return undefined;
case StyleProp.DocContents:
@@ -1161,7 +1161,7 @@ export class TreeView extends ObservableReactComponent<TreeViewProps> {
const before = pt[1] < rect.top + rect.height / 2;
const inside = this.treeView.fileSysMode && !this.Document.isFolder ? false : pt[0] > rect.left + rect.width * 0.33 || (!before && this.treeViewOpen && this.childDocs?.length ? true : false);
- const docs = this.treeView.onTreeDrop(de, (docs: Doc[]) => this.dropDocuments(docs, before, inside, 'copy', undefined, undefined, false, false));
+ this.treeView.onTreeDrop(de, (docs: Doc[]) => this.dropDocuments(docs, before, inside, dropActionType.copy, undefined, undefined, false, false));
};
render() {
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormInfoUI.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormInfoUI.tsx
index 8628ca3c3..43b877705 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormInfoUI.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormInfoUI.tsx
@@ -34,7 +34,7 @@ export class CollectionFreeFormInfoUI extends ObservableReactComponent<Collectio
set currState(val) { runInAction(() => (this._currState = val)); } // prettier-ignore
componentWillUnmount(): void {
- this._props.Freeform.layoutDoc.backgroundColor = this._originalbackground;
+ this._props.Freeform.dataDoc.backgroundColor = this._originalbackground;
}
setCurrState = (state: infoState) => {
@@ -45,9 +45,9 @@ export class CollectionFreeFormInfoUI extends ObservableReactComponent<Collectio
};
setupStates = () => {
- this._originalbackground = StrCast(this._props.Freeform.layoutDoc.backgroundColor);
+ this._originalbackground = StrCast(this._props.Freeform.dataDoc.backgroundColor);
// state entry functions
- const setBackground = (colour: string) => () => (this._props.Freeform.layoutDoc.backgroundColor = colour);
+ const setBackground = (colour: string) => () => (this._props.Freeform.dataDoc.backgroundColor = colour);
const setOpacity = (opacity: number) => () => (this._props.Freeform.layoutDoc.opacity = opacity);
// arc transition trigger conditions
const firstDoc = () => (this._props.Freeform.childDocs.length ? this._props.Freeform.childDocs[0] : undefined);
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index e4c71a086..9500b918a 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -1,6 +1,6 @@
import { Bezier } from 'bezier-js';
import { Colors } from 'browndash-components';
-import { action, computed, IReactionDisposer, makeObservable, observable, reaction, runInAction } from 'mobx';
+import { action, computed, IReactionDisposer, makeObservable, observable, reaction, runInAction, trace } from 'mobx';
import { observer } from 'mobx-react';
import { computedFn } from 'mobx-utils';
import * as React from 'react';
@@ -17,7 +17,7 @@ import { BoolCast, Cast, DocCast, NumCast, ScriptCast, StrCast } from '../../../
import { ImageField } from '../../../../fields/URLField';
import { TraceMobx } from '../../../../fields/util';
import { GestureUtils } from '../../../../pen-gestures/GestureUtils';
-import { aggregateBounds, DashColor, emptyFunction, intersectRect, lightOrDark, OmitKeys, returnFalse, returnZero, setupMoveUpEvents, Utils } from '../../../../Utils';
+import { aggregateBounds, DashColor, emptyFunction, intersectRect, lightOrDark, numberValue, OmitKeys, returnFalse, returnZero, setupMoveUpEvents, Utils } from '../../../../Utils';
import { CognitiveServices } from '../../../cognitive_services/CognitiveServices';
import { Docs, DocUtils } from '../../../documents/Documents';
import { CollectionViewType, DocumentType } from '../../../documents/DocumentTypes';
@@ -30,14 +30,14 @@ import { SelectionManager } from '../../../util/SelectionManager';
import { freeformScrollMode } from '../../../util/SettingsManager';
import { SnappingManager } from '../../../util/SnappingManager';
import { Transform } from '../../../util/Transform';
-import { undoBatch, UndoManager } from '../../../util/UndoManager';
+import { undoable, undoBatch, UndoManager } from '../../../util/UndoManager';
import { Timeline } from '../../animationtimeline/Timeline';
import { ContextMenu } from '../../ContextMenu';
import { GestureOverlay } from '../../GestureOverlay';
import { CtrlKey } from '../../GlobalKeyHandler';
import { ActiveInkWidth, InkingStroke, SetActiveInkColor, SetActiveInkWidth } from '../../InkingStroke';
import { LightboxView } from '../../LightboxView';
-import { CollectionFreeFormDocumentView, CollectionFreeFormDocumentViewWrapper } from '../../nodes/CollectionFreeFormDocumentView';
+import { CollectionFreeFormDocumentView } from '../../nodes/CollectionFreeFormDocumentView';
import { SchemaCSVPopUp } from '../../nodes/DataVizBox/SchemaCSVPopUp';
import { DocumentView, OpenWhere } from '../../nodes/DocumentView';
import { FieldViewProps, FocusViewOptions } from '../../nodes/FieldView';
@@ -159,8 +159,8 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
? { x: cb[0], y: cb[1], r: cb[2], b: cb[3] }
: aggregateBounds(
this._layoutElements.filter(e => e.bounds?.width && !e.bounds.z).map(e => e.bounds!),
- NumCast(this.layoutDoc._xPadding, 10),
- NumCast(this.layoutDoc._yPadding, 10)
+ NumCast(this.layoutDoc._xPadding, this._props.xPadding ?? 10),
+ NumCast(this.layoutDoc._yPadding, this._props.yPadding ?? 10)
);
}
@computed get nativeWidth() {
@@ -462,7 +462,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
const eles = this.childLayoutPairs.map(pair => pair.layout).filter(cd => (this.Document._freeform_useClusters ? NumCast(cd.layout_cluster) : NumCast(cd.group, -1)) === cluster);
const clusterDocs = eles.map(ele => DocumentManager.Instance.getDocumentView(ele, this.DocumentView?.())!);
const { left, top } = clusterDocs[0].getBounds || { left: 0, top: 0 };
- const de = new DragManager.DocumentDragData(eles, e.ctrlKey || e.altKey ? 'embed' : undefined);
+ const de = new DragManager.DocumentDragData(eles, e.ctrlKey || e.altKey ? dropActionType.embed : undefined);
de.moveDocument = this._props.moveDocument;
de.offset = this.screenToFreeformContentsXf.transformDirection(ptsParent.clientX - left, ptsParent.clientY - top);
DragManager.StartDocumentDrag(
@@ -760,7 +760,6 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
this.onGesture(e, new GestureUtils.GestureEvent(gesture, points, GestureOverlay.getBounds(points), text));
};
- @action
onPointerMove = (e: PointerEvent) => {
if (this.tryDragCluster(e, this._hitCluster)) {
e.stopPropagation(); // we're moving a cluster, so stop propagation and return true to end panning and let the document drag take over
@@ -841,10 +840,14 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
if (excludeT < startSegmentT || excludeT > docCurveTVal) {
const localStartTVal = startSegmentT - Math.floor(i / 4);
t !== (localStartTVal < 0 ? 0 : localStartTVal) && segment.push(inkSegment.split(localStartTVal < 0 ? 0 : localStartTVal, t));
- segment.length && segments.push(segment);
+ if (segment.length && (Math.abs(segment[0].points[0].x - segment[0].points.lastElement().x) > 0.5 || Math.abs(segment[0].points[0].y - segment[0].points.lastElement().y) > 0.5)) segments.push(segment);
}
// start a new segment from the intersection t value
- segment = tVals.length - 1 === index ? [inkSegment.split(t).right] : [];
+ if (tVals.length - 1 === index) {
+ const split = inkSegment.split(t).right;
+ if (split && (Math.abs(split.points[0].x - split.points.lastElement().x) > 0.5 || Math.abs(split.points[0].y - split.points.lastElement().y) > 0.5)) segment = [split];
+ else segment = [];
+ } else segment = [];
startSegmentT = docCurveTVal;
});
} else {
@@ -1143,23 +1146,29 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
isContentActive = () => this._props.isContentActive();
- @undoBatch
+ /**
+ * Create a new text note of the same style as the one being typed into.
+ * If the text doc is be part of a larger templated doc, the new Doc will be a copy of the templated Doc
+ *
+ * @param fieldProps render props for the text doc being typed into
+ * @param below whether to place the new text Doc below or to the right of the one being typed into.
+ * @returns whether the new text doc was created and added successfully
+ */
+ createTextDocCopy = undoable((fieldProps: FieldViewProps, below: boolean) => {
+ const textDoc = DocCast(fieldProps.Document.rootDocument, fieldProps.Document);
+ const newDoc = Doc.MakeCopy(textDoc, true);
+ newDoc[DocData][Doc.LayoutFieldKey(newDoc, fieldProps.LayoutTemplateString)] = undefined; // the copy should not copy the text contents of it source, just the render style
+ newDoc.x = NumCast(textDoc.x) + (below ? 0 : NumCast(textDoc._width) + 10);
+ newDoc.y = NumCast(textDoc.y) + (below ? NumCast(textDoc._height) + 10 : 0);
+ FormattedTextBox.SetSelectOnLoad(newDoc);
+ FormattedTextBox.DontSelectInitialText = true;
+ return this.addDocument?.(newDoc);
+ }, 'copied text note');
+
onKeyDown = (e: React.KeyboardEvent, fieldProps: FieldViewProps) => {
if ((e.metaKey || e.ctrlKey || e.altKey || fieldProps.Document._createDocOnCR) && ['Tab', 'Enter'].includes(e.key)) {
e.stopPropagation?.();
- const below = !e.altKey && e.key !== 'Tab';
- const layout_fieldKey = StrCast(fieldProps.fieldKey);
- const newDoc = Doc.MakeCopy(fieldProps.Document, true);
- const dataField = fieldProps.Document[Doc.LayoutFieldKey(newDoc)];
- newDoc[DocData][Doc.LayoutFieldKey(newDoc)] = dataField === undefined || Cast(dataField, listSpec(Doc), null)?.length !== undefined ? new List<Doc>([]) : undefined;
- if (below) newDoc.y = NumCast(fieldProps.Document.y) + NumCast(fieldProps.Document._height) + 10;
- else newDoc.x = NumCast(fieldProps.Document.x) + NumCast(fieldProps.Document._width) + 10;
- if (layout_fieldKey !== 'layout' && fieldProps.Document[layout_fieldKey] instanceof Doc) {
- newDoc[layout_fieldKey] = fieldProps.Document[layout_fieldKey];
- }
- newDoc[DocData].text = undefined;
- FormattedTextBox.SetSelectOnLoad(newDoc);
- return this.addDocument?.(newDoc);
+ return this.createTextDocCopy(fieldProps, !e.altKey && e.key !== 'Tab');
}
};
@computed get childPointerEvents() {
@@ -1181,7 +1190,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
const childLayout = entry.pair.layout;
const childData = entry.pair.data;
return (
- <CollectionFreeFormDocumentViewWrapper
+ <CollectionFreeFormDocumentView
{...OmitKeys(entry, ['replica', 'pair']).omit}
key={childLayout[Id] + (entry.replica || '')}
Document={childLayout}
@@ -1344,7 +1353,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
renderCutoffProvider = computedFn(
function renderCutoffProvider(this: any, doc: Doc) {
- return !this._renderCutoffData.get(doc[Id] + '');
+ return this.Document.isTemplateDoc ? false : !this._renderCutoffData.get(doc[Id] + '');
}.bind(this)
);
@@ -1467,7 +1476,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
if (!code.includes('dashDiv')) {
const script = CompileScript(code, { params: { docView: 'any' }, typecheck: false, editable: true });
if (script.compiled) script.run({ this: this.DocumentView?.() });
- } else code && !first && eval(code);
+ } else code && !first && eval?.(code);
},
{ fireImmediately: true }
);
@@ -1648,7 +1657,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
!this._props.isAnnotationOverlay &&
!Doc.noviceMode &&
optionItems.push({ description: (this._showAnimTimeline ? 'Close' : 'Open') + ' Animation Timeline', event: action(() => (this._showAnimTimeline = !this._showAnimTimeline)), icon: 'eye' });
- this._props.renderDepth && optionItems.push({ description: 'Use Background Color as Default', event: () => (Cast(Doc.UserDoc().emptyCollection, Doc, null)._backgroundColor = StrCast(this.layoutDoc._backgroundColor)), icon: 'palette' });
+ this._props.renderDepth && optionItems.push({ description: 'Use Background Color as Default', event: () => (Cast(Doc.UserDoc().emptyCollection, Doc, null).backgroundColor = StrCast(this.layoutDoc.backgroundColor)), icon: 'palette' });
this._props.renderDepth && optionItems.push({ description: 'Fit Content Once', event: this.fitContentOnce, icon: 'object-group' });
if (!Doc.noviceMode) {
optionItems.push({ description: (!Doc.NativeWidth(this.layoutDoc) || !Doc.NativeHeight(this.layoutDoc) ? 'Freeze' : 'Unfreeze') + ' Aspect', event: this.toggleNativeDimensions, icon: 'snowflake' });
@@ -1712,7 +1721,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
incrementalRender = action(() => {
if (!LightboxView.LightboxDoc || LightboxView.Contains(this.DocumentView?.())) {
const layout_unrendered = this.childDocs.filter(doc => !this._renderCutoffData.get(doc[Id]));
- const loadIncrement = 5;
+ const loadIncrement = this.Document.isTemplateDoc ? Number.MAX_VALUE : 5;
for (var i = 0; i < Math.min(layout_unrendered.length, loadIncrement); i++) {
this._renderCutoffData.set(layout_unrendered[i][Id] + '', true);
}
@@ -1948,6 +1957,7 @@ ScriptingGlobals.add(function sendToBack(doc: Doc) {
SelectionManager.Views.forEach(view => view.CollectionFreeFormView?.bringToFront(view.Document, true));
});
ScriptingGlobals.add(function datavizFromSchema(doc: Doc) {
+ // creating a dataviz doc to represent the schema table
SelectionManager.Views.forEach(view => {
if (!view.layoutDoc.schema_columnKeys) {
view.layoutDoc.schema_columnKeys = new List<string>(['title', 'type', 'author', 'author_date']);
@@ -1961,22 +1971,22 @@ ScriptingGlobals.add(function datavizFromSchema(doc: Doc) {
for (let i = 0; i < children.length; i++) {
let eachRow = [];
for (let j = 0; j < keys.length; j++) {
- var cell = children[i][keys[j]];
- if (cell && (cell as string)) cell = cell.toString().replace(/\,/g, '');
+ var cell = children[i][keys[j]]?.toString();
+ if (cell) cell = cell.toString().replace(/\,/g, '');
eachRow.push(cell);
}
csvRows.push(eachRow);
}
const blob = new Blob([csvRows.join('\n')], { type: 'text/csv' });
- const options = { x: 0, y: -300, title: 'schemaTable', _width: 300, _height: 100, type: 'text/csv' };
+ const options = { x: 0, y: 0, title: 'schemaTable', _width: 300, _height: 100, type: 'text/csv' };
const file = new File([blob], 'schemaTable', options);
const loading = Docs.Create.LoadingDocument(file, options);
loading.presentation_openInLightbox = true;
DocUtils.uploadFileToDoc(file, {}, loading);
+ // holds the doc in a popup until it is dragged onto a canvas
if (view.ComponentView?.addDocument) {
- // loading.dataViz_fromSchema = true;
- loading.dataViz_asSchema = view.layoutDoc;
+ loading._dataViz_asSchema = view.layoutDoc;
SchemaCSVPopUp.Instance.setView(view);
SchemaCSVPopUp.Instance.setTarget(view.layoutDoc);
SchemaCSVPopUp.Instance.setDataVizDoc(loading);
diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
index a417d777a..b913e05ad 100644
--- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
+++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
@@ -178,7 +178,7 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
} else if (!e.ctrlKey && !e.metaKey && SelectionManager.Views.length < 2) {
FormattedTextBox.SelectOnLoadChar = Doc.UserDoc().defaultTextLayout && !this._props.childLayoutString ? e.key : '';
FormattedTextBox.LiveTextUndo = UndoManager.StartBatch('type new note');
- this._props.addLiveTextDocument(DocUtils.GetNewTextDoc('-typed text-', x, y, 200, 100, this._props.xPadding === 0));
+ this._props.addLiveTextDocument(DocUtils.GetNewTextDoc('-typed text-', x, y, 200, 100));
e.stopPropagation();
}
};
@@ -494,7 +494,6 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
followLinkToggle: true,
_width: 200,
_height: 200,
- _layout_fitContentsToBox: true,
_layout_showSidebar: true,
title: 'overview',
});
@@ -635,8 +634,13 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
}
MarqueeRef: HTMLDivElement | null = null;
+ /**
+ * This is called for every drag movement when a document is dragged over this collection.
+ * If the document is dragged within 25 pixels of the edge of the collection and paused, this will
+ * auto scroll the collection so that it can be dragged farther (unless auto panning has been disabled)
+ */
@action
- onDragAutoScroll = (e: CustomEvent<React.DragEvent>) => {
+ onDragMovePause = (e: CustomEvent<React.DragEvent>) => {
if ((e as any).handlePan || this._props.isAnnotationOverlay) return;
(e as any).handlePan = true;
@@ -659,7 +663,7 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
<div
className="marqueeView"
ref={r => {
- r?.addEventListener('dashDragAutoScroll', this.onDragAutoScroll as any);
+ r?.addEventListener('dashDragMovePause', this.onDragMovePause as any);
this.MarqueeRef = r;
}}
style={{
diff --git a/src/client/views/collections/collectionMulticolumn/CollectionMulticolumnView.tsx b/src/client/views/collections/collectionMulticolumn/CollectionMulticolumnView.tsx
index b181b59ce..125dd2781 100644
--- a/src/client/views/collections/collectionMulticolumn/CollectionMulticolumnView.tsx
+++ b/src/client/views/collections/collectionMulticolumn/CollectionMulticolumnView.tsx
@@ -1,10 +1,10 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Tooltip } from '@mui/material';
-import { Button } from 'browndash-components';
-import { action, computed, makeObservable } from 'mobx';
+import { Button, IconButton } from 'browndash-components';
+import { action, computed, makeObservable, observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
-import { emptyFunction, returnFalse } from '../../../../Utils';
+import { FaChevronRight } from 'react-icons/fa';
import { Doc, DocListCast } from '../../../../fields/Doc';
import { BoolCast, NumCast, ScriptCast, StrCast } from '../../../../fields/Types';
import { DragManager, dropActionType } from '../../../util/DragManager';
@@ -37,6 +37,8 @@ const resizerWidth = 8;
@observer
export class CollectionMulticolumnView extends CollectionSubView() {
+ @observable _startIndex = 0;
+
constructor(props: any) {
super(props);
makeObservable(this);
@@ -48,7 +50,7 @@ export class CollectionMulticolumnView extends CollectionSubView() {
*/
@computed
private get ratioDefinedDocs() {
- return this.childLayoutPairs.map(pair => pair.layout).filter(layout => StrCast(layout._dimUnit, '*') === DimUnit.Ratio);
+ return this.childLayouts.filter(layout => StrCast(layout._dimUnit, '*') === DimUnit.Ratio);
}
@computed
@@ -57,6 +59,15 @@ export class CollectionMulticolumnView extends CollectionSubView() {
return ratioDocs.length ? Math.min(...ratioDocs.map(layout => NumCast(layout._dimMagnitude))) : 1;
}
+ @computed get maxShown() {
+ return NumCast(this.layoutDoc.layout_maxShown);
+ }
+
+ @computed
+ private get childLayouts() {
+ return (this.maxShown ? this.childLayoutPairs.slice(this._startIndex, this._startIndex + this.maxShown) : this.childLayoutPairs).map(pair => pair.layout);
+ }
+
/**
* This loops through all childLayoutPairs and extracts the values for _dimUnit
* and _dimMagnitude, ignoring any that are malformed. Additionally, it then
@@ -69,9 +80,9 @@ export class CollectionMulticolumnView extends CollectionSubView() {
private get resolvedLayoutInformation(): LayoutData {
let starSum = 0;
const widthSpecifiers: WidthSpecifier[] = [];
- this.childLayoutPairs.map(pair => {
- const unit = StrCast(pair.layout._dimUnit, '*');
- const magnitude = NumCast(pair.layout._dimMagnitude, this.minimumDim);
+ this.childLayouts.map(layout => {
+ const unit = StrCast(layout._dimUnit, '*');
+ const magnitude = NumCast(layout._dimMagnitude, this.minimumDim);
if (unit && magnitude && magnitude > 0 && resolvedUnits.includes(unit)) {
unit === DimUnit.Ratio && (starSum += magnitude);
widthSpecifiers.push({ magnitude, unit });
@@ -90,7 +101,7 @@ export class CollectionMulticolumnView extends CollectionSubView() {
*/
// setTimeout(() => {
// const { ratioDefinedDocs } = this;
- // if (this.childLayoutPairs.length) {
+ // if (this.childPairs.length) {
// const minimum = this.minimumDim;
// if (minimum !== 0) {
// ratioDefinedDocs.forEach(layout => layout._dimMagnitude = NumCast(layout._dimMagnitude, 1) / minimum, 1);
@@ -187,13 +198,14 @@ export class CollectionMulticolumnView extends CollectionSubView() {
return Transform.Identity(); // we're still waiting on promises to resolve
}
let offset = 0;
- for (const { layout: candidate } of this.childLayoutPairs) {
+ var xf = Transform.Identity();
+ this.childLayouts.map(candidate => {
if (candidate === layout) {
- return this.ScreenToLocalBoxXf().translate(-offset / (this._props.NativeDimScaling?.() || 1), 0);
+ return (xf = this.ScreenToLocalBoxXf().translate(-offset / (this._props.NativeDimScaling?.() || 1), 0));
}
offset += this.lookupPixels(candidate) + resizerWidth;
- }
- return Transform.Identity(); // type coersion, this case should never be hit
+ });
+ return xf;
};
@undoBatch
@@ -297,15 +309,15 @@ export class CollectionMulticolumnView extends CollectionSubView() {
*/
@computed
private get contents(): JSX.Element[] | null {
- const { childLayoutPairs } = this;
const collector: JSX.Element[] = [];
- for (let i = 0; i < childLayoutPairs.length; i++) {
- const { layout } = childLayoutPairs[i];
+ this.childLayouts.forEach((layout, i) => {
collector.push(
<Tooltip title={'Tab: ' + StrCast(layout.title)} key={'wrapper' + i}>
<div className="document-wrapper" style={{ flexDirection: 'column', width: this.lookupPixels(layout) }}>
{this.getDisplayDoc(layout)}
- <Button tooltip="Remove document from header bar" icon={<FontAwesomeIcon icon="times" size="lg" />} onClick={undoable(e => this._props.removeDocument?.(layout), 'close doc')} color={SettingsManager.userColor} />
+ {this.layoutDoc._chromeHidden ? null : (
+ <Button tooltip="Remove document from header bar" icon={<FontAwesomeIcon icon="times" size="lg" />} onClick={undoable(e => this._props.removeDocument?.(layout), 'close doc')} color={SettingsManager.userColor} />
+ )}
<WidthLabel layout={layout} collectionDoc={this.Document} />
</div>
</Tooltip>,
@@ -317,10 +329,10 @@ export class CollectionMulticolumnView extends CollectionSubView() {
select={this._props.select}
columnUnitLength={this.getColumnUnitLength}
toLeft={layout}
- toRight={childLayoutPairs[i + 1]?.layout}
+ toRight={this.childLayouts[i + 1]}
/>
);
- }
+ });
collector.pop(); // removes the final extraneous resize bar
return collector;
}
@@ -339,6 +351,20 @@ export class CollectionMulticolumnView extends CollectionSubView() {
marginBottom: NumCast(this.Document._yMargin),
}}>
{this.contents}
+ {!this._startIndex ? null : (
+ <Tooltip title="scroll back">
+ <div style={{ position: 'absolute', bottom: 0, left: 0, background: SettingsManager.userVariantColor }} onClick={action(e => (this._startIndex = Math.min(this.childLayoutPairs.length - 1, this._startIndex + this.maxShown)))}>
+ <Button tooltip="Scroll back" icon={<FontAwesomeIcon icon="chevron-left" size="lg" />} onClick={action(e => (this._startIndex = Math.max(0, this._startIndex - this.maxShown)))} color={SettingsManager.userColor} />
+ </div>
+ </Tooltip>
+ )}
+ {this._startIndex > this.childLayoutPairs.length - 1 || !this.maxShown ? null : (
+ <Tooltip title="scroll forward">
+ <div style={{ position: 'absolute', bottom: 0, right: 0, background: SettingsManager.userVariantColor }} onClick={action(e => (this._startIndex = Math.min(this.childLayoutPairs.length - 1, this._startIndex + this.maxShown)))}>
+ <IconButton icon={<FaChevronRight />} color={SettingsManager.userColor} />
+ </div>
+ </Tooltip>
+ )}
</div>
);
}
diff --git a/src/client/views/collections/collectionMulticolumn/CollectionMultirowView.tsx b/src/client/views/collections/collectionMulticolumn/CollectionMultirowView.tsx
index 659f7ccdc..17bf3e50c 100644
--- a/src/client/views/collections/collectionMulticolumn/CollectionMultirowView.tsx
+++ b/src/client/views/collections/collectionMulticolumn/CollectionMultirowView.tsx
@@ -1,7 +1,6 @@
import { action, computed, makeObservable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
-import { emptyFunction, returnFalse } from '../../../../Utils';
import { Doc, DocListCast } from '../../../../fields/Doc';
import { BoolCast, NumCast, ScriptCast, StrCast } from '../../../../fields/Types';
import { DragManager, dropActionType } from '../../../util/DragManager';
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
index 29491569a..ac0bd2378 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.scss
@@ -18,107 +18,117 @@
.schema-add {
position: relative;
- height: 30;
+ height: 35;
display: flex;
align-items: center;
+ top: -10px;
width: 100%;
text-align: right;
background: lightgray;
.editableView-container-editing {
width: 100%;
+ height: 35px;
+ margin: 20px;
}
.editableView-input {
width: 100%;
+ margin: 20px;
float: right;
text-align: right;
background: yellow;
}
}
+ }
- .schema-column-menu,
- .schema-filter-menu {
- background: $light-gray;
- position: absolute;
- min-width: 200px;
- max-width: 400px;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- z-index: 1;
-
- .schema-key-search-input {
- width: calc(100% - 20px);
- margin: 10px;
- }
+ .schema-preview-divider {
+ height: 100%;
+ background: black;
+ cursor: ew-resize;
+ }
+}
- .schema-search-result {
- cursor: pointer;
- padding: 5px 10px;
- width: 100%;
+.schema-column-menu,
+.schema-filter-menu {
+ background: $light-gray;
+ position: relative;
+ min-width: 200px;
+ max-width: 400px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ z-index: 1;
- &:hover {
- background-color: $medium-gray;
- }
+ .schema-key-search-input {
+ width: calc(100% - 20px);
+ margin: 10px;
+ }
- .schema-search-result-type,
- .schema-search-result-desc {
- color: $dark-gray;
- font-size: $body-text;
- }
- }
+ .schema-search-result {
+ cursor: pointer;
+ padding: 5px 10px;
+ width: 100%;
- .schema-key-search,
- .schema-new-key-options {
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- }
+ &:hover {
+ background-color: $medium-gray;
+ }
+ .schema-search-result-type {
+ font-family: 'Courier New', Courier, monospace;
+ }
- .schema-new-key-options {
- margin: 10px;
- .schema-key-warning {
- color: red;
- font-weight: normal;
- align-self: center;
- }
- }
+ .schema-search-result-type,
+ .schema-search-result-desc {
+ color: $dark-gray;
+ font-size: $body-text;
+ }
+ .schema-search-result-desc {
+ font-style: italic;
+ }
+ }
- .schema-key-list {
- width: 100%;
- max-height: 300px;
- overflow-y: auto;
- }
+ .schema-key-search,
+ .schema-new-key-options {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
- .schema-key-type-option {
- margin: 2px 0px;
+ .schema-new-key-options {
+ margin: 10px;
+ .schema-key-warning {
+ color: red;
+ font-weight: normal;
+ align-self: center;
+ }
+ }
- input {
- margin-right: 5px;
- }
- }
+ .schema-key-list {
+ width: 100%;
+ max-height: 300px;
+ overflow-y: auto;
+ }
- .schema-key-default-val {
- margin: 5px 0;
- }
+ .schema-key-type-option {
+ margin: 2px 0px;
- .schema-column-menu-button {
- cursor: pointer;
- padding: 2px 5px;
- background: $medium-blue;
- border-radius: 9999px;
- color: $white;
- width: fit-content;
- margin: 5px;
- align-self: center;
- }
+ input {
+ margin-right: 5px;
}
}
- .schema-preview-divider {
- height: 100%;
- background: black;
- cursor: ew-resize;
+ .schema-key-default-val {
+ margin: 5px 0;
+ }
+
+ .schema-column-menu-button {
+ cursor: pointer;
+ padding: 2px 5px;
+ background: $medium-blue;
+ border-radius: 9999px;
+ color: $white;
+ width: fit-content;
+ margin: 5px;
+ align-self: center;
}
}
@@ -129,6 +139,7 @@
.row-menu {
display: flex;
justify-content: center;
+ cursor: pointer;
}
}
diff --git a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
index 31b4a2dd4..12f0ad5e9 100644
--- a/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
+++ b/src/client/views/collections/collectionSchema/CollectionSchemaView.tsx
@@ -1,5 +1,5 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { action, computed, makeObservable, observable, ObservableMap, observe } from 'mobx';
+import { action, computed, makeObservable, observable, ObservableMap, observe, trace } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc, DocListCast, Field, NumListCast, Opt, StrListCast } from '../../../../fields/Doc';
@@ -10,7 +10,7 @@ import { BoolCast, Cast, DocCast, NumCast, StrCast } from '../../../../fields/Ty
import { emptyFunction, returnEmptyDoclist, returnEmptyString, returnFalse, returnIgnore, returnNever, returnTrue, setupMoveUpEvents, smoothScroll } from '../../../../Utils';
import { Docs, DocumentOptions, DocUtils, FInfo } from '../../../documents/Documents';
import { DocumentManager } from '../../../util/DocumentManager';
-import { DragManager } from '../../../util/DragManager';
+import { DragManager, dropActionType } from '../../../util/DragManager';
import { SelectionManager } from '../../../util/SelectionManager';
import { undoable, undoBatch } from '../../../util/UndoManager';
import { ContextMenu } from '../../ContextMenu';
@@ -25,6 +25,8 @@ import { CollectionSubView } from '../CollectionSubView';
import './CollectionSchemaView.scss';
import { SchemaColumnHeader } from './SchemaColumnHeader';
import { SchemaRowBox } from './SchemaRowBox';
+import { Popup, PopupTrigger, Type } from 'browndash-components';
+import { SettingsManager } from '../../../util/SettingsManager';
const { default: { SCHEMA_NEW_NODE_HEIGHT } } = require('../../global/globalCssVariables.module.scss'); // prettier-ignore
export enum ColumnType {
@@ -161,7 +163,7 @@ export class CollectionSchemaView extends CollectionSubView() {
(change as any).added.forEach((doc: Doc) => // for each document added
Doc.GetAllPrototypes(doc.value as Doc).forEach(proto => // for all of its prototypes (and itself)
Object.keys(proto).forEach(action(key => // check if any of its keys are new, and add them
- !this.fieldInfos.get(key) && this.fieldInfos.set(key, new FInfo(key, key === 'author'))))));
+ !this.fieldInfos.get(key) && this.fieldInfos.set(key, new FInfo("-no description-", key === 'author'))))));
break;
case 'update': //let oldValue = change.oldValue; // fill this in if the entire child list will ever be reassigned with a new list
}
@@ -681,6 +683,7 @@ export class CollectionSchemaView extends CollectionSubView() {
} else {
this.setKey(this._menuValue, this._newFieldDefault);
}
+ this._columnMenuIndex = undefined;
})}>
done
</div>
@@ -688,12 +691,12 @@ export class CollectionSchemaView extends CollectionSubView() {
);
}
- onPassiveWheel = (e: WheelEvent) => {
+ onKeysPassiveWheel = (e: WheelEvent) => {
// if scrollTop is 0, then don't let wheel trigger scroll on any container (which it would since onScroll won't be triggered on this)
- if (!this._oldWheel.scrollTop && e.deltaY <= 0) e.preventDefault();
+ if (!this._oldKeysWheel.scrollTop && e.deltaY <= 0) e.preventDefault();
e.stopPropagation();
};
- _oldWheel: any;
+ _oldKeysWheel: any;
@computed get keysDropdown() {
return (
<div className="schema-key-search">
@@ -708,9 +711,9 @@ export class CollectionSchemaView extends CollectionSubView() {
<div
className="schema-key-list"
ref={r => {
- this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
- this._oldWheel = r;
- r?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
+ this._oldKeysWheel?.removeEventListener('wheel', this.onKeysPassiveWheel);
+ this._oldKeysWheel = r;
+ r?.addEventListener('wheel', this.onKeysPassiveWheel, { passive: false });
}}>
{this._menuKeys.map(key => (
<div
@@ -721,14 +724,14 @@ export class CollectionSchemaView extends CollectionSubView() {
}}>
<p>
<span className="schema-search-result-key">
- {key}
- {this.fieldInfos.get(key)!.fieldType ? ', ' : ''}
+ <b>{key}</b>
+ {this.fieldInfos.get(key)!.fieldType ? ':' : ''}
</span>
<span className="schema-search-result-type" style={{ color: this.fieldInfos.get(key)!.readOnly ? 'red' : 'inherit' }}>
{this.fieldInfos.get(key)!.fieldType}
</span>
+ <span className="schema-search-result-desc">&nbsp;&nbsp;{this.fieldInfos.get(key)!.description}</span>
</p>
- <p className="schema-search-result-desc">{this.fieldInfos.get(key)!.description}</p>
</div>
))}
</div>
@@ -740,16 +743,17 @@ export class CollectionSchemaView extends CollectionSubView() {
const x = this._columnMenuIndex! == -1 ? 0 : this.displayColumnWidths.reduce((total, curr, index) => total + (index < this._columnMenuIndex! ? curr : 0), CollectionSchemaView._rowMenuWidth);
return (
<div className="schema-column-menu" style={{ left: x, minWidth: CollectionSchemaView._minColWidth }}>
- <input className="schema-key-search-input" type="text" value={this._menuValue} onKeyDown={this.onSearchKeyDown} onChange={this.updateKeySearch} onPointerDown={e => e.stopPropagation()} />
+ <input className="schema-key-search-input" type="text" onKeyDown={this.onSearchKeyDown} onChange={this.updateKeySearch} onPointerDown={e => e.stopPropagation()} />
+ {this._makeNewField ? this.newFieldMenu : this.keysDropdown}
+ </div>
+ );
+ }
+ get renderKeysMenu() {
+ console.log('RNDERMENUT:' + this._columnMenuIndex);
+ return (
+ <div className="schema-column-menu" style={{ left: 0, minWidth: CollectionSchemaView._minColWidth }}>
+ <input className="schema-key-search-input" type="text" onKeyDown={this.onSearchKeyDown} onChange={this.updateKeySearch} onPointerDown={e => e.stopPropagation()} />
{this._makeNewField ? this.newFieldMenu : this.keysDropdown}
- <div
- className="schema-column-menu-button"
- onPointerDown={action(e => {
- e.stopPropagation();
- this.closeColumnMenu();
- })}>
- cancel
- </div>
</div>
);
}
@@ -833,6 +837,8 @@ export class CollectionSchemaView extends CollectionSubView() {
isContentActive = () => this._props.isSelected() || this._props.isContentActive();
screenToLocal = () => this.ScreenToLocalBoxXf().translate(-this.tableWidth, 0);
previewWidthFunc = () => this.previewWidth;
+ onPassiveWheel = (e: WheelEvent) => e.stopPropagation();
+ _oldWheel: any;
render() {
return (
<div className="collectionSchemaView" ref={(ele: HTMLDivElement | null) => this.createDashEventsTarget(ele)} onDrop={this.onExternalDrop.bind(this)}>
@@ -841,15 +847,23 @@ export class CollectionSchemaView extends CollectionSubView() {
className="schema-table"
style={{ width: `calc(100% - ${this.previewWidth}px)` }}
onWheel={e => this._props.isContentActive() && e.stopPropagation()}
- ref={r => {
- // prevent wheel events from passively propagating up through containers
- r?.addEventListener('wheel', (e: WheelEvent) => {}, { passive: false });
+ ref={ele => {
+ // prevent wheel events from passively propagating up through containers and prevents containers from preventDefault which would block scrolling
+ this._oldWheel?.removeEventListener('wheel', this.onPassiveWheel);
+ (this._oldWheel = ele)?.addEventListener('wheel', this.onPassiveWheel, { passive: false });
}}>
<div className="schema-header-row" style={{ height: this.rowHeightFunc() }}>
<div className="row-menu" style={{ width: CollectionSchemaView._rowMenuWidth }}>
- <div className="schema-header-button" onPointerDown={e => (this._columnMenuIndex === -1 ? this.closeColumnMenu() : this.openColumnMenu(-1, true))}>
- <FontAwesomeIcon icon="plus" />
- </div>
+ <Popup
+ placement="right"
+ background={SettingsManager.userBackgroundColor}
+ color={SettingsManager.userColor}
+ toggle={<FontAwesomeIcon onPointerDown={e => this.openColumnMenu(-1, true)} icon="plus" />}
+ trigger={PopupTrigger.CLICK}
+ type={Type.TERT}
+ isOpen={this._columnMenuIndex !== -1 ? false : undefined}
+ popup={this.renderKeysMenu}
+ />
</div>
{this.columnKeys.map((key, index) => (
<SchemaColumnHeader
@@ -870,7 +884,7 @@ export class CollectionSchemaView extends CollectionSubView() {
/>
))}
</div>
- {this._columnMenuIndex !== undefined && this.renderColumnMenu}
+ {this._columnMenuIndex !== undefined && this._columnMenuIndex !== -1 && this.renderColumnMenu}
{this._filterColumnIndex !== undefined && this.renderFilterMenu}
<CollectionSchemaViewDocs schema={this} childDocs={this.sortedDocsFunc} rowHeight={this.rowHeightFunc} setRef={(ref: HTMLDivElement | null) => (this._tableContentRef = ref)} />
{this.layoutDoc.chromeHidden ? null : (
@@ -981,7 +995,7 @@ class CollectionSchemaViewDoc extends ObservableReactComponent<CollectionSchemaV
styleProvider={this.noOpacityStyleProvider}
waitForDoubleClickToClick={returnNever}
defaultDoubleClick={returnIgnore}
- dragAction="move"
+ dragAction={dropActionType.move}
onClickScriptDisable="always"
focus={this._props.schema.focusDocument}
childFilters={this._props.schema.childDocFilters}
diff --git a/src/client/views/collections/collectionSchema/SchemaTableCell.tsx b/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
index 001ad5ab6..ed1b519b4 100644
--- a/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
+++ b/src/client/views/collections/collectionSchema/SchemaTableCell.tsx
@@ -10,7 +10,7 @@ import { Doc, DocListCast, Field } from '../../../../fields/Doc';
import { RichTextField } from '../../../../fields/RichTextField';
import { BoolCast, Cast, DateCast, DocCast, FieldValue, StrCast } from '../../../../fields/Types';
import { ImageField } from '../../../../fields/URLField';
-import { FInfo } from '../../../documents/Documents';
+import { FInfo, FInfoFieldType } from '../../../documents/Documents';
import { DocFocusOrOpen } from '../../../util/DocumentManager';
import { Transform } from '../../../util/Transform';
import { undoBatch, undoable } from '../../../util/UndoManager';
@@ -29,6 +29,7 @@ import { Popup, Size, Type } from 'browndash-components';
import { IconLookup, faCaretDown } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { SettingsManager } from '../../../util/SettingsManager';
+import { dropActionType } from '../../../util/DragManager';
export interface SchemaTableCellProps {
Document: Doc;
@@ -86,7 +87,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
isSelected: returnFalse,
setHeight: returnFalse,
select: emptyFunction,
- dragAction: 'move',
+ dragAction: dropActionType.move,
renderDepth: 1,
isContentActive: returnFalse,
whenChildContentsActiveChanged: emptyFunction,
@@ -133,7 +134,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
if (shiftDown && enterKey) {
this._props.setColumnValues(this._props.fieldKey.replace(/^_/, ''), value);
}
- const ret = KeyValueBox.SetField(this._props.Document, this._props.fieldKey.replace(/^_/, ''), value);
+ const ret = KeyValueBox.SetField(this._props.Document, this._props.fieldKey.replace(/^_/, ''), value, Doc.IsDataProto(this._props.Document) ? true : undefined);
this._props.finishEdit?.();
return ret;
}, 'edit schema cell')}
@@ -149,7 +150,7 @@ export class SchemaTableCell extends ObservableReactComponent<SchemaTableCellPro
if (cellValue instanceof DateField) return ColumnType.Date;
if (cellValue instanceof RichTextField) return ColumnType.RTF;
if (typeof cellValue === 'number') return ColumnType.Any;
- if (typeof cellValue === 'string' && columnTypeStr !== 'enumeration') return ColumnType.Any;
+ if (typeof cellValue === 'string' && columnTypeStr !== FInfoFieldType.enumeration) return ColumnType.Any;
if (typeof cellValue === 'boolean') return ColumnType.Boolean;
if (columnTypeStr && columnTypeStr in FInfotoColType) {
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 51672513b..0579b07c7 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -21,6 +21,9 @@ import { RichTextMenu } from '../nodes/formattedText/RichTextMenu';
import { WebBox } from '../nodes/WebBox';
import { VideoBox } from '../nodes/VideoBox';
import { DocData } from '../../../fields/DocSymbols';
+import { FormattedTextBox } from '../nodes/formattedText/FormattedTextBox';
+import { PrefetchProxy } from '../../../fields/Proxy';
+import { MakeTemplate } from '../../util/DropConverter';
ScriptingGlobals.add(function IsNoneSelected() {
return SelectionManager.Views.length <= 0;
@@ -72,13 +75,29 @@ ScriptingGlobals.add(function setBackgroundColor(color?: string, checkResult?: b
});
// toggle: Set overlay status of selected document
+ScriptingGlobals.add(function setDefaultTemplate(checkResult?: boolean) {
+ if (checkResult) {
+ return Doc.UserDoc().defaultTextLayout;
+ }
+ const view = SelectionManager.Views.length === 1 && SelectionManager.Views[0].ComponentView instanceof FormattedTextBox ? SelectionManager.Views[0] : undefined;
+
+ if (view) {
+ const tempDoc = view.Document;
+ if (!view.layoutDoc.isTemplateDoc) {
+ MakeTemplate(tempDoc);
+ }
+ Doc.UserDoc().defaultTextLayout = new PrefetchProxy(tempDoc);
+ tempDoc && Doc.AddDocToList(Cast(Doc.UserDoc().template_notes, Doc, null), 'data', tempDoc);
+ } else Doc.UserDoc().defaultTextLayout = undefined;
+});
+// toggle: Set overlay status of selected document
ScriptingGlobals.add(function setHeaderColor(color?: string, checkResult?: boolean) {
if (checkResult) {
return SelectionManager.Views.length ? StrCast(SelectionManager.Docs.lastElement().layout_headingColor) : Doc.SharingDoc().headingColor;
}
if (SelectionManager.Views.length) {
SelectionManager.Docs.forEach(doc => {
- Doc.GetProto(doc).layout_headingColor = color;
+ doc[DocData].layout_headingColor = color === 'transparent' ? undefined : color;
doc.layout_showTitle = color === 'transparent' ? undefined : StrCast(doc.layout_showTitle, 'title');
});
} else {
@@ -98,7 +117,7 @@ ScriptingGlobals.add(function toggleOverlay(checkResult?: boolean) {
selected ? selected.CollectionFreeFormDocumentView?.float() : console.log('[FontIconBox.tsx] toggleOverlay failed');
});
-ScriptingGlobals.add(function showFreeform(attr: 'flashcards' | 'center' | 'grid' | 'snaplines' | 'clusters' | 'arrange' | 'viewAll' | 'fitOnce', checkResult?: boolean) {
+ScriptingGlobals.add(function showFreeform(attr: 'flashcards' | 'center' | 'grid' | 'snaplines' | 'clusters' | 'arrange' | 'viewAll' | 'fitOnce', checkResult?: boolean, persist?: boolean) {
const selected = SelectionManager.Docs.lastElement();
// prettier-ignore
const map: Map<'flashcards' | 'center' |'grid' | 'snaplines' | 'clusters' | 'arrange'| 'viewAll' | 'fitOnce', { waitForRender?: boolean, checkResult: (doc:Doc) => any; setDoc: (doc:Doc, dv:DocumentView) => void;}> = new Map([
@@ -112,16 +131,16 @@ ScriptingGlobals.add(function showFreeform(attr: 'flashcards' | 'center' | 'grid
}],
['viewAll', {
checkResult: (doc:Doc) => BoolCast(doc?._freeform_fitContentsToBox, false),
- setDoc: (doc:Doc,dv:DocumentView) => doc._freeform_fitContentsToBox = !doc._freeform_fitContentsToBox,
+ setDoc: (doc:Doc,dv:DocumentView) => {
+ if (persist) doc._freeform_fitContentsToBox = !doc._freeform_fitContentsToBox;
+ else if (doc._freeform_fitContentsToBox) doc._freeform_fitContentsToBox = undefined;
+ else (dv.ComponentView as CollectionFreeFormView)?.fitContentOnce();
+ },
}],
['center', {
checkResult: (doc:Doc) => BoolCast(doc?._stacking_alignCenter, false),
setDoc: (doc:Doc,dv:DocumentView) => doc._stacking_alignCenter = !doc._stacking_alignCenter,
}],
- ['fitOnce', {
- checkResult: (doc:Doc) => false,
- setDoc: (doc:Doc, dv:DocumentView) => (dv.ComponentView as CollectionFreeFormView)?.fitContentOnce()
- }],
['clusters', {
waitForRender: true, // flags that undo batch should terminate after a re-render giving the script the chance to fire
checkResult: (doc:Doc) => BoolCast(doc?._freeform_useClusters, false),
diff --git a/src/client/views/linking/LinkMenuItem.tsx b/src/client/views/linking/LinkMenuItem.tsx
index e694806a5..81dd0eb98 100644
--- a/src/client/views/linking/LinkMenuItem.tsx
+++ b/src/client/views/linking/LinkMenuItem.tsx
@@ -10,7 +10,7 @@ import { Cast, DocCast, StrCast } from '../../../fields/Types';
import { WebField } from '../../../fields/URLField';
import { DocumentType } from '../../documents/DocumentTypes';
import { DocumentManager } from '../../util/DocumentManager';
-import { DragManager } from '../../util/DragManager';
+import { DragManager, dropActionType } from '../../util/DragManager';
import { LinkFollower } from '../../util/LinkFollower';
import { LinkManager } from '../../util/LinkManager';
import { SelectionManager } from '../../util/SelectionManager';
@@ -45,7 +45,7 @@ export async function StartLinkTargetsDrag(dragEle: HTMLElement, docView: Docume
const dragData = new DragManager.DocumentDragData(moddrag.length ? moddrag : draggedDocs);
dragData.canEmbed = true;
- dragData.dropAction = 'embed';
+ dragData.dropAction = dropActionType.embed;
DragManager.StartDocumentDrag([dragEle], dragData, downX, downY, undefined);
}
@@ -89,7 +89,7 @@ export class LinkMenuItem extends ObservableReactComponent<LinkMenuItemProps> {
this,
e,
e => {
- const dragData = new DragManager.DocumentDragData([this._props.linkDoc], 'embed');
+ const dragData = new DragManager.DocumentDragData([this._props.linkDoc], dropActionType.embed);
dragData.dropPropertiesToRemove = ['hidden'];
DragManager.StartDocumentDrag([this._editRef.current!], dragData, e.x, e.y);
return true;
@@ -177,12 +177,12 @@ export class LinkMenuItem extends ObservableReactComponent<LinkMenuItemProps> {
className="linkMenu-name" //title="drag to view target. click to customize."
onPointerDown={this.onLinkButtonDown}>
<div className="linkMenu-item-buttons">
- <Tooltip title={<div className="dash-tooltip">Edit Link</div>}>
+ <Tooltip disableInteractive={true} title={<div className="dash-tooltip">Edit Link</div>}>
<div className="linkMenu-icon-wrapper" ref={this._editRef} onPointerDown={this.onEdit} onClick={e => e.stopPropagation()}>
<FontAwesomeIcon className="linkMenu-icon" icon="edit" size="sm" />
</div>
</Tooltip>
- <Tooltip title={<div className="dash-tooltip">Show/Hide Link</div>}>
+ <Tooltip disableInteractive={true} title={<div className="dash-tooltip">Show/Hide Link</div>}>
<div title="click to show link" className="linkMenu-icon-wrapper" onPointerDown={this.onIconDown}>
<FontAwesomeIcon className="linkMenu-icon" icon={destinationIcon} size="sm" />
</div>
@@ -211,7 +211,7 @@ export class LinkMenuItem extends ObservableReactComponent<LinkMenuItemProps> {
</p>
) : null}
<div className="linkMenu-title-wrapper">
- <Tooltip title={<div className="dash-tooltip">Follow Link</div>}>
+ <Tooltip disableInteractive={true} title={<div className="dash-tooltip">Follow Link</div>}>
<p className="linkMenu-destination-title">
{this._props.linkDoc.linksToAnnotation && Cast(this._props.destinationDoc.data, WebField)?.url.href === this._props.linkDoc.annotationUri ? 'Annotation in' : ''} {StrCast(title)}
</p>
@@ -221,7 +221,7 @@ export class LinkMenuItem extends ObservableReactComponent<LinkMenuItemProps> {
</div>
<div className="linkMenu-item-buttons">
- <Tooltip title={<div className="dash-tooltip">Delete Link</div>}>
+ <Tooltip disableInteractive={true} title={<div className="dash-tooltip">Delete Link</div>}>
<div className="linkMenu-deleteButton" onPointerDown={this.deleteLink} onClick={e => e.stopPropagation()}>
<FontAwesomeIcon className="fa-icon" icon="trash" size="sm" />
</div>
diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
index a0a64ab59..2800ea200 100644
--- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
+++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx
@@ -1,4 +1,4 @@
-import { action, computed, makeObservable, observable } from 'mobx';
+import { action, makeObservable, observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { OmitKeys, numberRange } from '../../../Utils';
@@ -12,14 +12,16 @@ import { DocumentManager } from '../../util/DocumentManager';
import { ScriptingGlobals } from '../../util/ScriptingGlobals';
import { SelectionManager } from '../../util/SelectionManager';
import { DocComponent } from '../DocComponent';
-import { ObservableReactComponent } from '../ObservableReactComponent';
import { StyleProp } from '../StyleProvider';
import { CollectionFreeFormView } from '../collections/collectionFreeForm/CollectionFreeFormView';
import './CollectionFreeFormDocumentView.scss';
import { DocumentView, DocumentViewProps, OpenWhere } from './DocumentView';
import { FieldViewProps } from './FieldView';
-export interface CollectionFreeFormDocumentViewWrapperProps extends DocumentViewProps {
+/// Ugh, typescript has no run-time way of iterating through the keys of an interface. so we need
+/// manaully keep this list of keys in synch wih the fields of the freeFormProps interface
+const freeFormPropsKeys = ['x', 'y', 'z', 'zIndex', 'rotation', 'opacity', 'backgroundColor', 'color', 'highlight', 'width', 'height', 'autoDim', 'transition'];
+interface freeFormProps {
x: number;
y: number;
z: number;
@@ -33,102 +35,17 @@ export interface CollectionFreeFormDocumentViewWrapperProps extends DocumentView
opacity?: number;
highlight?: boolean;
transition?: string;
- RenderCutoffProvider: (doc: Doc) => boolean;
- CollectionFreeFormView: CollectionFreeFormView;
-}
-@observer
-export class CollectionFreeFormDocumentViewWrapper extends ObservableReactComponent<CollectionFreeFormDocumentViewWrapperProps> {
- constructor(props: CollectionFreeFormDocumentViewWrapperProps) {
- super(props);
- makeObservable(this);
- }
- @observable X = this.props.x;
- @observable Y = this.props.y;
- @observable Z = this.props.z;
- @observable ZIndex = this.props.zIndex;
- @observable Rotation = this.props.rotation;
- @observable Opacity = this.props.opacity;
- @observable BackgroundColor = this.props.backgroundColor;
- @observable Color = this.props.color;
- @observable Highlight = this.props.highlight;
- @observable Width = this.props.width;
- @observable Height = this.props.height;
- @observable AutoDim = this.props.autoDim;
- @observable Transition = this.props.transition;
- CollectionFreeFormView = this.props.CollectionFreeFormView; // needed for type checking
- RenderCutoffProvider = this.props.RenderCutoffProvider; // needed for type checking
-
- get Document() {
- return this._props.Document;
- }
- @computed get WrapperKeys() {
- return Object.keys(this).filter(key => key.startsWith('w_')).map(key => key.replace('w_', ''))
- .map(key => ({upper:key, lower:key[0].toLowerCase() + key.substring(1)})); // prettier-ignore
- }
-
- // wrapper functions around prop fields that have been converted to observables to keep 'props' from ever changing.
- // this way, downstream code only invalidates when it uses a specific prop, not when any prop changes
- w_X = () => this.X; // prettier-ignore
- w_Y = () => this.Y; // prettier-ignore
- w_Z = () => this.Z; // prettier-ignore
- w_ZIndex = () => this.ZIndex ?? NumCast(this.Document.zIndex); // prettier-ignore
- w_Rotation = () => this.Rotation ?? NumCast(this.Document._rotation); // prettier-ignore
- w_Opacity = () => this.Opacity; // prettier-ignore
- w_BackgroundColor = () => this.BackgroundColor ?? Cast(this.Document._backgroundColor, 'string', null); // prettier-ignore
- w_Color = () => this.Color ?? Cast(this.Document._color, 'string', null); // prettier-ignore
- w_Highlight = () => this.Highlight; // prettier-ignore
- w_Width = () => this.Width; // prettier-ignore
- w_Height = () => this.Height; // prettier-ignore
- w_AutoDim = () => this.AutoDim; // prettier-ignore
- w_Transition = () => this.Transition; // prettier-ignore
-
- PanelWidth = () => this._props.autoDim ? this._props.PanelWidth?.() : this.Width; // prettier-ignore
- PanelHeight = () => this._props.autoDim ? this._props.PanelHeight?.() : this.Height; // prettier-ignore
-
- componentDidUpdate(prevProps: Readonly<React.PropsWithChildren<CollectionFreeFormDocumentViewWrapperProps & { fieldKey: string }>>) {
- super.componentDidUpdate(prevProps);
- this.WrapperKeys.forEach(action(keys => ((this as any)[keys.upper] = (this.props as any)[keys.lower])));
- }
- render() {
- const layoutProps = this.WrapperKeys.reduce((val, keys) => [(val['w_' + keys.upper] = (this as any)['w_' + keys.upper]), val][1], {} as { [key: string]: Function });
- return (
- <CollectionFreeFormDocumentView
- {...OmitKeys(this._props, this.WrapperKeys.map(keys => keys.lower) ).omit} // prettier-ignore
- {...layoutProps}
- PanelWidth={this.PanelWidth}
- PanelHeight={this.PanelHeight}
- />
- );
- }
}
export interface CollectionFreeFormDocumentViewProps extends DocumentViewProps {
- w_X: () => number;
- w_Y: () => number;
- w_Z: () => number;
- w_ZIndex?: () => number;
- w_Rotation?: () => number;
- w_Color: () => string;
- w_BackgroundColor: () => string;
- w_Opacity: () => number | undefined;
- w_Highlight: () => boolean | undefined;
- w_Transition: () => string | undefined;
- w_Width: () => number;
- w_Height: () => number;
- PanelWidth: () => number;
- PanelHeight: () => number;
RenderCutoffProvider: (doc: Doc) => boolean;
CollectionFreeFormView: CollectionFreeFormView;
}
-
@observer
-export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeFormDocumentViewProps>() {
- constructor(props: CollectionFreeFormDocumentViewProps) {
- super(props);
- makeObservable(this);
- }
+export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeFormDocumentViewProps & freeFormProps>() {
get displayName() { // this makes mobx trace() statements more descriptive
return 'CollectionFreeFormDocumentView(' + this.Document.title + ')';
} // prettier-ignore
+ public static CollectionFreeFormDocViewClassName = 'collectionFreeFormDocumentView-container';
public static animFields: { key: string; val?: number }[] = [
{ key: 'x' },
{ key: 'y' },
@@ -145,16 +62,53 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF
public static animStringFields = ['backgroundColor', 'color', 'fillColor']; // fields that are configured to be animatable using animation frames
public static animDataFields = (doc: Doc) => (Doc.LayoutFieldKey(doc) ? [Doc.LayoutFieldKey(doc)] : []); // fields that are configured to be animatable using animation frames
- get CollectionFreeFormView() {
- return this._props.CollectionFreeFormView;
+ constructor(props: CollectionFreeFormDocumentViewProps & freeFormProps) {
+ super(props);
+ makeObservable(this);
+ }
+
+ get WrapperKeys() {
+ // each of these keys is set by the CollectionView and passed via props. however, if any one of these props changes
+ // (or any other prop), then it's as if they all change.
+ // Anything that accesses these props will then invalidate unncessarily.
+ // To avoid this, we copy these prop values into local observables. Now when 'props' changes, nothing invalidates.
+ // Instead, we copy each values into its observable which ohnly triggers invalidations if the new value is different
+ // than the old value, and then only things that access that observable will invalidate.
+ return freeFormPropsKeys
+ .map(key => ({upper:key[0].toUpperCase() + key.substring(1), lower:key})); // prettier-ignore
+ }
+ @observable X = this.props.x;
+ @observable Y = this.props.y;
+ @observable Z = this.props.z;
+ @observable ZIndex = this.props.zIndex;
+ @observable Rotation = this.props.rotation;
+ @observable Opacity = this.props.opacity;
+ @observable BackgroundColor = this.props.backgroundColor;
+ @observable Color = this.props.color;
+ @observable Highlight = this.props.highlight;
+ @observable Width = this.props.width;
+ @observable Height = this.props.height;
+ @observable AutoDim = this.props.autoDim;
+ @observable Transition = this.props.transition;
+
+ componentDidUpdate(prevProps: Readonly<React.PropsWithChildren<CollectionFreeFormDocumentViewProps & freeFormProps>>) {
+ super.componentDidUpdate(prevProps);
+ this.WrapperKeys.forEach(action(keys => ((this as any)[keys.upper] = (this.props as any)[keys.lower])));
}
+ CollectionFreeFormView = this.props.CollectionFreeFormView; // needed for type checking
+ // this way, downstream code only invalidates when it uses a specific prop, not when any prop changes
+ DataTransition = () => this._props.transition; // prettier-ignore
+ RenderCutoffProvider = this.props.RenderCutoffProvider; // needed for type checking
+ PanelWidth = () => this._props.autoDim ? this._props.PanelWidth?.() : this.Width; // prettier-ignore
+ PanelHeight = () => this._props.autoDim ? this._props.PanelHeight?.() : this.Height; // prettier-ignore
+
styleProvider = (doc: Doc | undefined, props: Opt<FieldViewProps>, property: string) => {
if (doc === this.layoutDoc) {
switch (property) {
- case StyleProp.Opacity: return this._props.w_Opacity(); // only change the opacity for this specific document, not its children
- case StyleProp.BackgroundColor: return this._props.w_BackgroundColor();
- case StyleProp.Color: return this._props.w_Color();
+ case StyleProp.Opacity: return this.Opacity; // only change the opacity for this specific document, not its children
+ case StyleProp.BackgroundColor: return this.BackgroundColor;
+ case StyleProp.Color: return this.Color;
} // prettier-ignore
}
return this._props.styleProvider?.(doc, props, property);
@@ -253,14 +207,14 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF
nudge = (x: number, y: number) => {
const [locX, locY] = this._props.ScreenToLocalTransform().transformDirection(x, y);
- this.Document.x = this._props.w_X() + locX;
- this.Document.y = this._props.w_Y() + locY;
+ this.Document.x = this.X + locX;
+ this.Document.y = this.Y + locY;
};
screenToLocalTransform = () =>
this._props
.ScreenToLocalTransform()
- .translate(-this._props.w_X(), -this._props.w_Y())
- .rotateDeg(-(this._props.w_Rotation?.() || 0));
+ .translate(-this.X, -this.Y)
+ .rotateDeg(-(this.Rotation || 0));
returnThis = () => this;
/// this indicates whether the doc view is activated because of its relationshop to a group
@@ -273,27 +227,26 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF
const isGroup = this.dataDoc.isGroup && (!this.layoutDoc.backgroundColor || this.layoutDoc.backgroundColor === 'transparent');
return isGroup ? (this._props.isDocumentActive?.() ? 'group' : this._props.isGroupActive?.() ? 'child' : 'inactive') : this._props.isGroupActive?.() ? 'child' : undefined;
};
- public static CollectionFreeFormDocViewClassName = 'collectionFreeFormDocumentView-container';
render() {
TraceMobx();
- const passOnProps = OmitKeys(this._props, Object.keys(this._props).filter(key => key.startsWith('w_'))).omit; // prettier-ignore
+
return (
<div
className={CollectionFreeFormDocumentView.CollectionFreeFormDocViewClassName}
style={{
- width: this._props.PanelWidth(),
- height: this._props.PanelHeight(),
- transform: `translate(${this._props.w_X()}px, ${this._props.w_Y()}px) rotate(${NumCast(this._props.w_Rotation?.())}deg)`,
- transition: this._props.w_Transition?.() || StrCast(this.Document.dataTransition),
- zIndex: this._props.w_ZIndex?.(),
- display: this._props.w_Width?.() ? undefined : 'none',
+ width: this.PanelWidth(),
+ height: this.PanelHeight(),
+ transform: `translate(${this.X}px, ${this.Y}px) rotate(${NumCast(this.Rotation)}deg)`,
+ transition: this.Transition || StrCast(this.Document.dataTransition),
+ zIndex: this.ZIndex,
+ display: this.Width ? undefined : 'none',
}}>
- {this._props.RenderCutoffProvider(this.Document) ? (
- <div style={{ position: 'absolute', width: this._props.PanelWidth(), height: this._props.PanelHeight(), background: 'lightGreen' }} />
+ {this.RenderCutoffProvider(this.Document) ? (
+ <div style={{ position: 'absolute', width: this.PanelWidth(), height: this.PanelHeight(), background: 'lightGreen' }} />
) : (
<DocumentView
- {...passOnProps}
- DataTransition={this._props.w_Transition}
+ {...OmitKeys(this._props,this.WrapperKeys.map(val => val.lower)).omit} // prettier-ignore
+ DataTransition={this.DataTransition}
CollectionFreeFormDocumentView={this.returnThis}
styleProvider={this.styleProvider}
ScreenToLocalTransform={this.screenToLocalTransform}
diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index 116dc48a6..ef8c045cc 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -6,7 +6,7 @@ import { emptyFunction, returnFalse, returnNone, returnZero, setupMoveUpEvents }
import { Doc, Opt } from '../../../fields/Doc';
import { DocCast, NumCast, StrCast } from '../../../fields/Types';
import { DocUtils, Docs } from '../../documents/Documents';
-import { DragManager } from '../../util/DragManager';
+import { DragManager, dropActionType } from '../../util/DragManager';
import { undoBatch } from '../../util/UndoManager';
import { ViewBoxAnnotatableComponent, ViewBoxInterface } from '../DocComponent';
import { StyleProp } from '../StyleProvider';
@@ -135,7 +135,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
this,
e,
e => {
- const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], 'move');
+ const de = new DragManager.DocumentDragData([DocCast(this.dataDoc[which])], dropActionType.move);
de.moveDocument = (doc: Doc | Doc[], targetCollection: Doc | undefined, addDocument: (doc: Doc | Doc[]) => boolean): boolean => {
this.clearDoc(which);
return addDocument(doc);
diff --git a/src/client/views/nodes/DataVizBox/DataVizBox.scss b/src/client/views/nodes/DataVizBox/DataVizBox.scss
index a3132dc6e..6b5738790 100644
--- a/src/client/views/nodes/DataVizBox/DataVizBox.scss
+++ b/src/client/views/nodes/DataVizBox/DataVizBox.scss
@@ -29,6 +29,10 @@
}
}
+ .liveSchema-checkBox {
+ margin-bottom: -35px;
+ }
+
.dataviz-sidebar {
position: absolute;
right: 0;
diff --git a/src/client/views/nodes/DataVizBox/DataVizBox.tsx b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
index e453bcee0..66a08f13e 100644
--- a/src/client/views/nodes/DataVizBox/DataVizBox.tsx
+++ b/src/client/views/nodes/DataVizBox/DataVizBox.tsx
@@ -11,7 +11,7 @@ import { listSpec } from '../../../../fields/Schema';
import { Cast, CsvCast, DocCast, NumCast, StrCast } from '../../../../fields/Types';
import { CsvField } from '../../../../fields/URLField';
import { TraceMobx } from '../../../../fields/util';
-import { Docs } from '../../../documents/Documents';
+import { DocUtils, Docs } from '../../../documents/Documents';
import { DocumentManager } from '../../../util/DocumentManager';
import { UndoManager, undoable } from '../../../util/UndoManager';
import { ViewBoxAnnotatableComponent, ViewBoxInterface } from '../../DocComponent';
@@ -27,6 +27,7 @@ import { Histogram } from './components/Histogram';
import { LineChart } from './components/LineChart';
import { PieChart } from './components/PieChart';
import { TableBox } from './components/TableBox';
+import { Checkbox } from '@mui/material';
export enum DataVizView {
TABLE = 'table',
@@ -85,6 +86,10 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
// all datasets that have been retrieved from the server stored as a map from the dataset url to an array of records
static dataset = new ObservableMap<string, { [key: string]: string }[]>();
+ // when a dataset comes from schema view, this stores the original dataset to refer back to
+ // href : dataset
+ static datasetSchemaOG = new ObservableMap<string, { [key: string]: string }[]>();
+
private _vizRenderer: LineChart | Histogram | PieChart | undefined;
private _sidebarRef = React.createRef<SidebarAnnos>();
@@ -103,10 +108,13 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
return Cast(this.dataDoc[this.fieldKey], CsvField);
}
@computed.struct get axes() {
- return StrListCast(this.layoutDoc.dataViz_axes);
+ return StrListCast(this.layoutDoc._dataViz_axes);
}
-
- selectAxes = (axes: string[]) => (this.layoutDoc.dataViz_axes = new List<string>(axes));
+ selectAxes = (axes: string[]) => (this.layoutDoc._dataViz_axes = new List<string>(axes));
+ @computed.struct get titleCol() {
+ return StrCast(this.layoutDoc._dataViz_titleCol);
+ }
+ selectTitleCol = (titleCol: string) => (this.layoutDoc._dataViz_titleCol = titleCol);
@action // pinned / linked anchor doc includes selected rows, graph titles, and graph colors
restoreView = (data: Doc) => {
@@ -258,6 +266,7 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
if (!DataVizBox.dataset.has(CsvCast(this.dataDoc[this.fieldKey]).url.href)) this.fetchData();
this._disposers.datavis = reaction(
() => {
+ if (this.layoutDoc.dataViz_schemaLive==undefined) this.layoutDoc.dataViz_schemaLive = true;
const getFrom = DocCast(this.layoutDoc.dataViz_asSchema);
const keys = Cast(getFrom?.schema_columnKeys, listSpec('string'))?.filter(key => key != 'text');
if (!keys) return;
@@ -274,10 +283,43 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
});
current.push(row);
});
+ if (!this.layoutDoc._dataViz_schemaOG){ // makes a copy of the original table for the "live" toggle
+ let csvRows = [];
+ csvRows.push(keys.join(','));
+ for (let i = 0; i < children.length-1; i++) {
+ let eachRow = [];
+ for (let j = 0; j < keys.length; j++) {
+ var cell = children[i][keys[j]];
+ if (cell && (cell as string)) cell = cell.toString().replace(/\,/g, '');
+ eachRow.push(cell);
+ }
+ csvRows.push(eachRow);
+ }
+ const blob = new Blob([csvRows.join('\n')], { type: 'text/csv' });
+ const options = { x: 0, y: 0, title: 'schemaTable for static dataviz', _width: 300, _height: 100, type: 'text/csv' };
+ const file = new File([blob], 'schemaTable for static dataviz', options);
+ const loading = Docs.Create.LoadingDocument(file, options);
+ DocUtils.uploadFileToDoc(file, {}, loading);
+ this.layoutDoc._dataViz_schemaOG = loading;
+ }
+ const ogDoc = this.layoutDoc._dataViz_schemaOG as Doc
+ const ogHref = CsvCast(ogDoc[this.fieldKey])? CsvCast(ogDoc[this.fieldKey]).url.href : undefined;
+ const href = CsvCast(this.Document[this.fieldKey]).url.href
+ if (ogHref && !DataVizBox.datasetSchemaOG.has(href)){ // sets original dataset to the var
+ const lastRow = current.pop();
+ DataVizBox.datasetSchemaOG.set(href, current);
+ current.push(lastRow!);
+ fetch('/csvData?uri=' + ogHref)
+ .then(res => res.json().then(action(res => !res.errno && DataVizBox.datasetSchemaOG.set(href, res))));
+ }
return current;
},
current => {
- current && DataVizBox.dataset.set(CsvCast(this.Document[this.fieldKey]).url.href, current);
+ if (current) {
+ const href = CsvCast(this.Document[this.fieldKey]).url.href;
+ if (this.layoutDoc.dataViz_schemaLive) DataVizBox.dataset.set(href, current);
+ else DataVizBox.dataset.set(href, DataVizBox.datasetSchemaOG.get(href)!);
+ }
},
{ fireImmediately: true }
);
@@ -299,6 +341,7 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
layoutDoc: this.layoutDoc,
records: this.records,
axes: this.axes,
+ titleCol: this.titleCol,
//width: this.SidebarShown? this._props.PanelWidth()*.9/1.2: this._props.PanelWidth() * 0.9,
height: (this._props.PanelHeight() / scale - 32) /* height of 'change view' button */ * 0.9,
width: ((this._props.PanelWidth() - this.sidebarWidth()) / scale) * 0.9,
@@ -306,7 +349,7 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
};
if (!this.records.length) return 'no data/visualization';
switch (this.dataVizView) {
- case DataVizView.TABLE: return <TableBox {...sharedProps} docView={this.DocumentView} selectAxes={this.selectAxes} />;
+ case DataVizView.TABLE: return <TableBox {...sharedProps} docView={this.DocumentView} selectAxes={this.selectAxes} selectTitleCol={this.selectTitleCol}/>;
case DataVizView.LINECHART: return <LineChart {...sharedProps} dataDoc={this.dataDoc} fieldKey={this.fieldKey} ref={r => (this._vizRenderer = r ?? undefined)} vizBox={this} />;
case DataVizView.HISTOGRAM: return <Histogram {...sharedProps} dataDoc={this.dataDoc} fieldKey={this.fieldKey} ref={r => (this._vizRenderer = r ?? undefined)} />;
case DataVizView.PIECHART: return <PieChart {...sharedProps} dataDoc={this.dataDoc} fieldKey={this.fieldKey} ref={r => (this._vizRenderer = r ?? undefined)}
@@ -354,6 +397,11 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
GPTPopup.Instance.addDoc = this.sidebarAddDocument;
};
+ @action
+ changeLiveSchemaCheckbox = () => {
+ this.layoutDoc.dataViz_schemaLive = !this.layoutDoc.dataViz_schemaLive
+ }
+
render() {
const scale = this._props.NativeDimScaling?.() || 1;
return !this.records.length ? (
@@ -379,27 +427,15 @@ export class DataVizBox extends ViewBoxAnnotatableComponent<FieldViewProps>() im
<Toggle text={'PIE CHART'} toggleType={ToggleType.BUTTON} type={Type.SEC} color={'black'} onClick={e => (this.layoutDoc._dataViz = DataVizView.PIECHART)} toggleStatus={this.layoutDoc._dataViz == -DataVizView.PIECHART} />
</div>
- {/* <CollectionFreeFormView
- ref={this._ffref}
- {...this._props}
- setContentView={emptyFunction}
- renderDepth={this._props.renderDepth - 1}
- fieldKey={this.annotationKey}
- styleProvider={this._props.styleProvider}
- isAnnotationOverlay={true}
- annotationLayerHostsContent={false}
- PanelWidth={this._props.PanelWidth}
- PanelHeight={this._props.PanelHeight}
- select={emptyFunction}
- isAnyChildContentActive={returnFalse}
- whenChildContentsActiveChanged={this.whenChildContentsActiveChanged}
- removeDocument={this.removeDocument}
- moveDocument={this.moveDocument}
- addDocument={this.addDocument}>
- {this.renderVizView}
- </CollectionFreeFormView> */}
+ {(this.layoutDoc && this.layoutDoc.dataViz_asSchema)?(
+ <div className={'liveSchema-checkBox'} style={{ width: this._props.width }}>
+ <Checkbox color="primary" onChange={this.changeLiveSchemaCheckbox} checked={this.layoutDoc.dataViz_schemaLive as boolean} />
+ Display Live Updates to Canvas
+ </div>
+ ) : null}
{this.renderVizView}
+
<div className="dataviz-sidebar" style={{ width: `${this.sidebarWidthPercent}`, backgroundColor: `${this.sidebarColor}` }} onPointerDown={this.onPointerDown}>
<SidebarAnnos
ref={this._sidebarRef}
diff --git a/src/client/views/nodes/DataVizBox/components/Chart.scss b/src/client/views/nodes/DataVizBox/components/Chart.scss
index 116a45623..41ce637ac 100644
--- a/src/client/views/nodes/DataVizBox/components/Chart.scss
+++ b/src/client/views/nodes/DataVizBox/components/Chart.scss
@@ -19,8 +19,6 @@
margin-bottom: -20px;
}
.asHistogram-checkBox {
- // display: flex;
- // flex-direction: row;
align-items: left;
align-self: left;
align-content: left;
diff --git a/src/client/views/nodes/DataVizBox/components/Histogram.tsx b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
index a7f292104..6672603f3 100644
--- a/src/client/views/nodes/DataVizBox/components/Histogram.tsx
+++ b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
@@ -20,6 +20,7 @@ export interface HistogramProps {
Document: Doc;
layoutDoc: Doc;
axes: string[];
+ titleCol: string;
records: { [key: string]: any }[];
width: number;
height: number;
@@ -63,17 +64,17 @@ export class Histogram extends ObservableReactComponent<HistogramProps> {
if (this._props.axes.length < 1) return [];
if (this._props.axes.length < 2) {
var ax0 = this._props.axes[0];
- if (/\d/.test(this._props.records[0][ax0])) {
+ if (!/[A-Za-z-:]/.test(this._props.records[0][ax0])){
this.numericalXData = true;
}
return this._tableData.map(record => ({ [ax0]: record[this._props.axes[0]] }));
}
var ax0 = this._props.axes[0];
var ax1 = this._props.axes[1];
- if (/\d/.test(this._props.records[0][ax0])) {
+ if (!/[A-Za-z-:]/.test(this._props.records[0][ax0])) {
this.numericalXData = true;
}
- if (/\d/.test(this._props.records[0][ax1])) {
+ if (!/[A-Za-z-:]/.test(this._props.records[0][ax1])) {
this.numericalYData = true;
}
return this._tableData.map(record => ({ [ax0]: record[this._props.axes[0]], [ax1]: record[this._props.axes[1]] }));
@@ -89,9 +90,6 @@ export class Histogram extends ObservableReactComponent<HistogramProps> {
@computed get parentViz() {
return DocCast(this._props.Document.dataViz_parentViz);
- // return LinkManager.Instance.getAllRelatedLinks(this._props.Document) // out of all links
- // .filter(link => link.link_anchor_1 == this._props.Document.dataViz_parentViz) // get links where this chart doc is the target of the link
- // .map(link => DocCast(link.link_anchor_1)); // then return the source of the link
}
@computed get rangeVals(): { xMin?: number; xMax?: number; yMin?: number; yMax?: number } {
@@ -454,6 +452,18 @@ export class Histogram extends ObservableReactComponent<HistogramProps> {
: ''
);
selected = selected.substring(0, selected.length - 2) + ' }';
+ if (this._props.titleCol!="" && (!this._currSelected["frequency"] || this._currSelected["frequency"]<10)){
+ selected+= "\n" + this._props.titleCol + ": "
+ this._tableData.forEach(each => {
+ if (this._currSelected[this._props.axes[0]]==each[this._props.axes[0]]) {
+ if (this._props.axes[1]){
+ if (this._currSelected[this._props.axes[1]]==each[this._props.axes[1]]) selected+= each[this._props.titleCol] + ", ";
+ }
+ else selected+= each[this._props.titleCol] + ", ";
+ }
+ })
+ selected = selected.slice(0,-1).slice(0,-1);
+ }
}
var selectedBarColor;
var barColors = StrListCast(this._props.layoutDoc.histogramBarColors).map(each => each.split('::'));
diff --git a/src/client/views/nodes/DataVizBox/components/LineChart.tsx b/src/client/views/nodes/DataVizBox/components/LineChart.tsx
index bea1b8222..e093ec648 100644
--- a/src/client/views/nodes/DataVizBox/components/LineChart.tsx
+++ b/src/client/views/nodes/DataVizBox/components/LineChart.tsx
@@ -28,6 +28,7 @@ export interface LineChartProps {
Document: Doc;
layoutDoc: Doc;
axes: string[];
+ titleCol: string;
records: { [key: string]: any }[];
width: number;
height: number;
@@ -46,7 +47,7 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
private _disposers: { [key: string]: IReactionDisposer } = {};
private _lineChartRef: React.RefObject<HTMLDivElement> = React.createRef();
private _lineChartSvg: d3.Selection<SVGGElement, unknown, null, undefined> | undefined;
- @observable _currSelected: SelectedDataPoint | undefined = undefined;
+ @observable _currSelected: any | undefined = undefined;
// TODO: nda - some sort of mapping that keeps track of the annotated points so we can easily remove when annotations list updates
constructor(props: any) {
super(props);
@@ -235,21 +236,16 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
}
}
- // TODO: nda - can use d3.create() to create html element instead of appending
drawChart = (dataSet: any[][], rangeVals: { xMin?: number; xMax?: number; yMin?: number; yMax?: number }, width: number, height: number) => {
// clearing tooltip and the current chart
d3.select(this._lineChartRef.current).select('svg').remove();
d3.select(this._lineChartRef.current).select('.tooltip').remove();
- const { xMin, xMax, yMin, yMax } = rangeVals;
+ var { xMin, xMax, yMin, yMax } = rangeVals;
if (xMin === undefined || xMax === undefined || yMin === undefined || yMax === undefined) {
return;
}
- // creating the x and y scales
- const xScale = scaleCreatorNumerical(xMin, xMax, 0, width);
- const yScale = scaleCreatorNumerical(0, yMax, height, 0);
-
// adding svg
const margin = this._props.margin;
const svg = (this._lineChartSvg = d3
@@ -261,24 +257,71 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
.append('g')
.attr('transform', `translate(${margin.left}, ${margin.top})`));
+ var validSecondData;
+ if (this._props.axes.length>2){ // for when there are 2 lines on the chart
+ var next = this._tableData.map(record => ({ x: Number(record[this._props.axes[0]]), y: Number(record[this._props.axes[2]]) })).sort((a, b) => (a.x < b.x ? -1 : 1));
+ validSecondData = next.filter(d => {
+ if (!d.x || Number.isNaN(d.x) || !d.y || Number.isNaN(d.y)) return false;
+ return true;
+ });
+ var secondDataRange = minMaxRange([validSecondData]);
+ if (secondDataRange.xMax!>xMax) xMax = secondDataRange.xMax;
+ if (secondDataRange.yMax!>yMax) yMax = secondDataRange.yMax;
+ if (secondDataRange.xMin!<xMin) xMin = secondDataRange.xMin;
+ if (secondDataRange.yMin!<yMin) yMin = secondDataRange.yMin;
+ }
+
+ // creating the x and y scales
+ const xScale = scaleCreatorNumerical(xMin!, xMax!, 0, width);
+ const yScale = scaleCreatorNumerical(0, yMax!, height, 0);
+ const lineGen = createLineGenerator(xScale, yScale);
+
// create x and y grids
xGrid(svg.append('g'), height, xScale);
yGrid(svg.append('g'), width, yScale);
xAxisCreator(svg.append('g'), height, xScale);
yAxisCreator(svg.append('g'), width, yScale);
+ if (validSecondData) {
+ drawLine(svg.append('path'), validSecondData, lineGen, true);
+ this.drawDataPoints(validSecondData, 0, xScale, yScale);
+ svg.append('path').attr("stroke", "red");
+
+ // legend
+ var color = d3.scaleOrdinal()
+ .range(["black", "blue"])
+ .domain([this._props.axes[1], this._props.axes[2]])
+ svg.selectAll("mydots")
+ .data([this._props.axes[1], this._props.axes[2]])
+ .enter()
+ .append("circle")
+ .attr("cx", 5)
+ .attr("cy", function(d,i){ return -30 + i*15})
+ .attr("r", 7)
+ .style("fill", function(d){ return color(d)})
+ svg.selectAll("mylabels")
+ .data([this._props.axes[1], this._props.axes[2]])
+ .enter()
+ .append("text")
+ .attr("x", 25)
+ .attr("y", function(d,i){ return -30 + i*15})
+ .style("fill", function(d){ return color(d)})
+ .text(function(d){ return d})
+ .attr("text-anchor", "left")
+ .style("alignment-baseline", "middle")
+ }
+
// get valid data points
const data = dataSet[0];
- const lineGen = createLineGenerator(xScale, yScale);
var validData = data.filter(d => {
- var valid = true;
Object.keys(data[0]).map(key => {
- if (!d[key] || Number.isNaN(d[key])) valid = false;
+ if (!d[key] || Number.isNaN(d[key])) return false;
});
- return valid;
+ return true;
});
+
// draw the plot line
- drawLine(svg.append('path'), validData, lineGen);
+ drawLine(svg.append('path'), validData, lineGen, false);
// draw the datapoint circle
this.drawDataPoints(validData, 0, xScale, yScale);
@@ -291,7 +334,7 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
const xPos = d3.pointer(e)[0];
const x0 = Math.min(data.length - 1, bisect(data, xScale.invert(xPos - 5))); // shift x by -5 so that you can reach points on the left-side axis
const d0 = data[x0];
- if (!d0) return;
+ if (d0) this.updateTooltip(higlightFocusPt, xScale, d0, yScale, tooltip);
this.updateTooltip(higlightFocusPt, xScale, d0, yScale, tooltip);
});
@@ -327,7 +370,7 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
svg.append('text')
.attr('transform', 'rotate(-90)' + ' ' + 'translate( 0, ' + -10 + ')')
.attr('x', -(height / 2))
- .attr('y', -20)
+ .attr('y', -30)
.attr('height', 20)
.attr('width', 20)
.style('text-anchor', 'middle')
@@ -356,6 +399,17 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
else if (this._props.axes.length > 0) titleAccessor = titleAccessor + this._props.axes[0];
if (!this._props.layoutDoc[titleAccessor]) this._props.layoutDoc[titleAccessor] = this.defaultGraphTitle;
const selectedPt = this._currSelected ? `{ ${this._props.axes[0]}: ${this._currSelected.x} ${this._props.axes[1]}: ${this._currSelected.y} }` : 'none';
+ var selectedTitle = "";
+ if (this._currSelected && this._props.titleCol){
+ selectedTitle+= "\n" + this._props.titleCol + ": "
+ this._tableData.forEach(each => {
+ var mapThisEntry = false;
+ if (this._currSelected.x==each[this._props.axes[0]] && this._currSelected.y==each[this._props.axes[1]]) mapThisEntry = true;
+ else if (this._currSelected.y==each[this._props.axes[0]] && this._currSelected.x==each[this._props.axes[1]]) mapThisEntry = true;
+ if (mapThisEntry) selectedTitle += each[this._props.titleCol] + ", ";
+ })
+ selectedTitle = selectedTitle.slice(0,-1).slice(0,-1);
+ }
if (this._lineChartData.length > 0 || !this.parentViz || this.parentViz.length == 0) {
return this._props.axes.length >= 2 && /\d/.test(this._props.records[0][this._props.axes[0]]) && /\d/.test(this._props.records[0][this._props.axes[1]]) ? (
<div className="chart-container" style={{ width: this._props.width + this._props.margin.right }}>
@@ -375,9 +429,9 @@ export class LineChart extends ObservableReactComponent<LineChartProps> {
{selectedPt != 'none' ? (
<div className={'selected-data'}>
{`Selected: ${selectedPt}`}
+ {`${selectedTitle}`}
<Button
onClick={e => {
- console.log('test plzz');
this._props.vizBox.sidebarBtnDown;
this._props.vizBox.sidebarAddDocument;
}}></Button>
diff --git a/src/client/views/nodes/DataVizBox/components/PieChart.tsx b/src/client/views/nodes/DataVizBox/components/PieChart.tsx
index a922a200b..fc23f47de 100644
--- a/src/client/views/nodes/DataVizBox/components/PieChart.tsx
+++ b/src/client/views/nodes/DataVizBox/components/PieChart.tsx
@@ -19,6 +19,7 @@ export interface PieChartProps {
Document: Doc;
layoutDoc: Doc;
axes: string[];
+ titleCol: string;
records: { [key: string]: any }[];
width: number;
height: number;
@@ -339,14 +340,26 @@ export class PieChart extends ObservableReactComponent<PieChartProps> {
var selected: string;
var curSelectedSliceName = '';
if (this._currSelected) {
+ selected = '{ ';
const sliceTitle = this._currSelected[this._props.axes[0]];
curSelectedSliceName = StrCast(sliceTitle) ? StrCast(sliceTitle).replace(/\$/g, '').replace(/\%/g, '').replace(/\#/g, '').replace(/\</g, '') : sliceTitle;
- selected = '{ ';
Object.keys(this._currSelected).map(key => {
key != '' ? (selected += key + ': ' + this._currSelected[key] + ', ') : '';
});
selected = selected.substring(0, selected.length - 2);
selected += ' }';
+ if (this._props.titleCol!="" && (!this._currSelected["frequency"] || this._currSelected["frequency"]<10)){
+ selected+= "\n" + this._props.titleCol + ": "
+ this._tableData.forEach(each => {
+ if (this._currSelected[this._props.axes[0]]==each[this._props.axes[0]]) {
+ if (this._props.axes[1]){
+ if (this._currSelected[this._props.axes[1]]==each[this._props.axes[1]]) selected+= each[this._props.titleCol] + ", ";
+ }
+ else selected+= each[this._props.titleCol] + ", ";
+ }
+ })
+ selected = selected.slice(0,-1).slice(0,-1);
+ }
} else selected = 'none';
var selectedSliceColor;
var sliceColors = StrListCast(this._props.layoutDoc.dataViz_pie_sliceColors).map(each => each.split('::'));
diff --git a/src/client/views/nodes/DataVizBox/components/TableBox.tsx b/src/client/views/nodes/DataVizBox/components/TableBox.tsx
index ed44d9269..1b239b5e5 100644
--- a/src/client/views/nodes/DataVizBox/components/TableBox.tsx
+++ b/src/client/views/nodes/DataVizBox/components/TableBox.tsx
@@ -18,7 +18,9 @@ interface TableBoxProps {
layoutDoc: Doc;
records: { [key: string]: any }[];
selectAxes: (axes: string[]) => void;
+ selectTitleCol: (titleCol: string) => void;
axes: string[];
+ titleCol: string;
width: number;
height: number;
margin: {
@@ -83,14 +85,12 @@ export class TableBox extends ObservableReactComponent<TableBoxProps> {
return this._props.docView?.()?.screenToViewTransform().Scale || 1;
}
@computed get rowHeight() {
- console.log('scale = ' + this.viewScale + ' table = ' + this._tableHeight + ' ids = ' + this._tableDataIds.length);
return (this.viewScale * this._tableHeight) / this._tableDataIds.length;
}
@computed get startID() {
return this.rowHeight ? Math.max(Math.floor(this._scrollTop / this.rowHeight) - 1, 0) : 0;
}
@computed get endID() {
- console.log('start = ' + this.startID + ' container = ' + this._tableContainerHeight + ' scale = ' + this.viewScale + ' row = ' + this.rowHeight);
return Math.ceil(this.startID + (this._tableContainerHeight * this.viewScale) / (this.rowHeight || 1));
}
@action handleScroll = () => {
@@ -155,11 +155,18 @@ export class TableBox extends ObservableReactComponent<TableBoxProps> {
},
emptyFunction,
action(e => {
- const newAxes = this._props.axes;
- if (newAxes.includes(col)) newAxes.splice(newAxes.indexOf(col), 1);
- else if (newAxes.length > 1) newAxes[1] = col;
- else newAxes.push(col);
- this._props.selectAxes(newAxes);
+ if (e.shiftKey){
+ if (this._props.titleCol == col) this._props.titleCol = "";
+ else this._props.titleCol = col;
+ this._props.selectTitleCol(this._props.titleCol);
+ }
+ else{
+ const newAxes = this._props.axes;
+ if (newAxes.includes(col)) newAxes.splice(newAxes.indexOf(col), 1);
+ else if (newAxes.length > 2) newAxes[newAxes.length-1] = col;
+ else newAxes.push(col);
+ this._props.selectAxes(newAxes);
+ }
})
);
};
@@ -213,8 +220,15 @@ export class TableBox extends ObservableReactComponent<TableBoxProps> {
<th
key={this.columns.indexOf(col)}
style={{
- color: this._props.axes.slice().reverse().lastElement() === col ? 'darkgreen' : this._props.axes.lastElement() === col ? 'darkred' : undefined,
- background: this._props.axes.slice().reverse().lastElement() === col ? '#E3fbdb' : this._props.axes.lastElement() === col ? '#Fbdbdb' : undefined,
+ color: this._props.axes.slice().reverse().lastElement() === col ? 'darkgreen'
+ : (this._props.axes.length>2 && this._props.axes.lastElement() === col) ? 'darkred'
+ : (this._props.axes.lastElement()===col || (this._props.axes.length>2 && this._props.axes[1]==col))? 'darkblue' : undefined,
+ background: this._props.axes.slice().reverse().lastElement() === col ? '#E3fbdb'
+ : (this._props.axes.length>2 && this._props.axes.lastElement() === col) ? '#Fbdbdb'
+ : (this._props.axes.lastElement()===col || (this._props.axes.length>2 && this._props.axes[1]==col))? '#c6ebf7' : undefined,
+ // blue: #ADD8E6
+ // green: #E3fbdb
+ // red: #Fbdbdb
fontWeight: 'bolder',
border: '3px solid black',
}}
@@ -236,7 +250,11 @@ export class TableBox extends ObservableReactComponent<TableBoxProps> {
background: NumListCast(this._props.layoutDoc.dataViz_highlitedRows).includes(rowId) ? 'lightYellow' : NumListCast(this._props.layoutDoc.dataViz_selectedRows).includes(rowId) ? 'lightgrey' : '',
}}>
{this.columns.map(col => {
- const colSelected = this._props.axes.length > 1 ? this._props.axes[0] == col || this._props.axes[1] == col : this._props.axes.length > 0 ? this._props.axes[0] == col : false;
+ var colSelected = false;
+ if (this._props.axes.length>2) colSelected = this._props.axes[0]==col || this._props.axes[1]==col || this._props.axes[2]==col;
+ else if (this._props.axes.length>1) colSelected = this._props.axes[0]==col || this._props.axes[1]==col;
+ else if (this._props.axes.length>0) colSelected = this._props.axes[0]==col;
+ if (this._props.titleCol==col) colSelected = true;
return (
<td key={this.columns.indexOf(col)} style={{ border: colSelected ? '3px solid black' : '1px solid black', fontWeight: colSelected ? 'bolder' : 'normal' }}>
<div className="tableBox-cell">{this._props.records[rowId][col]}</div>
diff --git a/src/client/views/nodes/DataVizBox/utils/D3Utils.ts b/src/client/views/nodes/DataVizBox/utils/D3Utils.ts
index 10bfb0c64..336935d23 100644
--- a/src/client/views/nodes/DataVizBox/utils/D3Utils.ts
+++ b/src/client/views/nodes/DataVizBox/utils/D3Utils.ts
@@ -61,6 +61,6 @@ export const yGrid = (g: d3.Selection<SVGGElement, unknown, null, undefined>, wi
);
};
-export const drawLine = (p: d3.Selection<SVGPathElement, unknown, null, undefined>, dataPts: DataPoint[], lineGen: d3.Line<DataPoint>) => {
- p.datum(dataPts).attr('fill', 'none').attr('stroke', 'rgba(53, 162, 235, 0.5)').attr('stroke-width', 2).attr('class', 'line').attr('d', lineGen);
+export const drawLine = (p: d3.Selection<SVGPathElement, unknown, null, undefined>, dataPts: DataPoint[], lineGen: d3.Line<DataPoint>, extra: boolean) => {
+ p.datum(dataPts).attr('fill', 'none').attr('stroke', 'rgba(53, 162, 235, 0.5)').attr('stroke-width', 2).attr('stroke', extra? 'blue' : 'black').attr('class', 'line').attr('d', lineGen);
};
diff --git a/src/client/views/nodes/DocumentView.scss b/src/client/views/nodes/DocumentView.scss
index c4dab16fb..5421c1b50 100644
--- a/src/client/views/nodes/DocumentView.scss
+++ b/src/client/views/nodes/DocumentView.scss
@@ -180,7 +180,6 @@
.documentView-titleWrapper,
.documentView-titleWrapper-hover {
- overflow: hidden;
color: $black;
transform-origin: top left;
top: 0;
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 73c13b5dd..29266bd8e 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -1,11 +1,10 @@
import { IconProp } from '@fortawesome/fontawesome-svg-core';
-import { Dropdown, DropdownType, Type } from 'browndash-components';
import { Howl } from 'howler';
import { IReactionDisposer, action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Bounce, Fade, Flip, JackInTheBox, Roll, Rotate, Zoom } from 'react-awesome-reveal';
-import { Utils, emptyFunction, isTargetChildOf as isParentOf, lightOrDark, returnEmptyString, returnFalse, returnTrue, returnVal, simulateMouseClick } from '../../../Utils';
+import { DivWidth, Utils, emptyFunction, isTargetChildOf as isParentOf, lightOrDark, returnEmptyString, returnFalse, returnTrue, returnVal, simulateMouseClick } from '../../../Utils';
import { Doc, DocListCast, Field, Opt, StrListCast } from '../../../fields/Doc';
import { AclPrivate, Animation, AudioPlay, DocData, DocViews } from '../../../fields/DocSymbols';
import { Id } from '../../../fields/FieldSymbols';
@@ -48,6 +47,7 @@ import { KeyValueBox } from './KeyValueBox';
import { LinkAnchorBox } from './LinkAnchorBox';
import { FormattedTextBox } from './formattedText/FormattedTextBox';
import { PresEffect, PresEffectDirection } from './trails';
+import { FieldsDropdown } from '../FieldsDropdown';
interface Window {
MediaRecorder: MediaRecorder;
}
@@ -413,7 +413,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
if (!Utils.isClick(e.clientX, e.clientY, this._downX, this._downY, Date.now())) {
this.cleanupPointerEvents();
this._longPressSelector && clearTimeout(this._longPressSelector);
- this.startDragging(this._downX, this._downY, ((e.ctrlKey || e.altKey) && 'embed') || ((this.Document.dragAction || this._props.dragAction || undefined) as dropActionType));
+ this.startDragging(this._downX, this._downY, ((e.ctrlKey || e.altKey) && dropActionType.embed) || ((this.Document.dragAction || this._props.dragAction || undefined) as dropActionType));
}
};
@@ -518,7 +518,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
};
onContextMenu = (e?: React.MouseEvent, pageX?: number, pageY?: number) => {
- if (e && this.layoutDoc._layout_hideContextMenu && Doc.noviceMode) {
+ if (e && this.layoutDoc.layout_hideContextMenu && Doc.noviceMode) {
e.preventDefault();
e.stopPropagation();
//!this._props.isSelected(true) && SelectionManager.SelectView(this.DocumentView(), false);
@@ -702,7 +702,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
panelHeight = () => this._props.PanelHeight() - this.headerMargin;
screenToLocalContent = () => this._props.ScreenToLocalTransform().translate(0, -this.headerMargin);
onClickFunc = this.disableClickScriptFunc ? undefined : () => this.onClickHandler;
- setHeight = (height: number) => !this._props.suppressSetHeight && (this.layoutDoc._height = height);
+ setHeight = (height: number) => !this._props.suppressSetHeight && (this.layoutDoc._height = Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), height));
setContentView = action((view: ViewBoxInterface) => (this._componentView = view));
isContentActive = (): boolean | undefined => this._isContentActive;
childFilters = () => [...this._props.childFilters(), ...StrListCast(this.layoutDoc.childFilters)];
@@ -784,28 +784,25 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
}
captionStyleProvider = (doc: Opt<Doc>, props: Opt<FieldViewProps>, property: string) => this._props?.styleProvider?.(doc, props, property + ':caption');
- fieldsDropdown = (reqdFields: string[], dropdownWidth: number, placeholder: string, onChange: (val: string | number) => void, onClose: () => void) => {
- const filteredFields = Object.entries(DocOptions).reduce((set, [field, opts]) => (opts.filterable ? set.add(field) : set), new Set(reqdFields));
+ fieldsDropdown = (placeholder: string) => {
return (
- <div style={{ width: dropdownWidth }}>
- <div
- ref={action((r: any) => r && (this._titleDropDownInnerWidth = Number(getComputedStyle(r).width.replace('px', ''))))}
- onPointerDown={action(e => (this._changingTitleField = true))}
- style={{ width: 'max-content', transformOrigin: 'left', transform: `scale(${this.titleHeight / 30 /* height of Dropdown */})` }}>
- <Dropdown
- activeChanged={action(isOpen => !isOpen && (this._changingTitleField = false))}
- selectedVal={placeholder}
- setSelectedVal={onChange}
- color={SettingsManager.userColor}
- background={SettingsManager.userVariantColor}
- type={Type.TERT}
- closeOnSelect={true}
- dropdownType={DropdownType.SELECT}
- items={Array.from(filteredFields).map(facet => ({ val: facet, text: facet }))}
- width={100}
- fillWidth
- />
- </div>
+ <div
+ ref={action((r: any) => r && (this._titleDropDownInnerWidth = DivWidth(r)))}
+ onPointerDown={action(e => (this._changingTitleField = true))}
+ style={{ width: 'max-content', background: SettingsManager.userBackgroundColor, color: SettingsManager.userColor, transformOrigin: 'left', transform: `scale(${this.titleHeight / 30 /* height of Dropdown */})` }}>
+ <FieldsDropdown
+ Document={this.Document}
+ placeholder={placeholder}
+ selectFunc={action((field: string | number) => {
+ if (this.layoutDoc.layout_showTitle) {
+ this.layoutDoc._layout_showTitle = field;
+ } else if (!this._props.layout_showTitle) {
+ Doc.UserDoc().layout_showTitle = field;
+ }
+ this._changingTitleField = false;
+ })}
+ menuClose={action(() => (this._changingTitleField = false))}
+ />
</div>
);
};
@@ -839,22 +836,7 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
background,
pointerEvents: (!this.disableClickScriptFunc && this.onClickHandler) || this.Document.ignoreClick ? 'none' : this.isContentActive() || this._props.isDocumentActive?.() ? 'all' : undefined,
}}>
- {!dropdownWidth
- ? null
- : this.fieldsDropdown(
- [StrCast(this.layoutDoc.layout_showTitle)],
- dropdownWidth,
- StrCast(this.layoutDoc.layout_showTitle).split(':')[0],
- action((field: string | number) => {
- if (this.layoutDoc.layout_showTitle) {
- this.layoutDoc._layout_showTitle = field;
- } else if (!this._props.layout_showTitle) {
- Doc.UserDoc().layout_showTitle = field;
- }
- this._changingTitleField = false;
- }),
- action(() => (this._changingTitleField = false))
- )}
+ {!dropdownWidth ? null : <div style={{ width: dropdownWidth }}>{this.fieldsDropdown(showTitle)}</div>}
<div
style={{
width: `calc(100% - ${dropdownWidth}px)`,
@@ -864,10 +846,12 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
}}>
<EditableView
ref={this._titleRef}
- contents={showTitle
- .split(';')
- .map(field => targetDoc[field.trim()]?.toString())
- .join(' \\ ')}
+ contents={
+ showTitle
+ .split(';')
+ .map(field => Field.toString(targetDoc[field.trim()] as Field))
+ .join(' \\ ') || '-unset-'
+ }
display="block"
oneLine={true}
fontSize={(this.titleHeight / 15) * 10}
@@ -1500,8 +1484,8 @@ ScriptingGlobals.add(function updateTagsCollection(collection: Doc) {
let created = false;
const matchedDocs = matchedTags
.filter(tagDoc => !Doc.AreProtosEqual(collection, tagDoc))
- .map(tagDoc => {
- let embedding = collectionDocs.find(doc => Doc.AreProtosEqual(tagDoc, doc));
+ .reduce((aset, tagDoc) => {
+ let embedding = Array.from(aset).find(doc => Doc.AreProtosEqual(tagDoc, doc)) ?? collectionDocs.find(doc => Doc.AreProtosEqual(tagDoc, doc));
if (!embedding) {
embedding = Doc.MakeEmbedding(tagDoc);
embedding.x = wid;
@@ -1510,9 +1494,11 @@ ScriptingGlobals.add(function updateTagsCollection(collection: Doc) {
wid += NumCast(tagDoc._width);
created = true;
}
- return embedding;
- });
+ Doc.SetContainer(embedding, collection);
+ aset.add(embedding);
+ return aset;
+ }, new Set<Doc>());
- created && (collection[DocData].data = new List<Doc>(matchedDocs));
+ created && (collection[DocData].data = new List<Doc>(Array.from(matchedDocs)));
return true;
});
diff --git a/src/client/views/nodes/EquationBox.tsx b/src/client/views/nodes/EquationBox.tsx
index 2e03a766a..50d4c7c78 100644
--- a/src/client/views/nodes/EquationBox.tsx
+++ b/src/client/views/nodes/EquationBox.tsx
@@ -11,6 +11,7 @@ import { LightboxView } from '../LightboxView';
import './EquationBox.scss';
import { FieldView, FieldViewProps } from './FieldView';
import EquationEditor from './formattedText/EquationEditor';
+import { DivHeight, DivWidth } from '../../../Utils';
@observer
export class EquationBox extends ViewBoxBaseComponent<FieldViewProps>() {
@@ -57,8 +58,8 @@ export class EquationBox extends ViewBoxBaseComponent<FieldViewProps>() {
@action
keyPressed = (e: KeyboardEvent) => {
- const _height = Number(getComputedStyle(this._ref.current!.element.current).height.replace('px', ''));
- const _width = Number(getComputedStyle(this._ref.current!.element.current).width.replace('px', ''));
+ const _height = DivHeight(this._ref.current!.element.current);
+ const _width = DivWidth(this._ref.current!.element.current);
if (e.key === 'Enter') {
const nextEq = Docs.Create.EquationDocument(e.shiftKey ? StrCast(this.dataDoc.text) : 'x', {
title: '# math',
diff --git a/src/client/views/nodes/FontIconBox/FontIconBox.tsx b/src/client/views/nodes/FontIconBox/FontIconBox.tsx
index 3577cc8d9..f02ad7300 100644
--- a/src/client/views/nodes/FontIconBox/FontIconBox.tsx
+++ b/src/client/views/nodes/FontIconBox/FontIconBox.tsx
@@ -1,13 +1,13 @@
import { IconProp } from '@fortawesome/fontawesome-svg-core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Button, ColorPicker, Dropdown, DropdownType, EditableText, IconButton, IListItemProps, MultiToggle, NumberDropdown, NumberDropdownType, Popup, Size, Toggle, ToggleType, Type } from 'browndash-components';
-import { computed, makeObservable, observable } from 'mobx';
+import { action, computed, makeObservable, observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { Doc, DocListCast, StrListCast } from '../../../../fields/Doc';
import { ScriptField } from '../../../../fields/ScriptField';
import { BoolCast, Cast, DocCast, NumCast, ScriptCast, StrCast } from '../../../../fields/Types';
-import { emptyFunction, setupMoveUpEvents, Utils } from '../../../../Utils';
+import { emptyFunction, returnTrue, setupMoveUpEvents, Utils } from '../../../../Utils';
import { CollectionViewType, DocumentType } from '../../../documents/DocumentTypes';
import { SelectionManager } from '../../../util/SelectionManager';
import { SettingsManager } from '../../../util/SettingsManager';
@@ -81,9 +81,13 @@ export class FontIconBox extends ViewBoxBaseComponent<ButtonProps>() {
}
};
- // Determining UI Specs
+ /**
+ * this chooses the appropriate title for the label
+ * if the Document is a template, then we use the title of the data doc that it renders
+ * otherwise, we use the Document's title itself.
+ */
@computed get label() {
- return StrCast(this.dataDoc.icon_label, StrCast(this.Document.title));
+ return StrCast(this.Document.isTemplateDoc ? this.dataDoc.title : this.Document.title);
}
Icon = (color: string, iconFalse?: boolean) => {
let icon;
@@ -308,13 +312,16 @@ export class FontIconBox extends ViewBoxBaseComponent<ButtonProps>() {
);
}
+ @observable _hackToRecompute = 0; // bcz: ugh ... <Toggle>'s toggleStatus initializes but doesn't track its value after a click. so a click that does nothing to the toggle state will toggle the button anyway. this forces the Toggle to re-read the ToggleStatus value.
+
@computed get toggleButton() {
// Determine the type of toggle button
const buttonText = StrCast(this.dataDoc.buttonText);
const tooltip = StrCast(this.Document.toolTip);
const script = ScriptCast(this.Document.onClick);
- const toggleStatus = script ? script.script.run({ this: this.Document, self: this.Document, value: undefined, _readOnly_: true }).result : false;
+ const double = ScriptCast(this.Document.onDoubleClick);
+ const toggleStatus = script?.script.run({ this: this.Document, self: this.Document, value: undefined, _readOnly_: true }).result ?? false;
// Colors
const color = this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.Color);
const backgroundColor = this._props.styleProvider?.(this.layoutDoc, this._props, StyleProp.BackgroundColor);
@@ -330,7 +337,19 @@ export class FontIconBox extends ViewBoxBaseComponent<ButtonProps>() {
//background={SettingsManager.userBackgroundColor}
icon={this.Icon(color)!}
label={this.label}
- onPointerDown={() => script.script.run({ this: this.Document, self: this.Document, value: !toggleStatus, _readOnly_: false })}
+ onPointerDown={e =>
+ setupMoveUpEvents(
+ this,
+ e,
+ returnTrue,
+ emptyFunction,
+ action((e, doubleTap) => {
+ (!doubleTap || !double) && script?.script.run({ this: this.Document, self: this.Document, value: !toggleStatus, _readOnly_: false });
+ doubleTap && double?.script.run({ this: this.Document, self: this.Document, value: !toggleStatus, _readOnly_: false });
+ this._hackToRecompute = this._hackToRecompute + 1;
+ })
+ )
+ }
/>
);
}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index 923aead64..251235b93 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -141,6 +141,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() impl
const targetField = Doc.LayoutFieldKey(layoutDoc);
const targetDoc = layoutDoc[DocData];
if (targetDoc[targetField] instanceof ImageField) {
+ added = true;
this.dataDoc[this.fieldKey] = ObjectField.MakeCopy(targetDoc[targetField] as ImageField);
Doc.SetNativeWidth(this.dataDoc, Doc.NativeWidth(targetDoc), this.fieldKey);
Doc.SetNativeHeight(this.dataDoc, Doc.NativeHeight(targetDoc), this.fieldKey);
diff --git a/src/client/views/nodes/LabelBox.tsx b/src/client/views/nodes/LabelBox.tsx
index fd3074a88..be20b5934 100644
--- a/src/client/views/nodes/LabelBox.tsx
+++ b/src/client/views/nodes/LabelBox.tsx
@@ -17,12 +17,8 @@ import './LabelBox.scss';
import { PinProps, PresBox } from './trails';
import { Docs } from '../../documents/Documents';
-export interface LabelBoxProps extends FieldViewProps {
- label?: string;
-}
-
@observer
-export class LabelBox extends ViewBoxBaseComponent<LabelBoxProps>() {
+export class LabelBox extends ViewBoxBaseComponent<FieldViewProps>() {
public static LayoutString(fieldKey: string) {
return FieldView.LayoutString(LabelBox, fieldKey);
}
@@ -32,7 +28,7 @@ export class LabelBox extends ViewBoxBaseComponent<LabelBoxProps>() {
private dropDisposer?: DragManager.DragDropDisposer;
private _timeout: any;
- constructor(props: LabelBoxProps) {
+ constructor(props: FieldViewProps) {
super(props);
makeObservable(this);
}
@@ -45,7 +41,7 @@ export class LabelBox extends ViewBoxBaseComponent<LabelBoxProps>() {
}
@computed get Title() {
- return this.dataDoc.title_custom ? StrCast(this.Document.title) : this._props.label ? this._props.label : Field.toString(this.dataDoc[this.fieldKey] as Field);
+ return Field.toString(this.dataDoc[this.fieldKey] as Field);
}
protected createDropTarget = (ele: HTMLDivElement) => {
diff --git a/src/client/views/nodes/LinkAnchorBox.tsx b/src/client/views/nodes/LinkAnchorBox.tsx
index 00e1f04c5..0a4325d8c 100644
--- a/src/client/views/nodes/LinkAnchorBox.tsx
+++ b/src/client/views/nodes/LinkAnchorBox.tsx
@@ -5,7 +5,7 @@ import { Utils, emptyFunction, setupMoveUpEvents } from '../../../Utils';
import { Doc } from '../../../fields/Doc';
import { NumCast, StrCast } from '../../../fields/Types';
import { TraceMobx } from '../../../fields/util';
-import { DragManager } from '../../util/DragManager';
+import { DragManager, dropActionType } from '../../util/DragManager';
import { LinkFollower } from '../../util/LinkFollower';
import { SelectionManager } from '../../util/SelectionManager';
import { ViewBoxBaseComponent } from '../DocComponent';
@@ -54,7 +54,7 @@ export class LinkAnchorBox extends ViewBoxBaseComponent<FieldViewProps>() {
const separation = Math.sqrt((pt[0] - e.clientX) * (pt[0] - e.clientX) + (pt[1] - e.clientY) * (pt[1] - e.clientY));
if (separation > 100) {
const dragData = new DragManager.DocumentDragData([this.Document]);
- dragData.dropAction = 'embed';
+ dragData.dropAction = dropActionType.embed;
dragData.dropPropertiesToRemove = ['link_anchor_1_x', 'link_anchor_1_y', 'link_anchor_2_x', 'link_anchor_2_y', 'onClick'];
DragManager.StartDocumentDrag([this._ref.current!], dragData, pt[0], pt[1]);
return true;
diff --git a/src/client/views/nodes/MapBox/MapBox.tsx b/src/client/views/nodes/MapBox/MapBox.tsx
index c185c66fc..927e6fad4 100644
--- a/src/client/views/nodes/MapBox/MapBox.tsx
+++ b/src/client/views/nodes/MapBox/MapBox.tsx
@@ -379,7 +379,7 @@ export class MapBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implem
});
const targetCreator = (annotationOn: Doc | undefined) => {
- const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, undefined, annotationOn, 'yellow');
+ const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, annotationOn, 'yellow');
FormattedTextBox.SetSelectOnLoad(target);
return target;
};
@@ -592,7 +592,7 @@ export class MapBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implem
/// this should use SELECTED pushpin for lat/long if there is a selection, otherwise CENTER
const anchor = Docs.Create.ConfigDocument({
title: 'MapAnchor:' + this.Document.title,
- text: StrCast(this.selectedPinOrRoute?.map) || StrCast(this.Document.map) || 'map location',
+ text: (StrCast(this.selectedPinOrRoute?.map) || StrCast(this.Document.map) || 'map location') as any,
config_latitude: NumCast((existingPin ?? this.selectedPinOrRoute)?.latitude ?? this.dataDoc.latitude),
config_longitude: NumCast((existingPin ?? this.selectedPinOrRoute)?.longitude ?? this.dataDoc.longitude),
config_map_zoom: NumCast(this.dataDoc.map_zoom),
diff --git a/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx b/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
index 8a5bd7ce6..3eb051dbf 100644
--- a/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
+++ b/src/client/views/nodes/MapboxMapBox/MapboxContainer.tsx
@@ -232,7 +232,7 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
});
const targetCreator = (annotationOn: Doc | undefined) => {
- const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, undefined, annotationOn, 'yellow');
+ const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, annotationOn, 'yellow');
FormattedTextBox.SetSelectOnLoad(target);
return target;
};
@@ -466,7 +466,7 @@ export class MapBoxContainer extends ViewBoxAnnotatableComponent<FieldViewProps>
/// this should use SELECTED pushpin for lat/long if there is a selection, otherwise CENTER
const anchor = Docs.Create.ConfigDocument({
title: 'MapAnchor:' + this.Document.title,
- text: StrCast(this.selectedPin?.map) || StrCast(this.Document.map) || 'map location',
+ text: (StrCast(this.selectedPin?.map) || StrCast(this.Document.map) || 'map location') as any,
config_latitude: NumCast((existingPin ?? this.selectedPin)?.latitude ?? this.dataDoc.latitude),
config_longitude: NumCast((existingPin ?? this.selectedPin)?.longitude ?? this.dataDoc.longitude),
config_map_zoom: NumCast(this.dataDoc.map_zoom),
diff --git a/src/client/views/nodes/RecordingBox/RecordingBox.tsx b/src/client/views/nodes/RecordingBox/RecordingBox.tsx
index f6d94ce05..e38a42b29 100644
--- a/src/client/views/nodes/RecordingBox/RecordingBox.tsx
+++ b/src/client/views/nodes/RecordingBox/RecordingBox.tsx
@@ -11,7 +11,7 @@ import { Upload } from '../../../../server/SharedMediaTypes';
import { DocumentType } from '../../../documents/DocumentTypes';
import { Docs } from '../../../documents/Documents';
import { DocumentManager } from '../../../util/DocumentManager';
-import { DragManager } from '../../../util/DragManager';
+import { DragManager, dropActionType } from '../../../util/DragManager';
import { ScriptingGlobals } from '../../../util/ScriptingGlobals';
import { Presentation } from '../../../util/TrackMovements';
import { undoBatch } from '../../../util/UndoManager';
@@ -251,7 +251,7 @@ ScriptingGlobals.add(function resumeWorkspaceReplaying(value: Doc, _readOnly_: b
ScriptingGlobals.add(function startRecordingDrag(value: { doc: Doc | string; e: React.PointerEvent }) {
if (DocCast(value.doc)) {
- DragManager.StartDocumentDrag([value.e.target as HTMLElement], new DragManager.DocumentDragData([DocCast(value.doc)], 'embed'), value.e.clientX, value.e.clientY);
+ DragManager.StartDocumentDrag([value.e.target as HTMLElement], new DragManager.DocumentDragData([DocCast(value.doc)], dropActionType.embed), value.e.clientX, value.e.clientY);
value.e.preventDefault();
return true;
}
diff --git a/src/client/views/nodes/ScriptingBox.tsx b/src/client/views/nodes/ScriptingBox.tsx
index 89650889d..d9d0dbe3e 100644
--- a/src/client/views/nodes/ScriptingBox.tsx
+++ b/src/client/views/nodes/ScriptingBox.tsx
@@ -130,7 +130,7 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
}
})
);
- observer.observe(document.getElementsByClassName('scriptingBox')[0]);
+ observer.observe(document.getElementsByClassName('scriptingBox-outerDiv')[0]);
}
@action
@@ -811,22 +811,20 @@ export class ScriptingBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
render() {
TraceMobx();
return (
- <div className={`scriptingBox`} onContextMenu={this.specificContextMenu} onPointerUp={!this._function ? this.suggestionPos : undefined}>
- <div className="scriptingBox-outerDiv" onWheel={e => this._props.isSelected() && e.stopPropagation()}>
- {this._paramSuggestion ? (
- <div className="boxed" ref={this._suggestionRef} style={{ left: this._suggestionBoxX + 20, top: this._suggestionBoxY - 15, display: 'inline' }}>
- {' '}
- {this._scriptSuggestedParams}{' '}
- </div>
- ) : null}
- {!this._applied && !this._function ? this.renderScriptingInputs : null}
- {this._applied && !this._function ? this.renderParamsInputs() : null}
- {!this._applied && this._function ? this.renderFunctionInputs() : null}
-
- {!this._applied && !this._function ? this.renderScriptingTools() : null}
- {this._applied && !this._function ? this.renderTools('Run', () => this.onRun()) : null}
- {!this._applied && this._function ? this.renderTools('Create Function', () => this.onCreate()) : null}
- </div>
+ <div className="scriptingBox-outerDiv" onContextMenu={this.specificContextMenu} onPointerUp={!this._function ? this.suggestionPos : undefined} onWheel={e => this._props.isSelected() && e.stopPropagation()}>
+ {this._paramSuggestion ? (
+ <div className="boxed" ref={this._suggestionRef} style={{ left: this._suggestionBoxX + 20, top: this._suggestionBoxY - 15, display: 'inline' }}>
+ {' '}
+ {this._scriptSuggestedParams}{' '}
+ </div>
+ ) : null}
+ {!this._applied && !this._function ? this.renderScriptingInputs : null}
+ {this._applied && !this._function ? this.renderParamsInputs() : null}
+ {!this._applied && this._function ? this.renderFunctionInputs() : null}
+
+ {!this._applied && !this._function ? this.renderScriptingTools() : null}
+ {this._applied && !this._function ? this.renderTools('Run', () => this.onRun()) : null}
+ {!this._applied && this._function ? this.renderTools('Create Function', () => this.onCreate()) : null}
</div>
);
}
diff --git a/src/client/views/nodes/VideoBox.tsx b/src/client/views/nodes/VideoBox.tsx
index 40647feff..b2ae7201c 100644
--- a/src/client/views/nodes/VideoBox.tsx
+++ b/src/client/views/nodes/VideoBox.tsx
@@ -31,6 +31,7 @@ import { FocusViewOptions, FieldView, FieldViewProps } from './FieldView';
import { RecordingBox } from './RecordingBox';
import { PinProps, PresBox } from './trails';
import './VideoBox.scss';
+import { dropActionType } from '../../util/DragManager';
/**
* VideoBox
@@ -335,7 +336,7 @@ export class VideoBox extends ViewBoxAnnotatableComponent<FieldViewProps>() impl
this._props.addDocument?.(imageSnapshot);
const link = DocUtils.MakeLink(imageSnapshot, this.getAnchor(true), { link_relationship: 'video snapshot' });
link && (DocCast(link.link_anchor_2)[DocData].timecodeToHide = NumCast(DocCast(link.link_anchor_2).timecodeToShow) + 3);
- setTimeout(() => downX !== undefined && downY !== undefined && DocumentManager.Instance.getFirstDocumentView(imageSnapshot)?.startDragging(downX, downY, 'move', true));
+ setTimeout(() => downX !== undefined && downY !== undefined && DocumentManager.Instance.getFirstDocumentView(imageSnapshot)?.startDragging(downX, downY, dropActionType.move, true));
};
getAnchor = (addAsAnnotation: boolean, pinProps?: PinProps) => {
diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx
index 2c5398e40..c9340edc0 100644
--- a/src/client/views/nodes/WebBox.tsx
+++ b/src/client/views/nodes/WebBox.tsx
@@ -14,7 +14,7 @@ import { listSpec } from '../../../fields/Schema';
import { Cast, NumCast, StrCast, WebCast } from '../../../fields/Types';
import { ImageField, WebField } from '../../../fields/URLField';
import { TraceMobx } from '../../../fields/util';
-import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, emptyFunction, getWordAtPoint, lightOrDark, returnFalse, returnOne, returnZero, setupMoveUpEvents, smoothScroll, stringHash, Utils } from '../../../Utils';
+import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, DivHeight, emptyFunction, getWordAtPoint, lightOrDark, returnFalse, returnOne, returnZero, setupMoveUpEvents, smoothScroll, stringHash, Utils } from '../../../Utils';
import { Docs, DocUtils } from '../../documents/Documents';
import { DocumentManager } from '../../util/DocumentManager';
import { ScriptingGlobals } from '../../util/ScriptingGlobals';
@@ -83,7 +83,7 @@ export class WebBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implem
return this.webField?.toString() || '';
}
@computed get _urlHash() {
- return ""+ (stringHash(this._url)??'');
+ return '' + (stringHash(this._url) ?? '');
}
@computed get scrollHeight() {
return Math.max(NumCast(this.layoutDoc._height), this._scrollHeight);
@@ -782,7 +782,7 @@ export class WebBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implem
className="webBox-htmlSpan"
ref={action((r: any) => {
if (r) {
- this._scrollHeight = Number(getComputedStyle(r).height.replace('px', ''));
+ this._scrollHeight = DivHeight(r);
this.lighttext = Array.from(r.children).some((c: any) => c instanceof HTMLElement && lightOrDark(getComputedStyle(c).color) !== Colors.WHITE);
}
})}
diff --git a/src/client/views/nodes/formattedText/DashFieldView.tsx b/src/client/views/nodes/formattedText/DashFieldView.tsx
index ec0b76aa8..5c4d850ad 100644
--- a/src/client/views/nodes/formattedText/DashFieldView.tsx
+++ b/src/client/views/nodes/formattedText/DashFieldView.tsx
@@ -4,24 +4,23 @@ import { action, computed, IReactionDisposer, makeObservable, observable, reacti
import { observer } from 'mobx-react';
import * as React from 'react';
import * as ReactDOM from 'react-dom/client';
-import Select from 'react-select';
import { Doc, DocListCast, Field } from '../../../../fields/Doc';
import { List } from '../../../../fields/List';
import { listSpec } from '../../../../fields/Schema';
import { SchemaHeaderField } from '../../../../fields/SchemaHeaderField';
-import { Cast, StrCast } from '../../../../fields/Types';
+import { Cast } from '../../../../fields/Types';
import { emptyFunction, returnFalse, returnZero, setupMoveUpEvents } from '../../../../Utils';
import { DocServer } from '../../../DocServer';
import { CollectionViewType } from '../../../documents/DocumentTypes';
import { Transform } from '../../../util/Transform';
-import { undoable, undoBatch } from '../../../util/UndoManager';
+import { undoBatch } from '../../../util/UndoManager';
import { AntimodeMenu, AntimodeMenuProps } from '../../AntimodeMenu';
import { SchemaTableCell } from '../../collections/collectionSchema/SchemaTableCell';
+import { FilterPanel } from '../../FilterPanel';
import { ObservableReactComponent } from '../../ObservableReactComponent';
import { OpenWhere } from '../DocumentView';
import './DashFieldView.scss';
import { FormattedTextBox } from './FormattedTextBox';
-import { FilterPanel } from '../../FilterPanel';
export class DashFieldView {
dom: HTMLDivElement; // container for label and value
@@ -29,7 +28,7 @@ export class DashFieldView {
node: any;
tbox: FormattedTextBox;
- unclickable = () => !this.tbox._props.isSelected() && this.node.marks.some((m: any) => m.type === this.tbox.EditorView?.state.schema.marks.linkAnchor && m.attrs.noPreview);
+ unclickable = () => !this.tbox._props.rootSelected?.() && this.node.marks.some((m: any) => m.type === this.tbox.EditorView?.state.schema.marks.linkAnchor && m.attrs.noPreview);
constructor(node: any, view: any, getPos: any, tbox: FormattedTextBox) {
this.node = node;
this.tbox = tbox;
@@ -108,12 +107,12 @@ export class DashFieldViewInternal extends ObservableReactComponent<IDashFieldVi
super(props);
makeObservable(this);
this._fieldKey = this._props.fieldKey;
- this._textBoxDoc = this._props.tbox.Document;
+ this._textBoxDoc = this._fieldKey.startsWith('_') ? this._props.tbox.Document : this._props.tbox.dataDoc;
if (this._props.docId) {
DocServer.GetRefField(this._props.docId).then(action(dashDoc => dashDoc instanceof Doc && (this._dashDoc = dashDoc)));
} else {
- this._dashDoc = this._props.tbox.Document;
+ this._dashDoc = this._fieldKey.startsWith('_') ? this._props.tbox.Document : this._props.tbox.dataDoc;
}
}
@@ -202,7 +201,7 @@ export class DashFieldViewInternal extends ObservableReactComponent<IDashFieldVi
style={{
width: this._props.width,
height: this._props.height,
- pointerEvents: this._props.tbox._props.isSelected() || this._props.tbox.isAnyChildContentActive?.() ? undefined : 'none',
+ pointerEvents: this._props.tbox._props.rootSelected?.() || this._props.tbox.isAnyChildContentActive?.() ? undefined : 'none',
}}>
{this._props.hideKey ? null : (
<span className="dashFieldView-labelSpan" title="click to see related tags" onPointerDown={this.onPointerDownLabelSpan}>
@@ -210,11 +209,13 @@ export class DashFieldViewInternal extends ObservableReactComponent<IDashFieldVi
</span>
)}
{this._props.fieldKey.startsWith('#') ? null : this.fieldValueContent}
- <select onChange={this.selectVal} style={{ height: '10px', width: '15px', fontSize: '12px', background: 'transparent' }}>
- {this.values.map(val => (
- <option value={val.value}>{val.label}</option>
- ))}
- </select>
+ {!this.values.length ? null : (
+ <select onChange={this.selectVal} style={{ height: '10px', width: '15px', fontSize: '12px', background: 'transparent' }}>
+ {this.values.map(val => (
+ <option value={val.value}>{val.label}</option>
+ ))}
+ </select>
+ )}
</div>
);
}
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index f2c4c6c8f..1ff7274f8 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -23,14 +23,14 @@ import { RichTextField } from '../../../../fields/RichTextField';
import { ComputedField } from '../../../../fields/ScriptField';
import { BoolCast, Cast, DocCast, FieldValue, NumCast, ScriptCast, StrCast } from '../../../../fields/Types';
import { GetEffectiveAcl, TraceMobx } from '../../../../fields/util';
-import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, emptyFunction, numberRange, returnFalse, returnZero, setupMoveUpEvents, smoothScroll, unimplementedFunction, Utils } from '../../../../Utils';
+import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, DivWidth, emptyFunction, numberRange, returnFalse, returnZero, setupMoveUpEvents, smoothScroll, unimplementedFunction, Utils } from '../../../../Utils';
import { gptAPICall, GPTCallType } from '../../../apis/gpt/GPT';
import { DocServer } from '../../../DocServer';
import { Docs, DocUtils } from '../../../documents/Documents';
import { CollectionViewType } from '../../../documents/DocumentTypes';
import { DictationManager } from '../../../util/DictationManager';
import { DocumentManager } from '../../../util/DocumentManager';
-import { DragManager } from '../../../util/DragManager';
+import { DragManager, dropActionType } from '../../../util/DragManager';
import { MakeTemplate } from '../../../util/DropConverter';
import { LinkManager } from '../../../util/LinkManager';
import { RTFMarkup } from '../../../util/RTFMarkup';
@@ -67,7 +67,6 @@ import { RichTextMenu, RichTextMenuPlugin } from './RichTextMenu';
import { RichTextRules } from './RichTextRules';
import { schema } from './schema_rts';
import { SummaryView } from './SummaryView';
-import Select from 'react-select';
// import * as applyDevTools from 'prosemirror-dev-tools';
@observer
export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implements ViewBoxInterface {
@@ -100,7 +99,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
private _dropDisposer?: DragManager.DragDropDisposer;
private _recordingStart: number = 0;
private _ignoreScroll = false;
- private _lastText = '';
private _hadDownFocus = false;
private _focusSpeed: Opt<number>;
private _keymap: any = undefined;
@@ -306,7 +304,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
e.preventDefault();
e.stopPropagation();
const targetCreator = (annotationOn?: Doc) => {
- const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, undefined, annotationOn);
+ const target = DocUtils.GetNewTextDoc('Note linked to ' + this.Document.title, 0, 0, 100, 100, annotationOn);
FormattedTextBox.SetSelectOnLoad(target);
return target;
};
@@ -374,9 +372,10 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
// if no template, or there's text that didn't come from the layout template, write it to the document. (if this is driven by a template, then this overwrites the template text which is intended)
if (force || ((this._finishingLink || this._props.isContentActive() || this._inDrop) && removeSelection(newJson) !== removeSelection(prevData?.Data))) {
const numstring = NumCast(dataDoc[this.fieldKey], null);
- dataDoc[this.fieldKey] = numstring !== undefined ? Number(newText) : new RichTextField(newJson, newText);
- dataDoc[this.fieldKey + '_noTemplate'] = true; // mark the data field as being split from the template if it has been edited
+ dataDoc[this.fieldKey] = numstring !== undefined ? Number(newText) : newText ? new RichTextField(newJson, newText) : undefined;
textChange && ScriptCast(this.layoutDoc.onTextChanged, null)?.script.run({ this: this.Document, text: newText });
+ this._applyingChange = ''; // turning this off here allows a Doc to retrieve data from template if noTemplate below is changed to false
+ dataDoc[this.fieldKey + '_noTemplate'] = newText ? true : false; // mark the data field as being split from the template if it has been edited
unchanged = false;
}
} else {
@@ -623,7 +622,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
docId: draggedDoc[Id],
float: 'unset',
});
- if (!['embed', 'copy'].includes((dropAction ?? '') as any)) {
+ if (![dropActionType.embed, dropActionType.copy].includes(dropAction ?? dropActionType.move)) {
added = dragData.removeDocument?.(draggedDoc) ? true : false;
} else {
added = true;
@@ -758,7 +757,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
@action
toggleSidebar = (preview: boolean = false) => {
const defaultSidebar = 250;
- const prevWidth = 1 - this.sidebarWidth() / Number(getComputedStyle(this._ref.current!).width.replace('px', ''));
+ const prevWidth = 1 - this.sidebarWidth() / DivWidth(this._ref.current!);
if (preview) this._showSidebar = true;
else {
this.layoutDoc[this.SidebarKey + '_freeform_scale_max'] = 1;
@@ -939,9 +938,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
description: 'Make Default Layout',
event: () => {
if (!this.layoutDoc.isTemplateDoc) {
- const title = StrCast(this.Document.title);
- this.Document.title = 'text';
- MakeTemplate(this.Document, true, title);
+ MakeTemplate(this.Document);
}
Doc.UserDoc().defaultTextLayout = new PrefetchProxy(this.Document);
Doc.AddDocToList(Cast(Doc.UserDoc().template_notes, Doc, null), 'data', this.Document);
@@ -1458,39 +1455,37 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
}
const selectOnLoad = Doc.AreProtosEqual(this._props.TemplateDataDocument ?? this.Document, FormattedTextBox.SelectOnLoad) && (!LightboxView.LightboxDoc || LightboxView.Contains(this.DocumentView?.()));
- if (this._editorView && selectOnLoad && !this._props.dontRegisterView && !this._props.dontSelectOnLoad && this.isActiveTab(this.ProseRef)) {
- const selLoadChar = FormattedTextBox.SelectOnLoadChar;
+ const selLoadChar = FormattedTextBox.SelectOnLoadChar;
+ if (selectOnLoad) {
FormattedTextBox.SelectOnLoad = undefined;
+ FormattedTextBox.SelectOnLoadChar = '';
+ }
+ if (this._editorView && selectOnLoad && !this._props.dontRegisterView && !this._props.dontSelectOnLoad && this.isActiveTab(this.ProseRef)) {
this._props.select(false);
if (selLoadChar) {
const $from = this._editorView.state.selection.anchor ? this._editorView.state.doc.resolve(this._editorView.state.selection.anchor - 1) : undefined;
const mark = schema.marks.user_mark.create({ userid: Doc.CurrentUserEmail, modified: Math.floor(Date.now() / 1000) });
const curMarks = this._editorView.state.storedMarks ?? $from?.marksAcross(this._editorView.state.selection.$head) ?? [];
const storedMarks = [...curMarks.filter(m => m.type !== mark.type), mark];
- const tr = this._editorView.state.tr
- .setStoredMarks(storedMarks)
- .insertText(FormattedTextBox.SelectOnLoadChar, this._editorView.state.doc.content.size - 1, this._editorView.state.doc.content.size)
- .setStoredMarks(storedMarks);
+ const tr1 = this._editorView.state.tr.setStoredMarks(storedMarks);
+ const tr2 = selLoadChar === 'Enter' ? tr1.insert(this._editorView.state.doc.content.size - 1, schema.nodes.paragraph.create()) : tr1.insertText(selLoadChar, this._editorView.state.doc.content.size - 1);
+ const tr = tr2.setStoredMarks(storedMarks);
+
this._editorView.dispatch(tr.setSelection(new TextSelection(tr.doc.resolve(tr.doc.content.size))));
} else if (curText && !FormattedTextBox.DontSelectInitialText) {
selectAll(this._editorView.state, this._editorView?.dispatch);
}
}
- selectOnLoad && this._editorView!.focus();
+ if (selectOnLoad) {
+ FormattedTextBox.DontSelectInitialText = false;
+ this._editorView!.focus();
+ }
if (this._props.isContentActive()) this.prepareForTyping();
- if (this._editorView) {
- const tr = this._editorView.state.tr;
- const { from, to } = tr.selection;
- // for some reason, the selection is sometimes lost in the sidebar view when prosemirror syncs the seledtion with the dom, so reset the selection after the document has ben fully instantiated.
- if (FormattedTextBox.DontSelectInitialText) setTimeout(() => this._editorView?.dispatch(tr.setSelection(new TextSelection(tr.doc.resolve(from), tr.doc.resolve(to)))), 250);
-
- if (FormattedTextBox.PasteOnLoad) {
- const pdfAnchorId = FormattedTextBox.PasteOnLoad.clipboardData?.getData('dash/pdfAnchor');
- FormattedTextBox.PasteOnLoad = undefined;
- pdfAnchorId && this.addPdfReference(pdfAnchorId);
- }
+ if (this._editorView && FormattedTextBox.PasteOnLoad) {
+ const pdfAnchorId = FormattedTextBox.PasteOnLoad.clipboardData?.getData('dash/pdfAnchor');
+ FormattedTextBox.PasteOnLoad = undefined;
+ pdfAnchorId && this.addPdfReference(pdfAnchorId);
}
- FormattedTextBox.DontSelectInitialText = false;
}
// add user mark for any first character that was typed since the user mark that gets set in KeyPress won't have been called yet.
@@ -2019,7 +2014,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
}
render() {
TraceMobx();
- const scale = (this._props.NativeDimScaling?.() || 1) * NumCast(this.layoutDoc._freeform_scale, 1);
+ const scale = this._props.NativeDimScaling?.() || 1; // * NumCast(this.layoutDoc._freeform_scale, 1);
const rounded = StrCast(this.layoutDoc.layout_borderRounding) === '100%' ? '-rounded' : '';
setTimeout(() => !this._props.isContentActive() && FormattedTextBoxComment.textBox === this && FormattedTextBoxComment.Hide);
const paddingX = NumCast(this.layoutDoc._xMargin, this._props.xPadding || 0);
diff --git a/src/client/views/nodes/trails/PresBox.tsx b/src/client/views/nodes/trails/PresBox.tsx
index b8f6575dd..0d4f9ec78 100644
--- a/src/client/views/nodes/trails/PresBox.tsx
+++ b/src/client/views/nodes/trails/PresBox.tsx
@@ -36,6 +36,7 @@ import { FocusViewOptions, FieldView, FieldViewProps } from '../FieldView';
import { ScriptingBox } from '../ScriptingBox';
import './PresBox.scss';
import { PresEffect, PresEffectDirection, PresMovement, PresStatus } from './PresEnums';
+import { dropActionType } from '../../../util/DragManager';
export interface pinDataTypes {
scrollable?: boolean;
dataviz?: number[];
@@ -1074,7 +1075,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
};
childLayoutTemplate = () => Docs.Create.PresElementBoxDocument();
- removeDocument = (doc: Doc) => Doc.RemoveDocFromList(this.Document, this.fieldKey, doc);
+ removeDocument = (doc: Doc | Doc[]) => !(doc instanceof Doc ? [doc] : doc).map(d => Doc.RemoveDocFromList(this.Document, this.fieldKey, d)).some(p => !p);
getTransform = () => this.ScreenToLocalBoxXf().translate(-5, -65); // listBox padding-left and pres-box-cont minHeight
panelHeight = () => this._props.PanelHeight() - 40;
/**
@@ -2222,10 +2223,10 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
// prettier-ignore
switch (layout) {
case 'blank': return Docs.Create.FreeformDocument([], { title: input ? input : 'Blank slide', _width: 400, _height: 225, x, y });
- case 'title': return Docs.Create.FreeformDocument([title(), subtitle()], { title: input ? input : 'Title slide', _width: 400, _height: 225, _layout_fitContentsToBox: true, x, y });
- case 'header': return Docs.Create.FreeformDocument([header()], { title: input ? input : 'Section header', _width: 400, _height: 225, _layout_fitContentsToBox: true, x, y });
- case 'content': return Docs.Create.FreeformDocument([contentTitle(), content()], { title: input ? input : 'Title and content', _width: 400, _height: 225, _layout_fitContentsToBox: true, x, y });
- case 'twoColumns': return Docs.Create.FreeformDocument([contentTitle(), content1(), content2()], { title: input ? input : 'Title and two columns', _width: 400, _height: 225, _layout_fitContentsToBox: true, x, y })
+ case 'title': return Docs.Create.FreeformDocument([title(), subtitle()], { title: input ? input : 'Title slide', _width: 400, _height: 225, _freeform_fitContentsToBox: true, x, y });
+ case 'header': return Docs.Create.FreeformDocument([header()], { title: input ? input : 'Section header', _width: 400, _height: 225, _freeform_fitContentsToBox: true, x, y });
+ case 'content': return Docs.Create.FreeformDocument([contentTitle(), content()], { title: input ? input : 'Title and content', _width: 400, _height: 225, _freeform_fitContentsToBox: true, x, y });
+ case 'twoColumns': return Docs.Create.FreeformDocument([contentTitle(), content1(), content2()], { title: input ? input : 'Title and two columns', _width: 400, _height: 225, _freeform_fitContentsToBox: true, x, y })
}
};
@@ -2607,7 +2608,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
childIgnoreNativeSize={true}
moveDocument={returnFalse}
ignoreUnrendered={true}
- childDragAction="move"
+ childDragAction={dropActionType.move}
setContentViewBox={emptyFunction}
//childLayoutFitWidth={returnTrue}
childOpacity={returnOne}
diff --git a/src/client/views/search/SearchBox.tsx b/src/client/views/search/SearchBox.tsx
index 0b664beaa..9f153e86d 100644
--- a/src/client/views/search/SearchBox.tsx
+++ b/src/client/views/search/SearchBox.tsx
@@ -88,9 +88,11 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
* (Note: There is no longer a need to press enter to submit a search. Any update to the input
* causes a search to be submitted automatically.)
*/
+ _timeout: any = undefined;
onInputChange = action((e: React.ChangeEvent<HTMLInputElement>) => {
this._searchString = e.target.value;
- this.submitSearch();
+ this._timeout && clearTimeout(this._timeout);
+ this._timeout = setTimeout(() => this.submitSearch(), 300);
});
/**
@@ -334,6 +336,8 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
* brushes and highlights. All search matches are cleared as well.
*/
resetSearch = action(() => {
+ this._timeout && clearTimeout(this._timeout);
+ this._timeout = undefined;
this._results.forEach((_, doc) => {
DocumentManager.Instance.getFirstDocumentView(doc)?.ComponentView?.search?.('', undefined, true);
Doc.UnBrushDoc(doc);
@@ -436,10 +440,10 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
</select>
)}
<input
- defaultValue={''}
+ defaultValue=""
autoComplete="off"
onChange={this.onInputChange}
- onKeyPress={e => {
+ onKeyDown={e => {
e.key === 'Enter' ? this.submitSearch() : null;
e.stopPropagation();
}}
diff --git a/src/client/views/topbar/TopBar.tsx b/src/client/views/topbar/TopBar.tsx
index 4155800b8..addad2bbc 100644
--- a/src/client/views/topbar/TopBar.tsx
+++ b/src/client/views/topbar/TopBar.tsx
@@ -1,6 +1,6 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Button, IconButton, isDark, Size, Type } from 'browndash-components';
-import { action, computed, observable, reaction } from 'mobx';
+import { action, computed, makeObservable, observable, reaction } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { FaBug } from 'react-icons/fa';
@@ -25,13 +25,24 @@ import { Colors } from '../global/globalEnums';
import { DocumentViewInternal, returnEmptyDocViewList } from '../nodes/DocumentView';
import { DefaultStyleProvider } from '../StyleProvider';
import './TopBar.scss';
+import { dropActionType } from '../../util/DragManager';
+import { Flip } from 'react-awesome-reveal';
+import { ObservableReactComponent } from '../ObservableReactComponent';
/**
* ABOUT: This is the topbar in Dash, which included the current Dashboard as well as access to information on the user
* and settings and help buttons. Future scope for this bar is to include the collaborators that are on the same Dashboard.
*/
@observer
-export class TopBar extends React.Component {
+export class TopBar extends ObservableReactComponent<{}> {
+ static Instance: TopBar;
+ @observable private _flipDocumentation = 0;
+ constructor(props: any) {
+ super(props);
+ makeObservable(this);
+ TopBar.Instance = this;
+ }
+
navigateToHome = () => {
(CollectionDockingView.Instance?.CaptureThumbnail() ?? new Promise<void>(res => res())).then(() => {
Doc.ActivePage = 'home';
@@ -102,7 +113,7 @@ export class TopBar extends React.Component {
Document={selDoc}
docViewPath={returnEmptyDocViewList}
fieldKey="data"
- dropAction="embed"
+ dropAction={dropActionType.embed}
styleProvider={DefaultStyleProvider}
select={emptyFunction}
isContentActive={returnTrue}
@@ -161,7 +172,6 @@ export class TopBar extends React.Component {
</div>
) : null;
}
-
/**
* Returns the right hand side of the topbar.
* This part of the topbar includes information about the current user,
@@ -183,7 +193,9 @@ export class TopBar extends React.Component {
/>
) : null}
<IconButton tooltip={'Issue Reporter ⌘I'} size={Size.SMALL} color={this.color} onClick={ReportManager.Instance.open} icon={<FaBug />} />
- <IconButton tooltip={'Documentation ⌘D'} size={Size.SMALL} color={this.color} onClick={() => window.open('https://brown-dash.github.io/Dash-Documentation/', '_blank')} icon={<FontAwesomeIcon icon="question-circle" />} />
+ <Flip key={this._flipDocumentation}>
+ <IconButton tooltip={'Documentation ⌘D'} size={Size.SMALL} color={this.color} onClick={() => window.open('https://brown-dash.github.io/Dash-Documentation/', '_blank')} icon={<FontAwesomeIcon icon="question-circle" />} />
+ </Flip>
<IconButton tooltip={'Settings ⌘⇧S'} size={Size.SMALL} color={this.color} onClick={SettingsManager.Instance.open} icon={<FontAwesomeIcon icon="cog" />} />
<IconButton
size={Size.SMALL}
@@ -198,6 +210,11 @@ export class TopBar extends React.Component {
);
}
+ /**
+ * Make the documentation icon flip around to draw attention to it.
+ */
+ FlipDocumentationIcon = action(() => (this._flipDocumentation = this._flipDocumentation + 1));
+
render() {
return (
//TODO:glr Add support for light / dark mode
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 56d50846a..1433e5ffb 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -172,7 +172,7 @@ export class Doc extends RefField {
public static get MyTrails() { return DocCast(Doc.ActiveDashboard?.myTrails); } // prettier-ignore
public static get MyCalendars() { return DocCast(Doc.ActiveDashboard?.myCalendars); } // prettier-ignore
public static get MyOverlayDocs() { return DocListCast(Doc.ActiveDashboard?.myOverlayDocs ?? DocCast(Doc.UserDoc().myOverlayDocs)?.data); } // prettier-ignore
- public static get MyPublishedDocs() { return DocListCast(Doc.ActiveDashboard?.myPublishedDocs ?? DocCast(Doc.UserDoc().myPublishedDocs)?.data); } // prettier-ignore
+ public static get MyPublishedDocs() { return DocListCast(Doc.ActiveDashboard?.myPublishedDocs).concat(DocListCast(DocCast(Doc.UserDoc().myPublishedDocs)?.data)); } // prettier-ignore
public static get MyDashboards() { return DocCast(Doc.UserDoc().myDashboards); } // prettier-ignore
public static get MyTemplates() { return DocCast(Doc.UserDoc().myTemplates); } // prettier-ignore
public static get MyImports() { return DocCast(Doc.UserDoc().myImports); } // prettier-ignore
@@ -391,7 +391,10 @@ export class Doc extends RefField {
export namespace Doc {
export function SetContainer(doc: Doc, container: Doc) {
- container !== Doc.MyRecentlyClosed && (doc.embedContainer = container);
+ if (container !== Doc.MyRecentlyClosed) {
+ doc.embedContainer = container;
+ Doc.AddEmbedding(doc, doc);
+ }
}
export function RunCachedUpdate(doc: Doc, field: string) {
const update = doc[CachedUpdates][field];
@@ -580,6 +583,9 @@ export namespace Doc {
Doc.RemoveDocFromList(doc[DocData], 'proto_embeddings', embedding);
}
export function AddEmbedding(doc: Doc, embedding: Doc) {
+ if (embedding === null) {
+ console.log('WHAT?');
+ }
Doc.AddDocToList(doc[DocData], 'proto_embeddings', embedding, undefined, undefined, undefined, undefined, undefined, true);
}
export function GetEmbeddings(doc: Doc) {
@@ -604,15 +610,26 @@ export namespace Doc {
const dataDoc = doc[DocData];
const availableEmbeddings = Doc.GetEmbeddings(dataDoc);
const bestEmbedding = [...(dataDoc !== doc ? [doc] : []), ...availableEmbeddings].find(doc => !doc.embedContainer && doc.author === Doc.CurrentUserEmail);
- bestEmbedding && Doc.AddDocToList(dataDoc, 'protoEmbeddings', doc, undefined, undefined, undefined, undefined, undefined, true);
+ bestEmbedding && Doc.AddEmbedding(doc, doc);
return bestEmbedding ?? Doc.MakeEmbedding(doc);
}
// this lists out all the tag ids that can be in a RichTextField that might contain document ids.
// if a document is cloned, we need to make sure to clone all of these referenced documents as well;
export const DocsInTextFieldIds = ['audioId', 'textId', 'anchorId', 'docId'];
- export async function makeClone(doc: Doc, cloneMap: Map<string, Doc>, linkMap: Map<string, Doc>, rtfs: { copy: Doc; key: string; field: RichTextField }[], exclusions: string[], pruneDocs: Doc[], cloneLinks: boolean): Promise<Doc> {
- if (Doc.IsBaseProto(doc)) return doc;
+ export async function makeClone(
+ doc: Doc,
+ cloneMap: Map<string, Doc>,
+ linkMap: Map<string, Doc>,
+ rtfs: { copy: Doc; key: string; field: RichTextField }[],
+ exclusions: string[],
+ pruneDocs: Doc[],
+ cloneLinks: boolean,
+ cloneTemplates: boolean
+ ): Promise<Doc> {
+ if (Doc.IsBaseProto(doc) || ((Doc.Get(doc, 'isTemplateDoc', true) || Doc.Get(doc, 'isTemplateForField', true)) && !cloneTemplates)) {
+ return doc;
+ }
if (cloneMap.get(doc[Id])) return cloneMap.get(doc[Id])!;
const copy = new Doc(undefined, true);
cloneMap.set(doc[Id], copy);
@@ -627,7 +644,7 @@ export namespace Doc {
const list = await Cast(doc[key], listSpec(Doc));
const docs = list && (await DocListCastAsync(list))?.filter(d => d instanceof Doc);
if (docs !== undefined && docs.length) {
- const clones = await Promise.all(docs.map(async d => Doc.makeClone(d, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks)));
+ const clones = await Promise.all(docs.map(async d => Doc.makeClone(d, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks, cloneTemplates)));
assignKey(new List<Doc>(clones));
} else {
assignKey(ObjectField.MakeCopy(field));
@@ -642,7 +659,7 @@ export namespace Doc {
);
const results = docids && (await DocServer.GetRefFields(docids));
const docs = results && Array.from(Object.keys(results)).map(key => DocCast(results[key]));
- docs?.map(doc => doc && Doc.makeClone(doc, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks));
+ docs?.map(doc => doc && Doc.makeClone(doc, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks, cloneTemplates));
rtfs.push({ copy, key, field });
}
}
@@ -654,8 +671,14 @@ export namespace Doc {
} else if (docAtKey instanceof Doc) {
if (pruneDocs.includes(docAtKey)) {
// prune doc and do nothing
- } else if (!Doc.IsSystem(docAtKey) && (key.startsWith('layout') || ['embedContainer', 'annotationOn', 'proto'].includes(key) || ((key === 'link_anchor_1' || key === 'link_anchor_2') && doc.author === Doc.CurrentUserEmail))) {
- assignKey(await Doc.makeClone(docAtKey, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks));
+ } else if (
+ !Doc.IsSystem(docAtKey) &&
+ (key.includes('layout[') ||
+ key.startsWith('layout') || //
+ ['embedContainer', 'annotationOn', 'proto'].includes(key) ||
+ (['link_anchor_1', 'link_anchor_2'].includes(key) && doc.author === Doc.CurrentUserEmail))
+ ) {
+ assignKey(await Doc.makeClone(docAtKey, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks, cloneTemplates));
} else {
assignKey(docAtKey);
}
@@ -678,16 +701,17 @@ export namespace Doc {
((cloneMap.has(DocCast(link.link_anchor_1)?.[Id]) || cloneMap.has(DocCast(DocCast(link.link_anchor_1)?.annotationOn)?.[Id])) &&
(cloneMap.has(DocCast(link.link_anchor_2)?.[Id]) || cloneMap.has(DocCast(DocCast(link.link_anchor_2)?.annotationOn)?.[Id])))
) {
- linkMap.set(link[Id], await Doc.makeClone(link, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks));
+ linkMap.set(link[Id], await Doc.makeClone(link, cloneMap, linkMap, rtfs, exclusions, pruneDocs, cloneLinks, cloneTemplates));
}
});
- Doc.SetInPlace(copy, 'title', '>:' + doc.title, true);
+ if (Doc.Get(copy, 'title', true)) copy.title = '>:' + doc.title;
+ // Doc.SetInPlace(copy, 'title', '>:' + doc.title, true);
copy.cloneOf = doc;
cloneMap.set(doc[Id], copy);
return copy;
}
- export function repairClone(clone: Doc, cloneMap: Map<string, Doc>, visited: Set<Doc>) {
+ export function repairClone(clone: Doc, cloneMap: Map<string, Doc>, cloneTemplates: boolean, visited: Set<Doc>) {
if (visited.has(clone)) return;
visited.add(clone);
Object.keys(clone)
@@ -696,22 +720,22 @@ export namespace Doc {
const docAtKey = DocCast(clone[key]);
if (docAtKey && !Doc.IsSystem(docAtKey)) {
if (!Array.from(cloneMap.values()).includes(docAtKey)) {
- clone[key] = cloneMap.get(docAtKey[Id]);
+ clone[key] = !cloneTemplates && (Doc.Get(docAtKey, 'isTemplateDoc', true) || Doc.Get(docAtKey, 'isTemplateForField', true)) ? docAtKey : cloneMap.get(docAtKey[Id]);
} else {
- repairClone(docAtKey, cloneMap, visited);
+ repairClone(docAtKey, cloneMap, cloneTemplates, visited);
}
}
});
}
- export function MakeClones(docs: Doc[], cloneLinks: boolean) {
+ export function MakeClones(docs: Doc[], cloneLinks: boolean, cloneTemplates: boolean) {
const cloneMap = new Map<string, Doc>();
- return docs.map(doc => Doc.MakeClone(doc, cloneLinks, cloneMap));
+ return docs.map(doc => Doc.MakeClone(doc, cloneLinks, cloneTemplates, cloneMap));
}
- export async function MakeClone(doc: Doc, cloneLinks = true, cloneMap: Map<string, Doc> = new Map()) {
+ export async function MakeClone(doc: Doc, cloneLinks = true, cloneTemplates = true, cloneMap: Map<string, Doc> = new Map()) {
const linkMap = new Map<string, Doc>();
const rtfMap: { copy: Doc; key: string; field: RichTextField }[] = [];
- const copy = await Doc.makeClone(doc, cloneMap, linkMap, rtfMap, ['cloneOf'], doc.embedContainer ? [DocCast(doc.embedContainer)] : [], cloneLinks);
+ const copy = await Doc.makeClone(doc, cloneMap, linkMap, rtfMap, ['cloneOf'], doc.embedContainer ? [DocCast(doc.embedContainer)] : [], cloneLinks, cloneTemplates);
const repaired = new Set<Doc>();
const linkedDocs = Array.from(linkMap.values());
linkedDocs.map((link: Doc) => LinkManager.Instance.addLink(link, true));
@@ -729,7 +753,7 @@ export namespace Doc {
copy[key] = new RichTextField(field.Data.replace(docidsearch, replacer).replace(re, replacer2), field.Text);
});
const clonedDocs = [...Array.from(cloneMap.values()), ...linkedDocs];
- clonedDocs.map(clone => Doc.repairClone(clone, cloneMap, repaired));
+ clonedDocs.map(clone => Doc.repairClone(clone, cloneMap, cloneTemplates, repaired));
return { clone: copy, map: cloneMap, linkMap };
}
@@ -984,10 +1008,9 @@ export namespace Doc {
Object.keys(doc)
.filter(key => key.startsWith('acl'))
.forEach(key => (delegate[key] = doc[key]));
- if (!Doc.IsSystem(doc)) Doc.AddEmbedding(doc, delegate);
title && (delegate.title = title);
delegate[Initializing] = false;
- Doc.AddEmbedding(doc, delegate);
+ if (!Doc.IsSystem(doc)) Doc.AddEmbedding(doc, delegate);
return delegate;
}
return undefined;
@@ -1008,7 +1031,6 @@ export namespace Doc {
delegate[Initializing] = true;
delegate.proto = delegateProto;
delegate.author = Doc.CurrentUserEmail;
- Doc.AddEmbedding(delegateProto, delegate);
delegate[Initializing] = false;
delegateProto[Initializing] = false;
return delegate;
@@ -1394,7 +1416,7 @@ export namespace Doc {
const list = Array.from(Object.values(fieldlist))
.map(d => DocCast(d))
.filter(d => d);
- const docs = clone ? (await Promise.all(Doc.MakeClones(list, false))).map(res => res.clone) : list;
+ const docs = clone ? (await Promise.all(Doc.MakeClones(list, false, false))).map(res => res.clone) : list;
if (ptx !== undefined && pty !== undefined && newPoint !== undefined) {
const firstx = list.length ? NumCast(list[0].x) + ptx - newPoint[0] : 0;
const firsty = list.length ? NumCast(list[0].y) + pty - newPoint[1] : 0;
@@ -1432,7 +1454,7 @@ export namespace Doc {
case DocumentType.WEBCAM: return 'video';
case DocumentType.AUDIO: return 'microphone';
case DocumentType.BUTTON: return 'bolt';
- case DocumentType.PRES: return 'tv';
+ case DocumentType.PRES: return 'route';
case DocumentType.SCRIPTING: return 'terminal';
case DocumentType.IMPORT: return 'cloud-upload-alt';
case DocumentType.VID: return 'video';
diff --git a/src/fields/documentSchemas.ts b/src/fields/documentSchemas.ts
index 8eeb52709..1cacfe30c 100644
--- a/src/fields/documentSchemas.ts
+++ b/src/fields/documentSchemas.ts
@@ -96,9 +96,9 @@ export const documentSchema = createSchema({
// drag drop properties
_dragOnlyWithinContainer: 'boolean', // whether document can be dropped into a different collection
dragFactory: Doc, // the document that serves as the "template" for the onDragStart script. ie, to drag out copies of the dragFactory document.
- dropAction: 'string', // override specifying what should happen when something is dropped on this document (can be "embed", "copy", "move")
- dragAction: 'string', // override specifying what should happen when this document s dragged (can be "embed", "copy", "move")
- childDragAction: 'string', // specify the override for what should happen when the child of a collection is dragged from it and dropped (can be "embed" or "copy")
+ dropAction: 'string', // override specifying what should happen when something is dropped on this document (dropActionType)
+ dragAction: 'string', // override specifying what should happen when this document s dragged (dropActionType)
+ childDragAction: 'string', // specify the override for what should happen when the child of a collection is dragged from it and dropped (dropActionType)
dropPropertiesToRemove: listSpec('string'), // properties that should be removed from the embed/copy/etc of this document when it is dropped
});
diff --git a/src/mobile/MobileInterface.tsx b/src/mobile/MobileInterface.tsx
index c31e73b42..dc4af8303 100644
--- a/src/mobile/MobileInterface.tsx
+++ b/src/mobile/MobileInterface.tsx
@@ -92,6 +92,7 @@ import {
faTrash,
faTrashAlt,
faTree,
+ faRoute,
faTv,
faUndoAlt,
faVideo,