@lerianstudio/sindarian-ui 1.2.0 → 1.3.0-beta.2

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 (661) hide show
  1. package/dist/charts/chart.d.ts +64 -0
  2. package/dist/charts/chart.d.ts.map +1 -0
  3. package/dist/charts/chart.js +232 -0
  4. package/dist/charts/index.d.ts +3 -0
  5. package/dist/charts/index.d.ts.map +1 -0
  6. package/dist/charts/index.js +11 -0
  7. package/dist/components/breadcrumb/get-breadcrumb-paths.js +5 -2
  8. package/dist/components/form/date-time-picker-field/index.js +1 -1
  9. package/dist/components/form/file-upload-field/index.d.ts +52 -0
  10. package/dist/components/form/file-upload-field/index.d.ts.map +1 -0
  11. package/dist/components/form/file-upload-field/index.js +64 -0
  12. package/dist/components/form/index.d.ts +3 -0
  13. package/dist/components/form/index.d.ts.map +1 -1
  14. package/dist/components/form/index.js +3 -0
  15. package/dist/components/form/radio-group-field/index.d.ts +32 -0
  16. package/dist/components/form/radio-group-field/index.d.ts.map +1 -0
  17. package/dist/components/form/radio-group-field/index.js +36 -0
  18. package/dist/components/form/renderable-label.d.ts +35 -0
  19. package/dist/components/form/renderable-label.d.ts.map +1 -0
  20. package/dist/components/form/renderable-label.js +57 -0
  21. package/dist/components/form/textarea-field/index.d.ts +31 -0
  22. package/dist/components/form/textarea-field/index.d.ts.map +1 -0
  23. package/dist/components/form/textarea-field/index.js +23 -0
  24. package/dist/components/table/id-table-cell.js +5 -2
  25. package/dist/components/ui/accordion/index.d.ts +14 -0
  26. package/dist/components/ui/accordion/index.d.ts.map +1 -0
  27. package/dist/components/ui/accordion/index.js +62 -0
  28. package/dist/components/ui/alert-dialog/index.d.ts +15 -0
  29. package/dist/components/ui/alert-dialog/index.d.ts.map +1 -0
  30. package/dist/components/ui/alert-dialog/index.js +84 -0
  31. package/dist/components/ui/autocomplete/index.d.ts +1 -1
  32. package/dist/components/ui/autocomplete/index.d.ts.map +1 -1
  33. package/dist/components/ui/autocomplete/index.js +45 -9
  34. package/dist/components/ui/badge/index.d.ts.map +1 -1
  35. package/dist/components/ui/badge/index.js +2 -2
  36. package/dist/components/ui/button/index.d.ts.map +1 -1
  37. package/dist/components/ui/button/index.js +1 -1
  38. package/dist/components/ui/copy-field/index.d.ts +56 -0
  39. package/dist/components/ui/copy-field/index.d.ts.map +1 -0
  40. package/dist/components/ui/copy-field/index.js +155 -0
  41. package/dist/components/ui/dialog/styles.css +3 -3
  42. package/dist/components/ui/file-upload/index.d.ts +94 -0
  43. package/dist/components/ui/file-upload/index.d.ts.map +1 -0
  44. package/dist/components/ui/file-upload/index.js +237 -0
  45. package/dist/components/ui/hover-card/index.d.ts +7 -0
  46. package/dist/components/ui/hover-card/index.d.ts.map +1 -0
  47. package/dist/components/ui/hover-card/index.js +51 -0
  48. package/dist/components/ui/icon-button/styles.css +24 -24
  49. package/dist/components/ui/input/index.d.ts.map +1 -1
  50. package/dist/components/ui/input/index.js +6 -5
  51. package/dist/components/ui/input/styles.css +6 -2
  52. package/dist/components/ui/otp-input/index.d.ts.map +1 -1
  53. package/dist/components/ui/otp-input/index.js +1 -1
  54. package/dist/components/ui/qr-code/index.d.ts +26 -0
  55. package/dist/components/ui/qr-code/index.d.ts.map +1 -0
  56. package/dist/components/ui/qr-code/index.js +27 -0
  57. package/dist/components/ui/radio-group/index.d.ts +6 -0
  58. package/dist/components/ui/radio-group/index.d.ts.map +1 -0
  59. package/dist/components/ui/radio-group/index.js +48 -0
  60. package/dist/components/ui/scroll-area/index.d.ts +6 -0
  61. package/dist/components/ui/scroll-area/index.d.ts.map +1 -0
  62. package/dist/components/ui/scroll-area/index.js +49 -0
  63. package/dist/components/ui/sidebar/index.d.ts +1 -0
  64. package/dist/components/ui/sidebar/index.d.ts.map +1 -1
  65. package/dist/components/ui/sidebar/index.js +1 -0
  66. package/dist/components/ui/sidebar/next-router.cjs +119 -0
  67. package/dist/components/ui/sidebar/next-router.d.cts +7 -0
  68. package/dist/components/ui/sidebar/sidebar-item-button.d.ts +2 -2
  69. package/dist/components/ui/sidebar/sidebar-item-button.d.ts.map +1 -1
  70. package/dist/components/ui/sidebar/sidebar-item-button.js +3 -5
  71. package/dist/components/ui/sidebar/sidebar-item-icon-button.d.ts +3 -3
  72. package/dist/components/ui/sidebar/sidebar-item-icon-button.d.ts.map +1 -1
  73. package/dist/components/ui/sidebar/sidebar-item-icon-button.js +5 -7
  74. package/dist/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
  75. package/dist/components/ui/sidebar/sidebar-item.js +3 -2
  76. package/dist/components/ui/sidebar/sidebar-router.d.ts +82 -0
  77. package/dist/components/ui/sidebar/sidebar-router.d.ts.map +1 -0
  78. package/dist/components/ui/sidebar/sidebar-router.js +126 -0
  79. package/dist/components/ui/toast/index.d.ts +1 -1
  80. package/dist/components/ui/toast/index.d.ts.map +1 -1
  81. package/dist/components/ui/toggle-group/index.d.ts +18 -0
  82. package/dist/components/ui/toggle-group/index.d.ts.map +1 -0
  83. package/dist/components/ui/toggle-group/index.js +87 -0
  84. package/dist/domain/blotter/index.d.ts +40 -0
  85. package/dist/domain/blotter/index.d.ts.map +1 -0
  86. package/dist/domain/blotter/index.js +16 -0
  87. package/dist/domain/delinquency-aging/aging-buckets.d.ts +57 -0
  88. package/dist/domain/delinquency-aging/aging-buckets.d.ts.map +1 -0
  89. package/dist/domain/delinquency-aging/aging-buckets.js +110 -0
  90. package/dist/domain/delinquency-aging/index.d.ts +71 -0
  91. package/dist/domain/delinquency-aging/index.d.ts.map +1 -0
  92. package/dist/domain/delinquency-aging/index.js +213 -0
  93. package/dist/domain/figure/index.d.ts +30 -0
  94. package/dist/domain/figure/index.d.ts.map +1 -0
  95. package/dist/domain/figure/index.js +18 -0
  96. package/dist/domain/format.d.ts +79 -0
  97. package/dist/domain/format.d.ts.map +1 -0
  98. package/dist/domain/format.js +137 -0
  99. package/dist/domain/index.d.ts +23 -0
  100. package/dist/domain/index.d.ts.map +1 -0
  101. package/dist/domain/index.js +43 -0
  102. package/dist/domain/key-id/index.d.ts +31 -0
  103. package/dist/domain/key-id/index.d.ts.map +1 -0
  104. package/dist/domain/key-id/index.js +174 -0
  105. package/dist/domain/ledger-sheet/index.d.ts +45 -0
  106. package/dist/domain/ledger-sheet/index.d.ts.map +1 -0
  107. package/dist/domain/ledger-sheet/index.js +28 -0
  108. package/dist/domain/money-diff.d.ts +28 -0
  109. package/dist/domain/money-diff.d.ts.map +1 -0
  110. package/dist/domain/money-diff.js +48 -0
  111. package/dist/domain/money-math.d.ts +32 -0
  112. package/dist/domain/money-math.d.ts.map +1 -0
  113. package/dist/domain/money-math.js +104 -0
  114. package/dist/domain/money-text/index.d.ts +37 -0
  115. package/dist/domain/money-text/index.d.ts.map +1 -0
  116. package/dist/domain/money-text/index.js +115 -0
  117. package/dist/domain/section-label/index.d.ts +21 -0
  118. package/dist/domain/section-label/index.d.ts.map +1 -0
  119. package/dist/domain/section-label/index.js +13 -0
  120. package/dist/domain/status-rail/index.d.ts +40 -0
  121. package/dist/domain/status-rail/index.d.ts.map +1 -0
  122. package/dist/domain/status-rail/index.js +72 -0
  123. package/dist/domain/threshold-gauge/index.d.ts +84 -0
  124. package/dist/domain/threshold-gauge/index.d.ts.map +1 -0
  125. package/dist/domain/threshold-gauge/index.js +157 -0
  126. package/dist/enterprise/alert-banner/index.d.ts +30 -0
  127. package/dist/enterprise/alert-banner/index.d.ts.map +1 -0
  128. package/dist/enterprise/alert-banner/index.js +24 -0
  129. package/dist/enterprise/app-shell/index.d.ts +61 -0
  130. package/dist/enterprise/app-shell/index.d.ts.map +1 -0
  131. package/dist/enterprise/app-shell/index.js +87 -0
  132. package/dist/enterprise/cursor-pager/index.d.ts +21 -0
  133. package/dist/enterprise/cursor-pager/index.d.ts.map +1 -0
  134. package/dist/enterprise/cursor-pager/index.js +26 -0
  135. package/dist/enterprise/data-table/index.d.ts +88 -0
  136. package/dist/enterprise/data-table/index.d.ts.map +1 -0
  137. package/dist/enterprise/data-table/index.js +245 -0
  138. package/dist/enterprise/date-range-picker/index.d.ts +37 -0
  139. package/dist/enterprise/date-range-picker/index.d.ts.map +1 -0
  140. package/dist/enterprise/date-range-picker/index.js +92 -0
  141. package/dist/enterprise/detail-panel/index.d.ts +54 -0
  142. package/dist/enterprise/detail-panel/index.d.ts.map +1 -0
  143. package/dist/enterprise/detail-panel/index.js +20 -0
  144. package/dist/enterprise/empty-state/index.d.ts +32 -0
  145. package/dist/enterprise/empty-state/index.d.ts.map +1 -0
  146. package/dist/enterprise/empty-state/index.js +13 -0
  147. package/dist/enterprise/index.d.ts +26 -0
  148. package/dist/enterprise/index.d.ts.map +1 -0
  149. package/dist/enterprise/index.js +39 -0
  150. package/dist/enterprise/number-input/index.d.ts +55 -0
  151. package/dist/enterprise/number-input/index.d.ts.map +1 -0
  152. package/dist/enterprise/number-input/index.js +252 -0
  153. package/dist/enterprise/search-input/index.d.ts +32 -0
  154. package/dist/enterprise/search-input/index.d.ts.map +1 -0
  155. package/dist/enterprise/search-input/index.js +121 -0
  156. package/dist/enterprise/stat-card/index.d.ts +43 -0
  157. package/dist/enterprise/stat-card/index.d.ts.map +1 -0
  158. package/dist/enterprise/stat-card/index.js +67 -0
  159. package/dist/enterprise/status-badge/index.d.ts +31 -0
  160. package/dist/enterprise/status-badge/index.d.ts.map +1 -0
  161. package/dist/enterprise/status-badge/index.js +120 -0
  162. package/dist/enterprise/use-is-mobile.d.ts +20 -0
  163. package/dist/enterprise/use-is-mobile.d.ts.map +1 -0
  164. package/dist/enterprise/use-is-mobile.js +68 -0
  165. package/dist/enterprise/virtualized-table/index.d.ts +26 -0
  166. package/dist/enterprise/virtualized-table/index.d.ts.map +1 -0
  167. package/dist/enterprise/virtualized-table/index.js +114 -0
  168. package/dist/esm/charts/chart.d.ts +64 -0
  169. package/dist/esm/charts/chart.d.ts.map +1 -0
  170. package/dist/esm/charts/chart.js +191 -0
  171. package/dist/esm/charts/index.d.ts +3 -0
  172. package/dist/esm/charts/index.d.ts.map +1 -0
  173. package/dist/esm/charts/index.js +3 -0
  174. package/dist/esm/components/breadcrumb/get-breadcrumb-paths.d.ts +10 -0
  175. package/dist/esm/components/breadcrumb/get-breadcrumb-paths.d.ts.map +1 -0
  176. package/dist/esm/components/breadcrumb/get-breadcrumb-paths.js +12 -0
  177. package/dist/esm/components/breadcrumb/index.d.ts +11 -0
  178. package/dist/esm/components/breadcrumb/index.d.ts.map +1 -0
  179. package/dist/esm/components/breadcrumb/index.js +6 -0
  180. package/dist/esm/components/card/account-card/index.d.ts +32 -0
  181. package/dist/esm/components/card/account-card/index.d.ts.map +1 -0
  182. package/dist/esm/components/card/account-card/index.js +53 -0
  183. package/dist/esm/components/card/basic-card/index.d.ts +6 -0
  184. package/dist/esm/components/card/basic-card/index.d.ts.map +1 -0
  185. package/dist/esm/components/card/basic-card/index.js +14 -0
  186. package/dist/esm/components/card/dashboard-card/index.d.ts +5 -0
  187. package/dist/esm/components/card/dashboard-card/index.d.ts.map +1 -0
  188. package/dist/esm/components/card/dashboard-card/index.js +14 -0
  189. package/dist/esm/components/card/entity-card/index.d.ts +22 -0
  190. package/dist/esm/components/card/entity-card/index.d.ts.map +1 -0
  191. package/dist/esm/components/card/entity-card/index.js +48 -0
  192. package/dist/esm/components/card/index.d.ts +5 -0
  193. package/dist/esm/components/card/index.d.ts.map +1 -0
  194. package/dist/esm/components/card/index.js +4 -0
  195. package/dist/esm/components/dialog/confirmation-dialog/index.d.ts +16 -0
  196. package/dist/esm/components/dialog/confirmation-dialog/index.d.ts.map +1 -0
  197. package/dist/esm/components/dialog/confirmation-dialog/index.js +25 -0
  198. package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.d.ts +31 -0
  199. package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.d.ts.map +1 -0
  200. package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.js +49 -0
  201. package/dist/esm/components/dialog/index.d.ts +4 -0
  202. package/dist/esm/components/dialog/index.d.ts.map +1 -0
  203. package/dist/esm/components/dialog/index.js +3 -0
  204. package/dist/esm/components/dialog/large-dialog/index.d.ts +11 -0
  205. package/dist/esm/components/dialog/large-dialog/index.d.ts.map +1 -0
  206. package/dist/esm/components/dialog/large-dialog/index.js +16 -0
  207. package/dist/esm/components/entity-box/index.d.ts +17 -0
  208. package/dist/esm/components/entity-box/index.d.ts.map +1 -0
  209. package/dist/esm/components/entity-box/index.js +31 -0
  210. package/dist/esm/components/entity-data-table/index.d.ts +17 -0
  211. package/dist/esm/components/entity-data-table/index.d.ts.map +1 -0
  212. package/dist/esm/components/entity-data-table/index.js +17 -0
  213. package/dist/esm/components/form/combo-box-field/index.d.ts +14 -0
  214. package/dist/esm/components/form/combo-box-field/index.d.ts.map +1 -0
  215. package/dist/esm/components/form/combo-box-field/index.js +28 -0
  216. package/dist/esm/components/form/country-field/index.d.ts +5 -0
  217. package/dist/esm/components/form/country-field/index.d.ts.map +1 -0
  218. package/dist/esm/components/form/country-field/index.js +7 -0
  219. package/dist/esm/components/form/date-picker-field/index.d.ts +21 -0
  220. package/dist/esm/components/form/date-picker-field/index.d.ts.map +1 -0
  221. package/dist/esm/components/form/date-picker-field/index.js +38 -0
  222. package/dist/esm/components/form/date-range-field/index.d.ts +21 -0
  223. package/dist/esm/components/form/date-range-field/index.d.ts.map +1 -0
  224. package/dist/esm/components/form/date-range-field/index.js +17 -0
  225. package/dist/esm/components/form/date-time-picker-field/index.d.ts +23 -0
  226. package/dist/esm/components/form/date-time-picker-field/index.d.ts.map +1 -0
  227. package/dist/esm/components/form/date-time-picker-field/index.js +73 -0
  228. package/dist/esm/components/form/file-upload-field/index.d.ts +52 -0
  229. package/dist/esm/components/form/file-upload-field/index.d.ts.map +1 -0
  230. package/dist/esm/components/form/file-upload-field/index.js +60 -0
  231. package/dist/esm/components/form/index.d.ts +16 -0
  232. package/dist/esm/components/form/index.d.ts.map +1 -0
  233. package/dist/esm/components/form/index.js +15 -0
  234. package/dist/esm/components/form/input-field/index.d.ts +26 -0
  235. package/dist/esm/components/form/input-field/index.d.ts.map +1 -0
  236. package/dist/esm/components/form/input-field/index.js +10 -0
  237. package/dist/esm/components/form/otp-field/index.d.ts +18 -0
  238. package/dist/esm/components/form/otp-field/index.d.ts.map +1 -0
  239. package/dist/esm/components/form/otp-field/index.js +15 -0
  240. package/dist/esm/components/form/pagination-limit-field/index.d.ts +9 -0
  241. package/dist/esm/components/form/pagination-limit-field/index.d.ts.map +1 -0
  242. package/dist/esm/components/form/pagination-limit-field/index.js +6 -0
  243. package/dist/esm/components/form/password-field/index.d.ts +14 -0
  244. package/dist/esm/components/form/password-field/index.d.ts.map +1 -0
  245. package/dist/esm/components/form/password-field/index.js +10 -0
  246. package/dist/esm/components/form/radio-group-field/index.d.ts +32 -0
  247. package/dist/esm/components/form/radio-group-field/index.d.ts.map +1 -0
  248. package/dist/esm/components/form/radio-group-field/index.js +32 -0
  249. package/dist/esm/components/form/renderable-label.d.ts +35 -0
  250. package/dist/esm/components/form/renderable-label.d.ts.map +1 -0
  251. package/dist/esm/components/form/renderable-label.js +54 -0
  252. package/dist/esm/components/form/select-field/index.d.ts +20 -0
  253. package/dist/esm/components/form/select-field/index.d.ts.map +1 -0
  254. package/dist/esm/components/form/select-field/index.js +16 -0
  255. package/dist/esm/components/form/state-field/index.d.ts +10 -0
  256. package/dist/esm/components/form/state-field/index.d.ts.map +1 -0
  257. package/dist/esm/components/form/state-field/index.js +35 -0
  258. package/dist/esm/components/form/switch-field/index.d.ts +15 -0
  259. package/dist/esm/components/form/switch-field/index.d.ts.map +1 -0
  260. package/dist/esm/components/form/switch-field/index.js +7 -0
  261. package/dist/esm/components/form/textarea-field/index.d.ts +31 -0
  262. package/dist/esm/components/form/textarea-field/index.d.ts.map +1 -0
  263. package/dist/esm/components/form/textarea-field/index.js +19 -0
  264. package/dist/esm/components/page/index.d.ts +4 -0
  265. package/dist/esm/components/page/index.d.ts.map +1 -0
  266. package/dist/esm/components/page/index.js +11 -0
  267. package/dist/esm/components/page-header/index.d.ts +33 -0
  268. package/dist/esm/components/page-header/index.d.ts.map +1 -0
  269. package/dist/esm/components/page-header/index.js +40 -0
  270. package/dist/esm/components/pagination/index.d.ts +8 -0
  271. package/dist/esm/components/pagination/index.d.ts.map +1 -0
  272. package/dist/esm/components/pagination/index.js +6 -0
  273. package/dist/esm/components/table/id-table-cell.d.ts +7 -0
  274. package/dist/esm/components/table/id-table-cell.d.ts.map +1 -0
  275. package/dist/esm/components/table/id-table-cell.js +12 -0
  276. package/dist/esm/components/table/index.d.ts +3 -0
  277. package/dist/esm/components/table/index.d.ts.map +1 -0
  278. package/dist/esm/components/table/index.js +2 -0
  279. package/dist/esm/components/table/locked-table-actions.d.ts +7 -0
  280. package/dist/esm/components/table/locked-table-actions.d.ts.map +1 -0
  281. package/dist/esm/components/table/locked-table-actions.js +7 -0
  282. package/dist/esm/components/table/name-table-cell.d.ts +6 -0
  283. package/dist/esm/components/table/name-table-cell.d.ts.map +1 -0
  284. package/dist/esm/components/table/name-table-cell.js +6 -0
  285. package/dist/esm/components/ui/accordion/index.d.ts +14 -0
  286. package/dist/esm/components/ui/accordion/index.d.ts.map +1 -0
  287. package/dist/esm/components/ui/accordion/index.js +24 -0
  288. package/dist/esm/components/ui/alert/index.d.ts +15 -0
  289. package/dist/esm/components/ui/alert/index.d.ts.map +1 -0
  290. package/dist/esm/components/ui/alert/index.js +38 -0
  291. package/dist/esm/components/ui/alert-dialog/index.d.ts +15 -0
  292. package/dist/esm/components/ui/alert-dialog/index.d.ts.map +1 -0
  293. package/dist/esm/components/ui/alert-dialog/index.js +39 -0
  294. package/dist/esm/components/ui/autocomplete/index.d.ts +54 -0
  295. package/dist/esm/components/ui/autocomplete/index.d.ts.map +1 -0
  296. package/dist/esm/components/ui/autocomplete/index.js +312 -0
  297. package/dist/esm/components/ui/autosize-textarea/index.d.ts +15 -0
  298. package/dist/esm/components/ui/autosize-textarea/index.d.ts.map +1 -0
  299. package/dist/esm/components/ui/autosize-textarea/index.js +51 -0
  300. package/dist/esm/components/ui/avatar/index.d.ts +7 -0
  301. package/dist/esm/components/ui/avatar/index.d.ts.map +1 -0
  302. package/dist/esm/components/ui/avatar/index.js +14 -0
  303. package/dist/esm/components/ui/badge/index.d.ts +11 -0
  304. package/dist/esm/components/ui/badge/index.d.ts.map +1 -0
  305. package/dist/esm/components/ui/badge/index.js +29 -0
  306. package/dist/esm/components/ui/breadcrumb/index.d.ts +12 -0
  307. package/dist/esm/components/ui/breadcrumb/index.d.ts.map +1 -0
  308. package/dist/esm/components/ui/breadcrumb/index.js +27 -0
  309. package/dist/esm/components/ui/button/index.d.ts +22 -0
  310. package/dist/esm/components/ui/button/index.d.ts.map +1 -0
  311. package/dist/esm/components/ui/button/index.js +59 -0
  312. package/dist/esm/components/ui/calendar/index.d.ts +9 -0
  313. package/dist/esm/components/ui/calendar/index.d.ts.map +1 -0
  314. package/dist/esm/components/ui/calendar/index.js +79 -0
  315. package/dist/esm/components/ui/card/index.d.ts +10 -0
  316. package/dist/esm/components/ui/card/index.d.ts.map +1 -0
  317. package/dist/esm/components/ui/card/index.js +24 -0
  318. package/dist/esm/components/ui/checkbox/index.d.ts +5 -0
  319. package/dist/esm/components/ui/checkbox/index.d.ts.map +1 -0
  320. package/dist/esm/components/ui/checkbox/index.js +9 -0
  321. package/dist/esm/components/ui/collapsible/index.d.ts +6 -0
  322. package/dist/esm/components/ui/collapsible/index.d.ts.map +1 -0
  323. package/dist/esm/components/ui/collapsible/index.js +13 -0
  324. package/dist/esm/components/ui/command/index.d.ts +14 -0
  325. package/dist/esm/components/ui/command/index.d.ts.map +1 -0
  326. package/dist/esm/components/ui/command/index.js +51 -0
  327. package/dist/esm/components/ui/copy-field/index.d.ts +56 -0
  328. package/dist/esm/components/ui/copy-field/index.d.ts.map +1 -0
  329. package/dist/esm/components/ui/copy-field/index.js +119 -0
  330. package/dist/esm/components/ui/dialog/index.d.ts +16 -0
  331. package/dist/esm/components/ui/dialog/index.d.ts.map +1 -0
  332. package/dist/esm/components/ui/dialog/index.js +36 -0
  333. package/dist/esm/components/ui/dropdown-menu/index.d.ts +27 -0
  334. package/dist/esm/components/ui/dropdown-menu/index.d.ts.map +1 -0
  335. package/dist/esm/components/ui/dropdown-menu/index.js +57 -0
  336. package/dist/esm/components/ui/field/index.d.ts +25 -0
  337. package/dist/esm/components/ui/field/index.d.ts.map +1 -0
  338. package/dist/esm/components/ui/field/index.js +68 -0
  339. package/dist/esm/components/ui/file-upload/index.d.ts +94 -0
  340. package/dist/esm/components/ui/file-upload/index.d.ts.map +1 -0
  341. package/dist/esm/components/ui/file-upload/index.js +200 -0
  342. package/dist/esm/components/ui/form.d.ts +39 -0
  343. package/dist/esm/components/ui/form.d.ts.map +1 -0
  344. package/dist/esm/components/ui/form.js +67 -0
  345. package/dist/esm/components/ui/hover-card/index.d.ts +7 -0
  346. package/dist/esm/components/ui/hover-card/index.d.ts.map +1 -0
  347. package/dist/esm/components/ui/hover-card/index.js +14 -0
  348. package/dist/esm/components/ui/icon-button/index.d.ts +13 -0
  349. package/dist/esm/components/ui/icon-button/index.d.ts.map +1 -0
  350. package/dist/esm/components/ui/icon-button/index.js +31 -0
  351. package/dist/esm/components/ui/input/adornment.d.ts +9 -0
  352. package/dist/esm/components/ui/input/adornment.d.ts.map +1 -0
  353. package/dist/esm/components/ui/input/adornment.js +17 -0
  354. package/dist/esm/components/ui/input/index.d.ts +18 -0
  355. package/dist/esm/components/ui/input/index.d.ts.map +1 -0
  356. package/dist/esm/components/ui/input/index.js +60 -0
  357. package/dist/esm/components/ui/label/index.d.ts +7 -0
  358. package/dist/esm/components/ui/label/index.d.ts.map +1 -0
  359. package/dist/esm/components/ui/label/index.js +10 -0
  360. package/dist/esm/components/ui/loading-button/index.d.ts +8 -0
  361. package/dist/esm/components/ui/loading-button/index.d.ts.map +1 -0
  362. package/dist/esm/components/ui/loading-button/index.js +7 -0
  363. package/dist/esm/components/ui/multiple-select/index.d.ts +91 -0
  364. package/dist/esm/components/ui/multiple-select/index.d.ts.map +1 -0
  365. package/dist/esm/components/ui/multiple-select/index.js +196 -0
  366. package/dist/esm/components/ui/otp-input/index.d.ts +13 -0
  367. package/dist/esm/components/ui/otp-input/index.d.ts.map +1 -0
  368. package/dist/esm/components/ui/otp-input/index.js +21 -0
  369. package/dist/esm/components/ui/paper/index.d.ts +4 -0
  370. package/dist/esm/components/ui/paper/index.d.ts.map +1 -0
  371. package/dist/esm/components/ui/paper/index.js +5 -0
  372. package/dist/esm/components/ui/paper-collapsible/index.d.ts +9 -0
  373. package/dist/esm/components/ui/paper-collapsible/index.d.ts.map +1 -0
  374. package/dist/esm/components/ui/paper-collapsible/index.js +19 -0
  375. package/dist/esm/components/ui/popover/index.d.ts +8 -0
  376. package/dist/esm/components/ui/popover/index.d.ts.map +1 -0
  377. package/dist/esm/components/ui/popover/index.js +17 -0
  378. package/dist/esm/components/ui/progress/index.d.ts +8 -0
  379. package/dist/esm/components/ui/progress/index.d.ts.map +1 -0
  380. package/dist/esm/components/ui/progress/index.js +8 -0
  381. package/dist/esm/components/ui/qr-code/index.d.ts +26 -0
  382. package/dist/esm/components/ui/qr-code/index.d.ts.map +1 -0
  383. package/dist/esm/components/ui/qr-code/index.js +24 -0
  384. package/dist/esm/components/ui/radio-group/index.d.ts +6 -0
  385. package/dist/esm/components/ui/radio-group/index.d.ts.map +1 -0
  386. package/dist/esm/components/ui/radio-group/index.js +12 -0
  387. package/dist/esm/components/ui/scroll-area/index.d.ts +6 -0
  388. package/dist/esm/components/ui/scroll-area/index.d.ts.map +1 -0
  389. package/dist/esm/components/ui/scroll-area/index.js +13 -0
  390. package/dist/esm/components/ui/select/index.d.ts +18 -0
  391. package/dist/esm/components/ui/select/index.d.ts.map +1 -0
  392. package/dist/esm/components/ui/select/index.js +47 -0
  393. package/dist/esm/components/ui/separator/index.d.ts +5 -0
  394. package/dist/esm/components/ui/separator/index.d.ts.map +1 -0
  395. package/dist/esm/components/ui/separator/index.js +8 -0
  396. package/dist/esm/components/ui/sheet/index.d.ts +19 -0
  397. package/dist/esm/components/ui/sheet/index.d.ts.map +1 -0
  398. package/dist/esm/components/ui/sheet/index.js +59 -0
  399. package/dist/esm/components/ui/sidebar/index.d.ts +11 -0
  400. package/dist/esm/components/ui/sidebar/index.d.ts.map +1 -0
  401. package/dist/esm/components/ui/sidebar/index.js +10 -0
  402. package/dist/esm/components/ui/sidebar/next-router.cjs +119 -0
  403. package/dist/esm/components/ui/sidebar/next-router.d.cts +7 -0
  404. package/dist/esm/components/ui/sidebar/sidebar-back-button.d.ts +3 -0
  405. package/dist/esm/components/ui/sidebar/sidebar-back-button.d.ts.map +1 -0
  406. package/dist/esm/components/ui/sidebar/sidebar-back-button.js +5 -0
  407. package/dist/esm/components/ui/sidebar/sidebar-components.d.ts +23 -0
  408. package/dist/esm/components/ui/sidebar/sidebar-components.d.ts.map +1 -0
  409. package/dist/esm/components/ui/sidebar/sidebar-components.js +15 -0
  410. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts +7 -0
  411. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -0
  412. package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +12 -0
  413. package/dist/esm/components/ui/sidebar/sidebar-item-button.d.ts +12 -0
  414. package/dist/esm/components/ui/sidebar/sidebar-item-button.d.ts.map +1 -0
  415. package/dist/esm/components/ui/sidebar/sidebar-item-button.js +18 -0
  416. package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.d.ts +12 -0
  417. package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.d.ts.map +1 -0
  418. package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.js +44 -0
  419. package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.d.ts +12 -0
  420. package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.d.ts.map +1 -0
  421. package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.js +14 -0
  422. package/dist/esm/components/ui/sidebar/sidebar-item.d.ts +13 -0
  423. package/dist/esm/components/ui/sidebar/sidebar-item.d.ts.map +1 -0
  424. package/dist/esm/components/ui/sidebar/sidebar-item.js +16 -0
  425. package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts +12 -0
  426. package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts.map +1 -0
  427. package/dist/esm/components/ui/sidebar/sidebar-provider.js +51 -0
  428. package/dist/esm/components/ui/sidebar/sidebar-root.d.ts +3 -0
  429. package/dist/esm/components/ui/sidebar/sidebar-root.d.ts.map +1 -0
  430. package/dist/esm/components/ui/sidebar/sidebar-root.js +20 -0
  431. package/dist/esm/components/ui/sidebar/sidebar-router.d.ts +82 -0
  432. package/dist/esm/components/ui/sidebar/sidebar-router.d.ts.map +1 -0
  433. package/dist/esm/components/ui/sidebar/sidebar-router.js +89 -0
  434. package/dist/esm/components/ui/skeleton/index.d.ts +3 -0
  435. package/dist/esm/components/ui/skeleton/index.d.ts.map +1 -0
  436. package/dist/esm/components/ui/skeleton/index.js +6 -0
  437. package/dist/esm/components/ui/stepper/index.d.ts +18 -0
  438. package/dist/esm/components/ui/stepper/index.d.ts.map +1 -0
  439. package/dist/esm/components/ui/stepper/index.js +20 -0
  440. package/dist/esm/components/ui/switch/index.d.ts +5 -0
  441. package/dist/esm/components/ui/switch/index.d.ts.map +1 -0
  442. package/dist/esm/components/ui/switch/index.js +8 -0
  443. package/dist/esm/components/ui/table/index.d.ts +21 -0
  444. package/dist/esm/components/ui/table/index.d.ts.map +1 -0
  445. package/dist/esm/components/ui/table/index.js +44 -0
  446. package/dist/esm/components/ui/tabs/index.d.ts +8 -0
  447. package/dist/esm/components/ui/tabs/index.d.ts.map +1 -0
  448. package/dist/esm/components/ui/tabs/index.js +17 -0
  449. package/dist/esm/components/ui/textarea/index.d.ts +4 -0
  450. package/dist/esm/components/ui/textarea/index.d.ts.map +1 -0
  451. package/dist/esm/components/ui/textarea/index.js +6 -0
  452. package/dist/esm/components/ui/time-picker/index.d.ts +18 -0
  453. package/dist/esm/components/ui/time-picker/index.d.ts.map +1 -0
  454. package/dist/esm/components/ui/time-picker/index.js +49 -0
  455. package/dist/esm/components/ui/toast/index.d.ts +18 -0
  456. package/dist/esm/components/ui/toast/index.d.ts.map +1 -0
  457. package/dist/esm/components/ui/toast/index.js +2 -0
  458. package/dist/esm/components/ui/toast/toaster.d.ts +6 -0
  459. package/dist/esm/components/ui/toast/toaster.d.ts.map +1 -0
  460. package/dist/esm/components/ui/toast/toaster.js +8 -0
  461. package/dist/esm/components/ui/toggle-group/index.d.ts +18 -0
  462. package/dist/esm/components/ui/toggle-group/index.d.ts.map +1 -0
  463. package/dist/esm/components/ui/toggle-group/index.js +51 -0
  464. package/dist/esm/components/ui/tooltip/index.d.ts +11 -0
  465. package/dist/esm/components/ui/tooltip/index.d.ts.map +1 -0
  466. package/dist/esm/components/ui/tooltip/index.js +28 -0
  467. package/dist/esm/domain/blotter/index.d.ts +40 -0
  468. package/dist/esm/domain/blotter/index.d.ts.map +1 -0
  469. package/dist/esm/domain/blotter/index.js +12 -0
  470. package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts +57 -0
  471. package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts.map +1 -0
  472. package/dist/esm/domain/delinquency-aging/aging-buckets.js +105 -0
  473. package/dist/esm/domain/delinquency-aging/index.d.ts +71 -0
  474. package/dist/esm/domain/delinquency-aging/index.d.ts.map +1 -0
  475. package/dist/esm/domain/delinquency-aging/index.js +209 -0
  476. package/dist/esm/domain/figure/index.d.ts +30 -0
  477. package/dist/esm/domain/figure/index.d.ts.map +1 -0
  478. package/dist/esm/domain/figure/index.js +14 -0
  479. package/dist/esm/domain/format.d.ts +79 -0
  480. package/dist/esm/domain/format.d.ts.map +1 -0
  481. package/dist/esm/domain/format.js +128 -0
  482. package/dist/esm/domain/index.d.ts +23 -0
  483. package/dist/esm/domain/index.d.ts.map +1 -0
  484. package/dist/esm/domain/index.js +19 -0
  485. package/dist/esm/domain/key-id/index.d.ts +31 -0
  486. package/dist/esm/domain/key-id/index.d.ts.map +1 -0
  487. package/dist/esm/domain/key-id/index.js +169 -0
  488. package/dist/esm/domain/ledger-sheet/index.d.ts +45 -0
  489. package/dist/esm/domain/ledger-sheet/index.d.ts.map +1 -0
  490. package/dist/esm/domain/ledger-sheet/index.js +24 -0
  491. package/dist/esm/domain/money-diff.d.ts +28 -0
  492. package/dist/esm/domain/money-diff.d.ts.map +1 -0
  493. package/dist/esm/domain/money-diff.js +45 -0
  494. package/dist/esm/domain/money-math.d.ts +32 -0
  495. package/dist/esm/domain/money-math.d.ts.map +1 -0
  496. package/dist/esm/domain/money-math.js +98 -0
  497. package/dist/esm/domain/money-text/index.d.ts +37 -0
  498. package/dist/esm/domain/money-text/index.d.ts.map +1 -0
  499. package/dist/esm/domain/money-text/index.js +110 -0
  500. package/dist/esm/domain/section-label/index.d.ts +21 -0
  501. package/dist/esm/domain/section-label/index.d.ts.map +1 -0
  502. package/dist/esm/domain/section-label/index.js +10 -0
  503. package/dist/esm/domain/status-rail/index.d.ts +40 -0
  504. package/dist/esm/domain/status-rail/index.d.ts.map +1 -0
  505. package/dist/esm/domain/status-rail/index.js +67 -0
  506. package/dist/esm/domain/threshold-gauge/index.d.ts +84 -0
  507. package/dist/esm/domain/threshold-gauge/index.d.ts.map +1 -0
  508. package/dist/esm/domain/threshold-gauge/index.js +153 -0
  509. package/dist/esm/enterprise/alert-banner/index.d.ts +30 -0
  510. package/dist/esm/enterprise/alert-banner/index.d.ts.map +1 -0
  511. package/dist/esm/enterprise/alert-banner/index.js +21 -0
  512. package/dist/esm/enterprise/app-shell/index.d.ts +61 -0
  513. package/dist/esm/enterprise/app-shell/index.d.ts.map +1 -0
  514. package/dist/esm/enterprise/app-shell/index.js +51 -0
  515. package/dist/esm/enterprise/cursor-pager/index.d.ts +21 -0
  516. package/dist/esm/enterprise/cursor-pager/index.d.ts.map +1 -0
  517. package/dist/esm/enterprise/cursor-pager/index.js +23 -0
  518. package/dist/esm/enterprise/data-table/index.d.ts +88 -0
  519. package/dist/esm/enterprise/data-table/index.d.ts.map +1 -0
  520. package/dist/esm/enterprise/data-table/index.js +242 -0
  521. package/dist/esm/enterprise/date-range-picker/index.d.ts +37 -0
  522. package/dist/esm/enterprise/date-range-picker/index.d.ts.map +1 -0
  523. package/dist/esm/enterprise/date-range-picker/index.js +89 -0
  524. package/dist/esm/enterprise/detail-panel/index.d.ts +54 -0
  525. package/dist/esm/enterprise/detail-panel/index.d.ts.map +1 -0
  526. package/dist/esm/enterprise/detail-panel/index.js +17 -0
  527. package/dist/esm/enterprise/empty-state/index.d.ts +32 -0
  528. package/dist/esm/enterprise/empty-state/index.d.ts.map +1 -0
  529. package/dist/esm/enterprise/empty-state/index.js +10 -0
  530. package/dist/esm/enterprise/index.d.ts +26 -0
  531. package/dist/esm/enterprise/index.d.ts.map +1 -0
  532. package/dist/esm/enterprise/index.js +22 -0
  533. package/dist/esm/enterprise/number-input/index.d.ts +55 -0
  534. package/dist/esm/enterprise/number-input/index.d.ts.map +1 -0
  535. package/dist/esm/enterprise/number-input/index.js +214 -0
  536. package/dist/esm/enterprise/search-input/index.d.ts +32 -0
  537. package/dist/esm/enterprise/search-input/index.d.ts.map +1 -0
  538. package/dist/esm/enterprise/search-input/index.js +85 -0
  539. package/dist/esm/enterprise/stat-card/index.d.ts +43 -0
  540. package/dist/esm/enterprise/stat-card/index.d.ts.map +1 -0
  541. package/dist/esm/enterprise/stat-card/index.js +64 -0
  542. package/dist/esm/enterprise/status-badge/index.d.ts +31 -0
  543. package/dist/esm/enterprise/status-badge/index.d.ts.map +1 -0
  544. package/dist/esm/enterprise/status-badge/index.js +116 -0
  545. package/dist/esm/enterprise/use-is-mobile.d.ts +20 -0
  546. package/dist/esm/enterprise/use-is-mobile.d.ts.map +1 -0
  547. package/dist/esm/enterprise/use-is-mobile.js +31 -0
  548. package/dist/esm/enterprise/virtualized-table/index.d.ts +26 -0
  549. package/dist/esm/enterprise/virtualized-table/index.d.ts.map +1 -0
  550. package/dist/esm/enterprise/virtualized-table/index.js +111 -0
  551. package/dist/esm/hooks/use-click-away.d.ts +9 -0
  552. package/dist/esm/hooks/use-click-away.d.ts.map +1 -0
  553. package/dist/esm/hooks/use-click-away.js +22 -0
  554. package/dist/esm/hooks/use-pagination.d.ts +13 -0
  555. package/dist/esm/hooks/use-pagination.d.ts.map +1 -0
  556. package/dist/esm/hooks/use-pagination.js +38 -0
  557. package/dist/esm/hooks/use-stepper.d.ts +11 -0
  558. package/dist/esm/hooks/use-stepper.d.ts.map +1 -0
  559. package/dist/esm/hooks/use-stepper.js +22 -0
  560. package/dist/esm/hooks/use-time.d.ts +6 -0
  561. package/dist/esm/hooks/use-time.d.ts.map +1 -0
  562. package/dist/esm/hooks/use-time.js +13 -0
  563. package/dist/esm/hooks/use-toast.d.ts +31 -0
  564. package/dist/esm/hooks/use-toast.d.ts.map +1 -0
  565. package/dist/esm/hooks/use-toast.js +63 -0
  566. package/dist/esm/index.d.ts +69 -0
  567. package/dist/esm/index.d.ts.map +1 -0
  568. package/dist/esm/index.js +74 -0
  569. package/dist/esm/lib/storage/get-storage-object.d.ts +2 -0
  570. package/dist/esm/lib/storage/get-storage-object.d.ts.map +1 -0
  571. package/dist/esm/lib/storage/get-storage-object.js +17 -0
  572. package/dist/esm/lib/storage/get-storage.d.ts +2 -0
  573. package/dist/esm/lib/storage/get-storage.d.ts.map +1 -0
  574. package/dist/esm/lib/storage/get-storage.js +14 -0
  575. package/dist/esm/lib/storage/index.d.ts +3 -0
  576. package/dist/esm/lib/storage/index.d.ts.map +1 -0
  577. package/dist/esm/lib/storage/index.js +2 -0
  578. package/dist/esm/lib/typography.d.ts +17 -0
  579. package/dist/esm/lib/typography.d.ts.map +1 -0
  580. package/dist/esm/lib/typography.js +16 -0
  581. package/dist/esm/lib/utils.d.ts +3 -0
  582. package/dist/esm/lib/utils.d.ts.map +1 -0
  583. package/dist/esm/lib/utils.js +5 -0
  584. package/dist/esm/package.json +1 -0
  585. package/dist/esm/public/countries.json +21210 -0
  586. package/dist/esm/theme/get-theme-script.d.ts +3 -0
  587. package/dist/esm/theme/get-theme-script.d.ts.map +1 -0
  588. package/dist/esm/theme/get-theme-script.js +41 -0
  589. package/dist/esm/theme/index.d.ts +6 -0
  590. package/dist/esm/theme/index.d.ts.map +1 -0
  591. package/dist/esm/theme/index.js +4 -0
  592. package/dist/esm/theme/mode-toggle.d.ts +25 -0
  593. package/dist/esm/theme/mode-toggle.d.ts.map +1 -0
  594. package/dist/esm/theme/mode-toggle.js +45 -0
  595. package/dist/esm/theme/theme-provider.d.ts +38 -0
  596. package/dist/esm/theme/theme-provider.d.ts.map +1 -0
  597. package/dist/esm/theme/theme-provider.js +112 -0
  598. package/dist/esm/toast/helpers.d.ts +16 -0
  599. package/dist/esm/toast/helpers.d.ts.map +1 -0
  600. package/dist/esm/toast/helpers.js +29 -0
  601. package/dist/esm/toast/index.d.ts +3 -0
  602. package/dist/esm/toast/index.d.ts.map +1 -0
  603. package/dist/esm/toast/index.js +4 -0
  604. package/dist/esm/types/metadata-type.d.ts +2 -0
  605. package/dist/esm/types/metadata-type.d.ts.map +1 -0
  606. package/dist/esm/types/metadata-type.js +1 -0
  607. package/dist/esm/utils/countries.cjs +17 -0
  608. package/dist/esm/utils/countries.d.cts +14 -0
  609. package/dist/esm/utils/country-utils.d.ts +17 -0
  610. package/dist/esm/utils/country-utils.d.ts.map +1 -0
  611. package/dist/esm/utils/country-utils.js +18 -0
  612. package/dist/esm/utils/currency-codes.d.ts +5 -0
  613. package/dist/esm/utils/currency-codes.d.ts.map +1 -0
  614. package/dist/esm/utils/currency-codes.js +181 -0
  615. package/dist/globals.css +74 -0
  616. package/dist/hooks/use-toast.d.ts +1 -1
  617. package/dist/hooks/use-toast.d.ts.map +1 -1
  618. package/dist/hooks/use-toast.js +4 -0
  619. package/dist/index.d.ts +16 -0
  620. package/dist/index.d.ts.map +1 -1
  621. package/dist/index.js +21 -1
  622. package/dist/lib/storage/get-storage-object.d.ts.map +1 -1
  623. package/dist/lib/storage/get-storage-object.js +6 -2
  624. package/dist/lib/typography.d.ts +17 -0
  625. package/dist/lib/typography.d.ts.map +1 -0
  626. package/dist/lib/typography.js +19 -0
  627. package/dist/public/countries.json +21200 -21200
  628. package/dist/theme/get-theme-script.d.ts +3 -0
  629. package/dist/theme/get-theme-script.d.ts.map +1 -0
  630. package/dist/theme/get-theme-script.js +44 -0
  631. package/dist/theme/index.d.ts +6 -0
  632. package/dist/theme/index.d.ts.map +1 -0
  633. package/dist/theme/index.js +11 -0
  634. package/dist/theme/mode-toggle.d.ts +25 -0
  635. package/dist/theme/mode-toggle.d.ts.map +1 -0
  636. package/dist/theme/mode-toggle.js +48 -0
  637. package/dist/theme/theme-provider.d.ts +38 -0
  638. package/dist/theme/theme-provider.d.ts.map +1 -0
  639. package/dist/theme/theme-provider.js +149 -0
  640. package/dist/toast/helpers.d.ts +16 -0
  641. package/dist/toast/helpers.d.ts.map +1 -0
  642. package/dist/toast/helpers.js +34 -0
  643. package/dist/toast/index.d.ts +3 -0
  644. package/dist/toast/index.d.ts.map +1 -0
  645. package/dist/toast/index.js +10 -0
  646. package/dist/utils/countries.cjs +17 -0
  647. package/dist/utils/countries.d.cts +14 -0
  648. package/dist/utils/country-utils.js +2 -2
  649. package/package.json +55 -18
  650. package/dist/components/ui/label/label.stories.d.ts +0 -5
  651. package/dist/components/ui/label/label.stories.d.ts.map +0 -1
  652. package/dist/components/ui/label/label.stories.js +0 -24
  653. package/dist/components/ui/sidebar/sidebar-provider.test.d.ts +0 -2
  654. package/dist/components/ui/sidebar/sidebar-provider.test.d.ts.map +0 -1
  655. package/dist/components/ui/sidebar/sidebar-provider.test.js +0 -170
  656. package/dist/hooks/use-click-away.test.d.ts +0 -2
  657. package/dist/hooks/use-click-away.test.d.ts.map +0 -1
  658. package/dist/hooks/use-click-away.test.js +0 -39
  659. package/dist/hooks/use-stepper.test.d.ts +0 -2
  660. package/dist/hooks/use-stepper.test.d.ts.map +0 -1
  661. package/dist/hooks/use-stepper.test.js +0 -45
@@ -0,0 +1,22 @@
1
+ // Owned by lane enterprise — see docs/plans/2026-08-26-sindarian-x-retirement/
2
+ //
3
+ // The composed enterprise layer absorbed from @lerianstudio/sindarian-x@0.15.0.
4
+ // Outer public APIs are byte-compatible with that package; internals are
5
+ // recomposed over sindarian-ui primitives and its design tokens.
6
+ //
7
+ // Names already exported by sindarian-ui are NEVER re-exported here (FC-4):
8
+ // consumers adapt to sindarian-ui's API for Button, Badge, Table*, Sidebar*,
9
+ // EntityBox*, Stepper*, PageHeader, ConfirmationDialog and friends.
10
+ export { AlertBanner } from './alert-banner/index.js';
11
+ export { AppShell } from './app-shell/index.js';
12
+ export { CursorPager } from './cursor-pager/index.js';
13
+ export { DataTable } from './data-table/index.js';
14
+ export { DateRangePicker } from './date-range-picker/index.js';
15
+ export { DetailPanel } from './detail-panel/index.js';
16
+ export { EmptyState } from './empty-state/index.js';
17
+ export { NumberInput } from './number-input/index.js';
18
+ export { SearchInput } from './search-input/index.js';
19
+ export { StatCard } from './stat-card/index.js';
20
+ export { DEFAULT_STATUS_VARIANTS, StatusBadge } from './status-badge/index.js';
21
+ export { VirtualizedTable } from './virtualized-table/index.js';
22
+ export { useIsMobile } from './use-is-mobile.js';
@@ -0,0 +1,55 @@
1
+ /**
2
+ * NumberInput — a controlled numeric input with +/- steppers.
3
+ *
4
+ * Composes sindarian-ui's Input (the text field) and IconButton (the two
5
+ * steppers). The external contract is a plain `number | null` (null = empty).
6
+ * Steppers step by `step` and clamp the result to [min, max]. While focused the
7
+ * field shows the raw, editable string the user is typing; on blur it reformats
8
+ * the committed number via Intl.NumberFormat(locale, { maximumFractionDigits:
9
+ * precision }) (e.g. 1,234.50). Parsing always emits the raw number, so digits
10
+ * the user types are never silently rewritten mid-edit.
11
+ */
12
+ import * as React from 'react';
13
+ export type NumberInputProps = {
14
+ /** Committed value. `null` means the field is empty. */
15
+ value: number | null;
16
+ /** Fires on every edit and stepper press; `null` when the field is cleared. */
17
+ onValueChange: (next: number | null) => void;
18
+ min?: number;
19
+ max?: number;
20
+ /** Stepper increment. Defaults to 1. */
21
+ step?: number;
22
+ /** Fraction digits used for the blurred Intl.NumberFormat display. */
23
+ precision?: number;
24
+ /** BCP 47 locale tag for the blurred display. Defaults to the host's. */
25
+ locale?: string;
26
+ disabled?: boolean;
27
+ /** Accessible label for the field; also names the +/- buttons. */
28
+ 'aria-label'?: string;
29
+ /** Wired as aria-describedby on the input. */
30
+ 'aria-describedby'?: string;
31
+ /** id (and de-facto testid) for the input element. */
32
+ id?: string;
33
+ className?: string;
34
+ placeholder?: string;
35
+ };
36
+ /**
37
+ * Parse the editable string into a number, round-tripping the component's
38
+ * `locale`: strip the locale group separators, swap the locale decimal mark to
39
+ * '.', then `Number()`. Null when empty/unparseable.
40
+ *
41
+ * Internal (not part of the public barrel) but exported for its unit tests —
42
+ * numeric-entry correctness is the load-bearing behavior here.
43
+ */
44
+ export declare function parseRaw(raw: string, locale?: string): number | null;
45
+ /**
46
+ * A transient partial entry that should not commit yet — a lone sign, a lone
47
+ * decimal mark, sign+decimal, or a value ending in the decimal mark (the user
48
+ * is still typing). Suppressing these keeps the external value from
49
+ * round-tripping through `null` mid-edit.
50
+ *
51
+ * Internal (not part of the public barrel) but exported for its unit tests.
52
+ */
53
+ export declare function isTransientPartial(raw: string, locale?: string): boolean;
54
+ export declare function NumberInput({ value, onValueChange, min, max, step, precision, locale, disabled, id, className, placeholder, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy }: NumberInputProps): React.JSX.Element;
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/enterprise/number-input/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,+EAA+E;IAC/E,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAmED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAMxE;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,GAAG,EACH,GAAG,EACH,IAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAgB,EAChB,EAAE,EACF,SAAS,EACT,WAAW,EACX,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACpC,EAAE,gBAAgB,qBAgJlB"}
@@ -0,0 +1,214 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * NumberInput — a controlled numeric input with +/- steppers.
5
+ *
6
+ * Composes sindarian-ui's Input (the text field) and IconButton (the two
7
+ * steppers). The external contract is a plain `number | null` (null = empty).
8
+ * Steppers step by `step` and clamp the result to [min, max]. While focused the
9
+ * field shows the raw, editable string the user is typing; on blur it reformats
10
+ * the committed number via Intl.NumberFormat(locale, { maximumFractionDigits:
11
+ * precision }) (e.g. 1,234.50). Parsing always emits the raw number, so digits
12
+ * the user types are never silently rewritten mid-edit.
13
+ */
14
+ import * as React from 'react';
15
+ import { Minus, Plus } from 'lucide-react';
16
+ import { safeLocale } from '../../domain/format.js';
17
+ import { IconButton } from '../../components/ui/icon-button/index.js';
18
+ import { Input } from '../../components/ui/input/index.js';
19
+ import { cn } from '../../lib/utils.js';
20
+ function clamp(value, min, max) {
21
+ let next = value;
22
+ if (typeof min === 'number' && next < min)
23
+ next = min;
24
+ if (typeof max === 'number' && next > max)
25
+ next = max;
26
+ return next;
27
+ }
28
+ /**
29
+ * `Number.prototype.toFixed` rejects more than 100 fraction digits. Denormals
30
+ * genuinely need more (`decimalPlaces(5e-324)` is 324), so this is a RangeError
31
+ * guard, not a precision policy — no step a person types comes close.
32
+ */
33
+ const MAX_FIXED_DIGITS = 100;
34
+ /**
35
+ * Fraction digits a number carries, reading exponent notation correctly.
36
+ * `String(1e-7)` is `'1e-7'`, which has no '.' at all, so counting characters
37
+ * after a decimal point reports 0 and silently kills any step below 1e-6.
38
+ * `toExponential()` gives a canonical mantissa/exponent pair instead:
39
+ * 1e-7 -> mantissa '1', exponent -7 -> 7 fraction digits.
40
+ */
41
+ function decimalPlaces(value) {
42
+ if (!Number.isFinite(value) || Number.isInteger(value))
43
+ return 0;
44
+ const [mantissa, exponent] = value.toExponential().split('e');
45
+ const mantissaDigits = (mantissa.split('.')[1] ?? '').length;
46
+ return Math.max(0, mantissaDigits - Number(exponent));
47
+ }
48
+ /**
49
+ * Snap a stepped result to the fraction digits its own operands carry, so
50
+ * binary float drift never escapes to the parent: stepping 0.1 by 0.2 must
51
+ * commit 0.3, not 0.30000000000000004.
52
+ *
53
+ * Anchoring on the OPERANDS is what makes this safe at both ends of the range.
54
+ * Rounding to a fixed number of significant digits cannot work: at 1e15 the
55
+ * 15th significant digit is the units place, so 1e15 + 0.5 would snap straight
56
+ * back to 1e15 and the stepper would die. Nor can a "is this change small
57
+ * enough to be noise?" tolerance decide it — 1e15 + 0.125 is exactly
58
+ * representable and must be kept, yet its relative distance from the rounded
59
+ * form (1.25e-16) is SMALLER than genuine drift in 0.1 + 0.2 (1.85e-16), so no
60
+ * threshold separates the two cases. The operands do: `1e15` and `0.5` need one
61
+ * fraction digit between them, `0.1` and `0.2` also one, and rounding each
62
+ * result to its own digit count keeps the first and repairs the second.
63
+ *
64
+ * `toFixed` (not `value * 10 ** digits`) does the rounding: the multiply
65
+ * overflows Number.MAX_SAFE_INTEGER for large values and hands back the very
66
+ * drift it was meant to remove.
67
+ */
68
+ function snapToStep(value, base, step) {
69
+ if (!Number.isFinite(value))
70
+ return value;
71
+ const digits = Math.min(MAX_FIXED_DIGITS, Math.max(decimalPlaces(base), decimalPlaces(step)));
72
+ return Number(value.toFixed(digits));
73
+ }
74
+ /** The locale's decimal and group separators, derived from a known sample. */
75
+ function localeSeparators(locale) {
76
+ const parts = new Intl.NumberFormat(safeLocale(locale)).formatToParts(11111.1);
77
+ const decimal = parts.find((p) => p.type === 'decimal')?.value ?? '.';
78
+ const group = parts.find((p) => p.type === 'group')?.value ?? '';
79
+ return { decimal, group };
80
+ }
81
+ /**
82
+ * Parse the editable string into a number, round-tripping the component's
83
+ * `locale`: strip the locale group separators, swap the locale decimal mark to
84
+ * '.', then `Number()`. Null when empty/unparseable.
85
+ *
86
+ * Internal (not part of the public barrel) but exported for its unit tests —
87
+ * numeric-entry correctness is the load-bearing behavior here.
88
+ */
89
+ export function parseRaw(raw, locale) {
90
+ const trimmed = raw.trim();
91
+ if (trimmed === '')
92
+ return null;
93
+ const { decimal, group } = localeSeparators(locale);
94
+ let normalized = trimmed;
95
+ if (group)
96
+ normalized = normalized.split(group).join('');
97
+ if (decimal !== '.')
98
+ normalized = normalized.split(decimal).join('.');
99
+ if (normalized === '')
100
+ return null;
101
+ const parsed = Number(normalized);
102
+ // NaN is not the only unusable result: `Number('1e999')` and `Number('Infinity')`
103
+ // are both `Infinity`, which passed the NaN check and was committed straight to
104
+ // `onValueChange`. An infinite committed value poisons everything downstream —
105
+ // `clamp` returns it verbatim with no `max`, `toFixed` cannot render it, and a
106
+ // form submits it. A non-finite entry is no number at all, so the committed
107
+ // value stays where it was.
108
+ return Number.isFinite(parsed) ? parsed : null;
109
+ }
110
+ /**
111
+ * A transient partial entry that should not commit yet — a lone sign, a lone
112
+ * decimal mark, sign+decimal, or a value ending in the decimal mark (the user
113
+ * is still typing). Suppressing these keeps the external value from
114
+ * round-tripping through `null` mid-edit.
115
+ *
116
+ * Internal (not part of the public barrel) but exported for its unit tests.
117
+ */
118
+ export function isTransientPartial(raw, locale) {
119
+ const trimmed = raw.trim();
120
+ if (trimmed === '')
121
+ return false;
122
+ const { decimal } = localeSeparators(locale);
123
+ const d = decimal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
124
+ return new RegExp(`^-?(${d})?$|${d}$`).test(trimmed);
125
+ }
126
+ export function NumberInput({ value, onValueChange, min, max, step = 1, precision, locale, disabled = false, id, className, placeholder, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy }) {
127
+ const [focused, setFocused] = React.useState(false);
128
+ // The string the user is editing. Only authoritative while focused.
129
+ const [draft, setDraft] = React.useState('');
130
+ // A step has to be a POSITIVE FINITE number or the control stops meaning what
131
+ // its buttons say: a negative step makes "+" decrease and "−" increase, a zero
132
+ // or NaN step commits a value that never progresses (and NaN escapes into the
133
+ // form), and an infinite step commits Infinity the moment `max` is unset.
134
+ // None of those is a step, so an unusable one falls back to the documented
135
+ // default of 1 rather than being fed to the arithmetic.
136
+ const safeStep = Number.isFinite(step) && step > 0 ? step : 1;
137
+ const formatter = React.useMemo(() => new Intl.NumberFormat(safeLocale(locale), {
138
+ maximumFractionDigits: precision ?? 20,
139
+ minimumFractionDigits: precision ?? 0,
140
+ useGrouping: true
141
+ }), [locale, precision]);
142
+ // Blurred display: locale-formatted committed value, or empty.
143
+ const displayValue = focused
144
+ ? draft
145
+ : value === null
146
+ ? ''
147
+ : formatter.format(value);
148
+ const commit = (next) => {
149
+ onValueChange(next);
150
+ };
151
+ const stepBy = (direction) => {
152
+ const base = value ?? 0;
153
+ // Snap FIRST, then clamp — never the other way round. Snapping rounds to
154
+ // the operands' fraction digits, so snapping a CLAMPED value rounds the
155
+ // bound itself: stepping 0.2 by 0.1 under max 0.25 clamps to 0.25, which
156
+ // then snaps to one digit as 0.3 and escapes the maximum. Clamping last
157
+ // makes the bound the final word, and `clamp` returns it verbatim, so a
158
+ // bound is emitted exactly as the caller gave it.
159
+ const next = clamp(snapToStep(base + direction * safeStep, base, safeStep), min, max);
160
+ commit(next);
161
+ // Seed the draft via the locale formatter so a stepper press doesn't flip
162
+ // the user's separators (e.g. ',' → '.').
163
+ if (focused)
164
+ setDraft(formatter.format(next));
165
+ };
166
+ const onChange = (event) => {
167
+ const raw = event.target.value;
168
+ setDraft(raw);
169
+ // Commit only a genuine clear or a parsed number; suppress transient
170
+ // partials ("-", ".", "-.", trailing separator) so typing a negative or
171
+ // decimal doesn't round-trip the external value through null mid-entry.
172
+ if (raw.trim() === '') {
173
+ commit(null);
174
+ return;
175
+ }
176
+ if (isTransientPartial(raw, locale))
177
+ return;
178
+ const parsed = parseRaw(raw, locale);
179
+ if (parsed !== null)
180
+ commit(parsed);
181
+ };
182
+ // Keyboard stepping (WCAG 2.1.1): the steppers are tabIndex={-1}, so the
183
+ // input owns keyboard interaction per the ARIA spinbutton pattern.
184
+ const onKeyDown = (event) => {
185
+ if (disabled)
186
+ return;
187
+ if (event.key === 'ArrowUp') {
188
+ event.preventDefault();
189
+ stepBy(1);
190
+ }
191
+ else if (event.key === 'ArrowDown') {
192
+ event.preventDefault();
193
+ stepBy(-1);
194
+ }
195
+ };
196
+ const onFocus = () => {
197
+ setFocused(true);
198
+ // Seed via the locale formatter (not String(value), which forces '.') so
199
+ // focusing doesn't flip the separator the user expects.
200
+ setDraft(value === null ? '' : formatter.format(value));
201
+ };
202
+ const onBlur = () => {
203
+ setFocused(false);
204
+ // Re-clamp the committed value so a typed out-of-range entry settles.
205
+ if (value !== null) {
206
+ const clamped = clamp(value, min, max);
207
+ if (clamped !== value)
208
+ commit(clamped);
209
+ }
210
+ };
211
+ const atMin = typeof min === 'number' && value !== null && value <= min;
212
+ const atMax = typeof max === 'number' && value !== null && value >= max;
213
+ return (_jsxs("div", { className: cn('inline-flex items-stretch gap-1', className), children: [_jsx(IconButton, { type: "button", variant: "outline", disabled: disabled || atMin, "aria-label": `Decrease${ariaLabel ? ` ${ariaLabel}` : ''}`, onClick: () => stepBy(-1), tabIndex: -1, children: _jsx(Minus, { className: "size-4", "aria-hidden": true }) }), _jsx("div", { className: "w-28", children: _jsx(Input, { id: id, inputMode: "decimal", role: "spinbutton", "aria-valuenow": value ?? undefined, "aria-valuemin": min, "aria-valuemax": max, className: "text-right tabular-nums", value: displayValue, placeholder: placeholder, disabled: disabled, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, onChange: onChange, onKeyDown: onKeyDown, onFocus: onFocus, onBlur: onBlur }) }), _jsx(IconButton, { type: "button", variant: "outline", disabled: disabled || atMax, "aria-label": `Increase${ariaLabel ? ` ${ariaLabel}` : ''}`, onClick: () => stepBy(1), tabIndex: -1, children: _jsx(Plus, { className: "size-4", "aria-hidden": true }) })] }));
214
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SearchInput — the console filter row's text field.
3
+ *
4
+ * A controlled text field with a leading search glyph and a trailing clear
5
+ * button that appears only when there is text. It debounces the *emission*
6
+ * (`onValueChange`) while keeping the visible field perfectly responsive: a
7
+ * local draft mirrors the controlled `value`, every keystroke updates the draft
8
+ * immediately, and a trailing timer flushes the draft to the parent after
9
+ * `debounceMs`. Clearing flushes synchronously (no lingering timer fighting an
10
+ * explicit empty).
11
+ *
12
+ * Composes sindarian-ui's Input via its start/end adornment slots.
13
+ */
14
+ import * as React from 'react';
15
+ export type SearchInputProps = {
16
+ /** Controlled value. The visible field mirrors this between keystrokes. */
17
+ value: string;
18
+ /** Debounced emission of the current text. */
19
+ onValueChange: (value: string) => void;
20
+ /** Trailing debounce in ms before `onValueChange` fires. Default 250. */
21
+ debounceMs?: number;
22
+ placeholder?: string;
23
+ /** Accessible label for the field (defaults to the placeholder or "Search"). */
24
+ 'aria-label'?: string;
25
+ /** Accessible label for the clear button. */
26
+ clearLabel?: string;
27
+ disabled?: boolean;
28
+ className?: string;
29
+ id?: string;
30
+ };
31
+ export declare function SearchInput({ value, onValueChange, debounceMs, placeholder, 'aria-label': ariaLabel, clearLabel, disabled, className, id }: SearchInputProps): React.JSX.Element;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/enterprise/search-input/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAa9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,UAAgB,EAChB,WAAuB,EACvB,YAAY,EAAE,SAAS,EACvB,UAA2B,EAC3B,QAAgB,EAChB,SAAS,EACT,EAAE,EACH,EAAE,gBAAgB,qBAsGlB"}
@@ -0,0 +1,85 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * SearchInput — the console filter row's text field.
5
+ *
6
+ * A controlled text field with a leading search glyph and a trailing clear
7
+ * button that appears only when there is text. It debounces the *emission*
8
+ * (`onValueChange`) while keeping the visible field perfectly responsive: a
9
+ * local draft mirrors the controlled `value`, every keystroke updates the draft
10
+ * immediately, and a trailing timer flushes the draft to the parent after
11
+ * `debounceMs`. Clearing flushes synchronously (no lingering timer fighting an
12
+ * explicit empty).
13
+ *
14
+ * Composes sindarian-ui's Input via its start/end adornment slots.
15
+ */
16
+ import * as React from 'react';
17
+ import { Search, X } from 'lucide-react';
18
+ import { IconButton } from '../../components/ui/icon-button/index.js';
19
+ import { Input, InputAdornment } from '../../components/ui/input/index.js';
20
+ import { cn } from '../../lib/utils.js';
21
+ /**
22
+ * Marks "no emission of ours is awaiting its echo". A unique object, not a
23
+ * string: any string sentinel is a value a parent could legitimately pass.
24
+ */
25
+ const NO_PENDING_ECHO = Symbol('no pending echo');
26
+ export function SearchInput({ value, onValueChange, debounceMs = 250, placeholder = 'Search…', 'aria-label': ariaLabel, clearLabel = 'Clear search', disabled = false, className, id }) {
27
+ // Local draft keeps typing instant; the controlled `value` is the source of
28
+ // truth between edits. When the parent changes `value` out of band (reset,
29
+ // programmatic set), the draft follows.
30
+ const [draft, setDraft] = React.useState(value);
31
+ const timer = React.useRef(null);
32
+ // The value this component last emitted and has not yet seen echoed back. The
33
+ // parent echoes it one render later, by which time the user may already have
34
+ // typed further — syncing the draft to that echo would rewind the field and
35
+ // swallow those keystrokes. Starts as the sentinel rather than `value`, so the
36
+ // initial value is never mistaken for an echo of something we sent.
37
+ const lastEmitted = React.useRef(NO_PENDING_ECHO);
38
+ React.useEffect(() => {
39
+ const isEcho = lastEmitted.current === value;
40
+ // ANY external change consumes the token, echo or not. Consuming it only on
41
+ // a match left a DROPPED emission pending forever: emit "pix", the parent
42
+ // rejects it and holds "", the parent later sets "foo" (draft follows, token
43
+ // still holding "pix"), the parent then sets "pix" — read as our own echo,
44
+ // so the draft stayed on "foo" and the visible field disagreed with the
45
+ // controlled value. A later external change is proof the parent moved on,
46
+ // which invalidates any echo still outstanding.
47
+ lastEmitted.current = NO_PENDING_ECHO;
48
+ // A genuine echo must NOT reach the draft: the parent echoes one render
49
+ // later, by which time the user may have typed further, and syncing would
50
+ // rewind the field and swallow those keystrokes.
51
+ if (isEcho)
52
+ return;
53
+ setDraft(value);
54
+ }, [value]);
55
+ const clearTimer = React.useCallback(() => {
56
+ if (timer.current !== null) {
57
+ clearTimeout(timer.current);
58
+ timer.current = null;
59
+ }
60
+ }, []);
61
+ // Cancel any pending debounced emission on unmount — don't fire a stale
62
+ // search into a parent that's tearing down. (Clearing flushes synchronously
63
+ // via handleClear, so a real clear is never lost.)
64
+ React.useEffect(() => clearTimer, [clearTimer]);
65
+ const handleChange = (event) => {
66
+ const next = event.target.value;
67
+ setDraft(next);
68
+ clearTimer();
69
+ timer.current = setTimeout(() => {
70
+ timer.current = null;
71
+ lastEmitted.current = next;
72
+ onValueChange(next);
73
+ }, debounceMs);
74
+ };
75
+ const handleClear = () => {
76
+ clearTimer();
77
+ setDraft('');
78
+ lastEmitted.current = '';
79
+ onValueChange('');
80
+ };
81
+ const hasValue = draft.length > 0;
82
+ return (_jsx("div", { className: cn('relative w-full sm:w-64', className), children: _jsx(Input, { id: id, type: "search", role: "searchbox", value: draft, onChange: handleChange, placeholder: placeholder, "aria-label": ariaLabel ?? placeholder ?? 'Search', disabled: disabled,
83
+ // The native search clear glyph would duplicate our button.
84
+ className: "[&::-webkit-search-cancel-button]:appearance-none", startAdornment: _jsx(InputAdornment, { position: "start", children: _jsx(Search, { "aria-hidden": true }) }), endAdornment: hasValue ? (_jsx(InputAdornment, { position: "end", children: _jsx(IconButton, { type: "button", variant: "plain", size: "small", "aria-label": clearLabel, disabled: disabled, onClick: handleClear, className: "text-muted-foreground hover:text-foreground", children: _jsx(X, { className: "size-4", "aria-hidden": true }) }) })) : undefined }) }));
85
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * StatCard — a single headline-figure cell of the console.
3
+ *
4
+ * A `LedgerPanel` holding a recessive `SectionLabel`, the dominant mono
5
+ * `Figure`, an optional delta line, an optional inline trend, and optional
6
+ * secondary `BlotterRow` key/value rows. Drop StatCards into a `LedgerSheet` so
7
+ * they read as connected hairline-seamed panels rather than floating cards.
8
+ *
9
+ * <StatCard label="Match rate" value="98.4%" delta="+0.6 pts" tone="success" />
10
+ * <StatCard label="In flight" value="R$ 129,004" trend={series} trendKey="v" />
11
+ *
12
+ * The `tone` escalates the value + delta color to a semantic theme token.
13
+ *
14
+ * NOTE (sindarian-x port): the legacy StatCard drew its trend with the
15
+ * recharts-backed Sparkline. That component is outside the port census, so the
16
+ * trend here is a dependency-free inline SVG; everything else composes the same
17
+ * ledger grammar the legacy card did.
18
+ */
19
+ import type { ReactNode } from 'react';
20
+ export type StatCardTone = 'default' | 'success' | 'warning' | 'destructive';
21
+ export type StatCardRow = {
22
+ label: ReactNode;
23
+ value: ReactNode;
24
+ };
25
+ export type StatCardProps = {
26
+ /** Recessive uppercase heading. */
27
+ label: string;
28
+ /** The dominant headline value — rendered in the hero mono figure. */
29
+ value: ReactNode;
30
+ /** Optional delta line below the value (e.g. `+0.6 pts`, `-3`). Inherits the tone color. */
31
+ delta?: ReactNode;
32
+ /** Semantic escalation for the value + delta color. */
33
+ tone?: StatCardTone;
34
+ /** Optional trend series for the inline sparkline. */
35
+ trend?: ReadonlyArray<Record<string, string | number | null>>;
36
+ /** Key in each `trend` datum to plot. Defaults to `value`. */
37
+ trendKey?: string;
38
+ /** Optional secondary key/value rows. */
39
+ rows?: StatCardRow[];
40
+ className?: string;
41
+ };
42
+ export declare function StatCard({ label, value, delta, tone, trend, trendKey, rows, className }: StatCardProps): import("react").JSX.Element;
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/enterprise/stat-card/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;AAoB5E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,KAAK,EAAE,SAAS,CAAA;IAChB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,uDAAuD;IACvD,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;IAC7D,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAwED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAgB,EAChB,KAAK,EACL,QAAkB,EAClB,IAAI,EACJ,SAAS,EACV,EAAE,aAAa,+BAgCf"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Blotter, BlotterRow } from '../../domain/blotter/index.js';
3
+ import { Figure } from '../../domain/figure/index.js';
4
+ import { LedgerPanel } from '../../domain/ledger-sheet/index.js';
5
+ import { SectionLabel } from '../../domain/section-label/index.js';
6
+ import { cn } from '../../lib/utils.js';
7
+ /** Value/delta color per tone. `default` keeps the high-contrast foreground;
8
+ * the rest escalate to a semantic theme token that tracks light/dark. */
9
+ const TONE_VALUE = {
10
+ default: 'text-foreground',
11
+ success: 'text-system-success-text',
12
+ warning: 'text-system-alert-text',
13
+ destructive: 'text-destructive'
14
+ };
15
+ /** Trend stroke color per tone. Resolved through the `--color-*` wrappers (the
16
+ * raw `--chart-N` tokens are bare HSL triples, not usable colors). */
17
+ const TONE_TREND = {
18
+ default: 'var(--color-chart-1)',
19
+ success: 'var(--color-system-success)',
20
+ warning: 'var(--color-system-alert)',
21
+ destructive: 'var(--color-destructive)'
22
+ };
23
+ const TREND_VIEWBOX_WIDTH = 100;
24
+ const TREND_VIEWBOX_HEIGHT = 40;
25
+ /**
26
+ * Chrome-less inline trend: no axes, grid, legend or tooltip. Decorative by
27
+ * construction (`aria-hidden`) — the figure above it carries the meaning.
28
+ * Renders nothing when fewer than two points are plottable.
29
+ */
30
+ function TrendSpark({ data, dataKey, color }) {
31
+ // Drop absent samples BEFORE coercing: Number(null) and Number('') are both
32
+ // 0, which would draw a phantom dip to the floor where the series simply has
33
+ // no reading.
34
+ const points = [];
35
+ for (const row of data) {
36
+ const raw = row[dataKey];
37
+ if (raw === null || raw === undefined || raw === '')
38
+ continue;
39
+ const n = Number(raw);
40
+ if (Number.isFinite(n))
41
+ points.push(n);
42
+ }
43
+ if (points.length < 2)
44
+ return null;
45
+ const min = Math.min(...points);
46
+ const max = Math.max(...points);
47
+ // A flat series has zero span; pin it to the vertical midline instead of
48
+ // dividing by zero.
49
+ const span = max - min;
50
+ const stepX = TREND_VIEWBOX_WIDTH / (points.length - 1);
51
+ const coords = points.map((n, i) => {
52
+ const x = i * stepX;
53
+ const y = span === 0
54
+ ? TREND_VIEWBOX_HEIGHT / 2
55
+ : TREND_VIEWBOX_HEIGHT - ((n - min) / span) * TREND_VIEWBOX_HEIGHT;
56
+ return `${x.toFixed(2)},${y.toFixed(2)}`;
57
+ });
58
+ return (_jsxs("svg", { "aria-hidden": true, role: "presentation", viewBox: `0 0 ${TREND_VIEWBOX_WIDTH} ${TREND_VIEWBOX_HEIGHT}`, preserveAspectRatio: "none", className: "h-10 w-full", children: [_jsx("polygon", { points: `0,${TREND_VIEWBOX_HEIGHT} ${coords.join(' ')} ${TREND_VIEWBOX_WIDTH},${TREND_VIEWBOX_HEIGHT}`, fill: color, fillOpacity: 0.15 }), _jsx("polyline", { points: coords.join(' '), fill: "none", stroke: color, strokeWidth: 1.75, vectorEffect: "non-scaling-stroke" })] }));
59
+ }
60
+ export function StatCard({ label, value, delta, tone = 'default', trend, trendKey = 'value', rows, className }) {
61
+ const hasTrend = trend !== undefined && trend.length > 0;
62
+ const hasRows = rows !== undefined && rows.length > 0;
63
+ return (_jsxs(LedgerPanel, { "data-tone": tone, className: className, children: [_jsx(SectionLabel, { children: label }), _jsxs("div", { className: "space-y-1", children: [_jsx(Figure, { size: "hero", className: cn('block', TONE_VALUE[tone]), children: value }), delta !== undefined ? (_jsx("p", { className: cn('font-mono text-xs tabular-nums', TONE_VALUE[tone]), children: delta })) : null] }), hasTrend ? (_jsx(TrendSpark, { data: trend, dataKey: trendKey, color: TONE_TREND[tone] })) : null, hasRows ? (_jsx(Blotter, { className: "mt-auto", children: rows.map((row, i) => (_jsx(BlotterRow, { label: row.label, value: row.value }, i))) })) : null] }));
64
+ }
@@ -0,0 +1,31 @@
1
+ import { type BadgeProps } from '../../components/ui/badge/index.js';
2
+ type BadgeVariant = NonNullable<BadgeProps['variant']>;
3
+ /**
4
+ * Generic lifecycle defaults — extend per-app via the `variantMap` prop.
5
+ *
6
+ * The KEYS are the frozen legacy contract (apps merge their own domain statuses
7
+ * into this map). The VALUES are sindarian-ui Badge variants: sindarian-ui is
8
+ * senior, so the legacy `muted`/`warning` variants resolve to sindarian-ui's
9
+ * `inactive`/`alert`.
10
+ */
11
+ export declare const DEFAULT_STATUS_VARIANTS: Record<string, BadgeVariant>;
12
+ export type StatusBadgeProps = {
13
+ /** Raw status/severity value (case-insensitive). */
14
+ status: string | null | undefined;
15
+ /** Override the displayed label; defaults to a humanized form. */
16
+ label?: string;
17
+ /** Shallow-merged over DEFAULT_STATUS_VARIANTS to add/override mappings. */
18
+ variantMap?: Record<string, BadgeVariant>;
19
+ /**
20
+ * Render the non-color severity cue: a leading glyph + an sr-only severity
21
+ * word, so the badge does not carry meaning by tint alone (WCAG 1.4.1).
22
+ * Opt-in; defaults to false to keep existing color-only usage unchanged.
23
+ */
24
+ withIcon?: boolean;
25
+ /** Label shown when `status` is empty. */
26
+ unknownLabel?: string;
27
+ className?: string;
28
+ };
29
+ export declare function StatusBadge({ status, label, variantMap, withIcon, unknownLabel, className }: StatusBadgeProps): import("react").JSX.Element;
30
+ export {};
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/enterprise/status-badge/index.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAG9D,KAAK,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA6BhE,CAAA;AAqDD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACzC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAAgB,EAChB,YAAwB,EACxB,SAAS,EACV,EAAE,gBAAgB,+BA6BlB"}