@livestorm/ui-vue 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,37 +11,43 @@
11
11
  A modern, strongly-typed Vue 3 component library for Livestorm’s design system.
12
12
  </p>
13
13
 
14
+ <p align="center">
15
+ <a href="https://main--65bcc25b1bd5ef5d8b1a8505.chromatic.com/"><strong>Browse the components →</strong></a>
16
+ </p>
14
17
 
15
18
  ## Table of Contents
16
19
 
17
- - [Introduction](#introduction)
18
- - [Usage](#usage)
19
- - [Importing Components](#importing-components)
20
- - [Storybook](#storybook)
21
- - [Testing](#testing)
22
- - [CI/CD](#cicd)
20
+ - [Requirements](#requirements)
21
+ - [Installation](#installation)
22
+ - [Tailwind CSS setup](#tailwind-css-setup)
23
+ - [App setup](#app-setup)
24
+ - [Using components](#using-components)
25
+ - [Entry points](#entry-points)
23
26
  - [Contributing](#contributing)
24
- - [License](#license)
25
27
 
26
28
  ---
27
29
 
28
- ## Introduction
29
-
30
- `ui-vue` provides a suite of reusable, accessible, and well-tested Vue 3 components, following Livestorm’s design system. It is built with Vue.js, TypeScript, Vitest, and Storybook.
30
+ ## Requirements
31
31
 
32
- ## Usage
32
+ - **Vue 3.5+**, a peer dependency provided by your app.
33
+ - **vue-router 5+**, an optional peer dependency. Everything works without it — install it only if you use one of these router-aware features:
34
+ - the `to` prop on `UiButton`, `UiListItem`, `UiActionBarItem` and `UiSideMenu` items, which renders a `<router-link>` (each also accepts a plain `href` link instead);
35
+ - the `confirmTo` action of toasts (`confirmHref` is the plain-link alternative);
36
+ - the logo link of `UiPageHeader` when `showLogo` is enabled;
37
+ - the `@livestorm/ui-vue/utils` entry point: its `useRouteQueryModel` helper is built on the router, so importing this entry requires vue-router to be installed.
38
+ - **Tailwind CSS 4**, since components are styled with Tailwind utility classes.
33
39
 
34
- This package is used as a workspace dependency inside the `@livestorm/entropy` monorepo, and is also published to npm as [`@livestorm/ui-vue`](https://www.npmjs.com/package/@livestorm/ui-vue) for other Livestorm projects.
40
+ Installing the package also pulls in `@livestorm/ui-tokens` (design tokens) and `@livestorm/ui-icons` (icon utilities).
35
41
 
36
- ### Installation (outside the monorepo)
42
+ ## Installation
37
43
 
38
44
  ```bash
39
45
  pnpm add @livestorm/ui-vue
40
46
  ```
41
47
 
42
- This pulls in `@livestorm/ui-tokens` (design tokens) and `@livestorm/ui-icons` (icon utilities) as dependencies. `vue` (and `vue-router`, if you use router-aware components) are peer dependencies you provide.
48
+ ## Tailwind CSS setup
43
49
 
44
- The library is Tailwind CSS 4 based: components use Tailwind utility classes (including `i-ls-*` icon classes), so your app must run Tailwind and scan the library for classes. In your Tailwind entry CSS:
50
+ Components use Tailwind utility classes (including the `i-ls-*` icon classes), so your app needs to run Tailwind and scan the library. In your Tailwind entry CSS:
45
51
 
46
52
  ```css
47
53
  @import "tailwindcss";
@@ -58,52 +64,9 @@ Then import the library base styles once (body defaults, transitions, animations
58
64
  import '@livestorm/ui-vue/style'
59
65
  ```
60
66
 
61
- The published package ships prebuilt ES modules (`dist/`), so no special bundler configuration is needed. The source is also included under `src/` if your Vite setup prefers compiling the components itself.
62
-
63
- ### Local Import
64
-
65
- ```ts
66
- import { UiButton } from '@livestorm/ui-vue'
67
-
68
- export default {
69
- components: { UiButton }
70
- }
71
- ```
72
-
73
- ### Example
74
-
75
- ```vue
76
- <template>
77
- <UiButton variant="primary">Click me</UiButton>
78
- </template>
79
- ```
80
-
81
- ### Importing Components
67
+ ## App setup
82
68
 
83
- All components are available as named exports. Example:
84
-
85
- ```ts
86
- import { UiInput, UiInputSelect } from '@livestorm/ui-vue'
87
- ```
88
-
89
- Or import a specific component directly:
90
-
91
- ```ts
92
- import UiDialog from '@livestorm/ui-vue/src/components/UiDialog'
93
- ```
94
-
95
- To register every component globally under its own name (`<UiButton>`, `<UiTag>`, …):
96
-
97
- ```ts
98
- import { registerComponents } from '@livestorm/ui-vue/components-vite'
99
-
100
- registerComponents(app) // registers UiButton, UiTag, ...
101
- registerComponents(app, 'Ls') // optional custom prefix: LsButton, LsTag, ...
102
- ```
103
-
104
- ### App setup
105
-
106
- No runtime plugin is required: beyond the Tailwind CSS setup above, create the app and use components.
69
+ No runtime plugin is required. Create your app, import components, done:
107
70
 
108
71
  ```ts
109
72
  import { createApp } from 'vue'
@@ -118,9 +81,12 @@ registerComponents(app) // optional: register all Ui* components globally
118
81
  app.mount('#app')
119
82
  ```
120
83
 
121
- Layout components (`UiPage`, the toast layout) read the viewport from a shared responsive singleton that initializes itself on first use. Installing the `@livestorm/ui-vue/responsive` plugin is optional: do it only to customize the breakpoint flags (`mobile`, `tablet`, ...) or to expose `$responsive` to your own templates.
84
+ Server-side rendering works out of the box: pages render with a desktop layout on the server, then adapt to the real screen size as soon as they load in the browser. No configuration and no hydration warnings. Overlay components (dialogs, dropdowns, menus, popovers, tooltips) render through client-only teleports and hydrate with no extra setup.
85
+
86
+ <details>
87
+ <summary>Optional: customizing the responsive breakpoints</summary>
122
88
 
123
- Server-side rendering works out of the box: pages render with a desktop layout on the server, then adapt to the real screen size as soon as they load in the browser. No configuration and no hydration warnings.
89
+ Layout components read the viewport from a shared helper with sensible defaults. Install the responsive plugin only if you want to override the breakpoint flags, or read `$responsive` in your own templates:
124
90
 
125
91
  ```ts
126
92
  import Responsive from '@livestorm/ui-vue/responsive'
@@ -132,54 +98,46 @@ app.use(Responsive, {
132
98
  })
133
99
  ```
134
100
 
135
- The overlay components (dialogs, dropdowns, menus, popovers, tooltips) render through client-only teleports; under SSR they hydrate on the client with no extra setup.
101
+ </details>
136
102
 
137
- ### Storybook
103
+ ## Using components
138
104
 
139
- Interactive documentation and playground for all components.
140
-
141
- ```bash
142
- # From the ui-vue package directory
143
- pnpm dev:storybook
105
+ Every component is a named export:
144
106
 
107
+ ```ts
108
+ import { UiButton, UiTextField, UiInputSelect } from '@livestorm/ui-vue'
145
109
  ```
146
110
 
147
- Visit http://localhost:6006 after starting.
148
-
149
- ## Testing
111
+ ```vue
112
+ <template>
113
+ <UiButton variant="cta" color="primary" icon="i-ls-check">
114
+ Click me
115
+ </UiButton>
116
+ </template>
117
+ ```
150
118
 
151
- We use Vitest for unit/component tests.
119
+ Props, variants and events for each component are documented in the [hosted Storybook](https://main--65bcc25b1bd5ef5d8b1a8505.chromatic.com/), where every story is interactive. TypeScript definitions ship with the package, so editors autocomplete props and catch mistakes.
152
120
 
153
- ```bash
154
- # Run all tests just one time
155
- pnpm test:vitest
156
- # or watch mode (preferred for debugging)
157
- pnpm test:vitest:watch
158
- # regenerate snapshots
159
- pnpm test:vitest:updateSnapshots
121
+ If you registered components globally with `registerComponents(app)`, you can use `<UiButton>` in any template without importing it. A custom prefix is supported too:
160
122
 
123
+ ```ts
124
+ registerComponents(app, 'Ls') // <LsButton>, <LsTextField>, ...
161
125
  ```
162
126
 
163
- > Minimum 95% coverage required.
164
- > See CONTRIBUTING.md for writing good tests.
165
-
166
- ## CI/CD
167
-
168
- #### Testing (ui-vue-test.yml):
169
- - Runs automatically on every pull request that modifies packages/ui-vue.
170
- - Installs dependencies, builds required packages, and runs all Vitest tests with coverage.
171
- - Posts test results as a GitHub Check, including whether tests passed or failed.
172
- - Ensures code quality before any code is merged.
127
+ ## Entry points
173
128
 
174
- #### Deployment (ui-vue-deploy.yml):
175
- - Triggers on pushes to main or when a pull request affecting ui-vue has the deploy-storybook label.
176
- - For PRs, checks if the label `deploy-storybook` is present. If not, deployment is skipped.
177
- - Verifies that all tests have passed before proceeding with deployment.
178
- - If conditions are met, builds and deploys the Storybook for ui-vue (typically to Chromatic or a static host).
179
- - Ensures only tested and reviewed code is deployed and that Storybook previews are available for review.
129
+ | Import | Contents |
130
+ | --- | --- |
131
+ | `@livestorm/ui-vue` | All components and utilities |
132
+ | `@livestorm/ui-vue/style` | Base stylesheet (import once) |
133
+ | `@livestorm/ui-vue/components-vite` | `registerComponents` for global registration |
134
+ | `@livestorm/ui-vue/integrations` | Toast helpers (`openToast`, ...) |
135
+ | `@livestorm/ui-vue/layouts` | Layout components such as the toast container |
136
+ | `@livestorm/ui-vue/utils` | Helpers (`useCopyToClipboard`, `useRouteQueryModel`, ...) — the one entry that requires `vue-router` |
137
+ | `@livestorm/ui-vue/responsive` | Optional responsive plugin |
180
138
 
181
- Every code change is tested automatically. Storybook deployments for review are gated by a label and require passing tests, ensuring high confidence in merged and released code.
139
+ The package ships prebuilt ES modules, so no special bundler configuration is needed. The original sources are included as well, if your setup prefers to compile the components itself.
182
140
 
183
141
  ## Contributing
184
142
 
185
- See CONTRIBUTING.md for guidelines, architecture, and best practices.
143
+ This package lives in Livestorm's [entropy](https://github.com/livestorm/entropy) monorepo, under `packages/ui-vue`. See that directory's `CONTRIBUTING.md` for architecture, conventions and the release process.
@@ -8,11 +8,10 @@ import Sa from "embla-carousel-autoplay";
8
8
  import { _ as de, b as Xe, c as Qe, a as Je, f as Ba } from "./a11y--y7uaY4j.mjs";
9
9
  import { BREAKPOINT_LG as Ma } from "./breakpoints.mjs";
10
10
  import { useResponsive as _a } from "./responsive.mjs";
11
- import { u as La } from "./useThemeAndModes-DY5SDC0a.mjs";
11
+ import { u as La } from "./useThemeAndModes-CUK56j0z.mjs";
12
12
  import { RenderSlot as Ia, useSlotsAsComponents as Ta } from "./slot.mjs";
13
13
  import "./bus.mjs";
14
- import "vue-router";
15
- const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label", "aria-orientation"], Os = /* @__PURE__ */ C({
14
+ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label", "aria-orientation"], Ts = /* @__PURE__ */ C({
16
15
  __name: "UiActionBar",
17
16
  props: {
18
17
  orientation: { default: "horizontal" },
@@ -50,7 +49,7 @@ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label",
50
49
  x(i.$slots, "default")
51
50
  ], 14, Oa));
52
51
  }
53
- }), Ua = { class: "whitespace-nowrap" }, Us = /* @__PURE__ */ C({
52
+ }), Ua = { class: "whitespace-nowrap" }, Os = /* @__PURE__ */ C({
54
53
  __name: "UiActionBarItem",
55
54
  props: {
56
55
  icon: { default: void 0 },
@@ -152,7 +151,7 @@ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label",
152
151
  _: 1
153
152
  }, 16, ["aria-label", "aria-pressed", "class"]));
154
153
  }
155
- }), Aa = ["aria-orientation"], As = /* @__PURE__ */ C({
154
+ }), Aa = ["aria-orientation"], Us = /* @__PURE__ */ C({
156
155
  __name: "UiActionBarSeparator",
157
156
  setup(e) {
158
157
  const a = X(Me, null), t = r(() => a?.orientation.value === "vertical");
@@ -164,7 +163,7 @@ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label",
164
163
  class: f(["shrink-0 bg-borders-neutral-light", t.value ? "h-px w-full my-0.5" : "w-px h-5 mx-0.5 self-center"])
165
164
  }, null, 10, Aa));
166
165
  }
167
- }), Va = "https://lottie.host/ba46e3f4-5e79-4762-9c20-405348ee3387/zHDFDAAD5F.lottie", Pa = "https://lottie.host/81c2307c-1cbd-4594-b978-fd5eaf342bf6/4XKfuEedla.lottie", Ea = "https://lottie.host/d1427490-2228-4dc4-94e9-bf73a4851b3f/eAMtMNYScd.lottie", Da = { class: "ui-logo-loader" }, Vs = /* @__PURE__ */ C({
166
+ }), Va = "https://lottie.host/ba46e3f4-5e79-4762-9c20-405348ee3387/zHDFDAAD5F.lottie", Pa = "https://lottie.host/81c2307c-1cbd-4594-b978-fd5eaf342bf6/4XKfuEedla.lottie", Ea = "https://lottie.host/d1427490-2228-4dc4-94e9-bf73a4851b3f/eAMtMNYScd.lottie", Da = { class: "ui-logo-loader" }, As = /* @__PURE__ */ C({
168
167
  __name: "UiAnimatedLogo",
169
168
  props: {
170
169
  animatedLogo: {},
@@ -289,7 +288,7 @@ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label",
289
288
  k.value ? x(U.$slots, "badge", { key: 0 }) : g("", !0)
290
289
  ], 14, Ra));
291
290
  }
292
- }), Fa = ["data-size"], Ps = /* @__PURE__ */ C({
291
+ }), Fa = ["data-size"], Vs = /* @__PURE__ */ C({
293
292
  __name: "UiAvatarList",
294
293
  props: {
295
294
  items: {},
@@ -357,7 +356,7 @@ const Me = /* @__PURE__ */ Symbol("ui-action-bar-context"), Oa = ["aria-label",
357
356
  ], 2)) : g("", !0)
358
357
  ], 10, Fa));
359
358
  }
360
- }), Na = ["data-color", "data-variant"], qa = { key: 0 }, Es = /* @__PURE__ */ C({
359
+ }), Na = ["data-color", "data-variant"], qa = { key: 0 }, Ps = /* @__PURE__ */ C({
361
360
  __name: "UiBadge",
362
361
  props: {
363
362
  count: { default: void 0 },
@@ -847,10 +846,10 @@ function nl(e, a, t, l, n, i) {
847
846
  _: 1
848
847
  }, 16, ["aria-label", "class", "onClick"]);
849
848
  }
850
- const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
849
+ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Es = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
851
850
  __proto__: null,
852
851
  default: oe
853
- }, Symbol.toStringTag, { value: "Module" })), sl = ["data-color", "data-variant"], Rs = /* @__PURE__ */ C({
852
+ }, Symbol.toStringTag, { value: "Module" })), sl = ["data-color", "data-variant"], Ds = /* @__PURE__ */ C({
854
853
  __name: "UiBanner",
855
854
  props: /* @__PURE__ */ Le({
856
855
  color: { default: "primary" },
@@ -1064,7 +1063,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1064
1063
  key: 0,
1065
1064
  "aria-hidden": "true",
1066
1065
  class: "text-content-legends-medium-md text-text-neutral-tertiary shrink-0"
1067
- }, js = /* @__PURE__ */ C({
1066
+ }, Rs = /* @__PURE__ */ C({
1068
1067
  __name: "UiBreadcrumb",
1069
1068
  props: {
1070
1069
  items: {},
@@ -1118,7 +1117,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1118
1117
  ], 2)
1119
1118
  ], 8, rl));
1120
1119
  }
1121
- }), at = /* @__PURE__ */ Symbol("ui-button-group-size"), lt = /* @__PURE__ */ Symbol("ui-button-group-color"), ot = /* @__PURE__ */ Symbol("ui-button-group-register"), Hs = /* @__PURE__ */ C({
1120
+ }), at = /* @__PURE__ */ Symbol("ui-button-group-size"), lt = /* @__PURE__ */ Symbol("ui-button-group-color"), ot = /* @__PURE__ */ Symbol("ui-button-group-register"), js = /* @__PURE__ */ C({
1122
1121
  __name: "UiButtonGroup",
1123
1122
  props: {
1124
1123
  modelValue: { default: void 0 },
@@ -1235,7 +1234,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1235
1234
  _: 3
1236
1235
  }, 8, ["model-value", "disabled", "orientation", "name", "class"]));
1237
1236
  }
1238
- }), Fs = /* @__PURE__ */ C({
1237
+ }), Hs = /* @__PURE__ */ C({
1239
1238
  __name: "UiButtonGroupItem",
1240
1239
  props: {
1241
1240
  value: {},
@@ -1326,7 +1325,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1326
1325
  }, vl = {
1327
1326
  key: 1,
1328
1327
  class: "absolute inset-0 bg-actions-primary-idle-alpha-light rounded-xl pointer-events-none"
1329
- }, gl = { class: "relative z-10 h-full" }, hl = "bg-surface-neutral-alpha-100 border border-borders-neutral-light", Ns = /* @__PURE__ */ C({
1328
+ }, gl = { class: "relative z-10 h-full" }, hl = "bg-surface-neutral-alpha-100 border border-borders-neutral-light", Fs = /* @__PURE__ */ C({
1330
1329
  __name: "UiCard",
1331
1330
  props: {
1332
1331
  variant: { default: "neutral" },
@@ -1392,7 +1391,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1392
1391
  }), ml = { class: "ui-carousel relative" }, bl = { class: "flex -mr-4" }, pl = { class: "flex items-center mt-4 justify-center" }, yl = {
1393
1392
  key: 1,
1394
1393
  class: "flex items-center gap-4 mx-4"
1395
- }, xl = ["data-testid", "aria-label", "onClick"], qs = /* @__PURE__ */ C({
1394
+ }, xl = ["data-testid", "aria-label", "onClick"], Ns = /* @__PURE__ */ C({
1396
1395
  __name: "UiCarousel",
1397
1396
  props: {
1398
1397
  options: {},
@@ -1891,7 +1890,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
1891
1890
  _: 3
1892
1891
  }, 16, ["value", "disabled"]));
1893
1892
  }
1894
- }), Ks = /* @__PURE__ */ C({
1893
+ }), qs = /* @__PURE__ */ C({
1895
1894
  __name: "UiDropdownSeparator",
1896
1895
  setup(e) {
1897
1896
  return (a, t) => (o(), $(d(Rt), { class: "h-px bg-borders-neutral-light my-1 -mx-2 relative" }));
@@ -2430,10 +2429,10 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2430
2429
  _: 3
2431
2430
  }, 8, ["id", "label", "required", "label-info", "error", "helper-message", "error-message"]));
2432
2431
  }
2433
- }), ct = /* @__PURE__ */ F(Kl, [["__scopeId", "data-v-07865de6"]]), Gs = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2432
+ }), ct = /* @__PURE__ */ F(Kl, [["__scopeId", "data-v-07865de6"]]), Ks = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2434
2433
  __proto__: null,
2435
2434
  default: ct
2436
- }, Symbol.toStringTag, { value: "Module" })), Gl = "#000000", Zs = /* @__PURE__ */ C({
2435
+ }, Symbol.toStringTag, { value: "Module" })), Gl = "#000000", Gs = /* @__PURE__ */ C({
2437
2436
  __name: "UiColorField",
2438
2437
  props: {
2439
2438
  modelValue: { default: "" },
@@ -2545,7 +2544,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2545
2544
  _: 1
2546
2545
  }, 8, ["open"]));
2547
2546
  }
2548
- }), Ws = /* @__PURE__ */ C({
2547
+ }), Zs = /* @__PURE__ */ C({
2549
2548
  __name: "UiDialog",
2550
2549
  props: {
2551
2550
  open: { type: Boolean },
@@ -2754,17 +2753,17 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2754
2753
  _: 3
2755
2754
  }));
2756
2755
  }
2757
- }), Xl = /* @__PURE__ */ F(Yl, [["__scopeId", "data-v-fb2b33fa"]]), Ys = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2756
+ }), Xl = /* @__PURE__ */ F(Yl, [["__scopeId", "data-v-fb2b33fa"]]), Ws = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2758
2757
  __proto__: null,
2759
2758
  default: Xl
2760
- }, Symbol.toStringTag, { value: "Module" })), Ql = { class: "flex flex-col-reverse sm:flex-row gap-2.5 w-full justify-end" }, Xs = /* @__PURE__ */ C({
2759
+ }, Symbol.toStringTag, { value: "Module" })), Ql = { class: "flex flex-col-reverse sm:flex-row gap-2.5 w-full justify-end" }, Ys = /* @__PURE__ */ C({
2761
2760
  __name: "UiDialogFooter",
2762
2761
  setup(e) {
2763
2762
  return (a, t) => (o(), s("div", Ql, [
2764
2763
  x(a.$slots, "default")
2765
2764
  ]));
2766
2765
  }
2767
- }), Qs = /* @__PURE__ */ C({
2766
+ }), Xs = /* @__PURE__ */ C({
2768
2767
  __name: "UiDialogTrigger",
2769
2768
  props: {
2770
2769
  asChild: { type: Boolean },
@@ -2781,7 +2780,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2781
2780
  }), Jl = ["src"], eo = { class: "text-title-sm-bold text-text-neutral-base" }, to = {
2782
2781
  key: 0,
2783
2782
  class: "text-content-text-md-regular text-text-neutral-tertiary"
2784
- }, ao = ["src"], Js = /* @__PURE__ */ C({
2783
+ }, ao = ["src"], Qs = /* @__PURE__ */ C({
2785
2784
  __name: "UiEmptyState",
2786
2785
  props: {
2787
2786
  title: {},
@@ -2825,7 +2824,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2825
2824
  }, null, 8, ao)) : g("", !0)
2826
2825
  ], 2));
2827
2826
  }
2828
- }), er = /* @__PURE__ */ C({
2827
+ }), Js = /* @__PURE__ */ C({
2829
2828
  inheritAttrs: !1,
2830
2829
  __name: "UiFormField",
2831
2830
  props: {
@@ -2894,7 +2893,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
2894
2893
  }, null, 8, oo)
2895
2894
  ]));
2896
2895
  }
2897
- }), so = /* @__PURE__ */ F(no, [["__scopeId", "data-v-ff3ec49a"]]), tr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2896
+ }), so = /* @__PURE__ */ F(no, [["__scopeId", "data-v-ff3ec49a"]]), er = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2898
2897
  __proto__: null,
2899
2898
  default: so
2900
2899
  }, Symbol.toStringTag, { value: "Module" })), ro = { class: "ui-input-checkbox-wrapper w-fit" }, io = ["id", "checked", "disabled", "name", "aria-invalid", "aria-describedby"], uo = ["id"], co = /* @__PURE__ */ C({
@@ -3110,10 +3109,10 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
3110
3109
  }, A(O.value), 11, uo)) : g("", !0)
3111
3110
  ]));
3112
3111
  }
3113
- }), fo = /* @__PURE__ */ F(co, [["__scopeId", "data-v-79c855b9"]]), ar = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3112
+ }), fo = /* @__PURE__ */ F(co, [["__scopeId", "data-v-79c855b9"]]), tr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3114
3113
  __proto__: null,
3115
3114
  default: fo
3116
- }, Symbol.toStringTag, { value: "Module" })), Ne = "__ui-input-select-clear__", lr = /* @__PURE__ */ C({
3115
+ }, Symbol.toStringTag, { value: "Module" })), Ne = "__ui-input-select-clear__", ar = /* @__PURE__ */ C({
3117
3116
  __name: "UiInputSelect",
3118
3117
  props: {
3119
3118
  size: { default: "md" },
@@ -3337,10 +3336,10 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
3337
3336
  } : void 0
3338
3337
  ]), 1032, ["id", "label", "required", "label-info", "error", "helper-message", "error-message"]));
3339
3338
  }
3340
- }), bo = /* @__PURE__ */ F(mo, [["__scopeId", "data-v-9dcda5c2"]]), or = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3339
+ }), bo = /* @__PURE__ */ F(mo, [["__scopeId", "data-v-9dcda5c2"]]), lr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3341
3340
  __proto__: null,
3342
3341
  default: bo
3343
- }, Symbol.toStringTag, { value: "Module" })), po = { class: "mb-1 flex items-center text-content-legends-bold-md text-text-neutral-tertiary" }, yo = ["for", "innerHTML"], nr = /* @__PURE__ */ C({
3342
+ }, Symbol.toStringTag, { value: "Module" })), po = { class: "mb-1 flex items-center text-content-legends-bold-md text-text-neutral-tertiary" }, yo = ["for", "innerHTML"], or = /* @__PURE__ */ C({
3344
3343
  __name: "UiLabel",
3345
3344
  props: {
3346
3345
  label: { default: null },
@@ -3367,7 +3366,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
3367
3366
  }, 8, ["content"])
3368
3367
  ]));
3369
3368
  }
3370
- }), sr = /* @__PURE__ */ C({
3369
+ }), nr = /* @__PURE__ */ C({
3371
3370
  __name: "UiList",
3372
3371
  props: {
3373
3372
  maxContentHeight: {},
@@ -3453,7 +3452,7 @@ const oe = /* @__PURE__ */ F(tl, [["render", nl]]), Ds = /* @__PURE__ */ Object.
3453
3452
  ], 2);
3454
3453
  };
3455
3454
  }
3456
- }), ko = /* @__PURE__ */ F(Co, [["__scopeId", "data-v-e508925c"]]), rr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3455
+ }), ko = /* @__PURE__ */ F(Co, [["__scopeId", "data-v-e508925c"]]), sr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3457
3456
  __proto__: null,
3458
3457
  default: ko
3459
3458
  }, Symbol.toStringTag, { value: "Module" })), $o = ["mask"], zo = ["mask"], So = ["mask"], Bo = /* @__PURE__ */ C({
@@ -3600,10 +3599,10 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3600
3599
  ], 6))
3601
3600
  ]));
3602
3601
  }
3603
- }), Uo = /* @__PURE__ */ F(Oo, [["__scopeId", "data-v-f4cb29c9"]]), ir = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3602
+ }), Uo = /* @__PURE__ */ F(Oo, [["__scopeId", "data-v-f4cb29c9"]]), rr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3604
3603
  __proto__: null,
3605
3604
  default: Uo
3606
- }, Symbol.toStringTag, { value: "Module" })), ur = /* @__PURE__ */ C({
3605
+ }, Symbol.toStringTag, { value: "Module" })), ir = /* @__PURE__ */ C({
3607
3606
  __name: "UiMenu",
3608
3607
  props: {
3609
3608
  defaultOpen: { type: Boolean },
@@ -3621,7 +3620,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3621
3620
  _: 3
3622
3621
  }, 16));
3623
3622
  }
3624
- }), cr = /* @__PURE__ */ C({
3623
+ }), ur = /* @__PURE__ */ C({
3625
3624
  __name: "UiMenuContent",
3626
3625
  props: {
3627
3626
  forceMount: { type: Boolean },
@@ -3665,7 +3664,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3665
3664
  _: 3
3666
3665
  }));
3667
3666
  }
3668
- }), dr = /* @__PURE__ */ C({
3667
+ }), cr = /* @__PURE__ */ C({
3669
3668
  __name: "UiMenuGroup",
3670
3669
  props: {
3671
3670
  label: {}
@@ -3687,7 +3686,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3687
3686
  _: 3
3688
3687
  }, 16));
3689
3688
  }
3690
- }), fr = /* @__PURE__ */ C({
3689
+ }), dr = /* @__PURE__ */ C({
3691
3690
  __name: "UiMenuItem",
3692
3691
  props: {
3693
3692
  disabled: { type: Boolean },
@@ -3705,7 +3704,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3705
3704
  _: 3
3706
3705
  }, 16));
3707
3706
  }
3708
- }), vr = /* @__PURE__ */ C({
3707
+ }), fr = /* @__PURE__ */ C({
3709
3708
  __name: "UiMenuLabel",
3710
3709
  setup(e) {
3711
3710
  return (a, t) => (o(), $(d(Ze), W(Q(a.$attrs)), {
@@ -3715,7 +3714,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3715
3714
  _: 3
3716
3715
  }, 16));
3717
3716
  }
3718
- }), gr = /* @__PURE__ */ C({
3717
+ }), vr = /* @__PURE__ */ C({
3719
3718
  __name: "UiMenuSeparator",
3720
3719
  setup(e) {
3721
3720
  return (a, t) => (o(), $(d(sa), W(Q(a.$attrs)), {
@@ -3725,7 +3724,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3725
3724
  _: 3
3726
3725
  }, 16));
3727
3726
  }
3728
- }), hr = /* @__PURE__ */ C({
3727
+ }), gr = /* @__PURE__ */ C({
3729
3728
  __name: "UiMenuSub",
3730
3729
  props: {
3731
3730
  defaultOpen: { type: Boolean },
@@ -3741,7 +3740,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3741
3740
  _: 3
3742
3741
  }, 16));
3743
3742
  }
3744
- }), mr = /* @__PURE__ */ C({
3743
+ }), hr = /* @__PURE__ */ C({
3745
3744
  __name: "UiMenuSubContent",
3746
3745
  props: {
3747
3746
  forceMount: { type: Boolean },
@@ -3783,7 +3782,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3783
3782
  _: 3
3784
3783
  }));
3785
3784
  }
3786
- }), br = /* @__PURE__ */ C({
3785
+ }), mr = /* @__PURE__ */ C({
3787
3786
  __name: "UiMenuSubTrigger",
3788
3787
  props: {
3789
3788
  disabled: { type: Boolean },
@@ -3801,7 +3800,7 @@ const Io = /* @__PURE__ */ F(_o, [["render", Lo], ["__scopeId", "data-v-568a716f
3801
3800
  _: 3
3802
3801
  }, 16));
3803
3802
  }
3804
- }), pr = /* @__PURE__ */ C({
3803
+ }), br = /* @__PURE__ */ C({
3805
3804
  __name: "UiMenuTrigger",
3806
3805
  props: {
3807
3806
  disabled: { type: Boolean },
@@ -3879,7 +3878,7 @@ const Ao = {
3879
3878
  }, No = {
3880
3879
  key: 1,
3881
3880
  name: "footer"
3882
- }, yr = /* @__PURE__ */ C({
3881
+ }, pr = /* @__PURE__ */ C({
3883
3882
  __name: "UiPage",
3884
3883
  props: {
3885
3884
  pageContentClasses: { default: "" },
@@ -3966,7 +3965,7 @@ const Ao = {
3966
3965
  }, Qo = {
3967
3966
  key: 1,
3968
3967
  class: "flex shrink-0 items-center gap-4"
3969
- }, xr = /* @__PURE__ */ C({
3968
+ }, yr = /* @__PURE__ */ C({
3970
3969
  __name: "UiPageHeader",
3971
3970
  props: {
3972
3971
  title: {},
@@ -4041,7 +4040,7 @@ const Ao = {
4041
4040
  ]);
4042
4041
  };
4043
4042
  }
4044
- }), wr = /* @__PURE__ */ C({
4043
+ }), xr = /* @__PURE__ */ C({
4045
4044
  __name: "UiPopoverAnchor",
4046
4045
  props: {
4047
4046
  reference: {},
@@ -4093,7 +4092,7 @@ const Ao = {
4093
4092
  _: 1
4094
4093
  }, 8, ["model-value", "class"]));
4095
4094
  }
4096
- }), en = /* @__PURE__ */ F(Jo, [["__scopeId", "data-v-f756255b"]]), Cr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4095
+ }), en = /* @__PURE__ */ F(Jo, [["__scopeId", "data-v-f756255b"]]), wr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4097
4096
  __proto__: null,
4098
4097
  default: en
4099
4098
  }, Symbol.toStringTag, { value: "Module" })), tn = ["disabled"], an = {
@@ -4208,7 +4207,7 @@ const Ao = {
4208
4207
  x(l.$slots, "default", {}, void 0, !0)
4209
4208
  ], 16, ln));
4210
4209
  }
4211
- }), sn = /* @__PURE__ */ F(nn, [["__scopeId", "data-v-87cbe72a"]]), kr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4210
+ }), sn = /* @__PURE__ */ F(nn, [["__scopeId", "data-v-87cbe72a"]]), Cr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4212
4211
  __proto__: null,
4213
4212
  default: sn
4214
4213
  }, Symbol.toStringTag, { value: "Module" })), rn = {
@@ -4220,7 +4219,7 @@ const Ao = {
4220
4219
  }, fn = { class: "dashboard-content flex-1 flex flex-col z-10 min-h-0" }, vn = {
4221
4220
  key: 0,
4222
4221
  class: "md:hidden flex items-center gap-2 p-4"
4223
- }, gn = { class: "text-title-sm-bold md:text-title-md-bold text-text-neutral-base" }, $r = /* @__PURE__ */ C({
4222
+ }, gn = { class: "text-title-sm-bold md:text-title-md-bold text-text-neutral-base" }, kr = /* @__PURE__ */ C({
4224
4223
  __name: "UiShell",
4225
4224
  props: {
4226
4225
  openMenuLabel: { default: "Menu" }
@@ -4360,7 +4359,7 @@ const Ao = {
4360
4359
  ], 512);
4361
4360
  };
4362
4361
  }
4363
- }), ze = /* @__PURE__ */ F($n, [["__scopeId", "data-v-97bf16df"]]), zr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4362
+ }), ze = /* @__PURE__ */ F($n, [["__scopeId", "data-v-97bf16df"]]), $r = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4364
4363
  __proto__: null,
4365
4364
  default: ze
4366
4365
  }, Symbol.toStringTag, { value: "Module" })), zn = "(min-width: 768px) and (max-height: 599.98px) and (hover: hover) and (pointer: fine)";
@@ -4781,10 +4780,10 @@ const ee = /* @__PURE__ */ C({
4781
4780
  ], 2);
4782
4781
  };
4783
4782
  }
4784
- }), Nn = /* @__PURE__ */ F(Fn, [["__scopeId", "data-v-44e9de3f"]]), Sr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4783
+ }), Nn = /* @__PURE__ */ F(Fn, [["__scopeId", "data-v-44e9de3f"]]), zr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4785
4784
  __proto__: null,
4786
4785
  default: Nn
4787
- }, Symbol.toStringTag, { value: "Module" })), qn = { class: "flex flex-col items-center" }, Kn = { class: "flex flex-col gap-2" }, Br = /* @__PURE__ */ C({
4786
+ }, Symbol.toStringTag, { value: "Module" })), qn = { class: "flex flex-col items-center" }, Kn = { class: "flex flex-col gap-2" }, Sr = /* @__PURE__ */ C({
4788
4787
  __name: "UiSideMenuBottom",
4789
4788
  props: {
4790
4789
  menuItems: {}
@@ -4802,7 +4801,7 @@ const ee = /* @__PURE__ */ C({
4802
4801
  ])
4803
4802
  ]));
4804
4803
  }
4805
- }), Gn = { class: "flex flex-col items-center gap-8" }, Zn = ["src"], Wn = { class: "flex flex-col gap-2" }, Mr = /* @__PURE__ */ C({
4804
+ }), Gn = { class: "flex flex-col items-center gap-8" }, Zn = ["src"], Wn = { class: "flex flex-col gap-2" }, Br = /* @__PURE__ */ C({
4806
4805
  __name: "UiSideMenuTop",
4807
4806
  props: {
4808
4807
  menuItems: {}
@@ -4825,7 +4824,7 @@ const ee = /* @__PURE__ */ C({
4825
4824
  ])
4826
4825
  ]));
4827
4826
  }
4828
- }), _r = /* @__PURE__ */ C({
4827
+ }), Mr = /* @__PURE__ */ C({
4829
4828
  __name: "UiStepper",
4830
4829
  props: {
4831
4830
  defaultValue: {},
@@ -4868,10 +4867,10 @@ const ee = /* @__PURE__ */ C({
4868
4867
  _: 3
4869
4868
  }, 16));
4870
4869
  }
4871
- }), Xn = /* @__PURE__ */ F(Yn, [["__scopeId", "data-v-5da882d5"]]), Lr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4870
+ }), Xn = /* @__PURE__ */ F(Yn, [["__scopeId", "data-v-5da882d5"]]), _r = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4872
4871
  __proto__: null,
4873
4872
  default: Xn
4874
- }, Symbol.toStringTag, { value: "Module" })), Qn = { class: "stepper-number" }, Ir = /* @__PURE__ */ C({
4873
+ }, Symbol.toStringTag, { value: "Module" })), Qn = { class: "stepper-number" }, Lr = /* @__PURE__ */ C({
4875
4874
  __name: "UiStepperIndicator",
4876
4875
  props: {
4877
4876
  size: { default: "md" },
@@ -4909,7 +4908,7 @@ const ee = /* @__PURE__ */ C({
4909
4908
  _: 3
4910
4909
  }, 16, ["class"]));
4911
4910
  }
4912
- }), Tr = /* @__PURE__ */ C({
4911
+ }), Ir = /* @__PURE__ */ C({
4913
4912
  __name: "UiStepperItem",
4914
4913
  props: {
4915
4914
  showSeparator: { type: Boolean, default: !0 },
@@ -4959,7 +4958,7 @@ const ee = /* @__PURE__ */ C({
4959
4958
  }), null, 16, ["class"])
4960
4959
  ], 2));
4961
4960
  }
4962
- }), es = /* @__PURE__ */ F(Jn, [["__scopeId", "data-v-44cd2e7f"]]), Or = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4961
+ }), es = /* @__PURE__ */ F(Jn, [["__scopeId", "data-v-44cd2e7f"]]), Tr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4963
4962
  __proto__: null,
4964
4963
  default: es
4965
4964
  }, Symbol.toStringTag, { value: "Module" })), ts = /* @__PURE__ */ C({
@@ -4978,10 +4977,10 @@ const ee = /* @__PURE__ */ C({
4978
4977
  _: 3
4979
4978
  }, 16));
4980
4979
  }
4981
- }), as = /* @__PURE__ */ F(ts, [["__scopeId", "data-v-ca7d64b5"]]), Ur = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4980
+ }), as = /* @__PURE__ */ F(ts, [["__scopeId", "data-v-ca7d64b5"]]), Or = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4982
4981
  __proto__: null,
4983
4982
  default: as
4984
- }, Symbol.toStringTag, { value: "Module" })), ls = { class: "w-full" }, os = { class: "w-full border-separate border-spacing-0" }, Ar = /* @__PURE__ */ C({
4983
+ }, Symbol.toStringTag, { value: "Module" })), ls = { class: "w-full" }, os = { class: "w-full border-separate border-spacing-0" }, Ur = /* @__PURE__ */ C({
4985
4984
  __name: "UiTable",
4986
4985
  props: {
4987
4986
  variant: { default: "condensed" },
@@ -5001,10 +5000,10 @@ function ss(e, a) {
5001
5000
  x(e.$slots, "default")
5002
5001
  ]);
5003
5002
  }
5004
- const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5003
+ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Ar = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5005
5004
  __proto__: null,
5006
5005
  default: rs
5007
- }, Symbol.toStringTag, { value: "Module" })), Pr = /* @__PURE__ */ C({
5006
+ }, Symbol.toStringTag, { value: "Module" })), Vr = /* @__PURE__ */ C({
5008
5007
  __name: "UiTableCell",
5009
5008
  setup(e) {
5010
5009
  const a = X("tableVariant"), t = X("rowIsEven", !1), l = X("hoverEffect"), n = r(() => ({
@@ -5022,7 +5021,7 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5022
5021
  x(i.$slots, "default")
5023
5022
  ], 2));
5024
5023
  }
5025
- }), Er = /* @__PURE__ */ C({
5024
+ }), Pr = /* @__PURE__ */ C({
5026
5025
  __name: "UiTableHeader",
5027
5026
  setup(e) {
5028
5027
  const a = X("tableVariant"), t = r(() => ({
@@ -5036,7 +5035,7 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5036
5035
  x(l.$slots, "default")
5037
5036
  ], 2));
5038
5037
  }
5039
- }), Dr = /* @__PURE__ */ C({
5038
+ }), Er = /* @__PURE__ */ C({
5040
5039
  __name: "UiTableHeaderCell",
5041
5040
  setup(e) {
5042
5041
  const a = X("tableVariant"), t = r(() => ({
@@ -5049,7 +5048,7 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5049
5048
  x(l.$slots, "default")
5050
5049
  ], 2));
5051
5050
  }
5052
- }), Rr = /* @__PURE__ */ C({
5051
+ }), Dr = /* @__PURE__ */ C({
5053
5052
  __name: "UiTableRow",
5054
5053
  props: {
5055
5054
  isEven: { type: Boolean }
@@ -5070,7 +5069,7 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5070
5069
  }), is = { class: "ui-tabs border-b border-borders-neutral-light relative" }, us = ["aria-selected", "aria-disabled", "tabindex", "disabled", "onClick", "onKeydown"], cs = {
5071
5070
  key: 1,
5072
5071
  class: "w-4 h-4"
5073
- }, jr = /* @__PURE__ */ C({
5072
+ }, Rr = /* @__PURE__ */ C({
5074
5073
  __name: "UiTabs",
5075
5074
  props: {
5076
5075
  tabs: {},
@@ -5269,10 +5268,10 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5269
5268
  ])
5270
5269
  ], 10, ds));
5271
5270
  }
5272
- }), gs = /* @__PURE__ */ F(vs, [["__scopeId", "data-v-0be79760"]]), Hr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5271
+ }), gs = /* @__PURE__ */ F(vs, [["__scopeId", "data-v-0be79760"]]), jr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5273
5272
  __proto__: null,
5274
5273
  default: gs
5275
- }, Symbol.toStringTag, { value: "Module" })), Fr = /* @__PURE__ */ C({
5274
+ }, Symbol.toStringTag, { value: "Module" })), Hr = /* @__PURE__ */ C({
5276
5275
  __name: "UiTimeline",
5277
5276
  props: {
5278
5277
  orientation: { default: "vertical" }
@@ -5288,7 +5287,7 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5288
5287
  x(t.$slots, "default")
5289
5288
  ], 2));
5290
5289
  }
5291
- }), hs = { class: "ui-timeline-item" }, ms = { class: "ui-timeline-item__indicator-wrapper" }, bs = { class: "ui-timeline-item__content" }, Nr = /* @__PURE__ */ C({
5290
+ }), hs = { class: "ui-timeline-item" }, ms = { class: "ui-timeline-item__indicator-wrapper" }, bs = { class: "ui-timeline-item__content" }, Fr = /* @__PURE__ */ C({
5292
5291
  __name: "UiTimelineItem",
5293
5292
  props: {
5294
5293
  variant: { default: "default" },
@@ -5355,99 +5354,99 @@ const rs = /* @__PURE__ */ F(ns, [["render", ss]]), Vr = /* @__PURE__ */ Object.
5355
5354
  });
5356
5355
  export {
5357
5356
  ke as $,
5358
- er as A,
5357
+ Js as A,
5359
5358
  so as B,
5360
5359
  fo as C,
5361
- lr as D,
5360
+ ar as D,
5362
5361
  bo as E,
5363
- nr as F,
5364
- sr as G,
5362
+ or as F,
5363
+ nr as G,
5365
5364
  ko as H,
5366
5365
  tt as I,
5367
5366
  Uo as J,
5368
- ur as K,
5369
- cr as L,
5370
- dr as M,
5371
- fr as N,
5372
- vr as O,
5373
- gr as P,
5374
- hr as Q,
5375
- mr as R,
5376
- br as S,
5377
- pr as T,
5367
+ ir as K,
5368
+ ur as L,
5369
+ cr as M,
5370
+ dr as N,
5371
+ fr as O,
5372
+ vr as P,
5373
+ gr as Q,
5374
+ hr as R,
5375
+ mr as S,
5376
+ br as T,
5378
5377
  oe as U,
5379
- yr as V,
5380
- xr as W,
5378
+ pr as V,
5379
+ yr as W,
5381
5380
  Ce as X,
5382
- wr as Y,
5381
+ xr as Y,
5383
5382
  $e as Z,
5384
- Os as _,
5385
- Us as a,
5383
+ Ts as _,
5384
+ Os as a,
5386
5385
  en as a0,
5387
5386
  sn as a1,
5388
- $r as a2,
5387
+ kr as a2,
5389
5388
  Nn as a3,
5390
- Br as a4,
5389
+ Sr as a4,
5391
5390
  ee as a5,
5392
5391
  ze as a6,
5393
- Mr as a7,
5394
- _r as a8,
5392
+ Br as a7,
5393
+ Mr as a8,
5395
5394
  Xn as a9,
5396
- rr as aA,
5397
- or as aB,
5398
- ar as aC,
5399
- tr as aD,
5400
- Ys as aE,
5401
- Ds as aF,
5402
- Ir as aa,
5403
- Tr as ab,
5395
+ sr as aA,
5396
+ lr as aB,
5397
+ tr as aC,
5398
+ er as aD,
5399
+ Ws as aE,
5400
+ Es as aF,
5401
+ Lr as aa,
5402
+ Ir as ab,
5404
5403
  es as ac,
5405
5404
  as as ad,
5406
- Ar as ae,
5405
+ Ur as ae,
5407
5406
  rs as af,
5408
- Pr as ag,
5409
- Er as ah,
5410
- Dr as ai,
5411
- Rr as aj,
5412
- jr as ak,
5407
+ Vr as ag,
5408
+ Pr as ah,
5409
+ Er as ai,
5410
+ Dr as aj,
5411
+ Rr as ak,
5413
5412
  gs as al,
5414
5413
  ct as am,
5415
- Fr as an,
5416
- Nr as ao,
5417
- Gs as ap,
5418
- Hr as aq,
5419
- Vr as ar,
5420
- Ur as as,
5421
- Or as at,
5422
- Lr as au,
5423
- zr as av,
5424
- Sr as aw,
5425
- kr as ax,
5426
- Cr as ay,
5427
- ir as az,
5428
- As as b,
5429
- Vs as c,
5414
+ Hr as an,
5415
+ Fr as ao,
5416
+ Ks as ap,
5417
+ jr as aq,
5418
+ Ar as ar,
5419
+ Or as as,
5420
+ Tr as at,
5421
+ _r as au,
5422
+ $r as av,
5423
+ zr as aw,
5424
+ Cr as ax,
5425
+ wr as ay,
5426
+ rr as az,
5427
+ Us as b,
5428
+ As as c,
5430
5429
  He as d,
5431
- Ps as e,
5432
- Es as f,
5433
- Rs as g,
5434
- js as h,
5435
- Hs as i,
5436
- Fs as j,
5437
- Ns as k,
5438
- qs as l,
5439
- Zs as m,
5430
+ Vs as e,
5431
+ Ps as f,
5432
+ Ds as g,
5433
+ Rs as h,
5434
+ js as i,
5435
+ Hs as j,
5436
+ Fs as k,
5437
+ Ns as l,
5438
+ Gs as m,
5440
5439
  El as n,
5441
- Ws as o,
5440
+ Zs as o,
5442
5441
  Zl as p,
5443
5442
  Xl as q,
5444
- Xs as r,
5445
- Qs as s,
5443
+ Ys as r,
5444
+ Xs as s,
5446
5445
  st as t,
5447
5446
  it as u,
5448
5447
  ut as v,
5449
- Ks as w,
5448
+ qs as w,
5450
5449
  rt as x,
5451
- Js as y,
5450
+ Qs as y,
5452
5451
  be as z
5453
5452
  };
@@ -1,4 +1,4 @@
1
- import { _ as xe, a as he, b as ke, c as Ge, d as He, e as Re, f as Ee, I as We, g as Ne, h as qe, i as Ke, j as Qe, k as Ve, l as Xe, X as Ye, $ as Ze, Z as Je, t as eo, x as oo, u as to, v as no, w as _o, n as io, z as ro, m as co, o as lo, p as so, r as ao, s as uo, y as po, A as mo, D as vo, F as bo, G as Uo, K as go, L as fo, M as So, N as To, O as yo, P as jo, Q as Oo, R as Mo, S as Po, T as zo, V as $o, W as Bo, Y as Do, a2 as Co, a5 as Io, a4 as Lo, a7 as Ao, a8 as wo, aa as Fo, ab as xo, ae as ho, ag as ko, ah as Go, ai as Ho, aj as Ro, ak as Eo, an as Wo, ao as No, ap as r, aq as c, ar as l, as as s, at as a, au as u, av as p, aw as m, ax as v, ay as b, az as U, aA as g, aB as d, aC as f, aD as S, aE as T, aF as y } from "./UiTimelineItem.vue_vue_type_style_index_0_lang-B0UKmlqE.mjs";
1
+ import { _ as xe, a as he, b as ke, c as Ge, d as He, e as Re, f as Ee, I as We, g as Ne, h as qe, i as Ke, j as Qe, k as Ve, l as Xe, X as Ye, $ as Ze, Z as Je, t as eo, x as oo, u as to, v as no, w as _o, n as io, z as ro, m as co, o as lo, p as so, r as ao, s as uo, y as po, A as mo, D as vo, F as bo, G as Uo, K as go, L as fo, M as So, N as To, O as yo, P as jo, Q as Oo, R as Mo, S as Po, T as zo, V as $o, W as Bo, Y as Do, a2 as Co, a5 as Io, a4 as Lo, a7 as Ao, a8 as wo, aa as Fo, ab as xo, ae as ho, ag as ko, ah as Go, ai as Ho, aj as Ro, ak as Eo, an as Wo, ao as No, ap as r, aq as c, ar as l, as as s, at as a, au as u, av as p, aw as m, ax as v, ay as b, az as U, aA as g, aB as d, aC as f, aD as S, aE as T, aF as y } from "./UiTimelineItem.vue_vue_type_style_index_0_lang-UNNkatTS.mjs";
2
2
  import { b as qo, c as Ko, a as Qo, _ as Vo } from "./a11y--y7uaY4j.mjs";
3
3
  import { RenderSlot as j } from "./slot.mjs";
4
4
  const O = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as e, a as s, b as o, c as U, d as r, e as t, f as n, g as p, h as l, U as u, i as d, j as g, k as T, l as S, m, n as b, o as C, p as M, q as I, r as c, s as B, t as D, u as P, v as L, w as v, x as A, y as w, z as F, A as x, B as h, C as H, D as f, E as k, F as G, G as y, H as R, I as j, J as z, K as E, L as W, M as _, N as q, O as J, P as K, Q as N, R as O, S as Q, T as V, V as X, W as Y, X as Z, Y as $, Z as aa, $ as ia, a0 as ea, a1 as sa, a2 as oa, a3 as Ua, a4 as ra, a5 as ta, a6 as na, a7 as pa, a8 as la, a9 as ua, aa as da, ab as ga, ac as Ta, ad as Sa, ae as ma, af as ba, ag as Ca, ah as Ma, ai as Ia, aj as ca, ak as Ba, al as Da, am as Pa, an as La, ao as va } from "./UiTimelineItem.vue_vue_type_style_index_0_lang-B0UKmlqE.mjs";
1
+ import { _ as e, a as s, b as o, c as U, d as r, e as t, f as n, g as p, h as l, U as u, i as d, j as g, k as T, l as S, m, n as b, o as C, p as M, q as I, r as c, s as B, t as D, u as P, v as L, w as v, x as A, y as w, z as F, A as x, B as h, C as H, D as f, E as k, F as G, G as y, H as R, I as j, J as z, K as E, L as W, M as _, N as q, O as J, P as K, Q as N, R as O, S as Q, T as V, V as X, W as Y, X as Z, Y as $, Z as aa, $ as ia, a0 as ea, a1 as sa, a2 as oa, a3 as Ua, a4 as ra, a5 as ta, a6 as na, a7 as pa, a8 as la, a9 as ua, aa as da, ab as ga, ac as Ta, ad as Sa, ae as ma, af as ba, ag as Ca, ah as Ma, ai as Ia, aj as ca, ak as Ba, al as Da, am as Pa, an as La, ao as va } from "./UiTimelineItem.vue_vue_type_style_index_0_lang-UNNkatTS.mjs";
2
2
  import { _ as wa, a as Fa, b as xa, c as ha } from "./a11y--y7uaY4j.mjs";
3
3
  export {
4
4
  e as UiActionBar,
package/dist/layouts.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as I, computed as w, ref as C, onMounted as M, resolveComponent as E, createElementBlock as n, openBlock as t, createElementVNode as v, createCommentVNode as a, createBlock as y, resolveDynamicComponent as P, normalizeProps as z, guardReactiveProps as H, Fragment as k, normalizeClass as b, normalizeStyle as N, toDisplayString as f, withKeys as S, withCtx as h, createTextVNode as B, getCurrentInstance as D, createVNode as L, Transition as V, TransitionGroup as A, renderList as R, unref as x, mergeProps as j } from "vue";
2
2
  import { useResponsive as K } from "./responsive.mjs";
3
3
  import { u as U } from "./toastDSV2-wMh-UMzW.mjs";
4
- import { u as F } from "./useThemeAndModes-DY5SDC0a.mjs";
4
+ import { u as F } from "./useThemeAndModes-CUK56j0z.mjs";
5
5
  const G = ["data-testid"], O = {
6
6
  key: 1,
7
7
  class: "absolute h-1 bg-grey-100 top-0 left-0 w-full"
@@ -1,58 +1,57 @@
1
- import { useStorage as g } from "@vueuse/core";
2
- import { ref as E, computed as d, watch as f } from "vue";
3
- import { useRoute as b } from "vue-router";
1
+ import { useStorage as A } from "@vueuse/core";
2
+ import { ref as E, computed as d, watch as f, getCurrentInstance as b } from "vue";
4
3
  const T = {
5
4
  LIVESTORM: "Livestorm",
6
5
  CUSTOMER1: "customer1",
7
6
  CUSTOMER2: "customer2",
8
7
  CUSTOMER3: "customer3"
9
- }, v = {
8
+ }, p = {
10
9
  LIGHT: "light",
11
10
  DARK: "dark"
12
- }, y = Object.values(T), C = Object.values(v);
11
+ }, y = Object.values(T), C = Object.values(p);
13
12
  Object.fromEntries(
14
13
  Object.entries(T).map(([e, t]) => [e.toLowerCase(), t])
15
14
  );
16
15
  const I = ["signup", "signin", "forgot-password", "reset-password"], R = {
17
16
  theme: T.LIVESTORM,
18
- mode: v.DARK,
19
- contentMode: v.LIGHT
20
- }, i = E(/* @__PURE__ */ new Map()), p = E(/* @__PURE__ */ new Map()), o = g(
17
+ mode: p.DARK,
18
+ contentMode: p.LIGHT
19
+ }, i = E(/* @__PURE__ */ new Map()), v = E(/* @__PURE__ */ new Map()), o = A(
21
20
  "themeAndMode",
22
21
  R
23
22
  );
24
- function G({ themeOverride: e, modeOverride: t, contentModeOverride: n } = {}) {
23
+ function k({ themeOverride: e, modeOverride: t, contentModeOverride: n } = {}) {
25
24
  const s = !!(e || t || n), a = e || o.value.theme, r = t || o.value.mode, S = n || o.value.contentMode;
26
25
  function O() {
27
26
  document.querySelector("body").setAttribute("data-colors-primitive", a), document.querySelector("body").setAttribute("data-colors-semantic", r), H();
28
27
  }
29
- function h() {
30
- const m = () => t || o.value.mode, c = () => n || o.value.contentMode;
28
+ function g() {
29
+ const l = () => t || o.value.mode, c = () => n || o.value.contentMode;
31
30
  f(
32
31
  () => Array.from(i.value.values()),
33
- () => D({ mode: m(), hasOverrides: s }),
32
+ () => D({ mode: l(), hasOverrides: s }),
34
33
  { immediate: !0 }
35
34
  ), f(
36
- () => Array.from(p.value.values()),
35
+ () => Array.from(v.value.values()),
37
36
  () => M({ mode: c(), hasOverrides: s }),
38
37
  { immediate: !0 }
39
38
  );
40
- const l = b();
39
+ const m = b();
41
40
  f(
42
- () => l?.name,
41
+ () => m?.appContext.config.globalProperties.$route?.name,
43
42
  (u) => {
44
43
  u && I.includes(u.toString()) && M({ mode: c(), hasOverrides: s });
45
44
  },
46
45
  { immediate: !0 }
47
46
  );
48
47
  }
49
- function A(m, { selector: c, element: l, modeOverride: u }) {
50
- (m === "mode" ? i : p).value.set(c, { element: l, modeOverride: u });
48
+ function h(l, { selector: c, element: m, modeOverride: u }) {
49
+ (l === "mode" ? i : v).value.set(c, { element: m, modeOverride: u });
51
50
  }
52
51
  return {
53
52
  initOnAppMounted: O,
54
- registerWatchers: h,
55
- addElementToWatch: A,
53
+ registerWatchers: g,
54
+ addElementToWatch: h,
56
55
  updateContentMode: w,
57
56
  updateTheme: L,
58
57
  updateMode: _,
@@ -87,7 +86,7 @@ function D({ mode: e, hasOverrides: t = !1 }) {
87
86
  }
88
87
  function M({ mode: e, hasOverrides: t = !1, ignoreElementOverrides: n = !1 }) {
89
88
  t || (o.value.contentMode = e);
90
- for (const { element: s, modeOverride: a } of p.value.values()) {
89
+ for (const { element: s, modeOverride: a } of v.value.values()) {
91
90
  const r = n ? e : a || e;
92
91
  s.setAttribute("data-colors-semantic", r);
93
92
  }
@@ -105,5 +104,5 @@ function H() {
105
104
  }
106
105
  }
107
106
  export {
108
- G as u
107
+ k as u
109
108
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestorm/ui-vue",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Livestorm UI components for Vue 3",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -39,8 +39,8 @@
39
39
  "mitt": "^3.0.1",
40
40
  "reka-ui": "2.9.10",
41
41
  "tailwindcss": "^4.3.2",
42
- "@livestorm/ui-tokens": "^2.0.2",
43
- "@livestorm/ui-icons": "^2.0.2"
42
+ "@livestorm/ui-icons": "^2.0.3",
43
+ "@livestorm/ui-tokens": "^2.0.3"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@chromatic-com/storybook": "^5.2.1",
@@ -79,6 +79,11 @@
79
79
  "vue": "^3.5.30",
80
80
  "vue-router": "^5.0.3"
81
81
  },
82
+ "peerDependenciesMeta": {
83
+ "vue-router": {
84
+ "optional": true
85
+ }
86
+ },
82
87
  "exports": {
83
88
  ".": {
84
89
  "types": "./dist/types/index.d.ts",
@@ -1,6 +1,5 @@
1
1
  import { useStorage } from '@vueuse/core'
2
- import { computed, ref, watch } from 'vue'
3
- import { useRoute } from 'vue-router'
2
+ import { computed, getCurrentInstance, ref, watch } from 'vue'
4
3
  import {
5
4
  THEME_LIST,
6
5
  MODE_OPTIONS,
@@ -82,10 +81,15 @@ export default function useThemeAndModes (
82
81
  { immediate: true }
83
82
  )
84
83
 
85
- const route = useRoute()
84
+ // vue-router is an optional peer: read the route from the app's global
85
+ // properties (which the router installs as $route) instead of importing
86
+ // vue-router, so the package resolves without it. Without a router the
87
+ // getter stays undefined and this watcher is simply inert. Same pattern
88
+ // as the $responsive fallback in UiPage/LayoutToasts.
89
+ const instance = getCurrentInstance()
86
90
 
87
91
  watch(
88
- () => route?.name,
92
+ () => instance?.appContext.config.globalProperties.$route?.name,
89
93
  (routeName) => {
90
94
  if (!routeName) { return }
91
95
  if (ROUTES_TO_WATCH.includes(routeName.toString() as typeof ROUTES_TO_WATCH[number])) {