@comitor/ui 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +67 -24
  3. package/dist/chart/chart.d.ts +6 -1
  4. package/dist/chart/chart.js +3 -1
  5. package/dist/chart/chart.js.map +1 -1
  6. package/dist/chart/comitor-chart.d.ts +4 -1
  7. package/dist/chart/comitor-chart.js +3 -1
  8. package/dist/chart/comitor-chart.js.map +1 -1
  9. package/dist/components/composite/avatar-group.d.ts +9 -6
  10. package/dist/components/composite/avatar-group.js +6 -2
  11. package/dist/components/composite/avatar-group.js.map +1 -1
  12. package/dist/components/composite/combobox.d.ts +11 -11
  13. package/dist/components/composite/combobox.js +25 -11
  14. package/dist/components/composite/combobox.js.map +1 -1
  15. package/dist/components/composite/command-palette-constants.d.ts +15 -5
  16. package/dist/components/composite/command-palette-constants.js +3 -2
  17. package/dist/components/composite/command-palette-constants.js.map +1 -1
  18. package/dist/components/composite/command-palette.d.ts +2 -2
  19. package/dist/components/composite/command-palette.js +8 -5
  20. package/dist/components/composite/command-palette.js.map +1 -1
  21. package/dist/components/composite/confirm-dialog.d.ts +8 -8
  22. package/dist/components/composite/confirm-dialog.js +8 -3
  23. package/dist/components/composite/confirm-dialog.js.map +1 -1
  24. package/dist/components/composite/copy-button.d.ts +7 -3
  25. package/dist/components/composite/copy-button.js +7 -3
  26. package/dist/components/composite/copy-button.js.map +1 -1
  27. package/dist/components/composite/data-table-constants.d.ts +7 -3
  28. package/dist/components/composite/data-table-constants.js +2 -9
  29. package/dist/components/composite/data-table-constants.js.map +1 -1
  30. package/dist/components/composite/data-table.js +3 -3
  31. package/dist/components/composite/data-table.js.map +1 -1
  32. package/dist/components/composite/date-picker-constants.d.ts +32 -9
  33. package/dist/components/composite/date-picker-constants.js +16 -11
  34. package/dist/components/composite/date-picker-constants.js.map +1 -1
  35. package/dist/components/composite/date-picker.d.ts +19 -10
  36. package/dist/components/composite/date-picker.js +33 -9
  37. package/dist/components/composite/date-picker.js.map +1 -1
  38. package/dist/components/composite/filter-chips.d.ts +4 -3
  39. package/dist/components/composite/filter-chips.js +6 -2
  40. package/dist/components/composite/filter-chips.js.map +1 -1
  41. package/dist/components/composite/inline-edit.d.ts +14 -3
  42. package/dist/components/composite/inline-edit.js +8 -4
  43. package/dist/components/composite/inline-edit.js.map +1 -1
  44. package/dist/components/composite/relative-time.d.ts +4 -4
  45. package/dist/components/composite/relative-time.js +4 -2
  46. package/dist/components/composite/relative-time.js.map +1 -1
  47. package/dist/components/composite/route-tabs-nav.d.ts +9 -0
  48. package/dist/components/composite/route-tabs-nav.js +11 -0
  49. package/dist/components/composite/route-tabs-nav.js.map +1 -0
  50. package/dist/components/composite/route-tabs.d.ts +4 -1
  51. package/dist/components/composite/route-tabs.js +3 -2
  52. package/dist/components/composite/route-tabs.js.map +1 -1
  53. package/dist/components/composite/search-filter-bar-constants.d.ts +18 -8
  54. package/dist/components/composite/search-filter-bar-constants.js +2 -14
  55. package/dist/components/composite/search-filter-bar-constants.js.map +1 -1
  56. package/dist/components/composite/search-filter-bar.d.ts +5 -2
  57. package/dist/components/composite/search-filter-bar.js +2 -2
  58. package/dist/components/composite/search-filter-bar.js.map +1 -1
  59. package/dist/components/composite/stat-card.d.ts +1 -1
  60. package/dist/components/composite/table-pagination-constants.d.ts +16 -11
  61. package/dist/components/composite/table-pagination-constants.js +2 -12
  62. package/dist/components/composite/table-pagination-constants.js.map +1 -1
  63. package/dist/components/composite/table-pagination.d.ts +6 -3
  64. package/dist/components/composite/table-pagination.js +3 -5
  65. package/dist/components/composite/table-pagination.js.map +1 -1
  66. package/dist/components/composite/toast.d.ts +4 -2
  67. package/dist/components/composite/toast.js +9 -1
  68. package/dist/components/composite/toast.js.map +1 -1
  69. package/dist/components/ui/action-bar-constants.d.ts +35 -0
  70. package/dist/components/ui/action-bar-constants.js +6 -0
  71. package/dist/components/ui/action-bar-constants.js.map +1 -0
  72. package/dist/components/ui/action-bar.d.ts +68 -0
  73. package/dist/components/ui/action-bar.js +522 -0
  74. package/dist/components/ui/action-bar.js.map +1 -0
  75. package/dist/components/ui/alert.d.ts +1 -1
  76. package/dist/components/ui/badge-overflow.d.ts +30 -0
  77. package/dist/components/ui/badge-overflow.js +181 -0
  78. package/dist/components/ui/badge-overflow.js.map +1 -0
  79. package/dist/components/ui/badge.d.ts +1 -1
  80. package/dist/components/ui/banner.d.ts +80 -0
  81. package/dist/components/ui/banner.js +520 -0
  82. package/dist/components/ui/banner.js.map +1 -0
  83. package/dist/components/ui/breadcrumb.d.ts +11 -4
  84. package/dist/components/ui/breadcrumb.js +7 -2
  85. package/dist/components/ui/breadcrumb.js.map +1 -1
  86. package/dist/components/ui/button.d.ts +2 -2
  87. package/dist/components/ui/calendar.d.ts +12 -5
  88. package/dist/components/ui/calendar.js +38 -3
  89. package/dist/components/ui/calendar.js.map +1 -1
  90. package/dist/components/ui/carousel.d.ts +4 -3
  91. package/dist/components/ui/carousel.js +11 -4
  92. package/dist/components/ui/carousel.js.map +1 -1
  93. package/dist/components/ui/circular-progress.d.ts +50 -0
  94. package/dist/components/ui/circular-progress.js +266 -0
  95. package/dist/components/ui/circular-progress.js.map +1 -0
  96. package/dist/components/ui/command.d.ts +5 -4
  97. package/dist/components/ui/command.js +6 -2
  98. package/dist/components/ui/command.js.map +1 -1
  99. package/dist/components/ui/cropper-constants.d.ts +39 -0
  100. package/dist/components/ui/cropper-constants.js +6 -0
  101. package/dist/components/ui/cropper-constants.js.map +1 -0
  102. package/dist/components/ui/cropper.d.ts +107 -0
  103. package/dist/components/ui/cropper.js +1269 -0
  104. package/dist/components/ui/cropper.js.map +1 -0
  105. package/dist/components/ui/dialog.d.ts +2 -2
  106. package/dist/components/ui/dialog.js +4 -1
  107. package/dist/components/ui/dialog.js.map +1 -1
  108. package/dist/components/ui/drawer.d.ts +1 -1
  109. package/dist/components/ui/drawer.js +2 -2
  110. package/dist/components/ui/drawer.js.map +1 -1
  111. package/dist/components/ui/item.d.ts +2 -2
  112. package/dist/components/ui/kanban-constants.d.ts +67 -0
  113. package/dist/components/ui/kanban-constants.js +6 -0
  114. package/dist/components/ui/kanban-constants.js.map +1 -0
  115. package/dist/components/ui/kanban.d.ts +72 -0
  116. package/dist/components/ui/kanban.js +787 -0
  117. package/dist/components/ui/kanban.js.map +1 -0
  118. package/dist/components/ui/key-value-constants.d.ts +37 -0
  119. package/dist/components/ui/key-value-constants.js +6 -0
  120. package/dist/components/ui/key-value-constants.js.map +1 -0
  121. package/dist/components/ui/key-value.d.ts +96 -0
  122. package/dist/components/ui/key-value.js +641 -0
  123. package/dist/components/ui/key-value.js.map +1 -0
  124. package/dist/components/ui/mask-input-constants.d.ts +98 -0
  125. package/dist/components/ui/mask-input-constants.js +600 -0
  126. package/dist/components/ui/mask-input-constants.js.map +1 -0
  127. package/dist/components/ui/mask-input.d.ts +39 -0
  128. package/dist/components/ui/mask-input.js +560 -0
  129. package/dist/components/ui/mask-input.js.map +1 -0
  130. package/dist/components/ui/mention.d.ts +32 -0
  131. package/dist/components/ui/mention.js +126 -0
  132. package/dist/components/ui/mention.js.map +1 -0
  133. package/dist/components/ui/pagination.d.ts +13 -9
  134. package/dist/components/ui/pagination.js +15 -6
  135. package/dist/components/ui/pagination.js.map +1 -1
  136. package/dist/components/ui/phone-input-constants.d.ts +65 -0
  137. package/dist/components/ui/phone-input-constants.js +6 -0
  138. package/dist/components/ui/phone-input-constants.js.map +1 -0
  139. package/dist/components/ui/phone-input.d.ts +92 -0
  140. package/dist/components/ui/phone-input.js +742 -0
  141. package/dist/components/ui/phone-input.js.map +1 -0
  142. package/dist/components/ui/progress.d.ts +2 -2
  143. package/dist/components/ui/rating.d.ts +57 -0
  144. package/dist/components/ui/rating.js +648 -0
  145. package/dist/components/ui/rating.js.map +1 -0
  146. package/dist/components/ui/responsive-dialog.d.ts +35 -0
  147. package/dist/components/ui/responsive-dialog.js +193 -0
  148. package/dist/components/ui/responsive-dialog.js.map +1 -0
  149. package/dist/components/ui/scroll-spy.d.ts +42 -0
  150. package/dist/components/ui/scroll-spy.js +336 -0
  151. package/dist/components/ui/scroll-spy.js.map +1 -0
  152. package/dist/components/ui/sheet.d.ts +2 -2
  153. package/dist/components/ui/sheet.js +10 -1
  154. package/dist/components/ui/sheet.js.map +1 -1
  155. package/dist/components/ui/spinner.js +4 -1
  156. package/dist/components/ui/spinner.js.map +1 -1
  157. package/dist/components/ui/stepper-constants.d.ts +34 -0
  158. package/dist/components/ui/stepper-constants.js +6 -0
  159. package/dist/components/ui/stepper-constants.js.map +1 -0
  160. package/dist/components/ui/stepper.d.ts +81 -0
  161. package/dist/components/ui/stepper.js +902 -0
  162. package/dist/components/ui/stepper.js.map +1 -0
  163. package/dist/components/ui/tags-input.d.ts +42 -0
  164. package/dist/components/ui/tags-input.js +129 -0
  165. package/dist/components/ui/tags-input.js.map +1 -0
  166. package/dist/components/ui/time-picker-constants.d.ts +51 -0
  167. package/dist/components/ui/time-picker-constants.js +6 -0
  168. package/dist/components/ui/time-picker-constants.js.map +1 -0
  169. package/dist/components/ui/time-picker.d.ts +120 -0
  170. package/dist/components/ui/time-picker.js +1618 -0
  171. package/dist/components/ui/time-picker.js.map +1 -0
  172. package/dist/components/ui/timeline.d.ts +32 -0
  173. package/dist/components/ui/timeline.js +559 -0
  174. package/dist/components/ui/timeline.js.map +1 -0
  175. package/dist/components/ui/toggle.d.ts +1 -1
  176. package/dist/components/ui/tour-constants.d.ts +44 -0
  177. package/dist/components/ui/tour-constants.js +6 -0
  178. package/dist/components/ui/tour-constants.js.map +1 -0
  179. package/dist/components/ui/tour.d.ts +125 -0
  180. package/dist/components/ui/tour.js +1207 -0
  181. package/dist/components/ui/tour.js.map +1 -0
  182. package/dist/data-grid/data-grid-cell-variants.js +4 -4
  183. package/dist/data-grid/data-grid-cell-variants.js.map +1 -1
  184. package/dist/data-grid/data-grid-cell-wrapper.js +1 -1
  185. package/dist/data-grid/data-grid-cell-wrapper.js.map +1 -1
  186. package/dist/data-grid/data-grid-column-header.js +1 -1
  187. package/dist/data-grid/data-grid-column-header.js.map +1 -1
  188. package/dist/data-grid/data-grid-context-menu.js +1 -1
  189. package/dist/data-grid/data-grid-context-menu.js.map +1 -1
  190. package/dist/data-grid/data-grid-filter-menu.d.ts +5 -4
  191. package/dist/data-grid/data-grid-filter-menu.js +13 -8
  192. package/dist/data-grid/data-grid-filter-menu.js.map +1 -1
  193. package/dist/data-grid/data-grid-keyboard-shortcuts.d.ts +4 -4
  194. package/dist/data-grid/data-grid-keyboard-shortcuts.js.map +1 -1
  195. package/dist/data-grid/data-grid-locale.d.ts +58 -6
  196. package/dist/data-grid/data-grid-locale.js +41 -9
  197. package/dist/data-grid/data-grid-locale.js.map +1 -1
  198. package/dist/data-grid/data-grid-paste-dialog.js +1 -1
  199. package/dist/data-grid/data-grid-paste-dialog.js.map +1 -1
  200. package/dist/data-grid/data-grid-row-height-menu.d.ts +4 -3
  201. package/dist/data-grid/data-grid-row-height-menu.js.map +1 -1
  202. package/dist/data-grid/data-grid-row.js +1 -1
  203. package/dist/data-grid/data-grid-row.js.map +1 -1
  204. package/dist/data-grid/data-grid-search.js +1 -1
  205. package/dist/data-grid/data-grid-search.js.map +1 -1
  206. package/dist/data-grid/data-grid-sort-menu.d.ts +4 -4
  207. package/dist/data-grid/data-grid-sort-menu.js +1 -1
  208. package/dist/data-grid/data-grid-sort-menu.js.map +1 -1
  209. package/dist/data-grid/data-grid-view-menu.d.ts +4 -4
  210. package/dist/data-grid/data-grid-view-menu.js.map +1 -1
  211. package/dist/data-grid/data-grid.d.ts +4 -3
  212. package/dist/data-grid/data-grid.js +3 -4
  213. package/dist/data-grid/data-grid.js.map +1 -1
  214. package/dist/data-grid/index.d.ts +1 -0
  215. package/dist/data-grid/index.js.map +1 -1
  216. package/dist/data-grid/messages-en.d.ts +23 -4
  217. package/dist/data-grid/messages-en.js +20 -0
  218. package/dist/data-grid/messages-en.js.map +1 -1
  219. package/dist/data-grid/messages-vi.d.ts +3 -1
  220. package/dist/data-grid/messages-vi.js +14 -0
  221. package/dist/data-grid/messages-vi.js.map +1 -1
  222. package/dist/data-grid/messages.d.ts +29 -3
  223. package/dist/data-grid/messages.js.map +1 -1
  224. package/dist/data-grid/sortable.js +17 -20
  225. package/dist/data-grid/sortable.js.map +1 -1
  226. package/dist/data-grid/types.d.ts +1 -1
  227. package/dist/data-grid/use-data-grid-undo-redo.d.ts +5 -4
  228. package/dist/data-grid/use-data-grid-undo-redo.js +4 -4
  229. package/dist/data-grid/use-data-grid-undo-redo.js.map +1 -1
  230. package/dist/data-grid/use-data-grid.d.ts +21 -6
  231. package/dist/data-grid/use-data-grid.js +11 -9
  232. package/dist/data-grid/use-data-grid.js.map +1 -1
  233. package/dist/data-grid/utils.d.ts +24 -4
  234. package/dist/data-grid/utils.js +15 -5
  235. package/dist/data-grid/utils.js.map +1 -1
  236. package/dist/i18n/locale-provider.d.ts +109 -0
  237. package/dist/i18n/locale-provider.js +47 -0
  238. package/dist/i18n/locale-provider.js.map +1 -0
  239. package/dist/i18n/locale.d.ts +27 -0
  240. package/dist/i18n/locale.js +10 -0
  241. package/dist/i18n/locale.js.map +1 -0
  242. package/dist/i18n/messages.d.ts +116 -0
  243. package/dist/i18n/messages.js +149 -0
  244. package/dist/i18n/messages.js.map +1 -0
  245. package/dist/i18n/namespaces/action-bar.d.ts +7 -0
  246. package/dist/i18n/namespaces/action-bar.js +15 -0
  247. package/dist/i18n/namespaces/action-bar.js.map +1 -0
  248. package/dist/i18n/namespaces/avatar-group.d.ts +14 -0
  249. package/dist/i18n/namespaces/avatar-group.js +13 -0
  250. package/dist/i18n/namespaces/avatar-group.js.map +1 -0
  251. package/dist/i18n/namespaces/badge-overflow.d.ts +12 -0
  252. package/dist/i18n/namespaces/badge-overflow.js +11 -0
  253. package/dist/i18n/namespaces/badge-overflow.js.map +1 -0
  254. package/dist/i18n/namespaces/banner.d.ts +9 -0
  255. package/dist/i18n/namespaces/banner.js +7 -0
  256. package/dist/i18n/namespaces/banner.js.map +1 -0
  257. package/dist/i18n/namespaces/breadcrumb.d.ts +11 -0
  258. package/dist/i18n/namespaces/breadcrumb.js +13 -0
  259. package/dist/i18n/namespaces/breadcrumb.js.map +1 -0
  260. package/dist/i18n/namespaces/calendar.d.ts +40 -0
  261. package/dist/i18n/namespaces/calendar.js +25 -0
  262. package/dist/i18n/namespaces/calendar.js.map +1 -0
  263. package/dist/i18n/namespaces/carousel.d.ts +15 -0
  264. package/dist/i18n/namespaces/carousel.js +17 -0
  265. package/dist/i18n/namespaces/carousel.js.map +1 -0
  266. package/dist/i18n/namespaces/combobox.d.ts +21 -0
  267. package/dist/i18n/namespaces/combobox.js +23 -0
  268. package/dist/i18n/namespaces/combobox.js.map +1 -0
  269. package/dist/i18n/namespaces/command-palette.d.ts +20 -0
  270. package/dist/i18n/namespaces/command-palette.js +19 -0
  271. package/dist/i18n/namespaces/command-palette.js.map +1 -0
  272. package/dist/i18n/namespaces/command.d.ts +11 -0
  273. package/dist/i18n/namespaces/command.js +13 -0
  274. package/dist/i18n/namespaces/command.js.map +1 -0
  275. package/dist/i18n/namespaces/confirm-dialog.d.ts +13 -0
  276. package/dist/i18n/namespaces/confirm-dialog.js +15 -0
  277. package/dist/i18n/namespaces/confirm-dialog.js.map +1 -0
  278. package/dist/i18n/namespaces/contrast.d.ts +7 -0
  279. package/dist/i18n/namespaces/contrast.js +13 -0
  280. package/dist/i18n/namespaces/contrast.js.map +1 -0
  281. package/dist/i18n/namespaces/copy-button.d.ts +11 -0
  282. package/dist/i18n/namespaces/copy-button.js +13 -0
  283. package/dist/i18n/namespaces/copy-button.js.map +1 -0
  284. package/dist/i18n/namespaces/cropper.d.ts +7 -0
  285. package/dist/i18n/namespaces/cropper.js +17 -0
  286. package/dist/i18n/namespaces/cropper.js.map +1 -0
  287. package/dist/i18n/namespaces/data-table.d.ts +7 -0
  288. package/dist/i18n/namespaces/data-table.js +23 -0
  289. package/dist/i18n/namespaces/data-table.js.map +1 -0
  290. package/dist/i18n/namespaces/date-picker.d.ts +42 -0
  291. package/dist/i18n/namespaces/date-picker.js +35 -0
  292. package/dist/i18n/namespaces/date-picker.js.map +1 -0
  293. package/dist/i18n/namespaces/dialog.d.ts +9 -0
  294. package/dist/i18n/namespaces/dialog.js +7 -0
  295. package/dist/i18n/namespaces/dialog.js.map +1 -0
  296. package/dist/i18n/namespaces/display-axis.d.ts +25 -0
  297. package/dist/i18n/namespaces/display-axis.js +21 -0
  298. package/dist/i18n/namespaces/display-axis.js.map +1 -0
  299. package/dist/i18n/namespaces/file-upload.d.ts +11 -0
  300. package/dist/i18n/namespaces/file-upload.js +19 -0
  301. package/dist/i18n/namespaces/file-upload.js.map +1 -0
  302. package/dist/i18n/namespaces/filter-chips.d.ts +11 -0
  303. package/dist/i18n/namespaces/filter-chips.js +13 -0
  304. package/dist/i18n/namespaces/filter-chips.js.map +1 -0
  305. package/dist/i18n/namespaces/image-upload-field.d.ts +12 -0
  306. package/dist/i18n/namespaces/image-upload-field.js +23 -0
  307. package/dist/i18n/namespaces/image-upload-field.js.map +1 -0
  308. package/dist/i18n/namespaces/inline-edit.d.ts +15 -0
  309. package/dist/i18n/namespaces/inline-edit.js +17 -0
  310. package/dist/i18n/namespaces/inline-edit.js.map +1 -0
  311. package/dist/i18n/namespaces/kanban.d.ts +11 -0
  312. package/dist/i18n/namespaces/kanban.js +39 -0
  313. package/dist/i18n/namespaces/kanban.js.map +1 -0
  314. package/dist/i18n/namespaces/key-value.d.ts +10 -0
  315. package/dist/i18n/namespaces/key-value.js +19 -0
  316. package/dist/i18n/namespaces/key-value.js.map +1 -0
  317. package/dist/i18n/namespaces/mention.d.ts +9 -0
  318. package/dist/i18n/namespaces/mention.js +7 -0
  319. package/dist/i18n/namespaces/mention.js.map +1 -0
  320. package/dist/i18n/namespaces/pagination.d.ts +19 -0
  321. package/dist/i18n/namespaces/pagination.js +21 -0
  322. package/dist/i18n/namespaces/pagination.js.map +1 -0
  323. package/dist/i18n/namespaces/phone-input.d.ts +10 -0
  324. package/dist/i18n/namespaces/phone-input.js +17 -0
  325. package/dist/i18n/namespaces/phone-input.js.map +1 -0
  326. package/dist/i18n/namespaces/rating.d.ts +12 -0
  327. package/dist/i18n/namespaces/rating.js +11 -0
  328. package/dist/i18n/namespaces/rating.js.map +1 -0
  329. package/dist/i18n/namespaces/route-tabs.d.ts +9 -0
  330. package/dist/i18n/namespaces/route-tabs.js +7 -0
  331. package/dist/i18n/namespaces/route-tabs.js.map +1 -0
  332. package/dist/i18n/namespaces/scroll-spy.d.ts +9 -0
  333. package/dist/i18n/namespaces/scroll-spy.js +7 -0
  334. package/dist/i18n/namespaces/scroll-spy.js.map +1 -0
  335. package/dist/i18n/namespaces/search-filter-bar.d.ts +15 -0
  336. package/dist/i18n/namespaces/search-filter-bar.js +32 -0
  337. package/dist/i18n/namespaces/search-filter-bar.js.map +1 -0
  338. package/dist/i18n/namespaces/sheet.d.ts +9 -0
  339. package/dist/i18n/namespaces/sheet.js +7 -0
  340. package/dist/i18n/namespaces/sheet.js.map +1 -0
  341. package/dist/i18n/namespaces/shell.d.ts +17 -0
  342. package/dist/i18n/namespaces/shell.js +75 -0
  343. package/dist/i18n/namespaces/shell.js.map +1 -0
  344. package/dist/i18n/namespaces/spinner.d.ts +9 -0
  345. package/dist/i18n/namespaces/spinner.js +7 -0
  346. package/dist/i18n/namespaces/spinner.js.map +1 -0
  347. package/dist/i18n/namespaces/stepper.d.ts +7 -0
  348. package/dist/i18n/namespaces/stepper.js +15 -0
  349. package/dist/i18n/namespaces/stepper.js.map +1 -0
  350. package/dist/i18n/namespaces/table-pagination.d.ts +7 -0
  351. package/dist/i18n/namespaces/table-pagination.js +29 -0
  352. package/dist/i18n/namespaces/table-pagination.js.map +1 -0
  353. package/dist/i18n/namespaces/tags-input.d.ts +12 -0
  354. package/dist/i18n/namespaces/tags-input.js +11 -0
  355. package/dist/i18n/namespaces/tags-input.js.map +1 -0
  356. package/dist/i18n/namespaces/time-picker.d.ts +15 -0
  357. package/dist/i18n/namespaces/time-picker.js +25 -0
  358. package/dist/i18n/namespaces/time-picker.js.map +1 -0
  359. package/dist/i18n/namespaces/toast.d.ts +15 -0
  360. package/dist/i18n/namespaces/toast.js +7 -0
  361. package/dist/i18n/namespaces/toast.js.map +1 -0
  362. package/dist/i18n/namespaces/tour.d.ts +7 -0
  363. package/dist/i18n/namespaces/tour.js +21 -0
  364. package/dist/i18n/namespaces/tour.js.map +1 -0
  365. package/dist/index.d.ts +63 -0
  366. package/dist/index.js +66 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/lib/compose-refs.js.map +1 -0
  369. package/dist/lib/use-as-ref.js.map +1 -0
  370. package/dist/lib/use-is-mobile.d.ts +10 -0
  371. package/dist/lib/use-is-mobile.js +21 -0
  372. package/dist/lib/use-is-mobile.js.map +1 -0
  373. package/dist/lib/use-isomorphic-layout-effect.js.map +1 -0
  374. package/dist/lib/use-lazy-ref.js.map +1 -0
  375. package/dist/lib/visually-hidden-input.d.ts +12 -0
  376. package/dist/lib/visually-hidden-input.js +105 -0
  377. package/dist/lib/visually-hidden-input.js.map +1 -0
  378. package/dist/shell/app-header.js.map +1 -1
  379. package/dist/shell/app-shell.d.ts +20 -2
  380. package/dist/shell/app-shell.js +4 -1
  381. package/dist/shell/app-shell.js.map +1 -1
  382. package/dist/shell/contrast-constants.d.ts +9 -1
  383. package/dist/shell/contrast-constants.js +2 -4
  384. package/dist/shell/contrast-constants.js.map +1 -1
  385. package/dist/shell/contrast-toggle.d.ts +4 -1
  386. package/dist/shell/contrast-toggle.js +2 -2
  387. package/dist/shell/contrast-toggle.js.map +1 -1
  388. package/dist/shell/display-axis-constants.d.ts +2 -1
  389. package/dist/shell/display-axis-constants.js.map +1 -1
  390. package/dist/shell/display-axis-controls.d.ts +15 -6
  391. package/dist/shell/display-axis-controls.js +11 -9
  392. package/dist/shell/display-axis-controls.js.map +1 -1
  393. package/dist/shell/mobile-menu.js.map +1 -1
  394. package/dist/shell/notifications-button.d.ts +1 -1
  395. package/dist/shell/notifications-button.js +3 -2
  396. package/dist/shell/notifications-button.js.map +1 -1
  397. package/dist/shell/shell-context.d.ts +4 -1
  398. package/dist/shell/shell-context.js +2 -4
  399. package/dist/shell/shell-context.js.map +1 -1
  400. package/dist/shell/sidebar.d.ts +1 -1
  401. package/dist/shell/sidebar.js.map +1 -1
  402. package/dist/shell/theme-toggle.d.ts +6 -3
  403. package/dist/shell/theme-toggle.js +2 -2
  404. package/dist/shell/theme-toggle.js.map +1 -1
  405. package/dist/shell/types.d.ts +14 -8
  406. package/dist/shell/types.js +2 -35
  407. package/dist/shell/types.js.map +1 -1
  408. package/dist/shell/user-menu.d.ts +6 -6
  409. package/dist/shell/user-menu.js.map +1 -1
  410. package/dist/shell/utils.d.ts +1 -1
  411. package/dist/shell/utils.js.map +1 -1
  412. package/dist/shell/workspace-switcher.js +1 -1
  413. package/dist/shell/workspace-switcher.js.map +1 -1
  414. package/dist/uploader/file-upload-constants.d.ts +13 -0
  415. package/dist/uploader/file-upload-constants.js +4 -16
  416. package/dist/uploader/file-upload-constants.js.map +1 -1
  417. package/dist/uploader/file-upload.d.ts +4 -1
  418. package/dist/uploader/file-upload.js +2 -2
  419. package/dist/uploader/file-upload.js.map +1 -1
  420. package/dist/uploader/image-upload-field.d.ts +5 -1
  421. package/dist/uploader/image-upload-field.js +2 -2
  422. package/dist/uploader/image-upload-field.js.map +1 -1
  423. package/dist/uploader/use-file-upload.d.ts +4 -0
  424. package/dist/uploader/use-file-upload.js +6 -2
  425. package/dist/uploader/use-file-upload.js.map +1 -1
  426. package/package.json +8 -3
  427. package/styles.css +19 -0
  428. package/dist/data-grid/compose-refs.js.map +0 -1
  429. package/dist/data-grid/use-as-ref.js.map +0 -1
  430. package/dist/data-grid/use-isomorphic-layout-effect.js.map +0 -1
  431. package/dist/data-grid/use-lazy-ref.js.map +0 -1
  432. /package/dist/{data-grid → lib}/compose-refs.d.ts +0 -0
  433. /package/dist/{data-grid → lib}/compose-refs.js +0 -0
  434. /package/dist/{data-grid → lib}/use-as-ref.d.ts +0 -0
  435. /package/dist/{data-grid → lib}/use-as-ref.js +0 -0
  436. /package/dist/{data-grid → lib}/use-isomorphic-layout-effect.d.ts +0 -0
  437. /package/dist/{data-grid → lib}/use-isomorphic-layout-effect.js +0 -0
  438. /package/dist/{data-grid → lib}/use-lazy-ref.d.ts +0 -0
  439. /package/dist/{data-grid → lib}/use-lazy-ref.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ui/mask-input-constants.ts"],"sourcesContent":["/*\n * Port từ Dice UI (https://diceui.com/docs/components/mask-input) — MIT, © 2024 Sadman Sakib.\n * Giữ nguyên cấu trúc thượng nguồn để còn đối chiếu ngược được; mọi chỗ đổi đều có chú thích.\n */\n\n/**\n * Lõi THUẦN của `MaskInput`: bảng mẫu `MASK_PATTERNS` và các hàm định dạng/bóc mặt nạ.\n *\n * File này là NỬA TRÊN của `mask-input.tsx` thượng nguồn (mọi thứ đứng trước component), tách ra\n * nguyên khối, đúng thứ tự, để còn diff ngược được. Nó **CỐ Ý không có `\"use client\"`**: mọi\n * export của một file `\"use client\"` tới Server Component là client-reference proxy — `MASK_PATTERNS`\n * sẽ đọc ra `undefined` mà không throw — và `applyCurrencyMask` là thứ trang server hay cần nhất\n * (in số tiền ra bảng, email, PDF) nên phải chạy được ở cả hai phía.\n *\n * ⚠ Barrel `src/index.ts` xuất module này TRỰC TIẾP, và CHỌN LỌC (không `export *`): ngoài các tên\n * công khai của thượng nguồn, file còn export vài helper NỘI BỘ cho riêng `mask-input.tsx`\n * (liệt kê ở khối export cuối file). `mask-input.tsx` chỉ `import`, KHÔNG `export` lại.\n */\n\nconst PAST_YEARS_LIMIT = 120;\nconst FUTURE_YEARS_LIMIT = 10;\n/*\n * \"USD\" / \"en-US\" như thượng nguồn — mặc định của các hàm THUẦN ở đây (gọi thẳng ở server, email,\n * PDF). Tiền tệ là thiết lập của VÙNG / nghiệp vụ, không phải của ngôn ngữ (xem\n * `src/i18n/locale.ts`): app Comitor truyền `currency` từ cài đặt workspace. Component `MaskInput`\n * dùng `DEFAULT_CURRENCY` nhưng lấy `locale` mặc định từ `ComitorLocaleProvider`, không từ hằng\n * `DEFAULT_LOCALE`. Trước `3.0.0` hai hằng là \"VND\" / \"vi-VN\".\n */\nconst DEFAULT_CURRENCY = \"USD\";\nconst DEFAULT_LOCALE = \"en-US\";\n\nconst NUMERIC_MASK_PATTERNS = /^(phone|zipCode|zipCodeExtended|ssn|ein|time|date|creditCard|creditCardExpiry)$/;\nconst CURRENCY_PERCENTAGE_SYMBOLS = /[€$%]/;\n\ninterface CurrencySymbols {\n currency: string;\n decimal: string;\n group: string;\n}\n\nconst formattersCache = new Map<string, Intl.NumberFormat>();\nconst currencyAtEndCache = new Map<string, boolean>();\nconst currencySymbolsCache = new Map<string, CurrencySymbols>();\nconst fractionDigitsCache = new Map<string, number>();\nconst daysInMonthCache = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const;\n\nconst REGEX_CACHE = {\n digitsOnly: /^\\d+$/,\n nonDigits: /\\D/g,\n nonAlphaNumeric: /[^A-Z0-9]/gi,\n nonNumericDot: /[^0-9.]/g,\n nonCurrencyChars: /[^\\d.,]/g,\n hashPattern: /#/g,\n currencyAtEnd: /\\d\\s*[^\\d\\s]+$/,\n percentageChars: /[^\\d.]/g,\n phone: /^\\d{10}$/,\n ssn: /^\\d{9}$/,\n zipCode: /^\\d{5}$/,\n zipCodeExtended: /^\\d{9}$/,\n isbn: /^\\d{13}$/,\n ein: /^\\d{9}$/,\n time: /^\\d{4}$/,\n creditCard: /^\\d{13,19}$/,\n creditCardExpiry: /^\\d{4}$/,\n licensePlate: /^[A-Z0-9]{6}$/,\n macAddress: /^[A-F0-9]{12}$/,\n currencyValidation: /^\\d+(\\.\\d{1,2})?$/,\n ipv4Segment: /^\\d{1,3}$/\n} as const;\n\nfunction getCachedFormatter(locale: string | undefined, opts: Intl.NumberFormatOptions): Intl.NumberFormat {\n const { currency, minimumFractionDigits = 0, maximumFractionDigits = 2 } = opts;\n\n const key = `${locale}|${currency}|${minimumFractionDigits}|${maximumFractionDigits}`;\n\n if (!formattersCache.has(key)) {\n try {\n formattersCache.set(\n key,\n new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n ...opts\n })\n );\n } catch {\n formattersCache.set(\n key,\n new Intl.NumberFormat(DEFAULT_LOCALE, {\n style: \"currency\",\n currency: DEFAULT_CURRENCY,\n ...opts\n })\n );\n }\n }\n\n const formatter = formattersCache.get(key);\n if (!formatter) {\n throw new Error(`Không tạo được bộ định dạng tiền tệ cho ${key}`);\n }\n return formatter;\n}\n\nfunction getCachedCurrencySymbols(opts: TransformOptions): CurrencySymbols {\n const { locale, currency } = opts;\n\n const key = `${locale}|${currency}`;\n const cached = currencySymbolsCache.get(key);\n if (cached) {\n return cached;\n }\n\n let currencySymbol = \"$\";\n let decimalSeparator = \".\";\n let groupSeparator = \",\";\n\n try {\n const formatter = getCachedFormatter(locale, {\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n const parts = formatter.formatToParts(1234.5);\n const currencyPart = parts.find((part) => part.type === \"currency\");\n const decimalPart = parts.find((part) => part.type === \"decimal\");\n const groupPart = parts.find((part) => part.type === \"group\");\n\n if (currencyPart) currencySymbol = currencyPart.value;\n if (decimalPart) decimalSeparator = decimalPart.value;\n if (groupPart) groupSeparator = groupPart.value;\n } catch {\n // Giữ giá trị mặc định.\n }\n\n const symbols: CurrencySymbols = {\n currency: currencySymbol,\n decimal: decimalSeparator,\n group: groupSeparator\n };\n currencySymbolsCache.set(key, symbols);\n return symbols;\n}\n\n/**\n * Số chữ số thập phân TỰ NHIÊN của đồng tiền theo ISO 4217 / CLDR: VND 0, JPY 0, USD 2, EUR 2.\n * Chặn trần ở 2 vì phần còn lại của logic (validate, cắt phần lẻ) chỉ hiểu tối đa 2 chữ số.\n *\n * ⚠ Khác thượng nguồn — hàm MỚI. Thượng nguồn ghim cứng `maximumFractionDigits: 2` cho mọi đồng\n * tiền, và với locale dùng `,` làm dấu thập phân (de-DE, vi-VN) thì `transform` còn đoán \"chữ số\n * gõ sau một nhóm nghìn là phần lẻ\". Với VND, đo trên chính mã thượng nguồn, gõ lần lượt\n * `1234567` ra:\n *\n * 1 ₫ → 12 ₫ → 123 ₫ → 1.234 ₫ → 1.234,5 ₫ → 1.234,56 ₫ → 1.234.567 ₫\n *\n * tức chữ số thứ 5 và 6 biến thành HÀO, và giá trị thô báo ra `onValueChange` là \"1234.5\" trong\n * khi người dùng đang gõ 12.345 ₫. Đồng tiền không có phần lẻ thì mọi `.`/`,` đều là dấu nhóm.\n */\nfunction getCurrencyFractionDigits(opts: TransformOptions): number {\n const { locale, currency } = opts;\n\n const key = `${locale}|${currency}`;\n const cached = fractionDigitsCache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n\n let digits = 2;\n try {\n const resolved = new Intl.NumberFormat(locale, { style: \"currency\", currency }).resolvedOptions();\n digits = Math.min(2, resolved.maximumFractionDigits ?? 2);\n } catch {\n // Đồng tiền/locale không hợp lệ → giữ 2 như thượng nguồn.\n }\n\n fractionDigitsCache.set(key, digits);\n return digits;\n}\n\nfunction isCurrencyAtEnd(opts: TransformOptions): boolean {\n const { locale, currency } = opts;\n\n const key = `${locale}|${currency}`;\n const cached = currencyAtEndCache.get(key);\n if (cached !== undefined) {\n return cached;\n }\n\n try {\n const formatter = getCachedFormatter(locale, {\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n });\n const sample = formatter.format(123);\n const result = REGEX_CACHE.currencyAtEnd.test(sample);\n currencyAtEndCache.set(key, result);\n return result;\n } catch {\n currencyAtEndCache.set(key, false);\n return false;\n }\n}\n\nfunction isCurrencyMask(opts: { mask: MaskPatternKey | MaskPattern | undefined; pattern?: string }): boolean {\n const { mask, pattern } = opts;\n\n return mask === \"currency\" || Boolean(pattern && (pattern.includes(\"$\") || pattern.includes(\"€\")));\n}\n\ninterface TransformOptions {\n currency?: string;\n locale?: string;\n}\n\ninterface ValidateOptions {\n min?: number;\n max?: number;\n}\n\ninterface MaskPattern {\n pattern: string;\n transform?: (value: string, opts?: TransformOptions) => string;\n validate?: (value: string, opts?: ValidateOptions) => boolean;\n}\n\ntype MaskPatternKey =\n | \"phone\"\n | \"ssn\"\n | \"date\"\n | \"time\"\n | \"creditCard\"\n | \"creditCardExpiry\"\n | \"zipCode\"\n | \"zipCodeExtended\"\n | \"currency\"\n | \"percentage\"\n | \"licensePlate\"\n | \"ipv4\"\n | \"macAddress\"\n | \"isbn\"\n | \"ein\";\n\n/**\n * Các mẫu dựng sẵn — giữ NGUYÊN bộ của thượng nguồn, không thêm không bớt. Nhiều mẫu là định dạng\n * Hoa Kỳ (`phone`, `ssn`, `date`, `zipCode`, `zipCodeExtended`, `ein`); app Comitor cần định dạng\n * khác thì truyền một `MaskPattern` riêng vào prop `mask`.\n */\nconst MASK_PATTERNS: Record<MaskPatternKey, MaskPattern> = {\n /**\n * Số điện thoại **Hoa Kỳ** `(###) ###-####`, đúng 10 chữ số.\n *\n * ⚠ Không dùng cho số điện thoại ở app Comitor: số Việt Nam (và mọi số quốc tế) đi qua\n * `PhoneInput` — có chọn quốc gia, tự nhận mã vùng và lưu dạng `+84…`.\n */\n phone: {\n pattern: \"(###) ###-####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.phone.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n },\n ssn: {\n pattern: \"###-##-####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.ssn.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n },\n /**\n * Ngày kiểu **Hoa Kỳ** `MM/DD/YYYY` — `validate` đọc 2 chữ số ĐẦU là THÁNG. Ngày kiểu Việt Nam\n * (`dd/MM/yyyy`) thì dùng `DatePicker` của gói, hoặc một `MaskPattern` riêng.\n */\n date: {\n pattern: \"##/##/####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => {\n const cleaned = value.replace(REGEX_CACHE.nonDigits, \"\");\n if (cleaned.length !== 8) return false;\n const month = Number.parseInt(cleaned.substring(0, 2), 10);\n const day = Number.parseInt(cleaned.substring(2, 4), 10);\n const year = Number.parseInt(cleaned.substring(4, 8), 10);\n\n const currentYear = new Date().getFullYear();\n const minYear = currentYear - PAST_YEARS_LIMIT;\n const maxYear = currentYear + FUTURE_YEARS_LIMIT;\n if (month < 1 || month > 12 || day < 1 || year < minYear || year > maxYear) return false;\n\n const maxDays =\n month === 2 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0)\n ? 29\n : (daysInMonthCache[month - 1] ?? 31);\n\n return day <= maxDays;\n }\n },\n time: {\n pattern: \"##:##\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => {\n const cleaned = value.replace(REGEX_CACHE.nonDigits, \"\");\n if (!REGEX_CACHE.time.test(cleaned)) return false;\n const hours = Number.parseInt(cleaned.substring(0, 2), 10);\n const minutes = Number.parseInt(cleaned.substring(2, 4), 10);\n return hours <= 23 && minutes <= 59;\n }\n },\n creditCard: {\n pattern: \"#### #### #### ####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => {\n const cleaned = value.replace(REGEX_CACHE.nonDigits, \"\");\n if (!REGEX_CACHE.creditCard.test(cleaned)) return false;\n\n let sum = 0;\n let isEven = false;\n for (let i = cleaned.length - 1; i >= 0; i--) {\n const digitChar = cleaned[i];\n if (!digitChar) continue;\n let digit = Number.parseInt(digitChar, 10);\n if (isEven) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n sum += digit;\n isEven = !isEven;\n }\n return sum % 10 === 0;\n }\n },\n creditCardExpiry: {\n pattern: \"##/##\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => {\n const cleaned = value.replace(REGEX_CACHE.nonDigits, \"\");\n if (!REGEX_CACHE.creditCardExpiry.test(cleaned)) return false;\n\n const month = Number.parseInt(cleaned.substring(0, 2), 10);\n const year = Number.parseInt(cleaned.substring(2, 4), 10);\n\n if (month < 1 || month > 12) return false;\n\n const now = new Date();\n const currentYear = now.getFullYear();\n const currentMonth = now.getMonth() + 1;\n\n const fullYear = year <= 75 ? 2000 + year : 1900 + year;\n\n if (fullYear < currentYear || (fullYear === currentYear && month < currentMonth)) {\n return false;\n }\n\n const maxYear = currentYear + 50;\n if (fullYear > maxYear) {\n return false;\n }\n\n return true;\n }\n },\n zipCode: {\n pattern: \"#####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.zipCode.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n },\n zipCodeExtended: {\n pattern: \"#####-####\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.zipCodeExtended.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n },\n /**\n * Tiền tệ — định dạng thật đi qua `Intl.NumberFormat` theo `currency`/`locale` (mặc định USD /\n * en-US → `$1,234,567`; `VND` / `vi-VN` → `1.234.567 ₫`). Chuỗi `pattern` ở đây chỉ là DẤU NHẬN\n * DẠNG cho nhánh tiền tệ, không phải khuôn chữ số.\n */\n currency: {\n pattern: \"$###,###.##\",\n transform: (value, { currency = DEFAULT_CURRENCY, locale = DEFAULT_LOCALE } = {}) => {\n // ⚠ Khác thượng nguồn: đồng tiền không có phần lẻ (VND, JPY) → mọi `.`/`,` là dấu nhóm,\n // giá trị thô chỉ còn chữ số. Lý do: xem `getCurrencyFractionDigits`.\n if (getCurrencyFractionDigits({ currency, locale }) === 0) {\n return value.replace(REGEX_CACHE.nonDigits, \"\");\n }\n\n let localeDecimalSeparator = \".\";\n\n try {\n const formatter = getCachedFormatter(locale, {\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n const parts = formatter.formatToParts(1234.5);\n const decimalPart = parts.find((part) => part.type === \"decimal\");\n\n if (decimalPart) localeDecimalSeparator = decimalPart.value;\n } catch {\n // Giữ giá trị mặc định.\n }\n\n const cleaned = value.replace(REGEX_CACHE.nonCurrencyChars, \"\");\n\n const dotIndex = cleaned.indexOf(\".\");\n const commaIndex = cleaned.indexOf(\",\");\n\n let hasDecimalSeparator = false;\n let decimalIndex = -1;\n\n if (localeDecimalSeparator === \",\") {\n const lastCommaIndex = cleaned.lastIndexOf(\",\");\n if (lastCommaIndex !== -1) {\n const afterComma = cleaned.substring(lastCommaIndex + 1);\n if (afterComma.length <= 2 && /^\\d*$/.test(afterComma)) {\n hasDecimalSeparator = true;\n decimalIndex = lastCommaIndex;\n }\n }\n\n if (!hasDecimalSeparator && dotIndex !== -1) {\n const afterDot = cleaned.substring(dotIndex + 1);\n if (afterDot.length <= 2 && /^\\d*$/.test(afterDot)) {\n hasDecimalSeparator = true;\n decimalIndex = dotIndex;\n }\n }\n\n if (!hasDecimalSeparator && cleaned.length >= 4) {\n const match = cleaned.match(/^(\\d+)\\.(\\d{3})(\\d{1,2})$/);\n if (match) {\n const [, beforeDot, thousandsPart, decimalPart] = match;\n const integerPart = (beforeDot ?? \"\") + (thousandsPart ?? \"\");\n const result = `${integerPart}.${decimalPart}`;\n return result;\n }\n }\n } else {\n const lastDotIndex = cleaned.lastIndexOf(\".\");\n if (lastDotIndex !== -1) {\n const afterDot = cleaned.substring(lastDotIndex + 1);\n if (afterDot.length <= 2 && /^\\d*$/.test(afterDot)) {\n hasDecimalSeparator = true;\n decimalIndex = lastDotIndex;\n }\n }\n\n if (!hasDecimalSeparator && commaIndex !== -1) {\n const afterComma = cleaned.substring(commaIndex + 1);\n const looksLikeThousands = commaIndex <= 3 && afterComma.length >= 3;\n if (!looksLikeThousands && afterComma.length <= 2 && /^\\d*$/.test(afterComma)) {\n hasDecimalSeparator = true;\n decimalIndex = commaIndex;\n }\n }\n }\n\n if (hasDecimalSeparator && decimalIndex !== -1) {\n const beforeDecimal = cleaned.substring(0, decimalIndex).replace(/[.,]/g, \"\");\n const afterDecimal = cleaned.substring(decimalIndex + 1).replace(/[.,]/g, \"\");\n\n if (afterDecimal === \"\") {\n const result = `${beforeDecimal}.`;\n return result;\n }\n\n const result = `${beforeDecimal}.${afterDecimal.substring(0, 2)}`;\n return result;\n }\n\n const digitsOnly = cleaned.replace(/[.,]/g, \"\");\n return digitsOnly;\n },\n validate: (value) => {\n if (!REGEX_CACHE.currencyValidation.test(value)) return false;\n const num = Number.parseFloat(value);\n return !Number.isNaN(num) && num >= 0;\n }\n },\n /**\n * Phần trăm `##.##%` — dấu thập phân là `.` cố định, KHÔNG theo `locale` (dấu `,` bị bỏ qua).\n */\n percentage: {\n pattern: \"##.##%\",\n transform: (value) => {\n const cleaned = value.replace(REGEX_CACHE.percentageChars, \"\");\n const parts = cleaned.split(\".\");\n if (parts.length > 2) {\n return `${parts[0]}.${parts.slice(1).join(\"\")}`;\n }\n if (parts[1] && parts[1].length > 2) {\n return `${parts[0]}.${parts[1].substring(0, 2)}`;\n }\n return cleaned;\n },\n validate: (value, opts = {}) => {\n const num = Number.parseFloat(value);\n const min = opts.min ?? 0;\n const max = opts.max ?? 100;\n return !Number.isNaN(num) && num >= min && num <= max;\n }\n },\n licensePlate: {\n pattern: \"###-###\",\n transform: (value) => value.replace(REGEX_CACHE.nonAlphaNumeric, \"\").toUpperCase(),\n validate: (value) => REGEX_CACHE.licensePlate.test(value)\n },\n ipv4: {\n pattern: \"###.###.###.###\",\n transform: (value) => value.replace(REGEX_CACHE.nonNumericDot, \"\"),\n validate: (value) => {\n if (value.includes(\".\")) {\n const segments = value.split(\".\");\n if (segments.length > 4) return false;\n\n return segments.every((segment) => {\n if (segment === \"\") return true;\n if (!REGEX_CACHE.ipv4Segment.test(segment)) return false;\n const num = Number.parseInt(segment, 10);\n return num <= 255;\n });\n }\n\n if (!REGEX_CACHE.digitsOnly.test(value)) return false;\n if (value.length > 12) return false;\n\n const chunks = [];\n for (let i = 0; i < value.length; i += 3) {\n chunks.push(value.substring(i, i + 3));\n }\n\n if (chunks.length > 4) return false;\n\n return chunks.every((chunk) => {\n const num = Number.parseInt(chunk, 10);\n return num >= 0 && num <= 255;\n });\n }\n },\n macAddress: {\n pattern: \"##:##:##:##:##:##\",\n transform: (value) => value.replace(REGEX_CACHE.nonAlphaNumeric, \"\").toUpperCase(),\n validate: (value) => REGEX_CACHE.macAddress.test(value)\n },\n isbn: {\n pattern: \"###-#-###-#####-#\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.isbn.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n },\n ein: {\n pattern: \"##-#######\",\n transform: (value) => value.replace(REGEX_CACHE.nonDigits, \"\"),\n validate: (value) => REGEX_CACHE.ein.test(value.replace(REGEX_CACHE.nonDigits, \"\"))\n }\n};\n\nfunction applyMask(opts: {\n value: string;\n pattern: string;\n currency?: string;\n locale?: string;\n mask?: MaskPatternKey | MaskPattern;\n}): string {\n const { value, pattern, currency, locale, mask } = opts;\n\n const cleanValue = value;\n\n if (pattern.includes(\"$\") || pattern.includes(\"€\") || mask === \"currency\") {\n return applyCurrencyMask({\n value: cleanValue,\n currency: currency ?? DEFAULT_CURRENCY,\n locale: locale ?? DEFAULT_LOCALE\n });\n }\n\n if (pattern.includes(\"%\")) {\n return applyPercentageMask(cleanValue);\n }\n\n if (mask === \"ipv4\") {\n return cleanValue;\n }\n\n const maskedChars: string[] = [];\n let valueIndex = 0;\n\n for (let i = 0; i < pattern.length && valueIndex < cleanValue.length; i++) {\n const patternChar = pattern[i];\n const valueChar = cleanValue[valueIndex];\n\n if (patternChar === \"#\" && valueChar) {\n maskedChars.push(valueChar);\n valueIndex++;\n } else if (patternChar) {\n maskedChars.push(patternChar);\n }\n }\n\n return maskedChars.join(\"\");\n}\n\nfunction applyCurrencyMask(opts: { value: string; currency?: string; locale?: string }): string {\n const { value, currency = DEFAULT_CURRENCY, locale = DEFAULT_LOCALE } = opts;\n\n if (!value) return \"\";\n\n const {\n currency: currencySymbol,\n decimal: decimalSeparator,\n group: groupSeparator\n } = getCachedCurrencySymbols({ locale, currency });\n\n const normalizedValue = value\n .replace(new RegExp(`\\\\${groupSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}`, \"g\"), \"\")\n .replace(decimalSeparator, \".\");\n\n const parts = normalizedValue.split(\".\");\n const integerPart = parts[0] ?? \"\";\n const fractionalPart = parts[1] ?? \"\";\n\n if (!integerPart && !fractionalPart) return \"\";\n\n // ⚠ Khác thượng nguồn: cắt phần lẻ theo số chữ số TỰ NHIÊN của đồng tiền (VND 0) thay vì ghim\n // cứng 2, và đồng tiền không có phần lẻ thì không bao giờ vẽ dấu thập phân treo (\"1.234, ₫\").\n const fractionDigits = getCurrencyFractionDigits({ currency, locale });\n\n const intValue = integerPart ?? \"0\";\n const fracValue = fractionalPart.slice(0, fractionDigits);\n\n const num = Number(`${intValue}.${fracValue ?? \"\"}`);\n\n if (Number.isNaN(num)) {\n const cleanedDigits = value.replace(/[^\\d]/g, \"\");\n if (!cleanedDigits) return \"\";\n return `${currencySymbol}${cleanedDigits}`;\n }\n\n const hasExplicitDecimal = fractionDigits > 0 && (value.includes(\".\") || value.includes(decimalSeparator));\n\n try {\n const formatter = getCachedFormatter(locale, {\n currency,\n minimumFractionDigits: fracValue ? fracValue.length : 0,\n maximumFractionDigits: 2\n });\n const result = formatter.format(num);\n\n if (hasExplicitDecimal && !fracValue) {\n if (result.match(/^[^\\d\\s]+/)) {\n const finalResult = result.replace(/(\\d)$/, `$1${decimalSeparator}`);\n return finalResult;\n }\n\n const finalResult = result.replace(/(\\d)(\\s*)([^\\d\\s]+)$/, `$1${decimalSeparator}$2$3`);\n return finalResult;\n }\n\n return result;\n } catch {\n const formattedInt = intValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, groupSeparator);\n let result = `${currencySymbol}${formattedInt}`;\n if (hasExplicitDecimal) {\n result += `${decimalSeparator}${fracValue}`;\n }\n\n return result;\n }\n}\n\nfunction applyPercentageMask(value: string): string {\n if (!value) return \"\";\n\n const parts = value.split(\".\");\n let result = parts[0] ?? \"0\";\n\n if (value.includes(\".\")) {\n result += `.${(parts[1] ?? \"\").substring(0, 2)}`;\n }\n\n return `${result}%`;\n}\n\nfunction getUnmaskedValue(opts: {\n value: string;\n currency?: string;\n locale?: string;\n transform?: (value: string, opts?: TransformOptions) => string;\n}): string {\n const { value, transform, currency, locale } = opts;\n\n return transform ? transform(value, { currency, locale }) : value.replace(REGEX_CACHE.nonDigits, \"\");\n}\n\nfunction toUnmaskedIndex(opts: { masked: string; pattern: string; caret: number }): number {\n const { masked, pattern, caret } = opts;\n\n let idx = 0;\n for (let i = 0; i < caret && i < masked.length && i < pattern.length; i++) {\n if (pattern[i] === \"#\") {\n idx++;\n }\n }\n\n return idx;\n}\n\nfunction fromUnmaskedIndex(opts: { masked: string; pattern: string; unmaskedIndex: number }): number {\n const { masked, pattern, unmaskedIndex } = opts;\n\n let seen = 0;\n for (let i = 0; i < masked.length && i < pattern.length; i++) {\n if (pattern[i] === \"#\") {\n seen++;\n if (seen === unmaskedIndex) {\n return i + 1;\n }\n }\n }\n\n return masked.length;\n}\n\nfunction getCurrencyCaretPosition(opts: {\n newValue: string;\n mask: MaskPatternKey | MaskPattern | undefined;\n transformOpts: TransformOptions;\n oldCursorPosition?: number;\n oldValue?: string;\n previousUnmasked?: string;\n}): number {\n const { newValue, mask, transformOpts, oldCursorPosition, oldValue, previousUnmasked } = opts;\n\n if (oldCursorPosition !== undefined && oldValue && previousUnmasked !== undefined) {\n if (oldCursorPosition < oldValue.length) {\n const digitsBeforeCursor = oldValue.substring(0, oldCursorPosition).replace(/\\D/g, \"\").length;\n\n let digitCount = 0;\n for (let i = 0; i < newValue.length; i++) {\n if (/\\d/.test(newValue[i] ?? \"\")) {\n digitCount++;\n if (digitCount === digitsBeforeCursor) {\n return i + 1;\n }\n }\n }\n }\n }\n\n if (mask === \"currency\") {\n const currencyAtEnd = isCurrencyAtEnd(transformOpts);\n if (currencyAtEnd) {\n const match = newValue.match(/(\\d)\\s*([^\\d\\s]+)$/);\n if (match?.[1]) {\n return newValue.lastIndexOf(match[1]) + 1;\n }\n return newValue.length;\n }\n return newValue.length;\n }\n return newValue.length;\n}\n\nfunction getPatternCaretPosition(opts: {\n newValue: string;\n maskPattern: MaskPattern;\n currentUnmasked: string;\n oldCursorPosition?: number;\n oldValue?: string;\n previousUnmasked?: string;\n}): number {\n const { newValue, maskPattern, currentUnmasked, oldCursorPosition, oldValue, previousUnmasked } = opts;\n let position = 0;\n let unmaskedCount = 0;\n\n if (oldCursorPosition !== undefined && oldValue && previousUnmasked !== undefined) {\n const oldUnmaskedIndex = toUnmaskedIndex({\n masked: oldValue,\n pattern: maskPattern.pattern,\n caret: oldCursorPosition\n });\n\n if (oldCursorPosition < oldValue.length) {\n const targetUnmaskedIndex = Math.min(oldUnmaskedIndex, currentUnmasked.length);\n\n for (let i = 0; i < maskPattern.pattern.length && i < newValue.length; i++) {\n if (maskPattern.pattern[i] === \"#\") {\n unmaskedCount++;\n if (unmaskedCount <= targetUnmaskedIndex) {\n position = i + 1;\n }\n }\n }\n\n return position;\n }\n }\n\n for (let i = 0; i < maskPattern.pattern.length && i < newValue.length; i++) {\n if (maskPattern.pattern[i] === \"#\") {\n unmaskedCount++;\n if (unmaskedCount <= currentUnmasked.length) {\n position = i + 1;\n }\n }\n }\n\n return position;\n}\n\n/*\n * ⚠ Khối export này trộn HAI nhóm (biome gộp chúng lại theo a-z):\n * - CÔNG KHAI — đúng các tên thượng nguồn xuất ra: `applyCurrencyMask`, `applyMask`,\n * `applyPercentageMask`, `fromUnmaskedIndex`, `getUnmaskedValue`, `MASK_PATTERNS`,\n * `MaskPattern`, `toUnmaskedIndex`. Barrel `src/index.ts` liệt kê TƯỜNG MINH đúng các tên này.\n * - NỘI BỘ — mọi tên còn lại, chỉ cho `mask-input.tsx`. Đừng đổi dòng barrel thành `export *`:\n * `DEFAULT_CURRENCY`, `REGEX_CACHE`… lọt ra entry chính là mời đụng tên và khoá cứng API.\n */\nexport {\n applyCurrencyMask,\n applyMask,\n applyPercentageMask,\n CURRENCY_PERCENTAGE_SYMBOLS,\n DEFAULT_CURRENCY,\n fromUnmaskedIndex,\n getCurrencyCaretPosition,\n getPatternCaretPosition,\n getUnmaskedValue,\n isCurrencyAtEnd,\n isCurrencyMask,\n MASK_PATTERNS,\n type MaskPattern,\n type MaskPatternKey,\n NUMERIC_MASK_PATTERNS,\n REGEX_CACHE,\n type TransformOptions,\n toUnmaskedIndex\n};\n"],"mappings":"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","names":["result","finalResult"]}
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import { MaskPatternKey, MaskPattern } from './mask-input-constants.js';
3
+
4
+ interface MaskInputProps extends React.ComponentProps<"input"> {
5
+ value?: string;
6
+ defaultValue?: string;
7
+ onValueChange?: (maskedValue: string, unmaskedValue: string) => void;
8
+ onValidate?: (isValid: boolean, unmaskedValue: string) => void;
9
+ validationMode?: "onChange" | "onBlur" | "onSubmit" | "onTouched" | "all";
10
+ /**
11
+ * Tên một mẫu dựng sẵn (`"currency"`, `"percentage"`, `"time"`, `"creditCard"`…) hoặc một
12
+ * `MaskPattern` tự viết. ⚠ `"phone"`, `"date"`, `"ssn"`, `"zipCode"`, `"ein"` là định dạng Hoa Kỳ
13
+ * — số điện thoại ở app Comitor dùng `PhoneInput`.
14
+ */
15
+ mask?: MaskPatternKey | MaskPattern;
16
+ maskPlaceholder?: string;
17
+ /**
18
+ * Mã tiền tệ ISO 4217 cho `mask="currency"`. Mặc định `"USD"`, như thượng nguồn.
19
+ *
20
+ * Tiền tệ là thiết lập VÙNG / nghiệp vụ, không suy từ ngôn ngữ: app Comitor truyền từ cài đặt
21
+ * workspace (vd `"VND"`). Trước `3.0.0` mặc định cứng là `"VND"`.
22
+ */
23
+ currency?: string;
24
+ /**
25
+ * Locale BCP 47 cho `mask="currency"` — quyết định dấu nhóm, dấu thập phân và vị trí ký hiệu.
26
+ * Không truyền thì theo `locale` của `ComitorLocaleProvider` (không có provider → `"en"` →
27
+ * `$1,234,567`; `"vi"` kèm `currency="VND"` → `1.234.567 ₫`).
28
+ *
29
+ * ⚠ Khác thượng nguồn: thượng nguồn mặc định cứng `"en-US"`. Trước `3.0.0` mặc định cứng là
30
+ * `"vi-VN"`.
31
+ */
32
+ locale?: string;
33
+ asChild?: boolean;
34
+ invalid?: boolean;
35
+ withoutMask?: boolean;
36
+ }
37
+ declare function MaskInput(props: MaskInputProps): React.JSX.Element;
38
+
39
+ export { MaskInput, type MaskInputProps };