@seekalfred/primitives 0.5.0 → 0.6.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 (239) hide show
  1. package/README.md +664 -9
  2. package/dist/accordion/accordion.d.ts +5 -5
  3. package/dist/accordion/accordion.js +22 -11
  4. package/dist/accordion/accordion.js.map +1 -1
  5. package/dist/action-button/action-button.d.ts +50 -0
  6. package/dist/action-button/action-button.js +159 -0
  7. package/dist/action-button/action-button.js.map +1 -0
  8. package/dist/action-button/index.d.ts +2 -0
  9. package/dist/action-button/index.js +2 -0
  10. package/dist/alert/alert.d.ts +16 -2
  11. package/dist/alert/alert.js +118 -20
  12. package/dist/alert/alert.js.map +1 -1
  13. package/dist/alert-dialog/alert-dialog.d.ts +1 -1
  14. package/dist/alert-dialog/alert-dialog.js +4 -2
  15. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  16. package/dist/avatar/avatar.d.ts +7 -1
  17. package/dist/avatar/avatar.js +51 -18
  18. package/dist/avatar/avatar.js.map +1 -1
  19. package/dist/badge/badge.d.ts +10 -3
  20. package/dist/badge/badge.js +37 -5
  21. package/dist/badge/badge.js.map +1 -1
  22. package/dist/breadcrumb/breadcrumb.d.ts +3 -30
  23. package/dist/breadcrumb/breadcrumb.js +25 -8
  24. package/dist/breadcrumb/breadcrumb.js.map +1 -1
  25. package/dist/button/button.d.ts +36 -23
  26. package/dist/button/button.js +178 -33
  27. package/dist/button/button.js.map +1 -1
  28. package/dist/button-group/button-group.d.ts +76 -0
  29. package/dist/button-group/button-group.js +403 -0
  30. package/dist/button-group/button-group.js.map +1 -0
  31. package/dist/button-group/index.d.ts +2 -0
  32. package/dist/button-group/index.js +2 -0
  33. package/dist/calendar/calendar.d.ts +3 -3
  34. package/dist/calendar/calendar.js +263 -34
  35. package/dist/calendar/calendar.js.map +1 -1
  36. package/dist/card/card.d.ts +14 -7
  37. package/dist/card/card.js +32 -14
  38. package/dist/card/card.js.map +1 -1
  39. package/dist/checkbox/checkbox.d.ts +2 -9
  40. package/dist/checkbox/checkbox.js +28 -29
  41. package/dist/checkbox/checkbox.js.map +1 -1
  42. package/dist/confirm-morph/confirm-morph.d.ts +85 -0
  43. package/dist/confirm-morph/confirm-morph.js +652 -0
  44. package/dist/confirm-morph/confirm-morph.js.map +1 -0
  45. package/dist/confirm-morph/index.d.ts +2 -0
  46. package/dist/confirm-morph/index.js +2 -0
  47. package/dist/copy-button/copy-button.d.ts +32 -0
  48. package/dist/copy-button/copy-button.js +134 -0
  49. package/dist/copy-button/copy-button.js.map +1 -0
  50. package/dist/copy-button/index.d.ts +2 -0
  51. package/dist/copy-button/index.js +2 -0
  52. package/dist/date-picker/date-picker.d.ts +51 -0
  53. package/dist/date-picker/date-picker.js +241 -0
  54. package/dist/date-picker/date-picker.js.map +1 -0
  55. package/dist/date-picker/date-range-picker.d.ts +78 -0
  56. package/dist/date-picker/date-range-picker.js +1015 -0
  57. package/dist/date-picker/date-range-picker.js.map +1 -0
  58. package/dist/date-picker/index.d.ts +4 -0
  59. package/dist/date-picker/index.js +4 -0
  60. package/dist/date-picker/picker-parts.d.ts +46 -0
  61. package/dist/date-picker/picker-parts.js +135 -0
  62. package/dist/date-picker/picker-parts.js.map +1 -0
  63. package/dist/dialog/dialog.d.ts +12 -16
  64. package/dist/dialog/dialog.js +45 -14
  65. package/dist/dialog/dialog.js.map +1 -1
  66. package/dist/empty-state/empty-state.d.ts +44 -0
  67. package/dist/empty-state/empty-state.js +83 -0
  68. package/dist/empty-state/empty-state.js.map +1 -0
  69. package/dist/empty-state/index.d.ts +2 -0
  70. package/dist/empty-state/index.js +2 -0
  71. package/dist/expanding-button-group/expanding-button-group.d.ts +54 -0
  72. package/dist/expanding-button-group/expanding-button-group.js +350 -0
  73. package/dist/expanding-button-group/expanding-button-group.js.map +1 -0
  74. package/dist/expanding-button-group/index.d.ts +2 -0
  75. package/dist/expanding-button-group/index.js +2 -0
  76. package/dist/file-drop-zone/file-drop-zone.d.ts +71 -0
  77. package/dist/file-drop-zone/file-drop-zone.js +116 -0
  78. package/dist/file-drop-zone/file-drop-zone.js.map +1 -0
  79. package/dist/file-drop-zone/index.d.ts +2 -0
  80. package/dist/file-drop-zone/index.js +2 -0
  81. package/dist/filter-bar/filter-bar.d.ts +121 -0
  82. package/dist/filter-bar/filter-bar.js +300 -0
  83. package/dist/filter-bar/filter-bar.js.map +1 -0
  84. package/dist/filter-bar/index.d.ts +2 -0
  85. package/dist/filter-bar/index.js +2 -0
  86. package/dist/floating-button-group/floating-button-group.d.ts +61 -0
  87. package/dist/floating-button-group/floating-button-group.js +340 -0
  88. package/dist/floating-button-group/floating-button-group.js.map +1 -0
  89. package/dist/floating-button-group/index.d.ts +2 -0
  90. package/dist/floating-button-group/index.js +2 -0
  91. package/dist/icon-morph/icon-morph.d.ts +55 -0
  92. package/dist/icon-morph/icon-morph.js +331 -0
  93. package/dist/icon-morph/icon-morph.js.map +1 -0
  94. package/dist/icon-morph/index.d.ts +2 -0
  95. package/dist/icon-morph/index.js +2 -0
  96. package/dist/index.d.ts +24 -2
  97. package/dist/index.js +29 -7
  98. package/dist/input/input.d.ts +23 -1
  99. package/dist/input/input.js +37 -13
  100. package/dist/input/input.js.map +1 -1
  101. package/dist/label/label.d.ts +1 -1
  102. package/dist/label/label.js +4 -2
  103. package/dist/label/label.js.map +1 -1
  104. package/dist/lib/count-to.js +113 -0
  105. package/dist/lib/count-to.js.map +1 -0
  106. package/dist/lib/eye-morph.js +62 -0
  107. package/dist/lib/eye-morph.js.map +1 -0
  108. package/dist/lib/field-message.js +336 -0
  109. package/dist/lib/field-message.js.map +1 -0
  110. package/dist/lib/field-shell.js +81 -0
  111. package/dist/lib/field-shell.js.map +1 -0
  112. package/dist/lib/field-surface.js +4 -2
  113. package/dist/lib/field-surface.js.map +1 -1
  114. package/dist/lib/flip.js +80 -0
  115. package/dist/lib/flip.js.map +1 -0
  116. package/dist/lib/height-follow.js +59 -0
  117. package/dist/lib/height-follow.js.map +1 -0
  118. package/dist/lib/icon-swap.js +47 -0
  119. package/dist/lib/icon-swap.js.map +1 -0
  120. package/dist/lib/leaving-list.js +57 -0
  121. package/dist/lib/leaving-list.js.map +1 -0
  122. package/dist/lib/merge-refs.js +22 -0
  123. package/dist/lib/merge-refs.js.map +1 -0
  124. package/dist/lib/morph-text.js +128 -0
  125. package/dist/lib/morph-text.js.map +1 -0
  126. package/dist/lib/motion.js +162 -0
  127. package/dist/lib/motion.js.map +1 -0
  128. package/dist/lib/pausable-timeout.js +67 -0
  129. package/dist/lib/pausable-timeout.js.map +1 -0
  130. package/dist/lib/rolling-value.js +31 -0
  131. package/dist/lib/rolling-value.js.map +1 -0
  132. package/dist/lib/spring-progress.js +114 -0
  133. package/dist/lib/spring-progress.js.map +1 -0
  134. package/dist/lib/svg-id.js +10 -0
  135. package/dist/lib/svg-id.js.map +1 -0
  136. package/dist/lib/swap-text.js +77 -0
  137. package/dist/lib/swap-text.js.map +1 -0
  138. package/dist/lib/use-copy-feedback.js +36 -0
  139. package/dist/lib/use-copy-feedback.js.map +1 -0
  140. package/dist/menu/menu.d.ts +5 -5
  141. package/dist/menu/menu.js +10 -6
  142. package/dist/menu/menu.js.map +1 -1
  143. package/dist/page-header/index.d.ts +2 -0
  144. package/dist/page-header/index.js +2 -0
  145. package/dist/page-header/page-header.d.ts +75 -0
  146. package/dist/page-header/page-header.js +83 -0
  147. package/dist/page-header/page-header.js.map +1 -0
  148. package/dist/password-field/index.d.ts +2 -0
  149. package/dist/password-field/index.js +2 -0
  150. package/dist/password-field/password-field.d.ts +37 -0
  151. package/dist/password-field/password-field.js +101 -0
  152. package/dist/password-field/password-field.js.map +1 -0
  153. package/dist/password-strength/index.d.ts +2 -0
  154. package/dist/password-strength/index.js +2 -0
  155. package/dist/password-strength/password-strength.d.ts +127 -0
  156. package/dist/password-strength/password-strength.js +455 -0
  157. package/dist/password-strength/password-strength.js.map +1 -0
  158. package/dist/popover/popover.d.ts +10 -2
  159. package/dist/popover/popover.js +6 -4
  160. package/dist/popover/popover.js.map +1 -1
  161. package/dist/progress/progress.d.ts +2 -2
  162. package/dist/progress/progress.js +50 -7
  163. package/dist/progress/progress.js.map +1 -1
  164. package/dist/radio-group/radio-group.d.ts +3 -3
  165. package/dist/radio-group/radio-group.js +14 -10
  166. package/dist/radio-group/radio-group.js.map +1 -1
  167. package/dist/scroll-area/scroll-area.d.ts +17 -6
  168. package/dist/scroll-area/scroll-area.js +30 -6
  169. package/dist/scroll-area/scroll-area.js.map +1 -1
  170. package/dist/search-field/index.d.ts +2 -0
  171. package/dist/search-field/index.js +2 -0
  172. package/dist/search-field/search-field.d.ts +26 -0
  173. package/dist/search-field/search-field.js +155 -0
  174. package/dist/search-field/search-field.js.map +1 -0
  175. package/dist/select/select.d.ts +3 -3
  176. package/dist/select/select.js +85 -24
  177. package/dist/select/select.js.map +1 -1
  178. package/dist/separator/separator.d.ts +1 -1
  179. package/dist/separator/separator.js +4 -2
  180. package/dist/separator/separator.js.map +1 -1
  181. package/dist/sheet/sheet.d.ts +1 -1
  182. package/dist/sheet/sheet.js +6 -3
  183. package/dist/sheet/sheet.js.map +1 -1
  184. package/dist/side-nav/index.d.ts +2 -0
  185. package/dist/side-nav/index.js +2 -0
  186. package/dist/side-nav/side-nav.d.ts +72 -0
  187. package/dist/side-nav/side-nav.js +142 -0
  188. package/dist/side-nav/side-nav.js.map +1 -0
  189. package/dist/skeleton/skeleton.d.ts +8 -2
  190. package/dist/skeleton/skeleton.js +9 -3
  191. package/dist/skeleton/skeleton.js.map +1 -1
  192. package/dist/slider/slider.d.ts +2 -2
  193. package/dist/slider/slider.js +64 -8
  194. package/dist/slider/slider.js.map +1 -1
  195. package/dist/spinner/spinner.d.ts +1 -1
  196. package/dist/spinner/spinner.js +4 -2
  197. package/dist/spinner/spinner.js.map +1 -1
  198. package/dist/split-button/index.d.ts +2 -0
  199. package/dist/split-button/index.js +2 -0
  200. package/dist/split-button/split-button.d.ts +46 -0
  201. package/dist/split-button/split-button.js +122 -0
  202. package/dist/split-button/split-button.js.map +1 -0
  203. package/dist/stat-card/index.d.ts +2 -0
  204. package/dist/stat-card/index.js +2 -0
  205. package/dist/stat-card/stat-card.d.ts +81 -0
  206. package/dist/stat-card/stat-card.js +152 -0
  207. package/dist/stat-card/stat-card.js.map +1 -0
  208. package/dist/styles.css +1 -1
  209. package/dist/switch/switch.d.ts +2 -2
  210. package/dist/switch/switch.js +11 -8
  211. package/dist/switch/switch.js.map +1 -1
  212. package/dist/table/index.d.ts +2 -2
  213. package/dist/table/index.js +2 -2
  214. package/dist/table/table.d.ts +38 -7
  215. package/dist/table/table.js +114 -12
  216. package/dist/table/table.js.map +1 -1
  217. package/dist/tabs/tabs.d.ts +4 -4
  218. package/dist/tabs/tabs.js +153 -12
  219. package/dist/tabs/tabs.js.map +1 -1
  220. package/dist/textarea/textarea.d.ts +24 -1
  221. package/dist/textarea/textarea.js +27 -3
  222. package/dist/textarea/textarea.js.map +1 -1
  223. package/dist/theme-switch/index.d.ts +2 -0
  224. package/dist/theme-switch/index.js +2 -0
  225. package/dist/theme-switch/theme-switch.d.ts +37 -0
  226. package/dist/theme-switch/theme-switch.js +123 -0
  227. package/dist/theme-switch/theme-switch.js.map +1 -0
  228. package/dist/time-picker/index.d.ts +2 -0
  229. package/dist/time-picker/index.js +2 -0
  230. package/dist/time-picker/time-picker.d.ts +54 -0
  231. package/dist/time-picker/time-picker.js +201 -0
  232. package/dist/time-picker/time-picker.js.map +1 -0
  233. package/dist/toast/toast.d.ts +2 -2
  234. package/dist/toast/toast.js +61 -39
  235. package/dist/toast/toast.js.map +1 -1
  236. package/dist/tooltip/tooltip.d.ts +3 -3
  237. package/dist/tooltip/tooltip.js +66 -15
  238. package/dist/tooltip/tooltip.js.map +1 -1
  239. package/package.json +83 -3
@@ -0,0 +1,331 @@
1
+ "use client";
2
+ import { cn } from "../lib/cn.js";
3
+ import { lerpPath, useSpringProgress } from "../lib/spring-progress.js";
4
+ import { useSvgId } from "../lib/svg-id.js";
5
+ import { useRef, useState } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/icon-morph/icon-morph.tsx
8
+ /** Counts how many times `state` turned true after mount, so one-shot moments (a ring, a burst) replay on each turn on. */
9
+ function useTurnOns(state) {
10
+ const [previous, setPrevious] = useState(state);
11
+ const [count, setCount] = useState(0);
12
+ if (previous !== state) {
13
+ setPrevious(state);
14
+ if (state) setCount((value) => value + 1);
15
+ }
16
+ return count;
17
+ }
18
+ function Frame({ size = 24, strokeWidth = 1.75, state, className, children, ...rest }) {
19
+ return /* @__PURE__ */ jsx("svg", {
20
+ viewBox: "0 0 24 24",
21
+ width: size,
22
+ height: size,
23
+ fill: "none",
24
+ stroke: "currentColor",
25
+ strokeWidth,
26
+ strokeLinecap: "round",
27
+ strokeLinejoin: "round",
28
+ "aria-hidden": "true",
29
+ focusable: "false",
30
+ "data-on": state ? "" : void 0,
31
+ className: cn("block flex-none overflow-visible", className),
32
+ ...rest,
33
+ children
34
+ });
35
+ }
36
+ /** Menu to close: the outer lines slide to the middle as they rotate into an X, and the middle line folds away. */
37
+ function MenuIcon({ state = false, ...props }) {
38
+ return /* @__PURE__ */ jsxs(Frame, {
39
+ state,
40
+ ...props,
41
+ children: [
42
+ /* @__PURE__ */ jsx("path", {
43
+ d: "M4 6h16",
44
+ className: "icon-morph-menu-top"
45
+ }),
46
+ /* @__PURE__ */ jsx("path", {
47
+ d: "M4 12h16",
48
+ className: "icon-morph-menu-middle"
49
+ }),
50
+ /* @__PURE__ */ jsx("path", {
51
+ d: "M4 18h16",
52
+ className: "icon-morph-menu-bottom"
53
+ })
54
+ ]
55
+ });
56
+ }
57
+ const PLAY = ["M7 4.5 L12 7.42 L12 16.58 L7 19.5 Z", "M12 7.42 L19.5 11.8 L19.5 12.2 L12 16.58 Z"];
58
+ const PAUSE = ["M6.5 5 L10 5 L10 19 L6.5 19 Z", "M14 5 L17.5 5 L17.5 19 L14 19 Z"];
59
+ /**
60
+ * A pair of paths that morph between two outlines on the morph spring. The path
61
+ * is driven from script (see useSpringProgress): CSS cannot interpolate `d` in
62
+ * every browser.
63
+ */
64
+ function MorphPaths({ from, to, state, props }) {
65
+ const refs = useRef([]);
66
+ const [initial] = useState(() => from.map((d, i) => lerpPath(d, to[i], state ? 1 : 0)));
67
+ useSpringProgress(state ? 1 : 0, (progress) => {
68
+ refs.current.forEach((path, i) => path?.setAttribute("d", lerpPath(from[i], to[i], progress)));
69
+ });
70
+ return /* @__PURE__ */ jsx(Fragment$1, { children: from.map((_, i) => /* @__PURE__ */ jsx("path", {
71
+ ref: (node) => {
72
+ refs.current[i] = node;
73
+ },
74
+ d: initial[i],
75
+ ...props
76
+ }, i)) });
77
+ }
78
+ /** Play to pause: the triangle splits into two halves that straighten into bars. */
79
+ function PlayPauseIcon({ state = false, ...props }) {
80
+ return /* @__PURE__ */ jsx(Frame, {
81
+ state,
82
+ ...props,
83
+ children: /* @__PURE__ */ jsx(MorphPaths, {
84
+ from: PLAY,
85
+ to: PAUSE,
86
+ state,
87
+ props: {
88
+ fill: "currentColor",
89
+ strokeWidth: 1.5
90
+ }
91
+ })
92
+ });
93
+ }
94
+ /** Plus to check: each bar swings its ends to become one leg of the check. */
95
+ function PlusCheckIcon({ state = false, ...props }) {
96
+ return /* @__PURE__ */ jsx(Frame, {
97
+ state,
98
+ ...props,
99
+ children: /* @__PURE__ */ jsx(MorphPaths, {
100
+ from: ["M12 5 L12 19", "M5 12 L19 12"],
101
+ to: ["M20 6.5 L9.5 17", "M4.5 12 L9.5 17"],
102
+ state
103
+ })
104
+ });
105
+ }
106
+ /** Copy to check: the back sheet tucks under the front one, the front one settles away, and the check draws in. */
107
+ function CopyCheckIcon({ state = false, ...props }) {
108
+ return /* @__PURE__ */ jsxs(Frame, {
109
+ state,
110
+ ...props,
111
+ children: [
112
+ /* @__PURE__ */ jsx("path", {
113
+ d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
114
+ className: "icon-morph-copy-back"
115
+ }),
116
+ /* @__PURE__ */ jsx("rect", {
117
+ x: "8",
118
+ y: "8",
119
+ width: "14",
120
+ height: "14",
121
+ rx: "2",
122
+ className: "icon-morph-copy-front"
123
+ }),
124
+ /* @__PURE__ */ jsx("path", {
125
+ d: "M5 12.5 L9.5 17 L19 7.5",
126
+ pathLength: 1,
127
+ className: "icon-morph-copy-check"
128
+ })
129
+ ]
130
+ });
131
+ }
132
+ const RAYS = Array.from({ length: 8 }, (_, index) => {
133
+ const angle = index * Math.PI / 4;
134
+ const c = Math.cos(angle);
135
+ const s = Math.sin(angle);
136
+ const r = (value) => Math.round(value * 100) / 100;
137
+ return "M" + r(12 + c * 7.5) + " " + r(12 + s * 7.5) + " L" + r(12 + c * 10) + " " + r(12 + s * 10);
138
+ });
139
+ /**
140
+ * Sun to moon: the disc grows while a shadow slides across it from the corner, carving the crescent, and the rays turn and fold in.
141
+ * The crescent is drawn as an outline: the disc's edge outside the shadow, and the shadow's edge inside the disc.
142
+ */
143
+ function SunMoonIcon({ state = false, ...props }) {
144
+ const id = useSvgId();
145
+ return /* @__PURE__ */ jsxs(Frame, {
146
+ state,
147
+ ...props,
148
+ children: [
149
+ /* @__PURE__ */ jsxs("defs", { children: [/* @__PURE__ */ jsxs("mask", {
150
+ id: id + "-bite",
151
+ maskUnits: "userSpaceOnUse",
152
+ x: "-8",
153
+ y: "-8",
154
+ width: "40",
155
+ height: "40",
156
+ children: [/* @__PURE__ */ jsx("rect", {
157
+ x: "-8",
158
+ y: "-8",
159
+ width: "40",
160
+ height: "40",
161
+ fill: "white",
162
+ stroke: "none"
163
+ }), /* @__PURE__ */ jsx("circle", {
164
+ cx: 30,
165
+ cy: -6,
166
+ r: 6.5,
167
+ fill: "black",
168
+ stroke: "none",
169
+ className: "icon-morph-sun-shadow"
170
+ })]
171
+ }), /* @__PURE__ */ jsx("clipPath", {
172
+ id: id + "-disc",
173
+ children: /* @__PURE__ */ jsx("circle", {
174
+ cx: 12,
175
+ cy: 12,
176
+ r: 4.5,
177
+ className: "icon-morph-sun-disc"
178
+ })
179
+ })] }),
180
+ /* @__PURE__ */ jsx("circle", {
181
+ cx: 12,
182
+ cy: 12,
183
+ r: 4.5,
184
+ mask: "url(#" + id + "-bite)",
185
+ className: "icon-morph-sun-disc"
186
+ }),
187
+ /* @__PURE__ */ jsx("circle", {
188
+ cx: 30,
189
+ cy: -6,
190
+ r: 6.5,
191
+ clipPath: "url(#" + id + "-disc)",
192
+ className: "icon-morph-sun-shadow"
193
+ }),
194
+ /* @__PURE__ */ jsx("g", {
195
+ className: "icon-morph-sun-rays",
196
+ children: RAYS.map((d) => /* @__PURE__ */ jsx("path", { d }, d))
197
+ })
198
+ ]
199
+ });
200
+ }
201
+ /** A chevron that turns on a spring, for disclosure and sort controls. */
202
+ function ChevronIcon({ state = false, turn = 180, pointing = "down", style, ...props }) {
203
+ return /* @__PURE__ */ jsx(Frame, {
204
+ state,
205
+ style: {
206
+ "--turn": turn + "deg",
207
+ ...style
208
+ },
209
+ ...props,
210
+ children: /* @__PURE__ */ jsx("path", {
211
+ d: pointing === "down" ? "M6 9 L12 15 L18 9" : "M9 6 L15 12 L9 18",
212
+ className: "icon-morph-chevron"
213
+ })
214
+ });
215
+ }
216
+ const BELL = "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9";
217
+ const CLAPPER = "M10.3 21a1.94 1.94 0 0 0 3.4 0";
218
+ /** Notifications on and off: turning on rings the bell from its top, with the clapper lagging behind; turning off strikes it through. */
219
+ function BellIcon({ state = false, ...props }) {
220
+ const id = useSvgId();
221
+ const rings = useTurnOns(state);
222
+ return /* @__PURE__ */ jsxs(Frame, {
223
+ state,
224
+ ...props,
225
+ children: [
226
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("mask", {
227
+ id: id + "-cut",
228
+ maskUnits: "userSpaceOnUse",
229
+ x: "-4",
230
+ y: "-4",
231
+ width: "32",
232
+ height: "32",
233
+ children: [/* @__PURE__ */ jsx("rect", {
234
+ x: "-4",
235
+ y: "-4",
236
+ width: "32",
237
+ height: "32",
238
+ fill: "white",
239
+ stroke: "none"
240
+ }), /* @__PURE__ */ jsx("path", {
241
+ d: "M3 3 L21 21",
242
+ stroke: "black",
243
+ strokeWidth: 5,
244
+ pathLength: 1,
245
+ className: "icon-morph-slash"
246
+ })]
247
+ }) }),
248
+ /* @__PURE__ */ jsxs("g", {
249
+ mask: "url(#" + id + "-cut)",
250
+ children: [/* @__PURE__ */ jsx("g", {
251
+ className: cn("[transform-box:fill-box] [transform-origin:50%_0%]", rings > 0 && "motion-safe:animate-bell-ring"),
252
+ children: /* @__PURE__ */ jsx("path", { d: BELL })
253
+ }, "bell-" + rings), /* @__PURE__ */ jsx("path", {
254
+ d: CLAPPER,
255
+ className: cn(rings > 0 && "motion-safe:animate-clapper-ring")
256
+ }, "clapper-" + rings)]
257
+ }),
258
+ /* @__PURE__ */ jsx("path", {
259
+ d: "M3 3 L21 21",
260
+ pathLength: 1,
261
+ className: "icon-morph-slash"
262
+ })
263
+ ]
264
+ });
265
+ }
266
+ const HEART = "M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z";
267
+ const SPARKS = Array.from({ length: 7 }, (_, index) => {
268
+ const angle = -Math.PI / 2 + index * 2 * Math.PI / 7;
269
+ return {
270
+ x: Math.cos(angle),
271
+ y: Math.sin(angle),
272
+ r: index % 2 ? 1 : 1.4
273
+ };
274
+ });
275
+ /** Like: the heart fills with a pop, and a ring and a few sparks burst out once. Unliking simply empties it. */
276
+ function HeartIcon({ state = false, className, ...props }) {
277
+ const likes = useTurnOns(state);
278
+ const burst = likes > 0 && state;
279
+ return /* @__PURE__ */ jsxs(Frame, {
280
+ state,
281
+ className: cn("icon-morph-heart", className),
282
+ ...props,
283
+ children: [burst ? /* @__PURE__ */ jsxs("g", {
284
+ stroke: "none",
285
+ children: [/* @__PURE__ */ jsx("circle", {
286
+ cx: 12,
287
+ cy: 12,
288
+ r: 13,
289
+ fill: "none",
290
+ stroke: "currentColor",
291
+ className: "motion-safe:animate-heart-ring"
292
+ }), SPARKS.map((spark, index) => /* @__PURE__ */ jsx("circle", {
293
+ cx: 12,
294
+ cy: 12,
295
+ r: spark.r,
296
+ fill: "currentColor",
297
+ style: {
298
+ "--sx": spark.x,
299
+ "--sy": spark.y
300
+ },
301
+ className: "icon-morph-part motion-safe:animate-heart-spark"
302
+ }, index))]
303
+ }, "burst-" + likes) : null, /* @__PURE__ */ jsx("g", {
304
+ className: cn("icon-morph-part", burst && "motion-safe:animate-heart-pop"),
305
+ children: /* @__PURE__ */ jsx("path", {
306
+ d: HEART,
307
+ fill: "currentColor",
308
+ className: "icon-morph-heart-fill"
309
+ })
310
+ }, "heart-" + likes)]
311
+ });
312
+ }
313
+ const ICONS = {
314
+ menu: MenuIcon,
315
+ play: PlayPauseIcon,
316
+ plus: PlusCheckIcon,
317
+ copy: CopyCheckIcon,
318
+ theme: SunMoonIcon,
319
+ chevron: ChevronIcon,
320
+ bell: BellIcon,
321
+ heart: HeartIcon
322
+ };
323
+ /** One entry point for every morphing icon: pick it by `name` and drive it with `state`. */
324
+ function IconMorph({ name, ...props }) {
325
+ const Icon = ICONS[name];
326
+ return /* @__PURE__ */ jsx(Icon, { ...props });
327
+ }
328
+ //#endregion
329
+ export { BellIcon, ChevronIcon, CopyCheckIcon, HeartIcon, IconMorph, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon };
330
+
331
+ //# sourceMappingURL=icon-morph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-morph.js","names":[],"sources":["../../src/icon-morph/icon-morph.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef, useState, type CSSProperties, type ReactNode, type SVGProps } from \"react\";\n\nimport { cn } from \"../lib/cn.js\";\nimport { lerpPath, useSpringProgress } from \"../lib/spring-progress.js\";\nimport { useSvgId } from \"../lib/svg-id.js\";\n\nexport type IconMorphName =\n \"menu\" | \"play\" | \"plus\" | \"copy\" | \"theme\" | \"chevron\" | \"bell\" | \"heart\";\n\nexport interface IconMorphIconProps extends Omit<SVGProps<SVGSVGElement>, \"ref\" | \"children\"> {\n /**\n * The second state of the icon. menu: close, play: pause, plus: check, copy: check,\n * theme: moon, chevron: turned, bell: notifications on, heart: liked.\n */\n state?: boolean;\n /** Rendered size in px. Defaults to 24. */\n size?: number;\n /** Stroke width in the 24 unit grid. Defaults to 1.75. */\n strokeWidth?: number;\n}\n\n/**\n * A family of icons that morph between two states instead of swapping. Lines\n * rotate and slide into place, shapes interpolate their outlines, and a few\n * carry a small moment of their own: the bell rings when it turns on and the\n * heart bursts when liked. Every morph rides an interruptible spring, so\n * toggling quickly reverses from wherever the icon is. The icons are\n * decorative; put them inside a button that carries the accessible name and\n * `aria-pressed`.\n */\nexport interface IconMorphProps extends IconMorphIconProps {\n name: IconMorphName;\n}\n\n/** Counts how many times `state` turned true after mount, so one-shot moments (a ring, a burst) replay on each turn on. */\nfunction useTurnOns(state: boolean) {\n const [previous, setPrevious] = useState(state);\n const [count, setCount] = useState(0);\n if (previous !== state) {\n setPrevious(state);\n if (state) setCount((value) => value + 1);\n }\n return count;\n}\n\nfunction Frame({\n size = 24,\n strokeWidth = 1.75,\n state,\n className,\n children,\n ...rest\n}: IconMorphIconProps & { children: ReactNode }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n data-on={state ? \"\" : undefined}\n className={cn(\"block flex-none overflow-visible\", className)}\n {...rest}\n >\n {children}\n </svg>\n );\n}\n\n/** Menu to close: the outer lines slide to the middle as they rotate into an X, and the middle line folds away. */\nexport function MenuIcon({ state = false, ...props }: IconMorphIconProps) {\n return (\n <Frame state={state} {...props}>\n <path d=\"M4 6h16\" className=\"icon-morph-menu-top\" />\n <path d=\"M4 12h16\" className=\"icon-morph-menu-middle\" />\n <path d=\"M4 18h16\" className=\"icon-morph-menu-bottom\" />\n </Frame>\n );\n}\n\n// Play is split down the middle into two quads, so each half can become one pause bar.\nconst PLAY = [\"M7 4.5 L12 7.42 L12 16.58 L7 19.5 Z\", \"M12 7.42 L19.5 11.8 L19.5 12.2 L12 16.58 Z\"];\nconst PAUSE = [\"M6.5 5 L10 5 L10 19 L6.5 19 Z\", \"M14 5 L17.5 5 L17.5 19 L14 19 Z\"];\n\n/**\n * A pair of paths that morph between two outlines on the morph spring. The path\n * is driven from script (see useSpringProgress): CSS cannot interpolate `d` in\n * every browser.\n */\nfunction MorphPaths({\n from,\n to,\n state,\n props,\n}: {\n from: string[];\n to: string[];\n state: boolean;\n props?: SVGProps<SVGPathElement>;\n}) {\n const refs = useRef<(SVGPathElement | null)[]>([]);\n // React sets `d` once, at the state it mounts in, and never again; the spring owns it after that.\n const [initial] = useState(() => from.map((d, i) => lerpPath(d, to[i]!, state ? 1 : 0)));\n useSpringProgress(state ? 1 : 0, (progress) => {\n refs.current.forEach((path, i) =>\n path?.setAttribute(\"d\", lerpPath(from[i]!, to[i]!, progress)),\n );\n });\n return (\n <>\n {from.map((_, i) => (\n <path\n key={i}\n ref={(node) => {\n refs.current[i] = node;\n }}\n d={initial[i]}\n {...props}\n />\n ))}\n </>\n );\n}\n\n/** Play to pause: the triangle splits into two halves that straighten into bars. */\nexport function PlayPauseIcon({ state = false, ...props }: IconMorphIconProps) {\n return (\n <Frame state={state} {...props}>\n <MorphPaths\n from={PLAY}\n to={PAUSE}\n state={state}\n props={{ fill: \"currentColor\", strokeWidth: 1.5 }}\n />\n </Frame>\n );\n}\n\n/** Plus to check: each bar swings its ends to become one leg of the check. */\nexport function PlusCheckIcon({ state = false, ...props }: IconMorphIconProps) {\n return (\n <Frame state={state} {...props}>\n <MorphPaths\n from={[\"M12 5 L12 19\", \"M5 12 L19 12\"]}\n to={[\"M20 6.5 L9.5 17\", \"M4.5 12 L9.5 17\"]}\n state={state}\n />\n </Frame>\n );\n}\n\n/** Copy to check: the back sheet tucks under the front one, the front one settles away, and the check draws in. */\nexport function CopyCheckIcon({ state = false, ...props }: IconMorphIconProps) {\n return (\n <Frame state={state} {...props}>\n <path\n d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\n className=\"icon-morph-copy-back\"\n />\n <rect x=\"8\" y=\"8\" width=\"14\" height=\"14\" rx=\"2\" className=\"icon-morph-copy-front\" />\n <path d=\"M5 12.5 L9.5 17 L19 7.5\" pathLength={1} className=\"icon-morph-copy-check\" />\n </Frame>\n );\n}\n\nconst RAYS = Array.from({ length: 8 }, (_, index) => {\n const angle = (index * Math.PI) / 4;\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const r = (value: number) => Math.round(value * 100) / 100;\n return (\n \"M\" + r(12 + c * 7.5) + \" \" + r(12 + s * 7.5) + \" L\" + r(12 + c * 10) + \" \" + r(12 + s * 10)\n );\n});\n\n/**\n * Sun to moon: the disc grows while a shadow slides across it from the corner, carving the crescent, and the rays turn and fold in.\n * The crescent is drawn as an outline: the disc's edge outside the shadow, and the shadow's edge inside the disc.\n */\nexport function SunMoonIcon({ state = false, ...props }: IconMorphIconProps) {\n const id = useSvgId();\n return (\n <Frame state={state} {...props}>\n <defs>\n <mask id={id + \"-bite\"} maskUnits=\"userSpaceOnUse\" x=\"-8\" y=\"-8\" width=\"40\" height=\"40\">\n <rect x=\"-8\" y=\"-8\" width=\"40\" height=\"40\" fill=\"white\" stroke=\"none\" />\n <circle\n cx={30}\n cy={-6}\n r={6.5}\n fill=\"black\"\n stroke=\"none\"\n className=\"icon-morph-sun-shadow\"\n />\n </mask>\n <clipPath id={id + \"-disc\"}>\n <circle cx={12} cy={12} r={4.5} className=\"icon-morph-sun-disc\" />\n </clipPath>\n </defs>\n <circle\n cx={12}\n cy={12}\n r={4.5}\n mask={\"url(#\" + id + \"-bite)\"}\n className=\"icon-morph-sun-disc\"\n />\n <circle\n cx={30}\n cy={-6}\n r={6.5}\n clipPath={\"url(#\" + id + \"-disc)\"}\n className=\"icon-morph-sun-shadow\"\n />\n <g className=\"icon-morph-sun-rays\">\n {RAYS.map((d) => (\n <path key={d} d={d} />\n ))}\n </g>\n </Frame>\n );\n}\n\nexport interface ChevronIconProps extends IconMorphIconProps {\n /** Degrees the chevron turns when `state` is true. 180 flips down to up; 90 turns right to down. */\n turn?: number;\n /** Where the chevron points at rest. */\n pointing?: \"down\" | \"right\";\n}\n\n/** A chevron that turns on a spring, for disclosure and sort controls. */\nexport function ChevronIcon({\n state = false,\n turn = 180,\n pointing = \"down\",\n style,\n ...props\n}: ChevronIconProps) {\n return (\n <Frame state={state} style={{ \"--turn\": turn + \"deg\", ...style } as CSSProperties} {...props}>\n <path\n d={pointing === \"down\" ? \"M6 9 L12 15 L18 9\" : \"M9 6 L15 12 L9 18\"}\n className=\"icon-morph-chevron\"\n />\n </Frame>\n );\n}\n\nconst BELL = \"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\";\nconst CLAPPER = \"M10.3 21a1.94 1.94 0 0 0 3.4 0\";\n\n/** Notifications on and off: turning on rings the bell from its top, with the clapper lagging behind; turning off strikes it through. */\nexport function BellIcon({ state = false, ...props }: IconMorphIconProps) {\n const id = useSvgId();\n const rings = useTurnOns(state);\n return (\n <Frame state={state} {...props}>\n <defs>\n <mask id={id + \"-cut\"} maskUnits=\"userSpaceOnUse\" x=\"-4\" y=\"-4\" width=\"32\" height=\"32\">\n <rect x=\"-4\" y=\"-4\" width=\"32\" height=\"32\" fill=\"white\" stroke=\"none\" />\n <path\n d=\"M3 3 L21 21\"\n stroke=\"black\"\n strokeWidth={5}\n pathLength={1}\n className=\"icon-morph-slash\"\n />\n </mask>\n </defs>\n <g mask={\"url(#\" + id + \"-cut)\"}>\n <g\n key={\"bell-\" + rings}\n className={cn(\n \"[transform-box:fill-box] [transform-origin:50%_0%]\",\n rings > 0 && \"motion-safe:animate-bell-ring\",\n )}\n >\n <path d={BELL} />\n </g>\n <path\n key={\"clapper-\" + rings}\n d={CLAPPER}\n className={cn(rings > 0 && \"motion-safe:animate-clapper-ring\")}\n />\n </g>\n <path d=\"M3 3 L21 21\" pathLength={1} className=\"icon-morph-slash\" />\n </Frame>\n );\n}\n\nconst HEART =\n \"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\";\nconst SPARKS = Array.from({ length: 7 }, (_, index) => {\n const angle = -Math.PI / 2 + (index * 2 * Math.PI) / 7;\n return { x: Math.cos(angle), y: Math.sin(angle), r: index % 2 ? 1 : 1.4 };\n});\n\n/** Like: the heart fills with a pop, and a ring and a few sparks burst out once. Unliking simply empties it. */\nexport function HeartIcon({ state = false, className, ...props }: IconMorphIconProps) {\n const likes = useTurnOns(state);\n const burst = likes > 0 && state;\n return (\n <Frame state={state} className={cn(\"icon-morph-heart\", className)} {...props}>\n {burst ? (\n <g key={\"burst-\" + likes} stroke=\"none\">\n <circle\n cx={12}\n cy={12}\n r={13}\n fill=\"none\"\n stroke=\"currentColor\"\n className=\"motion-safe:animate-heart-ring\"\n />\n {SPARKS.map((spark, index) => (\n <circle\n key={index}\n cx={12}\n cy={12}\n r={spark.r}\n fill=\"currentColor\"\n style={{ \"--sx\": spark.x, \"--sy\": spark.y } as CSSProperties}\n className=\"icon-morph-part motion-safe:animate-heart-spark\"\n />\n ))}\n </g>\n ) : null}\n <g\n key={\"heart-\" + likes}\n className={cn(\"icon-morph-part\", burst && \"motion-safe:animate-heart-pop\")}\n >\n <path d={HEART} fill=\"currentColor\" className=\"icon-morph-heart-fill\" />\n </g>\n </Frame>\n );\n}\n\nconst ICONS: Record<IconMorphName, (props: IconMorphIconProps) => ReactNode> = {\n menu: MenuIcon,\n play: PlayPauseIcon,\n plus: PlusCheckIcon,\n copy: CopyCheckIcon,\n theme: SunMoonIcon,\n chevron: ChevronIcon,\n bell: BellIcon,\n heart: HeartIcon,\n};\n\n/** One entry point for every morphing icon: pick it by `name` and drive it with `state`. */\nexport function IconMorph({ name, ...props }: IconMorphProps) {\n const Icon = ICONS[name];\n return <Icon {...props} />;\n}\n"],"mappings":";;;;;;;;AAqCA,SAAS,WAAW,OAAgB;CAClC,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,CAAC,OAAO,YAAY,SAAS,CAAC;CACpC,IAAI,aAAa,OAAO;EACtB,YAAY,KAAK;EACjB,IAAI,OAAO,UAAU,UAAU,QAAQ,CAAC;CAC1C;CACA,OAAO;AACT;AAEA,SAAS,MAAM,EACb,OAAO,IACP,cAAc,MACd,OACA,WACA,UACA,GAAG,QAC4C;CAC/C,OACE,oBAAC,OAAD;EACE,SAAQ;EACR,OAAO;EACP,QAAQ;EACR,MAAK;EACL,QAAO;EACM;EACb,eAAc;EACd,gBAAe;EACf,eAAY;EACZ,WAAU;EACV,WAAS,QAAQ,KAAK,KAAA;EACtB,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;EAEH;CACE,CAAA;AAET;;AAGA,SAAgB,SAAS,EAAE,QAAQ,OAAO,GAAG,SAA6B;CACxE,OACE,qBAAC,OAAD;EAAc;EAAO,GAAI;EAAzB,UAAA;GACE,oBAAC,QAAD;IAAM,GAAE;IAAU,WAAU;GAAuB,CAAA;GACnD,oBAAC,QAAD;IAAM,GAAE;IAAW,WAAU;GAA0B,CAAA;GACvD,oBAAC,QAAD;IAAM,GAAE;IAAW,WAAU;GAA0B,CAAA;EAClD;;AAEX;AAGA,MAAM,OAAO,CAAC,uCAAuC,4CAA4C;AACjG,MAAM,QAAQ,CAAC,iCAAiC,iCAAiC;;;;;;AAOjF,SAAS,WAAW,EAClB,MACA,IACA,OACA,SAMC;CACD,MAAM,OAAO,OAAkC,CAAC,CAAC;CAEjD,MAAM,CAAC,WAAW,eAAe,KAAK,KAAK,GAAG,MAAM,SAAS,GAAG,GAAG,IAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;CACvF,kBAAkB,QAAQ,IAAI,IAAI,aAAa;EAC7C,KAAK,QAAQ,SAAS,MAAM,MAC1B,MAAM,aAAa,KAAK,SAAS,KAAK,IAAK,GAAG,IAAK,QAAQ,CAAC,CAC9D;CACF,CAAC;CACD,OACE,oBAAA,YAAA,EAAA,UACG,KAAK,KAAK,GAAG,MACZ,oBAAC,QAAD;EAEE,MAAM,SAAS;GACb,KAAK,QAAQ,KAAK;EACpB;EACA,GAAG,QAAQ;EACX,GAAI;CACL,GANM,CAMN,CACF,EACD,CAAA;AAEN;;AAGA,SAAgB,cAAc,EAAE,QAAQ,OAAO,GAAG,SAA6B;CAC7E,OACE,oBAAC,OAAD;EAAc;EAAO,GAAI;EACvB,UAAA,oBAAC,YAAD;GACE,MAAM;GACN,IAAI;GACG;GACP,OAAO;IAAE,MAAM;IAAgB,aAAa;GAAI;EACjD,CAAA;CACI,CAAA;AAEX;;AAGA,SAAgB,cAAc,EAAE,QAAQ,OAAO,GAAG,SAA6B;CAC7E,OACE,oBAAC,OAAD;EAAc;EAAO,GAAI;EACvB,UAAA,oBAAC,YAAD;GACE,MAAM,CAAC,gBAAgB,cAAc;GACrC,IAAI,CAAC,mBAAmB,iBAAiB;GAClC;EACR,CAAA;CACI,CAAA;AAEX;;AAGA,SAAgB,cAAc,EAAE,QAAQ,OAAO,GAAG,SAA6B;CAC7E,OACE,qBAAC,OAAD;EAAc;EAAO,GAAI;EAAzB,UAAA;GACE,oBAAC,QAAD;IACE,GAAE;IACF,WAAU;GACX,CAAA;GACD,oBAAC,QAAD;IAAM,GAAE;IAAI,GAAE;IAAI,OAAM;IAAK,QAAO;IAAK,IAAG;IAAI,WAAU;GAAyB,CAAA;GACnF,oBAAC,QAAD;IAAM,GAAE;IAA0B,YAAY;IAAG,WAAU;GAAyB,CAAA;EAC/E;;AAEX;AAEA,MAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,UAAU;CACnD,MAAM,QAAS,QAAQ,KAAK,KAAM;CAClC,MAAM,IAAI,KAAK,IAAI,KAAK;CACxB,MAAM,IAAI,KAAK,IAAI,KAAK;CACxB,MAAM,KAAK,UAAkB,KAAK,MAAM,QAAQ,GAAG,IAAI;CACvD,OACE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE;AAE/F,CAAC;;;;;AAMD,SAAgB,YAAY,EAAE,QAAQ,OAAO,GAAG,SAA6B;CAC3E,MAAM,KAAK,SAAS;CACpB,OACE,qBAAC,OAAD;EAAc;EAAO,GAAI;EAAzB,UAAA;GACE,qBAAC,QAAD,EAAA,UAAA,CACE,qBAAC,QAAD;IAAM,IAAI,KAAK;IAAS,WAAU;IAAiB,GAAE;IAAK,GAAE;IAAK,OAAM;IAAK,QAAO;IAAnF,UAAA,CACE,oBAAC,QAAD;KAAM,GAAE;KAAK,GAAE;KAAK,OAAM;KAAK,QAAO;KAAK,MAAK;KAAQ,QAAO;IAAQ,CAAA,GACvE,oBAAC,UAAD;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;KACH,MAAK;KACL,QAAO;KACP,WAAU;IACX,CAAA,CACG;GACN,CAAA,GAAA,oBAAC,YAAD;IAAU,IAAI,KAAK;IACjB,UAAA,oBAAC,UAAD;KAAQ,IAAI;KAAI,IAAI;KAAI,GAAG;KAAK,WAAU;IAAuB,CAAA;GACzD,CAAA,CACN,EAAA,CAAA;GACN,oBAAC,UAAD;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,MAAM,UAAU,KAAK;IACrB,WAAU;GACX,CAAA;GACD,oBAAC,UAAD;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,UAAU,UAAU,KAAK;IACzB,WAAU;GACX,CAAA;GACD,oBAAC,KAAD;IAAG,WAAU;IACV,UAAA,KAAK,KAAK,MACT,oBAAC,QAAD,EAAiB,EAAI,GAAV,CAAU,CACtB;GACA,CAAA;EACE;;AAEX;;AAUA,SAAgB,YAAY,EAC1B,QAAQ,OACR,OAAO,KACP,WAAW,QACX,OACA,GAAG,SACgB;CACnB,OACE,oBAAC,OAAD;EAAc;EAAO,OAAO;GAAE,UAAU,OAAO;GAAO,GAAG;EAAM;EAAoB,GAAI;EACrF,UAAA,oBAAC,QAAD;GACE,GAAG,aAAa,SAAS,sBAAsB;GAC/C,WAAU;EACX,CAAA;CACI,CAAA;AAEX;AAEA,MAAM,OAAO;AACb,MAAM,UAAU;;AAGhB,SAAgB,SAAS,EAAE,QAAQ,OAAO,GAAG,SAA6B;CACxE,MAAM,KAAK,SAAS;CACpB,MAAM,QAAQ,WAAW,KAAK;CAC9B,OACE,qBAAC,OAAD;EAAc;EAAO,GAAI;EAAzB,UAAA;GACE,oBAAC,QAAD,EAAA,UACE,qBAAC,QAAD;IAAM,IAAI,KAAK;IAAQ,WAAU;IAAiB,GAAE;IAAK,GAAE;IAAK,OAAM;IAAK,QAAO;IAAlF,UAAA,CACE,oBAAC,QAAD;KAAM,GAAE;KAAK,GAAE;KAAK,OAAM;KAAK,QAAO;KAAK,MAAK;KAAQ,QAAO;IAAQ,CAAA,GACvE,oBAAC,QAAD;KACE,GAAE;KACF,QAAO;KACP,aAAa;KACb,YAAY;KACZ,WAAU;IACX,CAAA,CACG;GACF,CAAA,EAAA,CAAA;GACN,qBAAC,KAAD;IAAG,MAAM,UAAU,KAAK;IAAxB,UAAA,CACE,oBAAC,KAAD;KAEE,WAAW,GACT,sDACA,QAAQ,KAAK,+BACf;KAEA,UAAA,oBAAC,QAAD,EAAM,GAAG,KAAO,CAAA;IACf,GAPI,UAAU,KAOd,GACH,oBAAC,QAAD;KAEE,GAAG;KACH,WAAW,GAAG,QAAQ,KAAK,kCAAkC;IAC9D,GAHM,aAAa,KAGnB,CACA;;GACH,oBAAC,QAAD;IAAM,GAAE;IAAc,YAAY;IAAG,WAAU;GAAoB,CAAA;EAC9D;;AAEX;AAEA,MAAM,QACJ;AACF,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,UAAU;CACrD,MAAM,QAAQ,CAAC,KAAK,KAAK,IAAK,QAAQ,IAAI,KAAK,KAAM;CACrD,OAAO;EAAE,GAAG,KAAK,IAAI,KAAK;EAAG,GAAG,KAAK,IAAI,KAAK;EAAG,GAAG,QAAQ,IAAI,IAAI;CAAI;AAC1E,CAAC;;AAGD,SAAgB,UAAU,EAAE,QAAQ,OAAO,WAAW,GAAG,SAA6B;CACpF,MAAM,QAAQ,WAAW,KAAK;CAC9B,MAAM,QAAQ,QAAQ,KAAK;CAC3B,OACE,qBAAC,OAAD;EAAc;EAAO,WAAW,GAAG,oBAAoB,SAAS;EAAG,GAAI;EAAvE,UAAA,CACG,QACC,qBAAC,KAAD;GAA0B,QAAO;GAAjC,UAAA,CACE,oBAAC,UAAD;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,MAAK;IACL,QAAO;IACP,WAAU;GACX,CAAA,GACA,OAAO,KAAK,OAAO,UAClB,oBAAC,UAAD;IAEE,IAAI;IACJ,IAAI;IACJ,GAAG,MAAM;IACT,MAAK;IACL,OAAO;KAAE,QAAQ,MAAM;KAAG,QAAQ,MAAM;IAAE;IAC1C,WAAU;GACX,GAPM,KAON,CACF,CACA;EApBK,GAAA,WAAW,KAoBhB,IACD,MACJ,oBAAC,KAAD;GAEE,WAAW,GAAG,mBAAmB,SAAS,+BAA+B;GAEzE,UAAA,oBAAC,QAAD;IAAM,GAAG;IAAO,MAAK;IAAe,WAAU;GAAyB,CAAA;EACtE,GAJI,WAAW,KAIf,CACE;;AAEX;AAEA,MAAM,QAAyE;CAC7E,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,OAAO;CACP,SAAS;CACT,MAAM;CACN,OAAO;AACT;;AAGA,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAyB;CAC5D,MAAM,OAAO,MAAM;CACnB,OAAO,oBAAC,MAAD,EAAM,GAAI,MAAQ,CAAA;AAC3B"}
@@ -0,0 +1,2 @@
1
+ import { BellIcon, ChevronIcon, ChevronIconProps, CopyCheckIcon, HeartIcon, IconMorph, IconMorphIconProps, IconMorphName, IconMorphProps, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon } from "./icon-morph.js";
2
+ export { BellIcon, ChevronIcon, type ChevronIconProps, CopyCheckIcon, HeartIcon, IconMorph, type IconMorphIconProps, type IconMorphName, type IconMorphProps, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon };
@@ -0,0 +1,2 @@
1
+ import { BellIcon, ChevronIcon, CopyCheckIcon, HeartIcon, IconMorph, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon } from "./icon-morph.js";
2
+ export { BellIcon, ChevronIcon, CopyCheckIcon, HeartIcon, IconMorph, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon };
package/dist/index.d.ts CHANGED
@@ -1,32 +1,54 @@
1
1
  import { Accordion, AccordionItem, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionProps, AccordionTrigger, AccordionTriggerProps } from "./accordion/accordion.js";
2
+ import { Button, ButtonProps, buttonVariants } from "./button/button.js";
3
+ import { ActionButton, ActionButtonProps } from "./action-button/action-button.js";
2
4
  import { Dialog, DialogFooter, DialogFooterProps, DialogProps, DialogTrigger, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants } from "./dialog/dialog.js";
3
5
  import { AlertDialog, AlertDialogProps } from "./alert-dialog/alert-dialog.js";
4
6
  import { Alert, AlertProps, alertVariants } from "./alert/alert.js";
5
7
  import { Avatar, AvatarProps, avatarVariants } from "./avatar/avatar.js";
6
8
  import { Badge, BadgeProps, badgeVariants } from "./badge/badge.js";
7
9
  import { BreadcrumbItem, BreadcrumbItemProps, Breadcrumbs, BreadcrumbsProps, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants } from "./breadcrumb/breadcrumb.js";
8
- import { Button, ButtonProps, buttonVariants } from "./button/button.js";
10
+ import { ButtonGroup, ButtonGroupItem, ButtonGroupMenu, ButtonGroupMenuItem, ButtonGroupOrientation, ButtonGroupProps, ButtonGroupSize, ButtonGroupVariant } from "./button-group/button-group.js";
9
11
  import { Calendar, CalendarProps, CalendarRange, CalendarRangeProps, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants } from "./calendar/calendar.js";
10
12
  import { Card, CardContent, CardContentProps, CardDescription, CardDescriptionProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardTitle, CardTitleProps, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants } from "./card/card.js";
11
13
  import { Checkbox, CheckboxProps, checkboxBoxVariants, checkboxVariants } from "./checkbox/checkbox.js";
14
+ import { ConfirmMorph, ConfirmMorphMode, ConfirmMorphProps, ConfirmMorphState } from "./confirm-morph/confirm-morph.js";
15
+ import { CopyButton, CopyButtonProps } from "./copy-button/copy-button.js";
16
+ import { datePickerInputVariants, datePickerLabelVariants, datePickerSegmentVariants, datePickerTriggerVariants, datePickerVariants } from "./date-picker/picker-parts.js";
17
+ import { DateRangePicker, DateRangePickerMessages, DateRangePickerProps, DateRangePickerValue, DateRangePreset, defaultDateRangePresets } from "./date-picker/date-range-picker.js";
18
+ import { DatePicker, DatePickerProps } from "./date-picker/date-picker.js";
19
+ import { EmptyState, EmptyStateProps, emptyStateActionVariants, emptyStateTextVariants, emptyStateVariants } from "./empty-state/empty-state.js";
20
+ import { ExpandingButtonGroup, ExpandingButtonGroupItem, ExpandingButtonGroupProps, ExpandingButtonGroupSize, ExpandingButtonGroupTone } from "./expanding-button-group/expanding-button-group.js";
21
+ import { FileDropZone, FileDropZoneProps, fileDropZoneHintVariants, fileDropZonePromptVariants, fileDropZoneVariants } from "./file-drop-zone/file-drop-zone.js";
22
+ import { FilterBar, FilterBarCustomField, FilterBarField, FilterBarOption, FilterBarProps, FilterBarSelectField, filterBarChipVariants, filterBarRowVariants, filterBarVariants } from "./filter-bar/filter-bar.js";
23
+ import { FloatingButtonGroup, FloatingButtonGroupAction, FloatingButtonGroupItem, FloatingButtonGroupOrientation, FloatingButtonGroupProps, FloatingButtonGroupSeparator, FloatingButtonGroupSize, FloatingButtonGroupVariant } from "./floating-button-group/floating-button-group.js";
24
+ import { BellIcon, ChevronIcon, ChevronIconProps, CopyCheckIcon, HeartIcon, IconMorph, IconMorphIconProps, IconMorphName, IconMorphProps, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon } from "./icon-morph/icon-morph.js";
12
25
  import { Input, InputProps, inputVariants } from "./input/input.js";
13
26
  import { Label, LabelProps, labelVariants } from "./label/label.js";
14
27
  import { cn, cnAll } from "./lib/cn.js";
15
28
  import { Menu, MenuItem, MenuItemProps, MenuProps, MenuSeparator, MenuTrigger, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants } from "./menu/menu.js";
29
+ import { PageHeader, PageHeaderProps, pageHeaderActionsVariants, pageHeaderBackVariants, pageHeaderDescriptionVariants, pageHeaderMetaVariants, pageHeaderRowVariants, pageHeaderTitleVariants, pageHeaderVariants } from "./page-header/page-header.js";
30
+ import { PasswordField, PasswordFieldMessages, PasswordFieldProps, defaultPasswordFieldMessages } from "./password-field/password-field.js";
31
+ import { EstimateStrengthOptions, PasswordRule, PasswordRuleLabels, PasswordRuleOptions, PasswordStrength, PasswordStrengthLevels, PasswordStrengthMessages, PasswordStrengthMessagesInput, PasswordStrengthProps, PasswordStrengthResult, countCodePoints, createPasswordRules, defaultPasswordRules, defaultPasswordStrengthMessages, estimateStrength } from "./password-strength/password-strength.js";
16
32
  import { Popover, PopoverProps, PopoverTrigger, popoverVariants } from "./popover/popover.js";
17
33
  import { Progress, ProgressProps, progressFillVariants, progressTrackVariants, progressVariants } from "./progress/progress.js";
18
34
  import { Radio, RadioGroup, RadioGroupProps, RadioProps, radioGroupVariants, radioVariants } from "./radio-group/radio-group.js";
19
35
  import { ScrollArea, ScrollAreaProps, scrollAreaVariants } from "./scroll-area/scroll-area.js";
36
+ import { SearchField, SearchFieldProps } from "./search-field/search-field.js";
20
37
  import { Select, SelectItem, SelectItemProps, SelectProps, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants } from "./select/select.js";
21
38
  import { Separator, SeparatorProps, separatorVariants } from "./separator/separator.js";
22
39
  import { Sheet, SheetProps, sheetOverlayVariants, sheetPanelVariants } from "./sheet/sheet.js";
40
+ import { SideNav, SideNavGroup, SideNavProps, SideNavSection, sideNavHeaderVariants, sideNavItemVariants, sideNavMenuVariants, sideNavVariants } from "./side-nav/side-nav.js";
23
41
  import { Skeleton, SkeletonProps, skeletonVariants } from "./skeleton/skeleton.js";
24
42
  import { Slider, SliderProps, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants } from "./slider/slider.js";
25
43
  import { Spinner, SpinnerProps, spinnerVariants } from "./spinner/spinner.js";
44
+ import { SplitButton, SplitButtonAction, SplitButtonProps } from "./split-button/split-button.js";
45
+ import { StatCard, StatCardProps, StatCardTone, statCardLabelVariants, statCardSubVariants, statCardValueVariants, statCardVariants } from "./stat-card/stat-card.js";
26
46
  import { Switch, SwitchProps, switchThumbVariants, switchTrackVariants } from "./switch/switch.js";
27
47
  import { Column, RowKey, Table, TableProps, createColumns, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants } from "./table/table.js";
28
48
  import { Tab, TabList, TabListProps, TabPanel, TabPanelProps, TabProps, Tabs, TabsProps, tabListVariants, tabPanelVariants, tabVariants, tabsVariants } from "./tabs/tabs.js";
29
49
  import { Textarea, TextareaProps, textareaVariants } from "./textarea/textarea.js";
50
+ import { Theme, ThemeSwitch, ThemeSwitchProps, ThemeSwitchVariant } from "./theme-switch/theme-switch.js";
51
+ import { TimePicker, TimePickerProps, timePickerItemVariants, timePickerListVariants } from "./time-picker/time-picker.js";
30
52
  import { ToastContent, ToastRegion, ToastRegionProps, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants } from "./toast/toast.js";
31
53
  import { Tooltip, TooltipProps, TooltipTrigger, TooltipTriggerProps, tooltipVariants } from "./tooltip/tooltip.js";
32
- export { Accordion, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, Alert, AlertDialog, type AlertDialogProps, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonProps, Calendar, type CalendarProps, CalendarRange, type CalendarRangeProps, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, type CheckboxProps, type Column, Dialog, DialogFooter, type DialogFooterProps, type DialogProps, DialogTrigger, Input, type InputProps, Label, type LabelProps, Menu, MenuItem, type MenuItemProps, type MenuProps, MenuSeparator, MenuTrigger, Popover, type PopoverProps, PopoverTrigger, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, type RowKey, ScrollArea, type ScrollAreaProps, Select, SelectItem, type SelectItemProps, type SelectProps, Separator, type SeparatorProps, Sheet, type SheetProps, Skeleton, type SkeletonProps, Slider, type SliderProps, Spinner, type SpinnerProps, Switch, type SwitchProps, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableProps, Tabs, type TabsProps, Textarea, type TextareaProps, type ToastContent, ToastRegion, type ToastRegionProps, Tooltip, type TooltipProps, TooltipTrigger, type TooltipTriggerProps, alertVariants, avatarVariants, badgeVariants, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants, buttonVariants, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants, checkboxBoxVariants, checkboxVariants, cn, cnAll, createColumns, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants, inputVariants, labelVariants, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants, popoverVariants, progressFillVariants, progressTrackVariants, progressVariants, radioGroupVariants, radioVariants, scrollAreaVariants, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants, separatorVariants, sheetOverlayVariants, sheetPanelVariants, skeletonVariants, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants, spinnerVariants, switchThumbVariants, switchTrackVariants, tabListVariants, tabPanelVariants, tabVariants, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants, tabsVariants, textareaVariants, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants, tooltipVariants };
54
+ export { Accordion, AccordionItem, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, AccordionTrigger, type AccordionTriggerProps, ActionButton, type ActionButtonProps, Alert, AlertDialog, type AlertDialogProps, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, BellIcon, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type BreadcrumbsProps, Button, ButtonGroup, type ButtonGroupItem, type ButtonGroupMenu, type ButtonGroupMenuItem, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonGroupSize, type ButtonGroupVariant, type ButtonProps, Calendar, type CalendarProps, CalendarRange, type CalendarRangeProps, Card, CardContent, type CardContentProps, CardDescription, type CardDescriptionProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, type CardProps, CardTitle, type CardTitleProps, Checkbox, type CheckboxProps, ChevronIcon, type ChevronIconProps, type Column, ConfirmMorph, type ConfirmMorphMode, type ConfirmMorphProps, type ConfirmMorphState, CopyButton, type CopyButtonProps, CopyCheckIcon, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerMessages, type DateRangePickerProps, type DateRangePickerValue, type DateRangePreset, Dialog, DialogFooter, type DialogFooterProps, type DialogProps, DialogTrigger, EmptyState, type EmptyStateProps, type EstimateStrengthOptions, ExpandingButtonGroup, type ExpandingButtonGroupItem, type ExpandingButtonGroupProps, type ExpandingButtonGroupSize, type ExpandingButtonGroupTone, FileDropZone, type FileDropZoneProps, FilterBar, type FilterBarCustomField, type FilterBarField, type FilterBarOption, type FilterBarProps, type FilterBarSelectField, FloatingButtonGroup, type FloatingButtonGroupAction, type FloatingButtonGroupItem, type FloatingButtonGroupOrientation, type FloatingButtonGroupProps, type FloatingButtonGroupSeparator, type FloatingButtonGroupSize, type FloatingButtonGroupVariant, HeartIcon, IconMorph, type IconMorphIconProps, type IconMorphName, type IconMorphProps, Input, type InputProps, Label, type LabelProps, Menu, MenuIcon, MenuItem, type MenuItemProps, type MenuProps, MenuSeparator, MenuTrigger, PageHeader, type PageHeaderProps, PasswordField, type PasswordFieldMessages, type PasswordFieldProps, type PasswordRule, type PasswordRuleLabels, type PasswordRuleOptions, PasswordStrength, type PasswordStrengthLevels, type PasswordStrengthMessages, type PasswordStrengthMessagesInput, type PasswordStrengthProps, type PasswordStrengthResult, PlayPauseIcon, PlusCheckIcon, Popover, type PopoverProps, PopoverTrigger, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, type RowKey, ScrollArea, type ScrollAreaProps, SearchField, type SearchFieldProps, Select, SelectItem, type SelectItemProps, type SelectProps, Separator, type SeparatorProps, Sheet, type SheetProps, SideNav, type SideNavGroup, type SideNavProps, type SideNavSection, Skeleton, type SkeletonProps, Slider, type SliderProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonAction, type SplitButtonProps, StatCard, type StatCardProps, type StatCardTone, SunMoonIcon, Switch, type SwitchProps, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, type TableProps, Tabs, type TabsProps, Textarea, type TextareaProps, type Theme, ThemeSwitch, type ThemeSwitchProps, type ThemeSwitchVariant, TimePicker, type TimePickerProps, type ToastContent, ToastRegion, type ToastRegionProps, Tooltip, type TooltipProps, TooltipTrigger, type TooltipTriggerProps, alertVariants, avatarVariants, badgeVariants, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants, buttonVariants, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants, checkboxBoxVariants, checkboxVariants, cn, cnAll, countCodePoints, createColumns, createPasswordRules, datePickerInputVariants, datePickerLabelVariants, datePickerSegmentVariants, datePickerTriggerVariants, datePickerVariants, defaultDateRangePresets, defaultPasswordFieldMessages, defaultPasswordRules, defaultPasswordStrengthMessages, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants, emptyStateActionVariants, emptyStateTextVariants, emptyStateVariants, estimateStrength, fileDropZoneHintVariants, fileDropZonePromptVariants, fileDropZoneVariants, filterBarChipVariants, filterBarRowVariants, filterBarVariants, inputVariants, labelVariants, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants, pageHeaderActionsVariants, pageHeaderBackVariants, pageHeaderDescriptionVariants, pageHeaderMetaVariants, pageHeaderRowVariants, pageHeaderTitleVariants, pageHeaderVariants, popoverVariants, progressFillVariants, progressTrackVariants, progressVariants, radioGroupVariants, radioVariants, scrollAreaVariants, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants, separatorVariants, sheetOverlayVariants, sheetPanelVariants, sideNavHeaderVariants, sideNavItemVariants, sideNavMenuVariants, sideNavVariants, skeletonVariants, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants, spinnerVariants, statCardLabelVariants, statCardSubVariants, statCardValueVariants, statCardVariants, switchThumbVariants, switchTrackVariants, tabListVariants, tabPanelVariants, tabVariants, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants, tabsVariants, textareaVariants, timePickerItemVariants, timePickerListVariants, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants, tooltipVariants };
package/dist/index.js CHANGED
@@ -1,32 +1,54 @@
1
1
  import { cn, cnAll } from "./lib/cn.js";
2
2
  import { Accordion, AccordionItem, AccordionPanel, AccordionTrigger } from "./accordion/accordion.js";
3
+ import { Button, buttonVariants } from "./button/button.js";
4
+ import { ActionButton } from "./action-button/action-button.js";
3
5
  import { Dialog, DialogFooter, DialogTrigger, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants } from "./dialog/dialog.js";
4
6
  import { AlertDialog } from "./alert-dialog/alert-dialog.js";
5
7
  import { Alert, alertVariants } from "./alert/alert.js";
6
8
  import { Avatar, avatarVariants } from "./avatar/avatar.js";
7
9
  import { Badge, badgeVariants } from "./badge/badge.js";
8
10
  import { BreadcrumbItem, Breadcrumbs, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants } from "./breadcrumb/breadcrumb.js";
9
- import { Button, buttonVariants } from "./button/button.js";
11
+ import { Menu, MenuItem, MenuSeparator, MenuTrigger, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants } from "./menu/menu.js";
12
+ import { ButtonGroup } from "./button-group/button-group.js";
10
13
  import { Calendar, CalendarRange, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants } from "./calendar/calendar.js";
11
14
  import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants } from "./card/card.js";
12
15
  import { Checkbox, checkboxBoxVariants, checkboxVariants } from "./checkbox/checkbox.js";
13
- import { Input, inputVariants } from "./input/input.js";
14
- import { Label, labelVariants } from "./label/label.js";
15
- import { Menu, MenuItem, MenuSeparator, MenuTrigger, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants } from "./menu/menu.js";
16
+ import { ConfirmMorph } from "./confirm-morph/confirm-morph.js";
17
+ import { CopyButton } from "./copy-button/copy-button.js";
16
18
  import { Popover, PopoverTrigger, popoverVariants } from "./popover/popover.js";
19
+ import { datePickerInputVariants, datePickerLabelVariants, datePickerSegmentVariants, datePickerTriggerVariants, datePickerVariants } from "./date-picker/picker-parts.js";
20
+ import { DateRangePicker, defaultDateRangePresets } from "./date-picker/date-range-picker.js";
21
+ import { DatePicker } from "./date-picker/date-picker.js";
22
+ import { EmptyState, emptyStateActionVariants, emptyStateTextVariants, emptyStateVariants } from "./empty-state/empty-state.js";
23
+ import { ExpandingButtonGroup } from "./expanding-button-group/expanding-button-group.js";
24
+ import { FileDropZone, fileDropZoneHintVariants, fileDropZonePromptVariants, fileDropZoneVariants } from "./file-drop-zone/file-drop-zone.js";
25
+ import { Label, labelVariants } from "./label/label.js";
26
+ import { Select, SelectItem, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants } from "./select/select.js";
27
+ import { FilterBar, filterBarChipVariants, filterBarRowVariants, filterBarVariants } from "./filter-bar/filter-bar.js";
28
+ import { Tooltip, TooltipTrigger, tooltipVariants } from "./tooltip/tooltip.js";
29
+ import { FloatingButtonGroup } from "./floating-button-group/floating-button-group.js";
30
+ import { BellIcon, ChevronIcon, CopyCheckIcon, HeartIcon, IconMorph, MenuIcon, PlayPauseIcon, PlusCheckIcon, SunMoonIcon } from "./icon-morph/icon-morph.js";
31
+ import { Input, inputVariants } from "./input/input.js";
32
+ import { PageHeader, pageHeaderActionsVariants, pageHeaderBackVariants, pageHeaderDescriptionVariants, pageHeaderMetaVariants, pageHeaderRowVariants, pageHeaderTitleVariants, pageHeaderVariants } from "./page-header/page-header.js";
33
+ import { PasswordField, defaultPasswordFieldMessages } from "./password-field/password-field.js";
34
+ import { PasswordStrength, countCodePoints, createPasswordRules, defaultPasswordRules, defaultPasswordStrengthMessages, estimateStrength } from "./password-strength/password-strength.js";
17
35
  import { Progress, progressFillVariants, progressTrackVariants, progressVariants } from "./progress/progress.js";
18
36
  import { Radio, RadioGroup, radioGroupVariants, radioVariants } from "./radio-group/radio-group.js";
19
37
  import { ScrollArea, scrollAreaVariants } from "./scroll-area/scroll-area.js";
20
- import { Select, SelectItem, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants } from "./select/select.js";
38
+ import { SearchField } from "./search-field/search-field.js";
21
39
  import { Separator, separatorVariants } from "./separator/separator.js";
22
40
  import { Sheet, sheetOverlayVariants, sheetPanelVariants } from "./sheet/sheet.js";
41
+ import { SideNav, sideNavHeaderVariants, sideNavItemVariants, sideNavMenuVariants, sideNavVariants } from "./side-nav/side-nav.js";
23
42
  import { Skeleton, skeletonVariants } from "./skeleton/skeleton.js";
24
43
  import { Slider, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants } from "./slider/slider.js";
25
44
  import { Spinner, spinnerVariants } from "./spinner/spinner.js";
45
+ import { SplitButton } from "./split-button/split-button.js";
46
+ import { StatCard, statCardLabelVariants, statCardSubVariants, statCardValueVariants, statCardVariants } from "./stat-card/stat-card.js";
26
47
  import { Switch, switchThumbVariants, switchTrackVariants } from "./switch/switch.js";
27
48
  import { Table, createColumns, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants } from "./table/table.js";
28
49
  import { Tab, TabList, TabPanel, Tabs, tabListVariants, tabPanelVariants, tabVariants, tabsVariants } from "./tabs/tabs.js";
29
50
  import { Textarea, textareaVariants } from "./textarea/textarea.js";
51
+ import { ThemeSwitch } from "./theme-switch/theme-switch.js";
52
+ import { TimePicker, timePickerItemVariants, timePickerListVariants } from "./time-picker/time-picker.js";
30
53
  import { ToastRegion, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants } from "./toast/toast.js";
31
- import { Tooltip, TooltipTrigger, tooltipVariants } from "./tooltip/tooltip.js";
32
- export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, Alert, AlertDialog, Avatar, Badge, BreadcrumbItem, Breadcrumbs, Button, Calendar, CalendarRange, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Dialog, DialogFooter, DialogTrigger, Input, Label, Menu, MenuItem, MenuSeparator, MenuTrigger, Popover, PopoverTrigger, Progress, Radio, RadioGroup, ScrollArea, Select, SelectItem, Separator, Sheet, Skeleton, Slider, Spinner, Switch, Tab, TabList, TabPanel, Table, Tabs, Textarea, ToastRegion, Tooltip, TooltipTrigger, alertVariants, avatarVariants, badgeVariants, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants, buttonVariants, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants, checkboxBoxVariants, checkboxVariants, cn, cnAll, createColumns, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants, inputVariants, labelVariants, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants, popoverVariants, progressFillVariants, progressTrackVariants, progressVariants, radioGroupVariants, radioVariants, scrollAreaVariants, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants, separatorVariants, sheetOverlayVariants, sheetPanelVariants, skeletonVariants, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants, spinnerVariants, switchThumbVariants, switchTrackVariants, tabListVariants, tabPanelVariants, tabVariants, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants, tabsVariants, textareaVariants, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants, tooltipVariants };
54
+ export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, ActionButton, Alert, AlertDialog, Avatar, Badge, BellIcon, BreadcrumbItem, Breadcrumbs, Button, ButtonGroup, Calendar, CalendarRange, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ChevronIcon, ConfirmMorph, CopyButton, CopyCheckIcon, DatePicker, DateRangePicker, Dialog, DialogFooter, DialogTrigger, EmptyState, ExpandingButtonGroup, FileDropZone, FilterBar, FloatingButtonGroup, HeartIcon, IconMorph, Input, Label, Menu, MenuIcon, MenuItem, MenuSeparator, MenuTrigger, PageHeader, PasswordField, PasswordStrength, PlayPauseIcon, PlusCheckIcon, Popover, PopoverTrigger, Progress, Radio, RadioGroup, ScrollArea, SearchField, Select, SelectItem, Separator, Sheet, SideNav, Skeleton, Slider, Spinner, SplitButton, StatCard, SunMoonIcon, Switch, Tab, TabList, TabPanel, Table, Tabs, Textarea, ThemeSwitch, TimePicker, ToastRegion, Tooltip, TooltipTrigger, alertVariants, avatarVariants, badgeVariants, breadcrumbItemVariants, breadcrumbLinkVariants, breadcrumbsVariants, buttonVariants, calendarCellVariants, calendarClearVariants, calendarGridVariants, calendarHeaderCellVariants, calendarHeaderVariants, calendarHeadingVariants, calendarLabelVariants, calendarMonthsVariants, calendarNavVariants, calendarVariants, cardContentVariants, cardDescriptionVariants, cardFooterVariants, cardHeaderVariants, cardTitleVariants, cardVariants, checkboxBoxVariants, checkboxVariants, cn, cnAll, countCodePoints, createColumns, createPasswordRules, datePickerInputVariants, datePickerLabelVariants, datePickerSegmentVariants, datePickerTriggerVariants, datePickerVariants, defaultDateRangePresets, defaultPasswordFieldMessages, defaultPasswordRules, defaultPasswordStrengthMessages, dialogDescriptionVariants, dialogFooterVariants, dialogOverlayVariants, dialogPanelVariants, dialogTitleVariants, emptyStateActionVariants, emptyStateTextVariants, emptyStateVariants, estimateStrength, fileDropZoneHintVariants, fileDropZonePromptVariants, fileDropZoneVariants, filterBarChipVariants, filterBarRowVariants, filterBarVariants, inputVariants, labelVariants, menuItemVariants, menuPopoverVariants, menuSeparatorVariants, menuVariants, pageHeaderActionsVariants, pageHeaderBackVariants, pageHeaderDescriptionVariants, pageHeaderMetaVariants, pageHeaderRowVariants, pageHeaderTitleVariants, pageHeaderVariants, popoverVariants, progressFillVariants, progressTrackVariants, progressVariants, radioGroupVariants, radioVariants, scrollAreaVariants, selectItemVariants, selectPopoverVariants, selectTriggerVariants, selectVariants, separatorVariants, sheetOverlayVariants, sheetPanelVariants, sideNavHeaderVariants, sideNavItemVariants, sideNavMenuVariants, sideNavVariants, skeletonVariants, sliderBarVariants, sliderFillVariants, sliderThumbVariants, sliderTrackVariants, sliderVariants, spinnerVariants, statCardLabelVariants, statCardSubVariants, statCardValueVariants, statCardVariants, switchThumbVariants, switchTrackVariants, tabListVariants, tabPanelVariants, tabVariants, tableCardVariants, tableCellVariants, tableColumnVariants, tableFooterVariants, tableHeaderVariants, tablePaginationVariants, tableRowVariants, tableScrollVariants, tableVariants, tabsVariants, textareaVariants, timePickerItemVariants, timePickerListVariants, toast, toastCloseVariants, toastQueue, toastRegionVariants, toastVariants, tooltipVariants };
@@ -1,5 +1,5 @@
1
- import { InputProps } from "react-aria-components";
2
1
  import { ReactNode } from "react";
2
+ import { InputProps } from "react-aria-components";
3
3
  //#region src/input/input.d.ts
4
4
  /**
5
5
  * Input, ported from the legacy shadcn component onto React Aria's Input.
@@ -73,6 +73,28 @@ interface InputProps$1 extends Omit<InputProps, "className" | "style" | "size">
73
73
  startIcon?: ReactNode;
74
74
  /** Decorative glyph at the trailing edge. Same rules as {@link InputProps.startIcon}. */
75
75
  endIcon?: ReactNode;
76
+ /**
77
+ * A visible label above the field, tied to it with `htmlFor`. Passing any of
78
+ * `label`, `description` or `error` (even as `undefined`) wraps the field;
79
+ * with none of them the DOM is exactly the bare input. Do not also pass
80
+ * `aria-label`: it wins over the label, so the visible name is not the
81
+ * accessible one (WCAG 2.5.3). Ignored inside a React Aria `TextField`,
82
+ * which supplies its own label and messages.
83
+ */
84
+ label?: ReactNode;
85
+ /**
86
+ * Helper text under the field, named by `aria-describedby`. It opens on a
87
+ * spring when it appears after mount, changed words rise in and numbers roll
88
+ * digit by digit; nothing animates on first render, and reduced motion swaps
89
+ * it instantly. A string, because the copy is animated word by word.
90
+ */
91
+ description?: string;
92
+ /**
93
+ * Error text under the field. Sets `aria-invalid`, so the field takes its
94
+ * invalid border, and is announced as an alert when it appears. Opens and
95
+ * closes like `description`. An empty or `undefined` value closes the row.
96
+ */
97
+ error?: string;
76
98
  }
77
99
  declare const Input$1: import("react").ForwardRefExoticComponent<InputProps$1 & import("react").RefAttributes<HTMLInputElement>>;
78
100
  //#endregion