vlite3 0.0.4 → 0.0.7

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
@@ -30,28 +30,16 @@ import 'vlite3/style.css'
30
30
 
31
31
  This library relies on Tailwind CSS for utility classes. You must configure your project to scan the library's files so that the necessary classes are generated.
32
32
 
33
- #### Tailwind CSS v3 (`tailwind.config.js`)
34
-
35
- Add the library path to your `content` array:
36
-
37
- ```js
38
- module.exports = {
39
- content: [
40
- './index.html',
41
- './src/**/*.{vue,js,ts,jsx,tsx}',
42
- './node_modules/vlite3/dist/**/*.{js,vue}', // <--- Add this line
43
- ],
44
- // ...
45
- }
46
- ```
47
-
48
33
  #### Tailwind CSS v4
49
34
 
50
35
  If you are using the new CSS-first configuration, add the source path:
51
36
 
52
37
  ```css
53
38
  @import 'tailwindcss';
54
- @source "../node_modules/vlite3/dist";
39
+ @layer theme, base, components, utilities;
40
+
41
+ @import 'vlite3/style.css';
42
+ @source "../node_modules/vlite3";
55
43
  ```
56
44
 
57
45
  ## Usage
@@ -31,9 +31,9 @@ const y = ["src", "alt"], z = { key: 0 }, A = /* @__PURE__ */ k({
31
31
  xs: "h-6 w-6 text-[10px]",
32
32
  sm: "h-8 w-8 text-xs",
33
33
  md: "h-10 w-10 text-sm",
34
- lg: "h-12 w-12 text-base",
35
- xl: "h-14 w-14 text-lg",
36
- "2xl": "h-16 w-16 text-xl"
34
+ lg: "h-14 w-14 text-base",
35
+ xl: "h-20 w-20 text-lg",
36
+ "2xl": "h-22 w-22 text-xl"
37
37
  }, h = {
38
38
  none: "rounded-none",
39
39
  sm: "rounded-sm",
@@ -10,6 +10,7 @@ export interface Props {
10
10
  fallback?: string;
11
11
  alt?: string;
12
12
  maxSize?: number;
13
+ className?: string;
13
14
  }
14
15
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
15
16
  "update:modelValue": (value: string) => any;
@@ -1,4 +1,4 @@
1
- import { defineComponent as w, ref as z, computed as f, openBlock as r, createElementBlock as o, normalizeClass as n, createVNode as l, unref as C, withCtx as p, createElementVNode as A, createCommentVNode as g, withModifiers as B } from "vue";
1
+ import { defineComponent as w, ref as z, computed as f, openBlock as r, createElementBlock as n, normalizeClass as l, createVNode as o, unref as C, withCtx as A, createElementVNode as B, createCommentVNode as g, withModifiers as N } from "vue";
2
2
  import u from "../Icon.vue.js";
3
3
  import j from "../FilePicker/FilePicker.vue.js";
4
4
  import E from "../Avatar.vue.js";
@@ -13,69 +13,70 @@ const $ = ["onClick"], I = /* @__PURE__ */ w({
13
13
  disabled: { type: Boolean, default: !1 },
14
14
  fallback: {},
15
15
  alt: { default: "Avatar" },
16
- maxSize: {}
16
+ maxSize: {},
17
+ className: {}
17
18
  },
18
19
  emits: ["update:modelValue", "change", "error"],
19
20
  setup(e, { emit: v }) {
20
- const s = e, t = v, i = z(null), c = f(() => i.value || s.modelValue), h = (a) => {
21
+ const s = e, t = v, d = z(null), c = f(() => d.value || s.modelValue), h = (a) => {
21
22
  if (!a || Array.isArray(a)) {
22
23
  Array.isArray(a) && a.length === 0 && m();
23
24
  return;
24
25
  }
25
- a.base64 && (i.value = a.base64, t("update:modelValue", a.base64)), t("change", a);
26
+ a.base64 && (d.value = a.base64, t("update:modelValue", a.base64)), t("change", a);
26
27
  }, y = (a) => {
27
28
  t("error", a);
28
29
  }, m = () => {
29
- i.value = null, t("update:modelValue", null), t("change", null);
30
+ d.value = null, t("update:modelValue", null), t("change", null);
30
31
  }, k = f(() => [
31
32
  "group relative inline-block",
32
33
  // If rounded is full, we need overflow hidden on the container to clip the overlay
33
34
  s.rounded === "full" ? "rounded-full" : ""
34
35
  ].join(" "));
35
- return (a, b) => (r(), o("div", {
36
- class: n(k.value)
36
+ return (a, b) => (r(), n("div", {
37
+ class: l(k.value)
37
38
  }, [
38
- l(C(j), {
39
+ o(C(j), {
39
40
  disabled: !e.editable || e.disabled || e.loading,
40
41
  "return-format": "base64",
41
42
  "file-types": ["image/jpeg", "image/png", "image/webp", "image/gif"],
42
43
  "max-size": e.maxSize,
43
44
  class: "w-auto h-auto block",
44
- onChange: b[0] || (b[0] = (d) => h(d)),
45
+ onChange: b[0] || (b[0] = (i) => h(i)),
45
46
  onError: y
46
47
  }, {
47
- trigger: p(({ trigger: d, isLoading: x }) => [
48
- A("div", {
49
- class: n(["relative cursor-pointer transition-transform active:scale-95", { "cursor-default": !e.editable || e.disabled }]),
50
- onClick: (N) => e.editable && !e.disabled ? d() : null
48
+ trigger: A(({ trigger: i, isLoading: x }) => [
49
+ B("div", {
50
+ class: l(["relative cursor-pointer transition-transform active:scale-95", { "cursor-default": !e.editable || e.disabled }]),
51
+ onClick: (R) => e.editable && !e.disabled ? i() : null
51
52
  }, [
52
- l(E, {
53
+ o(E, {
53
54
  src: c.value || void 0,
54
55
  fallback: e.fallback,
55
56
  alt: e.alt,
56
57
  size: e.size,
57
58
  rounded: e.rounded,
58
- class: "ring-offset-background transition-shadow group-hover:ring-2 group-hover:ring-primary/20"
59
- }, null, 8, ["src", "fallback", "alt", "size", "rounded"]),
60
- e.loading || x ? (r(), o("div", {
59
+ class: l(e.className)
60
+ }, null, 8, ["src", "fallback", "alt", "size", "rounded", "class"]),
61
+ e.loading || x ? (r(), n("div", {
61
62
  key: 0,
62
- class: n([
63
+ class: l([
63
64
  "absolute inset-0 flex items-center justify-center bg-black/40 backdrop-blur-[1px] text-white transition-opacity",
64
65
  e.rounded === "full" ? "rounded-full" : "rounded-md"
65
66
  ])
66
67
  }, [
67
- l(u, {
68
+ o(u, {
68
69
  icon: "lucide:loader-2",
69
70
  class: "animate-spin w-1/3 h-1/3"
70
71
  })
71
- ], 2)) : e.editable && !e.disabled ? (r(), o("div", {
72
+ ], 2)) : e.editable && !e.disabled ? (r(), n("div", {
72
73
  key: 1,
73
- class: n([
74
+ class: l([
74
75
  "absolute inset-0 flex items-center justify-center bg-black/40 text-white opacity-0 transition-opacity duration-200 group-hover:opacity-100",
75
76
  e.rounded === "full" ? "rounded-full" : "rounded-md"
76
77
  ])
77
78
  }, [
78
- l(u, {
79
+ o(u, {
79
80
  icon: "lucide:camera",
80
81
  class: "w-1/3 h-1/3"
81
82
  })
@@ -84,14 +85,14 @@ const $ = ["onClick"], I = /* @__PURE__ */ w({
84
85
  ]),
85
86
  _: 1
86
87
  }, 8, ["disabled", "max-size"]),
87
- c.value && e.editable && !e.disabled && !e.loading ? (r(), o("button", {
88
+ c.value && e.editable && !e.disabled && !e.loading ? (r(), n("button", {
88
89
  key: 0,
89
90
  type: "button",
90
91
  class: "absolute -top-1 -right-1 z-10 p-1 bg-background border border-border rounded-full text-muted-foreground shadow-sm hover:text-destructive hover:border-destructive transition-colors opacity-0 group-hover:opacity-100 scale-75 group-hover:scale-100 duration-200 transform",
91
- onClick: B(m, ["stop"]),
92
+ onClick: N(m, ["stop"]),
92
93
  title: "Remove image"
93
94
  }, [
94
- l(u, {
95
+ o(u, {
95
96
  icon: "lucide:x",
96
97
  class: "w-3 h-3"
97
98
  })
@@ -0,0 +1,12 @@
1
+ import { IDropdownOption } from '../../types';
2
+ interface Props {
3
+ option: IDropdownOption;
4
+ value: boolean;
5
+ focused?: boolean;
6
+ }
7
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
8
+ change: (value: boolean, option: IDropdownOption) => any;
9
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
10
+ onChange?: (value: boolean, option: IDropdownOption) => any;
11
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
12
+ export default _default;
@@ -0,0 +1,41 @@
1
+ import { defineComponent as r, openBlock as i, createElementBlock as m, withModifiers as d, normalizeClass as u, createElementVNode as c, createBlock as f, createCommentVNode as p, toDisplayString as g, createVNode as h } from "vue";
2
+ import v from "../Switch.vue.js";
3
+ import x from "../Icon.vue.js";
4
+ const k = { class: "flex items-center gap-2 flex-1 min-w-0" }, y = { class: "truncate font-medium" }, V = /* @__PURE__ */ r({
5
+ __name: "DropdownBooleanItem",
6
+ props: {
7
+ option: {},
8
+ value: { type: Boolean },
9
+ focused: { type: Boolean }
10
+ },
11
+ emits: ["change"],
12
+ setup(e, { emit: a }) {
13
+ const l = e, s = a, o = (t) => {
14
+ s("change", t, l.option);
15
+ };
16
+ return (t, n) => (i(), m("div", {
17
+ "data-dropdown-item": "",
18
+ class: u(["relative flex cursor-pointer select-none items-center justify-between rounded-sm px-2 py-1.5 text-sm outline-none transition-colors", [
19
+ e.focused ? "bg-accent text-accent-foreground" : "hover:bg-accent hover:text-accent-foreground"
20
+ ]]),
21
+ onClick: n[0] || (n[0] = d((w) => o(!e.value), ["stop"]))
22
+ }, [
23
+ c("div", k, [
24
+ e.option.icon ? (i(), f(x, {
25
+ key: 0,
26
+ icon: e.option.icon,
27
+ class: "h-4 w-4 shrink-0 opacity-70"
28
+ }, null, 8, ["icon"])) : p("", !0),
29
+ c("span", y, g(e.option.label), 1)
30
+ ]),
31
+ h(v, {
32
+ "model-value": e.value,
33
+ class: "ml-3 shrink-0 scale-75 origin-right",
34
+ "onUpdate:modelValue": o
35
+ }, null, 8, ["model-value"])
36
+ ], 2));
37
+ }
38
+ });
39
+ export {
40
+ V as default
41
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./DropdownBooleanItem.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -1,29 +1,30 @@
1
- import { defineComponent as U, defineAsyncComponent as q, ref as $, computed as _, watch as B, toRef as G, onMounted as J, onBeforeUnmount as Q, openBlock as o, createElementBlock as c, createVNode as p, createCommentVNode as i, renderSlot as h, createElementVNode as y, unref as n, normalizeStyle as W, normalizeClass as C, createBlock as v, Fragment as T, renderList as X, withCtx as N, toDisplayString as Y, mergeProps as Z, nextTick as ee } from "vue";
2
- import x from "../Icon.vue.js";
3
- import te from "../Input.vue.js";
4
- import le from "./DropdownItem.vue.js";
5
- import se from "./DropdownGroupedLayout.vue.js";
6
- import { useDropdownNavigation as oe } from "./composables/useDropdownNavigation.js";
7
- import { useDropdownIds as ne } from "./composables/useDropdownIds.js";
8
- const re = { class: "w-full min-w-[150px] flex flex-col" }, de = {
1
+ import { defineComponent as G, defineAsyncComponent as J, ref as B, computed as I, watch as _, toRef as Q, onMounted as W, onBeforeUnmount as X, openBlock as o, createElementBlock as c, createVNode as x, createCommentVNode as u, renderSlot as v, createElementVNode as g, unref as n, normalizeStyle as Y, normalizeClass as C, createBlock as m, Fragment as T, renderList as Z, withCtx as N, toDisplayString as ee, mergeProps as te, nextTick as le } from "vue";
2
+ import M from "../Icon.vue.js";
3
+ import se from "../Input.vue.js";
4
+ import oe from "./DropdownItem.vue.js";
5
+ import ne from "./DropdownBooleanItem.vue.js";
6
+ import re from "./DropdownGroupedLayout.vue.js";
7
+ import { useDropdownNavigation as ae } from "./composables/useDropdownNavigation.js";
8
+ import { useDropdownIds as ce } from "./composables/useDropdownIds.js";
9
+ const de = { class: "w-full min-w-[150px] flex flex-col" }, ie = {
9
10
  key: 0,
10
11
  class: "bg-body border-b mb-1 z-10 rounded-t-md shrink-0"
11
- }, ce = {
12
+ }, ue = {
12
13
  key: 1,
13
14
  class: "shrink-0"
14
- }, ae = {
15
+ }, fe = {
15
16
  key: 0,
16
17
  class: "px-2 py-6 text-center text-sm text-muted-foreground"
17
- }, ie = {
18
+ }, me = {
18
19
  key: 0,
19
20
  class: "h-px bg-border my-1 mx-1"
20
- }, ue = ["onMouseenter"], fe = { class: "flex items-center gap-2 flex-1 min-w-0" }, me = { class: "truncate" }, he = {
21
+ }, he = ["onMouseenter"], ye = { class: "flex items-center gap-2 flex-1 min-w-0" }, ve = { class: "truncate" }, ge = {
21
22
  key: 3,
22
23
  class: "flex justify-center py-2"
23
- }, ye = {
24
+ }, ke = {
24
25
  key: 2,
25
26
  class: "shrink-0 border-t mt-1 pt-1"
26
- }, Se = /* @__PURE__ */ U({
27
+ }, Be = /* @__PURE__ */ G({
27
28
  __name: "DropdownMenu",
28
29
  props: {
29
30
  options: { default: () => [] },
@@ -43,66 +44,75 @@ const re = { class: "w-full min-w-[150px] flex flex-col" }, de = {
43
44
  remote: { type: Boolean, default: !1 }
44
45
  },
45
46
  emits: ["select", "close", "load-more", "search"],
46
- setup(r, { emit: D }) {
47
- const E = q(() => import("./Dropdown.vue2.js")), t = r, u = D, w = $(null), f = $(""), { getMenuId: P, getAllRecursiveIds: V } = ne(), j = _(() => t.remote ? t.searchable : t.searchable && (t.options?.length || 0) > 9);
48
- let g = null;
49
- B(f, (e) => {
50
- t.remote && (g && clearTimeout(g), g = setTimeout(() => {
51
- e && u("search", e);
47
+ setup(a, { emit: V }) {
48
+ const j = J(() => import("./Dropdown.vue2.js")), t = a, i = V, S = B(null), f = B(""), { getMenuId: D, getAllRecursiveIds: E } = ce(), P = I(() => t.remote ? t.searchable : t.searchable && (t.options?.length || 0) > 9);
49
+ let k = null;
50
+ _(f, (e) => {
51
+ t.remote && (k && clearTimeout(k), k = setTimeout(() => {
52
+ e && i("search", e);
52
53
  }, 100));
53
54
  });
54
55
  const H = (e) => {
55
56
  const s = e.target;
56
- s.scrollTop + s.clientHeight >= s.scrollHeight - 50 && t.hasMore && !t.loading && u("load-more");
57
+ s.scrollTop + s.clientHeight >= s.scrollHeight - 50 && t.hasMore && !t.loading && i("load-more");
57
58
  }, b = (e, s) => {
58
- e.disabled || u("select", e);
59
+ e.disabled || i("select", e);
59
60
  }, {
60
- focusedIndex: k,
61
- isKeyboardMode: S,
61
+ focusedIndex: h,
62
+ isKeyboardMode: p,
62
63
  filteredOptions: R,
63
64
  // rename
64
- handleKeyDown: I,
65
- handleMouseMove: M,
66
- onMouseEnterItem: O,
65
+ handleKeyDown: O,
66
+ handleMouseMove: $,
67
+ onMouseEnterItem: w,
67
68
  scrollToIndex: z
68
- } = oe({
69
- options: G(t, "options"),
69
+ } = ae({
70
+ options: Q(t, "options"),
70
71
  searchQuery: f,
71
- containerRef: w,
72
- emit: (e, ...s) => u(e, ...s),
72
+ containerRef: S,
73
+ emit: (e, ...s) => i(e, ...s),
73
74
  handleSelect: (e, s) => b(e)
74
- }), m = _(() => t.remote ? f.value ? t.options : t.cachedOptions.length ? t.cachedOptions : t.options : R.value), A = (e) => {
75
+ }), y = I(() => t.remote ? f.value ? t.options : t.cachedOptions.length ? t.cachedOptions : t.options : R.value), A = (e) => {
75
76
  if (!(!t.selected || typeof t.selected != "object") && e.key && e.key in t.selected)
76
77
  return t.selected[e.key];
77
- }, L = (e) => e.disabled ? !1 : Array.isArray(t.selected) ? t.selected.includes(e.value) : t.selected && typeof t.selected == "object" && e.key ? t.selected[e.key] === e.value : t.selected === e.value, F = (e, s) => {
78
+ }, L = (e) => e.disabled ? !1 : Array.isArray(t.selected) ? t.selected.includes(e.value) : t.selected && typeof t.selected == "object" && e.key ? t.selected[e.key] === e.value : t.selected === e.value, F = (e) => !e.key || !t.selected || typeof t.selected != "object" ? !1 : !!t.selected[e.key], K = (e, s) => {
79
+ if (!s.key) return;
80
+ const l = {
81
+ label: s.label,
82
+ value: e,
83
+ key: s.key,
84
+ data: s.data
85
+ };
86
+ i("select", l);
87
+ }, U = (e, s) => {
78
88
  let l = s.value;
79
89
  e.key && (l = { [e.key]: l });
80
- const d = {
90
+ const r = {
81
91
  label: e.label,
82
92
  value: l,
83
93
  data: s.data,
84
94
  key: e.key
85
95
  };
86
- u("select", d);
87
- }, K = async () => {
88
- await ee();
96
+ i("select", r);
97
+ }, q = async () => {
98
+ await le();
89
99
  let e = -1;
90
100
  t.layout !== "grouped" && (t.selectedIndex !== null && t.selectedIndex >= 0 ? e = t.selectedIndex : t.selected !== void 0 && typeof t.selected != "object" && (e = t.options.findIndex(
91
101
  (s) => s.value === t.selected
92
102
  )), e !== -1 && z(e));
93
103
  };
94
- return B(
95
- () => m.value,
104
+ return _(
105
+ () => y.value,
96
106
  () => {
97
- k.value = -1;
107
+ h.value = -1;
98
108
  }
99
- ), J(() => {
100
- K(), window.addEventListener("keydown", I);
101
- }), Q(() => {
102
- window.removeEventListener("keydown", I);
103
- }), (e, s) => (o(), c("div", re, [
104
- j.value ? (o(), c("div", de, [
105
- p(te, {
109
+ ), W(() => {
110
+ q(), window.addEventListener("keydown", O);
111
+ }), X(() => {
112
+ window.removeEventListener("keydown", O);
113
+ }), (e, s) => (o(), c("div", de, [
114
+ P.value ? (o(), c("div", ie, [
115
+ x(se, {
106
116
  modelValue: f.value,
107
117
  "onUpdate:modelValue": s[0] || (s[0] = (l) => f.value = l),
108
118
  placeholder: "Search...",
@@ -111,101 +121,108 @@ const re = { class: "w-full min-w-[150px] flex flex-col" }, de = {
111
121
  variant: "transparent",
112
122
  "show-clear-button": !1
113
123
  }, null, 8, ["modelValue"])
114
- ])) : i("", !0),
115
- e.$slots.header ? (o(), c("div", ce, [
116
- h(e.$slots, "header")
117
- ])) : i("", !0),
118
- y("div", {
124
+ ])) : u("", !0),
125
+ e.$slots.header ? (o(), c("div", ue, [
126
+ v(e.$slots, "header")
127
+ ])) : u("", !0),
128
+ g("div", {
119
129
  ref_key: "containerRef",
120
- ref: w,
130
+ ref: S,
121
131
  tabindex: "0",
122
132
  role: "menu",
123
133
  class: C([
124
134
  "w-full p-1 space-y-0.5 overflow-y-auto overflow-x-hidden focus:outline-none flex-1",
125
135
  t.class
126
136
  ]),
127
- style: W({ maxHeight: t.maxHeight }),
137
+ style: Y({ maxHeight: t.maxHeight }),
128
138
  onMousemove: s[1] || (s[1] = //@ts-ignore
129
- (...l) => n(M) && n(M)(...l)),
139
+ (...l) => n($) && n($)(...l)),
130
140
  onScroll: H
131
141
  }, [
132
- m.value.length === 0 && r.options?.length > 0 && !r.loading ? (o(), c("div", ae, " No options found ")) : i("", !0),
133
- r.layout === "grouped" ? (o(), v(se, {
142
+ y.value.length === 0 && a.options?.length > 0 && !a.loading ? (o(), c("div", fe, " No options found ")) : u("", !0),
143
+ a.layout === "grouped" ? (o(), m(re, {
134
144
  key: 1,
135
- options: m.value,
136
- selected: r.selected,
137
- selectable: r.selectable,
138
- columns: r.columns,
145
+ options: y.value,
146
+ selected: a.selected,
147
+ selectable: a.selectable,
148
+ columns: a.columns,
139
149
  onSelect: b
140
- }, null, 8, ["options", "selected", "selectable", "columns"])) : (o(!0), c(T, { key: 2 }, X(m.value, (l, d) => (o(), c(T, { key: d }, [
141
- l.label === "---" ? (o(), c("div", ie)) : l.children && l.children.length > 0 ? (o(), v(n(E), {
150
+ }, null, 8, ["options", "selected", "selectable", "columns"])) : (o(!0), c(T, { key: 2 }, Z(y.value, (l, r) => (o(), c(T, { key: r }, [
151
+ l.label === "---" ? (o(), c("div", me)) : l.data?.isBoolean ? (o(), m(ne, {
142
152
  key: 1,
153
+ option: l,
154
+ value: F(l),
155
+ focused: n(p) && n(h) === r,
156
+ onChange: K,
157
+ onMouseenter: (d) => n(w)(r)
158
+ }, null, 8, ["option", "value", "focused", "onMouseenter"])) : l.children && l.children.length > 0 ? (o(), m(n(j), {
159
+ key: 2,
143
160
  position: l.position || t.nestedPosition,
144
161
  offset: l.offset || t.nestedOffset,
145
162
  class: "w-full",
146
163
  options: l.children,
147
164
  selected: A(l),
148
- menuId: n(P)(l),
165
+ menuId: n(D)(l),
149
166
  nestedPosition: t.nestedPosition,
150
167
  nestedOffset: t.nestedOffset,
151
168
  selectable: t.selectable,
152
- ignoreClickOutside: n(V)(l.children),
153
- onOnSelect: (a) => F(l, a)
169
+ ignoreClickOutside: n(E)(l.children),
170
+ onOnSelect: (d) => U(l, d)
154
171
  }, {
155
172
  trigger: N(() => [
156
- y("div", {
173
+ g("div", {
157
174
  "data-dropdown-item": "",
158
175
  class: C(["relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors justify-between w-full", [
159
- n(S) && n(k) === d ? "bg-accent text-accent-foreground" : "hover:bg-accent hover:text-accent-foreground",
176
+ n(p) && n(h) === r ? "bg-accent text-accent-foreground" : "hover:bg-accent hover:text-accent-foreground",
160
177
  l.disabled ? "opacity-50 cursor-not-allowed" : ""
161
178
  ]]),
162
- onMouseenter: (a) => n(O)(d)
179
+ onMouseenter: (d) => n(w)(r)
163
180
  }, [
164
- y("div", fe, [
165
- l.icon ? (o(), v(x, {
181
+ g("div", ye, [
182
+ l.icon ? (o(), m(M, {
166
183
  key: 0,
167
184
  icon: l.icon,
168
185
  class: "h-4 w-4 shrink-0 opacity-70"
169
- }, null, 8, ["icon"])) : i("", !0),
170
- y("span", me, Y(l.label), 1)
186
+ }, null, 8, ["icon"])) : u("", !0),
187
+ g("span", ve, ee(l.label), 1)
171
188
  ]),
172
- p(x, {
189
+ x(M, {
173
190
  icon: "lucide:chevron-right",
174
191
  class: "h-4 w-4 text-muted-foreground shrink-0 ml-2"
175
192
  })
176
- ], 42, ue)
193
+ ], 42, he)
177
194
  ]),
178
195
  _: 2
179
- }, 1032, ["position", "offset", "options", "selected", "menuId", "nestedPosition", "nestedOffset", "selectable", "ignoreClickOutside", "onOnSelect"])) : (o(), v(le, {
180
- key: 2,
196
+ }, 1032, ["position", "offset", "options", "selected", "menuId", "nestedPosition", "nestedOffset", "selectable", "ignoreClickOutside", "onOnSelect"])) : (o(), m(oe, {
197
+ key: 3,
181
198
  option: l,
182
- index: d,
199
+ index: r,
183
200
  selected: L(l),
184
- focused: n(S) && n(k) === d,
185
- selectable: r.selectable,
186
- onClick: (a) => b(l),
187
- onMouseenter: (a) => n(O)(d)
201
+ focused: n(p) && n(h) === r,
202
+ selectable: a.selectable,
203
+ onClick: (d) => b(l),
204
+ onMouseenter: (d) => n(w)(r)
188
205
  }, {
189
- default: N((a) => [
190
- h(e.$slots, "item", Z({ ref_for: !0 }, a))
206
+ default: N((d) => [
207
+ v(e.$slots, "item", te({ ref_for: !0 }, d))
191
208
  ]),
192
209
  _: 3
193
210
  }, 8, ["option", "index", "selected", "focused", "selectable", "onClick", "onMouseenter"]))
194
211
  ], 64))), 128)),
195
- r.loading ? (o(), c("div", he, [
196
- p(x, {
212
+ a.loading ? (o(), c("div", ge, [
213
+ x(M, {
197
214
  icon: "lucide:loader-2",
198
215
  class: "w-4 h-4 animate-spin text-muted-foreground"
199
216
  })
200
- ])) : i("", !0),
201
- h(e.$slots, "menu")
217
+ ])) : u("", !0),
218
+ v(e.$slots, "menu")
202
219
  ], 38),
203
- e.$slots.footer ? (o(), c("div", ye, [
204
- h(e.$slots, "footer")
205
- ])) : i("", !0)
220
+ e.$slots.footer ? (o(), c("div", ke, [
221
+ v(e.$slots, "footer")
222
+ ])) : u("", !0)
206
223
  ]));
207
224
  }
208
225
  });
209
226
  export {
210
- Se as default
227
+ Be as default
211
228
  };
@@ -4,7 +4,7 @@ declare function __VLS_template(): {
4
4
  slots: {
5
5
  default?(_: {
6
6
  data: any;
7
- index: number;
7
+ index: any;
8
8
  colIndex: number;
9
9
  }): any;
10
10
  };
@@ -1,7 +1,7 @@
1
1
  import o from "./Masonry.vue2.js";
2
2
  /* empty css */
3
3
  import r from "../../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ r(o, [["__scopeId", "data-v-5c6cb3dc"]]);
4
+ const m = /* @__PURE__ */ r(o, [["__scopeId", "data-v-314f8a7f"]]);
5
5
  export {
6
6
  m as default
7
7
  };
@@ -1,7 +1,7 @@
1
- import { defineComponent as N, ref as d, computed as p, onMounted as B, onUnmounted as K, openBlock as s, createBlock as O, resolveDynamicComponent as z, normalizeStyle as v, withCtx as C, createElementBlock as i, Fragment as y, renderList as g, renderSlot as S } from "vue";
2
- import { MASONRY_BREAKPOINTS as b } from "./types.js";
1
+ import { defineComponent as B, ref as d, computed as m, onMounted as K, onUnmounted as O, openBlock as u, createBlock as w, resolveDynamicComponent as z, normalizeStyle as v, withCtx as C, createElementBlock as c, Fragment as p, renderList as y, renderSlot as S } from "vue";
2
+ import { MASONRY_BREAKPOINTS as x } from "./types.js";
3
3
  import { debounce as A } from "../../utils/functions.js";
4
- const j = /* @__PURE__ */ N({
4
+ const j = /* @__PURE__ */ B({
5
5
  __name: "Masonry",
6
6
  props: {
7
7
  data: {},
@@ -10,59 +10,65 @@ const j = /* @__PURE__ */ N({
10
10
  tag: { default: "div" },
11
11
  itemKey: { default: "id" }
12
12
  },
13
- setup(c) {
14
- const l = c, a = d(null), f = d(0), u = d(null), x = () => {
15
- a.value && (f.value = a.value.clientWidth);
16
- }, h = p(() => {
13
+ setup(i) {
14
+ const l = i, r = d(null), f = d(0), s = d(null), g = () => {
15
+ r.value && (f.value = r.value.clientWidth);
16
+ }, b = m(() => {
17
17
  if (typeof l.cols == "number") return l.cols;
18
- const t = f.value;
19
- if (!t) return l.cols.default || 1;
20
- let n = l.cols.default || 1;
21
- const o = Object.keys(l.cols).map((e) => {
22
- let r = 0;
23
- return typeof e == "number" || !isNaN(Number(e)) ? r = Number(e) : e in b && (r = b[e]), { k: e, px: r, val: l.cols[e] };
24
- }).filter((e) => e.val !== void 0).sort((e, r) => e.px - r.px);
25
- for (const e of o)
26
- t >= e.px && (n = e.val);
27
- return n || 1;
28
- }), R = p(() => {
29
- const t = h.value, n = Array.from({ length: t }, () => []), o = l.data.length;
30
- for (let e = 0; e < o; e++)
31
- n[e % t].push(l.data[e]);
32
- return n;
18
+ const n = f.value;
19
+ if (!n) return l.cols.default || 1;
20
+ let o = l.cols.default || 1;
21
+ const t = Object.keys(l.cols).map((e) => {
22
+ let a = 0;
23
+ return typeof e == "number" || !isNaN(Number(e)) ? a = Number(e) : e in x && (a = x[e]), { k: e, px: a, val: l.cols[e] };
24
+ }).filter((e) => e.val !== void 0).sort((e, a) => e.px - a.px);
25
+ for (const e of t)
26
+ n >= e.px && (o = e.val);
27
+ return o || 1;
28
+ }), h = m(() => {
29
+ const n = b.value, o = Array.from({ length: n }, () => []), t = l.data.length;
30
+ for (let e = 0; e < t; e++)
31
+ o[e % n].push({
32
+ data: l.data[e],
33
+ index: e
34
+ });
35
+ return o;
33
36
  });
34
- B(() => {
35
- x();
36
- const t = A((n) => {
37
- const o = n[0];
38
- o && (f.value = o.contentRect.width);
37
+ K(() => {
38
+ g();
39
+ const n = A((o) => {
40
+ const t = o[0];
41
+ t && (f.value = t.contentRect.width);
39
42
  }, 100);
40
- u.value = new ResizeObserver(t), a.value && u.value.observe(a.value);
41
- }), K(() => {
42
- u.value && (u.value.disconnect(), u.value = null);
43
+ s.value = new ResizeObserver(n), r.value && s.value.observe(r.value);
44
+ }), O(() => {
45
+ s.value && (s.value.disconnect(), s.value = null);
43
46
  });
44
- const w = (t, n) => t && typeof t == "object" && l.itemKey in t ? t[l.itemKey] : n;
45
- return (t, n) => (s(), O(z(c.tag), {
47
+ const R = (n, o) => {
48
+ const t = n.data;
49
+ return t && typeof t == "object" && l.itemKey in t ? t[l.itemKey] : o;
50
+ };
51
+ return (n, o) => (u(), w(z(i.tag), {
46
52
  ref_key: "containerRef",
47
- ref: a,
53
+ ref: r,
48
54
  class: "flex w-full",
49
- style: v({ gap: `${c.gap}px` })
55
+ style: v({ gap: `${i.gap}px` })
50
56
  }, {
51
57
  default: C(() => [
52
- (s(!0), i(y, null, g(R.value, (o, e) => (s(), i("div", {
58
+ (u(!0), c(p, null, y(h.value, (t, e) => (u(), c("div", {
53
59
  key: e,
54
60
  class: "flex flex-col flex-1 min-w-0",
55
- style: v({ gap: `${c.gap}px` }),
61
+ style: v({ gap: `${i.gap}px` }),
56
62
  role: "list"
57
63
  }, [
58
- (s(!0), i(y, null, g(o, (r, m) => (s(), i("div", {
59
- key: w(r, m),
64
+ (u(!0), c(p, null, y(t, (a, N) => (u(), c("div", {
65
+ key: R(a, N),
60
66
  class: "masonry-item",
61
67
  role: "listitem"
62
68
  }, [
63
- S(t.$slots, "default", {
64
- data: r,
65
- index: m,
69
+ S(n.$slots, "default", {
70
+ data: a.data,
71
+ index: a.index,
66
72
  colIndex: e
67
73
  }, void 0, !0)
68
74
  ]))), 128))
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "vlite3",
3
3
  "private": false,
4
+ "author": "safdar-azeem",
4
5
  "description": "A lightweight Vue 3 UI component library built with Tailwind CSS.",
5
6
  "license": "MIT",
6
- "version": "0.0.4",
7
+ "version": "0.0.7",
7
8
  "type": "module",
8
9
  "main": "index.js",
9
- "module": "index.js",
10
- "types": "index.d.ts",
11
10
  "scripts": {
12
11
  "dev": "vite",
13
12
  "build": "vue-tsc -b && vite build",
13
+ "postbuild": "node scripts/bundle-css.js",
14
14
  "preview": "vite preview",
15
15
  "prepare:dist": "npm run build && cp package.json README.md dist/",
16
16
  "release:patch": "npm version patch && npm run prepare:dist && cd dist && npm publish",
@@ -18,14 +18,6 @@
18
18
  "release:major": "npm version major && npm run prepare:dist && cd dist && npm publish",
19
19
  "publish:dist": "npm run prepare:dist && cd dist && npm publish"
20
20
  },
21
- "exports": {
22
- ".": {
23
- "types": "./index.d.ts",
24
- "import": "./index.js",
25
- "require": "./index.js"
26
- },
27
- "./style.css": "./index.css"
28
- },
29
21
  "dependencies": {
30
22
  "@formkit/drag-and-drop": "^0.5.3",
31
23
  "@iconify/vue": "5.0.0",
@@ -50,6 +42,7 @@
50
42
  "vite": "^7.2.4",
51
43
  "vite-plugin-dts": "^4.5.4",
52
44
  "vue-tsc": "^3.1.4",
53
- "vue": "^3.5.24"
45
+ "vue": "^3.5.24",
46
+ "vue-router": "^4.0.0"
54
47
  }
55
48
  }
package/style.css ADDED
@@ -0,0 +1,545 @@
1
+ @import 'tailwindcss';
2
+ @layer theme, base, components, utilities;
3
+
4
+ /* --- theme.css --- */
5
+ @layer base {
6
+ :root {
7
+ /* Base Colors */
8
+ --color-white: #ffffff;
9
+ --color-black: #000000;
10
+
11
+ --color-gray-50: #FAFAFA;
12
+ --color-gray-100: #F6F5F6;
13
+ --color-gray-150: #F5F5F5;
14
+ --color-gray-200: #EFEFEF;
15
+ --color-gray-250: #d1d1d6;
16
+ --color-gray-300: #c7c7cc;
17
+ --color-gray-350: #aeaeb2;
18
+ --color-gray-400: #8e8e93;
19
+ --color-gray-450: #636366;
20
+ --color-gray-500: #636366;
21
+ --color-gray-550: #48484a;
22
+ --color-gray-600: #48484a;
23
+ --color-gray-650: #3a3a3c;
24
+ --color-gray-700: #3a3a3c;
25
+ --color-gray-750: #2c2c2e;
26
+ --color-gray-800: #1c1c1e;
27
+ --color-gray-850: #000000;
28
+ --color-gray-900: #000000;
29
+
30
+
31
+ --color-body: var(--color-white);
32
+ --border: var(--color-gray-250);
33
+
34
+ /* NEW SEMANTIC TOKENS (shadcn/ui style) */
35
+ --background: var(--color-white);
36
+ --foreground: var(--color-gray-900);
37
+
38
+ --card: var(--color-gray-50);
39
+ --card-foreground: var(--color-gray-900);
40
+
41
+ --popover: var(--color-white);
42
+ --popover-foreground: var(--color-gray-900);
43
+
44
+ --primary: #18181b;
45
+ --primary-foreground: var(--color-white);
46
+
47
+ /* Secondary: Slightly darker than muted for actions (Buttons) */
48
+ --secondary: var(--color-gray-200);
49
+ --secondary-foreground: var(--color-gray-900);
50
+
51
+ /* Muted: Subtle backgrounds (Cards, Inputs) */
52
+ --muted: var(--color-gray-100);
53
+ --muted-foreground: var(--color-gray-500);
54
+
55
+ /* Accent: Interactive hover states (Dropdown items, etc) */
56
+ --accent: var(--color-gray-150);
57
+ --accent-foreground: var(--color-gray-900);
58
+
59
+ --destructive: #ff3b30;
60
+ --destructive-foreground: var(--color-white);
61
+
62
+ --border: var(--color-gray-250);
63
+ --input: var(--color-gray-250);
64
+ --ring: var(--color-gray-900);
65
+ /* END NEW SEMANTIC TOKENS */
66
+
67
+
68
+ /* Primary - Refined Dark Zinc/Black */
69
+ --color-primary-light: #f4f4f5;
70
+ --color-primary: #18181b;
71
+ --color-primary-dark: #3f3f46;
72
+ --color-primary-fg: var(--color-white);
73
+ --color-primary-fg-light: #18181b;
74
+
75
+ /* Semantics - Apple-like Human Interface Colors */
76
+
77
+ /* Danger (System Red) */
78
+ --color-danger-light: #fff2f2;
79
+ --color-danger: #ff3b30;
80
+ --color-danger-dark: #d70015;
81
+ --color-danger-fg: var(--color-white);
82
+ --color-danger-fg-light: #d70015;
83
+
84
+ /* Warning (System Orange/Yellow) */
85
+ --color-warning-light: #fff9e6;
86
+ --color-warning: #ff9500;
87
+ --color-warning-dark: #c95100;
88
+ --color-warning-fg: var(--color-white);
89
+ --color-warning-fg-light: #c95100;
90
+
91
+ /* Info (System Blue) */
92
+ --color-info-light: #f0f8ff;
93
+ --color-info: #007aff;
94
+ --color-info-dark: #0051a8;
95
+ --color-info-fg: var(--color-white);
96
+ --color-info-fg-light: #0051a8;
97
+
98
+ /* Success (System Green) */
99
+ --color-success-light: #f2fffa;
100
+ --color-success: #34c759;
101
+ --color-success-dark: #248a3d;
102
+ --color-success-fg: var(--color-white);
103
+ --color-success-fg-light: #248a3d;
104
+
105
+ /* v-tooltip-lite variables */
106
+ --tooltip-bg: var(--popover) !important;
107
+ --tooltip-text: var(--popover-foreground) !important;
108
+ --tooltip-border: var(--border) !important;
109
+
110
+ --tooltip-radius: var(--radius) !important;
111
+ --tooltip-shadow: var(--shadow-dropdown) !important;
112
+ --tooltip-arrow-size: 0.5em !important;
113
+ --tooltip-z-index: 50;
114
+ --tooltip-font-size: unset !important;
115
+ --date-picker-border: var(--border) !important;
116
+
117
+ }
118
+
119
+ .dark {
120
+ /* Dark Mode Overrides */
121
+ --color-white: #000000;
122
+ --color-black: #ffffff;
123
+
124
+ /* Notion Dark Background + Apple Grays */
125
+ --color-body: oklch(0.145 0 0);
126
+ --border: #2c2c2e;
127
+
128
+ --color-gray-50: #161616;
129
+ --color-gray-100: #161616;
130
+ --color-gray-150: #3d3d3f;
131
+ --color-gray-200: #262626;
132
+ --color-gray-250: #2d2d2d;
133
+ --color-gray-300: #545456;
134
+ --color-gray-350: #636366;
135
+ --color-gray-400: #8e8e93;
136
+ --color-gray-450: #aeaeb2;
137
+ --color-gray-500: #aeaeb2;
138
+ --color-gray-550: #c7c7cc;
139
+ --color-gray-600: #c7c7cc;
140
+ --color-gray-650: #d1d1d6;
141
+ --color-gray-700: #e5e5ea;
142
+ --color-gray-750: #f2f2f7;
143
+ --color-gray-800: #f2f2f7;
144
+ --color-gray-850: #ffffff;
145
+ --color-gray-900: #ffffff;
146
+
147
+ /* NEW SEMANTIC TOKENS (Dark Mode) */
148
+ --background: var(--color-body);
149
+ --foreground: var(--color-gray-900);
150
+
151
+ --card: #181818;
152
+ /* Adjusted: using darker context */
153
+ --card-foreground: var(--color-900);
154
+
155
+ --popover: var(--color-body);
156
+ --popover-foreground: var(--color-gray-900);
157
+
158
+ --primary: #f4f4f5;
159
+ --primary-foreground: #18181b;
160
+
161
+ --secondary: var(--color-gray-200);
162
+ --secondary-foreground: var(--color-gray-900);
163
+
164
+ --muted: var(--color-gray-50);
165
+ --muted-foreground: var(--color-gray-600);
166
+
167
+ --accent: var(--color-gray-100);
168
+ --accent-foreground: var(--color-gray-900);
169
+
170
+ --destructive: #bf2625;
171
+ --destructive-foreground: var(--color-black);
172
+
173
+ --border: var(--color-gray-200);
174
+ --input: var(--color-gray-200);
175
+ --ring: var(--color-gray-300);
176
+ /* END NEW SEMANTIC TOKENS */
177
+
178
+ /* Primary */
179
+ --color-primary-light: #2c2c2e;
180
+ --color-primary: #f4f4f5;
181
+ /* High Contrast White/Gray */
182
+ --color-primary-dark: #d4d4d8;
183
+ --color-primary-fg: #191919;
184
+ --color-primary-fg-light: #f4f4f5;
185
+
186
+ /* Semantics - Dark Mode High Contrast */
187
+
188
+ /* Danger */
189
+ --color-danger-light: #4E1D1A;
190
+ --color-danger-fg-light: #FCFCFC;
191
+ --color-danger: #BF2625;
192
+ --color-danger-fg: #ffffff;
193
+ --color-danger-dark: #D72627;
194
+
195
+ /* Warning */
196
+ --color-warning-light: #3a1e00;
197
+ --color-warning-fg-light: #ff9f0a;
198
+ --color-warning: #ff9f0a;
199
+ --color-warning-fg: #ffffff;
200
+ --color-warning-dark: #ffb340;
201
+
202
+ /* Info */
203
+ --color-info-light: #001a33;
204
+ --color-info-fg-light: #0a84ff;
205
+ --color-info: #0a84ff;
206
+ --color-info-fg: #ffffff;
207
+ --color-info-dark: #409cff;
208
+
209
+ /* Success */
210
+ --color-success-light: #1B3419;
211
+ --color-success-fg-light: #ffffff;
212
+ --color-success: #007E51;
213
+ --color-success-fg: #ffffff;
214
+ --color-success-dark: #00613f;
215
+ }
216
+ }
217
+
218
+ @theme {
219
+ /* Map Utilities to CSS Variables */
220
+ --color-white: var(--color-white);
221
+ --color-black: var(--color-black);
222
+
223
+ --color-gray-50: var(--color-gray-50);
224
+ --color-gray-100: var(--color-gray-100);
225
+ --color-gray-150: var(--color-gray-150);
226
+ --color-gray-200: var(--color-gray-200);
227
+ --color-gray-250: var(--color-gray-250);
228
+ --color-gray-300: var(--color-gray-300);
229
+ --color-gray-350: var(--color-gray-350);
230
+ --color-gray-400: var(--color-gray-400);
231
+ --color-gray-450: var(--color-gray-450);
232
+ --color-gray-500: var(--color-gray-500);
233
+ --color-gray-550: var(--color-gray-550);
234
+ --color-gray-600: var(--color-gray-600);
235
+ --color-gray-650: var(--color-gray-650);
236
+ --color-gray-700: var(--color-gray-700);
237
+ --color-gray-750: var(--color-gray-750);
238
+ --color-gray-800: var(--color-gray-800);
239
+ --color-gray-850: var(--color-gray-850);
240
+ --color-gray-900: var(--color-gray-900);
241
+
242
+ --color-body: var(--color-body);
243
+ --border: var(--border);
244
+
245
+ /* NEW SEMANTIC COLORS */
246
+ --color-background: var(--background);
247
+ --color-foreground: var(--foreground);
248
+
249
+ --color-card: var(--card);
250
+ --color-card-foreground: var(--card-foreground);
251
+
252
+ --color-popover: var(--popover);
253
+ --color-popover-foreground: var(--popover-foreground);
254
+
255
+ --color-primary: var(--primary);
256
+ --color-primary-foreground: var(--primary-foreground);
257
+
258
+ --color-secondary: var(--secondary);
259
+ --color-secondary-foreground: var(--secondary-foreground);
260
+
261
+ --color-muted: var(--muted);
262
+ --color-muted-foreground: var(--muted-foreground);
263
+
264
+ --color-accent: var(--accent);
265
+ --color-accent-foreground: var(--accent-foreground);
266
+
267
+ --color-destructive: var(--destructive);
268
+ --color-destructive-foreground: var(--destructive-foreground);
269
+
270
+ --color-border: var(--border);
271
+ --color-input: var(--input);
272
+ --color-ring: var(--ring);
273
+
274
+
275
+ --color-primary-light: var(--color-primary-light);
276
+ /* --color-primary: var(--color-primary); -> Overridden/merged above */
277
+ --color-primary-dark: var(--color-primary-dark);
278
+ --color-primary-fg: var(--color-primary-fg);
279
+ --color-primary-fg-light: var(--color-primary-fg-light);
280
+
281
+ --color-danger-light: var(--color-danger-light);
282
+ --color-danger: var(--color-danger);
283
+ --color-danger-dark: var(--color-danger-dark);
284
+ --color-danger-fg: var(--color-danger-fg);
285
+ --color-danger-fg-light: var(--color-danger-fg-light);
286
+
287
+ --color-warning-light: var(--color-warning-light);
288
+ --color-warning: var(--color-warning);
289
+ --color-warning-dark: var(--color-warning-dark);
290
+ --color-warning-fg: var(--color-warning-fg);
291
+ --color-warning-fg-light: var(--color-warning-fg-light);
292
+
293
+ --color-info-light: var(--color-info-light);
294
+ --color-info: var(--color-info);
295
+ --color-info-dark: var(--color-info-dark);
296
+ --color-info-fg: var(--color-info-fg);
297
+ --color-info-fg-light: var(--color-info-fg-light);
298
+
299
+ --color-success-light: var(--color-success-light);
300
+ --color-success: var(--color-success);
301
+ --color-success-dark: var(--color-success-dark);
302
+ --color-success-fg: var(--color-success-fg);
303
+ --color-success-fg-light: var(--color-success-fg-light);
304
+
305
+ /* Shadows */
306
+ --shadow-dropdown: 0 3px 4px -3px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 3%);
307
+ --shadow-offcanvas: 0 10px 15px -3px rgb(0 0 0 / 0.1),
308
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
309
+ --shadow-card: 0 1px 3px 0 rgb(0 0 0 / 0.1),
310
+ 0 1px 2px -1px rgb(0 0 0 / 0.1);
311
+ --shadow-DEFAULT: 0 1px 2px 0 rgb(0 0 0 / 0.05);
312
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
313
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
314
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),
315
+ 0 8px 10px -6px rgb(0 0 0 / 0.1);
316
+
317
+ /* Radii */
318
+ --radius: 0.5rem;
319
+ --radius-sm: calc(var(--radius) - 2px);
320
+ --radius-md: var(--radius);
321
+ --radius-lg: calc(var(--radius) + 3px);
322
+ --radius-xl: calc(var(--radius) + 5px);
323
+ --radius-2xl: calc(var(--radius) + 7px);
324
+
325
+ /* Animations */
326
+ --animate-accordion-down: accordion-down 0.2s ease-out;
327
+ --animate-accordion-up: accordion-up 0.2s ease-out;
328
+ --animate-ripple: ripple 600ms linear;
329
+ }
330
+
331
+ /* --- base.css --- */
332
+ *,
333
+ *::before,
334
+ *::after {
335
+ box-sizing: border-box;
336
+ letter-spacing: -0.01px;
337
+ }
338
+
339
+ html {
340
+ scroll-behavior: smooth;
341
+ }
342
+
343
+
344
+ @layer components {
345
+ body {
346
+ @apply bg-background text-foreground;
347
+ font-feature-settings: "rlig" 1, "calt" 1;
348
+ font-family: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji',
349
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
350
+ }
351
+
352
+
353
+ /* Ripple */
354
+ span.ripple {
355
+ position: absolute;
356
+ border-radius: 50%;
357
+ transform: scale(0);
358
+ animation: ripple 600ms linear;
359
+ background-color: rgba(255, 255, 255, 0.094);
360
+ pointer-events: none;
361
+ }
362
+
363
+ *,
364
+ ::before,
365
+ ::after {
366
+ @apply border-border;
367
+ }
368
+
369
+ h1,
370
+ .h1,
371
+ h2,
372
+ .h2,
373
+ h3,
374
+ .h3,
375
+ h4,
376
+ .h4 {
377
+ @apply font-bold text-gray-900;
378
+ }
379
+
380
+ h5,
381
+ .h5,
382
+ h6,
383
+ .h6 {
384
+ @apply font-sans text-gray-900;
385
+ }
386
+
387
+ h1,
388
+ .h1 {
389
+ @apply text-3xl;
390
+ line-height: 1.3em;
391
+ }
392
+
393
+ h2,
394
+ .h2 {
395
+ @apply text-2xl;
396
+ line-height: 1.3em;
397
+ }
398
+
399
+ h3,
400
+ .h3 {
401
+ @apply text-xl;
402
+ line-height: 1.25em;
403
+ }
404
+
405
+ h4,
406
+ .h4 {
407
+ @apply text-lg;
408
+ }
409
+
410
+ h5,
411
+ .h5 {
412
+ @apply font-semibold;
413
+ }
414
+
415
+ h6,
416
+ .h6 {
417
+ @apply font-medium;
418
+ }
419
+
420
+ small {
421
+ @apply text-sm;
422
+ }
423
+
424
+ :root {
425
+ scroll-behavior: smooth;
426
+ }
427
+
428
+ .dropdown .tooltip-content {
429
+ padding: 0 !important;
430
+ }
431
+
432
+ .basic-tooltip .tooltip-content {
433
+ padding: 0.3em 0.7em !important;
434
+ font-size: 0.8em
435
+ }
436
+ }
437
+
438
+
439
+ @keyframes accordion-down {
440
+ from {
441
+ height: 0;
442
+ }
443
+
444
+ to {
445
+ height: var(--radix-accordion-content-height);
446
+ }
447
+ }
448
+
449
+ @keyframes accordion-up {
450
+ from {
451
+ height: var(--radix-accordion-content-height);
452
+ }
453
+
454
+ to {
455
+ height: 0;
456
+ }
457
+ }
458
+
459
+ @keyframes ripple {
460
+ to {
461
+ transform: scale(4);
462
+ opacity: 0;
463
+ }
464
+ }
465
+
466
+ #icon-picker {
467
+ --iconPicker-text: theme('colors.gray.700');
468
+ --iconPicker-border: theme('colors.gray.250');
469
+ --iconPicker-primary: theme('colors.primary.DEFAULT');
470
+ --iconPicker-primary-fg: theme('colors.primary.fg');
471
+ --iconPicker-primary-hover: theme('colors.primary.dark');
472
+ --iconPicker-radius: 0.375em;
473
+ --iconPicker-gap: 0.25em;
474
+ --iconPicker-input-height: 2.125em;
475
+ --iconPicker-selected-bg: theme('colors.gray.100');
476
+ --iconPicker-font-base: 15.5px;
477
+ --iconPicker-transition: all 0.2s ease;
478
+ }
479
+
480
+ /* --- input.css --- */
481
+ input[type='number']::-webkit-inner-spin-button,
482
+ input[type='number']::-webkit-outer-spin-button {
483
+ -webkit-appearance: none;
484
+ margin: 0;
485
+ }
486
+
487
+ /* Firefox */
488
+ input[type='number'] {
489
+ -moz-appearance: textfield;
490
+ }
491
+
492
+ /* Hide the stepper controls */
493
+ input[type='number']::-webkit-inner-spin-button,
494
+ input[type='number']::-webkit-outer-spin-button {
495
+ -webkit-appearance: none;
496
+ margin: 0;
497
+ }
498
+
499
+ input:-webkit-autofill,
500
+ input:-webkit-autofill:hover,
501
+ input:-webkit-autofill:focus,
502
+ textarea:-webkit-autofill,
503
+ textarea:-webkit-autofill:hover,
504
+ textarea:-webkit-autofill:focus,
505
+ select:-webkit-autofill,
506
+ select:-webkit-autofill:hover,
507
+ select:-webkit-autofill:focus {
508
+ -webkit-text-fill-color: theme('colors.gray.900');
509
+ -webkit-box-shadow: 0 0 0px 1000px theme('colors.body') inset;
510
+ transition: background-color 5000s ease-in-out 0s;
511
+ }
512
+
513
+ input[type='number']::-webkit-inner-spin-button,
514
+ input[type='number']::-webkit-outer-spin-button {
515
+ opacity: 0;
516
+ }
517
+
518
+ input[type='date']::-webkit-inner-spin-button,
519
+ input[type='date']::-webkit-calendar-picker-indicator {
520
+ display: none;
521
+ -webkit-appearance: none;
522
+ }
523
+
524
+ textarea {
525
+ scrollbar-width: thin !important;
526
+ }
527
+
528
+ textarea::-webkit-scrollbar {
529
+ width: 6px !important;
530
+ height: 6px !important;
531
+ }
532
+
533
+ textarea::-webkit-scrollbar-track {
534
+ border-radius: 10px !important;
535
+ }
536
+
537
+ textarea::-webkit-scrollbar-thumb {
538
+ border-radius: 10px !important;
539
+ border: 1px solid transparent !important;
540
+ background-clip: padding-box !important;
541
+ }
542
+
543
+ /* --- Vite Generated CSS --- */
544
+ .accordion-enter-active[data-v-d71e56f7],.accordion-leave-active[data-v-d71e56f7]{transition:height .3s ease-in-out}.attached-group[data-v-1a20a82d]:not(.vertical-group) button{border-radius:0}.attached-group[data-v-1a20a82d] button{position:relative;--radius: .375rem}.attached-group[data-v-1a20a82d] button:focus-visible,.attached-group[data-v-1a20a82d] button:hover{z-index:10}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child){margin-left:-1px}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:first-child{border-top-left-radius:var(--radius);border-bottom-left-radius:var(--radius);border-top-right-radius:0;border-bottom-right-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(:last-child){border-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:last-child{border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-bottom-left-radius:0}.vertical-group[data-v-1a20a82d] button:not(:first-child){margin-top:-1px}.vertical-group[data-v-1a20a82d] button:first-child{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(:last-child){border-radius:0}.vertical-group[data-v-1a20a82d] button:last-child{border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-top-right-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(.border):before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(.border):before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none;width:auto}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(.border):before{width:100%}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(.border):before{height:100%}.IroBox{border-radius:8px!important}.heatmap-container[data-v-7e3a425e]{width:100%;height:100%;display:flex;flex-direction:column;min-height:0}.heatmap-wrapper[data-v-7e3a425e]{width:100%;height:100%;overflow:auto;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box;position:relative}.heatmap-grid[data-v-7e3a425e]{width:fit-content;height:fit-content;transition:all .2s ease-in-out}.heatmap-cell[data-v-7e3a425e]{aspect-ratio:1 / 1;border-radius:2px;transition:all .15s ease-in-out;border:1px solid transparent;box-sizing:border-box}.heatmap-cell-interactive[data-v-7e3a425e]{cursor:pointer}.heatmap-cell-interactive[data-v-7e3a425e]:hover{transform:scale(1.1);border-color:var(--border);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;z-index:10;position:relative}.heatmap-cell-empty[data-v-7e3a425e]{opacity:.6}.heatmap-cell-hovered[data-v-7e3a425e]{outline:2px solid var(--primary);outline-offset:1px}.heatmap-cell-label[data-v-7e3a425e]{font-size:8px;font-weight:500;color:var(--foreground);opacity:.8;display:flex;align-items:center;justify-content:center;height:100%;width:100%;pointer-events:none}.heatmap-legend[data-v-7e3a425e]{display:flex;align-items:center;gap:.5rem;margin-top:1rem;font-size:.75rem;color:var(--muted-foreground);flex-shrink:0}.heatmap-legend-label[data-v-7e3a425e]{font-weight:500}.heatmap-legend-colors[data-v-7e3a425e]{display:flex;gap:.125rem}.heatmap-legend-item[data-v-7e3a425e]{width:.75rem;height:.75rem;border-radius:.375rem;border:1px solid var(--border)}@media(max-width:640px){.heatmap-wrapper[data-v-7e3a425e]{padding:12px}.heatmap-cell[data-v-7e3a425e]{border-radius:2px}.heatmap-cell-label[data-v-7e3a425e]{font-size:7px}}@media(min-width:641px)and (max-width:1023px){.heatmap-wrapper[data-v-7e3a425e]{padding:14px}.heatmap-cell[data-v-7e3a425e]{border-radius:2px}}@media(min-width:1024px){.heatmap-wrapper[data-v-7e3a425e]{padding:16px}.heatmap-cell[data-v-7e3a425e]{border-radius:3px}}.masonry-item[data-v-314f8a7f]{content-visibility:auto;contain-intrinsic-size:1px 200px}.slide-right-enter-active[data-v-fe22a19d],.slide-right-leave-active[data-v-fe22a19d],.slide-left-enter-active[data-v-fe22a19d],.slide-left-leave-active[data-v-fe22a19d]{transition:transform .3s ease-in-out}.slide-right-enter-from[data-v-fe22a19d],.slide-right-leave-to[data-v-fe22a19d]{transform:translate(100%)}.slide-left-enter-from[data-v-fe22a19d],.slide-left-leave-to[data-v-fe22a19d]{transform:translate(-100%)}.ease-out-spring[data-v-aa299289],.ease-spring[data-v-aa299289]{transition-timing-function:cubic-bezier(.16,1,.3,1)}
545
+
package/index.css DELETED
@@ -1 +0,0 @@
1
- .accordion-enter-active[data-v-d71e56f7],.accordion-leave-active[data-v-d71e56f7]{transition:height .3s ease-in-out}.attached-group[data-v-1a20a82d]:not(.vertical-group) button{border-radius:0}.attached-group[data-v-1a20a82d] button{position:relative;--radius: .375rem}.attached-group[data-v-1a20a82d] button:focus-visible,.attached-group[data-v-1a20a82d] button:hover{z-index:10}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child){margin-left:-1px}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:first-child{border-top-left-radius:var(--radius);border-bottom-left-radius:var(--radius);border-top-right-radius:0;border-bottom-right-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(:last-child){border-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:last-child{border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-bottom-left-radius:0}.vertical-group[data-v-1a20a82d] button:not(:first-child){margin-top:-1px}.vertical-group[data-v-1a20a82d] button:first-child{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(:last-child){border-radius:0}.vertical-group[data-v-1a20a82d] button:last-child{border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-top-right-radius:0}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(.border):before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(.border):before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none;width:auto}.vertical-group[data-v-1a20a82d] button:not(:first-child):not(.border):before{width:100%}.attached-group[data-v-1a20a82d]:not(.vertical-group) button:not(:first-child):not(.border):before{height:100%}.IroBox{border-radius:8px!important}.heatmap-container[data-v-7e3a425e]{width:100%;height:100%;display:flex;flex-direction:column;min-height:0}.heatmap-wrapper[data-v-7e3a425e]{width:100%;height:100%;overflow:auto;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box;position:relative}.heatmap-grid[data-v-7e3a425e]{width:fit-content;height:fit-content;transition:all .2s ease-in-out}.heatmap-cell[data-v-7e3a425e]{aspect-ratio:1 / 1;border-radius:2px;transition:all .15s ease-in-out;border:1px solid transparent;box-sizing:border-box}.heatmap-cell-interactive[data-v-7e3a425e]{cursor:pointer}.heatmap-cell-interactive[data-v-7e3a425e]:hover{transform:scale(1.1);border-color:var(--border);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;z-index:10;position:relative}.heatmap-cell-empty[data-v-7e3a425e]{opacity:.6}.heatmap-cell-hovered[data-v-7e3a425e]{outline:2px solid var(--primary);outline-offset:1px}.heatmap-cell-label[data-v-7e3a425e]{font-size:8px;font-weight:500;color:var(--foreground);opacity:.8;display:flex;align-items:center;justify-content:center;height:100%;width:100%;pointer-events:none}.heatmap-legend[data-v-7e3a425e]{display:flex;align-items:center;gap:.5rem;margin-top:1rem;font-size:.75rem;color:var(--muted-foreground);flex-shrink:0}.heatmap-legend-label[data-v-7e3a425e]{font-weight:500}.heatmap-legend-colors[data-v-7e3a425e]{display:flex;gap:.125rem}.heatmap-legend-item[data-v-7e3a425e]{width:.75rem;height:.75rem;border-radius:.375rem;border:1px solid var(--border)}@media(max-width:640px){.heatmap-wrapper[data-v-7e3a425e]{padding:12px}.heatmap-cell[data-v-7e3a425e]{border-radius:2px}.heatmap-cell-label[data-v-7e3a425e]{font-size:7px}}@media(min-width:641px)and (max-width:1023px){.heatmap-wrapper[data-v-7e3a425e]{padding:14px}.heatmap-cell[data-v-7e3a425e]{border-radius:2px}}@media(min-width:1024px){.heatmap-wrapper[data-v-7e3a425e]{padding:16px}.heatmap-cell[data-v-7e3a425e]{border-radius:3px}}.masonry-item[data-v-5c6cb3dc]{content-visibility:auto;contain-intrinsic-size:1px 200px}.slide-right-enter-active[data-v-fe22a19d],.slide-right-leave-active[data-v-fe22a19d],.slide-left-enter-active[data-v-fe22a19d],.slide-left-leave-active[data-v-fe22a19d]{transition:transform .3s ease-in-out}.slide-right-enter-from[data-v-fe22a19d],.slide-right-leave-to[data-v-fe22a19d]{transform:translate(100%)}.slide-left-enter-from[data-v-fe22a19d],.slide-left-leave-to[data-v-fe22a19d]{transform:translate(-100%)}.ease-out-spring[data-v-aa299289],.ease-spring[data-v-aa299289]{transition-timing-function:cubic-bezier(.16,1,.3,1)}