@accelint/design-toolkit 9.6.0 → 9.8.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 (891) hide show
  1. package/catalog-info.yaml +4 -4
  2. package/dist/components/accordion/context.d.ts +3 -3
  3. package/dist/components/accordion/context.js +1 -1
  4. package/dist/components/accordion/context.js.map +1 -1
  5. package/dist/components/accordion/group.d.ts +3 -3
  6. package/dist/components/accordion/group.js +1 -1
  7. package/dist/components/accordion/group.js.map +1 -1
  8. package/dist/components/accordion/header.d.ts +3 -3
  9. package/dist/components/accordion/header.js +1 -1
  10. package/dist/components/accordion/header.js.map +1 -1
  11. package/dist/components/accordion/index.d.ts +3 -3
  12. package/dist/components/accordion/index.js +1 -1
  13. package/dist/components/accordion/index.js.map +1 -1
  14. package/dist/components/accordion/panel.d.ts +3 -3
  15. package/dist/components/accordion/panel.js +1 -1
  16. package/dist/components/accordion/panel.js.map +1 -1
  17. package/dist/components/accordion/styles.module.css +1 -1
  18. package/dist/components/accordion/trigger.d.ts +3 -3
  19. package/dist/components/accordion/trigger.js +1 -1
  20. package/dist/components/accordion/trigger.js.map +1 -1
  21. package/dist/components/accordion/types.d.ts +1 -1
  22. package/dist/components/accordion/types.js +1 -1
  23. package/dist/components/action-bar/index.d.ts +3 -3
  24. package/dist/components/action-bar/index.js +1 -1
  25. package/dist/components/action-bar/index.js.map +1 -1
  26. package/dist/components/action-bar/styles.module.css +1 -1
  27. package/dist/components/action-bar/types.d.ts +1 -1
  28. package/dist/components/action-bar/types.js +1 -1
  29. package/dist/components/audio/index.d.ts +3 -3
  30. package/dist/components/audio/index.js +4 -9
  31. package/dist/components/audio/index.js.map +1 -1
  32. package/dist/components/audio/types.d.ts +1 -1
  33. package/dist/components/audio/types.js +1 -1
  34. package/dist/components/avatar/context.d.ts +5 -5
  35. package/dist/components/avatar/context.js +1 -1
  36. package/dist/components/avatar/context.js.map +1 -1
  37. package/dist/components/avatar/index.d.ts +3 -3
  38. package/dist/components/avatar/index.js +1 -1
  39. package/dist/components/avatar/index.js.map +1 -1
  40. package/dist/components/avatar/styles.module.css +1 -1
  41. package/dist/components/avatar/types.d.ts +1 -1
  42. package/dist/components/avatar/types.js +1 -1
  43. package/dist/components/badge/context.d.ts +5 -5
  44. package/dist/components/badge/context.js +1 -1
  45. package/dist/components/badge/context.js.map +1 -1
  46. package/dist/components/badge/index.d.ts +3 -3
  47. package/dist/components/badge/index.js +1 -1
  48. package/dist/components/badge/index.js.map +1 -1
  49. package/dist/components/badge/styles.module.css +1 -1
  50. package/dist/components/badge/types.d.ts +1 -1
  51. package/dist/components/badge/types.js +1 -1
  52. package/dist/components/breadcrumbs/index.d.ts +3 -3
  53. package/dist/components/breadcrumbs/index.js +1 -1
  54. package/dist/components/breadcrumbs/index.js.map +1 -1
  55. package/dist/components/breadcrumbs/item.d.ts +3 -3
  56. package/dist/components/breadcrumbs/item.js +1 -1
  57. package/dist/components/breadcrumbs/item.js.map +1 -1
  58. package/dist/components/breadcrumbs/styles.module.css +1 -1
  59. package/dist/components/breadcrumbs/types.d.ts +1 -1
  60. package/dist/components/breadcrumbs/types.js +1 -1
  61. package/dist/components/button/__internal__/clear.js +1 -1
  62. package/dist/components/button/__internal__/clear.js.map +1 -1
  63. package/dist/components/button/__internal__/styles.module.css +1 -1
  64. package/dist/components/button/context.d.ts +9 -9
  65. package/dist/components/button/context.js +1 -1
  66. package/dist/components/button/context.js.map +1 -1
  67. package/dist/components/button/index.d.ts +3 -3
  68. package/dist/components/button/index.js +1 -1
  69. package/dist/components/button/index.js.map +1 -1
  70. package/dist/components/button/link.d.ts +3 -3
  71. package/dist/components/button/link.js +1 -1
  72. package/dist/components/button/link.js.map +1 -1
  73. package/dist/components/button/styles.module.css +1 -1
  74. package/dist/components/button/toggle.d.ts +3 -3
  75. package/dist/components/button/toggle.js +1 -1
  76. package/dist/components/button/toggle.js.map +1 -1
  77. package/dist/components/button/types.d.ts +1 -1
  78. package/dist/components/button/types.js +1 -1
  79. package/dist/components/checkbox/context.d.ts +4 -4
  80. package/dist/components/checkbox/context.js +1 -1
  81. package/dist/components/checkbox/context.js.map +1 -1
  82. package/dist/components/checkbox/group.d.ts +3 -3
  83. package/dist/components/checkbox/group.js +13 -10
  84. package/dist/components/checkbox/group.js.map +1 -1
  85. package/dist/components/checkbox/index.d.ts +3 -3
  86. package/dist/components/checkbox/index.js +3 -3
  87. package/dist/components/checkbox/index.js.map +1 -1
  88. package/dist/components/checkbox/styles.module.css +8 -2
  89. package/dist/components/checkbox/types.d.ts +5 -1
  90. package/dist/components/checkbox/types.js +1 -1
  91. package/dist/components/chip/context.d.ts +5 -5
  92. package/dist/components/chip/context.js +1 -1
  93. package/dist/components/chip/context.js.map +1 -1
  94. package/dist/components/chip/deletable.d.ts +3 -3
  95. package/dist/components/chip/deletable.js +1 -1
  96. package/dist/components/chip/deletable.js.map +1 -1
  97. package/dist/components/chip/index.d.ts +3 -3
  98. package/dist/components/chip/index.js +1 -1
  99. package/dist/components/chip/index.js.map +1 -1
  100. package/dist/components/chip/list.d.ts +5 -5
  101. package/dist/components/chip/list.js +1 -1
  102. package/dist/components/chip/list.js.map +1 -1
  103. package/dist/components/chip/selectable.d.ts +3 -3
  104. package/dist/components/chip/selectable.js +1 -1
  105. package/dist/components/chip/selectable.js.map +1 -1
  106. package/dist/components/chip/styles.module.css +1 -1
  107. package/dist/components/chip/types.d.ts +1 -1
  108. package/dist/components/chip/types.js +1 -1
  109. package/dist/components/classification-badge/context.d.ts +5 -5
  110. package/dist/components/classification-badge/context.js +1 -1
  111. package/dist/components/classification-badge/context.js.map +1 -1
  112. package/dist/components/classification-badge/index.d.ts +3 -3
  113. package/dist/components/classification-badge/index.js +1 -1
  114. package/dist/components/classification-badge/index.js.map +1 -1
  115. package/dist/components/classification-badge/styles.module.css +1 -1
  116. package/dist/components/classification-badge/types.d.ts +1 -1
  117. package/dist/components/classification-badge/types.js +1 -1
  118. package/dist/components/classification-banner/context.d.ts +5 -5
  119. package/dist/components/classification-banner/context.js +1 -1
  120. package/dist/components/classification-banner/context.js.map +1 -1
  121. package/dist/components/classification-banner/index.d.ts +3 -3
  122. package/dist/components/classification-banner/index.js +1 -1
  123. package/dist/components/classification-banner/index.js.map +1 -1
  124. package/dist/components/classification-banner/styles.module.css +1 -1
  125. package/dist/components/classification-banner/types.d.ts +1 -1
  126. package/dist/components/classification-banner/types.js +1 -1
  127. package/dist/components/clock/index.d.ts +3 -3
  128. package/dist/components/clock/index.js +1 -1
  129. package/dist/components/clock/index.js.map +1 -1
  130. package/dist/components/clock/types.d.ts +1 -1
  131. package/dist/components/clock/types.js +1 -1
  132. package/dist/components/color-picker/index.d.ts +3 -3
  133. package/dist/components/color-picker/index.js +1 -1
  134. package/dist/components/color-picker/index.js.map +1 -1
  135. package/dist/components/color-picker/styles.module.css +1 -1
  136. package/dist/components/color-picker/types.d.ts +1 -1
  137. package/dist/components/color-picker/types.js +1 -1
  138. package/dist/components/combobox-field/context.d.ts +5 -5
  139. package/dist/components/combobox-field/context.js +1 -1
  140. package/dist/components/combobox-field/context.js.map +1 -1
  141. package/dist/components/combobox-field/index.d.ts +3 -3
  142. package/dist/components/combobox-field/index.js +1 -1
  143. package/dist/components/combobox-field/index.js.map +1 -1
  144. package/dist/components/combobox-field/styles.module.css +1 -1
  145. package/dist/components/combobox-field/types.d.ts +1 -1
  146. package/dist/components/combobox-field/types.js +1 -1
  147. package/dist/components/coordinate-field/context.d.ts +7 -7
  148. package/dist/components/coordinate-field/context.js +1 -1
  149. package/dist/components/coordinate-field/context.js.map +1 -1
  150. package/dist/components/coordinate-field/coordinate-utils.d.ts +1 -1
  151. package/dist/components/coordinate-field/coordinate-utils.js +9 -14
  152. package/dist/components/coordinate-field/coordinate-utils.js.map +1 -1
  153. package/dist/components/coordinate-field/index.d.ts +3 -3
  154. package/dist/components/coordinate-field/index.js +2 -3
  155. package/dist/components/coordinate-field/index.js.map +1 -1
  156. package/dist/components/coordinate-field/segment-configs.d.ts +1 -1
  157. package/dist/components/coordinate-field/segment-configs.js +1 -1
  158. package/dist/components/coordinate-field/segment-configs.js.map +1 -1
  159. package/dist/components/coordinate-field/segment.d.ts +3 -3
  160. package/dist/components/coordinate-field/segment.js +1 -1
  161. package/dist/components/coordinate-field/segment.js.map +1 -1
  162. package/dist/components/coordinate-field/styles.module.css +1 -1
  163. package/dist/components/coordinate-field/types.d.ts +1 -1
  164. package/dist/components/coordinate-field/types.js +1 -1
  165. package/dist/components/coordinate-field/types.js.map +1 -1
  166. package/dist/components/coordinate-field/width-utils.d.ts +1 -1
  167. package/dist/components/coordinate-field/width-utils.js +1 -1
  168. package/dist/components/coordinate-field/width-utils.js.map +1 -1
  169. package/dist/components/date-field/index.d.ts +3 -3
  170. package/dist/components/date-field/index.js +1 -1
  171. package/dist/components/date-field/index.js.map +1 -1
  172. package/dist/components/date-field/styles.module.css +1 -1
  173. package/dist/components/date-field/types.d.ts +1 -1
  174. package/dist/components/date-field/types.js +1 -1
  175. package/dist/components/deferred-collection/index.d.ts +3 -3
  176. package/dist/components/deferred-collection/index.js +1 -1
  177. package/dist/components/deferred-collection/index.js.map +1 -1
  178. package/dist/components/deferred-collection/types.d.ts +1 -1
  179. package/dist/components/deferred-collection/types.js +1 -1
  180. package/dist/components/details-list/context.d.ts +5 -5
  181. package/dist/components/details-list/context.js +1 -1
  182. package/dist/components/details-list/context.js.map +1 -1
  183. package/dist/components/details-list/index.d.ts +3 -3
  184. package/dist/components/details-list/index.js +1 -1
  185. package/dist/components/details-list/index.js.map +1 -1
  186. package/dist/components/details-list/label.d.ts +3 -3
  187. package/dist/components/details-list/label.js +1 -1
  188. package/dist/components/details-list/label.js.map +1 -1
  189. package/dist/components/details-list/styles.module.css +1 -1
  190. package/dist/components/details-list/types.d.ts +1 -1
  191. package/dist/components/details-list/types.js +1 -1
  192. package/dist/components/details-list/value.d.ts +3 -3
  193. package/dist/components/details-list/value.js +1 -1
  194. package/dist/components/details-list/value.js.map +1 -1
  195. package/dist/components/dialog/content.d.ts +3 -3
  196. package/dist/components/dialog/content.js +1 -1
  197. package/dist/components/dialog/content.js.map +1 -1
  198. package/dist/components/dialog/context.d.ts +3 -3
  199. package/dist/components/dialog/context.js +1 -1
  200. package/dist/components/dialog/context.js.map +1 -1
  201. package/dist/components/dialog/footer.d.ts +3 -3
  202. package/dist/components/dialog/footer.js +1 -1
  203. package/dist/components/dialog/footer.js.map +1 -1
  204. package/dist/components/dialog/index.d.ts +3 -3
  205. package/dist/components/dialog/index.js +1 -1
  206. package/dist/components/dialog/index.js.map +1 -1
  207. package/dist/components/dialog/styles.module.css +1 -1
  208. package/dist/components/dialog/title.d.ts +3 -3
  209. package/dist/components/dialog/title.js +1 -1
  210. package/dist/components/dialog/title.js.map +1 -1
  211. package/dist/components/dialog/trigger.d.ts +1 -1
  212. package/dist/components/dialog/trigger.js +1 -1
  213. package/dist/components/dialog/trigger.js.map +1 -1
  214. package/dist/components/dialog/types.d.ts +1 -1
  215. package/dist/components/dialog/types.js +1 -1
  216. package/dist/components/divider/context.d.ts +5 -5
  217. package/dist/components/divider/context.js +1 -1
  218. package/dist/components/divider/context.js.map +1 -1
  219. package/dist/components/divider/index.d.ts +3 -3
  220. package/dist/components/divider/index.js +1 -1
  221. package/dist/components/divider/index.js.map +1 -1
  222. package/dist/components/divider/styles.module.css +1 -1
  223. package/dist/components/divider/types.d.ts +1 -1
  224. package/dist/components/divider/types.js +1 -1
  225. package/dist/components/drawer/back.d.ts +3 -3
  226. package/dist/components/drawer/back.js +1 -1
  227. package/dist/components/drawer/back.js.map +1 -1
  228. package/dist/components/drawer/close.d.ts +3 -3
  229. package/dist/components/drawer/close.js +1 -1
  230. package/dist/components/drawer/close.js.map +1 -1
  231. package/dist/components/drawer/content.d.ts +3 -3
  232. package/dist/components/drawer/content.js +1 -1
  233. package/dist/components/drawer/content.js.map +1 -1
  234. package/dist/components/drawer/context.d.ts +3 -3
  235. package/dist/components/drawer/context.js +1 -1
  236. package/dist/components/drawer/context.js.map +1 -1
  237. package/dist/components/drawer/events.js +1 -1
  238. package/dist/components/drawer/events.js.map +1 -1
  239. package/dist/components/drawer/footer.d.ts +3 -3
  240. package/dist/components/drawer/footer.js +1 -1
  241. package/dist/components/drawer/footer.js.map +1 -1
  242. package/dist/components/drawer/header-title.d.ts +3 -3
  243. package/dist/components/drawer/header-title.js +1 -1
  244. package/dist/components/drawer/header-title.js.map +1 -1
  245. package/dist/components/drawer/header.d.ts +3 -3
  246. package/dist/components/drawer/header.js +1 -1
  247. package/dist/components/drawer/header.js.map +1 -1
  248. package/dist/components/drawer/index.d.ts +3 -3
  249. package/dist/components/drawer/index.js +1 -1
  250. package/dist/components/drawer/index.js.map +1 -1
  251. package/dist/components/drawer/layout-main.d.ts +3 -3
  252. package/dist/components/drawer/layout-main.js +1 -1
  253. package/dist/components/drawer/layout-main.js.map +1 -1
  254. package/dist/components/drawer/layout.d.ts +3 -3
  255. package/dist/components/drawer/layout.js +1 -1
  256. package/dist/components/drawer/layout.js.map +1 -1
  257. package/dist/components/drawer/menu-item.d.ts +3 -3
  258. package/dist/components/drawer/menu-item.js +1 -1
  259. package/dist/components/drawer/menu-item.js.map +1 -1
  260. package/dist/components/drawer/menu.d.ts +3 -3
  261. package/dist/components/drawer/menu.js +1 -1
  262. package/dist/components/drawer/menu.js.map +1 -1
  263. package/dist/components/drawer/panel.d.ts +3 -3
  264. package/dist/components/drawer/panel.js +1 -1
  265. package/dist/components/drawer/panel.js.map +1 -1
  266. package/dist/components/drawer/styles.module.css +1 -1
  267. package/dist/components/drawer/trigger.d.ts +3 -3
  268. package/dist/components/drawer/trigger.js +1 -1
  269. package/dist/components/drawer/trigger.js.map +1 -1
  270. package/dist/components/drawer/types.d.ts +1 -1
  271. package/dist/components/drawer/types.js +1 -1
  272. package/dist/components/drawer/view.d.ts +3 -3
  273. package/dist/components/drawer/view.js +1 -1
  274. package/dist/components/drawer/view.js.map +1 -1
  275. package/dist/components/flashcard/index.d.ts +10 -10
  276. package/dist/components/flashcard/index.js +1 -1
  277. package/dist/components/flashcard/index.js.map +1 -1
  278. package/dist/components/flashcard/styles.module.css +1 -1
  279. package/dist/components/flashcard/types.d.ts +1 -1
  280. package/dist/components/flashcard/types.js +1 -1
  281. package/dist/components/floating-card/context.d.ts +36 -0
  282. package/dist/components/floating-card/context.js +33 -0
  283. package/dist/components/floating-card/context.js.map +1 -0
  284. package/dist/components/floating-card/index.d.ts +65 -0
  285. package/dist/components/floating-card/index.js +81 -0
  286. package/dist/components/floating-card/index.js.map +1 -0
  287. package/dist/components/floating-card/provider.d.ts +64 -0
  288. package/dist/components/floating-card/provider.js +198 -0
  289. package/dist/components/floating-card/provider.js.map +1 -0
  290. package/dist/components/floating-card/styles.module.css +60 -0
  291. package/dist/components/hero/context.d.ts +3 -3
  292. package/dist/components/hero/context.js +1 -1
  293. package/dist/components/hero/context.js.map +1 -1
  294. package/dist/components/hero/index.d.ts +3 -3
  295. package/dist/components/hero/index.js +1 -1
  296. package/dist/components/hero/index.js.map +1 -1
  297. package/dist/components/hero/styles.module.css +1 -1
  298. package/dist/components/hero/subtitle.d.ts +3 -3
  299. package/dist/components/hero/subtitle.js +1 -1
  300. package/dist/components/hero/subtitle.js.map +1 -1
  301. package/dist/components/hero/title.d.ts +3 -3
  302. package/dist/components/hero/title.js +1 -1
  303. package/dist/components/hero/title.js.map +1 -1
  304. package/dist/components/hero/types.d.ts +1 -1
  305. package/dist/components/hero/types.js +1 -1
  306. package/dist/components/hotkey/context.d.ts +5 -5
  307. package/dist/components/hotkey/context.js +1 -1
  308. package/dist/components/hotkey/context.js.map +1 -1
  309. package/dist/components/hotkey/index.d.ts +3 -3
  310. package/dist/components/hotkey/index.js +1 -1
  311. package/dist/components/hotkey/index.js.map +1 -1
  312. package/dist/components/hotkey/set.d.ts +1 -1
  313. package/dist/components/hotkey/set.js +1 -1
  314. package/dist/components/hotkey/set.js.map +1 -1
  315. package/dist/components/hotkey/styles.module.css +1 -1
  316. package/dist/components/hotkey/types.d.ts +1 -1
  317. package/dist/components/hotkey/types.js +1 -1
  318. package/dist/components/icon/context.d.ts +5 -5
  319. package/dist/components/icon/context.js +1 -1
  320. package/dist/components/icon/context.js.map +1 -1
  321. package/dist/components/icon/index.d.ts +3 -3
  322. package/dist/components/icon/index.js +1 -1
  323. package/dist/components/icon/index.js.map +1 -1
  324. package/dist/components/icon/styles.module.css +1 -1
  325. package/dist/components/icon/types.d.ts +1 -1
  326. package/dist/components/icon/types.js +1 -1
  327. package/dist/components/input/context.d.ts +3 -3
  328. package/dist/components/input/context.js +1 -1
  329. package/dist/components/input/context.js.map +1 -1
  330. package/dist/components/input/index.d.ts +3 -3
  331. package/dist/components/input/index.js +1 -1
  332. package/dist/components/input/index.js.map +1 -1
  333. package/dist/components/input/styles.module.css +1 -1
  334. package/dist/components/input/types.d.ts +1 -1
  335. package/dist/components/input/types.js +1 -1
  336. package/dist/components/kanban/card-body.d.ts +3 -3
  337. package/dist/components/kanban/card-body.js +1 -1
  338. package/dist/components/kanban/card-body.js.map +1 -1
  339. package/dist/components/kanban/card-header-actions.d.ts +3 -3
  340. package/dist/components/kanban/card-header-actions.js +1 -1
  341. package/dist/components/kanban/card-header-actions.js.map +1 -1
  342. package/dist/components/kanban/card-header-title.d.ts +3 -3
  343. package/dist/components/kanban/card-header-title.js +1 -1
  344. package/dist/components/kanban/card-header-title.js.map +1 -1
  345. package/dist/components/kanban/card-header.d.ts +3 -3
  346. package/dist/components/kanban/card-header.js +1 -1
  347. package/dist/components/kanban/card-header.js.map +1 -1
  348. package/dist/components/kanban/card.d.ts +3 -3
  349. package/dist/components/kanban/card.js +1 -1
  350. package/dist/components/kanban/card.js.map +1 -1
  351. package/dist/components/kanban/column-actions.d.ts +3 -3
  352. package/dist/components/kanban/column-actions.js +1 -1
  353. package/dist/components/kanban/column-actions.js.map +1 -1
  354. package/dist/components/kanban/column-container.d.ts +3 -3
  355. package/dist/components/kanban/column-container.js +1 -1
  356. package/dist/components/kanban/column-container.js.map +1 -1
  357. package/dist/components/kanban/column-content.d.ts +3 -3
  358. package/dist/components/kanban/column-content.js +1 -1
  359. package/dist/components/kanban/column-content.js.map +1 -1
  360. package/dist/components/kanban/column-header-actions.d.ts +3 -3
  361. package/dist/components/kanban/column-header-actions.js +1 -1
  362. package/dist/components/kanban/column-header-actions.js.map +1 -1
  363. package/dist/components/kanban/column-header-drag-handle.d.ts +3 -3
  364. package/dist/components/kanban/column-header-drag-handle.js +1 -1
  365. package/dist/components/kanban/column-header-drag-handle.js.map +1 -1
  366. package/dist/components/kanban/column-header-title.d.ts +3 -3
  367. package/dist/components/kanban/column-header-title.js +1 -1
  368. package/dist/components/kanban/column-header-title.js.map +1 -1
  369. package/dist/components/kanban/column-header.d.ts +3 -3
  370. package/dist/components/kanban/column-header.js +1 -1
  371. package/dist/components/kanban/column-header.js.map +1 -1
  372. package/dist/components/kanban/column.d.ts +3 -3
  373. package/dist/components/kanban/column.js +1 -1
  374. package/dist/components/kanban/column.js.map +1 -1
  375. package/dist/components/kanban/context.d.ts +3 -3
  376. package/dist/components/kanban/context.js +1 -1
  377. package/dist/components/kanban/context.js.map +1 -1
  378. package/dist/components/kanban/header-actions.d.ts +3 -3
  379. package/dist/components/kanban/header-actions.js +1 -1
  380. package/dist/components/kanban/header-actions.js.map +1 -1
  381. package/dist/components/kanban/header-search.d.ts +3 -3
  382. package/dist/components/kanban/header-search.js +1 -1
  383. package/dist/components/kanban/header-search.js.map +1 -1
  384. package/dist/components/kanban/header-title.d.ts +3 -3
  385. package/dist/components/kanban/header-title.js +1 -1
  386. package/dist/components/kanban/header-title.js.map +1 -1
  387. package/dist/components/kanban/header.d.ts +3 -3
  388. package/dist/components/kanban/header.js +1 -1
  389. package/dist/components/kanban/header.js.map +1 -1
  390. package/dist/components/kanban/index.d.ts +1 -1
  391. package/dist/components/kanban/index.js +1 -1
  392. package/dist/components/kanban/kanban.d.ts +5 -5
  393. package/dist/components/kanban/kanban.js +1 -1
  394. package/dist/components/kanban/kanban.js.map +1 -1
  395. package/dist/components/kanban/mock-data.js +1 -1
  396. package/dist/components/kanban/mock-data.js.map +1 -1
  397. package/dist/components/kanban/styles.module.css +1 -1
  398. package/dist/components/kanban/types.d.ts +1 -1
  399. package/dist/components/kanban/types.js +1 -1
  400. package/dist/components/label/context.d.ts +5 -5
  401. package/dist/components/label/context.js +1 -1
  402. package/dist/components/label/context.js.map +1 -1
  403. package/dist/components/label/index.d.ts +3 -3
  404. package/dist/components/label/index.js +1 -1
  405. package/dist/components/label/index.js.map +1 -1
  406. package/dist/components/label/styles.module.css +1 -1
  407. package/dist/components/label/types.d.ts +1 -1
  408. package/dist/components/label/types.js +1 -1
  409. package/dist/components/lines/index.d.ts +3 -3
  410. package/dist/components/lines/index.js +1 -1
  411. package/dist/components/lines/index.js.map +1 -1
  412. package/dist/components/lines/styles.module.css +1 -1
  413. package/dist/components/lines/types.d.ts +1 -1
  414. package/dist/components/lines/types.js +1 -1
  415. package/dist/components/link/context.d.ts +3 -3
  416. package/dist/components/link/context.js +1 -1
  417. package/dist/components/link/context.js.map +1 -1
  418. package/dist/components/link/index.d.ts +3 -3
  419. package/dist/components/link/index.js +1 -1
  420. package/dist/components/link/index.js.map +1 -1
  421. package/dist/components/link/styles.module.css +1 -1
  422. package/dist/components/link/types.d.ts +1 -1
  423. package/dist/components/link/types.js +1 -1
  424. package/dist/components/list/context.d.ts +3 -3
  425. package/dist/components/list/context.js +1 -1
  426. package/dist/components/list/context.js.map +1 -1
  427. package/dist/components/list/index.d.ts +3 -3
  428. package/dist/components/list/index.js +1 -1
  429. package/dist/components/list/index.js.map +1 -1
  430. package/dist/components/list/item-content.d.ts +3 -3
  431. package/dist/components/list/item-content.js +1 -1
  432. package/dist/components/list/item-content.js.map +1 -1
  433. package/dist/components/list/item-description.d.ts +3 -3
  434. package/dist/components/list/item-description.js +1 -1
  435. package/dist/components/list/item-description.js.map +1 -1
  436. package/dist/components/list/item-title.d.ts +3 -3
  437. package/dist/components/list/item-title.js +1 -1
  438. package/dist/components/list/item-title.js.map +1 -1
  439. package/dist/components/list/item.d.ts +3 -3
  440. package/dist/components/list/item.js +1 -1
  441. package/dist/components/list/item.js.map +1 -1
  442. package/dist/components/list/styles.module.css +1 -1
  443. package/dist/components/list/types.d.ts +1 -1
  444. package/dist/components/list/types.js +1 -1
  445. package/dist/components/media-controls/context.d.ts +5 -5
  446. package/dist/components/media-controls/context.js +1 -1
  447. package/dist/components/media-controls/fullscreen-button.d.ts +3 -3
  448. package/dist/components/media-controls/fullscreen-button.js +1 -1
  449. package/dist/components/media-controls/index.d.ts +3 -3
  450. package/dist/components/media-controls/index.js +1 -1
  451. package/dist/components/media-controls/mute-button.d.ts +3 -3
  452. package/dist/components/media-controls/mute-button.js +1 -1
  453. package/dist/components/media-controls/play-button.d.ts +3 -3
  454. package/dist/components/media-controls/play-button.js +1 -1
  455. package/dist/components/media-controls/playback-rate.d.ts +3 -3
  456. package/dist/components/media-controls/playback-rate.js +3 -8
  457. package/dist/components/media-controls/playback-rate.js.map +1 -1
  458. package/dist/components/media-controls/seek-button.d.ts +3 -3
  459. package/dist/components/media-controls/seek-button.js +3 -8
  460. package/dist/components/media-controls/seek-button.js.map +1 -1
  461. package/dist/components/media-controls/time-display.d.ts +3 -3
  462. package/dist/components/media-controls/time-display.js +1 -1
  463. package/dist/components/media-controls/time-range.d.ts +3 -3
  464. package/dist/components/media-controls/time-range.js +1 -1
  465. package/dist/components/media-controls/types.d.ts +1 -1
  466. package/dist/components/media-controls/types.js +1 -1
  467. package/dist/components/media-controls/volume-slider.d.ts +3 -3
  468. package/dist/components/media-controls/volume-slider.js +1 -1
  469. package/dist/components/menu/context.d.ts +3 -3
  470. package/dist/components/menu/context.js +1 -1
  471. package/dist/components/menu/context.js.map +1 -1
  472. package/dist/components/menu/index.d.ts +3 -3
  473. package/dist/components/menu/index.js +1 -1
  474. package/dist/components/menu/index.js.map +1 -1
  475. package/dist/components/menu/item-description.d.ts +3 -3
  476. package/dist/components/menu/item-description.js +1 -1
  477. package/dist/components/menu/item-description.js.map +1 -1
  478. package/dist/components/menu/item-label.d.ts +3 -3
  479. package/dist/components/menu/item-label.js +1 -1
  480. package/dist/components/menu/item-label.js.map +1 -1
  481. package/dist/components/menu/item.d.ts +3 -3
  482. package/dist/components/menu/item.js +1 -1
  483. package/dist/components/menu/item.js.map +1 -1
  484. package/dist/components/menu/section.d.ts +3 -3
  485. package/dist/components/menu/section.js +1 -1
  486. package/dist/components/menu/section.js.map +1 -1
  487. package/dist/components/menu/separator.d.ts +3 -3
  488. package/dist/components/menu/separator.js +1 -1
  489. package/dist/components/menu/separator.js.map +1 -1
  490. package/dist/components/menu/styles.module.css +1 -1
  491. package/dist/components/menu/submenu.d.ts +3 -3
  492. package/dist/components/menu/submenu.js +1 -1
  493. package/dist/components/menu/submenu.js.map +1 -1
  494. package/dist/components/menu/trigger.d.ts +1 -1
  495. package/dist/components/menu/trigger.js +1 -1
  496. package/dist/components/menu/trigger.js.map +1 -1
  497. package/dist/components/menu/types.d.ts +1 -1
  498. package/dist/components/menu/types.js +1 -1
  499. package/dist/components/notice/events.js +1 -1
  500. package/dist/components/notice/events.js.map +1 -1
  501. package/dist/components/notice/index.d.ts +3 -3
  502. package/dist/components/notice/index.js +1 -1
  503. package/dist/components/notice/index.js.map +1 -1
  504. package/dist/components/notice/list.d.ts +3 -3
  505. package/dist/components/notice/list.js +1 -1
  506. package/dist/components/notice/list.js.map +1 -1
  507. package/dist/components/notice/notice-icon.d.ts +3 -3
  508. package/dist/components/notice/notice-icon.js +1 -1
  509. package/dist/components/notice/notice-icon.js.map +1 -1
  510. package/dist/components/notice/styles.module.css +1 -1
  511. package/dist/components/notice/types.d.ts +1 -1
  512. package/dist/components/notice/types.js +1 -1
  513. package/dist/components/notice/utils.d.ts +1 -1
  514. package/dist/components/notice/utils.js +1 -1
  515. package/dist/components/notice/utils.js.map +1 -1
  516. package/dist/components/options/context.d.ts +3 -3
  517. package/dist/components/options/context.js +1 -1
  518. package/dist/components/options/context.js.map +1 -1
  519. package/dist/components/options/index.d.ts +3 -3
  520. package/dist/components/options/index.js +1 -1
  521. package/dist/components/options/index.js.map +1 -1
  522. package/dist/components/options/item-content.d.ts +3 -3
  523. package/dist/components/options/item-content.js +1 -1
  524. package/dist/components/options/item-content.js.map +1 -1
  525. package/dist/components/options/item-description.d.ts +3 -3
  526. package/dist/components/options/item-description.js +1 -1
  527. package/dist/components/options/item-description.js.map +1 -1
  528. package/dist/components/options/item-label.d.ts +3 -3
  529. package/dist/components/options/item-label.js +1 -1
  530. package/dist/components/options/item-label.js.map +1 -1
  531. package/dist/components/options/item.d.ts +3 -3
  532. package/dist/components/options/item.js +1 -1
  533. package/dist/components/options/item.js.map +1 -1
  534. package/dist/components/options/section.d.ts +3 -3
  535. package/dist/components/options/section.js +1 -1
  536. package/dist/components/options/section.js.map +1 -1
  537. package/dist/components/options/styles.module.css +77 -5
  538. package/dist/components/options/types.d.ts +1 -1
  539. package/dist/components/options/types.js +1 -1
  540. package/dist/components/pagination/context.d.ts +3 -3
  541. package/dist/components/pagination/context.js +1 -1
  542. package/dist/components/pagination/context.js.map +1 -1
  543. package/dist/components/pagination/index.d.ts +3 -3
  544. package/dist/components/pagination/index.js +1 -1
  545. package/dist/components/pagination/index.js.map +1 -1
  546. package/dist/components/pagination/next.d.ts +3 -3
  547. package/dist/components/pagination/next.js +1 -1
  548. package/dist/components/pagination/next.js.map +1 -1
  549. package/dist/components/pagination/pages.d.ts +3 -3
  550. package/dist/components/pagination/pages.js +1 -1
  551. package/dist/components/pagination/pages.js.map +1 -1
  552. package/dist/components/pagination/prev.d.ts +3 -3
  553. package/dist/components/pagination/prev.js +1 -1
  554. package/dist/components/pagination/prev.js.map +1 -1
  555. package/dist/components/pagination/styles.module.css +1 -1
  556. package/dist/components/pagination/types.d.ts +1 -1
  557. package/dist/components/pagination/types.js +1 -1
  558. package/dist/components/pagination/utils.js +1 -1
  559. package/dist/components/pagination/utils.js.map +1 -1
  560. package/dist/components/popover/content.d.ts +3 -3
  561. package/dist/components/popover/content.js +1 -1
  562. package/dist/components/popover/content.js.map +1 -1
  563. package/dist/components/popover/footer.d.ts +3 -3
  564. package/dist/components/popover/footer.js +1 -1
  565. package/dist/components/popover/footer.js.map +1 -1
  566. package/dist/components/popover/index.d.ts +3 -3
  567. package/dist/components/popover/index.js +1 -1
  568. package/dist/components/popover/index.js.map +1 -1
  569. package/dist/components/popover/styles.module.css +1 -1
  570. package/dist/components/popover/title.d.ts +3 -3
  571. package/dist/components/popover/title.js +1 -1
  572. package/dist/components/popover/title.js.map +1 -1
  573. package/dist/components/popover/trigger.d.ts +3 -3
  574. package/dist/components/popover/trigger.js +1 -1
  575. package/dist/components/popover/trigger.js.map +1 -1
  576. package/dist/components/popover/types.d.ts +1 -1
  577. package/dist/components/popover/types.js +1 -1
  578. package/dist/components/query-builder/action-element.d.ts +3 -3
  579. package/dist/components/query-builder/action-element.js +1 -1
  580. package/dist/components/query-builder/action-element.js.map +1 -1
  581. package/dist/components/query-builder/actions.d.ts +5 -5
  582. package/dist/components/query-builder/actions.js +1 -1
  583. package/dist/components/query-builder/actions.js.map +1 -1
  584. package/dist/components/query-builder/combinator-selector.d.ts +3 -3
  585. package/dist/components/query-builder/combinator-selector.js +1 -1
  586. package/dist/components/query-builder/combinator-selector.js.map +1 -1
  587. package/dist/components/query-builder/constants.js +1 -1
  588. package/dist/components/query-builder/constants.js.map +1 -1
  589. package/dist/components/query-builder/index.d.ts +3 -3
  590. package/dist/components/query-builder/index.js +2 -2
  591. package/dist/components/query-builder/index.js.map +1 -1
  592. package/dist/components/query-builder/rule-group.d.ts +5 -5
  593. package/dist/components/query-builder/rule-group.js +1 -1
  594. package/dist/components/query-builder/rule-group.js.map +1 -1
  595. package/dist/components/query-builder/rule.d.ts +3 -3
  596. package/dist/components/query-builder/rule.js +1 -1
  597. package/dist/components/query-builder/rule.js.map +1 -1
  598. package/dist/components/query-builder/styles.module.css +11 -2
  599. package/dist/components/query-builder/types.d.ts +1 -1
  600. package/dist/components/query-builder/types.js +1 -1
  601. package/dist/components/query-builder/utils.d.ts +1 -1
  602. package/dist/components/query-builder/utils.js +1 -1
  603. package/dist/components/query-builder/utils.js.map +1 -1
  604. package/dist/components/query-builder/value-editor.d.ts +3 -3
  605. package/dist/components/query-builder/value-editor.js +1 -1
  606. package/dist/components/query-builder/value-editor.js.map +1 -1
  607. package/dist/components/query-builder/value-selector.d.ts +3 -3
  608. package/dist/components/query-builder/value-selector.js +12 -5
  609. package/dist/components/query-builder/value-selector.js.map +1 -1
  610. package/dist/components/radio/context.d.ts +11 -5
  611. package/dist/components/radio/context.js +8 -2
  612. package/dist/components/radio/context.js.map +1 -1
  613. package/dist/components/radio/group.d.ts +3 -3
  614. package/dist/components/radio/group.js +14 -11
  615. package/dist/components/radio/group.js.map +1 -1
  616. package/dist/components/radio/index.d.ts +5 -6
  617. package/dist/components/radio/index.js +8 -4
  618. package/dist/components/radio/index.js.map +1 -1
  619. package/dist/components/radio/styles.module.css +7 -5
  620. package/dist/components/radio/types.d.ts +5 -1
  621. package/dist/components/radio/types.js +1 -1
  622. package/dist/components/search-field/context.d.ts +5 -5
  623. package/dist/components/search-field/context.js +1 -1
  624. package/dist/components/search-field/context.js.map +1 -1
  625. package/dist/components/search-field/index.d.ts +3 -3
  626. package/dist/components/search-field/index.js +1 -1
  627. package/dist/components/search-field/index.js.map +1 -1
  628. package/dist/components/search-field/styles.module.css +1 -1
  629. package/dist/components/search-field/types.d.ts +1 -1
  630. package/dist/components/search-field/types.js +1 -1
  631. package/dist/components/select-field/context.d.ts +5 -5
  632. package/dist/components/select-field/context.js +1 -1
  633. package/dist/components/select-field/context.js.map +1 -1
  634. package/dist/components/select-field/index.d.ts +3 -3
  635. package/dist/components/select-field/index.js +1 -1
  636. package/dist/components/select-field/index.js.map +1 -1
  637. package/dist/components/select-field/styles.module.css +1 -1
  638. package/dist/components/select-field/types.d.ts +1 -1
  639. package/dist/components/select-field/types.js +1 -1
  640. package/dist/components/sidenav/avatar.d.ts +3 -3
  641. package/dist/components/sidenav/avatar.js +1 -1
  642. package/dist/components/sidenav/avatar.js.map +1 -1
  643. package/dist/components/sidenav/content.d.ts +3 -3
  644. package/dist/components/sidenav/content.js +1 -1
  645. package/dist/components/sidenav/content.js.map +1 -1
  646. package/dist/components/sidenav/context.d.ts +3 -3
  647. package/dist/components/sidenav/context.js +1 -1
  648. package/dist/components/sidenav/context.js.map +1 -1
  649. package/dist/components/sidenav/events.js +1 -1
  650. package/dist/components/sidenav/events.js.map +1 -1
  651. package/dist/components/sidenav/footer.d.ts +3 -3
  652. package/dist/components/sidenav/footer.js +1 -1
  653. package/dist/components/sidenav/footer.js.map +1 -1
  654. package/dist/components/sidenav/header.d.ts +3 -3
  655. package/dist/components/sidenav/header.js +1 -1
  656. package/dist/components/sidenav/header.js.map +1 -1
  657. package/dist/components/sidenav/index.d.ts +3 -3
  658. package/dist/components/sidenav/index.js +1 -1
  659. package/dist/components/sidenav/index.js.map +1 -1
  660. package/dist/components/sidenav/item.d.ts +3 -3
  661. package/dist/components/sidenav/item.js +1 -1
  662. package/dist/components/sidenav/item.js.map +1 -1
  663. package/dist/components/sidenav/link.d.ts +3 -3
  664. package/dist/components/sidenav/link.js +1 -1
  665. package/dist/components/sidenav/link.js.map +1 -1
  666. package/dist/components/sidenav/menu-item.d.ts +3 -3
  667. package/dist/components/sidenav/menu-item.js +1 -1
  668. package/dist/components/sidenav/menu-item.js.map +1 -1
  669. package/dist/components/sidenav/menu.d.ts +3 -3
  670. package/dist/components/sidenav/menu.js +1 -1
  671. package/dist/components/sidenav/menu.js.map +1 -1
  672. package/dist/components/sidenav/styles.module.css +1 -1
  673. package/dist/components/sidenav/trigger.d.ts +3 -3
  674. package/dist/components/sidenav/trigger.js +1 -1
  675. package/dist/components/sidenav/trigger.js.map +1 -1
  676. package/dist/components/sidenav/types.d.ts +1 -1
  677. package/dist/components/sidenav/types.js +1 -1
  678. package/dist/components/skeleton/index.d.ts +3 -3
  679. package/dist/components/skeleton/index.js +1 -1
  680. package/dist/components/skeleton/index.js.map +1 -1
  681. package/dist/components/skeleton/styles.module.css +3 -5
  682. package/dist/components/skeleton/types.d.ts +2 -2
  683. package/dist/components/skeleton/types.js +1 -1
  684. package/dist/components/slider/index.d.ts +3 -3
  685. package/dist/components/slider/index.js +1 -1
  686. package/dist/components/slider/index.js.map +1 -1
  687. package/dist/components/slider/styles.module.css +1 -1
  688. package/dist/components/slider/types.d.ts +1 -1
  689. package/dist/components/slider/types.js +1 -1
  690. package/dist/components/status-indicator/index.d.ts +3 -3
  691. package/dist/components/status-indicator/index.js +1 -1
  692. package/dist/components/status-indicator/types.d.ts +1 -1
  693. package/dist/components/status-indicator/types.js +1 -1
  694. package/dist/components/switch/context.d.ts +5 -5
  695. package/dist/components/switch/context.js +1 -1
  696. package/dist/components/switch/context.js.map +1 -1
  697. package/dist/components/switch/index.d.ts +3 -3
  698. package/dist/components/switch/index.js +1 -1
  699. package/dist/components/switch/index.js.map +1 -1
  700. package/dist/components/switch/styles.module.css +1 -1
  701. package/dist/components/switch/types.d.ts +1 -1
  702. package/dist/components/switch/types.js +1 -1
  703. package/dist/components/table/body.d.ts +3 -3
  704. package/dist/components/table/body.js +1 -1
  705. package/dist/components/table/body.js.map +1 -1
  706. package/dist/components/table/cell.d.ts +3 -3
  707. package/dist/components/table/cell.js +1 -1
  708. package/dist/components/table/cell.js.map +1 -1
  709. package/dist/components/table/constants/table.d.ts +1 -1
  710. package/dist/components/table/constants/table.js +1 -1
  711. package/dist/components/table/constants/table.js.map +1 -1
  712. package/dist/components/table/context.d.ts +3 -3
  713. package/dist/components/table/context.js +1 -1
  714. package/dist/components/table/context.js.map +1 -1
  715. package/dist/components/table/header-cell.d.ts +3 -3
  716. package/dist/components/table/header-cell.js +1 -1
  717. package/dist/components/table/header-cell.js.map +1 -1
  718. package/dist/components/table/header.d.ts +3 -3
  719. package/dist/components/table/header.js +1 -1
  720. package/dist/components/table/header.js.map +1 -1
  721. package/dist/components/table/index.d.ts +3 -3
  722. package/dist/components/table/index.js +1 -1
  723. package/dist/components/table/index.js.map +1 -1
  724. package/dist/components/table/row.d.ts +3 -3
  725. package/dist/components/table/row.js +1 -1
  726. package/dist/components/table/row.js.map +1 -1
  727. package/dist/components/table/styles.module.css +1 -1
  728. package/dist/components/table/types.d.ts +1 -1
  729. package/dist/components/table/types.js +1 -1
  730. package/dist/components/tabs/constants.d.ts +19 -0
  731. package/dist/components/tabs/constants.js +23 -0
  732. package/dist/components/tabs/constants.js.map +1 -0
  733. package/dist/components/tabs/context.d.ts +12 -7
  734. package/dist/components/tabs/context.js +9 -2
  735. package/dist/components/tabs/context.js.map +1 -1
  736. package/dist/components/tabs/index.d.ts +5 -3
  737. package/dist/components/tabs/index.js +18 -8
  738. package/dist/components/tabs/index.js.map +1 -1
  739. package/dist/components/tabs/list.d.ts +3 -3
  740. package/dist/components/tabs/list.js +1 -1
  741. package/dist/components/tabs/list.js.map +1 -1
  742. package/dist/components/tabs/panel.d.ts +3 -3
  743. package/dist/components/tabs/panel.js +1 -1
  744. package/dist/components/tabs/panel.js.map +1 -1
  745. package/dist/components/tabs/styles.module.css +28 -6
  746. package/dist/components/tabs/tab.d.ts +8 -7
  747. package/dist/components/tabs/tab.js +13 -4
  748. package/dist/components/tabs/tab.js.map +1 -1
  749. package/dist/components/tabs/types.d.ts +26 -4
  750. package/dist/components/tabs/types.js +1 -1
  751. package/dist/components/text-area-field/context.d.ts +5 -5
  752. package/dist/components/text-area-field/context.js +1 -1
  753. package/dist/components/text-area-field/context.js.map +1 -1
  754. package/dist/components/text-area-field/index.d.ts +3 -3
  755. package/dist/components/text-area-field/index.js +1 -1
  756. package/dist/components/text-area-field/index.js.map +1 -1
  757. package/dist/components/text-area-field/styles.module.css +1 -1
  758. package/dist/components/text-area-field/types.d.ts +1 -1
  759. package/dist/components/text-area-field/types.js +1 -1
  760. package/dist/components/text-field/context.d.ts +5 -5
  761. package/dist/components/text-field/context.js +1 -1
  762. package/dist/components/text-field/context.js.map +1 -1
  763. package/dist/components/text-field/index.d.ts +3 -3
  764. package/dist/components/text-field/index.js +1 -1
  765. package/dist/components/text-field/index.js.map +1 -1
  766. package/dist/components/text-field/styles.module.css +1 -1
  767. package/dist/components/text-field/types.d.ts +1 -1
  768. package/dist/components/text-field/types.js +1 -1
  769. package/dist/components/time-field/index.d.ts +3 -3
  770. package/dist/components/time-field/index.js +1 -1
  771. package/dist/components/time-field/index.js.map +1 -1
  772. package/dist/components/time-field/styles.module.css +1 -1
  773. package/dist/components/time-field/types.d.ts +1 -1
  774. package/dist/components/time-field/types.js +1 -1
  775. package/dist/components/tooltip/context.d.ts +3 -3
  776. package/dist/components/tooltip/context.js +1 -1
  777. package/dist/components/tooltip/context.js.map +1 -1
  778. package/dist/components/tooltip/index.d.ts +3 -3
  779. package/dist/components/tooltip/index.js +1 -1
  780. package/dist/components/tooltip/index.js.map +1 -1
  781. package/dist/components/tooltip/styles.module.css +1 -1
  782. package/dist/components/tooltip/trigger.d.ts +3 -3
  783. package/dist/components/tooltip/trigger.js +1 -1
  784. package/dist/components/tooltip/trigger.js.map +1 -1
  785. package/dist/components/tooltip/types.d.ts +1 -1
  786. package/dist/components/tooltip/types.js +1 -1
  787. package/dist/components/tree/context.d.ts +4 -4
  788. package/dist/components/tree/context.js +1 -1
  789. package/dist/components/tree/context.js.map +1 -1
  790. package/dist/components/tree/index.d.ts +3 -3
  791. package/dist/components/tree/index.js +1 -1
  792. package/dist/components/tree/index.js.map +1 -1
  793. package/dist/components/tree/item-actions.d.ts +3 -3
  794. package/dist/components/tree/item-actions.js +1 -1
  795. package/dist/components/tree/item-actions.js.map +1 -1
  796. package/dist/components/tree/item-content.d.ts +3 -3
  797. package/dist/components/tree/item-content.js +1 -1
  798. package/dist/components/tree/item-content.js.map +1 -1
  799. package/dist/components/tree/item-description.d.ts +3 -3
  800. package/dist/components/tree/item-description.js +1 -1
  801. package/dist/components/tree/item-description.js.map +1 -1
  802. package/dist/components/tree/item-label.d.ts +3 -3
  803. package/dist/components/tree/item-label.js +1 -1
  804. package/dist/components/tree/item-label.js.map +1 -1
  805. package/dist/components/tree/item-prefix-icon.d.ts +3 -3
  806. package/dist/components/tree/item-prefix-icon.js +1 -1
  807. package/dist/components/tree/item-prefix-icon.js.map +1 -1
  808. package/dist/components/tree/item.d.ts +3 -3
  809. package/dist/components/tree/item.js +1 -1
  810. package/dist/components/tree/item.js.map +1 -1
  811. package/dist/components/tree/lines.d.ts +3 -3
  812. package/dist/components/tree/lines.js +1 -1
  813. package/dist/components/tree/lines.js.map +1 -1
  814. package/dist/components/tree/styles.module.css +1 -1
  815. package/dist/components/tree/types.d.ts +1 -1
  816. package/dist/components/tree/types.js +1 -1
  817. package/dist/components/video/index.d.ts +3 -3
  818. package/dist/components/video/index.js +4 -9
  819. package/dist/components/video/index.js.map +1 -1
  820. package/dist/components/video/types.d.ts +1 -1
  821. package/dist/components/video/types.js +1 -1
  822. package/dist/components/view-stack/context.d.ts +3 -3
  823. package/dist/components/view-stack/context.js +1 -1
  824. package/dist/components/view-stack/context.js.map +1 -1
  825. package/dist/components/view-stack/events.js +1 -1
  826. package/dist/components/view-stack/events.js.map +1 -1
  827. package/dist/components/view-stack/index.d.ts +3 -3
  828. package/dist/components/view-stack/index.js +1 -1
  829. package/dist/components/view-stack/index.js.map +1 -1
  830. package/dist/components/view-stack/trigger.d.ts +3 -3
  831. package/dist/components/view-stack/trigger.js +1 -1
  832. package/dist/components/view-stack/trigger.js.map +1 -1
  833. package/dist/components/view-stack/types.d.ts +1 -1
  834. package/dist/components/view-stack/types.js +1 -1
  835. package/dist/components/view-stack/view.d.ts +3 -3
  836. package/dist/components/view-stack/view.js +1 -1
  837. package/dist/components/view-stack/view.js.map +1 -1
  838. package/dist/hooks/coordinate-field/index.d.ts +1 -1
  839. package/dist/hooks/coordinate-field/index.js +1 -1
  840. package/dist/hooks/coordinate-field/use-coordinate-copy.d.ts +1 -1
  841. package/dist/hooks/coordinate-field/use-coordinate-copy.js +4 -9
  842. package/dist/hooks/coordinate-field/use-coordinate-copy.js.map +1 -1
  843. package/dist/hooks/coordinate-field/use-coordinate-field-state.d.ts +1 -1
  844. package/dist/hooks/coordinate-field/use-coordinate-field-state.js +1 -1
  845. package/dist/hooks/coordinate-field/use-coordinate-field-state.js.map +1 -1
  846. package/dist/hooks/coordinate-field/use-coordinate-field.d.ts +1 -1
  847. package/dist/hooks/coordinate-field/use-coordinate-field.js +1 -1
  848. package/dist/hooks/coordinate-field/use-coordinate-field.js.map +1 -1
  849. package/dist/hooks/coordinate-field/use-coordinate-focus.d.ts +1 -1
  850. package/dist/hooks/coordinate-field/use-coordinate-focus.js +1 -1
  851. package/dist/hooks/coordinate-field/use-coordinate-focus.js.map +1 -1
  852. package/dist/hooks/coordinate-field/use-coordinate-paste.d.ts +1 -1
  853. package/dist/hooks/coordinate-field/use-coordinate-paste.js +1 -1
  854. package/dist/hooks/coordinate-field/use-coordinate-paste.js.map +1 -1
  855. package/dist/hooks/coordinate-field/use-timeout-cleanup.js +1 -1
  856. package/dist/hooks/coordinate-field/use-timeout-cleanup.js.map +1 -1
  857. package/dist/hooks/kanban/index.d.ts +1 -1
  858. package/dist/hooks/kanban/index.js +1 -1
  859. package/dist/hooks/kanban/index.js.map +1 -1
  860. package/dist/hooks/use-frame-delay/index.js +1 -1
  861. package/dist/hooks/use-frame-delay/index.js.map +1 -1
  862. package/dist/hooks/use-tree/actions/cache.d.ts +1 -1
  863. package/dist/hooks/use-tree/actions/cache.js +1 -1
  864. package/dist/hooks/use-tree/actions/cache.js.map +1 -1
  865. package/dist/hooks/use-tree/actions/index.d.ts +1 -1
  866. package/dist/hooks/use-tree/actions/index.js +1 -1
  867. package/dist/hooks/use-tree/actions/index.js.map +1 -1
  868. package/dist/hooks/use-tree/state/index.d.ts +1 -1
  869. package/dist/hooks/use-tree/state/index.js +1 -1
  870. package/dist/hooks/use-tree/state/index.js.map +1 -1
  871. package/dist/hooks/use-tree/state/utils.d.ts +1 -1
  872. package/dist/hooks/use-tree/state/utils.js +1 -1
  873. package/dist/hooks/use-tree/state/utils.js.map +1 -1
  874. package/dist/hooks/use-tree/types.d.ts +1 -1
  875. package/dist/hooks/use-tree/types.js +1 -1
  876. package/dist/index.d.ts +8 -5
  877. package/dist/index.js +7 -4
  878. package/dist/lib/types.d.ts +1 -1
  879. package/dist/lib/types.js +1 -1
  880. package/dist/lib/utils.d.ts +1 -1
  881. package/dist/lib/utils.js +1 -1
  882. package/dist/lib/utils.js.map +1 -1
  883. package/dist/providers/portal.d.ts +3 -3
  884. package/dist/providers/portal.js +1 -1
  885. package/dist/providers/portal.js.map +1 -1
  886. package/dist/providers/theme-provider.d.ts +1 -1
  887. package/dist/providers/theme-provider.js +1 -1
  888. package/dist/providers/theme-provider.js.map +1 -1
  889. package/dist/utils/logger/index.js +31 -0
  890. package/dist/utils/logger/index.js.map +1 -0
  891. package/package.json +18 -9
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { VideoProps } from "./types.js";
14
14
  import "client-only";
15
- import * as react_jsx_runtime184 from "react/jsx-runtime";
15
+ import * as react_jsx_runtime199 from "react/jsx-runtime";
16
16
 
17
17
  //#region src/components/video/index.d.ts
18
18
 
@@ -91,7 +91,7 @@ declare function Video({
91
91
  noMutedPref,
92
92
  lang,
93
93
  ...rest
94
- }: VideoProps): react_jsx_runtime184.JSX.Element;
94
+ }: VideoProps): react_jsx_runtime199.JSX.Element;
95
95
  //#endregion
96
96
  export { Video };
97
97
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -14,6 +14,7 @@
14
14
  'use client';
15
15
 
16
16
  import { Icon } from "../icon/index.js";
17
+ import { createLoggerDomain } from "../../utils/logger/index.js";
17
18
  import { MediaControlsProvider } from "../media-controls/context.js";
18
19
  import { MuteButton } from "../media-controls/mute-button.js";
19
20
  import { PlayButton } from "../media-controls/play-button.js";
@@ -27,7 +28,6 @@ import "client-only";
27
28
  import { useCallback, useEffect, useState } from "react";
28
29
  import { clsx } from "@accelint/design-foundation/lib/utils";
29
30
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
30
- import { getLogger } from "@accelint/logger/default";
31
31
  import { formatError } from "media-chrome/dist/labels/labels.js";
32
32
  import { MediaController } from "media-chrome/react";
33
33
  import { MediaProvider, useMediaRef, useMediaSelector } from "media-chrome/react/media-store";
@@ -35,12 +35,7 @@ import { Loop, Problem } from "@accelint/icons";
35
35
  import styles from "./styles.module.css";
36
36
 
37
37
  //#region src/components/video/index.tsx
38
- const logger = getLogger({
39
- enabled: true,
40
- level: "error",
41
- prefix: "[Video]",
42
- pretty: true
43
- });
38
+ const logger = createLoggerDomain("[Video]");
44
39
  const selectMediaLoading = (state) => state.mediaLoading;
45
40
  const selectMediaDuration = (state) => state.mediaDuration;
46
41
  /**
@@ -88,7 +83,7 @@ function VideoInner({ src, poster, children, classNames, autoPlay, loop, muted,
88
83
  }, [onTimeUpdate]);
89
84
  const handleError = useCallback((e) => {
90
85
  const mediaError = e.currentTarget.error;
91
- logger.withContext({ src }).withError(mediaError).error("Failed to load video");
86
+ logger.withMetadata({ src }).withError(mediaError).error("Failed to load video");
92
87
  setErrorMessage((mediaError && formatError(mediaError)?.message) ?? "Unable to load video file");
93
88
  if (mediaError) onError?.(mediaError);
94
89
  }, [src, onError]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/video/index.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport 'client-only';\nimport { clsx } from '@accelint/design-foundation/lib/utils';\nimport { Loop, Problem } from '@accelint/icons';\nimport { getLogger } from '@accelint/logger/default';\nimport { formatError } from 'media-chrome/dist/labels/labels.js';\nimport { MediaController } from 'media-chrome/react';\nimport {\n MediaProvider,\n useMediaRef,\n useMediaSelector,\n} from 'media-chrome/react/media-store';\nimport type { MediaState } from 'media-chrome/react/media-store';\nimport { useCallback, useEffect, useState } from 'react';\nimport { Icon } from '../icon';\nimport { FullscreenButton } from '../media-controls/fullscreen-button';\nimport { MediaControlsProvider } from '../media-controls/context';\nimport { MuteButton } from '../media-controls/mute-button';\nimport { PlayButton } from '../media-controls/play-button';\nimport { PlaybackRateButton } from '../media-controls/playback-rate';\nimport { SeekButton } from '../media-controls/seek-button';\nimport { TimeDisplay } from '../media-controls/time-display';\nimport { TimeRange } from '../media-controls/time-range';\nimport { VolumeSlider } from '../media-controls/volume-slider';\nimport styles from './styles.module.css';\nimport type { VideoProps } from './types';\n\nconst logger = getLogger({\n enabled: true,\n level: 'error',\n prefix: '[Video]',\n pretty: true,\n});\n\nconst selectMediaLoading = (state: MediaState) => state.mediaLoading;\nconst selectMediaDuration = (state: MediaState) => state.mediaDuration;\n\n/**\n * Internal component that renders within MediaProvider context.\n *\n * This component is separated from the main Video component to allow use of\n * media-chrome hooks (useMediaRef) that require MediaProvider context.\n * The outer Video component wraps everything in MediaProvider, then VideoInner\n * handles the actual video element and controls rendering.\n *\n * @param props - The component props.\n * @param props.src - Video source URL.\n * @param props.poster - Poster image URL displayed before playback.\n * @param props.classNames - Class names for sub-elements.\n * @param props.children - Custom controls (replaces default layout).\n * @param props.autoPlay - Whether to autoplay the video.\n * @param props.loop - Whether to loop the video.\n * @param props.muted - Whether the video starts muted.\n * @param props.preload - Video preload strategy.\n * @param props.crossOrigin - CORS setting for the video element.\n * @param props.isDisabled - Whether to disable all video controls.\n * @param props.onEnded - Callback when video ends.\n * @param props.onTimeUpdate - Callback when playback time updates.\n * @param props.onError - Callback when an error occurs.\n * @param props.playbackRates - Custom playback rate options.\n * @returns The video element with controls.\n */\nfunction VideoInner({\n src,\n poster,\n children,\n classNames,\n autoPlay,\n loop,\n muted,\n preload = 'metadata',\n crossOrigin,\n isDisabled: isDisabledProp,\n onEnded,\n onTimeUpdate,\n onError,\n playbackRates,\n}: VideoProps) {\n const mediaRef = useMediaRef();\n const [errorMessage, setErrorMessage] = useState<string>('');\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: src is intentionally used as a trigger to reset error state when video source changes\n useEffect(() => {\n setErrorMessage('');\n }, [src]);\n\n const mediaLoading = useMediaSelector(selectMediaLoading);\n const mediaDuration = useMediaSelector(selectMediaDuration);\n const isMetadataLoaded =\n mediaDuration !== null && mediaDuration !== undefined && mediaDuration > 0;\n const hasError = errorMessage !== '';\n const showLoading = !hasError && (mediaLoading || !isMetadataLoaded);\n const isDisabled = isDisabledProp === true || hasError;\n\n const handleEnded = useCallback(() => {\n onEnded?.();\n }, [onEnded]);\n\n const handleTimeUpdate = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement>) => {\n onTimeUpdate?.(e.currentTarget.currentTime);\n },\n [onTimeUpdate],\n );\n\n const handleError = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement>) => {\n const mediaError = e.currentTarget.error;\n logger\n .withContext({ src })\n .withError(mediaError)\n .error('Failed to load video');\n setErrorMessage(\n (mediaError && formatError(mediaError)?.message) ??\n 'Unable to load video file',\n );\n if (mediaError) {\n onError?.(mediaError);\n }\n },\n [src, onError],\n );\n\n return (\n <>\n <video\n ref={mediaRef}\n slot='media'\n className={clsx(styles.video, classNames?.video)}\n data-testid='video-element'\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n preload={preload}\n crossOrigin={crossOrigin}\n poster={poster}\n playsInline\n onEnded={handleEnded}\n onTimeUpdate={handleTimeUpdate}\n onError={handleError}\n >\n <source src={src} />\n </video>\n\n {showLoading && (\n <output className={styles.loadingOverlay} aria-label='Loading video'>\n <Icon size='medium' className={styles.loadingSpinner}>\n <Loop />\n </Icon>\n </output>\n )}\n\n {errorMessage && (\n <div className={styles.errorOverlay} role='alert'>\n <Icon size='medium'>\n <Problem />\n </Icon>\n <span className={styles.errorText}>{errorMessage}</span>\n </div>\n )}\n\n <MediaControlsProvider isDisabled={isDisabled}>\n {/* noautohide tells MediaController (web component) to keep this element visible */}\n {children ?? (\n // @ts-expect-error noautohide is a valid attribute for media-chrome's MediaController but not recognized by React typings\n <div className={styles.controlsOverlay} noautohide=''>\n <div className={clsx(styles.controls, classNames?.mediaControls)}>\n <div className={clsx(styles.timeRow, classNames?.timeRow)}>\n <TimeDisplay mode='current' />\n <TimeRange />\n <TimeDisplay mode='duration' />\n </div>\n\n <div\n className={clsx(styles.controlsRow, classNames?.controlsRow)}\n >\n <div className={styles.leftGroup}>\n <div className={styles.volumeGroup}>\n <MuteButton />\n <VolumeSlider />\n </div>\n </div>\n <div className={styles.playbackGroup}>\n <SeekButton direction='backward' />\n <PlayButton />\n <SeekButton direction='forward' />\n </div>\n <div className={styles.rightGroup}>\n <PlaybackRateButton rates={playbackRates} />\n <FullscreenButton />\n </div>\n </div>\n </div>\n </div>\n )}\n </MediaControlsProvider>\n </>\n );\n}\n\n/**\n * A complete video player component.\n *\n * Combines an HTML video element with MediaControls to provide a fully-featured\n * video player with play/pause, seek, volume control, playback rate adjustment,\n * and fullscreen support.\n *\n * Uses media-chrome under the hood for state management and MediaController\n * for the accessible media chrome elements.\n *\n * @param props - The component props.\n * @param props.src - Video source URL. Must be accessible to the browser - if loading\n * from a different origin, ensure the server sends appropriate CORS headers\n * (Access-Control-Allow-Origin) or use the crossOrigin prop.\n * @param props.poster - Poster image URL displayed before playback starts.\n * @param props.classNames - Class names for sub-elements.\n * @param props.isDisabled - Disable all video controls.\n * @param props.crossOrigin - CORS setting ('anonymous' | 'use-credentials'). Required when\n * loading video from a different origin that requires credentials.\n * @param props.playbackRates - Array of playback speed multipliers (default: [1, 2, 3]).\n * Only positive finite numbers are accepted; invalid values are filtered out.\n * @param props.children - Custom controls to render instead of the default layout.\n * @param props.onEnded - Callback invoked when video playback finishes.\n * @param props.onTimeUpdate - Callback invoked during playback with current time in seconds.\n * @param props.onError - Callback invoked when video fails to load or encounters an error.\n * @param props.noHotkeys - Disable all keyboard shortcuts for media control.\n * @param props.hotkeys - Custom keyboard shortcuts configuration for media control.\n * @param props.noVolumePref - Disable automatic saving/restoring of volume preference.\n * @param props.noMutedPref - Disable automatic saving/restoring of muted state preference.\n * @param props.lang - Language code for localized media control labels.\n * @returns The rendered video player component.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Video src=\"video.mp4\" />\n * ```\n *\n * @example\n * ```tsx\n * // With poster image\n * <Video\n * src=\"video.mp4\"\n * poster=\"thumbnail.jpg\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With event callbacks\n * <Video\n * src=\"video.mp4\"\n * onEnded={() => console.log('Ended')}\n * onTimeUpdate={(time) => console.log('Current time:', time)}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Custom controls layout\n * <Video src=\"video.mp4\">\n * <PlayButton />\n * <TimeRange />\n * </Video>\n * ```\n */\nexport function Video({\n classNames,\n isDisabled,\n noHotkeys,\n hotkeys,\n noVolumePref,\n noMutedPref,\n lang,\n ...rest\n}: VideoProps) {\n return (\n <MediaProvider>\n <MediaController\n className={clsx('group/video', styles.container, classNames?.container)}\n data-disabled={isDisabled || undefined}\n noHotkeys={noHotkeys}\n hotkeys={hotkeys}\n noVolumePref={noVolumePref}\n noMutedPref={noMutedPref}\n lang={lang}\n >\n <VideoInner {...rest} classNames={classNames} isDisabled={isDisabled} />\n </MediaController>\n </MediaProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/video/index.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport 'client-only';\nimport { clsx } from '@accelint/design-foundation/lib/utils';\nimport { Loop, Problem } from '@accelint/icons';\nimport { formatError } from 'media-chrome/dist/labels/labels.js';\nimport { MediaController } from 'media-chrome/react';\nimport {\n MediaProvider,\n useMediaRef,\n useMediaSelector,\n} from 'media-chrome/react/media-store';\nimport { useCallback, useEffect, useState } from 'react';\nimport { createLoggerDomain } from '@/utils/logger';\nimport { Icon } from '../icon';\nimport { MediaControlsProvider } from '../media-controls/context';\nimport { FullscreenButton } from '../media-controls/fullscreen-button';\nimport { MuteButton } from '../media-controls/mute-button';\nimport { PlayButton } from '../media-controls/play-button';\nimport { PlaybackRateButton } from '../media-controls/playback-rate';\nimport { SeekButton } from '../media-controls/seek-button';\nimport { TimeDisplay } from '../media-controls/time-display';\nimport { TimeRange } from '../media-controls/time-range';\nimport { VolumeSlider } from '../media-controls/volume-slider';\nimport styles from './styles.module.css';\nimport type { MediaState } from 'media-chrome/react/media-store';\nimport type { VideoProps } from './types';\n\nconst logger = createLoggerDomain('[Video]');\n\nconst selectMediaLoading = (state: MediaState) => state.mediaLoading;\nconst selectMediaDuration = (state: MediaState) => state.mediaDuration;\n\n/**\n * Internal component that renders within MediaProvider context.\n *\n * This component is separated from the main Video component to allow use of\n * media-chrome hooks (useMediaRef) that require MediaProvider context.\n * The outer Video component wraps everything in MediaProvider, then VideoInner\n * handles the actual video element and controls rendering.\n *\n * @param props - The component props.\n * @param props.src - Video source URL.\n * @param props.poster - Poster image URL displayed before playback.\n * @param props.classNames - Class names for sub-elements.\n * @param props.children - Custom controls (replaces default layout).\n * @param props.autoPlay - Whether to autoplay the video.\n * @param props.loop - Whether to loop the video.\n * @param props.muted - Whether the video starts muted.\n * @param props.preload - Video preload strategy.\n * @param props.crossOrigin - CORS setting for the video element.\n * @param props.isDisabled - Whether to disable all video controls.\n * @param props.onEnded - Callback when video ends.\n * @param props.onTimeUpdate - Callback when playback time updates.\n * @param props.onError - Callback when an error occurs.\n * @param props.playbackRates - Custom playback rate options.\n * @returns The video element with controls.\n */\nfunction VideoInner({\n src,\n poster,\n children,\n classNames,\n autoPlay,\n loop,\n muted,\n preload = 'metadata',\n crossOrigin,\n isDisabled: isDisabledProp,\n onEnded,\n onTimeUpdate,\n onError,\n playbackRates,\n}: VideoProps) {\n const mediaRef = useMediaRef();\n const [errorMessage, setErrorMessage] = useState<string>('');\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: src is intentionally used as a trigger to reset error state when video source changes\n useEffect(() => {\n setErrorMessage('');\n }, [src]);\n\n const mediaLoading = useMediaSelector(selectMediaLoading);\n const mediaDuration = useMediaSelector(selectMediaDuration);\n const isMetadataLoaded =\n mediaDuration !== null && mediaDuration !== undefined && mediaDuration > 0;\n const hasError = errorMessage !== '';\n const showLoading = !hasError && (mediaLoading || !isMetadataLoaded);\n const isDisabled = isDisabledProp === true || hasError;\n\n const handleEnded = useCallback(() => {\n onEnded?.();\n }, [onEnded]);\n\n const handleTimeUpdate = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement>) => {\n onTimeUpdate?.(e.currentTarget.currentTime);\n },\n [onTimeUpdate],\n );\n\n const handleError = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement>) => {\n // FIXME: this is currently always null\n const mediaError = e.currentTarget.error;\n\n logger\n .withMetadata({ src })\n .withError(mediaError)\n .error('Failed to load video');\n setErrorMessage(\n (mediaError && formatError(mediaError)?.message) ??\n 'Unable to load video file',\n );\n if (mediaError) {\n onError?.(mediaError);\n }\n },\n [src, onError],\n );\n\n return (\n <>\n <video\n ref={mediaRef}\n slot='media'\n className={clsx(styles.video, classNames?.video)}\n data-testid='video-element'\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n preload={preload}\n crossOrigin={crossOrigin}\n poster={poster}\n playsInline\n onEnded={handleEnded}\n onTimeUpdate={handleTimeUpdate}\n onError={handleError}\n >\n <source src={src} />\n </video>\n\n {showLoading && (\n <output className={styles.loadingOverlay} aria-label='Loading video'>\n <Icon size='medium' className={styles.loadingSpinner}>\n <Loop />\n </Icon>\n </output>\n )}\n\n {errorMessage && (\n <div className={styles.errorOverlay} role='alert'>\n <Icon size='medium'>\n <Problem />\n </Icon>\n <span className={styles.errorText}>{errorMessage}</span>\n </div>\n )}\n\n <MediaControlsProvider isDisabled={isDisabled}>\n {/* noautohide tells MediaController (web component) to keep this element visible */}\n {children ?? (\n // @ts-expect-error noautohide is a valid attribute for media-chrome's MediaController but not recognized by React typings\n <div className={styles.controlsOverlay} noautohide=''>\n <div className={clsx(styles.controls, classNames?.mediaControls)}>\n <div className={clsx(styles.timeRow, classNames?.timeRow)}>\n <TimeDisplay mode='current' />\n <TimeRange />\n <TimeDisplay mode='duration' />\n </div>\n\n <div\n className={clsx(styles.controlsRow, classNames?.controlsRow)}\n >\n <div className={styles.leftGroup}>\n <div className={styles.volumeGroup}>\n <MuteButton />\n <VolumeSlider />\n </div>\n </div>\n <div className={styles.playbackGroup}>\n <SeekButton direction='backward' />\n <PlayButton />\n <SeekButton direction='forward' />\n </div>\n <div className={styles.rightGroup}>\n <PlaybackRateButton rates={playbackRates} />\n <FullscreenButton />\n </div>\n </div>\n </div>\n </div>\n )}\n </MediaControlsProvider>\n </>\n );\n}\n\n/**\n * A complete video player component.\n *\n * Combines an HTML video element with MediaControls to provide a fully-featured\n * video player with play/pause, seek, volume control, playback rate adjustment,\n * and fullscreen support.\n *\n * Uses media-chrome under the hood for state management and MediaController\n * for the accessible media chrome elements.\n *\n * @param props - The component props.\n * @param props.src - Video source URL. Must be accessible to the browser - if loading\n * from a different origin, ensure the server sends appropriate CORS headers\n * (Access-Control-Allow-Origin) or use the crossOrigin prop.\n * @param props.poster - Poster image URL displayed before playback starts.\n * @param props.classNames - Class names for sub-elements.\n * @param props.isDisabled - Disable all video controls.\n * @param props.crossOrigin - CORS setting ('anonymous' | 'use-credentials'). Required when\n * loading video from a different origin that requires credentials.\n * @param props.playbackRates - Array of playback speed multipliers (default: [1, 2, 3]).\n * Only positive finite numbers are accepted; invalid values are filtered out.\n * @param props.children - Custom controls to render instead of the default layout.\n * @param props.onEnded - Callback invoked when video playback finishes.\n * @param props.onTimeUpdate - Callback invoked during playback with current time in seconds.\n * @param props.onError - Callback invoked when video fails to load or encounters an error.\n * @param props.noHotkeys - Disable all keyboard shortcuts for media control.\n * @param props.hotkeys - Custom keyboard shortcuts configuration for media control.\n * @param props.noVolumePref - Disable automatic saving/restoring of volume preference.\n * @param props.noMutedPref - Disable automatic saving/restoring of muted state preference.\n * @param props.lang - Language code for localized media control labels.\n * @returns The rendered video player component.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Video src=\"video.mp4\" />\n * ```\n *\n * @example\n * ```tsx\n * // With poster image\n * <Video\n * src=\"video.mp4\"\n * poster=\"thumbnail.jpg\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With event callbacks\n * <Video\n * src=\"video.mp4\"\n * onEnded={() => console.log('Ended')}\n * onTimeUpdate={(time) => console.log('Current time:', time)}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Custom controls layout\n * <Video src=\"video.mp4\">\n * <PlayButton />\n * <TimeRange />\n * </Video>\n * ```\n */\nexport function Video({\n classNames,\n isDisabled,\n noHotkeys,\n hotkeys,\n noVolumePref,\n noMutedPref,\n lang,\n ...rest\n}: VideoProps) {\n return (\n <MediaProvider>\n <MediaController\n className={clsx('group/video', styles.container, classNames?.container)}\n data-disabled={isDisabled || undefined}\n noHotkeys={noHotkeys}\n hotkeys={hotkeys}\n noVolumePref={noVolumePref}\n noMutedPref={noMutedPref}\n lang={lang}\n >\n <VideoInner {...rest} classNames={classNames} isDisabled={isDisabled} />\n </MediaController>\n </MediaProvider>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -12,12 +12,12 @@
12
12
 
13
13
  import { ViewStackContextValue } from "./types.js";
14
14
  import "client-only";
15
- import * as react46 from "react";
15
+ import * as react52 from "react";
16
16
  import { UniqueId } from "@accelint/core";
17
17
 
18
18
  //#region src/components/view-stack/context.d.ts
19
19
  /** Context for sharing state across ViewStack components */
20
- declare const ViewStackContext: react46.Context<ViewStackContextValue>;
20
+ declare const ViewStackContext: react52.Context<ViewStackContextValue>;
21
21
  /** Event handlers for ViewStack events */
22
22
  declare const ViewStackEventHandlers: {
23
23
  readonly back: (stack: UniqueId) => void;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/view-stack/context.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'use client';\n\nimport { Broadcast } from '@accelint/bus';\nimport { useEmit } from '@accelint/bus/react';\nimport type { UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { createContext } from 'react';\nimport { ViewStackEventTypes } from './events';\nimport type { ViewStackContextValue, ViewStackEvent } from './types';\n\nconst bus = Broadcast.getInstance<ViewStackEvent>();\n\n/** Context for sharing state across ViewStack components */\nexport const ViewStackContext = createContext<ViewStackContextValue>({\n parent: null,\n stack: [],\n view: null,\n register: () => undefined,\n unregister: () => undefined,\n});\n\n/** Event handlers for ViewStack events */\nexport const ViewStackEventHandlers = {\n back: (stack: UniqueId) => bus.emit(ViewStackEventTypes.back, { stack }),\n clear: (stack: UniqueId) => bus.emit(ViewStackEventTypes.clear, { stack }),\n push: (view: UniqueId) => bus.emit(ViewStackEventTypes.push, { view }),\n reset: (stack: UniqueId) => bus.emit(ViewStackEventTypes.reset, { stack }),\n} as const;\n\n/**\n * Hook for programmatic ViewStack control from anywhere in the application\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const viewStack = useViewStackEmit();\n *\n * return (\n * <Button onPress={() => viewStack.push('view-id')}>\n * Navigate to View\n * </Button>\n * );\n * }\n * ```\n *\n * @returns Object with emit functions for back, clear, push, and reset actions.\n */\nexport function useViewStackEmit() {\n const emitBack = useEmit<ViewStackEvent>(ViewStackEventTypes.back);\n const emitClear = useEmit<ViewStackEvent>(ViewStackEventTypes.clear);\n const emitPush = useEmit<ViewStackEvent>(ViewStackEventTypes.push);\n const emitReset = useEmit<ViewStackEvent>(ViewStackEventTypes.reset);\n\n return {\n back: (stack: UniqueId) => emitBack({ stack }),\n clear: (stack: UniqueId) => emitClear({ stack }),\n push: (view: UniqueId) => emitPush({ view }),\n reset: (stack: UniqueId) => emitReset({ stack }),\n } as const;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,MAAM,UAAU,aAA6B;;AAGnD,MAAa,mBAAmB,cAAqC;CACnE,QAAQ;CACR,OAAO,EAAE;CACT,MAAM;CACN,gBAAgB;CAChB,kBAAkB;CACnB,CAAC;;AAGF,MAAa,yBAAyB;CACpC,OAAO,UAAoB,IAAI,KAAK,oBAAoB,MAAM,EAAE,OAAO,CAAC;CACxE,QAAQ,UAAoB,IAAI,KAAK,oBAAoB,OAAO,EAAE,OAAO,CAAC;CAC1E,OAAO,SAAmB,IAAI,KAAK,oBAAoB,MAAM,EAAE,MAAM,CAAC;CACtE,QAAQ,UAAoB,IAAI,KAAK,oBAAoB,OAAO,EAAE,OAAO,CAAC;CAC3E;;;;;;;;;;;;;;;;;;;AAoBD,SAAgB,mBAAmB;CACjC,MAAM,WAAW,QAAwB,oBAAoB,KAAK;CAClE,MAAM,YAAY,QAAwB,oBAAoB,MAAM;CACpE,MAAM,WAAW,QAAwB,oBAAoB,KAAK;CAClE,MAAM,YAAY,QAAwB,oBAAoB,MAAM;AAEpE,QAAO;EACL,OAAO,UAAoB,SAAS,EAAE,OAAO,CAAC;EAC9C,QAAQ,UAAoB,UAAU,EAAE,OAAO,CAAC;EAChD,OAAO,SAAmB,SAAS,EAAE,MAAM,CAAC;EAC5C,QAAQ,UAAoB,UAAU,EAAE,OAAO,CAAC;EACjD"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/view-stack/context.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport { Broadcast } from '@accelint/bus';\nimport { useEmit } from '@accelint/bus/react';\nimport type { UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { createContext } from 'react';\nimport { ViewStackEventTypes } from './events';\nimport type { ViewStackContextValue, ViewStackEvent } from './types';\n\nconst bus = Broadcast.getInstance<ViewStackEvent>();\n\n/** Context for sharing state across ViewStack components */\nexport const ViewStackContext = createContext<ViewStackContextValue>({\n parent: null,\n stack: [],\n view: null,\n register: () => undefined,\n unregister: () => undefined,\n});\n\n/** Event handlers for ViewStack events */\nexport const ViewStackEventHandlers = {\n back: (stack: UniqueId) => bus.emit(ViewStackEventTypes.back, { stack }),\n clear: (stack: UniqueId) => bus.emit(ViewStackEventTypes.clear, { stack }),\n push: (view: UniqueId) => bus.emit(ViewStackEventTypes.push, { view }),\n reset: (stack: UniqueId) => bus.emit(ViewStackEventTypes.reset, { stack }),\n} as const;\n\n/**\n * Hook for programmatic ViewStack control from anywhere in the application\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const viewStack = useViewStackEmit();\n *\n * return (\n * <Button onPress={() => viewStack.push('view-id')}>\n * Navigate to View\n * </Button>\n * );\n * }\n * ```\n *\n * @returns Object with emit functions for back, clear, push, and reset actions.\n */\nexport function useViewStackEmit() {\n const emitBack = useEmit<ViewStackEvent>(ViewStackEventTypes.back);\n const emitClear = useEmit<ViewStackEvent>(ViewStackEventTypes.clear);\n const emitPush = useEmit<ViewStackEvent>(ViewStackEventTypes.push);\n const emitReset = useEmit<ViewStackEvent>(ViewStackEventTypes.reset);\n\n return {\n back: (stack: UniqueId) => emitBack({ stack }),\n clear: (stack: UniqueId) => emitClear({ stack }),\n push: (view: UniqueId) => emitPush({ view }),\n reset: (stack: UniqueId) => emitReset({ stack }),\n } as const;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,MAAM,UAAU,aAA6B;;AAGnD,MAAa,mBAAmB,cAAqC;CACnE,QAAQ;CACR,OAAO,EAAE;CACT,MAAM;CACN,gBAAgB;CAChB,kBAAkB;CACnB,CAAC;;AAGF,MAAa,yBAAyB;CACpC,OAAO,UAAoB,IAAI,KAAK,oBAAoB,MAAM,EAAE,OAAO,CAAC;CACxE,QAAQ,UAAoB,IAAI,KAAK,oBAAoB,OAAO,EAAE,OAAO,CAAC;CAC1E,OAAO,SAAmB,IAAI,KAAK,oBAAoB,MAAM,EAAE,MAAM,CAAC;CACtE,QAAQ,UAAoB,IAAI,KAAK,oBAAoB,OAAO,EAAE,OAAO,CAAC;CAC3E;;;;;;;;;;;;;;;;;;;AAoBD,SAAgB,mBAAmB;CACjC,MAAM,WAAW,QAAwB,oBAAoB,KAAK;CAClE,MAAM,YAAY,QAAwB,oBAAoB,MAAM;CACpE,MAAM,WAAW,QAAwB,oBAAoB,KAAK;CAClE,MAAM,YAAY,QAAwB,oBAAoB,MAAM;AAEpE,QAAO;EACL,OAAO,UAAoB,SAAS,EAAE,OAAO,CAAC;EAC9C,QAAQ,UAAoB,UAAU,EAAE,OAAO,CAAC;EAChD,OAAO,SAAmB,SAAS,EAAE,MAAM,CAAC;EAC5C,QAAQ,UAAoB,UAAU,EAAE,OAAO,CAAC;EACjD"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","names":[],"sources":["../../../src/components/view-stack/events.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\n/** Namespace prefix for ViewStack events. */\nexport const ViewStackEventNamespace = 'ViewStack';\n\n/** Event type constants for ViewStack navigation actions. */\nexport const ViewStackEventTypes = {\n back: `${ViewStackEventNamespace}:back`,\n clear: `${ViewStackEventNamespace}:clear`,\n reset: `${ViewStackEventNamespace}:reset`,\n push: `${ViewStackEventNamespace}:push`,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAa,0BAA0B;;AAGvC,MAAa,sBAAsB;CACjC,MAAM,GAAG,wBAAwB;CACjC,OAAO,GAAG,wBAAwB;CAClC,OAAO,GAAG,wBAAwB;CAClC,MAAM,GAAG,wBAAwB;CAClC"}
1
+ {"version":3,"file":"events.js","names":[],"sources":["../../../src/components/view-stack/events.ts"],"sourcesContent":["/*\n * Copyright 2026 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/** Namespace prefix for ViewStack events. */\nexport const ViewStackEventNamespace = 'ViewStack';\n\n/** Event type constants for ViewStack navigation actions. */\nexport const ViewStackEventTypes = {\n back: `${ViewStackEventNamespace}:back`,\n clear: `${ViewStackEventNamespace}:clear`,\n reset: `${ViewStackEventNamespace}:reset`,\n push: `${ViewStackEventNamespace}:push`,\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAa,0BAA0B;;AAGvC,MAAa,sBAAsB;CACjC,MAAM,GAAG,wBAAwB;CACjC,OAAO,GAAG,wBAAwB;CAClC,OAAO,GAAG,wBAAwB;CAClC,MAAM,GAAG,wBAAwB;CAClC"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { ViewStackProps } from "./types.js";
14
14
  import "client-only";
15
- import * as react_jsx_runtime183 from "react/jsx-runtime";
15
+ import * as react_jsx_runtime196 from "react/jsx-runtime";
16
16
 
17
17
  //#region src/components/view-stack/index.d.ts
18
18
 
@@ -47,7 +47,7 @@ declare function ViewStack({
47
47
  children,
48
48
  defaultView,
49
49
  onChange
50
- }: ViewStackProps): react_jsx_runtime183.JSX.Element;
50
+ }: ViewStackProps): react_jsx_runtime196.JSX.Element;
51
51
  //#endregion
52
52
  export { ViewStack };
53
53
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["view"],"sources":["../../../src/components/view-stack/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'use client';\n\nimport { useOn } from '@accelint/bus/react';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { useCallback, useRef, useState } from 'react';\nimport { ViewStackContext } from './context';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n} from './types';\n\n/**\n * ViewStack - Stack-based navigation for managing multiple views\n *\n * Supports push, pop, clear, and reset operations with global event system.\n *\n * @param props - {@link ViewStackProps}\n * @param props.id - Unique identifier for the stack.\n * @param props.children - ViewStackView components.\n * @param props.defaultView - Default view to display when the stack is initialized.\n * @param props.onChange - Callback when the active view changes.\n * @returns The rendered ViewStack component.\n *\n * @example\n * ```tsx\n * const ids = { stack: uuid(), a: uuid(), b: uuid() };\n *\n * <ViewStack id={ids.stack} defaultView={ids.a}>\n * <ViewStackView id={ids.a}>\n * <ViewStackTrigger for={ids.b}><Button>Go to B</Button></ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id={ids.b}>\n * <ViewStackTrigger for=\"back\"><Button>Back</Button></ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n */\nexport function ViewStack({\n id,\n children,\n defaultView,\n onChange,\n}: ViewStackProps) {\n if (!isUUID(id)) {\n throw new Error(`ViewStack's id must be a UniqueId`);\n }\n\n const views = useRef(new Set<UniqueId>());\n const [stack, setStack] = useState<UniqueId[]>(\n defaultView ? [defaultView] : [],\n );\n const view = stack.at(-1) ?? null;\n\n const handleBack = useCallback(\n (data: ViewStackBackEvent) => {\n if (id === data?.payload?.stack) {\n const next = stack.slice(0, -1);\n\n if (!next.length && defaultView) {\n next.push(defaultView);\n }\n\n setStack(next);\n onChange?.(next.at(-1) ?? null);\n }\n },\n [id, defaultView, onChange, stack],\n );\n\n const handleClear = useCallback(\n (data: ViewStackClearEvent) => {\n if (id === data?.payload?.stack) {\n setStack([]);\n onChange?.(null);\n }\n },\n [id, onChange],\n );\n\n const handlePush = useCallback(\n (data: ViewStackPushEvent) => {\n if (views.current.has(data?.payload?.view)) {\n setStack((prev) => [...prev, data?.payload?.view]);\n onChange?.(data?.payload?.view);\n }\n },\n [onChange],\n );\n\n const handleReset = useCallback(\n (data: ViewStackResetEvent) => {\n if (id === data?.payload?.stack) {\n setStack(defaultView ? [defaultView] : []);\n onChange?.(defaultView ?? null);\n }\n },\n [id, defaultView, onChange],\n );\n useOn(ViewStackEventTypes.back, handleBack);\n useOn(ViewStackEventTypes.clear, handleClear);\n useOn(ViewStackEventTypes.push, handlePush);\n useOn(ViewStackEventTypes.reset, handleReset);\n\n return (\n <ViewStackContext.Provider\n value={{\n parent: id,\n stack,\n view,\n register: (view: UniqueId) => views.current.add(view),\n unregister: (view: UniqueId) => views.current.delete(view),\n }}\n >\n {children}\n </ViewStackContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,UAAU,EACxB,IACA,UACA,aACA,YACiB;AACjB,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,oCAAoC;CAGtD,MAAM,QAAQ,uBAAO,IAAI,KAAe,CAAC;CACzC,MAAM,CAAC,OAAO,YAAY,SACxB,cAAc,CAAC,YAAY,GAAG,EAAE,CACjC;CACD,MAAM,OAAO,MAAM,GAAG,GAAG,IAAI;CAE7B,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,OAAO,MAAM,SAAS,OAAO;GAC/B,MAAM,OAAO,MAAM,MAAM,GAAG,GAAG;AAE/B,OAAI,CAAC,KAAK,UAAU,YAClB,MAAK,KAAK,YAAY;AAGxB,YAAS,KAAK;AACd,cAAW,KAAK,GAAG,GAAG,IAAI,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAU;EAAM,CACnC;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,EAAE,CAAC;AACZ,cAAW,KAAK;;IAGpB,CAAC,IAAI,SAAS,CACf;CAED,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,MAAM,QAAQ,IAAI,MAAM,SAAS,KAAK,EAAE;AAC1C,aAAU,SAAS,CAAC,GAAG,MAAM,MAAM,SAAS,KAAK,CAAC;AAClD,cAAW,MAAM,SAAS,KAAK;;IAGnC,CAAC,SAAS,CACX;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;AAC1C,cAAW,eAAe,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAS,CAC5B;AACD,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAC7C,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAE7C,QACE,oBAAC,iBAAiB;EAChB,OAAO;GACL,QAAQ;GACR;GACA;GACA,WAAW,WAAmB,MAAM,QAAQ,IAAIA,OAAK;GACrD,aAAa,WAAmB,MAAM,QAAQ,OAAOA,OAAK;GAC3D;EAEA;GACyB"}
1
+ {"version":3,"file":"index.js","names":["view"],"sources":["../../../src/components/view-stack/index.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport { useOn } from '@accelint/bus/react';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { useCallback, useRef, useState } from 'react';\nimport { ViewStackContext } from './context';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n} from './types';\n\n/**\n * ViewStack - Stack-based navigation for managing multiple views\n *\n * Supports push, pop, clear, and reset operations with global event system.\n *\n * @param props - {@link ViewStackProps}\n * @param props.id - Unique identifier for the stack.\n * @param props.children - ViewStackView components.\n * @param props.defaultView - Default view to display when the stack is initialized.\n * @param props.onChange - Callback when the active view changes.\n * @returns The rendered ViewStack component.\n *\n * @example\n * ```tsx\n * const ids = { stack: uuid(), a: uuid(), b: uuid() };\n *\n * <ViewStack id={ids.stack} defaultView={ids.a}>\n * <ViewStackView id={ids.a}>\n * <ViewStackTrigger for={ids.b}><Button>Go to B</Button></ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id={ids.b}>\n * <ViewStackTrigger for=\"back\"><Button>Back</Button></ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n */\nexport function ViewStack({\n id,\n children,\n defaultView,\n onChange,\n}: ViewStackProps) {\n if (!isUUID(id)) {\n throw new Error(`ViewStack's id must be a UniqueId`);\n }\n\n const views = useRef(new Set<UniqueId>());\n const [stack, setStack] = useState<UniqueId[]>(\n defaultView ? [defaultView] : [],\n );\n const view = stack.at(-1) ?? null;\n\n const handleBack = useCallback(\n (data: ViewStackBackEvent) => {\n if (id === data?.payload?.stack) {\n const next = stack.slice(0, -1);\n\n if (!next.length && defaultView) {\n next.push(defaultView);\n }\n\n setStack(next);\n onChange?.(next.at(-1) ?? null);\n }\n },\n [id, defaultView, onChange, stack],\n );\n\n const handleClear = useCallback(\n (data: ViewStackClearEvent) => {\n if (id === data?.payload?.stack) {\n setStack([]);\n onChange?.(null);\n }\n },\n [id, onChange],\n );\n\n const handlePush = useCallback(\n (data: ViewStackPushEvent) => {\n if (views.current.has(data?.payload?.view)) {\n setStack((prev) => [...prev, data?.payload?.view]);\n onChange?.(data?.payload?.view);\n }\n },\n [onChange],\n );\n\n const handleReset = useCallback(\n (data: ViewStackResetEvent) => {\n if (id === data?.payload?.stack) {\n setStack(defaultView ? [defaultView] : []);\n onChange?.(defaultView ?? null);\n }\n },\n [id, defaultView, onChange],\n );\n useOn(ViewStackEventTypes.back, handleBack);\n useOn(ViewStackEventTypes.clear, handleClear);\n useOn(ViewStackEventTypes.push, handlePush);\n useOn(ViewStackEventTypes.reset, handleReset);\n\n return (\n <ViewStackContext.Provider\n value={{\n parent: id,\n stack,\n view,\n register: (view: UniqueId) => views.current.add(view),\n unregister: (view: UniqueId) => views.current.delete(view),\n }}\n >\n {children}\n </ViewStackContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,UAAU,EACxB,IACA,UACA,aACA,YACiB;AACjB,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,oCAAoC;CAGtD,MAAM,QAAQ,uBAAO,IAAI,KAAe,CAAC;CACzC,MAAM,CAAC,OAAO,YAAY,SACxB,cAAc,CAAC,YAAY,GAAG,EAAE,CACjC;CACD,MAAM,OAAO,MAAM,GAAG,GAAG,IAAI;CAE7B,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,OAAO,MAAM,SAAS,OAAO;GAC/B,MAAM,OAAO,MAAM,MAAM,GAAG,GAAG;AAE/B,OAAI,CAAC,KAAK,UAAU,YAClB,MAAK,KAAK,YAAY;AAGxB,YAAS,KAAK;AACd,cAAW,KAAK,GAAG,GAAG,IAAI,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAU;EAAM,CACnC;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,EAAE,CAAC;AACZ,cAAW,KAAK;;IAGpB,CAAC,IAAI,SAAS,CACf;CAED,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,MAAM,QAAQ,IAAI,MAAM,SAAS,KAAK,EAAE;AAC1C,aAAU,SAAS,CAAC,GAAG,MAAM,MAAM,SAAS,KAAK,CAAC;AAClD,cAAW,MAAM,SAAS,KAAK;;IAGnC,CAAC,SAAS,CACX;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;AAC1C,cAAW,eAAe,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAS,CAC5B;AACD,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAC7C,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAE7C,QACE,oBAAC,iBAAiB;EAChB,OAAO;GACL,QAAQ;GACR;GACA;GACA,WAAW,WAAmB,MAAM,QAAQ,IAAIA,OAAK;GACrD,aAAa,WAAmB,MAAM,QAAQ,OAAOA,OAAK;GAC3D;EAEA;GACyB"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { ViewStackTriggerProps } from "./types.js";
14
14
  import "client-only";
15
- import * as react_jsx_runtime185 from "react/jsx-runtime";
15
+ import * as react_jsx_runtime197 from "react/jsx-runtime";
16
16
 
17
17
  //#region src/components/view-stack/trigger.d.ts
18
18
 
@@ -45,7 +45,7 @@ import * as react_jsx_runtime185 from "react/jsx-runtime";
45
45
  declare function ViewStackTrigger({
46
46
  children,
47
47
  for: types
48
- }: ViewStackTriggerProps): react_jsx_runtime185.JSX.Element;
48
+ }: ViewStackTriggerProps): react_jsx_runtime197.JSX.Element;
49
49
  //#endregion
50
50
  export { ViewStackTrigger };
51
51
  //# sourceMappingURL=trigger.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.js","names":[],"sources":["../../../src/components/view-stack/trigger.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'use client';\n\nimport 'client-only';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport { useContext } from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { useViewStackEmit, ViewStackContext } from './context';\nimport type { ViewStackTriggerProps } from './types';\n\n/**\n * ViewStackTrigger - Pressable element that triggers ViewStack navigation actions\n *\n * @example\n * ```tsx\n * <ViewStack id=\"main-stack\">\n * <ViewStackView id=\"home\">\n * <h1>Home</h1>\n * <ViewStackTrigger for=\"settings-view-id\">\n * <Button>Go to Settings</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id=\"settings-view-id\">\n * <h1>Settings</h1>\n * <ViewStackTrigger for=\"back:main-stack\">\n * <Button>Back</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackTriggerProps}\n * @param props.children - Pressable children content.\n * @param props.for - Navigation action(s) to trigger on press.\n * @returns The rendered ViewStackTrigger component.\n */\nexport function ViewStackTrigger({\n children,\n for: types,\n}: ViewStackTriggerProps) {\n const { parent } = useContext(ViewStackContext);\n const viewStackEmit = useViewStackEmit();\n\n function handlePress() {\n for (const type of Array.isArray(types) ? types : [types]) {\n let [event, id] = (isUUID(type) ? ['push', type] : type.split(':')) as [\n 'back' | 'clear' | 'reset' | 'push',\n UniqueId | undefined | null,\n ];\n\n id ??= parent;\n\n if (!id) {\n continue;\n }\n\n viewStackEmit[event](id);\n }\n }\n\n return <Pressable onPress={handlePress}>{children}</Pressable>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,iBAAiB,EAC/B,UACA,KAAK,SACmB;CACxB,MAAM,EAAE,WAAW,WAAW,iBAAiB;CAC/C,MAAM,gBAAgB,kBAAkB;CAExC,SAAS,cAAc;AACrB,OAAK,MAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;GACzD,IAAI,CAAC,OAAO,MAAO,OAAO,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,KAAK,MAAM,IAAI;AAKlE,UAAO;AAEP,OAAI,CAAC,GACH;AAGF,iBAAc,OAAO,GAAG;;;AAI5B,QAAO,oBAAC;EAAU,SAAS;EAAc;GAAqB"}
1
+ {"version":3,"file":"trigger.js","names":[],"sources":["../../../src/components/view-stack/trigger.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport 'client-only';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport { useContext } from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { useViewStackEmit, ViewStackContext } from './context';\nimport type { ViewStackTriggerProps } from './types';\n\n/**\n * ViewStackTrigger - Pressable element that triggers ViewStack navigation actions\n *\n * @example\n * ```tsx\n * <ViewStack id=\"main-stack\">\n * <ViewStackView id=\"home\">\n * <h1>Home</h1>\n * <ViewStackTrigger for=\"settings-view-id\">\n * <Button>Go to Settings</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id=\"settings-view-id\">\n * <h1>Settings</h1>\n * <ViewStackTrigger for=\"back:main-stack\">\n * <Button>Back</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackTriggerProps}\n * @param props.children - Pressable children content.\n * @param props.for - Navigation action(s) to trigger on press.\n * @returns The rendered ViewStackTrigger component.\n */\nexport function ViewStackTrigger({\n children,\n for: types,\n}: ViewStackTriggerProps) {\n const { parent } = useContext(ViewStackContext);\n const viewStackEmit = useViewStackEmit();\n\n function handlePress() {\n for (const type of Array.isArray(types) ? types : [types]) {\n let [event, id] = (isUUID(type) ? ['push', type] : type.split(':')) as [\n 'back' | 'clear' | 'reset' | 'push',\n UniqueId | undefined | null,\n ];\n\n id ??= parent;\n\n if (!id) {\n continue;\n }\n\n viewStackEmit[event](id);\n }\n }\n\n return <Pressable onPress={handlePress}>{children}</Pressable>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,iBAAiB,EAC/B,UACA,KAAK,SACmB;CACxB,MAAM,EAAE,WAAW,WAAW,iBAAiB;CAC/C,MAAM,gBAAgB,kBAAkB;CAExC,SAAS,cAAc;AACrB,OAAK,MAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;GACzD,IAAI,CAAC,OAAO,MAAO,OAAO,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,KAAK,MAAM,IAAI;AAKlE,UAAO;AAEP,OAAI,CAAC,GACH;AAGF,iBAAc,OAAO,GAAG;;;AAI5B,QAAO,oBAAC;EAAU,SAAS;EAAc;GAAqB"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { ViewStackViewProps } from "./types.js";
14
14
  import "client-only";
15
- import * as react_jsx_runtime186 from "react/jsx-runtime";
15
+ import * as react_jsx_runtime198 from "react/jsx-runtime";
16
16
 
17
17
  //#region src/components/view-stack/view.d.ts
18
18
 
@@ -43,7 +43,7 @@ import * as react_jsx_runtime186 from "react/jsx-runtime";
43
43
  declare function ViewStackView({
44
44
  id,
45
45
  children
46
- }: ViewStackViewProps): react_jsx_runtime186.JSX.Element | null;
46
+ }: ViewStackViewProps): react_jsx_runtime198.JSX.Element | null;
47
47
  //#endregion
48
48
  export { ViewStackView };
49
49
  //# sourceMappingURL=view.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","names":[],"sources":["../../../src/components/view-stack/view.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'use client';\n\nimport { isUUID } from '@accelint/core';\nimport 'client-only';\nimport { Fragment, useContext, useEffect } from 'react';\nimport { ViewStackContext } from './context';\nimport type { ViewStackViewProps } from './types';\n\n/**\n * ViewStackView - Individual view in a ViewStack\n *\n * Represents a single view that can be pushed onto the ViewStack\n *\n * @example\n * ```tsx\n * <ViewStack id=\"app-stack\">\n * <ViewStackView id=\"home-view\">\n * <h1>Home Screen</h1>\n * <p>Welcome to the app</p>\n * </ViewStackView>\n * <ViewStackView id=\"details-view\">\n * <h1>Details Screen</h1>\n * <p>Detailed information</p>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackViewProps}\n * @param props.id - Unique identifier for the view.\n * @param props.children - View content to render when active.\n * @returns The rendered view content if active, or null.\n */\nexport function ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStackView must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStackView's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n return () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? <Fragment key={id}>{children}</Fragment> : null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,cAAc,EAAE,IAAI,YAAgC;CAClE,MAAM,EAAE,QAAQ,MAAM,UAAU,eAAe,WAAW,iBAAiB;AAE3E,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,uDAAuD;AAGzE,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,wCAAwC;AAG1D,iBAAgB;AACd,WAAS,GAAG;AAEZ,eAAa,WAAW,GAAG;IAC1B;EAAC;EAAU;EAAY;EAAG,CAAC;AAE9B,QAAO,SAAS,KAAK,oBAAC,YAAmB,YAAL,GAAyB,GAAG"}
1
+ {"version":3,"file":"view.js","names":[],"sources":["../../../src/components/view-stack/view.tsx"],"sourcesContent":["/*\n * Copyright 2026 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'use client';\n\nimport { isUUID } from '@accelint/core';\nimport 'client-only';\nimport { Fragment, useContext, useEffect } from 'react';\nimport { ViewStackContext } from './context';\nimport type { ViewStackViewProps } from './types';\n\n/**\n * ViewStackView - Individual view in a ViewStack\n *\n * Represents a single view that can be pushed onto the ViewStack\n *\n * @example\n * ```tsx\n * <ViewStack id=\"app-stack\">\n * <ViewStackView id=\"home-view\">\n * <h1>Home Screen</h1>\n * <p>Welcome to the app</p>\n * </ViewStackView>\n * <ViewStackView id=\"details-view\">\n * <h1>Details Screen</h1>\n * <p>Detailed information</p>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackViewProps}\n * @param props.id - Unique identifier for the view.\n * @param props.children - View content to render when active.\n * @returns The rendered view content if active, or null.\n */\nexport function ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStackView must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStackView's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n return () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? <Fragment key={id}>{children}</Fragment> : null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,cAAc,EAAE,IAAI,YAAgC;CAClE,MAAM,EAAE,QAAQ,MAAM,UAAU,eAAe,WAAW,iBAAiB;AAE3E,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,uDAAuD;AAGzE,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,wCAAwC;AAG1D,iBAAgB;AACd,WAAS,GAAG;AAEZ,eAAa,WAAW,GAAG;IAC1B;EAAC;EAAU;EAAY;EAAG,CAAC;AAE9B,QAAO,SAAS,KAAK,oBAAC,YAAmB,YAAL,GAAyB,GAAG"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -11,17 +11,12 @@
11
11
  */
12
12
 
13
13
 
14
+ import { createLoggerDomain } from "../../utils/logger/index.js";
14
15
  import { getAllCoordinateFormats } from "../../components/coordinate-field/coordinate-utils.js";
15
16
  import { useState } from "react";
16
- import { getLogger } from "@accelint/logger";
17
17
 
18
18
  //#region src/hooks/coordinate-field/use-coordinate-copy.ts
19
- const logger = getLogger({
20
- enabled: process.env.NODE_ENV !== "production",
21
- level: "debug",
22
- prefix: "[CoordinateField]",
23
- pretty: true
24
- });
19
+ const logger = createLoggerDomain("[CoordinateField]");
25
20
  const COPY_FEEDBACK_DURATION_MS = 2e3;
26
21
  /**
27
22
  * Handles copying coordinates to clipboard with format conversion and visual feedback
@@ -84,7 +79,7 @@ function useCoordinateCopy({ currentValue, validationErrors, isDisabled, registe
84
79
  setCopiedFormat(null);
85
80
  }, COPY_FEEDBACK_DURATION_MS));
86
81
  } catch (err) {
87
- logger.withError(err).warn("Fallback copy to clipboard failed");
82
+ logger.withError(err).error("Fallback copy to clipboard failed");
88
83
  }
89
84
  document.body.removeChild(textArea);
90
85
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-coordinate-copy.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-copy.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 { getLogger } from '@accelint/logger';\nimport { useState } from 'react';\n\nconst logger = getLogger({\n enabled: process.env.NODE_ENV !== 'production',\n level: 'debug',\n prefix: '[CoordinateField]',\n pretty: true,\n});\n\nimport { getAllCoordinateFormats } from '../../components/coordinate-field/coordinate-utils';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n} from '../../components/coordinate-field/types';\nimport type { UseTimeoutCleanupResult } from './use-timeout-cleanup';\n\nconst COPY_FEEDBACK_DURATION_MS = 2000;\n\n/** Options for the useCoordinateCopy hook */\nexport interface UseCoordinateCopyOptions {\n /** Current coordinate value to copy (null if empty) */\n currentValue: CoordinateValue | null;\n /** Array of validation error messages */\n validationErrors: string[];\n /** Whether copying is disabled */\n isDisabled: boolean;\n /** Function to register timeouts for cleanup */\n registerTimeout: UseTimeoutCleanupResult['registerTimeout'];\n}\n\n/** Return value from the useCoordinateCopy hook */\nexport interface UseCoordinateCopyResult {\n /** Currently copied format (for visual feedback) or null */\n copiedFormat: CoordinateSystem | null;\n /** Copy coordinate in specified format to clipboard */\n handleCopyFormat: (formatToCopy: CoordinateSystem) => Promise<void>;\n /** Whether copy format buttons should be enabled */\n isFormatButtonEnabled: boolean;\n}\n\n/**\n * Handles copying coordinates to clipboard with format conversion and visual feedback\n *\n * @example\n * ```tsx\n * function CoordinateField() {\n * const { registerTimeout } = useTimeoutCleanup();\n * const [value, setValue] = useState<CoordinateValue | null>(null);\n * const [errors, setErrors] = useState<string[]>([]);\n *\n * const { copiedFormat, handleCopyFormat, isFormatButtonEnabled } = useCoordinateCopy({\n * currentValue: value,\n * validationErrors: errors,\n * isDisabled: false,\n * registerTimeout,\n * });\n *\n * return (\n * <Button\n * onPress={() => handleCopyFormat('dd')}\n * isDisabled={!isFormatButtonEnabled}\n * >\n * {copiedFormat === 'dd' ? <Check /> : <Copy />}\n * </Button>\n * );\n * }\n * ```\n *\n * @param options - {@link UseCoordinateCopyOptions}\n * @param options.currentValue - Current coordinate value to copy (null if empty).\n * @param options.validationErrors - Array of validation error messages.\n * @param options.isDisabled - Whether copying is disabled.\n * @param options.registerTimeout - Function to register timeouts for cleanup.\n * @returns {@link UseCoordinateCopyResult} Copy utilities and feedback state.\n */\nexport function useCoordinateCopy({\n currentValue,\n validationErrors,\n isDisabled,\n registerTimeout,\n}: UseCoordinateCopyOptions): UseCoordinateCopyResult {\n const [copiedFormat, setCopiedFormat] = useState<CoordinateSystem | null>(\n null,\n );\n\n /**\n * Fallback clipboard copy for browsers that don't support navigator.clipboard API.\n * Creates a temporary textarea, copies text using document.execCommand('copy'),\n * and provides visual feedback by setting copiedFormat state for 2 seconds.\n *\n * @param text - The coordinate string to copy to clipboard\n * @param formatToCopy - The coordinate format being copied (for UI feedback)\n */\n const fallbackCopyToClipboard = (\n text: string,\n formatToCopy: CoordinateSystem,\n ) => {\n // Create temporary textarea for copy operation\n const textArea = document.createElement('textarea');\n textArea.value = text;\n // Position off-screen so it's not visible to user\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (err) {\n logger.withError(err).warn('Fallback copy to clipboard failed');\n }\n\n // Clean up temporary textarea\n document.body.removeChild(textArea);\n };\n\n /**\n * Handles copying a coordinate in the specified format to the clipboard.\n * Uses modern clipboard API (navigator.clipboard.writeText) with fallback\n * to document.execCommand for older browsers.\n *\n * Sets copiedFormat state to show visual feedback (Check icon) for 2 seconds.\n *\n * @param formatToCopy - The coordinate format to copy (dd, ddm, dms, mgrs, utm)\n */\n const handleCopyFormat = async (formatToCopy: CoordinateSystem) => {\n if (!currentValue) {\n return;\n }\n\n const allFormats = getAllCoordinateFormats(currentValue);\n const formatResult = allFormats[formatToCopy];\n\n if (!formatResult.isValid) {\n return;\n }\n\n try {\n // Modern clipboard API - copy and show feedback\n await navigator.clipboard.writeText(formatResult.value);\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (_err) {\n // Fall back to document.execCommand for older browsers\n fallbackCopyToClipboard(formatResult.value, formatToCopy);\n }\n };\n\n const isFormatButtonEnabled =\n currentValue !== null && validationErrors.length === 0 && !isDisabled;\n\n return {\n copiedFormat,\n handleCopyFormat,\n isFormatButtonEnabled,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,SAAS,UAAU;CACvB,SAAS,QAAQ,IAAI,aAAa;CAClC,OAAO;CACP,QAAQ;CACR,QAAQ;CACT,CAAC;AASF,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DlC,SAAgB,kBAAkB,EAChC,cACA,kBACA,YACA,mBACoD;CACpD,MAAM,CAAC,cAAc,mBAAmB,SACtC,KACD;;;;;;;;;CAUD,MAAM,2BACJ,MACA,iBACG;EAEH,MAAM,WAAW,SAAS,cAAc,WAAW;AACnD,WAAS,QAAQ;AAEjB,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,OAAO;AACtB,WAAS,MAAM,MAAM;AACrB,WAAS,KAAK,YAAY,SAAS;AACnC,WAAS,OAAO;AAChB,WAAS,QAAQ;AAEjB,MAAI;AACF,YAAS,YAAY,OAAO;AAG5B,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,KAAK;AACZ,UAAO,UAAU,IAAI,CAAC,KAAK,oCAAoC;;AAIjE,WAAS,KAAK,YAAY,SAAS;;;;;;;;;;;CAYrC,MAAM,mBAAmB,OAAO,iBAAmC;AACjE,MAAI,CAAC,aACH;EAIF,MAAM,eADa,wBAAwB,aAAa,CACxB;AAEhC,MAAI,CAAC,aAAa,QAChB;AAGF,MAAI;AAEF,SAAM,UAAU,UAAU,UAAU,aAAa,MAAM;AAGvD,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,MAAM;AAEb,2BAAwB,aAAa,OAAO,aAAa;;;AAO7D,QAAO;EACL;EACA;EACA,uBALA,iBAAiB,QAAQ,iBAAiB,WAAW,KAAK,CAAC;EAM5D"}
1
+ {"version":3,"file":"use-coordinate-copy.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-copy.ts"],"sourcesContent":["/*\n * Copyright 2026 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 { useState } from 'react';\nimport { createLoggerDomain } from '@/utils/logger';\n\nconst logger = createLoggerDomain('[CoordinateField]');\n\nimport { getAllCoordinateFormats } from '../../components/coordinate-field/coordinate-utils';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n} from '../../components/coordinate-field/types';\nimport type { UseTimeoutCleanupResult } from './use-timeout-cleanup';\n\nconst COPY_FEEDBACK_DURATION_MS = 2000;\n\n/** Options for the useCoordinateCopy hook */\nexport interface UseCoordinateCopyOptions {\n /** Current coordinate value to copy (null if empty) */\n currentValue: CoordinateValue | null;\n /** Array of validation error messages */\n validationErrors: string[];\n /** Whether copying is disabled */\n isDisabled: boolean;\n /** Function to register timeouts for cleanup */\n registerTimeout: UseTimeoutCleanupResult['registerTimeout'];\n}\n\n/** Return value from the useCoordinateCopy hook */\nexport interface UseCoordinateCopyResult {\n /** Currently copied format (for visual feedback) or null */\n copiedFormat: CoordinateSystem | null;\n /** Copy coordinate in specified format to clipboard */\n handleCopyFormat: (formatToCopy: CoordinateSystem) => Promise<void>;\n /** Whether copy format buttons should be enabled */\n isFormatButtonEnabled: boolean;\n}\n\n/**\n * Handles copying coordinates to clipboard with format conversion and visual feedback\n *\n * @example\n * ```tsx\n * function CoordinateField() {\n * const { registerTimeout } = useTimeoutCleanup();\n * const [value, setValue] = useState<CoordinateValue | null>(null);\n * const [errors, setErrors] = useState<string[]>([]);\n *\n * const { copiedFormat, handleCopyFormat, isFormatButtonEnabled } = useCoordinateCopy({\n * currentValue: value,\n * validationErrors: errors,\n * isDisabled: false,\n * registerTimeout,\n * });\n *\n * return (\n * <Button\n * onPress={() => handleCopyFormat('dd')}\n * isDisabled={!isFormatButtonEnabled}\n * >\n * {copiedFormat === 'dd' ? <Check /> : <Copy />}\n * </Button>\n * );\n * }\n * ```\n *\n * @param options - {@link UseCoordinateCopyOptions}\n * @param options.currentValue - Current coordinate value to copy (null if empty).\n * @param options.validationErrors - Array of validation error messages.\n * @param options.isDisabled - Whether copying is disabled.\n * @param options.registerTimeout - Function to register timeouts for cleanup.\n * @returns {@link UseCoordinateCopyResult} Copy utilities and feedback state.\n */\nexport function useCoordinateCopy({\n currentValue,\n validationErrors,\n isDisabled,\n registerTimeout,\n}: UseCoordinateCopyOptions): UseCoordinateCopyResult {\n const [copiedFormat, setCopiedFormat] = useState<CoordinateSystem | null>(\n null,\n );\n\n /**\n * Fallback clipboard copy for browsers that don't support navigator.clipboard API.\n * Creates a temporary textarea, copies text using document.execCommand('copy'),\n * and provides visual feedback by setting copiedFormat state for 2 seconds.\n *\n * @param text - The coordinate string to copy to clipboard\n * @param formatToCopy - The coordinate format being copied (for UI feedback)\n */\n const fallbackCopyToClipboard = (\n text: string,\n formatToCopy: CoordinateSystem,\n ) => {\n // Create temporary textarea for copy operation\n const textArea = document.createElement('textarea');\n textArea.value = text;\n // Position off-screen so it's not visible to user\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (err) {\n logger.withError(err).error('Fallback copy to clipboard failed');\n }\n\n // Clean up temporary textarea\n document.body.removeChild(textArea);\n };\n\n /**\n * Handles copying a coordinate in the specified format to the clipboard.\n * Uses modern clipboard API (navigator.clipboard.writeText) with fallback\n * to document.execCommand for older browsers.\n *\n * Sets copiedFormat state to show visual feedback (Check icon) for 2 seconds.\n *\n * @param formatToCopy - The coordinate format to copy (dd, ddm, dms, mgrs, utm)\n */\n const handleCopyFormat = async (formatToCopy: CoordinateSystem) => {\n if (!currentValue) {\n return;\n }\n\n const allFormats = getAllCoordinateFormats(currentValue);\n const formatResult = allFormats[formatToCopy];\n\n if (!formatResult.isValid) {\n return;\n }\n\n try {\n // Modern clipboard API - copy and show feedback\n await navigator.clipboard.writeText(formatResult.value);\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (_err) {\n // Fall back to document.execCommand for older browsers\n fallbackCopyToClipboard(formatResult.value, formatToCopy);\n }\n };\n\n const isFormatButtonEnabled =\n currentValue !== null && validationErrors.length === 0 && !isDisabled;\n\n return {\n copiedFormat,\n handleCopyFormat,\n isFormatButtonEnabled,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,SAAS,mBAAmB,oBAAoB;AAStD,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DlC,SAAgB,kBAAkB,EAChC,cACA,kBACA,YACA,mBACoD;CACpD,MAAM,CAAC,cAAc,mBAAmB,SACtC,KACD;;;;;;;;;CAUD,MAAM,2BACJ,MACA,iBACG;EAEH,MAAM,WAAW,SAAS,cAAc,WAAW;AACnD,WAAS,QAAQ;AAEjB,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,OAAO;AACtB,WAAS,MAAM,MAAM;AACrB,WAAS,KAAK,YAAY,SAAS;AACnC,WAAS,OAAO;AAChB,WAAS,QAAQ;AAEjB,MAAI;AACF,YAAS,YAAY,OAAO;AAG5B,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,KAAK;AACZ,UAAO,UAAU,IAAI,CAAC,MAAM,oCAAoC;;AAIlE,WAAS,KAAK,YAAY,SAAS;;;;;;;;;;;CAYrC,MAAM,mBAAmB,OAAO,iBAAmC;AACjE,MAAI,CAAC,aACH;EAIF,MAAM,eADa,wBAAwB,aAAa,CACxB;AAEhC,MAAI,CAAC,aAAa,QAChB;AAGF,MAAI;AAEF,SAAM,UAAU,UAAU,UAAU,aAAa,MAAM;AAGvD,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,MAAM;AAEb,2BAAwB,aAAa,OAAO,aAAa;;;AAO7D,QAAO;EACL;EACA;EACA,uBALA,iBAAiB,QAAQ,iBAAiB,WAAW,KAAK,CAAC;EAM5D"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"use-coordinate-field-state.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-field-state.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 {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n areAllSegmentsFilled,\n convertDDToDisplaySegments,\n convertDisplaySegmentsToDD,\n validateCoordinateSegments,\n} from '../../components/coordinate-field/coordinate-utils';\nimport { getSegmentConfigs } from '../../components/coordinate-field/segment-configs';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n SegmentConfig,\n} from '../../components/coordinate-field/types';\n\n/** Options for the useCoordinateFieldState hook */\nexport interface UseCoordinateFieldStateOptions {\n /** Controlled coordinate value */\n value?: CoordinateValue | null;\n /** Default value for uncontrolled mode */\n defaultValue?: CoordinateValue;\n /** Coordinate format system (dd, ddm, dms, mgrs, utm) */\n format: CoordinateSystem;\n /** Callback when coordinate value changes */\n onChange?:\n | Dispatch<SetStateAction<CoordinateValue | null>>\n | ((value: CoordinateValue | null) => void);\n /** Callback for validation errors */\n onError?: (message: string, context?: Record<string, unknown>) => void;\n /** Register timeouts for cleanup on unmount */\n registerTimeout?: (timeoutId: NodeJS.Timeout) => void;\n}\n\n/** Return value from the useCoordinateFieldState hook */\nexport interface UseCoordinateFieldStateResult {\n /** Current coordinate value (null if incomplete/invalid) */\n currentValue: CoordinateValue | null;\n /** Array of display values for each segment */\n segmentValues: string[];\n /** Array of validation error messages */\n validationErrors: string[];\n /** All segment configurations including literals */\n segmentConfigs: SegmentConfig[];\n /** Only editable segment configurations */\n editableSegmentConfigs: SegmentConfig[];\n /** Handle change of a single segment */\n handleSegmentChange: (index: number, newValue: string) => void;\n /** Set all segment values at once */\n setSegmentValues: (values: string[]) => void;\n /** Set validation errors */\n setValidationErrors: (errors: string[]) => void;\n /** First validation error or null */\n effectiveErrorMessage: string | null;\n /** Apply a pasted coordinate value */\n applyPastedCoordinate: (pastedValue: CoordinateValue) => void;\n /** Immediately run pending validation */\n flushPendingValidation: () => void;\n}\n\n/**\n * Manages coordinate segment values, validation, and format conversion\n *\n * @example\n * ```tsx\n * function CoordinateInputs() {\n * const [value, setValue] = useState<CoordinateValue | null>(null);\n * const { registerTimeout } = useTimeoutCleanup();\n *\n * const {\n * currentValue,\n * segmentValues,\n * validationErrors,\n * editableSegmentConfigs,\n * handleSegmentChange,\n * } = useCoordinateFieldState({\n * value,\n * format: 'ddm',\n * onChange: setValue,\n * onError: (msg) => console.error(msg),\n * registerTimeout,\n * });\n *\n * return (\n * <div>\n * {editableSegmentConfigs.map((config, i) => (\n * <input\n * key={i}\n * value={segmentValues[i]}\n * onChange={(e) => handleSegmentChange(i, e.target.value)}\n * placeholder={config.placeholder}\n * />\n * ))}\n * {validationErrors.map((error, i) => (\n * <span key={i}>{error}</span>\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @param options - {@link UseCoordinateFieldStateOptions}\n * @param options.value - Controlled coordinate value.\n * @param options.defaultValue - Default value for uncontrolled mode.\n * @param options.format - Coordinate format system (dd, ddm, dms, mgrs, utm).\n * @param options.onChange - Callback when coordinate value changes.\n * @param options.onError - Callback for validation errors.\n * @param options.registerTimeout - Register timeouts for cleanup on unmount.\n * @returns {@link UseCoordinateFieldStateResult} Segment state, validation, and change handlers.\n */\nexport function useCoordinateFieldState({\n value,\n defaultValue,\n format,\n onChange,\n onError,\n registerTimeout,\n}: UseCoordinateFieldStateOptions): UseCoordinateFieldStateResult {\n const [internalValue, setInternalValue] = useState<CoordinateValue | null>(\n defaultValue || null,\n );\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const validationTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n\n const clearValidationTimeout = () => {\n if (validationTimeoutRef.current) {\n clearTimeout(validationTimeoutRef.current);\n validationTimeoutRef.current = null;\n }\n };\n\n const handleChange = (newValue: CoordinateValue | null) => {\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const segmentConfigs = useMemo(() => getSegmentConfigs(format), [format]);\n\n const editableSegmentConfigs = useMemo(\n () => segmentConfigs.flat().filter((config) => config.type !== 'literal'),\n [segmentConfigs],\n );\n\n const [segmentValues, setSegmentValues] = useState<string[]>(() => {\n const initialValue = value !== undefined ? value : defaultValue;\n if (!initialValue) {\n return new Array(editableSegmentConfigs.length).fill('');\n }\n\n const segments = convertDDToDisplaySegments(initialValue, format);\n if (!segments) {\n return new Array(editableSegmentConfigs.length).fill('');\n }\n\n return segments;\n });\n\n const convertValueToSegmentsOrClear = useCallback(\n (valueToConvert: CoordinateValue | null) => {\n // Clear any pending validation when value changes\n clearValidationTimeout();\n\n const segments = valueToConvert\n ? convertDDToDisplaySegments(valueToConvert, format)\n : null;\n\n setSegmentValues(\n segments || new Array(editableSegmentConfigs.length).fill(''),\n );\n setValidationErrors([]);\n },\n [format, editableSegmentConfigs.length],\n );\n\n const prevFormatRef = useRef(format);\n\n useEffect(() => {\n if (prevFormatRef.current !== format) {\n prevFormatRef.current = format;\n const valueToConvert = value !== undefined ? value : internalValue;\n convertValueToSegmentsOrClear(valueToConvert);\n }\n }, [format, value, internalValue, convertValueToSegmentsOrClear]);\n\n useEffect(() => {\n if (value !== undefined) {\n convertValueToSegmentsOrClear(value);\n }\n }, [value, convertValueToSegmentsOrClear]);\n\n /**\n * Validates segment values and updates the coordinate state\n *\n * When validation fails, calls onError with \"Invalid coordinate value\" message\n * and context containing the detailed validation errors from @accelint/geo.\n *\n * @param updatedValues - Array of segment values to validate\n */\n const validateAndUpdateCoordinate = (updatedValues: string[]) => {\n const errors = validateCoordinateSegments(updatedValues, format);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n onError?.('Invalid coordinate value', {\n errors,\n format,\n segments: updatedValues,\n });\n handleChange(null);\n return;\n }\n\n const ddValue = convertDisplaySegmentsToDD(updatedValues, format);\n if (!ddValue) {\n const errorMsg = 'Invalid coordinate value';\n setValidationErrors([errorMsg]);\n onError?.(errorMsg, { format, segments: updatedValues });\n handleChange(null);\n return;\n }\n\n setValidationErrors([]);\n handleChange(ddValue);\n };\n\n const handleSegmentChange = (index: number, newValue: string) => {\n const updatedValues = [...segmentValues];\n updatedValues[index] = newValue;\n setSegmentValues(updatedValues);\n\n if (areAllSegmentsFilled(updatedValues)) {\n // Clear any pending validation timeout\n clearValidationTimeout();\n\n // Debounce validation by 400ms when all segments are full\n const timeoutId = setTimeout(() => {\n validateAndUpdateCoordinate(updatedValues);\n validationTimeoutRef.current = null;\n }, 400);\n\n validationTimeoutRef.current = timeoutId;\n registerTimeout?.(timeoutId);\n } else {\n // Clear any pending validation when segments become incomplete\n clearValidationTimeout();\n setValidationErrors([]);\n if (currentValue !== null) {\n handleChange(null);\n }\n }\n };\n\n const applyPastedCoordinate = (pastedValue: CoordinateValue) => {\n // Clear any pending validation when applying pasted coordinate\n clearValidationTimeout();\n\n const segments = convertDDToDisplaySegments(pastedValue, format);\n\n if (segments) {\n setSegmentValues(segments);\n setValidationErrors([]);\n handleChange(pastedValue);\n }\n };\n\n const flushPendingValidation = () => {\n if (validationTimeoutRef.current) {\n clearValidationTimeout();\n\n // Immediately validate if all segments are filled\n if (areAllSegmentsFilled(segmentValues)) {\n validateAndUpdateCoordinate(segmentValues);\n }\n }\n };\n\n const effectiveErrorMessage = useMemo(\n () => validationErrors[0] || null,\n [validationErrors],\n );\n\n return {\n currentValue,\n segmentValues,\n validationErrors,\n segmentConfigs,\n editableSegmentConfigs,\n handleSegmentChange,\n setSegmentValues,\n setValidationErrors,\n effectiveErrorMessage,\n applyPastedCoordinate,\n flushPendingValidation,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgIA,SAAgB,wBAAwB,EACtC,OACA,cACA,QACA,UACA,SACA,mBACgE;CAChE,MAAM,CAAC,eAAe,oBAAoB,SACxC,gBAAgB,KACjB;CACD,MAAM,CAAC,kBAAkB,uBAAuB,SAAmB,EAAE,CAAC;CACtE,MAAM,uBAAuB,OAA8B,KAAK;CAEhE,MAAM,eAAe,UAAU,SAAY,QAAQ;CAEnD,MAAM,+BAA+B;AACnC,MAAI,qBAAqB,SAAS;AAChC,gBAAa,qBAAqB,QAAQ;AAC1C,wBAAqB,UAAU;;;CAInC,MAAM,gBAAgB,aAAqC;AACzD,MAAI,UAAU,OACZ,kBAAiB,SAAS;AAE5B,aAAW,SAAS;;CAGtB,MAAM,iBAAiB,cAAc,kBAAkB,OAAO,EAAE,CAAC,OAAO,CAAC;CAEzE,MAAM,yBAAyB,cACvB,eAAe,MAAM,CAAC,QAAQ,WAAW,OAAO,SAAS,UAAU,EACzE,CAAC,eAAe,CACjB;CAED,MAAM,CAAC,eAAe,oBAAoB,eAAyB;EACjE,MAAM,eAAe,UAAU,SAAY,QAAQ;AACnD,MAAI,CAAC,aACH,QAAO,IAAI,MAAM,uBAAuB,OAAO,CAAC,KAAK,GAAG;EAG1D,MAAM,WAAW,2BAA2B,cAAc,OAAO;AACjE,MAAI,CAAC,SACH,QAAO,IAAI,MAAM,uBAAuB,OAAO,CAAC,KAAK,GAAG;AAG1D,SAAO;GACP;CAEF,MAAM,gCAAgC,aACnC,mBAA2C;AAE1C,0BAAwB;AAMxB,oBAJiB,iBACb,2BAA2B,gBAAgB,OAAO,GAClD,SAGU,IAAI,MAAM,uBAAuB,OAAO,CAAC,KAAK,GAAG,CAC9D;AACD,sBAAoB,EAAE,CAAC;IAEzB,CAAC,QAAQ,uBAAuB,OAAO,CACxC;CAED,MAAM,gBAAgB,OAAO,OAAO;AAEpC,iBAAgB;AACd,MAAI,cAAc,YAAY,QAAQ;AACpC,iBAAc,UAAU;AAExB,iCADuB,UAAU,SAAY,QAAQ,cACR;;IAE9C;EAAC;EAAQ;EAAO;EAAe;EAA8B,CAAC;AAEjE,iBAAgB;AACd,MAAI,UAAU,OACZ,+BAA8B,MAAM;IAErC,CAAC,OAAO,8BAA8B,CAAC;;;;;;;;;CAU1C,MAAM,+BAA+B,kBAA4B;EAC/D,MAAM,SAAS,2BAA2B,eAAe,OAAO;AAEhE,MAAI,OAAO,SAAS,GAAG;AACrB,uBAAoB,OAAO;AAC3B,aAAU,4BAA4B;IACpC;IACA;IACA,UAAU;IACX,CAAC;AACF,gBAAa,KAAK;AAClB;;EAGF,MAAM,UAAU,2BAA2B,eAAe,OAAO;AACjE,MAAI,CAAC,SAAS;GACZ,MAAM,WAAW;AACjB,uBAAoB,CAAC,SAAS,CAAC;AAC/B,aAAU,UAAU;IAAE;IAAQ,UAAU;IAAe,CAAC;AACxD,gBAAa,KAAK;AAClB;;AAGF,sBAAoB,EAAE,CAAC;AACvB,eAAa,QAAQ;;CAGvB,MAAM,uBAAuB,OAAe,aAAqB;EAC/D,MAAM,gBAAgB,CAAC,GAAG,cAAc;AACxC,gBAAc,SAAS;AACvB,mBAAiB,cAAc;AAE/B,MAAI,qBAAqB,cAAc,EAAE;AAEvC,2BAAwB;GAGxB,MAAM,YAAY,iBAAiB;AACjC,gCAA4B,cAAc;AAC1C,yBAAqB,UAAU;MAC9B,IAAI;AAEP,wBAAqB,UAAU;AAC/B,qBAAkB,UAAU;SACvB;AAEL,2BAAwB;AACxB,uBAAoB,EAAE,CAAC;AACvB,OAAI,iBAAiB,KACnB,cAAa,KAAK;;;CAKxB,MAAM,yBAAyB,gBAAiC;AAE9D,0BAAwB;EAExB,MAAM,WAAW,2BAA2B,aAAa,OAAO;AAEhE,MAAI,UAAU;AACZ,oBAAiB,SAAS;AAC1B,uBAAoB,EAAE,CAAC;AACvB,gBAAa,YAAY;;;CAI7B,MAAM,+BAA+B;AACnC,MAAI,qBAAqB,SAAS;AAChC,2BAAwB;AAGxB,OAAI,qBAAqB,cAAc,CACrC,6BAA4B,cAAc;;;AAUhD,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,uBAd4B,cACtB,iBAAiB,MAAM,MAC7B,CAAC,iBAAiB,CACnB;EAYC;EACA;EACD"}
1
+ {"version":3,"file":"use-coordinate-field-state.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-field-state.ts"],"sourcesContent":["/*\n * Copyright 2026 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 {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n areAllSegmentsFilled,\n convertDDToDisplaySegments,\n convertDisplaySegmentsToDD,\n validateCoordinateSegments,\n} from '../../components/coordinate-field/coordinate-utils';\nimport { getSegmentConfigs } from '../../components/coordinate-field/segment-configs';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n SegmentConfig,\n} from '../../components/coordinate-field/types';\n\n/** Options for the useCoordinateFieldState hook */\nexport interface UseCoordinateFieldStateOptions {\n /** Controlled coordinate value */\n value?: CoordinateValue | null;\n /** Default value for uncontrolled mode */\n defaultValue?: CoordinateValue;\n /** Coordinate format system (dd, ddm, dms, mgrs, utm) */\n format: CoordinateSystem;\n /** Callback when coordinate value changes */\n onChange?:\n | Dispatch<SetStateAction<CoordinateValue | null>>\n | ((value: CoordinateValue | null) => void);\n /** Callback for validation errors */\n onError?: (message: string, context?: Record<string, unknown>) => void;\n /** Register timeouts for cleanup on unmount */\n registerTimeout?: (timeoutId: NodeJS.Timeout) => void;\n}\n\n/** Return value from the useCoordinateFieldState hook */\nexport interface UseCoordinateFieldStateResult {\n /** Current coordinate value (null if incomplete/invalid) */\n currentValue: CoordinateValue | null;\n /** Array of display values for each segment */\n segmentValues: string[];\n /** Array of validation error messages */\n validationErrors: string[];\n /** All segment configurations including literals */\n segmentConfigs: SegmentConfig[];\n /** Only editable segment configurations */\n editableSegmentConfigs: SegmentConfig[];\n /** Handle change of a single segment */\n handleSegmentChange: (index: number, newValue: string) => void;\n /** Set all segment values at once */\n setSegmentValues: (values: string[]) => void;\n /** Set validation errors */\n setValidationErrors: (errors: string[]) => void;\n /** First validation error or null */\n effectiveErrorMessage: string | null;\n /** Apply a pasted coordinate value */\n applyPastedCoordinate: (pastedValue: CoordinateValue) => void;\n /** Immediately run pending validation */\n flushPendingValidation: () => void;\n}\n\n/**\n * Manages coordinate segment values, validation, and format conversion\n *\n * @example\n * ```tsx\n * function CoordinateInputs() {\n * const [value, setValue] = useState<CoordinateValue | null>(null);\n * const { registerTimeout } = useTimeoutCleanup();\n *\n * const {\n * currentValue,\n * segmentValues,\n * validationErrors,\n * editableSegmentConfigs,\n * handleSegmentChange,\n * } = useCoordinateFieldState({\n * value,\n * format: 'ddm',\n * onChange: setValue,\n * onError: (msg) => console.error(msg),\n * registerTimeout,\n * });\n *\n * return (\n * <div>\n * {editableSegmentConfigs.map((config, i) => (\n * <input\n * key={i}\n * value={segmentValues[i]}\n * onChange={(e) => handleSegmentChange(i, e.target.value)}\n * placeholder={config.placeholder}\n * />\n * ))}\n * {validationErrors.map((error, i) => (\n * <span key={i}>{error}</span>\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @param options - {@link UseCoordinateFieldStateOptions}\n * @param options.value - Controlled coordinate value.\n * @param options.defaultValue - Default value for uncontrolled mode.\n * @param options.format - Coordinate format system (dd, ddm, dms, mgrs, utm).\n * @param options.onChange - Callback when coordinate value changes.\n * @param options.onError - Callback for validation errors.\n * @param options.registerTimeout - Register timeouts for cleanup on unmount.\n * @returns {@link UseCoordinateFieldStateResult} Segment state, validation, and change handlers.\n */\nexport function useCoordinateFieldState({\n value,\n defaultValue,\n format,\n onChange,\n onError,\n registerTimeout,\n}: UseCoordinateFieldStateOptions): UseCoordinateFieldStateResult {\n const [internalValue, setInternalValue] = useState<CoordinateValue | null>(\n defaultValue || null,\n );\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const validationTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n\n const clearValidationTimeout = () => {\n if (validationTimeoutRef.current) {\n clearTimeout(validationTimeoutRef.current);\n validationTimeoutRef.current = null;\n }\n };\n\n const handleChange = (newValue: CoordinateValue | null) => {\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const segmentConfigs = useMemo(() => getSegmentConfigs(format), [format]);\n\n const editableSegmentConfigs = useMemo(\n () => segmentConfigs.flat().filter((config) => config.type !== 'literal'),\n [segmentConfigs],\n );\n\n const [segmentValues, setSegmentValues] = useState<string[]>(() => {\n const initialValue = value !== undefined ? value : defaultValue;\n if (!initialValue) {\n return new Array(editableSegmentConfigs.length).fill('');\n }\n\n const segments = convertDDToDisplaySegments(initialValue, format);\n if (!segments) {\n return new Array(editableSegmentConfigs.length).fill('');\n }\n\n return segments;\n });\n\n const convertValueToSegmentsOrClear = useCallback(\n (valueToConvert: CoordinateValue | null) => {\n // Clear any pending validation when value changes\n clearValidationTimeout();\n\n const segments = valueToConvert\n ? convertDDToDisplaySegments(valueToConvert, format)\n : null;\n\n setSegmentValues(\n segments || new Array(editableSegmentConfigs.length).fill(''),\n );\n setValidationErrors([]);\n },\n [format, editableSegmentConfigs.length],\n );\n\n const prevFormatRef = useRef(format);\n\n useEffect(() => {\n if (prevFormatRef.current !== format) {\n prevFormatRef.current = format;\n const valueToConvert = value !== undefined ? value : internalValue;\n convertValueToSegmentsOrClear(valueToConvert);\n }\n }, [format, value, internalValue, convertValueToSegmentsOrClear]);\n\n useEffect(() => {\n if (value !== undefined) {\n convertValueToSegmentsOrClear(value);\n }\n }, [value, convertValueToSegmentsOrClear]);\n\n /**\n * Validates segment values and updates the coordinate state\n *\n * When validation fails, calls onError with \"Invalid coordinate value\" message\n * and context containing the detailed validation errors from @accelint/geo.\n *\n * @param updatedValues - Array of segment values to validate\n */\n const validateAndUpdateCoordinate = (updatedValues: string[]) => {\n const errors = validateCoordinateSegments(updatedValues, format);\n\n if (errors.length > 0) {\n setValidationErrors(errors);\n onError?.('Invalid coordinate value', {\n errors,\n format,\n segments: updatedValues,\n });\n handleChange(null);\n return;\n }\n\n const ddValue = convertDisplaySegmentsToDD(updatedValues, format);\n if (!ddValue) {\n const errorMsg = 'Invalid coordinate value';\n setValidationErrors([errorMsg]);\n onError?.(errorMsg, { format, segments: updatedValues });\n handleChange(null);\n return;\n }\n\n setValidationErrors([]);\n handleChange(ddValue);\n };\n\n const handleSegmentChange = (index: number, newValue: string) => {\n const updatedValues = [...segmentValues];\n updatedValues[index] = newValue;\n setSegmentValues(updatedValues);\n\n if (areAllSegmentsFilled(updatedValues)) {\n // Clear any pending validation timeout\n clearValidationTimeout();\n\n // Debounce validation by 400ms when all segments are full\n const timeoutId = setTimeout(() => {\n validateAndUpdateCoordinate(updatedValues);\n validationTimeoutRef.current = null;\n }, 400);\n\n validationTimeoutRef.current = timeoutId;\n registerTimeout?.(timeoutId);\n } else {\n // Clear any pending validation when segments become incomplete\n clearValidationTimeout();\n setValidationErrors([]);\n if (currentValue !== null) {\n handleChange(null);\n }\n }\n };\n\n const applyPastedCoordinate = (pastedValue: CoordinateValue) => {\n // Clear any pending validation when applying pasted coordinate\n clearValidationTimeout();\n\n const segments = convertDDToDisplaySegments(pastedValue, format);\n\n if (segments) {\n setSegmentValues(segments);\n setValidationErrors([]);\n handleChange(pastedValue);\n }\n };\n\n const flushPendingValidation = () => {\n if (validationTimeoutRef.current) {\n clearValidationTimeout();\n\n // Immediately validate if all segments are filled\n if (areAllSegmentsFilled(segmentValues)) {\n validateAndUpdateCoordinate(segmentValues);\n }\n }\n };\n\n const effectiveErrorMessage = useMemo(\n () => validationErrors[0] || null,\n [validationErrors],\n );\n\n return {\n currentValue,\n segmentValues,\n validationErrors,\n segmentConfigs,\n editableSegmentConfigs,\n handleSegmentChange,\n setSegmentValues,\n setValidationErrors,\n effectiveErrorMessage,\n applyPastedCoordinate,\n flushPendingValidation,\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
2
+ * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
3
3
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License. You may obtain a copy
5
5
  * of the License at https://www.apache.org/licenses/LICENSE-2.0