@morscherlab/mint-sdk 1.4.0-beta.8 → 1.4.0
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,7 +1,8 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { t as useExperimentStore } from "./experiment-
|
|
3
|
-
import { Fragment, Teleport, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onScopeDispose, openBlock, provide,
|
|
4
|
-
import {
|
|
1
|
+
import { a as BaseButton_default, i as useEventListener, o as __exportAll, t as useDropdownState } from "./useDropdownState-uFIz6Yv8.js";
|
|
2
|
+
import { t as useExperimentStore } from "./experiment-DyO54FQB.js";
|
|
3
|
+
import { Fragment, Teleport, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onScopeDispose, openBlock, provide, ref, renderList, renderSlot, toDisplayString, toValue, unref, useAttrs, useId, useSlots, useTemplateRef, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
4
|
+
import { Check, ChevronDown, ChevronsUpDown, X } from "lucide-vue-next";
|
|
5
|
+
import { autoUpdate, computePosition, flip, hide, offset, shift, size } from "@floating-ui/dom";
|
|
5
6
|
//#region src/components/BaseInput.vue?vue&type=script&setup=true&lang.ts
|
|
6
7
|
var _hoisted_1$12 = [
|
|
7
8
|
"value",
|
|
@@ -206,6 +207,84 @@ function findOptionByDomValue(options, value) {
|
|
|
206
207
|
return options.find((option) => String(option.value) === value);
|
|
207
208
|
}
|
|
208
209
|
//#endregion
|
|
210
|
+
//#region src/composables/useFloatingPanel.ts
|
|
211
|
+
/**
|
|
212
|
+
* Places `floating` next to `reference` with fixed positioning (offset, flip,
|
|
213
|
+
* shift, size, hide). A fixed panel escapes the `overflow` of its ancestors (a
|
|
214
|
+
* modal body) unless one of them has a transform, so it can stay in the DOM right
|
|
215
|
+
* after its trigger: Tab order, focus traps and outside-click checks are those of
|
|
216
|
+
* an in-place panel. The size middleware publishes the free height as
|
|
217
|
+
* `--mint-floating-available-height`; a panel whose list scrolls caps its
|
|
218
|
+
* `max-height` with it.
|
|
219
|
+
*/
|
|
220
|
+
function useFloatingPanel(reference, floating, open, options = {}) {
|
|
221
|
+
const style = ref({
|
|
222
|
+
position: "fixed",
|
|
223
|
+
left: "0px",
|
|
224
|
+
top: "0px"
|
|
225
|
+
});
|
|
226
|
+
const placement = ref(toValue(options.placement) ?? "bottom-start");
|
|
227
|
+
async function update() {
|
|
228
|
+
const referenceEl = toValue(reference);
|
|
229
|
+
const floatingEl = floating.value;
|
|
230
|
+
if (!referenceEl || !floatingEl) return;
|
|
231
|
+
const result = await computePosition(referenceEl, floatingEl, {
|
|
232
|
+
placement: toValue(options.placement) ?? "bottom-start",
|
|
233
|
+
strategy: "fixed",
|
|
234
|
+
middleware: [
|
|
235
|
+
offset(options.offset ?? 4),
|
|
236
|
+
flip(),
|
|
237
|
+
shift({ padding: 8 }),
|
|
238
|
+
size({
|
|
239
|
+
padding: 8,
|
|
240
|
+
apply({ availableHeight, rects, elements }) {
|
|
241
|
+
const target = elements.floating.style;
|
|
242
|
+
target.setProperty("--mint-floating-available-height", `${Math.max(0, availableHeight)}px`);
|
|
243
|
+
if (options.matchWidth) {
|
|
244
|
+
target.minWidth = `${rects.reference.width}px`;
|
|
245
|
+
target.maxWidth = "28rem";
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}),
|
|
249
|
+
hide()
|
|
250
|
+
]
|
|
251
|
+
});
|
|
252
|
+
const next = {
|
|
253
|
+
position: "fixed",
|
|
254
|
+
left: `${result.x}px`,
|
|
255
|
+
top: `${result.y}px`
|
|
256
|
+
};
|
|
257
|
+
if (result.middlewareData.hide?.referenceHidden) next.visibility = "hidden";
|
|
258
|
+
const current = style.value;
|
|
259
|
+
if (current.left !== next.left || current.top !== next.top || current.visibility !== next.visibility) style.value = next;
|
|
260
|
+
placement.value = result.placement;
|
|
261
|
+
}
|
|
262
|
+
let stop;
|
|
263
|
+
function release() {
|
|
264
|
+
stop?.();
|
|
265
|
+
stop = void 0;
|
|
266
|
+
}
|
|
267
|
+
watch([
|
|
268
|
+
open,
|
|
269
|
+
() => toValue(reference),
|
|
270
|
+
floating
|
|
271
|
+
], ([isOpen, referenceEl, floatingEl]) => {
|
|
272
|
+
release();
|
|
273
|
+
if (!isOpen || !referenceEl || !floatingEl) return;
|
|
274
|
+
if (options.follow ?? true) stop = autoUpdate(referenceEl, floatingEl, () => void update());
|
|
275
|
+
else update();
|
|
276
|
+
}, {
|
|
277
|
+
flush: "post",
|
|
278
|
+
immediate: true
|
|
279
|
+
});
|
|
280
|
+
onScopeDispose(release);
|
|
281
|
+
return {
|
|
282
|
+
style,
|
|
283
|
+
placement,
|
|
284
|
+
update
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
//#endregion
|
|
209
288
|
//#region src/composables/useSelectionLimit.ts
|
|
210
289
|
/** Shared cap logic for chip, tag, and multi-select controls. */
|
|
211
290
|
function useSelectionLimit(options) {
|
|
@@ -327,25 +406,38 @@ function uniqueValues(values) {
|
|
|
327
406
|
}
|
|
328
407
|
//#endregion
|
|
329
408
|
//#region src/components/internal/SelectMultipleInternal.vue?vue&type=script&setup=true&lang.ts
|
|
330
|
-
var _hoisted_1$11 =
|
|
409
|
+
var _hoisted_1$11 = [
|
|
410
|
+
"tabindex",
|
|
411
|
+
"aria-expanded",
|
|
412
|
+
"aria-disabled",
|
|
413
|
+
"aria-invalid",
|
|
414
|
+
"aria-labelledby",
|
|
415
|
+
"aria-describedby"
|
|
416
|
+
];
|
|
417
|
+
var _hoisted_2$11 = { class: "mint-multi-select__chips" };
|
|
418
|
+
var _hoisted_3$11 = ["aria-label", "onClick"];
|
|
419
|
+
var _hoisted_4$8 = {
|
|
331
420
|
key: 0,
|
|
332
421
|
class: "mint-multi-select__placeholder"
|
|
333
422
|
};
|
|
334
|
-
var
|
|
335
|
-
var
|
|
336
|
-
|
|
337
|
-
"
|
|
338
|
-
"
|
|
339
|
-
"
|
|
423
|
+
var _hoisted_5$8 = { class: "mint-searchable-select__search-wrap" };
|
|
424
|
+
var _hoisted_6$8 = ["aria-expanded", "aria-activedescendant"];
|
|
425
|
+
var _hoisted_7$7 = [
|
|
426
|
+
"id",
|
|
427
|
+
"aria-selected",
|
|
428
|
+
"aria-disabled",
|
|
429
|
+
"onMouseenter",
|
|
430
|
+
"onClick"
|
|
340
431
|
];
|
|
341
|
-
var
|
|
342
|
-
var
|
|
343
|
-
key:
|
|
344
|
-
class: "mint-
|
|
432
|
+
var _hoisted_8$3 = { class: "mint-menu-item__label" };
|
|
433
|
+
var _hoisted_9$3 = {
|
|
434
|
+
key: 0,
|
|
435
|
+
class: "mint-searchable-select__empty"
|
|
345
436
|
};
|
|
346
437
|
//#endregion
|
|
347
438
|
//#region src/components/internal/SelectMultipleInternal.vue
|
|
348
439
|
var SelectMultipleInternal_default = /* @__PURE__ */ defineComponent({
|
|
440
|
+
inheritAttrs: false,
|
|
349
441
|
__name: "SelectMultipleInternal",
|
|
350
442
|
props: {
|
|
351
443
|
modelValue: {},
|
|
@@ -360,79 +452,211 @@ var SelectMultipleInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
360
452
|
default: false
|
|
361
453
|
},
|
|
362
454
|
max: { default: void 0 },
|
|
363
|
-
size: { default: "md" }
|
|
455
|
+
size: { default: "md" },
|
|
456
|
+
ariaLabelledby: { default: void 0 },
|
|
457
|
+
ariaDescribedby: { default: void 0 }
|
|
364
458
|
},
|
|
365
459
|
emits: ["update:modelValue"],
|
|
366
460
|
setup(__props, { emit: __emit }) {
|
|
367
|
-
/** BaseSelect with `multiple`: a
|
|
461
|
+
/** BaseSelect with `multiple`: a field of removable chips that opens a filterable checkbox listbox, capped by `max`. */
|
|
368
462
|
const props = __props;
|
|
463
|
+
const attrs = useAttrs();
|
|
464
|
+
const fieldAttrs = computed(() => {
|
|
465
|
+
const { class: _class, style: _style, ...rest } = attrs;
|
|
466
|
+
return rest;
|
|
467
|
+
});
|
|
369
468
|
const emit = __emit;
|
|
469
|
+
const listboxId = `mint-multi-select-${useId().replace(/:/g, "")}`;
|
|
470
|
+
const root = ref(null);
|
|
471
|
+
const field = ref(null);
|
|
472
|
+
const search = ref(null);
|
|
473
|
+
const panel = ref(null);
|
|
474
|
+
const open = ref(false);
|
|
475
|
+
const query = ref("");
|
|
476
|
+
const activeIndex = ref(-1);
|
|
370
477
|
const normalizedOptions = computed(() => props.options.map(normalizeOptionInput));
|
|
371
|
-
const
|
|
478
|
+
const selection = useListSelection({
|
|
372
479
|
selected: () => props.modelValue,
|
|
373
480
|
items: normalizedOptions,
|
|
374
481
|
getValue: (option) => option.value,
|
|
375
482
|
disabled: () => props.disabled,
|
|
376
483
|
max: () => props.max
|
|
377
484
|
});
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
|
|
485
|
+
const chips = computed(() => props.modelValue.map((value) => ({
|
|
486
|
+
value,
|
|
487
|
+
label: normalizedOptions.value.find((option) => option.value === value)?.label ?? String(value)
|
|
488
|
+
})));
|
|
489
|
+
const visibleOptions = computed(() => {
|
|
490
|
+
const needle = query.value.trim().toLocaleLowerCase();
|
|
491
|
+
if (!needle) return normalizedOptions.value;
|
|
492
|
+
return normalizedOptions.value.filter((option) => option.label.toLocaleLowerCase().includes(needle));
|
|
493
|
+
});
|
|
494
|
+
const activeDescendant = computed(() => activeIndex.value >= 0 ? `${listboxId}-option-${activeIndex.value}` : void 0);
|
|
495
|
+
function isUnavailable(option) {
|
|
496
|
+
return !!option.disabled || !selection.isSelected(option.value) && !selection.canAddMore.value;
|
|
381
497
|
}
|
|
382
|
-
function
|
|
383
|
-
if (props.disabled ||
|
|
384
|
-
|
|
498
|
+
async function openPanel() {
|
|
499
|
+
if (props.disabled || open.value) return;
|
|
500
|
+
query.value = "";
|
|
501
|
+
open.value = true;
|
|
502
|
+
activeIndex.value = visibleOptions.value.length > 0 ? 0 : -1;
|
|
503
|
+
await nextTick();
|
|
504
|
+
search.value?.focus();
|
|
385
505
|
}
|
|
386
|
-
function
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
506
|
+
async function closePanel(restoreFocus = false) {
|
|
507
|
+
open.value = false;
|
|
508
|
+
query.value = "";
|
|
509
|
+
activeIndex.value = -1;
|
|
510
|
+
if (restoreFocus) {
|
|
511
|
+
await nextTick();
|
|
512
|
+
field.value?.focus();
|
|
390
513
|
}
|
|
391
514
|
}
|
|
392
|
-
|
|
393
|
-
|
|
515
|
+
function moveActive(direction) {
|
|
516
|
+
const count = visibleOptions.value.length;
|
|
517
|
+
if (count === 0) return;
|
|
518
|
+
const start = activeIndex.value < 0 ? direction === 1 ? -1 : count : activeIndex.value;
|
|
519
|
+
activeIndex.value = (start + direction + count) % count;
|
|
520
|
+
nextTick(() => document.getElementById(activeDescendant.value ?? "")?.scrollIntoView({ block: "nearest" }));
|
|
521
|
+
}
|
|
522
|
+
function toggle(option) {
|
|
523
|
+
if (props.disabled || isUnavailable(option)) return;
|
|
524
|
+
emit("update:modelValue", selection.toggleValue(option.value));
|
|
525
|
+
}
|
|
526
|
+
function remove(value) {
|
|
527
|
+
if (props.disabled) return;
|
|
528
|
+
emit("update:modelValue", props.modelValue.filter((selected) => selected !== value));
|
|
529
|
+
}
|
|
530
|
+
function handleFieldKeydown(event) {
|
|
531
|
+
if (event.key !== "Enter" && event.key !== " " && event.key !== "ArrowDown") return;
|
|
532
|
+
event.preventDefault();
|
|
533
|
+
openPanel();
|
|
534
|
+
}
|
|
535
|
+
function handleSearchKeydown(event) {
|
|
536
|
+
if (event.key === "ArrowDown") moveActive(1);
|
|
537
|
+
else if (event.key === "ArrowUp") moveActive(-1);
|
|
538
|
+
else if (event.key === "Enter") {
|
|
539
|
+
const option = visibleOptions.value[activeIndex.value];
|
|
540
|
+
if (option) toggle(option);
|
|
541
|
+
} else if (event.key === "Escape") closePanel(true);
|
|
542
|
+
else if (event.key === "Backspace" && query.value === "" && props.modelValue.length > 0) remove(props.modelValue[props.modelValue.length - 1]);
|
|
543
|
+
else return;
|
|
544
|
+
event.preventDefault();
|
|
545
|
+
}
|
|
546
|
+
const { style: panelStyle } = useFloatingPanel(field, panel, open, { matchWidth: true });
|
|
547
|
+
watch(visibleOptions, (options) => {
|
|
548
|
+
activeIndex.value = options.length > 0 ? 0 : -1;
|
|
549
|
+
});
|
|
550
|
+
watch(() => props.disabled, (disabled) => {
|
|
551
|
+
if (disabled) closePanel();
|
|
552
|
+
});
|
|
553
|
+
useEventListener(() => document, "pointerdown", (event) => {
|
|
554
|
+
if (open.value && !root.value?.contains(event.target)) closePanel();
|
|
394
555
|
});
|
|
395
556
|
return (_ctx, _cache) => {
|
|
396
|
-
return openBlock(), createElementBlock("div", {
|
|
397
|
-
"
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
557
|
+
return openBlock(), createElementBlock("div", {
|
|
558
|
+
ref_key: "root",
|
|
559
|
+
ref: root,
|
|
560
|
+
class: normalizeClass([
|
|
561
|
+
"mint-multi-select",
|
|
562
|
+
`mint-multi-select--${__props.size}`,
|
|
563
|
+
_ctx.$attrs.class
|
|
564
|
+
]),
|
|
565
|
+
style: normalizeStyle(_ctx.$attrs.style),
|
|
566
|
+
onFocusout: _cache[3] || (_cache[3] = ($event) => !root.value?.contains($event.relatedTarget) && closePanel())
|
|
567
|
+
}, [createElementVNode("div", mergeProps(fieldAttrs.value, {
|
|
568
|
+
ref_key: "field",
|
|
569
|
+
ref: field,
|
|
570
|
+
role: "combobox",
|
|
571
|
+
tabindex: __props.disabled ? void 0 : 0,
|
|
572
|
+
class: ["mint-multi-select__field", {
|
|
573
|
+
"mint-multi-select__field--open": open.value,
|
|
574
|
+
"mint-multi-select__field--error": __props.invalid,
|
|
575
|
+
"mint-multi-select__field--disabled": __props.disabled
|
|
576
|
+
}],
|
|
577
|
+
"aria-haspopup": "listbox",
|
|
578
|
+
"aria-expanded": open.value,
|
|
579
|
+
"aria-controls": listboxId,
|
|
580
|
+
"aria-disabled": __props.disabled || void 0,
|
|
581
|
+
"aria-invalid": __props.invalid || void 0,
|
|
582
|
+
"aria-labelledby": __props.ariaLabelledby || void 0,
|
|
583
|
+
"aria-describedby": __props.ariaDescribedby || void 0,
|
|
584
|
+
onClick: _cache[0] || (_cache[0] = ($event) => open.value ? closePanel() : openPanel()),
|
|
585
|
+
onKeydown: withModifiers(handleFieldKeydown, ["self"])
|
|
586
|
+
}), [createElementVNode("div", _hoisted_2$11, [(openBlock(true), createElementBlock(Fragment, null, renderList(chips.value, (chip) => {
|
|
587
|
+
return openBlock(), createElementBlock("span", {
|
|
588
|
+
key: String(chip.value),
|
|
589
|
+
class: "mint-multi-select__chip"
|
|
590
|
+
}, [createTextVNode(toDisplayString(chip.label) + " ", 1), !__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
591
|
+
key: 0,
|
|
592
|
+
type: "button",
|
|
593
|
+
tabindex: "-1",
|
|
594
|
+
class: "mint-multi-select__chip-remove",
|
|
595
|
+
"aria-label": `Remove ${chip.label}`,
|
|
596
|
+
onClick: withModifiers(($event) => remove(chip.value), ["stop"])
|
|
597
|
+
}, [createVNode(unref(X), {
|
|
598
|
+
size: 11,
|
|
599
|
+
"stroke-width": 2.25,
|
|
600
|
+
"aria-hidden": "true"
|
|
601
|
+
})], 8, _hoisted_3$11)) : createCommentVNode("", true)]);
|
|
602
|
+
}), 128)), chips.value.length === 0 ? (openBlock(), createElementBlock("span", _hoisted_4$8, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true)]), createVNode(unref(ChevronDown), {
|
|
603
|
+
class: "mint-multi-select__icon",
|
|
604
|
+
size: 14,
|
|
605
|
+
"aria-hidden": "true"
|
|
606
|
+
})], 16, _hoisted_1$11), open.value ? (openBlock(), createElementBlock("div", {
|
|
607
|
+
key: 0,
|
|
608
|
+
ref_key: "panel",
|
|
609
|
+
ref: panel,
|
|
610
|
+
class: "mint-popover mint-searchable-select__panel",
|
|
611
|
+
style: normalizeStyle(unref(panelStyle))
|
|
612
|
+
}, [createElementVNode("div", _hoisted_5$8, [_cache[4] || (_cache[4] = createElementVNode("svg", {
|
|
613
|
+
viewBox: "0 0 20 20",
|
|
614
|
+
fill: "none",
|
|
615
|
+
stroke: "currentColor",
|
|
616
|
+
"aria-hidden": "true"
|
|
617
|
+
}, [createElementVNode("circle", {
|
|
618
|
+
cx: "8.5",
|
|
619
|
+
cy: "8.5",
|
|
620
|
+
r: "5.5"
|
|
621
|
+
}), createElementVNode("path", { d: "m13 13 4 4" })], -1)), withDirectives(createElementVNode("input", {
|
|
622
|
+
ref_key: "search",
|
|
623
|
+
ref: search,
|
|
624
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => query.value = $event),
|
|
625
|
+
role: "combobox",
|
|
626
|
+
type: "search",
|
|
627
|
+
class: "mint-searchable-select__search",
|
|
628
|
+
placeholder: "Filter…",
|
|
629
|
+
"aria-label": "Filter options",
|
|
630
|
+
"aria-expanded": open.value,
|
|
631
|
+
"aria-controls": listboxId,
|
|
632
|
+
"aria-activedescendant": activeDescendant.value,
|
|
633
|
+
"aria-autocomplete": "list",
|
|
634
|
+
onKeydown: handleSearchKeydown
|
|
635
|
+
}, null, 40, _hoisted_6$8), [[vModelText, query.value]])]), createElementVNode("ul", {
|
|
636
|
+
id: listboxId,
|
|
637
|
+
class: "mint-searchable-select__list",
|
|
638
|
+
role: "listbox",
|
|
639
|
+
"aria-multiselectable": "true"
|
|
640
|
+
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleOptions.value, (option, index) => {
|
|
641
|
+
return openBlock(), createElementBlock("li", {
|
|
642
|
+
id: `${listboxId}-option-${index}`,
|
|
643
|
+
key: String(option.value),
|
|
644
|
+
role: "option",
|
|
645
|
+
class: normalizeClass(["mint-menu-item mint-multi-select__option", { "mint-menu-item--active": activeIndex.value === index }]),
|
|
646
|
+
"aria-selected": unref(selection).isSelected(option.value),
|
|
647
|
+
"aria-disabled": isUnavailable(option) || void 0,
|
|
648
|
+
onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"])),
|
|
649
|
+
onMouseenter: ($event) => !isUnavailable(option) && (activeIndex.value = index),
|
|
650
|
+
onClick: ($event) => toggle(option)
|
|
651
|
+
}, [createElementVNode("span", {
|
|
652
|
+
class: normalizeClass(["mint-multi-select__check", { "mint-multi-select__check--on": unref(selection).isSelected(option.value) }]),
|
|
653
|
+
"aria-hidden": "true"
|
|
654
|
+
}, [unref(selection).isSelected(option.value) ? (openBlock(), createBlock(unref(Check), {
|
|
655
|
+
key: 0,
|
|
656
|
+
size: 10,
|
|
657
|
+
"stroke-width": 3.5
|
|
658
|
+
})) : createCommentVNode("", true)], 2), createElementVNode("span", _hoisted_8$3, toDisplayString(option.label), 1)], 42, _hoisted_7$7);
|
|
659
|
+
}), 128)), visibleOptions.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_9$3, "No matching options")) : createCommentVNode("", true)])], 4)) : createCommentVNode("", true)], 38);
|
|
436
660
|
};
|
|
437
661
|
}
|
|
438
662
|
});
|
|
@@ -445,39 +669,35 @@ var _hoisted_1$10 = [
|
|
|
445
669
|
"aria-invalid",
|
|
446
670
|
"aria-expanded"
|
|
447
671
|
];
|
|
448
|
-
var _hoisted_2$10 = {
|
|
449
|
-
|
|
450
|
-
class: "mint-popover mint-searchable-select__panel"
|
|
451
|
-
};
|
|
452
|
-
var _hoisted_3$10 = { class: "mint-searchable-select__search-wrap" };
|
|
453
|
-
var _hoisted_4$7 = [
|
|
672
|
+
var _hoisted_2$10 = { class: "mint-searchable-select__search-wrap" };
|
|
673
|
+
var _hoisted_3$10 = [
|
|
454
674
|
"placeholder",
|
|
455
675
|
"aria-label",
|
|
456
676
|
"aria-expanded",
|
|
457
677
|
"aria-activedescendant"
|
|
458
678
|
];
|
|
459
|
-
var
|
|
679
|
+
var _hoisted_4$7 = [
|
|
460
680
|
"id",
|
|
461
681
|
"aria-selected",
|
|
462
682
|
"aria-disabled",
|
|
463
683
|
"onMouseenter",
|
|
464
684
|
"onClick"
|
|
465
685
|
];
|
|
466
|
-
var
|
|
467
|
-
var
|
|
468
|
-
var
|
|
686
|
+
var _hoisted_5$7 = { class: "mint-menu-item__text mint-searchable-select__option-text" };
|
|
687
|
+
var _hoisted_6$7 = { class: "mint-menu-item__label mint-searchable-select__option-label" };
|
|
688
|
+
var _hoisted_7$6 = {
|
|
469
689
|
key: 0,
|
|
470
690
|
class: "mint-menu-item__description mint-searchable-select__option-description"
|
|
471
691
|
};
|
|
472
|
-
var
|
|
692
|
+
var _hoisted_8$2 = {
|
|
473
693
|
key: 0,
|
|
474
694
|
class: "mint-menu-item__meta mint-searchable-select__option-meta"
|
|
475
695
|
};
|
|
476
|
-
var
|
|
696
|
+
var _hoisted_9$2 = {
|
|
477
697
|
key: 0,
|
|
478
698
|
class: "mint-searchable-select__empty"
|
|
479
699
|
};
|
|
480
|
-
var
|
|
700
|
+
var _hoisted_10$2 = {
|
|
481
701
|
key: 0,
|
|
482
702
|
class: "mint-searchable-select__footer"
|
|
483
703
|
};
|
|
@@ -519,6 +739,7 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
519
739
|
const root = ref(null);
|
|
520
740
|
const trigger = ref(null);
|
|
521
741
|
const search = ref(null);
|
|
742
|
+
const panel = ref(null);
|
|
522
743
|
const open = ref(false);
|
|
523
744
|
const query = ref("");
|
|
524
745
|
const activeIndex = ref(-1);
|
|
@@ -594,6 +815,7 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
594
815
|
if (event.key === "ArrowUp") moveActive(-1);
|
|
595
816
|
});
|
|
596
817
|
}
|
|
818
|
+
const { style: panelStyle } = useFloatingPanel(trigger, panel, open, { matchWidth: true });
|
|
597
819
|
watch(visibleOptions, (options) => {
|
|
598
820
|
activeIndex.value = firstEnabledIndex(options);
|
|
599
821
|
});
|
|
@@ -629,18 +851,17 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
629
851
|
"aria-haspopup": "listbox",
|
|
630
852
|
onClick: _cache[0] || (_cache[0] = ($event) => open.value ? closePanel() : openPanel()),
|
|
631
853
|
onKeydown: handleTriggerKeydown
|
|
632
|
-
}), [createElementVNode("span", { class: normalizeClass(["mint-searchable-select__value", { "mint-searchable-select__value--placeholder": !selectedOption.value }]) }, toDisplayString(selectedOption.value?.label ?? __props.placeholder), 3),
|
|
633
|
-
|
|
634
|
-
fill: "none",
|
|
635
|
-
stroke: "currentColor",
|
|
854
|
+
}), [createElementVNode("span", { class: normalizeClass(["mint-searchable-select__value", { "mint-searchable-select__value--placeholder": !selectedOption.value }]) }, toDisplayString(selectedOption.value?.label ?? __props.placeholder), 3), createVNode(unref(ChevronsUpDown), {
|
|
855
|
+
size: 14,
|
|
636
856
|
"aria-hidden": "true"
|
|
637
|
-
},
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
857
|
+
})], 16, _hoisted_1$10), open.value ? (openBlock(), createElementBlock("div", {
|
|
858
|
+
key: 0,
|
|
859
|
+
ref_key: "panel",
|
|
860
|
+
ref: panel,
|
|
861
|
+
class: "mint-popover mint-searchable-select__panel",
|
|
862
|
+
style: normalizeStyle(unref(panelStyle))
|
|
863
|
+
}, [
|
|
864
|
+
createElementVNode("div", _hoisted_2$10, [_cache[4] || (_cache[4] = createElementVNode("svg", {
|
|
644
865
|
viewBox: "0 0 20 20",
|
|
645
866
|
fill: "none",
|
|
646
867
|
stroke: "currentColor",
|
|
@@ -663,7 +884,7 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
663
884
|
"aria-activedescendant": activeDescendant.value,
|
|
664
885
|
"aria-autocomplete": "list",
|
|
665
886
|
onKeydown: handleSearchKeydown
|
|
666
|
-
}, null, 40,
|
|
887
|
+
}, null, 40, _hoisted_3$10), [[vModelText, query.value]])]),
|
|
667
888
|
createElementVNode("ul", {
|
|
668
889
|
id: listboxId,
|
|
669
890
|
class: "mint-searchable-select__list",
|
|
@@ -688,9 +909,9 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
688
909
|
selected: __props.modelValue === option.value,
|
|
689
910
|
active: activeIndex.value === index
|
|
690
911
|
}, () => [
|
|
691
|
-
createElementVNode("span",
|
|
692
|
-
option.meta ? (openBlock(), createElementBlock("span",
|
|
693
|
-
_cache[
|
|
912
|
+
createElementVNode("span", _hoisted_5$7, [createElementVNode("span", _hoisted_6$7, toDisplayString(option.label), 1), (option.disabled ? option.disabledReason || option.description : option.description) ? (openBlock(), createElementBlock("span", _hoisted_7$6, toDisplayString(option.disabled ? option.disabledReason || option.description : option.description), 1)) : createCommentVNode("", true)]),
|
|
913
|
+
option.meta ? (openBlock(), createElementBlock("span", _hoisted_8$2, toDisplayString(option.meta), 1)) : createCommentVNode("", true),
|
|
914
|
+
_cache[5] || (_cache[5] = createElementVNode("svg", {
|
|
694
915
|
class: "mint-menu-item__check mint-searchable-select__check",
|
|
695
916
|
viewBox: "0 0 20 20",
|
|
696
917
|
fill: "none",
|
|
@@ -702,10 +923,10 @@ var SelectSearchableInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
702
923
|
"stroke-width": "2",
|
|
703
924
|
d: "m5 10 3 3 7-7"
|
|
704
925
|
})], -1))
|
|
705
|
-
])], 42,
|
|
706
|
-
}), 128)), visibleOptions.value.length === 0 ? (openBlock(), createElementBlock("li",
|
|
707
|
-
_ctx.$slots.footer ? (openBlock(), createElementBlock("div",
|
|
708
|
-
])) : createCommentVNode("", true)], 38);
|
|
926
|
+
])], 42, _hoisted_4$7);
|
|
927
|
+
}), 128)), visibleOptions.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_9$2, toDisplayString(__props.noResultsText), 1)) : createCommentVNode("", true)]),
|
|
928
|
+
_ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_10$2, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)
|
|
929
|
+
], 4)) : createCommentVNode("", true)], 38);
|
|
709
930
|
};
|
|
710
931
|
}
|
|
711
932
|
});
|
|
@@ -758,7 +979,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
|
|
|
758
979
|
/**
|
|
759
980
|
* Select one or several options.
|
|
760
981
|
* Default: a native `<select>`. `searchable`: a listbox with a search field and the `#option` / `#footer` slots.
|
|
761
|
-
* `multiple`: a checkbox
|
|
982
|
+
* `multiple`: a field of removable chips with a filterable checkbox listbox, bound to an array and capped by `max`.
|
|
762
983
|
*
|
|
763
984
|
* @example
|
|
764
985
|
* ```vue
|
|
@@ -804,6 +1025,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
|
|
|
804
1025
|
invalid: __props.invalid,
|
|
805
1026
|
max: __props.max,
|
|
806
1027
|
size: __props.size,
|
|
1028
|
+
"aria-labelledby": __props.ariaLabelledby,
|
|
807
1029
|
"aria-describedby": __props.ariaDescribedby,
|
|
808
1030
|
"onUpdate:modelValue": update
|
|
809
1031
|
}), null, 16, [
|
|
@@ -814,6 +1036,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
|
|
|
814
1036
|
"invalid",
|
|
815
1037
|
"max",
|
|
816
1038
|
"size",
|
|
1039
|
+
"aria-labelledby",
|
|
817
1040
|
"aria-describedby"
|
|
818
1041
|
])) : __props.searchable ? (openBlock(), createBlock(SelectSearchableInternal_default, mergeProps({ key: 1 }, unref(attrs), {
|
|
819
1042
|
"model-value": singleValue.value,
|
|
@@ -900,41 +1123,16 @@ var Tooltip_default = /* @__PURE__ */ defineComponent({
|
|
|
900
1123
|
const props = __props;
|
|
901
1124
|
const tooltipId = `mint-tooltip-${Math.random().toString(36).slice(2, 9)}`;
|
|
902
1125
|
const visible = ref(false);
|
|
903
|
-
const actualPlacement = ref(props.position);
|
|
904
1126
|
const triggerRef = ref(null);
|
|
905
1127
|
const contentRef = ref(null);
|
|
906
|
-
const coords = ref({
|
|
907
|
-
top: "0px",
|
|
908
|
-
left: "0px"
|
|
909
|
-
});
|
|
910
1128
|
let timeoutId;
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
placement: props.position,
|
|
915
|
-
middleware: [
|
|
916
|
-
offset(6),
|
|
917
|
-
flip(),
|
|
918
|
-
shift({ padding: 8 })
|
|
919
|
-
]
|
|
920
|
-
});
|
|
921
|
-
coords.value = {
|
|
922
|
-
top: `${y}px`,
|
|
923
|
-
left: `${x}px`
|
|
924
|
-
};
|
|
925
|
-
actualPlacement.value = placement;
|
|
926
|
-
}
|
|
927
|
-
useEventListener(() => window, "scroll", updatePosition, {
|
|
928
|
-
passive: true,
|
|
929
|
-
capture: true,
|
|
930
|
-
enabled: visible
|
|
1129
|
+
const { style: coords, placement: actualPlacement } = useFloatingPanel(triggerRef, contentRef, visible, {
|
|
1130
|
+
placement: () => props.position,
|
|
1131
|
+
offset: 6
|
|
931
1132
|
});
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
timeoutId = setTimeout(async () => {
|
|
1133
|
+
function show() {
|
|
1134
|
+
timeoutId = setTimeout(() => {
|
|
935
1135
|
visible.value = true;
|
|
936
|
-
await nextTick();
|
|
937
|
-
await updatePosition();
|
|
938
1136
|
}, props.delay);
|
|
939
1137
|
}
|
|
940
1138
|
function hide() {
|
|
@@ -966,12 +1164,11 @@ var Tooltip_default = /* @__PURE__ */ defineComponent({
|
|
|
966
1164
|
ref: contentRef,
|
|
967
1165
|
class: normalizeClass([
|
|
968
1166
|
"mint-tooltip__content",
|
|
969
|
-
`mint-tooltip__content--${actualPlacement
|
|
1167
|
+
`mint-tooltip__content--${unref(actualPlacement)}`,
|
|
970
1168
|
__props.maxWidth ? "mint-tooltip__content--multiline" : ""
|
|
971
1169
|
]),
|
|
972
1170
|
style: normalizeStyle({
|
|
973
|
-
|
|
974
|
-
left: coords.value.left,
|
|
1171
|
+
...unref(coords),
|
|
975
1172
|
maxWidth: resolvedMaxWidth(__props.maxWidth)
|
|
976
1173
|
}),
|
|
977
1174
|
role: "tooltip"
|
|
@@ -1430,6 +1627,7 @@ var EmptyState_default = /* @__PURE__ */ defineComponent({
|
|
|
1430
1627
|
]),
|
|
1431
1628
|
__props.actionLabel ? (openBlock(), createElementBlock("div", _hoisted_7$4, [createVNode(BaseButton_default, {
|
|
1432
1629
|
variant: "secondary",
|
|
1630
|
+
size: "sm",
|
|
1433
1631
|
onClick: _cache[0] || (_cache[0] = ($event) => emit("action"))
|
|
1434
1632
|
}, {
|
|
1435
1633
|
default: withCtx(() => [createTextVNode(toDisplayString(__props.actionLabel), 1)]),
|
|
@@ -1504,62 +1702,150 @@ var FormField_default = /* @__PURE__ */ defineComponent({
|
|
|
1504
1702
|
}
|
|
1505
1703
|
});
|
|
1506
1704
|
//#endregion
|
|
1507
|
-
//#region src/
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
}
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1705
|
+
//#region src/utils/time.ts
|
|
1706
|
+
var time_exports = /* @__PURE__ */ __exportAll({
|
|
1707
|
+
addMinutes: () => addMinutes,
|
|
1708
|
+
compareTime: () => compareTime,
|
|
1709
|
+
durationMinutes: () => durationMinutes,
|
|
1710
|
+
findAvailableSlots: () => findAvailableSlots,
|
|
1711
|
+
findNearestTimeSlotIndex: () => findNearestTimeSlotIndex,
|
|
1712
|
+
formatDuration: () => formatDuration,
|
|
1713
|
+
formatRelativeTime: () => formatRelativeTime,
|
|
1714
|
+
formatTime: () => formatTime,
|
|
1715
|
+
formatTimeSlot: () => formatTimeSlot,
|
|
1716
|
+
fromMinutes: () => fromMinutes,
|
|
1717
|
+
generateTimeSlots: () => generateTimeSlots,
|
|
1718
|
+
isTimeInRange: () => isTimeInRange,
|
|
1719
|
+
parseTime: () => parseTime,
|
|
1720
|
+
rangesOverlap: () => rangesOverlap,
|
|
1721
|
+
snapToSlot: () => snapToSlot,
|
|
1722
|
+
toMinutes: () => toMinutes
|
|
1723
|
+
});
|
|
1724
|
+
function parseTime(time) {
|
|
1725
|
+
const [h, m] = time.split(":").map(Number);
|
|
1726
|
+
return {
|
|
1727
|
+
hour: h,
|
|
1728
|
+
minute: m
|
|
1729
|
+
};
|
|
1730
|
+
}
|
|
1731
|
+
function formatTime(hour, minute, format = "24h") {
|
|
1732
|
+
if (format === "24h") return `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
|
|
1733
|
+
const period = hour >= 12 ? "PM" : "AM";
|
|
1734
|
+
return `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:${String(minute).padStart(2, "0")} ${period}`;
|
|
1735
|
+
}
|
|
1736
|
+
function formatTimeSlot(time, format = "24h") {
|
|
1737
|
+
const { hour, minute } = parseTime(time);
|
|
1738
|
+
return formatTime(hour, minute, format);
|
|
1739
|
+
}
|
|
1740
|
+
function generateTimeSlots(start, end, stepMinutes) {
|
|
1741
|
+
const slots = [];
|
|
1742
|
+
const s = parseTime(start);
|
|
1743
|
+
const e = parseTime(end);
|
|
1744
|
+
const startMin = s.hour * 60 + s.minute;
|
|
1745
|
+
const endMin = e.hour * 60 + e.minute;
|
|
1746
|
+
for (let m = startMin; m <= endMin; m += stepMinutes) {
|
|
1747
|
+
const hour = Math.floor(m / 60);
|
|
1748
|
+
const minute = m % 60;
|
|
1749
|
+
if (hour >= 24) break;
|
|
1750
|
+
slots.push(formatTime(hour, minute));
|
|
1543
1751
|
}
|
|
1544
|
-
|
|
1545
|
-
|
|
1752
|
+
return slots;
|
|
1753
|
+
}
|
|
1754
|
+
function rangesOverlap(a, b) {
|
|
1755
|
+
const aStart = toMinutes(a.start);
|
|
1756
|
+
const aEnd = toMinutes(a.end);
|
|
1757
|
+
const bStart = toMinutes(b.start);
|
|
1758
|
+
return aStart < toMinutes(b.end) && bStart < aEnd;
|
|
1759
|
+
}
|
|
1760
|
+
function durationMinutes(start, end) {
|
|
1761
|
+
return toMinutes(end) - toMinutes(start);
|
|
1762
|
+
}
|
|
1763
|
+
function formatDuration(minutes) {
|
|
1764
|
+
if (minutes < 0) return "-" + formatDuration(-minutes);
|
|
1765
|
+
const h = Math.floor(minutes / 60);
|
|
1766
|
+
const m = minutes % 60;
|
|
1767
|
+
if (h === 0) return `${m}m`;
|
|
1768
|
+
if (m === 0) return `${h}h`;
|
|
1769
|
+
return `${h}h ${m}m`;
|
|
1770
|
+
}
|
|
1771
|
+
function isTimeInRange(time, start, end) {
|
|
1772
|
+
const t = toMinutes(time);
|
|
1773
|
+
return t >= toMinutes(start) && t <= toMinutes(end);
|
|
1774
|
+
}
|
|
1775
|
+
function findAvailableSlots(dayStart, dayEnd, occupied, minDuration) {
|
|
1776
|
+
const sorted = [...occupied].sort((a, b) => toMinutes(a.start) - toMinutes(b.start));
|
|
1777
|
+
const available = [];
|
|
1778
|
+
let cursor = toMinutes(dayStart);
|
|
1779
|
+
const end = toMinutes(dayEnd);
|
|
1780
|
+
for (const slot of sorted) {
|
|
1781
|
+
const slotStart = toMinutes(slot.start);
|
|
1782
|
+
const slotEnd = toMinutes(slot.end);
|
|
1783
|
+
if (slotStart > cursor && slotStart - cursor >= minDuration) available.push({
|
|
1784
|
+
start: fromMinutes(cursor),
|
|
1785
|
+
end: fromMinutes(slotStart)
|
|
1786
|
+
});
|
|
1787
|
+
cursor = Math.max(cursor, slotEnd);
|
|
1546
1788
|
}
|
|
1547
|
-
if (
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1789
|
+
if (end > cursor && end - cursor >= minDuration) available.push({
|
|
1790
|
+
start: fromMinutes(cursor),
|
|
1791
|
+
end: fromMinutes(end)
|
|
1792
|
+
});
|
|
1793
|
+
return available;
|
|
1794
|
+
}
|
|
1795
|
+
function snapToSlot(time, stepMinutes) {
|
|
1796
|
+
const total = toMinutes(time);
|
|
1797
|
+
return fromMinutes(Math.round(total / stepMinutes) * stepMinutes);
|
|
1798
|
+
}
|
|
1799
|
+
function addMinutes(time, minutes) {
|
|
1800
|
+
const total = toMinutes(time) + minutes;
|
|
1801
|
+
return fromMinutes(Math.max(0, Math.min(total, 1439)));
|
|
1802
|
+
}
|
|
1803
|
+
function compareTime(a, b) {
|
|
1804
|
+
const ma = toMinutes(a);
|
|
1805
|
+
const mb = toMinutes(b);
|
|
1806
|
+
if (ma < mb) return -1;
|
|
1807
|
+
if (ma > mb) return 1;
|
|
1808
|
+
return 0;
|
|
1809
|
+
}
|
|
1810
|
+
function findNearestTimeSlotIndex(time, slots) {
|
|
1811
|
+
if (slots.length === 0) return -1;
|
|
1812
|
+
const target = toMinutes(time);
|
|
1813
|
+
let bestIndex = 0;
|
|
1814
|
+
let bestDiff = Infinity;
|
|
1815
|
+
for (let index = 0; index < slots.length; index++) {
|
|
1816
|
+
const diff = Math.abs(toMinutes(slots[index]) - target);
|
|
1817
|
+
if (diff < bestDiff) {
|
|
1818
|
+
bestDiff = diff;
|
|
1819
|
+
bestIndex = index;
|
|
1820
|
+
}
|
|
1552
1821
|
}
|
|
1553
|
-
return
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1822
|
+
return bestIndex;
|
|
1823
|
+
}
|
|
1824
|
+
var relativeTimeFormat = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
|
|
1825
|
+
/**
|
|
1826
|
+
* "in 5 minutes" / "2 hours ago" up to a week, then a locale date.
|
|
1827
|
+
* With `weeks`, times up to five weeks away read as a week count first.
|
|
1828
|
+
*/
|
|
1829
|
+
function formatRelativeTime(value, { weeks = false } = {}) {
|
|
1830
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
1831
|
+
const diffSec = Math.round((date.getTime() - Date.now()) / 1e3);
|
|
1832
|
+
const diffMin = Math.round(diffSec / 60);
|
|
1833
|
+
const diffHr = Math.round(diffMin / 60);
|
|
1834
|
+
const diffDay = Math.round(diffHr / 24);
|
|
1835
|
+
const diffWeek = Math.round(diffDay / 7);
|
|
1836
|
+
if (Math.abs(diffSec) < 60) return relativeTimeFormat.format(diffSec, "second");
|
|
1837
|
+
if (Math.abs(diffMin) < 60) return relativeTimeFormat.format(diffMin, "minute");
|
|
1838
|
+
if (Math.abs(diffHr) < 24) return relativeTimeFormat.format(diffHr, "hour");
|
|
1839
|
+
if (Math.abs(diffDay) < 7) return relativeTimeFormat.format(diffDay, "day");
|
|
1840
|
+
if (weeks && Math.abs(diffWeek) < 5) return relativeTimeFormat.format(diffWeek, "week");
|
|
1841
|
+
return date.toLocaleDateString();
|
|
1842
|
+
}
|
|
1843
|
+
function toMinutes(time) {
|
|
1844
|
+
const { hour, minute } = parseTime(time);
|
|
1845
|
+
return hour * 60 + minute;
|
|
1846
|
+
}
|
|
1847
|
+
function fromMinutes(total) {
|
|
1848
|
+
return formatTime(Math.floor(total / 60) % 24, total % 60);
|
|
1563
1849
|
}
|
|
1564
1850
|
//#endregion
|
|
1565
1851
|
//#region src/composables/useMenuKeyboard.ts
|
|
@@ -1669,9 +1955,9 @@ var _hoisted_9$1 = {
|
|
|
1669
1955
|
var _hoisted_10$1 = { class: "mint-file-uploader__folder-info" };
|
|
1670
1956
|
var _hoisted_11$1 = { class: "mint-file-uploader__folder-details" };
|
|
1671
1957
|
var _hoisted_12$1 = { class: "mint-file-uploader__folder-name" };
|
|
1672
|
-
var _hoisted_13
|
|
1673
|
-
var _hoisted_14
|
|
1674
|
-
var _hoisted_15
|
|
1958
|
+
var _hoisted_13 = { class: "mint-file-uploader__folder-count" };
|
|
1959
|
+
var _hoisted_14 = { class: "mint-file-uploader__file-info" };
|
|
1960
|
+
var _hoisted_15 = { class: "mint-file-uploader__file-meta" };
|
|
1675
1961
|
var _hoisted_16 = { class: "mint-file-uploader__file-name" };
|
|
1676
1962
|
var _hoisted_17 = { class: "mint-file-uploader__file-size" };
|
|
1677
1963
|
var _hoisted_18 = ["aria-label", "onClick"];
|
|
@@ -2011,7 +2297,7 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
|
|
|
2011
2297
|
"stroke-linecap": "round",
|
|
2012
2298
|
"stroke-linejoin": "round",
|
|
2013
2299
|
viewBox: "0 0 24 24"
|
|
2014
|
-
}, [createElementVNode("path", { d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2" })])], -1)), createElementVNode("div", _hoisted_11$1, [createElementVNode("span", _hoisted_12$1, toDisplayString(folderName.value), 1), createElementVNode("span", _hoisted_13
|
|
2300
|
+
}, [createElementVNode("path", { d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2" })])], -1)), createElementVNode("div", _hoisted_11$1, [createElementVNode("span", _hoisted_12$1, toDisplayString(folderName.value), 1), createElementVNode("span", _hoisted_13, toDisplayString(selectedFiles.value.length) + " file" + toDisplayString(selectedFiles.value.length !== 1 ? "s" : ""), 1)])]), createElementVNode("button", {
|
|
2015
2301
|
type: "button",
|
|
2016
2302
|
"aria-label": "Clear folder",
|
|
2017
2303
|
class: "mint-file-uploader__remove-btn",
|
|
@@ -2035,10 +2321,10 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
|
|
|
2035
2321
|
return openBlock(), createElementBlock("li", {
|
|
2036
2322
|
key: `${file.name}-${file.size}-${index}`,
|
|
2037
2323
|
class: "mint-file-uploader__file"
|
|
2038
|
-
}, [createElementVNode("div", _hoisted_14
|
|
2324
|
+
}, [createElementVNode("div", _hoisted_14, [createElementVNode("span", {
|
|
2039
2325
|
class: "mint-file-uploader__file-badge",
|
|
2040
2326
|
style: normalizeStyle({ "--badge-color": getFileType(file.name).color })
|
|
2041
|
-
}, toDisplayString(getFileType(file.name).label), 5), createElementVNode("div", _hoisted_15
|
|
2327
|
+
}, toDisplayString(getFileType(file.name).label), 5), createElementVNode("div", _hoisted_15, [createElementVNode("span", _hoisted_16, toDisplayString(file.name), 1), createElementVNode("span", _hoisted_17, toDisplayString(formatFileSize(file.size)), 1)])]), createElementVNode("button", {
|
|
2042
2328
|
type: "button",
|
|
2043
2329
|
"aria-label": `Remove ${file.name}`,
|
|
2044
2330
|
class: "mint-file-uploader__remove-btn",
|
|
@@ -2169,10 +2455,19 @@ function useAppExperiment(options = {}) {
|
|
|
2169
2455
|
const showDetach = computed(() => experimentId.value !== null);
|
|
2170
2456
|
const saveDisabled = computed(() => toValue(options.saveDisabled) ?? false);
|
|
2171
2457
|
const saveDisabledMessage = computed(() => toValue(options.saveDisabledMessage));
|
|
2458
|
+
const dirty = computed(() => toValue(options.dirty) ?? false);
|
|
2459
|
+
const experimentOwner = computed(() => {
|
|
2460
|
+
const owner = store.current?.created_by_user;
|
|
2461
|
+
return owner ? [owner.first_name, owner.last_name].filter(Boolean).join(" ") || owner.username : void 0;
|
|
2462
|
+
});
|
|
2172
2463
|
const popover = computed(() => ({
|
|
2173
2464
|
experimentName: experimentName.value,
|
|
2174
2465
|
experimentCode: experimentCode.value,
|
|
2175
2466
|
experimentStatus: experimentStatus.value,
|
|
2467
|
+
experimentId: experimentId.value,
|
|
2468
|
+
experimentProject: store.current?.project_name || store.current?.project || void 0,
|
|
2469
|
+
experimentOwner: experimentOwner.value,
|
|
2470
|
+
experimentUpdatedAt: store.current?.updated_at,
|
|
2176
2471
|
isResolving: isResolving.value,
|
|
2177
2472
|
error: error.value ?? void 0,
|
|
2178
2473
|
showSave: showSave.value,
|
|
@@ -2180,7 +2475,8 @@ function useAppExperiment(options = {}) {
|
|
|
2180
2475
|
saveDisabled: saveDisabled.value,
|
|
2181
2476
|
saveDisabledMessage: saveDisabledMessage.value,
|
|
2182
2477
|
saveLoading: saveLoading.value,
|
|
2183
|
-
saveSuccessMessage: saveSuccessMessage.value
|
|
2478
|
+
saveSuccessMessage: saveSuccessMessage.value,
|
|
2479
|
+
dirty: dirty.value
|
|
2184
2480
|
}));
|
|
2185
2481
|
const selectorModal = computed(() => ({
|
|
2186
2482
|
open: showModal.value,
|
|
@@ -2200,6 +2496,7 @@ function useAppExperiment(options = {}) {
|
|
|
2200
2496
|
saveLoading.value = true;
|
|
2201
2497
|
try {
|
|
2202
2498
|
const message = await options.onSave();
|
|
2499
|
+
await store.refresh();
|
|
2203
2500
|
if (message) {
|
|
2204
2501
|
saveSuccessMessage.value = message;
|
|
2205
2502
|
if (successTimer) clearTimeout(successTimer);
|
|
@@ -2256,6 +2553,66 @@ function useAppExperiment(options = {}) {
|
|
|
2256
2553
|
};
|
|
2257
2554
|
}
|
|
2258
2555
|
//#endregion
|
|
2556
|
+
//#region src/jobs.ts
|
|
2557
|
+
var ACTIVE_JOB_STATUSES = /* @__PURE__ */ new Set([
|
|
2558
|
+
"awaiting_input",
|
|
2559
|
+
"queued",
|
|
2560
|
+
"running"
|
|
2561
|
+
]);
|
|
2562
|
+
var TERMINAL_JOB_STATUSES = /* @__PURE__ */ new Set([
|
|
2563
|
+
"completed",
|
|
2564
|
+
"failed",
|
|
2565
|
+
"cancelled"
|
|
2566
|
+
]);
|
|
2567
|
+
/** Resolve action support while retaining one-cycle legacy status inference. */
|
|
2568
|
+
function resolveJobCapabilities(job) {
|
|
2569
|
+
const legacyCanCancel = job.status === "queued" || job.status === "running";
|
|
2570
|
+
const legacyCanDelete = TERMINAL_JOB_STATUSES.has(job.status);
|
|
2571
|
+
return {
|
|
2572
|
+
can_cancel: typeof job.can_cancel === "boolean" ? job.can_cancel : legacyCanCancel,
|
|
2573
|
+
can_delete: typeof job.can_delete === "boolean" ? job.can_delete : legacyCanDelete
|
|
2574
|
+
};
|
|
2575
|
+
}
|
|
2576
|
+
/** Clamp invalid or out-of-range progress values for safe display. */
|
|
2577
|
+
function normalizeJobPercent(value) {
|
|
2578
|
+
if (!Number.isFinite(value)) return 0;
|
|
2579
|
+
return Math.min(100, Math.max(0, value));
|
|
2580
|
+
}
|
|
2581
|
+
/** Create a detached canonical state without changing the transport input. */
|
|
2582
|
+
function normalizeJobState(job) {
|
|
2583
|
+
const capabilities = resolveJobCapabilities(job);
|
|
2584
|
+
return {
|
|
2585
|
+
...job,
|
|
2586
|
+
definition_id: job.definition_id ?? (typeof job.metadata.definition_id === "string" ? job.metadata.definition_id : null),
|
|
2587
|
+
result_status: job.result_status ?? (job.status === "completed" && job.metadata.has_result === true ? "available" : "none"),
|
|
2588
|
+
result_expires_at: job.result_expires_at ?? null,
|
|
2589
|
+
progress: {
|
|
2590
|
+
...job.progress,
|
|
2591
|
+
percent: normalizeJobPercent(job.progress.percent)
|
|
2592
|
+
},
|
|
2593
|
+
warnings: [...job.warnings],
|
|
2594
|
+
folders: [...job.folders],
|
|
2595
|
+
metadata: { ...job.metadata },
|
|
2596
|
+
...capabilities
|
|
2597
|
+
};
|
|
2598
|
+
}
|
|
2599
|
+
function isActiveJobStatus(status) {
|
|
2600
|
+
return ACTIVE_JOB_STATUSES.has(status);
|
|
2601
|
+
}
|
|
2602
|
+
function isTerminalJobStatus(status) {
|
|
2603
|
+
return TERMINAL_JOB_STATUSES.has(status);
|
|
2604
|
+
}
|
|
2605
|
+
function jobStatusLabel(status) {
|
|
2606
|
+
return {
|
|
2607
|
+
awaiting_input: "Waiting for input",
|
|
2608
|
+
queued: "Queued",
|
|
2609
|
+
running: "Running",
|
|
2610
|
+
completed: "Completed",
|
|
2611
|
+
failed: "Failed",
|
|
2612
|
+
cancelled: "Cancelled"
|
|
2613
|
+
}[status];
|
|
2614
|
+
}
|
|
2615
|
+
//#endregion
|
|
2259
2616
|
//#region src/utils/pluginSecrets.ts
|
|
2260
2617
|
var pluginSecrets_exports = /* @__PURE__ */ __exportAll({
|
|
2261
2618
|
FORMAT_KEY: () => FORMAT_KEY,
|
|
@@ -2722,66 +3079,6 @@ var TagsInput_default = /* @__PURE__ */ defineComponent({
|
|
|
2722
3079
|
}
|
|
2723
3080
|
});
|
|
2724
3081
|
//#endregion
|
|
2725
|
-
//#region src/jobs.ts
|
|
2726
|
-
var ACTIVE_JOB_STATUSES = /* @__PURE__ */ new Set([
|
|
2727
|
-
"awaiting_input",
|
|
2728
|
-
"queued",
|
|
2729
|
-
"running"
|
|
2730
|
-
]);
|
|
2731
|
-
var TERMINAL_JOB_STATUSES = /* @__PURE__ */ new Set([
|
|
2732
|
-
"completed",
|
|
2733
|
-
"failed",
|
|
2734
|
-
"cancelled"
|
|
2735
|
-
]);
|
|
2736
|
-
/** Resolve action support while retaining one-cycle legacy status inference. */
|
|
2737
|
-
function resolveJobCapabilities(job) {
|
|
2738
|
-
const legacyCanCancel = job.status === "queued" || job.status === "running";
|
|
2739
|
-
const legacyCanDelete = TERMINAL_JOB_STATUSES.has(job.status);
|
|
2740
|
-
return {
|
|
2741
|
-
can_cancel: typeof job.can_cancel === "boolean" ? job.can_cancel : legacyCanCancel,
|
|
2742
|
-
can_delete: typeof job.can_delete === "boolean" ? job.can_delete : legacyCanDelete
|
|
2743
|
-
};
|
|
2744
|
-
}
|
|
2745
|
-
/** Clamp invalid or out-of-range progress values for safe display. */
|
|
2746
|
-
function normalizeJobPercent(value) {
|
|
2747
|
-
if (!Number.isFinite(value)) return 0;
|
|
2748
|
-
return Math.min(100, Math.max(0, value));
|
|
2749
|
-
}
|
|
2750
|
-
/** Create a detached canonical state without changing the transport input. */
|
|
2751
|
-
function normalizeJobState(job) {
|
|
2752
|
-
const capabilities = resolveJobCapabilities(job);
|
|
2753
|
-
return {
|
|
2754
|
-
...job,
|
|
2755
|
-
definition_id: job.definition_id ?? (typeof job.metadata.definition_id === "string" ? job.metadata.definition_id : null),
|
|
2756
|
-
result_status: job.result_status ?? (job.status === "completed" && job.metadata.has_result === true ? "available" : "none"),
|
|
2757
|
-
result_expires_at: job.result_expires_at ?? null,
|
|
2758
|
-
progress: {
|
|
2759
|
-
...job.progress,
|
|
2760
|
-
percent: normalizeJobPercent(job.progress.percent)
|
|
2761
|
-
},
|
|
2762
|
-
warnings: [...job.warnings],
|
|
2763
|
-
folders: [...job.folders],
|
|
2764
|
-
metadata: { ...job.metadata },
|
|
2765
|
-
...capabilities
|
|
2766
|
-
};
|
|
2767
|
-
}
|
|
2768
|
-
function isActiveJobStatus(status) {
|
|
2769
|
-
return ACTIVE_JOB_STATUSES.has(status);
|
|
2770
|
-
}
|
|
2771
|
-
function isTerminalJobStatus(status) {
|
|
2772
|
-
return TERMINAL_JOB_STATUSES.has(status);
|
|
2773
|
-
}
|
|
2774
|
-
function jobStatusLabel(status) {
|
|
2775
|
-
return {
|
|
2776
|
-
awaiting_input: "Waiting for input",
|
|
2777
|
-
queued: "Queued",
|
|
2778
|
-
running: "Running",
|
|
2779
|
-
completed: "Completed",
|
|
2780
|
-
failed: "Failed",
|
|
2781
|
-
cancelled: "Cancelled"
|
|
2782
|
-
}[status];
|
|
2783
|
-
}
|
|
2784
|
-
//#endregion
|
|
2785
3082
|
//#region src/composables/platformContextHelpers.ts
|
|
2786
3083
|
function getInjectedPlatformContext() {
|
|
2787
3084
|
if (typeof window === "undefined") return void 0;
|
|
@@ -2846,31 +3143,28 @@ var _hoisted_3 = {
|
|
|
2846
3143
|
role: "alert"
|
|
2847
3144
|
};
|
|
2848
3145
|
var _hoisted_4 = ["aria-label"];
|
|
2849
|
-
var _hoisted_5 = [
|
|
2850
|
-
var _hoisted_6 = { class: "mint-resource-picker__group-label" };
|
|
2851
|
-
var _hoisted_7 = { class: "mint-resource-picker__group-count" };
|
|
2852
|
-
var _hoisted_8 = [
|
|
3146
|
+
var _hoisted_5 = [
|
|
2853
3147
|
"id",
|
|
2854
3148
|
"aria-selected",
|
|
2855
3149
|
"onClick",
|
|
2856
3150
|
"onMouseenter"
|
|
2857
3151
|
];
|
|
2858
|
-
var
|
|
2859
|
-
var
|
|
2860
|
-
var
|
|
3152
|
+
var _hoisted_6 = { class: "mint-resource-picker__text" };
|
|
3153
|
+
var _hoisted_7 = { class: "mint-resource-picker__title" };
|
|
3154
|
+
var _hoisted_8 = {
|
|
2861
3155
|
key: 0,
|
|
2862
3156
|
class: "mint-resource-picker__meta"
|
|
2863
3157
|
};
|
|
2864
|
-
var
|
|
3158
|
+
var _hoisted_9 = {
|
|
2865
3159
|
key: 0,
|
|
2866
3160
|
class: "mint-resource-picker__code mint-exp-code mint-exp-code--sm"
|
|
2867
3161
|
};
|
|
2868
|
-
var
|
|
2869
|
-
var
|
|
3162
|
+
var _hoisted_10 = { key: 1 };
|
|
3163
|
+
var _hoisted_11 = {
|
|
2870
3164
|
key: 0,
|
|
2871
3165
|
class: "mint-resource-picker__aside"
|
|
2872
3166
|
};
|
|
2873
|
-
var
|
|
3167
|
+
var _hoisted_12 = {
|
|
2874
3168
|
key: 1,
|
|
2875
3169
|
class: "mint-resource-picker__date"
|
|
2876
3170
|
};
|
|
@@ -2880,7 +3174,6 @@ var ResourcePickerListInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
2880
3174
|
__name: "ResourcePickerListInternal",
|
|
2881
3175
|
props: {
|
|
2882
3176
|
items: {},
|
|
2883
|
-
groups: { default: null },
|
|
2884
3177
|
itemKey: {},
|
|
2885
3178
|
describe: {},
|
|
2886
3179
|
selectedKey: { default: null },
|
|
@@ -2893,12 +3186,13 @@ var ResourcePickerListInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
2893
3186
|
},
|
|
2894
3187
|
error: { default: null },
|
|
2895
3188
|
emptyTitle: { default: "Nothing found" },
|
|
2896
|
-
emptyDescription: { default: "Try adjusting your search or filters." }
|
|
3189
|
+
emptyDescription: { default: "Try adjusting your search or filters." },
|
|
3190
|
+
autofocusSearch: { type: Boolean }
|
|
2897
3191
|
},
|
|
2898
3192
|
emits: ["select", "update:search"],
|
|
2899
3193
|
setup(__props, { emit: __emit }) {
|
|
2900
3194
|
/**
|
|
2901
|
-
* Searchable
|
|
3195
|
+
* Searchable single-select list shared by the experiment and
|
|
2902
3196
|
* artifact selector modals: two-line rows (title, then code + meta) with status and date
|
|
2903
3197
|
* in a right-hand column, a filled selected row, skeleton,
|
|
2904
3198
|
* error and empty states, and the combobox keyboard model (↑ ↓ Enter).
|
|
@@ -2906,35 +3200,24 @@ var ResourcePickerListInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
2906
3200
|
const props = __props;
|
|
2907
3201
|
const emit = __emit;
|
|
2908
3202
|
const listId = `mint-resource-picker-${useId().replace(/:/g, "")}`;
|
|
2909
|
-
const collapsed = reactive(/* @__PURE__ */ new Set());
|
|
2910
3203
|
const activeIndex = ref(-1);
|
|
2911
3204
|
const listRef = ref(null);
|
|
2912
|
-
const
|
|
2913
|
-
...group,
|
|
2914
|
-
rows: collapsed.has(group.label) ? [] : group.items
|
|
2915
|
-
})));
|
|
2916
|
-
/** Keyboard order: the rows on screen, top to bottom. */
|
|
2917
|
-
const flat = computed(() => visibleGroups.value ? visibleGroups.value.flatMap((group) => group.rows) : props.items);
|
|
2918
|
-
const indexByKey = computed(() => new Map(flat.value.map((item, i) => [props.itemKey(item), i])));
|
|
3205
|
+
const indexByKey = computed(() => new Map(props.items.map((item, i) => [props.itemKey(item), i])));
|
|
2919
3206
|
const showList = computed(() => !props.loading && !props.error && props.items.length > 0);
|
|
2920
3207
|
function optionId(item) {
|
|
2921
3208
|
return `${listId}-${props.itemKey(item)}`;
|
|
2922
3209
|
}
|
|
2923
3210
|
const activeDescendant = computed(() => {
|
|
2924
|
-
const item =
|
|
3211
|
+
const item = props.items[activeIndex.value];
|
|
2925
3212
|
return item === void 0 ? void 0 : optionId(item);
|
|
2926
3213
|
});
|
|
2927
3214
|
function indexOf(item) {
|
|
2928
3215
|
return indexByKey.value.get(props.itemKey(item)) ?? -1;
|
|
2929
3216
|
}
|
|
2930
|
-
function toggleGroup(label) {
|
|
2931
|
-
if (collapsed.has(label)) collapsed.delete(label);
|
|
2932
|
-
else collapsed.add(label);
|
|
2933
|
-
}
|
|
2934
3217
|
function keydown(event) {
|
|
2935
3218
|
const target = event.target;
|
|
2936
3219
|
if (target !== event.currentTarget && !target?.closest(".mint-resource-picker__search")) return;
|
|
2937
|
-
const rows =
|
|
3220
|
+
const rows = props.items;
|
|
2938
3221
|
if (!rows.length) return;
|
|
2939
3222
|
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
2940
3223
|
event.preventDefault();
|
|
@@ -2945,116 +3228,91 @@ var ResourcePickerListInternal_default = /* @__PURE__ */ defineComponent({
|
|
|
2945
3228
|
emit("select", rows[activeIndex.value]);
|
|
2946
3229
|
}
|
|
2947
3230
|
}
|
|
2948
|
-
watch(() =>
|
|
3231
|
+
watch(() => props.items, () => {
|
|
2949
3232
|
activeIndex.value = -1;
|
|
2950
3233
|
});
|
|
2951
3234
|
return (_ctx, _cache) => {
|
|
2952
3235
|
return openBlock(), createElementBlock("div", {
|
|
2953
3236
|
class: "mint-resource-picker",
|
|
2954
3237
|
onKeydown: keydown
|
|
2955
|
-
}, [
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3238
|
+
}, [createElementVNode("div", _hoisted_1, [createVNode(BaseInput_default, {
|
|
3239
|
+
class: "mint-resource-picker__search",
|
|
3240
|
+
"model-value": __props.search,
|
|
3241
|
+
placeholder: __props.placeholder,
|
|
3242
|
+
size: "sm",
|
|
3243
|
+
type: "search",
|
|
3244
|
+
autofocus: __props.autofocusSearch,
|
|
3245
|
+
role: "combobox",
|
|
3246
|
+
"aria-label": `Search ${__props.label.toLowerCase()}`,
|
|
3247
|
+
"aria-expanded": showList.value,
|
|
3248
|
+
"aria-controls": listId,
|
|
3249
|
+
"aria-activedescendant": activeDescendant.value,
|
|
3250
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:search", String($event ?? "")))
|
|
3251
|
+
}, {
|
|
3252
|
+
prefix: withCtx(() => [..._cache[2] || (_cache[2] = [createElementVNode("svg", {
|
|
3253
|
+
viewBox: "0 0 16 16",
|
|
3254
|
+
fill: "none",
|
|
3255
|
+
stroke: "currentColor",
|
|
3256
|
+
"stroke-width": "1.5",
|
|
3257
|
+
"aria-hidden": "true"
|
|
3258
|
+
}, [createElementVNode("path", { d: "M7 11.5a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9zM10.5 10.5L14 14" })], -1)])]),
|
|
3259
|
+
_: 1
|
|
3260
|
+
}, 8, [
|
|
3261
|
+
"model-value",
|
|
3262
|
+
"placeholder",
|
|
3263
|
+
"autofocus",
|
|
3264
|
+
"aria-label",
|
|
3265
|
+
"aria-expanded",
|
|
3266
|
+
"aria-activedescendant"
|
|
3267
|
+
]), renderSlot(_ctx.$slots, "filters")]), __props.loading ? (openBlock(), createElementBlock("div", _hoisted_2, [(openBlock(), createElementBlock(Fragment, null, renderList(4, (n) => {
|
|
3268
|
+
return createElementVNode("div", {
|
|
3269
|
+
key: n,
|
|
3270
|
+
class: "mint-resource-picker__skeleton-row"
|
|
3271
|
+
}, [createVNode(Skeleton_default, {
|
|
3272
|
+
width: `${40 + n * 10}%`,
|
|
3273
|
+
height: "0.75rem"
|
|
3274
|
+
}, null, 8, ["width"]), createVNode(Skeleton_default, {
|
|
3275
|
+
width: "30%",
|
|
3276
|
+
height: "0.625rem"
|
|
3277
|
+
})]);
|
|
3278
|
+
}), 64))])) : __props.error ? (openBlock(), createElementBlock("div", _hoisted_3, toDisplayString(__props.error), 1)) : !__props.items.length ? (openBlock(), createBlock(EmptyState_default, {
|
|
3279
|
+
key: 2,
|
|
3280
|
+
title: __props.emptyTitle,
|
|
3281
|
+
description: __props.emptyDescription,
|
|
3282
|
+
size: "sm"
|
|
3283
|
+
}, null, 8, ["title", "description"])) : (openBlock(), createElementBlock("div", {
|
|
3284
|
+
key: 3,
|
|
3285
|
+
id: listId,
|
|
3286
|
+
ref_key: "listRef",
|
|
3287
|
+
ref: listRef,
|
|
3288
|
+
class: "mint-resource-picker__frame mint-resource-picker__list",
|
|
3289
|
+
role: "listbox",
|
|
3290
|
+
"aria-label": __props.label
|
|
3291
|
+
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
|
|
3292
|
+
return openBlock(), createElementBlock("div", {
|
|
3293
|
+
id: optionId(item),
|
|
3294
|
+
key: __props.itemKey(item),
|
|
3295
|
+
role: "option",
|
|
3296
|
+
"aria-selected": __props.itemKey(item) === __props.selectedKey,
|
|
3297
|
+
class: normalizeClass(["mint-resource-picker__row", {
|
|
3298
|
+
"mint-resource-picker__row--selected": __props.itemKey(item) === __props.selectedKey,
|
|
3299
|
+
"mint-resource-picker__row--active": indexOf(item) === activeIndex.value
|
|
3300
|
+
}]),
|
|
3301
|
+
onClick: ($event) => emit("select", item),
|
|
3302
|
+
onMouseenter: ($event) => activeIndex.value = indexOf(item)
|
|
3303
|
+
}, [
|
|
3304
|
+
createElementVNode("span", _hoisted_6, [createElementVNode("span", _hoisted_7, toDisplayString(__props.describe(item).title), 1), __props.describe(item).code || __props.describe(item).meta?.length ? (openBlock(), createElementBlock("span", _hoisted_8, [__props.describe(item).code ? (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(__props.describe(item).code), 1)) : createCommentVNode("", true), __props.describe(item).meta?.length ? (openBlock(), createElementBlock("span", _hoisted_10, toDisplayString(__props.describe(item).meta.join(" · ")), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true)]),
|
|
3305
|
+
__props.describe(item).status || __props.describe(item).date ? (openBlock(), createElementBlock("span", _hoisted_11, [__props.describe(item).status ? (openBlock(), createElementBlock("span", {
|
|
3015
3306
|
key: 0,
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
_cache[
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
stroke: "currentColor",
|
|
3026
|
-
"stroke-width": "1.5",
|
|
3027
|
-
"aria-hidden": "true"
|
|
3028
|
-
}, [createElementVNode("path", { d: "M4 6l4 4 4-4" })], -1)),
|
|
3029
|
-
createElementVNode("span", _hoisted_6, toDisplayString(group.label), 1),
|
|
3030
|
-
createElementVNode("span", _hoisted_7, toDisplayString(group.items.length), 1)
|
|
3031
|
-
], 8, _hoisted_5)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(group.rows, (item) => {
|
|
3032
|
-
return openBlock(), createElementBlock("div", {
|
|
3033
|
-
id: optionId(item),
|
|
3034
|
-
key: __props.itemKey(item),
|
|
3035
|
-
role: "option",
|
|
3036
|
-
"aria-selected": __props.itemKey(item) === __props.selectedKey,
|
|
3037
|
-
class: normalizeClass(["mint-resource-picker__row", {
|
|
3038
|
-
"mint-resource-picker__row--selected": __props.itemKey(item) === __props.selectedKey,
|
|
3039
|
-
"mint-resource-picker__row--active": indexOf(item) === activeIndex.value
|
|
3040
|
-
}]),
|
|
3041
|
-
onClick: ($event) => emit("select", item),
|
|
3042
|
-
onMouseenter: ($event) => activeIndex.value = indexOf(item)
|
|
3043
|
-
}, [
|
|
3044
|
-
createElementVNode("span", _hoisted_9, [createElementVNode("span", _hoisted_10, toDisplayString(__props.describe(item).title), 1), __props.describe(item).code || __props.describe(item).meta?.length ? (openBlock(), createElementBlock("span", _hoisted_11, [__props.describe(item).code ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(__props.describe(item).code), 1)) : createCommentVNode("", true), __props.describe(item).meta?.length ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(__props.describe(item).meta.join(" · ")), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true)]),
|
|
3045
|
-
__props.describe(item).status || __props.describe(item).date ? (openBlock(), createElementBlock("span", _hoisted_14, [__props.describe(item).status ? (openBlock(), createElementBlock("span", {
|
|
3046
|
-
key: 0,
|
|
3047
|
-
class: normalizeClass(["mint-resource-picker__status", `mint-resource-picker__status--${__props.describe(item).status.tone}`])
|
|
3048
|
-
}, toDisplayString(__props.describe(item).status.label), 3)) : createCommentVNode("", true), __props.describe(item).date ? (openBlock(), createElementBlock("span", _hoisted_15, toDisplayString(__props.describe(item).date), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
|
|
3049
|
-
_ctx.$slots.actions ? (openBlock(), createElementBlock("span", {
|
|
3050
|
-
key: 1,
|
|
3051
|
-
class: "mint-resource-picker__actions",
|
|
3052
|
-
onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
|
|
3053
|
-
}, [renderSlot(_ctx.$slots, "actions", { item })])) : createCommentVNode("", true)
|
|
3054
|
-
], 42, _hoisted_8);
|
|
3055
|
-
}), 128))], 64);
|
|
3056
|
-
}), 128))], 8, _hoisted_4))
|
|
3057
|
-
], 32);
|
|
3307
|
+
class: normalizeClass(["mint-resource-picker__status", `mint-resource-picker__status--${__props.describe(item).status.tone}`])
|
|
3308
|
+
}, toDisplayString(__props.describe(item).status.label), 3)) : createCommentVNode("", true), __props.describe(item).date ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(__props.describe(item).date), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true),
|
|
3309
|
+
_ctx.$slots.actions ? (openBlock(), createElementBlock("span", {
|
|
3310
|
+
key: 1,
|
|
3311
|
+
class: "mint-resource-picker__actions",
|
|
3312
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
|
|
3313
|
+
}, [renderSlot(_ctx.$slots, "actions", { item })])) : createCommentVNode("", true)
|
|
3314
|
+
], 42, _hoisted_5);
|
|
3315
|
+
}), 128))], 8, _hoisted_4))], 32);
|
|
3058
3316
|
};
|
|
3059
3317
|
}
|
|
3060
3318
|
});
|
|
@@ -3065,6 +3323,6 @@ function isRecord(value) {
|
|
|
3065
3323
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3066
3324
|
}
|
|
3067
3325
|
//#endregion
|
|
3068
|
-
export {
|
|
3326
|
+
export { formatRelativeTime as A, Tooltip_default as B, formatExperimentDate as C, compareTime as D, useMenuKeyboard as E, toMinutes as F, normalizeOptionInput as G, useListSelection as H, FormField_default as I, BaseInput_default as K, EmptyState_default as L, formatTimeSlot as M, generateTimeSlots as N, durationMinutes as O, time_exports as P, useRovingFocus as R, experimentIdFromRoute as S, FileUploader_default as T, useSelectionLimit as U, BaseSelect_default as V, useFloatingPanel as W, APP_EXPERIMENT_KEY as _, parseExperimentId as a, SORT_OPTIONS as b, SecretInput_default as c, isActiveJobStatus as d, isTerminalJobStatus as f, resolveJobCapabilities as g, normalizeJobState as h, getInjectedPlatformContext as i, formatTime as j, findNearestTimeSlotIndex as k, FORMAT_KEY as l, normalizeJobPercent as m, ResourcePickerListInternal_default as n, resolveCurrentPluginId as o, jobStatusLabel as p, Skeleton_default as r, TagsInput_default as s, isRecord as t, pluginSecrets_exports as u, useAppExperiment as v, resolveExperimentCode as w, datePresetToISO as x, DATE_PRESET_OPTIONS as y, BaseCheckbox_default as z };
|
|
3069
3327
|
|
|
3070
|
-
//# sourceMappingURL=records-
|
|
3328
|
+
//# sourceMappingURL=records-D4aQXyZu.js.map
|