@accelint/design-toolkit 9.2.0 → 9.4.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 (733) hide show
  1. package/README.md +15 -22
  2. package/catalog-info.yaml +4 -4
  3. package/dist/components/accordion/context.d.ts +6 -0
  4. package/dist/components/accordion/context.js +6 -0
  5. package/dist/components/accordion/context.js.map +1 -1
  6. package/dist/components/accordion/group.d.ts +37 -2
  7. package/dist/components/accordion/group.js +34 -0
  8. package/dist/components/accordion/group.js.map +1 -1
  9. package/dist/components/accordion/header.d.ts +27 -2
  10. package/dist/components/accordion/header.js +25 -1
  11. package/dist/components/accordion/header.js.map +1 -1
  12. package/dist/components/accordion/index.d.ts +18 -4
  13. package/dist/components/accordion/index.js +16 -2
  14. package/dist/components/accordion/index.js.map +1 -1
  15. package/dist/components/accordion/panel.d.ts +29 -2
  16. package/dist/components/accordion/panel.js +26 -0
  17. package/dist/components/accordion/panel.js.map +1 -1
  18. package/dist/components/accordion/trigger.d.ts +25 -2
  19. package/dist/components/accordion/trigger.js +23 -1
  20. package/dist/components/accordion/trigger.js.map +1 -1
  21. package/dist/components/accordion/types.d.ts +33 -0
  22. package/dist/components/action-bar/index.d.ts +35 -6
  23. package/dist/components/action-bar/index.js +33 -5
  24. package/dist/components/action-bar/index.js.map +1 -1
  25. package/dist/components/action-bar/styles.module.css +9 -1
  26. package/dist/components/action-bar/types.d.ts +8 -0
  27. package/dist/components/avatar/context.d.ts +22 -4
  28. package/dist/components/avatar/context.js +18 -0
  29. package/dist/components/avatar/context.js.map +1 -1
  30. package/dist/components/avatar/index.d.ts +22 -15
  31. package/dist/components/avatar/index.js +21 -14
  32. package/dist/components/avatar/index.js.map +1 -1
  33. package/dist/components/avatar/types.d.ts +13 -0
  34. package/dist/components/badge/context.d.ts +22 -4
  35. package/dist/components/badge/context.js +18 -0
  36. package/dist/components/badge/context.js.map +1 -1
  37. package/dist/components/badge/index.d.ts +30 -16
  38. package/dist/components/badge/index.js +28 -14
  39. package/dist/components/badge/index.js.map +1 -1
  40. package/dist/components/badge/types.d.ts +9 -0
  41. package/dist/components/breadcrumbs/index.d.ts +10 -2
  42. package/dist/components/breadcrumbs/index.js +7 -0
  43. package/dist/components/breadcrumbs/index.js.map +1 -1
  44. package/dist/components/breadcrumbs/item.d.ts +25 -2
  45. package/dist/components/breadcrumbs/item.js +23 -1
  46. package/dist/components/breadcrumbs/item.js.map +1 -1
  47. package/dist/components/breadcrumbs/types.d.ts +17 -0
  48. package/dist/components/button/context.d.ts +62 -8
  49. package/dist/components/button/context.js +54 -0
  50. package/dist/components/button/context.js.map +1 -1
  51. package/dist/components/button/index.d.ts +21 -2
  52. package/dist/components/button/index.js +19 -0
  53. package/dist/components/button/index.js.map +1 -1
  54. package/dist/components/button/link.d.ts +22 -2
  55. package/dist/components/button/link.js +20 -0
  56. package/dist/components/button/link.js.map +1 -1
  57. package/dist/components/button/toggle.d.ts +23 -2
  58. package/dist/components/button/toggle.js +22 -1
  59. package/dist/components/button/toggle.js.map +1 -1
  60. package/dist/components/button/types.d.ts +26 -0
  61. package/dist/components/checkbox/context.d.ts +9 -3
  62. package/dist/components/checkbox/context.js +6 -0
  63. package/dist/components/checkbox/context.js.map +1 -1
  64. package/dist/components/checkbox/group.d.ts +31 -2
  65. package/dist/components/checkbox/group.js +28 -0
  66. package/dist/components/checkbox/group.js.map +1 -1
  67. package/dist/components/checkbox/index.d.ts +19 -2
  68. package/dist/components/checkbox/index.js +19 -1
  69. package/dist/components/checkbox/index.js.map +1 -1
  70. package/dist/components/checkbox/types.d.ts +19 -0
  71. package/dist/components/chip/context.d.ts +22 -4
  72. package/dist/components/chip/context.js +18 -0
  73. package/dist/components/chip/context.js.map +1 -1
  74. package/dist/components/chip/deletable.d.ts +38 -2
  75. package/dist/components/chip/deletable.js +36 -1
  76. package/dist/components/chip/deletable.js.map +1 -1
  77. package/dist/components/chip/index.d.ts +24 -2
  78. package/dist/components/chip/index.js +22 -0
  79. package/dist/components/chip/index.js.map +1 -1
  80. package/dist/components/chip/list.d.ts +49 -4
  81. package/dist/components/chip/list.js +45 -0
  82. package/dist/components/chip/list.js.map +1 -1
  83. package/dist/components/chip/selectable.d.ts +34 -2
  84. package/dist/components/chip/selectable.js +31 -0
  85. package/dist/components/chip/selectable.js.map +1 -1
  86. package/dist/components/chip/types.d.ts +27 -0
  87. package/dist/components/classification-badge/context.d.ts +20 -4
  88. package/dist/components/classification-badge/context.js +16 -0
  89. package/dist/components/classification-badge/context.js.map +1 -1
  90. package/dist/components/classification-badge/index.d.ts +28 -10
  91. package/dist/components/classification-badge/index.js +25 -8
  92. package/dist/components/classification-badge/index.js.map +1 -1
  93. package/dist/components/classification-badge/types.d.ts +4 -0
  94. package/dist/components/classification-banner/context.d.ts +20 -4
  95. package/dist/components/classification-banner/context.js +16 -0
  96. package/dist/components/classification-banner/context.js.map +1 -1
  97. package/dist/components/classification-banner/index.d.ts +12 -2
  98. package/dist/components/classification-banner/index.js +9 -0
  99. package/dist/components/classification-banner/index.js.map +1 -1
  100. package/dist/components/classification-banner/types.d.ts +4 -0
  101. package/dist/components/clock/index.d.ts +12 -2
  102. package/dist/components/clock/index.js +10 -0
  103. package/dist/components/clock/index.js.map +1 -1
  104. package/dist/components/clock/types.d.ts +4 -0
  105. package/dist/components/color-picker/index.d.ts +12 -10
  106. package/dist/components/color-picker/index.js +10 -8
  107. package/dist/components/color-picker/index.js.map +1 -1
  108. package/dist/components/color-picker/types.d.ts +8 -0
  109. package/dist/components/combobox-field/context.d.ts +20 -4
  110. package/dist/components/combobox-field/context.js +16 -0
  111. package/dist/components/combobox-field/context.js.map +1 -1
  112. package/dist/components/combobox-field/index.d.ts +15 -2
  113. package/dist/components/combobox-field/index.js +57 -38
  114. package/dist/components/combobox-field/index.js.map +1 -1
  115. package/dist/components/combobox-field/styles.module.css +5 -1
  116. package/dist/components/combobox-field/types.d.ts +19 -0
  117. package/dist/components/coordinate-field/context.d.ts +15 -6
  118. package/dist/components/coordinate-field/context.js +9 -0
  119. package/dist/components/coordinate-field/context.js.map +1 -1
  120. package/dist/components/coordinate-field/coordinate-utils.d.ts +8 -0
  121. package/dist/components/coordinate-field/coordinate-utils.js +8 -0
  122. package/dist/components/coordinate-field/coordinate-utils.js.map +1 -1
  123. package/dist/components/coordinate-field/index.d.ts +29 -2
  124. package/dist/components/coordinate-field/index.js +32 -4
  125. package/dist/components/coordinate-field/index.js.map +1 -1
  126. package/dist/components/coordinate-field/segment.d.ts +28 -2
  127. package/dist/components/coordinate-field/segment.js +28 -1
  128. package/dist/components/coordinate-field/segment.js.map +1 -1
  129. package/dist/components/coordinate-field/styles.module.css +19 -1
  130. package/dist/components/coordinate-field/types.d.ts +2 -0
  131. package/dist/components/coordinate-field/types.js.map +1 -1
  132. package/dist/components/date-field/index.d.ts +28 -2
  133. package/dist/components/date-field/index.js +29 -2
  134. package/dist/components/date-field/index.js.map +1 -1
  135. package/dist/components/date-field/styles.module.css +4 -0
  136. package/dist/components/date-field/types.d.ts +19 -3
  137. package/dist/components/deferred-collection/index.d.ts +51 -0
  138. package/dist/components/deferred-collection/index.js +52 -0
  139. package/dist/components/deferred-collection/index.js.map +1 -0
  140. package/dist/components/deferred-collection/types.d.ts +29 -0
  141. package/dist/components/deferred-collection/types.js +12 -0
  142. package/dist/components/details-list/context.d.ts +25 -4
  143. package/dist/components/details-list/context.js +21 -0
  144. package/dist/components/details-list/context.js.map +1 -1
  145. package/dist/components/details-list/index.d.ts +9 -2
  146. package/dist/components/details-list/index.js +7 -0
  147. package/dist/components/details-list/index.js.map +1 -1
  148. package/dist/components/details-list/label.d.ts +18 -2
  149. package/dist/components/details-list/label.js +16 -0
  150. package/dist/components/details-list/label.js.map +1 -1
  151. package/dist/components/details-list/types.d.ts +14 -0
  152. package/dist/components/details-list/value.d.ts +20 -2
  153. package/dist/components/details-list/value.js +17 -0
  154. package/dist/components/details-list/value.js.map +1 -1
  155. package/dist/components/dialog/content.d.ts +23 -2
  156. package/dist/components/dialog/content.js +20 -0
  157. package/dist/components/dialog/content.js.map +1 -1
  158. package/dist/components/dialog/context.d.ts +5 -2
  159. package/dist/components/dialog/context.js +3 -0
  160. package/dist/components/dialog/context.js.map +1 -1
  161. package/dist/components/dialog/footer.d.ts +26 -2
  162. package/dist/components/dialog/footer.js +23 -0
  163. package/dist/components/dialog/footer.js.map +1 -1
  164. package/dist/components/dialog/index.d.ts +12 -2
  165. package/dist/components/dialog/index.js +10 -0
  166. package/dist/components/dialog/index.js.map +1 -1
  167. package/dist/components/dialog/title.d.ts +21 -2
  168. package/dist/components/dialog/title.js +18 -0
  169. package/dist/components/dialog/title.js.map +1 -1
  170. package/dist/components/dialog/trigger.d.ts +18 -0
  171. package/dist/components/dialog/trigger.js +17 -0
  172. package/dist/components/dialog/trigger.js.map +1 -1
  173. package/dist/components/dialog/types.d.ts +12 -0
  174. package/dist/components/divider/context.d.ts +24 -4
  175. package/dist/components/divider/context.js +20 -0
  176. package/dist/components/divider/context.js.map +1 -1
  177. package/dist/components/divider/index.d.ts +13 -2
  178. package/dist/components/divider/index.js +10 -0
  179. package/dist/components/divider/index.js.map +1 -1
  180. package/dist/components/divider/types.d.ts +4 -4
  181. package/dist/components/drawer/back.d.ts +21 -2
  182. package/dist/components/drawer/back.js +19 -1
  183. package/dist/components/drawer/back.js.map +1 -1
  184. package/dist/components/drawer/close.d.ts +25 -2
  185. package/dist/components/drawer/close.js +28 -3
  186. package/dist/components/drawer/close.js.map +1 -1
  187. package/dist/components/drawer/content.d.ts +22 -2
  188. package/dist/components/drawer/content.js +19 -0
  189. package/dist/components/drawer/content.js.map +1 -1
  190. package/dist/components/drawer/context.d.ts +46 -4
  191. package/dist/components/drawer/context.js +45 -2
  192. package/dist/components/drawer/context.js.map +1 -1
  193. package/dist/components/drawer/events.d.ts +2 -0
  194. package/dist/components/drawer/events.js +2 -0
  195. package/dist/components/drawer/events.js.map +1 -1
  196. package/dist/components/drawer/footer.d.ts +24 -2
  197. package/dist/components/drawer/footer.js +21 -0
  198. package/dist/components/drawer/footer.js.map +1 -1
  199. package/dist/components/drawer/header-title.d.ts +22 -4
  200. package/dist/components/drawer/header-title.js +19 -2
  201. package/dist/components/drawer/header-title.js.map +1 -1
  202. package/dist/components/drawer/header.d.ts +34 -2
  203. package/dist/components/drawer/header.js +42 -2
  204. package/dist/components/drawer/header.js.map +1 -1
  205. package/dist/components/drawer/index.d.ts +14 -2
  206. package/dist/components/drawer/index.js +16 -0
  207. package/dist/components/drawer/index.js.map +1 -1
  208. package/dist/components/drawer/layout-main.d.ts +23 -2
  209. package/dist/components/drawer/layout-main.js +20 -0
  210. package/dist/components/drawer/layout-main.js.map +1 -1
  211. package/dist/components/drawer/layout.d.ts +25 -2
  212. package/dist/components/drawer/layout.js +22 -0
  213. package/dist/components/drawer/layout.js.map +1 -1
  214. package/dist/components/drawer/menu-item.d.ts +25 -2
  215. package/dist/components/drawer/menu-item.js +22 -0
  216. package/dist/components/drawer/menu-item.js.map +1 -1
  217. package/dist/components/drawer/menu.d.ts +22 -2
  218. package/dist/components/drawer/menu.js +19 -0
  219. package/dist/components/drawer/menu.js.map +1 -1
  220. package/dist/components/drawer/panel.d.ts +21 -2
  221. package/dist/components/drawer/panel.js +18 -0
  222. package/dist/components/drawer/panel.js.map +1 -1
  223. package/dist/components/drawer/styles.module.css +2 -2
  224. package/dist/components/drawer/trigger.d.ts +31 -2
  225. package/dist/components/drawer/trigger.js +29 -1
  226. package/dist/components/drawer/trigger.js.map +1 -1
  227. package/dist/components/drawer/types.d.ts +149 -2
  228. package/dist/components/drawer/view.d.ts +25 -2
  229. package/dist/components/drawer/view.js +22 -0
  230. package/dist/components/drawer/view.js.map +1 -1
  231. package/dist/components/flashcard/index.d.ts +129 -27
  232. package/dist/components/flashcard/index.js +120 -18
  233. package/dist/components/flashcard/index.js.map +1 -1
  234. package/dist/components/flashcard/styles.module.css +1 -1
  235. package/dist/components/flashcard/types.d.ts +12 -0
  236. package/dist/components/hero/context.d.ts +5 -2
  237. package/dist/components/hero/context.js +3 -0
  238. package/dist/components/hero/context.js.map +1 -1
  239. package/dist/components/hero/index.d.ts +9 -2
  240. package/dist/components/hero/index.js +7 -0
  241. package/dist/components/hero/index.js.map +1 -1
  242. package/dist/components/hero/subtitle.d.ts +17 -2
  243. package/dist/components/hero/subtitle.js +15 -0
  244. package/dist/components/hero/subtitle.js.map +1 -1
  245. package/dist/components/hero/title.d.ts +15 -2
  246. package/dist/components/hero/title.js +13 -0
  247. package/dist/components/hero/title.js.map +1 -1
  248. package/dist/components/hero/types.d.ts +9 -0
  249. package/dist/components/hotkey/context.d.ts +24 -4
  250. package/dist/components/hotkey/context.js +20 -0
  251. package/dist/components/hotkey/context.js.map +1 -1
  252. package/dist/components/hotkey/index.d.ts +17 -2
  253. package/dist/components/hotkey/index.js +15 -0
  254. package/dist/components/hotkey/index.js.map +1 -1
  255. package/dist/components/hotkey/set.d.ts +21 -2
  256. package/dist/components/hotkey/set.js +18 -0
  257. package/dist/components/hotkey/set.js.map +1 -1
  258. package/dist/components/hotkey/types.d.ts +4 -0
  259. package/dist/components/icon/context.d.ts +24 -4
  260. package/dist/components/icon/context.js +20 -0
  261. package/dist/components/icon/context.js.map +1 -1
  262. package/dist/components/icon/index.d.ts +15 -2
  263. package/dist/components/icon/index.js +13 -0
  264. package/dist/components/icon/index.js.map +1 -1
  265. package/dist/components/icon/types.d.ts +4 -0
  266. package/dist/components/input/context.d.ts +6 -2
  267. package/dist/components/input/context.js +4 -0
  268. package/dist/components/input/context.js.map +1 -1
  269. package/dist/components/input/index.d.ts +17 -2
  270. package/dist/components/input/index.js +19 -3
  271. package/dist/components/input/index.js.map +1 -1
  272. package/dist/components/input/styles.module.css +5 -1
  273. package/dist/components/input/types.d.ts +16 -0
  274. package/dist/components/kanban/card-body.d.ts +10 -2
  275. package/dist/components/kanban/card-body.js +8 -0
  276. package/dist/components/kanban/card-body.js.map +1 -1
  277. package/dist/components/kanban/card-header-actions.d.ts +10 -2
  278. package/dist/components/kanban/card-header-actions.js +8 -0
  279. package/dist/components/kanban/card-header-actions.js.map +1 -1
  280. package/dist/components/kanban/card-header-title.d.ts +10 -2
  281. package/dist/components/kanban/card-header-title.js +8 -0
  282. package/dist/components/kanban/card-header-title.js.map +1 -1
  283. package/dist/components/kanban/card-header.d.ts +12 -2
  284. package/dist/components/kanban/card-header.js +10 -0
  285. package/dist/components/kanban/card-header.js.map +1 -1
  286. package/dist/components/kanban/card.d.ts +26 -2
  287. package/dist/components/kanban/card.js +23 -0
  288. package/dist/components/kanban/card.js.map +1 -1
  289. package/dist/components/kanban/column-actions.d.ts +10 -2
  290. package/dist/components/kanban/column-actions.js +9 -1
  291. package/dist/components/kanban/column-actions.js.map +1 -1
  292. package/dist/components/kanban/column-container.d.ts +10 -2
  293. package/dist/components/kanban/column-container.js +8 -0
  294. package/dist/components/kanban/column-container.js.map +1 -1
  295. package/dist/components/kanban/column-content.d.ts +13 -2
  296. package/dist/components/kanban/column-content.js +11 -0
  297. package/dist/components/kanban/column-content.js.map +1 -1
  298. package/dist/components/kanban/column-header-actions.d.ts +13 -2
  299. package/dist/components/kanban/column-header-actions.js +11 -0
  300. package/dist/components/kanban/column-header-actions.js.map +1 -1
  301. package/dist/components/kanban/column-header-drag-handle.d.ts +7 -2
  302. package/dist/components/kanban/column-header-drag-handle.js +6 -1
  303. package/dist/components/kanban/column-header-drag-handle.js.map +1 -1
  304. package/dist/components/kanban/column-header-title.d.ts +10 -2
  305. package/dist/components/kanban/column-header-title.js +8 -0
  306. package/dist/components/kanban/column-header-title.js.map +1 -1
  307. package/dist/components/kanban/column-header.d.ts +12 -2
  308. package/dist/components/kanban/column-header.js +10 -0
  309. package/dist/components/kanban/column-header.js.map +1 -1
  310. package/dist/components/kanban/column.d.ts +22 -2
  311. package/dist/components/kanban/column.js +19 -0
  312. package/dist/components/kanban/column.js.map +1 -1
  313. package/dist/components/kanban/context.d.ts +49 -2
  314. package/dist/components/kanban/context.js +30 -0
  315. package/dist/components/kanban/context.js.map +1 -1
  316. package/dist/components/kanban/header-actions.d.ts +10 -2
  317. package/dist/components/kanban/header-actions.js +8 -0
  318. package/dist/components/kanban/header-actions.js.map +1 -1
  319. package/dist/components/kanban/header-search.d.ts +9 -2
  320. package/dist/components/kanban/header-search.js +7 -0
  321. package/dist/components/kanban/header-search.js.map +1 -1
  322. package/dist/components/kanban/header-title.d.ts +10 -2
  323. package/dist/components/kanban/header-title.js +8 -0
  324. package/dist/components/kanban/header-title.js.map +1 -1
  325. package/dist/components/kanban/header.d.ts +12 -2
  326. package/dist/components/kanban/header.js +10 -0
  327. package/dist/components/kanban/header.js.map +1 -1
  328. package/dist/components/kanban/kanban.d.ts +33 -4
  329. package/dist/components/kanban/kanban.js +29 -0
  330. package/dist/components/kanban/kanban.js.map +1 -1
  331. package/dist/components/kanban/types.d.ts +51 -0
  332. package/dist/components/label/context.d.ts +25 -4
  333. package/dist/components/label/context.js +21 -0
  334. package/dist/components/label/context.js.map +1 -1
  335. package/dist/components/label/index.d.ts +16 -2
  336. package/dist/components/label/index.js +14 -0
  337. package/dist/components/label/index.js.map +1 -1
  338. package/dist/components/label/types.d.ts +5 -0
  339. package/dist/components/lines/index.d.ts +12 -2
  340. package/dist/components/lines/index.js +9 -0
  341. package/dist/components/lines/index.js.map +1 -1
  342. package/dist/components/lines/types.d.ts +6 -0
  343. package/dist/components/link/context.d.ts +21 -2
  344. package/dist/components/link/context.js +18 -0
  345. package/dist/components/link/context.js.map +1 -1
  346. package/dist/components/link/index.d.ts +12 -2
  347. package/dist/components/link/index.js +9 -0
  348. package/dist/components/link/index.js.map +1 -1
  349. package/dist/components/link/types.d.ts +5 -0
  350. package/dist/components/list/context.d.ts +11 -2
  351. package/dist/components/list/context.js +9 -0
  352. package/dist/components/list/context.js.map +1 -1
  353. package/dist/components/list/index.d.ts +11 -2
  354. package/dist/components/list/index.js +9 -0
  355. package/dist/components/list/index.js.map +1 -1
  356. package/dist/components/list/item-content.d.ts +9 -2
  357. package/dist/components/list/item-content.js +6 -0
  358. package/dist/components/list/item-content.js.map +1 -1
  359. package/dist/components/list/item-description.d.ts +9 -2
  360. package/dist/components/list/item-description.js +7 -0
  361. package/dist/components/list/item-description.js.map +1 -1
  362. package/dist/components/list/item-title.d.ts +9 -2
  363. package/dist/components/list/item-title.js +7 -0
  364. package/dist/components/list/item-title.js.map +1 -1
  365. package/dist/components/list/item.d.ts +10 -2
  366. package/dist/components/list/item.js +8 -0
  367. package/dist/components/list/item.js.map +1 -1
  368. package/dist/components/list/types.d.ts +22 -0
  369. package/dist/components/menu/context.d.ts +6 -2
  370. package/dist/components/menu/context.js +4 -0
  371. package/dist/components/menu/context.js.map +1 -1
  372. package/dist/components/menu/index.d.ts +24 -3
  373. package/dist/components/menu/index.js +22 -1
  374. package/dist/components/menu/index.js.map +1 -1
  375. package/dist/components/menu/item-description.d.ts +17 -2
  376. package/dist/components/menu/item-description.js +15 -0
  377. package/dist/components/menu/item-description.js.map +1 -1
  378. package/dist/components/menu/item-label.d.ts +17 -2
  379. package/dist/components/menu/item-label.js +15 -0
  380. package/dist/components/menu/item-label.js.map +1 -1
  381. package/dist/components/menu/item.d.ts +23 -2
  382. package/dist/components/menu/item.js +21 -1
  383. package/dist/components/menu/item.js.map +1 -1
  384. package/dist/components/menu/section.d.ts +23 -2
  385. package/dist/components/menu/section.js +20 -0
  386. package/dist/components/menu/section.js.map +1 -1
  387. package/dist/components/menu/separator.d.ts +16 -2
  388. package/dist/components/menu/separator.js +14 -0
  389. package/dist/components/menu/separator.js.map +1 -1
  390. package/dist/components/menu/styles.module.css +62 -46
  391. package/dist/components/menu/submenu.d.ts +18 -2
  392. package/dist/components/menu/submenu.js +16 -0
  393. package/dist/components/menu/submenu.js.map +1 -1
  394. package/dist/components/menu/trigger.d.ts +15 -0
  395. package/dist/components/menu/trigger.js +15 -0
  396. package/dist/components/menu/trigger.js.map +1 -1
  397. package/dist/components/menu/types.d.ts +25 -0
  398. package/dist/components/notice/events.d.ts +9 -0
  399. package/dist/components/notice/events.js +9 -0
  400. package/dist/components/notice/events.js.map +1 -1
  401. package/dist/components/notice/index.d.ts +34 -2
  402. package/dist/components/notice/index.js +32 -1
  403. package/dist/components/notice/index.js.map +1 -1
  404. package/dist/components/notice/list.d.ts +31 -2
  405. package/dist/components/notice/list.js +28 -0
  406. package/dist/components/notice/list.js.map +1 -1
  407. package/dist/components/notice/notice-icon.d.ts +22 -2
  408. package/dist/components/notice/notice-icon.js +23 -1
  409. package/dist/components/notice/notice-icon.js.map +1 -1
  410. package/dist/components/notice/types.d.ts +60 -0
  411. package/dist/components/notice/utils.d.ts +8 -0
  412. package/dist/components/notice/utils.js +8 -0
  413. package/dist/components/notice/utils.js.map +1 -1
  414. package/dist/components/options/context.d.ts +3 -2
  415. package/dist/components/options/context.js +1 -0
  416. package/dist/components/options/context.js.map +1 -1
  417. package/dist/components/options/index.d.ts +15 -2
  418. package/dist/components/options/index.js +13 -0
  419. package/dist/components/options/index.js.map +1 -1
  420. package/dist/components/options/item-content.d.ts +22 -2
  421. package/dist/components/options/item-content.js +19 -0
  422. package/dist/components/options/item-content.js.map +1 -1
  423. package/dist/components/options/item-description.d.ts +14 -2
  424. package/dist/components/options/item-description.js +12 -0
  425. package/dist/components/options/item-description.js.map +1 -1
  426. package/dist/components/options/item-label.d.ts +14 -2
  427. package/dist/components/options/item-label.js +12 -0
  428. package/dist/components/options/item-label.js.map +1 -1
  429. package/dist/components/options/item.d.ts +22 -0
  430. package/dist/components/options/item.js +21 -0
  431. package/dist/components/options/item.js.map +1 -1
  432. package/dist/components/options/section.d.ts +21 -2
  433. package/dist/components/options/section.js +18 -0
  434. package/dist/components/options/section.js.map +1 -1
  435. package/dist/components/options/types.d.ts +24 -0
  436. package/dist/components/pagination/context.d.ts +3 -2
  437. package/dist/components/pagination/context.js +1 -0
  438. package/dist/components/pagination/context.js.map +1 -1
  439. package/dist/components/pagination/index.d.ts +18 -11
  440. package/dist/components/pagination/index.js +15 -9
  441. package/dist/components/pagination/index.js.map +1 -1
  442. package/dist/components/pagination/next.d.ts +17 -2
  443. package/dist/components/pagination/next.js +15 -0
  444. package/dist/components/pagination/next.js.map +1 -1
  445. package/dist/components/pagination/pages.d.ts +21 -2
  446. package/dist/components/pagination/pages.js +18 -0
  447. package/dist/components/pagination/pages.js.map +1 -1
  448. package/dist/components/pagination/prev.d.ts +17 -2
  449. package/dist/components/pagination/prev.js +16 -1
  450. package/dist/components/pagination/prev.js.map +1 -1
  451. package/dist/components/pagination/types.d.ts +32 -0
  452. package/dist/components/pagination/utils.d.ts +35 -0
  453. package/dist/components/pagination/utils.js +35 -0
  454. package/dist/components/pagination/utils.js.map +1 -1
  455. package/dist/components/popover/content.d.ts +20 -2
  456. package/dist/components/popover/content.js +17 -0
  457. package/dist/components/popover/content.js.map +1 -1
  458. package/dist/components/popover/footer.d.ts +22 -2
  459. package/dist/components/popover/footer.js +19 -0
  460. package/dist/components/popover/footer.js.map +1 -1
  461. package/dist/components/popover/index.d.ts +9 -2
  462. package/dist/components/popover/index.js +8 -1
  463. package/dist/components/popover/index.js.map +1 -1
  464. package/dist/components/popover/styles.module.css +6 -0
  465. package/dist/components/popover/title.d.ts +17 -2
  466. package/dist/components/popover/title.js +15 -0
  467. package/dist/components/popover/title.js.map +1 -1
  468. package/dist/components/popover/trigger.d.ts +24 -2
  469. package/dist/components/popover/trigger.js +21 -0
  470. package/dist/components/popover/trigger.js.map +1 -1
  471. package/dist/components/popover/types.d.ts +10 -0
  472. package/dist/components/query-builder/action-element.d.ts +20 -2
  473. package/dist/components/query-builder/action-element.js +17 -0
  474. package/dist/components/query-builder/action-element.js.map +1 -1
  475. package/dist/components/query-builder/actions.d.ts +37 -4
  476. package/dist/components/query-builder/actions.js +36 -1
  477. package/dist/components/query-builder/actions.js.map +1 -1
  478. package/dist/components/query-builder/combinator-selector.d.ts +10 -2
  479. package/dist/components/query-builder/combinator-selector.js +8 -0
  480. package/dist/components/query-builder/combinator-selector.js.map +1 -1
  481. package/dist/components/query-builder/constants.d.ts +1 -0
  482. package/dist/components/query-builder/constants.js +1 -0
  483. package/dist/components/query-builder/constants.js.map +1 -1
  484. package/dist/components/query-builder/index.d.ts +11 -2
  485. package/dist/components/query-builder/index.js +9 -0
  486. package/dist/components/query-builder/index.js.map +1 -1
  487. package/dist/components/query-builder/rule-group.d.ts +52 -4
  488. package/dist/components/query-builder/rule-group.js +47 -0
  489. package/dist/components/query-builder/rule-group.js.map +1 -1
  490. package/dist/components/query-builder/rule.d.ts +20 -2
  491. package/dist/components/query-builder/rule.js +18 -0
  492. package/dist/components/query-builder/rule.js.map +1 -1
  493. package/dist/components/query-builder/types.d.ts +9 -0
  494. package/dist/components/query-builder/utils.d.ts +15 -0
  495. package/dist/components/query-builder/utils.js +15 -0
  496. package/dist/components/query-builder/utils.js.map +1 -1
  497. package/dist/components/query-builder/value-editor.d.ts +23 -2
  498. package/dist/components/query-builder/value-editor.js +20 -0
  499. package/dist/components/query-builder/value-editor.js.map +1 -1
  500. package/dist/components/query-builder/value-selector.d.ts +23 -2
  501. package/dist/components/query-builder/value-selector.js +20 -0
  502. package/dist/components/query-builder/value-selector.js.map +1 -1
  503. package/dist/components/radio/context.d.ts +2 -2
  504. package/dist/components/radio/group.d.ts +19 -2
  505. package/dist/components/radio/group.js +16 -0
  506. package/dist/components/radio/group.js.map +1 -1
  507. package/dist/components/radio/index.d.ts +13 -26
  508. package/dist/components/radio/index.js +11 -24
  509. package/dist/components/radio/index.js.map +1 -1
  510. package/dist/components/radio/types.d.ts +16 -0
  511. package/dist/components/search-field/context.d.ts +7 -4
  512. package/dist/components/search-field/context.js +3 -0
  513. package/dist/components/search-field/context.js.map +1 -1
  514. package/dist/components/search-field/index.d.ts +15 -24
  515. package/dist/components/search-field/index.js +16 -23
  516. package/dist/components/search-field/index.js.map +1 -1
  517. package/dist/components/search-field/types.d.ts +13 -0
  518. package/dist/components/select-field/context.d.ts +11 -4
  519. package/dist/components/select-field/context.js +7 -0
  520. package/dist/components/select-field/context.js.map +1 -1
  521. package/dist/components/select-field/index.d.ts +19 -39
  522. package/dist/components/select-field/index.js +28 -42
  523. package/dist/components/select-field/index.js.map +1 -1
  524. package/dist/components/select-field/styles.module.css +12 -0
  525. package/dist/components/select-field/types.d.ts +19 -0
  526. package/dist/components/sidenav/avatar.d.ts +19 -2
  527. package/dist/components/sidenav/avatar.js +16 -0
  528. package/dist/components/sidenav/avatar.js.map +1 -1
  529. package/dist/components/sidenav/content.d.ts +23 -2
  530. package/dist/components/sidenav/content.js +20 -0
  531. package/dist/components/sidenav/content.js.map +1 -1
  532. package/dist/components/sidenav/context.d.ts +3 -2
  533. package/dist/components/sidenav/context.js +1 -0
  534. package/dist/components/sidenav/context.js.map +1 -1
  535. package/dist/components/sidenav/events.d.ts +2 -0
  536. package/dist/components/sidenav/events.js +2 -0
  537. package/dist/components/sidenav/events.js.map +1 -1
  538. package/dist/components/sidenav/footer.d.ts +16 -2
  539. package/dist/components/sidenav/footer.js +13 -0
  540. package/dist/components/sidenav/footer.js.map +1 -1
  541. package/dist/components/sidenav/header.d.ts +20 -2
  542. package/dist/components/sidenav/header.js +18 -1
  543. package/dist/components/sidenav/header.js.map +1 -1
  544. package/dist/components/sidenav/index.d.ts +11 -2
  545. package/dist/components/sidenav/index.js +9 -0
  546. package/dist/components/sidenav/index.js.map +1 -1
  547. package/dist/components/sidenav/item.d.ts +17 -2
  548. package/dist/components/sidenav/item.js +14 -0
  549. package/dist/components/sidenav/item.js.map +1 -1
  550. package/dist/components/sidenav/link.d.ts +17 -2
  551. package/dist/components/sidenav/link.js +15 -1
  552. package/dist/components/sidenav/link.js.map +1 -1
  553. package/dist/components/sidenav/menu-item.d.ts +16 -2
  554. package/dist/components/sidenav/menu-item.js +13 -0
  555. package/dist/components/sidenav/menu-item.js.map +1 -1
  556. package/dist/components/sidenav/menu.d.ts +19 -2
  557. package/dist/components/sidenav/menu.js +17 -1
  558. package/dist/components/sidenav/menu.js.map +1 -1
  559. package/dist/components/sidenav/trigger.d.ts +17 -2
  560. package/dist/components/sidenav/trigger.js +14 -0
  561. package/dist/components/sidenav/trigger.js.map +1 -1
  562. package/dist/components/sidenav/types.d.ts +53 -0
  563. package/dist/components/skeleton/index.d.ts +12 -27
  564. package/dist/components/skeleton/index.js +10 -24
  565. package/dist/components/skeleton/index.js.map +1 -1
  566. package/dist/components/skeleton/types.d.ts +4 -0
  567. package/dist/components/slider/index.d.ts +30 -29
  568. package/dist/components/slider/index.js +28 -27
  569. package/dist/components/slider/index.js.map +1 -1
  570. package/dist/components/slider/types.d.ts +18 -0
  571. package/dist/components/switch/context.d.ts +16 -10
  572. package/dist/components/switch/context.js +13 -7
  573. package/dist/components/switch/context.js.map +1 -1
  574. package/dist/components/switch/index.d.ts +14 -31
  575. package/dist/components/switch/index.js +12 -29
  576. package/dist/components/switch/index.js.map +1 -1
  577. package/dist/components/switch/types.d.ts +5 -0
  578. package/dist/components/table/body.d.ts +21 -2
  579. package/dist/components/table/body.js +18 -0
  580. package/dist/components/table/body.js.map +1 -1
  581. package/dist/components/table/cell.d.ts +22 -2
  582. package/dist/components/table/cell.js +19 -0
  583. package/dist/components/table/cell.js.map +1 -1
  584. package/dist/components/table/constants/table.d.ts +6 -0
  585. package/dist/components/table/constants/table.js +4 -0
  586. package/dist/components/table/constants/table.js.map +1 -1
  587. package/dist/components/table/context.d.ts +1 -0
  588. package/dist/components/table/context.js +1 -0
  589. package/dist/components/table/context.js.map +1 -1
  590. package/dist/components/table/header-cell.d.ts +24 -2
  591. package/dist/components/table/header-cell.js +24 -1
  592. package/dist/components/table/header-cell.js.map +1 -1
  593. package/dist/components/table/header.d.ts +22 -2
  594. package/dist/components/table/header.js +19 -0
  595. package/dist/components/table/header.js.map +1 -1
  596. package/dist/components/table/index.d.ts +28 -6
  597. package/dist/components/table/index.js +27 -5
  598. package/dist/components/table/index.js.map +1 -1
  599. package/dist/components/table/row.d.ts +26 -2
  600. package/dist/components/table/row.js +23 -0
  601. package/dist/components/table/row.js.map +1 -1
  602. package/dist/components/table/types.d.ts +3 -0
  603. package/dist/components/tabs/context.d.ts +20 -10
  604. package/dist/components/tabs/context.js +17 -7
  605. package/dist/components/tabs/context.js.map +1 -1
  606. package/dist/components/tabs/index.d.ts +17 -40
  607. package/dist/components/tabs/index.js +15 -38
  608. package/dist/components/tabs/index.js.map +1 -1
  609. package/dist/components/tabs/list.d.ts +20 -4
  610. package/dist/components/tabs/list.js +17 -2
  611. package/dist/components/tabs/list.js.map +1 -1
  612. package/dist/components/tabs/panel.d.ts +21 -4
  613. package/dist/components/tabs/panel.js +18 -2
  614. package/dist/components/tabs/panel.js.map +1 -1
  615. package/dist/components/tabs/tab.d.ts +17 -4
  616. package/dist/components/tabs/tab.js +14 -2
  617. package/dist/components/tabs/tab.js.map +1 -1
  618. package/dist/components/tabs/types.d.ts +3 -0
  619. package/dist/components/text-area-field/context.d.ts +20 -10
  620. package/dist/components/text-area-field/context.js +17 -7
  621. package/dist/components/text-area-field/context.js.map +1 -1
  622. package/dist/components/text-area-field/index.d.ts +20 -15
  623. package/dist/components/text-area-field/index.js +18 -13
  624. package/dist/components/text-area-field/index.js.map +1 -1
  625. package/dist/components/text-area-field/styles.module.css +5 -1
  626. package/dist/components/text-area-field/types.d.ts +9 -0
  627. package/dist/components/text-field/context.d.ts +24 -4
  628. package/dist/components/text-field/context.js +20 -0
  629. package/dist/components/text-field/context.js.map +1 -1
  630. package/dist/components/text-field/index.d.ts +17 -82
  631. package/dist/components/text-field/index.js +15 -80
  632. package/dist/components/text-field/index.js.map +1 -1
  633. package/dist/components/text-field/types.d.ts +9 -0
  634. package/dist/components/time-field/index.d.ts +24 -5
  635. package/dist/components/time-field/index.js +25 -6
  636. package/dist/components/time-field/index.js.map +1 -1
  637. package/dist/components/time-field/styles.module.css +5 -2
  638. package/dist/components/time-field/types.d.ts +9 -0
  639. package/dist/components/tooltip/context.d.ts +3 -2
  640. package/dist/components/tooltip/context.js +1 -0
  641. package/dist/components/tooltip/context.js.map +1 -1
  642. package/dist/components/tooltip/index.d.ts +15 -30
  643. package/dist/components/tooltip/index.js +13 -28
  644. package/dist/components/tooltip/index.js.map +1 -1
  645. package/dist/components/tooltip/trigger.d.ts +22 -2
  646. package/dist/components/tooltip/trigger.js +19 -0
  647. package/dist/components/tooltip/trigger.js.map +1 -1
  648. package/dist/components/tooltip/types.d.ts +7 -0
  649. package/dist/components/tree/context.d.ts +5 -9
  650. package/dist/components/tree/context.js +2 -6
  651. package/dist/components/tree/context.js.map +1 -1
  652. package/dist/components/tree/index.d.ts +30 -8
  653. package/dist/components/tree/index.js +28 -6
  654. package/dist/components/tree/index.js.map +1 -1
  655. package/dist/components/tree/item-actions.d.ts +19 -4
  656. package/dist/components/tree/item-actions.js +16 -2
  657. package/dist/components/tree/item-actions.js.map +1 -1
  658. package/dist/components/tree/item-content.d.ts +18 -4
  659. package/dist/components/tree/item-content.js +20 -3
  660. package/dist/components/tree/item-content.js.map +1 -1
  661. package/dist/components/tree/item-description.d.ts +15 -4
  662. package/dist/components/tree/item-description.js +13 -2
  663. package/dist/components/tree/item-description.js.map +1 -1
  664. package/dist/components/tree/item-label.d.ts +15 -4
  665. package/dist/components/tree/item-label.js +13 -2
  666. package/dist/components/tree/item-label.js.map +1 -1
  667. package/dist/components/tree/item-prefix-icon.d.ts +15 -4
  668. package/dist/components/tree/item-prefix-icon.js +13 -2
  669. package/dist/components/tree/item-prefix-icon.js.map +1 -1
  670. package/dist/components/tree/item.d.ts +24 -4
  671. package/dist/components/tree/item.js +21 -2
  672. package/dist/components/tree/item.js.map +1 -1
  673. package/dist/components/tree/lines.d.ts +10 -2
  674. package/dist/components/tree/lines.js +8 -0
  675. package/dist/components/tree/lines.js.map +1 -1
  676. package/dist/components/tree/types.d.ts +26 -0
  677. package/dist/components/view-stack/context.d.ts +20 -9
  678. package/dist/components/view-stack/context.js +18 -7
  679. package/dist/components/view-stack/context.js.map +1 -1
  680. package/dist/components/view-stack/events.d.ts +2 -0
  681. package/dist/components/view-stack/events.js +2 -0
  682. package/dist/components/view-stack/events.js.map +1 -1
  683. package/dist/components/view-stack/index.d.ts +16 -24
  684. package/dist/components/view-stack/index.js +14 -22
  685. package/dist/components/view-stack/index.js.map +1 -1
  686. package/dist/components/view-stack/trigger.d.ts +26 -4
  687. package/dist/components/view-stack/trigger.js +23 -2
  688. package/dist/components/view-stack/trigger.js.map +1 -1
  689. package/dist/components/view-stack/types.d.ts +29 -0
  690. package/dist/components/view-stack/view.d.ts +22 -2
  691. package/dist/components/view-stack/view.js +19 -0
  692. package/dist/components/view-stack/view.js.map +1 -1
  693. package/dist/hooks/coordinate-field/use-coordinate-copy.d.ts +44 -0
  694. package/dist/hooks/coordinate-field/use-coordinate-copy.js +35 -0
  695. package/dist/hooks/coordinate-field/use-coordinate-copy.js.map +1 -1
  696. package/dist/hooks/coordinate-field/use-coordinate-field-state.d.ts +69 -0
  697. package/dist/hooks/coordinate-field/use-coordinate-field-state.js +50 -0
  698. package/dist/hooks/coordinate-field/use-coordinate-field-state.js.map +1 -1
  699. package/dist/hooks/coordinate-field/use-coordinate-field.d.ts +61 -0
  700. package/dist/hooks/coordinate-field/use-coordinate-field.js +47 -0
  701. package/dist/hooks/coordinate-field/use-coordinate-field.js.map +1 -1
  702. package/dist/hooks/coordinate-field/use-coordinate-focus.d.ts +51 -0
  703. package/dist/hooks/coordinate-field/use-coordinate-focus.js +39 -0
  704. package/dist/hooks/coordinate-field/use-coordinate-focus.js.map +1 -1
  705. package/dist/hooks/coordinate-field/use-coordinate-paste.d.ts +63 -0
  706. package/dist/hooks/coordinate-field/use-coordinate-paste.js +51 -0
  707. package/dist/hooks/coordinate-field/use-coordinate-paste.js.map +1 -1
  708. package/dist/hooks/coordinate-field/use-timeout-cleanup.d.ts +32 -0
  709. package/dist/hooks/coordinate-field/use-timeout-cleanup.js +30 -0
  710. package/dist/hooks/coordinate-field/use-timeout-cleanup.js.map +1 -1
  711. package/dist/hooks/use-frame-delay/index.d.ts +43 -0
  712. package/dist/hooks/use-frame-delay/index.js +66 -0
  713. package/dist/hooks/use-frame-delay/index.js.map +1 -0
  714. package/dist/hooks/use-tree/actions/index.d.ts +4 -2
  715. package/dist/hooks/use-tree/actions/index.js +4 -2
  716. package/dist/hooks/use-tree/actions/index.js.map +1 -1
  717. package/dist/hooks/use-tree/state/index.d.ts +7 -0
  718. package/dist/hooks/use-tree/state/index.js +7 -0
  719. package/dist/hooks/use-tree/state/index.js.map +1 -1
  720. package/dist/hooks/use-tree/types.d.ts +22 -0
  721. package/dist/index.d.ts +7 -4
  722. package/dist/index.js +4 -2
  723. package/dist/lib/types.d.ts +17 -0
  724. package/dist/lib/utils.d.ts +15 -0
  725. package/dist/lib/utils.js +15 -0
  726. package/dist/lib/utils.js.map +1 -1
  727. package/dist/providers/portal.d.ts +11 -2
  728. package/dist/providers/portal.js +9 -0
  729. package/dist/providers/portal.js.map +1 -1
  730. package/dist/providers/theme-provider.d.ts +18 -2
  731. package/dist/providers/theme-provider.js +15 -0
  732. package/dist/providers/theme-provider.js.map +1 -1
  733. package/package.json +15 -12
@@ -30,7 +30,29 @@ import { jsx } from "react/jsx-runtime";
30
30
  * - Directional: "[NSEW]" - for DDM/DMS direction indicators
31
31
  * - Alphanumeric: "[0-9A-Z]" - for MGRS/UTM zone identifiers
32
32
  *
33
+ * @param props - The coordinate segment props.
34
+ * @param props.value - Current value of the segment.
35
+ * @param props.onChange - Callback when the segment value changes.
36
+ * @param props.onFocus - Callback when the segment gains focus.
37
+ * @param props.onBlur - Callback when the segment loses focus.
38
+ * @param props.onKeyDown - Callback for key down events.
39
+ * @param props.placeholder - Placeholder text for the segment.
40
+ * @param props.maxLength - Maximum character length for the segment.
41
+ * @param props.className - Additional CSS class name.
42
+ * @param props.isDisabled - Whether the segment is disabled.
43
+ * @param props.isReadOnly - Whether the segment is read-only.
44
+ * @param props.allowedChars - Regex pattern for allowed characters.
45
+ * @param props.segmentRef - Ref for the segment input element.
46
+ * @param props.segmentIndex - Index of this segment within the coordinate field.
47
+ * @param props.totalSegments - Total number of segments in the coordinate field.
48
+ * @param props.onAutoAdvance - Callback to advance focus to the next segment.
49
+ * @param props.onAutoRetreat - Callback to retreat focus to the previous segment.
50
+ * @param props.pad - Padding value for width calculation.
51
+ * @param props.ariaLabel - Accessible label for the segment.
52
+ * @returns The coordinate segment input component.
53
+ *
33
54
  * @example
55
+ * ```tsx
34
56
  * // Numeric segment (latitude degrees)
35
57
  * <CoordinateSegment
36
58
  * value={latDegrees}
@@ -39,8 +61,10 @@ import { jsx } from "react/jsx-runtime";
39
61
  * maxLength={10}
40
62
  * placeholder="00.00000"
41
63
  * />
64
+ * ```
42
65
  *
43
66
  * @example
67
+ * ```tsx
44
68
  * // Directional segment (latitude direction)
45
69
  * <CoordinateSegment
46
70
  * value={latDir}
@@ -49,8 +73,9 @@ import { jsx } from "react/jsx-runtime";
49
73
  * maxLength={1}
50
74
  * placeholder="N"
51
75
  * />
76
+ * ```
52
77
  */
53
- function CoordinateSegment({ value, onChange, onFocus, onBlur, onKeyDown, placeholder, maxLength, className, isDisabled, allowedChars, segmentRef, segmentIndex, totalSegments: _totalSegments, onAutoAdvance, onAutoRetreat, pad, ariaLabel }) {
78
+ function CoordinateSegment({ value, onChange, onFocus, onBlur, onKeyDown, placeholder, maxLength, className, isDisabled, isReadOnly, allowedChars, segmentRef, segmentIndex, totalSegments: _totalSegments, onAutoAdvance, onAutoRetreat, pad, ariaLabel }) {
54
79
  const contextState = useCoordinateFieldStateContext();
55
80
  const effectiveIsDisabled = contextState.isDisabled ?? isDisabled;
56
81
  const dynamicWidth = useMemo(() => {
@@ -120,7 +145,9 @@ function CoordinateSegment({ value, onChange, onFocus, onBlur, onKeyDown, placeh
120
145
  onBlur?.();
121
146
  };
122
147
  return /* @__PURE__ */ jsx("input", {
148
+ readOnly: isReadOnly,
123
149
  ref: segmentRef,
150
+ tabIndex: isReadOnly ? -1 : 0,
124
151
  type: "text",
125
152
  value,
126
153
  onChange: handleChange,
@@ -1 +1 @@
1
- {"version":3,"file":"segment.js","names":[],"sources":["../../../src/components/coordinate-field/segment.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { useMemo } from 'react';\nimport { useCoordinateFieldStateContext } from './context';\nimport type { ChangeEvent, FocusEvent, KeyboardEvent } from 'react';\nimport type { CoordinateSegmentProps } from './types';\n\n/**\n * CoordinateSegment - A controlled input component for a single coordinate segment\n *\n * This component represents one editable part of a coordinate (e.g., degrees, minutes, direction).\n * It handles character filtering, focus management, and keyboard navigation.\n *\n * Segment Types (determined by allowedChars):\n * - Numeric: \"[0-9\\\\-\\\\.]\" - for DD degrees, DDM/DMS degrees/minutes/seconds\n * - Directional: \"[NSEW]\" - for DDM/DMS direction indicators\n * - Alphanumeric: \"[0-9A-Z]\" - for MGRS/UTM zone identifiers\n *\n * @example\n * // Numeric segment (latitude degrees)\n * <CoordinateSegment\n * value={latDegrees}\n * onChange={setLatDegrees}\n * allowedChars=\"[0-9\\\\-\\\\.]\"\n * maxLength={10}\n * placeholder=\"00.00000\"\n * />\n *\n * @example\n * // Directional segment (latitude direction)\n * <CoordinateSegment\n * value={latDir}\n * onChange={setLatDir}\n * allowedChars=\"[NS]\"\n * maxLength={1}\n * placeholder=\"N\"\n * />\n */\nexport function CoordinateSegment({\n value,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n placeholder,\n maxLength,\n className,\n isDisabled,\n allowedChars,\n segmentRef,\n segmentIndex,\n totalSegments: _totalSegments,\n onAutoAdvance,\n onAutoRetreat,\n pad,\n ariaLabel,\n}: CoordinateSegmentProps) {\n const contextState = useCoordinateFieldStateContext();\n\n const effectiveIsDisabled = contextState.isDisabled ?? isDisabled;\n\n // Calculate dynamic width based on focus state\n const dynamicWidth = useMemo(() => {\n if (maxLength === undefined) {\n return undefined;\n }\n\n // Default padding to 0.5 if not specified\n const padding = pad ?? 0.5;\n\n // When blurred, use value length (or maxLength if empty) + padding\n const contentLength = value.length > 0 ? value.length : maxLength;\n return contentLength + padding;\n }, [maxLength, pad, value.length]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(newValue)) {\n return;\n }\n }\n\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChange(newValue);\n\n if (maxLength && newValue.length === maxLength && onAutoAdvance) {\n const timeoutId = setTimeout(() => {\n onAutoAdvance();\n }, 0);\n contextState.registerTimeout(timeoutId);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData('text');\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(pastedText)) {\n e.preventDefault();\n return;\n }\n }\n\n if (maxLength && pastedText.length > maxLength) {\n e.preventDefault();\n onChange(pastedText.slice(0, maxLength));\n return;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const input = e.currentTarget;\n const cursorAtStart = input.selectionStart === 0;\n const cursorAtEnd = input.selectionStart === value.length;\n const isEmpty = value.length === 0;\n\n if (e.key === 'Backspace' && isEmpty && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowLeft' && cursorAtStart && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowRight' && cursorAtEnd && onAutoAdvance) {\n e.preventDefault();\n onAutoAdvance();\n return;\n }\n\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n e.target.select();\n onFocus?.();\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n return (\n <input\n ref={segmentRef}\n type='text'\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n maxLength={maxLength}\n className={className}\n disabled={effectiveIsDisabled}\n style={dynamicWidth ? { width: `${dynamicWidth}ch` } : undefined}\n aria-label={\n ariaLabel ||\n `Coordinate segment ${segmentIndex !== undefined ? segmentIndex + 1 : ''}`\n }\n aria-disabled={effectiveIsDisabled}\n autoComplete='off'\n inputMode={\n allowedChars?.includes('0-9')\n ? allowedChars.includes('\\\\-\\\\.')\n ? 'decimal'\n : 'numeric'\n : 'text'\n }\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAgB,kBAAkB,EAChC,OACA,UACA,SACA,QACA,WACA,aACA,WACA,WACA,YACA,cACA,YACA,cACA,eAAe,gBACf,eACA,eACA,KACA,aACyB;CACzB,MAAM,eAAe,gCAAgC;CAErD,MAAM,sBAAsB,aAAa,cAAc;CAGvD,MAAM,eAAe,cAAc;AACjC,MAAI,cAAc,OAChB;EAIF,MAAM,UAAU,OAAO;AAIvB,UADsB,MAAM,SAAS,IAAI,MAAM,SAAS,aACjC;IACtB;EAAC;EAAW;EAAK,MAAM;EAAO,CAAC;CAElC,MAAM,gBAAgB,MAAqC;EACzD,MAAM,WAAW,EAAE,OAAO;AAE1B,MAAI,cAEF;OAAI,kBADU,IAAI,OAAO,IAAI,aAAa,IAAI,EACnC,KAAK,SAAS,CACvB;;AAIJ,MAAI,aAAa,SAAS,SAAS,UACjC;AAGF,WAAS,SAAS;AAElB,MAAI,aAAa,SAAS,WAAW,aAAa,eAAe;GAC/D,MAAM,YAAY,iBAAiB;AACjC,mBAAe;MACd,EAAE;AACL,gBAAa,gBAAgB,UAAU;;;CAI3C,MAAM,eAAe,MAA8C;EACjE,MAAM,aAAa,EAAE,cAAc,QAAQ,OAAO;AAElD,MAAI,cAEF;OAAI,kBADU,IAAI,OAAO,IAAI,aAAa,IAAI,EACnC,KAAK,WAAW,EAAE;AAC3B,MAAE,gBAAgB;AAClB;;;AAIJ,MAAI,aAAa,WAAW,SAAS,WAAW;AAC9C,KAAE,gBAAgB;AAClB,YAAS,WAAW,MAAM,GAAG,UAAU,CAAC;AACxC;;;CAIJ,MAAM,iBAAiB,MAAuC;EAC5D,MAAM,QAAQ,EAAE;EAChB,MAAM,gBAAgB,MAAM,mBAAmB;EAC/C,MAAM,cAAc,MAAM,mBAAmB,MAAM;EACnD,MAAM,UAAU,MAAM,WAAW;AAEjC,MAAI,EAAE,QAAQ,eAAe,WAAW,eAAe;AACrD,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,MAAI,EAAE,QAAQ,eAAe,iBAAiB,eAAe;AAC3D,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,MAAI,EAAE,QAAQ,gBAAgB,eAAe,eAAe;AAC1D,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,cAAY,EAAE;;CAGhB,MAAM,eAAe,MAAoC;AACvD,IAAE,OAAO,QAAQ;AACjB,aAAW;;CAGb,MAAM,mBAAmB;AACvB,YAAU;;AAGZ,QACE,oBAAC;EACC,KAAK;EACL,MAAK;EACE;EACP,UAAU;EACV,SAAS;EACT,WAAW;EACX,SAAS;EACT,QAAQ;EACK;EACF;EACA;EACX,UAAU;EACV,OAAO,eAAe,EAAE,OAAO,GAAG,aAAa,KAAK,GAAG;EACvD,cACE,aACA,sBAAsB,iBAAiB,SAAY,eAAe,IAAI;EAExE,iBAAe;EACf,cAAa;EACb,WACE,cAAc,SAAS,MAAM,GACzB,aAAa,SAAS,SAAS,GAC7B,YACA,YACF;GAEN"}
1
+ {"version":3,"file":"segment.js","names":[],"sources":["../../../src/components/coordinate-field/segment.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { useMemo } from 'react';\nimport { useCoordinateFieldStateContext } from './context';\nimport type { ChangeEvent, FocusEvent, KeyboardEvent } from 'react';\nimport type { CoordinateSegmentProps } from './types';\n\n/**\n * CoordinateSegment - A controlled input component for a single coordinate segment\n *\n * This component represents one editable part of a coordinate (e.g., degrees, minutes, direction).\n * It handles character filtering, focus management, and keyboard navigation.\n *\n * Segment Types (determined by allowedChars):\n * - Numeric: \"[0-9\\\\-\\\\.]\" - for DD degrees, DDM/DMS degrees/minutes/seconds\n * - Directional: \"[NSEW]\" - for DDM/DMS direction indicators\n * - Alphanumeric: \"[0-9A-Z]\" - for MGRS/UTM zone identifiers\n *\n * @param props - The coordinate segment props.\n * @param props.value - Current value of the segment.\n * @param props.onChange - Callback when the segment value changes.\n * @param props.onFocus - Callback when the segment gains focus.\n * @param props.onBlur - Callback when the segment loses focus.\n * @param props.onKeyDown - Callback for key down events.\n * @param props.placeholder - Placeholder text for the segment.\n * @param props.maxLength - Maximum character length for the segment.\n * @param props.className - Additional CSS class name.\n * @param props.isDisabled - Whether the segment is disabled.\n * @param props.isReadOnly - Whether the segment is read-only.\n * @param props.allowedChars - Regex pattern for allowed characters.\n * @param props.segmentRef - Ref for the segment input element.\n * @param props.segmentIndex - Index of this segment within the coordinate field.\n * @param props.totalSegments - Total number of segments in the coordinate field.\n * @param props.onAutoAdvance - Callback to advance focus to the next segment.\n * @param props.onAutoRetreat - Callback to retreat focus to the previous segment.\n * @param props.pad - Padding value for width calculation.\n * @param props.ariaLabel - Accessible label for the segment.\n * @returns The coordinate segment input component.\n *\n * @example\n * ```tsx\n * // Numeric segment (latitude degrees)\n * <CoordinateSegment\n * value={latDegrees}\n * onChange={setLatDegrees}\n * allowedChars=\"[0-9\\\\-\\\\.]\"\n * maxLength={10}\n * placeholder=\"00.00000\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Directional segment (latitude direction)\n * <CoordinateSegment\n * value={latDir}\n * onChange={setLatDir}\n * allowedChars=\"[NS]\"\n * maxLength={1}\n * placeholder=\"N\"\n * />\n * ```\n */\nexport function CoordinateSegment({\n value,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n placeholder,\n maxLength,\n className,\n isDisabled,\n isReadOnly,\n allowedChars,\n segmentRef,\n segmentIndex,\n totalSegments: _totalSegments,\n onAutoAdvance,\n onAutoRetreat,\n pad,\n ariaLabel,\n}: CoordinateSegmentProps) {\n const contextState = useCoordinateFieldStateContext();\n\n const effectiveIsDisabled = contextState.isDisabled ?? isDisabled;\n\n // Calculate dynamic width based on focus state\n const dynamicWidth = useMemo(() => {\n if (maxLength === undefined) {\n return undefined;\n }\n\n // Default padding to 0.5 if not specified\n const padding = pad ?? 0.5;\n\n // When blurred, use value length (or maxLength if empty) + padding\n const contentLength = value.length > 0 ? value.length : maxLength;\n return contentLength + padding;\n }, [maxLength, pad, value.length]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(newValue)) {\n return;\n }\n }\n\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChange(newValue);\n\n if (maxLength && newValue.length === maxLength && onAutoAdvance) {\n const timeoutId = setTimeout(() => {\n onAutoAdvance();\n }, 0);\n contextState.registerTimeout(timeoutId);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData('text');\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(pastedText)) {\n e.preventDefault();\n return;\n }\n }\n\n if (maxLength && pastedText.length > maxLength) {\n e.preventDefault();\n onChange(pastedText.slice(0, maxLength));\n return;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const input = e.currentTarget;\n const cursorAtStart = input.selectionStart === 0;\n const cursorAtEnd = input.selectionStart === value.length;\n const isEmpty = value.length === 0;\n\n if (e.key === 'Backspace' && isEmpty && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowLeft' && cursorAtStart && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowRight' && cursorAtEnd && onAutoAdvance) {\n e.preventDefault();\n onAutoAdvance();\n return;\n }\n\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n e.target.select();\n onFocus?.();\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n return (\n <input\n readOnly={isReadOnly}\n ref={segmentRef}\n tabIndex={isReadOnly ? -1 : 0}\n type='text'\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n maxLength={maxLength}\n className={className}\n disabled={effectiveIsDisabled}\n style={dynamicWidth ? { width: `${dynamicWidth}ch` } : undefined}\n aria-label={\n ariaLabel ||\n `Coordinate segment ${segmentIndex !== undefined ? segmentIndex + 1 : ''}`\n }\n aria-disabled={effectiveIsDisabled}\n autoComplete='off'\n inputMode={\n allowedChars?.includes('0-9')\n ? allowedChars.includes('\\\\-\\\\.')\n ? 'decimal'\n : 'numeric'\n : 'text'\n }\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EA,SAAgB,kBAAkB,EAChC,OACA,UACA,SACA,QACA,WACA,aACA,WACA,WACA,YACA,YACA,cACA,YACA,cACA,eAAe,gBACf,eACA,eACA,KACA,aACyB;CACzB,MAAM,eAAe,gCAAgC;CAErD,MAAM,sBAAsB,aAAa,cAAc;CAGvD,MAAM,eAAe,cAAc;AACjC,MAAI,cAAc,OAChB;EAIF,MAAM,UAAU,OAAO;AAIvB,UADsB,MAAM,SAAS,IAAI,MAAM,SAAS,aACjC;IACtB;EAAC;EAAW;EAAK,MAAM;EAAO,CAAC;CAElC,MAAM,gBAAgB,MAAqC;EACzD,MAAM,WAAW,EAAE,OAAO;AAE1B,MAAI,cAEF;OAAI,kBADU,IAAI,OAAO,IAAI,aAAa,IAAI,EACnC,KAAK,SAAS,CACvB;;AAIJ,MAAI,aAAa,SAAS,SAAS,UACjC;AAGF,WAAS,SAAS;AAElB,MAAI,aAAa,SAAS,WAAW,aAAa,eAAe;GAC/D,MAAM,YAAY,iBAAiB;AACjC,mBAAe;MACd,EAAE;AACL,gBAAa,gBAAgB,UAAU;;;CAI3C,MAAM,eAAe,MAA8C;EACjE,MAAM,aAAa,EAAE,cAAc,QAAQ,OAAO;AAElD,MAAI,cAEF;OAAI,kBADU,IAAI,OAAO,IAAI,aAAa,IAAI,EACnC,KAAK,WAAW,EAAE;AAC3B,MAAE,gBAAgB;AAClB;;;AAIJ,MAAI,aAAa,WAAW,SAAS,WAAW;AAC9C,KAAE,gBAAgB;AAClB,YAAS,WAAW,MAAM,GAAG,UAAU,CAAC;AACxC;;;CAIJ,MAAM,iBAAiB,MAAuC;EAC5D,MAAM,QAAQ,EAAE;EAChB,MAAM,gBAAgB,MAAM,mBAAmB;EAC/C,MAAM,cAAc,MAAM,mBAAmB,MAAM;EACnD,MAAM,UAAU,MAAM,WAAW;AAEjC,MAAI,EAAE,QAAQ,eAAe,WAAW,eAAe;AACrD,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,MAAI,EAAE,QAAQ,eAAe,iBAAiB,eAAe;AAC3D,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,MAAI,EAAE,QAAQ,gBAAgB,eAAe,eAAe;AAC1D,KAAE,gBAAgB;AAClB,kBAAe;AACf;;AAGF,cAAY,EAAE;;CAGhB,MAAM,eAAe,MAAoC;AACvD,IAAE,OAAO,QAAQ;AACjB,aAAW;;CAGb,MAAM,mBAAmB;AACvB,YAAU;;AAGZ,QACE,oBAAC;EACC,UAAU;EACV,KAAK;EACL,UAAU,aAAa,KAAK;EAC5B,MAAK;EACE;EACP,UAAU;EACV,SAAS;EACT,WAAW;EACX,SAAS;EACT,QAAQ;EACK;EACF;EACA;EACX,UAAU;EACV,OAAO,eAAe,EAAE,OAAO,GAAG,aAAa,KAAK,GAAG;EACvD,cACE,aACA,sBAAsB,iBAAiB,SAAY,eAAe,IAAI;EAExE,iBAAe;EACf,cAAa;EACb,WACE,cAAc,SAAS,MAAM,GACzB,aAAa,SAAS,SAAS,GAC7B,YACA,YACF;GAEN"}
@@ -18,7 +18,7 @@
18
18
  }
19
19
 
20
20
  .control {
21
- @apply fg-primary-bold gap-m rounded-medium px-s py-xs font-display outline-interactive flex w-full items-center outline;
21
+ @apply fg-primary-bold gap-m rounded-medium pl-s pr-xs py-xs font-display outline-interactive flex w-full items-center outline;
22
22
 
23
23
  min-width: var(--min-width, unset);
24
24
 
@@ -41,6 +41,10 @@
41
41
  @variant hover {
42
42
  @apply outline-interactive-hover;
43
43
  }
44
+
45
+ @variant read-only {
46
+ @apply px-0 outline-none;
47
+ }
44
48
  }
45
49
 
46
50
  .input {
@@ -73,6 +77,16 @@
73
77
  @variant selection {
74
78
  @apply fg-a11y-on-accent bg-accent-primary-bold;
75
79
  }
80
+
81
+ @variant read-only {
82
+ @variant focus-visible {
83
+ @apply bg-surface-default;
84
+ }
85
+
86
+ @variant selection {
87
+ @apply bg-surface-default;
88
+ }
89
+ }
76
90
  }
77
91
 
78
92
  .segmentGroup {
@@ -148,4 +162,8 @@
148
162
  .popoverTitle {
149
163
  @apply fg-primary-muted text-header-s;
150
164
  }
165
+
166
+ .hiddenTrigger {
167
+ @apply hidden;
168
+ }
151
169
  }
@@ -117,6 +117,8 @@ type CoordinateSegmentProps = {
117
117
  className?: string;
118
118
  /** Whether the segment is disabled */
119
119
  isDisabled?: boolean;
120
+ /** Whether the segment is read-only */
121
+ isReadOnly?: boolean;
120
122
  /** Regex pattern for allowed characters (e.g., "[0-9\\-\\.]" for numeric, "[NSEW]" for directional) */
121
123
  allowedChars?: string;
122
124
  /** Ref to the input element for programmatic focus management */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["COORDINATE_FORMAT_LABELS: Record<CoordinateSystem, string>","COORDINATE_FORMAT_NAMES: Record<CoordinateSystem, string>","COORDINATE_SYSTEMS: readonly CoordinateSystem[]"],"sources":["../../../src/components/coordinate-field/types.ts"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {\n Dispatch,\n KeyboardEvent,\n RefAttributes,\n SetStateAction,\n} from 'react';\nimport type {\n TextFieldProps as AriaTextFieldProps,\n FieldErrorProps,\n LabelProps,\n} from 'react-aria-components';\n\n/**\n * Supported coordinate systems for display and input\n */\nexport type CoordinateSystem = 'dd' | 'ddm' | 'dms' | 'mgrs' | 'utm';\n\n/**\n * Short labels for coordinate formats (used in popover)\n */\nexport const COORDINATE_FORMAT_LABELS: Record<CoordinateSystem, string> = {\n dd: 'DD',\n ddm: 'DDM',\n dms: 'DMS',\n mgrs: 'MGRS',\n utm: 'UTM',\n};\n\n/**\n * Full names for coordinate formats (used in popover titles/descriptions)\n */\nexport const COORDINATE_FORMAT_NAMES: Record<CoordinateSystem, string> = {\n dd: 'Decimal Degrees',\n ddm: 'Degrees Decimal Minutes',\n dms: 'Degrees Minutes Seconds',\n mgrs: 'Military Grid Reference System',\n utm: 'Universal Transverse Mercator',\n};\n\n/**\n * All supported coordinate systems\n * Use this constant instead of hardcoding the array in multiple places\n */\nexport const COORDINATE_SYSTEMS: readonly CoordinateSystem[] = [\n 'dd',\n 'dms',\n 'ddm',\n 'mgrs',\n 'utm',\n] as const;\n\n/**\n * Coordinate value in Decimal Degrees format (internal representation)\n * All coordinate values are normalized to this format internally\n */\nexport type CoordinateValue = {\n lat: number; // Latitude in decimal degrees (-90 to 90)\n lon: number; // Longitude in decimal degrees (-180 to 180)\n};\n\n/**\n * Types of segments in a coordinate input\n */\nexport type SegmentType =\n | 'numeric'\n | 'directional'\n | 'literal'\n | 'alphanumeric';\n\n/**\n * Configuration for a single coordinate segment\n */\nexport type SegmentConfig = {\n type: SegmentType;\n /** Placeholder text shown when segment is empty */\n placeholder?: string;\n /** Maximum character length for the segment */\n maxLength?: number;\n /** Regex pattern for allowed characters */\n allowedChars?: string;\n /** Fixed value for literal segments (e.g., \", \" or \"º\") */\n value?: string;\n /** Padding in CSS 'ch' units to add to the segment width (defaults to 0.5 if not specified) */\n pad?: number;\n};\n\n/**\n * Result of parsing a pasted coordinate string\n */\nexport type ParsedCoordinateMatch = {\n /** The coordinate system format that matched */\n format: CoordinateSystem;\n /** The coordinate value in DD format */\n value: CoordinateValue;\n /** Display string in the matched format */\n displayString: string;\n};\n\n/**\n * State shared with child components through context\n */\nexport type CoordinateFieldState = {\n segmentValues: string[];\n format: CoordinateFieldProps['format'];\n /**\n * Current coordinate value in DD format\n * - undefined: uncontrolled mode with no default value\n * - null: controlled mode with empty/invalid value\n * - CoordinateValue: valid coordinate\n */\n currentValue?: CoordinateValue | null;\n /** Validation errors from @accelint/geo */\n validationErrors: string[];\n isDisabled: boolean;\n isInvalid: boolean;\n isRequired: boolean;\n /** Size variant of the field */\n size: CoordinateFieldProps['size'];\n /** Whether or not the logical coordinate fields are inlined or stacked */\n variant: CoordinateFieldProps['variant'];\n /** Function to register timeouts for cleanup on unmount */\n registerTimeout: (timeoutId: NodeJS.Timeout) => void;\n};\n\n/**\n * Props for the CoordinateSegment component\n */\nexport type CoordinateSegmentProps = {\n /** Current value of the segment */\n value: string;\n /** Callback when the segment value changes */\n onChange: (value: string) => void;\n /** Callback when the segment receives focus */\n onFocus?: () => void;\n /** Callback when the segment loses focus */\n onBlur?: () => void;\n /** Callback for keyboard events (used for navigation between segments) */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n /** Placeholder text to display when segment is empty */\n placeholder?: string;\n /** Maximum character length for the segment */\n maxLength?: number;\n /** Custom className for styling */\n className?: string;\n /** Whether the segment is disabled */\n isDisabled?: boolean;\n /** Regex pattern for allowed characters (e.g., \"[0-9\\\\-\\\\.]\" for numeric, \"[NSEW]\" for directional) */\n allowedChars?: string;\n /** Ref to the input element for programmatic focus management */\n segmentRef?: React.RefObject<HTMLInputElement>;\n /** Index of this segment in the parent field (for accessibility) */\n segmentIndex?: number;\n /** Total number of segments (for accessibility) */\n totalSegments?: number;\n /** Callback to trigger auto-advance to next segment */\n onAutoAdvance?: () => void;\n /** Callback to trigger auto-retreat to previous segment */\n onAutoRetreat?: () => void;\n /** Padding in CSS 'ch' units to add to the segment width (defaults to 0.5 if not specified) */\n pad?: number;\n /** Semantic accessibility label for the segment (e.g., \"Latitude degrees\") */\n ariaLabel?: string;\n};\n\n/**\n * Props for the CoordinateField component\n *\n * Extends AriaTextFieldProps to inherit standard form field props (id, isDisabled, isRequired, etc.)\n */\nexport type CoordinateFieldProps = Omit<\n AriaTextFieldProps,\n | 'children'\n | 'className'\n | 'placeholder'\n | 'type'\n | 'pattern'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'name' // Not applicable to multi-segment fields\n> &\n RefAttributes<HTMLDivElement> & {\n /**\n * Custom class names for component slots\n */\n classNames?: {\n field?: string;\n label?: LabelProps['className'];\n control?: string;\n input?: string;\n segment?: string;\n description?: string;\n error?: FieldErrorProps['className'];\n formatButton?: string;\n };\n\n /**\n * Label text displayed above the input (medium size only)\n */\n label?: string;\n\n /**\n * Helper text displayed below the input\n */\n description?: string;\n\n /**\n * Error message to display when the field is invalid\n */\n errorMessage?: string;\n\n /**\n * Display format for coordinate input\n * @default 'dd' (Decimal Degrees)\n */\n format?: CoordinateSystem;\n\n /**\n * Size variant of the field\n * @default 'medium'\n */\n size?: 'small' | 'medium';\n\n /**\n * Whether to show the format button for copying coordinates in different formats\n * @default true\n */\n showFormatButton?: boolean;\n\n /**\n * Controlled value in Decimal Degrees format\n * - undefined: uncontrolled mode\n * - null: controlled mode with no/invalid value\n * - CoordinateValue: controlled mode with valid value\n */\n value?: CoordinateValue | null;\n\n /**\n * Whether or not the input is stacked or inline\n * @default 'inline'\n */\n variant?: 'inline' | 'stacked';\n\n /**\n * Default uncontrolled value in Decimal Degrees format\n */\n defaultValue?: CoordinateValue;\n\n /**\n * Callback fired when the coordinate value changes\n * @param value - The new coordinate value in DD format, or null if invalid\n */\n onChange?:\n | Dispatch<SetStateAction<CoordinateValue | null>>\n | ((value: CoordinateValue | null) => void);\n\n /**\n * Callback fired when validation or paste errors occur\n * @param message - Error message (\"Invalid coordinate value\" for validation errors, \"Invalid coordinate format\" for paste errors)\n * @param context - Additional context about the error:\n * - Validation errors: `{ errors: string[], format: string, segments: string[] }`\n * - Paste errors: `{ pastedText: string }`\n */\n onError?: (message: string, context?: Record<string, unknown>) => void;\n };\n"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAaA,2BAA6D;CACxE,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACN;;;;AAKD,MAAaC,0BAA4D;CACvE,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACN;;;;;AAMD,MAAaC,qBAAkD;CAC7D;CACA;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"types.js","names":["COORDINATE_FORMAT_LABELS: Record<CoordinateSystem, string>","COORDINATE_FORMAT_NAMES: Record<CoordinateSystem, string>","COORDINATE_SYSTEMS: readonly CoordinateSystem[]"],"sources":["../../../src/components/coordinate-field/types.ts"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type {\n Dispatch,\n KeyboardEvent,\n RefAttributes,\n SetStateAction,\n} from 'react';\nimport type {\n TextFieldProps as AriaTextFieldProps,\n FieldErrorProps,\n LabelProps,\n} from 'react-aria-components';\n\n/**\n * Supported coordinate systems for display and input\n */\nexport type CoordinateSystem = 'dd' | 'ddm' | 'dms' | 'mgrs' | 'utm';\n\n/**\n * Short labels for coordinate formats (used in popover)\n */\nexport const COORDINATE_FORMAT_LABELS: Record<CoordinateSystem, string> = {\n dd: 'DD',\n ddm: 'DDM',\n dms: 'DMS',\n mgrs: 'MGRS',\n utm: 'UTM',\n};\n\n/**\n * Full names for coordinate formats (used in popover titles/descriptions)\n */\nexport const COORDINATE_FORMAT_NAMES: Record<CoordinateSystem, string> = {\n dd: 'Decimal Degrees',\n ddm: 'Degrees Decimal Minutes',\n dms: 'Degrees Minutes Seconds',\n mgrs: 'Military Grid Reference System',\n utm: 'Universal Transverse Mercator',\n};\n\n/**\n * All supported coordinate systems\n * Use this constant instead of hardcoding the array in multiple places\n */\nexport const COORDINATE_SYSTEMS: readonly CoordinateSystem[] = [\n 'dd',\n 'dms',\n 'ddm',\n 'mgrs',\n 'utm',\n] as const;\n\n/**\n * Coordinate value in Decimal Degrees format (internal representation)\n * All coordinate values are normalized to this format internally\n */\nexport type CoordinateValue = {\n lat: number; // Latitude in decimal degrees (-90 to 90)\n lon: number; // Longitude in decimal degrees (-180 to 180)\n};\n\n/**\n * Types of segments in a coordinate input\n */\nexport type SegmentType =\n | 'numeric'\n | 'directional'\n | 'literal'\n | 'alphanumeric';\n\n/**\n * Configuration for a single coordinate segment\n */\nexport type SegmentConfig = {\n type: SegmentType;\n /** Placeholder text shown when segment is empty */\n placeholder?: string;\n /** Maximum character length for the segment */\n maxLength?: number;\n /** Regex pattern for allowed characters */\n allowedChars?: string;\n /** Fixed value for literal segments (e.g., \", \" or \"º\") */\n value?: string;\n /** Padding in CSS 'ch' units to add to the segment width (defaults to 0.5 if not specified) */\n pad?: number;\n};\n\n/**\n * Result of parsing a pasted coordinate string\n */\nexport type ParsedCoordinateMatch = {\n /** The coordinate system format that matched */\n format: CoordinateSystem;\n /** The coordinate value in DD format */\n value: CoordinateValue;\n /** Display string in the matched format */\n displayString: string;\n};\n\n/**\n * State shared with child components through context\n */\nexport type CoordinateFieldState = {\n segmentValues: string[];\n format: CoordinateFieldProps['format'];\n /**\n * Current coordinate value in DD format\n * - undefined: uncontrolled mode with no default value\n * - null: controlled mode with empty/invalid value\n * - CoordinateValue: valid coordinate\n */\n currentValue?: CoordinateValue | null;\n /** Validation errors from @accelint/geo */\n validationErrors: string[];\n isDisabled: boolean;\n isInvalid: boolean;\n isRequired: boolean;\n /** Size variant of the field */\n size: CoordinateFieldProps['size'];\n /** Whether or not the logical coordinate fields are inlined or stacked */\n variant: CoordinateFieldProps['variant'];\n /** Function to register timeouts for cleanup on unmount */\n registerTimeout: (timeoutId: NodeJS.Timeout) => void;\n};\n\n/**\n * Props for the CoordinateSegment component\n */\nexport type CoordinateSegmentProps = {\n /** Current value of the segment */\n value: string;\n /** Callback when the segment value changes */\n onChange: (value: string) => void;\n /** Callback when the segment receives focus */\n onFocus?: () => void;\n /** Callback when the segment loses focus */\n onBlur?: () => void;\n /** Callback for keyboard events (used for navigation between segments) */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n /** Placeholder text to display when segment is empty */\n placeholder?: string;\n /** Maximum character length for the segment */\n maxLength?: number;\n /** Custom className for styling */\n className?: string;\n /** Whether the segment is disabled */\n isDisabled?: boolean;\n /** Whether the segment is read-only */\n isReadOnly?: boolean;\n /** Regex pattern for allowed characters (e.g., \"[0-9\\\\-\\\\.]\" for numeric, \"[NSEW]\" for directional) */\n allowedChars?: string;\n /** Ref to the input element for programmatic focus management */\n segmentRef?: React.RefObject<HTMLInputElement>;\n /** Index of this segment in the parent field (for accessibility) */\n segmentIndex?: number;\n /** Total number of segments (for accessibility) */\n totalSegments?: number;\n /** Callback to trigger auto-advance to next segment */\n onAutoAdvance?: () => void;\n /** Callback to trigger auto-retreat to previous segment */\n onAutoRetreat?: () => void;\n /** Padding in CSS 'ch' units to add to the segment width (defaults to 0.5 if not specified) */\n pad?: number;\n /** Semantic accessibility label for the segment (e.g., \"Latitude degrees\") */\n ariaLabel?: string;\n};\n\n/**\n * Props for the CoordinateField component\n *\n * Extends AriaTextFieldProps to inherit standard form field props (id, isDisabled, isRequired, etc.)\n */\nexport type CoordinateFieldProps = Omit<\n AriaTextFieldProps,\n | 'children'\n | 'className'\n | 'placeholder'\n | 'type'\n | 'pattern'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'name' // Not applicable to multi-segment fields\n> &\n RefAttributes<HTMLDivElement> & {\n /**\n * Custom class names for component slots\n */\n classNames?: {\n field?: string;\n label?: LabelProps['className'];\n control?: string;\n input?: string;\n segment?: string;\n description?: string;\n error?: FieldErrorProps['className'];\n formatButton?: string;\n };\n\n /**\n * Label text displayed above the input (medium size only)\n */\n label?: string;\n\n /**\n * Helper text displayed below the input\n */\n description?: string;\n\n /**\n * Error message to display when the field is invalid\n */\n errorMessage?: string;\n\n /**\n * Display format for coordinate input\n * @default 'dd' (Decimal Degrees)\n */\n format?: CoordinateSystem;\n\n /**\n * Size variant of the field\n * @default 'medium'\n */\n size?: 'small' | 'medium';\n\n /**\n * Whether to show the format button for copying coordinates in different formats\n * @default true\n */\n showFormatButton?: boolean;\n\n /**\n * Controlled value in Decimal Degrees format\n * - undefined: uncontrolled mode\n * - null: controlled mode with no/invalid value\n * - CoordinateValue: controlled mode with valid value\n */\n value?: CoordinateValue | null;\n\n /**\n * Whether or not the input is stacked or inline\n * @default 'inline'\n */\n variant?: 'inline' | 'stacked';\n\n /**\n * Default uncontrolled value in Decimal Degrees format\n */\n defaultValue?: CoordinateValue;\n\n /**\n * Callback fired when the coordinate value changes\n * @param value - The new coordinate value in DD format, or null if invalid\n */\n onChange?:\n | Dispatch<SetStateAction<CoordinateValue | null>>\n | ((value: CoordinateValue | null) => void);\n\n /**\n * Callback fired when validation or paste errors occur\n * @param message - Error message (\"Invalid coordinate value\" for validation errors, \"Invalid coordinate format\" for paste errors)\n * @param context - Additional context about the error:\n * - Validation errors: `{ errors: string[], format: string, segments: string[] }`\n * - Paste errors: `{ pastedText: string }`\n */\n onError?: (message: string, context?: Record<string, unknown>) => void;\n };\n"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAaA,2BAA6D;CACxE,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACN;;;;AAKD,MAAaC,0BAA4D;CACvE,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACN;;;;;AAMD,MAAaC,qBAAkD;CAC7D;CACA;CACA;CACA;CACA;CACD"}
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { DateFieldProps } from "./types.js";
14
14
  import "client-only";
15
- import * as react_jsx_runtime185 from "react/jsx-runtime";
15
+ import * as react_jsx_runtime40 from "react/jsx-runtime";
16
16
  import { DateValue } from "@internationalized/date";
17
17
 
18
18
  //#region src/components/date-field/index.d.ts
@@ -24,11 +24,29 @@ import { DateValue } from "@internationalized/date";
24
24
  * month, and year. Includes calendar icon, validation states, and international
25
25
  * date format support with keyboard navigation between segments.
26
26
  *
27
+ * @param props - The date field props.
28
+ * @param props.classNames - Custom class names for sub-elements.
29
+ * @param props.description - Helper text displayed below the field.
30
+ * @param props.errorMessage - Error message displayed when invalid.
31
+ * @param props.inputProps - Additional props for the date input element.
32
+ * @param props.label - Label text displayed above the field.
33
+ * @param props.size - Size variant of the field.
34
+ * @param props.shortMonth - When true, displays 3-letter month abbreviation when not editing.
35
+ * @param props.shouldForceLeadingZeros - Whether to force leading zeros in segments.
36
+ * @param props.isDisabled - Whether the field is disabled.
37
+ * @param props.isInvalid - Whether the field is in an invalid state.
38
+ * @param props.isRequired - Whether the field is required.
39
+ * @param props.isReadOnly - Whether the field is read-only.
40
+ * @returns The date field component.
41
+ *
27
42
  * @example
43
+ * ```tsx
28
44
  * // Basic date field
29
45
  * <DateField label="Birth Date" />
46
+ * ```
30
47
  *
31
48
  * @example
49
+ * ```tsx
32
50
  * // Date field with validation
33
51
  * <DateField
34
52
  * label="Event Date"
@@ -36,30 +54,37 @@ import { DateValue } from "@internationalized/date";
36
54
  * isInvalid={hasError}
37
55
  * errorMessage="Please select a valid date"
38
56
  * />
57
+ * ```
39
58
  *
40
59
  * @example
60
+ * ```tsx
41
61
  * // Date field with custom formatting
42
62
  * <DateField
43
63
  * label="Meeting Date"
44
64
  * shortMonth={false}
45
65
  * placeholder="Select meeting date"
46
66
  * />
67
+ * ```
47
68
  *
48
69
  * @example
70
+ * ```tsx
49
71
  * // Compact date field
50
72
  * <DateField
51
73
  * label="Due Date"
52
74
  * size="small"
53
75
  * description="When is this task due?"
54
76
  * />
77
+ * ```
55
78
  *
56
79
  * @example
80
+ * ```tsx
57
81
  * // Controlled date field
58
82
  * <DateField
59
83
  * label="Selected Date"
60
84
  * value={selectedDate}
61
85
  * onChange={setSelectedDate}
62
86
  * />
87
+ * ```
63
88
  */
64
89
  declare function DateField<T extends DateValue>({
65
90
  classNames,
@@ -73,8 +98,9 @@ declare function DateField<T extends DateValue>({
73
98
  isDisabled,
74
99
  isInvalid: isInvalidProp,
75
100
  isRequired,
101
+ isReadOnly,
76
102
  ...rest
77
- }: DateFieldProps<T>): react_jsx_runtime185.JSX.Element;
103
+ }: DateFieldProps<T>): react_jsx_runtime40.JSX.Element;
78
104
  //#endregion
79
105
  export { DateField };
80
106
  //# sourceMappingURL=index.d.ts.map
@@ -44,11 +44,29 @@ const months = [
44
44
  * month, and year. Includes calendar icon, validation states, and international
45
45
  * date format support with keyboard navigation between segments.
46
46
  *
47
+ * @param props - The date field props.
48
+ * @param props.classNames - Custom class names for sub-elements.
49
+ * @param props.description - Helper text displayed below the field.
50
+ * @param props.errorMessage - Error message displayed when invalid.
51
+ * @param props.inputProps - Additional props for the date input element.
52
+ * @param props.label - Label text displayed above the field.
53
+ * @param props.size - Size variant of the field.
54
+ * @param props.shortMonth - When true, displays 3-letter month abbreviation when not editing.
55
+ * @param props.shouldForceLeadingZeros - Whether to force leading zeros in segments.
56
+ * @param props.isDisabled - Whether the field is disabled.
57
+ * @param props.isInvalid - Whether the field is in an invalid state.
58
+ * @param props.isRequired - Whether the field is required.
59
+ * @param props.isReadOnly - Whether the field is read-only.
60
+ * @returns The date field component.
61
+ *
47
62
  * @example
63
+ * ```tsx
48
64
  * // Basic date field
49
65
  * <DateField label="Birth Date" />
66
+ * ```
50
67
  *
51
68
  * @example
69
+ * ```tsx
52
70
  * // Date field with validation
53
71
  * <DateField
54
72
  * label="Event Date"
@@ -56,32 +74,39 @@ const months = [
56
74
  * isInvalid={hasError}
57
75
  * errorMessage="Please select a valid date"
58
76
  * />
77
+ * ```
59
78
  *
60
79
  * @example
80
+ * ```tsx
61
81
  * // Date field with custom formatting
62
82
  * <DateField
63
83
  * label="Meeting Date"
64
84
  * shortMonth={false}
65
85
  * placeholder="Select meeting date"
66
86
  * />
87
+ * ```
67
88
  *
68
89
  * @example
90
+ * ```tsx
69
91
  * // Compact date field
70
92
  * <DateField
71
93
  * label="Due Date"
72
94
  * size="small"
73
95
  * description="When is this task due?"
74
96
  * />
97
+ * ```
75
98
  *
76
99
  * @example
100
+ * ```tsx
77
101
  * // Controlled date field
78
102
  * <DateField
79
103
  * label="Selected Date"
80
104
  * value={selectedDate}
81
105
  * onChange={setSelectedDate}
82
106
  * />
107
+ * ```
83
108
  */
84
- function DateField({ classNames, description: descriptionProp, errorMessage: errorMessageProp, inputProps, label: labelProp, size = "medium", shortMonth = true, shouldForceLeadingZeros = true, isDisabled, isInvalid: isInvalidProp, isRequired, ...rest }) {
109
+ function DateField({ classNames, description: descriptionProp, errorMessage: errorMessageProp, inputProps, label: labelProp, size = "medium", shortMonth = true, shouldForceLeadingZeros = true, isDisabled, isInvalid: isInvalidProp, isRequired, isReadOnly = false, ...rest }) {
85
110
  const errorMessage = errorMessageProp || null;
86
111
  const isSmall = size === "small";
87
112
  return /* @__PURE__ */ jsx(DateField$1, {
@@ -91,6 +116,7 @@ function DateField({ classNames, description: descriptionProp, errorMessage: err
91
116
  isDisabled,
92
117
  isInvalid: isInvalidProp || (errorMessage ? true : void 0),
93
118
  isRequired,
119
+ isReadOnly,
94
120
  "aria-label": labelProp,
95
121
  "data-size": size,
96
122
  children: ({ isDisabled: isDisabled$1 }) => /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -102,7 +128,8 @@ function DateField({ classNames, description: descriptionProp, errorMessage: err
102
128
  }),
103
129
  /* @__PURE__ */ jsxs("div", {
104
130
  className: clsx(styles.control, classNames?.control),
105
- children: [size === "medium" && /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Calendar, {}) }), /* @__PURE__ */ jsx(DateInput, {
131
+ "data-readonly": isReadOnly || null,
132
+ children: [!isReadOnly && size === "medium" && /* @__PURE__ */ jsx(Icon, { children: /* @__PURE__ */ jsx(Calendar, {}) }), /* @__PURE__ */ jsx(DateInput, {
106
133
  ...inputProps,
107
134
  className: composeRenderProps(classNames?.input, (className) => clsx(styles.input, className)),
108
135
  children: (segmentProp) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["AriaDateField","Label","isDisabled","AriaDateInput","AriaText"],"sources":["../../../src/components/date-field/index.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { clsx } from '@accelint/design-foundation/lib/utils';\nimport Calendar from '@accelint/icons/calendar';\nimport {\n DateField as AriaDateField,\n DateInput as AriaDateInput,\n Text as AriaText,\n composeRenderProps,\n DateSegment,\n FieldError,\n} from 'react-aria-components';\nimport { Icon } from '../icon';\nimport { Label } from '../label';\nimport styles from './styles.module.css';\nimport type { DateValue } from '@internationalized/date';\nimport type { DateFieldProps } from './types';\n\nconst months = [\n 'JAN',\n 'FEB',\n 'MAR',\n 'APR',\n 'MAY',\n 'JUN',\n 'JUL',\n 'AUG',\n 'SEP',\n 'OCT',\n 'NOV',\n 'DEC',\n];\n\n/**\n * DateField - A comprehensive date input component with segmented editing\n *\n * Provides accessible date input functionality with separate segments for day,\n * month, and year. Includes calendar icon, validation states, and international\n * date format support with keyboard navigation between segments.\n *\n * @example\n * // Basic date field\n * <DateField label=\"Birth Date\" />\n *\n * @example\n * // Date field with validation\n * <DateField\n * label=\"Event Date\"\n * isRequired\n * isInvalid={hasError}\n * errorMessage=\"Please select a valid date\"\n * />\n *\n * @example\n * // Date field with custom formatting\n * <DateField\n * label=\"Meeting Date\"\n * shortMonth={false}\n * placeholder=\"Select meeting date\"\n * />\n *\n * @example\n * // Compact date field\n * <DateField\n * label=\"Due Date\"\n * size=\"small\"\n * description=\"When is this task due?\"\n * />\n *\n * @example\n * // Controlled date field\n * <DateField\n * label=\"Selected Date\"\n * value={selectedDate}\n * onChange={setSelectedDate}\n * />\n */\nexport function DateField<T extends DateValue>({\n classNames,\n description: descriptionProp,\n errorMessage: errorMessageProp,\n inputProps,\n label: labelProp,\n size = 'medium',\n shortMonth = true,\n shouldForceLeadingZeros = true,\n isDisabled,\n isInvalid: isInvalidProp,\n isRequired,\n ...rest\n}: DateFieldProps<T>) {\n const errorMessage = errorMessageProp || null; // Protect against empty string\n const isSmall = size === 'small';\n\n return (\n <AriaDateField<T>\n {...rest}\n className={composeRenderProps(classNames?.field, (className) =>\n clsx('group/date-field', styles.field, className),\n )}\n shouldForceLeadingZeros={shouldForceLeadingZeros}\n isDisabled={isDisabled}\n isInvalid={isInvalidProp || (errorMessage ? true : undefined)} // Leave uncontrolled if possible to fallback to validation state\n isRequired={isRequired}\n aria-label={labelProp}\n data-size={size}\n >\n {(\n { isDisabled }, // Rely on internal state, not props, since state could differ from props\n ) => (\n <>\n {!isSmall && labelProp && (\n <Label\n className={clsx(styles.label, classNames?.label)}\n isDisabled={isDisabled}\n isRequired={isRequired}\n >\n {labelProp}\n </Label>\n )}\n <div className={clsx(styles.control, classNames?.control)}>\n {size === 'medium' && (\n <Icon>\n <Calendar />\n </Icon>\n )}\n <AriaDateInput\n {...inputProps}\n className={composeRenderProps(classNames?.input, (className) =>\n clsx(styles.input, className),\n )}\n >\n {(segmentProp) => {\n // Remove extra space and punctuation from input display\n if (segmentProp.type === 'literal') {\n return <>{segmentProp.text === ':' ? ':' : null}</>;\n }\n\n return (\n <DateSegment\n className={composeRenderProps(\n classNames?.segment,\n (className) =>\n clsx(\n styles.segment,\n segmentProp.type === 'month' &&\n shortMonth &&\n styles.shortMonth,\n className,\n ),\n )}\n segment={segmentProp}\n >\n {({\n placeholder,\n text,\n value,\n isFocused,\n isPlaceholder,\n }) => {\n if (isPlaceholder) {\n return placeholder;\n }\n\n return segmentProp.type === 'month' &&\n shortMonth &&\n !isFocused\n ? months[(value ?? 0) - 1]\n : text;\n }}\n </DateSegment>\n );\n }}\n </AriaDateInput>\n </div>\n {descriptionProp && (!(isSmall || isInvalidProp) || isDisabled) && (\n <AriaText\n className={clsx(styles.description, classNames?.description)}\n slot='description'\n >\n {descriptionProp}\n </AriaText>\n )}\n <FieldError\n className={composeRenderProps(classNames?.error, (className) =>\n clsx(styles.error, className),\n )}\n >\n {errorMessage}\n </FieldError>\n </>\n )}\n </AriaDateField>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CD,SAAgB,UAA+B,EAC7C,YACA,aAAa,iBACb,cAAc,kBACd,YACA,OAAO,WACP,OAAO,UACP,aAAa,MACb,0BAA0B,MAC1B,YACA,WAAW,eACX,YACA,GAAG,QACiB;CACpB,MAAM,eAAe,oBAAoB;CACzC,MAAM,UAAU,SAAS;AAEzB,QACE,oBAACA;EACC,GAAI;EACJ,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,oBAAoB,OAAO,OAAO,UAAU,CAClD;EACwB;EACb;EACZ,WAAW,kBAAkB,eAAe,OAAO;EACvC;EACZ,cAAY;EACZ,aAAW;aAGT,EAAE,+BAEF;GACG,CAAC,WAAW,aACX,oBAACC;IACC,WAAW,KAAK,OAAO,OAAO,YAAY,MAAM;IAChD,YAAYC;IACA;cAEX;KACK;GAEV,qBAAC;IAAI,WAAW,KAAK,OAAO,SAAS,YAAY,QAAQ;eACtD,SAAS,YACR,oBAAC,kBACC,oBAAC,aAAW,GACP,EAET,oBAACC;KACC,GAAI;KACJ,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,OAAO,OAAO,UAAU,CAC9B;gBAEC,gBAAgB;AAEhB,UAAI,YAAY,SAAS,UACvB,QAAO,0CAAG,YAAY,SAAS,MAAM,MAAM,OAAQ;AAGrD,aACE,oBAAC;OACC,WAAW,mBACT,YAAY,UACX,cACC,KACE,OAAO,SACP,YAAY,SAAS,WACnB,cACA,OAAO,YACT,UACD,CACJ;OACD,SAAS;kBAEP,EACA,aACA,MACA,OACA,WACA,oBACI;AACJ,YAAI,cACF,QAAO;AAGT,eAAO,YAAY,SAAS,WAC1B,cACA,CAAC,YACC,QAAQ,SAAS,KAAK,KACtB;;QAEM;;MAGJ;KACZ;GACL,oBAAoB,EAAE,WAAW,kBAAkBD,iBAClD,oBAACE;IACC,WAAW,KAAK,OAAO,aAAa,YAAY,YAAY;IAC5D,MAAK;cAEJ;KACQ;GAEb,oBAAC;IACC,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,OAAO,OAAO,UAAU,CAC9B;cAEA;KACU;MACZ;GAES"}
1
+ {"version":3,"file":"index.js","names":["AriaDateField","Label","isDisabled","AriaDateInput","AriaText"],"sources":["../../../src/components/date-field/index.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { clsx } from '@accelint/design-foundation/lib/utils';\nimport Calendar from '@accelint/icons/calendar';\nimport {\n DateField as AriaDateField,\n DateInput as AriaDateInput,\n Text as AriaText,\n composeRenderProps,\n DateSegment,\n FieldError,\n} from 'react-aria-components';\nimport { Icon } from '../icon';\nimport { Label } from '../label';\nimport styles from './styles.module.css';\nimport type { DateValue } from '@internationalized/date';\nimport type { DateFieldProps } from './types';\n\nconst months = [\n 'JAN',\n 'FEB',\n 'MAR',\n 'APR',\n 'MAY',\n 'JUN',\n 'JUL',\n 'AUG',\n 'SEP',\n 'OCT',\n 'NOV',\n 'DEC',\n];\n\n/**\n * DateField - A comprehensive date input component with segmented editing\n *\n * Provides accessible date input functionality with separate segments for day,\n * month, and year. Includes calendar icon, validation states, and international\n * date format support with keyboard navigation between segments.\n *\n * @param props - The date field props.\n * @param props.classNames - Custom class names for sub-elements.\n * @param props.description - Helper text displayed below the field.\n * @param props.errorMessage - Error message displayed when invalid.\n * @param props.inputProps - Additional props for the date input element.\n * @param props.label - Label text displayed above the field.\n * @param props.size - Size variant of the field.\n * @param props.shortMonth - When true, displays 3-letter month abbreviation when not editing.\n * @param props.shouldForceLeadingZeros - Whether to force leading zeros in segments.\n * @param props.isDisabled - Whether the field is disabled.\n * @param props.isInvalid - Whether the field is in an invalid state.\n * @param props.isRequired - Whether the field is required.\n * @param props.isReadOnly - Whether the field is read-only.\n * @returns The date field component.\n *\n * @example\n * ```tsx\n * // Basic date field\n * <DateField label=\"Birth Date\" />\n * ```\n *\n * @example\n * ```tsx\n * // Date field with validation\n * <DateField\n * label=\"Event Date\"\n * isRequired\n * isInvalid={hasError}\n * errorMessage=\"Please select a valid date\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Date field with custom formatting\n * <DateField\n * label=\"Meeting Date\"\n * shortMonth={false}\n * placeholder=\"Select meeting date\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Compact date field\n * <DateField\n * label=\"Due Date\"\n * size=\"small\"\n * description=\"When is this task due?\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Controlled date field\n * <DateField\n * label=\"Selected Date\"\n * value={selectedDate}\n * onChange={setSelectedDate}\n * />\n * ```\n */\nexport function DateField<T extends DateValue>({\n classNames,\n description: descriptionProp,\n errorMessage: errorMessageProp,\n inputProps,\n label: labelProp,\n size = 'medium',\n shortMonth = true,\n shouldForceLeadingZeros = true,\n isDisabled,\n isInvalid: isInvalidProp,\n isRequired,\n isReadOnly = false,\n ...rest\n}: DateFieldProps<T>) {\n const errorMessage = errorMessageProp || null; // Protect against empty string\n const isSmall = size === 'small';\n\n return (\n <AriaDateField<T>\n {...rest}\n className={composeRenderProps(classNames?.field, (className) =>\n clsx('group/date-field', styles.field, className),\n )}\n shouldForceLeadingZeros={shouldForceLeadingZeros}\n isDisabled={isDisabled}\n isInvalid={isInvalidProp || (errorMessage ? true : undefined)} // Leave uncontrolled if possible to fallback to validation state\n isRequired={isRequired}\n isReadOnly={isReadOnly}\n aria-label={labelProp}\n data-size={size}\n >\n {(\n { isDisabled }, // Rely on internal state, not props, since state could differ from props\n ) => (\n <>\n {!isSmall && labelProp && (\n <Label\n className={clsx(styles.label, classNames?.label)}\n isDisabled={isDisabled}\n isRequired={isRequired}\n >\n {labelProp}\n </Label>\n )}\n <div\n className={clsx(styles.control, classNames?.control)}\n data-readonly={isReadOnly || null}\n >\n {!isReadOnly && size === 'medium' && (\n <Icon>\n <Calendar />\n </Icon>\n )}\n <AriaDateInput\n {...inputProps}\n className={composeRenderProps(classNames?.input, (className) =>\n clsx(styles.input, className),\n )}\n >\n {(segmentProp) => {\n // Remove extra space and punctuation from input display\n if (segmentProp.type === 'literal') {\n return <>{segmentProp.text === ':' ? ':' : null}</>;\n }\n\n return (\n <DateSegment\n className={composeRenderProps(\n classNames?.segment,\n (className) =>\n clsx(\n styles.segment,\n segmentProp.type === 'month' &&\n shortMonth &&\n styles.shortMonth,\n className,\n ),\n )}\n segment={segmentProp}\n >\n {({\n placeholder,\n text,\n value,\n isFocused,\n isPlaceholder,\n }) => {\n if (isPlaceholder) {\n return placeholder;\n }\n\n return segmentProp.type === 'month' &&\n shortMonth &&\n !isFocused\n ? months[(value ?? 0) - 1]\n : text;\n }}\n </DateSegment>\n );\n }}\n </AriaDateInput>\n </div>\n {descriptionProp && (!(isSmall || isInvalidProp) || isDisabled) && (\n <AriaText\n className={clsx(styles.description, classNames?.description)}\n slot='description'\n >\n {descriptionProp}\n </AriaText>\n )}\n <FieldError\n className={composeRenderProps(classNames?.error, (className) =>\n clsx(styles.error, className),\n )}\n >\n {errorMessage}\n </FieldError>\n </>\n )}\n </AriaDateField>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuED,SAAgB,UAA+B,EAC7C,YACA,aAAa,iBACb,cAAc,kBACd,YACA,OAAO,WACP,OAAO,UACP,aAAa,MACb,0BAA0B,MAC1B,YACA,WAAW,eACX,YACA,aAAa,OACb,GAAG,QACiB;CACpB,MAAM,eAAe,oBAAoB;CACzC,MAAM,UAAU,SAAS;AAEzB,QACE,oBAACA;EACC,GAAI;EACJ,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,oBAAoB,OAAO,OAAO,UAAU,CAClD;EACwB;EACb;EACZ,WAAW,kBAAkB,eAAe,OAAO;EACvC;EACA;EACZ,cAAY;EACZ,aAAW;aAGT,EAAE,+BAEF;GACG,CAAC,WAAW,aACX,oBAACC;IACC,WAAW,KAAK,OAAO,OAAO,YAAY,MAAM;IAChD,YAAYC;IACA;cAEX;KACK;GAEV,qBAAC;IACC,WAAW,KAAK,OAAO,SAAS,YAAY,QAAQ;IACpD,iBAAe,cAAc;eAE5B,CAAC,cAAc,SAAS,YACvB,oBAAC,kBACC,oBAAC,aAAW,GACP,EAET,oBAACC;KACC,GAAI;KACJ,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,OAAO,OAAO,UAAU,CAC9B;gBAEC,gBAAgB;AAEhB,UAAI,YAAY,SAAS,UACvB,QAAO,0CAAG,YAAY,SAAS,MAAM,MAAM,OAAQ;AAGrD,aACE,oBAAC;OACC,WAAW,mBACT,YAAY,UACX,cACC,KACE,OAAO,SACP,YAAY,SAAS,WACnB,cACA,OAAO,YACT,UACD,CACJ;OACD,SAAS;kBAEP,EACA,aACA,MACA,OACA,WACA,oBACI;AACJ,YAAI,cACF,QAAO;AAGT,eAAO,YAAY,SAAS,WAC1B,cACA,CAAC,YACC,QAAQ,SAAS,KAAK,KACtB;;QAEM;;MAGJ;KACZ;GACL,oBAAoB,EAAE,WAAW,kBAAkBD,iBAClD,oBAACE;IACC,WAAW,KAAK,OAAO,aAAa,YAAY,YAAY;IAC5D,MAAK;cAEJ;KACQ;GAEb,oBAAC;IACC,WAAW,mBAAmB,YAAY,QAAQ,cAChD,KAAK,OAAO,OAAO,UAAU,CAC9B;cAEA;KACU;MACZ;GAES"}
@@ -43,6 +43,10 @@
43
43
  @variant group-disabled/date-field {
44
44
  @apply fg-disabled outline-interactive-disabled;
45
45
  }
46
+
47
+ @variant read-only {
48
+ @apply px-0 outline-none;
49
+ }
46
50
  }
47
51
 
48
52
  .input {
@@ -13,24 +13,40 @@
13
13
  import { DateFieldProps as DateFieldProps$1, DateInputProps, DateSegmentProps, DateValue, FieldErrorProps, LabelProps } from "react-aria-components";
14
14
 
15
15
  //#region src/components/date-field/types.d.ts
16
+ /**
17
+ * Props for the DateField component.
18
+ *
19
+ * Extends AriaDateFieldProps with custom styling, labels, and size variants.
20
+ */
16
21
  type DateFieldProps<T extends DateValue> = Omit<DateFieldProps$1<T>, 'children' | 'className' | 'placeholder'> & {
22
+ /** Custom class names for sub-elements. */
17
23
  classNames?: {
24
+ /** Class name for the field container. */
18
25
  field?: DateFieldProps$1<T>['className'];
26
+ /** Class name for the label. */
19
27
  label?: LabelProps['className'];
28
+ /** Class name for the control wrapper. */
20
29
  control?: string;
30
+ /** Class name for the date input. */
21
31
  input?: DateInputProps['className'];
32
+ /** Class name for individual date segments. */
22
33
  segment?: DateSegmentProps['className'];
34
+ /** Class name for the description text. */
23
35
  description?: string;
36
+ /** Class name for the error message. */
24
37
  error?: FieldErrorProps['className'];
25
38
  };
39
+ /** Label text displayed above the field. */
26
40
  label?: string;
41
+ /** Helper text displayed below the field. */
27
42
  description?: string;
43
+ /** Error message displayed when invalid. */
28
44
  errorMessage?: string;
45
+ /** Additional props passed to the date input element. */
29
46
  inputProps?: Omit<DateInputProps, 'children' | 'className'>;
30
- /**
31
- * When true, will convert month value to 3 letter abbreviation when not editing
32
- */
47
+ /** When true, will convert month value to 3 letter abbreviation when not editing. */
33
48
  shortMonth?: boolean;
49
+ /** Size variant of the field. */
34
50
  size?: 'small' | 'medium';
35
51
  };
36
52
  //#endregion
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at https://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+ import { DeferredCollectionProps } from "./types.js";
14
+ import * as react_jsx_runtime42 from "react/jsx-runtime";
15
+
16
+ //#region src/components/deferred-collection/index.d.ts
17
+
18
+ /**
19
+ * DeferredCollection - Defers rendering of large collections to prevent UI freezes.
20
+ *
21
+ * React Aria's collection system processes ALL items synchronously before
22
+ * virtualization begins. This component defers the collection render by a few
23
+ * animation frames, allowing a fallback to display first.
24
+ *
25
+ * @param props - The deferred collection props.
26
+ * @param props.children - Content to render once ready (ReactNode or function returning ReactNode).
27
+ * @param props.fallback - Fallback element to show while deferring render.
28
+ * @param props.deferFrames - Number of animation frames to defer before rendering.
29
+ * @returns The deferred collection component with fallback or children.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <DeferredCollection fallback={<LoadingState />}>
34
+ * {() => (
35
+ * <Virtualizer>
36
+ * <ListBox items={items}>
37
+ * {(item) => <ListBoxItem>{item.name}</ListBoxItem>}
38
+ * </ListBox>
39
+ * </Virtualizer>
40
+ * )}
41
+ * </DeferredCollection>
42
+ * ```
43
+ */
44
+ declare function DeferredCollection({
45
+ children,
46
+ fallback,
47
+ deferFrames
48
+ }: DeferredCollectionProps): react_jsx_runtime42.JSX.Element;
49
+ //#endregion
50
+ export { DeferredCollection, type DeferredCollectionProps };
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at https://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+
14
+ import { useFrameDelay } from "../../hooks/use-frame-delay/index.js";
15
+ import { Fragment, jsx } from "react/jsx-runtime";
16
+
17
+ //#region src/components/deferred-collection/index.tsx
18
+ /**
19
+ * DeferredCollection - Defers rendering of large collections to prevent UI freezes.
20
+ *
21
+ * React Aria's collection system processes ALL items synchronously before
22
+ * virtualization begins. This component defers the collection render by a few
23
+ * animation frames, allowing a fallback to display first.
24
+ *
25
+ * @param props - The deferred collection props.
26
+ * @param props.children - Content to render once ready (ReactNode or function returning ReactNode).
27
+ * @param props.fallback - Fallback element to show while deferring render.
28
+ * @param props.deferFrames - Number of animation frames to defer before rendering.
29
+ * @returns The deferred collection component with fallback or children.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <DeferredCollection fallback={<LoadingState />}>
34
+ * {() => (
35
+ * <Virtualizer>
36
+ * <ListBox items={items}>
37
+ * {(item) => <ListBoxItem>{item.name}</ListBoxItem>}
38
+ * </ListBox>
39
+ * </Virtualizer>
40
+ * )}
41
+ * </DeferredCollection>
42
+ * ```
43
+ */
44
+ function DeferredCollection({ children, fallback, deferFrames }) {
45
+ const { isReady } = useFrameDelay({ frames: deferFrames });
46
+ if (isReady) return /* @__PURE__ */ jsx(Fragment, { children: typeof children === "function" ? children() : children });
47
+ return /* @__PURE__ */ jsx(Fragment, { children: fallback });
48
+ }
49
+
50
+ //#endregion
51
+ export { DeferredCollection };
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/deferred-collection/index.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useFrameDelay } from '../../hooks/use-frame-delay';\nimport type { DeferredCollectionProps } from './types';\n\n/**\n * DeferredCollection - Defers rendering of large collections to prevent UI freezes.\n *\n * React Aria's collection system processes ALL items synchronously before\n * virtualization begins. This component defers the collection render by a few\n * animation frames, allowing a fallback to display first.\n *\n * @param props - The deferred collection props.\n * @param props.children - Content to render once ready (ReactNode or function returning ReactNode).\n * @param props.fallback - Fallback element to show while deferring render.\n * @param props.deferFrames - Number of animation frames to defer before rendering.\n * @returns The deferred collection component with fallback or children.\n *\n * @example\n * ```tsx\n * <DeferredCollection fallback={<LoadingState />}>\n * {() => (\n * <Virtualizer>\n * <ListBox items={items}>\n * {(item) => <ListBoxItem>{item.name}</ListBoxItem>}\n * </ListBox>\n * </Virtualizer>\n * )}\n * </DeferredCollection>\n * ```\n */\nexport function DeferredCollection({\n children,\n fallback,\n deferFrames,\n}: DeferredCollectionProps) {\n const { isReady } = useFrameDelay({ frames: deferFrames });\n\n if (isReady) {\n return <>{typeof children === 'function' ? children() : children}</>;\n }\n\n return <>{fallback}</>;\n}\n\nexport type { DeferredCollectionProps } from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,mBAAmB,EACjC,UACA,UACA,eAC0B;CAC1B,MAAM,EAAE,YAAY,cAAc,EAAE,QAAQ,aAAa,CAAC;AAE1D,KAAI,QACF,QAAO,0CAAG,OAAO,aAAa,aAAa,UAAU,GAAG,WAAY;AAGtE,QAAO,0CAAG,WAAY"}
@@ -0,0 +1,29 @@
1
+ /*
2
+ * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at https://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+ import { ReactNode } from "react";
14
+
15
+ //#region src/components/deferred-collection/types.d.ts
16
+ /**
17
+ * Props for the DeferredCollection component.
18
+ */
19
+ interface DeferredCollectionProps {
20
+ /** The content to render once ready - can be ReactNode or a function returning ReactNode for deferred creation. */
21
+ children: ReactNode | (() => ReactNode);
22
+ /** Fallback element to show while deferring render. */
23
+ fallback?: ReactNode;
24
+ /** Number of animation frames to defer before rendering (default: 2). */
25
+ deferFrames?: number;
26
+ }
27
+ //#endregion
28
+ export { DeferredCollectionProps };
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at https://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+