@accelint/design-toolkit 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/README.md +1 -1
  2. package/catalog-info.yaml +12 -6
  3. package/dist/components/accordion/context.d.ts +0 -2
  4. package/dist/components/accordion/group.d.ts +0 -2
  5. package/dist/components/accordion/group.js +1 -1
  6. package/dist/components/accordion/group.js.map +1 -1
  7. package/dist/components/accordion/header.d.ts +0 -2
  8. package/dist/components/accordion/header.js +1 -1
  9. package/dist/components/accordion/header.js.map +1 -1
  10. package/dist/components/accordion/index.d.ts +0 -2
  11. package/dist/components/accordion/index.js +3 -1
  12. package/dist/components/accordion/index.js.map +1 -1
  13. package/dist/components/accordion/panel.d.ts +0 -2
  14. package/dist/components/accordion/panel.js +1 -1
  15. package/dist/components/accordion/panel.js.map +1 -1
  16. package/dist/components/accordion/styles.module.css +65 -0
  17. package/dist/components/accordion/trigger.d.ts +0 -2
  18. package/dist/components/accordion/trigger.js +1 -1
  19. package/dist/components/accordion/trigger.js.map +1 -1
  20. package/dist/components/accordion/types.d.ts +5 -5
  21. package/dist/components/action-bar/index.d.ts +1 -1
  22. package/dist/components/action-bar/index.js +1 -1
  23. package/dist/components/action-bar/index.js.map +1 -1
  24. package/dist/components/action-bar/styles.module.css +27 -0
  25. package/dist/components/action-bar/types.d.ts +3 -1
  26. package/dist/components/avatar/context.d.ts +0 -3
  27. package/dist/components/avatar/index.d.ts +0 -3
  28. package/dist/components/avatar/index.js +1 -1
  29. package/dist/components/avatar/index.js.map +1 -1
  30. package/dist/components/avatar/styles.module.css +45 -0
  31. package/dist/components/avatar/types.d.ts +1 -4
  32. package/dist/components/badge/context.d.ts +0 -2
  33. package/dist/components/badge/index.d.ts +0 -2
  34. package/dist/components/badge/index.js +3 -1
  35. package/dist/components/badge/index.js.map +1 -1
  36. package/dist/components/badge/styles.module.css +67 -0
  37. package/dist/components/badge/types.d.ts +3 -4
  38. package/dist/components/breadcrumbs/index.js +1 -1
  39. package/dist/components/breadcrumbs/index.js.map +1 -1
  40. package/dist/components/breadcrumbs/item.js +1 -1
  41. package/dist/components/breadcrumbs/item.js.map +1 -1
  42. package/dist/components/breadcrumbs/styles.module.css +41 -0
  43. package/dist/components/button/context.d.ts +0 -3
  44. package/dist/components/button/index.d.ts +0 -3
  45. package/dist/components/button/index.js +3 -1
  46. package/dist/components/button/index.js.map +1 -1
  47. package/dist/components/button/link.d.ts +0 -3
  48. package/dist/components/button/link.js +1 -1
  49. package/dist/components/button/link.js.map +1 -1
  50. package/dist/components/button/styles.module.css +917 -0
  51. package/dist/components/button/toggle.d.ts +0 -3
  52. package/dist/components/button/toggle.js +1 -1
  53. package/dist/components/button/toggle.js.map +1 -1
  54. package/dist/components/button/types.d.ts +6 -6
  55. package/dist/components/checkbox/group.js +1 -1
  56. package/dist/components/checkbox/group.js.map +1 -1
  57. package/dist/components/checkbox/index.js +1 -1
  58. package/dist/components/checkbox/index.js.map +1 -1
  59. package/dist/components/checkbox/styles.module.css +111 -0
  60. package/dist/components/chip/context.d.ts +3 -6
  61. package/dist/components/chip/context.js +1 -1
  62. package/dist/components/chip/context.js.map +1 -1
  63. package/dist/components/chip/deletable.d.ts +0 -3
  64. package/dist/components/chip/deletable.js +1 -1
  65. package/dist/components/chip/deletable.js.map +1 -1
  66. package/dist/components/chip/index.d.ts +0 -3
  67. package/dist/components/chip/index.js +3 -1
  68. package/dist/components/chip/index.js.map +1 -1
  69. package/dist/components/chip/list.d.ts +0 -3
  70. package/dist/components/chip/list.js +1 -1
  71. package/dist/components/chip/list.js.map +1 -1
  72. package/dist/components/chip/selectable.d.ts +0 -3
  73. package/dist/components/chip/selectable.js +3 -1
  74. package/dist/components/chip/selectable.js.map +1 -1
  75. package/dist/components/chip/styles.module.css +129 -0
  76. package/dist/components/chip/types.d.ts +7 -8
  77. package/dist/components/classification-badge/context.d.ts +1 -2
  78. package/dist/components/classification-badge/index.d.ts +1 -2
  79. package/dist/components/classification-badge/index.js +3 -1
  80. package/dist/components/classification-badge/index.js.map +1 -1
  81. package/dist/components/classification-badge/styles.module.css +63 -0
  82. package/dist/components/classification-badge/types.d.ts +3 -5
  83. package/dist/components/classification-banner/context.d.ts +0 -2
  84. package/dist/components/classification-banner/index.d.ts +0 -2
  85. package/dist/components/classification-banner/index.js +3 -1
  86. package/dist/components/classification-banner/index.js.map +1 -1
  87. package/dist/components/classification-banner/styles.module.css +55 -0
  88. package/dist/components/classification-banner/types.d.ts +4 -5
  89. package/dist/components/color-picker/index.js +1 -1
  90. package/dist/components/color-picker/index.js.map +1 -1
  91. package/dist/components/color-picker/styles.module.css +43 -0
  92. package/dist/components/combobox-field/context.d.ts +0 -3
  93. package/dist/components/combobox-field/index.d.ts +0 -3
  94. package/dist/components/combobox-field/index.js +1 -1
  95. package/dist/components/combobox-field/index.js.map +1 -1
  96. package/dist/components/combobox-field/styles.module.css +101 -0
  97. package/dist/components/combobox-field/types.d.ts +0 -3
  98. package/dist/components/coordinate-field/context.d.ts +77 -0
  99. package/dist/components/coordinate-field/context.js +2 -0
  100. package/dist/components/coordinate-field/context.js.map +1 -0
  101. package/dist/components/coordinate-field/coordinate-utils.d.ts +282 -0
  102. package/dist/components/coordinate-field/coordinate-utils.js +2 -0
  103. package/dist/components/coordinate-field/coordinate-utils.js.map +1 -0
  104. package/dist/components/coordinate-field/index.d.ts +66 -0
  105. package/dist/components/coordinate-field/index.js +4 -0
  106. package/dist/components/coordinate-field/index.js.map +1 -0
  107. package/dist/components/coordinate-field/segment-configs.d.ts +163 -0
  108. package/dist/components/coordinate-field/segment-configs.js +2 -0
  109. package/dist/components/coordinate-field/segment-configs.js.map +1 -0
  110. package/dist/components/coordinate-field/segment.d.ts +39 -0
  111. package/dist/components/coordinate-field/segment.js +4 -0
  112. package/dist/components/coordinate-field/segment.js.map +1 -0
  113. package/dist/components/coordinate-field/styles.module.css +129 -0
  114. package/dist/components/coordinate-field/types.d.ts +194 -0
  115. package/dist/components/coordinate-field/types.js +2 -0
  116. package/dist/components/coordinate-field/types.js.map +1 -0
  117. package/dist/components/coordinate-field/width-utils.d.ts +29 -0
  118. package/dist/components/coordinate-field/width-utils.js +2 -0
  119. package/dist/components/coordinate-field/width-utils.js.map +1 -0
  120. package/dist/components/date-field/index.d.ts +0 -2
  121. package/dist/components/date-field/index.js +1 -1
  122. package/dist/components/date-field/index.js.map +1 -1
  123. package/dist/components/date-field/styles.module.css +103 -0
  124. package/dist/components/date-field/types.d.ts +1 -3
  125. package/dist/components/details-list/context.d.ts +0 -2
  126. package/dist/components/details-list/index.d.ts +0 -2
  127. package/dist/components/details-list/index.js +3 -1
  128. package/dist/components/details-list/index.js.map +1 -1
  129. package/dist/components/details-list/label.d.ts +0 -2
  130. package/dist/components/details-list/styles.module.css +52 -0
  131. package/dist/components/details-list/types.d.ts +2 -3
  132. package/dist/components/details-list/value.d.ts +0 -2
  133. package/dist/components/dialog/content.js +3 -1
  134. package/dist/components/dialog/content.js.map +1 -1
  135. package/dist/components/dialog/footer.js +1 -1
  136. package/dist/components/dialog/footer.js.map +1 -1
  137. package/dist/components/dialog/index.js +1 -1
  138. package/dist/components/dialog/index.js.map +1 -1
  139. package/dist/components/dialog/styles.module.css +86 -0
  140. package/dist/components/dialog/title.js +1 -1
  141. package/dist/components/dialog/title.js.map +1 -1
  142. package/dist/components/dialog/trigger.d.ts +5 -1
  143. package/dist/components/dialog/trigger.js +1 -1
  144. package/dist/components/dialog/trigger.js.map +1 -1
  145. package/dist/components/divider/index.js +3 -1
  146. package/dist/components/divider/index.js.map +1 -1
  147. package/dist/components/divider/styles.module.css +44 -0
  148. package/dist/components/drawer/back.js +1 -1
  149. package/dist/components/drawer/back.js.map +1 -1
  150. package/dist/components/drawer/close.js +3 -1
  151. package/dist/components/drawer/close.js.map +1 -1
  152. package/dist/components/drawer/content.js +1 -3
  153. package/dist/components/drawer/content.js.map +1 -1
  154. package/dist/components/drawer/context.d.ts +0 -4
  155. package/dist/components/drawer/footer.js +1 -3
  156. package/dist/components/drawer/footer.js.map +1 -1
  157. package/dist/components/drawer/header-title.d.ts +0 -4
  158. package/dist/components/drawer/header-title.js +1 -1
  159. package/dist/components/drawer/header-title.js.map +1 -1
  160. package/dist/components/drawer/header.js +1 -1
  161. package/dist/components/drawer/header.js.map +1 -1
  162. package/dist/components/drawer/index.d.ts +0 -4
  163. package/dist/components/drawer/index.js +1 -1
  164. package/dist/components/drawer/index.js.map +1 -1
  165. package/dist/components/drawer/layout-main.js +1 -1
  166. package/dist/components/drawer/layout-main.js.map +1 -1
  167. package/dist/components/drawer/layout.d.ts +0 -4
  168. package/dist/components/drawer/layout.js +1 -3
  169. package/dist/components/drawer/layout.js.map +1 -1
  170. package/dist/components/drawer/menu-item.d.ts +0 -4
  171. package/dist/components/drawer/menu-item.js +3 -1
  172. package/dist/components/drawer/menu-item.js.map +1 -1
  173. package/dist/components/drawer/menu.d.ts +0 -4
  174. package/dist/components/drawer/menu.js +1 -3
  175. package/dist/components/drawer/menu.js.map +1 -1
  176. package/dist/components/drawer/panel.js +1 -1
  177. package/dist/components/drawer/panel.js.map +1 -1
  178. package/dist/components/drawer/styles.module.css +304 -0
  179. package/dist/components/drawer/trigger.d.ts +0 -4
  180. package/dist/components/drawer/trigger.js +1 -1
  181. package/dist/components/drawer/trigger.js.map +1 -1
  182. package/dist/components/drawer/types.d.ts +3 -5
  183. package/dist/components/drawer/view.js +1 -1
  184. package/dist/components/drawer/view.js.map +1 -1
  185. package/dist/components/hero/context.js +2 -0
  186. package/dist/components/hero/index.js +1 -1
  187. package/dist/components/hero/index.js.map +1 -1
  188. package/dist/components/hero/styles.module.css +51 -0
  189. package/dist/components/hero/title.js +2 -0
  190. package/dist/components/hotkey/context.d.ts +0 -2
  191. package/dist/components/hotkey/index.d.ts +0 -2
  192. package/dist/components/hotkey/index.js +1 -1
  193. package/dist/components/hotkey/index.js.map +1 -1
  194. package/dist/components/hotkey/set.d.ts +6 -0
  195. package/dist/components/hotkey/set.js +4 -0
  196. package/dist/components/hotkey/set.js.map +1 -0
  197. package/dist/components/hotkey/styles.module.css +36 -0
  198. package/dist/components/hotkey/types.d.ts +5 -6
  199. package/dist/components/icon/index.js +3 -1
  200. package/dist/components/icon/index.js.map +1 -1
  201. package/dist/components/icon/styles.module.css +38 -0
  202. package/dist/components/input/context.d.ts +0 -4
  203. package/dist/components/input/index.d.ts +0 -4
  204. package/dist/components/input/index.js +1 -1
  205. package/dist/components/input/index.js.map +1 -1
  206. package/dist/components/input/styles.module.css +175 -0
  207. package/dist/components/input/types.d.ts +7 -6
  208. package/dist/components/kanban/card-body.d.ts +12 -0
  209. package/dist/components/kanban/card-body.js +4 -0
  210. package/dist/components/kanban/card-body.js.map +1 -0
  211. package/dist/components/kanban/card-header-actions.d.ts +12 -0
  212. package/dist/components/kanban/card-header-actions.js +4 -0
  213. package/dist/components/kanban/card-header-actions.js.map +1 -0
  214. package/dist/components/kanban/card-header-title.d.ts +12 -0
  215. package/dist/components/kanban/card-header-title.js +4 -0
  216. package/dist/components/kanban/card-header-title.js.map +1 -0
  217. package/dist/components/kanban/card-header.d.ts +12 -0
  218. package/dist/components/kanban/card-header.js +4 -0
  219. package/dist/components/kanban/card-header.js.map +1 -0
  220. package/dist/components/kanban/card.d.ts +12 -0
  221. package/dist/components/kanban/card.js +4 -0
  222. package/dist/components/kanban/card.js.map +1 -0
  223. package/dist/components/kanban/column-actions.d.ts +12 -0
  224. package/dist/components/kanban/column-actions.js +4 -0
  225. package/dist/components/kanban/column-actions.js.map +1 -0
  226. package/dist/components/kanban/column-container.d.ts +12 -0
  227. package/dist/components/kanban/column-container.js +4 -0
  228. package/dist/components/kanban/column-container.js.map +1 -0
  229. package/dist/components/kanban/column-content.d.ts +12 -0
  230. package/dist/components/kanban/column-content.js +4 -0
  231. package/dist/components/kanban/column-content.js.map +1 -0
  232. package/dist/components/kanban/column-header-actions.d.ts +12 -0
  233. package/dist/components/kanban/column-header-actions.js +4 -0
  234. package/dist/components/kanban/column-header-actions.js.map +1 -0
  235. package/dist/components/kanban/column-header-drag-handle.d.ts +5 -0
  236. package/dist/components/kanban/column-header-drag-handle.js +4 -0
  237. package/dist/components/kanban/column-header-drag-handle.js.map +1 -0
  238. package/dist/components/kanban/column-header-title.d.ts +12 -0
  239. package/dist/components/kanban/column-header-title.js +4 -0
  240. package/dist/components/kanban/column-header-title.js.map +1 -0
  241. package/dist/components/kanban/column-header.d.ts +12 -0
  242. package/dist/components/kanban/column-header.js +4 -0
  243. package/dist/components/kanban/column-header.js.map +1 -0
  244. package/dist/components/kanban/column.d.ts +12 -0
  245. package/dist/components/kanban/column.js +4 -0
  246. package/dist/components/kanban/column.js.map +1 -0
  247. package/dist/components/kanban/context.d.ts +101 -0
  248. package/dist/components/kanban/context.js +2 -0
  249. package/dist/components/kanban/context.js.map +1 -0
  250. package/dist/components/kanban/header-actions.d.ts +12 -0
  251. package/dist/components/kanban/header-actions.js +4 -0
  252. package/dist/components/kanban/header-actions.js.map +1 -0
  253. package/dist/components/kanban/header-search.d.ts +12 -0
  254. package/dist/components/kanban/header-search.js +4 -0
  255. package/dist/components/kanban/header-search.js.map +1 -0
  256. package/dist/components/kanban/header-title.d.ts +12 -0
  257. package/dist/components/kanban/header-title.js +4 -0
  258. package/dist/components/kanban/header-title.js.map +1 -0
  259. package/dist/components/kanban/header.d.ts +12 -0
  260. package/dist/components/kanban/header.js +4 -0
  261. package/dist/components/kanban/header.js.map +1 -0
  262. package/dist/components/kanban/index.d.ts +9 -0
  263. package/dist/components/kanban/index.js +2 -0
  264. package/dist/components/kanban/index.js.map +1 -0
  265. package/dist/components/kanban/kanban.d.ts +18 -0
  266. package/dist/components/kanban/kanban.js +4 -0
  267. package/dist/components/kanban/kanban.js.map +1 -0
  268. package/dist/components/kanban/mock-data.d.ts +14 -0
  269. package/dist/components/kanban/mock-data.js +2 -0
  270. package/dist/components/kanban/mock-data.js.map +1 -0
  271. package/dist/components/kanban/styles.module.css +117 -0
  272. package/dist/components/kanban/types.d.ts +50 -0
  273. package/dist/components/label/index.js +3 -1
  274. package/dist/components/label/index.js.map +1 -1
  275. package/dist/components/label/styles.module.css +23 -0
  276. package/dist/components/lines/index.d.ts +0 -2
  277. package/dist/components/lines/index.js +1 -1
  278. package/dist/components/lines/index.js.map +1 -1
  279. package/dist/components/lines/styles.module.css +95 -0
  280. package/dist/components/lines/types.d.ts +4 -5
  281. package/dist/components/link/index.js +3 -1
  282. package/dist/components/link/index.js.map +1 -1
  283. package/dist/components/link/styles.module.css +37 -0
  284. package/dist/components/menu/context.d.ts +0 -2
  285. package/dist/components/menu/index.d.ts +0 -2
  286. package/dist/components/menu/index.js +1 -1
  287. package/dist/components/menu/index.js.map +1 -1
  288. package/dist/components/menu/item-description.js +3 -1
  289. package/dist/components/menu/item-description.js.map +1 -1
  290. package/dist/components/menu/item-label.js +1 -1
  291. package/dist/components/menu/item-label.js.map +1 -1
  292. package/dist/components/menu/item.d.ts +0 -2
  293. package/dist/components/menu/item.js +1 -1
  294. package/dist/components/menu/item.js.map +1 -1
  295. package/dist/components/menu/section.d.ts +0 -2
  296. package/dist/components/menu/section.js +3 -1
  297. package/dist/components/menu/section.js.map +1 -1
  298. package/dist/components/menu/separator.js +1 -1
  299. package/dist/components/menu/separator.js.map +1 -1
  300. package/dist/components/menu/styles.module.css +415 -0
  301. package/dist/components/menu/trigger.d.ts +5 -1
  302. package/dist/components/menu/trigger.js +3 -1
  303. package/dist/components/menu/trigger.js.map +1 -1
  304. package/dist/components/menu/types.d.ts +2 -3
  305. package/dist/components/notice/index.d.ts +0 -3
  306. package/dist/components/notice/index.js +1 -1
  307. package/dist/components/notice/index.js.map +1 -1
  308. package/dist/components/notice/list.d.ts +0 -3
  309. package/dist/components/notice/list.js +1 -1
  310. package/dist/components/notice/list.js.map +1 -1
  311. package/dist/components/notice/notice-icon.d.ts +0 -3
  312. package/dist/components/notice/notice-icon.js +2 -0
  313. package/dist/components/notice/styles.module.css +133 -0
  314. package/dist/components/notice/types.d.ts +3 -6
  315. package/dist/components/options/context.js +2 -0
  316. package/dist/components/options/index.js +1 -1
  317. package/dist/components/options/index.js.map +1 -1
  318. package/dist/components/options/item-content.d.ts +2 -5
  319. package/dist/components/options/item-content.js +1 -1
  320. package/dist/components/options/item-content.js.map +1 -1
  321. package/dist/components/options/item-description.d.ts +2 -5
  322. package/dist/components/options/item-description.js +1 -3
  323. package/dist/components/options/item-description.js.map +1 -1
  324. package/dist/components/options/item-label.d.ts +2 -5
  325. package/dist/components/options/item-label.js +1 -1
  326. package/dist/components/options/item-label.js.map +1 -1
  327. package/dist/components/options/item.js +1 -1
  328. package/dist/components/options/item.js.map +1 -1
  329. package/dist/components/options/section.js +1 -1
  330. package/dist/components/options/section.js.map +1 -1
  331. package/dist/components/options/styles.module.css +397 -0
  332. package/dist/components/options/types.d.ts +2 -3
  333. package/dist/components/pagination/context.d.ts +9 -0
  334. package/dist/components/pagination/context.js +4 -0
  335. package/dist/components/pagination/context.js.map +1 -0
  336. package/dist/components/pagination/index.d.ts +25 -0
  337. package/dist/components/pagination/index.js +4 -0
  338. package/dist/components/pagination/index.js.map +1 -0
  339. package/dist/components/pagination/next.d.ts +10 -0
  340. package/dist/components/pagination/next.js +4 -0
  341. package/dist/components/pagination/next.js.map +1 -0
  342. package/dist/components/pagination/pages.d.ts +10 -0
  343. package/dist/components/pagination/pages.js +4 -0
  344. package/dist/components/pagination/pages.js.map +1 -0
  345. package/dist/components/pagination/prev.d.ts +10 -0
  346. package/dist/components/pagination/prev.js +4 -0
  347. package/dist/components/pagination/prev.js.map +1 -0
  348. package/dist/components/pagination/styles.module.css +25 -0
  349. package/dist/components/pagination/types.d.ts +35 -0
  350. package/dist/components/pagination/types.js +2 -0
  351. package/dist/components/pagination/types.js.map +1 -0
  352. package/dist/components/pagination/utils.d.ts +16 -0
  353. package/dist/components/pagination/utils.js +2 -0
  354. package/dist/components/pagination/utils.js.map +1 -0
  355. package/dist/components/popover/content.d.ts +2 -4
  356. package/dist/components/popover/content.js +3 -1
  357. package/dist/components/popover/content.js.map +1 -1
  358. package/dist/components/popover/footer.d.ts +2 -5
  359. package/dist/components/popover/footer.js +1 -1
  360. package/dist/components/popover/footer.js.map +1 -1
  361. package/dist/components/popover/index.d.ts +15 -19
  362. package/dist/components/popover/index.js +3 -1
  363. package/dist/components/popover/index.js.map +1 -1
  364. package/dist/components/popover/styles.module.css +32 -0
  365. package/dist/components/popover/title.d.ts +2 -4
  366. package/dist/components/popover/title.js +1 -1
  367. package/dist/components/popover/title.js.map +1 -1
  368. package/dist/components/popover/trigger.d.ts +1 -1
  369. package/dist/components/popover/trigger.js +3 -1
  370. package/dist/components/popover/trigger.js.map +1 -1
  371. package/dist/components/popover/types.d.ts +11 -22
  372. package/dist/components/query-builder/actions.js +2 -0
  373. package/dist/components/query-builder/index.js +1 -1
  374. package/dist/components/query-builder/index.js.map +1 -1
  375. package/dist/components/query-builder/rule-group.js +1 -1
  376. package/dist/components/query-builder/rule-group.js.map +1 -1
  377. package/dist/components/query-builder/rule.js +3 -1
  378. package/dist/components/query-builder/rule.js.map +1 -1
  379. package/dist/components/query-builder/styles.module.css +87 -0
  380. package/dist/components/query-builder/value-editor.js +1 -1
  381. package/dist/components/query-builder/value-editor.js.map +1 -1
  382. package/dist/components/query-builder/value-selector.js +2 -0
  383. package/dist/components/radio/group.js +1 -1
  384. package/dist/components/radio/group.js.map +1 -1
  385. package/dist/components/radio/index.js +3 -1
  386. package/dist/components/radio/index.js.map +1 -1
  387. package/dist/components/radio/styles.module.css +118 -0
  388. package/dist/components/search-field/context.d.ts +0 -4
  389. package/dist/components/search-field/index.d.ts +0 -4
  390. package/dist/components/search-field/index.js +1 -1
  391. package/dist/components/search-field/index.js.map +1 -1
  392. package/dist/components/search-field/styles.module.css +104 -0
  393. package/dist/components/search-field/types.d.ts +2 -7
  394. package/dist/components/select-field/context.d.ts +0 -3
  395. package/dist/components/select-field/index.d.ts +0 -3
  396. package/dist/components/select-field/index.js +1 -1
  397. package/dist/components/select-field/index.js.map +1 -1
  398. package/dist/components/select-field/styles.module.css +78 -0
  399. package/dist/components/select-field/types.d.ts +0 -3
  400. package/dist/components/sidenav/avatar.js +1 -1
  401. package/dist/components/sidenav/avatar.js.map +1 -1
  402. package/dist/components/sidenav/content.js +3 -1
  403. package/dist/components/sidenav/content.js.map +1 -1
  404. package/dist/components/sidenav/footer.js +1 -3
  405. package/dist/components/sidenav/footer.js.map +1 -1
  406. package/dist/components/sidenav/header.js +1 -1
  407. package/dist/components/sidenav/header.js.map +1 -1
  408. package/dist/components/sidenav/index.js +3 -1
  409. package/dist/components/sidenav/index.js.map +1 -1
  410. package/dist/components/sidenav/item.js +1 -1
  411. package/dist/components/sidenav/item.js.map +1 -1
  412. package/dist/components/sidenav/link.js +1 -1
  413. package/dist/components/sidenav/link.js.map +1 -1
  414. package/dist/components/sidenav/menu-item.js +1 -1
  415. package/dist/components/sidenav/menu-item.js.map +1 -1
  416. package/dist/components/sidenav/menu.js +1 -1
  417. package/dist/components/sidenav/menu.js.map +1 -1
  418. package/dist/components/sidenav/styles.module.css +311 -0
  419. package/dist/components/sidenav/types.d.ts +1 -2
  420. package/dist/components/skeleton/index.d.ts +2 -4
  421. package/dist/components/skeleton/index.js +1 -1
  422. package/dist/components/skeleton/index.js.map +1 -1
  423. package/dist/components/skeleton/styles.module.css +33 -0
  424. package/dist/components/skeleton/types.d.ts +4 -5
  425. package/dist/components/slider/index.js +1 -1
  426. package/dist/components/slider/index.js.map +1 -1
  427. package/dist/components/slider/styles.module.css +220 -0
  428. package/dist/components/switch/index.js +1 -1
  429. package/dist/components/switch/index.js.map +1 -1
  430. package/dist/components/switch/styles.module.css +116 -0
  431. package/dist/components/table/body.d.ts +0 -3
  432. package/dist/components/table/body.js +1 -1
  433. package/dist/components/table/body.js.map +1 -1
  434. package/dist/components/table/cell.d.ts +0 -3
  435. package/dist/components/table/cell.js +1 -1
  436. package/dist/components/table/cell.js.map +1 -1
  437. package/dist/components/table/context.d.ts +0 -3
  438. package/dist/components/table/header-cell.d.ts +0 -3
  439. package/dist/components/table/header-cell.js +1 -1
  440. package/dist/components/table/header-cell.js.map +1 -1
  441. package/dist/components/table/header.d.ts +0 -3
  442. package/dist/components/table/header.js +1 -1
  443. package/dist/components/table/header.js.map +1 -1
  444. package/dist/components/table/index.d.ts +0 -3
  445. package/dist/components/table/index.js +1 -1
  446. package/dist/components/table/index.js.map +1 -1
  447. package/dist/components/table/row.d.ts +0 -3
  448. package/dist/components/table/row.js +1 -1
  449. package/dist/components/table/row.js.map +1 -1
  450. package/dist/components/table/styles.module.css +95 -0
  451. package/dist/components/table/types.d.ts +5 -15
  452. package/dist/components/tabs/index.js +3 -1
  453. package/dist/components/tabs/index.js.map +1 -1
  454. package/dist/components/tabs/list.js +1 -1
  455. package/dist/components/tabs/list.js.map +1 -1
  456. package/dist/components/tabs/panel.js +3 -1
  457. package/dist/components/tabs/panel.js.map +1 -1
  458. package/dist/components/tabs/styles.module.css +140 -0
  459. package/dist/components/tabs/tab.js +1 -1
  460. package/dist/components/tabs/tab.js.map +1 -1
  461. package/dist/components/text-area-field/index.js +1 -1
  462. package/dist/components/text-area-field/index.js.map +1 -1
  463. package/dist/components/text-area-field/styles.module.css +67 -0
  464. package/dist/components/text-field/context.d.ts +0 -4
  465. package/dist/components/text-field/index.d.ts +24 -4
  466. package/dist/components/text-field/index.js +1 -1
  467. package/dist/components/text-field/index.js.map +1 -1
  468. package/dist/components/text-field/styles.module.css +37 -0
  469. package/dist/components/text-field/types.d.ts +0 -4
  470. package/dist/components/time-field/index.d.ts +0 -3
  471. package/dist/components/time-field/index.js +1 -1
  472. package/dist/components/time-field/index.js.map +1 -1
  473. package/dist/components/time-field/styles.module.css +75 -0
  474. package/dist/components/time-field/types.d.ts +2 -5
  475. package/dist/components/tooltip/index.js +1 -1
  476. package/dist/components/tooltip/index.js.map +1 -1
  477. package/dist/components/tooltip/styles.module.css +20 -0
  478. package/dist/components/tree/context.d.ts +0 -2
  479. package/dist/components/tree/context.js +1 -1
  480. package/dist/components/tree/context.js.map +1 -1
  481. package/dist/components/tree/index.d.ts +0 -2
  482. package/dist/components/tree/index.js +1 -1
  483. package/dist/components/tree/index.js.map +1 -1
  484. package/dist/components/tree/item-actions.js +1 -1
  485. package/dist/components/tree/item-actions.js.map +1 -1
  486. package/dist/components/tree/item-content.d.ts +0 -2
  487. package/dist/components/tree/item-content.js +1 -1
  488. package/dist/components/tree/item-content.js.map +1 -1
  489. package/dist/components/tree/item-description.js +1 -1
  490. package/dist/components/tree/item-description.js.map +1 -1
  491. package/dist/components/tree/item-label.js +1 -1
  492. package/dist/components/tree/item-label.js.map +1 -1
  493. package/dist/components/tree/item-prefix-icon.js +1 -1
  494. package/dist/components/tree/item-prefix-icon.js.map +1 -1
  495. package/dist/components/tree/item.d.ts +0 -2
  496. package/dist/components/tree/item.js +1 -1
  497. package/dist/components/tree/item.js.map +1 -1
  498. package/dist/components/tree/lines.js +1 -1
  499. package/dist/components/tree/lines.js.map +1 -1
  500. package/dist/components/tree/styles.module.css +183 -0
  501. package/dist/components/tree/types.d.ts +6 -5
  502. package/dist/components/view-stack/trigger.js +2 -0
  503. package/dist/hooks/coordinate-field/index.d.ts +9 -0
  504. package/dist/hooks/coordinate-field/index.js +2 -0
  505. package/dist/hooks/coordinate-field/index.js.map +1 -0
  506. package/dist/hooks/coordinate-field/use-coordinate-copy.d.ts +19 -0
  507. package/dist/hooks/coordinate-field/use-coordinate-copy.js +2 -0
  508. package/dist/hooks/coordinate-field/use-coordinate-copy.js.map +1 -0
  509. package/dist/hooks/coordinate-field/use-coordinate-field-state.d.ts +28 -0
  510. package/dist/hooks/coordinate-field/use-coordinate-field-state.js +2 -0
  511. package/dist/hooks/coordinate-field/use-coordinate-field-state.js.map +1 -0
  512. package/dist/hooks/coordinate-field/use-coordinate-field.d.ts +49 -0
  513. package/dist/hooks/coordinate-field/use-coordinate-field.js +2 -0
  514. package/dist/hooks/coordinate-field/use-coordinate-field.js.map +1 -0
  515. package/dist/hooks/coordinate-field/use-coordinate-focus.d.ts +21 -0
  516. package/dist/hooks/coordinate-field/use-coordinate-focus.js +2 -0
  517. package/dist/hooks/coordinate-field/use-coordinate-focus.js.map +1 -0
  518. package/dist/hooks/coordinate-field/use-coordinate-paste.d.ts +21 -0
  519. package/dist/hooks/coordinate-field/use-coordinate-paste.js +2 -0
  520. package/dist/hooks/coordinate-field/use-coordinate-paste.js.map +1 -0
  521. package/dist/hooks/coordinate-field/use-timeout-cleanup.d.ts +6 -0
  522. package/dist/hooks/coordinate-field/use-timeout-cleanup.js +2 -0
  523. package/dist/hooks/coordinate-field/use-timeout-cleanup.js.map +1 -0
  524. package/dist/hooks/kanban/index.d.ts +93 -0
  525. package/dist/hooks/kanban/index.js +2 -0
  526. package/dist/hooks/kanban/index.js.map +1 -0
  527. package/dist/hooks/use-tree/state/index.js +2 -0
  528. package/dist/index.d.ts +58 -61
  529. package/dist/index.js +1 -1
  530. package/dist/index.module.css +19 -0
  531. package/dist/lib/utils.d.ts +1 -17
  532. package/dist/lib/utils.js +1 -1
  533. package/dist/lib/utils.js.map +1 -1
  534. package/dist/metafile-esm.json +1 -1
  535. package/dist/providers/theme-provider.d.ts +1 -1
  536. package/dist/providers/theme-provider.js +1 -1
  537. package/dist/providers/theme-provider.js.map +1 -1
  538. package/package.json +33 -46
  539. package/dist/components/accordion/styles.d.ts +0 -56
  540. package/dist/components/accordion/styles.js +0 -2
  541. package/dist/components/accordion/styles.js.map +0 -1
  542. package/dist/components/action-bar/styles.d.ts +0 -5
  543. package/dist/components/action-bar/styles.js +0 -2
  544. package/dist/components/action-bar/styles.js.map +0 -1
  545. package/dist/components/avatar/styles.d.ts +0 -48
  546. package/dist/components/avatar/styles.js +0 -2
  547. package/dist/components/avatar/styles.js.map +0 -1
  548. package/dist/components/badge/styles.d.ts +0 -32
  549. package/dist/components/badge/styles.js +0 -2
  550. package/dist/components/badge/styles.js.map +0 -1
  551. package/dist/components/breadcrumbs/styles.d.ts +0 -48
  552. package/dist/components/breadcrumbs/styles.js +0 -2
  553. package/dist/components/breadcrumbs/styles.js.map +0 -1
  554. package/dist/components/button/styles.d.ts +0 -129
  555. package/dist/components/button/styles.js +0 -2
  556. package/dist/components/button/styles.js.map +0 -1
  557. package/dist/components/checkbox/styles.d.ts +0 -54
  558. package/dist/components/checkbox/styles.js +0 -2
  559. package/dist/components/checkbox/styles.js.map +0 -1
  560. package/dist/components/chip/styles.d.ts +0 -247
  561. package/dist/components/chip/styles.js +0 -2
  562. package/dist/components/chip/styles.js.map +0 -1
  563. package/dist/components/classification-badge/styles.d.ts +0 -38
  564. package/dist/components/classification-badge/styles.js +0 -2
  565. package/dist/components/classification-badge/styles.js.map +0 -1
  566. package/dist/components/classification-banner/styles.d.ts +0 -38
  567. package/dist/components/classification-banner/styles.js +0 -2
  568. package/dist/components/classification-banner/styles.js.map +0 -1
  569. package/dist/components/color-picker/styles.d.ts +0 -42
  570. package/dist/components/color-picker/styles.js +0 -2
  571. package/dist/components/color-picker/styles.js.map +0 -1
  572. package/dist/components/combobox-field/styles.d.ts +0 -72
  573. package/dist/components/combobox-field/styles.js +0 -2
  574. package/dist/components/combobox-field/styles.js.map +0 -1
  575. package/dist/components/date-field/styles.d.ts +0 -59
  576. package/dist/components/date-field/styles.js +0 -2
  577. package/dist/components/date-field/styles.js.map +0 -1
  578. package/dist/components/details-list/styles.d.ts +0 -65
  579. package/dist/components/details-list/styles.js +0 -2
  580. package/dist/components/details-list/styles.js.map +0 -1
  581. package/dist/components/dialog/styles.d.ts +0 -60
  582. package/dist/components/dialog/styles.js +0 -2
  583. package/dist/components/dialog/styles.js.map +0 -1
  584. package/dist/components/divider/styles.d.ts +0 -5
  585. package/dist/components/divider/styles.js +0 -2
  586. package/dist/components/divider/styles.js.map +0 -1
  587. package/dist/components/drawer/styles.d.ts +0 -152
  588. package/dist/components/drawer/styles.js +0 -2
  589. package/dist/components/drawer/styles.js.map +0 -1
  590. package/dist/components/hero/styles.d.ts +0 -48
  591. package/dist/components/hero/styles.js +0 -2
  592. package/dist/components/hero/styles.js.map +0 -1
  593. package/dist/components/hotkey/hotkey-set.d.ts +0 -9
  594. package/dist/components/hotkey/hotkey-set.js +0 -2
  595. package/dist/components/hotkey/hotkey-set.js.map +0 -1
  596. package/dist/components/hotkey/styles.d.ts +0 -53
  597. package/dist/components/hotkey/styles.js +0 -2
  598. package/dist/components/hotkey/styles.js.map +0 -1
  599. package/dist/components/icon/styles.d.ts +0 -5
  600. package/dist/components/icon/styles.js +0 -2
  601. package/dist/components/icon/styles.js.map +0 -1
  602. package/dist/components/input/styles.d.ts +0 -142
  603. package/dist/components/input/styles.js +0 -2
  604. package/dist/components/input/styles.js.map +0 -1
  605. package/dist/components/label/styles.d.ts +0 -5
  606. package/dist/components/label/styles.js +0 -2
  607. package/dist/components/label/styles.js.map +0 -1
  608. package/dist/components/lines/styles.d.ts +0 -32
  609. package/dist/components/lines/styles.js +0 -2
  610. package/dist/components/lines/styles.js.map +0 -1
  611. package/dist/components/link/styles.d.ts +0 -5
  612. package/dist/components/link/styles.js +0 -2
  613. package/dist/components/link/styles.js.map +0 -1
  614. package/dist/components/menu/styles.d.ts +0 -71
  615. package/dist/components/menu/styles.js +0 -2
  616. package/dist/components/menu/styles.js.map +0 -1
  617. package/dist/components/notice/styles.d.ts +0 -60
  618. package/dist/components/notice/styles.js +0 -2
  619. package/dist/components/notice/styles.js.map +0 -1
  620. package/dist/components/options/styles.d.ts +0 -72
  621. package/dist/components/options/styles.js +0 -2
  622. package/dist/components/options/styles.js.map +0 -1
  623. package/dist/components/popover/body.d.ts +0 -8
  624. package/dist/components/popover/body.js +0 -4
  625. package/dist/components/popover/body.js.map +0 -1
  626. package/dist/components/popover/styles.d.ts +0 -48
  627. package/dist/components/popover/styles.js +0 -2
  628. package/dist/components/popover/styles.js.map +0 -1
  629. package/dist/components/query-builder/styles.d.ts +0 -152
  630. package/dist/components/query-builder/styles.js +0 -2
  631. package/dist/components/query-builder/styles.js.map +0 -1
  632. package/dist/components/radio/styles.d.ts +0 -54
  633. package/dist/components/radio/styles.js +0 -2
  634. package/dist/components/radio/styles.js.map +0 -1
  635. package/dist/components/search-field/styles.d.ts +0 -53
  636. package/dist/components/search-field/styles.js +0 -2
  637. package/dist/components/search-field/styles.js.map +0 -1
  638. package/dist/components/select-field/styles.d.ts +0 -66
  639. package/dist/components/select-field/styles.js +0 -2
  640. package/dist/components/select-field/styles.js.map +0 -1
  641. package/dist/components/sidenav/styles.d.ts +0 -156
  642. package/dist/components/sidenav/styles.js +0 -2
  643. package/dist/components/sidenav/styles.js.map +0 -1
  644. package/dist/components/skeleton/styles.d.ts +0 -23
  645. package/dist/components/skeleton/styles.js +0 -2
  646. package/dist/components/skeleton/styles.js.map +0 -1
  647. package/dist/components/slider/styles.d.ts +0 -84
  648. package/dist/components/slider/styles.js +0 -2
  649. package/dist/components/slider/styles.js.map +0 -1
  650. package/dist/components/switch/styles.d.ts +0 -44
  651. package/dist/components/switch/styles.js +0 -2
  652. package/dist/components/switch/styles.js.map +0 -1
  653. package/dist/components/table/styles.d.ts +0 -134
  654. package/dist/components/table/styles.js +0 -2
  655. package/dist/components/table/styles.js.map +0 -1
  656. package/dist/components/tabs/styles.d.ts +0 -48
  657. package/dist/components/tabs/styles.js +0 -2
  658. package/dist/components/tabs/styles.js.map +0 -1
  659. package/dist/components/text-area-field/styles.d.ts +0 -54
  660. package/dist/components/text-area-field/styles.js +0 -2
  661. package/dist/components/text-area-field/styles.js.map +0 -1
  662. package/dist/components/text-field/styles.d.ts +0 -54
  663. package/dist/components/text-field/styles.js +0 -2
  664. package/dist/components/text-field/styles.js.map +0 -1
  665. package/dist/components/time-field/styles.d.ts +0 -69
  666. package/dist/components/time-field/styles.js +0 -2
  667. package/dist/components/time-field/styles.js.map +0 -1
  668. package/dist/components/tooltip/styles.d.ts +0 -5
  669. package/dist/components/tooltip/styles.js +0 -2
  670. package/dist/components/tooltip/styles.js.map +0 -1
  671. package/dist/components/tree/styles.d.ts +0 -128
  672. package/dist/components/tree/styles.js +0 -2
  673. package/dist/components/tree/styles.js.map +0 -1
  674. package/dist/index.css +0 -196
  675. package/dist/styles.css +0 -9484
  676. package/dist/tokens/themes.css +0 -882
  677. package/dist/tokens/themes.d.ts +0 -1
  678. package/dist/tokens/tokens.css +0 -202
  679. package/dist/tokens/tokens.d.ts +0 -468
  680. package/dist/tokens/tokens.js +0 -2
  681. package/dist/tokens/tokens.js.map +0 -1
  682. package/dist/tokens/types.d.ts +0 -308
  683. package/dist/variants/variants.css +0 -86
  684. package/dist/variants/variants.d.ts +0 -2
  685. /package/dist/{tokens → components/kanban}/types.js +0 -0
  686. /package/dist/{tokens → components/kanban}/types.js.map +0 -0
@@ -0,0 +1,66 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { CoordinateFieldProps } from './types.js';
3
+ import 'react';
4
+ import 'react-aria-components';
5
+
6
+ /**
7
+ * CoordinateField - A comprehensive coordinate input component with multiple format support
8
+ *
9
+ * Provides accessible coordinate input functionality with support for multiple coordinate
10
+ * systems (DD, DDM, DMS, MGRS, UTM). All values are normalized to Decimal Degrees internally
11
+ * for consistency.
12
+ *
13
+ * @example
14
+ * // Basic coordinate field
15
+ * <CoordinateField label="Location" />
16
+ *
17
+ * @example
18
+ * // Coordinate field with validation
19
+ * <CoordinateField
20
+ * label="Target Coordinates"
21
+ * isRequired
22
+ * isInvalid={hasError}
23
+ * errorMessage="Please enter a valid coordinate"
24
+ * />
25
+ *
26
+ * @example
27
+ * // Coordinate field with specific format
28
+ * <CoordinateField
29
+ * label="Position"
30
+ * format="dms"
31
+ * description="Enter coordinates in Degrees Minutes Seconds format"
32
+ * />
33
+ *
34
+ * @example
35
+ * // Compact coordinate field
36
+ * <CoordinateField
37
+ * label="Coordinates"
38
+ * size="small"
39
+ * format="dd"
40
+ * />
41
+ *
42
+ * @example
43
+ * // Controlled coordinate field
44
+ * <CoordinateField
45
+ * label="Selected Location"
46
+ * value={coordinates}
47
+ * onChange={setCoordinates}
48
+ * />
49
+ *
50
+ * @example
51
+ * // Coordinate field with error handling
52
+ * <CoordinateField
53
+ * label="Target Coordinates"
54
+ * onError={(message, context) => {
55
+ * // message will be "Invalid coordinate value" for validation errors
56
+ * // or "Invalid coordinate format" for paste errors
57
+ * setErrorMessage(message);
58
+ * console.error(message, context);
59
+ * }}
60
+ * isInvalid={!!errorMessage}
61
+ * errorMessage={errorMessage}
62
+ * />
63
+ */
64
+ declare function CoordinateField({ ref, ...props }: CoordinateFieldProps): react_jsx_runtime.JSX.Element;
65
+
66
+ export { CoordinateField };
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+
3
+ import {jsx,jsxs}from'react/jsx-runtime';import'client-only';import {clsx}from'@accelint/design-foundation/lib/utils';import q from'@accelint/icons/check';import W from'@accelint/icons/copy-to-clipboard';import H from'@accelint/icons/global-share';import {filterDOMProps}from'@react-aria/utils';import {useState,useCallback,useMemo}from'react';import {useContextProps,Provider,GroupContext,LabelContext,TextContext,FieldErrorContext,Text,FieldError,composeRenderProps}from'react-aria-components';import {useCoordinateField}from'../../hooks/coordinate-field/index.js';import {Button}from'../button/index.js';import {Dialog}from'../dialog/index.js';import {DialogContent}from'../dialog/content.js';import {DialogFooter}from'../dialog/footer.js';import {DialogTitle}from'../dialog/title.js';import {DialogTrigger}from'../dialog/trigger.js';import {Icon}from'../icon/index.js';import {Label}from'../label/index.js';import {Popover}from'../popover/index.js';import {PopoverContent}from'../popover/content.js';import {PopoverTitle}from'../popover/title.js';import {PopoverTrigger}from'../popover/trigger.js';import {Radio}from'../radio/index.js';import {RadioGroup}from'../radio/group.js';import {CoordinateFieldContext,CoordinateFieldStateContext}from'./context.js';import {getAllCoordinateFormats}from'./coordinate-utils.js';import {CoordinateSegment}from'./segment.js';import {getSegmentLabel}from'./segment-configs.js';import t from'./styles.module.css';import {COORDINATE_SYSTEMS,COORDINATE_FORMAT_LABELS,COORDINATE_FORMAT_NAMES}from'./types.js';import {calculateMaxControlWidth}from'./width-utils.js';function to({ref:S,...p}){[p,S]=useContextProps(p,S,CoordinateFieldContext);const{classNames:s,description:N,label:f,format:C="dd",size:v="medium",showFormatButton:h=true,isDisabled:c=false,isInvalid:Te=false,isRequired:T=false,...b}=p,P=v==="small",M=filterDOMProps(b,{global:true}),E=P&&f?f:b["aria-label"],{state:a,focus:n,paste:l,copy:D,registerTimeout:I,fieldProps:y,labelProps:L,descriptionProps:V,errorProps:w,validation:B,effectiveErrorMessage:k,isInvalid:F}=useCoordinateField(p,E,b["aria-describedby"],b["aria-details"]),$={segmentValues:a.segmentValues,format:C,currentValue:a.currentValue,validationErrors:a.validationErrors,isDisabled:c,isInvalid:F,isRequired:T,size:v,registerTimeout:I},[x,z]=useState(null),_=useCallback(o=>{o&&z(getAllCoordinateFormats(a.currentValue));},[a.currentValue]),G=useMemo(()=>calculateMaxControlWidth(a.editableSegmentConfigs,a.segmentConfigs,h),[a.editableSegmentConfigs,a.segmentConfigs,h]);return jsx(Provider,{values:[[CoordinateFieldContext,p],[CoordinateFieldStateContext,$],[GroupContext,y],[LabelContext,L],[TextContext,{slots:{description:V,errorMessage:w}}],[FieldErrorContext,B]],children:jsxs("div",{...M,...y,ref:S,className:clsx("group/coordinate-field",t.field,s?.field),"data-size":v,"data-disabled":c||null,"data-invalid":F||null,children:[!P&&f&&jsx(Label,{className:s?.label,isDisabled:c,isRequired:T,children:f}),jsxs("div",{className:clsx(t.control,s?.control),style:{width:G},children:[jsx("div",{className:clsx(t.input,s?.input),onPasteCapture:l.handleInputPaste,"data-input-container":true,children:a.segmentConfigs.map((o,m)=>{if(o.type==="literal")return jsx("span",{className:"fg-primary-muted",children:o.value},`${C}-literal-${m}-${o.value}`);const r=a.segmentConfigs.slice(0,m).filter(u=>u.type!=="literal").length;return jsx(CoordinateSegment,{value:a.segmentValues[r]||"",onChange:u=>a.handleSegmentChange(r,u),onFocus:()=>n.setFocusedSegmentIndex(r),onBlur:()=>{n.setFocusedSegmentIndex(-1),a.flushPendingValidation();},onKeyDown:u=>n.handleSegmentKeyDown(r,u),onAutoAdvance:()=>n.focusNextSegment(r),onAutoRetreat:()=>n.focusPreviousSegment(r),placeholder:o.placeholder,maxLength:o.maxLength,pad:o.pad,className:clsx(t.segment,s?.segment),isDisabled:c,allowedChars:o.allowedChars,segmentRef:n.segmentRefs[r],segmentIndex:r,totalSegments:a.editableSegmentConfigs.length,ariaLabel:getSegmentLabel(C,r)},`${C}-segment-${r}`)})}),h&&jsxs(PopoverTrigger,{onOpenChange:_,children:[jsx(Button,{variant:"icon",size:v,color:"mono-bold",className:s?.formatButton,"aria-label":"View coordinate in all formats",isDisabled:!D.isFormatButtonEnabled,children:jsx(Icon,{children:jsx(H,{})})}),jsxs(Popover,{classNames:{popover:t.popover},children:[jsx(PopoverTitle,{className:t.popoverTitle,children:"Copy Coordinates"}),jsx(PopoverContent,{children:x&&COORDINATE_SYSTEMS.map(o=>{const m=x[o],r=D.copiedFormat===o;return jsxs("div",{className:t.formatRow,children:[jsxs("div",{className:t.formatLabels,children:[jsx("span",{className:t.formatLabel,children:COORDINATE_FORMAT_LABELS[o]}),jsx("span",{className:t.formatValue,title:m.value,children:m.value})]}),jsx(Button,{variant:"icon",color:"mono-bold","aria-label":`Copy ${COORDINATE_FORMAT_LABELS[o]} format`,onClick:()=>D.handleCopyFormat(o),isDisabled:!m.isValid,children:jsx(Icon,{children:r?jsx(q,{}):jsx(W,{})})})]},o)})})]})]})]}),N&&!P&&(!F||c)&&jsx(Text,{className:clsx(t.description,s?.description),slot:"description",children:N}),jsx(FieldError,{className:composeRenderProps(s?.error,o=>clsx(t.error,o)),children:k}),jsxs(DialogTrigger,{isOpen:l.showDisambiguationModal,onOpenChange:l.setShowDisambiguationModal,children:[jsx(Button,{className:"hidden",children:"Hidden Trigger"}),jsxs(Dialog,{size:"small",children:[jsx(DialogTitle,{className:t.modalTitle,children:"Select Coordinate Format"}),jsxs(DialogContent,{children:[jsx("p",{className:t.modalDescription,children:"The pasted value matches multiple coordinate formats. Please select the correct interpretation:"}),jsx(RadioGroup,{classNames:{group:t.formatOptions},value:l.selectedDisambiguationFormat,onChange:o=>l.setSelectedDisambiguationFormat(o),children:l.disambiguationMatches.map(o=>jsx(Radio,{value:o.format,children:jsxs("div",{className:t.modalOptionContent,children:[jsx("span",{className:t.formatOptionLabel,children:COORDINATE_FORMAT_NAMES[o.format]}),jsx("span",{className:t.formatOptionValue,children:o.displayString})]})},o.format))})]}),jsxs(DialogFooter,{className:t.modalActions,children:[jsx(Button,{variant:"flat",onPress:()=>l.setShowDisambiguationModal(false),children:"Cancel"}),jsx(Button,{onPress:l.handleDisambiguationSelect,children:"Apply Selected"})]})]})]})]})})}export{to as CoordinateField};//# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/coordinate-field/index.tsx"],"names":["isDisabled","re","isInvalidProp","O","rest","filterDOMProps","ariaLabelForSmallSize","isSmall","labelProp","state","paste","fieldProps","labelProps","Y","errorProps","effectiveErrorMessage","useCoordinateField","format","ie","isInvalid","registerTimeout","handlePopoverOpenChange","setAllCoordinateFormats","getAllCoordinateFormats","calculateMaxControlWidth","Se","jsx","Provider","CoordinateFieldContext","props","Q","CoordinateFieldStateContext","Ne","GroupContext","jsxs","e","te","styles","ae","classNames","size","i","Label","isRequired","maxControlWidth","pe","clsx","d","configIndex","c","newValue","editableIndex","focus","he","config","getSegmentLabel","PopoverTrigger","Button","Pe","fe","copy","R","allCoordinateFormats","COORDINATE_SYSTEMS","ce","formatKey","formatResult","ue","Fe","COORDINATE_FORMAT_LABELS","A","g","Icon","isCopied","CopyToClipboard","descriptionProp","FieldError","composeRenderProps","className","X","j","Z","de","DialogContent","value","ve","match","COORDINATE_FORMAT_NAMES"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { clsx } from '@accelint/design-foundation/lib/utils';\nimport Check from '@accelint/icons/check';\nimport CopyToClipboard from '@accelint/icons/copy-to-clipboard';\nimport GlobalShare from '@accelint/icons/global-share';\nimport { filterDOMProps } from '@react-aria/utils';\nimport { useCallback, useMemo, useState } from 'react';\nimport {\n Text as AriaText,\n composeRenderProps,\n FieldError,\n FieldErrorContext,\n GroupContext,\n LabelContext,\n Provider,\n TextContext,\n useContextProps,\n} from 'react-aria-components';\nimport { useCoordinateField } from '../../hooks/coordinate-field';\nimport { Button } from '../button';\nimport { Dialog } from '../dialog';\nimport { DialogContent } from '../dialog/content';\nimport { DialogFooter } from '../dialog/footer';\nimport { DialogTitle } from '../dialog/title';\nimport { DialogTrigger } from '../dialog/trigger';\nimport { Icon } from '../icon';\nimport { Label } from '../label';\nimport { Popover } from '../popover';\nimport { PopoverContent } from '../popover/content';\nimport { PopoverTitle } from '../popover/title';\nimport { PopoverTrigger } from '../popover/trigger';\nimport { Radio } from '../radio';\nimport { RadioGroup } from '../radio/group';\nimport { CoordinateFieldContext, CoordinateFieldStateContext } from './context';\nimport {\n type CoordinateFormatResult,\n getAllCoordinateFormats,\n} from './coordinate-utils';\nimport { CoordinateSegment } from './segment';\nimport { getSegmentLabel } from './segment-configs';\nimport styles from './styles.module.css';\nimport {\n COORDINATE_FORMAT_LABELS,\n COORDINATE_FORMAT_NAMES,\n COORDINATE_SYSTEMS,\n type CoordinateSystem,\n} from './types';\nimport { calculateMaxControlWidth } from './width-utils';\nimport type { CoordinateFieldProps } from './types';\n\n/**\n * CoordinateField - A comprehensive coordinate input component with multiple format support\n *\n * Provides accessible coordinate input functionality with support for multiple coordinate\n * systems (DD, DDM, DMS, MGRS, UTM). All values are normalized to Decimal Degrees internally\n * for consistency.\n *\n * @example\n * // Basic coordinate field\n * <CoordinateField label=\"Location\" />\n *\n * @example\n * // Coordinate field with validation\n * <CoordinateField\n * label=\"Target Coordinates\"\n * isRequired\n * isInvalid={hasError}\n * errorMessage=\"Please enter a valid coordinate\"\n * />\n *\n * @example\n * // Coordinate field with specific format\n * <CoordinateField\n * label=\"Position\"\n * format=\"dms\"\n * description=\"Enter coordinates in Degrees Minutes Seconds format\"\n * />\n *\n * @example\n * // Compact coordinate field\n * <CoordinateField\n * label=\"Coordinates\"\n * size=\"small\"\n * format=\"dd\"\n * />\n *\n * @example\n * // Controlled coordinate field\n * <CoordinateField\n * label=\"Selected Location\"\n * value={coordinates}\n * onChange={setCoordinates}\n * />\n *\n * @example\n * // Coordinate field with error handling\n * <CoordinateField\n * label=\"Target Coordinates\"\n * onError={(message, context) => {\n * // message will be \"Invalid coordinate value\" for validation errors\n * // or \"Invalid coordinate format\" for paste errors\n * setErrorMessage(message);\n * console.error(message, context);\n * }}\n * isInvalid={!!errorMessage}\n * errorMessage={errorMessage}\n * />\n */\nexport function CoordinateField({ ref, ...props }: CoordinateFieldProps) {\n [props, ref] = useContextProps(props, ref, CoordinateFieldContext);\n\n const {\n classNames,\n description: descriptionProp,\n label: labelProp,\n format = 'dd',\n size = 'medium',\n showFormatButton = true,\n isDisabled = false,\n isInvalid: isInvalidProp = false,\n isRequired = false,\n ...rest\n } = props;\n\n const isSmall = size === 'small';\n\n const DOMProps = filterDOMProps(rest, { global: true });\n\n // When size is small and label is hidden, use aria-label instead of aria-labelledby\n // to ensure screen readers have an accessible name\n const ariaLabelForSmallSize =\n isSmall && labelProp ? labelProp : rest['aria-label'];\n\n const {\n state,\n focus,\n paste,\n copy,\n registerTimeout,\n fieldProps,\n labelProps,\n descriptionProps,\n errorProps,\n validation,\n effectiveErrorMessage,\n isInvalid,\n } = useCoordinateField(\n props,\n ariaLabelForSmallSize,\n rest['aria-describedby'],\n rest['aria-details'],\n );\n\n const componentState = {\n segmentValues: state.segmentValues,\n format,\n currentValue: state.currentValue,\n validationErrors: state.validationErrors,\n isDisabled,\n isInvalid,\n isRequired,\n size,\n registerTimeout,\n };\n\n // Store all coordinate formats, calculated only when popover opens\n const [allCoordinateFormats, setAllCoordinateFormats] = useState<Record<\n CoordinateSystem,\n CoordinateFormatResult\n > | null>(null);\n\n const handlePopoverOpenChange = useCallback(\n (isOpen: boolean) => {\n if (isOpen) {\n setAllCoordinateFormats(getAllCoordinateFormats(state.currentValue));\n }\n },\n [state.currentValue],\n );\n\n // Calculate the maximum width needed for the control container\n // This keeps the outlined container at a fixed width while segments animate\n const maxControlWidth = useMemo(\n () =>\n calculateMaxControlWidth(\n state.editableSegmentConfigs,\n state.segmentConfigs,\n showFormatButton,\n ),\n [state.editableSegmentConfigs, state.segmentConfigs, showFormatButton],\n );\n\n return (\n <Provider\n values={[\n [CoordinateFieldContext, props],\n [CoordinateFieldStateContext, componentState],\n [GroupContext, fieldProps],\n [LabelContext, labelProps],\n [\n TextContext,\n {\n slots: {\n description: descriptionProps,\n errorMessage: errorProps,\n },\n },\n ],\n [FieldErrorContext, validation],\n ]}\n >\n <div\n {...DOMProps}\n {...fieldProps}\n ref={ref}\n className={clsx(\n 'group/coordinate-field',\n styles.field,\n classNames?.field,\n )}\n data-size={size}\n data-disabled={isDisabled || null}\n data-invalid={isInvalid || null}\n >\n {!isSmall && labelProp && (\n <Label\n className={classNames?.label}\n isDisabled={isDisabled}\n isRequired={isRequired}\n >\n {labelProp}\n </Label>\n )}\n\n <div\n className={clsx(styles.control, classNames?.control)}\n style={{ width: maxControlWidth }}\n >\n <div\n className={clsx(styles.input, classNames?.input)}\n onPasteCapture={paste.handleInputPaste}\n data-input-container\n >\n {state.segmentConfigs.map((config, configIndex) => {\n if (config.type === 'literal') {\n return (\n <span\n key={`${format}-literal-${configIndex}-${config.value}`}\n className='fg-primary-muted'\n >\n {config.value}\n </span>\n );\n }\n\n const editableIndex = state.segmentConfigs\n .slice(0, configIndex)\n .filter((c) => c.type !== 'literal').length;\n\n return (\n <CoordinateSegment\n key={`${format}-segment-${editableIndex}`}\n value={state.segmentValues[editableIndex] || ''}\n onChange={(newValue) =>\n state.handleSegmentChange(editableIndex, newValue)\n }\n onFocus={() => focus.setFocusedSegmentIndex(editableIndex)}\n onBlur={() => {\n focus.setFocusedSegmentIndex(-1);\n state.flushPendingValidation();\n }}\n onKeyDown={(e) =>\n focus.handleSegmentKeyDown(editableIndex, e)\n }\n onAutoAdvance={() => focus.focusNextSegment(editableIndex)}\n onAutoRetreat={() =>\n focus.focusPreviousSegment(editableIndex)\n }\n placeholder={config.placeholder}\n maxLength={config.maxLength}\n pad={config.pad}\n className={clsx(styles.segment, classNames?.segment)}\n isDisabled={isDisabled}\n allowedChars={config.allowedChars}\n segmentRef={focus.segmentRefs[editableIndex]}\n segmentIndex={editableIndex}\n totalSegments={state.editableSegmentConfigs.length}\n ariaLabel={getSegmentLabel(format, editableIndex)}\n />\n );\n })}\n </div>\n\n {showFormatButton && (\n <PopoverTrigger onOpenChange={handlePopoverOpenChange}>\n <Button\n variant='icon'\n size={size}\n color='mono-bold'\n className={classNames?.formatButton}\n aria-label='View coordinate in all formats'\n isDisabled={!copy.isFormatButtonEnabled}\n >\n <Icon>\n <GlobalShare />\n </Icon>\n </Button>\n <Popover classNames={{ popover: styles.popover }}>\n <PopoverTitle className={styles.popoverTitle}>\n Copy Coordinates\n </PopoverTitle>\n <PopoverContent>\n {allCoordinateFormats &&\n COORDINATE_SYSTEMS.map((formatKey) => {\n const formatResult = allCoordinateFormats[formatKey];\n const isCopied = copy.copiedFormat === formatKey;\n\n return (\n <div key={formatKey} className={styles.formatRow}>\n <div className={styles.formatLabels}>\n <span className={styles.formatLabel}>\n {COORDINATE_FORMAT_LABELS[formatKey]}\n </span>\n <span\n className={styles.formatValue}\n title={formatResult.value}\n >\n {formatResult.value}\n </span>\n </div>\n <Button\n variant='icon'\n color='mono-bold'\n aria-label={`Copy ${COORDINATE_FORMAT_LABELS[formatKey]} format`}\n onClick={() => copy.handleCopyFormat(formatKey)}\n isDisabled={!formatResult.isValid}\n >\n <Icon>\n {isCopied ? <Check /> : <CopyToClipboard />}\n </Icon>\n </Button>\n </div>\n );\n })}\n </PopoverContent>\n </Popover>\n </PopoverTrigger>\n )}\n </div>\n\n {/* Description is hidden when field is invalid (unless disabled) to make room for error message */}\n {descriptionProp && !isSmall && (!isInvalid || isDisabled) && (\n <AriaText\n className={clsx(styles.description, classNames?.description)}\n slot='description'\n >\n {descriptionProp}\n </AriaText>\n )}\n\n <FieldError\n className={composeRenderProps(classNames?.error, (className) =>\n clsx(styles.error, className),\n )}\n >\n {effectiveErrorMessage}\n </FieldError>\n\n <DialogTrigger\n isOpen={paste.showDisambiguationModal}\n onOpenChange={paste.setShowDisambiguationModal}\n >\n <Button className='hidden'>Hidden Trigger</Button>\n <Dialog size='small'>\n <DialogTitle className={styles.modalTitle}>\n Select Coordinate Format\n </DialogTitle>\n <DialogContent>\n <p className={styles.modalDescription}>\n The pasted value matches multiple coordinate formats. Please\n select the correct interpretation:\n </p>\n\n <RadioGroup\n classNames={{ group: styles.formatOptions }}\n value={paste.selectedDisambiguationFormat}\n onChange={(value) =>\n paste.setSelectedDisambiguationFormat(\n value as CoordinateSystem,\n )\n }\n >\n {paste.disambiguationMatches.map((match) => (\n <Radio key={match.format} value={match.format}>\n <div className={styles.modalOptionContent}>\n <span className={styles.formatOptionLabel}>\n {COORDINATE_FORMAT_NAMES[match.format]}\n </span>\n <span className={styles.formatOptionValue}>\n {match.displayString}\n </span>\n </div>\n </Radio>\n ))}\n </RadioGroup>\n </DialogContent>\n <DialogFooter className={styles.modalActions}>\n <Button\n variant='flat'\n onPress={() => paste.setShowDisambiguationModal(false)}\n >\n Cancel\n </Button>\n <Button onPress={paste.handleDisambiguationSelect}>\n Apply Selected\n </Button>\n </DialogFooter>\n </Dialog>\n </DialogTrigger>\n </div>\n </Provider>\n );\n}\n"]}
@@ -0,0 +1,163 @@
1
+ import { CoordinateSystem, SegmentConfig } from './types.js';
2
+ import 'react';
3
+ import 'react-aria-components';
4
+
5
+ /**
6
+ * Coordinate Field Segment Configurations
7
+ *
8
+ * This file defines the segment layouts for each supported coordinate system format.
9
+ * Each configuration specifies the editable segments and literal separators that make up
10
+ * the coordinate input for that format.
11
+ *
12
+ * Supported formats:
13
+ * - DD (Decimal Degrees) - 2 editable segments
14
+ * - DDM (Degrees Decimal Minutes) - 6 editable segments
15
+ * - DMS (Degrees Minutes Seconds) - 8 editable segments
16
+ * - MGRS (Military Grid Reference System) - 5 editable segments
17
+ * - UTM (Universal Transverse Mercator) - 4 editable segments
18
+ *
19
+ * References:
20
+ * - DD parser: /packages/geo/src/coordinates/latlon/decimal-degrees/parser.ts
21
+ * - DDM parser: /packages/geo/src/coordinates/latlon/degrees-decimal-minutes/parser.ts
22
+ * - DMS parser: /packages/geo/src/coordinates/latlon/degrees-minutes-seconds/parser.ts
23
+ * - MGRS parser: /packages/geo/src/coordinates/mgrs/parser.ts
24
+ * - UTM parser: /packages/geo/src/coordinates/utm/parser.ts
25
+ */
26
+
27
+ /**
28
+ * DD (Decimal Degrees) Segment Configuration
29
+ *
30
+ * Format: [lat_deg], [lon_deg]
31
+ * Example: 89.765432, -123.456789
32
+ *
33
+ * Segments:
34
+ * - Latitude degrees: -90 to 90, allows negative sign, decimals, 0-9
35
+ * - Longitude degrees: -180 to 180, allows negative sign, decimals, 0-9
36
+ *
37
+ * Total segments: 2 editable
38
+ */
39
+ declare const ddSegmentConfigs: SegmentConfig[];
40
+ /**
41
+ * DDM (Degrees Decimal Minutes) Segment Configuration
42
+ *
43
+ * Format: [lat_deg]° [lat_min]' [lat_dir], [lon_deg]° [lon_min]' [lon_dir]
44
+ * Example: 89° 45.9259' N, 123° 27.4073' W
45
+ *
46
+ * Segments:
47
+ * - Latitude degrees: 0-90, whole number only (no decimals)
48
+ * - Latitude minutes: 0-59.9999, decimals allowed
49
+ * - Latitude direction: N or S
50
+ * - Longitude degrees: 0-180, whole number only (no decimals)
51
+ * - Longitude minutes: 0-59.9999, decimals allowed
52
+ * - Longitude direction: E or W
53
+ *
54
+ * Total segments: 6 editable
55
+ */
56
+ declare const ddmSegmentConfigs: SegmentConfig[];
57
+ /**
58
+ * DMS (Degrees Minutes Seconds) Segment Configuration
59
+ *
60
+ * Format: [lat_deg]° [lat_min]' [lat_sec]" [lat_dir], [lon_deg]° [lon_min]' [lon_sec]" [lon_dir]
61
+ * Example: 89° 45' 55.56" N, 123° 27' 24.44" W
62
+ *
63
+ * Segments:
64
+ * - Latitude degrees: 0-90, whole number only (no decimals)
65
+ * - Latitude minutes: 0-59, whole number only (no decimals)
66
+ * - Latitude seconds: 0-59.999, decimals allowed
67
+ * - Latitude direction: N or S
68
+ * - Longitude degrees: 0-180, whole number only (no decimals)
69
+ * - Longitude minutes: 0-59, whole number only (no decimals)
70
+ * - Longitude seconds: 0-59.999, decimals allowed
71
+ * - Longitude direction: E or W
72
+ *
73
+ * Total segments: 8 editable
74
+ */
75
+ declare const dmsSegmentConfigs: SegmentConfig[];
76
+ /**
77
+ * MGRS (Military Grid Reference System) Segment Configuration
78
+ *
79
+ * Format: [zone][band] [grid_100km] [easting] [northing]
80
+ * Example: 18T WM 12345 67890
81
+ *
82
+ * Segments:
83
+ * - Zone: 1-60, 2 digits
84
+ * - Band: C-X (excluding I and O), 1 letter
85
+ * - Grid 100km: 2 letters (A-Z excluding I and O)
86
+ * - Easting: 5 digits (can be 1-5 based on precision)
87
+ * - Northing: 5 digits (can be 1-5 based on precision)
88
+ *
89
+ * Total segments: 5 editable
90
+ *
91
+ * Reference: /packages/geo/src/coordinates/mgrs/parser.ts
92
+ * Pattern: /^((?:..?)?)(\w?)\s*((?:\w{2})?)\s*(?:(\d+(?:\.\d*)?)?)\s*(?:(\d+(?:\.\d*)?)?)$/i
93
+ */
94
+ declare const mgrsSegmentConfigs: SegmentConfig[];
95
+ /**
96
+ * UTM (Universal Transverse Mercator) Segment Configuration
97
+ *
98
+ * Format: [zone][hemisphere] [easting] [northing]
99
+ * Example: 18N 585628 4511644
100
+ *
101
+ * Segments:
102
+ * - Zone: 1-60, 2 digits
103
+ * - Hemisphere: N or S, 1 letter
104
+ * - Easting: 6-7 digits
105
+ * - Northing: 7 digits
106
+ *
107
+ * Total segments: 4 editable
108
+ *
109
+ * Reference: /packages/geo/src/coordinates/utm/parser.ts
110
+ * Pattern: /^((?:..)?)\s*(\w?)\s*(?:(\d+(?:\.\d*)?)?)\s*(?:(\d+(?:\.\d*)?)?)$/i
111
+ */
112
+ declare const utmSegmentConfigs: SegmentConfig[];
113
+ /**
114
+ * Get segment configurations for a specific coordinate system
115
+ *
116
+ * @param format - The coordinate system format
117
+ * @returns Array of segment configurations for the specified format
118
+ */
119
+ declare function getSegmentConfigs(format: CoordinateSystem): SegmentConfig[];
120
+ /**
121
+ * Get format description with example
122
+ *
123
+ * Provides a user-friendly description of the coordinate format with an example value.
124
+ * These descriptions can be used as helper text to guide users on the expected format.
125
+ *
126
+ * @param format - The coordinate system format
127
+ * @returns Description string with format example
128
+ */
129
+ declare function getFormatDescription(format: CoordinateSystem): string;
130
+ /**
131
+ * Get editable segment count for a format
132
+ *
133
+ * Returns the number of editable segments (excluding literal separators) for each format.
134
+ * This is useful for initializing segment values and validation.
135
+ *
136
+ * @param format - The coordinate system format
137
+ * @returns Number of editable segments
138
+ */
139
+ declare function getEditableSegmentCount(format: CoordinateSystem): number;
140
+ /**
141
+ * Validate segment count for each format
142
+ *
143
+ * Expected editable segment counts:
144
+ * - DD: 2 segments (lat, lon)
145
+ * - DDM: 6 segments (lat_deg, lat_min, lat_dir, lon_deg, lon_min, lon_dir)
146
+ * - DMS: 8 segments (lat_deg, lat_min, lat_sec, lat_dir, lon_deg, lon_min, lon_sec, lon_dir)
147
+ * - MGRS: 5 segments (zone, band, grid, easting, northing)
148
+ * - UTM: 4 segments (zone, hemisphere, easting, northing)
149
+ */
150
+ declare const EXPECTED_SEGMENT_COUNTS: Record<CoordinateSystem, number>;
151
+ /**
152
+ * Get semantic accessibility label for a segment based on format and editable index
153
+ *
154
+ * Provides descriptive labels for screen readers (e.g., "Latitude degrees", "Longitude minutes")
155
+ * to improve accessibility beyond generic "Coordinate segment 1" announcements.
156
+ *
157
+ * @param format - The coordinate system format
158
+ * @param editableIndex - The index of the editable segment (0-based, excluding literals)
159
+ * @returns Semantic label string for the segment
160
+ */
161
+ declare function getSegmentLabel(format: CoordinateSystem, editableIndex: number): string;
162
+
163
+ export { EXPECTED_SEGMENT_COUNTS, ddSegmentConfigs, ddmSegmentConfigs, dmsSegmentConfigs, getEditableSegmentCount, getFormatDescription, getSegmentConfigs, getSegmentLabel, mgrsSegmentConfigs, utmSegmentConfigs };
@@ -0,0 +1,2 @@
1
+ const a=[{type:"numeric",placeholder:"00.000000",allowedChars:"[0-9\\-\\.]",maxLength:10,pad:.25},{type:"literal",value:", "},{type:"numeric",placeholder:"-000.000000",allowedChars:"[0-9\\-\\.]",maxLength:11,pad:.5}],n=[{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"literal",value:"\xB0 "},{type:"numeric",placeholder:"00.0000",allowedChars:"[0-9\\.]",maxLength:7,pad:.25},{type:"literal",value:"' "},{type:"directional",placeholder:"N",allowedChars:"[NS]",maxLength:1,pad:0},{type:"literal",value:", "},{type:"numeric",placeholder:"000",allowedChars:"[0-9]",maxLength:3,pad:.25},{type:"literal",value:"\xB0 "},{type:"numeric",placeholder:"00.0000",allowedChars:"[0-9\\.]",maxLength:7,pad:.5},{type:"literal",value:"' "},{type:"directional",placeholder:"W",allowedChars:"[EW]",maxLength:1,pad:0}],l=[{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"literal",value:"\xB0 "},{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"literal",value:"' "},{type:"numeric",placeholder:"00.00",allowedChars:"[0-9\\.]",maxLength:5,pad:.25},{type:"literal",value:'" '},{type:"directional",placeholder:"N",allowedChars:"[NS]",maxLength:1,pad:0},{type:"literal",value:", "},{type:"numeric",placeholder:"000",allowedChars:"[0-9]",maxLength:3,pad:.25},{type:"literal",value:"\xB0 "},{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"literal",value:"' "},{type:"numeric",placeholder:"00.00",allowedChars:"[0-9\\.]",maxLength:5,pad:.25},{type:"literal",value:'" '},{type:"directional",placeholder:"W",allowedChars:"[EW]",maxLength:1,pad:0}],o=[{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"alphanumeric",placeholder:"T",allowedChars:"[C-HJ-NP-X]",maxLength:1,pad:0},{type:"literal",value:" "},{type:"alphanumeric",placeholder:"WM",allowedChars:"[A-HJ-NP-Z]",maxLength:2,pad:0},{type:"literal",value:" "},{type:"numeric",placeholder:"00000",allowedChars:"[0-9]",maxLength:5,pad:.25},{type:"literal",value:" "},{type:"numeric",placeholder:"00000",allowedChars:"[0-9]",maxLength:5,pad:.5}],d=[{type:"numeric",placeholder:"00",allowedChars:"[0-9]",maxLength:2,pad:.25},{type:"directional",placeholder:"N",allowedChars:"[NS]",maxLength:1,pad:0},{type:"literal",value:" "},{type:"numeric",placeholder:"000000",allowedChars:"[0-9]",maxLength:7,pad:.25},{type:"literal",value:" "},{type:"numeric",placeholder:"0000000",allowedChars:"[0-9]",maxLength:7,pad:.5}];function s(t){switch(t){case "dd":return a;case "ddm":return n;case "dms":return l;case "mgrs":return o;case "utm":return d;default:return a}}function c(t){switch(t){case "dd":return "Example: 40.7128, -74.0060 (New York City)";case "ddm":return "Example: 40\xB0 42.768' N, 74\xB0 0.360' W (New York City)";case "dms":return `Example: 40\xB0 42' 46.08" N, 74\xB0 0' 21.60" W (New York City)`;case "mgrs":return "Example: 18T WL 80654 06346 (New York City)";case "utm":return "Example: 18N 585628 4511644 (New York City)";default:return ""}}function p(t){return s(t).filter(r=>r.type!=="literal").length}const m={dd:2,ddm:6,dms:8,mgrs:5,utm:4};function g(t,e){switch(t){case "dd":return e===0?"Latitude":"Longitude";case "ddm":switch(e){case 0:return "Latitude degrees";case 1:return "Latitude minutes";case 2:return "Latitude direction";case 3:return "Longitude degrees";case 4:return "Longitude minutes";case 5:return "Longitude direction";default:return `Coordinate segment ${e+1}`}case "dms":switch(e){case 0:return "Latitude degrees";case 1:return "Latitude minutes";case 2:return "Latitude seconds";case 3:return "Latitude direction";case 4:return "Longitude degrees";case 5:return "Longitude minutes";case 6:return "Longitude seconds";case 7:return "Longitude direction";default:return `Coordinate segment ${e+1}`}case "mgrs":switch(e){case 0:return "MGRS zone";case 1:return "MGRS band";case 2:return "MGRS grid square";case 3:return "MGRS easting";case 4:return "MGRS northing";default:return `Coordinate segment ${e+1}`}case "utm":switch(e){case 0:return "UTM zone";case 1:return "UTM hemisphere";case 2:return "UTM easting";case 3:return "UTM northing";default:return `Coordinate segment ${e+1}`}default:return `Coordinate segment ${e+1}`}}export{m as EXPECTED_SEGMENT_COUNTS,a as ddSegmentConfigs,n as ddmSegmentConfigs,l as dmsSegmentConfigs,p as getEditableSegmentCount,c as getFormatDescription,s as getSegmentConfigs,g as getSegmentLabel,o as mgrsSegmentConfigs,d as utmSegmentConfigs};//# sourceMappingURL=segment-configs.js.map
2
+ //# sourceMappingURL=segment-configs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/coordinate-field/segment-configs.ts"],"names":["ddSegmentConfigs","ddmSegmentConfigs","dmsSegmentConfigs","mgrsSegmentConfigs","utmSegmentConfigs","getSegmentConfigs","format","getFormatDescription","getEditableSegmentCount","config","EXPECTED_SEGMENT_COUNTS","getSegmentLabel","editableIndex"],"mappings":"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","file":"segment-configs.js","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/**\n * Coordinate Field Segment Configurations\n *\n * This file defines the segment layouts for each supported coordinate system format.\n * Each configuration specifies the editable segments and literal separators that make up\n * the coordinate input for that format.\n *\n * Supported formats:\n * - DD (Decimal Degrees) - 2 editable segments\n * - DDM (Degrees Decimal Minutes) - 6 editable segments\n * - DMS (Degrees Minutes Seconds) - 8 editable segments\n * - MGRS (Military Grid Reference System) - 5 editable segments\n * - UTM (Universal Transverse Mercator) - 4 editable segments\n *\n * References:\n * - DD parser: /packages/geo/src/coordinates/latlon/decimal-degrees/parser.ts\n * - DDM parser: /packages/geo/src/coordinates/latlon/degrees-decimal-minutes/parser.ts\n * - DMS parser: /packages/geo/src/coordinates/latlon/degrees-minutes-seconds/parser.ts\n * - MGRS parser: /packages/geo/src/coordinates/mgrs/parser.ts\n * - UTM parser: /packages/geo/src/coordinates/utm/parser.ts\n */\n\nimport type { CoordinateSystem, SegmentConfig } from './types';\n\n/** Padding for numeric segments (0.25ch ≈ quarter character width for visual spacing) */\nconst NUMERIC_PAD = 0.25;\n\n/** Larger padding for final segment to account for container edge (0.5ch ≈ half character) */\nconst LAST_PAD = 0.5;\n\n/**\n * DD (Decimal Degrees) Segment Configuration\n *\n * Format: [lat_deg], [lon_deg]\n * Example: 89.765432, -123.456789\n *\n * Segments:\n * - Latitude degrees: -90 to 90, allows negative sign, decimals, 0-9\n * - Longitude degrees: -180 to 180, allows negative sign, decimals, 0-9\n *\n * Total segments: 2 editable\n */\nexport const ddSegmentConfigs: SegmentConfig[] = [\n {\n type: 'numeric',\n placeholder: '00.000000',\n allowedChars: '[0-9\\\\-\\\\.]',\n maxLength: 10, // Max: -90.123456\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: ', ',\n },\n {\n type: 'numeric',\n placeholder: '-000.000000',\n allowedChars: '[0-9\\\\-\\\\.]',\n maxLength: 11, // Max: -180.123456\n pad: LAST_PAD,\n },\n];\n\n/**\n * DDM (Degrees Decimal Minutes) Segment Configuration\n *\n * Format: [lat_deg]° [lat_min]' [lat_dir], [lon_deg]° [lon_min]' [lon_dir]\n * Example: 89° 45.9259' N, 123° 27.4073' W\n *\n * Segments:\n * - Latitude degrees: 0-90, whole number only (no decimals)\n * - Latitude minutes: 0-59.9999, decimals allowed\n * - Latitude direction: N or S\n * - Longitude degrees: 0-180, whole number only (no decimals)\n * - Longitude minutes: 0-59.9999, decimals allowed\n * - Longitude direction: E or W\n *\n * Total segments: 6 editable\n */\nexport const ddmSegmentConfigs: SegmentConfig[] = [\n // Latitude degrees\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 90\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '° ',\n },\n // Latitude minutes (decimal minutes)\n {\n type: 'numeric',\n placeholder: '00.0000',\n allowedChars: '[0-9\\\\.]',\n maxLength: 7, // Max: 59.9999\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: \"' \",\n },\n // Latitude direction\n {\n type: 'directional',\n placeholder: 'N',\n allowedChars: '[NS]',\n maxLength: 1,\n pad: 0,\n },\n {\n type: 'literal',\n value: ', ',\n },\n // Longitude degrees\n {\n type: 'numeric',\n placeholder: '000',\n allowedChars: '[0-9]',\n maxLength: 3, // Max: 180\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '° ',\n },\n // Longitude minutes (decimal minutes)\n {\n type: 'numeric',\n placeholder: '00.0000',\n allowedChars: '[0-9\\\\.]',\n maxLength: 7, // Max: 59.9999\n pad: LAST_PAD,\n },\n {\n type: 'literal',\n value: \"' \",\n },\n // Longitude direction\n {\n type: 'directional',\n placeholder: 'W',\n allowedChars: '[EW]',\n maxLength: 1,\n pad: 0,\n },\n];\n\n/**\n * DMS (Degrees Minutes Seconds) Segment Configuration\n *\n * Format: [lat_deg]° [lat_min]' [lat_sec]\" [lat_dir], [lon_deg]° [lon_min]' [lon_sec]\" [lon_dir]\n * Example: 89° 45' 55.56\" N, 123° 27' 24.44\" W\n *\n * Segments:\n * - Latitude degrees: 0-90, whole number only (no decimals)\n * - Latitude minutes: 0-59, whole number only (no decimals)\n * - Latitude seconds: 0-59.999, decimals allowed\n * - Latitude direction: N or S\n * - Longitude degrees: 0-180, whole number only (no decimals)\n * - Longitude minutes: 0-59, whole number only (no decimals)\n * - Longitude seconds: 0-59.999, decimals allowed\n * - Longitude direction: E or W\n *\n * Total segments: 8 editable\n */\nexport const dmsSegmentConfigs: SegmentConfig[] = [\n // Latitude degrees\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 90\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '° ',\n },\n // Latitude minutes (whole number)\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 59\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: \"' \",\n },\n // Latitude seconds (decimal seconds)\n {\n type: 'numeric',\n placeholder: '00.00',\n allowedChars: '[0-9\\\\.]',\n maxLength: 5, // Max: 59.99\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '\" ',\n },\n // Latitude direction\n {\n type: 'directional',\n placeholder: 'N',\n allowedChars: '[NS]',\n maxLength: 1,\n pad: 0,\n },\n {\n type: 'literal',\n value: ', ',\n },\n // Longitude degrees\n {\n type: 'numeric',\n placeholder: '000',\n allowedChars: '[0-9]',\n maxLength: 3, // Max: 180\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '° ',\n },\n // Longitude minutes (whole number)\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 59\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: \"' \",\n },\n // Longitude seconds (decimal seconds)\n {\n type: 'numeric',\n placeholder: '00.00',\n allowedChars: '[0-9\\\\.]',\n maxLength: 5, // Max: 59.99\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: '\" ',\n },\n // Longitude direction\n {\n type: 'directional',\n placeholder: 'W',\n allowedChars: '[EW]',\n maxLength: 1,\n pad: 0,\n },\n];\n\n/**\n * MGRS (Military Grid Reference System) Segment Configuration\n *\n * Format: [zone][band] [grid_100km] [easting] [northing]\n * Example: 18T WM 12345 67890\n *\n * Segments:\n * - Zone: 1-60, 2 digits\n * - Band: C-X (excluding I and O), 1 letter\n * - Grid 100km: 2 letters (A-Z excluding I and O)\n * - Easting: 5 digits (can be 1-5 based on precision)\n * - Northing: 5 digits (can be 1-5 based on precision)\n *\n * Total segments: 5 editable\n *\n * Reference: /packages/geo/src/coordinates/mgrs/parser.ts\n * Pattern: /^((?:..?)?)(\\w?)\\s*((?:\\w{2})?)\\s*(?:(\\d+(?:\\.\\d*)?)?)\\s*(?:(\\d+(?:\\.\\d*)?)?)$/i\n */\nexport const mgrsSegmentConfigs: SegmentConfig[] = [\n // Zone (1-60)\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 60\n pad: NUMERIC_PAD,\n },\n // Band (C-X, excluding I and O)\n {\n type: 'alphanumeric',\n placeholder: 'T',\n allowedChars: '[C-HJ-NP-X]', // Excludes I and O\n maxLength: 1,\n pad: 0,\n },\n {\n type: 'literal',\n value: ' ',\n },\n // Grid 100km identifier (2 letters, A-Z excluding I and O)\n {\n type: 'alphanumeric',\n placeholder: 'WM',\n allowedChars: '[A-HJ-NP-Z]', // Excludes I and O\n maxLength: 2,\n pad: 0,\n },\n {\n type: 'literal',\n value: ' ',\n },\n // Easting (5 digits, can be 1-5 based on precision)\n {\n type: 'numeric',\n placeholder: '00000',\n allowedChars: '[0-9]',\n maxLength: 5,\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: ' ',\n },\n // Northing (5 digits, can be 1-5 based on precision)\n {\n type: 'numeric',\n placeholder: '00000',\n allowedChars: '[0-9]',\n maxLength: 5,\n pad: LAST_PAD,\n },\n];\n\n/**\n * UTM (Universal Transverse Mercator) Segment Configuration\n *\n * Format: [zone][hemisphere] [easting] [northing]\n * Example: 18N 585628 4511644\n *\n * Segments:\n * - Zone: 1-60, 2 digits\n * - Hemisphere: N or S, 1 letter\n * - Easting: 6-7 digits\n * - Northing: 7 digits\n *\n * Total segments: 4 editable\n *\n * Reference: /packages/geo/src/coordinates/utm/parser.ts\n * Pattern: /^((?:..)?)\\s*(\\w?)\\s*(?:(\\d+(?:\\.\\d*)?)?)\\s*(?:(\\d+(?:\\.\\d*)?)?)$/i\n */\nexport const utmSegmentConfigs: SegmentConfig[] = [\n // Zone (1-60)\n {\n type: 'numeric',\n placeholder: '00',\n allowedChars: '[0-9]',\n maxLength: 2, // Max: 60\n pad: NUMERIC_PAD,\n },\n // Hemisphere (N or S)\n {\n type: 'directional',\n placeholder: 'N',\n allowedChars: '[NS]',\n maxLength: 1,\n pad: 0,\n },\n {\n type: 'literal',\n value: ' ',\n },\n // Easting (6-7 digits)\n {\n type: 'numeric',\n placeholder: '000000',\n allowedChars: '[0-9]',\n maxLength: 7,\n pad: NUMERIC_PAD,\n },\n {\n type: 'literal',\n value: ' ',\n },\n // Northing (7 digits)\n {\n type: 'numeric',\n placeholder: '0000000',\n allowedChars: '[0-9]',\n maxLength: 7,\n pad: LAST_PAD,\n },\n];\n\n/**\n * Get segment configurations for a specific coordinate system\n *\n * @param format - The coordinate system format\n * @returns Array of segment configurations for the specified format\n */\nexport function getSegmentConfigs(format: CoordinateSystem): SegmentConfig[] {\n switch (format) {\n case 'dd':\n return ddSegmentConfigs;\n case 'ddm':\n return ddmSegmentConfigs;\n case 'dms':\n return dmsSegmentConfigs;\n case 'mgrs':\n return mgrsSegmentConfigs;\n case 'utm':\n return utmSegmentConfigs;\n default:\n // Default to DD format if unknown format provided\n return ddSegmentConfigs;\n }\n}\n\n/**\n * Get format description with example\n *\n * Provides a user-friendly description of the coordinate format with an example value.\n * These descriptions can be used as helper text to guide users on the expected format.\n *\n * @param format - The coordinate system format\n * @returns Description string with format example\n */\nexport function getFormatDescription(format: CoordinateSystem): string {\n switch (format) {\n case 'dd':\n return 'Example: 40.7128, -74.0060 (New York City)';\n case 'ddm':\n return \"Example: 40° 42.768' N, 74° 0.360' W (New York City)\";\n case 'dms':\n return 'Example: 40° 42\\' 46.08\" N, 74° 0\\' 21.60\" W (New York City)';\n case 'mgrs':\n return 'Example: 18T WL 80654 06346 (New York City)';\n case 'utm':\n return 'Example: 18N 585628 4511644 (New York City)';\n default:\n return '';\n }\n}\n\n/**\n * Get editable segment count for a format\n *\n * Returns the number of editable segments (excluding literal separators) for each format.\n * This is useful for initializing segment values and validation.\n *\n * @param format - The coordinate system format\n * @returns Number of editable segments\n */\nexport function getEditableSegmentCount(format: CoordinateSystem): number {\n const configs = getSegmentConfigs(format);\n return configs.filter((config) => config.type !== 'literal').length;\n}\n\n/**\n * Validate segment count for each format\n *\n * Expected editable segment counts:\n * - DD: 2 segments (lat, lon)\n * - DDM: 6 segments (lat_deg, lat_min, lat_dir, lon_deg, lon_min, lon_dir)\n * - DMS: 8 segments (lat_deg, lat_min, lat_sec, lat_dir, lon_deg, lon_min, lon_sec, lon_dir)\n * - MGRS: 5 segments (zone, band, grid, easting, northing)\n * - UTM: 4 segments (zone, hemisphere, easting, northing)\n */\nexport const EXPECTED_SEGMENT_COUNTS: Record<CoordinateSystem, number> = {\n dd: 2,\n ddm: 6,\n dms: 8,\n mgrs: 5,\n utm: 4,\n};\n\n/**\n * Get semantic accessibility label for a segment based on format and editable index\n *\n * Provides descriptive labels for screen readers (e.g., \"Latitude degrees\", \"Longitude minutes\")\n * to improve accessibility beyond generic \"Coordinate segment 1\" announcements.\n *\n * @param format - The coordinate system format\n * @param editableIndex - The index of the editable segment (0-based, excluding literals)\n * @returns Semantic label string for the segment\n */\nexport function getSegmentLabel(\n format: CoordinateSystem,\n editableIndex: number,\n): string {\n switch (format) {\n case 'dd':\n // DD: [lat, lon]\n return editableIndex === 0 ? 'Latitude' : 'Longitude';\n\n case 'ddm':\n // DDM: [lat_deg, lat_min, lat_dir, lon_deg, lon_min, lon_dir]\n switch (editableIndex) {\n case 0:\n return 'Latitude degrees';\n case 1:\n return 'Latitude minutes';\n case 2:\n return 'Latitude direction';\n case 3:\n return 'Longitude degrees';\n case 4:\n return 'Longitude minutes';\n case 5:\n return 'Longitude direction';\n default:\n return `Coordinate segment ${editableIndex + 1}`;\n }\n\n case 'dms':\n // DMS: [lat_deg, lat_min, lat_sec, lat_dir, lon_deg, lon_min, lon_sec, lon_dir]\n switch (editableIndex) {\n case 0:\n return 'Latitude degrees';\n case 1:\n return 'Latitude minutes';\n case 2:\n return 'Latitude seconds';\n case 3:\n return 'Latitude direction';\n case 4:\n return 'Longitude degrees';\n case 5:\n return 'Longitude minutes';\n case 6:\n return 'Longitude seconds';\n case 7:\n return 'Longitude direction';\n default:\n return `Coordinate segment ${editableIndex + 1}`;\n }\n\n case 'mgrs':\n // MGRS: [zone, band, grid, easting, northing]\n switch (editableIndex) {\n case 0:\n return 'MGRS zone';\n case 1:\n return 'MGRS band';\n case 2:\n return 'MGRS grid square';\n case 3:\n return 'MGRS easting';\n case 4:\n return 'MGRS northing';\n default:\n return `Coordinate segment ${editableIndex + 1}`;\n }\n\n case 'utm':\n // UTM: [zone, hemisphere, easting, northing]\n switch (editableIndex) {\n case 0:\n return 'UTM zone';\n case 1:\n return 'UTM hemisphere';\n case 2:\n return 'UTM easting';\n case 3:\n return 'UTM northing';\n default:\n return `Coordinate segment ${editableIndex + 1}`;\n }\n\n default:\n return `Coordinate segment ${editableIndex + 1}`;\n }\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { CoordinateSegmentProps } from './types.js';
3
+ import 'react';
4
+ import 'react-aria-components';
5
+
6
+ /**
7
+ * CoordinateSegment - A controlled input component for a single coordinate segment
8
+ *
9
+ * This component represents one editable part of a coordinate (e.g., degrees, minutes, direction).
10
+ * It handles character filtering, focus management, and keyboard navigation.
11
+ *
12
+ * Segment Types (determined by allowedChars):
13
+ * - Numeric: "[0-9\\-\\.]" - for DD degrees, DDM/DMS degrees/minutes/seconds
14
+ * - Directional: "[NSEW]" - for DDM/DMS direction indicators
15
+ * - Alphanumeric: "[0-9A-Z]" - for MGRS/UTM zone identifiers
16
+ *
17
+ * @example
18
+ * // Numeric segment (latitude degrees)
19
+ * <CoordinateSegment
20
+ * value={latDegrees}
21
+ * onChange={setLatDegrees}
22
+ * allowedChars="[0-9\\-\\.]"
23
+ * maxLength={10}
24
+ * placeholder="00.00000"
25
+ * />
26
+ *
27
+ * @example
28
+ * // Directional segment (latitude direction)
29
+ * <CoordinateSegment
30
+ * value={latDir}
31
+ * onChange={setLatDir}
32
+ * allowedChars="[NS]"
33
+ * maxLength={1}
34
+ * placeholder="N"
35
+ * />
36
+ */
37
+ declare function CoordinateSegment({ value, onChange, onFocus, onBlur, onKeyDown, placeholder, maxLength, className, isDisabled, allowedChars, segmentRef, segmentIndex, totalSegments: _totalSegments, onAutoAdvance, onAutoRetreat, pad, ariaLabel, }: CoordinateSegmentProps): react_jsx_runtime.JSX.Element;
38
+
39
+ export { CoordinateSegment };
@@ -0,0 +1,4 @@
1
+ 'use client';
2
+
3
+ import {jsx}from'react/jsx-runtime';import'client-only';import {useMemo}from'react';import {useCoordinateFieldStateContext}from'./context.js';function N({value:r,onChange:l,onFocus:g,onBlur:m,onKeyDown:h,placeholder:y,maxLength:n,className:E,isDisabled:D,allowedChars:o,segmentRef:S,segmentIndex:u,totalSegments:$,onAutoAdvance:s,onAutoRetreat:c,pad:a,ariaLabel:b}){const d=useCoordinateFieldStateContext(),p=d.isDisabled??D,f=useMemo(()=>{if(n===void 0)return;const e=a??.5;return (r.length>0?r.length:n)+e},[n,a,r.length]);return jsx("input",{ref:S,type:"text",value:r,onChange:e=>{const t=e.target.value;if(!(o&&!new RegExp(`^${o}*$`).test(t))&&!(n&&t.length>n)&&(l(t),n&&t.length===n&&s)){const i=setTimeout(()=>{s();},0);d.registerTimeout(i);}},onPaste:e=>{const t=e.clipboardData.getData("text");if(o&&!new RegExp(`^${o}*$`).test(t)){e.preventDefault();return}if(n&&t.length>n){e.preventDefault(),l(t.slice(0,n));return}},onKeyDown:e=>{const t=e.currentTarget,i=t.selectionStart===0,T=t.selectionStart===r.length,v=r.length===0;if(e.key==="Backspace"&&v&&c){e.preventDefault(),c();return}if(e.key==="ArrowLeft"&&i&&c){e.preventDefault(),c();return}if(e.key==="ArrowRight"&&T&&s){e.preventDefault(),s();return}h?.(e);},onFocus:e=>{e.target.select(),g?.();},onBlur:()=>{m?.();},placeholder:y,maxLength:n,className:E,disabled:p,style:f?{width:`${f}ch`}:void 0,"aria-label":b||`Coordinate segment ${u!==void 0?u+1:""}`,"aria-disabled":p,autoComplete:"off",inputMode:o?.includes("0-9")?o.includes("\\-\\.")?"decimal":"numeric":"text"})}export{N as CoordinateSegment};//# sourceMappingURL=segment.js.map
4
+ //# sourceMappingURL=segment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/coordinate-field/segment.tsx"],"names":["pad","effectiveIsDisabled","contextState","dynamicWidth","useMemo","C","maxLength","padding","value","M","segmentRef","allowedChars","newValue","onChange","onAutoAdvance","pastedText","input","isEmpty","onAutoRetreat","cursorAtStart","onFocus","onBlur"],"mappings":"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","file":"segment.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { useMemo } from 'react';\nimport { useCoordinateFieldStateContext } from './context';\nimport type { ChangeEvent, FocusEvent, KeyboardEvent } from 'react';\nimport type { CoordinateSegmentProps } from './types';\n\n/**\n * CoordinateSegment - A controlled input component for a single coordinate segment\n *\n * This component represents one editable part of a coordinate (e.g., degrees, minutes, direction).\n * It handles character filtering, focus management, and keyboard navigation.\n *\n * Segment Types (determined by allowedChars):\n * - Numeric: \"[0-9\\\\-\\\\.]\" - for DD degrees, DDM/DMS degrees/minutes/seconds\n * - Directional: \"[NSEW]\" - for DDM/DMS direction indicators\n * - Alphanumeric: \"[0-9A-Z]\" - for MGRS/UTM zone identifiers\n *\n * @example\n * // Numeric segment (latitude degrees)\n * <CoordinateSegment\n * value={latDegrees}\n * onChange={setLatDegrees}\n * allowedChars=\"[0-9\\\\-\\\\.]\"\n * maxLength={10}\n * placeholder=\"00.00000\"\n * />\n *\n * @example\n * // Directional segment (latitude direction)\n * <CoordinateSegment\n * value={latDir}\n * onChange={setLatDir}\n * allowedChars=\"[NS]\"\n * maxLength={1}\n * placeholder=\"N\"\n * />\n */\nexport function CoordinateSegment({\n value,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n placeholder,\n maxLength,\n className,\n isDisabled,\n allowedChars,\n segmentRef,\n segmentIndex,\n totalSegments: _totalSegments,\n onAutoAdvance,\n onAutoRetreat,\n pad,\n ariaLabel,\n}: CoordinateSegmentProps) {\n const contextState = useCoordinateFieldStateContext();\n\n const effectiveIsDisabled = contextState.isDisabled ?? isDisabled;\n\n // Calculate dynamic width based on focus state\n const dynamicWidth = useMemo(() => {\n if (maxLength === undefined) {\n return undefined;\n }\n\n // Default padding to 0.5 if not specified\n const padding = pad ?? 0.5;\n\n // When blurred, use value length (or maxLength if empty) + padding\n const contentLength = value.length > 0 ? value.length : maxLength;\n return contentLength + padding;\n }, [maxLength, pad, value.length]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(newValue)) {\n return;\n }\n }\n\n if (maxLength && newValue.length > maxLength) {\n return;\n }\n\n onChange(newValue);\n\n if (maxLength && newValue.length === maxLength && onAutoAdvance) {\n const timeoutId = setTimeout(() => {\n onAutoAdvance();\n }, 0);\n contextState.registerTimeout(timeoutId);\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData('text');\n\n if (allowedChars) {\n const regex = new RegExp(`^${allowedChars}*$`);\n if (!regex.test(pastedText)) {\n e.preventDefault();\n return;\n }\n }\n\n if (maxLength && pastedText.length > maxLength) {\n e.preventDefault();\n onChange(pastedText.slice(0, maxLength));\n return;\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n const input = e.currentTarget;\n const cursorAtStart = input.selectionStart === 0;\n const cursorAtEnd = input.selectionStart === value.length;\n const isEmpty = value.length === 0;\n\n if (e.key === 'Backspace' && isEmpty && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowLeft' && cursorAtStart && onAutoRetreat) {\n e.preventDefault();\n onAutoRetreat();\n return;\n }\n\n if (e.key === 'ArrowRight' && cursorAtEnd && onAutoAdvance) {\n e.preventDefault();\n onAutoAdvance();\n return;\n }\n\n onKeyDown?.(e);\n };\n\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n e.target.select();\n onFocus?.();\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n return (\n <input\n ref={segmentRef}\n type='text'\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n maxLength={maxLength}\n className={className}\n disabled={effectiveIsDisabled}\n style={dynamicWidth ? { width: `${dynamicWidth}ch` } : undefined}\n aria-label={\n ariaLabel ||\n `Coordinate segment ${segmentIndex !== undefined ? segmentIndex + 1 : ''}`\n }\n aria-disabled={effectiveIsDisabled}\n autoComplete='off'\n inputMode={\n allowedChars?.includes('0-9')\n ? allowedChars.includes('\\\\-\\\\.')\n ? 'decimal'\n : 'numeric'\n : 'text'\n }\n />\n );\n}\n"]}
@@ -0,0 +1,129 @@
1
+ /*
2
+ * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at https://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+ @reference '../../index.module.css';
14
+
15
+ @layer components.l1 {
16
+ .field {
17
+ @apply gap-xs flex flex-col;
18
+ }
19
+
20
+ .control {
21
+ @apply fg-primary-bold gap-m rounded-medium px-s py-xs font-display outline-interactive flex w-fit items-center outline;
22
+
23
+ @variant group-size-medium/coordinate-field {
24
+ @apply text-body-m;
25
+ }
26
+
27
+ @variant group-size-small/coordinate-field {
28
+ @apply text-body-s;
29
+ }
30
+
31
+ @variant group-disabled/coordinate-field {
32
+ @apply fg-disabled outline-interactive-disabled;
33
+ }
34
+
35
+ @variant group-invalid/coordinate-field {
36
+ @apply outline-serious-bold;
37
+ }
38
+
39
+ @variant hover {
40
+ @apply outline-interactive-hover;
41
+ }
42
+ }
43
+
44
+ .input {
45
+ @apply gap-xs flex flex-1 items-center;
46
+ }
47
+
48
+ .segment {
49
+ @apply shrink-0 text-right transition-[width] duration-150 ease-in-out outline-none;
50
+
51
+ @variant placeholder-shown {
52
+ @apply fg-primary-muted;
53
+ }
54
+
55
+ @variant focus-visible {
56
+ @apply fg-a11y-on-accent bg-accent-primary-bold;
57
+ }
58
+
59
+ @variant selection {
60
+ @apply fg-a11y-on-accent bg-accent-primary-bold;
61
+ }
62
+ }
63
+
64
+ .description {
65
+ @apply fg-primary-muted text-body-xs;
66
+
67
+ @variant group-disabled/coordinate-field {
68
+ @apply fg-disabled;
69
+ }
70
+ }
71
+
72
+ .error {
73
+ @apply fg-serious-bold text-body-xs;
74
+ }
75
+
76
+ .formatRow {
77
+ @apply gap-s px-xs py-s flex items-start justify-between;
78
+ }
79
+
80
+ .formatLabels {
81
+ @apply flex min-w-0 flex-1 flex-col;
82
+ }
83
+
84
+ .formatLabel {
85
+ @apply fg-primary-bold text-body-s;
86
+ }
87
+
88
+ .formatValue {
89
+ @apply fg-primary-muted font-display text-body-s truncate;
90
+ }
91
+
92
+ .formatOptionContent {
93
+ @apply gap-xs flex flex-1 flex-col;
94
+ }
95
+
96
+ .formatOptionLabel {
97
+ @apply fg-primary-bold text-body-s font-bold;
98
+ }
99
+
100
+ .formatOptionValue {
101
+ @apply fg-primary-muted font-display text-body-xs break-all;
102
+ }
103
+
104
+ .modalDescription {
105
+ @apply fg-primary-muted mb-m text-body-s;
106
+ }
107
+ }
108
+
109
+ @layer components.l2 {
110
+ .formatOptions {
111
+ @apply mb-m gap-xs flex flex-col;
112
+ }
113
+
114
+ .modalTitle {
115
+ @apply fg-primary-bold mb-s text-header-s font-bold;
116
+ }
117
+
118
+ .modalActions {
119
+ @apply gap-s flex justify-end;
120
+ }
121
+
122
+ .popover {
123
+ min-height: 280px;
124
+ }
125
+
126
+ .popoverTitle {
127
+ @apply fg-primary-muted text-header-s;
128
+ }
129
+ }