@leavepulse/ui 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/assets/{LpDropzone-DVDC-ABU.css → LpDropzone-BBoWvi-J.css} +12 -12
  2. package/dist/assets/{LpImageEditor-DqP5JKCy.css → LpImageEditor-BsSwej47.css} +6 -6
  3. package/dist/chunks/{LpAddressInput-BDkp3-Bp.js → LpAddressInput-C35TsJXt.js} +19 -14
  4. package/dist/chunks/{LpAppShell-Chz8Vbtu.js → LpAppShell-lVvpENMH.js} +18 -13
  5. package/dist/chunks/{LpBreadcrumbs-5uvViCXi.js → LpBreadcrumbs-p4jHe_V-.js} +9 -7
  6. package/dist/chunks/{LpCalendar-B7ZL0ty3.js → LpCalendar-B7Ko5RdR.js} +12 -7
  7. package/dist/chunks/{LpCard-D0M2ZCnB.js → LpCard-1SeUYPBT.js} +36 -9
  8. package/dist/chunks/{LpCheckbox-BO0zuuPh.js → LpCheckbox-CVccKYaH.js} +9 -4
  9. package/dist/chunks/{LpCodeBlock-BWX1KZwk.js → LpCodeBlock-Bo0B4TFR.js} +37 -32
  10. package/dist/chunks/{LpDatePicker-dY2q4dr4.js → LpDatePicker-6JFXllj5.js} +1 -1
  11. package/dist/chunks/{LpDisclosure-B4kVAWfg.js → LpDisclosure-y7wDBgLa.js} +11 -6
  12. package/dist/chunks/{LpEmptyState-BV3q7Qyi.js → LpEmptyState-Dsdqz1Wj.js} +13 -5
  13. package/dist/chunks/{LpFileTree-DfFqY__1.js → LpFileTree-C-NFRT0H.js} +19 -14
  14. package/dist/chunks/{LpFileTreeNode-COchUMNn.js → LpFileTreeNode-DNJUJiiB.js} +13 -6
  15. package/dist/chunks/{LpFormField-fV_2ZdCk.js → LpFormField-CazBc2-a.js} +14 -9
  16. package/dist/chunks/{LpInput-Bt4J71xn.js → LpInput-9EXWUM9B.js} +1 -1
  17. package/dist/chunks/{LpLightbox-Ci35Y_xP.js → LpLightbox-Cixfxezw.js} +29 -6
  18. package/dist/chunks/{LpLink-BHZ1CLlF.js → LpLink-DCND-zyu.js} +16 -9
  19. package/dist/chunks/{LpLogViewer-TSRyt3t9.js → LpLogViewer-y53ZqSVq.js} +20 -10
  20. package/dist/chunks/{LpMapPicker-CXvoTrAe.js → LpMapPicker-ul4oYno6.js} +14 -9
  21. package/dist/chunks/LpMediaGallery-t1z3bQcY.js +187 -0
  22. package/dist/chunks/{LpNotificationBell-gdvQY89m.js → LpNotificationBell-lHePf89W.js} +1 -1
  23. package/dist/chunks/{LpNumberField-NPE8Bumx.js → LpNumberField-CWuX08iX.js} +12 -5
  24. package/dist/chunks/{LpOtpInput-DqaT0Z75.js → LpOtpInput-y2v-pmiN.js} +11 -6
  25. package/dist/chunks/{LpPagination-CeGuNe_q.js → LpPagination-5FxjmmB5.js} +21 -19
  26. package/dist/chunks/{LpPasswordInput-BqMAc5HA.js → LpPasswordInput--sjYCkLS.js} +1 -1
  27. package/dist/chunks/{LpPhoneInput-NXXjciJJ.js → LpPhoneInput-BDSKVl_z.js} +16 -9
  28. package/dist/chunks/{LpPie-BL1vTDSM.js → LpPie-c2-q4DJu.js} +14 -8
  29. package/dist/chunks/{LpRadio-CL-pI0_O.js → LpRadio-B5AfqTpZ.js} +13 -5
  30. package/dist/chunks/{LpRadioGroup-B4yDTmi6.js → LpRadioGroup-xPIuVDO_.js} +12 -5
  31. package/dist/chunks/{LpSegmented-BmpanyAo.js → LpSegmented-fV0Sk92p.js} +16 -6
  32. package/dist/chunks/{LpSidebar-BiWM_lDB.js → LpSidebar-DcYavim2.js} +2 -2
  33. package/dist/chunks/{LpSidebarNav-CsgeuGAu.js → LpSidebarNav-CqwvT4H8.js} +21 -16
  34. package/dist/chunks/{LpSlider-B1SF3pRV.js → LpSlider-BwNIBkAK.js} +12 -5
  35. package/dist/chunks/{LpStat-CDanpzU0.js → LpStat-CQaW8R--.js} +23 -18
  36. package/dist/chunks/{LpStepper-Wtl-6nUh.js → LpStepper-Bk-XaQYU.js} +15 -10
  37. package/dist/chunks/{LpSwitch-v6fnccSM.js → LpSwitch-xgnRU2k0.js} +12 -5
  38. package/dist/chunks/{LpTextarea-BMIOfw5l.js → LpTextarea-t7F6gv8E.js} +1 -1
  39. package/dist/chunks/{LpUptimeBar-DcQ8HikG.js → LpUptimeBar-DvAMno0S.js} +26 -21
  40. package/dist/component-names.d.ts +1 -1
  41. package/dist/components/LpAddressInput.vue.d.ts +34 -17
  42. package/dist/components/LpAddressInput.vue.js +1 -1
  43. package/dist/components/LpAppShell.vue.d.ts +65 -31
  44. package/dist/components/LpAppShell.vue.js +1 -1
  45. package/dist/components/LpBreadcrumbs.vue.d.ts +12 -6
  46. package/dist/components/LpBreadcrumbs.vue.js +1 -1
  47. package/dist/components/LpCalendar.vue.d.ts +15 -6
  48. package/dist/components/LpCalendar.vue.js +1 -1
  49. package/dist/components/LpCard.vue.d.ts +26 -0
  50. package/dist/components/LpCard.vue.js +1 -1
  51. package/dist/components/LpChart.vue.d.ts +54 -12
  52. package/dist/components/LpChart.vue.js +15 -9
  53. package/dist/components/LpCheckbox.vue.d.ts +16 -12
  54. package/dist/components/LpCheckbox.vue.js +1 -1
  55. package/dist/components/LpCodeBlock.vue.d.ts +25 -6
  56. package/dist/components/LpCodeBlock.vue.js +1 -1
  57. package/dist/components/LpDatePicker.vue.js +1 -1
  58. package/dist/components/LpDisclosure.vue.d.ts +24 -14
  59. package/dist/components/LpDisclosure.vue.js +1 -1
  60. package/dist/components/LpDropzone.vue.d.ts +38 -14
  61. package/dist/components/LpDropzone.vue.js +17 -11
  62. package/dist/components/LpEmptyState.vue.d.ts +15 -10
  63. package/dist/components/LpEmptyState.vue.js +1 -1
  64. package/dist/components/LpFileTree.vue.d.ts +51 -31
  65. package/dist/components/LpFileTree.vue.js +1 -1
  66. package/dist/components/LpFileTreeNode.vue.d.ts +31 -16
  67. package/dist/components/LpFileTreeNode.vue.js +1 -1
  68. package/dist/components/LpFormField.vue.d.ts +14 -13
  69. package/dist/components/LpFormField.vue.js +1 -1
  70. package/dist/components/LpImageEditor.vue.d.ts +33 -10
  71. package/dist/components/LpImageEditor.vue.js +13 -7
  72. package/dist/components/LpInput.vue.js +1 -1
  73. package/dist/components/LpLightbox.vue.js +1 -1
  74. package/dist/components/LpLink.vue.d.ts +46 -11
  75. package/dist/components/LpLink.vue.js +1 -1
  76. package/dist/components/LpLogViewer.vue.d.ts +63 -6
  77. package/dist/components/LpLogViewer.vue.js +1 -1
  78. package/dist/components/LpMapPicker.vue.d.ts +25 -10
  79. package/dist/components/LpMapPicker.vue.js +1 -1
  80. package/dist/components/LpMediaGallery.vue.d.ts +76 -0
  81. package/dist/components/LpMediaGallery.vue.js +4 -0
  82. package/dist/components/LpNotificationBell.vue.js +1 -1
  83. package/dist/components/LpNumberField.vue.d.ts +12 -6
  84. package/dist/components/LpNumberField.vue.js +1 -1
  85. package/dist/components/LpOtpInput.vue.d.ts +18 -6
  86. package/dist/components/LpOtpInput.vue.js +1 -1
  87. package/dist/components/LpPagination.vue.d.ts +16 -6
  88. package/dist/components/LpPagination.vue.js +1 -1
  89. package/dist/components/LpPasswordInput.vue.js +1 -1
  90. package/dist/components/LpPhoneInput.vue.d.ts +18 -6
  91. package/dist/components/LpPhoneInput.vue.js +1 -1
  92. package/dist/components/LpPie.vue.d.ts +96 -34
  93. package/dist/components/LpPie.vue.js +1 -1
  94. package/dist/components/LpRadio.vue.d.ts +10 -10
  95. package/dist/components/LpRadio.vue.js +1 -1
  96. package/dist/components/LpRadioGroup.vue.d.ts +12 -12
  97. package/dist/components/LpRadioGroup.vue.js +1 -1
  98. package/dist/components/LpSegmented.vue.d.ts +12 -6
  99. package/dist/components/LpSegmented.vue.js +1 -1
  100. package/dist/components/LpSidebar.vue.js +1 -1
  101. package/dist/components/LpSidebarNav.vue.d.ts +28 -17
  102. package/dist/components/LpSidebarNav.vue.js +1 -1
  103. package/dist/components/LpSlider.vue.d.ts +13 -6
  104. package/dist/components/LpSlider.vue.js +1 -1
  105. package/dist/components/LpStat.vue.d.ts +35 -11
  106. package/dist/components/LpStat.vue.js +1 -1
  107. package/dist/components/LpStepper.vue.d.ts +17 -5
  108. package/dist/components/LpStepper.vue.js +1 -1
  109. package/dist/components/LpSwitch.vue.d.ts +8 -6
  110. package/dist/components/LpSwitch.vue.js +1 -1
  111. package/dist/components/LpTable.vue.js +1 -1
  112. package/dist/components/LpTextarea.vue.js +1 -1
  113. package/dist/components/LpUptimeBar.vue.d.ts +21 -5
  114. package/dist/components/LpUptimeBar.vue.js +1 -1
  115. package/dist/composables/useMergedClass.d.ts +20 -0
  116. package/dist/composables/useMergedClass.js +11 -0
  117. package/dist/index.d.ts +2 -0
  118. package/dist/index.js +95 -89
  119. package/package.json +1 -3
  120. package/src/component-names.ts +1 -0
  121. package/src/components/LpAddressInput.vue +16 -1
  122. package/src/components/LpAppShell.vue +16 -1
  123. package/src/components/LpBreadcrumbs.vue +16 -1
  124. package/src/components/LpCalendar.vue +15 -1
  125. package/src/components/LpCard.vue +50 -5
  126. package/src/components/LpChart.vue +16 -1
  127. package/src/components/LpCheckbox.vue +16 -1
  128. package/src/components/LpCodeBlock.vue +16 -1
  129. package/src/components/LpDisclosure.vue +15 -1
  130. package/src/components/LpDropzone.vue +21 -6
  131. package/src/components/LpEmptyState.vue +21 -3
  132. package/src/components/LpFileTree.vue +16 -1
  133. package/src/components/LpFileTreeNode.vue +15 -1
  134. package/src/components/LpFormField.vue +16 -1
  135. package/src/components/LpImageEditor.vue +16 -1
  136. package/src/components/LpLightbox.vue +54 -2
  137. package/src/components/LpLink.vue +25 -9
  138. package/src/components/LpLogViewer.vue +20 -2
  139. package/src/components/LpMapPicker.vue +15 -1
  140. package/src/components/LpMediaGallery.vue +280 -0
  141. package/src/components/LpNumberField.vue +15 -1
  142. package/src/components/LpOtpInput.vue +15 -1
  143. package/src/components/LpPagination.vue +16 -1
  144. package/src/components/LpPhoneInput.vue +23 -8
  145. package/src/components/LpPie.vue +16 -1
  146. package/src/components/LpRadio.vue +20 -3
  147. package/src/components/LpRadioGroup.vue +15 -1
  148. package/src/components/LpSegmented.vue +21 -2
  149. package/src/components/LpSidebarNav.vue +16 -1
  150. package/src/components/LpSlider.vue +15 -1
  151. package/src/components/LpStat.vue +16 -1
  152. package/src/components/LpStepper.vue +16 -1
  153. package/src/components/LpSwitch.vue +15 -1
  154. package/src/components/LpUptimeBar.vue +16 -1
  155. package/src/composables/useMergedClass.ts +30 -0
  156. package/src/index.ts +2 -0
  157. package/src/tokens/tokens.css +29 -0
@@ -0,0 +1,187 @@
1
+ import { defineComponent, ref, computed, openBlock, createElementBlock, renderSlot, mergeProps, unref, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createVNode, createCommentVNode, createBlock } from "vue";
2
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
3
+ import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
4
+ import { _ as _sfc_main$2 } from "./LpLightbox-Cixfxezw.js";
5
+ const _hoisted_1 = { key: 0 };
6
+ const _hoisted_2 = ["aria-label"];
7
+ const _hoisted_3 = ["aria-label", "onClick"];
8
+ const _hoisted_4 = ["src", "alt"];
9
+ const _hoisted_5 = {
10
+ key: 0,
11
+ class: "pointer-events-none absolute inset-0 flex items-center justify-center text-lg font-medium text-white"
12
+ };
13
+ const _hoisted_6 = {
14
+ key: 1,
15
+ class: "pointer-events-none absolute inset-0 flex items-center justify-center bg-black/0 opacity-0 transition-[background-color,opacity] duration-[var(--duration-fast)] group-hover:bg-black/25 group-hover:opacity-100 motion-reduce:transition-none",
16
+ "aria-hidden": "true"
17
+ };
18
+ const _sfc_main = /* @__PURE__ */ defineComponent({
19
+ __name: "LpMediaGallery",
20
+ props: {
21
+ items: {},
22
+ columns: { default: 3 },
23
+ gap: { default: 2 },
24
+ aspect: { default: "square" },
25
+ max: {},
26
+ openable: { type: Boolean, default: true },
27
+ downloadable: { type: Boolean, default: true },
28
+ rotatable: { type: Boolean, default: true },
29
+ ariaLabel: { default: "Media" }
30
+ },
31
+ emits: ["select", "update:open"],
32
+ setup(__props, { expose: __expose, emit: __emit }) {
33
+ const props = __props;
34
+ const emit = __emit;
35
+ const open = ref(false);
36
+ const index = ref(0);
37
+ const visible = computed(
38
+ () => props.max && props.items.length > props.max ? props.items.slice(0, props.max) : props.items
39
+ );
40
+ const hiddenCount = computed(() => Math.max(props.items.length - visible.value.length, 0));
41
+ const COLS = {
42
+ 1: "grid-cols-1",
43
+ 2: "grid-cols-2",
44
+ 3: "grid-cols-3",
45
+ 4: "grid-cols-4",
46
+ 5: "grid-cols-5",
47
+ 6: "grid-cols-6"
48
+ };
49
+ const COLS_SM = {
50
+ 1: "sm:grid-cols-1",
51
+ 2: "sm:grid-cols-2",
52
+ 3: "sm:grid-cols-3",
53
+ 4: "sm:grid-cols-4",
54
+ 5: "sm:grid-cols-5",
55
+ 6: "sm:grid-cols-6"
56
+ };
57
+ const COLS_MD = {
58
+ 1: "md:grid-cols-1",
59
+ 2: "md:grid-cols-2",
60
+ 3: "md:grid-cols-3",
61
+ 4: "md:grid-cols-4",
62
+ 5: "md:grid-cols-5",
63
+ 6: "md:grid-cols-6"
64
+ };
65
+ const COLS_LG = {
66
+ 1: "lg:grid-cols-1",
67
+ 2: "lg:grid-cols-2",
68
+ 3: "lg:grid-cols-3",
69
+ 4: "lg:grid-cols-4",
70
+ 5: "lg:grid-cols-5",
71
+ 6: "lg:grid-cols-6"
72
+ };
73
+ const COLS_XL = {
74
+ 1: "xl:grid-cols-1",
75
+ 2: "xl:grid-cols-2",
76
+ 3: "xl:grid-cols-3",
77
+ 4: "xl:grid-cols-4",
78
+ 5: "xl:grid-cols-5",
79
+ 6: "xl:grid-cols-6"
80
+ };
81
+ const GAPS = {
82
+ 0: "gap-0",
83
+ 0.5: "gap-0.5",
84
+ 1: "gap-1",
85
+ 1.5: "gap-1.5",
86
+ 2: "gap-2",
87
+ 3: "gap-3",
88
+ 4: "gap-4"
89
+ };
90
+ const ASPECTS = {
91
+ square: "aspect-square",
92
+ video: "aspect-video",
93
+ auto: ""
94
+ };
95
+ const columnClass = computed(() => {
96
+ const c = props.columns;
97
+ if (typeof c === "number") return COLS[c] ?? COLS[3];
98
+ return [
99
+ COLS[c.base ?? 1] ?? COLS[1],
100
+ c.sm ? COLS_SM[c.sm] : "",
101
+ c.md ? COLS_MD[c.md] : "",
102
+ c.lg ? COLS_LG[c.lg] : "",
103
+ c.xl ? COLS_XL[c.xl] : ""
104
+ ].filter(Boolean).join(" ");
105
+ });
106
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
107
+ () => ["grid", columnClass.value, GAPS[props.gap] ?? GAPS[2]].join(" ")
108
+ );
109
+ function activate(i) {
110
+ const item = props.items[i];
111
+ if (!item) return;
112
+ emit("select", item, i);
113
+ if (!props.openable) return;
114
+ index.value = i;
115
+ open.value = true;
116
+ emit("update:open", true);
117
+ }
118
+ function openOverflow() {
119
+ activate(visible.value.length);
120
+ }
121
+ __expose({
122
+ /** Open the lightbox at an index — for a "view all" button outside the grid. */
123
+ openAt: (i) => activate(i)
124
+ });
125
+ return (_ctx, _cache) => {
126
+ return !__props.items.length ? (openBlock(), createElementBlock("div", _hoisted_1, [
127
+ renderSlot(_ctx.$slots, "empty")
128
+ ])) : (openBlock(), createElementBlock("div", mergeProps({
129
+ key: 1,
130
+ role: "group",
131
+ "aria-label": __props.ariaLabel,
132
+ class: unref(rootClass)
133
+ }, unref(rest)), [
134
+ (openBlock(true), createElementBlock(Fragment, null, renderList(visible.value, (item, i) => {
135
+ return openBlock(), createElementBlock("button", {
136
+ key: item.src + i,
137
+ type: "button",
138
+ class: normalizeClass([
139
+ "group relative overflow-hidden rounded-card bg-surface-soft outline-none",
140
+ ASPECTS[__props.aspect],
141
+ __props.openable ? "cursor-pointer" : "cursor-default",
142
+ "focus-visible:ring-2 focus-visible:ring-ring"
143
+ ]),
144
+ "aria-label": hiddenCount.value && i === visible.value.length - 1 ? `Show ${hiddenCount.value} more` : item.title || `Image ${i + 1} of ${__props.items.length}`,
145
+ onClick: ($event) => hiddenCount.value && i === visible.value.length - 1 ? openOverflow() : activate(i)
146
+ }, [
147
+ renderSlot(_ctx.$slots, "item", {
148
+ item,
149
+ index: i
150
+ }, () => [
151
+ createElementVNode("img", {
152
+ src: item.thumb || item.src,
153
+ alt: item.title || "",
154
+ loading: "lazy",
155
+ decoding: "async",
156
+ class: normalizeClass([
157
+ "size-full object-cover transition-transform duration-[var(--duration-medium)] ease-[var(--ease-emphasized)] group-hover:scale-[1.03] motion-reduce:transition-none motion-reduce:group-hover:scale-100",
158
+ hiddenCount.value && i === visible.value.length - 1 ? "scale-[1.06] blur-[2px] brightness-[0.45] group-hover:scale-[1.06]" : ""
159
+ ])
160
+ }, null, 10, _hoisted_4)
161
+ ]),
162
+ hiddenCount.value && i === visible.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_5, " +" + toDisplayString(hiddenCount.value), 1)) : __props.openable ? (openBlock(), createElementBlock("span", _hoisted_6, [
163
+ createVNode(_sfc_main$1, {
164
+ name: "lucide:maximize-2",
165
+ size: 18,
166
+ class: "text-white"
167
+ })
168
+ ])) : createCommentVNode("", true)
169
+ ], 10, _hoisted_3);
170
+ }), 128)),
171
+ __props.openable ? (openBlock(), createBlock(_sfc_main$2, {
172
+ key: 0,
173
+ open: open.value,
174
+ "onUpdate:open": _cache[0] || (_cache[0] = ($event) => open.value = $event),
175
+ index: index.value,
176
+ "onUpdate:index": _cache[1] || (_cache[1] = ($event) => index.value = $event),
177
+ items: __props.items,
178
+ downloadable: __props.downloadable,
179
+ rotatable: __props.rotatable
180
+ }, null, 8, ["open", "index", "items", "downloadable", "rotatable"])) : createCommentVNode("", true)
181
+ ], 16, _hoisted_2));
182
+ };
183
+ }
184
+ });
185
+ export {
186
+ _sfc_main as _
187
+ };
@@ -2,7 +2,7 @@ import { defineComponent, computed, useModel, getCurrentInstance, openBlock, cre
2
2
  import { _ as _sfc_main$8 } from "./LpBadge-Fe0D1bYx.js";
3
3
  import { _ as _sfc_main$7 } from "./LpButton-5VXXCjwF.js";
4
4
  import { _ as _sfc_main$5 } from "./LpContextMenu-B6WBLleS.js";
5
- import { _ as _sfc_main$3 } from "./LpEmptyState-BV3q7Qyi.js";
5
+ import { _ as _sfc_main$3 } from "./LpEmptyState-Dsdqz1Wj.js";
6
6
  import { _ as _sfc_main$6 } from "./LpIcon-CCnX5_2j.js";
7
7
  import { _ as _sfc_main$1 } from "./LpPopover-8268UmlC.js";
8
8
  import { _ as _sfc_main$4 } from "./LpScrollArea-D8xyKXcF.js";
@@ -1,8 +1,11 @@
1
- import { defineComponent, useId, openBlock, createBlock, unref, withCtx, createVNode, createElementBlock, toDisplayString, createCommentVNode } from "vue";
1
+ import { defineComponent, useId, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, createElementBlock, toDisplayString, createCommentVNode } from "vue";
2
2
  import { NumberFieldRoot, NumberFieldDecrement, NumberFieldInput, NumberFieldIncrement } from "reka-ui";
3
3
  import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
4
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
5
  const _hoisted_1 = ["id"];
6
+ const __default__ = { inheritAttrs: false };
5
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
+ ...__default__,
6
9
  __name: "LpNumberField",
7
10
  props: {
8
11
  modelValue: {},
@@ -15,17 +18,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15
18
  emits: ["update:modelValue"],
16
19
  setup(__props) {
17
20
  const unitId = useId();
21
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
22
+ "flex h-(--size-control-md) w-full items-center rounded-control border border-line bg-surface-soft transition-colors duration-[var(--duration-fast)] focus-within:border-brand focus-within:ring-2 focus-within:ring-ring data-[disabled]:cursor-not-allowed data-[disabled]:opacity-55"
23
+ );
18
24
  return (_ctx, _cache) => {
19
- return openBlock(), createBlock(unref(NumberFieldRoot), {
25
+ return openBlock(), createBlock(unref(NumberFieldRoot), mergeProps({
20
26
  "model-value": __props.modelValue ?? void 0,
21
27
  min: __props.min,
22
28
  max: __props.max,
23
29
  step: __props.step,
24
30
  disabled: __props.disabled,
25
31
  "data-lp-ring-owner": "",
26
- class: "flex h-(--size-control-md) w-full items-center rounded-control border border-line bg-surface-soft transition-colors duration-[var(--duration-fast)] focus-within:border-brand focus-within:ring-2 focus-within:ring-ring data-[disabled]:cursor-not-allowed data-[disabled]:opacity-55",
32
+ class: unref(rootClass)
33
+ }, unref(rest), {
27
34
  "onUpdate:modelValue": _cache[0] || (_cache[0] = (v) => _ctx.$emit("update:modelValue", v ?? null))
28
- }, {
35
+ }), {
29
36
  default: withCtx(() => [
30
37
  createVNode(unref(NumberFieldDecrement), { class: "group grid h-full w-8 place-items-center text-muted transition-colors duration-[var(--duration-fast)] hover:text-ink disabled:opacity-40" }, {
31
38
  default: withCtx(() => [
@@ -58,7 +65,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
65
  })
59
66
  ]),
60
67
  _: 1
61
- }, 8, ["model-value", "min", "max", "step", "disabled"]);
68
+ }, 16, ["model-value", "min", "max", "step", "disabled", "class"]);
62
69
  };
63
70
  }
64
71
  });
@@ -1,6 +1,9 @@
1
- import { defineComponent, computed, openBlock, createBlock, unref, withCtx, createElementBlock, Fragment, renderList, normalizeClass } from "vue";
1
+ import { defineComponent, computed, openBlock, createBlock, unref, mergeProps, withCtx, createElementBlock, Fragment, renderList, normalizeClass } from "vue";
2
2
  import { PinInputRoot, PinInputInput } from "reka-ui";
3
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
+ const __default__ = { inheritAttrs: false };
3
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
+ ...__default__,
4
7
  __name: "LpOtpInput",
5
8
  props: {
6
9
  modelValue: {},
@@ -27,17 +30,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
27
30
  md: "size-11 text-lg",
28
31
  lg: "size-13 text-xl"
29
32
  };
33
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
34
+ "flex items-center gap-2"
35
+ );
30
36
  return (_ctx, _cache) => {
31
- return openBlock(), createBlock(unref(PinInputRoot), {
37
+ return openBlock(), createBlock(unref(PinInputRoot), mergeProps({
32
38
  modelValue: cells.value,
33
39
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => cells.value = $event),
34
40
  type: __props.alphanumeric ? "text" : "number",
35
41
  mask: __props.mask,
36
42
  disabled: __props.disabled,
37
43
  otp: "",
38
- class: "flex items-center gap-2",
39
- onComplete
40
- }, {
44
+ class: unref(rootClass)
45
+ }, unref(rest), { onComplete }), {
41
46
  default: withCtx(() => [
42
47
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.length, (i) => {
43
48
  return openBlock(), createBlock(unref(PinInputInput), {
@@ -56,7 +61,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
56
61
  }), 128))
57
62
  ]),
58
63
  _: 1
59
- }, 8, ["modelValue", "type", "mask", "disabled"]);
64
+ }, 16, ["modelValue", "type", "mask", "disabled", "class"]);
60
65
  };
61
66
  }
62
67
  });
@@ -1,23 +1,20 @@
1
- import { defineComponent, computed, useId, openBlock, createElementBlock, createElementVNode, normalizeClass, createVNode, Fragment, renderList, createBlock, unref, createCommentVNode, toDisplayString } from "vue";
1
+ import { defineComponent, computed, useId, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, createVNode, Fragment, renderList, createBlock, createCommentVNode, toDisplayString } from "vue";
2
2
  import { Motion } from "motion-v";
3
3
  import { usePillTransition } from "../composables/usePillTransition.js";
4
4
  import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
5
- const _hoisted_1 = {
6
- class: "flex items-center gap-1.5",
7
- "aria-label": "Pagination"
8
- };
9
- const _hoisted_2 = ["disabled"];
10
- const _hoisted_3 = {
5
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
6
+ const _hoisted_1 = ["disabled"];
7
+ const _hoisted_2 = {
11
8
  key: 0,
12
9
  class: "flex size-(--size-control-sm) items-center justify-center text-sm text-muted select-none",
13
10
  "aria-hidden": "true"
14
11
  };
15
- const _hoisted_4 = ["disabled", "aria-current", "onClick"];
16
- const _hoisted_5 = { class: "relative z-10" };
17
- const _hoisted_6 = ["disabled"];
18
- const navBase = "relative flex size-(--size-control-sm) items-center justify-center rounded-control text-sm outline-none transition-[color,border-color,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] active:scale-95 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-45 disabled:active:scale-100";
19
- const navArrow = "border border-line text-muted hover:border-line-strong hover:text-ink disabled:hover:border-line disabled:hover:text-muted";
12
+ const _hoisted_3 = ["disabled", "aria-current", "onClick"];
13
+ const _hoisted_4 = { class: "relative z-10" };
14
+ const _hoisted_5 = ["disabled"];
15
+ const __default__ = { inheritAttrs: false };
20
16
  const _sfc_main = /* @__PURE__ */ defineComponent({
17
+ ...__default__,
21
18
  __name: "LpPagination",
22
19
  props: {
23
20
  page: { default: 1 },
@@ -69,10 +66,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
69
66
  emit("update:page", next);
70
67
  emit("change", next);
71
68
  }
69
+ const navBase = "relative flex size-(--size-control-sm) items-center justify-center rounded-control text-sm outline-none transition-[color,border-color,scale] duration-[var(--duration-fast)] ease-[var(--ease-emphasized)] active:scale-95 motion-reduce:active:scale-100 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-45 disabled:active:scale-100";
70
+ const navArrow = "border border-line text-muted hover:border-line-strong hover:text-ink disabled:hover:border-line disabled:hover:text-muted";
72
71
  const pillId = `lp-page-indicator-${useId()}`;
73
72
  const pillTransition = usePillTransition();
73
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
74
+ "flex items-center gap-1.5"
75
+ );
74
76
  return (_ctx, _cache) => {
75
- return openBlock(), createElementBlock("nav", _hoisted_1, [
77
+ return openBlock(), createElementBlock("nav", mergeProps({ class: unref(rootClass) }, unref(rest), { "aria-label": "Pagination" }), [
76
78
  createElementVNode("button", {
77
79
  type: "button",
78
80
  class: normalizeClass([navBase, navArrow]),
@@ -84,12 +86,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
84
86
  name: "lucide:chevron-left",
85
87
  size: 16
86
88
  })
87
- ], 10, _hoisted_2),
89
+ ], 10, _hoisted_1),
88
90
  (openBlock(true), createElementBlock(Fragment, null, renderList(slots.value, (slot, i) => {
89
91
  return openBlock(), createElementBlock(Fragment, {
90
92
  key: `slot-${i}`
91
93
  }, [
92
- slot.kind === "gap" ? (openBlock(), createElementBlock("span", _hoisted_3, "…")) : (openBlock(), createElementBlock("button", {
94
+ slot.kind === "gap" ? (openBlock(), createElementBlock("span", _hoisted_2, "…")) : (openBlock(), createElementBlock("button", {
93
95
  key: 1,
94
96
  type: "button",
95
97
  class: normalizeClass([
@@ -107,8 +109,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
107
109
  transition: unref(pillTransition),
108
110
  class: "absolute inset-0 z-0 rounded-control bg-brand"
109
111
  }, null, 8, ["transition"])) : createCommentVNode("", true),
110
- createElementVNode("span", _hoisted_5, toDisplayString(slot.page), 1)
111
- ], 10, _hoisted_4))
112
+ createElementVNode("span", _hoisted_4, toDisplayString(slot.page), 1)
113
+ ], 10, _hoisted_3))
112
114
  ], 64);
113
115
  }), 128)),
114
116
  createElementVNode("button", {
@@ -122,8 +124,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
122
124
  name: "lucide:chevron-right",
123
125
  size: 16
124
126
  })
125
- ], 10, _hoisted_6)
126
- ]);
127
+ ], 10, _hoisted_5)
128
+ ], 16);
127
129
  };
128
130
  }
129
131
  });
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, ref, openBlock, createBlock, createSlots, withCtx, createElementVNode, createVNode, renderSlot } from "vue";
2
2
  import { _ as _sfc_main$2 } from "./LpIcon-CCnX5_2j.js";
3
- import { _ as _sfc_main$1 } from "./LpInput-Bt4J71xn.js";
3
+ import { _ as _sfc_main$1 } from "./LpInput-9EXWUM9B.js";
4
4
  const _hoisted_1 = ["aria-label"];
5
5
  const __default__ = { inheritAttrs: false };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,16 +1,19 @@
1
- import { defineComponent, ref, computed, onMounted, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, createElementVNode, toDisplayString, createTextVNode, Fragment, renderList, createBlock, withModifiers, normalizeStyle } from "vue";
1
+ import { defineComponent, ref, computed, onMounted, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, createElementVNode, toDisplayString, normalizeClass, createTextVNode, Fragment, renderList, createBlock, withModifiers, normalizeStyle } from "vue";
2
2
  import { ComboboxRoot, ComboboxAnchor, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxInput, ComboboxViewport, ComboboxEmpty, ComboboxItem } from "reka-ui";
3
3
  import { useInputFilter } from "../composables/useInputFilter.js";
4
4
  import { matchCountryByValue, loadCountries, flagEmoji } from "../components/countries.js";
5
5
  import { POPOVER_PANEL, OPTION_ITEM } from "../components/dropdown.js";
6
6
  import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
7
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
7
8
  const _hoisted_1 = { class: "text-base leading-none" };
8
9
  const _hoisted_2 = { class: "border-b border-line p-2" };
9
10
  const _hoisted_3 = { class: "text-base leading-none" };
10
11
  const _hoisted_4 = { class: "min-w-0 flex-1 truncate" };
11
12
  const _hoisted_5 = { class: "shrink-0 text-xs text-muted" };
12
13
  const _hoisted_6 = ["value", "placeholder", "disabled", "aria-invalid"];
14
+ const __default__ = { inheritAttrs: false };
13
15
  const _sfc_main = /* @__PURE__ */ defineComponent({
16
+ ...__default__,
14
17
  __name: "LpPhoneInput",
15
18
  props: {
16
19
  modelValue: {},
@@ -84,15 +87,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
84
87
  md: "h-(--size-control-md) text-sm",
85
88
  lg: "h-(--size-control-lg) text-sm"
86
89
  };
90
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
91
+ () => [
92
+ "flex w-full items-stretch rounded-control border bg-surface-soft text-ink transition-colors duration-[var(--duration-fast)] focus-within:ring-2 focus-within:ring-ring",
93
+ sizeClass[props.size],
94
+ props.invalid ? "border-danger focus-within:border-danger focus-within:ring-danger-soft" : "border-line focus-within:border-brand",
95
+ props.disabled ? "cursor-not-allowed opacity-55" : ""
96
+ ].join(" ")
97
+ );
87
98
  return (_ctx, _cache) => {
88
- return openBlock(), createElementBlock("div", {
99
+ return openBlock(), createElementBlock("div", mergeProps({
89
100
  "data-lp-ring-owner": "",
90
- class: normalizeClass(["flex w-full items-stretch rounded-control border bg-surface-soft text-ink transition-colors duration-[var(--duration-fast)] focus-within:ring-2 focus-within:ring-ring", [
91
- sizeClass[__props.size],
92
- __props.invalid ? "border-danger focus-within:border-danger focus-within:ring-danger-soft" : "border-line focus-within:border-brand",
93
- __props.disabled ? "cursor-not-allowed opacity-55" : ""
94
- ]])
95
- }, [
101
+ class: unref(rootClass)
102
+ }, unref(rest)), [
96
103
  createVNode(unref(ComboboxRoot), {
97
104
  open: open.value,
98
105
  "onUpdate:open": _cache[1] || (_cache[1] = ($event) => open.value = $event),
@@ -193,7 +200,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
193
200
  (...args) => unref(onPaste) && unref(onPaste)(...args)),
194
201
  onInput
195
202
  }, null, 40, _hoisted_6)
196
- ], 2);
203
+ ], 16);
197
204
  };
198
205
  }
199
206
  });
@@ -1,4 +1,4 @@
1
- import { defineComponent, computed, ref, watch, onBeforeUnmount, openBlock, createElementBlock, toDisplayString, createCommentVNode, normalizeStyle, createVNode, createElementVNode, createBlock, withCtx, withModifiers, Fragment, renderList, normalizeClass, renderSlot } from "vue";
1
+ import { defineComponent, computed, ref, watch, onBeforeUnmount, openBlock, createElementBlock, mergeProps, unref, toDisplayString, createCommentVNode, normalizeStyle, createVNode, createElementVNode, createBlock, withCtx, withModifiers, Fragment, renderList, normalizeClass, renderSlot } from "vue";
2
2
  import { prefersReducedMotion, easeTravel } from "../composables/easing.js";
3
3
  import { useReveal } from "../composables/useReveal.js";
4
4
  import { resolveSlices, arcPath, calloutLabels, formatTick } from "../components/chart.js";
@@ -8,6 +8,7 @@ import { _ as _sfc_main$4 } from "./LpNumberFlow-amWYaeuA.js";
8
8
  import { _ as _sfc_main$5 } from "./LpRollingText-CM5gkSeF.js";
9
9
  import { _ as _sfc_main$6 } from "./LpShift-DXNsauQZ.js";
10
10
  import { _ as _sfc_main$3 } from "./LpTooltip-hCLPAqMG.js";
11
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
11
12
  const _hoisted_1 = {
12
13
  key: 0,
13
14
  class: "flex flex-col gap-0.5"
@@ -45,10 +46,9 @@ const _hoisted_21 = {
45
46
  class: "shrink-0 text-muted"
46
47
  };
47
48
  const _hoisted_22 = { class: "ml-auto shrink-0 pl-2 font-mono tabular-nums text-muted" };
48
- const ELBOW = 16;
49
- const RUN = 14;
50
- const LABEL_LINE = 17;
49
+ const __default__ = { inheritAttrs: false };
51
50
  const _sfc_main = /* @__PURE__ */ defineComponent({
51
+ ...__default__,
52
52
  __name: "LpPie",
53
53
  props: {
54
54
  slices: {},
@@ -107,6 +107,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
107
107
  return { index, slice: s, start: start + gap / 2, end: angle - gap / 2, mid: start + sweep2 / 2 };
108
108
  });
109
109
  });
110
+ const ELBOW = 16;
111
+ const RUN = 14;
112
+ const LABEL_LINE = 17;
110
113
  const canvasWidth = computed(
111
114
  () => props.labels ? props.size + (props.labelWidth + ELBOW + RUN) * 2 : props.size
112
115
  );
@@ -320,12 +323,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
320
323
  if (selected.value.size > 1) return `${selected.value.size} selected`;
321
324
  return "total";
322
325
  });
326
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
327
+ "flex flex-col gap-3"
328
+ );
323
329
  return (_ctx, _cache) => {
324
- return openBlock(), createElementBlock("div", {
330
+ return openBlock(), createElementBlock("div", mergeProps({
325
331
  ref_key: "revealAnchor",
326
332
  ref: revealAnchor,
327
- class: "flex flex-col gap-3"
328
- }, [
333
+ class: unref(rootClass)
334
+ }, unref(rest)), [
329
335
  __props.title || __props.subtitle ? (openBlock(), createElementBlock("div", _hoisted_1, [
330
336
  __props.title ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
331
337
  __props.subtitle ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)
@@ -516,7 +522,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
516
522
  ]),
517
523
  _: 3
518
524
  }, 8, ["items", "always"]))
519
- ], 512);
525
+ ], 16);
520
526
  };
521
527
  }
522
528
  });
@@ -1,6 +1,9 @@
1
- import { defineComponent, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, createElementVNode, renderSlot, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, openBlock, createElementBlock, mergeProps, unref, createVNode, withCtx, createElementVNode, renderSlot, createTextVNode, toDisplayString } from "vue";
2
2
  import { RadioGroupItem, RadioGroupIndicator } from "reka-ui";
3
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
+ const __default__ = { inheritAttrs: false };
3
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
+ ...__default__,
4
7
  __name: "LpRadio",
5
8
  props: {
6
9
  value: {},
@@ -8,10 +11,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8
11
  disabled: { type: Boolean }
9
12
  },
10
13
  setup(__props) {
14
+ const props = __props;
15
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
16
+ () => [
17
+ "group inline-flex cursor-pointer items-center gap-2 text-sm text-ink",
18
+ props.disabled ? "cursor-not-allowed opacity-55" : ""
19
+ ].join(" ")
20
+ );
11
21
  return (_ctx, _cache) => {
12
- return openBlock(), createElementBlock("label", {
13
- class: normalizeClass(["group inline-flex cursor-pointer items-center gap-2 text-sm text-ink", __props.disabled && "cursor-not-allowed opacity-55"])
14
- }, [
22
+ return openBlock(), createElementBlock("label", mergeProps({ class: unref(rootClass) }, unref(rest)), [
15
23
  createVNode(unref(RadioGroupItem), {
16
24
  value: __props.value,
17
25
  disabled: __props.disabled,
@@ -30,7 +38,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
30
38
  renderSlot(_ctx.$slots, "default", {}, () => [
31
39
  createTextVNode(toDisplayString(__props.label), 1)
32
40
  ])
33
- ], 2);
41
+ ], 16);
34
42
  };
35
43
  }
36
44
  });
@@ -1,6 +1,9 @@
1
- import { defineComponent, openBlock, createBlock, unref, withCtx, renderSlot, createElementBlock, Fragment, renderList, createVNode, createElementVNode, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createElementBlock, Fragment, renderList, createVNode, createElementVNode, createTextVNode, toDisplayString } from "vue";
2
2
  import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator } from "reka-ui";
3
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
+ const __default__ = { inheritAttrs: false };
3
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
+ ...__default__,
4
7
  __name: "LpRadioGroup",
5
8
  props: {
6
9
  modelValue: {},
@@ -9,13 +12,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9
12
  },
10
13
  emits: ["update:modelValue"],
11
14
  setup(__props) {
15
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
16
+ "flex flex-col gap-2"
17
+ );
12
18
  return (_ctx, _cache) => {
13
- return openBlock(), createBlock(unref(RadioGroupRoot), {
19
+ return openBlock(), createBlock(unref(RadioGroupRoot), mergeProps({
14
20
  "model-value": __props.modelValue,
15
21
  disabled: __props.disabled,
16
- class: "flex flex-col gap-2",
22
+ class: unref(rootClass)
23
+ }, unref(rest), {
17
24
  "onUpdate:modelValue": _cache[0] || (_cache[0] = (v) => _ctx.$emit("update:modelValue", v))
18
- }, {
25
+ }), {
19
26
  default: withCtx(() => [
20
27
  renderSlot(_ctx.$slots, "default", {}, () => [
21
28
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (opt) => {
@@ -43,7 +50,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
43
50
  ])
44
51
  ]),
45
52
  _: 3
46
- }, 8, ["model-value", "disabled"]);
53
+ }, 16, ["model-value", "disabled", "class"]);
47
54
  };
48
55
  }
49
56
  });
@@ -1,13 +1,16 @@
1
- import { defineComponent, useId, openBlock, createBlock, unref, normalizeClass, withCtx, createElementBlock, Fragment, renderList, createCommentVNode, toDisplayString } from "vue";
1
+ import { defineComponent, useId, openBlock, createBlock, unref, mergeProps, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createCommentVNode, toDisplayString } from "vue";
2
2
  import { Motion } from "motion-v";
3
3
  import { ToggleGroupRoot, ToggleGroupItem } from "reka-ui";
4
+ import { useMergedAttrs } from "../composables/useMergedClass.js";
4
5
  import { usePillTransition } from "../composables/usePillTransition.js";
5
6
  import { _ as _sfc_main$1 } from "./LpIcon-CCnX5_2j.js";
6
7
  const _hoisted_1 = {
7
8
  key: 2,
8
9
  class: "relative z-10"
9
10
  };
11
+ const __default__ = { inheritAttrs: false };
10
12
  const _sfc_main = /* @__PURE__ */ defineComponent({
13
+ ...__default__,
11
14
  __name: "LpSegmented",
12
15
  props: {
13
16
  modelValue: {},
@@ -18,6 +21,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
18
21
  },
19
22
  emits: ["update:modelValue"],
20
23
  setup(__props, { emit: __emit }) {
24
+ const props = __props;
21
25
  const emit = __emit;
22
26
  function onChange(v) {
23
27
  if (typeof v === "string" && v) emit("update:modelValue", v);
@@ -26,17 +30,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26
30
  sm: "h-(--size-control-sm) text-xs",
27
31
  md: "h-(--size-control-md) text-sm"
28
32
  };
33
+ const { class: rootClass, attrs: rest } = useMergedAttrs(
34
+ () => [
35
+ "inline-flex items-center gap-1 rounded-control border border-line bg-surface-soft p-1",
36
+ sizeCls[props.size],
37
+ props.block ? "flex w-full" : ""
38
+ ].join(" ")
39
+ );
29
40
  const pillId = `lp-segmented-${useId()}`;
30
41
  const pillTransition = usePillTransition();
31
42
  return (_ctx, _cache) => {
32
- return openBlock(), createBlock(unref(ToggleGroupRoot), {
43
+ return openBlock(), createBlock(unref(ToggleGroupRoot), mergeProps({
33
44
  "model-value": __props.modelValue,
34
45
  type: "single",
35
46
  disabled: __props.disabled,
36
47
  rovingFocus: true,
37
- class: normalizeClass(["inline-flex items-center gap-1 rounded-control border border-line bg-surface-soft p-1", [sizeCls[__props.size], __props.block ? "flex w-full" : ""]]),
38
- "onUpdate:modelValue": onChange
39
- }, {
48
+ class: unref(rootClass)
49
+ }, unref(rest), { "onUpdate:modelValue": onChange }), {
40
50
  default: withCtx(() => [
41
51
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (opt) => {
42
52
  return openBlock(), createBlock(unref(ToggleGroupItem), {
@@ -65,7 +75,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
65
75
  }), 128))
66
76
  ]),
67
77
  _: 1
68
- }, 8, ["model-value", "disabled", "class"]);
78
+ }, 16, ["model-value", "disabled", "class"]);
69
79
  };
70
80
  }
71
81
  });