@leavepulse/ui 0.78.0 → 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 (243) hide show
  1. package/dist/chunks/{DropzoneLinkField-DXIr0eFz.js → DropzoneLinkField-CyE7TJ5f.js} +1 -1
  2. package/dist/chunks/FieldLeading-mr81aEAP.js +27 -0
  3. package/dist/chunks/LpAddressInput-ft8fQOGx.js +401 -0
  4. package/dist/chunks/{LpAppShell-BNAVTQsY.js → LpAppShell-DkvU6IBB.js} +23 -4
  5. package/dist/chunks/LpAutocomplete-CrZbd0uv.js +310 -0
  6. package/dist/chunks/LpCheckbox-CCWCwD0y.js +129 -0
  7. package/dist/chunks/{LpCodeBlock-DuzmnIHl.js → LpCodeBlock-DBqy4RLd.js} +1 -1
  8. package/dist/chunks/{LpCodeDisplay-CO8fngxa.js → LpCodeDisplay-D59uPwRb.js} +3 -3
  9. package/dist/chunks/LpColorPicker-BONURBFN.js +574 -0
  10. package/dist/chunks/{LpConfirmDialog-6oCIJTDa.js → LpConfirmDialog-CnrmzkuN.js} +1 -1
  11. package/dist/chunks/{LpConfirmHost-DgHvfT6s.js → LpConfirmHost-CwbObVGH.js} +1 -1
  12. package/dist/chunks/{LpContextMenu--eMGIql6.js → LpContextMenu-Bx_IhQDS.js} +5 -5
  13. package/dist/chunks/{LpCopyButton-7EOSIuwa.js → LpCopyButton-sAMvWeLP.js} +1 -1
  14. package/dist/chunks/{LpDataList-DgBeM01y.js → LpDataList-CaVfsozH.js} +2 -2
  15. package/dist/chunks/LpDatePicker-C2AOtxgF.js +171 -0
  16. package/dist/chunks/{LpDateRangePicker-CNQXdTVv.js → LpDateRangePicker-CiXdIAyh.js} +43 -35
  17. package/dist/chunks/{LpDrawer-Bt9UUqt_.js → LpDrawer-DXNQFpAA.js} +1 -1
  18. package/dist/chunks/{LpFileTree-BSx1kBoV.js → LpFileTree-CpNurwZp.js} +3 -3
  19. package/dist/chunks/{LpFileTreeNode-4dVmFHb3.js → LpFileTreeNode-DdF8Cq-s.js} +2 -2
  20. package/dist/chunks/{LpHoverCard-DanH3Nz1.js → LpHoverCard-CHE9jAJG.js} +6 -6
  21. package/dist/chunks/{LpInfraNode-BAU40Km2.js → LpInfraNode-Bb5nbuFY.js} +17 -0
  22. package/dist/chunks/{LpInput-DL6HEJdi.js → LpInput-CbI7z5fQ.js} +21 -25
  23. package/dist/chunks/{LpInspector-CuoMAhiw.js → LpInspector-DO3fTCQ1.js} +2 -2
  24. package/dist/chunks/{LpLaneNode-HtnQf2FF.js → LpLaneNode-Bqcdm8Rf.js} +19 -1
  25. package/dist/chunks/{LpLightbox-xvpQ64MM.js → LpLightbox-CtDTQV01.js} +1 -1
  26. package/dist/chunks/{LpLogInspector-6cNnXqp4.js → LpLogInspector-CcSJSGan.js} +1 -1
  27. package/dist/chunks/{LpLogViewer-Dvb1E9_G.js → LpLogViewer-CWu49Dko.js} +4 -4
  28. package/dist/chunks/{LpMediaGallery-Df-tiWeq.js → LpMediaGallery-BYEwySoF.js} +2 -2
  29. package/dist/chunks/{LpModal-DrtQ_1A2.js → LpModal-DDvrSAnf.js} +1 -1
  30. package/dist/chunks/{LpModalNav-DkmGCnZE.js → LpModalNav-DI3BW5ff.js} +2 -2
  31. package/dist/chunks/{LpNotificationBell-D_wklO1m.js → LpNotificationBell-DUbVyK6R.js} +3 -3
  32. package/dist/chunks/LpNumberField-C8LfUz_R.js +154 -0
  33. package/dist/chunks/LpOtpInput-B1X9l9no.js +140 -0
  34. package/dist/chunks/LpPageScrollbar-D2O0xhJw.js +164 -0
  35. package/dist/chunks/{LpPaletteTheme-dVtxHx-F.js → LpPaletteTheme-B-xuZiKK.js} +2 -2
  36. package/dist/chunks/{LpPasswordInput-B-zD6tUS.js → LpPasswordInput-Duc_3wPv.js} +2 -2
  37. package/dist/chunks/{LpPhoneInput-BSL7NX4z.js → LpPhoneInput-CctcRK9K.js} +124 -118
  38. package/dist/chunks/{LpPie-9t_guO49.js → LpPie-oVNHjsKD.js} +2 -2
  39. package/dist/chunks/{LpPipeline-rjXvEDRJ.js → LpPipeline-BSXT6oUJ.js} +1 -1
  40. package/dist/chunks/LpRadioGroup-DTM0nd9G.js +103 -0
  41. package/dist/chunks/LpRangeSlider-DJsEZXad.js +97 -0
  42. package/dist/chunks/{LpRelativeTime-BovUk8MP.js → LpRelativeTime-0zI-44ve.js} +1 -1
  43. package/dist/chunks/LpRepeater-Czib3rmv.js +193 -0
  44. package/dist/chunks/{LpScrollArea-ay4Xo_hg.js → LpScrollArea-CqvwfZs2.js} +9 -12
  45. package/dist/chunks/{LpSecretField-DBvU6iAw.js → LpSecretField-BtlCk3IH.js} +4 -4
  46. package/dist/chunks/LpSegmented-sskrJKJJ.js +128 -0
  47. package/dist/chunks/LpSelect-JFZehOkd.js +515 -0
  48. package/dist/chunks/{LpServiceNode-D8uJ8sGk.js → LpServiceNode-Cln2ntdw.js} +17 -0
  49. package/dist/chunks/{LpSidebar-kSkpPh3-.js → LpSidebar-CvRvVBTt.js} +4 -4
  50. package/dist/chunks/{LpSidebarNav-C2mvqrY2.js → LpSidebarNav-CE0jQS8i.js} +2 -2
  51. package/dist/chunks/{LpSidebarRow-eRP4Q31q.js → LpSidebarRow-DOTg1txp.js} +2 -2
  52. package/dist/chunks/LpSlider-C4ilCtZX.js +76 -0
  53. package/dist/chunks/{LpStat-pMNZgFcq.js → LpStat-DPjc6_fX.js} +17 -4
  54. package/dist/chunks/LpSwitch-DyAYTchz.js +122 -0
  55. package/dist/chunks/{LpTableFilter-DgARTsA1.js → LpTableFilter-CJg5eIcV.js} +2 -2
  56. package/dist/chunks/{LpTagsInput-Dt0mteSj.js → LpTagsInput-CkNxpNYa.js} +4 -3
  57. package/dist/chunks/{LpTextarea-Co0b9PVx.js → LpTextarea-CFK_5QB8.js} +3 -2
  58. package/dist/chunks/{LpThemeStudio-DzYfE-5k.js → LpThemeStudio-R-wohbCY.js} +3 -3
  59. package/dist/chunks/{LpThemeSwitcher-CFLkdbBL.js → LpThemeSwitcher-Bzy15MCP.js} +2 -2
  60. package/dist/chunks/LpTimeField-B5n0m8m0.js +115 -0
  61. package/dist/chunks/{LpToaster-QFj0P-5m.js → LpToaster-Ct_ZOhCh.js} +1 -1
  62. package/dist/chunks/{LpTooltip-BJf3lZMq.js → LpTooltip-Bz_rrq5S.js} +5 -5
  63. package/dist/chunks/{LpTopologyCanvas-BOHHHZ_6.js → LpTopologyCanvas-BNgw9RyZ.js} +14 -9
  64. package/dist/chunks/{LpTruncate-C6u3gjc6.js → LpTruncate-ellq9RYM.js} +2 -2
  65. package/dist/chunks/{LpUptimeBar-BnYmR2rj.js → LpUptimeBar-BoxcCDVY.js} +1 -1
  66. package/dist/chunks/{LpWorkspaceSwitcher-D0e9upAy.js → LpWorkspaceSwitcher-ugv-fyig.js} +2 -2
  67. package/dist/chunks/{RevealToggle-CCPDE8Mv.js → RevealToggle-D_iyrB8d.js} +1 -1
  68. package/dist/component-names.d.ts +1 -1
  69. package/dist/components/DropzoneLinkField.vue.js +1 -1
  70. package/dist/components/FieldLeading.vue.d.ts +16 -0
  71. package/dist/components/FieldLeading.vue.js +4 -0
  72. package/dist/components/LpAddressInput.vue.d.ts +4 -0
  73. package/dist/components/LpAddressInput.vue.js +1 -1
  74. package/dist/components/LpAlert.vue.d.ts +3 -3
  75. package/dist/components/LpAppShell.vue.d.ts +16 -1
  76. package/dist/components/LpAppShell.vue.js +1 -1
  77. package/dist/components/LpAutocomplete.vue.d.ts +4 -0
  78. package/dist/components/LpAutocomplete.vue.js +1 -1
  79. package/dist/components/LpBadge.vue.d.ts +2 -2
  80. package/dist/components/LpChart.vue.d.ts +1 -1
  81. package/dist/components/LpChart.vue.js +1 -1
  82. package/dist/components/LpCheckbox.vue.d.ts +4 -0
  83. package/dist/components/LpCheckbox.vue.js +1 -1
  84. package/dist/components/LpCodeBlock.vue.js +1 -1
  85. package/dist/components/LpCodeDisplay.vue.js +1 -1
  86. package/dist/components/LpCollapse.vue.d.ts +1 -1
  87. package/dist/components/LpColorPicker.vue.d.ts +5 -3
  88. package/dist/components/LpColorPicker.vue.js +1 -1
  89. package/dist/components/LpCommandPalette.vue.js +1 -1
  90. package/dist/components/LpConfirmDialog.vue.js +1 -1
  91. package/dist/components/LpConfirmHost.vue.js +1 -1
  92. package/dist/components/LpContextMenu.vue.js +1 -1
  93. package/dist/components/LpCopyButton.vue.js +1 -1
  94. package/dist/components/LpDataList.vue.js +1 -1
  95. package/dist/components/LpDatePicker.vue.js +1 -1
  96. package/dist/components/LpDateRangePicker.vue.js +1 -1
  97. package/dist/components/LpDock.vue.js +1 -1
  98. package/dist/components/LpDrawer.vue.js +1 -1
  99. package/dist/components/LpDropzone.vue.js +1 -1
  100. package/dist/components/LpFileTree.vue.js +1 -1
  101. package/dist/components/LpFileTreeNode.vue.js +1 -1
  102. package/dist/components/LpHoverCard.vue.js +1 -1
  103. package/dist/components/LpImageEditor.vue.d.ts +1 -1
  104. package/dist/components/LpInfraNode.vue.d.ts +11 -2
  105. package/dist/components/LpInfraNode.vue.js +1 -1
  106. package/dist/components/LpInput.vue.js +1 -1
  107. package/dist/components/LpInspector.vue.js +1 -1
  108. package/dist/components/LpLaneNode.vue.d.ts +2 -3
  109. package/dist/components/LpLaneNode.vue.js +1 -1
  110. package/dist/components/LpLightbox.vue.js +1 -1
  111. package/dist/components/LpLogInspector.vue.js +1 -1
  112. package/dist/components/LpLogViewer.vue.js +1 -1
  113. package/dist/components/LpMediaGallery.vue.js +1 -1
  114. package/dist/components/LpModal.vue.js +1 -1
  115. package/dist/components/LpModalNav.vue.js +1 -1
  116. package/dist/components/LpNotificationBell.vue.js +1 -1
  117. package/dist/components/LpNumberField.vue.d.ts +17 -2
  118. package/dist/components/LpNumberField.vue.js +1 -1
  119. package/dist/components/LpOtpInput.vue.d.ts +4 -0
  120. package/dist/components/LpOtpInput.vue.js +1 -1
  121. package/dist/components/LpPageScrollbar.vue.d.ts +10 -0
  122. package/dist/components/LpPageScrollbar.vue.js +4 -0
  123. package/dist/components/LpPaletteTheme.vue.js +1 -1
  124. package/dist/components/LpPasswordInput.vue.js +1 -1
  125. package/dist/components/LpPhoneInput.vue.d.ts +4 -0
  126. package/dist/components/LpPhoneInput.vue.js +1 -1
  127. package/dist/components/LpPie.vue.js +1 -1
  128. package/dist/components/LpPipeline.vue.js +1 -1
  129. package/dist/components/LpRadioGroup.vue.d.ts +4 -0
  130. package/dist/components/LpRadioGroup.vue.js +1 -1
  131. package/dist/components/LpRangeSlider.vue.d.ts +4 -0
  132. package/dist/components/LpRangeSlider.vue.js +1 -1
  133. package/dist/components/LpRelativeTime.vue.js +1 -1
  134. package/dist/components/LpRepeater.vue.d.ts +2 -0
  135. package/dist/components/LpRepeater.vue.js +1 -1
  136. package/dist/components/LpScrollArea.vue.d.ts +1 -1
  137. package/dist/components/LpScrollArea.vue.js +1 -1
  138. package/dist/components/LpSecretField.vue.js +1 -1
  139. package/dist/components/LpSegmented.vue.d.ts +4 -0
  140. package/dist/components/LpSegmented.vue.js +1 -1
  141. package/dist/components/LpSelect.vue.d.ts +2 -0
  142. package/dist/components/LpSelect.vue.js +1 -1
  143. package/dist/components/LpServiceNode.vue.d.ts +8 -2
  144. package/dist/components/LpServiceNode.vue.js +1 -1
  145. package/dist/components/LpShinyText.vue.d.ts +1 -1
  146. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  147. package/dist/components/LpSidebar.vue.d.ts +1 -1
  148. package/dist/components/LpSidebar.vue.js +1 -1
  149. package/dist/components/LpSidebarNav.vue.js +1 -1
  150. package/dist/components/LpSidebarRow.vue.js +1 -1
  151. package/dist/components/LpSlider.vue.d.ts +4 -0
  152. package/dist/components/LpSlider.vue.js +1 -1
  153. package/dist/components/LpStat.vue.d.ts +16 -0
  154. package/dist/components/LpStat.vue.js +1 -1
  155. package/dist/components/LpSwitch.vue.d.ts +4 -0
  156. package/dist/components/LpSwitch.vue.js +1 -1
  157. package/dist/components/LpTable.vue.js +5 -5
  158. package/dist/components/LpTableFilter.vue.js +1 -1
  159. package/dist/components/LpTabs.vue.d.ts +1 -1
  160. package/dist/components/LpTabs.vue.js +1 -1
  161. package/dist/components/LpTagsInput.vue.js +1 -1
  162. package/dist/components/LpTextarea.vue.js +1 -1
  163. package/dist/components/LpThemeStudio.vue.js +1 -1
  164. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  165. package/dist/components/LpTimeField.vue.d.ts +4 -0
  166. package/dist/components/LpTimeField.vue.js +1 -1
  167. package/dist/components/LpToaster.vue.js +1 -1
  168. package/dist/components/LpTooltip.vue.js +1 -1
  169. package/dist/components/LpTopologyCanvas.vue.d.ts +2 -2
  170. package/dist/components/LpTopologyCanvas.vue.js +1 -1
  171. package/dist/components/LpTruncate.vue.js +1 -1
  172. package/dist/components/LpUptimeBar.vue.js +1 -1
  173. package/dist/components/LpWorkspaceSwitcher.vue.js +1 -1
  174. package/dist/components/RevealToggle.vue.js +1 -1
  175. package/dist/components/calendar.d.ts +2 -0
  176. package/dist/components/menuWhen.js +1 -1
  177. package/dist/components/scrollbar.d.ts +34 -0
  178. package/dist/components/scrollbar.js +47 -0
  179. package/dist/composables/propCheck.d.ts +1 -1
  180. package/dist/composables/propCheck.js +15 -4
  181. package/dist/composables/useField.d.ts +50 -0
  182. package/dist/composables/useField.js +31 -2
  183. package/dist/composables/useMergedClass.d.ts +6 -2
  184. package/dist/composables/useMergedClass.js +6 -6
  185. package/dist/composables/usePaletteCommands.js +4 -2
  186. package/dist/index.d.ts +1 -0
  187. package/dist/index.js +170 -168
  188. package/package.json +1 -1
  189. package/src/component-names.ts +1 -0
  190. package/src/components/FieldLeading.vue +17 -0
  191. package/src/components/LpAddressInput.vue +8 -4
  192. package/src/components/LpAppShell.vue +23 -0
  193. package/src/components/LpAutocomplete.vue +11 -5
  194. package/src/components/LpCheckbox.vue +8 -6
  195. package/src/components/LpColorPicker.vue +7 -4
  196. package/src/components/LpContextMenu.vue +7 -0
  197. package/src/components/LpDatePicker.vue +8 -4
  198. package/src/components/LpDateRangePicker.vue +8 -4
  199. package/src/components/LpHoverCard.vue +7 -0
  200. package/src/components/LpInfraNode.vue +4 -3
  201. package/src/components/LpInput.vue +7 -7
  202. package/src/components/LpLaneNode.vue +5 -1
  203. package/src/components/LpNumberField.vue +18 -7
  204. package/src/components/LpOtpInput.vue +8 -6
  205. package/src/components/LpPageScrollbar.vue +195 -0
  206. package/src/components/LpPhoneInput.vue +11 -6
  207. package/src/components/LpRadioGroup.vue +9 -5
  208. package/src/components/LpRangeSlider.vue +8 -4
  209. package/src/components/LpRepeater.vue +16 -4
  210. package/src/components/LpScrollArea.vue +27 -23
  211. package/src/components/LpSegmented.vue +8 -4
  212. package/src/components/LpSelect.vue +8 -7
  213. package/src/components/LpServiceNode.vue +4 -2
  214. package/src/components/LpSlider.vue +8 -4
  215. package/src/components/LpStat.vue +25 -5
  216. package/src/components/LpSwitch.vue +8 -5
  217. package/src/components/LpTagsInput.vue +4 -3
  218. package/src/components/LpTextarea.vue +3 -2
  219. package/src/components/LpTimeField.vue +8 -6
  220. package/src/components/LpTooltip.vue +7 -0
  221. package/src/components/LpTopologyCanvas.vue +3 -1
  222. package/src/components/calendar.ts +2 -0
  223. package/src/components/scrollbar.ts +71 -0
  224. package/src/composables/propCheck.ts +20 -5
  225. package/src/composables/useField.ts +52 -0
  226. package/src/composables/useMergedClass.ts +11 -5
  227. package/src/composables/usePaletteCommands.ts +5 -2
  228. package/src/index.ts +1 -0
  229. package/dist/chunks/LpAddressInput-ZqoZ-N2Y.js +0 -393
  230. package/dist/chunks/LpAutocomplete-DkY6CSyD.js +0 -302
  231. package/dist/chunks/LpCheckbox-D6RuDW4X.js +0 -124
  232. package/dist/chunks/LpColorPicker-BxAHEnR5.js +0 -567
  233. package/dist/chunks/LpDatePicker-DwSDY0mt.js +0 -163
  234. package/dist/chunks/LpNumberField-CNHsmSDZ.js +0 -134
  235. package/dist/chunks/LpOtpInput-BRpLBbOD.js +0 -132
  236. package/dist/chunks/LpRadioGroup-BrazjLY_.js +0 -95
  237. package/dist/chunks/LpRangeSlider-fz61tzc-.js +0 -89
  238. package/dist/chunks/LpRepeater-BkJHSPI1.js +0 -180
  239. package/dist/chunks/LpSegmented-DbEJhbv-.js +0 -123
  240. package/dist/chunks/LpSelect-Y-iuSymW.js +0 -512
  241. package/dist/chunks/LpSlider-A4ixovgS.js +0 -68
  242. package/dist/chunks/LpSwitch-DnC2-0aV.js +0 -115
  243. package/dist/chunks/LpTimeField-DeOcKWJq.js +0 -110
@@ -0,0 +1,154 @@
1
+ import { defineComponent, useId, useAttrs, computed, openBlock, createBlock, normalizeProps, guardReactiveProps, unref, withCtx, createVNode, normalizeStyle, normalizeClass, createSlots, renderSlot, createCommentVNode, mergeProps, createElementBlock, 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 { NumberFieldRoot, NumberFieldDecrement, NumberFieldInput, NumberFieldIncrement } from "reka-ui";
6
+ import { _ as _sfc_main$2 } from "./FieldLeading-mr81aEAP.js";
7
+ import { _ as _sfc_main$3 } from "./LpIcon-C6JpQ5td.js";
8
+ import { useOwnField, mergeDescribedBy, focusLeft } from "../composables/useField.js";
9
+ import { useLabels } from "../composables/useLpConfig.js";
10
+ import { useMergedClass } from "../composables/useMergedClass.js";
11
+ const _hoisted_1 = ["id"];
12
+ const __default__ = { inheritAttrs: false };
13
+ const _sfc_main = /* @__PURE__ */ defineComponent({
14
+ ...__default__,
15
+ __name: "LpNumberField",
16
+ props: {
17
+ palette: { type: [Boolean, Object], default: void 0 },
18
+ modelValue: {},
19
+ min: {},
20
+ max: {},
21
+ step: {},
22
+ stepSnapping: { type: Boolean, default: true },
23
+ formatOptions: {},
24
+ locale: {},
25
+ readonly: { type: Boolean },
26
+ disableWheelChange: { type: Boolean },
27
+ invertWheelChange: { type: Boolean },
28
+ focusOnChange: { type: Boolean, default: true },
29
+ steppers: { type: Boolean, default: true },
30
+ disabled: { type: Boolean },
31
+ unit: {},
32
+ icon: {},
33
+ invalid: { type: Boolean },
34
+ error: {},
35
+ size: { default: "md" },
36
+ labels: {}
37
+ },
38
+ emits: ["update:modelValue", "blur"],
39
+ setup(__props, { emit: __emit }) {
40
+ const props = __props;
41
+ const emit = __emit;
42
+ const unitId = useId();
43
+ const text = useLabels(
44
+ "numberField",
45
+ { increase: "Increase", decrease: "Decrease" },
46
+ () => props.labels
47
+ );
48
+ const SIZE = CONTROL_SIZE;
49
+ const attrs = useAttrs();
50
+ const { field, wrapper, ownAttrs } = useOwnField(() => ({ error: props.error, invalid: props.invalid, disabled: props.disabled }));
51
+ const describedBy = computed(
52
+ () => mergeDescribedBy(attrs["aria-describedby"], field.value.describedBy, props.unit ? unitId : void 0)
53
+ );
54
+ const inputAttrs = computed(() => {
55
+ const { class: _c, style: _s, id: _i, name: _n, ...rest } = attrs;
56
+ return rest;
57
+ });
58
+ function onFocusOut(event) {
59
+ if (focusLeft(event)) emit("blur", event);
60
+ }
61
+ const rootClass = useMergedClass(() => [
62
+ "@container flex w-full items-center rounded-control border bg-surface-soft transition-colors duration-[var(--duration-fast)] focus-within:ring-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-55",
63
+ SIZE[props.size],
64
+ field.value.invalid ? "border-danger focus-within:border-danger focus-within:ring-danger-soft" : "border-line focus-within:border-brand focus-within:ring-ring"
65
+ ].join(" "), () => ownAttrs());
66
+ usePaletteControl({ disabled: () => field.value.disabled, invalid: () => field.value.invalid });
67
+ return (_ctx, _cache) => {
68
+ return openBlock(), createBlock(_sfc_main$1, normalizeProps(guardReactiveProps(unref(wrapper))), {
69
+ default: withCtx(() => [
70
+ createVNode(unref(NumberFieldRoot), {
71
+ "model-value": __props.modelValue ?? void 0,
72
+ min: __props.min,
73
+ max: __props.max,
74
+ step: __props.step,
75
+ "step-snapping": __props.stepSnapping,
76
+ readonly: __props.readonly,
77
+ "disable-wheel-change": __props.disableWheelChange,
78
+ "invert-wheel-change": __props.invertWheelChange,
79
+ "focus-on-change": __props.focusOnChange,
80
+ "format-options": __props.formatOptions,
81
+ locale: __props.locale,
82
+ disabled: unref(field).disabled,
83
+ required: unref(field).required,
84
+ "data-lp-ring-owner": "",
85
+ class: normalizeClass(unref(rootClass)),
86
+ style: normalizeStyle(unref(ownAttrs)() ? unref(attrs).style : void 0),
87
+ name: typeof unref(attrs).name === "string" ? unref(attrs).name : void 0,
88
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (v) => emit("update:modelValue", Number.isNaN(v) ? null : v ?? null)),
89
+ onFocusout: onFocusOut
90
+ }, {
91
+ default: withCtx(() => [
92
+ createVNode(_sfc_main$2, {
93
+ icon: __props.icon,
94
+ class: "pl-2.5"
95
+ }, createSlots({ _: 2 }, [
96
+ _ctx.$slots.leading ? {
97
+ name: "default",
98
+ fn: withCtx(() => [
99
+ renderSlot(_ctx.$slots, "leading")
100
+ ]),
101
+ key: "0"
102
+ } : void 0
103
+ ]), 1032, ["icon"]),
104
+ __props.steppers ? (openBlock(), createBlock(unref(NumberFieldDecrement), {
105
+ key: 0,
106
+ "aria-label": unref(text).decrease,
107
+ class: "group grid h-full w-8 shrink-0 place-items-center @max-[8.5rem]:hidden text-muted transition-colors duration-[var(--duration-fast)] hover:text-ink disabled:opacity-40"
108
+ }, {
109
+ default: withCtx(() => [
110
+ createVNode(_sfc_main$3, {
111
+ name: "lucide:minus",
112
+ size: 15,
113
+ class: "transition-transform duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active:scale-75 motion-reduce:group-active:scale-100"
114
+ })
115
+ ]),
116
+ _: 1
117
+ }, 8, ["aria-label"])) : createCommentVNode("", true),
118
+ createVNode(unref(NumberFieldInput), mergeProps(inputAttrs.value, {
119
+ id: unref(field).id,
120
+ "aria-describedby": describedBy.value,
121
+ "aria-invalid": unref(field).invalid || void 0,
122
+ class: ["min-w-0 flex-1 bg-transparent text-ink outline-none placeholder:text-muted [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none", __props.steppers ? "text-center @max-[8.5rem]:px-3 @max-[8.5rem]:text-left" : __props.icon || _ctx.$slots.leading ? "pl-2 pr-3" : "px-3"]
123
+ }), null, 16, ["id", "aria-describedby", "aria-invalid", "class"]),
124
+ __props.unit ? (openBlock(), createElementBlock("span", {
125
+ key: 1,
126
+ id: unref(unitId),
127
+ class: normalizeClass(["shrink-0 pr-1 text-xs text-muted", !__props.steppers && "pr-3"])
128
+ }, toDisplayString(__props.unit), 11, _hoisted_1)) : createCommentVNode("", true),
129
+ __props.steppers ? (openBlock(), createBlock(unref(NumberFieldIncrement), {
130
+ key: 2,
131
+ "aria-label": unref(text).increase,
132
+ class: "group grid h-full w-8 shrink-0 place-items-center @max-[8.5rem]:hidden text-muted transition-colors duration-[var(--duration-fast)] hover:text-ink disabled:opacity-40"
133
+ }, {
134
+ default: withCtx(() => [
135
+ createVNode(_sfc_main$3, {
136
+ name: "lucide:plus",
137
+ size: 15,
138
+ class: "transition-transform duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] group-active:scale-75 motion-reduce:group-active:scale-100"
139
+ })
140
+ ]),
141
+ _: 1
142
+ }, 8, ["aria-label"])) : createCommentVNode("", true)
143
+ ]),
144
+ _: 3
145
+ }, 8, ["model-value", "min", "max", "step", "step-snapping", "readonly", "disable-wheel-change", "invert-wheel-change", "focus-on-change", "format-options", "locale", "disabled", "required", "class", "style", "name"])
146
+ ]),
147
+ _: 3
148
+ }, 16);
149
+ };
150
+ }
151
+ });
152
+ export {
153
+ _sfc_main as _
154
+ };
@@ -0,0 +1,140 @@
1
+ import { defineComponent, computed, ref, watch, openBlock, createBlock, normalizeProps, guardReactiveProps, unref, withCtx, createVNode, mergeProps, createElementBlock, Fragment, renderList, normalizeClass, createCommentVNode } from "vue";
2
+ import { _ as _sfc_main$1 } from "./FieldWrapper-DnuMTrqW.js";
3
+ import { PinInputRoot, PinInputInput } from "reka-ui";
4
+ import { useOwnField, mergeDescribedBy } from "../composables/useField.js";
5
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
6
+ import { splitCode, upperCells, joinCells, groupBreaks } from "../components/otp.js";
7
+ const _hoisted_1 = {
8
+ key: 0,
9
+ "aria-hidden": "true",
10
+ class: "h-0.5 w-2 shrink-0 rounded-full bg-muted opacity-60"
11
+ };
12
+ const __default__ = { inheritAttrs: false };
13
+ const _sfc_main = /* @__PURE__ */ defineComponent({
14
+ ...__default__,
15
+ __name: "LpOtpInput",
16
+ props: {
17
+ modelValue: {},
18
+ length: { default: 6 },
19
+ disabled: { type: Boolean },
20
+ mask: { type: Boolean },
21
+ alphanumeric: { type: Boolean, default: false },
22
+ uppercase: { type: Boolean, default: void 0 },
23
+ group: {},
24
+ invalid: { type: Boolean },
25
+ error: {},
26
+ size: { default: "md" }
27
+ },
28
+ emits: ["update:modelValue", "complete"],
29
+ setup(__props, { emit: __emit }) {
30
+ const props = __props;
31
+ const emit = __emit;
32
+ const upper = computed(() => props.alphanumeric && (props.uppercase ?? true));
33
+ const local = ref(splitCode(props.modelValue, props.length));
34
+ let emitted = props.modelValue ?? "";
35
+ watch(
36
+ () => props.modelValue ?? "",
37
+ (value) => {
38
+ if (value === emitted) return;
39
+ emitted = value;
40
+ local.value = splitCode(value, props.length);
41
+ }
42
+ );
43
+ watch(
44
+ () => props.length,
45
+ (length) => {
46
+ local.value = local.value.slice(0, length);
47
+ }
48
+ );
49
+ const cells = computed({
50
+ get: () => local.value,
51
+ set: (arr) => {
52
+ local.value = upper.value ? upperCells(arr) : arr;
53
+ emitted = joinCells(local.value);
54
+ emit("update:modelValue", emitted);
55
+ }
56
+ });
57
+ const { field, wrapper, ownAttrs } = useOwnField(() => ({
58
+ error: props.error,
59
+ invalid: props.invalid,
60
+ disabled: props.disabled
61
+ }));
62
+ function onComplete(arr) {
63
+ emit("complete", joinCells(upper.value ? upperCells(arr) : arr));
64
+ }
65
+ const breaks = computed(() => groupBreaks(props.length, props.group));
66
+ const root = ref(null);
67
+ function onBeforeInput(event, index) {
68
+ if (event.inputType !== "deleteContentBackward") return;
69
+ event.preventDefault();
70
+ const target = event.target;
71
+ const next = [...local.value];
72
+ let clear = index;
73
+ if (!target.value && index > 0) {
74
+ clear = index - 1;
75
+ root.value?.$el.querySelectorAll("input")[clear]?.focus();
76
+ }
77
+ next[clear] = props.alphanumeric ? "" : void 0;
78
+ cells.value = next;
79
+ }
80
+ const cellSize = {
81
+ sm: "max-w-9 text-base",
82
+ md: "max-w-11 text-lg",
83
+ lg: "max-w-13 text-xl"
84
+ };
85
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
86
+ "flex min-w-0 max-w-full items-center gap-1.5 sm:gap-2",
87
+ () => ownAttrs()
88
+ );
89
+ return (_ctx, _cache) => {
90
+ return openBlock(), createBlock(_sfc_main$1, normalizeProps(guardReactiveProps(unref(wrapper))), {
91
+ default: withCtx(() => [
92
+ createVNode(unref(PinInputRoot), mergeProps({
93
+ ref_key: "root",
94
+ ref: root,
95
+ modelValue: cells.value,
96
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => cells.value = $event),
97
+ type: __props.alphanumeric ? "text" : "number",
98
+ mask: __props.mask,
99
+ disabled: unref(field).disabled,
100
+ required: unref(field).required,
101
+ otp: "",
102
+ class: unref(rootClass)
103
+ }, unref(rest), { onComplete }), {
104
+ default: withCtx(() => [
105
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.length, (i) => {
106
+ return openBlock(), createElementBlock(Fragment, { key: i }, [
107
+ createVNode(unref(PinInputInput), {
108
+ index: i - 1,
109
+ id: i === 1 ? unref(field).id : void 0,
110
+ "aria-invalid": unref(field).invalid || void 0,
111
+ "aria-describedby": unref(mergeDescribedBy)(unref(rest)["aria-describedby"], unref(field).describedBy),
112
+ autocapitalize: upper.value ? "characters" : "none",
113
+ autocorrect: "off",
114
+ spellcheck: false,
115
+ class: normalizeClass([
116
+ cellSize[__props.size],
117
+ "aspect-square h-auto min-w-0 flex-1 basis-0 p-0",
118
+ "rounded-control border bg-surface-soft text-center font-semibold text-ink caret-brand",
119
+ "outline-none transition-colors duration-[var(--duration-fast)]",
120
+ "focus:border-brand focus:ring-2 focus:ring-ring",
121
+ "disabled:cursor-not-allowed disabled:opacity-55",
122
+ unref(field).invalid ? "border-danger focus:border-danger focus:ring-danger-soft" : "border-line"
123
+ ]),
124
+ onBeforeinput: ($event) => onBeforeInput($event, i - 1)
125
+ }, null, 8, ["index", "id", "aria-invalid", "aria-describedby", "autocapitalize", "class", "onBeforeinput"]),
126
+ breaks.value.has(i - 1) ? (openBlock(), createElementBlock("span", _hoisted_1)) : createCommentVNode("", true)
127
+ ], 64);
128
+ }), 128))
129
+ ]),
130
+ _: 1
131
+ }, 16, ["modelValue", "type", "mask", "disabled", "required", "class"])
132
+ ]),
133
+ _: 1
134
+ }, 16);
135
+ };
136
+ }
137
+ });
138
+ export {
139
+ _sfc_main as _
140
+ };
@@ -0,0 +1,164 @@
1
+ import { defineComponent, ref, computed, onMounted, onBeforeUnmount, openBlock, createElementBlock, normalizeStyle, normalizeClass, createElementVNode, withModifiers, unref } from "vue";
2
+ import { mergeClass } from "../composables/useMergedClass.js";
3
+ import { nodeWindow } from "../composables/realm.js";
4
+ import { hideNativeBar, BAR_FADE, BAR_Y_SIZE, BAR_Y, THUMB_Y, THUMB_Y_ROUND, SCROLL_HIDE_DELAY_MS, pageToward } from "../components/scrollbar.js";
5
+ const _hoisted_1 = ["data-state"];
6
+ const MIN_THUMB_PX = 18;
7
+ const _sfc_main = /* @__PURE__ */ defineComponent({
8
+ __name: "LpPageScrollbar",
9
+ props: {
10
+ top: { default: "0px" },
11
+ bottom: { default: "0px" }
12
+ },
13
+ setup(__props) {
14
+ const props = __props;
15
+ const barEl = ref(null);
16
+ const active = ref(false);
17
+ const thumb = ref({ top: 0, height: 0 });
18
+ const scrollable = ref(false);
19
+ const scrolling = ref(false);
20
+ const hovered = ref(false);
21
+ const dragging = ref(false);
22
+ const state = computed(() => scrolling.value || hovered.value || dragging.value ? "visible" : shownOnce.value ? "hidden" : void 0);
23
+ const shownOnce = ref(false);
24
+ let releaseNative;
25
+ let doc;
26
+ let hideTimer;
27
+ let frame = 0;
28
+ let sizes;
29
+ function scroller() {
30
+ return doc?.scrollingElement ?? null;
31
+ }
32
+ function nativeBarWidth(d) {
33
+ const probe = d.createElement("div");
34
+ probe.style.cssText = "position:absolute;top:-9999px;width:100px;height:100px;overflow:scroll";
35
+ d.body.append(probe);
36
+ const width = probe.offsetWidth - probe.clientWidth;
37
+ probe.remove();
38
+ return width;
39
+ }
40
+ function measure() {
41
+ frame = 0;
42
+ const view = scroller();
43
+ const bar = barEl.value;
44
+ if (!view || !bar) return;
45
+ const range = view.scrollHeight - view.clientHeight;
46
+ scrollable.value = range > 1;
47
+ if (!scrollable.value) return;
48
+ const track = bar.clientHeight;
49
+ const height = Math.max(MIN_THUMB_PX, Math.round(track * view.clientHeight / view.scrollHeight));
50
+ thumb.value = { height, top: Math.round((track - height) * view.scrollTop / range) };
51
+ }
52
+ function measureSoon() {
53
+ if (!frame && doc) frame = nodeWindow(doc).requestAnimationFrame(measure);
54
+ }
55
+ function onScroll() {
56
+ measureSoon();
57
+ scrolling.value = true;
58
+ shownOnce.value = true;
59
+ clearTimeout(hideTimer);
60
+ hideTimer = setTimeout(() => scrolling.value = false, SCROLL_HIDE_DELAY_MS);
61
+ }
62
+ function onEnter() {
63
+ hovered.value = true;
64
+ shownOnce.value = true;
65
+ }
66
+ function onLeave() {
67
+ hideTimer && clearTimeout(hideTimer);
68
+ hideTimer = setTimeout(() => {
69
+ hovered.value = false;
70
+ scrolling.value = false;
71
+ }, SCROLL_HIDE_DELAY_MS);
72
+ }
73
+ function locked() {
74
+ return !!doc && nodeWindow(doc).getComputedStyle(doc.body).overflow === "hidden";
75
+ }
76
+ function onTrackPointerDown(event) {
77
+ const view = scroller();
78
+ const thumbEl = barEl.value?.querySelector("[data-lp-thumb]");
79
+ if (!view || !thumbEl || event.button !== 0 || thumbEl.contains(event.target) || locked()) return;
80
+ event.preventDefault();
81
+ pageToward(view, "y", event.clientY < thumbEl.getBoundingClientRect().top);
82
+ }
83
+ function onThumbPointerDown(event) {
84
+ const view = scroller();
85
+ const bar = barEl.value;
86
+ if (!view || !bar || event.button !== 0 || locked()) return;
87
+ event.preventDefault();
88
+ const handle = event.currentTarget;
89
+ handle.setPointerCapture(event.pointerId);
90
+ dragging.value = true;
91
+ const startY = event.clientY;
92
+ const startTop = view.scrollTop;
93
+ const perPixel = (view.scrollHeight - view.clientHeight) / Math.max(1, bar.clientHeight - thumb.value.height);
94
+ const move = (e) => view.scrollTo({ top: startTop + (e.clientY - startY) * perPixel, behavior: "instant" });
95
+ const stop = () => {
96
+ dragging.value = false;
97
+ handle.removeEventListener("pointermove", move);
98
+ handle.removeEventListener("pointerup", stop);
99
+ handle.removeEventListener("pointercancel", stop);
100
+ handle.removeEventListener("lostpointercapture", stop);
101
+ };
102
+ handle.addEventListener("pointermove", move);
103
+ handle.addEventListener("pointerup", stop);
104
+ handle.addEventListener("pointercancel", stop);
105
+ handle.addEventListener("lostpointercapture", stop);
106
+ }
107
+ onMounted(() => {
108
+ const host = barEl.value ?? void 0;
109
+ doc = host?.ownerDocument;
110
+ if (!doc || nativeBarWidth(doc) === 0) return;
111
+ active.value = true;
112
+ releaseNative = hideNativeBar(doc);
113
+ const win = nodeWindow(doc);
114
+ win.addEventListener("scroll", onScroll, { passive: true });
115
+ win.addEventListener("resize", measureSoon);
116
+ sizes = new win.ResizeObserver(measureSoon);
117
+ sizes.observe(doc.body);
118
+ if (host) sizes.observe(host);
119
+ measure();
120
+ });
121
+ onBeforeUnmount(() => {
122
+ clearTimeout(hideTimer);
123
+ sizes?.disconnect();
124
+ if (!doc || !active.value) return;
125
+ const win = nodeWindow(doc);
126
+ if (frame) win.cancelAnimationFrame(frame);
127
+ win.removeEventListener("scroll", onScroll);
128
+ win.removeEventListener("resize", measureSoon);
129
+ releaseNative?.();
130
+ });
131
+ const barClass = computed(
132
+ () => mergeClass(
133
+ BAR_Y,
134
+ BAR_Y_SIZE.wall,
135
+ BAR_FADE,
136
+ "fixed right-0 z-(--z-sticky) transition-[top,bottom] duration-[var(--duration-medium)] ease-[var(--ease-settle)] print:hidden"
137
+ )
138
+ );
139
+ return (_ctx, _cache) => {
140
+ return openBlock(), createElementBlock("div", {
141
+ ref_key: "barEl",
142
+ ref: barEl,
143
+ "aria-hidden": "true",
144
+ "data-lp-page-scrollbar": "",
145
+ class: normalizeClass(barClass.value),
146
+ "data-state": active.value && scrollable.value ? state.value : void 0,
147
+ style: normalizeStyle({ top: props.top, bottom: props.bottom, visibility: active.value && scrollable.value ? void 0 : "hidden" }),
148
+ onPointerenter: onEnter,
149
+ onPointerleave: onLeave,
150
+ onPointerdown: onTrackPointerDown
151
+ }, [
152
+ createElementVNode("div", {
153
+ "data-lp-thumb": "",
154
+ class: normalizeClass(["absolute right-px", [unref(THUMB_Y), unref(THUMB_Y_ROUND).wall]]),
155
+ style: normalizeStyle({ top: `${thumb.value.top}px`, height: `${thumb.value.height}px` }),
156
+ onPointerdown: withModifiers(onThumbPointerDown, ["stop"])
157
+ }, null, 38)
158
+ ], 46, _hoisted_1);
159
+ };
160
+ }
161
+ });
162
+ export {
163
+ _sfc_main as _
164
+ };
@@ -1,10 +1,10 @@
1
1
  import { defineComponent, ref, computed, openBlock, createElementBlock, createElementVNode, createVNode, withCtx, createTextVNode, toDisplayString, unref } from "vue";
2
2
  import { useLabels } from "../composables/useLpConfig.js";
3
3
  import { suppressPaletteDiscovery } from "../composables/usePaletteCommands.js";
4
- import { _ as _sfc_main$4 } from "./LpThemeStudio-DzYfE-5k.js";
4
+ import { _ as _sfc_main$4 } from "./LpThemeStudio-R-wohbCY.js";
5
5
  import { _ as _sfc_main$2 } from "./LpThemeProvider-XK6ZeWAE.js";
6
6
  import { _ as _sfc_main$1 } from "./LpButton-DSHioIfD.js";
7
- import { _ as _sfc_main$3 } from "./LpInput-DL6HEJdi.js";
7
+ import { _ as _sfc_main$3 } from "./LpInput-CbI7z5fQ.js";
8
8
  const _hoisted_1 = { class: "flex min-w-0 flex-col gap-4" };
9
9
  const _hoisted_2 = { class: "sticky top-0 z-10 flex gap-2 border-b border-line bg-surface-overlay pb-3" };
10
10
  const _hoisted_3 = { class: "text-sm font-semibold" };
@@ -2,8 +2,8 @@ import { defineComponent, useModel, ref, openBlock, createBlock, mergeProps, unr
2
2
  import { suppressPaletteDiscovery } from "../composables/usePaletteCommands.js";
3
3
  import { useFieldControl } from "../composables/useField.js";
4
4
  import { useLabels } from "../composables/useLpConfig.js";
5
- import { _ as _sfc_main$1 } from "./LpInput-DL6HEJdi.js";
6
- import { _ as _sfc_main$2 } from "./RevealToggle-CCPDE8Mv.js";
5
+ import { _ as _sfc_main$1 } from "./LpInput-CbI7z5fQ.js";
6
+ import { _ as _sfc_main$2 } from "./RevealToggle-D_iyrB8d.js";
7
7
  const __default__ = { inheritAttrs: false };
8
8
  const _sfc_main = /* @__PURE__ */ defineComponent({
9
9
  ...__default__,