@lerianstudio/sindarian-ui 2.0.0-beta.25 → 2.0.0-beta.26

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 (305) hide show
  1. package/dist/charts/chart.js +4 -231
  2. package/dist/charts/index.js +1 -11
  3. package/dist/components/breadcrumb/get-breadcrumb-paths.js +1 -18
  4. package/dist/components/breadcrumb/index.js +1 -37
  5. package/dist/components/card/account-card/index.js +1 -69
  6. package/dist/components/card/basic-card/index.js +1 -20
  7. package/dist/components/card/dashboard-card/index.js +1 -20
  8. package/dist/components/card/entity-card/index.js +1 -68
  9. package/dist/components/card/index.js +1 -20
  10. package/dist/components/dialog/confirmation-dialog/index.js +1 -96
  11. package/dist/components/dialog/confirmation-dialog/use-confirm-dialog.js +1 -55
  12. package/dist/components/dialog/index.js +1 -19
  13. package/dist/components/dialog/large-dialog/index.js +1 -21
  14. package/dist/components/entity-box/index.js +1 -67
  15. package/dist/components/entity-data-table/index.js +1 -20
  16. package/dist/components/form/combo-box-field/index.js +1 -35
  17. package/dist/components/form/country-field/index.js +1 -11
  18. package/dist/components/form/date-picker-field/index.js +1 -83
  19. package/dist/components/form/date-range-field/index.js +1 -58
  20. package/dist/components/form/date-time-picker-field/index.js +1 -114
  21. package/dist/components/form/file-upload-field/index.js +1 -69
  22. package/dist/components/form/index.js +1 -31
  23. package/dist/components/form/input-field/index.js +1 -96
  24. package/dist/components/form/otp-field/index.js +1 -19
  25. package/dist/components/form/pagination-limit-field/index.js +1 -10
  26. package/dist/components/form/password-field/index.js +1 -16
  27. package/dist/components/form/radio-group-field/index.js +1 -36
  28. package/dist/components/form/renderable-label.js +1 -57
  29. package/dist/components/form/select-field/index.js +1 -68
  30. package/dist/components/form/state-field/index.js +1 -42
  31. package/dist/components/form/switch-field/index.js +1 -16
  32. package/dist/components/form/textarea-field/index.js +1 -23
  33. package/dist/components/page/index.js +1 -20
  34. package/dist/components/page-header/index.js +1 -80
  35. package/dist/components/pagination/index.js +1 -10
  36. package/dist/components/table/id-table-cell.js +1 -109
  37. package/dist/components/table/index.js +1 -19
  38. package/dist/components/table/locked-table-actions.js +1 -41
  39. package/dist/components/table/name-table-cell.js +1 -58
  40. package/dist/components/ui/accordion/index.js +1 -62
  41. package/dist/components/ui/alert/index.js +1 -45
  42. package/dist/components/ui/alert-dialog/index.js +1 -84
  43. package/dist/components/ui/autocomplete/index.js +1 -440
  44. package/dist/components/ui/autosize-textarea/index.js +1 -89
  45. package/dist/components/ui/avatar/index.js +1 -51
  46. package/dist/components/ui/badge/index.js +1 -83
  47. package/dist/components/ui/breadcrumb/index.js +1 -35
  48. package/dist/components/ui/button/index.js +1 -65
  49. package/dist/components/ui/calendar/index.js +1 -118
  50. package/dist/components/ui/card/index.js +1 -32
  51. package/dist/components/ui/checkbox/index.js +1 -44
  52. package/dist/components/ui/collapsible/index.js +1 -50
  53. package/dist/components/ui/command/index.js +1 -95
  54. package/dist/components/ui/copy-field/index.js +1 -163
  55. package/dist/components/ui/dialog/index.js +1 -80
  56. package/dist/components/ui/dropdown-menu/index.js +1 -110
  57. package/dist/components/ui/field/index.js +1 -82
  58. package/dist/components/ui/file-upload/index.js +1 -574
  59. package/dist/components/ui/form.js +1 -162
  60. package/dist/components/ui/hover-card/index.js +1 -51
  61. package/dist/components/ui/icon-button/index.js +1 -35
  62. package/dist/components/ui/input/adornment.js +1 -21
  63. package/dist/components/ui/input/index.js +1 -99
  64. package/dist/components/ui/label/index.js +1 -45
  65. package/dist/components/ui/lerian-wordmark/index.js +1 -7
  66. package/dist/components/ui/loading-button/index.js +1 -9
  67. package/dist/components/ui/multiple-select/index.js +1 -235
  68. package/dist/components/ui/otp-input/index.js +1 -62
  69. package/dist/components/ui/paper/index.js +1 -8
  70. package/dist/components/ui/paper-collapsible/index.js +1 -24
  71. package/dist/components/ui/popover/index.js +1 -55
  72. package/dist/components/ui/progress/index.js +1 -66
  73. package/dist/components/ui/qr-code/index.js +1 -27
  74. package/dist/components/ui/radio-group/index.js +1 -48
  75. package/dist/components/ui/scroll-area/index.js +1 -49
  76. package/dist/components/ui/select/index.js +1 -119
  77. package/dist/components/ui/separator/index.js +1 -43
  78. package/dist/components/ui/sheet/index.js +1 -136
  79. package/dist/components/ui/sidebar/index.js +1 -27
  80. package/dist/components/ui/sidebar/next-router.cjs +1 -119
  81. package/dist/components/ui/sidebar/sidebar-back-button.js +1 -8
  82. package/dist/components/ui/sidebar/sidebar-components.js +1 -23
  83. package/dist/components/ui/sidebar/sidebar-expand-button.js +1 -49
  84. package/dist/components/ui/sidebar/sidebar-item-button.js +1 -21
  85. package/dist/components/ui/sidebar/sidebar-item-collapsible.js +1 -52
  86. package/dist/components/ui/sidebar/sidebar-item-icon-button.js +1 -18
  87. package/dist/components/ui/sidebar/sidebar-item.js +1 -44
  88. package/dist/components/ui/sidebar/sidebar-provider.js +1 -201
  89. package/dist/components/ui/sidebar/sidebar-root.js +1 -130
  90. package/dist/components/ui/sidebar/sidebar-router.js +1 -126
  91. package/dist/components/ui/sidebar/sidebar-trigger.js +1 -57
  92. package/dist/components/ui/skeleton/index.js +1 -8
  93. package/dist/components/ui/stepper/index.js +1 -29
  94. package/dist/components/ui/switch/index.js +1 -43
  95. package/dist/components/ui/table/index.js +1 -56
  96. package/dist/components/ui/tabs/index.js +1 -55
  97. package/dist/components/ui/textarea/index.js +1 -8
  98. package/dist/components/ui/time-picker/index.js +1 -85
  99. package/dist/components/ui/toast/index.js +1 -3
  100. package/dist/components/ui/toast/toaster.js +1 -16
  101. package/dist/components/ui/toggle-group/index.js +1 -156
  102. package/dist/components/ui/tooltip/index.js +1 -81
  103. package/dist/domain/blotter/index.js +1 -20
  104. package/dist/domain/delinquency-aging/aging-buckets.js +1 -120
  105. package/dist/domain/delinquency-aging/index.js +1 -222
  106. package/dist/domain/figure/index.js +1 -19
  107. package/dist/domain/format.js +1 -137
  108. package/dist/domain/index.js +1 -43
  109. package/dist/domain/key-id/index.js +1 -174
  110. package/dist/domain/ledger-sheet/index.js +1 -28
  111. package/dist/domain/money-diff.js +1 -48
  112. package/dist/domain/money-math.js +1 -104
  113. package/dist/domain/money-text/index.js +1 -123
  114. package/dist/domain/section-label/index.js +1 -17
  115. package/dist/domain/status-rail/index.js +1 -76
  116. package/dist/domain/threshold-gauge/index.js +1 -161
  117. package/dist/enterprise/alert-banner/index.js +1 -24
  118. package/dist/enterprise/app-shell/index.js +1 -87
  119. package/dist/enterprise/cursor-pager/index.js +1 -26
  120. package/dist/enterprise/data-table/column-size.js +1 -103
  121. package/dist/enterprise/data-table/index.js +1 -345
  122. package/dist/enterprise/date-range-picker/index.js +1 -115
  123. package/dist/enterprise/detail-panel/index.js +1 -20
  124. package/dist/enterprise/empty-state/index.js +1 -14
  125. package/dist/enterprise/index.js +1 -39
  126. package/dist/enterprise/number-input/index.js +1 -252
  127. package/dist/enterprise/search-input/index.js +1 -121
  128. package/dist/enterprise/stat-card/index.js +1 -75
  129. package/dist/enterprise/status-badge/index.js +1 -120
  130. package/dist/enterprise/use-is-mobile.js +1 -68
  131. package/dist/enterprise/virtualized-table/index.js +1 -141
  132. package/dist/esm/charts/chart.js +4 -190
  133. package/dist/esm/charts/index.js +1 -3
  134. package/dist/esm/components/breadcrumb/get-breadcrumb-paths.js +1 -12
  135. package/dist/esm/components/breadcrumb/index.js +1 -30
  136. package/dist/esm/components/card/account-card/index.js +1 -53
  137. package/dist/esm/components/card/basic-card/index.js +1 -14
  138. package/dist/esm/components/card/dashboard-card/index.js +1 -14
  139. package/dist/esm/components/card/entity-card/index.js +1 -52
  140. package/dist/esm/components/card/index.js +1 -4
  141. package/dist/esm/components/dialog/confirmation-dialog/index.js +1 -60
  142. package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.js +1 -49
  143. package/dist/esm/components/dialog/index.js +1 -3
  144. package/dist/esm/components/dialog/large-dialog/index.js +1 -16
  145. package/dist/esm/components/entity-box/index.js +1 -56
  146. package/dist/esm/components/entity-data-table/index.js +1 -17
  147. package/dist/esm/components/form/combo-box-field/index.js +1 -28
  148. package/dist/esm/components/form/country-field/index.js +1 -7
  149. package/dist/esm/components/form/date-picker-field/index.js +1 -43
  150. package/dist/esm/components/form/date-range-field/index.js +1 -18
  151. package/dist/esm/components/form/date-time-picker-field/index.js +1 -74
  152. package/dist/esm/components/form/file-upload-field/index.js +1 -65
  153. package/dist/esm/components/form/index.js +1 -15
  154. package/dist/esm/components/form/input-field/index.js +1 -92
  155. package/dist/esm/components/form/otp-field/index.js +1 -15
  156. package/dist/esm/components/form/pagination-limit-field/index.js +1 -6
  157. package/dist/esm/components/form/password-field/index.js +1 -10
  158. package/dist/esm/components/form/radio-group-field/index.js +1 -32
  159. package/dist/esm/components/form/renderable-label.js +1 -54
  160. package/dist/esm/components/form/select-field/index.js +1 -64
  161. package/dist/esm/components/form/state-field/index.js +1 -35
  162. package/dist/esm/components/form/switch-field/index.js +1 -12
  163. package/dist/esm/components/form/textarea-field/index.js +1 -19
  164. package/dist/esm/components/page/index.js +1 -15
  165. package/dist/esm/components/page-header/index.js +1 -71
  166. package/dist/esm/components/pagination/index.js +1 -6
  167. package/dist/esm/components/table/id-table-cell.js +1 -105
  168. package/dist/esm/components/table/index.js +1 -3
  169. package/dist/esm/components/table/locked-table-actions.js +1 -37
  170. package/dist/esm/components/table/name-table-cell.js +1 -54
  171. package/dist/esm/components/ui/accordion/index.js +1 -24
  172. package/dist/esm/components/ui/alert/index.js +1 -38
  173. package/dist/esm/components/ui/alert-dialog/index.js +1 -39
  174. package/dist/esm/components/ui/autocomplete/index.js +1 -392
  175. package/dist/esm/components/ui/autosize-textarea/index.js +1 -51
  176. package/dist/esm/components/ui/avatar/index.js +1 -14
  177. package/dist/esm/components/ui/badge/index.js +1 -79
  178. package/dist/esm/components/ui/breadcrumb/index.js +1 -27
  179. package/dist/esm/components/ui/button/index.js +1 -60
  180. package/dist/esm/components/ui/calendar/index.js +1 -82
  181. package/dist/esm/components/ui/card/index.js +1 -24
  182. package/dist/esm/components/ui/checkbox/index.js +1 -9
  183. package/dist/esm/components/ui/collapsible/index.js +1 -13
  184. package/dist/esm/components/ui/command/index.js +1 -51
  185. package/dist/esm/components/ui/copy-field/index.js +1 -127
  186. package/dist/esm/components/ui/dialog/index.js +1 -36
  187. package/dist/esm/components/ui/dropdown-menu/index.js +1 -60
  188. package/dist/esm/components/ui/field/index.js +1 -71
  189. package/dist/esm/components/ui/file-upload/index.js +1 -536
  190. package/dist/esm/components/ui/form.js +1 -118
  191. package/dist/esm/components/ui/hover-card/index.js +1 -14
  192. package/dist/esm/components/ui/icon-button/index.js +1 -31
  193. package/dist/esm/components/ui/input/adornment.js +1 -17
  194. package/dist/esm/components/ui/input/index.js +1 -60
  195. package/dist/esm/components/ui/label/index.js +1 -10
  196. package/dist/esm/components/ui/lerian-wordmark/index.js +1 -4
  197. package/dist/esm/components/ui/loading-button/index.js +1 -7
  198. package/dist/esm/components/ui/multiple-select/index.js +1 -196
  199. package/dist/esm/components/ui/otp-input/index.js +1 -21
  200. package/dist/esm/components/ui/paper/index.js +1 -5
  201. package/dist/esm/components/ui/paper-collapsible/index.js +1 -19
  202. package/dist/esm/components/ui/popover/index.js +1 -17
  203. package/dist/esm/components/ui/progress/index.js +1 -31
  204. package/dist/esm/components/ui/qr-code/index.js +1 -24
  205. package/dist/esm/components/ui/radio-group/index.js +1 -12
  206. package/dist/esm/components/ui/scroll-area/index.js +1 -13
  207. package/dist/esm/components/ui/select/index.js +1 -74
  208. package/dist/esm/components/ui/separator/index.js +1 -8
  209. package/dist/esm/components/ui/sheet/index.js +1 -92
  210. package/dist/esm/components/ui/sidebar/index.js +1 -11
  211. package/dist/esm/components/ui/sidebar/next-router.cjs +1 -119
  212. package/dist/esm/components/ui/sidebar/sidebar-back-button.js +1 -5
  213. package/dist/esm/components/ui/sidebar/sidebar-components.js +1 -15
  214. package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +1 -42
  215. package/dist/esm/components/ui/sidebar/sidebar-item-button.js +1 -18
  216. package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.js +1 -44
  217. package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.js +1 -14
  218. package/dist/esm/components/ui/sidebar/sidebar-item.js +1 -40
  219. package/dist/esm/components/ui/sidebar/sidebar-provider.js +1 -193
  220. package/dist/esm/components/ui/sidebar/sidebar-root.js +1 -126
  221. package/dist/esm/components/ui/sidebar/sidebar-router.js +1 -89
  222. package/dist/esm/components/ui/sidebar/sidebar-trigger.js +1 -53
  223. package/dist/esm/components/ui/skeleton/index.js +1 -6
  224. package/dist/esm/components/ui/stepper/index.js +1 -20
  225. package/dist/esm/components/ui/switch/index.js +1 -8
  226. package/dist/esm/components/ui/table/index.js +1 -44
  227. package/dist/esm/components/ui/tabs/index.js +1 -17
  228. package/dist/esm/components/ui/textarea/index.js +1 -6
  229. package/dist/esm/components/ui/time-picker/index.js +1 -49
  230. package/dist/esm/components/ui/toast/index.js +1 -2
  231. package/dist/esm/components/ui/toast/toaster.js +1 -13
  232. package/dist/esm/components/ui/toggle-group/index.js +1 -120
  233. package/dist/esm/components/ui/tooltip/index.js +1 -43
  234. package/dist/esm/domain/blotter/index.js +1 -16
  235. package/dist/esm/domain/delinquency-aging/aging-buckets.js +1 -115
  236. package/dist/esm/domain/delinquency-aging/index.js +1 -218
  237. package/dist/esm/domain/figure/index.js +1 -15
  238. package/dist/esm/domain/format.js +1 -128
  239. package/dist/esm/domain/index.js +1 -19
  240. package/dist/esm/domain/key-id/index.js +1 -169
  241. package/dist/esm/domain/ledger-sheet/index.js +1 -24
  242. package/dist/esm/domain/money-diff.js +1 -45
  243. package/dist/esm/domain/money-math.js +1 -98
  244. package/dist/esm/domain/money-text/index.js +1 -118
  245. package/dist/esm/domain/section-label/index.js +1 -14
  246. package/dist/esm/domain/status-rail/index.js +1 -71
  247. package/dist/esm/domain/threshold-gauge/index.js +1 -157
  248. package/dist/esm/enterprise/alert-banner/index.js +1 -21
  249. package/dist/esm/enterprise/app-shell/index.js +1 -51
  250. package/dist/esm/enterprise/cursor-pager/index.js +1 -23
  251. package/dist/esm/enterprise/data-table/column-size.js +1 -97
  252. package/dist/esm/enterprise/data-table/index.js +1 -342
  253. package/dist/esm/enterprise/date-range-picker/index.js +1 -112
  254. package/dist/esm/enterprise/detail-panel/index.js +1 -17
  255. package/dist/esm/enterprise/empty-state/index.js +1 -11
  256. package/dist/esm/enterprise/index.js +1 -22
  257. package/dist/esm/enterprise/number-input/index.js +1 -214
  258. package/dist/esm/enterprise/search-input/index.js +1 -85
  259. package/dist/esm/enterprise/stat-card/index.js +1 -72
  260. package/dist/esm/enterprise/status-badge/index.js +1 -116
  261. package/dist/esm/enterprise/use-is-mobile.js +1 -31
  262. package/dist/esm/enterprise/virtualized-table/index.js +1 -138
  263. package/dist/esm/hooks/use-click-away.js +1 -22
  264. package/dist/esm/hooks/use-pagination.js +1 -38
  265. package/dist/esm/hooks/use-stepper.js +1 -22
  266. package/dist/esm/hooks/use-time.js +1 -13
  267. package/dist/esm/hooks/use-toast.js +1 -107
  268. package/dist/esm/index.js +1 -77
  269. package/dist/esm/lib/storage/get-storage-object.js +1 -17
  270. package/dist/esm/lib/storage/get-storage.js +1 -14
  271. package/dist/esm/lib/storage/index.js +1 -2
  272. package/dist/esm/lib/typography.js +1 -31
  273. package/dist/esm/lib/utils.js +1 -41
  274. package/dist/esm/theme/get-theme-script.js +1 -41
  275. package/dist/esm/theme/index.js +1 -4
  276. package/dist/esm/theme/mode-toggle.js +1 -45
  277. package/dist/esm/theme/theme-provider.js +1 -122
  278. package/dist/esm/toast/helpers.js +1 -36
  279. package/dist/esm/toast/index.js +1 -4
  280. package/dist/esm/types/metadata-type.js +1 -1
  281. package/dist/esm/utils/countries.cjs +1 -17
  282. package/dist/esm/utils/country-utils.js +1 -18
  283. package/dist/esm/utils/currency-codes.js +1 -181
  284. package/dist/hooks/use-click-away.js +1 -29
  285. package/dist/hooks/use-pagination.js +1 -41
  286. package/dist/hooks/use-stepper.js +1 -26
  287. package/dist/hooks/use-time.js +1 -20
  288. package/dist/hooks/use-toast.js +1 -111
  289. package/dist/index.js +1 -96
  290. package/dist/lib/storage/get-storage-object.js +1 -23
  291. package/dist/lib/storage/get-storage.js +1 -17
  292. package/dist/lib/storage/index.js +1 -18
  293. package/dist/lib/typography.js +1 -34
  294. package/dist/lib/utils.js +1 -45
  295. package/dist/theme/get-theme-script.js +1 -44
  296. package/dist/theme/index.js +1 -11
  297. package/dist/theme/mode-toggle.js +1 -48
  298. package/dist/theme/theme-provider.js +1 -160
  299. package/dist/toast/helpers.js +1 -41
  300. package/dist/toast/index.js +1 -10
  301. package/dist/types/metadata-type.js +1 -2
  302. package/dist/utils/countries.cjs +1 -17
  303. package/dist/utils/country-utils.js +1 -25
  304. package/dist/utils/currency-codes.js +1 -184
  305. package/package.json +4 -3
@@ -1,111 +1 @@
1
- 'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.DEFAULT_DURATION = void 0;
5
- exports.useToast = useToast;
6
- exports.toast = toast;
7
- const sonner_1 = require("sonner");
8
- /**
9
- * Lifetime of every non-destructive toast, and the `<Toaster />` fallback for
10
- * anything raised without one. The two must not drift apart, so the Toaster
11
- * imports this rather than repeating the literal.
12
- */
13
- exports.DEFAULT_DURATION = 10000;
14
- /**
15
- * A destructive toast reports something the operator has to read -- a refused
16
- * money operation, a failed copy of a show-once secret, a language switch that
17
- * did not take. It stays up until dismissed instead of auto-closing.
18
- *
19
- * `Infinity` is how sonner disables the auto-close timer (it short-circuits the
20
- * timer effect rather than calling `setTimeout(fn, Infinity)`, which would fire
21
- * immediately). `<Toaster />` already passes `closeButton`, and sonner gates the
22
- * close button on that flag alone, never on the duration -- so a persistent
23
- * toast still renders its dismiss affordance.
24
- */
25
- const PERSIST_UNTIL_DISMISSED = Infinity;
26
- const isPlainText = (value) => value === undefined || typeof value === 'string';
27
- /**
28
- * Two identical errors share one toast instead of stacking: same variant, same
29
- * text -- same id, and sonner updates the one already on screen.
30
- *
31
- * Unbounded stacking is worse for a persistent toast than for a transient one.
32
- * `<Toaster />` shows three at a time and renders the rest `opacity: 0;
33
- * pointer-events: none`, so a fourth error nobody can read is also a fourth
34
- * error nobody can close -- and without an auto-dismiss, nothing ahead of it
35
- * clears on its own.
36
- *
37
- * Only plain-text toasts collapse. A `ReactNode` has no stable key and
38
- * `String(node)` would fold unrelated errors onto one id.
39
- *
40
- * ponytail: the ceiling is still three. Distinct persistent errors past the
41
- * third queue behind the front three until one is dismissed; lifting that means
42
- * raising `visibleToasts`, not more work here.
43
- */
44
- function collapseKey(title, description) {
45
- if (!isPlainText(title) || !isPlainText(description)) {
46
- return undefined;
47
- }
48
- return `destructive:${JSON.stringify([title ?? null, description ?? null])}`;
49
- }
50
- function toast({ title, description, variant, duration, id, ...rest }) {
51
- const message = title ?? '';
52
- const toastId = variant === 'destructive' && id === undefined
53
- ? collapseKey(title, description)
54
- : id;
55
- const options = {
56
- description,
57
- ...rest,
58
- ...(toastId !== undefined && { id: toastId }),
59
- duration: duration ??
60
- (variant === 'destructive' ? PERSIST_UNTIL_DISMISSED : exports.DEFAULT_DURATION)
61
- };
62
- let raisedId;
63
- switch (variant) {
64
- case 'success':
65
- raisedId = sonner_1.toast.success(message, options);
66
- break;
67
- case 'warning':
68
- raisedId = sonner_1.toast.warning(message, options);
69
- break;
70
- case 'destructive':
71
- raisedId = sonner_1.toast.error(message, options);
72
- break;
73
- default:
74
- raisedId = (0, sonner_1.toast)(message, options);
75
- break;
76
- }
77
- return {
78
- id: raisedId,
79
- dismiss: () => sonner_1.toast.dismiss(raisedId),
80
- update: (props) => {
81
- (0, sonner_1.toast)(props.title ?? message, {
82
- ...rest,
83
- id: raisedId,
84
- description: props.description ?? description,
85
- duration: props.duration ?? options.duration
86
- });
87
- }
88
- };
89
- }
90
- /**
91
- * Backward-compatible hook that wraps Sonner's toast API.
92
- *
93
- * Returns the same shape as the original Radix-based useToast:
94
- * - `toast()` to create a toast
95
- * - `dismiss()` to dismiss a toast by id (or all if no id)
96
- * - `toasts` array (always empty -- Sonner manages its own state internally)
97
- */
98
- function useToast() {
99
- return {
100
- toast,
101
- dismiss: (toastId) => {
102
- if (toastId !== undefined) {
103
- sonner_1.toast.dismiss(toastId);
104
- }
105
- else {
106
- sonner_1.toast.dismiss();
107
- }
108
- },
109
- toasts: []
110
- };
111
- }
1
+ "use client";"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_DURATION=void 0;exports.useToast=useToast;exports.toast=toast;const sonner_1=require("sonner");exports.DEFAULT_DURATION=1e4;const PERSIST_UNTIL_DISMISSED=Infinity;const isPlainText=s=>s===void 0||typeof s==="string";function collapseKey(s,e){if(!isPlainText(s)||!isPlainText(e)){return void 0}return`destructive:${JSON.stringify([s??null,e??null])}`}function toast({title:s,description:e,variant:o,duration:c,id:u,...d}){const n=s??"";const a=o==="destructive"&&u===void 0?collapseKey(s,e):u;const i={description:e,...d,...a!==void 0&&{id:a},duration:c??(o==="destructive"?PERSIST_UNTIL_DISMISSED:exports.DEFAULT_DURATION)};let t;switch(o){case"success":t=sonner_1.toast.success(n,i);break;case"warning":t=sonner_1.toast.warning(n,i);break;case"destructive":t=sonner_1.toast.error(n,i);break;default:t=(0,sonner_1.toast)(n,i);break}return{id:t,dismiss:()=>sonner_1.toast.dismiss(t),update:r=>{(0,sonner_1.toast)(r.title??n,{...d,id:t,description:r.description??e,duration:r.duration??i.duration})}}}function useToast(){return{toast,dismiss:s=>{if(s!==void 0){sonner_1.toast.dismiss(s)}else{sonner_1.toast.dismiss()}},toasts:[]}}
package/dist/index.js CHANGED
@@ -1,96 +1 @@
1
- 'use client';
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
- };
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.cn = exports.ApplicationBreadcrumb = void 0;
19
- // Primitives
20
- __exportStar(require("./components/ui/alert"), exports);
21
- __exportStar(require("./components/ui/autocomplete"), exports);
22
- __exportStar(require("./hooks/use-click-away"), exports);
23
- __exportStar(require("./components/ui/autosize-textarea"), exports);
24
- __exportStar(require("./components/ui/avatar"), exports);
25
- __exportStar(require("./components/ui/badge"), exports);
26
- __exportStar(require("./components/ui/breadcrumb"), exports);
27
- __exportStar(require("./components/ui/button"), exports);
28
- __exportStar(require("./components/ui/icon-button"), exports);
29
- __exportStar(require("./components/ui/calendar"), exports);
30
- __exportStar(require("./components/ui/card"), exports);
31
- __exportStar(require("./components/ui/checkbox"), exports);
32
- __exportStar(require("./components/ui/collapsible"), exports);
33
- __exportStar(require("./components/ui/command"), exports);
34
- __exportStar(require("./components/ui/copy-field"), exports);
35
- __exportStar(require("./components/ui/dialog"), exports);
36
- __exportStar(require("./components/ui/dropdown-menu"), exports);
37
- __exportStar(require("./components/ui/input"), exports);
38
- __exportStar(require("./components/ui/otp-input"), exports);
39
- __exportStar(require("./components/ui/label"), exports);
40
- __exportStar(require("./components/ui/lerian-wordmark"), exports);
41
- __exportStar(require("./components/ui/loading-button"), exports);
42
- __exportStar(require("./components/ui/multiple-select"), exports);
43
- __exportStar(require("./components/ui/paper"), exports);
44
- __exportStar(require("./components/ui/paper-collapsible"), exports);
45
- __exportStar(require("./components/ui/popover"), exports);
46
- __exportStar(require("./components/ui/progress"), exports);
47
- __exportStar(require("./components/ui/qr-code"), exports);
48
- __exportStar(require("./components/ui/select"), exports);
49
- __exportStar(require("./components/ui/separator"), exports);
50
- __exportStar(require("./components/ui/sheet"), exports);
51
- __exportStar(require("./components/ui/sidebar"), exports);
52
- __exportStar(require("./components/ui/skeleton"), exports);
53
- __exportStar(require("./components/ui/stepper"), exports);
54
- __exportStar(require("./hooks/use-stepper"), exports);
55
- __exportStar(require("./components/ui/switch"), exports);
56
- __exportStar(require("./components/ui/table"), exports);
57
- __exportStar(require("./components/ui/tabs"), exports);
58
- __exportStar(require("./components/ui/textarea"), exports);
59
- __exportStar(require("./components/ui/toast"), exports);
60
- __exportStar(require("./components/ui/toast/toaster"), exports);
61
- __exportStar(require("./hooks/use-toast"), exports);
62
- __exportStar(require("./components/ui/time-picker"), exports);
63
- __exportStar(require("./hooks/use-time"), exports);
64
- __exportStar(require("./components/ui/tooltip"), exports);
65
- __exportStar(require("./components/ui/form"), exports);
66
- // Components
67
- var breadcrumb_1 = require("./components/breadcrumb");
68
- Object.defineProperty(exports, "ApplicationBreadcrumb", { enumerable: true, get: function () { return breadcrumb_1.Breadcrumb; } });
69
- __exportStar(require("./components/breadcrumb/get-breadcrumb-paths"), exports);
70
- __exportStar(require("./components/card"), exports);
71
- __exportStar(require("./components/dialog"), exports);
72
- __exportStar(require("./components/entity-box"), exports);
73
- __exportStar(require("./components/entity-data-table"), exports);
74
- __exportStar(require("./components/form"), exports);
75
- __exportStar(require("./components/page"), exports);
76
- __exportStar(require("./components/page-header"), exports);
77
- __exportStar(require("./components/pagination"), exports);
78
- __exportStar(require("./components/table"), exports);
79
- // Enterprise surface (sindarian-x absorption — see docs/plans/2026-08-26-sindarian-x-retirement/)
80
- __exportStar(require("./enterprise"), exports);
81
- __exportStar(require("./theme"), exports);
82
- __exportStar(require("./toast"), exports);
83
- __exportStar(require("./charts"), exports);
84
- __exportStar(require("./domain"), exports);
85
- // Primitives absorbed from sindarian-x (see docs/plans/2026-08-26-sindarian-x-retirement/)
86
- __exportStar(require("./components/ui/accordion"), exports);
87
- __exportStar(require("./components/ui/alert-dialog"), exports);
88
- __exportStar(require("./components/ui/file-upload"), exports);
89
- __exportStar(require("./components/ui/hover-card"), exports);
90
- __exportStar(require("./components/ui/radio-group"), exports);
91
- __exportStar(require("./components/ui/scroll-area"), exports);
92
- __exportStar(require("./components/ui/toggle-group"), exports);
93
- // Utilities
94
- var utils_1 = require("./lib/utils");
95
- Object.defineProperty(exports, "cn", { enumerable: true, get: function () { return utils_1.cn; } });
96
- __exportStar(require("./lib/typography"), exports);
1
+ "use client";"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,e,o){if(o===void 0)o=e;var i=Object.getOwnPropertyDescriptor(r,e);if(!i||("get"in i?!r.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return r[e]}}}Object.defineProperty(t,o,i)}):(function(t,r,e,o){if(o===void 0)o=e;t[o]=r[e]}));var __exportStar=this&&this.__exportStar||function(t,r){for(var e in t)if(e!=="default"&&!Object.prototype.hasOwnProperty.call(r,e))__createBinding(r,t,e)};Object.defineProperty(exports,"__esModule",{value:true});exports.cn=exports.ApplicationBreadcrumb=void 0;__exportStar(require("./components/ui/alert"),exports);__exportStar(require("./components/ui/autocomplete"),exports);__exportStar(require("./hooks/use-click-away"),exports);__exportStar(require("./components/ui/autosize-textarea"),exports);__exportStar(require("./components/ui/avatar"),exports);__exportStar(require("./components/ui/badge"),exports);__exportStar(require("./components/ui/breadcrumb"),exports);__exportStar(require("./components/ui/button"),exports);__exportStar(require("./components/ui/icon-button"),exports);__exportStar(require("./components/ui/calendar"),exports);__exportStar(require("./components/ui/card"),exports);__exportStar(require("./components/ui/checkbox"),exports);__exportStar(require("./components/ui/collapsible"),exports);__exportStar(require("./components/ui/command"),exports);__exportStar(require("./components/ui/copy-field"),exports);__exportStar(require("./components/ui/dialog"),exports);__exportStar(require("./components/ui/dropdown-menu"),exports);__exportStar(require("./components/ui/input"),exports);__exportStar(require("./components/ui/otp-input"),exports);__exportStar(require("./components/ui/label"),exports);__exportStar(require("./components/ui/lerian-wordmark"),exports);__exportStar(require("./components/ui/loading-button"),exports);__exportStar(require("./components/ui/multiple-select"),exports);__exportStar(require("./components/ui/paper"),exports);__exportStar(require("./components/ui/paper-collapsible"),exports);__exportStar(require("./components/ui/popover"),exports);__exportStar(require("./components/ui/progress"),exports);__exportStar(require("./components/ui/qr-code"),exports);__exportStar(require("./components/ui/select"),exports);__exportStar(require("./components/ui/separator"),exports);__exportStar(require("./components/ui/sheet"),exports);__exportStar(require("./components/ui/sidebar"),exports);__exportStar(require("./components/ui/skeleton"),exports);__exportStar(require("./components/ui/stepper"),exports);__exportStar(require("./hooks/use-stepper"),exports);__exportStar(require("./components/ui/switch"),exports);__exportStar(require("./components/ui/table"),exports);__exportStar(require("./components/ui/tabs"),exports);__exportStar(require("./components/ui/textarea"),exports);__exportStar(require("./components/ui/toast"),exports);__exportStar(require("./components/ui/toast/toaster"),exports);__exportStar(require("./hooks/use-toast"),exports);__exportStar(require("./components/ui/time-picker"),exports);__exportStar(require("./hooks/use-time"),exports);__exportStar(require("./components/ui/tooltip"),exports);__exportStar(require("./components/ui/form"),exports);var breadcrumb_1=require("./components/breadcrumb");Object.defineProperty(exports,"ApplicationBreadcrumb",{enumerable:true,get:function(){return breadcrumb_1.Breadcrumb}});__exportStar(require("./components/breadcrumb/get-breadcrumb-paths"),exports);__exportStar(require("./components/card"),exports);__exportStar(require("./components/dialog"),exports);__exportStar(require("./components/entity-box"),exports);__exportStar(require("./components/entity-data-table"),exports);__exportStar(require("./components/form"),exports);__exportStar(require("./components/page"),exports);__exportStar(require("./components/page-header"),exports);__exportStar(require("./components/pagination"),exports);__exportStar(require("./components/table"),exports);__exportStar(require("./enterprise"),exports);__exportStar(require("./theme"),exports);__exportStar(require("./toast"),exports);__exportStar(require("./charts"),exports);__exportStar(require("./domain"),exports);__exportStar(require("./components/ui/accordion"),exports);__exportStar(require("./components/ui/alert-dialog"),exports);__exportStar(require("./components/ui/file-upload"),exports);__exportStar(require("./components/ui/hover-card"),exports);__exportStar(require("./components/ui/radio-group"),exports);__exportStar(require("./components/ui/scroll-area"),exports);__exportStar(require("./components/ui/toggle-group"),exports);var utils_1=require("./lib/utils");Object.defineProperty(exports,"cn",{enumerable:true,get:function(){return utils_1.cn}});__exportStar(require("./lib/typography"),exports);
@@ -1,23 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getStorageObject = getStorageObject;
7
- const get_storage_1 = require("./get-storage");
8
- const isEmpty_js_1 = __importDefault(require("lodash/isEmpty.js"));
9
- const isNil_js_1 = __importDefault(require("lodash/isNil.js"));
10
- function getStorageObject(key, defaultValue) {
11
- try {
12
- const dataString = (0, get_storage_1.getStorage)(key, defaultValue);
13
- const isNilOrEmpty = (0, isNil_js_1.default)(dataString) || (0, isEmpty_js_1.default)(dataString);
14
- return isNilOrEmpty ? {} : JSON.parse(dataString);
15
- }
16
- catch (error) {
17
- // Only log errors when not in test environment
18
- if (process.env.NODE_ENV !== 'test') {
19
- console.error(error);
20
- }
21
- return defaultValue;
22
- }
23
- }
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{"default":t}};Object.defineProperty(exports,"__esModule",{value:true});exports.getStorageObject=getStorageObject;const get_storage_1=require("./get-storage");const isEmpty_js_1=__importDefault(require("lodash/isEmpty.js"));const isNil_js_1=__importDefault(require("lodash/isNil.js"));function getStorageObject(t,r){try{const e=(0,get_storage_1.getStorage)(t,r);const s=(0,isNil_js_1.default)(e)||(0,isEmpty_js_1.default)(e);return s?{}:JSON.parse(e)}catch(e){if(process.env.NODE_ENV!=="test"){console.error(e)}return r}}
@@ -1,17 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStorage = getStorage;
4
- const isServer = typeof window === 'undefined';
5
- function getStorage(key, defaultValue) {
6
- if (isServer) {
7
- return defaultValue;
8
- }
9
- let value;
10
- try {
11
- value = localStorage.getItem(key) || undefined;
12
- }
13
- catch (_e) {
14
- // Unsupported
15
- }
16
- return value || defaultValue;
17
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getStorage=getStorage;const isServer=typeof window==="undefined";function getStorage(r,e){if(isServer){return e}let t;try{t=localStorage.getItem(r)||void 0}catch(o){}return t||e}
@@ -1,18 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./get-storage"), exports);
18
- __exportStar(require("./get-storage-object"), exports);
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,t,e,r){if(r===void 0)r=e;var n=Object.getOwnPropertyDescriptor(t,e);if(!n||("get"in n?!t.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return t[e]}}}Object.defineProperty(i,r,n)}):(function(i,t,e,r){if(r===void 0)r=e;i[r]=t[e]}));var __exportStar=this&&this.__exportStar||function(i,t){for(var e in i)if(e!=="default"&&!Object.prototype.hasOwnProperty.call(t,e))__createBinding(t,i,e)};Object.defineProperty(exports,"__esModule",{value:true});__exportStar(require("./get-storage"),exports);__exportStar(require("./get-storage-object"),exports);
@@ -1,34 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SECTION_LABEL_CLASS = exports.LABEL_VOICE_CLASS = void 0;
4
- /**
5
- * THE canonical quiet-label voice: sentence-case, one step down in size,
6
- * medium weight, muted ink. Used by column heads, panel headings, key/value
7
- * labels, captions — anywhere the console needs a quiet label.
8
- *
9
- * This is product-console's table-head voice, copied rather than invented. The
10
- * kit's own `TableHead` paints `text-muted-foreground … font-medium` inside a
11
- * `text-sm` `Table` (`components/ui/table/index.tsx:20,90`), and
12
- * product-console renders every data table through that primitive
13
- * (`src/components/table/data-table.tsx:14`). It replaced the retired "Ledger"
14
- * voice — `text-[11px] uppercase tracking-[0.08em]` — which shouted a register
15
- * no sibling console speaks.
16
- *
17
- * Do NOT re-state the cluster by hand; compose extra classes via
18
- * `cn(LABEL_VOICE_CLASS, ...)`.
19
- */
20
- exports.LABEL_VOICE_CLASS = 'text-sm font-medium text-muted-foreground';
21
- /**
22
- * Alias of {@link LABEL_VOICE_CLASS} for section headings. Kept as a distinct
23
- * name so section-level headings can diverge later without touching every
24
- * quiet-label call site.
25
- *
26
- * It stays an alias on purpose. product-console's panel/section TITLE voice is
27
- * `text-muted-foreground text-lg font-medium` (`EntityBoxHeaderTitle`,
28
- * `components/entity-box/index.tsx:108`) — but that voice already ships as a
29
- * component, and every live `SectionLabel` call site is a caption or a small
30
- * heading (a stat-card label, an inline rate label), not an EntityBox-scale
31
- * panel title. Promoting this constant to `text-lg` would duplicate a voice the
32
- * kit already owns and inflate those captions.
33
- */
34
- exports.SECTION_LABEL_CLASS = exports.LABEL_VOICE_CLASS;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SECTION_LABEL_CLASS=exports.LABEL_VOICE_CLASS=void 0;exports.LABEL_VOICE_CLASS="text-sm font-medium text-muted-foreground";exports.SECTION_LABEL_CLASS=exports.LABEL_VOICE_CLASS;
package/dist/lib/utils.js CHANGED
@@ -1,45 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cn = cn;
4
- exports.keepOpenOnToast = keepOpenOnToast;
5
- const clsx_1 = require("clsx");
6
- const tailwind_merge_1 = require("tailwind-merge");
7
- /**
8
- * The kit's button variants are component classes in `@layer components`, not
9
- * Tailwind utilities, so stock tailwind-merge has no group for them: it kept
10
- * `button-primary button-destructive` together and let stylesheet source order
11
- * pick the winner. Declaring the group makes the last one win, like every other
12
- * conflict `cn` resolves.
13
- *
14
- * Variant classes only. `button-base`, `button-disabled`, `button-read-only`
15
- * and `button-small` compose with a variant instead of conflicting with it, so
16
- * they stay out of the group and are never merged away.
17
- */
18
- const twMerge = (0, tailwind_merge_1.extendTailwindMerge)({
19
- extend: {
20
- classGroups: {
21
- 'sindarian-button-variant': [
22
- 'button-plain',
23
- 'button-primary',
24
- 'button-secondary',
25
- 'button-tertiary',
26
- 'button-outline',
27
- 'button-link',
28
- 'button-destructive'
29
- ]
30
- }
31
- }
32
- });
33
- function cn(...inputs) {
34
- return twMerge((0, clsx_1.clsx)(inputs));
35
- }
36
- /** Wraps a Radix `onInteractOutside` so a press on a toast never dismisses the layer under it. */
37
- function keepOpenOnToast(onInteractOutside) {
38
- return (event) => {
39
- if (event.target?.closest('[data-sonner-toaster]')) {
40
- event.preventDefault();
41
- return;
42
- }
43
- onInteractOutside?.(event);
44
- };
45
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cn=cn;exports.keepOpenOnToast=keepOpenOnToast;const clsx_1=require("clsx");const tailwind_merge_1=require("tailwind-merge");const twMerge=(0,tailwind_merge_1.extendTailwindMerge)({extend:{classGroups:{"sindarian-button-variant":["button-plain","button-primary","button-secondary","button-tertiary","button-outline","button-link","button-destructive"]}}});function cn(...t){return twMerge((0,clsx_1.clsx)(t))}function keepOpenOnToast(t){return e=>{if(e.target?.closest("[data-sonner-toaster]")){e.preventDefault();return}t?.(e)}}
@@ -1,44 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getThemeScript = getThemeScript;
4
- /**
5
- * Pre-paint theme script (FOUC guard). Returns a minified IIFE string that
6
- * reads the persisted preference from localStorage, resolves it the way
7
- * ThemeProvider does, and toggles the `.dark` class on the page root element
8
- * before first paint — so the page never flashes the wrong theme while React
9
- * hydrates. ThemeProvider owns the class from mount onward.
10
- *
11
- * The resolution mirrors ThemeProvider's exactly: an exact "dark"/"light"/
12
- * "system" stored value wins; anything else — absent or corrupted — falls back
13
- * to `defaultTheme`, which is then resolved ("dark" → dark, "light" → light,
14
- * "system" → the media query). Pass the SAME `defaultTheme` you give
15
- * ThemeProvider, or the two disagree on a first visit.
16
- * `get-theme-script.test.tsx` pins that agreement case by case.
17
- *
18
- * Server-safe: this module references no browser globals at module scope; the
19
- * returned string runs in the browser only, inside a try/catch.
20
- *
21
- * Consumer usage — inject in the page <head>, ideally as the first script:
22
- *
23
- * <script dangerouslySetInnerHTML={{ __html: getThemeScript() }} />
24
- *
25
- * A dark-by-default app passes both arguments:
26
- *
27
- * <script dangerouslySetInnerHTML={{ __html: getThemeScript('app.theme', 'dark') }} />
28
- */
29
- /**
30
- * JSON string literal with `<` escaped, so no embedded value can close the
31
- * inline <script> element it is written into. `<` is `<` to the JS parser,
32
- * so the emitted script still compares against the original text.
33
- */
34
- function jsString(value) {
35
- return JSON.stringify(value).replace(/</g, '\\u003C');
36
- }
37
- function getThemeScript(storageKey = 'sindarian.theme', defaultTheme = 'system') {
38
- // The storage read gets its OWN try/catch, mirroring ThemeProvider, which
39
- // isolates the same read. A browser with site data blocked throws on
40
- // getItem; if that escaped to the outer catch the class would never be
41
- // applied at all and a dark user would flash light before hydration.
42
- // Resolution starts from defaultTheme and storage only narrows it.
43
- return `(function(){try{var r=${jsString(defaultTheme)};try{var t=localStorage.getItem(${jsString(storageKey)});if(t==="dark"||t==="light"||t==="system")r=t}catch(e){}var d=r==="dark"||(r==="system"&&matchMedia("(prefers-color-scheme: dark)").matches);document.documentElement.classList.toggle("dark",d)}catch(e){}})()`;
44
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getThemeScript=getThemeScript;function jsString(e){return JSON.stringify(e).replace(/</g,"\\u003C")}function getThemeScript(e="sindarian.theme",t="system"){return`(function(){try{var r=${jsString(t)};try{var t=localStorage.getItem(${jsString(e)});if(t==="dark"||t==="light"||t==="system")r=t}catch(e){}var d=r==="dark"||(r==="system"&&matchMedia("(prefers-color-scheme: dark)").matches);document.documentElement.classList.toggle("dark",d)}catch(e){}})()`}
@@ -1,11 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModeToggle = exports.getThemeScript = exports.useTheme = exports.ThemeProvider = void 0;
4
- // Owned by lane theme-toasts-charts — see docs/plans/2026-08-26-sindarian-x-retirement/
5
- var theme_provider_1 = require("./theme-provider");
6
- Object.defineProperty(exports, "ThemeProvider", { enumerable: true, get: function () { return theme_provider_1.ThemeProvider; } });
7
- Object.defineProperty(exports, "useTheme", { enumerable: true, get: function () { return theme_provider_1.useTheme; } });
8
- var get_theme_script_1 = require("./get-theme-script");
9
- Object.defineProperty(exports, "getThemeScript", { enumerable: true, get: function () { return get_theme_script_1.getThemeScript; } });
10
- var mode_toggle_1 = require("./mode-toggle");
11
- Object.defineProperty(exports, "ModeToggle", { enumerable: true, get: function () { return mode_toggle_1.ModeToggle; } });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ModeToggle=exports.getThemeScript=exports.useTheme=exports.ThemeProvider=void 0;var theme_provider_1=require("./theme-provider");Object.defineProperty(exports,"ThemeProvider",{enumerable:true,get:function(){return theme_provider_1.ThemeProvider}});Object.defineProperty(exports,"useTheme",{enumerable:true,get:function(){return theme_provider_1.useTheme}});var get_theme_script_1=require("./get-theme-script");Object.defineProperty(exports,"getThemeScript",{enumerable:true,get:function(){return get_theme_script_1.getThemeScript}});var mode_toggle_1=require("./mode-toggle");Object.defineProperty(exports,"ModeToggle",{enumerable:true,get:function(){return mode_toggle_1.ModeToggle}});
@@ -1,48 +1 @@
1
- 'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ModeToggle = ModeToggle;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const lucide_react_1 = require("lucide-react");
7
- const utils_1 = require("../lib/utils");
8
- const theme_provider_1 = require("./theme-provider");
9
- const SEGMENTS = [
10
- { value: 'light', icon: lucide_react_1.Sun },
11
- { value: 'system', icon: lucide_react_1.Monitor },
12
- { value: 'dark', icon: lucide_react_1.Moon }
13
- ];
14
- const DEFAULT_LABELS = {
15
- light: 'Light',
16
- system: 'System',
17
- dark: 'Dark',
18
- group: 'Theme'
19
- };
20
- /**
21
- * Merge overrides over the defaults, IGNORING blank ones. A plain spread lets
22
- * `labels={{ light: '' }}` win, and every segment here is icon-only — so a blank
23
- * override leaves a button (or the whole group) with `aria-label=""`, which names
24
- * it "" AND suppresses the element's other naming routes. That is strictly worse
25
- * than the missing translation it came from: an untranslated English label is
26
- * usable, a nameless button is not. A blank string is a missing value, not a
27
- * chosen one.
28
- */
29
- function resolveLabels(labels) {
30
- const resolved = { ...DEFAULT_LABELS };
31
- for (const key of Object.keys(DEFAULT_LABELS)) {
32
- const override = labels?.[key];
33
- if (override?.trim())
34
- resolved[key] = override;
35
- }
36
- return resolved;
37
- }
38
- function ModeToggle({ labels, className }) {
39
- const { theme, setTheme } = (0, theme_provider_1.useTheme)();
40
- const resolved = resolveLabels(labels);
41
- return ((0, jsx_runtime_1.jsx)("div", { role: "group", "aria-label": resolved.group, className: (0, utils_1.cn)('border-input bg-card grid w-fit grid-cols-3 rounded-md border p-0.5 shadow-[var(--shadow-card)]', className), children: SEGMENTS.map(({ value, icon: Icon }) => {
42
- const active = value === theme;
43
- const label = resolved[value];
44
- return ((0, jsx_runtime_1.jsx)("button", { type: "button", "aria-pressed": active, "aria-label": label, title: label, onClick: () => setTheme(value), className: (0, utils_1.cn)('focus-visible:ring-ring flex items-center justify-center rounded-sm px-2 py-1.5 transition-colors duration-150 ease-out focus-visible:ring-2 focus-visible:outline-none', active
45
- ? 'bg-secondary text-secondary-foreground'
46
- : 'text-muted-foreground hover:text-foreground'), children: (0, jsx_runtime_1.jsx)(Icon, { className: "size-4", "aria-hidden": true }) }, value));
47
- }) }));
48
- }
1
+ "use client";"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ModeToggle=ModeToggle;const jsx_runtime_1=require("react/jsx-runtime");const lucide_react_1=require("lucide-react");const utils_1=require("../lib/utils");const theme_provider_1=require("./theme-provider");const SEGMENTS=[{value:"light",icon:lucide_react_1.Sun},{value:"system",icon:lucide_react_1.Monitor},{value:"dark",icon:lucide_react_1.Moon}];const DEFAULT_LABELS={light:"Light",system:"System",dark:"Dark",group:"Theme"};function resolveLabels(s){const e={...DEFAULT_LABELS};for(const r of Object.keys(DEFAULT_LABELS)){const t=s?.[r];if(t?.trim())e[r]=t}return e}function ModeToggle({labels:s,className:e}){const{theme:r,setTheme:t}=(0,theme_provider_1.useTheme)();const i=resolveLabels(s);return(0,jsx_runtime_1.jsx)("div",{role:"group","aria-label":i.group,className:(0,utils_1.cn)("border-input bg-card grid w-fit grid-cols-3 rounded-md border p-0.5 shadow-[var(--shadow-card)]",e),children:SEGMENTS.map(({value:o,icon:u})=>{const n=o===r;const c=i[o];return(0,jsx_runtime_1.jsx)("button",{type:"button","aria-pressed":n,"aria-label":c,title:c,onClick:()=>t(o),className:(0,utils_1.cn)("focus-visible:ring-ring flex items-center justify-center rounded-sm px-2 py-1.5 transition-colors duration-150 ease-out focus-visible:ring-2 focus-visible:outline-none",n?"bg-secondary text-secondary-foreground":"text-muted-foreground hover:text-foreground"),children:(0,jsx_runtime_1.jsx)(u,{className:"size-4","aria-hidden":true})},o)})})}