@k2b/ui 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/dist/browser/actions/Button.js +11 -2
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/Disclosure.js +11 -8
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js +4 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +16 -2
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js +69 -22
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -7
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/Tabs.js +132 -47
  14. package/dist/browser/actions/Tabs.js.map +1 -1
  15. package/dist/browser/actions/index.js +2 -2
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/chat/ChatComposer.js +751 -423
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatContextPopup.js +123 -0
  20. package/dist/browser/chat/ChatContextPopup.js.map +1 -0
  21. package/dist/browser/chat/ChatPrimitives.js +141 -78
  22. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  23. package/dist/browser/chat/ChatTasks.js +112 -0
  24. package/dist/browser/chat/ChatTasks.js.map +1 -0
  25. package/dist/browser/chat/ChatTimeline.js +31 -14
  26. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  27. package/dist/browser/chat/chat-behavior.js +0 -5
  28. package/dist/browser/chat/chat-behavior.js.map +1 -1
  29. package/dist/browser/chat/composer-document.js +55 -0
  30. package/dist/browser/chat/composer-document.js.map +1 -0
  31. package/dist/browser/chat/index.js +6 -1
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/chat/types.js.map +1 -1
  34. package/dist/browser/content/Chart.js +148 -239
  35. package/dist/browser/content/Chart.js.map +1 -1
  36. package/dist/browser/content/ChartExplorer.js +324 -0
  37. package/dist/browser/content/ChartExplorer.js.map +1 -0
  38. package/dist/browser/content/ChartExplorerControls.js +153 -0
  39. package/dist/browser/content/ChartExplorerControls.js.map +1 -0
  40. package/dist/browser/content/ChartFilterControls.js +200 -0
  41. package/dist/browser/content/ChartFilterControls.js.map +1 -0
  42. package/dist/browser/content/ChartSnapshotView.js +114 -0
  43. package/dist/browser/content/ChartSnapshotView.js.map +1 -0
  44. package/dist/browser/content/DataTable.js +48 -32
  45. package/dist/browser/content/DataTable.js.map +1 -1
  46. package/dist/browser/content/FileBrowser.js +3 -0
  47. package/dist/browser/content/FileBrowser.js.map +1 -1
  48. package/dist/browser/content/FileGrid.js +93 -0
  49. package/dist/browser/content/FileGrid.js.map +1 -0
  50. package/dist/browser/content/FileTree.js +2 -2
  51. package/dist/browser/content/FileTree.js.map +1 -1
  52. package/dist/browser/content/FileView.js +511 -162
  53. package/dist/browser/content/FileView.js.map +1 -1
  54. package/dist/browser/content/MarkdownView.js +6 -0
  55. package/dist/browser/content/MarkdownView.js.map +1 -1
  56. package/dist/browser/content/Pagination.js.map +1 -1
  57. package/dist/browser/content/PdfPreview.js +107 -90
  58. package/dist/browser/content/PdfPreview.js.map +1 -1
  59. package/dist/browser/content/chart-cursor.js +33 -0
  60. package/dist/browser/content/chart-cursor.js.map +1 -0
  61. package/dist/browser/content/chart-explorer.js +147 -0
  62. package/dist/browser/content/chart-explorer.js.map +1 -0
  63. package/dist/browser/content/chart-inspection.js +447 -0
  64. package/dist/browser/content/chart-inspection.js.map +1 -0
  65. package/dist/browser/content/chart-line-gaps.js +53 -0
  66. package/dist/browser/content/chart-line-gaps.js.map +1 -0
  67. package/dist/browser/content/chart-map-viewport.js +5 -1
  68. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  69. package/dist/browser/content/chart-snapshot.js +63 -0
  70. package/dist/browser/content/chart-snapshot.js.map +1 -0
  71. package/dist/browser/content/chart-state-timeline.js +32 -4
  72. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  73. package/dist/browser/content/chart-svg.js +54 -0
  74. package/dist/browser/content/chart-svg.js.map +1 -0
  75. package/dist/browser/content/collection-selection.js +109 -0
  76. package/dist/browser/content/collection-selection.js.map +1 -0
  77. package/dist/browser/content/delimited-preferences.js +21 -0
  78. package/dist/browser/content/delimited-preferences.js.map +1 -0
  79. package/dist/browser/content/file-tree.js.map +1 -1
  80. package/dist/browser/content/file-view-preview.js +11 -7
  81. package/dist/browser/content/file-view-preview.js.map +1 -1
  82. package/dist/browser/content/index.js +9 -0
  83. package/dist/browser/content/index.js.map +1 -1
  84. package/dist/browser/feedback/InlineGuidance.js +17 -3
  85. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  86. package/dist/browser/feedback/dialog-core.js +81 -7
  87. package/dist/browser/feedback/dialog-core.js.map +1 -1
  88. package/dist/browser/feedback/prompts.js +6 -0
  89. package/dist/browser/feedback/prompts.js.map +1 -1
  90. package/dist/browser/feedback/toast.js +29 -6
  91. package/dist/browser/feedback/toast.js.map +1 -1
  92. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  93. package/dist/browser/inputs/Select.js.map +1 -1
  94. package/dist/browser/inputs/SelectChip.js +3 -2
  95. package/dist/browser/inputs/SelectChip.js.map +1 -1
  96. package/dist/browser/inputs/TextInput.js +7 -1
  97. package/dist/browser/inputs/TextInput.js.map +1 -1
  98. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  99. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  100. package/dist/browser/inputs/markdown/behaviors.js +1 -1
  101. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  102. package/dist/browser/intl/Format.js +89 -16
  103. package/dist/browser/intl/Format.js.map +1 -1
  104. package/dist/browser/intl/index.js.map +1 -1
  105. package/dist/browser/intl/messages.js +130 -2
  106. package/dist/browser/intl/messages.js.map +1 -1
  107. package/dist/browser/layout/AppWorkspace.js +712 -624
  108. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  109. package/dist/browser/layout/BottomSheet.js +95 -0
  110. package/dist/browser/layout/BottomSheet.js.map +1 -0
  111. package/dist/browser/layout/DetailPanel.js +56 -44
  112. package/dist/browser/layout/DetailPanel.js.map +1 -1
  113. package/dist/browser/layout/Navigation.js +278 -0
  114. package/dist/browser/layout/Navigation.js.map +1 -0
  115. package/dist/browser/layout/PanelDialog.js +219 -71
  116. package/dist/browser/layout/PanelDialog.js.map +1 -1
  117. package/dist/browser/layout/ScrollArea.js +21 -1
  118. package/dist/browser/layout/ScrollArea.js.map +1 -1
  119. package/dist/browser/layout/Settings.js.map +1 -1
  120. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  121. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  122. package/dist/browser/layout/app-workspace-controller.js +3 -0
  123. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  124. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  125. package/dist/browser/layout/index.js +3 -0
  126. package/dist/browser/layout/index.js.map +1 -1
  127. package/dist/browser/layout/navigation-model.js +23 -0
  128. package/dist/browser/layout/navigation-model.js.map +1 -0
  129. package/dist/browser/layout/scroll-fade.js +100 -0
  130. package/dist/browser/layout/scroll-fade.js.map +1 -0
  131. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  132. package/dist/browser/surfaces/StatusBadge.js +2 -1
  133. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  134. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  135. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  136. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  178. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  179. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  180. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  181. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  182. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  183. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  184. package/dist/plex.css +1 -1
  185. package/dist/ssr/actions/Button.js +11 -2
  186. package/dist/ssr/actions/Button.js.map +1 -1
  187. package/dist/ssr/actions/Disclosure.js +2 -2
  188. package/dist/ssr/actions/Disclosure.js.map +1 -1
  189. package/dist/ssr/actions/Dropdown.js +4 -1
  190. package/dist/ssr/actions/Dropdown.js.map +1 -1
  191. package/dist/ssr/actions/FilterChip.js +16 -2
  192. package/dist/ssr/actions/FilterChip.js.map +1 -1
  193. package/dist/ssr/actions/SplitButton.js +69 -22
  194. package/dist/ssr/actions/SplitButton.js.map +1 -1
  195. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  196. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  197. package/dist/ssr/actions/Tabs.js +58 -11
  198. package/dist/ssr/actions/Tabs.js.map +1 -1
  199. package/dist/ssr/actions/index.js +2 -2
  200. package/dist/ssr/actions/index.js.map +1 -1
  201. package/dist/ssr/chat/ChatComposer.js +366 -134
  202. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  203. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  204. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  205. package/dist/ssr/chat/ChatPrimitives.js +49 -11
  206. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  207. package/dist/ssr/chat/ChatTasks.js +48 -0
  208. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  209. package/dist/ssr/chat/ChatTimeline.js +14 -4
  210. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  211. package/dist/ssr/chat/chat-behavior.js +0 -5
  212. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  213. package/dist/ssr/chat/composer-document.js +55 -0
  214. package/dist/ssr/chat/composer-document.js.map +1 -0
  215. package/dist/ssr/chat/index.js +6 -1
  216. package/dist/ssr/chat/index.js.map +1 -1
  217. package/dist/ssr/chat/types.js.map +1 -1
  218. package/dist/ssr/content/Chart.js +121 -219
  219. package/dist/ssr/content/Chart.js.map +1 -1
  220. package/dist/ssr/content/ChartExplorer.js +257 -0
  221. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  222. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  223. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  224. package/dist/ssr/content/ChartFilterControls.js +139 -0
  225. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  226. package/dist/ssr/content/ChartSnapshotView.js +58 -0
  227. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  228. package/dist/ssr/content/DataTable.js +13 -9
  229. package/dist/ssr/content/DataTable.js.map +1 -1
  230. package/dist/ssr/content/FileBrowser.js +3 -0
  231. package/dist/ssr/content/FileBrowser.js.map +1 -1
  232. package/dist/ssr/content/FileGrid.js +38 -0
  233. package/dist/ssr/content/FileGrid.js.map +1 -0
  234. package/dist/ssr/content/FileTree.js +2 -2
  235. package/dist/ssr/content/FileTree.js.map +1 -1
  236. package/dist/ssr/content/FileView.js +356 -75
  237. package/dist/ssr/content/FileView.js.map +1 -1
  238. package/dist/ssr/content/MarkdownView.js +6 -0
  239. package/dist/ssr/content/MarkdownView.js.map +1 -1
  240. package/dist/ssr/content/Pagination.js.map +1 -1
  241. package/dist/ssr/content/PdfPreview.js +37 -24
  242. package/dist/ssr/content/PdfPreview.js.map +1 -1
  243. package/dist/ssr/content/chart-cursor.js +33 -0
  244. package/dist/ssr/content/chart-cursor.js.map +1 -0
  245. package/dist/ssr/content/chart-explorer.js +147 -0
  246. package/dist/ssr/content/chart-explorer.js.map +1 -0
  247. package/dist/ssr/content/chart-inspection.js +447 -0
  248. package/dist/ssr/content/chart-inspection.js.map +1 -0
  249. package/dist/ssr/content/chart-line-gaps.js +53 -0
  250. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  251. package/dist/ssr/content/chart-map-viewport.js +5 -1
  252. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  253. package/dist/ssr/content/chart-snapshot.js +63 -0
  254. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  255. package/dist/ssr/content/chart-state-timeline.js +32 -4
  256. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  257. package/dist/ssr/content/chart-svg.js +54 -0
  258. package/dist/ssr/content/chart-svg.js.map +1 -0
  259. package/dist/ssr/content/collection-selection.js +109 -0
  260. package/dist/ssr/content/collection-selection.js.map +1 -0
  261. package/dist/ssr/content/delimited-preferences.js +21 -0
  262. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  263. package/dist/ssr/content/file-tree.js.map +1 -1
  264. package/dist/ssr/content/file-view-preview.js +11 -7
  265. package/dist/ssr/content/file-view-preview.js.map +1 -1
  266. package/dist/ssr/content/index.js +9 -0
  267. package/dist/ssr/content/index.js.map +1 -1
  268. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  269. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  270. package/dist/ssr/feedback/dialog-core.js +81 -7
  271. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  272. package/dist/ssr/feedback/prompts.js +6 -0
  273. package/dist/ssr/feedback/prompts.js.map +1 -1
  274. package/dist/ssr/feedback/toast.js +29 -6
  275. package/dist/ssr/feedback/toast.js.map +1 -1
  276. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  277. package/dist/ssr/inputs/Select.js.map +1 -1
  278. package/dist/ssr/inputs/SelectChip.js +3 -3
  279. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  280. package/dist/ssr/inputs/TextInput.js.map +1 -1
  281. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  282. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  283. package/dist/ssr/inputs/markdown/behaviors.js +1 -1
  284. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  285. package/dist/ssr/intl/Format.js +61 -0
  286. package/dist/ssr/intl/Format.js.map +1 -1
  287. package/dist/ssr/intl/index.js.map +1 -1
  288. package/dist/ssr/intl/messages.js +130 -2
  289. package/dist/ssr/intl/messages.js.map +1 -1
  290. package/dist/ssr/layout/AppWorkspace.js +368 -275
  291. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  292. package/dist/ssr/layout/BottomSheet.js +43 -0
  293. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  294. package/dist/ssr/layout/DetailPanel.js +11 -4
  295. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  296. package/dist/ssr/layout/Navigation.js +181 -0
  297. package/dist/ssr/layout/Navigation.js.map +1 -0
  298. package/dist/ssr/layout/PanelDialog.js +111 -26
  299. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  300. package/dist/ssr/layout/ScrollArea.js +16 -1
  301. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  302. package/dist/ssr/layout/Settings.js.map +1 -1
  303. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  304. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  305. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  306. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  307. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  308. package/dist/ssr/layout/index.js +3 -0
  309. package/dist/ssr/layout/index.js.map +1 -1
  310. package/dist/ssr/layout/navigation-model.js +23 -0
  311. package/dist/ssr/layout/navigation-model.js.map +1 -0
  312. package/dist/ssr/layout/scroll-fade.js +100 -0
  313. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  314. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  315. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  316. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  317. package/dist/styles.css +1 -1
  318. package/dist/tabler.css +1 -1
  319. package/dist/types/actions/Button.d.ts +4 -0
  320. package/dist/types/actions/Disclosure.d.ts +1 -0
  321. package/dist/types/actions/FilterChip.d.ts +4 -0
  322. package/dist/types/actions/SplitButton.d.ts +6 -0
  323. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  324. package/dist/types/actions/Tabs.d.ts +4 -0
  325. package/dist/types/actions/index.d.ts +4 -4
  326. package/dist/types/chat/ChatComposer.d.ts +20 -2
  327. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  328. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  329. package/dist/types/chat/ChatTasks.d.ts +15 -0
  330. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  331. package/dist/types/chat/chat-behavior.d.ts +0 -3
  332. package/dist/types/chat/composer-document.d.ts +14 -0
  333. package/dist/types/chat/index.d.ts +8 -1
  334. package/dist/types/chat/types.d.ts +7 -0
  335. package/dist/types/content/Chart.d.ts +42 -23
  336. package/dist/types/content/ChartExplorer.d.ts +34 -0
  337. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  338. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  339. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  340. package/dist/types/content/DataTable.d.ts +4 -0
  341. package/dist/types/content/FileBrowser.d.ts +1 -0
  342. package/dist/types/content/FileGrid.d.ts +21 -0
  343. package/dist/types/content/FileView.d.ts +20 -0
  344. package/dist/types/content/PdfPreview.d.ts +8 -1
  345. package/dist/types/content/chart-cursor.d.ts +15 -0
  346. package/dist/types/content/chart-explorer.d.ts +48 -0
  347. package/dist/types/content/chart-inspection.d.ts +40 -0
  348. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  349. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  350. package/dist/types/content/chart-snapshot.d.ts +26 -0
  351. package/dist/types/content/chart-svg.d.ts +21 -0
  352. package/dist/types/content/collection-selection.d.ts +24 -0
  353. package/dist/types/content/delimited-preferences.d.ts +11 -0
  354. package/dist/types/content/file-tree.d.ts +2 -0
  355. package/dist/types/content/file-view-preview.d.ts +4 -1
  356. package/dist/types/content/index.d.ts +16 -2
  357. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  358. package/dist/types/feedback/dialog-core.d.ts +11 -0
  359. package/dist/types/feedback/prompts.d.ts +2 -0
  360. package/dist/types/feedback/toast.d.ts +7 -1
  361. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  362. package/dist/types/intl/Format.d.ts +9 -0
  363. package/dist/types/intl/index.d.ts +1 -1
  364. package/dist/types/intl/messages.d.ts +31 -1
  365. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  366. package/dist/types/layout/BottomSheet.d.ts +23 -0
  367. package/dist/types/layout/DetailPanel.d.ts +1 -0
  368. package/dist/types/layout/Navigation.d.ts +8 -0
  369. package/dist/types/layout/PanelDialog.d.ts +14 -1
  370. package/dist/types/layout/ScrollArea.d.ts +4 -0
  371. package/dist/types/layout/Settings.d.ts +1 -1
  372. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  373. package/dist/types/layout/index.d.ts +4 -1
  374. package/dist/types/layout/navigation-model.d.ts +48 -0
  375. package/dist/types/layout/scroll-fade.d.ts +3 -0
  376. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  377. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  378. package/package.json +5 -7
@@ -1 +1 @@
1
- {"version":3,"names":["getK2bPortalRoot","DEFAULT_DURATION_MS","MAX_VISIBLE_TOASTS","ANIMATION_MS","K2B_TOAST_CONTAINER_ID","CONTAINER_ATTRIBUTE","VARIANT_STYLES","default","tone","iconClass","defaultTitle","success","error","normalizedIconClass","tokens","split","filter","Boolean","token","join","applyIconClass","icon","className","applyLiveRegion","element","variant","isError","setAttribute","liveToasts","Set","ensureContainer","document","root","container","querySelector","createElement","id","style","cssText","appendChild","promoteToTopLayer","showPopover","isConnected","active","matches","next","cloneNode","firstChild","parentElement","remove","removeAttribute","hideEmptyContainers","Array","from","querySelectorAll","childElementCount","hidePopover","renderLead","lead","iconClassOverride","replaceChildren","dataset","showToast","description","options","initialContainer","noop","dismiss","update","dismissed","dismissTimer","currentVariant","currentDuration","duration","remainingDuration","timerStartedAt","pausedByPointer","pausedByFocus","toastElement","k2bToast","leadElement","leadIconElement","contentElement","titleElement","textContent","title","descriptionElement","append","closeButton","type","closeIcon","clearDismissTimer","clearTimeout","pauseDismissTimer","Math","max","Date","now","resumeDismissTimer","setTimeout","resetDismissTimer","delete","handle","closing","actionElement","renderAction","action","href","label","addEventListener","event","stopPropagation","nextDescription","nextOptions","variantChanged","undefined","Object","prototype","hasOwnProperty","call","contains","relatedTarget","add","size","values","value","requestAnimationFrame","open","isPointInsideToast","x","y","containers","child","children","rect","getBoundingClientRect","left","right","top","bottom","toastFn","dismissAll","toast"],"sources":["feedback/toast.ts"],"sourcesContent":["import { getK2bPortalRoot } from \"../internal/portal\";\n\nexport type ToastVariant = \"default\" | \"success\" | \"error\";\n\nexport type ToastAction = {\n label: string;\n href: string;\n};\n\nexport type ToastOptions = {\n variant?: ToastVariant;\n duration?: number;\n iconClass?: string;\n title?: string;\n action?: ToastAction | null;\n};\n\nexport type ToastHandle = {\n dismiss: () => void;\n update: (description: string, options?: ToastOptions) => void;\n};\n\nexport interface ToastFn {\n (description: string, options?: ToastOptions): ToastHandle;\n success: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n error: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n dismissAll: () => void;\n}\n\nconst DEFAULT_DURATION_MS = 3000;\nconst MAX_VISIBLE_TOASTS = 5;\nconst ANIMATION_MS = 200;\nexport const K2B_TOAST_CONTAINER_ID = \"k2b-ui-toast-container\";\nconst CONTAINER_ATTRIBUTE = \"data-k2b-toast-container\";\n\ntype VariantStyle = {\n tone: \"info\" | \"success\" | \"danger\";\n iconClass: string;\n defaultTitle: string;\n};\n\nconst VARIANT_STYLES: Record<ToastVariant, VariantStyle> = {\n default: {\n tone: \"info\",\n iconClass: \"ti-info-circle\",\n defaultTitle: \"Info\",\n },\n success: {\n tone: \"success\",\n iconClass: \"ti-check\",\n defaultTitle: \"Success\",\n },\n error: {\n tone: \"danger\",\n iconClass: \"ti-x\",\n defaultTitle: \"Error\",\n },\n};\n\nconst normalizedIconClass = (iconClass: string): string => {\n const tokens = iconClass\n .split(/\\s+/)\n .filter(Boolean)\n .filter((token) => token !== \"ti\");\n return [\"ti\", ...tokens].join(\" \");\n};\n\nconst applyIconClass = (icon: HTMLElement, iconClass: string): void => {\n icon.className = normalizedIconClass(iconClass);\n};\n\nconst applyLiveRegion = (element: HTMLElement, variant: ToastVariant): void => {\n const isError = variant === \"error\";\n element.setAttribute(\"role\", isError ? \"alert\" : \"status\");\n element.setAttribute(\"aria-live\", isError ? \"assertive\" : \"polite\");\n element.setAttribute(\"aria-atomic\", \"true\");\n};\n\nconst liveToasts = new Set<ToastHandle>();\n\nconst ensureContainer = (): HTMLElement | null => {\n if (typeof document === \"undefined\") return null;\n const root = getK2bPortalRoot();\n let container = root.querySelector<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`);\n if (container) return container;\n\n container = document.createElement(\"div\");\n container.id = K2B_TOAST_CONTAINER_ID;\n container.setAttribute(CONTAINER_ATTRIBUTE, \"\");\n container.setAttribute(\"popover\", \"manual\");\n // Keep the source rail geometry inline: it must defeat UA popover defaults\n // even when a consumer has not loaded the optional package stylesheet yet.\n container.style.cssText =\n \"position:fixed;top:auto;left:auto;bottom:env(safe-area-inset-bottom,0px);right:env(safe-area-inset-right,0px);\" +\n \"z-index:50;box-sizing:border-box;display:flex;flex-direction:column;gap:0.5rem;\" +\n \"width:min(22rem,calc(100vw - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px)));\" +\n \"height:auto;max-width:100vw;\" +\n \"max-height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));\" +\n \"margin:0;padding:1rem;border:0;background:transparent;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;\" +\n \"pointer-events:none;\";\n root.appendChild(container);\n return container;\n};\n\nconst promoteToTopLayer = (container: HTMLElement): HTMLElement => {\n if (typeof container.showPopover !== \"function\" || !container.isConnected) return container;\n let active = container;\n try {\n if (container.matches(\":popover-open\") || document.querySelector(\"dialog:modal\")) {\n const next = container.cloneNode(false) as HTMLElement;\n while (container.firstChild) next.appendChild(container.firstChild);\n const root = container.parentElement ?? getK2bPortalRoot();\n container.remove();\n root.appendChild(next);\n active = next;\n }\n if (!active.matches(\":popover-open\")) active.showPopover();\n } catch {\n active.removeAttribute(\"popover\");\n }\n return active;\n};\n\n/** Close every empty rail so an emptied container does not linger in the top\n * layer. Rails are resolved at call time on purpose: `promoteToTopLayer`\n * swaps the element for a fresh clone, so a container captured when the toast\n * was created can already be detached by the time the toast is dismissed. */\nconst hideEmptyContainers = (): void => {\n if (typeof document === \"undefined\") return;\n for (const container of Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`))) {\n if (container.childElementCount > 0 || typeof container.hidePopover !== \"function\") continue;\n try {\n if (container.matches(\":popover-open\")) container.hidePopover();\n } catch {\n // Already hidden or disconnected.\n }\n }\n};\n\nconst renderLead = (lead: HTMLElement, variant: ToastVariant, iconClassOverride?: string): HTMLElement => {\n const style = VARIANT_STYLES[variant];\n lead.replaceChildren();\n lead.className = \"k2b-toast__icon\";\n lead.dataset.tone = style.tone;\n const icon = document.createElement(\"i\");\n applyIconClass(icon, iconClassOverride ?? style.iconClass);\n icon.setAttribute(\"aria-hidden\", \"true\");\n lead.appendChild(icon);\n return icon;\n};\n\nconst showToast = (description: string, options?: ToastOptions): ToastHandle => {\n const initialContainer = ensureContainer();\n if (!initialContainer) {\n const noop = () => {};\n return { dismiss: noop, update: noop };\n }\n\n let dismissed = false;\n let dismissTimer: ReturnType<typeof setTimeout> | null = null;\n let currentVariant: ToastVariant = options?.variant ?? \"default\";\n let currentDuration = options?.duration ?? DEFAULT_DURATION_MS;\n let remainingDuration = currentDuration;\n let timerStartedAt = 0;\n let pausedByPointer = false;\n let pausedByFocus = false;\n\n const toastElement = document.createElement(\"div\");\n toastElement.className = \"k2b-toast\";\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n toastElement.dataset.k2bToast = \"\";\n\n const leadElement = document.createElement(\"div\");\n let leadIconElement = renderLead(leadElement, currentVariant, options?.iconClass);\n\n const contentElement = document.createElement(\"div\");\n contentElement.className = \"k2b-toast__content\";\n applyLiveRegion(contentElement, currentVariant);\n\n const titleElement = document.createElement(\"div\");\n titleElement.className = \"k2b-toast__title\";\n titleElement.textContent = options?.title ?? VARIANT_STYLES[currentVariant].defaultTitle;\n const descriptionElement = document.createElement(\"div\");\n descriptionElement.className = \"k2b-toast__description\";\n descriptionElement.textContent = description;\n contentElement.append(titleElement, descriptionElement);\n\n const closeButton = document.createElement(\"button\");\n closeButton.type = \"button\";\n closeButton.className = \"k2b-toast__close\";\n closeButton.setAttribute(\"aria-label\", \"Dismiss notification\");\n const closeIcon = document.createElement(\"i\");\n closeIcon.className = \"ti ti-x\";\n closeIcon.setAttribute(\"aria-hidden\", \"true\");\n closeButton.appendChild(closeIcon);\n\n toastElement.append(leadElement, contentElement, closeButton);\n\n const clearDismissTimer = () => {\n if (dismissTimer === null) return;\n clearTimeout(dismissTimer);\n dismissTimer = null;\n };\n\n const pauseDismissTimer = () => {\n if (dismissTimer === null) return;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n clearDismissTimer();\n };\n\n const resumeDismissTimer = () => {\n if (dismissed || currentDuration === 0 || remainingDuration <= 0 || pausedByPointer || pausedByFocus) return;\n clearDismissTimer();\n timerStartedAt = Date.now();\n dismissTimer = setTimeout(() => dismiss(), remainingDuration);\n };\n\n const resetDismissTimer = (duration: number) => {\n clearDismissTimer();\n currentDuration = duration;\n remainingDuration = duration;\n resumeDismissTimer();\n };\n\n const dismiss = () => {\n if (dismissed) return;\n dismissed = true;\n clearDismissTimer();\n liveToasts.delete(handle);\n toastElement.dataset.closing = \"true\";\n setTimeout(() => {\n toastElement.remove();\n hideEmptyContainers();\n }, ANIMATION_MS);\n };\n\n let actionElement: HTMLAnchorElement | null = null;\n const renderAction = (action: ToastAction | null | undefined) => {\n actionElement?.remove();\n actionElement = null;\n if (!action) return;\n actionElement = document.createElement(\"a\");\n actionElement.className = \"k2b-toast__action\";\n actionElement.href = action.href;\n actionElement.textContent = action.label;\n actionElement.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n dismiss();\n });\n contentElement.appendChild(actionElement);\n };\n renderAction(options?.action);\n\n const update = (nextDescription: string, nextOptions?: ToastOptions) => {\n if (dismissed) return;\n descriptionElement.textContent = nextDescription;\n\n const variantChanged = nextOptions?.variant !== undefined && nextOptions.variant !== currentVariant;\n if (variantChanged) {\n currentVariant = nextOptions.variant!;\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n leadIconElement = renderLead(leadElement, currentVariant, nextOptions.iconClass);\n applyLiveRegion(contentElement, currentVariant);\n } else if (nextOptions?.iconClass !== undefined) {\n applyIconClass(leadIconElement, nextOptions.iconClass);\n }\n\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"title\")) {\n titleElement.textContent = nextOptions.title ?? \"\";\n } else if (variantChanged) {\n titleElement.textContent = VARIANT_STYLES[currentVariant].defaultTitle;\n }\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"action\")) renderAction(nextOptions.action);\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"duration\")) {\n currentDuration = nextOptions.duration ?? DEFAULT_DURATION_MS;\n }\n resetDismissTimer(currentDuration);\n };\n\n toastElement.addEventListener(\"click\", dismiss);\n closeButton.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n dismiss();\n });\n toastElement.addEventListener(\"pointerenter\", () => {\n pausedByPointer = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"pointerleave\", () => {\n pausedByPointer = false;\n resumeDismissTimer();\n });\n toastElement.addEventListener(\"focusin\", () => {\n pausedByFocus = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"focusout\", (event) => {\n if (toastElement.contains(event.relatedTarget as Node | null)) return;\n pausedByFocus = false;\n resumeDismissTimer();\n });\n\n const handle: ToastHandle = { dismiss, update };\n liveToasts.add(handle);\n if (liveToasts.size > MAX_VISIBLE_TOASTS) liveToasts.values().next().value?.dismiss();\n promoteToTopLayer(initialContainer).appendChild(toastElement);\n requestAnimationFrame(() => {\n if (!dismissed) toastElement.dataset.open = \"true\";\n });\n resetDismissTimer(currentDuration);\n return handle;\n};\n\nexport const isPointInsideToast = (x: number, y: number): boolean => {\n if (typeof document === \"undefined\") return false;\n const containers = Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`));\n for (const container of containers) {\n for (const child of Array.from(container.children)) {\n const rect = child.getBoundingClientRect();\n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) return true;\n }\n }\n return false;\n};\n\nconst toastFn = ((description: string, options?: ToastOptions) => showToast(description, options)) as ToastFn;\ntoastFn.success = (description, options) => showToast(description, { ...options, variant: \"success\" });\ntoastFn.error = (description, options) => showToast(description, { ...options, variant: \"error\" });\ntoastFn.dismissAll = () => {\n for (const handle of Array.from(liveToasts)) handle.dismiss();\n};\n\nexport const toast: ToastFn = toastFn;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getK2bPortalRoot","DEFAULT_DURATION_MS","MAX_VISIBLE_TOASTS","ANIMATION_MS","K2B_TOAST_CONTAINER_ID","CONTAINER_ATTRIBUTE","VARIANT_STYLES","default","tone","iconClass","defaultTitle","success","error","normalizedIconClass","tokens","split","filter","Boolean","token","join","applyIconClass","icon","className","applyLiveRegion","element","variant","isError","setAttribute","liveToasts","Set","ensureContainer","document","root","container","querySelector","createElement","id","style","cssText","appendChild","promoteToTopLayer","showPopover","isConnected","active","matches","next","cloneNode","firstChild","parentElement","remove","removeAttribute","hideEmptyContainers","Array","from","querySelectorAll","childElementCount","hidePopover","renderLead","lead","iconClassOverride","replaceChildren","dataset","showToast","description","options","initialContainer","noop","dismiss","update","dismissed","dismissTimer","currentVariant","currentProgress","progress","currentDuration","duration","remainingDuration","timerStartedAt","pausedByPointer","pausedByFocus","toastElement","k2bToast","leadElement","leadIconElement","contentElement","titleElement","textContent","title","descriptionElement","append","closeButton","type","dismissLabel","closeIcon","clearDismissTimer","clearTimeout","pauseDismissTimer","Math","max","Date","now","resumeDismissTimer","setTimeout","resetDismissTimer","delete","handle","closing","progressElement","renderProgress","hidden","value","Number","isFinite","min","actionElement","renderAction","action","link","href","button","label","addEventListener","event","stopPropagation","onClick","nextDescription","nextOptions","variantChanged","undefined","Object","prototype","hasOwnProperty","call","contains","relatedTarget","add","size","values","requestAnimationFrame","open","isPointInsideToast","x","y","containers","child","children","rect","getBoundingClientRect","left","right","top","bottom","toastFn","dismissAll","toast"],"sources":["feedback/toast.ts"],"sourcesContent":["import { getK2bPortalRoot } from \"../internal/portal\";\n\nexport type ToastVariant = \"default\" | \"success\" | \"error\";\n\nexport type ToastAction = {\n label: string;\n} & ({ href: string } | { onClick: () => void });\n\nexport type ToastOptions = {\n variant?: ToastVariant;\n duration?: number;\n iconClass?: string;\n title?: string;\n action?: ToastAction | null;\n /** Fraction from 0 to 1, or an indeterminate activity indicator. null removes it. */\n progress?: number | \"indeterminate\" | null;\n dismissLabel?: string;\n};\n\nexport type ToastHandle = {\n dismiss: () => void;\n update: (description: string, options?: ToastOptions) => void;\n};\n\nexport interface ToastFn {\n (description: string, options?: ToastOptions): ToastHandle;\n success: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n error: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n dismissAll: () => void;\n}\n\nconst DEFAULT_DURATION_MS = 3000;\nconst MAX_VISIBLE_TOASTS = 5;\nconst ANIMATION_MS = 200;\nexport const K2B_TOAST_CONTAINER_ID = \"k2b-ui-toast-container\";\nconst CONTAINER_ATTRIBUTE = \"data-k2b-toast-container\";\n\ntype VariantStyle = {\n tone: \"info\" | \"success\" | \"danger\";\n iconClass: string;\n defaultTitle: string;\n};\n\nconst VARIANT_STYLES: Record<ToastVariant, VariantStyle> = {\n default: {\n tone: \"info\",\n iconClass: \"ti-info-circle\",\n defaultTitle: \"Info\",\n },\n success: {\n tone: \"success\",\n iconClass: \"ti-check\",\n defaultTitle: \"Success\",\n },\n error: {\n tone: \"danger\",\n iconClass: \"ti-x\",\n defaultTitle: \"Error\",\n },\n};\n\nconst normalizedIconClass = (iconClass: string): string => {\n const tokens = iconClass\n .split(/\\s+/)\n .filter(Boolean)\n .filter((token) => token !== \"ti\");\n return [\"ti\", ...tokens].join(\" \");\n};\n\nconst applyIconClass = (icon: HTMLElement, iconClass: string): void => {\n icon.className = normalizedIconClass(iconClass);\n};\n\nconst applyLiveRegion = (element: HTMLElement, variant: ToastVariant): void => {\n const isError = variant === \"error\";\n element.setAttribute(\"role\", isError ? \"alert\" : \"status\");\n element.setAttribute(\"aria-live\", isError ? \"assertive\" : \"polite\");\n element.setAttribute(\"aria-atomic\", \"true\");\n};\n\nconst liveToasts = new Set<ToastHandle>();\n\nconst ensureContainer = (): HTMLElement | null => {\n if (typeof document === \"undefined\") return null;\n const root = getK2bPortalRoot();\n let container = root.querySelector<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`);\n if (container) return container;\n\n container = document.createElement(\"div\");\n container.id = K2B_TOAST_CONTAINER_ID;\n container.setAttribute(CONTAINER_ATTRIBUTE, \"\");\n container.setAttribute(\"popover\", \"manual\");\n // Keep the source rail geometry inline: it must defeat UA popover defaults\n // even when a consumer has not loaded the optional package stylesheet yet.\n container.style.cssText =\n \"position:fixed;top:auto;left:auto;bottom:env(safe-area-inset-bottom,0px);right:env(safe-area-inset-right,0px);\" +\n \"z-index:50;box-sizing:border-box;display:flex;flex-direction:column;gap:0.5rem;\" +\n \"width:min(22rem,calc(100vw - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px)));\" +\n \"height:auto;max-width:100vw;\" +\n \"max-height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));\" +\n \"margin:0;padding:1rem;border:0;background:transparent;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;\" +\n \"pointer-events:none;\";\n root.appendChild(container);\n return container;\n};\n\nconst promoteToTopLayer = (container: HTMLElement): HTMLElement => {\n if (typeof container.showPopover !== \"function\" || !container.isConnected) return container;\n let active = container;\n try {\n if (container.matches(\":popover-open\") || document.querySelector(\"dialog:modal\")) {\n const next = container.cloneNode(false) as HTMLElement;\n while (container.firstChild) next.appendChild(container.firstChild);\n const root = container.parentElement ?? getK2bPortalRoot();\n container.remove();\n root.appendChild(next);\n active = next;\n }\n if (!active.matches(\":popover-open\")) active.showPopover();\n } catch {\n active.removeAttribute(\"popover\");\n }\n return active;\n};\n\n/** Close every empty rail so an emptied container does not linger in the top\n * layer. Rails are resolved at call time on purpose: `promoteToTopLayer`\n * swaps the element for a fresh clone, so a container captured when the toast\n * was created can already be detached by the time the toast is dismissed. */\nconst hideEmptyContainers = (): void => {\n if (typeof document === \"undefined\") return;\n for (const container of Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`))) {\n if (container.childElementCount > 0 || typeof container.hidePopover !== \"function\") continue;\n try {\n if (container.matches(\":popover-open\")) container.hidePopover();\n } catch {\n // Already hidden or disconnected.\n }\n }\n};\n\nconst renderLead = (lead: HTMLElement, variant: ToastVariant, iconClassOverride?: string): HTMLElement => {\n const style = VARIANT_STYLES[variant];\n lead.replaceChildren();\n lead.className = \"k2b-toast__icon\";\n lead.dataset.tone = style.tone;\n const icon = document.createElement(\"i\");\n applyIconClass(icon, iconClassOverride ?? style.iconClass);\n icon.setAttribute(\"aria-hidden\", \"true\");\n lead.appendChild(icon);\n return icon;\n};\n\nconst showToast = (description: string, options?: ToastOptions): ToastHandle => {\n const initialContainer = ensureContainer();\n if (!initialContainer) {\n const noop = () => {};\n return { dismiss: noop, update: noop };\n }\n\n let dismissed = false;\n let dismissTimer: ReturnType<typeof setTimeout> | null = null;\n let currentVariant: ToastVariant = options?.variant ?? \"default\";\n let currentProgress = options?.progress ?? null;\n let currentDuration = options?.duration ?? DEFAULT_DURATION_MS;\n let remainingDuration = currentDuration;\n let timerStartedAt = 0;\n let pausedByPointer = false;\n let pausedByFocus = false;\n\n const toastElement = document.createElement(\"div\");\n toastElement.className = \"k2b-toast\";\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n toastElement.dataset.k2bToast = \"\";\n\n const leadElement = document.createElement(\"div\");\n let leadIconElement = renderLead(leadElement, currentVariant, options?.iconClass);\n\n const contentElement = document.createElement(\"div\");\n contentElement.className = \"k2b-toast__content\";\n applyLiveRegion(contentElement, currentVariant);\n\n const titleElement = document.createElement(\"div\");\n titleElement.className = \"k2b-toast__title\";\n titleElement.textContent = options?.title ?? VARIANT_STYLES[currentVariant].defaultTitle;\n const descriptionElement = document.createElement(\"div\");\n descriptionElement.className = \"k2b-toast__description\";\n descriptionElement.textContent = description;\n contentElement.append(titleElement, descriptionElement);\n\n const closeButton = document.createElement(\"button\");\n closeButton.type = \"button\";\n closeButton.className = \"k2b-toast__close\";\n closeButton.setAttribute(\"aria-label\", options?.dismissLabel ?? \"Dismiss notification\");\n const closeIcon = document.createElement(\"i\");\n closeIcon.className = \"ti ti-x\";\n closeIcon.setAttribute(\"aria-hidden\", \"true\");\n closeButton.appendChild(closeIcon);\n\n toastElement.append(leadElement, contentElement, closeButton);\n\n const clearDismissTimer = () => {\n if (dismissTimer === null) return;\n clearTimeout(dismissTimer);\n dismissTimer = null;\n };\n\n const pauseDismissTimer = () => {\n if (dismissTimer === null) return;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n clearDismissTimer();\n };\n\n const resumeDismissTimer = () => {\n if (dismissed || currentProgress !== null || currentDuration === 0 || remainingDuration <= 0 || pausedByPointer || pausedByFocus)\n return;\n clearDismissTimer();\n timerStartedAt = Date.now();\n dismissTimer = setTimeout(() => dismiss(), remainingDuration);\n };\n\n const resetDismissTimer = (duration: number) => {\n clearDismissTimer();\n currentDuration = duration;\n remainingDuration = duration;\n resumeDismissTimer();\n };\n\n const dismiss = () => {\n if (dismissed) return;\n dismissed = true;\n clearDismissTimer();\n liveToasts.delete(handle);\n toastElement.dataset.closing = \"true\";\n setTimeout(() => {\n toastElement.remove();\n hideEmptyContainers();\n }, ANIMATION_MS);\n };\n\n const progressElement = document.createElement(\"progress\");\n progressElement.className = \"k2b-toast__progress\";\n progressElement.max = 1;\n const renderProgress = () => {\n progressElement.hidden = currentProgress === null;\n progressElement.setAttribute(\"aria-label\", titleElement.textContent || descriptionElement.textContent || \"\");\n if (typeof currentProgress === \"number\")\n progressElement.value = Number.isFinite(currentProgress) ? Math.max(0, Math.min(1, currentProgress)) : 0;\n else progressElement.removeAttribute(\"value\");\n };\n contentElement.append(progressElement);\n renderProgress();\n let actionElement: HTMLAnchorElement | HTMLButtonElement | null = null;\n const renderAction = (action: ToastAction | null | undefined) => {\n actionElement?.remove();\n actionElement = null;\n if (!action) return;\n if (\"href\" in action) {\n const link = document.createElement(\"a\");\n link.href = action.href;\n actionElement = link;\n } else {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n actionElement = button;\n }\n actionElement.className = \"k2b-toast__action\";\n actionElement.textContent = action.label;\n actionElement.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n if (\"onClick\" in action) action.onClick();\n else dismiss();\n });\n contentElement.appendChild(actionElement);\n };\n renderAction(options?.action);\n\n const update = (nextDescription: string, nextOptions?: ToastOptions) => {\n if (dismissed) return;\n descriptionElement.textContent = nextDescription;\n\n const variantChanged = nextOptions?.variant !== undefined && nextOptions.variant !== currentVariant;\n if (variantChanged) {\n currentVariant = nextOptions.variant!;\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n leadIconElement = renderLead(leadElement, currentVariant, nextOptions.iconClass);\n applyLiveRegion(contentElement, currentVariant);\n } else if (nextOptions?.iconClass !== undefined) {\n applyIconClass(leadIconElement, nextOptions.iconClass);\n }\n\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"title\")) {\n titleElement.textContent = nextOptions.title ?? \"\";\n } else if (variantChanged) {\n titleElement.textContent = VARIANT_STYLES[currentVariant].defaultTitle;\n }\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"action\")) renderAction(nextOptions.action);\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"duration\")) {\n currentDuration = nextOptions.duration ?? DEFAULT_DURATION_MS;\n }\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"progress\")) currentProgress = nextOptions.progress ?? null;\n if (nextOptions?.dismissLabel) closeButton.setAttribute(\"aria-label\", nextOptions.dismissLabel);\n renderProgress();\n resetDismissTimer(currentDuration);\n };\n\n toastElement.addEventListener(\"click\", () => {\n if (currentProgress === null) dismiss();\n });\n closeButton.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n dismiss();\n });\n toastElement.addEventListener(\"pointerenter\", () => {\n pausedByPointer = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"pointerleave\", () => {\n pausedByPointer = false;\n resumeDismissTimer();\n });\n toastElement.addEventListener(\"focusin\", () => {\n pausedByFocus = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"focusout\", (event) => {\n if (toastElement.contains(event.relatedTarget as Node | null)) return;\n pausedByFocus = false;\n resumeDismissTimer();\n });\n\n const handle: ToastHandle = { dismiss, update };\n liveToasts.add(handle);\n if (liveToasts.size > MAX_VISIBLE_TOASTS) liveToasts.values().next().value?.dismiss();\n promoteToTopLayer(initialContainer).appendChild(toastElement);\n requestAnimationFrame(() => {\n if (!dismissed) toastElement.dataset.open = \"true\";\n });\n resetDismissTimer(currentDuration);\n return handle;\n};\n\nexport const isPointInsideToast = (x: number, y: number): boolean => {\n if (typeof document === \"undefined\") return false;\n const containers = Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`));\n for (const container of containers) {\n for (const child of Array.from(container.children)) {\n const rect = child.getBoundingClientRect();\n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) return true;\n }\n }\n return false;\n};\n\nconst toastFn = ((description: string, options?: ToastOptions) => showToast(description, options)) as ToastFn;\ntoastFn.success = (description, options) => showToast(description, { ...options, variant: \"success\" });\ntoastFn.error = (description, options) => showToast(description, { ...options, variant: \"error\" });\ntoastFn.dismissAll = () => {\n for (const handle of Array.from(liveToasts)) handle.dismiss();\n};\n\nexport const toast: ToastFn = toastFn;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createSignal","For","onCleanup","onMount","Show","ChoiceGroups","props","viewport","buttons","dragOffset","scrollbar","setScrollbar","overflow","left","width","syncScrollbar","clientWidth","scrollLeft","scrollWidth","Math","min","max","choose","index","focus","choice","choices","onValueChange","value","queueMicrotask","scrollIntoView","block","inline","move","direction","length","focusEdge","last","scrollFromPointer","event","track","currentTarget","rect","getBoundingClientRect","available","thumbLeft","clientX","startScrollbarDrag","preventDefault","current","target","setPointerCapture","pointerId","observer","ResizeObserver","observe","disconnect","map","label","join","_$ssr","_tmpl$2","_$ssrAttribute","_$escape","ariaLabel","_$createComponent","each","children","group","_tmpl$3","controls","when","_tmpl$","_$ssrStyleProperty"],"sources":["inputs/ChoiceGroups.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\n\ntype ChoiceGroup = { value: string | null; label: string };\n\nexport function ChoiceGroups(props: {\n choices: readonly ChoiceGroup[];\n value: string | null;\n onValueChange: (value: string | null) => void;\n ariaLabel: string;\n controls: string;\n}): JSX.Element {\n let viewport: HTMLDivElement | undefined;\n let buttons: HTMLButtonElement[] = [];\n let dragOffset = 0;\n const [scrollbar, setScrollbar] = createSignal({ overflow: false, left: 0, width: 0 });\n\n const syncScrollbar = () => {\n if (!viewport) return;\n const { clientWidth, scrollLeft, scrollWidth } = viewport;\n if (clientWidth <= 0 || scrollWidth <= clientWidth) {\n setScrollbar({ overflow: false, left: 0, width: 0 });\n return;\n }\n const width = Math.min(clientWidth, Math.max(24, (clientWidth * clientWidth) / scrollWidth));\n const left = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - width);\n setScrollbar({ overflow: true, left, width });\n };\n\n const choose = (index: number, focus = false) => {\n const choice = props.choices[index];\n if (!choice) return;\n props.onValueChange(choice.value);\n if (!focus) return;\n queueMicrotask(() => {\n buttons[index]?.focus();\n buttons[index]?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n });\n };\n const move = (index: number, direction: 1 | -1) =>\n choose((index + direction + props.choices.length) % props.choices.length, true);\n const focusEdge = (last: boolean) => choose(last ? props.choices.length - 1 : 0, true);\n\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n if (!viewport) return;\n const track = event.currentTarget;\n const { width } = scrollbar();\n const rect = track.getBoundingClientRect();\n const available = Math.max(1, rect.width - width);\n const thumbLeft = Math.min(available, Math.max(0, event.clientX - rect.left - dragOffset));\n viewport.scrollLeft = (thumbLeft / available) * (viewport.scrollWidth - viewport.clientWidth);\n syncScrollbar();\n };\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n event.preventDefault();\n const track = event.currentTarget;\n const current = scrollbar();\n dragOffset =\n event.target === track\n ? current.width / 2\n : Math.min(current.width, Math.max(0, event.clientX - track.getBoundingClientRect().left - current.left));\n track.setPointerCapture(event.pointerId);\n scrollFromPointer(event);\n };\n\n onMount(() => {\n syncScrollbar();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbar);\n if (viewport) observer?.observe(viewport);\n onCleanup(() => observer?.disconnect());\n });\n createEffect(() => {\n props.choices.map((choice) => `${choice.value ?? \"\"}:${choice.label}`).join(\"|\");\n queueMicrotask(syncScrollbar);\n });\n\n return (\n <div class=\"k2b-choice-groups-shell\" onPointerEnter={syncScrollbar} onFocusIn={syncScrollbar}>\n <div\n ref={viewport}\n class=\"k2b-choice-groups\"\n role=\"radiogroup\"\n aria-label={props.ariaLabel}\n onScroll={syncScrollbar}\n >\n <For each={props.choices}>\n {(group, index) => (\n <button\n ref={(element) => (buttons[index()] = element)}\n type=\"button\"\n role=\"radio\"\n aria-checked={props.value === group.value}\n aria-controls={props.controls}\n tabIndex={props.value === group.value ? 0 : -1}\n onClick={() => choose(index())}\n onKeyDown={(event) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n move(index(), 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n move(index(), -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusEdge(event.key === \"End\");\n }\n }}\n >\n {group.label}\n </button>\n )}\n </For>\n </div>\n <Show when={scrollbar().overflow}>\n <div\n class=\"k2b-choice-groups-scrollbar\"\n aria-hidden=\"true\"\n onPointerDown={startScrollbarDrag}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-choice-scroll-left\": `${scrollbar().left}px`,\n \"--k2b-choice-scroll-width\": `${scrollbar().width}px`,\n }}\n />\n </div>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createSignal","For","onCleanup","onMount","Show","ChoiceGroups","props","viewport","buttons","dragOffset","scrollbar","setScrollbar","overflow","left","width","syncScrollbar","clientWidth","scrollLeft","scrollWidth","Math","min","max","choose","index","focus","choice","choices","onValueChange","value","queueMicrotask","scrollIntoView","block","inline","move","direction","length","focusEdge","last","scrollFromPointer","event","track","currentTarget","rect","getBoundingClientRect","available","thumbLeft","clientX","startScrollbarDrag","preventDefault","current","target","setPointerCapture","pointerId","observer","ResizeObserver","observe","disconnect","map","label","join","_$ssr","_tmpl$2","_$ssrAttribute","_$escape","ariaLabel","_$createComponent","each","children","group","_tmpl$3","controls","when","_tmpl$","_$ssrStyleProperty"],"sources":["inputs/ChoiceGroups.tsx"],"sourcesContent":["import { createEffect, createSignal, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\n\ntype ChoiceGroup = { value: string | null; label: string };\n\nexport function ChoiceGroups(props: {\n choices: readonly ChoiceGroup[];\n value: string | null;\n onValueChange: (value: string | null) => void;\n ariaLabel: string;\n controls: string;\n}): JSX.Element {\n let viewport: HTMLDivElement | undefined;\n let buttons: HTMLButtonElement[] = [];\n let dragOffset = 0;\n const [scrollbar, setScrollbar] = createSignal({ overflow: false, left: 0, width: 0 });\n\n const syncScrollbar = () => {\n if (!viewport) return;\n const { clientWidth, scrollLeft, scrollWidth } = viewport;\n if (clientWidth <= 0 || scrollWidth <= clientWidth) {\n setScrollbar({ overflow: false, left: 0, width: 0 });\n return;\n }\n const width = Math.min(clientWidth, Math.max(24, (clientWidth * clientWidth) / scrollWidth));\n const left = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - width);\n setScrollbar({ overflow: true, left, width });\n };\n\n const choose = (index: number, focus = false) => {\n const choice = props.choices[index];\n if (!choice) return;\n props.onValueChange(choice.value);\n if (!focus) return;\n queueMicrotask(() => {\n buttons[index]?.focus();\n buttons[index]?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n });\n };\n const move = (index: number, direction: 1 | -1) => choose((index + direction + props.choices.length) % props.choices.length, true);\n const focusEdge = (last: boolean) => choose(last ? props.choices.length - 1 : 0, true);\n\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n if (!viewport) return;\n const track = event.currentTarget;\n const { width } = scrollbar();\n const rect = track.getBoundingClientRect();\n const available = Math.max(1, rect.width - width);\n const thumbLeft = Math.min(available, Math.max(0, event.clientX - rect.left - dragOffset));\n viewport.scrollLeft = (thumbLeft / available) * (viewport.scrollWidth - viewport.clientWidth);\n syncScrollbar();\n };\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n event.preventDefault();\n const track = event.currentTarget;\n const current = scrollbar();\n dragOffset =\n event.target === track\n ? current.width / 2\n : Math.min(current.width, Math.max(0, event.clientX - track.getBoundingClientRect().left - current.left));\n track.setPointerCapture(event.pointerId);\n scrollFromPointer(event);\n };\n\n onMount(() => {\n syncScrollbar();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbar);\n if (viewport) observer?.observe(viewport);\n onCleanup(() => observer?.disconnect());\n });\n createEffect(() => {\n props.choices.map((choice) => `${choice.value ?? \"\"}:${choice.label}`).join(\"|\");\n queueMicrotask(syncScrollbar);\n });\n\n return (\n <div class=\"k2b-choice-groups-shell\" onPointerEnter={syncScrollbar} onFocusIn={syncScrollbar}>\n <div ref={viewport} class=\"k2b-choice-groups\" role=\"radiogroup\" aria-label={props.ariaLabel} onScroll={syncScrollbar}>\n <For each={props.choices}>\n {(group, index) => (\n <button\n ref={(element) => (buttons[index()] = element)}\n type=\"button\"\n role=\"radio\"\n aria-checked={props.value === group.value}\n aria-controls={props.controls}\n tabIndex={props.value === group.value ? 0 : -1}\n onClick={() => choose(index())}\n onKeyDown={(event) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n move(index(), 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n move(index(), -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n focusEdge(event.key === \"End\");\n }\n }}\n >\n {group.label}\n </button>\n )}\n </For>\n </div>\n <Show when={scrollbar().overflow}>\n <div\n class=\"k2b-choice-groups-scrollbar\"\n aria-hidden=\"true\"\n onPointerDown={startScrollbarDrag}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-choice-scroll-left\": `${scrollbar().left}px`,\n \"--k2b-choice-scroll-width\": `${scrollbar().width}px`,\n }}\n />\n </div>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","createSignal","For","Show","createFieldMeta","Field","fieldControlAria","useUiMessages","ChoiceGroups","createChoiceLoader","createChoicePopover","filterChoiceOptions","nextEnabledChoiceIndex","commitFieldValue","resolveMaybeAccessor","normalize","option","value","label","id","Select","props","messages","meta","listboxId","controlId","query","setQuery","focusedIndex","setFocusedIndex","cache","setCache","selectedGroup","setSelectedGroup","defaultGroup","selectedView","setSelectedView","defaultView","searchRef","optionRefs","error","activeGroup","current","groups","some","group","groupChoices","allGroupLabel","all","activeView","viewToggle","loader","fetchData","signal","map","loadOptions","undefined","fetchDebounceMs","debounceMs","isAsync","Boolean","isSearchable","searchable","sourceOptions","options","groupedOptions","filter","includes","filterOptions","selected","find","selectedOption","selectedLabel","hasClearAction","clearable","disabled","accessibleLabel","placeholder","selectOption","popover","focusedOption","focus","index","scrollIntoView","block","move","direction","chooseGroup","load","open","selectedIndex","findIndex","show","queueMicrotask","close","restoreFocus","hide","cancel","select","onKeyDown","event","inToolbar","target","closest","key","preventDefault","clear","stopPropagation","trigger","_$createComponent","class","description","required","children","_$ssr","_tmpl$8","_$ssrAttribute","_$escape","_$ssrElement","_$mergeProps","type","role","aria-expanded","aria-activedescendant","data-clearable","when","color","fallback","icon","_tmpl$2","_tmpl$9","_$ssrStyleProperty","_tmpl$","activeIcon","name","_tmpl$0","_tmpl$3","clearSelection","_tmpl$4","searchPlaceholder","search","searchOptions","length","_tmpl$6","choices","onValueChange","ariaLabel","groupsAriaLabel","controls","_tmpl$5","showGridView","showListView","gridSize","message","_tmpl$1","retry","loading","_tmpl$7","each","_tmpl$10","noResults","noOptions","_tmpl$11","_tmpl$12"],"sources":["inputs/Select.tsx"],"sourcesContent":["import { createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectOption = ChoiceOption<string>;\nexport type SelectGroup = {\n value: string;\n label: string;\n};\nexport type SelectView = \"list\" | \"grid\";\nexport type SelectGridSize = \"sm\" | \"md\" | \"lg\";\nexport type SelectSourceOption =\n | string\n | {\n id: string;\n label?: string;\n description?: string;\n icon?: string;\n color?: string;\n groups?: readonly string[];\n }\n | SelectOption;\n\nexport type SelectProps = ValueFieldProps<string | null> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n options?: SelectSourceOption[];\n fetchData?: (query: string, signal: AbortSignal, group: string | null) => Promise<SelectSourceOption[]>;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n selectedOption?: ChoiceOption<string>;\n selectedLabel?: () => string | undefined;\n fetchDebounceMs?: number;\n debounceMs?: number;\n searchable?: boolean;\n /** Optional synchronous filter for static options. */\n filterOptions?: (options: readonly SelectOption[], query: string) => readonly SelectOption[];\n /** Optional filters. An option may belong to more than one group. */\n groups?: readonly SelectGroup[];\n /** Group selected when the component is created. Omit to start with all options. */\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n /** Show a local list/grid layout toggle in the dropdown. */\n viewToggle?: boolean;\n /** Initial dropdown layout when `viewToggle` is enabled. */\n defaultView?: SelectView;\n /** Tile density for the grid layout. */\n gridSize?: SelectGridSize;\n searchPlaceholder?: string;\n clearable?: boolean;\n name?: string;\n};\n\ntype NormalizedOption = ChoiceOption<string>;\nconst normalize = (option: SelectSourceOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function Select(props: SelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [selectedView, setSelectedView] = createSignal<SelectView>(props.defaultView ?? \"list\");\n let searchRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const activeView = () => (props.viewToggle ? selectedView() : \"list\");\n\n const loader = createChoiceLoader(\n () =>\n props.fetchData\n ? async (value, signal) => (await props.fetchData!(value, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (value, signal) => props.loadOptions!(value, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const isSearchable = () => isAsync() || Boolean(props.searchable);\n const sourceOptions = createMemo(() => (isAsync() ? loader.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Remote loaders filter server-side; a static list has to be filtered here or\n // the search field would render but do nothing.\n const options = createMemo(() =>\n isAsync() || !props.searchable\n ? groupedOptions()\n : props.filterOptions\n ? [...props.filterOptions(groupedOptions(), query())]\n : filterChoiceOptions(groupedOptions(), query()),\n );\n const selected = createMemo(() => {\n const current = value();\n if (current === null) return undefined;\n // Resolve against the unfiltered list so typing in the search field never\n // blanks the trigger label of the current selection.\n return (\n sourceOptions().find((option) => option.value === current) ??\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: props.selectedLabel?.() ?? current,\n }\n );\n });\n const hasClearAction = () => Boolean(props.clearable && selected() && !props.disabled);\n const accessibleLabel = () =>\n props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : (props.placeholder ?? messages().selectOption));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focus(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n setFocusedIndex(nextEnabledChoiceIndex(options(), -1, 1));\n if (isAsync()) loader.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) loader.load(\"\", true);\n const selectedIndex = options().findIndex((option) => option.value === value());\n focus(selectedIndex >= 0 ? selectedIndex : nextEnabledChoiceIndex(options(), -1, 1));\n popover.show();\n if (isSearchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n // Hide the top-layer surface before any reactive cleanup or consumer\n // callback can rerender its contents. Selection must feel atomic: the old\n // listbox must never remain visible with the next value.\n popover.hide(restoreFocus);\n loader.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n };\n const select = (option: NormalizedOption) => {\n if (option.disabled) return;\n close(true);\n setCache({ ...cache(), [option.value]: option });\n commitFieldValue(props, option.value);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && focusedOption()) {\n event.preventDefault();\n select(focusedOption()!);\n } else if (event.key === \"Escape\" && popover.open()) {\n // Only swallow Escape while the list is open — a closed select must let\n // the key bubble to an enclosing dialog or drawer.\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) close();\n };\n const clear = (event: MouseEvent) => {\n event.stopPropagation();\n commitFieldValue(props, null);\n popover.trigger()?.focus();\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n data-clearable={hasClearAction() ? \"true\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": accessibleLabel(),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={selected()?.color}\n fallback={<Show when={selected()?.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() ? undefined : \"true\"}>\n {selected()?.label ?? props.placeholder ?? messages().select}\n </span>\n <i class={popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} aria-hidden=\"true\" />\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <Show when={hasClearAction()}>\n <button type=\"button\" class=\"k2b-choice-control__clear k2b-input-clear-action\" aria-label={messages().clearSelection} onClick={clear}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={onKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : messages().options}\n >\n <Show when={isSearchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n if (isAsync()) loader.load(event.currentTarget.value);\n focus(isAsync() ? -1 : nextEnabledChoiceIndex(options(), -1, 1));\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0 || props.viewToggle}>\n <div class=\"k2b-choice-toolbar\">\n <Show when={(props.groups?.length ?? 0) > 0}>\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </Show>\n <Show when={props.viewToggle}>\n <button\n type=\"button\"\n class=\"k2b-choice-view-toggle\"\n aria-label={activeView() === \"list\" ? messages().showGridView : messages().showListView}\n aria-controls={listboxId}\n onClick={() => setSelectedView(activeView() === \"list\" ? \"grid\" : \"list\")}\n >\n <i class={activeView() === \"list\" ? \"ti ti-category-2\" : \"ti ti-list-details\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-choice-options\"\n role=\"listbox\"\n data-view={activeView()}\n data-grid-size={activeView() === \"grid\" ? (props.gridSize ?? \"md\") : undefined}\n >\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{messages().loading}</span>\n </div>\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loader.error()}>\n <div class=\"k2b-choice-status\">{isSearchable() ? messages().noResults : messages().noOptions}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={option.value === value()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focus(index())}\n onClick={() => select(option)}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Select;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createMemo","createSignal","For","Show","createFieldMeta","Field","fieldControlAria","useUiMessages","ChoiceGroups","createChoiceLoader","createChoicePopover","filterChoiceOptions","nextEnabledChoiceIndex","commitFieldValue","resolveMaybeAccessor","normalize","option","value","label","id","Select","props","messages","meta","listboxId","controlId","query","setQuery","focusedIndex","setFocusedIndex","cache","setCache","selectedGroup","setSelectedGroup","defaultGroup","selectedView","setSelectedView","defaultView","searchRef","optionRefs","error","activeGroup","current","groups","some","group","groupChoices","allGroupLabel","all","activeView","viewToggle","loader","fetchData","signal","map","loadOptions","undefined","fetchDebounceMs","debounceMs","isAsync","Boolean","isSearchable","searchable","sourceOptions","options","groupedOptions","filter","includes","filterOptions","selected","find","selectedOption","selectedLabel","hasClearAction","clearable","disabled","accessibleLabel","placeholder","selectOption","popover","focusedOption","focus","index","scrollIntoView","block","move","direction","chooseGroup","load","open","selectedIndex","findIndex","show","queueMicrotask","close","restoreFocus","hide","cancel","select","onKeyDown","event","inToolbar","target","closest","key","preventDefault","clear","stopPropagation","trigger","_$createComponent","class","description","required","children","_$ssr","_tmpl$8","_$ssrAttribute","_$escape","_$ssrElement","_$mergeProps","type","role","aria-expanded","aria-activedescendant","data-clearable","when","color","fallback","icon","_tmpl$2","_tmpl$9","_$ssrStyleProperty","_tmpl$","activeIcon","name","_tmpl$0","_tmpl$3","clearSelection","_tmpl$4","searchPlaceholder","search","searchOptions","length","_tmpl$6","choices","onValueChange","ariaLabel","groupsAriaLabel","controls","_tmpl$5","showGridView","showListView","gridSize","message","_tmpl$1","retry","loading","_tmpl$7","each","_tmpl$10","noResults","noOptions","_tmpl$11","_tmpl$12"],"sources":["inputs/Select.tsx"],"sourcesContent":["import { createMemo, createSignal, For, type JSX, Show } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChoiceGroups } from \"./ChoiceGroups\";\nimport { type ChoiceOption, createChoiceLoader, createChoicePopover, filterChoiceOptions, nextEnabledChoiceIndex } from \"./choice\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectOption = ChoiceOption<string>;\nexport type SelectGroup = {\n value: string;\n label: string;\n};\nexport type SelectView = \"list\" | \"grid\";\nexport type SelectGridSize = \"sm\" | \"md\" | \"lg\";\nexport type SelectSourceOption =\n | string\n | {\n id: string;\n label?: string;\n description?: string;\n icon?: string;\n color?: string;\n groups?: readonly string[];\n }\n | SelectOption;\n\nexport type SelectProps = ValueFieldProps<string | null> & {\n placeholder?: string;\n icon?: string;\n activeIcon?: string;\n options?: SelectSourceOption[];\n fetchData?: (query: string, signal: AbortSignal, group: string | null) => Promise<SelectSourceOption[]>;\n loadOptions?: (query: string, signal: AbortSignal, group: string | null) => Promise<readonly ChoiceOption<string>[]>;\n selectedOption?: ChoiceOption<string>;\n selectedLabel?: () => string | undefined;\n fetchDebounceMs?: number;\n debounceMs?: number;\n searchable?: boolean;\n /** Optional synchronous filter for static options. */\n filterOptions?: (options: readonly SelectOption[], query: string) => readonly SelectOption[];\n /** Optional filters. An option may belong to more than one group. */\n groups?: readonly SelectGroup[];\n /** Group selected when the component is created. Omit to start with all options. */\n defaultGroup?: string;\n groupsAriaLabel?: string;\n allGroupLabel?: string;\n /** Show a local list/grid layout toggle in the dropdown. */\n viewToggle?: boolean;\n /** Initial dropdown layout when `viewToggle` is enabled. */\n defaultView?: SelectView;\n /** Tile density for the grid layout. */\n gridSize?: SelectGridSize;\n searchPlaceholder?: string;\n clearable?: boolean;\n name?: string;\n};\n\ntype NormalizedOption = ChoiceOption<string>;\nconst normalize = (option: SelectSourceOption): NormalizedOption =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : \"value\" in option\n ? option\n : { ...option, value: option.id, label: option.label || option.id };\n\nexport function Select(props: SelectProps): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const listboxId = `${meta.controlId}-listbox`;\n const [query, setQuery] = createSignal(\"\");\n const [focusedIndex, setFocusedIndex] = createSignal(-1);\n const [cache, setCache] = createSignal<Record<string, NormalizedOption>>({});\n const [selectedGroup, setSelectedGroup] = createSignal<string | null>(props.defaultGroup ?? null);\n const [selectedView, setSelectedView] = createSignal<SelectView>(props.defaultView ?? \"list\");\n let searchRef: HTMLInputElement | undefined;\n let optionRefs: HTMLButtonElement[] = [];\n const value = () => resolveMaybeAccessor(props.value) ?? null;\n const error = () => resolveMaybeAccessor(props.error);\n const activeGroup = createMemo(() => {\n const current = selectedGroup();\n return current && props.groups?.some((group) => group.value === current) ? current : null;\n });\n const groupChoices = createMemo(() => [{ value: null, label: props.allGroupLabel ?? messages().all }, ...(props.groups ?? [])]);\n const activeView = () => (props.viewToggle ? selectedView() : \"list\");\n\n const loader = createChoiceLoader(\n () =>\n props.fetchData\n ? async (value, signal) => (await props.fetchData!(value, signal, activeGroup())).map(normalize)\n : props.loadOptions\n ? (value, signal) => props.loadOptions!(value, signal, activeGroup())\n : undefined,\n () => props.fetchDebounceMs ?? props.debounceMs ?? 200,\n );\n const isAsync = () => Boolean(props.fetchData || props.loadOptions);\n const isSearchable = () => isAsync() || Boolean(props.searchable);\n const sourceOptions = createMemo(() => (isAsync() ? loader.options() : (props.options ?? []).map(normalize)));\n const groupedOptions = createMemo(() => {\n const group = activeGroup();\n return !isAsync() && group ? sourceOptions().filter((option) => option.groups?.includes(group)) : sourceOptions();\n });\n // Remote loaders filter server-side; a static list has to be filtered here or\n // the search field would render but do nothing.\n const options = createMemo(() =>\n isAsync() || !props.searchable\n ? groupedOptions()\n : props.filterOptions\n ? [...props.filterOptions(groupedOptions(), query())]\n : filterChoiceOptions(groupedOptions(), query()),\n );\n const selected = createMemo(() => {\n const current = value();\n if (current === null) return undefined;\n // Resolve against the unfiltered list so typing in the search field never\n // blanks the trigger label of the current selection.\n return (\n sourceOptions().find((option) => option.value === current) ??\n cache()[current] ??\n (props.selectedOption?.value === current ? props.selectedOption : undefined) ?? {\n value: current,\n label: props.selectedLabel?.() ?? current,\n }\n );\n });\n const hasClearAction = () => Boolean(props.clearable && selected() && !props.disabled);\n const accessibleLabel = () =>\n props[\"aria-label\"] ?? (typeof props.label === \"string\" ? undefined : (props.placeholder ?? messages().selectOption));\n const popover = createChoicePopover(() => Boolean(props.disabled));\n const focusedOption = () => options()[focusedIndex()];\n const focus = (index: number) => {\n setFocusedIndex(index);\n optionRefs[index]?.scrollIntoView({ block: \"nearest\" });\n };\n const move = (direction: 1 | -1) => focus(nextEnabledChoiceIndex(options(), focusedIndex(), direction));\n const chooseGroup = (group: string | null) => {\n if (group === activeGroup()) return;\n setSelectedGroup(group);\n setFocusedIndex(nextEnabledChoiceIndex(options(), -1, 1));\n if (isAsync()) loader.load(query(), true);\n };\n const open = () => {\n if (props.disabled) return;\n setQuery(\"\");\n if (isAsync()) loader.load(\"\", true);\n const selectedIndex = options().findIndex((option) => option.value === value());\n focus(selectedIndex >= 0 ? selectedIndex : nextEnabledChoiceIndex(options(), -1, 1));\n popover.show();\n if (isSearchable()) queueMicrotask(() => searchRef?.focus());\n };\n const close = (restoreFocus = false) => {\n // Hide the top-layer surface before any reactive cleanup or consumer\n // callback can rerender its contents. Selection must feel atomic: the old\n // listbox must never remain visible with the next value.\n popover.hide(restoreFocus);\n loader.cancel();\n setQuery(\"\");\n setFocusedIndex(-1);\n };\n const select = (option: NormalizedOption) => {\n if (option.disabled) return;\n close(true);\n setCache({ ...cache(), [option.value]: option });\n commitFieldValue(props, option.value);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const inToolbar = Boolean((event.target as HTMLElement | null)?.closest?.(\".k2b-choice-toolbar\"));\n if (inToolbar && event.key !== \"Escape\" && event.key !== \"Tab\") return;\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!popover.open()) open();\n else move(event.key === \"ArrowDown\" ? 1 : -1);\n } else if ((event.key === \"Enter\" || event.key === \" \") && !popover.open()) {\n event.preventDefault();\n open();\n } else if (event.key === \"Enter\" && focusedOption()) {\n event.preventDefault();\n select(focusedOption()!);\n } else if (event.key === \"Escape\" && popover.open()) {\n // Only swallow Escape while the list is open — a closed select must let\n // the key bubble to an enclosing dialog or drawer.\n event.preventDefault();\n close(true);\n } else if (event.key === \"Tab\" && popover.open()) close();\n };\n const clear = (event: MouseEvent) => {\n event.stopPropagation();\n commitFieldValue(props, null);\n popover.trigger()?.focus();\n };\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={error()}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div class=\"k2b-choice-control\" data-invalid={error() ? \"true\" : undefined}>\n <button\n ref={popover.setTrigger}\n id={meta.controlId}\n type=\"button\"\n class=\"k2b-choice-trigger\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={popover.open()}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n data-clearable={hasClearAction() ? \"true\" : undefined}\n {...fieldControlAria(meta, {\n ...props,\n \"aria-label\": accessibleLabel(),\n })}\n disabled={props.disabled}\n onClick={() => (popover.open() ? close() : open())}\n onKeyDown={onKeyDown}\n >\n <Show\n when={selected()?.color}\n fallback={<Show when={selected()?.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span class=\"k2b-choice-trigger__value\" data-placeholder={selected() ? undefined : \"true\"}>\n {selected()?.label ?? props.placeholder ?? messages().select}\n </span>\n <i class={popover.open() ? (props.activeIcon ?? \"ti ti-chevron-up\") : (props.icon ?? \"ti ti-chevron-down\")} aria-hidden=\"true\" />\n </button>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value() ?? \"\"} />}</Show>\n <Show when={hasClearAction()}>\n <button\n type=\"button\"\n class=\"k2b-choice-control__clear k2b-input-clear-action\"\n aria-label={messages().clearSelection}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <div\n ref={popover.setPopover}\n popover=\"manual\"\n class=\"k2b-choice-popover\"\n role=\"group\"\n onKeyDown={onKeyDown}\n aria-label={typeof props.label === \"string\" ? props.label : messages().options}\n >\n <Show when={isSearchable()}>\n <div class=\"k2b-choice-search\">\n <i class=\"ti ti-search\" aria-hidden=\"true\" />\n <input\n ref={searchRef}\n type=\"search\"\n value={query()}\n placeholder={props.searchPlaceholder ?? messages().search}\n aria-label={props.searchPlaceholder ?? messages().searchOptions}\n aria-controls={listboxId}\n aria-activedescendant={focusedOption() ? `${listboxId}-${focusedIndex()}` : undefined}\n onInput={(event) => {\n setQuery(event.currentTarget.value);\n if (isAsync()) loader.load(event.currentTarget.value);\n focus(isAsync() ? -1 : nextEnabledChoiceIndex(options(), -1, 1));\n }}\n />\n </div>\n </Show>\n <Show when={(props.groups?.length ?? 0) > 0 || props.viewToggle}>\n <div class=\"k2b-choice-toolbar\">\n <Show when={(props.groups?.length ?? 0) > 0}>\n <ChoiceGroups\n choices={groupChoices()}\n value={activeGroup()}\n onValueChange={chooseGroup}\n ariaLabel={props.groupsAriaLabel ?? messages().filterOptions}\n controls={listboxId}\n />\n </Show>\n <Show when={props.viewToggle}>\n <button\n type=\"button\"\n class=\"k2b-choice-view-toggle\"\n aria-label={activeView() === \"list\" ? messages().showGridView : messages().showListView}\n aria-controls={listboxId}\n onClick={() => setSelectedView(activeView() === \"list\" ? \"grid\" : \"list\")}\n >\n <i class={activeView() === \"list\" ? \"ti ti-category-2\" : \"ti ti-list-details\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Show>\n <div\n id={listboxId}\n class=\"k2b-choice-options\"\n role=\"listbox\"\n data-view={activeView()}\n data-grid-size={activeView() === \"grid\" ? (props.gridSize ?? \"md\") : undefined}\n >\n <Show when={loader.error()}>\n {(message) => (\n <div class=\"k2b-choice-status\" data-tone=\"danger\">\n <span>{message()}</span>\n <button type=\"button\" onClick={loader.retry}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <Show when={loader.loading() && options().length === 0}>\n <div class=\"k2b-choice-status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span>{messages().loading}</span>\n </div>\n </Show>\n <For\n each={loader.error() ? [] : options()}\n fallback={\n <Show when={!loader.loading() && !loader.error()}>\n <div class=\"k2b-choice-status\">{isSearchable() ? messages().noResults : messages().noOptions}</div>\n </Show>\n }\n >\n {(option, index) => (\n <button\n ref={(element) => (optionRefs[index()] = element)}\n type=\"button\"\n id={`${listboxId}-${index()}`}\n class=\"k2b-choice-option\"\n role=\"option\"\n aria-label={option.label}\n aria-selected={option.value === value()}\n data-focused={index() === focusedIndex() ? \"true\" : undefined}\n disabled={option.disabled}\n onPointerMove={() => focus(index())}\n onClick={() => select(option)}\n >\n <Show when={option.color} fallback={<Show when={option.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}>\n {(color) => <span class=\"k2b-choice-dot\" style={{ \"background-color\": color() }} aria-hidden=\"true\" />}\n </Show>\n <span>\n <strong>{option.label}</strong>\n <Show when={option.description}>{(description) => <small>{description()}</small>}</Show>\n </span>\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </Field>\n );\n}\n\nexport default Select;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,EAAEC,YAAY,EAAEC,GAAG,EAAYC,IAAI,QAAQ,UAAU;AACxE,SAASC,eAAe,EAAEC,KAAK,EAAEC,gBAAgB,QAAQ,mBAAmB;AAC5E,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAA4BC,kBAAkB,EAAEC,mBAAmB,EAAEC,mBAAmB,EAAEC,sBAAsB,QAAQ,UAAU;AAElI,SAASC,gBAAgB,EAAEC,oBAAoB,QAAQ,kBAAkB;AAqDzE,MAAMC,SAAS,GAAIC,MAA0B,IAC3C,OAAOA,MAAM,KAAK,QAAQ,GACtB;EAAEC,KAAK,EAAED,MAAM;EAAEE,KAAK,EAAEF;AAAO,CAAC,GAChC,OAAO,IAAIA,MAAM,GACfA,MAAM,GACN;EAAE,GAAGA,MAAM;EAAEC,KAAK,EAAED,MAAM,CAACG,EAAE;EAAED,KAAK,EAAEF,MAAM,CAACE,KAAK,IAAIF,MAAM,CAACG;AAAG,CAAC;AAEzE,OAAO,SAASC,MAAMA,CAACC,KAAkB,EAAe;EACtD,MAAMC,QAAQ,GAAGf,aAAa,CAAC,CAAC;EAChC,MAAMgB,IAAI,GAAGnB,eAAe,CAACiB,KAAK,CAACF,EAAE,CAAC;EACtC,MAAMK,SAAS,GAAG,GAAGD,IAAI,CAACE,SAAS,UAAU;EAC7C,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG1B,YAAY,CAAC,EAAE,CAAC;EAC1C,MAAM,CAAC2B,YAAY,EAAEC,eAAe,CAAC,GAAG5B,YAAY,CAAC,CAAC,CAAC,CAAC;EACxD,MAAM,CAAC6B,KAAK,EAAEC,QAAQ,CAAC,GAAG9B,YAAY,CAAmC,CAAC,CAAC,CAAC;EAC5E,MAAM,CAAC+B,aAAa,EAAEC,gBAAgB,CAAC,GAAGhC,YAAY,CAAgBoB,KAAK,CAACa,YAAY,IAAI,IAAI,CAAC;EACjG,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGnC,YAAY,CAAaoB,KAAK,CAACgB,WAAW,IAAI,MAAM,CAAC;EAC7F,IAAIC,SAAuC;EAC3C,IAAIC,UAA+B,GAAG,EAAE;EACxC,MAAMtB,KAAK,GAAGA,CAAA,KAAMH,oBAAoB,CAACO,KAAK,CAACJ,KAAK,CAAC,IAAI,IAAI;EAC7D,MAAMuB,KAAK,GAAGA,CAAA,KAAM1B,oBAAoB,CAACO,KAAK,CAACmB,KAAK,CAAC;EACrD,MAAMC,WAAW,GAAGzC,UAAU,CAAC,MAAM;IACnC,MAAM0C,OAAO,GAAGV,aAAa,CAAC,CAAC;IAC/B,OAAOU,OAAO,IAAIrB,KAAK,CAACsB,MAAM,EAAEC,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC5B,KAAK,KAAKyB,OAAO,CAAC,GAAGA,OAAO,GAAG,IAAI;EAC3F,CAAC,CAAC;EACF,MAAMI,YAAY,GAAG9C,UAAU,CAAC,MAAM,CAAC;IAAEiB,KAAK,EAAE,IAAI;IAAEC,KAAK,EAAEG,KAAK,CAAC0B,aAAa,IAAIzB,QAAQ,CAAC,CAAC,CAAC0B;EAAI,CAAC,EAAE,IAAI3B,KAAK,CAACsB,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;EAC/H,MAAMM,UAAU,GAAGA,CAAA,KAAO5B,KAAK,CAAC6B,UAAU,GAAGf,YAAY,CAAC,CAAC,GAAG,MAAO;EAErE,MAAMgB,MAAM,GAAG1C,kBAAkB,CAC/B,MACEY,KAAK,CAAC+B,SAAS,GACX,OAAOnC,KAAK,EAAEoC,MAAM,KAAK,CAAC,MAAMhC,KAAK,CAAC+B,SAAS,CAAEnC,KAAK,EAAEoC,MAAM,EAAEZ,WAAW,CAAC,CAAC,CAAC,EAAEa,GAAG,CAACvC,SAAS,CAAC,GAC9FM,KAAK,CAACkC,WAAW,GACf,CAACtC,KAAK,EAAEoC,MAAM,KAAKhC,KAAK,CAACkC,WAAW,CAAEtC,KAAK,EAAEoC,MAAM,EAAEZ,WAAW,CAAC,CAAC,CAAC,GACnEe,SAAS,EACjB,MAAMnC,KAAK,CAACoC,eAAe,IAAIpC,KAAK,CAACqC,UAAU,IAAI,GACrD,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAMC,OAAO,CAACvC,KAAK,CAAC+B,SAAS,IAAI/B,KAAK,CAACkC,WAAW,CAAC;EACnE,MAAMM,YAAY,GAAGA,CAAA,KAAMF,OAAO,CAAC,CAAC,IAAIC,OAAO,CAACvC,KAAK,CAACyC,UAAU,CAAC;EACjE,MAAMC,aAAa,GAAG/D,UAAU,CAAC,MAAO2D,OAAO,CAAC,CAAC,GAAGR,MAAM,CAACa,OAAO,CAAC,CAAC,GAAG,CAAC3C,KAAK,CAAC2C,OAAO,IAAI,EAAE,EAAEV,GAAG,CAACvC,SAAS,CAAE,CAAC;EAC7G,MAAMkD,cAAc,GAAGjE,UAAU,CAAC,MAAM;IACtC,MAAM6C,KAAK,GAAGJ,WAAW,CAAC,CAAC;IAC3B,OAAO,CAACkB,OAAO,CAAC,CAAC,IAAId,KAAK,GAAGkB,aAAa,CAAC,CAAC,CAACG,MAAM,CAAElD,MAAM,IAAKA,MAAM,CAAC2B,MAAM,EAAEwB,QAAQ,CAACtB,KAAK,CAAC,CAAC,GAAGkB,aAAa,CAAC,CAAC;EACnH,CAAC,CAAC;EACF;EACA;EACA,MAAMC,OAAO,GAAGhE,UAAU,CAAC,MACzB2D,OAAO,CAAC,CAAC,IAAI,CAACtC,KAAK,CAACyC,UAAU,GAC1BG,cAAc,CAAC,CAAC,GAChB5C,KAAK,CAAC+C,aAAa,GACjB,CAAC,GAAG/C,KAAK,CAAC+C,aAAa,CAACH,cAAc,CAAC,CAAC,EAAEvC,KAAK,CAAC,CAAC,CAAC,CAAC,GACnDf,mBAAmB,CAACsD,cAAc,CAAC,CAAC,EAAEvC,KAAK,CAAC,CAAC,CACrD,CAAC;EACD,MAAM2C,QAAQ,GAAGrE,UAAU,CAAC,MAAM;IAChC,MAAM0C,OAAO,GAAGzB,KAAK,CAAC,CAAC;IACvB,IAAIyB,OAAO,KAAK,IAAI,EAAE,OAAOc,SAAS;IACtC;IACA;IACA,OACEO,aAAa,CAAC,CAAC,CAACO,IAAI,CAAEtD,MAAM,IAAKA,MAAM,CAACC,KAAK,KAAKyB,OAAO,CAAC,IAC1DZ,KAAK,CAAC,CAAC,CAACY,OAAO,CAAC,KACfrB,KAAK,CAACkD,cAAc,EAAEtD,KAAK,KAAKyB,OAAO,GAAGrB,KAAK,CAACkD,cAAc,GAAGf,SAAS,CAAC,IAAI;MAC9EvC,KAAK,EAAEyB,OAAO;MACdxB,KAAK,EAAEG,KAAK,CAACmD,aAAa,GAAG,CAAC,IAAI9B;IACpC,CAAC;EAEL,CAAC,CAAC;EACF,MAAM+B,cAAc,GAAGA,CAAA,KAAMb,OAAO,CAACvC,KAAK,CAACqD,SAAS,IAAIL,QAAQ,CAAC,CAAC,IAAI,CAAChD,KAAK,CAACsD,QAAQ,CAAC;EACtF,MAAMC,eAAe,GAAGA,CAAA,KACtBvD,KAAK,CAAC,YAAY,CAAC,KAAK,OAAOA,KAAK,CAACH,KAAK,KAAK,QAAQ,GAAGsC,SAAS,GAAInC,KAAK,CAACwD,WAAW,IAAIvD,QAAQ,CAAC,CAAC,CAACwD,YAAa,CAAC;EACvH,MAAMC,OAAO,GAAGrE,mBAAmB,CAAC,MAAMkD,OAAO,CAACvC,KAAK,CAACsD,QAAQ,CAAC,CAAC;EAClE,MAAMK,aAAa,GAAGA,CAAA,KAAMhB,OAAO,CAAC,CAAC,CAACpC,YAAY,CAAC,CAAC,CAAC;EACrD,MAAMqD,KAAK,GAAIC,KAAa,IAAK;IAC/BrD,eAAe,CAACqD,KAAK,CAAC;IACtB3C,UAAU,CAAC2C,KAAK,CAAC,EAAEC,cAAc,CAAC;MAAEC,KAAK,EAAE;IAAU,CAAC,CAAC;EACzD,CAAC;EACD,MAAMC,IAAI,GAAIC,SAAiB,IAAKL,KAAK,CAACrE,sBAAsB,CAACoD,OAAO,CAAC,CAAC,EAAEpC,YAAY,CAAC,CAAC,EAAE0D,SAAS,CAAC,CAAC;EACvG,MAAMC,WAAW,GAAI1C,KAAoB,IAAK;IAC5C,IAAIA,KAAK,KAAKJ,WAAW,CAAC,CAAC,EAAE;IAC7BR,gBAAgB,CAACY,KAAK,CAAC;IACvBhB,eAAe,CAACjB,sBAAsB,CAACoD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,IAAIL,OAAO,CAAC,CAAC,EAAER,MAAM,CAACqC,IAAI,CAAC9D,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;EAC3C,CAAC;EACD,MAAM+D,IAAI,GAAGA,CAAA,KAAM;IACjB,IAAIpE,KAAK,CAACsD,QAAQ,EAAE;IACpBhD,QAAQ,CAAC,EAAE,CAAC;IACZ,IAAIgC,OAAO,CAAC,CAAC,EAAER,MAAM,CAACqC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;IACpC,MAAME,aAAa,GAAG1B,OAAO,CAAC,CAAC,CAAC2B,SAAS,CAAE3E,MAAM,IAAKA,MAAM,CAACC,KAAK,KAAKA,KAAK,CAAC,CAAC,CAAC;IAC/EgE,KAAK,CAACS,aAAa,IAAI,CAAC,GAAGA,aAAa,GAAG9E,sBAAsB,CAACoD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpFe,OAAO,CAACa,IAAI,CAAC,CAAC;IACd,IAAI/B,YAAY,CAAC,CAAC,EAAEgC,cAAc,CAAC,MAAMvD,SAAS,EAAE2C,KAAK,CAAC,CAAC,CAAC;EAC9D,CAAC;EACD,MAAMa,KAAK,GAAGA,CAACC,YAAY,GAAG,KAAK,KAAK;IACtC;IACA;IACA;IACAhB,OAAO,CAACiB,IAAI,CAACD,YAAY,CAAC;IAC1B5C,MAAM,CAAC8C,MAAM,CAAC,CAAC;IACftE,QAAQ,CAAC,EAAE,CAAC;IACZE,eAAe,CAAC,CAAC,CAAC,CAAC;EACrB,CAAC;EACD,MAAMqE,MAAM,GAAIlF,MAAwB,IAAK;IAC3C,IAAIA,MAAM,CAAC2D,QAAQ,EAAE;IACrBmB,KAAK,CAAC,IAAI,CAAC;IACX/D,QAAQ,CAAC;MAAE,GAAGD,KAAK,CAAC,CAAC;MAAE,CAACd,MAAM,CAACC,KAAK,GAAGD;IAAO,CAAC,CAAC;IAChDH,gBAAgB,CAACQ,KAAK,EAAEL,MAAM,CAACC,KAAK,CAAC;EACvC,CAAC;EACD,MAAMkF,SAAS,GAAIC,KAAoB,IAAK;IAC1C,MAAMC,SAAS,GAAGzC,OAAO,CAAEwC,KAAK,CAACE,MAAM,EAAyBC,OAAO,GAAG,qBAAqB,CAAC,CAAC;IACjG,IAAIF,SAAS,IAAID,KAAK,CAACI,GAAG,KAAK,QAAQ,IAAIJ,KAAK,CAACI,GAAG,KAAK,KAAK,EAAE;IAChE,IAAIJ,KAAK,CAACI,GAAG,KAAK,WAAW,IAAIJ,KAAK,CAACI,GAAG,KAAK,SAAS,EAAE;MACxDJ,KAAK,CAACK,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC1B,OAAO,CAACU,IAAI,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,KACvBJ,IAAI,CAACe,KAAK,CAACI,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC,MAAM,IAAI,CAACJ,KAAK,CAACI,GAAG,KAAK,OAAO,IAAIJ,KAAK,CAACI,GAAG,KAAK,GAAG,KAAK,CAACzB,OAAO,CAACU,IAAI,CAAC,CAAC,EAAE;MAC1EW,KAAK,CAACK,cAAc,CAAC,CAAC;MACtBhB,IAAI,CAAC,CAAC;IACR,CAAC,MAAM,IAAIW,KAAK,CAACI,GAAG,KAAK,OAAO,IAAIxB,aAAa,CAAC,CAAC,EAAE;MACnDoB,KAAK,CAACK,cAAc,CAAC,CAAC;MACtBP,MAAM,CAAClB,aAAa,CAAC,CAAE,CAAC;IAC1B,CAAC,MAAM,IAAIoB,KAAK,CAACI,GAAG,KAAK,QAAQ,IAAIzB,OAAO,CAACU,IAAI,CAAC,CAAC,EAAE;MACnD;MACA;MACAW,KAAK,CAACK,cAAc,CAAC,CAAC;MACtBX,KAAK,CAAC,IAAI,CAAC;IACb,CAAC,MAAM,IAAIM,KAAK,CAACI,GAAG,KAAK,KAAK,IAAIzB,OAAO,CAACU,IAAI,CAAC,CAAC,EAAEK,KAAK,CAAC,CAAC;EAC3D,CAAC;EACD,MAAMY,KAAK,GAAIN,KAAiB,IAAK;IACnCA,KAAK,CAACO,eAAe,CAAC,CAAC;IACvB9F,gBAAgB,CAACQ,KAAK,EAAE,IAAI,CAAC;IAC7B0D,OAAO,CAAC6B,OAAO,CAAC,CAAC,EAAE3B,KAAK,CAAC,CAAC;EAC5B,CAAC;EAED,OAAA4B,iBAAA,CACGxG,KAAK;IAAA,aAAAyG,CAAA;MAAA,OACGzF,KAAK,CAACyF,KAAK;IAAA;IAAA,IAClB5F,KAAKA,CAAA;MAAA,OAAEG,KAAK,CAACH,KAAK;IAAA;IAAA,IAClB6F,WAAWA,CAAA;MAAA,OAAE1F,KAAK,CAAC0F,WAAW;IAAA;IAAA,IAC9BvE,KAAKA,CAAA;MAAA,OAAEA,KAAK,CAAC,CAAC;IAAA;IACdjB,IAAI,EAAEA,IAAI;IAAA,IACVyF,QAAQA,CAAA;MAAA,OAAE3F,KAAK,CAAC2F,QAAQ;IAAA;IAAA,IACxBrC,QAAQA,CAAA;MAAA,OAAEtD,KAAK,CAACsD,QAAQ;IAAA;IAAA,IAAAsC,SAAA;MAAA,OAAAC,KAAA,CAAAC,OAAA,EAAAC,cAAA,iBAEsB5E,KAAK,CAAC,CAAC,GAAG,MAAM,GAAA6E,QAAA,CAAG7D,SAAS,iBAAA8D,YAAA,WAAAC,YAAA;QAAA,IAGtEpG,EAAEA,CAAA;UAAA,OAAEI,IAAI,CAACE,SAAS;QAAA;QAClB+F,IAAI,EAAC,QAAQ;QAAA,SACP,oBAAoB;QAC1BC,IAAI,EAAC,UAAU;QAAA,iBACD,SAAS;QAAA,qBAAAC,CAAA;UAAA,OACR3C,OAAO,CAACU,IAAI,CAAC,CAAC;QAAA;QAAA,iBACdjE,SAAS;QAAA,6BAAAmG,CAAA;UAAA,OACD3C,aAAa,CAAC,CAAC,GAAG,GAAGxD,SAAS,IAAII,YAAY,CAAC,CAAC,EAAE,GAAG4B,SAAS;QAAA;QAAA,sBAAAoE,CAAA;UAAA,OACrEnD,cAAc,CAAC,CAAC,GAAG,MAAM,GAAGjB,SAAS;QAAA;MAAA,SACjDlD,gBAAgB,CAACiB,IAAI,EAAE;QACzB,GAAGF,KAAK;QACR,YAAY,EAAEuD,eAAe,CAAC;MAChC,CAAC,CAAC;QAAA,IACFD,QAAQA,CAAA;UAAA,OAAEtD,KAAK,CAACsD,QAAQ;QAAA;MAAA,KAAA0C,QAAA,CAAAR,iBAAA,CAIvB1G,IAAI;QAAA,IACH0H,IAAIA,CAAA;UAAA,OAAExD,QAAQ,CAAC,CAAC,EAAEyD,KAAK;QAAA;QAAA,IACvBC,QAAQA,CAAA;UAAA,OAAAlB,iBAAA,CAAG1G,IAAI;YAAA,IAAC0H,IAAIA,CAAA;cAAA,OAAExD,QAAQ,CAAC,CAAC,EAAE2D,IAAI;YAAA;YAAAf,QAAA,EAAIe,IAAI,IAAAd,KAAA,CAAAe,OAAA,EAAAb,cAAA,UAAAC,QAAA,CAAeW,IAAI,CAAC,CAAC;UAAuB;QAAA;QAAAf,QAAA,EAExFa,KAAK,IAAAZ,KAAA,CAAAgB,OAAA,EAAAC,kBAAA,sBAAAd,QAAA,CAA+DS,KAAK,CAAC,CAAC;MAAyB,KAAAZ,KAAA,CAAAkB,MAAA,EAAAhB,cAAA,qBAE9C/C,QAAQ,CAAC,CAAC,GAAAgD,QAAA,CAAG7D,SAAS,UAAG,MAAM,UAAA6D,QAAA,CACtFhD,QAAQ,CAAC,CAAC,EAAEnD,KAAK,IAAIG,KAAK,CAACwD,WAAW,IAAIvD,QAAQ,CAAC,CAAC,CAAC4E,MAAM,IAAAgB,KAAA,CAAAe,OAAA,EAAAb,cAAA,UAEpDrC,OAAO,CAACU,IAAI,CAAC,CAAC,GAAA4B,QAAA,CAAIhG,KAAK,CAACgH,UAAU,IAAI,kBAAkB,UAAAhB,QAAA,CAAKhG,KAAK,CAAC2G,IAAI,IAAI,oBAAoB,OAAC,oBAAAX,QAAA,CAAAR,iBAAA,CAE3G1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAExG,KAAK,CAACiH,IAAI;QAAA;QAAArB,QAAA,EAAIqB,IAAI,IAAApB,KAAA,CAAAqB,OAAA,EAAAnB,cAAA,SAAAC,QAAA,CAAgCiB,IAAI,CAAC,CAAC,kBAAAlB,cAAA,UAAAC,QAAA,CAASpG,KAAK,CAAC,CAAC,IAAI,EAAE;MAAI,KAAAoG,QAAA,CAAAR,iBAAA,CAC7F1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAEpD,cAAc,CAAC,CAAC;QAAA;QAAA,IAAAwC,SAAA;UAAA,OAAAC,KAAA,CAAAsB,OAAA,EAAApB,cAAA,eAAAC,QAAA,CAIZ/F,QAAQ,CAAC,CAAC,CAACmH,cAAc;QAAA;MAAA,KAAArB,cAAA,eAY3B,OAAO/F,KAAK,CAACH,KAAK,KAAK,QAAQ,GAAAmG,QAAA,CAAGhG,KAAK,CAACH,KAAK,UAAAmG,QAAA,CAAG/F,QAAQ,CAAC,CAAC,CAAC0C,OAAO,iBAAAqD,QAAA,CAAAR,iBAAA,CAE7E1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAEhE,YAAY,CAAC,CAAC;QAAA;QAAA,IAAAoD,SAAA;UAAA,OAAAC,KAAA,CAAAwB,OAAA,EAAAtB,cAAA,UAAAC,QAAA,CAMb3F,KAAK,CAAC,CAAC,kBAAA0F,cAAA,gBAAAC,QAAA,CACDhG,KAAK,CAACsH,iBAAiB,IAAIrH,QAAQ,CAAC,CAAC,CAACsH,MAAM,kBAAAxB,cAAA,eAAAC,QAAA,CAC7ChG,KAAK,CAACsH,iBAAiB,IAAIrH,QAAQ,CAAC,CAAC,CAACuH,aAAa,kBAAAzB,cAAA,kBAAAC,QAAA,CAChD7F,SAAS,kBAAA4F,cAAA,0BACDpC,aAAa,CAAC,CAAC,GAAG,GAAAqC,QAAA,CAAG7F,SAAS,WAAA6F,QAAA,CAAIzF,YAAY,CAAC,CAAC,SAAE,GAAAyF,QAAA,CAAG7D,SAAS;QAAA;MAAA,KAAA6D,QAAA,CAAAR,iBAAA,CAS1F1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAE,CAACxG,KAAK,CAACsB,MAAM,EAAEmG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAIzH,KAAK,CAAC6B,UAAU;QAAA;QAAA,IAAA+D,SAAA;UAAA,OAAAC,KAAA,CAAA6B,OAAA,EAAA1B,QAAA,CAAAR,iBAAA,CAE1D1G,IAAI;YAAA,IAAC0H,IAAIA,CAAA;cAAA,OAAE,CAACxG,KAAK,CAACsB,MAAM,EAAEmG,MAAM,IAAI,CAAC,IAAI,CAAC;YAAA;YAAA,IAAA7B,SAAA;cAAA,OAAAJ,iBAAA,CACxCrG,YAAY;gBAAA,IACXwI,OAAOA,CAAA;kBAAA,OAAElG,YAAY,CAAC,CAAC;gBAAA;gBAAA,IACvB7B,KAAKA,CAAA;kBAAA,OAAEwB,WAAW,CAAC,CAAC;gBAAA;gBACpBwG,aAAa,EAAE1D,WAAW;gBAAA,IAC1B2D,SAASA,CAAA;kBAAA,OAAE7H,KAAK,CAAC8H,eAAe,IAAI7H,QAAQ,CAAC,CAAC,CAAC8C,aAAa;gBAAA;gBAC5DgF,QAAQ,EAAE5H;cAAS;YAAA;UAAA,KAAA6F,QAAA,CAAAR,iBAAA,CAGtB1G,IAAI;YAAA,IAAC0H,IAAIA,CAAA;cAAA,OAAExG,KAAK,CAAC6B,UAAU;YAAA;YAAA,IAAA+D,SAAA;cAAA,OAAAC,KAAA,CAAAmC,OAAA,EAAAjC,cAAA,eAIZnE,UAAU,CAAC,CAAC,KAAK,MAAM,GAAAoE,QAAA,CAAG/F,QAAQ,CAAC,CAAC,CAACgI,YAAY,UAAAjC,QAAA,CAAG/F,QAAQ,CAAC,CAAC,CAACiI,YAAY,kBAAAnC,cAAA,kBAAAC,QAAA,CACxE7F,SAAS,iBAAA4F,cAAA,UAGdnE,UAAU,CAAC,CAAC,KAAK,MAAM,GAAG,kBAAkB,GAAG,oBAAoB;YAAA;UAAA;QAAA;MAAA,KAAAmE,cAAA,OAAAC,QAAA,CAM/E7F,SAAS,iBAAA4F,cAAA,cAAAC,QAAA,CAGFpE,UAAU,CAAC,CAAC,kBAAAmE,cAAA,mBACPnE,UAAU,CAAC,CAAC,KAAK,MAAM,GAAAoE,QAAA,CAAIhG,KAAK,CAACmI,QAAQ,IAAI,IAAI,UAAAnC,QAAA,CAAI7D,SAAS,iBAAA6D,QAAA,CAAAR,iBAAA,CAE7E1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAE1E,MAAM,CAACX,KAAK,CAAC,CAAC;QAAA;QAAAyE,QAAA,EACtBwC,OAAO,IAAAvC,KAAA,CAAAwC,OAAA,EAAArC,QAAA,CAEEoC,OAAO,CAAC,CAAC,GAAApC,QAAA,CAEb/F,QAAQ,CAAC,CAAC,CAACqI,KAAK;MAGtB,KAAAtC,QAAA,CAAAR,iBAAA,CAEF1G,IAAI;QAAA,IAAC0H,IAAIA,CAAA;UAAA,OAAE1E,MAAM,CAACyG,OAAO,CAAC,CAAC,IAAI5F,OAAO,CAAC,CAAC,CAAC8E,MAAM,KAAK,CAAC;QAAA;QAAA,IAAA7B,SAAA;UAAA,OAAAC,KAAA,CAAA2C,OAAA,EAAAxC,QAAA,CAG3C/F,QAAQ,CAAC,CAAC,CAACsI,OAAO;QAAA;MAAA,KAAAvC,QAAA,CAAAR,iBAAA,CAG5B3G,GAAG;QAAA,IACF4J,IAAIA,CAAA;UAAA,OAAE3G,MAAM,CAACX,KAAK,CAAC,CAAC,GAAG,EAAE,GAAGwB,OAAO,CAAC,CAAC;QAAA;QAAA,IACrC+D,QAAQA,CAAA;UAAA,OAAAlB,iBAAA,CACL1G,IAAI;YAAA,IAAC0H,IAAIA,CAAA;cAAA,OAAE,CAAC1E,MAAM,CAACyG,OAAO,CAAC,CAAC,IAAI,CAACzG,MAAM,CAACX,KAAK,CAAC,CAAC;YAAA;YAAA,IAAAyE,SAAA;cAAA,OAAAC,KAAA,CAAA6C,QAAA,EACdlG,YAAY,CAAC,CAAC,GAAAwD,QAAA,CAAG/F,QAAQ,CAAC,CAAC,CAAC0I,SAAS,IAAA3C,QAAA,CAAG/F,QAAQ,CAAC,CAAC,CAAC2I,SAAS;YAAA;UAAA;QAAA;QAAAhD,QAAA,EAI/FA,CAACjG,MAAM,EAAEkE,KAAK,KAAAgC,KAAA,CAAAgD,QAAA,EAIP,GAAA7C,QAAA,CAAG7F,SAAS,WAAA6F,QAAA,CAAInC,KAAK,CAAC,CAAC,SAAE,EAAAkC,cAAA,eAAAC,QAAA,CAGjBrG,MAAM,CAACE,KAAK,kBAAAkG,cAAA,kBACTC,QAAA,CAAArG,MAAM,CAACC,KAAK,YAAAoG,QAAA,CAAKpG,KAAK,CAAC,CAAC,kBAAAmG,cAAA,iBACzBlC,KAAK,CAAC,CAAC,KAAKtD,YAAY,CAAC,CAAC,GAAG,MAAM,GAAAyF,QAAA,CAAG7D,SAAS,iBAAA4D,cAAA,aACnDpG,MAAM,CAAC2D,QAAQ,SAAA0C,QAAA,CAAAR,iBAAA,CAIxB1G,IAAI;UAAA,IAAC0H,IAAIA,CAAA;YAAA,OAAE7G,MAAM,CAAC8G,KAAK;UAAA;UAAA,IAAEC,QAAQA,CAAA;YAAA,OAAAlB,iBAAA,CAAG1G,IAAI;cAAA,IAAC0H,IAAIA,CAAA;gBAAA,OAAE7G,MAAM,CAACgH,IAAI;cAAA;cAAAf,QAAA,EAAIe,IAAI,IAAAd,KAAA,CAAAe,OAAA,EAAAb,cAAA,UAAAC,QAAA,CAAeW,IAAI,CAAC,CAAC;YAAuB;UAAA;UAAAf,QAAA,EAC3Ga,KAAK,IAAAZ,KAAA,CAAAgB,OAAA,EAAAC,kBAAA,sBAAAd,QAAA,CAA+DS,KAAK,CAAC,CAAC;QAAyB,KAAAT,QAAA,CAG7FrG,MAAM,CAACE,KAAK,GAAAmG,QAAA,CAAAR,iBAAA,CACpB1G,IAAI;UAAA,IAAC0H,IAAIA,CAAA;YAAA,OAAE7G,MAAM,CAAC+F,WAAW;UAAA;UAAAE,QAAA,EAAIF,WAAW,IAAAG,KAAA,CAAAiD,QAAA,EAAA9C,QAAA,CAAaN,WAAW,CAAC,CAAC;QAAS;MAGrF;IAAA;EAAA;AAOf;AAEA,eAAe3F,MAAM","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
2
1
  import { mergeProps as _$mergeProps } from "solid-js/web";
3
2
  import { ssr as _$ssr } from "solid-js/web";
3
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
4
  import { escape as _$escape } from "solid-js/web";
5
5
  import { createComponent as _$createComponent } from "solid-js/web";
6
- var _tmpl$ = ["<span>", "</span>"],
6
+ var _tmpl$ = ["<span", ">", "</span>"],
7
7
  _tmpl$2 = "<i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i>",
8
8
  _tmpl$3 = ["<i", " aria-hidden=\"true\"></i>"],
9
9
  _tmpl$4 = ["<img", " alt>"],
@@ -110,7 +110,7 @@ export function SelectChip(props) {
110
110
  return !props.iconOnly;
111
111
  },
112
112
  get children() {
113
- return [_$ssr(_tmpl$, _$escape(selected()?.label ?? props.placeholder ?? "")), _$ssr(_tmpl$2)];
113
+ return [_$ssr(_tmpl$, _$ssrAttribute("data-placeholder", selected() ? _$escape(undefined, true) : "true", false), _$escape(selected()?.label ?? props.placeholder ?? "")), _$ssr(_tmpl$2)];
114
114
  }
115
115
  })];
116
116
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","Show","Dropdown","createFieldMeta","Field","fieldControlAria","useUiMessages","commitFieldValue","resolveMaybeAccessor","SelectChip","props","messages","meta","id","value","selected","options","find","option","triggerLabel","label","chooseOption","items","map","action","checked","choice","class","description","disabled","icon","image","_$createComponent","error","required","children","Root","position","width","menuWidth","Trigger","_$mergeProps","appearance","iconOnly","controlId","undefined","size","title","when","fallback","_$ssr","_tmpl$3","_$ssrAttribute","_$escape","_tmpl$4","_tmpl$","placeholder","_tmpl$2","name","_tmpl$5"],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n menuWidth?: string;\n name?: string;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : messages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <Dropdown.Root\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`. */\n width={props.menuWidth ?? \"10rem\"}\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={props.disabled}\n iconOnly={props.iconOnly}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":";;;;;;;;;;AAAA,SAASA,UAAU,EAAYC,IAAI,QAAQ,UAAU;AAErD,SAASC,QAAQ,QAAkD,qBAAqB;AACxF,SAASC,eAAe,EAAEC,KAAK,EAAEC,gBAAgB,QAAQ,mBAAmB;AAC5E,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,SAASC,gBAAgB,EAAEC,oBAAoB,QAAQ,kBAAkB;AAuBzE,OAAO,SAASC,UAAUA,CAAqCC,KAAyB,EAAe;EACrG,MAAMC,QAAQ,GAAGL,aAAa,CAAC,CAAC;EAChC,MAAMM,IAAI,GAAGT,eAAe,CAACO,KAAK,CAACG,EAAE,CAAC;EACtC,MAAMC,KAAK,GAAGA,CAAA,KAAMN,oBAAoB,CAACE,KAAK,CAACI,KAAK,CAAE;EACtD,MAAMC,QAAQ,GAAGA,CAAA,KAAML,KAAK,CAACM,OAAO,CAACC,IAAI,CAAEC,MAAM,IAAKA,MAAM,CAACJ,KAAK,KAAKA,KAAK,CAAC,CAAC,CAAC;EAC/E,MAAMK,YAAY,GAAGA,CAAA,KAAMT,KAAK,CAAC,YAAY,CAAC,KAAK,OAAOA,KAAK,CAACU,KAAK,KAAK,QAAQ,GAAGV,KAAK,CAACU,KAAK,GAAGT,QAAQ,CAAC,CAAC,CAACU,YAAY,CAAC;EAC3H,MAAMC,KAAK,GAAGtB,UAAU,CAAiB,MACvCU,KAAK,CAACM,OAAO,CAACO,GAAG,CAAEL,MAAM,KAAM;IAC7BM,MAAM,EAAEA,CAAA,KAAMjB,gBAAgB,CAACG,KAAK,EAAEQ,MAAM,CAACJ,KAAK,CAAC;IACnDW,OAAO,EAAEA,CAAA,KAAMP,MAAM,CAACJ,KAAK,KAAKA,KAAK,CAAC,CAAC;IACvCY,MAAM,EAAE,OAAgB;IACxBC,KAAK,EAAE,yBAAyB;IAChCC,WAAW,EAAEV,MAAM,CAACU,WAAW;IAC/BC,QAAQ,EAAEX,MAAM,CAACW,QAAQ;IACzBC,IAAI,EAAEZ,MAAM,CAACY,IAAI;IACjBC,KAAK,EAAEb,MAAM,CAACa,KAAK;IACnBX,KAAK,EAAEF,MAAM,CAACE;EAChB,CAAC,CAAC,CACJ,CAAC;EAED,OAAAY,iBAAA,CACG5B,KAAK;IAAA,aAAAuB,CAAA;MAAA,OACGjB,KAAK,CAACiB,KAAK;IAAA;IAAA,IAClBP,KAAKA,CAAA;MAAA,OAAEV,KAAK,CAACU,KAAK;IAAA;IAAA,IAClBQ,WAAWA,CAAA;MAAA,OAAElB,KAAK,CAACkB,WAAW;IAAA;IAAA,IAC9BK,KAAKA,CAAA;MAAA,OAAEvB,KAAK,CAACuB,KAAK;IAAA;IAClBrB,IAAI,EAAEA,IAAI;IAAA,IACVsB,QAAQA,CAAA;MAAA,OAAExB,KAAK,CAACwB,QAAQ;IAAA;IAAA,IACxBL,QAAQA,CAAA;MAAA,OAAEnB,KAAK,CAACmB,QAAQ;IAAA;IAAA,IAAAM,SAAA;MAAA,QAAAH,iBAAA,CAEvB9B,QAAQ,CAACkC,IAAI;QAAA,IACZC,QAAQA,CAAA;UAAA,OAAE3B,KAAK,CAAC2B,QAAQ,IAAI,cAAc;QAAA;QAAA,IAE1CC,KAAKA,CAAA;UAAA,OAAE5B,KAAK,CAAC6B,SAAS,IAAI,OAAO;QAAA;QAAA,IACjCnB,KAAKA,CAAA;UAAA,OAAED,YAAY,CAAC,CAAC;QAAA;QAAA,IACrBG,KAAKA,CAAA;UAAA,OAAEA,KAAK,CAAC,CAAC;QAAA;QAAA,IAAAa,SAAA;UAAA,OAAAH,iBAAA,CAEb9B,QAAQ,CAACsC,OAAO,EAAAC,YAAA;YAAA,IACfC,UAAUA,CAAA;cAAA,OAAEhC,KAAK,CAACiC,QAAQ,GAAG,QAAQ,GAAG,OAAO;YAAA;YAAA,IAC/C9B,EAAEA,CAAA;cAAA,OAAED,IAAI,CAACgC,SAAS;YAAA;YAAA,aAAAjB,CAAA;cAAA,OACXjB,KAAK,CAACiC,QAAQ,GAAGE,SAAS,GAAG,iBAAiB;YAAA;YAAA,IACrDhB,QAAQA,CAAA;cAAA,OAAEnB,KAAK,CAACmB,QAAQ;YAAA;YAAA,IACxBc,QAAQA,CAAA;cAAA,OAAEjC,KAAK,CAACiC,QAAQ;YAAA;YAAA,IACxBvB,KAAKA,CAAA;cAAA,OAAED,YAAY,CAAC,CAAC;YAAA;YAAA,IACrB2B,IAAIA,CAAA;cAAA,OAAEpC,KAAK,CAACiC,QAAQ,GAAGjC,KAAK,CAACoC,IAAI,GAAGD,SAAS;YAAA;YAAA,IAC7CE,KAAKA,CAAA;cAAA,OAAErC,KAAK,CAACiC,QAAQ,GAAGxB,YAAY,CAAC,CAAC,GAAG0B,SAAS;YAAA;UAAA,SAC9CxC,gBAAgB,CAACO,IAAI,EAAEF,KAAK,CAAC;YAAA,IAAAyB,SAAA;cAAA,QAAAH,iBAAA,CAEhC/B,IAAI;gBAAA,IACH+C,IAAIA,CAAA;kBAAA,OAAEjC,QAAQ,CAAC,CAAC,EAAEgB,KAAK;gBAAA;gBAAA,IACvBkB,QAAQA,CAAA;kBAAA,OAAAjB,iBAAA,CAAG/B,IAAI;oBAAA,IAAC+C,IAAIA,CAAA;sBAAA,OAAEjC,QAAQ,CAAC,CAAC,EAAEe,IAAI,IAAIpB,KAAK,CAACoB,IAAI;oBAAA;oBAAAK,QAAA,EAAIL,IAAI,IAAAoB,KAAA,CAAAC,OAAA,EAAAC,cAAA,UAAAC,QAAA,CAAevB,IAAI,CAAC,CAAC;kBAAuB;gBAAA;gBAAAK,QAAA,EAEtGJ,KAAK,IAAAmB,KAAA,CAAAI,OAAA,EAAAF,cAAA,QAAAC,QAAA,CAAetB,KAAK,CAAC,CAAC;cAAW,IAAAC,iBAAA,CAEzC/B,IAAI;gBAAA,IAAC+C,IAAIA,CAAA;kBAAA,OAAE,CAACtC,KAAK,CAACiC,QAAQ;gBAAA;gBAAA,IAAAR,SAAA;kBAAA,QAAAe,KAAA,CAAAK,MAAA,EAAAF,QAAA,CAClBtC,QAAQ,CAAC,CAAC,EAAEK,KAAK,IAAIV,KAAK,CAAC8C,WAAW,IAAI,EAAE,IAAAN,KAAA,CAAAO,OAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA,IAAAzB,iBAAA,CAKxD/B,IAAI;QAAA,IAAC+C,IAAIA,CAAA;UAAA,OAAEtC,KAAK,CAACgD,IAAI;QAAA;QAAAvB,QAAA,EAAIuB,IAAI,IAAAR,KAAA,CAAAS,OAAA,EAAAP,cAAA,SAAAC,QAAA,CAAgCK,IAAI,CAAC,CAAC,kBAAAN,cAAA,UAAAC,QAAA,CAASvC,KAAK,CAAC,CAAC;MAAI;IAAA;EAAA;AAG9F;AAEA,eAAeL,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["createMemo","Show","Dropdown","createFieldMeta","Field","fieldControlAria","useUiMessages","commitFieldValue","resolveMaybeAccessor","SelectChip","props","messages","meta","id","value","selected","options","find","option","triggerLabel","label","chooseOption","items","map","action","checked","choice","class","description","disabled","icon","image","_$createComponent","error","required","children","Root","position","width","menuWidth","Trigger","_$mergeProps","appearance","iconOnly","controlId","undefined","size","title","when","fallback","_$ssr","_tmpl$3","_$ssrAttribute","_$escape","_tmpl$4","_tmpl$","placeholder","_tmpl$2","name","_tmpl$5"],"sources":["inputs/SelectChip.tsx"],"sourcesContent":["import { createMemo, type JSX, Show } from \"solid-js\";\nimport type { ButtonSize } from \"../actions/Button\";\nimport { Dropdown, type DropdownItem, type DropdownPosition } from \"../actions/Dropdown\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { MaybeAccessor, ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\n\nexport type SelectChipOption<T extends string | number = string> = {\n value: T;\n label: string;\n description?: string;\n icon?: string;\n image?: string;\n disabled?: boolean;\n};\n\nexport type SelectChipProps<T extends string | number = string> = ValueFieldProps<T> & {\n value: MaybeAccessor<T>;\n options: SelectChipOption<T>[];\n icon?: string;\n iconOnly?: boolean;\n size?: ButtonSize;\n placeholder?: string;\n position?: DropdownPosition;\n menuWidth?: string;\n name?: string;\n};\n\nexport function SelectChip<T extends string | number = string>(props: SelectChipProps<T>): JSX.Element {\n const messages = useUiMessages();\n const meta = createFieldMeta(props.id);\n const value = () => resolveMaybeAccessor(props.value)!;\n const selected = () => props.options.find((option) => option.value === value());\n const triggerLabel = () => props[\"aria-label\"] ?? (typeof props.label === \"string\" ? props.label : messages().chooseOption);\n const items = createMemo<DropdownItem[]>(() =>\n props.options.map((option) => ({\n action: () => commitFieldValue(props, option.value),\n checked: () => option.value === value(),\n choice: \"radio\" as const,\n class: \"k2b-select-chip__option\",\n description: option.description,\n disabled: option.disabled,\n icon: option.icon,\n image: option.image,\n label: option.label,\n })),\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <Dropdown.Root\n position={props.position ?? \"bottom-right\"}\n /* Cloud opens this menu at `w-40`. */\n width={props.menuWidth ?? \"10rem\"}\n label={triggerLabel()}\n items={items()}\n >\n <Dropdown.Trigger\n appearance={props.iconOnly ? \"button\" : \"plain\"}\n id={meta.controlId}\n class={props.iconOnly ? undefined : \"k2b-select-chip\"}\n disabled={props.disabled}\n iconOnly={props.iconOnly}\n label={triggerLabel()}\n size={props.iconOnly ? props.size : undefined}\n title={props.iconOnly ? triggerLabel() : undefined}\n {...fieldControlAria(meta, props)}\n >\n <Show\n when={selected()?.image}\n fallback={<Show when={selected()?.icon ?? props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>}\n >\n {(image) => <img src={image()} alt=\"\" />}\n </Show>\n <Show when={!props.iconOnly}>\n <span data-placeholder={selected() ? undefined : \"true\"}>{selected()?.label ?? props.placeholder ?? \"\"}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown.Root>\n <Show when={props.name}>{(name) => <input type=\"hidden\" name={name()} value={value()} />}</Show>\n </Field>\n );\n}\n\nexport default SelectChip;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createSignal","Show","splitProps","createFieldMeta","Field","fieldControlAria","useUiMessages","commitFieldValue","resolveMaybeAccessor","MarkdownEditor","TextInput","props","messages","local","rest","meta","id","value","error","passwordVisible","setPasswordVisible","multiline","Boolean","markdown","icon","variant","activeIcon","input","next","onValueChange","commit","onValueCommit","clear","onClear","_$createComponent","when","fallback","class","label","description","required","disabled","children","_$ssr","_tmpl$4","_$ssrAttribute","_$escape","undefined","monospace","_$ssrStyle","String","lines","prefix","_tmpl$","_$ssrElement","_$mergeProps","controlId","type","password","minlength","minLength","maxlength","maxLength","rows","suffix","clearable","readOnly","_tmpl$2","clearLabel","_tmpl$3","hidePassword","showPassword","name","onSubmit","placeholder","spellcheck","abbreviations","completions","aria-label","aria-describedby"],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n const activeIcon = () => local.activeIcon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? messages().hidePassword : messages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":";;;;;;;;;;;AAAA,SAASA,YAAY,EAAYC,IAAI,EAAEC,UAAU,QAAQ,UAAU;AACnE,SAASC,eAAe,EAAEC,KAAK,EAAEC,gBAAgB,QAAQ,mBAAmB;AAC5E,SAASC,aAAa,QAAQ,kBAAkB;AAGhD,SAASC,gBAAgB,EAAEC,oBAAoB,QAAQ,kBAAkB;AACzE,SAASC,cAAc,QAAQ,2BAA2B;AA4B1D,OAAO,SAASC,SAASA,CAACC,KAAqB,EAAe;EAC5D,MAAMC,QAAQ,GAAGN,aAAa,CAAC,CAAC;EAChC,MAAM,CAACO,KAAK,EAAEC,IAAI,CAAC,GAAGZ,UAAU,CAACS,KAAK,EAAE,CACtC,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,OAAO,EACP,MAAM,EACN,IAAI,EACJ,OAAO,EACP,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,UAAU,EACV,eAAe,EACf,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,EACT,eAAe,CAChB,CAAC;EACF,MAAMI,IAAI,GAAGZ,eAAe,CAACU,KAAK,CAACG,EAAE,CAAC;EACtC,MAAMC,KAAK,GAAGA,CAAA,KAAMT,oBAAoB,CAACK,KAAK,CAACI,KAAK,CAAC,IAAI,EAAE;EAC3D,MAAMC,KAAK,GAAGA,CAAA,KAAMV,oBAAoB,CAACK,KAAK,CAACK,KAAK,CAAC;EACrD,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGpB,YAAY,CAAC,KAAK,CAAC;EACjE,MAAMqB,SAAS,GAAGA,CAAA,KAAMC,OAAO,CAACT,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACU,QAAQ,CAAC;EAClE,MAAMC,IAAI,GAAGA,CAAA,KAAMX,KAAK,CAACW,IAAI,KAAKX,KAAK,CAACY,OAAO,KAAK,IAAI,GAAG,gBAAgB,GAAGZ,KAAK,CAACU,QAAQ,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;EACtI,MAAMG,UAAU,GAAGA,CAAA,KAAMb,KAAK,CAACa,UAAU,KAAKb,KAAK,CAACY,OAAO,KAAK,IAAI,GAAG,gBAAgB,GAAG,cAAc,CAAC;EACzG,MAAME,KAAK,GAAIC,IAAY,IAAKf,KAAK,CAACgB,aAAa,GAAGD,IAAI,CAAC;EAC3D,MAAME,MAAM,GAAIF,IAAY,IAAKf,KAAK,CAACkB,aAAa,GAAGH,IAAI,CAAC;EAC5D,MAAMI,KAAK,GAAGA,CAAA,KAAM;IAClB,IAAInB,KAAK,CAACoB,OAAO,EAAE;MACjBpB,KAAK,CAACoB,OAAO,CAAC,CAAC;MACf;IACF;IACA1B,gBAAgB,CAACM,KAAK,EAAE,EAAE,CAAC;EAC7B,CAAC;EAED,OAAAqB,iBAAA,CACGjC,IAAI;IAAA,IACHkC,IAAIA,CAAA;MAAA,OAAEtB,KAAK,CAACU,QAAQ;IAAA;IAAA,IACpBa,QAAQA,CAAA;MAAA,OAAAF,iBAAA,CACL9B,KAAK;QAAA,aAAAiC,CAAA;UAAA,OACGxB,KAAK,CAACwB,KAAK;QAAA;QAAA,IAClBC,KAAKA,CAAA;UAAA,OAAEzB,KAAK,CAACyB,KAAK;QAAA;QAAA,IAClBC,WAAWA,CAAA;UAAA,OAAE1B,KAAK,CAAC0B,WAAW;QAAA;QAAA,IAC9BrB,KAAKA,CAAA;UAAA,OAAEA,KAAK,CAAC,CAAC;QAAA;QACdH,IAAI,EAAEA,IAAI;QAAA,IACVyB,QAAQA,CAAA;UAAA,OAAE3B,KAAK,CAAC2B,QAAQ;QAAA;QAAA,IACxBC,QAAQA,CAAA;UAAA,OAAE3B,IAAI,CAAC2B,QAAQ;QAAA;QAAA,IAAAC,SAAA;UAAA,OAAAC,KAAA,CAAAC,OAAA,EAAAC,cAAA,iBAIP3B,KAAK,CAAC,CAAC,GAAG,MAAM,GAAA4B,QAAA,CAAGC,SAAS,kBAAAF,cAAA,YACjChC,KAAK,CAACY,OAAO,KAAK,IAAI,GAAG,MAAM,GAAAqB,QAAA,CAAGC,SAAS,kBAAAF,cAAA,mBACpCxB,SAAS,CAAC,CAAC,GAAG,MAAM,GAAAyB,QAAA,CAAGC,SAAS,kBAAAF,cAAA,mBAChChC,KAAK,CAACmC,SAAS,GAAG,MAAM,GAAAF,QAAA,CAAGC,SAAS,iBAAAE,UAAA,CAC7C5B,SAAS,CAAC,CAAC,GAAG;YAAE,oBAAoB,EAAE6B,MAAM,CAACrC,KAAK,CAACsC,KAAK,IAAI,CAAC;UAAE,CAAC,GAAGJ,SAAS,GAAAF,cAAA,UAAAC,QAAA,CAGvEtB,IAAI,CAAC,CAAC,iBAAAqB,cAAA,UAAAC,QAAA,CACNpB,UAAU,CAAC,CAAC,iBAAAoB,QAAA,CAAAZ,iBAAA,CAEvBjC,IAAI;YAAA,IAACkC,IAAIA,CAAA;cAAA,OAAEtB,KAAK,CAACuC,MAAM;YAAA;YAAA,IAAAV,SAAA;cAAA,OAAAC,KAAA,CAAAU,MAAA,EAAAP,QAAA,CACgBjC,KAAK,CAACuC,MAAM;YAAA;UAAA,KAAAN,QAAA,CAAAZ,iBAAA,CAEnDjC,IAAI;YAAA,IACHkC,IAAIA,CAAA;cAAA,OAAEd,SAAS,CAAC,CAAC;YAAA;YAAA,IACjBe,QAAQA,CAAA;cAAA,OAAAkB,YAAA,UAAAC,YAAA,CAEAzC,IAAI;gBAAA,IACRE,EAAEA,CAAA;kBAAA,OAAED,IAAI,CAACyC,SAAS;gBAAA;gBAAA,SACZ,WAAW;gBAAA,IACjBC,IAAIA,CAAA;kBAAA,OAAE5C,KAAK,CAAC6C,QAAQ,IAAI,CAACvC,eAAe,CAAC,CAAC,GAAG,UAAU,GAAIN,KAAK,CAAC4C,IAAI,IAAI,MAAO;gBAAA;gBAAA,IAChFxC,KAAKA,CAAA;kBAAA,OAAEA,KAAK,CAAC,CAAC;gBAAA;gBAAA,IACd0C,SAASA,CAAA;kBAAA,OAAE9C,KAAK,CAAC+C,SAAS;gBAAA;gBAAA,IAC1BC,SAASA,CAAA;kBAAA,OAAEhD,KAAK,CAACiD,SAAS;gBAAA;gBAAA,IAC1BtB,QAAQA,CAAA;kBAAA,OAAE3B,KAAK,CAAC2B,QAAQ;gBAAA;cAAA,SACpBnC,gBAAgB,CAACU,IAAI,EAAEF,KAAK,CAAC,GAAAkC,SAAA;YAAA;YAAA,IAAAL,SAAA;cAAA,OAAAY,YAAA,aAAAC,YAAA,CAS9BzC,IAAI;gBAAA,IACTE,EAAEA,CAAA;kBAAA,OAAED,IAAI,CAACyC,SAAS;gBAAA;gBAAA,SACZ,oCAAoC;gBAAA,IAC1CvC,KAAKA,CAAA;kBAAA,OAAEA,KAAK,CAAC,CAAC;gBAAA;gBAAA,IACd8C,IAAIA,CAAA;kBAAA,OAAElD,KAAK,CAACsC,KAAK,IAAI,CAAC;gBAAA;gBAAA,IACtBX,QAAQA,CAAA;kBAAA,OAAE3B,KAAK,CAAC2B,QAAQ;gBAAA;gBAAA,IACxBmB,SAASA,CAAA;kBAAA,OAAE9C,KAAK,CAAC+C,SAAS;gBAAA;gBAAA,IAC1BC,SAASA,CAAA;kBAAA,OAAEhD,KAAK,CAACiD,SAAS;gBAAA;cAAA,SACtBzD,gBAAgB,CAACU,IAAI,EAAEF,KAAK,CAAC,GAAAkC,SAAA;YAAA;UAAA,KAAAD,QAAA,CAAAZ,iBAAA,CAapCjC,IAAI;YAAA,IAACkC,IAAIA,CAAA;cAAA,OAAEtB,KAAK,CAACmD,MAAM;YAAA;YAAA,IAAAtB,SAAA;cAAA,OAAAC,KAAA,CAAAU,MAAA,EAAAP,QAAA,CACgBjC,KAAK,CAACmD,MAAM;YAAA;UAAA,KAAAlB,QAAA,CAAAZ,iBAAA,CAEnDjC,IAAI;YAAA,IAACkC,IAAIA,CAAA;cAAA,OAAEtB,KAAK,CAACoD,SAAS,IAAIhD,KAAK,CAAC,CAAC,IAAI,CAACI,SAAS,CAAC,CAAC,IAAI,CAACR,KAAK,CAAC6C,QAAQ,IAAI,CAAC5C,IAAI,CAAC2B,QAAQ,IAAI,CAAC3B,IAAI,CAACoD,QAAQ;YAAA;YAAA,IAAAxB,SAAA;cAAA,OAAAC,KAAA,CAAAwB,OAAA,EAAAtB,cAAA,eAAAC,QAAA,CAI7FjC,KAAK,CAACuD,UAAU,IAAIxD,QAAQ,CAAC,CAAC,CAACoB,KAAK;YAAA;UAAA,KAAAc,QAAA,CAAAZ,iBAAA,CAMnDjC,IAAI;YAAA,IAACkC,IAAIA,CAAA;cAAA,OAAEtB,KAAK,CAAC6C,QAAQ,IAAI,CAACrC,SAAS,CAAC,CAAC;YAAA;YAAA,IAAAqB,SAAA;cAAA,OAAAC,KAAA,CAAA0B,OAAA,EAAAxB,cAAA,eAI1B1B,eAAe,CAAC,CAAC,GAAA2B,QAAA,CAAGlC,QAAQ,CAAC,CAAC,CAAC0D,YAAY,UAAAxB,QAAA,CAAGlC,QAAQ,CAAC,CAAC,CAAC2D,YAAY,kBAAA1B,cAAA,iBAAAC,QAAA,CACnE3B,eAAe,CAAC,CAAC,iBAAA0B,cAAA,aACrB/B,IAAI,CAAC2B,QAAQ,SAAAI,cAAA,UAGb1B,eAAe,CAAC,CAAC,GAAG,eAAe,GAAG,WAAW;YAAA;UAAA;QAAA;MAAA;IAAA;IAAA,IAAAuB,SAAA;MAAA,OAAAR,iBAAA,CAOpEzB,cAAc;QAAA,aAAA4B,CAAA;UAAA,OACNxB,KAAK,CAACwB,KAAK;QAAA;QAAA,IAClBC,KAAKA,CAAA;UAAA,OAAEzB,KAAK,CAACyB,KAAK;QAAA;QAAA,IAClBC,WAAWA,CAAA;UAAA,OAAE1B,KAAK,CAAC0B,WAAW;QAAA;QAAA,IAC9BrB,KAAKA,CAAA;UAAA,OAAEA,KAAK,CAAC,CAAC;QAAA;QAAA,IACdF,EAAEA,CAAA;UAAA,OAAED,IAAI,CAACyC,SAAS;QAAA;QAAA,IAClBgB,IAAIA,CAAA;UAAA,OAAE1D,IAAI,CAAC0D,IAAI;QAAA;QAAA,IACfvD,KAAKA,CAAA;UAAA,OAAEA,KAAK,CAAC,CAAC;QAAA;QACdY,aAAa,EAAEF,KAAK;QAAA,IACpBI,aAAaA,CAAA;UAAA,OAAElB,KAAK,CAACkB,aAAa;QAAA;QAAA,IAClC0C,QAAQA,CAAA;UAAA,OAAE5D,KAAK,CAAC4D,QAAQ;QAAA;QAAA,IACxBC,WAAWA,CAAA;UAAA,OAAE5D,IAAI,CAAC4D,WAAW;QAAA;QAAA,IAC7BjC,QAAQA,CAAA;UAAA,OAAE3B,IAAI,CAAC2B,QAAQ;QAAA;QAAA,IACvBD,QAAQA,CAAA;UAAA,OAAE3B,KAAK,CAAC2B,QAAQ;QAAA;QAAA,IACxBW,KAAKA,CAAA;UAAA,OAAEtC,KAAK,CAACsC,KAAK;QAAA;QAAA,IAClBW,SAASA,CAAA;UAAA,OAAEjD,KAAK,CAACiD,SAAS;QAAA;QAAA,IAC1Ba,UAAUA,CAAA;UAAA,OAAE7D,IAAI,CAAC6D,UAAU,KAAK5B,SAAS,GAAGA,SAAS,GAAGjC,IAAI,CAAC6D,UAAU,KAAK,IAAI,IAAI7D,IAAI,CAAC6D,UAAU,KAAK,MAAM;QAAA;QAAA,IAC9GC,aAAaA,CAAA;UAAA,OAAE/D,KAAK,CAAC+D,aAAa;QAAA;QAAA,IAClCC,WAAWA,CAAA;UAAA,OAAEhE,KAAK,CAACgE,WAAW;QAAA;QAAA,kBAAAC,CAAA;UAAA,OAClBjE,KAAK,CAAC,YAAY,CAAC;QAAA;QAAA,wBAAAkE,CAAA;UAAA,OACblE,KAAK,CAAC,kBAAkB,CAAC;QAAA;MAAA;IAAA;EAAA;AAInD;AAEA,eAAeH,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["createSignal","Show","splitProps","createFieldMeta","Field","fieldControlAria","useUiMessages","commitFieldValue","resolveMaybeAccessor","MarkdownEditor","TextInput","props","messages","local","rest","meta","id","value","error","passwordVisible","setPasswordVisible","multiline","Boolean","markdown","icon","variant","activeIcon","input","next","onValueChange","commit","onValueCommit","clear","onClear","_$createComponent","when","fallback","class","label","description","required","disabled","children","_$ssr","_tmpl$4","_$ssrAttribute","_$escape","undefined","monospace","_$ssrStyle","String","lines","prefix","_tmpl$","_$ssrElement","_$mergeProps","controlId","type","password","minlength","minLength","maxlength","maxLength","rows","suffix","clearable","readOnly","_tmpl$2","clearLabel","_tmpl$3","hidePassword","showPassword","name","onSubmit","placeholder","spellcheck","abbreviations","completions","aria-label","aria-describedby"],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n const activeIcon = () => local.activeIcon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? messages().hidePassword : messages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
@@ -11,9 +11,10 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-markdown-editor__tool\"", " t
11
11
  _tmpl$4 = "<div class=\"k2b-autocomplete__status\" role=\"status\"><i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>Loading suggestions</div>",
12
12
  _tmpl$5 = ["<div popover=\"manual\" class=\"k2b-autocomplete__options\" role=\"presentation\"", "><div", " class=\"k2b-autocomplete__listbox\" role=\"listbox\"", ">", "", "", "</div></div>"],
13
13
  _tmpl$6 = ["<div class=\"k2b-markdown-editor\" role=\"group\"", " style=\"", "\">", "<div class=\"k2b-markdown-editor__surface\">", "<div class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\"></div>", "</div>", "", "</div>"],
14
- _tmpl$7 = ["<div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\"><i class=\"ti ti-alert-circle\" aria-hidden=\"true\"></i><span>", "</span><button type=\"button\">", "</button></div>"],
15
- _tmpl$8 = ["<div", " class=\"k2b-autocomplete__option\" role=\"option\"", "><span>", "</span>", "</div>"],
16
- _tmpl$9 = ["<small>", "</small>"];
14
+ _tmpl$7 = ["<button type=\"button\" class=\"k2b-markdown-editor__tool\"", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button>"],
15
+ _tmpl$8 = ["<div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\"><i class=\"ti ti-alert-circle\" aria-hidden=\"true\"></i><span>", "</span><button type=\"button\">", "</button></div>"],
16
+ _tmpl$9 = ["<div", " class=\"k2b-autocomplete__option\" role=\"option\"", "><span>", "</span>", "</div>"],
17
+ _tmpl$0 = ["<small>", "</small>"];
17
18
  import { highlight } from "@k2b/stdlib";
18
19
  import { createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, untrack } from "solid-js";
19
20
  import { createFieldMeta, Field, fieldControlAria } from "../../internal/field";
@@ -387,14 +388,14 @@ export function MarkdownEditor(props) {
387
388
  event.preventDefault();
388
389
  }
389
390
  };
390
- const saveControls = () => [props.toolbarTrailing, _$createComponent(Show, {
391
+ const saveControls = () => _$createComponent(Show, {
391
392
  get when() {
392
393
  return props.onSave;
393
394
  },
394
395
  get children() {
395
- return _$ssr(_tmpl$, _$ssrAttribute("title", _$escape(messages().saveShortcut, true), false) + _$ssrAttribute("aria-label", _$escape(messages().save, true), false), _$ssrAttribute("disabled", props.disabled || props.saveDisabled || props.saving, true), _$ssrAttribute("class", props.saving ? "ti ti-loader-2 k2b-spin" : "ti ti-device-floppy", false));
396
+ return _$ssr(_tmpl$, _$ssrAttribute("title", _$escape(messages().saveShortcut, true), false) + _$ssrAttribute("aria-label", _$escape(messages().save, true), false), _$ssrAttribute("disabled", props.disabled || props.saveDisabled || props.saving, true), _$ssrAttribute("class", props.saving ? "ti ti-loader-2 k2b-spin" : props.saved ? "ti ti-check" : "ti ti-device-floppy", false));
396
397
  }
397
- })];
398
+ });
398
399
  return _$createComponent(Field, {
399
400
  get ["class"]() {
400
401
  return props.class;
@@ -419,7 +420,7 @@ export function MarkdownEditor(props) {
419
420
  return props.disabled;
420
421
  },
421
422
  get children() {
422
- return _$ssr(_tmpl$6, _$ssrAttribute("aria-labelledby", props.label ? _$escape(meta.labelId, true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", !props.label ? _$escape(props["aria-label"], true) : _$escape(undefined, true), false) + _$ssrAttribute("data-disabled", props.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-invalid", error() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-variant", props.variant === "paper" ? "paper" : _$escape(undefined, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-editor-lines:", _$escape(String(props.lines ?? 6), true)), _$escape(_$createComponent(Show, {
423
+ return _$ssr(_tmpl$6, _$ssrAttribute("aria-labelledby", props.label ? _$escape(meta.labelId, true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", !props.label ? _$escape(props["aria-label"], true) : _$escape(undefined, true), false) + _$ssrAttribute("data-disabled", props.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-invalid", error() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-variant", props.variant === "default" ? _$escape(undefined, true) : _$escape(props.variant, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-editor-lines:", _$escape(String(props.lines ?? 6), true)), _$escape(_$createComponent(Show, {
423
424
  get when() {
424
425
  return !props.noToolbar;
425
426
  },
@@ -431,7 +432,14 @@ export function MarkdownEditor(props) {
431
432
  return props.disabled;
432
433
  },
433
434
  get trailing() {
434
- return saveControls();
435
+ return [props.toolbarTrailing, saveControls(), _$createComponent(Show, {
436
+ get when() {
437
+ return props.onClose;
438
+ },
439
+ get children() {
440
+ return _$ssr(_tmpl$7, _$ssrAttribute("title", _$escape(messages().close, true), false) + _$ssrAttribute("aria-label", _$escape(messages().close, true), false) + _$ssrAttribute("tabindex", props.disabled ? 0 : -1, false));
441
+ }
442
+ })];
435
443
  }
436
444
  });
437
445
  }
@@ -494,17 +502,17 @@ export function MarkdownEditor(props) {
494
502
  get when() {
495
503
  return completionError();
496
504
  },
497
- children: message => _$ssr(_tmpl$7, _$escape(message()), _$escape(messages().retry))
505
+ children: message => _$ssr(_tmpl$8, _$escape(message()), _$escape(messages().retry))
498
506
  })), _$escape(_$createComponent(For, {
499
507
  get each() {
500
508
  return state()?.suggestions ?? [];
501
509
  },
502
510
  children: (suggestion, index) => // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.
503
- _$ssr(_tmpl$8, _$ssrAttribute("id", _$escape(optionId(index()), true), false), _$ssrAttribute("aria-selected", _$escape(index(), true) === _$escape(state()?.selectedIndex, true), false), _$escape(displayLabel(suggestion, state().context.completion)), _$escape(_$createComponent(Show, {
511
+ _$ssr(_tmpl$9, _$ssrAttribute("id", _$escape(optionId(index()), true), false), _$ssrAttribute("aria-selected", _$escape(index(), true) === _$escape(state()?.selectedIndex, true), false), _$escape(displayLabel(suggestion, state().context.completion)), _$escape(_$createComponent(Show, {
504
512
  get when() {
505
513
  return suggestion.hint;
506
514
  },
507
- children: hint => _$ssr(_tmpl$9, _$escape(hint()))
515
+ children: hint => _$ssr(_tmpl$0, _$escape(hint()))
508
516
  })))
509
517
  })));
510
518
  }