@leavepulse/ui 0.78.1 → 0.78.2

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.
Files changed (146) hide show
  1. package/dist/chunks/{DropzoneLinkField-CLLhd3WB.js → DropzoneLinkField-CyE7TJ5f.js} +1 -1
  2. package/dist/chunks/LpAddressInput-ft8fQOGx.js +401 -0
  3. package/dist/chunks/{LpAppShell-BKbYCHkx.js → LpAppShell-DkvU6IBB.js} +1 -1
  4. package/dist/chunks/LpAutocomplete-CrZbd0uv.js +310 -0
  5. package/dist/chunks/LpCheckbox-CCWCwD0y.js +129 -0
  6. package/dist/chunks/{LpCodeDisplay-D3BUAhV1.js → LpCodeDisplay-D59uPwRb.js} +1 -1
  7. package/dist/chunks/LpColorPicker-BONURBFN.js +574 -0
  8. package/dist/chunks/LpDatePicker-C2AOtxgF.js +171 -0
  9. package/dist/chunks/{LpDateRangePicker-CNQXdTVv.js → LpDateRangePicker-CiXdIAyh.js} +43 -35
  10. package/dist/chunks/{LpFileTree-C-rJKzEQ.js → LpFileTree-CpNurwZp.js} +2 -2
  11. package/dist/chunks/{LpFileTreeNode-BgYn4U1J.js → LpFileTreeNode-DdF8Cq-s.js} +1 -1
  12. package/dist/chunks/{LpInput-D0O6dpuA.js → LpInput-CbI7z5fQ.js} +3 -4
  13. package/dist/chunks/{LpLogInspector-BdQlX6S-.js → LpLogInspector-CcSJSGan.js} +1 -1
  14. package/dist/chunks/{LpLogViewer-umCZBapN.js → LpLogViewer-CWu49Dko.js} +2 -2
  15. package/dist/chunks/{LpModalNav-gOi1Giz1.js → LpModalNav-DI3BW5ff.js} +1 -1
  16. package/dist/chunks/LpNumberField-C8LfUz_R.js +154 -0
  17. package/dist/chunks/LpOtpInput-B1X9l9no.js +140 -0
  18. package/dist/chunks/{LpPaletteTheme-BIXpZLGe.js → LpPaletteTheme-B-xuZiKK.js} +2 -2
  19. package/dist/chunks/{LpPasswordInput-D4HPhqfV.js → LpPasswordInput-Duc_3wPv.js} +1 -1
  20. package/dist/chunks/{LpPhoneInput-BSL7NX4z.js → LpPhoneInput-CctcRK9K.js} +124 -118
  21. package/dist/chunks/LpRadioGroup-DTM0nd9G.js +103 -0
  22. package/dist/chunks/LpRangeSlider-DJsEZXad.js +97 -0
  23. package/dist/chunks/LpRepeater-Czib3rmv.js +193 -0
  24. package/dist/chunks/{LpSecretField-B2roc4Iz.js → LpSecretField-BtlCk3IH.js} +1 -1
  25. package/dist/chunks/LpSegmented-sskrJKJJ.js +128 -0
  26. package/dist/chunks/LpSelect-JFZehOkd.js +515 -0
  27. package/dist/chunks/{LpSidebar-DDNJzb69.js → LpSidebar-CvRvVBTt.js} +1 -1
  28. package/dist/chunks/LpSlider-C4ilCtZX.js +76 -0
  29. package/dist/chunks/LpSwitch-DyAYTchz.js +122 -0
  30. package/dist/chunks/{LpTableFilter-B_XMOeAh.js → LpTableFilter-CJg5eIcV.js} +2 -2
  31. package/dist/chunks/{LpTagsInput-Dt0mteSj.js → LpTagsInput-CkNxpNYa.js} +4 -3
  32. package/dist/chunks/{LpTextarea-Co0b9PVx.js → LpTextarea-CFK_5QB8.js} +3 -2
  33. package/dist/chunks/{LpThemeStudio-ChU0_Ga8.js → LpThemeStudio-R-wohbCY.js} +2 -2
  34. package/dist/chunks/{LpThemeSwitcher-DmCZ21P_.js → LpThemeSwitcher-Bzy15MCP.js} +1 -1
  35. package/dist/chunks/LpTimeField-B5n0m8m0.js +115 -0
  36. package/dist/chunks/{LpTopologyCanvas-jqz1KCq2.js → LpTopologyCanvas-BNgw9RyZ.js} +2 -2
  37. package/dist/chunks/{LpWorkspaceSwitcher-BeNHCLd5.js → LpWorkspaceSwitcher-ugv-fyig.js} +1 -1
  38. package/dist/components/DropzoneLinkField.vue.js +1 -1
  39. package/dist/components/LpAddressInput.vue.d.ts +4 -0
  40. package/dist/components/LpAddressInput.vue.js +1 -1
  41. package/dist/components/LpAlert.vue.d.ts +3 -3
  42. package/dist/components/LpAppShell.vue.d.ts +1 -1
  43. package/dist/components/LpAppShell.vue.js +1 -1
  44. package/dist/components/LpAutocomplete.vue.d.ts +4 -0
  45. package/dist/components/LpAutocomplete.vue.js +1 -1
  46. package/dist/components/LpBadge.vue.d.ts +2 -2
  47. package/dist/components/LpChart.vue.d.ts +1 -1
  48. package/dist/components/LpCheckbox.vue.d.ts +4 -0
  49. package/dist/components/LpCheckbox.vue.js +1 -1
  50. package/dist/components/LpCodeDisplay.vue.js +1 -1
  51. package/dist/components/LpCollapse.vue.d.ts +1 -1
  52. package/dist/components/LpColorPicker.vue.d.ts +5 -3
  53. package/dist/components/LpColorPicker.vue.js +1 -1
  54. package/dist/components/LpDatePicker.vue.js +1 -1
  55. package/dist/components/LpDateRangePicker.vue.js +1 -1
  56. package/dist/components/LpDropzone.vue.js +1 -1
  57. package/dist/components/LpFileTree.vue.js +1 -1
  58. package/dist/components/LpFileTreeNode.vue.js +1 -1
  59. package/dist/components/LpImageEditor.vue.d.ts +1 -1
  60. package/dist/components/LpInput.vue.js +1 -1
  61. package/dist/components/LpLogInspector.vue.js +1 -1
  62. package/dist/components/LpLogViewer.vue.js +1 -1
  63. package/dist/components/LpModalNav.vue.js +1 -1
  64. package/dist/components/LpNumberField.vue.d.ts +4 -0
  65. package/dist/components/LpNumberField.vue.js +1 -1
  66. package/dist/components/LpOtpInput.vue.d.ts +4 -0
  67. package/dist/components/LpOtpInput.vue.js +1 -1
  68. package/dist/components/LpPaletteTheme.vue.js +1 -1
  69. package/dist/components/LpPasswordInput.vue.js +1 -1
  70. package/dist/components/LpPhoneInput.vue.d.ts +4 -0
  71. package/dist/components/LpPhoneInput.vue.js +1 -1
  72. package/dist/components/LpRadioGroup.vue.d.ts +4 -0
  73. package/dist/components/LpRadioGroup.vue.js +1 -1
  74. package/dist/components/LpRangeSlider.vue.d.ts +4 -0
  75. package/dist/components/LpRangeSlider.vue.js +1 -1
  76. package/dist/components/LpRepeater.vue.d.ts +2 -0
  77. package/dist/components/LpRepeater.vue.js +1 -1
  78. package/dist/components/LpScrollArea.vue.d.ts +1 -1
  79. package/dist/components/LpSecretField.vue.js +1 -1
  80. package/dist/components/LpSegmented.vue.d.ts +4 -0
  81. package/dist/components/LpSegmented.vue.js +1 -1
  82. package/dist/components/LpSelect.vue.d.ts +2 -0
  83. package/dist/components/LpSelect.vue.js +1 -1
  84. package/dist/components/LpShinyText.vue.d.ts +1 -1
  85. package/dist/components/LpSidebar.vue.d.ts +1 -1
  86. package/dist/components/LpSidebar.vue.js +1 -1
  87. package/dist/components/LpSlider.vue.d.ts +4 -0
  88. package/dist/components/LpSlider.vue.js +1 -1
  89. package/dist/components/LpSwitch.vue.d.ts +4 -0
  90. package/dist/components/LpSwitch.vue.js +1 -1
  91. package/dist/components/LpTable.vue.js +2 -2
  92. package/dist/components/LpTableFilter.vue.js +1 -1
  93. package/dist/components/LpTabs.vue.d.ts +1 -1
  94. package/dist/components/LpTagsInput.vue.js +1 -1
  95. package/dist/components/LpTextarea.vue.js +1 -1
  96. package/dist/components/LpThemeStudio.vue.js +1 -1
  97. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  98. package/dist/components/LpTimeField.vue.d.ts +4 -0
  99. package/dist/components/LpTimeField.vue.js +1 -1
  100. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  101. package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
  102. package/dist/components/calendar.d.ts +2 -0
  103. package/dist/composables/useField.d.ts +50 -0
  104. package/dist/composables/useField.js +31 -2
  105. package/dist/composables/useMergedClass.d.ts +6 -2
  106. package/dist/composables/useMergedClass.js +6 -6
  107. package/dist/index.js +34 -34
  108. package/package.json +1 -1
  109. package/src/components/LpAddressInput.vue +8 -4
  110. package/src/components/LpAutocomplete.vue +11 -5
  111. package/src/components/LpCheckbox.vue +8 -6
  112. package/src/components/LpColorPicker.vue +7 -4
  113. package/src/components/LpDatePicker.vue +8 -4
  114. package/src/components/LpDateRangePicker.vue +8 -4
  115. package/src/components/LpInput.vue +3 -4
  116. package/src/components/LpNumberField.vue +11 -6
  117. package/src/components/LpOtpInput.vue +8 -6
  118. package/src/components/LpPhoneInput.vue +11 -6
  119. package/src/components/LpRadioGroup.vue +9 -5
  120. package/src/components/LpRangeSlider.vue +8 -4
  121. package/src/components/LpRepeater.vue +16 -4
  122. package/src/components/LpSegmented.vue +8 -4
  123. package/src/components/LpSelect.vue +8 -7
  124. package/src/components/LpSlider.vue +8 -4
  125. package/src/components/LpSwitch.vue +8 -5
  126. package/src/components/LpTagsInput.vue +4 -3
  127. package/src/components/LpTextarea.vue +3 -2
  128. package/src/components/LpTimeField.vue +8 -6
  129. package/src/components/calendar.ts +2 -0
  130. package/src/composables/useField.ts +52 -0
  131. package/src/composables/useMergedClass.ts +11 -5
  132. package/dist/chunks/LpAddressInput-BSS49jpm.js +0 -393
  133. package/dist/chunks/LpAutocomplete-DkY6CSyD.js +0 -302
  134. package/dist/chunks/LpCheckbox-D6RuDW4X.js +0 -124
  135. package/dist/chunks/LpColorPicker-COHzV68R.js +0 -567
  136. package/dist/chunks/LpDatePicker-DwSDY0mt.js +0 -163
  137. package/dist/chunks/LpNumberField-Csg-1Zh_.js +0 -148
  138. package/dist/chunks/LpOtpInput-BRpLBbOD.js +0 -132
  139. package/dist/chunks/LpRadioGroup-BrazjLY_.js +0 -95
  140. package/dist/chunks/LpRangeSlider-fz61tzc-.js +0 -89
  141. package/dist/chunks/LpRepeater-BkJHSPI1.js +0 -180
  142. package/dist/chunks/LpSegmented-DbEJhbv-.js +0 -123
  143. package/dist/chunks/LpSelect-Y-iuSymW.js +0 -512
  144. package/dist/chunks/LpSlider-A4ixovgS.js +0 -68
  145. package/dist/chunks/LpSwitch-DnC2-0aV.js +0 -115
  146. package/dist/chunks/LpTimeField-DeOcKWJq.js +0 -110
@@ -0,0 +1,122 @@
1
+ import { defineComponent, useSlots, computed, useId, openBlock, createBlock, normalizeProps, guardReactiveProps, unref, withCtx, resolveDynamicComponent, normalizeClass, createElementBlock, renderSlot, createTextVNode, toDisplayString, createCommentVNode, createVNode, mergeProps } from "vue";
2
+ import { _ as _sfc_main$1 } from "./FieldWrapper-DnuMTrqW.js";
3
+ import { usePaletteControl } from "../composables/usePaletteCommands.js";
4
+ import { SwitchRoot, SwitchThumb } from "reka-ui";
5
+ import { useOwnField, mergeDescribedBy } from "../composables/useField.js";
6
+ import { useOptimisticToggle } from "../composables/useOptimisticToggle.js";
7
+ import { _ as _sfc_main$2 } from "./LpLoader-Bf1yZwaU.js";
8
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
9
+ const _hoisted_1 = {
10
+ key: 0,
11
+ class: "flex min-w-0 flex-col"
12
+ };
13
+ const _hoisted_2 = {
14
+ key: 1,
15
+ class: "flex min-w-0 flex-col"
16
+ };
17
+ const __default__ = { inheritAttrs: false };
18
+ const _sfc_main = /* @__PURE__ */ defineComponent({
19
+ ...__default__,
20
+ __name: "LpSwitch",
21
+ props: {
22
+ palette: { type: [Boolean, Object], default: void 0 },
23
+ modelValue: { type: Boolean },
24
+ disabled: { type: Boolean },
25
+ error: {},
26
+ label: {},
27
+ description: {},
28
+ labelPosition: { default: "end" },
29
+ action: {}
30
+ },
31
+ emits: ["update:modelValue", "done", "error"],
32
+ setup(__props, { emit: __emit }) {
33
+ const props = __props;
34
+ const emit = __emit;
35
+ const { pending, set } = useOptimisticToggle(() => props.action, emit);
36
+ const slots = useSlots();
37
+ const labelled = computed(() => Boolean(props.label || props.description || slots.default));
38
+ const TRACK = "group/switch inline-flex h-5 w-9 shrink-0 items-center rounded-pill border border-line bg-surface-soft px-0.5 outline-none transition-colors duration-[var(--duration-fast)] focus-visible:ring-2 focus-visible:ring-ring data-[state=checked]:border-transparent data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-55";
39
+ const THUMB = "h-3.5 w-3.5 rounded-full bg-ink shadow transition-[translate,width,background-color] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active/switch:w-5 group-data-[state=checked]/switch:translate-x-4 group-data-[state=checked]/switch:bg-ink-inverse group-data-[state=checked]/switch:group-active/switch:translate-x-2.5 motion-reduce:group-active/switch:w-3.5";
40
+ const { class: rootClass, attrs: rest } = useMergedAttrs(() => {
41
+ if (!labelled.value) return TRACK;
42
+ return props.labelPosition === "start" ? "flex w-full cursor-pointer items-center justify-between gap-3 text-sm text-ink" : "inline-flex cursor-pointer items-center gap-2 text-sm text-ink";
43
+ }, () => ownAttrs());
44
+ const { field, wrapper, ownAttrs } = useOwnField(() => ({
45
+ error: props.error,
46
+ id: typeof rest.value.id === "string" ? rest.value.id : void 0,
47
+ disabled: props.disabled
48
+ }));
49
+ const descriptionId = `${useId()}-description`;
50
+ const describedBy = computed(
51
+ () => mergeDescribedBy(rest.value["aria-describedby"], props.description && labelled.value ? descriptionId : void 0, field.value.describedBy)
52
+ );
53
+ function onUpdate(value) {
54
+ void set(value);
55
+ }
56
+ usePaletteControl({ label: () => props.label, disabled: () => field.value.disabled || pending.value, editorProps: () => ({ action: void 0, "onUpdate:modelValue": onUpdate }) });
57
+ return (_ctx, _cache) => {
58
+ return openBlock(), createBlock(_sfc_main$1, normalizeProps(guardReactiveProps(unref(wrapper))), {
59
+ default: withCtx(() => [
60
+ (openBlock(), createBlock(resolveDynamicComponent(labelled.value ? "label" : "span"), {
61
+ class: normalizeClass(labelled.value ? [unref(rootClass), unref(field).disabled && "cursor-not-allowed"] : "contents")
62
+ }, {
63
+ default: withCtx(() => [
64
+ labelled.value && __props.labelPosition === "start" ? (openBlock(), createElementBlock("span", _hoisted_1, [
65
+ renderSlot(_ctx.$slots, "default", {}, () => [
66
+ createTextVNode(toDisplayString(__props.label), 1)
67
+ ]),
68
+ __props.description ? (openBlock(), createElementBlock("span", {
69
+ key: 0,
70
+ id: descriptionId,
71
+ class: "text-xs text-muted"
72
+ }, toDisplayString(__props.description), 1)) : createCommentVNode("", true)
73
+ ])) : createCommentVNode("", true),
74
+ createVNode(unref(SwitchRoot), mergeProps(unref(rest), {
75
+ id: unref(field).id,
76
+ "model-value": __props.modelValue,
77
+ disabled: unref(field).disabled,
78
+ required: unref(field).required,
79
+ "aria-describedby": describedBy.value,
80
+ "aria-busy": unref(pending) || void 0,
81
+ class: labelled.value ? TRACK : unref(rootClass),
82
+ "onUpdate:modelValue": onUpdate
83
+ }), {
84
+ default: withCtx(() => [
85
+ createVNode(unref(SwitchThumb), {
86
+ class: normalizeClass([THUMB, "grid place-items-center"])
87
+ }, {
88
+ default: withCtx(() => [
89
+ createVNode(_sfc_main$2, {
90
+ active: unref(pending),
91
+ size: "inline",
92
+ "aria-hidden": "true",
93
+ class: "text-[10px] text-ink-inverse group-data-[state=checked]/switch:text-ink"
94
+ }, null, 8, ["active"])
95
+ ]),
96
+ _: 1
97
+ }, 8, ["class"])
98
+ ]),
99
+ _: 1
100
+ }, 16, ["id", "model-value", "disabled", "required", "aria-describedby", "aria-busy", "class"]),
101
+ labelled.value && __props.labelPosition === "end" ? (openBlock(), createElementBlock("span", _hoisted_2, [
102
+ renderSlot(_ctx.$slots, "default", {}, () => [
103
+ createTextVNode(toDisplayString(__props.label), 1)
104
+ ]),
105
+ __props.description ? (openBlock(), createElementBlock("span", {
106
+ key: 0,
107
+ id: descriptionId,
108
+ class: "text-xs text-muted"
109
+ }, toDisplayString(__props.description), 1)) : createCommentVNode("", true)
110
+ ])) : createCommentVNode("", true)
111
+ ]),
112
+ _: 3
113
+ }, 8, ["class"]))
114
+ ]),
115
+ _: 3
116
+ }, 16);
117
+ };
118
+ }
119
+ });
120
+ export {
121
+ _sfc_main as _
122
+ };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, ref, computed, openBlock, createElementBlock, createBlock, createCommentVNode, createElementVNode, Fragment, unref, normalizeClass, toDisplayString, createVNode, withCtx, renderList } from "vue";
2
- import { _ as _sfc_main$3 } from "./LpCheckbox-D6RuDW4X.js";
3
- import { _ as _sfc_main$1 } from "./LpInput-D0O6dpuA.js";
2
+ import { _ as _sfc_main$3 } from "./LpCheckbox-CCWCwD0y.js";
3
+ import { _ as _sfc_main$1 } from "./LpInput-CbI7z5fQ.js";
4
4
  import { _ as _sfc_main$2 } from "./LpShift-DAgS_d2x.js";
5
5
  import { usePaintSelect } from "../composables/usePaintSelect.js";
6
6
  import { matchesQuery, onlyValues, unhideValues, hideAllValues, invertHidden } from "../components/tableFilter.js";
@@ -2,7 +2,7 @@ import { defineComponent, useAttrs, computed, ref, useId, watch, openBlock, crea
2
2
  import { isNode, isInputElement } from "../composables/realm.js";
3
3
  import { usePaletteControl } from "../composables/usePaletteCommands.js";
4
4
  import { TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput, PopoverRoot, PopoverAnchor, PopoverPortal, PopoverContent } from "reka-ui";
5
- import { useField, useFieldControl, mergeDescribedBy, fieldWrapperBinds } from "../composables/useField.js";
5
+ import { useField, wrapsItself, useFieldControl, mergeDescribedBy, fieldWrapperBinds } from "../composables/useField.js";
6
6
  import { prefersReducedMotion } from "../composables/easing.js";
7
7
  import { useFieldNotice } from "../composables/useFieldNotice.js";
8
8
  import { useShift } from "../composables/useShift.js";
@@ -82,9 +82,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
82
82
  () => props.labels
83
83
  );
84
84
  const attrs = useAttrs();
85
- const hasField = computed(() => !!props.label || !!props.hint || !!props.error);
85
+ const outerFieldOf = useField();
86
+ const hasField = computed(() => wrapsItself(props, outerFieldOf));
86
87
  const notice = useFieldNotice();
87
- const outerField = useField();
88
+ const outerField = outerFieldOf;
88
89
  const ownField = ref(null);
89
90
  function bindField(c) {
90
91
  ownField.value = hasField.value && c ? c : null;
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, useAttrs, ref, watch, nextTick, onMounted, openBlock, createBlock, normalizeProps, guardReactiveProps, unref, withCtx, createElementVNode, mergeProps } from "vue";
2
2
  import { nodeWindow } from "../composables/realm.js";
3
3
  import { usePaletteControl } from "../composables/usePaletteCommands.js";
4
- import { useFieldControl, fieldWrapperBinds, mergeDescribedBy } from "../composables/useField.js";
4
+ import { useField, wrapsItself, useFieldControl, fieldWrapperBinds, mergeDescribedBy } from "../composables/useField.js";
5
5
  import { mergeClass } from "../composables/useMergedClass.js";
6
6
  import { _ as _sfc_main$1 } from "./FieldWrapper-DnuMTrqW.js";
7
7
  const _hoisted_1 = ["id", "value", "placeholder", "rows", "disabled", "required", "aria-invalid", "aria-describedby"];
@@ -26,7 +26,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26
26
  emits: ["update:modelValue"],
27
27
  setup(__props, { expose: __expose }) {
28
28
  const props = __props;
29
- const hasField = computed(() => !!props.label || !!props.hint || !!props.error);
29
+ const outerFieldOf = useField();
30
+ const hasField = computed(() => wrapsItself(props, outerFieldOf));
30
31
  const attrs = useAttrs();
31
32
  const textareaAttrs = computed(() => {
32
33
  const { class: _c, style: _s, ...rest } = attrs;
@@ -4,9 +4,9 @@ import { useLabels } from "../composables/useLpConfig.js";
4
4
  import { useThemeStudio, STUDIO_BRANDS, STUDIO_SYSTEM } from "../theme/studio.js";
5
5
  import { _ as _sfc_main$1 } from "./LpButton-DSHioIfD.js";
6
6
  import { _ as _sfc_main$7 } from "./LpCodeBlock-DBqy4RLd.js";
7
- import { _ as _sfc_main$4 } from "./LpColorPicker-COHzV68R.js";
7
+ import { _ as _sfc_main$4 } from "./LpColorPicker-BONURBFN.js";
8
8
  import { _ as _sfc_main$2 } from "./LpIcon-C6JpQ5td.js";
9
- import { _ as _sfc_main$5 } from "./LpSegmented-DbEJhbv-.js";
9
+ import { _ as _sfc_main$5 } from "./LpSegmented-sskrJKJJ.js";
10
10
  import { _ as _sfc_main$6 } from "./LpDisclosure-DG7JCo-d.js";
11
11
  import { _ as _sfc_main$8 } from "./LpThemeProvider-XK6ZeWAE.js";
12
12
  import { _ as _sfc_main$3 } from "./LpThemeStudioSection-B7bt8Iyg.js";
@@ -11,7 +11,7 @@ import { _ as _sfc_main$1 } from "./LpContextMenu-Bx_IhQDS.js";
11
11
  import { _ as _sfc_main$2 } from "./LpIcon-C6JpQ5td.js";
12
12
  import { _ as _sfc_main$4 } from "./LpRollingText-B54Pje7P.js";
13
13
  import { _ as _sfc_main$3 } from "./LpShift-DAgS_d2x.js";
14
- import { _ as _sfc_main$5 } from "./LpThemeStudio-ChU0_Ga8.js";
14
+ import { _ as _sfc_main$5 } from "./LpThemeStudio-R-wohbCY.js";
15
15
  const _hoisted_1 = ["aria-label", "title"];
16
16
  const _hoisted_2 = {
17
17
  key: 1,
@@ -0,0 +1,115 @@
1
+ import { defineComponent, computed, openBlock, createBlock, normalizeProps, guardReactiveProps, unref, withCtx, createVNode, mergeProps, createCommentVNode, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString } from "vue";
2
+ import { _ as _sfc_main$1 } from "./FieldWrapper-DnuMTrqW.js";
3
+ import { CONTROL_SIZE } from "../components/controlSize.js";
4
+ import { usePaletteControl } from "../composables/usePaletteCommands.js";
5
+ import { Time } from "@internationalized/date";
6
+ import { TimeFieldRoot, TimeFieldInput } from "reka-ui";
7
+ import { useOwnField, mergeDescribedBy, focusLeft } from "../composables/useField.js";
8
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
9
+ import { _ as _sfc_main$2 } from "./LpIcon-C6JpQ5td.js";
10
+ const __default__ = { inheritAttrs: false };
11
+ const _sfc_main = /* @__PURE__ */ defineComponent({
12
+ ...__default__,
13
+ __name: "LpTimeField",
14
+ props: {
15
+ palette: { type: [Boolean, Object], default: void 0 },
16
+ modelValue: {},
17
+ disabled: { type: Boolean },
18
+ invalid: { type: Boolean },
19
+ error: {},
20
+ size: { default: "md" },
21
+ hourCycle: { default: 24 },
22
+ locale: {},
23
+ icon: { type: Boolean, default: true }
24
+ },
25
+ emits: ["update:modelValue", "blur"],
26
+ setup(__props, { emit: __emit }) {
27
+ const props = __props;
28
+ const emit = __emit;
29
+ function onFocusOut(event) {
30
+ if (focusLeft(event)) emit("blur", event);
31
+ }
32
+ const value = computed(() => {
33
+ const match = /^(\d{2}):(\d{2})/.exec(props.modelValue || "");
34
+ return match ? new Time(Number(match[1]), Number(match[2])) : void 0;
35
+ });
36
+ function onUpdate(next) {
37
+ if (!next || typeof next !== "object" || !("hour" in next) || !("minute" in next)) {
38
+ emit("update:modelValue", void 0);
39
+ return;
40
+ }
41
+ const pad = (n) => String(n).padStart(2, "0");
42
+ emit("update:modelValue", `${pad(next.hour)}:${pad(next.minute)}`);
43
+ }
44
+ const { field, wrapper, ownAttrs } = useOwnField(() => ({
45
+ error: props.error,
46
+ invalid: props.invalid,
47
+ disabled: props.disabled
48
+ }));
49
+ const shellSize = CONTROL_SIZE;
50
+ const { class: rootClass, attrs: rest } = useMergedAttrs(() => [
51
+ "flex w-full items-center gap-0.5 rounded-control border bg-surface-soft px-3 text-ink transition-colors duration-[var(--duration-fast)] focus-within:ring-2 focus-within:ring-ring data-[disabled]:cursor-not-allowed data-[disabled]:opacity-55",
52
+ shellSize[props.size],
53
+ field.value.invalid ? "border-danger focus-within:ring-danger-soft" : "border-line focus-within:border-brand"
54
+ ].join(" "), () => ownAttrs());
55
+ usePaletteControl({ disabled: () => field.value.disabled, invalid: () => field.value.invalid });
56
+ return (_ctx, _cache) => {
57
+ return openBlock(), createBlock(_sfc_main$1, normalizeProps(guardReactiveProps(unref(wrapper))), {
58
+ default: withCtx(() => [
59
+ createVNode(unref(TimeFieldRoot), mergeProps({
60
+ "model-value": value.value,
61
+ "hour-cycle": __props.hourCycle,
62
+ locale: __props.locale,
63
+ granularity: "minute",
64
+ disabled: unref(field).disabled,
65
+ required: unref(field).required,
66
+ "aria-invalid": unref(field).invalid || void 0,
67
+ "aria-labelledby": unref(field).labelId,
68
+ class: unref(rootClass)
69
+ }, unref(rest), {
70
+ "aria-describedby": unref(mergeDescribedBy)(unref(rest)["aria-describedby"], unref(field).describedBy),
71
+ "onUpdate:modelValue": onUpdate,
72
+ onFocusout: onFocusOut
73
+ }), {
74
+ default: withCtx(({ segments }) => [
75
+ __props.icon ? (openBlock(), createBlock(_sfc_main$2, {
76
+ key: 0,
77
+ name: "lucide:clock",
78
+ size: 15,
79
+ class: "mr-1.5 shrink-0 text-muted"
80
+ })) : createCommentVNode("", true),
81
+ (openBlock(true), createElementBlock(Fragment, null, renderList(segments, (item, i) => {
82
+ return openBlock(), createElementBlock(Fragment, { key: i }, [
83
+ item.part === "literal" ? (openBlock(), createBlock(unref(TimeFieldInput), {
84
+ key: 0,
85
+ part: item.part,
86
+ class: "text-muted"
87
+ }, {
88
+ default: withCtx(() => [
89
+ createTextVNode(toDisplayString(item.value), 1)
90
+ ]),
91
+ _: 2
92
+ }, 1032, ["part"])) : (openBlock(), createBlock(unref(TimeFieldInput), {
93
+ key: 1,
94
+ part: item.part,
95
+ class: "rounded-sm px-0.5 tabular-nums outline-none focus:bg-brand-soft focus:text-brand data-[placeholder]:text-muted"
96
+ }, {
97
+ default: withCtx(() => [
98
+ createTextVNode(toDisplayString(item.value), 1)
99
+ ]),
100
+ _: 2
101
+ }, 1032, ["part"]))
102
+ ], 64);
103
+ }), 128))
104
+ ]),
105
+ _: 1
106
+ }, 16, ["model-value", "hour-cycle", "locale", "disabled", "required", "aria-invalid", "aria-labelledby", "class", "aria-describedby"])
107
+ ]),
108
+ _: 1
109
+ }, 16);
110
+ };
111
+ }
112
+ });
113
+ export {
114
+ _sfc_main as _
115
+ };
@@ -11,10 +11,10 @@ import { backgroundOf, resolveCssColor, svgToPng } from "../components/exportDat
11
11
  import { _ as _sfc_main$6 } from "./LpButton-DSHioIfD.js";
12
12
  import { _ as _sfc_main$7 } from "./LpIcon-C6JpQ5td.js";
13
13
  import { _ as _sfc_main$3 } from "./LpInfraNode-Bb5nbuFY.js";
14
- import { _ as _sfc_main$5 } from "./LpInput-D0O6dpuA.js";
14
+ import { _ as _sfc_main$5 } from "./LpInput-CbI7z5fQ.js";
15
15
  import { _ as _sfc_main$1 } from "./LpLaneNode-Bqcdm8Rf.js";
16
16
  import { _ as _sfc_main$2 } from "./LpServiceNode-Cln2ntdw.js";
17
- import { _ as _sfc_main$8 } from "./LpSlider-A4ixovgS.js";
17
+ import { _ as _sfc_main$8 } from "./LpSlider-C4ilCtZX.js";
18
18
  import { _ as _sfc_main$4 } from "./LpWaypointEdge-D8yHlQiw.js";
19
19
  import { diffTopology, detailAtZoom, collapseChildren, clusterGraph, findNodes, findPath, neighborhood, groupBoxes, nodeName, frameSize, edgeLabelText, nearestInDirection, absolutePositions, layeredLayout, topologyToSvg } from "../components/topologyGraph.js";
20
20
  const _hoisted_1 = {
@@ -2,7 +2,7 @@ import { defineComponent, computed, ref, openBlock, createElementBlock, Fragment
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { _ as _sfc_main$2 } from "./LpButton-DSHioIfD.js";
4
4
  import { _ as _sfc_main$1 } from "./LpDropdownMenu-CLzxIOgM.js";
5
- import { _ as _sfc_main$4 } from "./LpInput-D0O6dpuA.js";
5
+ import { _ as _sfc_main$4 } from "./LpInput-CbI7z5fQ.js";
6
6
  import { _ as _sfc_main$3 } from "./LpModal-DDvrSAnf.js";
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  __name: "LpWorkspaceSwitcher",
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/DropzoneLinkField-CLLhd3WB.js";
1
+ import { _ as _sfc_main } from "../chunks/DropzoneLinkField-CyE7TJ5f.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -21,6 +21,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
21
21
  disabled?: boolean;
22
22
  /** Mark every part of the address invalid (also set by a surrounding LpFormField's error). */
23
23
  invalid?: boolean;
24
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
25
+ error?: string;
24
26
  size?: "sm" | "md" | "lg";
25
27
  /** Hide the map button when picking a point makes no sense. */
26
28
  hideMap?: boolean;
@@ -48,6 +50,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
48
50
  disabled?: boolean;
49
51
  /** Mark every part of the address invalid (also set by a surrounding LpFormField's error). */
50
52
  invalid?: boolean;
53
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
54
+ error?: string;
51
55
  size?: "sm" | "md" | "lg";
52
56
  /** Hide the map button when picking a point makes no sense. */
53
57
  hideMap?: boolean;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAddressInput-BSS49jpm.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAddressInput-ft8fQOGx.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,7 +1,7 @@
1
1
  declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
3
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
4
- variant?: "info" | "success" | "warning" | "danger" | undefined;
4
+ variant?: "info" | "danger" | "success" | "warning" | undefined;
5
5
  title?: string;
6
6
  icon?: string;
7
7
  /**
@@ -19,7 +19,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
19
19
  */
20
20
  busy?: boolean;
21
21
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
22
- variant?: "info" | "success" | "warning" | "danger" | undefined;
22
+ variant?: "info" | "danger" | "success" | "warning" | undefined;
23
23
  title?: string;
24
24
  icon?: string;
25
25
  /**
@@ -37,7 +37,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
37
37
  */
38
38
  busy?: boolean;
39
39
  }> & Readonly<{}>, {
40
- variant: "info" | "success" | "warning" | "danger";
40
+ variant: "info" | "danger" | "success" | "warning";
41
41
  busy: boolean;
42
42
  live: "assertive" | "polite" | false;
43
43
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -313,8 +313,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
313
313
  "onNav-mode"?: ((mode: NavMode) => any) | undefined;
314
314
  }>, {
315
315
  scroll: "document" | "region";
316
- contentClass: string;
317
316
  compact: boolean;
317
+ contentClass: string;
318
318
  mobileBreakpoint: "sm" | "md" | "lg" | "xl";
319
319
  divider: boolean;
320
320
  pageScrollbar: boolean;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAppShell-BKbYCHkx.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAppShell-DkvU6IBB.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -24,6 +24,8 @@ declare const __VLS_export: import("vue").DefineComponent<{
24
24
  size?: "sm" | "md" | "lg";
25
25
  icon?: string;
26
26
  invalid?: boolean;
27
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
28
+ error?: string;
27
29
  emptyText?: string;
28
30
  loading?: boolean;
29
31
  loadingText?: string;
@@ -65,6 +67,8 @@ declare const __VLS_export: import("vue").DefineComponent<{
65
67
  size?: "sm" | "md" | "lg";
66
68
  icon?: string;
67
69
  invalid?: boolean;
70
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
71
+ error?: string;
68
72
  emptyText?: string;
69
73
  loading?: boolean;
70
74
  loadingText?: string;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAutocomplete-DkY6CSyD.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAutocomplete-CrZbd0uv.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,7 +1,7 @@
1
1
  declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
3
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
4
- tone?: "info" | "error" | "action" | "muted" | "outline" | "success" | "warning" | "accent" | "neutral" | "brand" | "danger" | "ok" | undefined;
4
+ tone?: "info" | "error" | "action" | "muted" | "outline" | "danger" | "accent" | "success" | "warning" | "neutral" | "brand" | "ok" | undefined;
5
5
  /** `sm` is the one that does not disturb a text-sm line it sits on. */
6
6
  size?: "md" | "sm" | "lg" | undefined;
7
7
  dot?: boolean;
@@ -12,7 +12,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
12
12
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
13
13
  remove: () => any;
14
14
  }, string, import("vue").PublicProps, Readonly<{
15
- tone?: "info" | "error" | "action" | "muted" | "outline" | "success" | "warning" | "accent" | "neutral" | "brand" | "danger" | "ok" | undefined;
15
+ tone?: "info" | "error" | "action" | "muted" | "outline" | "danger" | "accent" | "success" | "warning" | "neutral" | "brand" | "ok" | undefined;
16
16
  /** `sm` is the one that does not disturb a text-sm line it sits on. */
17
17
  size?: "md" | "sm" | "lg" | undefined;
18
18
  dot?: boolean;
@@ -261,8 +261,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
261
261
  animate: boolean;
262
262
  height: number;
263
263
  smooth: number;
264
- range: ChartRange | null;
265
264
  markers: ChartMarker[];
265
+ range: ChartRange | null;
266
266
  showGrid: boolean;
267
267
  showXAxis: boolean;
268
268
  showYAxis: boolean;
@@ -8,6 +8,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
8
8
  /** Mixed state (e.g. a "select all" with a partial selection). Shows a dash. */
9
9
  indeterminate?: boolean;
10
10
  disabled?: boolean;
11
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
12
+ error?: string;
11
13
  label?: string;
12
14
  /** Secondary line under the label, as on LpSwitch. */
13
15
  description?: string;
@@ -33,6 +35,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
33
35
  /** Mixed state (e.g. a "select all" with a partial selection). Shows a dash. */
34
36
  indeterminate?: boolean;
35
37
  disabled?: boolean;
38
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
39
+ error?: string;
36
40
  label?: string;
37
41
  /** Secondary line under the label, as on LpSwitch. */
38
42
  description?: string;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpCheckbox-D6RuDW4X.js";
1
+ import { _ as _sfc_main } from "../chunks/LpCheckbox-CCWCwD0y.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpCodeDisplay-D3BUAhV1.js";
1
+ import { _ as _sfc_main } from "../chunks/LpCodeDisplay-D59uPwRb.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -44,8 +44,8 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
44
44
  onOpened?: (() => any) | undefined;
45
45
  onClosed?: (() => any) | undefined;
46
46
  }>, {
47
- fade: boolean;
48
47
  axis: "height" | "width" | "both";
48
+ fade: boolean;
49
49
  keepMounted: boolean;
50
50
  lazy: boolean;
51
51
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -40,6 +40,8 @@ type __VLS_Props = {
40
40
  hideInput?: boolean;
41
41
  disabled?: boolean;
42
42
  invalid?: boolean;
43
+ /** A message under the control, as on LpInput: it marks it invalid and shows under it (what `form.field()` hands it). */
44
+ error?: string;
43
45
  size?: "sm" | "md" | "lg";
44
46
  /** Trigger text beside the swatch. Defaults to the colour's own value. */
45
47
  label?: string;
@@ -95,7 +97,7 @@ type __VLS_Props = {
95
97
  */
96
98
  copyToast?: string | false;
97
99
  };
98
- declare var __VLS_68: {
100
+ declare var __VLS_74: {
99
101
  color: string;
100
102
  hsv: {
101
103
  h: number;
@@ -105,7 +107,7 @@ declare var __VLS_68: {
105
107
  };
106
108
  };
107
109
  type __VLS_Slots = {} & {
108
- default?: (props: typeof __VLS_68) => any;
110
+ default?: (props: typeof __VLS_74) => any;
109
111
  };
110
112
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
111
113
  open: import("vue").Ref<boolean, boolean>;
@@ -121,12 +123,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
121
123
  selected: boolean;
122
124
  align: "start" | "center" | "end";
123
125
  modelValue: string;
126
+ alpha: boolean;
124
127
  variant: "field" | "swatch";
125
128
  side: "top" | "right" | "bottom" | "left";
126
129
  recent: boolean;
127
130
  recentKey: string;
128
131
  recentLimit: number;
129
- alpha: boolean;
130
132
  swatches: readonly string[];
131
133
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
132
134
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpColorPicker-COHzV68R.js";
1
+ import { _ as _sfc_main } from "../chunks/LpColorPicker-BONURBFN.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpDatePicker-DwSDY0mt.js";
1
+ import { _ as _sfc_main } from "../chunks/LpDatePicker-C2AOtxgF.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpDateRangePicker-CNQXdTVv.js";
1
+ import { _ as _sfc_main } from "../chunks/LpDateRangePicker-CiXdIAyh.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -6,7 +6,7 @@ import { useLabels } from "../composables/useLpConfig.js";
6
6
  import { useMergedAttrs } from "../composables/useMergedClass.js";
7
7
  import { useReveal } from "../composables/useReveal.js";
8
8
  import { PopoverRoot, PopoverAnchor, PopoverPortal, PopoverContent } from "reka-ui";
9
- import { _ as _sfc_main$1 } from "../chunks/DropzoneLinkField-CLLhd3WB.js";
9
+ import { _ as _sfc_main$1 } from "../chunks/DropzoneLinkField-CyE7TJ5f.js";
10
10
  import { POPOVER_PANEL } from "./dropdown.js";
11
11
  import { _ as _sfc_main$2 } from "../chunks/LpIcon-C6JpQ5td.js";
12
12
  import { inTextField } from "../composables/textEntry.js";
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTree-C-rJKzEQ.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTree-CpNurwZp.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTreeNode-BgYn4U1J.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTreeNode-DdF8Cq-s.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -104,8 +104,8 @@ declare const __VLS_export: import("vue").DefineComponent<{
104
104
  }>, {
105
105
  type: "image/jpeg" | "image/png" | "image/webp" | "source";
106
106
  animate: boolean;
107
- labels: Partial<Record<"rotateLeft" | "rotateRight" | "zoomIn" | "zoomOut" | "reset" | "canvas" | "failed" | "cors", string>>;
108
107
  aspect: "free" | "square" | "4:3" | "3:4" | "16:9" | number;
108
+ labels: Partial<Record<"rotateLeft" | "rotateRight" | "zoomIn" | "zoomOut" | "reset" | "canvas" | "failed" | "cors", string>>;
109
109
  maxEdge: number;
110
110
  quality: number;
111
111
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpInput-D0O6dpuA.js";
1
+ import { _ as _sfc_main } from "../chunks/LpInput-CbI7z5fQ.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLogInspector-BdQlX6S-.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLogInspector-CcSJSGan.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };