@morscherlab/mint-sdk 1.4.0-beta.10 → 1.4.0-beta.12
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/dist/{AlertBox-B2Bgr3ei.js → AlertBox-BdoZqANv.js} +2 -2
- package/dist/{AlertBox-B2Bgr3ei.js.map → AlertBox-BdoZqANv.js.map} +1 -1
- package/dist/{AppSidebar-mvm--GxN.js → AppSidebar-DGK5i-hJ.js} +7 -7
- package/dist/{AppSidebar-mvm--GxN.js.map → AppSidebar-DGK5i-hJ.js.map} +1 -1
- package/dist/{ExperimentPopover-5T1fAq2L.js → ExperimentPopover-CbD7BR_s.js} +2 -2
- package/dist/{ExperimentPopover-5T1fAq2L.js.map → ExperimentPopover-CbD7BR_s.js.map} +1 -1
- package/dist/{ExperimentSelectorModal-65peG4Up.js → ExperimentSelectorModal-BoofZZxF.js} +4 -4
- package/dist/{ExperimentSelectorModal-65peG4Up.js.map → ExperimentSelectorModal-BoofZZxF.js.map} +1 -1
- package/dist/{SegmentedControl-BtnnjWzs.js → SegmentedControl-BkwYOKpG.js} +2 -2
- package/dist/{SegmentedControl-BtnnjWzs.js.map → SegmentedControl-BkwYOKpG.js.map} +1 -1
- package/dist/{SettingsModal-DO3IZ7qz.js → SettingsModal-BXsjIVnm.js} +25 -24
- package/dist/SettingsModal-BXsjIVnm.js.map +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/SmartGroupFieldRecipe.vue.d.ts +1 -1
- package/dist/{controlSchemaModel-B8CTXagP.js → controlSchemaModel-BF5g4wRC.js} +2 -2
- package/dist/{controlSchemaModel-B8CTXagP.js.map → controlSchemaModel-BF5g4wRC.js.map} +1 -1
- package/dist/{data-CgILxDLW.js → data-ihsBd9bs.js} +10 -10
- package/dist/{data-CgILxDLW.js.map → data-ihsBd9bs.js.map} +1 -1
- package/dist/data.js +7 -7
- package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
- package/dist/experiment-DyO54FQB.js.map +1 -0
- package/dist/index.js +18 -18
- package/dist/{install-CsPFJSx3.js → install-CFgfRO64.js} +13 -13
- package/dist/{install-CsPFJSx3.js.map → install-CFgfRO64.js.map} +1 -1
- package/dist/install.js +1 -1
- package/dist/{lab-MHzp-_J8.js → lab-B-pLwc5U.js} +10 -10
- package/dist/{lab-MHzp-_J8.js.map → lab-B-pLwc5U.js.map} +1 -1
- package/dist/lab.js +4 -4
- package/dist/{records-B6gpM_3e.js → records-DnK_1Q_S.js} +2 -2
- package/dist/{records-B6gpM_3e.js.map → records-DnK_1Q_S.js.map} +1 -1
- package/dist/{runtime-8bs8EogX.js → runtime-pKfF_iql.js} +9 -9
- package/dist/{runtime-8bs8EogX.js.map → runtime-pKfF_iql.js.map} +1 -1
- package/dist/runtime.js +7 -7
- package/dist/{shell-CywENwBT.js → shell-BIH8Rc21.js} +4 -4
- package/dist/{shell-CywENwBT.js.map → shell-BIH8Rc21.js.map} +1 -1
- package/dist/shell.js +4 -4
- 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 +165 -43
- package/dist/types/platform.d.ts +1 -1
- package/dist/{useExperimentSamples-DHnxKFAF.js → useExperimentSamples-BGN1dmcR.js} +4 -4
- package/dist/{useExperimentSamples-DHnxKFAF.js.map → useExperimentSamples-BGN1dmcR.js.map} +1 -1
- package/dist/{useListReorder-BitdUhxn.js → useListReorder-DPynGrCj.js} +3 -3
- package/dist/{useListReorder-BitdUhxn.js.map → useListReorder-DPynGrCj.js.map} +1 -1
- package/dist/{useRackEditor-DiwCt77M.js → useRackEditor-B2FrQA0p.js} +8 -8
- package/dist/{useRackEditor-DiwCt77M.js.map → useRackEditor-B2FrQA0p.js.map} +1 -1
- package/dist/{useRealtime-C3iy9QkU.js → useRealtime-yWjTTnc9.js} +2 -2
- package/dist/{useRealtime-C3iy9QkU.js.map → useRealtime-yWjTTnc9.js.map} +1 -1
- package/dist/{useRequest-D506eHi8.js → useRequest-Dqw12k2s.js} +3 -3
- package/dist/{useRequest-D506eHi8.js.map → useRequest-Dqw12k2s.js.map} +1 -1
- package/package.json +1 -1
- package/src/__tests__/components/SettingsModal.test.ts +9 -2
- package/src/__tests__/stores/settings.test.ts +21 -21
- package/src/__tests__/styles/paletteTokens.test.ts +44 -0
- package/src/__tests__/styles/v2AuditRules.test.ts +96 -0
- package/src/components/GeneratedResultRenderer.vue +3 -4
- package/src/components/SettingsModal.vue +7 -12
- package/src/stores/index.ts +0 -2
- package/src/stores/settings.ts +20 -50
- package/src/styles/components/app-layout.css +3 -2
- package/src/styles/components/app-top-bar.css +3 -3
- package/src/styles/components/dataframe.css +1 -1
- package/src/styles/components/modal.css +2 -2
- package/src/styles/components/number-input.css +1 -1
- package/src/styles/components/progress-bar.css +3 -3
- package/src/styles/components/section-card.css +4 -2
- package/src/styles/components/settings-modal.css +7 -2
- package/src/styles/variables.css +131 -15
- package/src/types/platform.ts +1 -1
- package/dist/SettingsModal-DO3IZ7qz.js.map +0 -1
- package/dist/experiment-43OJtH7R.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { i as AuthenticationRequiredError, o as useApi } from "./experiment-
|
|
2
|
-
import { c as isTerminalJobStatus, d as normalizeJobState, f as resolveJobCapabilities, l as jobStatusLabel, o as resolveCurrentPluginId, s as isActiveJobStatus, u as normalizeJobPercent } from "./records-
|
|
3
|
-
import { A as createGeneratedAnalysisTransport, D as GeneratedPathInput_default, _ as getFieldRegistryEntry, j as useJobsEndpoint, v as getTypeDefault } from "./useListReorder-
|
|
4
|
-
import { a as GeneratedPlotlyResult_default, c as downloadEndpoint, d as useEventStream, f as useSettingsEndpoint, i as GeneratedResultRenderer_default, l as pluginFormDataFromPayload, m as resolvePluginBaseUrl, o as createClient, p as buildEndpointUrl, u as uploadEndpoint } from "./useRackEditor-
|
|
5
|
-
import { a as ComponentBindingRenderer_default, c as generatedJobFormSchema, f as useControlWorkspace, i as RuntimeUpdateNotice_default, l as normalizeGeneratedJobInput, n as PresenceAvatars_default, o as GeneratedPluginView_default, r as usePresence, s as generatedJobDefaults } from "./runtime-
|
|
6
|
-
import { A as getDefaultControlView, C as controlBindings, D as controlsTo, S as useControlSchema, b as defineControls, d as useForm, l as useFormBuilder, u as evaluateCondition, x as getControlDefaults, y as defineControlComponentBindings } from "./AppSidebar-
|
|
7
|
-
import { a as combinePluginJobSources, o as useJobCenter, r as useRealtime } from "./useRealtime-
|
|
1
|
+
import { i as AuthenticationRequiredError, o as useApi } from "./experiment-DyO54FQB.js";
|
|
2
|
+
import { c as isTerminalJobStatus, d as normalizeJobState, f as resolveJobCapabilities, l as jobStatusLabel, o as resolveCurrentPluginId, s as isActiveJobStatus, u as normalizeJobPercent } from "./records-DnK_1Q_S.js";
|
|
3
|
+
import { A as createGeneratedAnalysisTransport, D as GeneratedPathInput_default, _ as getFieldRegistryEntry, j as useJobsEndpoint, v as getTypeDefault } from "./useListReorder-DPynGrCj.js";
|
|
4
|
+
import { a as GeneratedPlotlyResult_default, c as downloadEndpoint, d as useEventStream, f as useSettingsEndpoint, i as GeneratedResultRenderer_default, l as pluginFormDataFromPayload, m as resolvePluginBaseUrl, o as createClient, p as buildEndpointUrl, u as uploadEndpoint } from "./useRackEditor-B2FrQA0p.js";
|
|
5
|
+
import { a as ComponentBindingRenderer_default, c as generatedJobFormSchema, f as useControlWorkspace, i as RuntimeUpdateNotice_default, l as normalizeGeneratedJobInput, n as PresenceAvatars_default, o as GeneratedPluginView_default, r as usePresence, s as generatedJobDefaults } from "./runtime-pKfF_iql.js";
|
|
6
|
+
import { A as getDefaultControlView, C as controlBindings, D as controlsTo, S as useControlSchema, b as defineControls, d as useForm, l as useFormBuilder, u as evaluateCondition, x as getControlDefaults, y as defineControlComponentBindings } from "./AppSidebar-DGK5i-hJ.js";
|
|
7
|
+
import { a as combinePluginJobSources, o as useJobCenter, r as useRealtime } from "./useRealtime-yWjTTnc9.js";
|
|
8
8
|
export { AuthenticationRequiredError, ComponentBindingRenderer_default as ComponentBindingRenderer, GeneratedPathInput_default as GeneratedPathInput, GeneratedPlotlyResult_default as GeneratedPlotlyResult, GeneratedPluginView_default as GeneratedPluginView, GeneratedResultRenderer_default as GeneratedResultRenderer, PresenceAvatars_default as PresenceAvatars, RuntimeUpdateNotice_default as RuntimeUpdateNotice, buildEndpointUrl, combinePluginJobSources, controlBindings, controlsTo, createClient, createGeneratedAnalysisTransport, defineControlComponentBindings, defineControls, downloadEndpoint, evaluateCondition, generatedJobDefaults, generatedJobFormSchema, getControlDefaults, getDefaultControlView, getFieldRegistryEntry, getTypeDefault, isActiveJobStatus, isTerminalJobStatus, jobStatusLabel, normalizeGeneratedJobInput, normalizeJobPercent, normalizeJobState, pluginFormDataFromPayload, resolveCurrentPluginId, resolveJobCapabilities, resolvePluginBaseUrl, uploadEndpoint, useApi, useControlSchema, useControlWorkspace, useEventStream, useForm, useFormBuilder, useJobCenter, useJobsEndpoint, usePresence, useRealtime, useSettingsEndpoint };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as useEventListener, o as __exportAll, r as useFocusTrap } from "./useDropdownState-8yWMu-7_.js";
|
|
2
|
-
import { E as useMenuKeyboard, H as useListSelection, R as useRovingFocus, U as useSelectionLimit } from "./records-
|
|
3
|
-
import { B as compareSortValues, V as useSortedItems, i as useReorderAnnouncer, n as reorderList, r as useListReorder, t as REORDER_ANNOUNCER_STYLE } from "./useListReorder-
|
|
4
|
-
import { _ as AppLayout_default, f as AppTopBar_default, t as AppSidebar_default, v as usePluginWorkspace } from "./AppSidebar-
|
|
2
|
+
import { E as useMenuKeyboard, H as useListSelection, R as useRovingFocus, U as useSelectionLimit } from "./records-DnK_1Q_S.js";
|
|
3
|
+
import { B as compareSortValues, V as useSortedItems, i as useReorderAnnouncer, n as reorderList, r as useListReorder, t as REORDER_ANNOUNCER_STYLE } from "./useListReorder-DPynGrCj.js";
|
|
4
|
+
import { _ as AppLayout_default, f as AppTopBar_default, t as AppSidebar_default, v as usePluginWorkspace } from "./AppSidebar-DGK5i-hJ.js";
|
|
5
5
|
import { t as useDebouncedWatch } from "./useDebouncedWatch-BPwyl6eS.js";
|
|
6
6
|
import { t as useExpansionSet } from "./useExpansionSet-CvoNMZJi.js";
|
|
7
7
|
import { computed, createElementBlock, createElementVNode, defineComponent, normalizeClass, onBeforeUnmount, openBlock, shallowRef, toValue, watch } from "vue";
|
|
@@ -194,4 +194,4 @@ var shell_exports = /* @__PURE__ */ __exportAll({
|
|
|
194
194
|
//#endregion
|
|
195
195
|
export { useManualLayoutResize as a, resizedVerticalSplitPercent as i, resizedLeadingPanelWidth as n, LayoutResizeHandle_default as o, resizedTrailingPanelWidth as r, shell_exports as t };
|
|
196
196
|
|
|
197
|
-
//# sourceMappingURL=shell-
|
|
197
|
+
//# sourceMappingURL=shell-BIH8Rc21.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-CywENwBT.js","names":[],"sources":["../src/components/LayoutResizeHandle.vue","../src/components/LayoutResizeHandle.vue","../src/composables/useManualLayoutResize.ts","../src/shell.ts"],"sourcesContent":["<script setup lang=\"ts\">\n/** Accessible pointer and keyboard handle for resizable workbench panes. */\ninterface Props {\n modelValue: number\n min: number\n max: number\n label: string\n orientation: 'vertical' | 'horizontal'\n edge?: 'left' | 'right'\n step?: number\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n edge: undefined,\n step: 10,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n 'resize-start': [event: PointerEvent]\n}>()\n\nfunction update(value: number): void {\n emit('update:modelValue', Math.min(props.max, Math.max(props.min, value)))\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n const decrement = props.orientation === 'vertical' ? 'ArrowLeft' : 'ArrowUp'\n const increment = props.orientation === 'vertical' ? 'ArrowRight' : 'ArrowDown'\n if (event.key === decrement) update(props.modelValue - props.step)\n else if (event.key === increment) update(props.modelValue + props.step)\n else if (event.key === 'Home') update(props.min)\n else if (event.key === 'End') update(props.max)\n else return\n event.preventDefault()\n}\n</script>\n\n<template>\n <div\n role=\"separator\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"[\n 'mint-layout-resize-handle',\n `mint-layout-resize-handle--${orientation}`,\n edge ? `mint-layout-resize-handle--edge-${edge}` : '',\n ]\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n :aria-disabled=\"disabled || undefined\"\n @pointerdown=\"!disabled && emit('resize-start', $event)\"\n @keydown=\"handleKeydown\"\n >\n <span class=\"mint-layout-resize-handle__bar\" aria-hidden=\"true\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Accessible pointer and keyboard handle for resizable workbench panes. */\ninterface Props {\n modelValue: number\n min: number\n max: number\n label: string\n orientation: 'vertical' | 'horizontal'\n edge?: 'left' | 'right'\n step?: number\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n edge: undefined,\n step: 10,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n 'resize-start': [event: PointerEvent]\n}>()\n\nfunction update(value: number): void {\n emit('update:modelValue', Math.min(props.max, Math.max(props.min, value)))\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n const decrement = props.orientation === 'vertical' ? 'ArrowLeft' : 'ArrowUp'\n const increment = props.orientation === 'vertical' ? 'ArrowRight' : 'ArrowDown'\n if (event.key === decrement) update(props.modelValue - props.step)\n else if (event.key === increment) update(props.modelValue + props.step)\n else if (event.key === 'Home') update(props.min)\n else if (event.key === 'End') update(props.max)\n else return\n event.preventDefault()\n}\n</script>\n\n<template>\n <div\n role=\"separator\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"[\n 'mint-layout-resize-handle',\n `mint-layout-resize-handle--${orientation}`,\n edge ? `mint-layout-resize-handle--edge-${edge}` : '',\n ]\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n :aria-disabled=\"disabled || undefined\"\n @pointerdown=\"!disabled && emit('resize-start', $event)\"\n @keydown=\"handleKeydown\"\n >\n <span class=\"mint-layout-resize-handle__bar\" aria-hidden=\"true\" />\n </div>\n</template>\n","import { computed, onBeforeUnmount, shallowRef, toValue, watch, type MaybeRefOrGetter } from 'vue'\n\nexport interface ResizePanelWidthConstraints {\n minWidth: number\n maxWidth: number\n mainMinWidth?: number\n layoutGap?: number\n}\n\nexport interface ResizePercentConstraints {\n minPercent: number\n maxPercent: number\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\nfunction availablePanelWidth(\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return Math.min(\n constraints.maxWidth,\n containerWidth - (constraints.mainMinWidth ?? 0) - (constraints.layoutGap ?? 0),\n )\n}\n\nexport function resizedLeadingPanelWidth(\n startWidth: number,\n deltaX: number,\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return Math.round(clamp(\n startWidth + deltaX,\n constraints.minWidth,\n Math.max(constraints.minWidth, availablePanelWidth(containerWidth, constraints)),\n ))\n}\n\nexport function resizedTrailingPanelWidth(\n startWidth: number,\n deltaX: number,\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return resizedLeadingPanelWidth(startWidth, -deltaX, containerWidth, constraints)\n}\n\nexport function resizedVerticalSplitPercent(\n startPercent: number,\n deltaY: number,\n containerHeight: number,\n constraints: ResizePercentConstraints,\n): number {\n if (containerHeight <= 0) return startPercent\n return Math.round(clamp(\n startPercent + (deltaY / containerHeight) * 100,\n constraints.minPercent,\n constraints.maxPercent,\n ))\n}\n\nexport interface ManualLayoutResizeContext<TKind extends string> {\n kind: TKind\n startValue: number\n deltaX: number\n deltaY: number\n containerRect: DOMRectReadOnly\n secondaryRect: DOMRectReadOnly | null\n}\n\nexport interface ManualLayoutResizeTarget<TKind extends string> {\n cursor?: string\n getContainerElement: () => HTMLElement | null\n getSecondaryElement?: () => HTMLElement | null\n getStartValue: () => number\n onResize: (context: ManualLayoutResizeContext<TKind>) => void\n}\n\n/** Coordinates pointer-driven resizing for one or more layout splitters. */\nexport function useManualLayoutResize<TKind extends string>(options: {\n enabled: MaybeRefOrGetter<boolean>\n resolveTarget: (kind: TKind) => ManualLayoutResizeTarget<TKind> | null\n}) {\n const activeResize = shallowRef<{\n kind: TKind\n startClientX: number\n startClientY: number\n startValue: number\n containerRect: DOMRectReadOnly\n secondaryRect: DOMRectReadOnly | null\n cursor: string\n } | null>(null)\n const isResizing = computed(() => activeResize.value !== null)\n let previousBodyCursor = ''\n let previousBodyUserSelect = ''\n\n function stopResize(): void {\n if (!activeResize.value) return\n activeResize.value = null\n window.removeEventListener('pointermove', handlePointerMove)\n window.removeEventListener('pointerup', stopResize)\n window.removeEventListener('pointercancel', stopResize)\n if (typeof document !== 'undefined') {\n document.body.style.cursor = previousBodyCursor\n document.body.style.userSelect = previousBodyUserSelect\n }\n }\n\n function handlePointerMove(event: PointerEvent): void {\n const state = activeResize.value\n if (!state) return\n options.resolveTarget(state.kind)?.onResize({\n kind: state.kind,\n startValue: state.startValue,\n deltaX: event.clientX - state.startClientX,\n deltaY: event.clientY - state.startClientY,\n containerRect: state.containerRect,\n secondaryRect: state.secondaryRect,\n })\n }\n\n function startResize(kind: TKind, event: PointerEvent): void {\n if (!toValue(options.enabled) || event.button !== 0) return\n const target = options.resolveTarget(kind)\n const containerRect = target?.getContainerElement()?.getBoundingClientRect()\n if (!target || !containerRect) return\n\n event.preventDefault()\n if (event.currentTarget instanceof HTMLElement) {\n event.currentTarget.setPointerCapture(event.pointerId)\n }\n const secondary = target.getSecondaryElement?.() ?? null\n activeResize.value = {\n kind,\n startClientX: event.clientX,\n startClientY: event.clientY,\n startValue: target.getStartValue(),\n containerRect,\n secondaryRect: secondary?.getBoundingClientRect() ?? null,\n cursor: target.cursor ?? 'col-resize',\n }\n\n if (typeof document !== 'undefined') {\n previousBodyCursor = document.body.style.cursor\n previousBodyUserSelect = document.body.style.userSelect\n document.body.style.cursor = activeResize.value.cursor\n document.body.style.userSelect = 'none'\n }\n window.addEventListener('pointermove', handlePointerMove)\n window.addEventListener('pointerup', stopResize)\n window.addEventListener('pointercancel', stopResize)\n }\n\n function isResizingKind(kind: TKind): boolean {\n return activeResize.value?.kind === kind\n }\n\n watch(() => toValue(options.enabled), enabled => { if (!enabled) stopResize() })\n onBeforeUnmount(stopResize)\n\n return { activeResize, isResizing, isResizingKind, startResize, stopResize }\n}\n","// Application shell components (`@morscherlab/mint-sdk/shell`).\n\n// Layout components\nexport { default as AppTopBar } from './components/AppTopBar.vue'\nexport { default as AppSidebar } from './components/AppSidebar.vue'\nexport { default as AppLayout } from './components/AppLayout.vue'\nexport { default as LayoutResizeHandle } from './components/LayoutResizeHandle.vue'\n\n// Headless interaction composables\nexport {\n useEventListener,\n type EventListenerEnabled,\n type EventFor,\n type EventListenerStop,\n type EventMapFor,\n type EventTargetGetter,\n type EventTargetLike,\n type UseEventListenerObjectOptions,\n type UseEventListenerOptions,\n} from './composables/useEventListener'\nexport {\n useDebouncedWatch,\n type DebouncedWatchCallback,\n type DebouncedWatchCleanup,\n type DebouncedWatchSource,\n type UseDebouncedWatchOptions,\n type UseDebouncedWatchReturn,\n} from './composables/useDebouncedWatch'\nexport {\n useFocusTrap,\n type UseFocusTrapOptions,\n type UseFocusTrapReturn,\n} from './composables/useFocusTrap'\nexport {\n useRovingFocus,\n type UseRovingFocusOptions,\n type UseRovingFocusReturn,\n} from './composables/useRovingFocus'\nexport {\n reorderList,\n useListReorder,\n useReorderAnnouncer,\n REORDER_ANNOUNCER_STYLE,\n type ListReorderMove,\n type UseListReorderOptions,\n type UseListReorderReturn,\n type UseReorderAnnouncerReturn,\n} from './composables/useListReorder'\nexport {\n useMenuKeyboard,\n type UseMenuKeyboardOptions,\n type UseMenuKeyboardReturn,\n} from './composables/useMenuKeyboard'\n\n// Layout, selection, expansion and sort primitives\nexport {\n resizedLeadingPanelWidth,\n resizedTrailingPanelWidth,\n resizedVerticalSplitPercent,\n useManualLayoutResize,\n type ManualLayoutResizeContext,\n type ManualLayoutResizeTarget,\n type ResizePanelWidthConstraints,\n type ResizePercentConstraints,\n} from './composables/useManualLayoutResize'\nexport {\n useSelectionLimit,\n type SelectionLimitSource,\n type UseSelectionLimitOptions,\n type UseSelectionLimitReturn,\n} from './composables/useSelectionLimit'\nexport {\n useListSelection,\n type ListSelectionSource,\n type ListSelectionValue,\n type UseListSelectionOptions,\n type UseListSelectionReturn,\n type WidenListSelectionValue,\n} from './composables/useListSelection'\nexport {\n useExpansionSet,\n type ExpansionSetSource,\n type UseExpansionSetOptions,\n type UseExpansionSetReturn,\n} from './composables/useExpansionSet'\nexport {\n compareSortValues,\n useSortedItems,\n type CompareSortValuesOptions,\n type SortComparator,\n type SortComparatorContext,\n type SortDescriptor,\n type SortedItemsSource,\n type SortOrder,\n type UseSortedItemsOptions,\n type UseSortedItemsReturn,\n} from './composables/useSortedItems'\nexport {\n usePluginWorkspace,\n type PluginWorkspaceSlotsLike,\n type UsePluginWorkspaceOptions,\n type UsePluginWorkspaceReturn,\n} from './composables/usePluginWorkspace'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAKb,SAAS,OAAO,OAAqB;GACnC,KAAK,qBAAqB,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC;EAC3E;EAEA,SAAS,cAAc,OAA4B;GACjD,IAAI,MAAM,UAAU;GACpB,MAAM,YAAY,MAAM,gBAAgB,aAAa,cAAc;GACnE,MAAM,YAAY,MAAM,gBAAgB,aAAa,eAAe;GACpE,IAAI,MAAM,QAAQ,WAAW,OAAO,MAAM,aAAa,MAAM,IAAI;QAC5D,IAAI,MAAM,QAAQ,WAAW,OAAO,MAAM,aAAa,MAAM,IAAI;QACjE,IAAI,MAAM,QAAQ,QAAQ,OAAO,MAAM,GAAG;QAC1C,IAAI,MAAM,QAAQ,OAAO,OAAO,MAAM,GAAG;QACzC;GACL,MAAM,eAAe;EACvB;;GAIE,OAAA,UAAA,GAAA,mBAkBM,OAAA;IAjBJ,MAAK;IACJ,UAAU,QAAA,WAAQ,KAAA;IAClB,OAAK,eAAA;;KAA2E,8BAAA,QAAA;KAAqB,QAAA,OAAI,mCAAsC,QAAA,SAAI;;IAKnJ,cAAY,QAAA;IACZ,oBAAkB,QAAA;IAClB,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,iBAAe,QAAA;IACf,iBAAe,QAAA,YAAY,KAAA;IAC3B,eAAW,OAAA,OAAA,OAAA,MAAA,WAAA,CAAG,QAAA,YAAY,KAAI,gBAAiB,MAAM;IACrD,WAAS;GAEV,GAAA,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,mBAAkE,QAAA;IAA5D,OAAM;IAAiC,eAAY;;;;;;;AE7C7D,SAAS,MAAM,OAAe,KAAa,KAAqB;CAC9D,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEA,SAAS,oBACP,gBACA,aACQ;CACR,OAAO,KAAK,IACV,YAAY,UACZ,kBAAkB,YAAY,gBAAgB,MAAM,YAAY,aAAa,EAC/E;AACF;AAEA,SAAgB,yBACd,YACA,QACA,gBACA,aACQ;CACR,OAAO,KAAK,MAAM,MAChB,aAAa,QACb,YAAY,UACZ,KAAK,IAAI,YAAY,UAAU,oBAAoB,gBAAgB,WAAW,CAAC,CACjF,CAAC;AACH;AAEA,SAAgB,0BACd,YACA,QACA,gBACA,aACQ;CACR,OAAO,yBAAyB,YAAY,CAAC,QAAQ,gBAAgB,WAAW;AAClF;AAEA,SAAgB,4BACd,cACA,QACA,iBACA,aACQ;CACR,IAAI,mBAAmB,GAAG,OAAO;CACjC,OAAO,KAAK,MAAM,MAChB,eAAgB,SAAS,kBAAmB,KAC5C,YAAY,YACZ,YAAY,UACd,CAAC;AACH;;AAoBA,SAAgB,sBAA4C,SAGzD;CACD,MAAM,eAAe,WAQX,IAAI;CACd,MAAM,aAAa,eAAe,aAAa,UAAU,IAAI;CAC7D,IAAI,qBAAqB;CACzB,IAAI,yBAAyB;CAE7B,SAAS,aAAmB;EAC1B,IAAI,CAAC,aAAa,OAAO;EACzB,aAAa,QAAQ;EACrB,OAAO,oBAAoB,eAAe,iBAAiB;EAC3D,OAAO,oBAAoB,aAAa,UAAU;EAClD,OAAO,oBAAoB,iBAAiB,UAAU;EACtD,IAAI,OAAO,aAAa,aAAa;GACnC,SAAS,KAAK,MAAM,SAAS;GAC7B,SAAS,KAAK,MAAM,aAAa;EACnC;CACF;CAEA,SAAS,kBAAkB,OAA2B;EACpD,MAAM,QAAQ,aAAa;EAC3B,IAAI,CAAC,OAAO;EACZ,QAAQ,cAAc,MAAM,IAAI,CAAC,EAAE,SAAS;GAC1C,MAAM,MAAM;GACZ,YAAY,MAAM;GAClB,QAAQ,MAAM,UAAU,MAAM;GAC9B,QAAQ,MAAM,UAAU,MAAM;GAC9B,eAAe,MAAM;GACrB,eAAe,MAAM;EACvB,CAAC;CACH;CAEA,SAAS,YAAY,MAAa,OAA2B;EAC3D,IAAI,CAAC,QAAQ,QAAQ,OAAO,KAAK,MAAM,WAAW,GAAG;EACrD,MAAM,SAAS,QAAQ,cAAc,IAAI;EACzC,MAAM,gBAAgB,QAAQ,oBAAoB,CAAC,EAAE,sBAAsB;EAC3E,IAAI,CAAC,UAAU,CAAC,eAAe;EAE/B,MAAM,eAAe;EACrB,IAAI,MAAM,yBAAyB,aACjC,MAAM,cAAc,kBAAkB,MAAM,SAAS;EAEvD,MAAM,YAAY,OAAO,sBAAsB,KAAK;EACpD,aAAa,QAAQ;GACnB;GACA,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,YAAY,OAAO,cAAc;GACjC;GACA,eAAe,WAAW,sBAAsB,KAAK;GACrD,QAAQ,OAAO,UAAU;EAC3B;EAEA,IAAI,OAAO,aAAa,aAAa;GACnC,qBAAqB,SAAS,KAAK,MAAM;GACzC,yBAAyB,SAAS,KAAK,MAAM;GAC7C,SAAS,KAAK,MAAM,SAAS,aAAa,MAAM;GAChD,SAAS,KAAK,MAAM,aAAa;EACnC;EACA,OAAO,iBAAiB,eAAe,iBAAiB;EACxD,OAAO,iBAAiB,aAAa,UAAU;EAC/C,OAAO,iBAAiB,iBAAiB,UAAU;CACrD;CAEA,SAAS,eAAe,MAAsB;EAC5C,OAAO,aAAa,OAAO,SAAS;CACtC;CAEA,YAAY,QAAQ,QAAQ,OAAO,IAAG,YAAW;EAAE,IAAI,CAAC,SAAS,WAAW;CAAE,CAAC;CAC/E,gBAAgB,UAAU;CAE1B,OAAO;EAAE;EAAc;EAAY;EAAgB;EAAa;CAAW;AAC7E"}
|
|
1
|
+
{"version":3,"file":"shell-BIH8Rc21.js","names":[],"sources":["../src/components/LayoutResizeHandle.vue","../src/components/LayoutResizeHandle.vue","../src/composables/useManualLayoutResize.ts","../src/shell.ts"],"sourcesContent":["<script setup lang=\"ts\">\n/** Accessible pointer and keyboard handle for resizable workbench panes. */\ninterface Props {\n modelValue: number\n min: number\n max: number\n label: string\n orientation: 'vertical' | 'horizontal'\n edge?: 'left' | 'right'\n step?: number\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n edge: undefined,\n step: 10,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n 'resize-start': [event: PointerEvent]\n}>()\n\nfunction update(value: number): void {\n emit('update:modelValue', Math.min(props.max, Math.max(props.min, value)))\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n const decrement = props.orientation === 'vertical' ? 'ArrowLeft' : 'ArrowUp'\n const increment = props.orientation === 'vertical' ? 'ArrowRight' : 'ArrowDown'\n if (event.key === decrement) update(props.modelValue - props.step)\n else if (event.key === increment) update(props.modelValue + props.step)\n else if (event.key === 'Home') update(props.min)\n else if (event.key === 'End') update(props.max)\n else return\n event.preventDefault()\n}\n</script>\n\n<template>\n <div\n role=\"separator\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"[\n 'mint-layout-resize-handle',\n `mint-layout-resize-handle--${orientation}`,\n edge ? `mint-layout-resize-handle--edge-${edge}` : '',\n ]\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n :aria-disabled=\"disabled || undefined\"\n @pointerdown=\"!disabled && emit('resize-start', $event)\"\n @keydown=\"handleKeydown\"\n >\n <span class=\"mint-layout-resize-handle__bar\" aria-hidden=\"true\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Accessible pointer and keyboard handle for resizable workbench panes. */\ninterface Props {\n modelValue: number\n min: number\n max: number\n label: string\n orientation: 'vertical' | 'horizontal'\n edge?: 'left' | 'right'\n step?: number\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n edge: undefined,\n step: 10,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n 'resize-start': [event: PointerEvent]\n}>()\n\nfunction update(value: number): void {\n emit('update:modelValue', Math.min(props.max, Math.max(props.min, value)))\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (props.disabled) return\n const decrement = props.orientation === 'vertical' ? 'ArrowLeft' : 'ArrowUp'\n const increment = props.orientation === 'vertical' ? 'ArrowRight' : 'ArrowDown'\n if (event.key === decrement) update(props.modelValue - props.step)\n else if (event.key === increment) update(props.modelValue + props.step)\n else if (event.key === 'Home') update(props.min)\n else if (event.key === 'End') update(props.max)\n else return\n event.preventDefault()\n}\n</script>\n\n<template>\n <div\n role=\"separator\"\n :tabindex=\"disabled ? -1 : 0\"\n :class=\"[\n 'mint-layout-resize-handle',\n `mint-layout-resize-handle--${orientation}`,\n edge ? `mint-layout-resize-handle--edge-${edge}` : '',\n ]\"\n :aria-label=\"label\"\n :aria-orientation=\"orientation\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n :aria-disabled=\"disabled || undefined\"\n @pointerdown=\"!disabled && emit('resize-start', $event)\"\n @keydown=\"handleKeydown\"\n >\n <span class=\"mint-layout-resize-handle__bar\" aria-hidden=\"true\" />\n </div>\n</template>\n","import { computed, onBeforeUnmount, shallowRef, toValue, watch, type MaybeRefOrGetter } from 'vue'\n\nexport interface ResizePanelWidthConstraints {\n minWidth: number\n maxWidth: number\n mainMinWidth?: number\n layoutGap?: number\n}\n\nexport interface ResizePercentConstraints {\n minPercent: number\n maxPercent: number\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\nfunction availablePanelWidth(\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return Math.min(\n constraints.maxWidth,\n containerWidth - (constraints.mainMinWidth ?? 0) - (constraints.layoutGap ?? 0),\n )\n}\n\nexport function resizedLeadingPanelWidth(\n startWidth: number,\n deltaX: number,\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return Math.round(clamp(\n startWidth + deltaX,\n constraints.minWidth,\n Math.max(constraints.minWidth, availablePanelWidth(containerWidth, constraints)),\n ))\n}\n\nexport function resizedTrailingPanelWidth(\n startWidth: number,\n deltaX: number,\n containerWidth: number,\n constraints: ResizePanelWidthConstraints,\n): number {\n return resizedLeadingPanelWidth(startWidth, -deltaX, containerWidth, constraints)\n}\n\nexport function resizedVerticalSplitPercent(\n startPercent: number,\n deltaY: number,\n containerHeight: number,\n constraints: ResizePercentConstraints,\n): number {\n if (containerHeight <= 0) return startPercent\n return Math.round(clamp(\n startPercent + (deltaY / containerHeight) * 100,\n constraints.minPercent,\n constraints.maxPercent,\n ))\n}\n\nexport interface ManualLayoutResizeContext<TKind extends string> {\n kind: TKind\n startValue: number\n deltaX: number\n deltaY: number\n containerRect: DOMRectReadOnly\n secondaryRect: DOMRectReadOnly | null\n}\n\nexport interface ManualLayoutResizeTarget<TKind extends string> {\n cursor?: string\n getContainerElement: () => HTMLElement | null\n getSecondaryElement?: () => HTMLElement | null\n getStartValue: () => number\n onResize: (context: ManualLayoutResizeContext<TKind>) => void\n}\n\n/** Coordinates pointer-driven resizing for one or more layout splitters. */\nexport function useManualLayoutResize<TKind extends string>(options: {\n enabled: MaybeRefOrGetter<boolean>\n resolveTarget: (kind: TKind) => ManualLayoutResizeTarget<TKind> | null\n}) {\n const activeResize = shallowRef<{\n kind: TKind\n startClientX: number\n startClientY: number\n startValue: number\n containerRect: DOMRectReadOnly\n secondaryRect: DOMRectReadOnly | null\n cursor: string\n } | null>(null)\n const isResizing = computed(() => activeResize.value !== null)\n let previousBodyCursor = ''\n let previousBodyUserSelect = ''\n\n function stopResize(): void {\n if (!activeResize.value) return\n activeResize.value = null\n window.removeEventListener('pointermove', handlePointerMove)\n window.removeEventListener('pointerup', stopResize)\n window.removeEventListener('pointercancel', stopResize)\n if (typeof document !== 'undefined') {\n document.body.style.cursor = previousBodyCursor\n document.body.style.userSelect = previousBodyUserSelect\n }\n }\n\n function handlePointerMove(event: PointerEvent): void {\n const state = activeResize.value\n if (!state) return\n options.resolveTarget(state.kind)?.onResize({\n kind: state.kind,\n startValue: state.startValue,\n deltaX: event.clientX - state.startClientX,\n deltaY: event.clientY - state.startClientY,\n containerRect: state.containerRect,\n secondaryRect: state.secondaryRect,\n })\n }\n\n function startResize(kind: TKind, event: PointerEvent): void {\n if (!toValue(options.enabled) || event.button !== 0) return\n const target = options.resolveTarget(kind)\n const containerRect = target?.getContainerElement()?.getBoundingClientRect()\n if (!target || !containerRect) return\n\n event.preventDefault()\n if (event.currentTarget instanceof HTMLElement) {\n event.currentTarget.setPointerCapture(event.pointerId)\n }\n const secondary = target.getSecondaryElement?.() ?? null\n activeResize.value = {\n kind,\n startClientX: event.clientX,\n startClientY: event.clientY,\n startValue: target.getStartValue(),\n containerRect,\n secondaryRect: secondary?.getBoundingClientRect() ?? null,\n cursor: target.cursor ?? 'col-resize',\n }\n\n if (typeof document !== 'undefined') {\n previousBodyCursor = document.body.style.cursor\n previousBodyUserSelect = document.body.style.userSelect\n document.body.style.cursor = activeResize.value.cursor\n document.body.style.userSelect = 'none'\n }\n window.addEventListener('pointermove', handlePointerMove)\n window.addEventListener('pointerup', stopResize)\n window.addEventListener('pointercancel', stopResize)\n }\n\n function isResizingKind(kind: TKind): boolean {\n return activeResize.value?.kind === kind\n }\n\n watch(() => toValue(options.enabled), enabled => { if (!enabled) stopResize() })\n onBeforeUnmount(stopResize)\n\n return { activeResize, isResizing, isResizingKind, startResize, stopResize }\n}\n","// Application shell components (`@morscherlab/mint-sdk/shell`).\n\n// Layout components\nexport { default as AppTopBar } from './components/AppTopBar.vue'\nexport { default as AppSidebar } from './components/AppSidebar.vue'\nexport { default as AppLayout } from './components/AppLayout.vue'\nexport { default as LayoutResizeHandle } from './components/LayoutResizeHandle.vue'\n\n// Headless interaction composables\nexport {\n useEventListener,\n type EventListenerEnabled,\n type EventFor,\n type EventListenerStop,\n type EventMapFor,\n type EventTargetGetter,\n type EventTargetLike,\n type UseEventListenerObjectOptions,\n type UseEventListenerOptions,\n} from './composables/useEventListener'\nexport {\n useDebouncedWatch,\n type DebouncedWatchCallback,\n type DebouncedWatchCleanup,\n type DebouncedWatchSource,\n type UseDebouncedWatchOptions,\n type UseDebouncedWatchReturn,\n} from './composables/useDebouncedWatch'\nexport {\n useFocusTrap,\n type UseFocusTrapOptions,\n type UseFocusTrapReturn,\n} from './composables/useFocusTrap'\nexport {\n useRovingFocus,\n type UseRovingFocusOptions,\n type UseRovingFocusReturn,\n} from './composables/useRovingFocus'\nexport {\n reorderList,\n useListReorder,\n useReorderAnnouncer,\n REORDER_ANNOUNCER_STYLE,\n type ListReorderMove,\n type UseListReorderOptions,\n type UseListReorderReturn,\n type UseReorderAnnouncerReturn,\n} from './composables/useListReorder'\nexport {\n useMenuKeyboard,\n type UseMenuKeyboardOptions,\n type UseMenuKeyboardReturn,\n} from './composables/useMenuKeyboard'\n\n// Layout, selection, expansion and sort primitives\nexport {\n resizedLeadingPanelWidth,\n resizedTrailingPanelWidth,\n resizedVerticalSplitPercent,\n useManualLayoutResize,\n type ManualLayoutResizeContext,\n type ManualLayoutResizeTarget,\n type ResizePanelWidthConstraints,\n type ResizePercentConstraints,\n} from './composables/useManualLayoutResize'\nexport {\n useSelectionLimit,\n type SelectionLimitSource,\n type UseSelectionLimitOptions,\n type UseSelectionLimitReturn,\n} from './composables/useSelectionLimit'\nexport {\n useListSelection,\n type ListSelectionSource,\n type ListSelectionValue,\n type UseListSelectionOptions,\n type UseListSelectionReturn,\n type WidenListSelectionValue,\n} from './composables/useListSelection'\nexport {\n useExpansionSet,\n type ExpansionSetSource,\n type UseExpansionSetOptions,\n type UseExpansionSetReturn,\n} from './composables/useExpansionSet'\nexport {\n compareSortValues,\n useSortedItems,\n type CompareSortValuesOptions,\n type SortComparator,\n type SortComparatorContext,\n type SortDescriptor,\n type SortedItemsSource,\n type SortOrder,\n type UseSortedItemsOptions,\n type UseSortedItemsReturn,\n} from './composables/useSortedItems'\nexport {\n usePluginWorkspace,\n type PluginWorkspaceSlotsLike,\n type UsePluginWorkspaceOptions,\n type UsePluginWorkspaceReturn,\n} from './composables/usePluginWorkspace'\n"],"mappings":"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"}
|
package/dist/shell.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { i as useEventListener, r as useFocusTrap } from "./useDropdownState-8yWMu-7_.js";
|
|
2
|
-
import { E as useMenuKeyboard, H as useListSelection, R as useRovingFocus, U as useSelectionLimit } from "./records-
|
|
3
|
-
import { B as compareSortValues, V as useSortedItems, i as useReorderAnnouncer, n as reorderList, r as useListReorder, t as REORDER_ANNOUNCER_STYLE } from "./useListReorder-
|
|
4
|
-
import { _ as AppLayout_default, f as AppTopBar_default, t as AppSidebar_default, v as usePluginWorkspace } from "./AppSidebar-
|
|
2
|
+
import { E as useMenuKeyboard, H as useListSelection, R as useRovingFocus, U as useSelectionLimit } from "./records-DnK_1Q_S.js";
|
|
3
|
+
import { B as compareSortValues, V as useSortedItems, i as useReorderAnnouncer, n as reorderList, r as useListReorder, t as REORDER_ANNOUNCER_STYLE } from "./useListReorder-DPynGrCj.js";
|
|
4
|
+
import { _ as AppLayout_default, f as AppTopBar_default, t as AppSidebar_default, v as usePluginWorkspace } from "./AppSidebar-DGK5i-hJ.js";
|
|
5
5
|
import { t as useDebouncedWatch } from "./useDebouncedWatch-BPwyl6eS.js";
|
|
6
6
|
import { t as useExpansionSet } from "./useExpansionSet-CvoNMZJi.js";
|
|
7
|
-
import { a as useManualLayoutResize, i as resizedVerticalSplitPercent, n as resizedLeadingPanelWidth, o as LayoutResizeHandle_default, r as resizedTrailingPanelWidth } from "./shell-
|
|
7
|
+
import { a as useManualLayoutResize, i as resizedVerticalSplitPercent, n as resizedLeadingPanelWidth, o as LayoutResizeHandle_default, r as resizedTrailingPanelWidth } from "./shell-BIH8Rc21.js";
|
|
8
8
|
export { AppLayout_default as AppLayout, AppSidebar_default as AppSidebar, AppTopBar_default as AppTopBar, LayoutResizeHandle_default as LayoutResizeHandle, REORDER_ANNOUNCER_STYLE, compareSortValues, reorderList, resizedLeadingPanelWidth, resizedTrailingPanelWidth, resizedVerticalSplitPercent, useDebouncedWatch, useEventListener, useExpansionSet, useFocusTrap, useListReorder, useListSelection, useManualLayoutResize, useMenuKeyboard, usePluginWorkspace, useReorderAnnouncer, useRovingFocus, useSelectionLimit, useSortedItems };
|
package/dist/stores/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { useAuthStore } from './auth';
|
|
2
|
-
export { useSettingsStore, tryUseSettingsStore, colorPalettes,
|
|
2
|
+
export { useSettingsStore, tryUseSettingsStore, colorPalettes, tableDensityToSize, type SettingsState, } from './settings';
|
|
3
3
|
export { useExperimentStore } from './experiment';
|
package/dist/stores/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { c as
|
|
1
|
+
import { c as tableDensityToSize, l as tryUseSettingsStore, s as colorPalettes, t as useExperimentStore, u as useSettingsStore } from "../experiment-DyO54FQB.js";
|
|
2
2
|
import { r as useAuthStore } from "../auth-SliLnFre.js";
|
|
3
|
-
export {
|
|
3
|
+
export { colorPalettes, tableDensityToSize, tryUseSettingsStore, useAuthStore, useExperimentStore, useSettingsStore };
|
|
@@ -17,20 +17,13 @@ export interface SettingsState {
|
|
|
17
17
|
colorPalette: ColorPalette;
|
|
18
18
|
tableDensity: TableDensity;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Accent palettes. `styles/variables.css` holds each palette's light and dark
|
|
22
|
+
* tokens under `[data-palette]`; the store only writes the attribute.
|
|
23
|
+
*/
|
|
20
24
|
export declare const colorPalettes: Record<ColorPalette, {
|
|
21
25
|
name: string;
|
|
22
|
-
hues: [number, number];
|
|
23
26
|
}>;
|
|
24
|
-
/**
|
|
25
|
-
* Custom properties a non-default palette overrides on `<html>`.
|
|
26
|
-
*
|
|
27
|
-
* The saturation/lightness pairs are lifted from the original indigo/orange
|
|
28
|
-
* tokens in `styles/variables.css` so only the hue moves; the `default`
|
|
29
|
-
* palette writes nothing at all and the stylesheet values stand.
|
|
30
|
-
*/
|
|
31
|
-
export declare const PALETTE_CSS_VARIABLES: readonly ["--color-primary", "--color-primary-hover", "--color-primary-soft", "--color-cta", "--color-cta-hover"];
|
|
32
|
-
/** Build the `<html>` custom-property overrides for a palette. */
|
|
33
|
-
export declare function paletteCssVariables(palette: ColorPalette): Record<string, string>;
|
|
34
27
|
/** Map a table density onto the `size` prop shared by the SDK table components. */
|
|
35
28
|
export declare function tableDensityToSize(density: TableDensity): 'sm' | 'md' | 'lg';
|
|
36
29
|
export declare const useSettingsStore: import('pinia').SetupStoreDefinition<"mint-settings", {
|
|
@@ -49,7 +42,6 @@ export declare const useSettingsStore: import('pinia').SetupStoreDefinition<"min
|
|
|
49
42
|
applyDensity: () => void;
|
|
50
43
|
persistSettings: () => void;
|
|
51
44
|
resetToDefaults: () => void;
|
|
52
|
-
getPaletteHues: () => [number, number];
|
|
53
45
|
getTableSize: () => "sm" | "md" | "lg";
|
|
54
46
|
isDark: () => boolean;
|
|
55
47
|
getApiBaseUrl: () => string;
|
package/dist/styles.css
CHANGED
|
@@ -48,36 +48,35 @@
|
|
|
48
48
|
margin: 0 auto;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
.mint-generated-result[data-v-
|
|
51
|
+
.mint-generated-result[data-v-f242a75c] {
|
|
52
52
|
width: 100%;
|
|
53
53
|
}
|
|
54
|
-
.mint-generated-result__text[data-v-
|
|
55
|
-
.mint-generated-result__json[data-v-
|
|
54
|
+
.mint-generated-result__text[data-v-f242a75c],
|
|
55
|
+
.mint-generated-result__json[data-v-f242a75c] {
|
|
56
56
|
margin: 0;
|
|
57
57
|
color: var(--text-primary);
|
|
58
58
|
}
|
|
59
|
-
.mint-generated-result__text[data-v-
|
|
59
|
+
.mint-generated-result__text[data-v-f242a75c] {
|
|
60
60
|
max-width: 72ch;
|
|
61
61
|
white-space: pre-wrap;
|
|
62
62
|
line-height: 1.65;
|
|
63
63
|
}
|
|
64
|
-
.mint-generated-result__json[data-v-
|
|
64
|
+
.mint-generated-result__json[data-v-f242a75c] {
|
|
65
65
|
overflow: auto;
|
|
66
|
-
padding: 1rem;
|
|
67
|
-
border:
|
|
68
|
-
|
|
69
|
-
background: var(--bg-secondary);
|
|
66
|
+
padding: 0.75rem 1rem;
|
|
67
|
+
border-radius: var(--radius-md);
|
|
68
|
+
background: var(--bg-tertiary);
|
|
70
69
|
font-size: 0.8125rem;
|
|
71
70
|
line-height: 1.55;
|
|
72
71
|
white-space: pre-wrap;
|
|
73
72
|
}
|
|
74
|
-
.mint-generated-result__image[data-v-
|
|
73
|
+
.mint-generated-result__image[data-v-f242a75c] {
|
|
75
74
|
display: block;
|
|
76
75
|
max-width: 100%;
|
|
77
76
|
height: auto;
|
|
78
77
|
margin: 0 auto;
|
|
79
78
|
}
|
|
80
|
-
.mint-generated-result__artifact[data-v-
|
|
79
|
+
.mint-generated-result__artifact[data-v-f242a75c] {
|
|
81
80
|
display: flex;
|
|
82
81
|
align-items: center;
|
|
83
82
|
justify-content: space-between;
|
|
@@ -303,7 +302,7 @@
|
|
|
303
302
|
|
|
304
303
|
|
|
305
304
|
|
|
306
|
-
|
|
305
|
+
@layer theme, base, components, utilities;
|
|
307
306
|
/* MINT SDK Styles - Main entry point
|
|
308
307
|
* This file combines all SDK styles for proper bundling
|
|
309
308
|
*/
|
|
@@ -315,6 +314,9 @@
|
|
|
315
314
|
* @import '@morscherlab/mint-sdk/styles';
|
|
316
315
|
*/
|
|
317
316
|
|
|
317
|
+
/* Tailwind v4's layer order, declared first so the SDK's base and utilities
|
|
318
|
+
layers sort the same way with or without Tailwind in the host. */
|
|
319
|
+
|
|
318
320
|
/* ==========================================================================
|
|
319
321
|
CSS Variables - Light Mode
|
|
320
322
|
========================================================================== */
|
|
@@ -357,13 +359,8 @@
|
|
|
357
359
|
where --text-secondary would drop to ~4.35:1. */
|
|
358
360
|
--text-secondary-strong: #475569;
|
|
359
361
|
|
|
360
|
-
/* Brand colors
|
|
361
|
-
|
|
362
|
-
--color-primary: #0D9488;
|
|
363
|
-
--color-primary-hover: #0F766E;
|
|
364
|
-
--color-primary-pressed: #115E59;
|
|
365
|
-
--color-primary-soft: rgba(13, 148, 136, 0.10);
|
|
366
|
-
--color-primary-border: #99F6E4;
|
|
362
|
+
/* Brand colors: the accent (--color-primary*) comes from the palette
|
|
363
|
+
blocks below the dark block (html[data-palette], default teal). */
|
|
367
364
|
/* Fixed teal scale, the same in both themes. */
|
|
368
365
|
--color-primary-50: #F0FDFA;
|
|
369
366
|
--color-primary-100: #CCFBF1;
|
|
@@ -445,6 +442,8 @@
|
|
|
445
442
|
--form-height-md: 2rem;
|
|
446
443
|
--form-height-lg: 2.5rem;
|
|
447
444
|
--mint-gutter: 0.5rem;
|
|
445
|
+
/* Distance from the outermost cards to the window edge, in every density. */
|
|
446
|
+
--mint-page-inset: 1rem;
|
|
448
447
|
|
|
449
448
|
/* Semantic colors */
|
|
450
449
|
--mint-success: #10B981;
|
|
@@ -479,7 +478,7 @@
|
|
|
479
478
|
/* Soft focus rings — 3px translucent. Used by all form primitives
|
|
480
479
|
post-0.16 visual refresh. Solid variants above kept for legacy
|
|
481
480
|
components that haven't migrated yet. */
|
|
482
|
-
--focus-ring-soft: 0 0 0 3px
|
|
481
|
+
--focus-ring-soft: 0 0 0 3px color-mix(in srgb, var(--color-primary) 18%, transparent);
|
|
483
482
|
/* Red is perceptually brighter than teal at equal alpha; drop 2pp to keep visual weight matched. */
|
|
484
483
|
--focus-ring-soft-error: 0 0 0 3px rgba(239, 68, 68, 0.18);
|
|
485
484
|
|
|
@@ -517,12 +516,7 @@ html.dark {
|
|
|
517
516
|
--border-light: #172033;
|
|
518
517
|
--border-strong: #334155;
|
|
519
518
|
|
|
520
|
-
/* Brand colors - Dark mode
|
|
521
|
-
--color-primary: #2DD4BF;
|
|
522
|
-
--color-primary-hover: #5EEAD4;
|
|
523
|
-
--color-primary-pressed: #99F6E4;
|
|
524
|
-
--color-primary-soft: rgba(45, 212, 191, 0.12);
|
|
525
|
-
--color-primary-border: rgba(45, 212, 191, 0.35);
|
|
519
|
+
/* Brand colors - Dark mode: the accent comes from the palette blocks below. */
|
|
526
520
|
/* Dark ink on the light accent fill (10.1:1 on #2DD4BF). */
|
|
527
521
|
--text-on-accent: #0B1120;
|
|
528
522
|
--color-experiment-hover: #E2E8F0;
|
|
@@ -558,7 +552,7 @@ html.dark {
|
|
|
558
552
|
|
|
559
553
|
/* Focus ring - dark mode offset uses bg-primary instead of white */
|
|
560
554
|
--focus-ring-offset: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--color-primary);
|
|
561
|
-
--focus-ring-soft: 0 0 0 3px
|
|
555
|
+
--focus-ring-soft: 0 0 0 3px color-mix(in srgb, var(--color-primary) 22%, transparent);
|
|
562
556
|
--focus-ring-soft-error: 0 0 0 3px rgba(248, 113, 113, 0.26);
|
|
563
557
|
|
|
564
558
|
/* Legacy aliases */
|
|
@@ -568,6 +562,122 @@ html.dark {
|
|
|
568
562
|
color-scheme: dark;
|
|
569
563
|
}
|
|
570
564
|
|
|
565
|
+
/* Accent palettes (Settings → Color palette). The settings store writes
|
|
566
|
+
html[data-palette]; the palette swatches set the same attribute on their
|
|
567
|
+
strip to preview a palette. Each palette is one accent in both themes: white
|
|
568
|
+
text on the light-mode fill, dark text (--text-on-accent) on the dark-mode
|
|
569
|
+
fill. Hues come from the biology plot-style palettes. */
|
|
570
|
+
|
|
571
|
+
/* Teal (default): teal-600 fill, teal-700 hover + ink, teal-800 pressed.
|
|
572
|
+
White on #0D9488 is 3.74:1, a known AA exception. */
|
|
573
|
+
:root,
|
|
574
|
+
[data-palette="default"] {
|
|
575
|
+
--color-primary: #0D9488;
|
|
576
|
+
--color-primary-hover: #0F766E;
|
|
577
|
+
--color-primary-pressed: #115E59;
|
|
578
|
+
--color-primary-soft: rgba(13, 148, 136, 0.10);
|
|
579
|
+
--color-primary-border: #99F6E4;
|
|
580
|
+
}
|
|
581
|
+
html.dark,
|
|
582
|
+
html.dark [data-palette="default"] {
|
|
583
|
+
--color-primary: #2DD4BF;
|
|
584
|
+
--color-primary-hover: #5EEAD4;
|
|
585
|
+
--color-primary-pressed: #99F6E4;
|
|
586
|
+
--color-primary-soft: rgba(45, 212, 191, 0.12);
|
|
587
|
+
--color-primary-border: rgba(45, 212, 191, 0.35);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* Colour-blind safe: Okabe-Ito blue accent, and Okabe-Ito bluish green,
|
|
591
|
+
vermilion and orange for status, so success and error differ for every
|
|
592
|
+
colour-vision type. White on #0072B2 is 5.19:1. */
|
|
593
|
+
:root[data-palette="colorblind"],
|
|
594
|
+
[data-palette="colorblind"] {
|
|
595
|
+
--color-primary: #0072B2;
|
|
596
|
+
--color-primary-hover: #005F94;
|
|
597
|
+
--color-primary-pressed: #004C77;
|
|
598
|
+
--color-primary-soft: rgba(0, 114, 178, 0.10);
|
|
599
|
+
--color-primary-border: #B3D5EA;
|
|
600
|
+
--mint-success: #009E73;
|
|
601
|
+
--mint-success-hover: #00805D;
|
|
602
|
+
--mint-success-bg: rgba(0, 158, 115, 0.1);
|
|
603
|
+
--mint-success-border: rgba(0, 158, 115, 0.3);
|
|
604
|
+
--mint-error: #D55E00;
|
|
605
|
+
--mint-error-hover: #B34E00;
|
|
606
|
+
--mint-error-bg: rgba(213, 94, 0, 0.1);
|
|
607
|
+
--mint-error-border: rgba(213, 94, 0, 0.3);
|
|
608
|
+
--mint-warning: #E69F00;
|
|
609
|
+
--mint-warning-hover: #C78800;
|
|
610
|
+
--mint-warning-bg: rgba(230, 159, 0, 0.1);
|
|
611
|
+
--mint-warning-border: rgba(230, 159, 0, 0.3);
|
|
612
|
+
--mint-warning-text: #8F5F00;
|
|
613
|
+
}
|
|
614
|
+
html.dark[data-palette="colorblind"],
|
|
615
|
+
html.dark [data-palette="colorblind"] {
|
|
616
|
+
--color-primary: #56B4E9;
|
|
617
|
+
--color-primary-hover: #7CC5EE;
|
|
618
|
+
--color-primary-pressed: #A3D6F3;
|
|
619
|
+
--color-primary-soft: rgba(86, 180, 233, 0.14);
|
|
620
|
+
--color-primary-border: rgba(86, 180, 233, 0.38);
|
|
621
|
+
--mint-success-bg: rgba(0, 158, 115, 0.15);
|
|
622
|
+
--mint-error-bg: rgba(213, 94, 0, 0.15);
|
|
623
|
+
--mint-warning-bg: rgba(230, 159, 0, 0.15);
|
|
624
|
+
--mint-warning-text: #FCD34D;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/* Purple: plot-style purple #8781bd, deepened so white text is 5.15:1. */
|
|
628
|
+
:root[data-palette="purple"],
|
|
629
|
+
[data-palette="purple"] {
|
|
630
|
+
--color-primary: #6B64B0;
|
|
631
|
+
--color-primary-hover: #5A539E;
|
|
632
|
+
--color-primary-pressed: #4A448A;
|
|
633
|
+
--color-primary-soft: rgba(107, 100, 176, 0.10);
|
|
634
|
+
--color-primary-border: #D3D0EC;
|
|
635
|
+
}
|
|
636
|
+
html.dark[data-palette="purple"],
|
|
637
|
+
html.dark [data-palette="purple"] {
|
|
638
|
+
--color-primary: #A9A3DB;
|
|
639
|
+
--color-primary-hover: #C2BDE7;
|
|
640
|
+
--color-primary-pressed: #D8D4F1;
|
|
641
|
+
--color-primary-soft: rgba(169, 163, 219, 0.14);
|
|
642
|
+
--color-primary-border: rgba(169, 163, 219, 0.38);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/* Ocean: plot-style ocean ramp, #2171B5 fill (white 5.13:1), #6BAED6 dark. */
|
|
646
|
+
:root[data-palette="ocean"],
|
|
647
|
+
[data-palette="ocean"] {
|
|
648
|
+
--color-primary: #2171B5;
|
|
649
|
+
--color-primary-hover: #1B5F99;
|
|
650
|
+
--color-primary-pressed: #164E7E;
|
|
651
|
+
--color-primary-soft: rgba(33, 113, 181, 0.10);
|
|
652
|
+
--color-primary-border: #BBD7EE;
|
|
653
|
+
}
|
|
654
|
+
html.dark[data-palette="ocean"],
|
|
655
|
+
html.dark [data-palette="ocean"] {
|
|
656
|
+
--color-primary: #6BAED6;
|
|
657
|
+
--color-primary-hover: #8EC2E2;
|
|
658
|
+
--color-primary-pressed: #B0D5EC;
|
|
659
|
+
--color-primary-soft: rgba(107, 174, 214, 0.14);
|
|
660
|
+
--color-primary-border: rgba(107, 174, 214, 0.38);
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/* Forest: plot-style forest_clay, #2F6B4F fill (white 6.29:1), #7AA874 dark. */
|
|
664
|
+
:root[data-palette="forest"],
|
|
665
|
+
[data-palette="forest"] {
|
|
666
|
+
--color-primary: #2F6B4F;
|
|
667
|
+
--color-primary-hover: #275A42;
|
|
668
|
+
--color-primary-pressed: #1F4935;
|
|
669
|
+
--color-primary-soft: rgba(47, 107, 79, 0.10);
|
|
670
|
+
--color-primary-border: #BFD8C6;
|
|
671
|
+
}
|
|
672
|
+
html.dark[data-palette="forest"],
|
|
673
|
+
html.dark [data-palette="forest"] {
|
|
674
|
+
--color-primary: #7AA874;
|
|
675
|
+
--color-primary-hover: #95BC90;
|
|
676
|
+
--color-primary-pressed: #B1CFAD;
|
|
677
|
+
--color-primary-soft: rgba(122, 168, 116, 0.14);
|
|
678
|
+
--color-primary-border: rgba(122, 168, 116, 0.38);
|
|
679
|
+
}
|
|
680
|
+
|
|
571
681
|
/* Comfortable density (html[data-density], written by the settings store):
|
|
572
682
|
the pre-v2 control heights and a wider gutter. */
|
|
573
683
|
[data-density="comfortable"] {
|
|
@@ -654,6 +764,9 @@ button, input, select, textarea {
|
|
|
654
764
|
/* ==========================================================================
|
|
655
765
|
MINT Utility Classes (for Tailwind v4 compatibility)
|
|
656
766
|
========================================================================== */
|
|
767
|
+
/* In Tailwind's utilities layer: unlayered, these beat every layered rule, so a
|
|
768
|
+
host's responsive variant (`lg:flex-row`) lost to the SDK's `.flex-col`. */
|
|
769
|
+
@layer utilities {
|
|
657
770
|
.bg-bg-hover {
|
|
658
771
|
background-color: var(--bg-tertiary);
|
|
659
772
|
}
|
|
@@ -1029,6 +1142,7 @@ button, input, select, textarea {
|
|
|
1029
1142
|
.max-w-sm {
|
|
1030
1143
|
max-width: 24rem;
|
|
1031
1144
|
}
|
|
1145
|
+
} /* @layer utilities */
|
|
1032
1146
|
|
|
1033
1147
|
/* ==========================================================================
|
|
1034
1148
|
Reduced Motion
|
|
@@ -1490,10 +1604,11 @@ button, input, select, textarea {
|
|
|
1490
1604
|
}
|
|
1491
1605
|
|
|
1492
1606
|
/* Floating variant: all sections appear as separate cards on a background,
|
|
1493
|
-
spaced by the density gutter (8px, 12px
|
|
1607
|
+
16px from the window edge and spaced by the density gutter (8px, 12px
|
|
1608
|
+
comfortable). */
|
|
1494
1609
|
.mint-layout--floating {
|
|
1495
1610
|
background-color: var(--bg-primary);
|
|
1496
|
-
padding: var(--mint-
|
|
1611
|
+
padding: var(--mint-page-inset);
|
|
1497
1612
|
gap: var(--mint-gutter);
|
|
1498
1613
|
}
|
|
1499
1614
|
|
|
@@ -2267,10 +2382,10 @@ button, input, select, textarea {
|
|
|
2267
2382
|
padding: 0 0.375rem 0 0;
|
|
2268
2383
|
}
|
|
2269
2384
|
|
|
2270
|
-
/* Variant: card - flat floating card, inset
|
|
2385
|
+
/* Variant: card - flat floating card, inset 16px from the window edge */
|
|
2271
2386
|
.mint-topbar--card {
|
|
2272
|
-
width: calc(100% - 2 * var(--mint-
|
|
2273
|
-
margin: var(--mint-
|
|
2387
|
+
width: calc(100% - 2 * var(--mint-page-inset));
|
|
2388
|
+
margin: var(--mint-page-inset) var(--mint-page-inset) 0;
|
|
2274
2389
|
padding: 0.375rem 0.5rem 0.375rem 0.625rem;
|
|
2275
2390
|
border-radius: var(--radius-lg);
|
|
2276
2391
|
border: 1px solid var(--border-color);
|
|
@@ -4815,7 +4930,7 @@ button, input, select, textarea {
|
|
|
4815
4930
|
width: 2.5rem;
|
|
4816
4931
|
height: 3px;
|
|
4817
4932
|
background-color: var(--border-color);
|
|
4818
|
-
border-radius:
|
|
4933
|
+
border-radius: var(--radius-sm);
|
|
4819
4934
|
margin: 0.5rem auto 0;
|
|
4820
4935
|
flex-shrink: 0;
|
|
4821
4936
|
}
|
|
@@ -4863,7 +4978,7 @@ button, input, select, textarea {
|
|
|
4863
4978
|
width: 1.75rem;
|
|
4864
4979
|
height: 1.75rem;
|
|
4865
4980
|
padding: 0;
|
|
4866
|
-
border-radius:
|
|
4981
|
+
border-radius: var(--radius-md);
|
|
4867
4982
|
color: var(--text-secondary);
|
|
4868
4983
|
background: none;
|
|
4869
4984
|
border: none;
|
|
@@ -5477,7 +5592,7 @@ button, input, select, textarea {
|
|
|
5477
5592
|
/* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
|
|
5478
5593
|
12px label indent aligns with the numeric text across all input types. */
|
|
5479
5594
|
.mint-number-input__input--sm { padding: 0.25rem 0.625rem; font-size: 0.8125rem; }
|
|
5480
|
-
.mint-number-input__input--md { padding: 0.375rem 0.75rem; font-size: 0.
|
|
5595
|
+
.mint-number-input__input--md { padding: 0.375rem 0.75rem; font-size: 0.875rem; }
|
|
5481
5596
|
.mint-number-input__input--lg { padding: 0.5rem 1rem; font-size: 1rem; }
|
|
5482
5597
|
|
|
5483
5598
|
/* ---------- Unit suffix ---------- */
|
|
@@ -6310,7 +6425,9 @@ button, input, select, textarea {
|
|
|
6310
6425
|
gap: 0.625rem;
|
|
6311
6426
|
box-sizing: border-box;
|
|
6312
6427
|
min-height: 2.5rem;
|
|
6313
|
-
padding:
|
|
6428
|
+
/* 4px block padding: a 28px header control plus padding plus the 1px rule
|
|
6429
|
+
stays inside the 40px strip (6px made it 41px). */
|
|
6430
|
+
padding: 0.25rem 0.625rem 0.25rem 0.75rem;
|
|
6314
6431
|
border-bottom: 1px solid var(--border-color);
|
|
6315
6432
|
flex-shrink: 0;
|
|
6316
6433
|
}
|
|
@@ -6407,7 +6524,7 @@ button.mint-section-card__row:hover {
|
|
|
6407
6524
|
/* Comfortable density gives the header and rows back their height. */
|
|
6408
6525
|
[data-density="comfortable"] .mint-section-card__header {
|
|
6409
6526
|
min-height: 2.75rem;
|
|
6410
|
-
padding: 0.
|
|
6527
|
+
padding: 0.25rem 0.75rem 0.25rem 0.875rem;
|
|
6411
6528
|
}
|
|
6412
6529
|
|
|
6413
6530
|
[data-density="comfortable"] .mint-section-card__row {
|
|
@@ -11204,7 +11321,7 @@ html.dark .mint-pill--soft {
|
|
|
11204
11321
|
}
|
|
11205
11322
|
|
|
11206
11323
|
.mint-dataframe__row:last-child .mint-dataframe__td {
|
|
11207
|
-
border-bottom: none;
|
|
11324
|
+
border-bottom: none !important;
|
|
11208
11325
|
}
|
|
11209
11326
|
|
|
11210
11327
|
/* Empty / error placeholder host (content comes from EmptyState) */
|
|
@@ -11763,13 +11880,13 @@ html.dark .mint-dataframe__loading {
|
|
|
11763
11880
|
}
|
|
11764
11881
|
|
|
11765
11882
|
/* ========================================================================
|
|
11766
|
-
Rail variant (default) — single filled track,
|
|
11883
|
+
Rail variant (default) — single filled track, square-ish ends (v2: no capsules)
|
|
11767
11884
|
======================================================================== */
|
|
11768
11885
|
|
|
11769
11886
|
.mint-progress__track {
|
|
11770
11887
|
width: 100%;
|
|
11771
11888
|
background-color: var(--bg-tertiary);
|
|
11772
|
-
border-radius:
|
|
11889
|
+
border-radius: var(--radius-sm);
|
|
11773
11890
|
overflow: hidden;
|
|
11774
11891
|
}
|
|
11775
11892
|
|
|
@@ -11779,7 +11896,7 @@ html.dark .mint-dataframe__loading {
|
|
|
11779
11896
|
|
|
11780
11897
|
.mint-progress__bar {
|
|
11781
11898
|
height: 100%;
|
|
11782
|
-
border-radius:
|
|
11899
|
+
border-radius: var(--radius-sm);
|
|
11783
11900
|
transition: width 0.3s ease;
|
|
11784
11901
|
}
|
|
11785
11902
|
|
|
@@ -12835,6 +12952,12 @@ html.dark .mint-stale-banner {
|
|
|
12835
12952
|
border-bottom-color: var(--border-color);
|
|
12836
12953
|
}
|
|
12837
12954
|
|
|
12955
|
+
/* The pane ends after the last group's last row: no closing hairline there,
|
|
12956
|
+
it would sit on the footer rule with nothing between them. */
|
|
12957
|
+
.mint-settings-modal__group:last-of-type > .mint-settings-modal__group-grid > .mint-settings-modal__row:last-child {
|
|
12958
|
+
border-bottom: none;
|
|
12959
|
+
}
|
|
12960
|
+
|
|
12838
12961
|
/* The field cell anchors the ↺ reset, which sits just left of the control (5d).
|
|
12839
12962
|
--_settings-control-w is the control's width; stacked fields (text, custom slots)
|
|
12840
12963
|
keep 0 and put the reset at the right end of their label line. */
|
|
@@ -13453,10 +13576,9 @@ html.dark .mint-stale-banner {
|
|
|
13453
13576
|
.mint-settings-modal__density-preview {
|
|
13454
13577
|
--_density-row: 2.125rem;
|
|
13455
13578
|
|
|
13579
|
+
/* A hairline table in the setting row, not a bordered box inside the modal. */
|
|
13456
13580
|
grid-column: 1 / -1;
|
|
13457
13581
|
overflow: hidden;
|
|
13458
|
-
border: 1px solid var(--border-color);
|
|
13459
|
-
border-radius: var(--radius-md);
|
|
13460
13582
|
font-size: 0.75rem;
|
|
13461
13583
|
}
|
|
13462
13584
|
|
package/dist/types/platform.d.ts
CHANGED
|
@@ -50,5 +50,5 @@ export type PlatformContext = Partial<Omit<PlatformFrontendContext, 'plugin'>> &
|
|
|
50
50
|
theme: ThemeMode;
|
|
51
51
|
};
|
|
52
52
|
export type ThemeMode = 'light' | 'dark' | 'system';
|
|
53
|
-
export type ColorPalette = 'default' | 'colorblind' | '
|
|
53
|
+
export type ColorPalette = 'default' | 'colorblind' | 'purple' | 'ocean' | 'forest';
|
|
54
54
|
export type TableDensity = 'compact' | 'normal' | 'comfortable';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { o as useApi, r as readErrorMessage } from "./experiment-
|
|
2
|
-
import { _ as APP_EXPERIMENT_KEY, a as parseExperimentId, t as isRecord } from "./records-
|
|
3
|
-
import { t as useRequest } from "./useRequest-
|
|
1
|
+
import { o as useApi, r as readErrorMessage } from "./experiment-DyO54FQB.js";
|
|
2
|
+
import { _ as APP_EXPERIMENT_KEY, a as parseExperimentId, t as isRecord } from "./records-DnK_1Q_S.js";
|
|
3
|
+
import { t as useRequest } from "./useRequest-Dqw12k2s.js";
|
|
4
4
|
import { computed, inject, ref, shallowRef, toValue, watch } from "vue";
|
|
5
5
|
//#region src/composables/experimentDesignData.ts
|
|
6
6
|
function isPlatformDesignDataResponse(value) {
|
|
@@ -363,4 +363,4 @@ function useExperimentSamples(options = {}) {
|
|
|
363
363
|
//#endregion
|
|
364
364
|
export { useFileImport as a, extractSampleNamesFromDesignData as c, readFileAsText as i, extractSampleOptionsFromDesignData as l, detectDelimiter as n, validateImportFile as o, parseDelimitedText as r, useExperimentData as s, useExperimentSamples as t, unwrapExperimentDesignData as u };
|
|
365
365
|
|
|
366
|
-
//# sourceMappingURL=useExperimentSamples-
|
|
366
|
+
//# sourceMappingURL=useExperimentSamples-BGN1dmcR.js.map
|