@12-apps/ui 6.99.0 → 6.101.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 (376) hide show
  1. package/NATIVE.md +2 -1
  2. package/components-catalog.md +2 -1
  3. package/dist/_internal/components/data-display/Alert/Alert.content.js +2 -2
  4. package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  6. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
  8. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +6 -6
  9. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  10. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  11. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  12. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  13. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  14. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -3
  15. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +45 -45
  16. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +60 -60
  17. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -4
  18. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -4
  19. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +4 -4
  20. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
  21. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +4 -4
  22. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
  23. package/dist/_internal/components/data-display/DataViews/base-list-card.js +5 -5
  24. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +8 -8
  25. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
  26. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +20 -20
  27. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +9 -9
  28. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +42 -42
  29. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +24 -24
  30. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +21 -21
  31. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +22 -22
  32. package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +9 -9
  33. package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +6 -6
  34. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +11 -11
  35. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  36. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +4 -4
  37. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +10 -10
  38. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +3 -3
  39. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  40. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  41. package/dist/_internal/components/data-display/DayRuler/DayRuler.footer.js +3 -3
  42. package/dist/_internal/components/data-display/DayRuler/DayRuler.js +10 -10
  43. package/dist/_internal/components/data-display/DayRuler/DayRuler.keyboard.js +2 -2
  44. package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +2 -2
  45. package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +3 -3
  46. package/dist/_internal/components/data-display/DayRuler/useRulerDrag.js +2 -2
  47. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
  48. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
  49. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +12 -12
  50. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  51. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +7 -7
  52. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  53. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  54. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
  55. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
  56. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +2 -2
  57. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
  58. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  59. package/dist/_internal/components/data-display/RegionMap/RegionMap.js +4 -4
  60. package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +2 -2
  61. package/dist/_internal/components/data-display/RegionMap/RegionMapPin.js +1 -1
  62. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +8 -8
  63. package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +3 -3
  64. package/dist/_internal/components/data-display/Sheet/Sheet.js +2 -2
  65. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  66. package/dist/_internal/components/data-display/index.js +75 -75
  67. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
  68. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  69. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +5 -5
  70. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +8 -8
  71. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.header.js +4 -4
  72. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +16 -16
  73. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +6 -6
  74. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +5 -5
  75. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  76. package/dist/_internal/components/feedback/UsableModal/UsableModal.js +1 -1
  77. package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js +2 -2
  78. package/dist/_internal/components/feedback/index.js +21 -21
  79. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +2 -2
  80. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
  81. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
  82. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  83. package/dist/_internal/components/form/Calendar/Calendar.js +5 -5
  84. package/dist/_internal/components/form/Calendar/CalendarSelectorsMonth.js +3 -3
  85. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +4 -4
  86. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +7 -7
  87. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  88. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +8 -8
  89. package/dist/_internal/components/form/InputOTP/InputOTP.base.js +1 -0
  90. package/dist/_internal/components/form/InputOTP/InputOTP.base.js.map +1 -0
  91. package/dist/_internal/components/form/InputOTP/InputOTP.core.js +16 -0
  92. package/dist/_internal/components/form/InputOTP/InputOTP.core.js.map +1 -0
  93. package/dist/_internal/components/form/InputOTP/InputOTP.hooks.js +2 -1
  94. package/dist/_internal/components/form/InputOTP/InputOTP.js +5 -3
  95. package/dist/_internal/components/form/InputOTP/InputOTP.metrics.js +12 -0
  96. package/dist/_internal/components/form/InputOTP/InputOTP.metrics.js.map +1 -0
  97. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +2 -1
  98. package/dist/_internal/components/form/index.js +25 -23
  99. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +8 -8
  100. package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
  101. package/dist/_internal/components/index.js +123 -121
  102. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
  103. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
  104. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
  105. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  106. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
  107. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
  108. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
  109. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
  110. package/dist/_internal/components/navigation/index.js +15 -15
  111. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  112. package/dist/charts.js +6 -6
  113. package/dist/{chunk-37MJZLQU.js → chunk-24OFA44S.js} +4 -4
  114. package/dist/{chunk-R775ISK6.js → chunk-2L6TANRY.js} +5 -5
  115. package/dist/{chunk-B4OZU7J4.js → chunk-423A7NUP.js} +7 -7
  116. package/dist/{chunk-LFECE4R7.js → chunk-4EDCF7TC.js} +2 -2
  117. package/dist/{chunk-HI7JPDD6.js → chunk-5357QUVE.js} +2 -2
  118. package/dist/{chunk-F7JRQ2EI.js → chunk-5YX2VQFP.js} +7 -7
  119. package/dist/{chunk-QZOQVJ5L.js → chunk-645GGNTW.js} +3 -3
  120. package/dist/{chunk-N5PVD4J5.js → chunk-6DO672AG.js} +7 -7
  121. package/dist/{chunk-PGJIWCQR.js → chunk-6EZQLNPK.js} +4 -4
  122. package/dist/{chunk-YQMJJ7AL.js → chunk-6G2RAZTS.js} +5 -5
  123. package/dist/{chunk-KNW63H63.js → chunk-6PQZIZMN.js} +5 -5
  124. package/dist/{chunk-FZZMNKVF.js → chunk-6TAPAIRR.js} +8 -8
  125. package/dist/{chunk-ERAMSYPR.js → chunk-7N4O632I.js} +2 -2
  126. package/dist/{chunk-XFOKLWJZ.js → chunk-7S5PXEO7.js} +2 -2
  127. package/dist/{chunk-DRYBA76G.js → chunk-7XVT4RME.js} +2 -2
  128. package/dist/{chunk-DRYBA76G.js.map → chunk-7XVT4RME.js.map} +1 -1
  129. package/dist/{chunk-UIJLDAV7.js → chunk-AA6YMOEK.js} +2 -2
  130. package/dist/{chunk-CRD2WCU7.js → chunk-AFWUQJ4P.js} +8 -8
  131. package/dist/{chunk-SNWCT6JN.js → chunk-AMIUZRDQ.js} +3 -3
  132. package/dist/{chunk-NQYC7V5N.js → chunk-BAYCMSMI.js} +5 -9
  133. package/dist/chunk-BAYCMSMI.js.map +1 -0
  134. package/dist/{chunk-3I7KE2N6.js → chunk-BNV7P52K.js} +2 -2
  135. package/dist/{chunk-64UNVW6D.js → chunk-BP3ZKIPE.js} +4 -4
  136. package/dist/{chunk-3V7OTBUZ.js → chunk-BQ2SFA27.js} +2 -2
  137. package/dist/{chunk-Q5SCBQLY.js → chunk-BXLC3TBQ.js} +8 -8
  138. package/dist/{chunk-Z5V5E3JW.js → chunk-COKPPU42.js} +11 -11
  139. package/dist/{chunk-QADTI63U.js → chunk-CZVAVX5L.js} +4 -4
  140. package/dist/{chunk-WDEVKND3.js → chunk-D2YJPZMU.js} +9 -9
  141. package/dist/{chunk-OA6T2ME3.js → chunk-DYHOBKPU.js} +5 -5
  142. package/dist/{chunk-6WAP7BJS.js → chunk-E6SPWZRN.js} +2 -2
  143. package/dist/{chunk-UTIYB6VE.js → chunk-E73PAU4U.js} +19 -19
  144. package/dist/{chunk-XR474YYX.js → chunk-EDVAFY76.js} +2 -2
  145. package/dist/{chunk-MEMVZW64.js → chunk-EPNZQWS4.js} +3 -3
  146. package/dist/{chunk-GZITNT7O.js → chunk-FGZIEZEP.js} +11 -11
  147. package/dist/{chunk-4X2TOMK6.js → chunk-FKUVFPQZ.js} +4 -4
  148. package/dist/{chunk-UN5WU2OX.js → chunk-GDWU7WF4.js} +4 -4
  149. package/dist/{chunk-643YFWNK.js → chunk-GPWDP5FF.js} +3 -3
  150. package/dist/{chunk-XA5ES25V.js → chunk-HKQWFICM.js} +2 -2
  151. package/dist/chunk-IH6DZXTG.js +22 -0
  152. package/dist/chunk-IH6DZXTG.js.map +1 -0
  153. package/dist/{chunk-255WTBZ5.js → chunk-IWSTMVCA.js} +4 -4
  154. package/dist/{chunk-TZC6KIK2.js → chunk-JG733RMP.js} +5 -5
  155. package/dist/{chunk-7MLT66DE.js → chunk-K33X3PDT.js} +2 -2
  156. package/dist/{chunk-K3PMMW23.js → chunk-K6VEN5VN.js} +4 -4
  157. package/dist/{chunk-HOWAMSUY.js → chunk-KAWVH3AA.js} +3 -3
  158. package/dist/{chunk-IJVBLU25.js → chunk-KJZ4PINO.js} +3 -3
  159. package/dist/{chunk-REHGWN5M.js → chunk-KXDLLS62.js} +4 -4
  160. package/dist/{chunk-YQ5GQ32T.js → chunk-KZP5YTE7.js} +2 -2
  161. package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
  162. package/dist/{chunk-UKUGSU3Y.js → chunk-L4V7FZJI.js} +2 -2
  163. package/dist/{chunk-W56KN53D.js → chunk-L6IDPTNX.js} +6 -6
  164. package/dist/{chunk-AYDVNXGR.js → chunk-LCKUEYU2.js} +2 -2
  165. package/dist/{chunk-24HHUCWB.js → chunk-LDCZPZPD.js} +2 -2
  166. package/dist/{chunk-KV7LTOWC.js → chunk-M225SD4H.js} +13 -13
  167. package/dist/{chunk-R6L376KR.js → chunk-M6R32IBO.js} +8 -13
  168. package/dist/chunk-M6R32IBO.js.map +1 -0
  169. package/dist/{chunk-FQMLTCXT.js → chunk-MAHY7PK3.js} +4 -4
  170. package/dist/{chunk-Z2J4MRTF.js → chunk-MKNW4FRR.js} +4 -4
  171. package/dist/{chunk-ILJ3FXIC.js → chunk-MM3QESLI.js} +2 -2
  172. package/dist/{chunk-FYJL432J.js → chunk-MQPUS773.js} +6 -6
  173. package/dist/{chunk-VRSW7PIO.js → chunk-NKBSWAP3.js} +4 -4
  174. package/dist/{chunk-ULC4SCFC.js → chunk-NLJ7LL6H.js} +4 -4
  175. package/dist/{chunk-RAQD5QCM.js → chunk-NQ6JP5CC.js} +6 -6
  176. package/dist/{chunk-IFOHCY4O.js → chunk-OF3KG5EV.js} +2 -2
  177. package/dist/{chunk-W676GY42.js → chunk-P772HCHI.js} +4 -4
  178. package/dist/{chunk-CWRQGA2T.js → chunk-POIENBXE.js} +7 -7
  179. package/dist/{chunk-FW5GTAUY.js → chunk-Q4AX4FOK.js} +11 -11
  180. package/dist/{chunk-XQAFSC66.js → chunk-Q4FNCT4C.js} +2 -2
  181. package/dist/{chunk-PIELY4BJ.js → chunk-Q5Z66LKI.js} +1 -1
  182. package/dist/{chunk-4Y3QLISA.js → chunk-Q7AONB4G.js} +4 -4
  183. package/dist/{chunk-EZBBLLEU.js → chunk-QQBYZ3B3.js} +4 -4
  184. package/dist/{chunk-FT3LJZWZ.js → chunk-RWUXMBSO.js} +4 -4
  185. package/dist/{chunk-KWBMM6MJ.js → chunk-RZKKWIGQ.js} +9 -9
  186. package/dist/{chunk-RVBLOR32.js → chunk-S7CXVIEF.js} +2 -2
  187. package/dist/{chunk-WLLUARTC.js → chunk-T2G4LDU5.js} +2 -2
  188. package/dist/{chunk-OFRQMFWD.js → chunk-T5D3DYVN.js} +2 -2
  189. package/dist/{chunk-O4UXH7BM.js → chunk-TP6KZ2YR.js} +7 -7
  190. package/dist/{chunk-HAWOS4SF.js → chunk-TPDN3B5T.js} +2 -2
  191. package/dist/{chunk-54DOLCJ3.js → chunk-TXIIJW6C.js} +5 -5
  192. package/dist/{chunk-HN36UVOE.js → chunk-U4Z6GZDW.js} +4 -4
  193. package/dist/{chunk-J2IQ6FJ5.js → chunk-UKLNLWTP.js} +3 -3
  194. package/dist/chunk-VAHJCRNW.js +17 -0
  195. package/dist/chunk-VAHJCRNW.js.map +1 -0
  196. package/dist/{chunk-MKHNLRVX.js → chunk-VPPD2AJN.js} +7 -7
  197. package/dist/{chunk-TIM4PXWN.js → chunk-VWRXSBT2.js} +2 -2
  198. package/dist/{chunk-KVP5A3YK.js → chunk-WDWZKTGA.js} +2 -2
  199. package/dist/{chunk-FYSS2PYA.js → chunk-WH5ZEBKS.js} +7 -7
  200. package/dist/{chunk-KAGXV3ID.js → chunk-WMMXOSZG.js} +7 -7
  201. package/dist/{chunk-4RSFYS2V.js → chunk-X6D5JEUV.js} +6 -6
  202. package/dist/{chunk-GFYDOH7D.js → chunk-XEPNAU3T.js} +2 -2
  203. package/dist/{chunk-VMACQT3T.js → chunk-XH7UDC5Y.js} +3 -3
  204. package/dist/{chunk-PDWQJFMK.js → chunk-XHMHHP7B.js} +10 -10
  205. package/dist/{chunk-SA3KLZDZ.js → chunk-XNAI7QGU.js} +5 -5
  206. package/dist/{chunk-7TENMQNQ.js → chunk-XZMSRHFD.js} +4 -4
  207. package/dist/{chunk-HBHBRRSW.js → chunk-YBAK2WN5.js} +7 -7
  208. package/dist/{chunk-QLKUWDMQ.js → chunk-YDJ5GAGL.js} +13 -13
  209. package/dist/{chunk-3V5V44UP.js → chunk-YHFLI2FD.js} +2 -2
  210. package/dist/{chunk-LOLYBFYY.js → chunk-ZCNR4DN5.js} +5 -5
  211. package/dist/data-display/Alert.js +4 -4
  212. package/dist/data-display/Avatar.js +2 -2
  213. package/dist/data-display/Badge.js +2 -2
  214. package/dist/data-display/CardKit.js +14 -14
  215. package/dist/data-display/Carousel.js +3 -3
  216. package/dist/data-display/Chart.js +6 -6
  217. package/dist/data-display/DataGrid.js +3 -3
  218. package/dist/data-display/DataViews.js +74 -74
  219. package/dist/data-display/DayRuler.js +12 -12
  220. package/dist/data-display/FleetMap.js +12 -12
  221. package/dist/data-display/HoverCard.js +2 -2
  222. package/dist/data-display/Lightbox.js +7 -7
  223. package/dist/data-display/MapPreview.js +8 -8
  224. package/dist/data-display/Progress.js +2 -2
  225. package/dist/data-display/RegionMap.js +7 -7
  226. package/dist/data-display/ScheduleGrid.js +10 -10
  227. package/dist/data-display/Sheet.js +2 -2
  228. package/dist/data-display/Table.js +3 -3
  229. package/dist/feedback/Dialog.js +3 -3
  230. package/dist/feedback/Modal.js +2 -2
  231. package/dist/feedback/NotificationStatusNotice.js +5 -5
  232. package/dist/feedback/SequenceResolver.js +16 -16
  233. package/dist/feedback/TutorialOverlay.js +2 -2
  234. package/dist/feedback/UsableModal.js +1 -1
  235. package/dist/form/AddressAutocomplete.js +7 -7
  236. package/dist/form/Autocomplete.js +1 -1
  237. package/dist/form/Calendar.js +5 -5
  238. package/dist/form/CategorySelect.js +7 -7
  239. package/dist/form/CodeEditor.js +2 -2
  240. package/dist/form/DateRangePicker.js +10 -10
  241. package/dist/form/InputOTP.js +5 -3
  242. package/dist/form/total-form.js +9 -9
  243. package/dist/native/form/InputOTP.js +192 -0
  244. package/dist/native/form/InputOTP.js.map +1 -0
  245. package/dist/navigation/AppHeader.js +6 -6
  246. package/dist/navigation/SectionNav.js +9 -9
  247. package/dist/types/components/form/InputOTP/InputOTP.base.d.ts +63 -0
  248. package/dist/types/components/form/InputOTP/InputOTP.base.d.ts.map +1 -0
  249. package/dist/types/components/form/InputOTP/InputOTP.core.d.ts +38 -0
  250. package/dist/types/components/form/InputOTP/InputOTP.core.d.ts.map +1 -0
  251. package/dist/types/components/form/InputOTP/InputOTP.d.ts +1 -2
  252. package/dist/types/components/form/InputOTP/InputOTP.d.ts.map +1 -1
  253. package/dist/types/components/form/InputOTP/InputOTP.hooks.d.ts.map +1 -1
  254. package/dist/types/components/form/InputOTP/InputOTP.metrics.d.ts +15 -0
  255. package/dist/types/components/form/InputOTP/InputOTP.metrics.d.ts.map +1 -0
  256. package/dist/types/components/form/InputOTP/InputOTP.styles.d.ts.map +1 -1
  257. package/dist/types/components/form/InputOTP/InputOTP.types.d.ts +3 -56
  258. package/dist/types/components/form/InputOTP/InputOTP.types.d.ts.map +1 -1
  259. package/dist/types-native/components/form/InputOTP/InputOTP.base.d.ts +63 -0
  260. package/dist/types-native/components/form/InputOTP/InputOTP.base.d.ts.map +1 -0
  261. package/dist/types-native/components/form/InputOTP/InputOTP.core.d.ts +38 -0
  262. package/dist/types-native/components/form/InputOTP/InputOTP.core.d.ts.map +1 -0
  263. package/dist/types-native/components/form/InputOTP/InputOTP.hooks.native.d.ts +28 -0
  264. package/dist/types-native/components/form/InputOTP/InputOTP.hooks.native.d.ts.map +1 -0
  265. package/dist/types-native/components/form/InputOTP/InputOTP.metrics.d.ts +15 -0
  266. package/dist/types-native/components/form/InputOTP/InputOTP.metrics.d.ts.map +1 -0
  267. package/dist/types-native/components/form/InputOTP/InputOTP.native.d.ts +14 -0
  268. package/dist/types-native/components/form/InputOTP/InputOTP.native.d.ts.map +1 -0
  269. package/dist/types-native/components/form/InputOTP/InputOTP.types.native.d.ts +14 -0
  270. package/dist/types-native/components/form/InputOTP/InputOTP.types.native.d.ts.map +1 -0
  271. package/dist/types-native/components/form/InputOTP/index.native.d.ts +3 -0
  272. package/dist/types-native/components/form/InputOTP/index.native.d.ts.map +1 -0
  273. package/dist/user-avatar.js +3 -3
  274. package/package.json +5 -1
  275. package/src/components/data-display/RegionMap/RegionMapPin.tsx +1 -1
  276. package/src/components/form/InputOTP/InputOTP.base.ts +76 -0
  277. package/src/components/form/InputOTP/InputOTP.core.ts +51 -0
  278. package/src/components/form/InputOTP/InputOTP.hooks.native.ts +84 -0
  279. package/src/components/form/InputOTP/InputOTP.hooks.ts +1 -46
  280. package/src/components/form/InputOTP/InputOTP.metrics.ts +19 -0
  281. package/src/components/form/InputOTP/InputOTP.native.tsx +154 -0
  282. package/src/components/form/InputOTP/InputOTP.styles.ts +4 -11
  283. package/src/components/form/InputOTP/InputOTP.types.native.ts +15 -0
  284. package/src/components/form/InputOTP/InputOTP.types.ts +3 -68
  285. package/src/components/form/InputOTP/NATIVE-NOTES.md +8 -0
  286. package/src/components/form/InputOTP/index.native.ts +2 -0
  287. package/dist/chunk-NQYC7V5N.js.map +0 -1
  288. package/dist/chunk-R6L376KR.js.map +0 -1
  289. /package/dist/{chunk-37MJZLQU.js.map → chunk-24OFA44S.js.map} +0 -0
  290. /package/dist/{chunk-R775ISK6.js.map → chunk-2L6TANRY.js.map} +0 -0
  291. /package/dist/{chunk-B4OZU7J4.js.map → chunk-423A7NUP.js.map} +0 -0
  292. /package/dist/{chunk-LFECE4R7.js.map → chunk-4EDCF7TC.js.map} +0 -0
  293. /package/dist/{chunk-HI7JPDD6.js.map → chunk-5357QUVE.js.map} +0 -0
  294. /package/dist/{chunk-F7JRQ2EI.js.map → chunk-5YX2VQFP.js.map} +0 -0
  295. /package/dist/{chunk-QZOQVJ5L.js.map → chunk-645GGNTW.js.map} +0 -0
  296. /package/dist/{chunk-N5PVD4J5.js.map → chunk-6DO672AG.js.map} +0 -0
  297. /package/dist/{chunk-PGJIWCQR.js.map → chunk-6EZQLNPK.js.map} +0 -0
  298. /package/dist/{chunk-YQMJJ7AL.js.map → chunk-6G2RAZTS.js.map} +0 -0
  299. /package/dist/{chunk-KNW63H63.js.map → chunk-6PQZIZMN.js.map} +0 -0
  300. /package/dist/{chunk-FZZMNKVF.js.map → chunk-6TAPAIRR.js.map} +0 -0
  301. /package/dist/{chunk-ERAMSYPR.js.map → chunk-7N4O632I.js.map} +0 -0
  302. /package/dist/{chunk-XFOKLWJZ.js.map → chunk-7S5PXEO7.js.map} +0 -0
  303. /package/dist/{chunk-UIJLDAV7.js.map → chunk-AA6YMOEK.js.map} +0 -0
  304. /package/dist/{chunk-CRD2WCU7.js.map → chunk-AFWUQJ4P.js.map} +0 -0
  305. /package/dist/{chunk-SNWCT6JN.js.map → chunk-AMIUZRDQ.js.map} +0 -0
  306. /package/dist/{chunk-3I7KE2N6.js.map → chunk-BNV7P52K.js.map} +0 -0
  307. /package/dist/{chunk-64UNVW6D.js.map → chunk-BP3ZKIPE.js.map} +0 -0
  308. /package/dist/{chunk-3V7OTBUZ.js.map → chunk-BQ2SFA27.js.map} +0 -0
  309. /package/dist/{chunk-Q5SCBQLY.js.map → chunk-BXLC3TBQ.js.map} +0 -0
  310. /package/dist/{chunk-Z5V5E3JW.js.map → chunk-COKPPU42.js.map} +0 -0
  311. /package/dist/{chunk-QADTI63U.js.map → chunk-CZVAVX5L.js.map} +0 -0
  312. /package/dist/{chunk-WDEVKND3.js.map → chunk-D2YJPZMU.js.map} +0 -0
  313. /package/dist/{chunk-OA6T2ME3.js.map → chunk-DYHOBKPU.js.map} +0 -0
  314. /package/dist/{chunk-6WAP7BJS.js.map → chunk-E6SPWZRN.js.map} +0 -0
  315. /package/dist/{chunk-UTIYB6VE.js.map → chunk-E73PAU4U.js.map} +0 -0
  316. /package/dist/{chunk-XR474YYX.js.map → chunk-EDVAFY76.js.map} +0 -0
  317. /package/dist/{chunk-MEMVZW64.js.map → chunk-EPNZQWS4.js.map} +0 -0
  318. /package/dist/{chunk-GZITNT7O.js.map → chunk-FGZIEZEP.js.map} +0 -0
  319. /package/dist/{chunk-4X2TOMK6.js.map → chunk-FKUVFPQZ.js.map} +0 -0
  320. /package/dist/{chunk-UN5WU2OX.js.map → chunk-GDWU7WF4.js.map} +0 -0
  321. /package/dist/{chunk-643YFWNK.js.map → chunk-GPWDP5FF.js.map} +0 -0
  322. /package/dist/{chunk-XA5ES25V.js.map → chunk-HKQWFICM.js.map} +0 -0
  323. /package/dist/{chunk-255WTBZ5.js.map → chunk-IWSTMVCA.js.map} +0 -0
  324. /package/dist/{chunk-TZC6KIK2.js.map → chunk-JG733RMP.js.map} +0 -0
  325. /package/dist/{chunk-7MLT66DE.js.map → chunk-K33X3PDT.js.map} +0 -0
  326. /package/dist/{chunk-K3PMMW23.js.map → chunk-K6VEN5VN.js.map} +0 -0
  327. /package/dist/{chunk-HOWAMSUY.js.map → chunk-KAWVH3AA.js.map} +0 -0
  328. /package/dist/{chunk-IJVBLU25.js.map → chunk-KJZ4PINO.js.map} +0 -0
  329. /package/dist/{chunk-REHGWN5M.js.map → chunk-KXDLLS62.js.map} +0 -0
  330. /package/dist/{chunk-YQ5GQ32T.js.map → chunk-KZP5YTE7.js.map} +0 -0
  331. /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
  332. /package/dist/{chunk-UKUGSU3Y.js.map → chunk-L4V7FZJI.js.map} +0 -0
  333. /package/dist/{chunk-W56KN53D.js.map → chunk-L6IDPTNX.js.map} +0 -0
  334. /package/dist/{chunk-AYDVNXGR.js.map → chunk-LCKUEYU2.js.map} +0 -0
  335. /package/dist/{chunk-24HHUCWB.js.map → chunk-LDCZPZPD.js.map} +0 -0
  336. /package/dist/{chunk-KV7LTOWC.js.map → chunk-M225SD4H.js.map} +0 -0
  337. /package/dist/{chunk-FQMLTCXT.js.map → chunk-MAHY7PK3.js.map} +0 -0
  338. /package/dist/{chunk-Z2J4MRTF.js.map → chunk-MKNW4FRR.js.map} +0 -0
  339. /package/dist/{chunk-ILJ3FXIC.js.map → chunk-MM3QESLI.js.map} +0 -0
  340. /package/dist/{chunk-FYJL432J.js.map → chunk-MQPUS773.js.map} +0 -0
  341. /package/dist/{chunk-VRSW7PIO.js.map → chunk-NKBSWAP3.js.map} +0 -0
  342. /package/dist/{chunk-ULC4SCFC.js.map → chunk-NLJ7LL6H.js.map} +0 -0
  343. /package/dist/{chunk-RAQD5QCM.js.map → chunk-NQ6JP5CC.js.map} +0 -0
  344. /package/dist/{chunk-IFOHCY4O.js.map → chunk-OF3KG5EV.js.map} +0 -0
  345. /package/dist/{chunk-W676GY42.js.map → chunk-P772HCHI.js.map} +0 -0
  346. /package/dist/{chunk-CWRQGA2T.js.map → chunk-POIENBXE.js.map} +0 -0
  347. /package/dist/{chunk-FW5GTAUY.js.map → chunk-Q4AX4FOK.js.map} +0 -0
  348. /package/dist/{chunk-XQAFSC66.js.map → chunk-Q4FNCT4C.js.map} +0 -0
  349. /package/dist/{chunk-PIELY4BJ.js.map → chunk-Q5Z66LKI.js.map} +0 -0
  350. /package/dist/{chunk-4Y3QLISA.js.map → chunk-Q7AONB4G.js.map} +0 -0
  351. /package/dist/{chunk-EZBBLLEU.js.map → chunk-QQBYZ3B3.js.map} +0 -0
  352. /package/dist/{chunk-FT3LJZWZ.js.map → chunk-RWUXMBSO.js.map} +0 -0
  353. /package/dist/{chunk-KWBMM6MJ.js.map → chunk-RZKKWIGQ.js.map} +0 -0
  354. /package/dist/{chunk-RVBLOR32.js.map → chunk-S7CXVIEF.js.map} +0 -0
  355. /package/dist/{chunk-WLLUARTC.js.map → chunk-T2G4LDU5.js.map} +0 -0
  356. /package/dist/{chunk-OFRQMFWD.js.map → chunk-T5D3DYVN.js.map} +0 -0
  357. /package/dist/{chunk-O4UXH7BM.js.map → chunk-TP6KZ2YR.js.map} +0 -0
  358. /package/dist/{chunk-HAWOS4SF.js.map → chunk-TPDN3B5T.js.map} +0 -0
  359. /package/dist/{chunk-54DOLCJ3.js.map → chunk-TXIIJW6C.js.map} +0 -0
  360. /package/dist/{chunk-HN36UVOE.js.map → chunk-U4Z6GZDW.js.map} +0 -0
  361. /package/dist/{chunk-J2IQ6FJ5.js.map → chunk-UKLNLWTP.js.map} +0 -0
  362. /package/dist/{chunk-MKHNLRVX.js.map → chunk-VPPD2AJN.js.map} +0 -0
  363. /package/dist/{chunk-TIM4PXWN.js.map → chunk-VWRXSBT2.js.map} +0 -0
  364. /package/dist/{chunk-KVP5A3YK.js.map → chunk-WDWZKTGA.js.map} +0 -0
  365. /package/dist/{chunk-FYSS2PYA.js.map → chunk-WH5ZEBKS.js.map} +0 -0
  366. /package/dist/{chunk-KAGXV3ID.js.map → chunk-WMMXOSZG.js.map} +0 -0
  367. /package/dist/{chunk-4RSFYS2V.js.map → chunk-X6D5JEUV.js.map} +0 -0
  368. /package/dist/{chunk-GFYDOH7D.js.map → chunk-XEPNAU3T.js.map} +0 -0
  369. /package/dist/{chunk-VMACQT3T.js.map → chunk-XH7UDC5Y.js.map} +0 -0
  370. /package/dist/{chunk-PDWQJFMK.js.map → chunk-XHMHHP7B.js.map} +0 -0
  371. /package/dist/{chunk-SA3KLZDZ.js.map → chunk-XNAI7QGU.js.map} +0 -0
  372. /package/dist/{chunk-7TENMQNQ.js.map → chunk-XZMSRHFD.js.map} +0 -0
  373. /package/dist/{chunk-HBHBRRSW.js.map → chunk-YBAK2WN5.js.map} +0 -0
  374. /package/dist/{chunk-QLKUWDMQ.js.map → chunk-YDJ5GAGL.js.map} +0 -0
  375. /package/dist/{chunk-3V5V44UP.js.map → chunk-YHFLI2FD.js.map} +0 -0
  376. /package/dist/{chunk-LOLYBFYY.js.map → chunk-ZCNR4DN5.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/data-display/RegionMap/RegionMapPin.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { alpha, type Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { rem } from '../../../tokens/relative';\n\nimport { METRES_PER_DEGREE, type PlaneBox, type PlanePoint, type Projection } from './RegionMap.helpers';\nimport type { RegionMapModel } from './RegionMap.hooks';\nimport type { RegionMapCenter, RegionMapCopy, RegionMapDot, RegionMapGhost, RegionMapPin } from './RegionMap.types';\n\n/**\n * The movable centre of a `RegionMap` (`pin`, `ghost`, `dots`): a pin the\n * viewer drags with a mouse or one finger, or focuses and nudges with the\n * arrow keys, while the VIEW stays where `center` put it — so the areas never\n * slide under a dragging finger. The circles follow the pin; a dashed ring\n * and dot stay at `ghost`; `dots` are small points (filled or hollow).\n *\n * The pin is HTML over the drawing, at its point by percent like the labels,\n * carrying `data-region-pin` so a host that zooms the drawing's layers can\n * move it with them. Its moves are reported, never applied: the host passes\n * the new point back.\n */\n\n/** The movable centre and what is drawn with it, as the drawing receives it. */\nexport interface Moving {\n center: RegionMapCenter;\n pin?: RegionMapPin;\n ghost?: RegionMapGhost;\n dots?: readonly RegionMapDot[];\n copy: RegionMapCopy;\n}\n\ntype DrawnModel = Pick<RegionMapModel, 'projection' | 'radii'> & { view: PlaneBox };\n\n/**\n * What the movable centre draws inside the SVG: the circles around the pin\n * (else `fallback`, the centre's own circles), the ghost, and the dots.\n */\nexport function PinShapes({ model, moving, testId, theme, fallback }: { model: DrawnModel; moving: Moving | undefined; testId: string; theme: Theme; fallback: React.ReactNode }): React.JSX.Element {\n const { projection, view } = model;\n if (!moving || !projection) return <>{fallback}</>;\n const pinAt = moving.pin ? projection.project([moving.pin.at.latitude, moving.pin.at.longitude]) : null;\n return (\n <>\n {pinAt ? <PinCircles at={pinAt} radii={model.radii} theme={theme} /> : fallback}\n {pinAt && moving.ghost ? <GhostShapes ghost={moving.ghost} pinAt={pinAt} projection={projection} view={view} testId={testId} theme={theme} /> : null}\n {moving.dots ? <Dots dots={moving.dots} projection={projection} view={view} testId={testId} theme={theme} /> : null}\n </>\n );\n}\n\n/** What the movable centre draws over the SVG, in HTML: the pin and the scale bar. */\nexport function PinOverlay({\n model,\n moving,\n svgRef,\n testId,\n theme,\n}: {\n model: DrawnModel;\n moving: Moving | undefined;\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}): React.JSX.Element | null {\n if (!moving || !model.projection) return null;\n return (\n <>\n {moving.pin ? <PinMarker pin={moving.pin} center={moving.center} projection={model.projection} view={model.view} svgRef={svgRef} testId={testId} theme={theme} /> : null}\n <ScaleBar view={model.view} copy={moving.copy} svgRef={svgRef} testId={testId} theme={theme} />\n </>\n );\n}\n\n/** The flat projection's inverse around `center` — it is linear. */\nexport function latLngAt(center: RegionMapCenter, point: PlanePoint): RegionMapCenter {\n const kx = METRES_PER_DEGREE * Math.cos((center.latitude * Math.PI) / 180);\n return { latitude: center.latitude - point.y / METRES_PER_DEGREE, longitude: center.longitude + point.x / kx };\n}\n\n/** A point of the plane as fractions of the view (0..1 across, 0..1 down). */\nfunction fractionOf(view: PlaneBox, point: PlanePoint): { x: number; y: number } {\n return { x: (point.x - view.minX) / view.spanX, y: (point.y - view.minY) / view.spanY };\n}\n\n/** Keep a fraction inside the view, a hair in from its edge (the mock's clamp). */\nconst clampFraction = (value: number): number => Math.min(0.995, Math.max(0.005, value));\n\n/** A plane point kept inside the view by the same clamp a drag gets. */\nfunction clampToView(view: PlaneBox, point: PlanePoint): PlanePoint {\n const at = fractionOf(view, point);\n return { x: view.minX + clampFraction(at.x) * view.spanX, y: view.minY + clampFraction(at.y) * view.spanY };\n}\n\n/** Arrow keys, as metres east and north per press. */\nconst ARROWS: Record<string, [number, number]> = { ArrowLeft: [-1, 0], ArrowRight: [1, 0], ArrowUp: [0, 1], ArrowDown: [0, -1] };\n\n/** One arrow key: 50 m unless the host says otherwise. */\nconst DEFAULT_STEP_METRES = 50;\n\ninterface PinLayerProps {\n pin: RegionMapPin;\n center: RegionMapCenter;\n projection: Projection;\n view: PlaneBox;\n /** The drawing's SVG, whose on-screen box maps a pointer to the plane (zoomed or not). */\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}\n\n/** The draggable pin, as HTML over the drawing. */\nexport function PinMarker({ pin, center, projection, view, svgRef, testId, theme }: PinLayerProps): React.JSX.Element {\n const ref = React.useRef<HTMLDivElement>(null);\n const live = React.useRef({ pin, center, view });\n live.current = { pin, center, view };\n usePinDrag(ref, svgRef, live);\n const at = fractionOf(view, projection.project([pin.at.latitude, pin.at.longitude]));\n const onKeyDown = (event: React.KeyboardEvent): void => {\n const arrow = ARROWS[event.key];\n if (!arrow || pin.disabled) return;\n event.preventDefault();\n const step = pin.stepMetres ?? DEFAULT_STEP_METRES;\n const plane = projection.project([pin.at.latitude, pin.at.longitude]);\n const next = latLngAt(center, clampToView(view, { x: plane.x + arrow[0] * step, y: plane.y - arrow[1] * step }));\n pin.onMove?.(next);\n pin.onDrop(next);\n };\n return (\n <Box\n ref={ref}\n role=\"button\"\n tabIndex={pin.disabled ? -1 : 0}\n aria-label={pin.ariaLabel}\n aria-disabled={pin.disabled || undefined}\n onKeyDown={onKeyDown}\n data-testid={`${testId}-pin`}\n data-region-pin=\"\"\n style={{ left: `${(at.x * 100).toFixed(3)}%`, top: `${(at.y * 100).toFixed(3)}%` }}\n sx={{\n position: 'absolute',\n transform: 'translate(-50%, -100%)',\n width: rem(theme, 44),\n height: rem(theme, 48),\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n cursor: pin.disabled ? 'default' : 'grab',\n touchAction: 'none',\n zIndex: 2,\n borderRadius: 1,\n '&:focus-visible': { outline: `${rem(theme, 2)} solid`, outlineColor: 'primary.main', outlineOffset: rem(theme, 2) },\n }}\n >\n <Box component=\"svg\" viewBox=\"0 0 32 42\" aria-hidden=\"true\" sx={{ width: rem(theme, 32), height: rem(theme, 42) }}>\n <path\n d=\"M16 41C16 41 3 25 3 15.5A13 13 0 1 1 29 15.5C29 25 16 41 16 41Z\"\n fill={theme.palette.primary.main}\n stroke={theme.palette.background.paper}\n strokeWidth={2}\n />\n <circle cx=\"16\" cy=\"15.5\" r=\"5\" fill={theme.palette.background.paper} />\n </Box>\n <Box\n component=\"span\"\n aria-hidden\n sx={{\n position: 'absolute',\n left: '88%',\n top: 0,\n px: 0.75,\n borderRadius: 0.5,\n border: 1,\n borderColor: 'divider',\n bgcolor: 'background.paper',\n color: 'text.primary',\n fontSize: rem(theme, 12),\n fontWeight: 600,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n }}\n >\n {pin.label}\n </Box>\n </Box>\n );\n}\n\n/**\n * The pointer drag: native listeners on the pin, so a host's own listeners on\n * the drawing (a pan, a tap) never see the press; captured, so a finger that\n * leaves the pin keeps dragging it; clamped inside the view.\n */\nfunction usePinDrag(\n ref: React.RefObject<HTMLDivElement | null>,\n svgRef: React.RefObject<SVGSVGElement | null>,\n live: React.RefObject<{ pin: RegionMapPin; center: RegionMapCenter; view: PlaneBox }>,\n): void {\n React.useEffect(() => {\n const element = ref.current;\n if (!element) return undefined;\n let dragging: number | null = null;\n // Where the last move put the pin: a cancelled gesture (a browser may\n // report 0,0 for it) rests there rather than jumping to the corner.\n let last: RegionMapCenter | null = null;\n const pointAt = (event: PointerEvent): RegionMapCenter | null => {\n const box = svgRef.current?.getBoundingClientRect();\n if (!box || box.width === 0 || box.height === 0) return null;\n const { view, center } = live.current;\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) return null;\n const fx = clampFraction((event.clientX - box.left) / box.width);\n const fy = clampFraction((event.clientY - box.top) / box.height);\n return latLngAt(center, { x: view.minX + fx * view.spanX, y: view.minY + fy * view.spanY });\n };\n const down = (event: PointerEvent): void => {\n event.stopPropagation();\n if (live.current.pin.disabled) return;\n event.preventDefault();\n dragging = event.pointerId;\n last = null;\n element.setPointerCapture?.(event.pointerId);\n };\n const move = (event: PointerEvent): void => {\n if (dragging !== event.pointerId) return;\n event.stopPropagation();\n const at = pointAt(event);\n if (!at) return;\n last = at;\n live.current.pin.onMove?.(at);\n };\n const up = (event: PointerEvent): void => {\n if (dragging !== event.pointerId) return;\n event.stopPropagation();\n dragging = null;\n const at = event.type === 'pointercancel' ? last : (pointAt(event) ?? last);\n if (at) live.current.pin.onDrop(at);\n };\n // A click that ends a drag is the drag's, not a tap on the area under it.\n const click = (event: MouseEvent): void => event.stopPropagation();\n element.addEventListener('pointerdown', down);\n element.addEventListener('pointermove', move);\n element.addEventListener('pointerup', up);\n element.addEventListener('pointercancel', up);\n element.addEventListener('click', click);\n return () => {\n element.removeEventListener('pointerdown', down);\n element.removeEventListener('pointermove', move);\n element.removeEventListener('pointerup', up);\n element.removeEventListener('pointercancel', up);\n element.removeEventListener('click', click);\n };\n }, [ref, svgRef, live]);\n}\n\n/** The circles around the pin: solid in the primary colour, faintly filled. */\nexport function PinCircles({ at, radii, theme }: { at: PlanePoint; radii: readonly number[]; theme: Theme }): React.JSX.Element {\n return (\n <>\n {radii.map((radius) => (\n <circle\n key={radius}\n cx={at.x}\n cy={at.y}\n r={radius}\n fill={alpha(theme.palette.primary.main, 0.06)}\n stroke={theme.palette.primary.main}\n strokeWidth={2.25}\n vectorEffect=\"non-scaling-stroke\"\n pointerEvents=\"none\"\n />\n ))}\n </>\n );\n}\n\n/** Where the circles stood: a dashed ring and dot at `ghost`, and a dashed line from it to the pin. */\nexport function GhostShapes({\n ghost,\n pinAt,\n projection,\n view,\n testId,\n theme,\n}: {\n ghost: RegionMapGhost;\n pinAt: PlanePoint;\n projection: Projection;\n view: PlaneBox;\n testId: string;\n theme: Theme;\n}): React.JSX.Element {\n const at = projection.project([ghost.at.latitude, ghost.at.longitude]);\n const stroke = theme.palette.text.secondary;\n const common = { fill: 'none', stroke, vectorEffect: 'non-scaling-stroke', pointerEvents: 'none' } as const;\n return (\n <g data-testid={`${testId}-ghost`}>\n <circle cx={at.x} cy={at.y} r={ghost.radiusMetres} strokeWidth={1.5} strokeDasharray=\"6 5\" {...common} />\n <line x1={at.x} y1={at.y} x2={pinAt.x} y2={pinAt.y} strokeWidth={1.5} strokeDasharray=\"4 4\" {...common} />\n <circle cx={at.x} cy={at.y} r={view.spanX / 110} strokeWidth={2} strokeDasharray=\"3 2\" {...common} fill={alpha(theme.palette.background.paper, 0.7)} />\n </g>\n );\n}\n\n/** The dots: filled with the ink, or hollow (paper with an ink ring). */\nexport function Dots({ dots, projection, view, testId, theme }: { dots: readonly RegionMapDot[]; projection: Projection; view: PlaneBox; testId: string; theme: Theme }): React.JSX.Element {\n return (\n <g data-testid={`${testId}-dots`}>\n {dots.map((dot) => {\n const at = projection.project([dot.at.latitude, dot.at.longitude]);\n return (\n <circle\n key={dot.id}\n cx={at.x}\n cy={at.y}\n r={view.spanX / 150}\n fill={dot.filled ? theme.palette.text.primary : theme.palette.background.paper}\n stroke={theme.palette.text.primary}\n strokeWidth={2}\n vectorEffect=\"non-scaling-stroke\"\n pointerEvents=\"none\"\n data-filled={dot.filled ? 'true' : 'false'}\n />\n );\n })}\n </g>\n );\n}\n\n/** Nice lengths a scale bar may take, in metres. */\nconst SCALE_STEPS = [50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000];\n\n/** The longest nice length that fits in a quarter of the drawing's width. */\nexport function scaleMetres(view: PlaneBox): number {\n const quarter = view.spanX / 4;\n return SCALE_STEPS.filter((step) => step <= quarter).at(-1) ?? SCALE_STEPS[0]!;\n}\n\n/**\n * A scale bar, bottom-left, when the host gives `copy.scale`. It reads what is\n * on screen: a host that zooms the drawing's layers (a CSS scale on the SVG)\n * shows fewer metres per pixel, so after every render the bar compares the\n * SVG's drawn width with its laid-out width — both off the SVG itself — and\n * spans the drawing's own width, so its share of it is a share of the view.\n */\nexport function ScaleBar({\n view,\n copy,\n svgRef,\n testId,\n theme,\n}: {\n view: PlaneBox;\n copy: RegionMapCopy;\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}): React.JSX.Element | null {\n // What the drawing shows on screen: its laid-out width, and its width as\n // drawn (a host's CSS scale on the SVG), both read off the SVG itself.\n const [screen, setScreen] = React.useState({ laidOut: 0, drawn: 0 });\n const wanted = copy.scale !== undefined;\n React.useLayoutEffect(() => {\n if (!wanted) return;\n const svg = svgRef.current;\n const next = { laidOut: svg?.clientWidth ?? 0, drawn: svg?.getBoundingClientRect().width ?? 0 };\n if (next.laidOut !== screen.laidOut || Math.abs(next.drawn - screen.drawn) > 0.5) setScreen(next);\n });\n if (!copy.scale) return null;\n const zoom = screen.laidOut > 0 && screen.drawn > 0 ? screen.drawn / screen.laidOut : 1;\n const metres = scaleMetres({ ...view, spanX: view.spanX / zoom });\n // The bar's share of the drawing's width: metres on screen over the metres the width shows.\n const share = (metres * zoom) / view.spanX;\n return (\n <Box\n data-testid={`${testId}-scale`}\n aria-hidden\n sx={{ position: 'absolute', left: 0, right: 0, bottom: rem(theme, 10), pointerEvents: 'none', zIndex: 1 }}\n >\n <Box component=\"span\" sx={{ display: 'block', ml: rem(theme, 10), fontSize: rem(theme, 11), color: 'text.secondary' }}>\n {copy.scale(metres)}\n </Box>\n <Box\n component=\"span\"\n sx={{ display: 'block', height: rem(theme, 4), ml: rem(theme, 10), width: `${(share * 100).toFixed(2)}%`, borderStyle: 'solid', borderWidth: `0 ${rem(theme, 1.5)} ${rem(theme, 1.5)}`, borderColor: 'text.secondary' }}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/components/data-display/RegionMap/RegionMapPin.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { alpha, type Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { rem } from '../../../tokens/relative';\n\nimport { METRES_PER_DEGREE, type PlaneBox, type PlanePoint, type Projection } from './RegionMap.helpers';\nimport type { RegionMapModel } from './RegionMap.hooks';\nimport type { RegionMapCenter, RegionMapCopy, RegionMapDot, RegionMapGhost, RegionMapPin } from './RegionMap.types';\n\n/**\n * The movable centre of a `RegionMap` (`pin`, `ghost`, `dots`): a pin the\n * viewer drags with a mouse or one finger, or focuses and nudges with the\n * arrow keys, while the VIEW stays where `center` put it — so the areas never\n * slide under a dragging finger. The circles follow the pin; a dashed ring\n * and dot stay at `ghost`; `dots` are small points (filled or hollow).\n *\n * The pin is HTML over the drawing, at its point by percent like the labels,\n * carrying `data-region-pin` so a host that zooms the drawing's layers can\n * move it with them. Its moves are reported, never applied: the host passes\n * the new point back.\n */\n\n/** The movable centre and what is drawn with it, as the drawing receives it. */\nexport interface Moving {\n center: RegionMapCenter;\n pin?: RegionMapPin;\n ghost?: RegionMapGhost;\n dots?: readonly RegionMapDot[];\n copy: RegionMapCopy;\n}\n\ntype DrawnModel = Pick<RegionMapModel, 'projection' | 'radii'> & { view: PlaneBox };\n\n/**\n * What the movable centre draws inside the SVG: the circles around the pin\n * (else `fallback`, the centre's own circles), the ghost, and the dots.\n */\nexport function PinShapes({ model, moving, testId, theme, fallback }: { model: DrawnModel; moving: Moving | undefined; testId: string; theme: Theme; fallback: React.ReactNode }): React.JSX.Element {\n const { projection, view } = model;\n if (!moving || !projection) return <>{fallback}</>;\n const pinAt = moving.pin ? projection.project([moving.pin.at.latitude, moving.pin.at.longitude]) : null;\n return (\n <>\n {pinAt ? <PinCircles at={pinAt} radii={model.radii} theme={theme} /> : fallback}\n {pinAt && moving.ghost ? <GhostShapes ghost={moving.ghost} pinAt={pinAt} projection={projection} view={view} testId={testId} theme={theme} /> : null}\n {moving.dots ? <Dots dots={moving.dots} projection={projection} view={view} testId={testId} theme={theme} /> : null}\n </>\n );\n}\n\n/** What the movable centre draws over the SVG, in HTML: the pin and the scale bar. */\nexport function PinOverlay({\n model,\n moving,\n svgRef,\n testId,\n theme,\n}: {\n model: DrawnModel;\n moving: Moving | undefined;\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}): React.JSX.Element | null {\n if (!moving || !model.projection) return null;\n return (\n <>\n {moving.pin ? <PinMarker pin={moving.pin} center={moving.center} projection={model.projection} view={model.view} svgRef={svgRef} testId={testId} theme={theme} /> : null}\n <ScaleBar view={model.view} copy={moving.copy} svgRef={svgRef} testId={testId} theme={theme} />\n </>\n );\n}\n\n/** The flat projection's inverse around `center` — it is linear. */\nexport function latLngAt(center: RegionMapCenter, point: PlanePoint): RegionMapCenter {\n const kx = METRES_PER_DEGREE * Math.cos((center.latitude * Math.PI) / 180);\n return { latitude: center.latitude - point.y / METRES_PER_DEGREE, longitude: center.longitude + point.x / kx };\n}\n\n/** A point of the plane as fractions of the view (0..1 across, 0..1 down). */\nfunction fractionOf(view: PlaneBox, point: PlanePoint): { x: number; y: number } {\n return { x: (point.x - view.minX) / view.spanX, y: (point.y - view.minY) / view.spanY };\n}\n\n/** Keep a fraction inside the view, a hair in from its edge (the mock's clamp). */\nconst clampFraction = (value: number): number => Math.min(0.995, Math.max(0.005, value));\n\n/** A plane point kept inside the view by the same clamp a drag gets. */\nfunction clampToView(view: PlaneBox, point: PlanePoint): PlanePoint {\n const at = fractionOf(view, point);\n return { x: view.minX + clampFraction(at.x) * view.spanX, y: view.minY + clampFraction(at.y) * view.spanY };\n}\n\n/** Arrow keys, as metres east and north per press. */\nconst ARROWS: Record<string, [number, number]> = { ArrowLeft: [-1, 0], ArrowRight: [1, 0], ArrowUp: [0, 1], ArrowDown: [0, -1] };\n\n/** One arrow key: 50 m unless the host says otherwise. */\nconst DEFAULT_STEP_METRES = 50;\n\ninterface PinLayerProps {\n pin: RegionMapPin;\n center: RegionMapCenter;\n projection: Projection;\n view: PlaneBox;\n /** The drawing's SVG, whose on-screen box maps a pointer to the plane (zoomed or not). */\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}\n\n/** The draggable pin, as HTML over the drawing. */\nexport function PinMarker({ pin, center, projection, view, svgRef, testId, theme }: PinLayerProps): React.JSX.Element {\n const ref = React.useRef<HTMLDivElement>(null);\n const live = React.useRef({ pin, center, view });\n live.current = { pin, center, view };\n usePinDrag(ref, svgRef, live);\n const at = fractionOf(view, projection.project([pin.at.latitude, pin.at.longitude]));\n const onKeyDown = (event: React.KeyboardEvent): void => {\n const arrow = ARROWS[event.key];\n if (!arrow || pin.disabled) return;\n event.preventDefault();\n const step = pin.stepMetres ?? DEFAULT_STEP_METRES;\n const plane = projection.project([pin.at.latitude, pin.at.longitude]);\n const next = latLngAt(center, clampToView(view, { x: plane.x + arrow[0] * step, y: plane.y - arrow[1] * step }));\n pin.onMove?.(next);\n pin.onDrop(next);\n };\n return (\n <Box\n ref={ref}\n role=\"button\"\n tabIndex={pin.disabled ? -1 : 0}\n aria-label={pin.ariaLabel}\n aria-disabled={pin.disabled || undefined}\n onKeyDown={onKeyDown}\n data-testid={`${testId}-pin`}\n data-region-pin=\"\"\n style={{ left: `${(at.x * 100).toFixed(3)}%`, top: `${(at.y * 100).toFixed(3)}%` }}\n sx={{\n position: 'absolute',\n transform: 'translate(-50%, -100%)',\n width: rem(theme, 44),\n height: rem(theme, 48),\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n cursor: pin.disabled ? 'default' : 'grab',\n touchAction: 'none',\n zIndex: 2,\n borderRadius: 1,\n '&:focus-visible': { outline: `${rem(theme, 2)} solid`, outlineColor: 'primary.main', outlineOffset: rem(theme, 2) },\n }}\n >\n <Box component=\"svg\" viewBox=\"0 0 32 42\" aria-hidden=\"true\" sx={{ width: rem(theme, 32), height: rem(theme, 42) }}>\n <path\n d=\"M16 41C16 41 3 25 3 15.5A13 13 0 1 1 29 15.5C29 25 16 41 16 41Z\"\n fill={theme.palette.primary.main}\n stroke={theme.palette.background.paper}\n strokeWidth={2}\n />\n <circle cx=\"16\" cy=\"15.5\" r=\"5\" fill={theme.palette.background.paper} />\n </Box>\n <Box\n component=\"span\"\n aria-hidden\n sx={{\n position: 'absolute',\n left: '88%',\n top: 0,\n px: 0.75,\n borderRadius: 0.5,\n border: 1,\n borderColor: 'divider',\n bgcolor: 'background.paper',\n color: 'text.primary',\n fontSize: rem(theme, 12),\n fontWeight: 600,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n }}\n >\n {pin.label}\n </Box>\n </Box>\n );\n}\n\n/**\n * The pointer drag: native listeners on the pin, so a host's own listeners on\n * the drawing (a pan, a tap) never see the press; captured, so a finger that\n * leaves the pin keeps dragging it; clamped inside the view.\n */\nfunction usePinDrag(\n ref: React.RefObject<HTMLDivElement | null>,\n svgRef: React.RefObject<SVGSVGElement | null>,\n live: React.RefObject<{ pin: RegionMapPin; center: RegionMapCenter; view: PlaneBox }>,\n): void {\n React.useEffect(() => {\n const element = ref.current;\n if (!element) return undefined;\n let dragging: number | null = null;\n // Where the last move put the pin: a cancelled gesture (a browser may\n // report 0,0 for it) rests there rather than jumping to the corner.\n let last: RegionMapCenter | null = null;\n const pointAt = (event: PointerEvent): RegionMapCenter | null => {\n const box = svgRef.current?.getBoundingClientRect();\n if (!box || box.width === 0 || box.height === 0) return null;\n const { view, center } = live.current;\n if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) return null;\n const fx = clampFraction((event.clientX - box.left) / box.width);\n const fy = clampFraction((event.clientY - box.top) / box.height);\n return latLngAt(center, { x: view.minX + fx * view.spanX, y: view.minY + fy * view.spanY });\n };\n const down = (event: PointerEvent): void => {\n event.stopPropagation();\n if (live.current.pin.disabled) return;\n event.preventDefault();\n dragging = event.pointerId;\n last = null;\n element.setPointerCapture?.(event.pointerId);\n };\n const move = (event: PointerEvent): void => {\n if (dragging !== event.pointerId) return;\n event.stopPropagation();\n const at = pointAt(event);\n if (!at) return;\n last = at;\n live.current.pin.onMove?.(at);\n };\n const up = (event: PointerEvent): void => {\n if (dragging !== event.pointerId) return;\n event.stopPropagation();\n dragging = null;\n const at = event.type === 'pointercancel' ? last : (pointAt(event) ?? last);\n if (at) live.current.pin.onDrop(at);\n };\n // A click that ends a drag is the drag's, not a tap on the area under it.\n const click = (event: MouseEvent): void => event.stopPropagation();\n element.addEventListener('pointerdown', down);\n element.addEventListener('pointermove', move);\n element.addEventListener('pointerup', up);\n element.addEventListener('pointercancel', up);\n element.addEventListener('click', click);\n return () => {\n element.removeEventListener('pointerdown', down);\n element.removeEventListener('pointermove', move);\n element.removeEventListener('pointerup', up);\n element.removeEventListener('pointercancel', up);\n element.removeEventListener('click', click);\n };\n }, [ref, svgRef, live]);\n}\n\n/** The circles around the pin: solid in the primary colour, faintly filled. */\nexport function PinCircles({ at, radii, theme }: { at: PlanePoint; radii: readonly number[]; theme: Theme }): React.JSX.Element {\n return (\n <>\n {radii.map((radius) => (\n <circle\n key={radius}\n cx={at.x}\n cy={at.y}\n r={radius}\n fill={alpha(theme.palette.primary.main, 0.06)}\n stroke={theme.palette.primary.main}\n strokeWidth={2.25}\n vectorEffect=\"non-scaling-stroke\"\n pointerEvents=\"none\"\n />\n ))}\n </>\n );\n}\n\n/** Where the circles stood: a dashed ring and dot at `ghost`, and a dashed line from it to the pin. */\nexport function GhostShapes({\n ghost,\n pinAt,\n projection,\n view,\n testId,\n theme,\n}: {\n ghost: RegionMapGhost;\n pinAt: PlanePoint;\n projection: Projection;\n view: PlaneBox;\n testId: string;\n theme: Theme;\n}): React.JSX.Element {\n const at = projection.project([ghost.at.latitude, ghost.at.longitude]);\n const stroke = theme.palette.text.secondary;\n const common = { fill: 'none', stroke, vectorEffect: 'non-scaling-stroke', pointerEvents: 'none' } as const;\n return (\n <g data-testid={`${testId}-ghost`}>\n <circle cx={at.x} cy={at.y} r={ghost.radiusMetres} strokeWidth={1.5} strokeDasharray=\"6 5\" {...common} />\n <line x1={at.x} y1={at.y} x2={pinAt.x} y2={pinAt.y} strokeWidth={1.5} strokeDasharray=\"4 4\" {...common} />\n <circle cx={at.x} cy={at.y} r={view.spanX / 110} strokeWidth={2} strokeDasharray=\"3 2\" {...common} fill={alpha(theme.palette.background.paper, 0.7)} />\n </g>\n );\n}\n\n/** The dots: filled with the ink, or hollow (paper with an ink ring). */\nexport function Dots({ dots, projection, view, testId, theme }: { dots: readonly RegionMapDot[]; projection: Projection; view: PlaneBox; testId: string; theme: Theme }): React.JSX.Element {\n return (\n <g data-testid={`${testId}-dots`}>\n {dots.map((dot) => {\n const at = projection.project([dot.at.latitude, dot.at.longitude]);\n return (\n <circle\n key={dot.id}\n cx={at.x}\n cy={at.y}\n r={view.spanX / 150}\n fill={dot.filled ? theme.palette.text.primary : theme.palette.background.paper}\n stroke={theme.palette.text.primary}\n strokeWidth={2}\n vectorEffect=\"non-scaling-stroke\"\n pointerEvents=\"none\"\n data-filled={dot.filled ? 'true' : 'false'}\n />\n );\n })}\n </g>\n );\n}\n\n/** Nice lengths a scale bar may take, in metres. */\nconst SCALE_STEPS = [50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000];\n\n/** The longest nice length that fits in a quarter of the drawing's width. */\nexport function scaleMetres(view: PlaneBox): number {\n const quarter = view.spanX / 4;\n return SCALE_STEPS.filter((step) => step <= quarter).at(-1) ?? SCALE_STEPS[0]!;\n}\n\n/**\n * A scale bar, bottom-left, when the host gives `copy.scale`. It reads what is\n * on screen: a host that zooms the drawing's layers (a CSS scale on the SVG)\n * shows fewer metres per pixel, so after every render the bar compares the\n * SVG's drawn width with its laid-out width — both off the SVG itself — and\n * spans the drawing's own width, so its share of it is a share of the view.\n */\nexport function ScaleBar({\n view,\n copy,\n svgRef,\n testId,\n theme,\n}: {\n view: PlaneBox;\n copy: RegionMapCopy;\n svgRef: React.RefObject<SVGSVGElement | null>;\n testId: string;\n theme: Theme;\n}): React.JSX.Element | null {\n // What the drawing shows on screen: its laid-out width, and its width as\n // drawn (a host's CSS scale on the SVG), both read off the SVG itself.\n const [screen, setScreen] = React.useState({ laidOut: 0, drawn: 0 });\n const wanted = copy.scale !== undefined;\n React.useLayoutEffect(() => {\n if (!wanted) return;\n const svg = svgRef.current;\n const next = { laidOut: svg?.clientWidth ?? 0, drawn: svg?.getBoundingClientRect().width ?? 0 };\n if (next.laidOut !== screen.laidOut || Math.abs(next.drawn - screen.drawn) > 0.5) setScreen(next);\n });\n if (!copy.scale) return null;\n const zoom = screen.laidOut > 0 && screen.drawn > 0 ? screen.drawn / screen.laidOut : 1;\n const metres = scaleMetres({ ...view, spanX: view.spanX / zoom });\n // The bar's share of the drawing's width: metres on screen over the metres the width shows.\n const share = (metres * zoom) / view.spanX;\n return (\n <Box\n data-testid={`${testId}-scale`}\n aria-hidden\n sx={{ position: 'absolute', left: 0, right: 0, bottom: rem(theme, 10), pointerEvents: 'none', zIndex: 1 }}\n >\n <Box component=\"span\" sx={{ display: 'block', ml: rem(theme, 10), fontSize: rem(theme, 12), color: 'text.secondary' }}>\n {copy.scale(metres)}\n </Box>\n <Box\n component=\"span\"\n sx={{ display: 'block', height: rem(theme, 4), ml: rem(theme, 10), width: `${(share * 100).toFixed(2)}%`, borderStyle: 'solid', borderWidth: `0 ${rem(theme, 1.5)} ${rem(theme, 1.5)}`, borderColor: 'text.secondary' }}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  MoreGroup,
4
4
  MoreQuick,
5
5
  fieldClearing
6
- } from "./chunk-J2IQ6FJ5.js";
6
+ } from "./chunk-UKLNLWTP.js";
7
7
  import {
8
8
  useStillAnchor
9
9
  } from "./chunk-7CUZTWKW.js";
@@ -223,4 +223,4 @@ function MoreFilters({
223
223
  export {
224
224
  MoreFilters
225
225
  };
226
- //# sourceMappingURL=chunk-UIJLDAV7.js.map
226
+ //# sourceMappingURL=chunk-AA6YMOEK.js.map
@@ -1,3 +1,10 @@
1
+ import {
2
+ tableStyles
3
+ } from "./chunk-BVHIKXCN.js";
4
+ import {
5
+ useTableSelection,
6
+ useVirtualScrolling
7
+ } from "./chunk-RZSMRBOX.js";
1
8
  import {
2
9
  EmptyRow,
3
10
  NoDataPlaceholder
@@ -6,13 +13,6 @@ import {
6
13
  EnhancedTableBody,
7
14
  EnhancedTableHeader
8
15
  } from "./chunk-CXL3TT3K.js";
9
- import {
10
- tableStyles
11
- } from "./chunk-BVHIKXCN.js";
12
- import {
13
- useTableSelection,
14
- useVirtualScrolling
15
- } from "./chunk-RZSMRBOX.js";
16
16
  import {
17
17
  TABLE_DEFAULTS,
18
18
  containerStyle,
@@ -310,4 +310,4 @@ Table.displayName = "Table";
310
310
  export {
311
311
  Table
312
312
  };
313
- //# sourceMappingURL=chunk-CRD2WCU7.js.map
313
+ //# sourceMappingURL=chunk-AFWUQJ4P.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RailCreateMenu
3
- } from "./chunk-ILJ3FXIC.js";
3
+ } from "./chunk-MM3QESLI.js";
4
4
  import {
5
5
  Box,
6
6
  CONTROL_RESET,
@@ -11,7 +11,7 @@ import {
11
11
  controlProps,
12
12
  destinationControl,
13
13
  focusRing
14
- } from "./chunk-24HHUCWB.js";
14
+ } from "./chunk-LDCZPZPD.js";
15
15
  import {
16
16
  destinationState,
17
17
  isMenu
@@ -295,4 +295,4 @@ function SectionNavRail({
295
295
  export {
296
296
  SectionNavRail
297
297
  };
298
- //# sourceMappingURL=chunk-SNWCT6JN.js.map
298
+ //# sourceMappingURL=chunk-AMIUZRDQ.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ OTP_FONT_PX
3
+ } from "./chunk-VAHJCRNW.js";
1
4
  import {
2
5
  asFieldSize,
3
6
  fieldHeight
@@ -43,17 +46,10 @@ var getColorFromTheme = (theme, color) => {
43
46
  contrastText: palette.contrastText || absoluteInk(theme).white
44
47
  };
45
48
  };
46
- var SIZES = {
47
- xs: { fontPx: 12 },
48
- sm: { fontPx: 14 },
49
- md: { fontPx: 16 },
50
- lg: { fontPx: 18 },
51
- xl: { fontPx: 20 }
52
- };
53
49
  var otpSlotSx = (theme, flags) => {
54
50
  const { customColor = "primary", customSize = "md", glass, gradient } = flags;
55
51
  const palette = getColorFromTheme(theme, customColor);
56
- const { fontPx } = SIZES[customSize] ?? SIZES.md;
52
+ const fontPx = OTP_FONT_PX[customSize] ?? OTP_FONT_PX.md;
57
53
  const side = fieldHeight(theme, asFieldSize(customSize));
58
54
  return {
59
55
  width: side,
@@ -87,4 +83,4 @@ var otpSlotSx = (theme, flags) => {
87
83
  export {
88
84
  otpSlotSx
89
85
  };
90
- //# sourceMappingURL=chunk-NQYC7V5N.js.map
86
+ //# sourceMappingURL=chunk-BAYCMSMI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/InputOTP/InputOTP.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { asFieldSize, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\nimport { OTP_FONT_PX } from './InputOTP.metrics';\n\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is built from the grey ramp. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/** `danger` is this component's name for the error palette. */\nconst namedPalette = (theme: Theme, color: string): ColorPalette => {\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const palette = namedPalette(theme, color);\n const { primary } = theme.palette;\n\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || absoluteInk(theme).white,\n };\n};\n\ntype SizeKey = keyof typeof OTP_FONT_PX;\n\nexport interface OtpSlotFlags {\n customColor?: string;\n customSize?: string;\n glass?: boolean;\n gradient?: boolean;\n}\n\nexport const otpSlotSx = (theme: Theme, flags: OtpSlotFlags): CSSObject => {\n const { customColor = 'primary', customSize = 'md', glass, gradient } = flags;\n const palette = getColorFromTheme(theme, customColor);\n const fontPx = OTP_FONT_PX[customSize as SizeKey] ?? OTP_FONT_PX.md;\n // A slot is a field: a square of the theme's field height for its size.\n const side = fieldHeight(theme, asFieldSize(customSize));\n\n return {\n width: side,\n height: side,\n '& .MuiOutlinedInput-root': {\n width: side,\n height: side,\n fontSize: rem(theme, fontPx),\n fontWeight: 600,\n textAlign: 'center',\n borderRadius: fieldRadius(theme),\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: `blur(${rem(theme, 20)})`,\n '& fieldset': { border: `1px solid ${fieldEdge(theme)}` },\n }),\n ...(gradient && {\n '&.Mui-focused fieldset': {\n background: `linear-gradient(135deg, ${palette.main}, ${palette.light})`,\n borderWidth: rem(theme, 2),\n },\n }),\n '& input': { textAlign: 'center', padding: 0, fontWeight: 'inherit' },\n ...(!glass && { '& fieldset': { borderColor: fieldEdge(theme) } }),\n '&:hover fieldset': { borderColor: palette.main },\n '&.Mui-focused fieldset': { borderColor: palette.main, borderWidth: rem(theme, 2) },\n },\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAmBtB,IAAM,iBAAiB,CAAC,UAA+B,eAAe,KAAK;AAG3E,IAAM,eAAe,CAAC,OAAc,UAAgC;AAClE,QAAM,WAAyC;AAAA,IAC7C,SAAS,MAAM,QAAQ;AAAA,IACvB,WAAW,MAAM,QAAQ;AAAA,IACzB,SAAS,MAAM,QAAQ;AAAA,IACvB,SAAS,MAAM,QAAQ;AAAA,IACvB,MAAM,MAAM,QAAQ;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,EACxB;AAEA,SAAO,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C;AAEA,IAAM,oBAAoB,CAAC,OAAc,UAAgC;AACvE,MAAI,UAAU,WAAW;AACvB,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,QAAM,UAAU,aAAa,OAAO,KAAK;AACzC,QAAM,EAAE,QAAQ,IAAI,MAAM;AAE1B,SAAO;AAAA,IACL,MAAM,QAAQ,QAAQ,QAAQ;AAAA,IAC9B,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,IAC9C,OAAO,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAAA,IAChD,cAAc,QAAQ,gBAAgB,YAAY,KAAK,EAAE;AAAA,EAC3D;AACF;AAWO,IAAM,YAAY,CAAC,OAAc,UAAmC;AACzE,QAAM,EAAE,cAAc,WAAW,aAAa,MAAM,OAAO,SAAS,IAAI;AACxE,QAAM,UAAU,kBAAkB,OAAO,WAAW;AACpD,QAAM,SAAS,YAAY,UAAqB,KAAK,YAAY;AAEjE,QAAM,OAAO,YAAY,OAAO,YAAY,UAAU,CAAC;AAEvD,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,4BAA4B;AAAA,MAC1B,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU,IAAI,OAAO,MAAM;AAAA,MAC3B,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc,YAAY,KAAK;AAAA,MAC/B,GAAI,SAAS;AAAA,QACX,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,QACtC,cAAc,EAAE,QAAQ,aAAa,UAAU,KAAK,CAAC,GAAG;AAAA,MAC1D;AAAA,MACA,GAAI,YAAY;AAAA,QACd,0BAA0B;AAAA,UACxB,YAAY,2BAA2B,QAAQ,IAAI,KAAK,QAAQ,KAAK;AAAA,UACrE,aAAa,IAAI,OAAO,CAAC;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,WAAW,EAAE,WAAW,UAAU,SAAS,GAAG,YAAY,UAAU;AAAA,MACpE,GAAI,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,UAAU,KAAK,EAAE,EAAE;AAAA,MAChE,oBAAoB,EAAE,aAAa,QAAQ,KAAK;AAAA,MAChD,0BAA0B,EAAE,aAAa,QAAQ,MAAM,aAAa,IAAI,OAAO,CAAC,EAAE;AAAA,IACpF;AAAA,EACF;AACF;","names":[]}
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-2ORD2FMN.js";
18
18
  import {
19
19
  Alert
20
- } from "./chunk-Q5SCBQLY.js";
20
+ } from "./chunk-BXLC3TBQ.js";
21
21
  import {
22
22
  Button
23
23
  } from "./chunk-YOXYSAUI.js";
@@ -160,4 +160,4 @@ export {
160
160
  SequenceStepBody,
161
161
  SequenceDoneBody
162
162
  };
163
- //# sourceMappingURL=chunk-3I7KE2N6.js.map
163
+ //# sourceMappingURL=chunk-BNV7P52K.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- thumbnailStripSx
3
- } from "./chunk-VQU3CBAL.js";
4
1
  import {
5
2
  useLightboxCopy
6
3
  } from "./chunk-TEQYTEM2.js";
4
+ import {
5
+ thumbnailStripSx
6
+ } from "./chunk-VQU3CBAL.js";
7
7
  import {
8
8
  onMedia,
9
9
  sheen
@@ -89,4 +89,4 @@ var LightboxThumbnails = ({
89
89
  export {
90
90
  LightboxThumbnails
91
91
  };
92
- //# sourceMappingURL=chunk-64UNVW6D.js.map
92
+ //# sourceMappingURL=chunk-BP3ZKIPE.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  Dialog,
6
6
  DialogContent
7
- } from "./chunk-KWBMM6MJ.js";
7
+ } from "./chunk-RZKKWIGQ.js";
8
8
  import {
9
9
  default as default2
10
10
  } from "./chunk-WEBEOBN5.js";
@@ -69,4 +69,4 @@ function DeleteViewDialog({
69
69
  export {
70
70
  DeleteViewDialog
71
71
  };
72
- //# sourceMappingURL=chunk-3V7OTBUZ.js.map
72
+ //# sourceMappingURL=chunk-BQ2SFA27.js.map
@@ -1,6 +1,12 @@
1
+ import {
2
+ resolveIconPlacement
3
+ } from "./chunk-QXUXO22M.js";
1
4
  import {
2
5
  AlertContent
3
- } from "./chunk-UN5WU2OX.js";
6
+ } from "./chunk-GDWU7WF4.js";
7
+ import {
8
+ pointerInkStyles
9
+ } from "./chunk-LNZJJFZQ.js";
4
10
  import {
5
11
  alertEmphasisStyles,
6
12
  alertLayoutStyles,
@@ -14,12 +20,6 @@ import {
14
20
  resolveAnnouncement,
15
21
  testIdFor
16
22
  } from "./chunk-L7VH6IMR.js";
17
- import {
18
- resolveIconPlacement
19
- } from "./chunk-QXUXO22M.js";
20
- import {
21
- pointerInkStyles
22
- } from "./chunk-LNZJJFZQ.js";
23
23
  import {
24
24
  ACTIVE,
25
25
  ALERT_EASING,
@@ -284,4 +284,4 @@ export {
284
284
  Alert,
285
285
  ALERT_ONLY_PROPS
286
286
  };
287
- //# sourceMappingURL=chunk-Q5SCBQLY.js.map
287
+ //# sourceMappingURL=chunk-BXLC3TBQ.js.map
@@ -1,3 +1,9 @@
1
+ import {
2
+ LightboxOverlay
3
+ } from "./chunk-T2G4LDU5.js";
4
+ import {
5
+ LightboxCurrentMedia
6
+ } from "./chunk-RBGUS7WO.js";
1
7
  import {
2
8
  resolveLightboxProps
3
9
  } from "./chunk-UOS7DEQZ.js";
@@ -6,22 +12,16 @@ import {
6
12
  } from "./chunk-HZBDTPPV.js";
7
13
  import {
8
14
  LightboxThumbnails
9
- } from "./chunk-64UNVW6D.js";
15
+ } from "./chunk-BP3ZKIPE.js";
16
+ import {
17
+ LightboxCopyProvider
18
+ } from "./chunk-TEQYTEM2.js";
10
19
  import {
11
20
  LightboxStage
12
21
  } from "./chunk-SYGM4SHY.js";
13
- import {
14
- LightboxOverlay
15
- } from "./chunk-WLLUARTC.js";
16
22
  import {
17
23
  makeTestId
18
24
  } from "./chunk-VQU3CBAL.js";
19
- import {
20
- LightboxCurrentMedia
21
- } from "./chunk-RBGUS7WO.js";
22
- import {
23
- LightboxCopyProvider
24
- } from "./chunk-TEQYTEM2.js";
25
25
  import {
26
26
  scrim
27
27
  } from "./chunk-XJAD6E3V.js";
@@ -148,4 +148,4 @@ export {
148
148
  Lightbox,
149
149
  Lightbox_default
150
150
  };
151
- //# sourceMappingURL=chunk-Z5V5E3JW.js.map
151
+ //# sourceMappingURL=chunk-COKPPU42.js.map
@@ -1,10 +1,10 @@
1
+ import {
2
+ buildChartContext
3
+ } from "./chunk-JG733RMP.js";
1
4
  import {
2
5
  ChartLegendContent,
3
6
  ChartTooltipContent
4
7
  } from "./chunk-RIRTW5EU.js";
5
- import {
6
- buildChartContext
7
- } from "./chunk-TZC6KIK2.js";
8
8
  import {
9
9
  uiInk
10
10
  } from "./chunk-XJAD6E3V.js";
@@ -318,4 +318,4 @@ function renderChartByType(props, theme) {
318
318
  export {
319
319
  renderChartByType
320
320
  };
321
- //# sourceMappingURL=chunk-QADTI63U.js.map
321
+ //# sourceMappingURL=chunk-CZVAVX5L.js.map
@@ -1,20 +1,20 @@
1
- import {
2
- DataViewsGrid
3
- } from "./chunk-MEMVZW64.js";
4
1
  import {
5
2
  DeleteViewDialog
6
- } from "./chunk-3V7OTBUZ.js";
3
+ } from "./chunk-BQ2SFA27.js";
4
+ import {
5
+ DataViewsGrid
6
+ } from "./chunk-EPNZQWS4.js";
7
7
  import {
8
8
  viewStateKey
9
9
  } from "./chunk-ZOLAYP2D.js";
10
+ import {
11
+ ViewDialogs,
12
+ ViewMutationErrorAlert
13
+ } from "./chunk-24OFA44S.js";
10
14
  import {
11
15
  useUrlEchoGuard,
12
16
  useUrlSyncState
13
17
  } from "./chunk-G6EJLEVV.js";
14
- import {
15
- ViewDialogs,
16
- ViewMutationErrorAlert
17
- } from "./chunk-37MJZLQU.js";
18
18
  import {
19
19
  useSavedViewsController
20
20
  } from "./chunk-B2JSUFDX.js";
@@ -166,4 +166,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
166
166
  export {
167
167
  DataViewsTableBase
168
168
  };
169
- //# sourceMappingURL=chunk-WDEVKND3.js.map
169
+ //# sourceMappingURL=chunk-D2YJPZMU.js.map
@@ -1,7 +1,3 @@
1
- import {
2
- GridBody,
3
- GridHeader
4
- } from "./chunk-5RYPVYWP.js";
5
1
  import {
6
2
  DataGridEmpty,
7
3
  DataGridError,
@@ -10,6 +6,10 @@ import {
10
6
  import {
11
7
  useDataGridModel
12
8
  } from "./chunk-LDROG4QI.js";
9
+ import {
10
+ GridBody,
11
+ GridHeader
12
+ } from "./chunk-5RYPVYWP.js";
13
13
 
14
14
  // src/components/data-display/DataGrid/DataGrid.tsx
15
15
  import Paper from "@mui/material/Paper/index.js";
@@ -120,4 +120,4 @@ export {
120
120
  DataGrid,
121
121
  GRID_ONLY_PROPS
122
122
  };
123
- //# sourceMappingURL=chunk-OA6T2ME3.js.map
123
+ //# sourceMappingURL=chunk-DYHOBKPU.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  FleetCanvas
3
- } from "./chunk-KVP5A3YK.js";
3
+ } from "./chunk-WDWZKTGA.js";
4
4
  import {
5
5
  FleetRoster
6
6
  } from "./chunk-A4B27HYU.js";
@@ -79,4 +79,4 @@ function FleetBody({
79
79
  export {
80
80
  FleetBody
81
81
  };
82
- //# sourceMappingURL=chunk-6WAP7BJS.js.map
82
+ //# sourceMappingURL=chunk-E6SPWZRN.js.map
@@ -1,19 +1,22 @@
1
+ import {
2
+ FilterDialog,
3
+ GridFilterPanel
4
+ } from "./chunk-KAWVH3AA.js";
1
5
  import {
2
6
  ShellEmpty
3
7
  } from "./chunk-MKVDHR3B.js";
8
+ import {
9
+ InlineFilterControls
10
+ } from "./chunk-NKBSWAP3.js";
4
11
  import {
5
12
  GridHeaderRow
6
13
  } from "./chunk-X3AFXHY5.js";
7
14
  import {
8
15
  GridMain
9
- } from "./chunk-SA3KLZDZ.js";
16
+ } from "./chunk-XNAI7QGU.js";
10
17
  import {
11
- FilterDialog,
12
- GridFilterPanel
13
- } from "./chunk-HOWAMSUY.js";
14
- import {
15
- InlineFilterControls
16
- } from "./chunk-VRSW7PIO.js";
18
+ DataViewsPagination
19
+ } from "./chunk-XZFTRGRW.js";
17
20
  import {
18
21
  useFilterOverflow
19
22
  } from "./chunk-WWH674WU.js";
@@ -22,29 +25,26 @@ import {
22
25
  toggleQuick
23
26
  } from "./chunk-KYUEO2IO.js";
24
27
  import {
25
- DataViewsPagination
26
- } from "./chunk-XZFTRGRW.js";
28
+ allOnPageSelected,
29
+ resolveSelectionExtra
30
+ } from "./chunk-5YDS6HO3.js";
27
31
  import {
28
32
  ScopeTabsSlot
29
- } from "./chunk-K3PMMW23.js";
33
+ } from "./chunk-K6VEN5VN.js";
30
34
  import {
31
35
  ShellToolbar
32
- } from "./chunk-IFOHCY4O.js";
33
- import {
34
- allOnPageSelected,
35
- resolveSelectionExtra
36
- } from "./chunk-5YDS6HO3.js";
36
+ } from "./chunk-OF3KG5EV.js";
37
37
  import {
38
38
  SHELL_PROPS,
39
39
  useStickyBarTop
40
40
  } from "./chunk-4IE66GY2.js";
41
- import {
42
- togglePillValues
43
- } from "./chunk-UKNMPGEM.js";
44
41
  import {
45
42
  DataViewsLayoutProvider,
46
43
  useDataViewsLayout
47
44
  } from "./chunk-5CAWRMDX.js";
45
+ import {
46
+ togglePillValues
47
+ } from "./chunk-UKNMPGEM.js";
48
48
  import {
49
49
  useDataViewsCopy
50
50
  } from "./chunk-KHG57NAE.js";
@@ -252,4 +252,4 @@ function GridShell(props) {
252
252
  export {
253
253
  GridShell
254
254
  };
255
- //# sourceMappingURL=chunk-UTIYB6VE.js.map
255
+ //# sourceMappingURL=chunk-E73PAU4U.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-L7BRU4UF.js";
9
9
  import {
10
10
  Alert
11
- } from "./chunk-Q5SCBQLY.js";
11
+ } from "./chunk-BXLC3TBQ.js";
12
12
  import {
13
13
  Button
14
14
  } from "./chunk-YOXYSAUI.js";
@@ -106,4 +106,4 @@ NotificationStatusNotice.displayName = "NotificationStatusNotice";
106
106
  export {
107
107
  NotificationStatusNotice
108
108
  };
109
- //# sourceMappingURL=chunk-XR474YYX.js.map
109
+ //# sourceMappingURL=chunk-EDVAFY76.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  GridShell
3
- } from "./chunk-UTIYB6VE.js";
3
+ } from "./chunk-E73PAU4U.js";
4
4
  import {
5
5
  useDataViewsState
6
- } from "./chunk-LOLYBFYY.js";
6
+ } from "./chunk-ZCNR4DN5.js";
7
7
 
8
8
  // src/components/data-display/DataViews/DataViewsGrid.tsx
9
9
  import { useEffect, useRef } from "react";
@@ -27,4 +27,4 @@ function DataViewsGrid(props) {
27
27
  export {
28
28
  DataViewsGrid
29
29
  };
30
- //# sourceMappingURL=chunk-MEMVZW64.js.map
30
+ //# sourceMappingURL=chunk-EPNZQWS4.js.map
@@ -1,13 +1,3 @@
1
- import {
2
- useTextFit
3
- } from "./chunk-WG7CAT5D.js";
4
- import {
5
- formatHour,
6
- formatRange,
7
- hitBoundsOf,
8
- percentOf,
9
- ticksOf
10
- } from "./chunk-L5CAHQIN.js";
11
1
  import {
12
2
  actionsSx,
13
3
  actualLabelSx,
@@ -25,9 +15,19 @@ import {
25
15
  trackSx,
26
16
  whoSx
27
17
  } from "./chunk-5AZEDQXX.js";
18
+ import {
19
+ useTextFit
20
+ } from "./chunk-WG7CAT5D.js";
28
21
  import {
29
22
  DAY_RULER_METRICS
30
23
  } from "./chunk-273OLFJD.js";
24
+ import {
25
+ formatHour,
26
+ formatRange,
27
+ hitBoundsOf,
28
+ percentOf,
29
+ ticksOf
30
+ } from "./chunk-L5CAHQIN.js";
31
31
  import {
32
32
  ScheduleNameCell
33
33
  } from "./chunk-CGS2LQE5.js";
@@ -228,4 +228,4 @@ export {
228
228
  Coverage,
229
229
  Axis
230
230
  };
231
- //# sourceMappingURL=chunk-GZITNT7O.js.map
231
+ //# sourceMappingURL=chunk-FGZIEZEP.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ useGoogleMapsAPI
3
+ } from "./chunk-L7N4AFZD.js";
1
4
  import {
2
5
  useCurrentLocation
3
6
  } from "./chunk-44FY2YZL.js";
@@ -7,9 +10,6 @@ import {
7
10
  import {
8
11
  useAddressPredictions
9
12
  } from "./chunk-QVYBRD6U.js";
10
- import {
11
- useGoogleMapsAPI
12
- } from "./chunk-L7N4AFZD.js";
13
13
  import {
14
14
  resolveLabels
15
15
  } from "./chunk-LL2BWQPM.js";
@@ -84,4 +84,4 @@ var useAddressAutocomplete = ({
84
84
  export {
85
85
  useAddressAutocomplete
86
86
  };
87
- //# sourceMappingURL=chunk-4X2TOMK6.js.map
87
+ //# sourceMappingURL=chunk-FKUVFPQZ.js.map
@@ -1,10 +1,10 @@
1
- import {
2
- testIdFor
3
- } from "./chunk-L7VH6IMR.js";
4
1
  import {
5
2
  ALERT_CHILDREN_CLASS,
6
3
  ALERT_DESCRIPTION_CLASS
7
4
  } from "./chunk-LNZJJFZQ.js";
5
+ import {
6
+ testIdFor
7
+ } from "./chunk-L7VH6IMR.js";
8
8
  import {
9
9
  DESCRIPTION,
10
10
  ICON_SLOT,
@@ -85,4 +85,4 @@ var AlertContent = ({ title, description, titleIcon, dataTestId, children }) =>
85
85
  export {
86
86
  AlertContent
87
87
  };
88
- //# sourceMappingURL=chunk-UN5WU2OX.js.map
88
+ //# sourceMappingURL=chunk-GDWU7WF4.js.map