@leavepulse/ui 0.22.21 → 0.23.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 (64) hide show
  1. package/dist/chunks/{LpAddressInput-CxKwIG6T.js → LpAddressInput-BTqnUXZG.js} +3 -3
  2. package/dist/chunks/{LpAppShell-D8CAP9oF.js → LpAppShell-CaQYQKZV.js} +25 -14
  3. package/dist/chunks/{LpAvatar-B1Ez0ZAx.js → LpAvatar-D-jHoHR7.js} +15 -5
  4. package/dist/chunks/{LpConfirmDialog-CmgeAdCh.js → LpConfirmDialog-CObRah9c.js} +11 -6
  5. package/dist/chunks/{LpFileTree-Cw50eG_y.js → LpFileTree-CN0IOIY7.js} +1 -1
  6. package/dist/chunks/{LpFileTreeNode-DFg4PhOK.js → LpFileTreeNode-D7WgUPcJ.js} +23 -21
  7. package/dist/chunks/{LpFormField-Bn-ZwC6z.js → LpFormField-CesaPWPO.js} +12 -6
  8. package/dist/chunks/{LpInput-BkomKdqQ.js → LpInput-jwqXlAy0.js} +6 -3
  9. package/dist/chunks/{LpLink-DHwOEp4e.js → LpLink-DU9kkKGW.js} +25 -10
  10. package/dist/chunks/{LpModal-CNNSf5pv.js → LpModal-D_o-56To.js} +13 -76
  11. package/dist/chunks/{LpNotificationBell-DWDEkmdA.js → LpNotificationBell-a08cl0yY.js} +67 -61
  12. package/dist/chunks/{LpPasswordInput-DgUC2Ur7.js → LpPasswordInput-Bmo6q9Kd.js} +11 -3
  13. package/dist/chunks/LpShift-DXNsauQZ.js +40 -0
  14. package/dist/chunks/{LpTextarea-CRAkhemZ.js → LpTextarea-1ENb3ZAO.js} +7 -4
  15. package/dist/chunks/{LpThemeSwitcher-B_kj0T2b.js → LpThemeSwitcher-BgpJgrnP.js} +27 -0
  16. package/dist/component-names.d.ts +1 -1
  17. package/dist/components/LpAddressInput.vue.js +1 -1
  18. package/dist/components/LpAppShell.vue.d.ts +6 -6
  19. package/dist/components/LpAppShell.vue.js +1 -1
  20. package/dist/components/LpAvatar.vue.d.ts +10 -0
  21. package/dist/components/LpAvatar.vue.js +1 -1
  22. package/dist/components/LpConfirmDialog.vue.d.ts +8 -0
  23. package/dist/components/LpConfirmDialog.vue.js +1 -1
  24. package/dist/components/LpFileTree.vue.js +1 -1
  25. package/dist/components/LpFileTreeNode.vue.js +1 -1
  26. package/dist/components/LpFormField.vue.js +1 -1
  27. package/dist/components/LpInput.vue.d.ts +12 -0
  28. package/dist/components/LpInput.vue.js +1 -1
  29. package/dist/components/LpLink.vue.d.ts +20 -2
  30. package/dist/components/LpLink.vue.js +1 -1
  31. package/dist/components/LpModal.vue.js +1 -1
  32. package/dist/components/LpNotificationBell.vue.js +1 -1
  33. package/dist/components/LpPasswordInput.vue.d.ts +8 -0
  34. package/dist/components/LpPasswordInput.vue.js +1 -1
  35. package/dist/components/LpShift.vue.d.ts +36 -0
  36. package/dist/components/LpShift.vue.js +4 -0
  37. package/dist/components/LpShortcutsDialog.vue.js +1 -1
  38. package/dist/components/LpTextarea.vue.d.ts +5 -0
  39. package/dist/components/LpTextarea.vue.js +1 -1
  40. package/dist/components/LpThemeSwitcher.vue.js +1 -1
  41. package/dist/composables/useShift.d.ts +35 -0
  42. package/dist/composables/useShift.js +112 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.js +48 -44
  45. package/dist/theme/tokens.d.ts +3 -0
  46. package/package.json +1 -1
  47. package/src/component-names.ts +1 -0
  48. package/src/components/LpAppShell.vue +27 -7
  49. package/src/components/LpAvatar.vue +17 -5
  50. package/src/components/LpConfirmDialog.vue +21 -6
  51. package/src/components/LpFileTreeNode.vue +11 -2
  52. package/src/components/LpFormField.vue +19 -2
  53. package/src/components/LpInput.vue +8 -0
  54. package/src/components/LpLink.vue +40 -8
  55. package/src/components/LpModal.vue +20 -128
  56. package/src/components/LpNotificationBell.vue +48 -42
  57. package/src/components/LpPasswordInput.vue +16 -1
  58. package/src/components/LpShift.vue +90 -0
  59. package/src/components/LpTextarea.vue +7 -0
  60. package/src/composables/useShift.ts +236 -0
  61. package/src/index.ts +3 -0
  62. package/src/theme/presets.ts +24 -0
  63. package/src/theme/tokens.ts +6 -0
  64. package/src/tokens/tokens.css +3 -0
@@ -1,11 +1,12 @@
1
- import { defineComponent, computed, useModel, openBlock, createBlock, withCtx, createElementVNode, toDisplayString, createElementBlock, createCommentVNode, Fragment, renderList, resolveDynamicComponent, normalizeClass, createVNode, createTextVNode, mergeModels } from "vue";
2
- import { _ as _sfc_main$7 } from "./LpBadge-BPodVcJa.js";
3
- import { _ as _sfc_main$6 } from "./LpButton-5VXXCjwF.js";
4
- import { _ as _sfc_main$4 } from "./LpContextMenu-D0mzXqA7.js";
5
- import { _ as _sfc_main$2 } from "./LpEmptyState-CrfyRJUG.js";
6
- import { _ as _sfc_main$5 } from "./LpIcon-CCnX5_2j.js";
1
+ import { defineComponent, computed, useModel, openBlock, createBlock, withCtx, createElementVNode, toDisplayString, createElementBlock, createCommentVNode, createVNode, Fragment, renderList, resolveDynamicComponent, normalizeClass, createTextVNode, mergeModels } from "vue";
2
+ import { _ as _sfc_main$8 } from "./LpBadge-BPodVcJa.js";
3
+ import { _ as _sfc_main$7 } from "./LpButton-5VXXCjwF.js";
4
+ import { _ as _sfc_main$5 } from "./LpContextMenu-D0mzXqA7.js";
5
+ import { _ as _sfc_main$3 } from "./LpEmptyState-CrfyRJUG.js";
6
+ import { _ as _sfc_main$6 } from "./LpIcon-CCnX5_2j.js";
7
7
  import { _ as _sfc_main$1 } from "./LpPopover-8268UmlC.js";
8
- import { _ as _sfc_main$3 } from "./LpScrollArea-D8xyKXcF.js";
8
+ import { _ as _sfc_main$4 } from "./LpScrollArea-D8xyKXcF.js";
9
+ import { _ as _sfc_main$2 } from "./LpShift-DXNsauQZ.js";
9
10
  const _hoisted_1 = { class: "flex items-center justify-between gap-2 px-3 py-2.5" };
10
11
  const _hoisted_2 = { class: "text-sm font-semibold" };
11
12
  const _hoisted_3 = {
@@ -134,9 +135,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
134
135
  "panel-class": "w-80 p-0"
135
136
  }, {
136
137
  trigger: withCtx(() => [
137
- createVNode(_sfc_main$4, { items: contextMenu.value }, {
138
+ createVNode(_sfc_main$5, { items: contextMenu.value }, {
138
139
  default: withCtx(() => [
139
- createVNode(_sfc_main$6, {
140
+ createVNode(_sfc_main$7, {
140
141
  variant: "ghost",
141
142
  size: "sm",
142
143
  class: "relative",
@@ -144,11 +145,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
144
145
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)
145
146
  }, {
146
147
  default: withCtx(() => [
147
- createVNode(_sfc_main$5, {
148
+ createVNode(_sfc_main$6, {
148
149
  name: "lucide:bell",
149
150
  size: 18
150
151
  }),
151
- hasUnread.value ? (openBlock(), createBlock(_sfc_main$7, {
152
+ hasUnread.value ? (openBlock(), createBlock(_sfc_main$8, {
152
153
  key: 0,
153
154
  tone: "danger",
154
155
  class: "absolute -right-1 -top-1 min-w-4 justify-center px-1 py-0 text-[10px] leading-4"
@@ -175,65 +176,70 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
175
176
  onClick: _cache[1] || (_cache[1] = ($event) => emit("markAllRead"))
176
177
  }, toDisplayString(l.value.markAllRead), 1)) : createCommentVNode("", true)
177
178
  ]),
178
- __props.loading ? (openBlock(), createElementBlock("div", _hoisted_3, [
179
- (openBlock(), createElementBlock(Fragment, null, renderList(4, (i) => {
180
- return createElementVNode("div", {
181
- key: i,
182
- class: "h-12 animate-pulse rounded-control bg-surface-soft"
183
- });
184
- }), 64))
185
- ])) : !__props.items.length ? (openBlock(), createBlock(_sfc_main$2, {
186
- key: 1,
187
- icon: "lucide:bell-off",
188
- title: l.value.empty,
189
- class: "px-3 py-10"
190
- }, null, 8, ["title"])) : (openBlock(), createBlock(_sfc_main$3, {
191
- key: 2,
192
- class: "max-h-96",
193
- "content-class": "flex flex-col gap-0.5 px-2 pb-2"
194
- }, {
179
+ createVNode(_sfc_main$2, { axis: "height" }, {
195
180
  default: withCtx(() => [
196
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
197
- return openBlock(), createBlock(_sfc_main$4, {
198
- key: item.id,
199
- items: rowMenu(item)
200
- }, {
201
- default: withCtx(() => [
202
- (openBlock(), createBlock(resolveDynamicComponent(item.link ? "a" : "button"), {
203
- href: item.link || void 0,
204
- type: item.link ? void 0 : "button",
205
- class: normalizeClass(["group/notif flex w-full items-start gap-2.5 rounded-control px-2 py-2 text-left outline-none transition-colors hover:bg-white/[0.05] focus-visible:bg-white/[0.05]", item.read ? "" : "bg-brand-soft/35"]),
206
- onClick: ($event) => onSelect(item)
181
+ __props.loading ? (openBlock(), createElementBlock("div", _hoisted_3, [
182
+ (openBlock(), createElementBlock(Fragment, null, renderList(4, (i) => {
183
+ return createElementVNode("div", {
184
+ key: i,
185
+ class: "h-12 animate-pulse rounded-control bg-surface-soft"
186
+ });
187
+ }), 64))
188
+ ])) : !__props.items.length ? (openBlock(), createBlock(_sfc_main$3, {
189
+ key: 1,
190
+ icon: "lucide:bell-off",
191
+ title: l.value.empty,
192
+ class: "px-3 py-10"
193
+ }, null, 8, ["title"])) : (openBlock(), createBlock(_sfc_main$4, {
194
+ key: 2,
195
+ class: "max-h-96",
196
+ "content-class": "flex flex-col gap-0.5 px-2 pb-2"
197
+ }, {
198
+ default: withCtx(() => [
199
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
200
+ return openBlock(), createBlock(_sfc_main$5, {
201
+ key: item.id,
202
+ items: rowMenu(item)
207
203
  }, {
208
204
  default: withCtx(() => [
209
- createElementVNode("span", {
210
- class: normalizeClass(["grid size-7 shrink-0 place-items-center rounded-control", item.read ? "bg-surface-soft text-muted" : "bg-brand-soft text-brand"])
211
- }, [
212
- createVNode(_sfc_main$5, {
213
- name: item.icon || "lucide:bell",
214
- size: 15
215
- }, null, 8, ["name"])
216
- ], 2),
217
- createElementVNode("span", _hoisted_4, [
218
- createElementVNode("span", _hoisted_5, [
205
+ (openBlock(), createBlock(resolveDynamicComponent(item.link ? "a" : "button"), {
206
+ href: item.link || void 0,
207
+ type: item.link ? void 0 : "button",
208
+ class: normalizeClass(["group/notif flex w-full items-start gap-2.5 rounded-control px-2 py-2 text-left outline-none transition-colors hover:bg-white/[0.05] focus-visible:bg-white/[0.05]", item.read ? "" : "bg-brand-soft/35"]),
209
+ onClick: ($event) => onSelect(item)
210
+ }, {
211
+ default: withCtx(() => [
219
212
  createElementVNode("span", {
220
- class: normalizeClass(["truncate text-sm font-medium", item.read ? "text-muted-strong" : "text-ink"])
221
- }, toDisplayString(item.title), 3),
222
- !item.read ? (openBlock(), createElementBlock("span", _hoisted_6)) : createCommentVNode("", true)
213
+ class: normalizeClass(["grid size-7 shrink-0 place-items-center rounded-control", item.read ? "bg-surface-soft text-muted" : "bg-brand-soft text-brand"])
214
+ }, [
215
+ createVNode(_sfc_main$6, {
216
+ name: item.icon || "lucide:bell",
217
+ size: 15
218
+ }, null, 8, ["name"])
219
+ ], 2),
220
+ createElementVNode("span", _hoisted_4, [
221
+ createElementVNode("span", _hoisted_5, [
222
+ createElementVNode("span", {
223
+ class: normalizeClass(["truncate text-sm font-medium", item.read ? "text-muted-strong" : "text-ink"])
224
+ }, toDisplayString(item.title), 3),
225
+ !item.read ? (openBlock(), createElementBlock("span", _hoisted_6)) : createCommentVNode("", true)
226
+ ]),
227
+ item.body ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(item.body), 1)) : createCommentVNode("", true),
228
+ item.createdAt ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(timeAgo(item.createdAt)), 1)) : createCommentVNode("", true)
229
+ ])
223
230
  ]),
224
- item.body ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(item.body), 1)) : createCommentVNode("", true),
225
- item.createdAt ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(timeAgo(item.createdAt)), 1)) : createCommentVNode("", true)
226
- ])
231
+ _: 2
232
+ }, 1032, ["href", "type", "class", "onClick"]))
227
233
  ]),
228
234
  _: 2
229
- }, 1032, ["href", "type", "class", "onClick"]))
230
- ]),
231
- _: 2
232
- }, 1032, ["items"]);
233
- }), 128))
235
+ }, 1032, ["items"]);
236
+ }), 128))
237
+ ]),
238
+ _: 1
239
+ }))
234
240
  ]),
235
241
  _: 1
236
- }))
242
+ })
237
243
  ]),
238
244
  _: 1
239
245
  }, 8, ["open"]);
@@ -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-BkomKdqQ.js";
3
+ import { _ as _sfc_main$1 } from "./LpInput-jwqXlAy0.js";
4
4
  const _hoisted_1 = ["aria-label"];
5
5
  const __default__ = { inheritAttrs: false };
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -10,7 +10,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
10
10
  modelValue: {},
11
11
  placeholder: {},
12
12
  invalid: { type: Boolean },
13
- disabled: { type: Boolean }
13
+ disabled: { type: Boolean },
14
+ label: {},
15
+ hint: {},
16
+ error: {},
17
+ required: { type: Boolean }
14
18
  },
15
19
  emits: ["update:modelValue"],
16
20
  setup(__props, { expose: __expose }) {
@@ -30,6 +34,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
30
34
  placeholder: __props.placeholder,
31
35
  invalid: __props.invalid,
32
36
  disabled: __props.disabled,
37
+ label: __props.label,
38
+ hint: __props.hint,
39
+ error: __props.error,
40
+ required: __props.required,
33
41
  "onUpdate:modelValue": _cache[1] || (_cache[1] = (v) => _ctx.$emit("update:modelValue", v))
34
42
  }, createSlots({
35
43
  trailing: withCtx(() => [
@@ -55,7 +63,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
55
63
  ]),
56
64
  key: "0"
57
65
  } : void 0
58
- ]), 1032, ["model-value", "type", "placeholder", "invalid", "disabled"]);
66
+ ]), 1032, ["model-value", "type", "placeholder", "invalid", "disabled", "label", "hint", "error", "required"]);
59
67
  };
60
68
  }
61
69
  });
@@ -0,0 +1,40 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from "vue";
2
+ import { useShift } from "../composables/useShift.js";
3
+ const _sfc_main = /* @__PURE__ */ defineComponent({
4
+ __name: "LpShift",
5
+ props: {
6
+ axis: { default: "height" },
7
+ duration: {},
8
+ disabled: { type: Boolean, default: false }
9
+ },
10
+ setup(__props, { expose: __expose }) {
11
+ const props = __props;
12
+ const { el, tweening, resizing } = useShift({
13
+ axis: () => props.axis,
14
+ duration: () => props.duration,
15
+ enabled: () => !props.disabled
16
+ });
17
+ const TRANSITION_CLASS = {
18
+ height: "transition-[height]",
19
+ width: "transition-[width]",
20
+ both: "transition-[height,width]"
21
+ };
22
+ const transitionClass = computed(() => TRANSITION_CLASS[props.axis]);
23
+ __expose({ resizing });
24
+ return (_ctx, _cache) => {
25
+ return openBlock(), createElementBlock("div", {
26
+ ref_key: "el",
27
+ ref: el,
28
+ class: normalizeClass([
29
+ unref(tweening) && !__props.disabled ? `${transitionClass.value} duration-fast ease-[var(--ease-emphasized)] motion-reduce:transition-none` : "",
30
+ unref(resizing) ? "overflow-hidden" : ""
31
+ ])
32
+ }, [
33
+ renderSlot(_ctx.$slots, "default", { resizing: unref(resizing) })
34
+ ], 2);
35
+ };
36
+ }
37
+ });
38
+ export {
39
+ _sfc_main as _
40
+ };
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, openBlock, createBlock, resolveDynamicComponent, normalizeClass, withCtx, createElementVNode } from "vue";
2
- import { _ as _sfc_main$1 } from "./LpFormField-Bn-ZwC6z.js";
3
- const _hoisted_1 = ["value", "placeholder", "rows", "disabled"];
2
+ import { _ as _sfc_main$1 } from "./LpFormField-CesaPWPO.js";
3
+ const _hoisted_1 = ["value", "placeholder", "rows", "disabled", "required"];
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
5
5
  __name: "LpTextarea",
6
6
  props: {
@@ -11,7 +11,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
11
11
  disabled: { type: Boolean },
12
12
  label: {},
13
13
  hint: {},
14
- error: {}
14
+ error: {},
15
+ required: { type: Boolean }
15
16
  },
16
17
  emits: ["update:modelValue"],
17
18
  setup(__props) {
@@ -22,6 +23,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
22
23
  label: hasField.value ? __props.label : void 0,
23
24
  hint: hasField.value ? __props.hint : void 0,
24
25
  error: hasField.value ? __props.error : void 0,
26
+ required: hasField.value ? __props.required : void 0,
25
27
  class: normalizeClass(hasField.value ? void 0 : "contents")
26
28
  }, {
27
29
  default: withCtx(() => [
@@ -30,12 +32,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
30
32
  placeholder: __props.placeholder,
31
33
  rows: __props.rows ?? 4,
32
34
  disabled: __props.disabled,
35
+ required: __props.required || void 0,
33
36
  class: normalizeClass(["w-full resize-y rounded-control border bg-surface-soft px-3 py-2 text-sm text-ink outline-none transition-colors duration-[var(--duration-fast)] placeholder:text-muted focus:border-brand focus:ring-2 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-55", __props.invalid || __props.error ? "border-danger focus:border-danger focus:ring-danger-soft" : "border-line"]),
34
37
  onInput: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event.target.value))
35
38
  }, null, 42, _hoisted_1)
36
39
  ]),
37
40
  _: 1
38
- }, 8, ["label", "hint", "error", "class"]);
41
+ }, 8, ["label", "hint", "error", "required", "class"]);
39
42
  };
40
43
  }
41
44
  });
@@ -23,7 +23,10 @@ const dark = {
23
23
  brandSoft: "rgba(0, 188, 255, 0.16)",
24
24
  action: "#39e58c",
25
25
  actionHover: "#4dffa1",
26
+ actionSoft: "rgba(57, 229, 140, 0.14)",
26
27
  accent: "#f0b35a",
28
+ accentHover: "#f2bf74",
29
+ accentSoft: "rgba(240, 179, 90, 0.14)",
27
30
  danger: "#ff6f6f",
28
31
  dangerHover: "#ff8585",
29
32
  dangerSoft: "rgba(255, 111, 111, 0.14)",
@@ -51,7 +54,10 @@ const light = {
51
54
  brandSoft: "rgba(0, 134, 199, 0.12)",
52
55
  action: "#1f9d5f",
53
56
  actionHover: "#23b06b",
57
+ actionSoft: "rgba(31, 157, 95, 0.12)",
54
58
  accent: "#aa6f1d",
59
+ accentHover: "#b88641",
60
+ accentSoft: "rgba(170, 111, 29, 0.12)",
55
61
  danger: "#c2333b",
56
62
  dangerHover: "#d23b44",
57
63
  dangerSoft: "rgba(194, 51, 59, 0.12)",
@@ -79,7 +85,10 @@ const lime = {
79
85
  brandSoft: "rgba(196, 240, 66, 0.14)",
80
86
  action: "#5fd97a",
81
87
  actionHover: "#74e88d",
88
+ actionSoft: "rgba(95, 217, 122, 0.14)",
82
89
  accent: "#ffb84d",
90
+ accentHover: "#ffc369",
91
+ accentSoft: "rgba(255, 184, 77, 0.14)",
83
92
  danger: "#ff6f6f",
84
93
  dangerHover: "#ff8585",
85
94
  dangerSoft: "rgba(255, 111, 111, 0.14)",
@@ -120,7 +129,10 @@ const leavepulse = {
120
129
  brandSoft: "rgba(0, 188, 255, 0.2)",
121
130
  action: "#44c2ad",
122
131
  actionHover: "#56d3be",
132
+ actionSoft: "rgba(68, 194, 173, 0.14)",
123
133
  accent: "#d36a2c",
134
+ accentHover: "#da824e",
135
+ accentSoft: "rgba(211, 106, 44, 0.14)",
124
136
  danger: "#f87171",
125
137
  dangerHover: "#fca5a5",
126
138
  dangerSoft: "rgba(248, 113, 113, 0.14)",
@@ -152,7 +164,10 @@ const rose = {
152
164
  brandSoft: "rgba(251, 113, 133, 0.14)",
153
165
  action: "#34d399",
154
166
  actionHover: "#4adeaa",
167
+ actionSoft: "rgba(52, 211, 153, 0.14)",
155
168
  accent: "#fbbf24",
169
+ accentHover: "#fcc947",
170
+ accentSoft: "rgba(251, 191, 36, 0.14)",
156
171
  danger: "#ef4444",
157
172
  dangerHover: "#f56565",
158
173
  dangerSoft: "rgba(239, 68, 68, 0.14)",
@@ -180,7 +195,10 @@ const amber = {
180
195
  brandSoft: "rgba(245, 158, 11, 0.14)",
181
196
  action: "#4ade80",
182
197
  actionHover: "#5cea90",
198
+ actionSoft: "rgba(74, 222, 128, 0.14)",
183
199
  accent: "#38bdf8",
200
+ accentHover: "#58c8f9",
201
+ accentSoft: "rgba(56, 189, 248, 0.14)",
184
202
  danger: "#f87171",
185
203
  dangerHover: "#fa8a8a",
186
204
  dangerSoft: "rgba(248, 113, 113, 0.14)",
@@ -208,7 +226,10 @@ const violet = {
208
226
  brandSoft: "rgba(167, 139, 250, 0.14)",
209
227
  action: "#34d399",
210
228
  actionHover: "#4adeaa",
229
+ actionSoft: "rgba(52, 211, 153, 0.14)",
211
230
  accent: "#fbbf24",
231
+ accentHover: "#fcc947",
232
+ accentSoft: "rgba(251, 191, 36, 0.14)",
212
233
  danger: "#f87171",
213
234
  dangerHover: "#fa8a8a",
214
235
  dangerSoft: "rgba(248, 113, 113, 0.14)",
@@ -236,7 +257,10 @@ const nord = {
236
257
  brandSoft: "rgba(136, 192, 208, 0.16)",
237
258
  action: "#a3be8c",
238
259
  actionHover: "#b3cb9f",
260
+ actionSoft: "rgba(163, 190, 140, 0.16)",
239
261
  accent: "#ebcb8b",
262
+ accentHover: "#eed39e",
263
+ accentSoft: "rgba(235, 203, 139, 0.16)",
240
264
  danger: "#bf616a",
241
265
  dangerHover: "#cb727b",
242
266
  dangerSoft: "rgba(191, 97, 106, 0.16)",
@@ -275,7 +299,10 @@ const COLOR_VARS = {
275
299
  brandSoft: "--color-brand-soft",
276
300
  action: "--color-action",
277
301
  actionHover: "--color-action-hover",
302
+ actionSoft: "--color-action-soft",
278
303
  accent: "--color-accent",
304
+ accentHover: "--color-accent-hover",
305
+ accentSoft: "--color-accent-soft",
279
306
  danger: "--color-danger",
280
307
  dangerHover: "--color-danger-hover",
281
308
  dangerSoft: "--color-danger-soft",
@@ -1 +1 @@
1
- export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LayoutNode", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpCheckbox", "LpCodeBlock", "LpCommandPalette", "LpConfirmDialog", "LpContextMenu", "LpDatePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpEmptyState", "LpFileTree", "LpFileTreeNode", "LpFormField", "LpIcon", "LpInfraNode", "LpInput", "LpLaneNode", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpModal", "LpNotificationBell", "LpNumberField", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpScrollArea", "LpSegmented", "LpSelect", "LpServiceNode", "LpShortcutsDialog", "LpSidebar", "LpSidebarNav", "LpSkeleton", "LpSlider", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTextarea", "LpThemeSwitcher", "LpTilt", "LpToaster", "LpTooltip", "LpTopologyCanvas", "LpUptimeBar", "LpWaypointEdge"];
1
+ export declare const COMPONENT_NAMES: readonly ["LayoutCanvas", "LayoutNode", "LpAddressInput", "LpAlert", "LpAppShell", "LpAutocomplete", "LpAvatar", "LpBadge", "LpBreadcrumbs", "LpButton", "LpCalendar", "LpCard", "LpCheckbox", "LpCodeBlock", "LpCommandPalette", "LpConfirmDialog", "LpContextMenu", "LpDatePicker", "LpDisclosure", "LpDivider", "LpDrawer", "LpDropdownMenu", "LpEmptyState", "LpFileTree", "LpFileTreeNode", "LpFormField", "LpIcon", "LpInfraNode", "LpInput", "LpLaneNode", "LpLightbox", "LpLink", "LpLogViewer", "LpMapPicker", "LpModal", "LpNotificationBell", "LpNumberField", "LpOtpInput", "LpPagination", "LpPasswordInput", "LpPhoneInput", "LpPopover", "LpProgress", "LpRadio", "LpRadioGroup", "LpScrollArea", "LpSegmented", "LpSelect", "LpServiceNode", "LpShift", "LpShortcutsDialog", "LpSidebar", "LpSidebarNav", "LpSkeleton", "LpSlider", "LpStat", "LpStepper", "LpSwitch", "LpTable", "LpTableOfContents", "LpTabs", "LpTextarea", "LpThemeSwitcher", "LpTilt", "LpToaster", "LpTooltip", "LpTopologyCanvas", "LpUptimeBar", "LpWaypointEdge"];
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAddressInput-CxKwIG6T.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAddressInput-BTqnUXZG.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -38,7 +38,7 @@ type __VLS_Props = {
38
38
  declare var __VLS_12: {}, __VLS_15: {}, __VLS_18: {}, __VLS_21: {
39
39
  item: SidebarItem;
40
40
  active: boolean;
41
- }, __VLS_36: {}, __VLS_38: {}, __VLS_40: {}, __VLS_48: {}, __VLS_50: {};
41
+ }, __VLS_42: {}, __VLS_50: {}, __VLS_52: {}, __VLS_60: {}, __VLS_62: {};
42
42
  type __VLS_Slots = {} & {
43
43
  logo?: (props: typeof __VLS_12) => any;
44
44
  } & {
@@ -48,15 +48,15 @@ type __VLS_Slots = {} & {
48
48
  } & {
49
49
  'sidebar-item'?: (props: typeof __VLS_21) => any;
50
50
  } & {
51
- 'header-title'?: (props: typeof __VLS_36) => any;
51
+ 'header-title'?: (props: typeof __VLS_42) => any;
52
52
  } & {
53
- 'header-actions'?: (props: typeof __VLS_38) => any;
53
+ 'header-actions'?: (props: typeof __VLS_50) => any;
54
54
  } & {
55
- default?: (props: typeof __VLS_40) => any;
55
+ default?: (props: typeof __VLS_52) => any;
56
56
  } & {
57
- default?: (props: typeof __VLS_48) => any;
57
+ default?: (props: typeof __VLS_60) => any;
58
58
  } & {
59
- overlays?: (props: typeof __VLS_50) => any;
59
+ overlays?: (props: typeof __VLS_62) => any;
60
60
  };
61
61
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
62
62
  openDrawer: () => void;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAppShell-D8CAP9oF.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAppShell-CaQYQKZV.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -6,6 +6,10 @@ declare const __VLS_export: import('vue').DefineComponent<{
6
6
  alt?: string;
7
7
  fallback?: string;
8
8
  size?: "sm" | "md" | "lg" | undefined;
9
+ /** Silhouette: circle for people, soft/square for servers and projects. */
10
+ shape?: "circle" | "square" | "soft" | undefined;
11
+ /** Draws a hairline ring, for avatars laid over imagery or other avatars. */
12
+ ring?: boolean;
9
13
  /** Right-click menu (e.g. account quick actions). Consumer-supplied. */
10
14
  menuItems?: ContextMenuItemDef[];
11
15
  }, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{
@@ -13,8 +17,14 @@ declare const __VLS_export: import('vue').DefineComponent<{
13
17
  alt?: string;
14
18
  fallback?: string;
15
19
  size?: "sm" | "md" | "lg" | undefined;
20
+ /** Silhouette: circle for people, soft/square for servers and projects. */
21
+ shape?: "circle" | "square" | "soft" | undefined;
22
+ /** Draws a hairline ring, for avatars laid over imagery or other avatars. */
23
+ ring?: boolean;
16
24
  /** Right-click menu (e.g. account quick actions). Consumer-supplied. */
17
25
  menuItems?: ContextMenuItemDef[];
18
26
  }> & Readonly<{}>, {
19
27
  size: "sm" | "md" | "lg";
28
+ shape: "circle" | "square" | "soft";
29
+ ring: boolean;
20
30
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpAvatar-B1Ez0ZAx.js";
1
+ import { _ as _sfc_main } from "../chunks/LpAvatar-D-jHoHR7.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -5,6 +5,13 @@ type __VLS_Props = {
5
5
  confirmLabel?: string;
6
6
  cancelLabel?: string;
7
7
  danger?: boolean;
8
+ /**
9
+ * The confirm action is in flight: the button disables and swaps to
10
+ * `loadingLabel`, and confirming no longer closes the dialog — the owner
11
+ * closes it once the work settles, so a failure can stay on screen.
12
+ */
13
+ loading?: boolean;
14
+ loadingLabel?: string;
8
15
  };
9
16
  declare var __VLS_10: {};
10
17
  type __VLS_Slots = {} & {
@@ -21,6 +28,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
21
28
  }>, {
22
29
  confirmLabel: string;
23
30
  cancelLabel: string;
31
+ loadingLabel: string;
24
32
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
25
33
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
26
34
  declare const _default: typeof __VLS_export;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpConfirmDialog-CmgeAdCh.js";
1
+ import { _ as _sfc_main } from "../chunks/LpConfirmDialog-CObRah9c.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTree-Cw50eG_y.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTree-CN0IOIY7.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFileTreeNode-DFg4PhOK.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFileTreeNode-D7WgUPcJ.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpFormField-Bn-ZwC6z.js";
1
+ import { _ as _sfc_main } from "../chunks/LpFormField-CesaPWPO.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -11,6 +11,12 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
11
11
  hint?: string;
12
12
  error?: string;
13
13
  icon?: string;
14
+ /**
15
+ * Marks the label with the required indicator. The attribute still reaches
16
+ * the underlying <input> for native validation; this only makes the field
17
+ * read as required.
18
+ */
19
+ required?: boolean;
14
20
  /**
15
21
  * RegExp/string the whole value must match to be valid. Validation only —
16
22
  * never blocks typing; a non-matching non-empty value shows the invalid
@@ -40,6 +46,12 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
40
46
  hint?: string;
41
47
  error?: string;
42
48
  icon?: string;
49
+ /**
50
+ * Marks the label with the required indicator. The attribute still reaches
51
+ * the underlying <input> for native validation; this only makes the field
52
+ * read as required.
53
+ */
54
+ required?: boolean;
43
55
  /**
44
56
  * RegExp/string the whole value must match to be valid. Validation only —
45
57
  * never blocks typing; a non-matching non-empty value shows the invalid
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpInput-BkomKdqQ.js";
1
+ import { _ as _sfc_main } from "../chunks/LpInput-jwqXlAy0.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,7 +1,24 @@
1
+ import { Component } from 'vue';
1
2
  type __VLS_Props = {
2
3
  href?: string;
3
4
  external?: boolean;
5
+ /** Shorthand for `tone="muted"`. */
4
6
  muted?: boolean;
7
+ /**
8
+ * "brand" — the accent link colour (default).
9
+ * "ink" — inherits body text colour; for links that sit inside prose or
10
+ * chrome where an accent would shout (breadcrumbs, footers, nav).
11
+ * "muted" / "soft" — progressively quieter, both resolving to ink on hover.
12
+ */
13
+ tone?: "brand" | "ink" | "muted" | "soft";
14
+ /**
15
+ * Root element/component. Defaults to a native <a>. Pass a router link
16
+ * component (e.g. NuxtLink or RouterLink) to keep client-side navigation;
17
+ * the kit stays DOM-agnostic, the consumer supplies the link component.
18
+ * Router links take their destination through their own prop (`to`), which
19
+ * falls through as a plain attribute.
20
+ */
21
+ as?: string | Component;
5
22
  /**
6
23
  * "default" — plain hover underline.
7
24
  * "reveal" — an underline bar that grows in from the left on hover
@@ -10,11 +27,12 @@ type __VLS_Props = {
10
27
  */
11
28
  variant?: "default" | "reveal";
12
29
  };
13
- declare var __VLS_1: {};
30
+ declare var __VLS_8: {};
14
31
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_1) => any;
32
+ default?: (props: typeof __VLS_8) => any;
16
33
  };
17
34
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
35
+ as: string | Component;
18
36
  variant: "default" | "reveal";
19
37
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
20
38
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpLink-DHwOEp4e.js";
1
+ import { _ as _sfc_main } from "../chunks/LpLink-DU9kkKGW.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpModal-CNNSf5pv.js";
1
+ import { _ as _sfc_main } from "../chunks/LpModal-D_o-56To.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as _sfc_main } from "../chunks/LpNotificationBell-DWDEkmdA.js";
1
+ import { _ as _sfc_main } from "../chunks/LpNotificationBell-a08cl0yY.js";
2
2
  export {
3
3
  _sfc_main as default
4
4
  };
@@ -5,6 +5,10 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
5
5
  placeholder?: string;
6
6
  invalid?: boolean;
7
7
  disabled?: boolean;
8
+ label?: string;
9
+ hint?: string;
10
+ error?: string;
11
+ required?: boolean;
8
12
  }, {
9
13
  focus: (options?: FocusOptions) => void | undefined;
10
14
  blur: () => void | undefined;
@@ -16,6 +20,10 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<{
16
20
  placeholder?: string;
17
21
  invalid?: boolean;
18
22
  disabled?: boolean;
23
+ label?: string;
24
+ hint?: string;
25
+ error?: string;
26
+ required?: boolean;
19
27
  }> & Readonly<{
20
28
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
21
29
  }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {