@devalok/shilp-sutra 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/_chunks/button.js +5 -5
  2. package/dist/_chunks/card.js +5 -5
  3. package/dist/_chunks/checkbox.js +3 -3
  4. package/dist/composed/empty-state.d.ts +3 -1
  5. package/dist/composed/empty-state.d.ts.map +1 -1
  6. package/dist/composed/empty-state.js +38 -39
  7. package/dist/shell/bottom-navbar.js +22 -22
  8. package/dist/shell/notification-center.d.ts +10 -0
  9. package/dist/shell/notification-center.d.ts.map +1 -1
  10. package/dist/shell/notification-center.js +107 -92
  11. package/dist/shell/sidebar.d.ts +21 -2
  12. package/dist/shell/sidebar.d.ts.map +1 -1
  13. package/dist/shell/sidebar.js +200 -141
  14. package/dist/tailwind/index.cjs +128 -1
  15. package/dist/tailwind/preset.d.ts.map +1 -1
  16. package/dist/tailwind/preset.js +128 -1
  17. package/dist/ui/alert.d.ts.map +1 -1
  18. package/dist/ui/alert.js +28 -26
  19. package/dist/ui/autocomplete.js +15 -15
  20. package/dist/ui/badge.js +2 -2
  21. package/dist/ui/banner.d.ts.map +1 -1
  22. package/dist/ui/banner.js +23 -21
  23. package/dist/ui/button.js +9 -9
  24. package/dist/ui/card.js +4 -4
  25. package/dist/ui/checkbox.js +4 -4
  26. package/dist/ui/chip.js +2 -2
  27. package/dist/ui/collapsible.js +12 -12
  28. package/dist/ui/combobox.js +20 -20
  29. package/dist/ui/context-menu.js +5 -5
  30. package/dist/ui/dropdown-menu.js +4 -4
  31. package/dist/ui/hover-card.js +9 -9
  32. package/dist/ui/index.js +352 -350
  33. package/dist/ui/menubar.js +26 -26
  34. package/dist/ui/progress.js +22 -22
  35. package/dist/ui/select.js +1 -1
  36. package/dist/ui/slider.js +8 -8
  37. package/dist/ui/stat-card.d.ts.map +1 -1
  38. package/dist/ui/stat-card.js +14 -14
  39. package/dist/ui/stepper.js +2 -2
  40. package/dist/ui/switch.js +1 -1
  41. package/dist/ui/tabs.js +15 -15
  42. package/dist/ui/toggle.js +1 -1
  43. package/llms-full.txt +15 -5
  44. package/llms.txt +17 -3
  45. package/package.json +1 -1
@@ -3,12 +3,12 @@ import { jsx as t, jsxs as i } from "react/jsx-runtime";
3
3
  import * as r from "react";
4
4
  import { aW as l, aX as m, aY as c, aZ as p, a_ as b, a$ as u, b0 as f, b1 as y, b2 as x, b3 as g, b4 as N, b5 as h, b6 as v, b7 as M, b8 as R, b9 as I } from "../_chunks/primitives.js";
5
5
  import { IconChevronRight as S, IconCheck as C, IconCircle as z } from "@tabler/icons-react";
6
- import { c as o } from "../_chunks/utils.js";
6
+ import { c as d } from "../_chunks/utils.js";
7
7
  const D = M, E = v, F = b, H = I, J = R, k = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
8
8
  l,
9
9
  {
10
10
  ref: s,
11
- className: o(
11
+ className: d(
12
12
  "flex h-ds-sm-plus items-center space-x-ds-02 rounded-ds-lg border border-border bg-layer-01 p-ds-02 shadow-01",
13
13
  e
14
14
  ),
@@ -20,7 +20,7 @@ const _ = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
20
20
  m,
21
21
  {
22
22
  ref: s,
23
- className: o(
23
+ className: d(
24
24
  "flex cursor-default select-none items-center rounded-ds-sm px-ds-04 py-ds-02 text-ds-md font-medium outline-none transition-colors hover:bg-field focus-visible:bg-field data-[state=open]:bg-field",
25
25
  e
26
26
  ),
@@ -28,16 +28,16 @@ const _ = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
28
28
  }
29
29
  ));
30
30
  _.displayName = m.displayName;
31
- const j = r.forwardRef(({ className: e, inset: a, children: s, ...d }, n) => /* @__PURE__ */ i(
31
+ const j = r.forwardRef(({ className: e, inset: a, children: s, ...o }, n) => /* @__PURE__ */ i(
32
32
  c,
33
33
  {
34
34
  ref: n,
35
- className: o(
35
+ className: d(
36
36
  "flex cursor-default select-none items-center gap-ds-03 rounded-ds-md px-ds-03 py-ds-02b text-ds-md outline-none focus:bg-layer-02 data-[state=open]:bg-layer-02 [&_svg]:pointer-events-none [&_svg]:h-ico-sm [&_svg]:w-ico-sm [&_svg]:shrink-0",
37
37
  a && "pl-ds-07",
38
38
  e
39
39
  ),
40
- ...d,
40
+ ...o,
41
41
  children: [
42
42
  s,
43
43
  /* @__PURE__ */ t(S, { className: "ml-auto" })
@@ -49,8 +49,8 @@ const G = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
49
49
  p,
50
50
  {
51
51
  ref: s,
52
- className: o(
53
- "z-dropdown min-w-[8rem] overflow-hidden rounded-ds-lg border border-border bg-layer-01 p-ds-02 text-text-primary shadow-03 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
52
+ className: d(
53
+ "z-popover min-w-[8rem] overflow-hidden rounded-ds-lg border border-border bg-layer-01 p-ds-02 text-text-primary shadow-03 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
54
54
  e
55
55
  ),
56
56
  ...a
@@ -58,15 +58,15 @@ const G = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
58
58
  ));
59
59
  G.displayName = p.displayName;
60
60
  const T = r.forwardRef(
61
- ({ className: e, align: a = "start", alignOffset: s = -4, sideOffset: d = 8, ...n }, w) => /* @__PURE__ */ t(b, { children: /* @__PURE__ */ t(
61
+ ({ className: e, align: a = "start", alignOffset: s = -4, sideOffset: o = 8, ...n }, w) => /* @__PURE__ */ t(b, { children: /* @__PURE__ */ t(
62
62
  u,
63
63
  {
64
64
  ref: w,
65
65
  align: a,
66
66
  alignOffset: s,
67
- sideOffset: d,
68
- className: o(
69
- "z-dropdown min-w-[12rem] overflow-hidden rounded-ds-lg border border-border bg-layer-01 p-ds-02 text-text-primary shadow-03",
67
+ sideOffset: o,
68
+ className: d(
69
+ "z-popover min-w-[12rem] rounded-ds-lg border border-border bg-layer-01 p-ds-02 text-text-primary shadow-03",
70
70
  "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
71
71
  e
72
72
  ),
@@ -75,11 +75,11 @@ const T = r.forwardRef(
75
75
  ) })
76
76
  );
77
77
  T.displayName = u.displayName;
78
- const L = r.forwardRef(({ className: e, inset: a, ...s }, d) => /* @__PURE__ */ t(
78
+ const L = r.forwardRef(({ className: e, inset: a, ...s }, o) => /* @__PURE__ */ t(
79
79
  f,
80
80
  {
81
- ref: d,
82
- className: o(
81
+ ref: o,
82
+ className: d(
83
83
  "relative flex cursor-default select-none items-center gap-ds-03 rounded-ds-md px-ds-03 py-ds-02b text-ds-md outline-none transition-colors focus:bg-layer-02 focus:text-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-[0.38] [&>svg]:h-ico-sm [&>svg]:w-ico-sm [&>svg]:shrink-0",
84
84
  a && "pl-ds-07",
85
85
  e
@@ -88,16 +88,16 @@ const L = r.forwardRef(({ className: e, inset: a, ...s }, d) => /* @__PURE__ */
88
88
  }
89
89
  ));
90
90
  L.displayName = f.displayName;
91
- const P = r.forwardRef(({ className: e, children: a, checked: s, ...d }, n) => /* @__PURE__ */ i(
91
+ const P = r.forwardRef(({ className: e, children: a, checked: s, ...o }, n) => /* @__PURE__ */ i(
92
92
  y,
93
93
  {
94
94
  ref: n,
95
- className: o(
95
+ className: d(
96
96
  "relative flex cursor-default select-none items-center rounded-ds-md py-ds-02b pl-ds-07 pr-ds-03 text-ds-md outline-none transition-colors focus:bg-layer-02 focus:text-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-[0.38]",
97
97
  e
98
98
  ),
99
99
  checked: s,
100
- ...d,
100
+ ...o,
101
101
  children: [
102
102
  /* @__PURE__ */ t("span", { className: "absolute left-ds-03 flex h-ico-sm w-ico-sm items-center justify-center", children: /* @__PURE__ */ t(x, { children: /* @__PURE__ */ t(C, { className: "h-ico-sm w-ico-sm" }) }) }),
103
103
  a
@@ -105,11 +105,11 @@ const P = r.forwardRef(({ className: e, children: a, checked: s, ...d }, n) => /
105
105
  }
106
106
  ));
107
107
  P.displayName = y.displayName;
108
- const W = r.forwardRef(({ className: e, children: a, ...s }, d) => /* @__PURE__ */ i(
108
+ const W = r.forwardRef(({ className: e, children: a, ...s }, o) => /* @__PURE__ */ i(
109
109
  g,
110
110
  {
111
- ref: d,
112
- className: o(
111
+ ref: o,
112
+ className: d(
113
113
  "relative flex cursor-default select-none items-center rounded-ds-md py-ds-02b pl-ds-07 pr-ds-03 text-ds-md outline-none transition-colors focus:bg-layer-02 focus:text-text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-[0.38]",
114
114
  e
115
115
  ),
@@ -121,11 +121,11 @@ const W = r.forwardRef(({ className: e, children: a, ...s }, d) => /* @__PURE__
121
121
  }
122
122
  ));
123
123
  W.displayName = g.displayName;
124
- const X = r.forwardRef(({ className: e, inset: a, ...s }, d) => /* @__PURE__ */ t(
124
+ const X = r.forwardRef(({ className: e, inset: a, ...s }, o) => /* @__PURE__ */ t(
125
125
  N,
126
126
  {
127
- ref: d,
128
- className: o(
127
+ ref: o,
128
+ className: d(
129
129
  "px-ds-03 py-ds-02b text-ds-md font-semibold",
130
130
  a && "pl-ds-07",
131
131
  e
@@ -138,7 +138,7 @@ const Y = r.forwardRef(({ className: e, ...a }, s) => /* @__PURE__ */ t(
138
138
  h,
139
139
  {
140
140
  ref: s,
141
- className: o("-mx-ds-01 my-ds-02 h-px bg-border-subtle", e),
141
+ className: d("-mx-ds-01 my-ds-02 h-px bg-border-subtle", e),
142
142
  ...a
143
143
  }
144
144
  ));
@@ -149,7 +149,7 @@ const Z = ({
149
149
  }) => /* @__PURE__ */ t(
150
150
  "span",
151
151
  {
152
- className: o(
152
+ className: d(
153
153
  "ml-auto text-ds-sm text-text-placeholder",
154
154
  e
155
155
  ),
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsxs as t, jsx as n } from "react/jsx-runtime";
3
- import * as p from "react";
4
- import { aU as i, aV as u } from "../_chunks/primitives.js";
3
+ import * as u from "react";
4
+ import { aU as i, aV as g } from "../_chunks/primitives.js";
5
5
  import { e as o } from "../_chunks/vendor-utils.js";
6
- import { c as a } from "../_chunks/utils.js";
6
+ import { c as e } from "../_chunks/utils.js";
7
7
  const x = o(
8
8
  "relative w-full overflow-hidden rounded-ds-full bg-layer-02",
9
9
  {
@@ -17,7 +17,7 @@ const x = o(
17
17
  defaultVariants: { size: "md" }
18
18
  }
19
19
  ), h = o(
20
- "h-full w-full flex-1 transition-all",
20
+ "h-full w-full flex-1 transition-all duration-moderate-02 ease-expressive-standard",
21
21
  {
22
22
  variants: {
23
23
  color: {
@@ -29,48 +29,48 @@ const x = o(
29
29
  },
30
30
  defaultVariants: { color: "default" }
31
31
  }
32
- ), w = p.forwardRef(
32
+ ), v = u.forwardRef(
33
33
  ({
34
34
  className: l,
35
35
  value: r,
36
- size: c,
37
- color: d,
36
+ size: d,
37
+ color: c,
38
38
  indicatorClassName: m,
39
- showLabel: e,
39
+ showLabel: s,
40
40
  ...f
41
- }, g) => {
42
- const s = r == null;
43
- return /* @__PURE__ */ t("div", { className: a("flex items-center gap-ds-03", e && "w-full"), children: [
41
+ }, p) => {
42
+ const a = r == null;
43
+ return /* @__PURE__ */ t("div", { className: e("flex items-center gap-ds-03", s && "w-full"), children: [
44
44
  /* @__PURE__ */ n(
45
45
  i,
46
46
  {
47
- ref: g,
48
- value: s ? null : r,
49
- className: a(x({ size: c }), l),
47
+ ref: p,
48
+ value: a ? null : r,
49
+ className: e(x({ size: d }), l),
50
50
  ...f,
51
51
  children: /* @__PURE__ */ n(
52
- u,
52
+ g,
53
53
  {
54
- className: a(
55
- h({ color: d }),
56
- s && "w-2/5 animate-progress-indeterminate motion-reduce:animate-none",
54
+ className: e(
55
+ h({ color: c }),
56
+ a && "w-2/5 animate-progress-indeterminate motion-reduce:animate-none",
57
57
  m
58
58
  ),
59
- style: s ? void 0 : { transform: `translateX(-${100 - (r || 0)}%)` }
59
+ style: a ? void 0 : { transform: `translateX(-${100 - (r || 0)}%)` }
60
60
  }
61
61
  )
62
62
  }
63
63
  ),
64
- e && !s && /* @__PURE__ */ t("span", { className: "shrink-0 text-ds-xs text-text-secondary", children: [
64
+ s && !a && /* @__PURE__ */ t("span", { className: "shrink-0 text-ds-xs text-text-secondary", children: [
65
65
  r,
66
66
  "%"
67
67
  ] })
68
68
  ] });
69
69
  }
70
70
  );
71
- w.displayName = i.displayName;
71
+ v.displayName = i.displayName;
72
72
  export {
73
- w as Progress,
73
+ v as Progress,
74
74
  h as progressIndicatorVariants,
75
75
  x as progressTrackVariants
76
76
  };
package/dist/ui/select.js CHANGED
@@ -61,7 +61,7 @@ const D = r.forwardRef(({ className: s, children: t, position: a = "popper", ...
61
61
  {
62
62
  ref: l,
63
63
  className: o(
64
- "relative z-dropdown max-h-96 min-w-[8rem] overflow-hidden rounded-ds-lg border border-border bg-layer-01 text-text-primary shadow-03 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
64
+ "relative z-popover max-h-96 min-w-[8rem] overflow-hidden rounded-ds-lg border border-border bg-layer-01 text-text-primary shadow-03 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
65
65
  a === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
66
66
  s
67
67
  ),
package/dist/ui/slider.js CHANGED
@@ -1,30 +1,30 @@
1
1
  "use client";
2
2
  import { jsxs as r, jsx as e } from "react/jsx-runtime";
3
- import * as n from "react";
4
- import { aA as s, aB as c, aC as t, aD as d } from "../_chunks/primitives.js";
3
+ import * as t from "react";
4
+ import { aA as a, aB as c, aC as n, aD as d } from "../_chunks/primitives.js";
5
5
  import { c as f } from "../_chunks/utils.js";
6
- const m = n.forwardRef(({ className: a, "aria-label": o, ...i }, l) => /* @__PURE__ */ r(
7
- s,
6
+ const m = t.forwardRef(({ className: s, "aria-label": o, ...i }, l) => /* @__PURE__ */ r(
7
+ a,
8
8
  {
9
9
  ref: l,
10
10
  className: f(
11
11
  "relative flex w-full touch-none select-none items-center",
12
- a
12
+ s
13
13
  ),
14
14
  ...i,
15
15
  children: [
16
- /* @__PURE__ */ e(c, { className: "relative h-ds-02b w-full grow overflow-hidden rounded-ds-full bg-field", children: /* @__PURE__ */ e(t, { className: "absolute h-full bg-interactive" }) }),
16
+ /* @__PURE__ */ e(c, { className: "relative h-ds-02b w-full grow overflow-hidden rounded-ds-full bg-field", children: /* @__PURE__ */ e(n, { className: "absolute h-full bg-interactive" }) }),
17
17
  /* @__PURE__ */ e(
18
18
  d,
19
19
  {
20
20
  "aria-label": o,
21
- className: "block h-ico-sm w-ico-sm rounded-ds-full border-2 border-interactive bg-layer-01 shadow-01 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-[0.38]"
21
+ className: "block h-ico-sm w-ico-sm rounded-ds-full border-2 border-interactive bg-layer-01 shadow-01 transition-[color,transform] duration-fast-02 hover:scale-110 active:scale-125 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-[0.38]"
22
22
  }
23
23
  )
24
24
  ]
25
25
  }
26
26
  ));
27
- m.displayName = s.displayName;
27
+ m.displayName = a.displayName;
28
28
  export {
29
29
  m as Slider
30
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stat-card.d.ts","sourceRoot":"","sources":["../../src/ui/stat-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;KACrC,CAAA;IACD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,QAAA,MAAM,QAAQ,sFAiEb,CAAA;AAID,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"stat-card.d.ts","sourceRoot":"","sources":["../../src/ui/stat-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;KACrC,CAAA;IACD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,QAAA,MAAM,QAAQ,sFAmEb,CAAA;AAID,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { jsxs as n, jsx as s } from "react/jsx-runtime";
3
- import { IconTrendingUp as h, IconTrendingDown as f, IconMinus as g } from "@tabler/icons-react";
4
- import * as m from "react";
3
+ import { IconTrendingUp as x, IconTrendingDown as f, IconMinus as w } from "@tabler/icons-react";
4
+ import * as a from "react";
5
5
  import { c as d } from "../_chunks/utils.js";
6
- const w = m.forwardRef(
7
- ({ className: o, label: c, title: a, value: u, delta: e, icon: r, loading: b, ...t }, i) => {
8
- const l = a ?? c ?? "";
9
- if (b)
6
+ const N = a.forwardRef(
7
+ ({ className: o, label: m, title: c, value: l, delta: e, icon: r, loading: u, ...t }, i) => {
8
+ const b = c ?? m ?? "";
9
+ if (u)
10
10
  return /* @__PURE__ */ n(
11
11
  "div",
12
12
  {
@@ -23,7 +23,7 @@ const w = m.forwardRef(
23
23
  ]
24
24
  }
25
25
  );
26
- const p = (e == null ? void 0 : e.direction) === "up" ? h : (e == null ? void 0 : e.direction) === "down" ? f : g, x = (e == null ? void 0 : e.direction) === "up" ? "text-success" : (e == null ? void 0 : e.direction) === "down" ? "text-error" : "text-text-secondary";
26
+ const p = (e == null ? void 0 : e.direction) === "up" ? x : (e == null ? void 0 : e.direction) === "down" ? f : w, h = (e == null ? void 0 : e.direction) === "up" ? "text-success" : (e == null ? void 0 : e.direction) === "down" ? "text-error" : "text-text-secondary";
27
27
  return /* @__PURE__ */ n(
28
28
  "div",
29
29
  {
@@ -35,12 +35,12 @@ const w = m.forwardRef(
35
35
  ...t,
36
36
  children: [
37
37
  /* @__PURE__ */ n("div", { className: "flex items-center justify-between mb-ds-04", children: [
38
- /* @__PURE__ */ s("p", { className: "text-ds-md font-medium text-text-secondary", children: l }),
39
- r && /* @__PURE__ */ s("span", { className: "text-text-secondary", "aria-hidden": "true", children: typeof r == "function" ? m.createElement(r, { className: "h-ico-lg w-ico-lg" }) : r })
38
+ /* @__PURE__ */ s("p", { className: "text-ds-md font-medium text-text-secondary", children: b }),
39
+ r && /* @__PURE__ */ s("span", { className: "text-text-secondary", "aria-hidden": "true", children: typeof r == "function" ? a.createElement(r, { className: "h-ico-lg w-ico-lg" }) : r })
40
40
  ] }),
41
- /* @__PURE__ */ s("p", { className: "text-ds-3xl font-semibold text-text-primary tabular-nums", children: u }),
42
- e && /* @__PURE__ */ n("div", { className: d("mt-ds-03 flex items-center gap-ds-02 text-ds-sm font-medium", x), children: [
43
- /* @__PURE__ */ s(p, { className: "h-ico-sm w-ico-sm", "aria-hidden": "true" }),
41
+ /* @__PURE__ */ s("div", { className: "overflow-hidden", children: /* @__PURE__ */ s("p", { className: "inline-block animate-count-up text-ds-3xl font-semibold text-text-primary tabular-nums", children: l }) }),
42
+ e && /* @__PURE__ */ n("div", { className: d("mt-ds-03 flex items-center gap-ds-02 text-ds-sm font-medium", h), children: [
43
+ /* @__PURE__ */ s(p, { className: "h-ico-sm w-ico-sm animate-stamp", "aria-hidden": "true" }),
44
44
  /* @__PURE__ */ s("span", { children: e.value })
45
45
  ] })
46
46
  ]
@@ -48,7 +48,7 @@ const w = m.forwardRef(
48
48
  );
49
49
  }
50
50
  );
51
- w.displayName = "StatCard";
51
+ N.displayName = "StatCard";
52
52
  export {
53
- w as StatCard
53
+ N as StatCard
54
54
  };
@@ -25,7 +25,7 @@ const f = t.createContext({
25
25
  "div",
26
26
  {
27
27
  className: i(
28
- "flex-1",
28
+ "flex-1 transition-colors duration-moderate-01 ease-productive-standard",
29
29
  r === "vertical" ? "ml-ds-04 w-ds-01 min-h-ds-05" : "h-ds-01 min-w-ds-05",
30
30
  a < l ? "bg-interactive" : "bg-border"
31
31
  ),
@@ -62,7 +62,7 @@ const f = t.createContext({
62
62
  o === "active" && "bg-interactive text-text-on-color",
63
63
  o === "pending" && "bg-layer-02 text-text-tertiary border border-border"
64
64
  ),
65
- children: c || (o === "completed" ? /* @__PURE__ */ e("svg", { className: "w-ico-sm h-ico-sm", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ e("polyline", { points: "20 6 9 17 4 12" }) }) : n + 1)
65
+ children: c || (o === "completed" ? /* @__PURE__ */ e("svg", { className: "w-ico-sm h-ico-sm animate-check-pop", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ e("polyline", { points: "20 6 9 17 4 12" }) }) : n + 1)
66
66
  }
67
67
  ),
68
68
  /* @__PURE__ */ x("div", { className: "flex flex-col", children: [
package/dist/ui/switch.js CHANGED
@@ -17,7 +17,7 @@ const c = n.forwardRef(({ className: t, error: a, ...s }, i) => /* @__PURE__ */
17
17
  d,
18
18
  {
19
19
  className: r(
20
- "pointer-events-none block h-ico-md w-ico-md rounded-ds-full bg-text-on-color shadow-02 ring-0 transition-transform duration-fast-01 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
20
+ "pointer-events-none block h-ico-md w-ico-md rounded-ds-full bg-text-on-color shadow-02 ring-0 transition-transform duration-moderate-01 ease-bounce data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
21
21
  )
22
22
  }
23
23
  )
package/dist/ui/tabs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as i } from "react/jsx-runtime";
2
+ import { jsx as r } from "react/jsx-runtime";
3
3
  import { bl as d, bm as c, bn as l, bo as m } from "../_chunks/primitives.js";
4
4
  import * as s from "react";
5
5
  import { e as b } from "../_chunks/vendor-utils.js";
@@ -13,14 +13,14 @@ const C = m, f = s.createContext({ variant: "line" }), p = b("inline-flex items-
13
13
  },
14
14
  defaultVariants: { variant: "line" }
15
15
  }), u = b(
16
- "inline-flex items-center justify-center whitespace-nowrap font-sans text-ds-md font-medium transition-[color,background-color,border-color,box-shadow] duration-fast-01 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-[0.38]",
16
+ "inline-flex items-center justify-center gap-ds-02 whitespace-nowrap font-sans text-ds-md font-medium transition-[color,background-color,border-color,box-shadow] duration-fast-01 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-[0.38]",
17
17
  {
18
18
  variants: {
19
19
  variant: {
20
20
  line: [
21
21
  "px-ds-05 py-ds-03 -mb-px border-b-2 border-transparent",
22
22
  "text-text-secondary hover:text-text-primary",
23
- "data-[state=active]:border-interactive data-[state=active]:text-interactive"
23
+ "data-[state=active]:border-interactive data-[state=active]:text-interactive data-[state=active]:animate-tab-indicator"
24
24
  ],
25
25
  contained: [
26
26
  "px-ds-05 py-ds-02b rounded-ds-md",
@@ -31,39 +31,39 @@ const C = m, f = s.createContext({ variant: "line" }), p = b("inline-flex items-
31
31
  },
32
32
  defaultVariants: { variant: "line" }
33
33
  }
34
- ), x = s.forwardRef(({ className: t, variant: e, ...a }, n) => {
35
- const r = e ?? "line";
36
- return /* @__PURE__ */ i(f.Provider, { value: { variant: r }, children: /* @__PURE__ */ i(
34
+ ), x = s.forwardRef(({ className: t, variant: a, ...e }, n) => {
35
+ const i = a ?? "line";
36
+ return /* @__PURE__ */ r(f.Provider, { value: { variant: i }, children: /* @__PURE__ */ r(
37
37
  d,
38
38
  {
39
39
  ref: n,
40
- className: o(p({ variant: r }), t),
41
- ...a
40
+ className: o(p({ variant: i }), t),
41
+ ...e
42
42
  }
43
43
  ) });
44
44
  });
45
45
  x.displayName = d.displayName;
46
- const g = s.forwardRef(({ className: t, variant: e, ...a }, n) => {
47
- const r = s.useContext(f), v = e ?? r.variant;
48
- return /* @__PURE__ */ i(
46
+ const g = s.forwardRef(({ className: t, variant: a, ...e }, n) => {
47
+ const i = s.useContext(f), v = a ?? i.variant;
48
+ return /* @__PURE__ */ r(
49
49
  c,
50
50
  {
51
51
  ref: n,
52
52
  className: o(u({ variant: v }), t),
53
- ...a
53
+ ...e
54
54
  }
55
55
  );
56
56
  });
57
57
  g.displayName = c.displayName;
58
- const y = s.forwardRef(({ className: t, ...e }, a) => /* @__PURE__ */ i(
58
+ const y = s.forwardRef(({ className: t, ...a }, e) => /* @__PURE__ */ r(
59
59
  l,
60
60
  {
61
- ref: a,
61
+ ref: e,
62
62
  className: o(
63
63
  "mt-ds-05 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2",
64
64
  t
65
65
  ),
66
- ...e
66
+ ...a
67
67
  }
68
68
  ));
69
69
  y.displayName = l.displayName;
package/dist/ui/toggle.js CHANGED
@@ -5,7 +5,7 @@ import { aE as e } from "../_chunks/primitives.js";
5
5
  import { e as n } from "../_chunks/vendor-utils.js";
6
6
  import { c as l } from "../_chunks/utils.js";
7
7
  const m = n(
8
- "inline-flex items-center justify-center gap-ds-03 rounded-ds-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-[0.38] data-[state=on]:bg-interactive-subtle data-[state=on]:text-interactive",
8
+ "inline-flex items-center justify-center gap-ds-03 rounded-ds-md font-medium transition-[color,transform] duration-fast-02 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-[0.38] data-[state=on]:bg-interactive-subtle data-[state=on]:text-interactive",
9
9
  {
10
10
  variants: {
11
11
  variant: {
package/llms-full.txt CHANGED
@@ -5,7 +5,7 @@
5
5
  > All variant values and props verified from source CVA definitions.
6
6
  >
7
7
  > Package: @devalok/shilp-sutra
8
- > Version: 0.12.0
8
+ > Version: 0.14.0
9
9
 
10
10
  ---
11
11
 
@@ -1428,9 +1428,11 @@ Note: getFormFieldA11y() was removed in favor of useFormField() hook.
1428
1428
  - Props:
1429
1429
  title: string (REQUIRED)
1430
1430
  description: string
1431
- icon: ReactNode (default: Devalok chakra icon)
1431
+ icon: ReactNode | ComponentType<{ className?: string }> (default: Devalok chakra icon)
1432
1432
  action: ReactNode (e.g. a Button)
1433
1433
  compact: boolean (smaller layout)
1434
+ - Gotchas:
1435
+ - icon accepts both JSX elements (`<IconFolder />`) and component references (`IconFolder`). Component references are auto-instantiated with correct sizing classes.
1434
1436
  - Example:
1435
1437
  <EmptyState
1436
1438
  title="No tasks found"
@@ -1697,9 +1699,16 @@ New fields on NavGroup:
1697
1699
  action: ReactNode — action button rendered next to the group label
1698
1700
 
1699
1701
  New type SidebarFooterConfig:
1700
- links: Array<{ label: string, href: string }> — legal/utility links as a row
1701
- version: string — version or build info text
1702
+ links: Array<{ label: string, href: string }> — legal/utility links rendered inline with · dividers
1703
+ version: string | { label: string, href: string } — version text or clickable version link, rendered inline after links
1702
1704
  slot: ReactNode — custom content above the links row
1705
+ promo: SidebarPromo — dismissable promo/upsell banner
1706
+
1707
+ New type SidebarPromo:
1708
+ text: string — promo message text
1709
+ icon: ReactNode — optional icon rendered above the text
1710
+ action: { label: string, href?: string, onClick?: () => void } — CTA button
1711
+ onDismiss: () => void — when provided, renders a dismiss X button
1703
1712
 
1704
1713
  Deprecated props:
1705
1714
  footerLinks — use footer.links instead (footerLinks still works for backwards compat)
@@ -1805,7 +1814,8 @@ Deprecated props:
1805
1814
  - Import: @devalok/shilp-sutra/shell/notification-center
1806
1815
  - Server-safe: No
1807
1816
  - Props:
1808
- notifications: Notification[] — { id, title, body?, tier: "INFO"|"IMPORTANT"|"CRITICAL", isRead, createdAt, entityType?, entityId?, projectId?, project? }
1817
+ notifications: Notification[] — { id, title, body?, tier: "INFO"|"IMPORTANT"|"CRITICAL", isRead, createdAt, entityType?, entityId?, projectId?, project?, actions?: NotificationAction[] }
1818
+ NotificationAction: { label: string, variant?: "primary"|"default"|"danger", onClick: (id: string) => void }
1809
1819
  unreadCount: number (derived from notifications if not provided)
1810
1820
  open: boolean (controlled mode)
1811
1821
  onOpenChange: (open: boolean) => void
package/llms.txt CHANGED
@@ -4,6 +4,20 @@
4
4
  > Built on the same primitives as shadcn/ui but with key API differences.
5
5
  > Read this file BEFORE writing any UI code. Do NOT guess from shadcn/ui knowledge.
6
6
 
7
+ ## CHANGES (v0.14.0)
8
+ - **BREAKING z-index**: Select, Combobox, Autocomplete, DropdownMenu, ContextMenu, Menubar, HoverCard promoted from z-dropdown (1000) to z-popover (1400). Fixes dropdowns rendering behind Sheet/Dialog. If you had custom z-index overrides (e.g. `[data-radix-popper-content-wrapper] { z-index: 1400 !important }`) you can now remove them.
9
+ - TabsTrigger: Added gap-ds-02 (4px) between icon and label
10
+ - AppSidebar: footer.version now accepts string | { label, href } for clickable version links
11
+
12
+ ## CHANGES (v0.13.0)
13
+ - EmptyState: icon prop now accepts ComponentType (e.g. Tabler icon references) in addition to ReactNode
14
+ - NotificationCenter: Notification.actions?: NotificationAction[] — inline action buttons (Approve/Deny) per notification
15
+ - NotificationCenter: Tier dot now doubles as read/unread marker; separate unread dot removed
16
+ - AppSidebar: footer.promo?: SidebarPromo — dismissable promo banner with icon, text, action button
17
+ - AppSidebar: Footer links + version render on same line with · dividers
18
+ - Collapsible: Now uses height-based expand/collapse animation (animate-collapsible-down/up)
19
+ - Tailwind preset: 4 new keyframes + utilities — accordion-down, accordion-up, collapsible-down, collapsible-up
20
+
7
21
  ## CHANGES (v0.12.0)
8
22
  - Input: Softer resting border (border-subtle instead of border), subtler focus ring (ring-1 ring-focus/50 instead of ring-2 ring-focus)
9
23
  - Tailwind preset: 9 animation keyframes + utilities (fade-in, fade-out, slide-up, slide-right, scale-in, scale-out, glow-pulse, scale-bounce, lift)
@@ -157,7 +171,7 @@ NOTIFICATION SELECTION GUIDE:
157
171
  - AvatarGroup: users[], max(number), size(sm|md|lg), showTooltip
158
172
  - StatusBadge: DISCRIMINATED UNION — pass status OR color, not both. status(active|pending|approved|rejected|completed|blocked|cancelled|draft) color(success|warning|error|info|neutral) size(sm|md)
159
173
  - ContentCard: variant(default|outline|ghost) padding(default|compact|spacious|none)
160
- - EmptyState: icon, title(required), description, action(ReactNode), compact
174
+ - EmptyState: icon(ReactNode or ComponentType), title(required), description, action(ReactNode), compact
161
175
  - PriorityIndicator: priority(LOW|MEDIUM|HIGH|URGENT) display(compact|full)
162
176
  - SimpleTooltip: wraps Tooltip compound into single component
163
177
  - DatePicker, DateRangePicker, DateTimePicker, TimePicker
@@ -176,13 +190,13 @@ NOTIFICATION SELECTION GUIDE:
176
190
  - NavItem.defaultOpen?: boolean — control initial collapsed state
177
191
  - NavItem.badge?: string | number — badge on nav item (99+ cap for numbers)
178
192
  - NavGroup.action?: ReactNode — action button next to group label
179
- - footer?: SidebarFooterConfig — structured footer with links, version, slot (replaces footerLinks)
193
+ - footer?: SidebarFooterConfig — structured footer with links, version, slot, promo (replaces footerLinks)
180
194
  - headerSlot?: ReactNode — content between user info and navigation
181
195
  - preFooterSlot?: ReactNode — content between navigation and footer
182
196
  - renderItem?: (item, defaultRender) => ReactNode | null — custom item rendering
183
197
 
184
198
  - BottomNavbar: mobile navigation, user is optional (not required to render)
185
- - NotificationCenter: notifications[], onMarkRead, onMarkAllRead, onNavigate, getNotificationRoute?(returns string|null, fallback null), footerSlot?, emptyState?, headerActions?, popoverClassName?, onDismiss?(id)
199
+ - NotificationCenter: notifications[], onMarkRead, onMarkAllRead, onNavigate, getNotificationRoute?(returns string|null, fallback null), footerSlot?, emptyState?, headerActions?, popoverClassName?, onDismiss?(id). Notification.actions?: NotificationAction[] for inline buttons (e.g. Approve/Deny)
186
200
  - AppCommandPalette: user, isAdmin, onNavigate, onSearch, searchResults, isSearching, onSearchResultSelect
187
201
 
188
202
  ### Hooks
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devalok/shilp-sutra",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "Devalok Design System — tokens, components, and patterns for Next.js",
5
5
  "license": "MIT",
6
6
  "type": "module",