@morscherlab/mint-sdk 1.4.0-beta.2 → 1.4.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -3
- package/dist/{ActionMenu-CScINahU.js → AlertBox-DwgNTEqf.js} +40 -209
- package/dist/AlertBox-DwgNTEqf.js.map +1 -0
- package/dist/{AppSidebar-BmiiPfz9.js → AppSidebar-CZZaxni0.js} +1249 -239
- package/dist/AppSidebar-CZZaxni0.js.map +1 -0
- package/dist/{ConfirmDialog-CJ7hqYUP.js → ConfirmDialog-CjWoxAD1.js} +2 -2
- package/dist/{ConfirmDialog-CJ7hqYUP.js.map → ConfirmDialog-CjWoxAD1.js.map} +1 -1
- package/dist/ExperimentPopover-DujiuQIO.js +337 -0
- package/dist/ExperimentPopover-DujiuQIO.js.map +1 -0
- package/dist/{ExperimentSelectorModal-D-9z7cNx.js → ExperimentSelectorModal-B4j4eUOJ.js} +244 -211
- package/dist/ExperimentSelectorModal-B4j4eUOJ.js.map +1 -0
- package/dist/{SegmentedControl-DERBN-Xd.js → SegmentedControl-DyUPH3I5.js} +2 -2
- package/dist/{SegmentedControl-DERBN-Xd.js.map → SegmentedControl-DyUPH3I5.js.map} +1 -1
- package/dist/{SettingsModal-CSLE31yg.js → SettingsModal-D2MOOtuO.js} +28 -27
- package/dist/SettingsModal-D2MOOtuO.js.map +1 -0
- package/dist/__stories__/experiment-helpers.d.ts +10 -0
- package/dist/__tests__/components/AppTopBarOnboarding.test.d.ts +1 -0
- package/dist/__tests__/components/FloatingPanelsInModal.test.d.ts +1 -0
- package/dist/__tests__/composables/useFloatingPanel.test.d.ts +1 -0
- package/dist/__tests__/composables/useOnboarding.test.d.ts +1 -0
- package/dist/__tests__/styles/paletteTokens.test.d.ts +1 -0
- package/dist/__tests__/styles/v2AuditRules.test.d.ts +1 -0
- package/dist/components/AppSidebar.vue.d.ts +1 -1
- package/dist/components/AppTopBar.vue.d.ts +20 -5
- package/dist/components/ArtifactSaveDialog.vue.d.ts +9 -1
- package/dist/components/AuditTrail.vue.d.ts +1 -1
- package/dist/components/BaseButton.vue.d.ts +4 -2
- package/dist/components/BaseSelect.vue.d.ts +2 -2
- package/dist/components/ChartContainer.vue.d.ts +2 -0
- package/dist/components/DatePicker.vue.d.ts +1 -1
- package/dist/components/ExperimentPopover.vue.d.ts +18 -0
- package/dist/components/ExperimentSelectorModal.vue.d.ts +15 -5
- package/dist/components/FilePicker.vue.d.ts +1 -1
- package/dist/components/FileUploader.vue.d.ts +2 -2
- package/dist/components/JobsStatusTray.vue.d.ts +15 -4
- package/dist/components/PluginIcon.vue.d.ts +2 -2
- package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
- package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
- package/dist/components/SampleSelector.vue.d.ts +6 -6
- package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +3 -3
- package/dist/components/StepWizard.vue.d.ts +3 -0
- package/dist/components/internal/AppTopBarOnboardingInternal.vue.d.ts +7 -0
- package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -1
- package/dist/components/internal/AutoGroupModalInternal.vue.d.ts +3 -3
- package/dist/components/internal/DatePickerTimeInternal.vue.d.ts +1 -1
- package/dist/components/internal/OnboardingLayerInternal.vue.d.ts +7 -0
- package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +2 -7
- package/dist/components/internal/SelectMultipleInternal.vue.d.ts +4 -0
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
- package/dist/composables/createClient.d.ts +2 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/pluginIdentity.d.ts +24 -0
- package/dist/composables/pluginWorkspaceModel.d.ts +2 -2
- package/dist/composables/useAppExperiment.d.ts +8 -0
- package/dist/composables/useCalendarGrid.d.ts +1 -1
- package/dist/composables/useExperimentSelector.d.ts +6 -2
- package/dist/composables/useFileImport.d.ts +7 -0
- package/dist/composables/useFloatingPanel.d.ts +29 -0
- package/dist/composables/useJobCenter.d.ts +41 -3
- package/dist/composables/useOnboarding.d.ts +119 -0
- package/dist/composables/usePlatform.d.ts +1 -0
- package/dist/{controlSchemaModel-CP5-_nAj.js → controlSchemaModel-Bsg0t5Ab.js} +2 -2
- package/dist/{controlSchemaModel-CP5-_nAj.js.map → controlSchemaModel-Bsg0t5Ab.js.map} +1 -1
- package/dist/{data-C2PwI_dn.js → data-Boeh4uPI.js} +180 -125
- package/dist/data-Boeh4uPI.js.map +1 -0
- package/dist/data.d.ts +1 -1
- package/dist/data.js +9 -9
- package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
- package/dist/experiment-DyO54FQB.js.map +1 -0
- package/dist/{experimentStatus-BZmU4czV.js → experimentStatus-DCn2QKG7.js} +3 -3
- package/dist/{experimentStatus-BZmU4czV.js.map → experimentStatus-DCn2QKG7.js.map} +1 -1
- package/dist/index.js +20 -20
- package/dist/{install-DAID6c2-.js → install-BEHp7Mo-.js} +15 -14
- package/dist/{install-DAID6c2-.js.map → install-BEHp7Mo-.js.map} +1 -1
- package/dist/install.js +1 -1
- package/dist/{lab-DLwRl_Ql.js → lab-D61eaX6f.js} +136 -148
- package/dist/lab-D61eaX6f.js.map +1 -0
- package/dist/lab.js +4 -3
- package/dist/{records-BzTcxekG.js → records-D4aQXyZu.js} +647 -389
- package/dist/records-D4aQXyZu.js.map +1 -0
- package/dist/{runtime-D6gVat6r.js → runtime-q-R0CNLh.js} +417 -54
- package/dist/runtime-q-R0CNLh.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +7 -7
- package/dist/{shell-5ju97nOS.js → shell-6CGFvUUw.js} +10 -5
- package/dist/{shell-5ju97nOS.js.map → shell-6CGFvUUw.js.map} +1 -1
- package/dist/shell.d.ts +1 -0
- package/dist/shell.js +6 -6
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +2 -2
- package/dist/stores/settings.d.ts +4 -12
- package/dist/styles.css +2753 -2101
- package/dist/types/componentWorkflowTypes.d.ts +2 -0
- package/dist/types/components.d.ts +2 -0
- package/dist/types/generated/platformContext.d.ts +1 -0
- package/dist/types/generated-ui.d.ts +4 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/jobs.d.ts +9 -0
- package/dist/types/platform.d.ts +1 -1
- package/dist/{BaseModal-DfRIuVoj.js → useDropdownState-uFIz6Yv8.js} +75 -5
- package/dist/useDropdownState-uFIz6Yv8.js.map +1 -0
- package/dist/{useExperimentSamples-CxcnxZ8h.js → useExperimentSamples-QEFoq4tf.js} +48 -6
- package/dist/useExperimentSamples-QEFoq4tf.js.map +1 -0
- package/dist/{useListReorder-CcbEYxX-.js → useListReorder-DsuzwWGS.js} +219 -437
- package/dist/useListReorder-DsuzwWGS.js.map +1 -0
- package/dist/{useRackEditor-BD5NIo5s.js → useRackEditor-KpZ4iJ6o.js} +85 -81
- package/dist/useRackEditor-KpZ4iJ6o.js.map +1 -0
- package/dist/useRealtime-B58Lo-Tm.js +508 -0
- package/dist/useRealtime-B58Lo-Tm.js.map +1 -0
- package/dist/useRequest-BuDmW8Jc.js +215 -0
- package/dist/useRequest-BuDmW8Jc.js.map +1 -0
- package/dist/utils/time.d.ts +7 -0
- package/package.json +3 -2
- package/src/__stories__/experiment-helpers.ts +3 -3
- package/src/__tests__/components/ActionMenu.test.ts +2 -2
- package/src/__tests__/components/AppTopBar.test.ts +257 -3
- package/src/__tests__/components/AppTopBarOnboarding.test.ts +160 -0
- package/src/__tests__/components/AppTopBarPageSelector.test.ts +125 -9
- package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +78 -0
- package/src/__tests__/components/BaseButton.test.ts +19 -0
- package/src/__tests__/components/BaseModal.test.ts +13 -0
- package/src/__tests__/components/BaseSelect.multiple.test.ts +87 -32
- package/src/__tests__/components/BaseSelect.test.ts +2 -1
- package/src/__tests__/components/BatchProgressList.test.ts +16 -0
- package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
- package/src/__tests__/components/ChartContainer.test.ts +11 -0
- package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
- package/src/__tests__/components/DatePicker.datetime.test.ts +6 -0
- package/src/__tests__/components/DatePicker.test.ts +21 -0
- package/src/__tests__/components/DatePicker.time.test.ts +2 -2
- package/src/__tests__/components/EmptyState.test.ts +1 -1
- package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +153 -14
- package/src/__tests__/components/FloatingPanelsInModal.test.ts +94 -0
- package/src/__tests__/components/GeneratedPluginView.test.ts +23 -2
- package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
- package/src/__tests__/components/JobsStatusTray.test.ts +373 -71
- package/src/__tests__/components/PluginWorkspaceView.test.ts +63 -1
- package/src/__tests__/components/ResourcePickerListInternal.test.ts +0 -20
- package/src/__tests__/components/SampleSelector.test.ts +33 -8
- package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
- package/src/__tests__/components/SettingsModal.test.ts +9 -2
- package/src/__tests__/components/StepWizard.test.ts +11 -0
- package/src/__tests__/components/WellPlate.decoration.test.ts +11 -4
- package/src/__tests__/components/deprecationTags.test.ts +1 -1
- package/src/__tests__/composables/useAppExperiment.test.ts +27 -1
- package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
- package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
- package/src/__tests__/composables/useFileImport.test.ts +36 -0
- package/src/__tests__/composables/useFloatingPanel.test.ts +68 -0
- package/src/__tests__/composables/useJobCenter.test.ts +262 -3
- package/src/__tests__/composables/useOnboarding.test.ts +317 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +4 -3
- package/src/__tests__/fixtures/table-import/cells.xlsx +0 -0
- package/src/__tests__/fixtures/table-import/samples.xlsx +0 -0
- package/src/__tests__/stores/settings.test.ts +21 -21
- package/src/__tests__/styles/baseControlsRules.test.ts +6 -2
- package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
- package/src/__tests__/styles/cssTokens.test.ts +6 -3
- package/src/__tests__/styles/menusShellRefresh.test.ts +22 -12
- package/src/__tests__/styles/paletteTokens.test.ts +44 -0
- package/src/__tests__/styles/v2AuditRules.test.ts +104 -0
- package/src/__tests__/utils/plotlyTemplate.test.ts +4 -4
- package/src/__tests__/utils/time.test.ts +18 -1
- package/src/components/ActionMenu.vue +6 -37
- package/src/components/AdductText.story.vue +7 -0
- package/src/components/AdductText.vue +1 -1
- package/src/components/AlertBox.story.vue +2 -2
- package/src/components/AlertBox.vue +18 -16
- package/src/components/AppSidebar.story.vue +0 -28
- package/src/components/AppTopBar.onboarding.story.vue +69 -0
- package/src/components/AppTopBar.story.vue +105 -15
- package/src/components/AppTopBar.vue +248 -122
- package/src/components/ArtifactSaveDialog.story.vue +23 -0
- package/src/components/ArtifactSaveDialog.vue +102 -12
- package/src/components/AuditTrail.story.vue +2 -1
- package/src/components/AuditTrail.vue +2 -21
- package/src/components/Avatar.vue +10 -14
- package/src/components/BaseButton.vue +16 -2
- package/src/components/BaseModal.vue +2 -1
- package/src/components/BaseSelect.multiple.story.vue +13 -2
- package/src/components/BaseSelect.vue +4 -3
- package/src/components/BatchProgressList.vue +35 -25
- package/src/components/ChartContainer.story.vue +2 -1
- package/src/components/ChartContainer.vue +8 -6
- package/src/components/ConfirmDialog.story.vue +1 -1
- package/src/components/EmptyState.vue +1 -1
- package/src/components/ExperimentPopover.story.vue +165 -53
- package/src/components/ExperimentPopover.vue +169 -187
- package/src/components/ExperimentSelectorModal.story.vue +73 -31
- package/src/components/ExperimentSelectorModal.vue +144 -111
- package/src/components/FormField.story.vue +8 -48
- package/src/components/GeneratedPluginView.vue +11 -10
- package/src/components/GeneratedResultRenderer.vue +3 -4
- package/src/components/InstrumentStateBadge.vue +1 -1
- package/src/components/JobsStatusTray.story.vue +97 -43
- package/src/components/JobsStatusTray.vue +287 -290
- package/src/components/LayoutResizeHandle.story.vue +65 -4
- package/src/components/LoadingSpinner.vue +1 -1
- package/src/components/NumberInput.vue +3 -6
- package/src/components/PluginIcon.story.vue +2 -10
- package/src/components/PluginIcon.vue +2 -2
- package/src/components/PluginWorkspaceView.props.ts +3 -0
- package/src/components/PluginWorkspaceView.story.vue +1 -1
- package/src/components/PluginWorkspaceView.vue +17 -0
- package/src/components/RuntimeUpdateNotice.vue +1 -1
- package/src/components/SampleSelector.story.vue +22 -7
- package/src/components/SampleSelector.vue +34 -37
- package/src/components/SampleSelectorGroupNode.vue +1 -1
- package/src/components/SectionCard.story.vue +35 -2
- package/src/components/SequenceProgressBar.story.vue +9 -0
- package/src/components/SequenceProgressBar.vue +6 -1
- package/src/components/SettingsModal.schema.ts +1 -1
- package/src/components/SettingsModal.vue +9 -14
- package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
- package/src/components/SmartGroupManual.story.vue +1 -1
- package/src/components/StepWizard.story.vue +33 -0
- package/src/components/StepWizard.vue +8 -1
- package/src/components/Tooltip.vue +9 -32
- package/src/components/WellPlate.story.vue +3 -1
- package/src/components/WellPlate.vue +7 -0
- package/src/components/internal/AppTopBarOnboardingInternal.vue +172 -0
- package/src/components/internal/AppTopBarPageSelectorInternal.vue +140 -72
- package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
- package/src/components/internal/DatePickerDateInternal.vue +23 -85
- package/src/components/internal/DatePickerDateTimeInternal.vue +10 -14
- package/src/components/internal/DatePickerTimeInternal.vue +13 -9
- package/src/components/internal/NumberUnitInputInternal.vue +4 -18
- package/src/components/internal/OnboardingLayerInternal.vue +173 -0
- package/src/components/internal/ResourcePickerListInternal.vue +45 -85
- package/src/components/internal/SelectMultipleInternal.vue +187 -65
- package/src/components/internal/SelectSearchableInternal.vue +8 -4
- package/src/components/internal/WellEditPopupInternal.vue +11 -22
- package/src/components/internal/WorkspaceShellInternal.vue +12 -0
- package/src/composables/createClient.ts +2 -0
- package/src/composables/index.ts +1 -0
- package/src/composables/pluginIdentity.ts +31 -0
- package/src/composables/pluginWorkspaceModel.ts +2 -2
- package/src/composables/useAppExperiment.ts +20 -0
- package/src/composables/useCalendarGrid.ts +4 -3
- package/src/composables/useExperimentSelector.ts +77 -31
- package/src/composables/useFileImport.ts +51 -1
- package/src/composables/useFloatingPanel.ts +107 -0
- package/src/composables/useJobCenter.ts +188 -6
- package/src/composables/useOnboarding.ts +465 -0
- package/src/composables/usePluginWorkspace.ts +1 -1
- package/src/data.ts +1 -0
- package/src/runtime.ts +2 -1
- package/src/shell.ts +17 -0
- package/src/stores/index.ts +0 -2
- package/src/stores/settings.ts +20 -50
- package/src/styles/components/action-menu.css +1 -1
- package/src/styles/components/adduct-text.css +13 -5
- package/src/styles/components/alert-box.css +39 -58
- package/src/styles/components/app-layout.css +10 -6
- package/src/styles/components/app-page-selector.css +121 -44
- package/src/styles/components/app-pill-nav.css +11 -12
- package/src/styles/components/app-sidebar.css +9 -18
- package/src/styles/components/app-top-bar.css +219 -55
- package/src/styles/components/artifact-save-dialog.css +153 -2
- package/src/styles/components/audit-trail.css +16 -19
- package/src/styles/components/avatar.css +6 -4
- package/src/styles/components/batch-progress-list.css +38 -36
- package/src/styles/components/button.css +36 -59
- package/src/styles/components/calendar.css +12 -12
- package/src/styles/components/chart-container.css +34 -23
- package/src/styles/components/checkbox.css +2 -12
- package/src/styles/components/collapsible-card.css +27 -29
- package/src/styles/components/confirm-dialog.css +13 -14
- package/src/styles/components/dataframe.css +13 -5
- package/src/styles/components/date-picker.css +84 -94
- package/src/styles/components/datetime-picker.css +35 -47
- package/src/styles/components/divider.css +20 -20
- package/src/styles/components/dose-calculator.css +3 -3
- package/src/styles/components/empty-state.css +20 -17
- package/src/styles/components/experiment-code-badge.css +2 -0
- package/src/styles/components/experiment-popover.css +174 -329
- package/src/styles/components/experiment-selector-modal.css +88 -56
- package/src/styles/components/file-picker.css +3 -3
- package/src/styles/components/file-uploader.css +38 -49
- package/src/styles/components/form-builder.css +3 -3
- package/src/styles/components/formula-input.css +1 -1
- package/src/styles/components/icon-button.css +18 -24
- package/src/styles/components/input.css +5 -4
- package/src/styles/components/instrument-monitor.css +13 -15
- package/src/styles/components/jobs-status-tray.css +140 -296
- package/src/styles/components/layout-resize-handle.css +59 -16
- package/src/styles/components/modal.css +5 -7
- package/src/styles/components/molecule-input.css +2 -2
- package/src/styles/components/multi-select.css +65 -117
- package/src/styles/components/number-input.css +26 -19
- package/src/styles/components/onboarding.css +368 -0
- package/src/styles/components/pill.css +3 -2
- package/src/styles/components/plate-editor.css +0 -1
- package/src/styles/components/plugin-icon.css +26 -23
- package/src/styles/components/popover.css +2 -2
- package/src/styles/components/presence-avatars.css +1 -1
- package/src/styles/components/progress-bar.css +3 -3
- package/src/styles/components/protocol-step-editor.css +1 -3
- package/src/styles/components/resource-card.css +2 -2
- package/src/styles/components/resource-picker-list.css +6 -57
- package/src/styles/components/sample-hierarchy-tree.css +4 -4
- package/src/styles/components/sample-selector.css +138 -79
- package/src/styles/components/schedule-calendar.css +8 -8
- package/src/styles/components/searchable-select.css +15 -19
- package/src/styles/components/section-card.css +54 -49
- package/src/styles/components/segmented-control.css +18 -15
- package/src/styles/components/select.css +3 -3
- package/src/styles/components/sequence-input.css +2 -2
- package/src/styles/components/sequence-progress-bar.css +17 -8
- package/src/styles/components/settings-modal.css +7 -2
- package/src/styles/components/smart-group.css +18 -18
- package/src/styles/components/step-wizard.css +52 -16
- package/src/styles/components/tabs.css +2 -2
- package/src/styles/components/textarea.css +3 -3
- package/src/styles/components/time-picker.css +37 -25
- package/src/styles/components/toast.css +13 -11
- package/src/styles/components/toggle.css +1 -11
- package/src/styles/components/tooltip.css +12 -11
- package/src/styles/components/unit-input.css +9 -8
- package/src/styles/components/well-edit-popup.css +2 -2
- package/src/styles/components/well-plate.css +9 -2
- package/src/styles/index.css +1 -0
- package/src/styles/variables.css +247 -78
- package/src/types/componentWorkflowTypes.ts +2 -0
- package/src/types/components.ts +2 -0
- package/src/types/generated/platformContext.ts +1 -0
- package/src/types/generated-ui.ts +4 -0
- package/src/types/index.ts +1 -0
- package/src/types/jobs.ts +10 -0
- package/src/types/platform.ts +1 -1
- package/src/utils/time.ts +21 -0
- package/dist/ActionMenu-CScINahU.js.map +0 -1
- package/dist/AppSidebar-BmiiPfz9.js.map +0 -1
- package/dist/BaseModal-DfRIuVoj.js.map +0 -1
- package/dist/ExperimentPopover-C4sGw-is.js +0 -359
- package/dist/ExperimentPopover-C4sGw-is.js.map +0 -1
- package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +0 -1
- package/dist/SettingsModal-CSLE31yg.js.map +0 -1
- package/dist/data-C2PwI_dn.js.map +0 -1
- package/dist/experiment-43OJtH7R.js.map +0 -1
- package/dist/lab-DLwRl_Ql.js.map +0 -1
- package/dist/records-BzTcxekG.js.map +0 -1
- package/dist/runtime-D6gVat6r.js.map +0 -1
- package/dist/useExperimentSamples-CxcnxZ8h.js.map +0 -1
- package/dist/useListReorder-CcbEYxX-.js.map +0 -1
- package/dist/useRackEditor-BD5NIo5s.js.map +0 -1
- package/dist/useRealtime-PalKue84.js +0 -696
- package/dist/useRealtime-PalKue84.js.map +0 -1
- package/dist/useRequest-D5JDfsgZ.js +0 -76
- package/dist/useRequest-D5JDfsgZ.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { d as
|
|
3
|
-
import { C as formatExperimentDate, D as
|
|
1
|
+
import { a as BaseButton_default, n as BaseModal_default, o as __exportAll, r as useFocusTrap, t as useDropdownState } from "./useDropdownState-uFIz6Yv8.js";
|
|
2
|
+
import { d as MintApiError, f as mintApiErrorFromResponse, l as tryUseSettingsStore, t as useExperimentStore } from "./experiment-DyO54FQB.js";
|
|
3
|
+
import { C as formatExperimentDate, D as compareTime, E as useMenuKeyboard, F as toMinutes, G as normalizeOptionInput, K as BaseInput_default, M as formatTimeSlot, N as generateTimeSlots, T as FileUploader_default, V as BaseSelect_default, W as useFloatingPanel, c as SecretInput_default, d as isActiveJobStatus, h as normalizeJobState, i as getInjectedPlatformContext, j as formatTime, k as findNearestTimeSlotIndex, n as ResourcePickerListInternal_default, s as TagsInput_default, z as BaseCheckbox_default } from "./records-D4aQXyZu.js";
|
|
4
4
|
import "./auth-SliLnFre.js";
|
|
5
5
|
import { getRoleInfo, hasAllPermissions, isAdminUser } from "./permissions.js";
|
|
6
|
-
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createStaticVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, getCurrentScope, inject, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, toValue, unref, useAttrs, useId, useTemplateRef, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
|
|
7
|
-
import {
|
|
6
|
+
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createStaticVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, getCurrentScope, inject, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, toValue, unref, useAttrs, useId, useTemplateRef, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
7
|
+
import { ChevronDown, ChevronUp } from "lucide-vue-next";
|
|
8
8
|
//#region src/components/BaseRadioGroup.vue?vue&type=script&setup=true&lang.ts
|
|
9
9
|
var _hoisted_1$12 = { class: "mint-radio-option__input-wrapper" };
|
|
10
10
|
var _hoisted_2$12 = [
|
|
@@ -16,7 +16,7 @@ var _hoisted_2$12 = [
|
|
|
16
16
|
"onChange"
|
|
17
17
|
];
|
|
18
18
|
var _hoisted_3$12 = { class: "mint-radio-option__content" };
|
|
19
|
-
var _hoisted_4$
|
|
19
|
+
var _hoisted_4$10 = ["id"];
|
|
20
20
|
var _hoisted_5$9 = [
|
|
21
21
|
"name",
|
|
22
22
|
"value",
|
|
@@ -25,7 +25,7 @@ var _hoisted_5$9 = [
|
|
|
25
25
|
"aria-describedby",
|
|
26
26
|
"onChange"
|
|
27
27
|
];
|
|
28
|
-
var _hoisted_6$
|
|
28
|
+
var _hoisted_6$8 = { class: "mint-radio-option__head" };
|
|
29
29
|
var _hoisted_7$8 = { class: "mint-radio-option__title" };
|
|
30
30
|
var _hoisted_8$7 = ["id"];
|
|
31
31
|
//#endregion
|
|
@@ -89,7 +89,7 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
89
89
|
key: 0,
|
|
90
90
|
id: `${props.name}-${option.value}-desc`,
|
|
91
91
|
class: normalizeClass(["mint-radio-option__description", `mint-radio-option__description--${props.size}`])
|
|
92
|
-
}, toDisplayString(option.description), 11, _hoisted_4$
|
|
92
|
+
}, toDisplayString(option.description), 11, _hoisted_4$10)) : createCommentVNode("", true)])], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
93
93
|
createElementVNode("input", {
|
|
94
94
|
type: "radio",
|
|
95
95
|
name: props.name,
|
|
@@ -100,7 +100,7 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
100
100
|
class: "mint-radio-option__native",
|
|
101
101
|
onChange: ($event) => handleChange(option.value)
|
|
102
102
|
}, null, 40, _hoisted_5$9),
|
|
103
|
-
createElementVNode("div", _hoisted_6$
|
|
103
|
+
createElementVNode("div", _hoisted_6$8, [createElementVNode("div", { class: normalizeClass([
|
|
104
104
|
"mint-radio-option__circle",
|
|
105
105
|
`mint-radio-option__circle--${props.size}`,
|
|
106
106
|
props.modelValue === option.value ? "mint-radio-option__circle--checked" : ""
|
|
@@ -369,15 +369,15 @@ function definePlateEditor(spec) {
|
|
|
369
369
|
//#endregion
|
|
370
370
|
//#region src/composables/useCalendarGrid.ts
|
|
371
371
|
var WEEK_DAYS = [
|
|
372
|
-
"Su",
|
|
373
372
|
"Mo",
|
|
374
373
|
"Tu",
|
|
375
374
|
"We",
|
|
376
375
|
"Th",
|
|
377
376
|
"Fr",
|
|
378
|
-
"Sa"
|
|
377
|
+
"Sa",
|
|
378
|
+
"Su"
|
|
379
379
|
];
|
|
380
|
-
/** Shared calendar grid state for date and datetime pickers. */
|
|
380
|
+
/** Shared Monday-first calendar grid state for date and datetime pickers. */
|
|
381
381
|
function useCalendarGrid(options = {}) {
|
|
382
382
|
const currentMonth = ref(/* @__PURE__ */ new Date());
|
|
383
383
|
const monthYear = computed(() => {
|
|
@@ -392,7 +392,7 @@ function useCalendarGrid(options = {}) {
|
|
|
392
392
|
const firstDay = new Date(year, month, 1);
|
|
393
393
|
const lastDay = new Date(year, month + 1, 0);
|
|
394
394
|
const days = [];
|
|
395
|
-
const startPadding = firstDay.getDay();
|
|
395
|
+
const startPadding = (firstDay.getDay() + 6) % 7;
|
|
396
396
|
for (let i = startPadding - 1; i >= 0; i--) {
|
|
397
397
|
const date = new Date(year, month, -i);
|
|
398
398
|
days.push({
|
|
@@ -475,9 +475,9 @@ function startOfDay(date) {
|
|
|
475
475
|
var _hoisted_1$10 = { class: "mint-calendar-grid-panel" };
|
|
476
476
|
var _hoisted_2$10 = { class: "mint-date-picker__header" };
|
|
477
477
|
var _hoisted_3$10 = ["aria-label"];
|
|
478
|
-
var _hoisted_4$
|
|
478
|
+
var _hoisted_4$9 = { class: "mint-date-picker__month-year" };
|
|
479
479
|
var _hoisted_5$8 = ["aria-label"];
|
|
480
|
-
var _hoisted_6$
|
|
480
|
+
var _hoisted_6$7 = { class: "mint-date-picker__weekdays" };
|
|
481
481
|
var _hoisted_7$7 = { class: "mint-date-picker__grid" };
|
|
482
482
|
var _hoisted_8$6 = [
|
|
483
483
|
"disabled",
|
|
@@ -539,7 +539,7 @@ var CalendarGridPanelInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
539
539
|
"stroke-linejoin": "round",
|
|
540
540
|
"aria-hidden": "true"
|
|
541
541
|
}, [createElementVNode("path", { d: "m15 18-6-6 6-6" })], -1)])], 8, _hoisted_3$10),
|
|
542
|
-
createElementVNode("span", _hoisted_4$
|
|
542
|
+
createElementVNode("span", _hoisted_4$9, toDisplayString(__props.monthYear), 1),
|
|
543
543
|
createElementVNode("button", {
|
|
544
544
|
type: "button",
|
|
545
545
|
class: "mint-date-picker__nav-btn",
|
|
@@ -555,7 +555,7 @@ var CalendarGridPanelInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
555
555
|
"aria-hidden": "true"
|
|
556
556
|
}, [createElementVNode("path", { d: "m9 18 6-6-6-6" })], -1)])], 8, _hoisted_5$8)
|
|
557
557
|
]),
|
|
558
|
-
createElementVNode("div", _hoisted_6$
|
|
558
|
+
createElementVNode("div", _hoisted_6$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.weekDays, (day) => {
|
|
559
559
|
return openBlock(), createElementBlock("div", {
|
|
560
560
|
key: day,
|
|
561
561
|
class: "mint-date-picker__weekday"
|
|
@@ -595,7 +595,6 @@ var _hoisted_3$9 = [
|
|
|
595
595
|
"placeholder",
|
|
596
596
|
"disabled"
|
|
597
597
|
];
|
|
598
|
-
var _hoisted_4$9 = { class: "mint-date-picker__footer" };
|
|
599
598
|
//#endregion
|
|
600
599
|
//#region src/components/internal/DatePickerDateInternal.vue
|
|
601
600
|
var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
@@ -625,16 +624,16 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
625
624
|
const props = __props;
|
|
626
625
|
const emit = __emit;
|
|
627
626
|
const dropdownRef = ref(null);
|
|
628
|
-
const dropdownStyle = ref({});
|
|
629
627
|
const { isOpen, triggerRef, open, close, toggle } = useDropdownState({
|
|
630
628
|
rootRef: useTemplateRef("container"),
|
|
631
629
|
insideRefs: [dropdownRef]
|
|
632
630
|
});
|
|
631
|
+
const { style: dropdownStyle } = useFloatingPanel(triggerRef, dropdownRef, isOpen);
|
|
633
632
|
useFocusTrap({
|
|
634
633
|
containerRef: dropdownRef,
|
|
635
634
|
active: isOpen
|
|
636
635
|
});
|
|
637
|
-
const { weekDays, monthYear, calendarDays,
|
|
636
|
+
const { weekDays, monthYear, calendarDays, formatDateValue, setCurrentMonthFromDate, prevMonth, nextMonth } = useCalendarGrid({
|
|
638
637
|
min: () => props.min,
|
|
639
638
|
max: () => props.max
|
|
640
639
|
});
|
|
@@ -643,27 +642,12 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
643
642
|
const date = /* @__PURE__ */ new Date(props.modelValue + "T00:00:00");
|
|
644
643
|
return isNaN(date.getTime()) ? null : date;
|
|
645
644
|
});
|
|
646
|
-
const displayValue = computed(() =>
|
|
647
|
-
if (!selectedDate.value) return "";
|
|
648
|
-
return selectedDate.value.toLocaleDateString("en-US", {
|
|
649
|
-
year: "numeric",
|
|
650
|
-
month: "short",
|
|
651
|
-
day: "numeric"
|
|
652
|
-
});
|
|
653
|
-
});
|
|
645
|
+
const displayValue = computed(() => selectedDate.value ? formatDateValue(selectedDate.value) : "");
|
|
654
646
|
function selectDate(day) {
|
|
655
647
|
if (day.isDisabled || props.disabled) return;
|
|
656
648
|
emit("update:modelValue", formatDateValue(day.date));
|
|
657
649
|
close();
|
|
658
650
|
}
|
|
659
|
-
function goToToday() {
|
|
660
|
-
const today = /* @__PURE__ */ new Date();
|
|
661
|
-
setCurrentMonthFromDate(today);
|
|
662
|
-
if (!isDateDisabled(today)) {
|
|
663
|
-
emit("update:modelValue", formatDateValue(today));
|
|
664
|
-
close();
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
651
|
function clear() {
|
|
668
652
|
emit("update:modelValue", void 0);
|
|
669
653
|
close();
|
|
@@ -679,38 +663,6 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
679
663
|
open();
|
|
680
664
|
}
|
|
681
665
|
}
|
|
682
|
-
let stopAutoUpdate = null;
|
|
683
|
-
async function updateDropdownPosition() {
|
|
684
|
-
const trigger = triggerRef.value;
|
|
685
|
-
const panel = dropdownRef.value;
|
|
686
|
-
if (!trigger || !panel) return;
|
|
687
|
-
const { x, y } = await computePosition(trigger, panel, {
|
|
688
|
-
placement: "bottom-start",
|
|
689
|
-
strategy: "fixed",
|
|
690
|
-
middleware: [
|
|
691
|
-
offset(4),
|
|
692
|
-
flip(),
|
|
693
|
-
shift({ padding: 8 })
|
|
694
|
-
]
|
|
695
|
-
});
|
|
696
|
-
dropdownStyle.value = {
|
|
697
|
-
position: "fixed",
|
|
698
|
-
top: `${y}px`,
|
|
699
|
-
left: `${x}px`,
|
|
700
|
-
zIndex: "9999"
|
|
701
|
-
};
|
|
702
|
-
}
|
|
703
|
-
function stopPositioning() {
|
|
704
|
-
stopAutoUpdate?.();
|
|
705
|
-
stopAutoUpdate = null;
|
|
706
|
-
}
|
|
707
|
-
function startPositioning() {
|
|
708
|
-
const trigger = triggerRef.value;
|
|
709
|
-
const panel = dropdownRef.value;
|
|
710
|
-
if (!trigger || !panel) return;
|
|
711
|
-
stopPositioning();
|
|
712
|
-
stopAutoUpdate = autoUpdate(trigger, panel, () => void updateDropdownPosition());
|
|
713
|
-
}
|
|
714
666
|
/** Moves focus into the calendar grid: selected day, else today, else the first day. */
|
|
715
667
|
function focusCalendar() {
|
|
716
668
|
const panel = dropdownRef.value;
|
|
@@ -718,37 +670,50 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
718
670
|
(panel.querySelector(".mint-date-picker__day--selected") ?? panel.querySelector(".mint-date-picker__day--today") ?? panel.querySelector(".mint-date-picker__day:not([disabled])"))?.focus();
|
|
719
671
|
}
|
|
720
672
|
watch(isOpen, async (opened) => {
|
|
721
|
-
if (!opened)
|
|
722
|
-
stopPositioning();
|
|
723
|
-
return;
|
|
724
|
-
}
|
|
673
|
+
if (!opened) return;
|
|
725
674
|
if (selectedDate.value) setCurrentMonthFromDate(selectedDate.value);
|
|
726
675
|
await nextTick();
|
|
727
|
-
startPositioning();
|
|
728
676
|
await nextTick();
|
|
729
677
|
focusCalendar();
|
|
730
678
|
});
|
|
731
|
-
onBeforeUnmount(stopPositioning);
|
|
732
679
|
return (_ctx, _cache) => {
|
|
733
|
-
return openBlock(), createElementBlock("div", _hoisted_1$9, [createElementVNode("div", _hoisted_2$9, [
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
680
|
+
return openBlock(), createElementBlock("div", _hoisted_1$9, [createElementVNode("div", _hoisted_2$9, [
|
|
681
|
+
_cache[2] || (_cache[2] = createStaticVNode("<div class=\"mint-date-picker__icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 2v4\"></path><path d=\"M16 2v4\"></path><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"></rect><path d=\"M3 10h18\"></path></svg></div>", 1)),
|
|
682
|
+
createElementVNode("input", {
|
|
683
|
+
ref_key: "triggerRef",
|
|
684
|
+
ref: triggerRef,
|
|
685
|
+
type: "text",
|
|
686
|
+
readonly: "",
|
|
687
|
+
"aria-haspopup": "dialog",
|
|
688
|
+
"aria-expanded": unref(isOpen),
|
|
689
|
+
value: displayValue.value,
|
|
690
|
+
placeholder: __props.placeholder || "Select date",
|
|
691
|
+
disabled: __props.disabled,
|
|
692
|
+
class: normalizeClass([
|
|
693
|
+
"mint-date-picker__input",
|
|
694
|
+
`mint-date-picker__input--${__props.size}`,
|
|
695
|
+
__props.invalid ? "mint-date-picker__input--error" : "",
|
|
696
|
+
__props.disabled ? "mint-date-picker__input--disabled" : ""
|
|
697
|
+
]),
|
|
698
|
+
onClick: toggleCalendar,
|
|
699
|
+
onKeydown: handleTriggerKeydown
|
|
700
|
+
}, null, 42, _hoisted_3$9),
|
|
701
|
+
__props.clearable && __props.modelValue && !__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
702
|
+
key: 0,
|
|
703
|
+
type: "button",
|
|
704
|
+
class: "mint-date-picker__clear-btn",
|
|
705
|
+
"aria-label": "Clear date",
|
|
706
|
+
onClick: withModifiers(clear, ["stop"])
|
|
707
|
+
}, [..._cache[1] || (_cache[1] = [createElementVNode("svg", {
|
|
708
|
+
viewBox: "0 0 24 24",
|
|
709
|
+
fill: "none",
|
|
710
|
+
stroke: "currentColor",
|
|
711
|
+
"stroke-width": "2",
|
|
712
|
+
"stroke-linecap": "round",
|
|
713
|
+
"stroke-linejoin": "round",
|
|
714
|
+
"aria-hidden": "true"
|
|
715
|
+
}, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])) : createCommentVNode("", true)
|
|
716
|
+
]), (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(Transition, {
|
|
752
717
|
"enter-active-class": "mint-date-picker__dropdown-enter-active",
|
|
753
718
|
"enter-from-class": "mint-date-picker__dropdown-enter-from",
|
|
754
719
|
"enter-to-class": "mint-date-picker__dropdown-enter-to",
|
|
@@ -761,9 +726,10 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
761
726
|
ref_key: "dropdownRef",
|
|
762
727
|
ref: dropdownRef,
|
|
763
728
|
class: "mint-popover mint-date-picker__dropdown",
|
|
764
|
-
style: normalizeStyle(dropdownStyle
|
|
729
|
+
style: normalizeStyle(unref(dropdownStyle)),
|
|
765
730
|
role: "dialog",
|
|
766
|
-
"aria-label": "Date picker"
|
|
731
|
+
"aria-label": "Date picker",
|
|
732
|
+
onKeydown: _cache[0] || (_cache[0] = withKeys(withModifiers(($event) => unref(close)(true), ["prevent"]), ["escape"]))
|
|
767
733
|
}, [createVNode(CalendarGridPanelInternal_default, {
|
|
768
734
|
"week-days": unref(weekDays),
|
|
769
735
|
"month-year": unref(monthYear),
|
|
@@ -779,148 +745,13 @@ var DatePickerDateInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
779
745
|
"selected-date",
|
|
780
746
|
"onPreviousMonth",
|
|
781
747
|
"onNextMonth"
|
|
782
|
-
]),
|
|
783
|
-
type: "button",
|
|
784
|
-
class: "mint-date-picker__footer-btn mint-date-picker__today-btn",
|
|
785
|
-
onClick: goToToday
|
|
786
|
-
}, " Today "), __props.clearable && __props.modelValue ? (openBlock(), createElementBlock("button", {
|
|
787
|
-
key: 0,
|
|
788
|
-
type: "button",
|
|
789
|
-
class: "mint-date-picker__footer-btn mint-date-picker__clear-btn",
|
|
790
|
-
onClick: clear
|
|
791
|
-
}, " Clear ")) : createCommentVNode("", true)])], 4)) : createCommentVNode("", true)]),
|
|
748
|
+
])], 36)) : createCommentVNode("", true)]),
|
|
792
749
|
_: 1
|
|
793
750
|
})]))], 512);
|
|
794
751
|
};
|
|
795
752
|
}
|
|
796
753
|
});
|
|
797
754
|
//#endregion
|
|
798
|
-
//#region src/utils/time.ts
|
|
799
|
-
var time_exports = /* @__PURE__ */ __exportAll({
|
|
800
|
-
addMinutes: () => addMinutes,
|
|
801
|
-
compareTime: () => compareTime,
|
|
802
|
-
durationMinutes: () => durationMinutes,
|
|
803
|
-
findAvailableSlots: () => findAvailableSlots,
|
|
804
|
-
findNearestTimeSlotIndex: () => findNearestTimeSlotIndex,
|
|
805
|
-
formatDuration: () => formatDuration,
|
|
806
|
-
formatTime: () => formatTime,
|
|
807
|
-
formatTimeSlot: () => formatTimeSlot,
|
|
808
|
-
fromMinutes: () => fromMinutes,
|
|
809
|
-
generateTimeSlots: () => generateTimeSlots,
|
|
810
|
-
isTimeInRange: () => isTimeInRange,
|
|
811
|
-
parseTime: () => parseTime,
|
|
812
|
-
rangesOverlap: () => rangesOverlap,
|
|
813
|
-
snapToSlot: () => snapToSlot,
|
|
814
|
-
toMinutes: () => toMinutes
|
|
815
|
-
});
|
|
816
|
-
function parseTime(time) {
|
|
817
|
-
const [h, m] = time.split(":").map(Number);
|
|
818
|
-
return {
|
|
819
|
-
hour: h,
|
|
820
|
-
minute: m
|
|
821
|
-
};
|
|
822
|
-
}
|
|
823
|
-
function formatTime(hour, minute, format = "24h") {
|
|
824
|
-
if (format === "24h") return `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
|
|
825
|
-
const period = hour >= 12 ? "PM" : "AM";
|
|
826
|
-
return `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:${String(minute).padStart(2, "0")} ${period}`;
|
|
827
|
-
}
|
|
828
|
-
function formatTimeSlot(time, format = "24h") {
|
|
829
|
-
const { hour, minute } = parseTime(time);
|
|
830
|
-
return formatTime(hour, minute, format);
|
|
831
|
-
}
|
|
832
|
-
function generateTimeSlots(start, end, stepMinutes) {
|
|
833
|
-
const slots = [];
|
|
834
|
-
const s = parseTime(start);
|
|
835
|
-
const e = parseTime(end);
|
|
836
|
-
const startMin = s.hour * 60 + s.minute;
|
|
837
|
-
const endMin = e.hour * 60 + e.minute;
|
|
838
|
-
for (let m = startMin; m <= endMin; m += stepMinutes) {
|
|
839
|
-
const hour = Math.floor(m / 60);
|
|
840
|
-
const minute = m % 60;
|
|
841
|
-
if (hour >= 24) break;
|
|
842
|
-
slots.push(formatTime(hour, minute));
|
|
843
|
-
}
|
|
844
|
-
return slots;
|
|
845
|
-
}
|
|
846
|
-
function rangesOverlap(a, b) {
|
|
847
|
-
const aStart = toMinutes(a.start);
|
|
848
|
-
const aEnd = toMinutes(a.end);
|
|
849
|
-
const bStart = toMinutes(b.start);
|
|
850
|
-
return aStart < toMinutes(b.end) && bStart < aEnd;
|
|
851
|
-
}
|
|
852
|
-
function durationMinutes(start, end) {
|
|
853
|
-
return toMinutes(end) - toMinutes(start);
|
|
854
|
-
}
|
|
855
|
-
function formatDuration(minutes) {
|
|
856
|
-
if (minutes < 0) return "-" + formatDuration(-minutes);
|
|
857
|
-
const h = Math.floor(minutes / 60);
|
|
858
|
-
const m = minutes % 60;
|
|
859
|
-
if (h === 0) return `${m}m`;
|
|
860
|
-
if (m === 0) return `${h}h`;
|
|
861
|
-
return `${h}h ${m}m`;
|
|
862
|
-
}
|
|
863
|
-
function isTimeInRange(time, start, end) {
|
|
864
|
-
const t = toMinutes(time);
|
|
865
|
-
return t >= toMinutes(start) && t <= toMinutes(end);
|
|
866
|
-
}
|
|
867
|
-
function findAvailableSlots(dayStart, dayEnd, occupied, minDuration) {
|
|
868
|
-
const sorted = [...occupied].sort((a, b) => toMinutes(a.start) - toMinutes(b.start));
|
|
869
|
-
const available = [];
|
|
870
|
-
let cursor = toMinutes(dayStart);
|
|
871
|
-
const end = toMinutes(dayEnd);
|
|
872
|
-
for (const slot of sorted) {
|
|
873
|
-
const slotStart = toMinutes(slot.start);
|
|
874
|
-
const slotEnd = toMinutes(slot.end);
|
|
875
|
-
if (slotStart > cursor && slotStart - cursor >= minDuration) available.push({
|
|
876
|
-
start: fromMinutes(cursor),
|
|
877
|
-
end: fromMinutes(slotStart)
|
|
878
|
-
});
|
|
879
|
-
cursor = Math.max(cursor, slotEnd);
|
|
880
|
-
}
|
|
881
|
-
if (end > cursor && end - cursor >= minDuration) available.push({
|
|
882
|
-
start: fromMinutes(cursor),
|
|
883
|
-
end: fromMinutes(end)
|
|
884
|
-
});
|
|
885
|
-
return available;
|
|
886
|
-
}
|
|
887
|
-
function snapToSlot(time, stepMinutes) {
|
|
888
|
-
const total = toMinutes(time);
|
|
889
|
-
return fromMinutes(Math.round(total / stepMinutes) * stepMinutes);
|
|
890
|
-
}
|
|
891
|
-
function addMinutes(time, minutes) {
|
|
892
|
-
const total = toMinutes(time) + minutes;
|
|
893
|
-
return fromMinutes(Math.max(0, Math.min(total, 1439)));
|
|
894
|
-
}
|
|
895
|
-
function compareTime(a, b) {
|
|
896
|
-
const ma = toMinutes(a);
|
|
897
|
-
const mb = toMinutes(b);
|
|
898
|
-
if (ma < mb) return -1;
|
|
899
|
-
if (ma > mb) return 1;
|
|
900
|
-
return 0;
|
|
901
|
-
}
|
|
902
|
-
function findNearestTimeSlotIndex(time, slots) {
|
|
903
|
-
if (slots.length === 0) return -1;
|
|
904
|
-
const target = toMinutes(time);
|
|
905
|
-
let bestIndex = 0;
|
|
906
|
-
let bestDiff = Infinity;
|
|
907
|
-
for (let index = 0; index < slots.length; index++) {
|
|
908
|
-
const diff = Math.abs(toMinutes(slots[index]) - target);
|
|
909
|
-
if (diff < bestDiff) {
|
|
910
|
-
bestDiff = diff;
|
|
911
|
-
bestIndex = index;
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
return bestIndex;
|
|
915
|
-
}
|
|
916
|
-
function toMinutes(time) {
|
|
917
|
-
const { hour, minute } = parseTime(time);
|
|
918
|
-
return hour * 60 + minute;
|
|
919
|
-
}
|
|
920
|
-
function fromMinutes(total) {
|
|
921
|
-
return formatTime(Math.floor(total / 60) % 24, total % 60);
|
|
922
|
-
}
|
|
923
|
-
//#endregion
|
|
924
755
|
//#region src/components/internal/DatePickerDateTimeInternal.vue?vue&type=script&setup=true&lang.ts
|
|
925
756
|
var _hoisted_1$8 = {
|
|
926
757
|
ref: "root",
|
|
@@ -935,7 +766,7 @@ var _hoisted_3$8 = [
|
|
|
935
766
|
];
|
|
936
767
|
var _hoisted_4$8 = { class: "mint-datetime-picker__calendar-section" };
|
|
937
768
|
var _hoisted_5$7 = { class: "mint-datetime-picker__time-section" };
|
|
938
|
-
var _hoisted_6$
|
|
769
|
+
var _hoisted_6$6 = { class: "mint-datetime-picker__time-grid" };
|
|
939
770
|
var _hoisted_7$6 = ["disabled", "onClick"];
|
|
940
771
|
var _hoisted_8$5 = { class: "mint-datetime-picker__footer" };
|
|
941
772
|
//#endregion
|
|
@@ -970,10 +801,12 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
970
801
|
const props = __props;
|
|
971
802
|
const emit = __emit;
|
|
972
803
|
const dropdownRef = ref(null);
|
|
804
|
+
const rootRef = useTemplateRef("root");
|
|
973
805
|
const { isOpen, open, close, toggle } = useDropdownState({
|
|
974
|
-
rootRef
|
|
806
|
+
rootRef,
|
|
975
807
|
triggerRef: useTemplateRef("trigger")
|
|
976
808
|
});
|
|
809
|
+
const { style: dropdownStyle } = useFloatingPanel(rootRef, dropdownRef, isOpen);
|
|
977
810
|
useFocusTrap({
|
|
978
811
|
containerRef: dropdownRef,
|
|
979
812
|
active: isOpen
|
|
@@ -998,11 +831,8 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
998
831
|
});
|
|
999
832
|
const displayValue = computed(() => {
|
|
1000
833
|
if (!selectedDate.value) return "";
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
month: "short",
|
|
1004
|
-
day: "numeric"
|
|
1005
|
-
})} ${formatTime(selectedDate.value.getHours(), selectedDate.value.getMinutes(), props.timeFormat)}`;
|
|
834
|
+
const timeStr = formatTime(selectedDate.value.getHours(), selectedDate.value.getMinutes(), props.timeFormat);
|
|
835
|
+
return `${formatDateValue(selectedDate.value)} ${timeStr}`;
|
|
1006
836
|
});
|
|
1007
837
|
const timeSlots = computed(() => {
|
|
1008
838
|
return generateTimeSlots("00:00", "23:59", props.timeStep);
|
|
@@ -1084,47 +914,25 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1084
914
|
focusCalendar();
|
|
1085
915
|
});
|
|
1086
916
|
return (_ctx, _cache) => {
|
|
1087
|
-
return openBlock(), createElementBlock("div", _hoisted_1$8, [createElementVNode("div", _hoisted_2$8, [
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
disabled: __props.disabled,
|
|
1107
|
-
class: normalizeClass([
|
|
1108
|
-
"mint-datetime-picker__input",
|
|
1109
|
-
`mint-datetime-picker__input--${__props.size}`,
|
|
1110
|
-
__props.invalid ? "mint-datetime-picker__input--error" : "",
|
|
1111
|
-
__props.disabled ? "mint-datetime-picker__input--disabled" : ""
|
|
1112
|
-
]),
|
|
1113
|
-
"aria-label": "Select date and time",
|
|
1114
|
-
onClick: toggleDropdown,
|
|
1115
|
-
onKeydown: handleTriggerKeydown
|
|
1116
|
-
}, null, 42, _hoisted_3$8),
|
|
1117
|
-
_cache[1] || (_cache[1] = createElementVNode("div", { class: "mint-datetime-picker__icon-clock" }, [createElementVNode("svg", {
|
|
1118
|
-
fill: "none",
|
|
1119
|
-
stroke: "currentColor",
|
|
1120
|
-
viewBox: "0 0 24 24"
|
|
1121
|
-
}, [createElementVNode("path", {
|
|
1122
|
-
"stroke-linecap": "round",
|
|
1123
|
-
"stroke-linejoin": "round",
|
|
1124
|
-
"stroke-width": "2",
|
|
1125
|
-
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
1126
|
-
})])], -1))
|
|
1127
|
-
]), createVNode(Transition, {
|
|
917
|
+
return openBlock(), createElementBlock("div", _hoisted_1$8, [createElementVNode("div", _hoisted_2$8, [_cache[1] || (_cache[1] = createStaticVNode("<div class=\"mint-datetime-picker__icon-calendar\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 2v4\"></path><path d=\"M16 2v4\"></path><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"></rect><path d=\"M3 10h18\"></path></svg></div>", 1)), createElementVNode("input", {
|
|
918
|
+
ref: "trigger",
|
|
919
|
+
type: "text",
|
|
920
|
+
readonly: "",
|
|
921
|
+
"aria-haspopup": "dialog",
|
|
922
|
+
"aria-expanded": unref(isOpen),
|
|
923
|
+
value: displayValue.value,
|
|
924
|
+
placeholder: __props.placeholder,
|
|
925
|
+
disabled: __props.disabled,
|
|
926
|
+
class: normalizeClass([
|
|
927
|
+
"mint-datetime-picker__input",
|
|
928
|
+
`mint-datetime-picker__input--${__props.size}`,
|
|
929
|
+
__props.invalid ? "mint-datetime-picker__input--error" : "",
|
|
930
|
+
__props.disabled ? "mint-datetime-picker__input--disabled" : ""
|
|
931
|
+
]),
|
|
932
|
+
"aria-label": "Select date and time",
|
|
933
|
+
onClick: toggleDropdown,
|
|
934
|
+
onKeydown: handleTriggerKeydown
|
|
935
|
+
}, null, 42, _hoisted_3$8)]), createVNode(Transition, {
|
|
1128
936
|
"enter-active-class": "mint-datetime-picker__dropdown-enter-active",
|
|
1129
937
|
"enter-from-class": "mint-datetime-picker__dropdown-enter-from",
|
|
1130
938
|
"enter-to-class": "mint-datetime-picker__dropdown-enter-to",
|
|
@@ -1137,8 +945,10 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1137
945
|
ref_key: "dropdownRef",
|
|
1138
946
|
ref: dropdownRef,
|
|
1139
947
|
class: "mint-popover mint-datetime-picker__dropdown",
|
|
948
|
+
style: normalizeStyle(unref(dropdownStyle)),
|
|
1140
949
|
role: "dialog",
|
|
1141
|
-
"aria-label": "Date and time picker"
|
|
950
|
+
"aria-label": "Date and time picker",
|
|
951
|
+
onKeydown: _cache[0] || (_cache[0] = withKeys(withModifiers(($event) => unref(close)(true), ["prevent"]), ["escape"]))
|
|
1142
952
|
}, [
|
|
1143
953
|
createElementVNode("div", _hoisted_4$8, [createVNode(CalendarGridPanelInternal_default, {
|
|
1144
954
|
"week-days": unref(weekDays),
|
|
@@ -1159,7 +969,7 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1159
969
|
"onNextMonth"
|
|
1160
970
|
])]),
|
|
1161
971
|
_cache[3] || (_cache[3] = createElementVNode("div", { class: "mint-datetime-picker__divider" }, null, -1)),
|
|
1162
|
-
createElementVNode("div", _hoisted_5$7, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-datetime-picker__time-label" }, "Time", -1)), createElementVNode("div", _hoisted_6$
|
|
972
|
+
createElementVNode("div", _hoisted_5$7, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-datetime-picker__time-label" }, "Time", -1)), createElementVNode("div", _hoisted_6$6, [(openBlock(true), createElementBlock(Fragment, null, renderList(timeSlots.value, (time) => {
|
|
1163
973
|
return openBlock(), createElementBlock("button", {
|
|
1164
974
|
key: time,
|
|
1165
975
|
type: "button",
|
|
@@ -1186,7 +996,7 @@ var DatePickerDateTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1186
996
|
class: "mint-datetime-picker__footer-btn mint-datetime-picker__footer-btn--muted",
|
|
1187
997
|
onClick: clear
|
|
1188
998
|
}, " Clear ")) : createCommentVNode("", true)])
|
|
1189
|
-
],
|
|
999
|
+
], 36)) : createCommentVNode("", true)]),
|
|
1190
1000
|
_: 1
|
|
1191
1001
|
})], 512);
|
|
1192
1002
|
};
|
|
@@ -1203,18 +1013,14 @@ var _hoisted_2$7 = [
|
|
|
1203
1013
|
"aria-controls",
|
|
1204
1014
|
"aria-activedescendant"
|
|
1205
1015
|
];
|
|
1206
|
-
var _hoisted_3$7 =
|
|
1207
|
-
key: 0,
|
|
1208
|
-
class: "mint-popover mint-time-picker__dropdown"
|
|
1209
|
-
};
|
|
1210
|
-
var _hoisted_4$7 = [
|
|
1016
|
+
var _hoisted_3$7 = [
|
|
1211
1017
|
"id",
|
|
1212
1018
|
"aria-selected",
|
|
1213
1019
|
"aria-disabled",
|
|
1214
1020
|
"onClick"
|
|
1215
1021
|
];
|
|
1216
|
-
var
|
|
1217
|
-
var
|
|
1022
|
+
var _hoisted_4$7 = { class: "mint-time-picker__slot-time" };
|
|
1023
|
+
var _hoisted_5$6 = {
|
|
1218
1024
|
key: 0,
|
|
1219
1025
|
class: "mint-time-picker__slot-reason"
|
|
1220
1026
|
};
|
|
@@ -1250,16 +1056,21 @@ var DatePickerTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1250
1056
|
const props = __props;
|
|
1251
1057
|
const emit = __emit;
|
|
1252
1058
|
const listRef = ref(null);
|
|
1059
|
+
const dropdownRef = ref(null);
|
|
1253
1060
|
const highlightedIndex = ref(-1);
|
|
1254
1061
|
const listboxId = `mint-time-picker-listbox-${useId().replace(/:/g, "")}`;
|
|
1062
|
+
const rootRef = useTemplateRef("root");
|
|
1255
1063
|
const { isOpen, open, close, toggle } = useDropdownState({
|
|
1256
|
-
rootRef
|
|
1064
|
+
rootRef,
|
|
1257
1065
|
triggerRef: useTemplateRef("trigger")
|
|
1258
1066
|
});
|
|
1067
|
+
const { style: dropdownStyle } = useFloatingPanel(rootRef, dropdownRef, isOpen, { matchWidth: true });
|
|
1259
1068
|
/** Id of the highlighted slot, published to the input as `aria-activedescendant`. */
|
|
1260
1069
|
const activeSlotId = computed(() => isOpen.value && highlightedIndex.value >= 0 ? `${listboxId}-option-${highlightedIndex.value}` : void 0);
|
|
1261
1070
|
const slots = computed(() => {
|
|
1262
|
-
|
|
1071
|
+
const start = props.min ?? "00:00";
|
|
1072
|
+
const end = props.max ?? "23:59";
|
|
1073
|
+
return generateTimeSlots(start, end, props.step);
|
|
1263
1074
|
});
|
|
1264
1075
|
const displayValue = computed(() => {
|
|
1265
1076
|
if (!props.modelValue) return "";
|
|
@@ -1382,6 +1193,19 @@ var DatePickerTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1382
1193
|
class: "mint-time-picker",
|
|
1383
1194
|
onKeydown: handleKeydown
|
|
1384
1195
|
}, [createElementVNode("div", _hoisted_1$7, [
|
|
1196
|
+
_cache[1] || (_cache[1] = createElementVNode("div", { class: "mint-time-picker__icon" }, [createElementVNode("svg", {
|
|
1197
|
+
viewBox: "0 0 24 24",
|
|
1198
|
+
fill: "none",
|
|
1199
|
+
stroke: "currentColor",
|
|
1200
|
+
"stroke-width": "2",
|
|
1201
|
+
"stroke-linecap": "round",
|
|
1202
|
+
"stroke-linejoin": "round",
|
|
1203
|
+
"aria-hidden": "true"
|
|
1204
|
+
}, [createElementVNode("circle", {
|
|
1205
|
+
cx: "12",
|
|
1206
|
+
cy: "12",
|
|
1207
|
+
r: "10"
|
|
1208
|
+
}), createElementVNode("path", { d: "M12 6v6l4 2" })])], -1)),
|
|
1385
1209
|
createElementVNode("input", {
|
|
1386
1210
|
ref: "trigger",
|
|
1387
1211
|
type: "text",
|
|
@@ -1415,19 +1239,7 @@ var DatePickerTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1415
1239
|
"stroke-width": "2",
|
|
1416
1240
|
"stroke-linecap": "round",
|
|
1417
1241
|
"stroke-linejoin": "round"
|
|
1418
|
-
}, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])) : createCommentVNode("", true)
|
|
1419
|
-
_cache[1] || (_cache[1] = createElementVNode("div", { class: "mint-time-picker__icon" }, [createElementVNode("svg", {
|
|
1420
|
-
viewBox: "0 0 24 24",
|
|
1421
|
-
fill: "none",
|
|
1422
|
-
stroke: "currentColor",
|
|
1423
|
-
"stroke-width": "2",
|
|
1424
|
-
"stroke-linecap": "round",
|
|
1425
|
-
"stroke-linejoin": "round"
|
|
1426
|
-
}, [createElementVNode("circle", {
|
|
1427
|
-
cx: "12",
|
|
1428
|
-
cy: "12",
|
|
1429
|
-
r: "10"
|
|
1430
|
-
}), createElementVNode("path", { d: "M12 6v6l4 2" })])], -1))
|
|
1242
|
+
}, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])])) : createCommentVNode("", true)
|
|
1431
1243
|
]), createVNode(Transition, {
|
|
1432
1244
|
"enter-active-class": "mint-time-picker__dropdown-enter-active",
|
|
1433
1245
|
"enter-from-class": "mint-time-picker__dropdown-enter-from",
|
|
@@ -1436,7 +1248,13 @@ var DatePickerTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1436
1248
|
"leave-from-class": "mint-time-picker__dropdown-leave-from",
|
|
1437
1249
|
"leave-to-class": "mint-time-picker__dropdown-leave-to"
|
|
1438
1250
|
}, {
|
|
1439
|
-
default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("div",
|
|
1251
|
+
default: withCtx(() => [unref(isOpen) ? (openBlock(), createElementBlock("div", {
|
|
1252
|
+
key: 0,
|
|
1253
|
+
ref_key: "dropdownRef",
|
|
1254
|
+
ref: dropdownRef,
|
|
1255
|
+
class: "mint-popover mint-time-picker__dropdown",
|
|
1256
|
+
style: normalizeStyle(unref(dropdownStyle))
|
|
1257
|
+
}, [createElementVNode("ul", {
|
|
1440
1258
|
id: listboxId,
|
|
1441
1259
|
ref_key: "listRef",
|
|
1442
1260
|
ref: listRef,
|
|
@@ -1457,21 +1275,8 @@ var DatePickerTimeInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1457
1275
|
index === highlightedIndex.value && !isSlotDisabled(slot) ? "mint-menu-item--active mint-time-picker__slot--highlighted" : ""
|
|
1458
1276
|
]),
|
|
1459
1277
|
onClick: ($event) => selectSlot(slot)
|
|
1460
|
-
}, [
|
|
1461
|
-
|
|
1462
|
-
slotReason(slot) ? (openBlock(), createElementBlock("span", _hoisted_6$6, toDisplayString(slotReason(slot)), 1)) : createCommentVNode("", true),
|
|
1463
|
-
_cache[2] || (_cache[2] = createElementVNode("svg", {
|
|
1464
|
-
class: "mint-menu-item__check",
|
|
1465
|
-
viewBox: "0 0 16 16",
|
|
1466
|
-
fill: "none",
|
|
1467
|
-
stroke: "currentColor",
|
|
1468
|
-
"stroke-width": "2",
|
|
1469
|
-
"stroke-linecap": "round",
|
|
1470
|
-
"stroke-linejoin": "round",
|
|
1471
|
-
"aria-hidden": "true"
|
|
1472
|
-
}, [createElementVNode("path", { d: "M3.5 8.5l3 3 6-7" })], -1))
|
|
1473
|
-
], 10, _hoisted_4$7);
|
|
1474
|
-
}), 128))], 512)])) : createCommentVNode("", true)]),
|
|
1278
|
+
}, [createElementVNode("span", _hoisted_4$7, toDisplayString(unref(formatTimeSlot)(slot, __props.format)), 1), slotReason(slot) ? (openBlock(), createElementBlock("span", _hoisted_5$6, toDisplayString(slotReason(slot)), 1)) : createCommentVNode("", true)], 10, _hoisted_3$7);
|
|
1279
|
+
}), 128))], 512)], 4)) : createCommentVNode("", true)]),
|
|
1475
1280
|
_: 1
|
|
1476
1281
|
})], 544);
|
|
1477
1282
|
};
|
|
@@ -1762,34 +1567,12 @@ var NumberUnitInputInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1762
1567
|
emit("update:unit", newUnitValue);
|
|
1763
1568
|
}
|
|
1764
1569
|
const menuRef = ref(null);
|
|
1765
|
-
const menuStyle = ref({ opacity: "0" });
|
|
1766
1570
|
const { isOpen, rootRef, open, close } = useDropdownState({
|
|
1767
1571
|
triggerRef: useTemplateRef("trigger"),
|
|
1768
|
-
|
|
1769
|
-
insideRefs: [menuRef],
|
|
1770
|
-
onOpen: () => {
|
|
1771
|
-
menuStyle.value = { opacity: "0" };
|
|
1772
|
-
}
|
|
1773
|
-
});
|
|
1774
|
-
/** Teleported + fixed like ActionMenu, so overflow:hidden/auto ancestors never clip the menu. */
|
|
1775
|
-
watch(isOpen, async (opened) => {
|
|
1776
|
-
if (!opened) return;
|
|
1777
|
-
await nextTick();
|
|
1778
|
-
if (!rootRef.value || !menuRef.value) return;
|
|
1779
|
-
const { x, y } = await computePosition(rootRef.value, menuRef.value, {
|
|
1780
|
-
placement: "bottom-end",
|
|
1781
|
-
strategy: "fixed",
|
|
1782
|
-
middleware: [
|
|
1783
|
-
offset(4),
|
|
1784
|
-
flip(),
|
|
1785
|
-
shift({ padding: 8 })
|
|
1786
|
-
]
|
|
1787
|
-
});
|
|
1788
|
-
menuStyle.value = {
|
|
1789
|
-
left: `${x}px`,
|
|
1790
|
-
top: `${y}px`
|
|
1791
|
-
};
|
|
1572
|
+
insideRefs: [menuRef]
|
|
1792
1573
|
});
|
|
1574
|
+
/** Teleported + fixed like ActionMenu, so overflow:hidden/auto ancestors never clip the menu; it follows the field on scroll. */
|
|
1575
|
+
const { style: menuStyle } = useFloatingPanel(rootRef, menuRef, isOpen, { placement: "bottom-end" });
|
|
1793
1576
|
function menuItems() {
|
|
1794
1577
|
return menuRef.value ? Array.from(menuRef.value.querySelectorAll("[role=\"option\"]")) : [];
|
|
1795
1578
|
}
|
|
@@ -1860,7 +1643,7 @@ var NumberUnitInputInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
1860
1643
|
ref_key: "menuRef",
|
|
1861
1644
|
ref: menuRef,
|
|
1862
1645
|
class: "mint-popover mint-unit-input__menu",
|
|
1863
|
-
style: normalizeStyle(menuStyle
|
|
1646
|
+
style: normalizeStyle(unref(menuStyle)),
|
|
1864
1647
|
role: "listbox",
|
|
1865
1648
|
"aria-label": "Unit",
|
|
1866
1649
|
onKeydown: _cache[1] || (_cache[1] = (...args) => unref(handlePanelKeydown) && unref(handlePanelKeydown)(...args))
|
|
@@ -2178,30 +1961,97 @@ var NumberInput_default = /* @__PURE__ */ defineComponent({
|
|
|
2178
1961
|
disabled: __props.disabled || !canDecrement.value,
|
|
2179
1962
|
class: "mint-number-input__stepper mint-number-input__stepper--down",
|
|
2180
1963
|
onClick: decrement
|
|
2181
|
-
}, [
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
"stroke-width": "1.6",
|
|
2186
|
-
"stroke-linecap": "round"
|
|
2187
|
-
}, [createElementVNode("path", { d: "M2 5h6" })], -1)])], 8, _hoisted_6$4), createElementVNode("button", {
|
|
1964
|
+
}, [createVNode(unref(ChevronDown), {
|
|
1965
|
+
size: 12,
|
|
1966
|
+
"stroke-width": 2.25
|
|
1967
|
+
})], 8, _hoisted_6$4), createElementVNode("button", {
|
|
2188
1968
|
type: "button",
|
|
2189
1969
|
tabindex: "-1",
|
|
2190
1970
|
"aria-label": "Increase value",
|
|
2191
1971
|
disabled: __props.disabled || !canIncrement.value,
|
|
2192
1972
|
class: "mint-number-input__stepper mint-number-input__stepper--up",
|
|
2193
1973
|
onClick: increment
|
|
2194
|
-
}, [
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
"stroke-width": "1.6",
|
|
2199
|
-
"stroke-linecap": "round"
|
|
2200
|
-
}, [createElementVNode("path", { d: "M5 2v6" }), createElementVNode("path", { d: "M2 5h6" })], -1)])], 8, _hoisted_7$4)])])], 6));
|
|
1974
|
+
}, [createVNode(unref(ChevronUp), {
|
|
1975
|
+
size: 12,
|
|
1976
|
+
"stroke-width": 2.25
|
|
1977
|
+
})], 8, _hoisted_7$4)])])], 6));
|
|
2201
1978
|
};
|
|
2202
1979
|
}
|
|
2203
1980
|
});
|
|
2204
1981
|
//#endregion
|
|
1982
|
+
//#region src/composables/usePlatform.ts
|
|
1983
|
+
var platformContext = ref({
|
|
1984
|
+
isIntegrated: false,
|
|
1985
|
+
theme: "system"
|
|
1986
|
+
});
|
|
1987
|
+
function storedTheme() {
|
|
1988
|
+
try {
|
|
1989
|
+
const s = localStorage.getItem("mint-settings");
|
|
1990
|
+
if (s) return JSON.parse(s).theme || "system";
|
|
1991
|
+
} catch {}
|
|
1992
|
+
return "system";
|
|
1993
|
+
}
|
|
1994
|
+
function detectPlatform() {
|
|
1995
|
+
const platformData = window.__MINT_PLATFORM__;
|
|
1996
|
+
if (platformData) {
|
|
1997
|
+
platformContext.value = {
|
|
1998
|
+
...platformData,
|
|
1999
|
+
isIntegrated: true,
|
|
2000
|
+
theme: storedTheme()
|
|
2001
|
+
};
|
|
2002
|
+
return;
|
|
2003
|
+
}
|
|
2004
|
+
platformContext.value = {
|
|
2005
|
+
isIntegrated: new URLSearchParams(window.location.search).has("mint-plugin"),
|
|
2006
|
+
theme: storedTheme()
|
|
2007
|
+
};
|
|
2008
|
+
}
|
|
2009
|
+
var ACCESS_PERMISSIONS = {
|
|
2010
|
+
use: ["plugins.use"],
|
|
2011
|
+
configure: ["plugins.use", "plugins.configure"]
|
|
2012
|
+
};
|
|
2013
|
+
/**
|
|
2014
|
+
* Read the platform context the MINT platform injects into a plugin page.
|
|
2015
|
+
*
|
|
2016
|
+
* `can(access)` answers with the same three levels as the Python `access`
|
|
2017
|
+
* option. A page with no signed-in user passes every check when it runs
|
|
2018
|
+
* standalone or the platform reports `authRequired: false`; the platform
|
|
2019
|
+
* still checks every request.
|
|
2020
|
+
*
|
|
2021
|
+
* @example
|
|
2022
|
+
* ```typescript
|
|
2023
|
+
* const platform = usePlatform()
|
|
2024
|
+
* const canConfigure = computed(() => platform.can('configure'))
|
|
2025
|
+
* ```
|
|
2026
|
+
*/
|
|
2027
|
+
function usePlatform() {
|
|
2028
|
+
detectPlatform();
|
|
2029
|
+
const integrated = computed(() => platformContext.value.isIntegrated);
|
|
2030
|
+
const plugin = computed(() => platformContext.value.plugin);
|
|
2031
|
+
const user = computed(() => platformContext.value.user);
|
|
2032
|
+
const theme = computed(() => platformContext.value.theme);
|
|
2033
|
+
const features = computed(() => platformContext.value.features);
|
|
2034
|
+
function can(access) {
|
|
2035
|
+
const current = user.value;
|
|
2036
|
+
if (!current) return !integrated.value || platformContext.value.authRequired === false;
|
|
2037
|
+
if (isAdminUser(current)) return true;
|
|
2038
|
+
if (access === "admin" || !hasAllPermissions(current, ACCESS_PERMISSIONS[access])) return false;
|
|
2039
|
+
const visible = getRoleInfo(current)?.plugin_access;
|
|
2040
|
+
if (!visible || visible === "all") return true;
|
|
2041
|
+
const names = [plugin.value?.id, plugin.value?.route_prefix?.replace(/^\/+|\/+$/g, "")];
|
|
2042
|
+
return Array.isArray(visible) && names.some((name) => !!name && visible.includes(name));
|
|
2043
|
+
}
|
|
2044
|
+
return {
|
|
2045
|
+
integrated,
|
|
2046
|
+
plugin,
|
|
2047
|
+
user,
|
|
2048
|
+
theme,
|
|
2049
|
+
features,
|
|
2050
|
+
isAdmin: computed(() => can("admin")),
|
|
2051
|
+
can
|
|
2052
|
+
};
|
|
2053
|
+
}
|
|
2054
|
+
//#endregion
|
|
2205
2055
|
//#region src/composables/eventStream.ts
|
|
2206
2056
|
var EventStreamResponseError = class extends Error {
|
|
2207
2057
|
response;
|
|
@@ -5050,79 +4900,6 @@ function optionValue(option) {
|
|
|
5050
4900
|
return option;
|
|
5051
4901
|
}
|
|
5052
4902
|
//#endregion
|
|
5053
|
-
//#region src/composables/usePlatform.ts
|
|
5054
|
-
var platformContext = ref({
|
|
5055
|
-
isIntegrated: false,
|
|
5056
|
-
theme: "system"
|
|
5057
|
-
});
|
|
5058
|
-
function storedTheme() {
|
|
5059
|
-
try {
|
|
5060
|
-
const s = localStorage.getItem("mint-settings");
|
|
5061
|
-
if (s) return JSON.parse(s).theme || "system";
|
|
5062
|
-
} catch {}
|
|
5063
|
-
return "system";
|
|
5064
|
-
}
|
|
5065
|
-
function detectPlatform() {
|
|
5066
|
-
const platformData = window.__MINT_PLATFORM__;
|
|
5067
|
-
if (platformData) {
|
|
5068
|
-
platformContext.value = {
|
|
5069
|
-
...platformData,
|
|
5070
|
-
isIntegrated: true,
|
|
5071
|
-
theme: storedTheme()
|
|
5072
|
-
};
|
|
5073
|
-
return;
|
|
5074
|
-
}
|
|
5075
|
-
platformContext.value = {
|
|
5076
|
-
isIntegrated: new URLSearchParams(window.location.search).has("mint-plugin"),
|
|
5077
|
-
theme: storedTheme()
|
|
5078
|
-
};
|
|
5079
|
-
}
|
|
5080
|
-
var ACCESS_PERMISSIONS = {
|
|
5081
|
-
use: ["plugins.use"],
|
|
5082
|
-
configure: ["plugins.use", "plugins.configure"]
|
|
5083
|
-
};
|
|
5084
|
-
/**
|
|
5085
|
-
* Read the platform context the MINT platform injects into a plugin page.
|
|
5086
|
-
*
|
|
5087
|
-
* `can(access)` answers with the same three levels as the Python `access`
|
|
5088
|
-
* option. A page with no signed-in user passes every check when it runs
|
|
5089
|
-
* standalone or the platform reports `authRequired: false`; the platform
|
|
5090
|
-
* still checks every request.
|
|
5091
|
-
*
|
|
5092
|
-
* @example
|
|
5093
|
-
* ```typescript
|
|
5094
|
-
* const platform = usePlatform()
|
|
5095
|
-
* const canConfigure = computed(() => platform.can('configure'))
|
|
5096
|
-
* ```
|
|
5097
|
-
*/
|
|
5098
|
-
function usePlatform() {
|
|
5099
|
-
detectPlatform();
|
|
5100
|
-
const integrated = computed(() => platformContext.value.isIntegrated);
|
|
5101
|
-
const plugin = computed(() => platformContext.value.plugin);
|
|
5102
|
-
const user = computed(() => platformContext.value.user);
|
|
5103
|
-
const theme = computed(() => platformContext.value.theme);
|
|
5104
|
-
const features = computed(() => platformContext.value.features);
|
|
5105
|
-
function can(access) {
|
|
5106
|
-
const current = user.value;
|
|
5107
|
-
if (!current) return !integrated.value || platformContext.value.authRequired === false;
|
|
5108
|
-
if (isAdminUser(current)) return true;
|
|
5109
|
-
if (access === "admin" || !hasAllPermissions(current, ACCESS_PERMISSIONS[access])) return false;
|
|
5110
|
-
const visible = getRoleInfo(current)?.plugin_access;
|
|
5111
|
-
if (!visible || visible === "all") return true;
|
|
5112
|
-
const names = [plugin.value?.id, plugin.value?.route_prefix?.replace(/^\/+|\/+$/g, "")];
|
|
5113
|
-
return Array.isArray(visible) && names.some((name) => !!name && visible.includes(name));
|
|
5114
|
-
}
|
|
5115
|
-
return {
|
|
5116
|
-
integrated,
|
|
5117
|
-
plugin,
|
|
5118
|
-
user,
|
|
5119
|
-
theme,
|
|
5120
|
-
features,
|
|
5121
|
-
isAdmin: computed(() => can("admin")),
|
|
5122
|
-
can
|
|
5123
|
-
};
|
|
5124
|
-
}
|
|
5125
|
-
//#endregion
|
|
5126
4903
|
//#region src/components/StepWizard.vue?vue&type=script&setup=true&lang.ts
|
|
5127
4904
|
var _hoisted_1 = {
|
|
5128
4905
|
key: 0,
|
|
@@ -5165,7 +4942,8 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
|
|
|
5165
4942
|
type: Boolean,
|
|
5166
4943
|
default: true
|
|
5167
4944
|
},
|
|
5168
|
-
size: { default: "md" }
|
|
4945
|
+
size: { default: "md" },
|
|
4946
|
+
orientation: { default: "horizontal" }
|
|
5169
4947
|
},
|
|
5170
4948
|
emits: [
|
|
5171
4949
|
"update:modelValue",
|
|
@@ -5232,7 +5010,11 @@ var StepWizard_default = /* @__PURE__ */ defineComponent({
|
|
|
5232
5010
|
__expose({ setStepValid });
|
|
5233
5011
|
return (_ctx, _cache) => {
|
|
5234
5012
|
return openBlock(), createElementBlock("div", {
|
|
5235
|
-
class: normalizeClass([
|
|
5013
|
+
class: normalizeClass([
|
|
5014
|
+
"mint-wizard",
|
|
5015
|
+
`mint-wizard--${props.size}`,
|
|
5016
|
+
{ "mint-wizard--vertical": props.orientation === "vertical" }
|
|
5017
|
+
]),
|
|
5236
5018
|
tabindex: "0",
|
|
5237
5019
|
onKeydown: handleKeydown
|
|
5238
5020
|
}, [
|
|
@@ -5457,6 +5239,6 @@ function useListReorder(options) {
|
|
|
5457
5239
|
};
|
|
5458
5240
|
}
|
|
5459
5241
|
//#endregion
|
|
5460
|
-
export {
|
|
5242
|
+
export { useJobsEndpoint as A, compareSortValues as B, FormulaInput_default as C, _plugin_vue_export_helper_default as D, GeneratedPathInput_default as E, applySpecDefaults as F, BaseSlider_default as H, defineDataFrame as I, definePlateEditor as L, usePlatform as M, NumberInput_default as N, GENERATED_JOBS_API_KEY as O, DatePicker_default as P, definePluginWorkspaceView as R, useSequenceUtils as S, renderFormulaParts as T, BaseRadioGroup_default as U, useSortedItems as V, getTypeDefault as _, StepWizard_default as a, MoleculeInput_default as b, normalizeControls as c, numericValue as d, omitUndefined as f, getFieldRegistryEntry as g, replaceRecord as h, useReorderAnnouncer as i, createEventStream as j, createGeneratedAnalysisTransport as k, normalizeOption as l, recordValue as m, reorderList as n, defaultValueForControl as o, orderedUnique as p, useListReorder as r, normalizeControlDefinition as s, REORDER_ANNOUNCER_STYLE as t, humanize as u, ConcentrationInput_default as v, formula_exports as w, SequenceInput_default as x, useConcentrationUnits as y, defineWellPlate as z };
|
|
5461
5243
|
|
|
5462
|
-
//# sourceMappingURL=useListReorder-
|
|
5244
|
+
//# sourceMappingURL=useListReorder-DsuzwWGS.js.map
|