@smwb/ui-solid 0.13.0 → 0.14.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 (411) hide show
  1. package/README.md +564 -0
  2. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  4. package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
  5. package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
  6. package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
  7. package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
  8. package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
  9. package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
  10. package/dist/assets/styles/less/components/list/list.entry.css +1 -1
  11. package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
  12. package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
  13. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  14. package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
  15. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
  16. package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
  17. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
  18. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  19. package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
  20. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  21. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  22. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  23. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  24. package/dist/assets/styles/less/tokens.entry.css +1 -1
  25. package/dist/components/dataDisplay/chat/chat.d.ts +42 -0
  26. package/dist/components/dataDisplay/chat/chat.js +116 -57
  27. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  28. package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
  29. package/dist/components/dataDisplay/chat/chatComposer.js +21 -19
  30. package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
  31. package/dist/components/dataDisplay/chat/index.d.ts +1 -1
  32. package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
  33. package/dist/components/dataDisplay/chat/utils.js.map +1 -1
  34. package/dist/components/dataDisplay/dagView/dagView.js +238 -223
  35. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
  36. package/dist/components/dataDisplay/diffStat/diffStat.d.ts +55 -0
  37. package/dist/components/dataDisplay/diffStat/diffStat.js +70 -0
  38. package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  39. package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
  40. package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
  41. package/dist/components/dataDisplay/kbd/kbd.d.ts +41 -0
  42. package/dist/components/dataDisplay/kbd/kbd.js +47 -0
  43. package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
  44. package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
  45. package/dist/components/dataDisplay/kbd/kbdKeys.js +70 -0
  46. package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  47. package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
  48. package/dist/components/dataDisplay/list/listItem.js +57 -20
  49. package/dist/components/dataDisplay/list/listItem.js.map +1 -1
  50. package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
  51. package/dist/components/dataDisplay/qrCode/qrCode.d.ts +30 -0
  52. package/dist/components/dataDisplay/qrCode/qrCode.js +88 -0
  53. package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  54. package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
  55. package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  56. package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  57. package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
  58. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
  59. package/dist/components/dataDisplay/statusDot/statusDot.js +31 -0
  60. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  61. package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
  62. package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +75 -0
  63. package/dist/components/dataDisplay/swimlanes/swimlanes.js +361 -0
  64. package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  65. package/dist/components/dataDisplay/treeView/treeView.d.ts +20 -0
  66. package/dist/components/dataDisplay/treeView/treeView.js +161 -95
  67. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  68. package/dist/components/feedBack/modal/modal.d.ts +9 -0
  69. package/dist/components/feedBack/modal/modal.js +68 -54
  70. package/dist/components/feedBack/modal/modal.js.map +1 -1
  71. package/dist/components/inputs/button/button.d.ts +12 -0
  72. package/dist/components/inputs/button/button.js +44 -37
  73. package/dist/components/inputs/button/button.js.map +1 -1
  74. package/dist/components/inputs/composer/composer.d.ts +148 -0
  75. package/dist/components/inputs/composer/composer.js +276 -0
  76. package/dist/components/inputs/composer/composer.js.map +1 -0
  77. package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
  78. package/dist/components/inputs/composer/composerFiles.js +18 -0
  79. package/dist/components/inputs/composer/composerFiles.js.map +1 -0
  80. package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
  81. package/dist/components/inputs/composer/composerKeys.js +7 -0
  82. package/dist/components/inputs/composer/composerKeys.js.map +1 -0
  83. package/dist/components/inputs/composer/index.d.ts +3 -0
  84. package/dist/components/layout/sheet/sheet.d.ts +12 -0
  85. package/dist/components/layout/sheet/sheet.js +100 -86
  86. package/dist/components/layout/sheet/sheet.js.map +1 -1
  87. package/dist/components/layout/tabGroups/index.d.ts +4 -0
  88. package/dist/components/layout/tabGroups/tabGroups.d.ts +102 -0
  89. package/dist/components/layout/tabGroups/tabGroups.js +895 -0
  90. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
  91. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
  92. package/dist/components/layout/tabGroups/tabGroupsFocus.js +192 -0
  93. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  94. package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
  95. package/dist/components/layout/tabGroups/tabGroupsLayout.js +480 -0
  96. package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  97. package/dist/components/navigation/appBar/appBar.d.ts +22 -0
  98. package/dist/components/navigation/appBar/appBar.js +60 -22
  99. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  100. package/dist/components/navigation/commandPalette/commandPalette.d.ts +126 -0
  101. package/dist/components/navigation/commandPalette/commandPalette.js +457 -0
  102. package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
  103. package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
  104. package/dist/components/navigation/commandPalette/commandPaletteFilter.js +15 -0
  105. package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  106. package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
  107. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  108. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  109. package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
  110. package/dist/components/navigation/commandPalette/index.d.ts +6 -0
  111. package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
  112. package/dist/components/navigation/sidebar/sidebar.js +12 -10
  113. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  114. package/dist/components/navigation/tabs/index.d.ts +3 -1
  115. package/dist/components/navigation/tabs/tab/tab.d.ts +89 -2
  116. package/dist/components/navigation/tabs/tab/tab.js +164 -44
  117. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  118. package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +20 -0
  119. package/dist/components/navigation/tabs/tabPanel/tabPanel.js +34 -0
  120. package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  121. package/dist/components/navigation/tabs/tabs.d.ts +73 -3
  122. package/dist/components/navigation/tabs/tabs.js +387 -160
  123. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  124. package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
  125. package/dist/components/navigation/tabs/tabs.utils.js +11 -0
  126. package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
  127. package/dist/components/navigation/tabs/tabsContext.d.ts +31 -1
  128. package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
  129. package/dist/headless/components/dataDisplay/chat/chat.js +116 -57
  130. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  131. package/dist/headless/components/dataDisplay/chat/chatComposer.js +21 -19
  132. package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
  133. package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
  134. package/dist/headless/components/dataDisplay/dagView/dagView.js +238 -223
  135. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
  136. package/dist/headless/components/dataDisplay/diffStat/diffStat.js +68 -0
  137. package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  138. package/dist/headless/components/dataDisplay/kbd/kbd.js +45 -0
  139. package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
  140. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +70 -0
  141. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  142. package/dist/headless/components/dataDisplay/list/listItem.js +57 -20
  143. package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
  144. package/dist/headless/components/dataDisplay/qrCode/qrCode.js +86 -0
  145. package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  146. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  147. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  148. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +29 -0
  149. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  150. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +359 -0
  151. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  152. package/dist/headless/components/dataDisplay/treeView/treeView.js +161 -95
  153. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  154. package/dist/headless/components/feedBack/modal/modal.js +68 -54
  155. package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
  156. package/dist/headless/components/inputs/button/button.js +42 -35
  157. package/dist/headless/components/inputs/button/button.js.map +1 -1
  158. package/dist/headless/components/inputs/composer/composer.js +274 -0
  159. package/dist/headless/components/inputs/composer/composer.js.map +1 -0
  160. package/dist/headless/components/inputs/composer/composerFiles.js +18 -0
  161. package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
  162. package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
  163. package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
  164. package/dist/headless/components/layout/sheet/sheet.js +100 -86
  165. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  166. package/dist/headless/components/layout/tabGroups/tabGroups.js +893 -0
  167. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
  168. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +192 -0
  169. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  170. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +480 -0
  171. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  172. package/dist/headless/components/navigation/appBar/appBar.js +64 -26
  173. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  174. package/dist/headless/components/navigation/commandPalette/commandPalette.js +455 -0
  175. package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
  176. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +15 -0
  177. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  178. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  179. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  180. package/dist/headless/components/navigation/sidebar/sidebar.js +28 -26
  181. package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
  182. package/dist/headless/components/navigation/tabs/tab/tab.js +164 -44
  183. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  184. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +32 -0
  185. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  186. package/dist/headless/components/navigation/tabs/tabs.js +387 -160
  187. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  188. package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
  189. package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
  190. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
  191. package/dist/headless/index.js +405 -367
  192. package/dist/headless/index.js.map +1 -1
  193. package/dist/headless/primitives/createFocusTrap.js +17 -17
  194. package/dist/headless/primitives/createFocusTrap.js.map +1 -1
  195. package/dist/headless/primitives/createKeyboardShortcut.js +16 -0
  196. package/dist/headless/primitives/createKeyboardShortcut.js.map +1 -0
  197. package/dist/headless/primitives/restoreFocus.js +10 -0
  198. package/dist/headless/primitives/restoreFocus.js.map +1 -0
  199. package/dist/headless/source/components/dataDisplay/chat/chat.jsx +38 -4
  200. package/dist/headless/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  201. package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
  202. package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
  203. package/dist/headless/source/components/dataDisplay/chat/index.js.map +1 -1
  204. package/dist/headless/source/components/dataDisplay/chat/utils.js.map +2 -2
  205. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +30 -21
  206. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  207. package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx +76 -0
  208. package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
  209. package/dist/headless/source/components/dataDisplay/diffStat/index.js +19 -0
  210. package/dist/headless/source/components/dataDisplay/diffStat/index.js.map +7 -0
  211. package/dist/headless/source/components/dataDisplay/kbd/index.js +9 -0
  212. package/dist/headless/source/components/dataDisplay/kbd/index.js.map +7 -0
  213. package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx +48 -0
  214. package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
  215. package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
  216. package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
  217. package/dist/headless/source/components/dataDisplay/list/listItem.jsx +37 -7
  218. package/dist/headless/source/components/dataDisplay/list/listItem.jsx.map +1 -1
  219. package/dist/headless/source/components/dataDisplay/qrCode/index.js +6 -0
  220. package/dist/headless/source/components/dataDisplay/qrCode/index.js.map +7 -0
  221. package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx +94 -0
  222. package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
  223. package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
  224. package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
  225. package/dist/headless/source/components/dataDisplay/statusDot/index.js +6 -0
  226. package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +7 -0
  227. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +28 -0
  228. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
  229. package/dist/headless/source/components/dataDisplay/swimlanes/index.js +15 -0
  230. package/dist/headless/source/components/dataDisplay/swimlanes/index.js.map +7 -0
  231. package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx +450 -0
  232. package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
  233. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +118 -37
  234. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  235. package/dist/headless/source/components/feedBack/modal/modal.jsx +34 -4
  236. package/dist/headless/source/components/feedBack/modal/modal.jsx.map +1 -1
  237. package/dist/headless/source/components/inputs/button/button.jsx +6 -2
  238. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  239. package/dist/headless/source/components/inputs/composer/composer.jsx +319 -0
  240. package/dist/headless/source/components/inputs/composer/composer.jsx.map +1 -0
  241. package/dist/headless/source/components/inputs/composer/composerFiles.js +27 -0
  242. package/dist/headless/source/components/inputs/composer/composerFiles.js.map +7 -0
  243. package/dist/headless/source/components/inputs/composer/composerKeys.js +11 -0
  244. package/dist/headless/source/components/inputs/composer/composerKeys.js.map +7 -0
  245. package/dist/headless/source/components/inputs/composer/index.js +5 -0
  246. package/dist/headless/source/components/inputs/composer/index.js.map +7 -0
  247. package/dist/headless/source/components/layout/sheet/sheet.jsx +33 -11
  248. package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
  249. package/dist/headless/source/components/layout/tabGroups/index.js +8 -0
  250. package/dist/headless/source/components/layout/tabGroups/index.js.map +7 -0
  251. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +1117 -0
  252. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
  253. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
  254. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
  255. package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
  256. package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
  257. package/dist/headless/source/components/navigation/appBar/appBar.jsx +27 -3
  258. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  259. package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx +506 -0
  260. package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
  261. package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  262. package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
  263. package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
  264. package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
  265. package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
  266. package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
  267. package/dist/headless/source/components/navigation/commandPalette/index.js +11 -0
  268. package/dist/headless/source/components/navigation/commandPalette/index.js.map +7 -0
  269. package/dist/headless/source/components/navigation/sidebar/sidebar.jsx +5 -2
  270. package/dist/headless/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  271. package/dist/headless/source/components/navigation/tabs/index.js +2 -0
  272. package/dist/headless/source/components/navigation/tabs/index.js.map +2 -2
  273. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +135 -8
  274. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  275. package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx +28 -0
  276. package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
  277. package/dist/headless/source/components/navigation/tabs/tabs.jsx +361 -13
  278. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  279. package/dist/headless/source/components/navigation/tabs/tabs.utils.js +18 -0
  280. package/dist/headless/source/components/navigation/tabs/tabs.utils.js.map +7 -0
  281. package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
  282. package/dist/headless/source/index.js +41 -1
  283. package/dist/headless/source/index.js.map +2 -2
  284. package/dist/headless/source/primitives/createFocusTrap.js +8 -3
  285. package/dist/headless/source/primitives/createFocusTrap.js.map +2 -2
  286. package/dist/headless/source/primitives/createKeyboardShortcut.js +23 -0
  287. package/dist/headless/source/primitives/createKeyboardShortcut.js.map +7 -0
  288. package/dist/headless/source/primitives/restoreFocus.js +14 -0
  289. package/dist/headless/source/primitives/restoreFocus.js.map +7 -0
  290. package/dist/headless/source/utils/keyboardShortcut.js +74 -0
  291. package/dist/headless/source/utils/keyboardShortcut.js.map +7 -0
  292. package/dist/headless/source/utils/linkAttrs.js +16 -0
  293. package/dist/headless/source/utils/linkAttrs.js.map +7 -0
  294. package/dist/headless/utils/keyboardShortcut.js +48 -0
  295. package/dist/headless/utils/keyboardShortcut.js.map +1 -0
  296. package/dist/headless/utils/linkAttrs.js +13 -0
  297. package/dist/headless/utils/linkAttrs.js.map +1 -0
  298. package/dist/index.d.ts +24 -3
  299. package/dist/index.js +405 -367
  300. package/dist/index.js.map +1 -1
  301. package/dist/primitives/createFocusTrap.d.ts +5 -0
  302. package/dist/primitives/createFocusTrap.js +17 -17
  303. package/dist/primitives/createFocusTrap.js.map +1 -1
  304. package/dist/primitives/createKeyboardShortcut.d.ts +23 -0
  305. package/dist/primitives/createKeyboardShortcut.js +16 -0
  306. package/dist/primitives/createKeyboardShortcut.js.map +1 -0
  307. package/dist/primitives/restoreFocus.d.ts +8 -0
  308. package/dist/primitives/restoreFocus.js +10 -0
  309. package/dist/primitives/restoreFocus.js.map +1 -0
  310. package/dist/source/components/dataDisplay/chat/chat.jsx +38 -4
  311. package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  312. package/dist/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
  313. package/dist/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
  314. package/dist/source/components/dataDisplay/chat/index.js.map +1 -1
  315. package/dist/source/components/dataDisplay/chat/utils.js.map +2 -2
  316. package/dist/source/components/dataDisplay/dagView/dagView.jsx +30 -21
  317. package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  318. package/dist/source/components/dataDisplay/diffStat/diffStat.jsx +78 -0
  319. package/dist/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
  320. package/dist/source/components/dataDisplay/diffStat/index.js +19 -0
  321. package/dist/source/components/dataDisplay/diffStat/index.js.map +7 -0
  322. package/dist/source/components/dataDisplay/kbd/index.js +9 -0
  323. package/dist/source/components/dataDisplay/kbd/index.js.map +7 -0
  324. package/dist/source/components/dataDisplay/kbd/kbd.jsx +50 -0
  325. package/dist/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
  326. package/dist/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
  327. package/dist/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
  328. package/dist/source/components/dataDisplay/list/listItem.jsx +37 -7
  329. package/dist/source/components/dataDisplay/list/listItem.jsx.map +1 -1
  330. package/dist/source/components/dataDisplay/qrCode/index.js +6 -0
  331. package/dist/source/components/dataDisplay/qrCode/index.js.map +7 -0
  332. package/dist/source/components/dataDisplay/qrCode/qrCode.jsx +96 -0
  333. package/dist/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
  334. package/dist/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
  335. package/dist/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
  336. package/dist/source/components/dataDisplay/statusDot/index.js +6 -0
  337. package/dist/source/components/dataDisplay/statusDot/index.js.map +7 -0
  338. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +30 -0
  339. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
  340. package/dist/source/components/dataDisplay/swimlanes/index.js +15 -0
  341. package/dist/source/components/dataDisplay/swimlanes/index.js.map +7 -0
  342. package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx +452 -0
  343. package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
  344. package/dist/source/components/dataDisplay/treeView/treeView.jsx +118 -37
  345. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  346. package/dist/source/components/feedBack/modal/modal.jsx +34 -4
  347. package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
  348. package/dist/source/components/inputs/button/button.jsx +6 -2
  349. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  350. package/dist/source/components/inputs/composer/composer.jsx +321 -0
  351. package/dist/source/components/inputs/composer/composer.jsx.map +1 -0
  352. package/dist/source/components/inputs/composer/composerFiles.js +27 -0
  353. package/dist/source/components/inputs/composer/composerFiles.js.map +7 -0
  354. package/dist/source/components/inputs/composer/composerKeys.js +11 -0
  355. package/dist/source/components/inputs/composer/composerKeys.js.map +7 -0
  356. package/dist/source/components/inputs/composer/index.js +5 -0
  357. package/dist/source/components/inputs/composer/index.js.map +7 -0
  358. package/dist/source/components/layout/sheet/sheet.jsx +33 -11
  359. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  360. package/dist/source/components/layout/tabGroups/index.js +8 -0
  361. package/dist/source/components/layout/tabGroups/index.js.map +7 -0
  362. package/dist/source/components/layout/tabGroups/tabGroups.jsx +1119 -0
  363. package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
  364. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
  365. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
  366. package/dist/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
  367. package/dist/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
  368. package/dist/source/components/navigation/appBar/appBar.jsx +27 -3
  369. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  370. package/dist/source/components/navigation/commandPalette/commandPalette.jsx +508 -0
  371. package/dist/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
  372. package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  373. package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
  374. package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
  375. package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
  376. package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
  377. package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
  378. package/dist/source/components/navigation/commandPalette/index.js +11 -0
  379. package/dist/source/components/navigation/commandPalette/index.js.map +7 -0
  380. package/dist/source/components/navigation/sidebar/sidebar.jsx +5 -2
  381. package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  382. package/dist/source/components/navigation/tabs/index.js +2 -0
  383. package/dist/source/components/navigation/tabs/index.js.map +2 -2
  384. package/dist/source/components/navigation/tabs/tab/tab.jsx +135 -8
  385. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  386. package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx +30 -0
  387. package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
  388. package/dist/source/components/navigation/tabs/tabs.jsx +361 -13
  389. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  390. package/dist/source/components/navigation/tabs/tabs.utils.js +18 -0
  391. package/dist/source/components/navigation/tabs/tabs.utils.js.map +7 -0
  392. package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
  393. package/dist/source/index.js +41 -1
  394. package/dist/source/index.js.map +2 -2
  395. package/dist/source/primitives/createFocusTrap.js +8 -3
  396. package/dist/source/primitives/createFocusTrap.js.map +2 -2
  397. package/dist/source/primitives/createKeyboardShortcut.js +23 -0
  398. package/dist/source/primitives/createKeyboardShortcut.js.map +7 -0
  399. package/dist/source/primitives/restoreFocus.js +14 -0
  400. package/dist/source/primitives/restoreFocus.js.map +7 -0
  401. package/dist/source/utils/keyboardShortcut.js +74 -0
  402. package/dist/source/utils/keyboardShortcut.js.map +7 -0
  403. package/dist/source/utils/linkAttrs.js +16 -0
  404. package/dist/source/utils/linkAttrs.js.map +7 -0
  405. package/dist/utils/keyboardShortcut.d.ts +12 -0
  406. package/dist/utils/keyboardShortcut.js +48 -0
  407. package/dist/utils/keyboardShortcut.js.map +1 -0
  408. package/dist/utils/linkAttrs.d.ts +13 -0
  409. package/dist/utils/linkAttrs.js +13 -0
  410. package/dist/utils/linkAttrs.js.map +1 -0
  411. package/package.json +66 -3
@@ -0,0 +1,457 @@
1
+ import { createComponent as f, mergeProps as pe, memo as we, insert as d, use as oe, effect as K, setAttribute as m, className as ie, template as x, delegateEvents as xe } from "solid-js/web";
2
+ import '../../../assets/styles/less/components/commandPalette/commandPalette.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
3
+ /* empty css */
4
+ import { mergeProps as $e, createMemo as j, createSignal as R, createEffect as Q, untrack as se, on as ke, onCleanup as Ce, children as Ae, onMount as Ie, Show as T, For as J } from "solid-js";
5
+ import Z from "clsx";
6
+ import { createControllableState as de } from "../../../primitives/createControllableState.js";
7
+ import { createId as Te } from "../../../primitives/createId.js";
8
+ import { commandPaletteFilter as Se } from "./commandPaletteFilter.js";
9
+ import { firstOption as Ee, moveOption as De, keepInView as Oe } from "./commandPaletteNavigation.js";
10
+ import { Modal as Le } from "../../feedBack/modal/modal.js";
11
+ import { Icon as me } from "../../base/icon/icon.js";
12
+ import { Kbd as Pe } from "../../dataDisplay/kbd/kbd.js";
13
+ import { Skeleton as ce } from "../../feedBack/skeleton/skeleton.js";
14
+ var Ke = /* @__PURE__ */ x("<ul class=smwb-command-palette__listbox role=listbox data-testid=command-palette-listbox>"), Re = /* @__PURE__ */ x("<div class=smwb-command-palette__loading aria-hidden=true data-testid=command-palette-loading>"), Qe = /* @__PURE__ */ x("<div data-testid=command-palette-error>"), qe = /* @__PURE__ */ x("<div class=smwb-command-palette__message data-testid=command-palette-empty>"), Fe = /* @__PURE__ */ x("<div class=smwb-command-palette__footer data-testid=command-palette-footer>"), Me = /* @__PURE__ */ x("<div class=smwb-command-palette__panel><div class=smwb-command-palette__search><span class=smwb-command-palette__search-icon aria-hidden=true></span><input class=smwb-command-palette__input type=text role=combobox aria-autocomplete=list autocomplete=off spellcheck=false autocapitalize=off enterkeyhint=go data-testid=command-palette-input></div><div class=smwb-command-palette__results tabindex=-1 data-testid=command-palette-results></div><div class=smwb-command-palette__status role=status data-testid=command-palette-status>"), Ne = /* @__PURE__ */ x("<li class=smwb-command-palette__group role=group><div class=smwb-command-palette__group-label></div><ul class=smwb-command-palette__group-options role=presentation>"), ze = /* @__PURE__ */ x("<span class=smwb-command-palette__item-icon aria-hidden=true>"), Ge = /* @__PURE__ */ x("<span class=smwb-command-palette__item-subtitle>"), He = /* @__PURE__ */ x("<li role=option data-testid=command-palette-option><span class=smwb-command-palette__item-text><span class=smwb-command-palette__item-label>"), Ue = /* @__PURE__ */ x("<div class=smwb-command-palette__loading-row>");
15
+ const ue = 10, Ve = 500, Ye = ["60%", "40%", "60%"], je = (t) => t === 1 ? "1 result" : `${t} results`, Be = (t) => typeof t == "object" && t !== null && t.name === "AbortError", Xe = (t) => {
16
+ const n = [];
17
+ return t.item.subtitle !== void 0 && n.push(`${t.id}-subtitle`), t.item.shortcut !== void 0 && n.push(`${t.id}-shortcut`), n.length > 0 ? n.join(" ") : void 0;
18
+ }, We = (t) => {
19
+ if (t !== void 0)
20
+ return typeof t == "string" ? f(me, {
21
+ name: t,
22
+ size: 20
23
+ }) : t;
24
+ };
25
+ function Je(t) {
26
+ let n;
27
+ const q = t.value;
28
+ Q((g) => {
29
+ const $ = t.value;
30
+ return n && $ !== g && (n.value = $), $;
31
+ }, q);
32
+ const G = Ae(() => t.footer), F = (g) => {
33
+ g.target !== n && g.preventDefault();
34
+ };
35
+ return Ie(() => n?.focus({
36
+ preventScroll: !0
37
+ })), (() => {
38
+ var g = Me(), $ = g.firstChild, S = $.firstChild, h = S.nextSibling, p = $.nextSibling, H = p.nextSibling;
39
+ g.$$mousedown = F, d(S, f(me, {
40
+ name: "search",
41
+ size: 20
42
+ })), h.$$keydown = (r) => t.onKeyDown(r), h.$$input = (r) => t.onQueryInput(r), oe((r) => n = r, h), h.value = q;
43
+ var M = t.resultsRef;
44
+ return typeof M == "function" ? oe(M, p) : t.resultsRef = p, d(p, f(T, {
45
+ get when() {
46
+ return t.hasListbox;
47
+ },
48
+ get children() {
49
+ var r = Ke();
50
+ return d(r, f(J, {
51
+ get each() {
52
+ return t.groups;
53
+ },
54
+ children: (c) => (() => {
55
+ var b = Ne(), _ = b.firstChild, k = _.nextSibling;
56
+ return d(_, () => c.label), d(k, f(J, {
57
+ get each() {
58
+ return c.options;
59
+ },
60
+ children: (l) => (() => {
61
+ var s = He(), C = s.firstChild, y = C.firstChild;
62
+ return s.$$pointermove = (i) => t.onHover(i, l), s.$$click = () => t.onChoose(l), d(s, f(T, {
63
+ get when() {
64
+ return l.item.icon !== void 0;
65
+ },
66
+ get children() {
67
+ var i = ze();
68
+ return d(i, () => We(l.item.icon)), i;
69
+ }
70
+ }), C), d(y, () => l.item.label), d(C, f(T, {
71
+ get when() {
72
+ return l.item.subtitle !== void 0;
73
+ },
74
+ get children() {
75
+ var i = Ge();
76
+ return d(i, () => l.item.subtitle), K(() => m(i, "id", `${l.id}-subtitle`)), i;
77
+ }
78
+ }), null), d(s, f(T, {
79
+ get when() {
80
+ return l.item.shortcut !== void 0;
81
+ },
82
+ get children() {
83
+ return f(Pe, {
84
+ get keys() {
85
+ return l.item.shortcut ?? [];
86
+ },
87
+ get id() {
88
+ return `${l.id}-shortcut`;
89
+ },
90
+ class: "smwb-command-palette__item-shortcut"
91
+ });
92
+ }
93
+ }), null), K((i) => {
94
+ var E = Z("smwb-command-palette__item", {
95
+ "smwb-command-palette__item_active": t.activeKey === l.key,
96
+ "smwb-command-palette__item_disabled": l.item.disabled
97
+ }), D = l.id, O = t.activeKey === l.key ? !0 : void 0, U = l.item.disabled ? !0 : void 0, A = `${l.id}-label`, w = Xe(l), L = l.item.id, P = `${l.id}-label`;
98
+ return E !== i.e && ie(s, i.e = E), D !== i.t && m(s, "id", i.t = D), O !== i.a && m(s, "aria-selected", i.a = O), U !== i.o && m(s, "aria-disabled", i.o = U), A !== i.i && m(s, "aria-labelledby", i.i = A), w !== i.n && m(s, "aria-describedby", i.n = w), L !== i.s && m(s, "data-item-id", i.s = L), P !== i.h && m(y, "id", i.h = P), i;
99
+ }, {
100
+ e: void 0,
101
+ t: void 0,
102
+ a: void 0,
103
+ o: void 0,
104
+ i: void 0,
105
+ n: void 0,
106
+ s: void 0,
107
+ h: void 0
108
+ }), s;
109
+ })()
110
+ })), K((l) => {
111
+ var s = c.labelId, C = c.labelId;
112
+ return s !== l.e && m(b, "aria-labelledby", l.e = s), C !== l.t && m(_, "id", l.t = C), l;
113
+ }, {
114
+ e: void 0,
115
+ t: void 0
116
+ }), b;
117
+ })()
118
+ })), K((c) => {
119
+ var b = t.listboxId, _ = t.inputId, k = t.pending ? !0 : void 0;
120
+ return b !== c.e && m(r, "id", c.e = b), _ !== c.t && m(r, "aria-labelledby", c.t = _), k !== c.a && m(r, "aria-busy", c.a = k), c;
121
+ }, {
122
+ e: void 0,
123
+ t: void 0,
124
+ a: void 0
125
+ }), r;
126
+ }
127
+ }), null), d(p, f(T, {
128
+ get when() {
129
+ return t.pending;
130
+ },
131
+ get children() {
132
+ var r = Re();
133
+ return d(r, f(J, {
134
+ each: Ye,
135
+ children: (c) => (() => {
136
+ var b = Ue();
137
+ return d(b, f(ce, {
138
+ variant: "circular",
139
+ width: 20,
140
+ height: 20,
141
+ component: "div"
142
+ }), null), d(b, f(ce, {
143
+ variant: "text",
144
+ width: c,
145
+ component: "div"
146
+ }), null), b;
147
+ })()
148
+ })), r;
149
+ }
150
+ }), null), d(p, f(T, {
151
+ get when() {
152
+ return t.showError;
153
+ },
154
+ get children() {
155
+ var r = Qe();
156
+ return d(r, () => t.errorText), K(() => ie(r, Z("smwb-command-palette__message", "smwb-command-palette__message_error"))), r;
157
+ }
158
+ }), null), d(p, f(T, {
159
+ get when() {
160
+ return t.showEmpty;
161
+ },
162
+ get children() {
163
+ var r = qe();
164
+ return d(r, () => t.noResultsText), r;
165
+ }
166
+ }), null), d(g, f(T, {
167
+ get when() {
168
+ return G();
169
+ },
170
+ get children() {
171
+ var r = Fe();
172
+ return d(r, G), r;
173
+ }
174
+ }), H), d(H, () => t.status), K((r) => {
175
+ var c = t.inputId, b = t.placeholder, _ = t.searchLabel, k = t.hasListbox, l = t.hasListbox ? t.listboxId : void 0, s = t.activeDescendant;
176
+ return c !== r.e && m(h, "id", r.e = c), b !== r.t && m(h, "placeholder", r.t = b), _ !== r.a && m(h, "aria-label", r.a = _), k !== r.o && m(h, "aria-expanded", r.o = k), l !== r.i && m(h, "aria-controls", r.i = l), s !== r.n && m(h, "aria-activedescendant", r.n = s), r;
177
+ }, {
178
+ e: void 0,
179
+ t: void 0,
180
+ a: void 0,
181
+ o: void 0,
182
+ i: void 0,
183
+ n: void 0
184
+ }), g;
185
+ })();
186
+ }
187
+ function ft(t) {
188
+ const n = $e({
189
+ defaultOpen: !1,
190
+ groups: [],
191
+ recentLabel: "Recent",
192
+ defaultQuery: "",
193
+ filter: Se,
194
+ debounce: 200,
195
+ minQueryLength: 1,
196
+ loading: !1,
197
+ closeOnSelect: !0,
198
+ placeholder: "Type a command or search…",
199
+ searchLabel: "Search commands",
200
+ noResultsText: "No results",
201
+ errorText: "Couldn't load results",
202
+ resultsAnnouncement: je,
203
+ "aria-label": "Command palette",
204
+ "data-testid": "command-palette"
205
+ }, t), q = Te(void 0, "smwb-command-palette"), G = `${q}-input`, F = `${q}-listbox`, [g, $] = de({
206
+ value: () => n.open,
207
+ defaultValue: n.defaultOpen,
208
+ onChange: (e) => n.onOpenChange?.(e)
209
+ }), [S, h] = de({
210
+ value: () => n.query,
211
+ defaultValue: n.defaultQuery,
212
+ onChange: (e) => n.onQueryChange?.(e)
213
+ }), p = j(() => S().trim()), [H, M] = R(null), [r, c] = R(!1), [b, _] = R(!1), [k, l] = R(!1), s = () => b() || k() || n.loading, C = j(() => {
214
+ const e = S(), a = p(), o = [];
215
+ let u = 0;
216
+ const N = (v, X, W, ae) => {
217
+ if (ae.length === 0) return;
218
+ const _e = ae.map((le) => {
219
+ const ye = {
220
+ id: `${F}-option-${u}`,
221
+ key: `${v}\0${le.id}`,
222
+ item: le,
223
+ group: W
224
+ };
225
+ return u++, ye;
226
+ });
227
+ o.push({
228
+ key: v,
229
+ label: X,
230
+ labelId: `${F}-group-${o.length}`,
231
+ options: _e
232
+ });
233
+ }, z = n.recent;
234
+ z && a === "" && N("recent", n.recentLabel, {
235
+ id: "recent",
236
+ label: n.recentLabel,
237
+ items: z
238
+ }, z);
239
+ const re = n.filter;
240
+ for (const v of n.groups) {
241
+ const X = re === !1 ? v.items : v.items.filter((W) => re(W, e));
242
+ N(v.id ?? v.label, v.label, v, X);
243
+ }
244
+ const B = H();
245
+ if (B !== null && B.query === a)
246
+ for (const v of B.groups)
247
+ N(v.id ?? v.label, v.label, v, v.items);
248
+ return o;
249
+ }), y = j(() => {
250
+ const e = [];
251
+ for (const a of C())
252
+ for (const o of a.options) e.push(o);
253
+ return e;
254
+ }), i = (e) => {
255
+ const a = y()[e];
256
+ return a !== void 0 && !a.item.disabled;
257
+ }, [E, D] = R(null);
258
+ Q(() => {
259
+ const e = y(), a = E();
260
+ if (a !== null && e.some((u) => u.key === a && !u.item.disabled)) return;
261
+ const o = e[Ee(e.length, i)];
262
+ D(o ? o.key : null);
263
+ });
264
+ const O = j(() => {
265
+ const e = E();
266
+ if (e === null) return -1;
267
+ const a = y();
268
+ for (let o = 0; o < a.length; o++) {
269
+ const u = a[o];
270
+ if (u && u.key === e) return u.item.disabled ? -1 : o;
271
+ }
272
+ return -1;
273
+ }), U = () => {
274
+ const e = O();
275
+ return e >= 0 ? y()[e]?.id : void 0;
276
+ };
277
+ let A, w, L, P = !1, V, I;
278
+ const ee = () => {
279
+ A !== void 0 && (clearTimeout(A), A = void 0), w !== void 0 && (w.abort(), w = void 0);
280
+ }, fe = (e, a) => {
281
+ const o = new AbortController();
282
+ w = o, l(!0), e(a, {
283
+ signal: o.signal
284
+ }).then((u) => {
285
+ w !== o || o.signal.aborted || (w = void 0, l(!1), M({
286
+ query: a,
287
+ groups: u
288
+ }));
289
+ }, (u) => {
290
+ w !== o || o.signal.aborted || (w = void 0, l(!1), Be(u) || c(!0));
291
+ });
292
+ };
293
+ Q(() => {
294
+ const e = g(), a = p();
295
+ se(() => {
296
+ if (ee(), _(!1), l(!1), M(null), c(!1), !e) return;
297
+ const o = n.source;
298
+ !o || a.length < n.minQueryLength || (_(!0), A = setTimeout(() => {
299
+ A = void 0, _(!1), fe(o, a);
300
+ }, Math.max(0, n.debounce)));
301
+ });
302
+ }), Q(ke(g, (e) => {
303
+ e && (n.query === void 0 && h(n.defaultQuery), D(null));
304
+ }, {
305
+ defer: !0
306
+ }));
307
+ const [be, te] = R("");
308
+ Q(() => {
309
+ const e = g(), a = p(), o = s(), u = y().length, N = r();
310
+ se(() => {
311
+ if (I !== void 0 && (clearTimeout(I), I = void 0), !e || a === "") {
312
+ te("");
313
+ return;
314
+ }
315
+ if (o) return;
316
+ const z = N ? n.errorText : u === 0 ? n.noResultsText : n.resultsAnnouncement(u);
317
+ I = setTimeout(() => {
318
+ I = void 0, te(z);
319
+ }, Ve);
320
+ });
321
+ }), Q(() => {
322
+ const e = O();
323
+ if (!P) return;
324
+ P = !1;
325
+ const a = y()[e];
326
+ if (!a || !L) return;
327
+ const o = L.querySelector(`[id="${a.id}"]`);
328
+ o && Oe(o, L);
329
+ }), Ce(() => {
330
+ ee(), I !== void 0 && (clearTimeout(I), I = void 0);
331
+ });
332
+ const ne = (e, a) => {
333
+ e.disabled || (n.closeOnSelect && $(!1), e.onSelect?.(), n.onSelect?.(e, a));
334
+ }, Y = (e, a) => {
335
+ e.preventDefault();
336
+ const o = y(), u = o[De(o.length, i, O(), a)];
337
+ !u || u.key === E() || (D(u.key), P = !0);
338
+ }, ve = (e) => {
339
+ if (e.isComposing || e.keyCode === 229) {
340
+ e.key === "Escape" && e.preventDefault();
341
+ return;
342
+ }
343
+ if (!(e.ctrlKey || e.metaKey || e.altKey || e.shiftKey))
344
+ switch (e.key) {
345
+ case "ArrowDown":
346
+ Y(e, 1);
347
+ break;
348
+ case "ArrowUp":
349
+ Y(e, -1);
350
+ break;
351
+ case "PageDown":
352
+ Y(e, ue);
353
+ break;
354
+ case "PageUp":
355
+ Y(e, -ue);
356
+ break;
357
+ case "Enter": {
358
+ e.preventDefault();
359
+ const a = y()[O()];
360
+ a && ne(a.item, a.group);
361
+ break;
362
+ }
363
+ }
364
+ }, ge = (e) => {
365
+ const a = e.currentTarget.value;
366
+ h(a);
367
+ const o = S();
368
+ o !== a && (e.currentTarget.value = o);
369
+ }, he = (e, a) => {
370
+ a.item.disabled || V && V.x === e.clientX && V.y === e.clientY || (V = {
371
+ x: e.clientX,
372
+ y: e.clientY
373
+ }, D(a.key));
374
+ };
375
+ return f(Le, pe({
376
+ get open() {
377
+ return g();
378
+ },
379
+ onClose: () => $(!1),
380
+ size: "medium",
381
+ animation: "fade",
382
+ backdrop: "dark",
383
+ closeOnEsc: !0,
384
+ closeOnOutsideClick: !0,
385
+ get class() {
386
+ return Z("smwb-command-palette", n.class);
387
+ },
388
+ ref(e) {
389
+ var a = n.ref;
390
+ typeof a == "function" ? a(e) : n.ref = e;
391
+ }
392
+ }, () => {
393
+ const e = {
394
+ "data-testid": n["data-testid"]
395
+ };
396
+ return n["aria-labelledby"] !== void 0 ? e["aria-labelledby"] = n["aria-labelledby"] : e["aria-label"] = n["aria-label"], n["aria-describedby"] !== void 0 && (e["aria-describedby"] = n["aria-describedby"]), e;
397
+ }, {
398
+ get children() {
399
+ return f(Je, {
400
+ inputId: G,
401
+ listboxId: F,
402
+ get value() {
403
+ return S();
404
+ },
405
+ get placeholder() {
406
+ return n.placeholder;
407
+ },
408
+ get searchLabel() {
409
+ return n.searchLabel;
410
+ },
411
+ get groups() {
412
+ return C();
413
+ },
414
+ get activeKey() {
415
+ return E();
416
+ },
417
+ get activeDescendant() {
418
+ return U();
419
+ },
420
+ get hasListbox() {
421
+ return y().length > 0;
422
+ },
423
+ get pending() {
424
+ return s();
425
+ },
426
+ get showEmpty() {
427
+ return we(() => !s() && !r())() && y().length === 0;
428
+ },
429
+ get showError() {
430
+ return r();
431
+ },
432
+ get noResultsText() {
433
+ return n.noResultsText;
434
+ },
435
+ get errorText() {
436
+ return n.errorText;
437
+ },
438
+ get status() {
439
+ return be();
440
+ },
441
+ get footer() {
442
+ return n.footer;
443
+ },
444
+ resultsRef: (e) => L = e,
445
+ onQueryInput: ge,
446
+ onKeyDown: ve,
447
+ onChoose: (e) => ne(e.item, e.group),
448
+ onHover: he
449
+ });
450
+ }
451
+ }));
452
+ }
453
+ xe(["mousedown", "input", "keydown", "click", "pointermove"]);
454
+ export {
455
+ ft as CommandPalette
456
+ };
457
+ //# sourceMappingURL=commandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandPalette.js","sources":["../../../../src/components/navigation/commandPalette/commandPalette.tsx"],"sourcesContent":["import {\n type JSX,\n For,\n Show,\n children,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n on,\n onCleanup,\n onMount,\n untrack,\n} from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Kbd } from \"../../dataDisplay/kbd\";\nimport { Modal } from \"../../feedBack/modal\";\nimport { Skeleton } from \"../../feedBack/skeleton\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createId } from \"../../../primitives/createId\";\nimport type { Ref } from \"../../../primitives/mergeRefs\";\nimport { commandPaletteFilter } from \"./commandPaletteFilter\";\nimport { firstOption, keepInView, moveOption } from \"./commandPaletteNavigation\";\nimport type {\n CommandPaletteFilter,\n CommandPaletteGroup,\n CommandPaletteItem,\n CommandPaletteSource,\n} from \"./commandPaletteTypes\";\n\ntype QueryInputEvent = Event & { currentTarget: HTMLInputElement };\n\n/** How far PageDown and PageUp move, as in the select field's listbox. */\nconst PAGE_STEP = 10;\n/** Quiet time after the results settle before the count is announced. */\nconst ANNOUNCE_DELAY = 500;\n/** Widths of the skeleton rows' text bars, cycling over the three rows. */\nconst LOADING_BAR_WIDTHS = [\"60%\", \"40%\", \"60%\"];\n\n/** One option as drawn: its id, the key that keeps it active, and what choosing it runs. */\ninterface PaletteOption {\n /** The option's id, `${listboxId}-option-${index}` in the order the options are drawn. */\n id: string;\n /** The group's key and the item's id, so the option stays active while the results change. */\n key: string;\n item: CommandPaletteItem;\n /** The group the option is handed to `onSelect` with. */\n group: CommandPaletteGroup;\n}\n\n/** One group as drawn: its heading and its options. */\ninterface PaletteGroup {\n key: string;\n label: string;\n /** The heading's id, which names the group through `aria-labelledby`. */\n labelId: string;\n options: PaletteOption[];\n}\n\n/** The dialog's own attributes, which Modal's props type has no `data-testid` for. */\ninterface DialogAttributes {\n \"data-testid\": string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\n/** An answer of `source`, kept with the query it belongs to. */\ninterface AsyncAnswer {\n query: string;\n groups: CommandPaletteGroup[];\n}\n\nconst defaultResultsAnnouncement = (count: number): string => (count === 1 ? \"1 result\" : `${count} results`);\n\n// A rejection of an aborted request is the abort itself, whatever the source threw it as.\nconst isAbortError = (error: unknown): boolean =>\n typeof error === \"object\" && error !== null && (error as { name?: unknown }).name === \"AbortError\";\n\n// The label alone names the option; the subtitle and the shortcut describe it, so a screen\n// reader reads \"New worktree, acme/web, Ctrl+Shift+N\" and not one long name.\nconst optionDescribedBy = (option: PaletteOption): string | undefined => {\n const ids: string[] = [];\n if (option.item.subtitle !== undefined) ids.push(`${option.id}-subtitle`);\n if (option.item.shortcut !== undefined) ids.push(`${option.id}-shortcut`);\n return ids.length > 0 ? ids.join(\" \") : undefined;\n};\n\nconst optionIcon = (icon: string | JSX.Element | undefined): JSX.Element | undefined => {\n if (icon === undefined) return undefined;\n return typeof icon === \"string\" ? <Icon name={icon} size={20} /> : icon;\n};\n\ninterface CommandPalettePanelProps {\n inputId: string;\n listboxId: string;\n /** The text to start with; later changes of `value` are written to the field by an effect. */\n value: string;\n placeholder: string;\n searchLabel: string;\n groups: PaletteGroup[];\n activeKey: string | null;\n activeDescendant: string | undefined;\n hasListbox: boolean;\n pending: boolean;\n showEmpty: boolean;\n showError: boolean;\n noResultsText: string;\n errorText: string;\n status: string;\n footer?: JSX.Element | undefined;\n resultsRef: (element: HTMLDivElement) => void;\n onQueryInput: (event: QueryInputEvent) => void;\n onKeyDown: (event: KeyboardEvent) => void;\n onChoose: (option: PaletteOption) => void;\n onHover: (event: PointerEvent, option: PaletteOption) => void;\n}\n\n/**\n * The palette's contents, in a component of their own. Modal draws its content inside the portal's\n * tracked scope, so reading reactive state while these elements are created would rebuild them —\n * and with them the field, losing what was typed and the focus. Everything here is either static or\n * read by an attribute effect, a `Show` or a `For` of its own.\n */\nfunction CommandPalettePanel(props: CommandPalettePanelProps): JSX.Element {\n let inputEl: HTMLInputElement | undefined;\n\n // Read once, in the body, which is untracked: the panel is created when the palette opens, so\n // this is the query to start with. A `value={expr}` binding is not enough on its own — it\n // compares the expression with its own last write and never with the field's text, so it skips a\n // value that takes over and wipes text a caller leaves. Later changes are written here instead.\n const atStart = props.value;\n createEffect((previous: string) => {\n const next = props.value;\n if (inputEl && next !== previous) inputEl.value = next;\n return next;\n }, atStart);\n\n // Read the slot once, here, where it is drawn: markup passed as a prop is created anew on\n // every read.\n const footer = children(() => props.footer);\n\n // A press on an option, a heading, the footer or the scrollbar must not take the focus from the\n // field: it is the palette's only tab stop, and the options are reached with the arrow keys.\n const onPanelMouseDown = (event: MouseEvent): void => {\n if (event.target === inputEl) return;\n event.preventDefault();\n };\n\n // The palette moves the focus itself rather than leaving it to Modal's trap, whose list of\n // focusable elements is empty in jsdom, where nothing has an offsetParent.\n onMount(() => inputEl?.focus({ preventScroll: true }));\n\n return (\n <div class=\"smwb-command-palette__panel\" onMouseDown={onPanelMouseDown}>\n <div class=\"smwb-command-palette__search\">\n <span class=\"smwb-command-palette__search-icon\" aria-hidden=\"true\">\n <Icon name=\"search\" size={20} />\n </span>\n <input\n ref={(element) => (inputEl = element)}\n class=\"smwb-command-palette__input\"\n id={props.inputId}\n type=\"text\"\n role=\"combobox\"\n value={atStart}\n placeholder={props.placeholder}\n aria-label={props.searchLabel}\n aria-autocomplete=\"list\"\n aria-expanded={props.hasListbox}\n aria-controls={props.hasListbox ? props.listboxId : undefined}\n aria-activedescendant={props.activeDescendant}\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocapitalize=\"off\"\n enterkeyhint=\"go\"\n data-testid=\"command-palette-input\"\n onInput={(event) => props.onQueryInput(event)}\n onKeyDown={(event) => props.onKeyDown(event)}\n />\n </div>\n <div\n class=\"smwb-command-palette__results\"\n tabindex={-1}\n data-testid=\"command-palette-results\"\n ref={props.resultsRef}\n >\n {/* The listbox exists only with at least one option: an empty one has no required\n children, and a collapsed combobox may point nowhere. */}\n <Show when={props.hasListbox}>\n <ul\n class=\"smwb-command-palette__listbox\"\n id={props.listboxId}\n role=\"listbox\"\n aria-labelledby={props.inputId}\n aria-busy={props.pending ? true : undefined}\n data-testid=\"command-palette-listbox\"\n >\n <For each={props.groups}>\n {(group) => (\n <li class=\"smwb-command-palette__group\" role=\"group\" aria-labelledby={group.labelId}>\n <div class=\"smwb-command-palette__group-label\" id={group.labelId}>\n {group.label}\n </div>\n <ul class=\"smwb-command-palette__group-options\" role=\"presentation\">\n <For each={group.options}>\n {(option) => (\n <li\n class={cn(\"smwb-command-palette__item\", {\n \"smwb-command-palette__item_active\": props.activeKey === option.key,\n \"smwb-command-palette__item_disabled\": option.item.disabled,\n })}\n id={option.id}\n role=\"option\"\n aria-selected={props.activeKey === option.key ? true : undefined}\n aria-disabled={option.item.disabled ? true : undefined}\n aria-labelledby={`${option.id}-label`}\n aria-describedby={optionDescribedBy(option)}\n data-item-id={option.item.id}\n data-testid=\"command-palette-option\"\n onClick={() => props.onChoose(option)}\n onPointerMove={(event) => props.onHover(event, option)}\n >\n <Show when={option.item.icon !== undefined}>\n <span class=\"smwb-command-palette__item-icon\" aria-hidden=\"true\">\n {optionIcon(option.item.icon)}\n </span>\n </Show>\n <span class=\"smwb-command-palette__item-text\">\n <span class=\"smwb-command-palette__item-label\" id={`${option.id}-label`}>\n {option.item.label}\n </span>\n <Show when={option.item.subtitle !== undefined}>\n <span class=\"smwb-command-palette__item-subtitle\" id={`${option.id}-subtitle`}>\n {option.item.subtitle}\n </span>\n </Show>\n </span>\n <Show when={option.item.shortcut !== undefined}>\n <Kbd\n keys={option.item.shortcut ?? []}\n id={`${option.id}-shortcut`}\n class=\"smwb-command-palette__item-shortcut\"\n />\n </Show>\n </li>\n )}\n </For>\n </ul>\n </li>\n )}\n </For>\n </ul>\n </Show>\n <Show when={props.pending}>\n <div class=\"smwb-command-palette__loading\" aria-hidden=\"true\" data-testid=\"command-palette-loading\">\n <For each={LOADING_BAR_WIDTHS}>\n {(width) => (\n <div class=\"smwb-command-palette__loading-row\">\n <Skeleton variant=\"circular\" width={20} height={20} component=\"div\" />\n <Skeleton variant=\"text\" width={width} component=\"div\" />\n </div>\n )}\n </For>\n </div>\n </Show>\n <Show when={props.showError}>\n <div\n class={cn(\"smwb-command-palette__message\", \"smwb-command-palette__message_error\")}\n data-testid=\"command-palette-error\"\n >\n {props.errorText}\n </div>\n </Show>\n <Show when={props.showEmpty}>\n <div class=\"smwb-command-palette__message\" data-testid=\"command-palette-empty\">\n {props.noResultsText}\n </div>\n </Show>\n </div>\n <Show when={footer()}>\n <div class=\"smwb-command-palette__footer\" data-testid=\"command-palette-footer\">\n {footer()}\n </div>\n </Show>\n {/* Inside the dialog: a live region outside an aria-modal one is ignored. */}\n <div class=\"smwb-command-palette__status\" role=\"status\" data-testid=\"command-palette-status\">\n {props.status}\n </div>\n </div>\n );\n}\n\nexport interface CommandPaletteProps {\n /**\n * Whether the palette is open. Any value but `undefined` makes it controlled: the palette then\n * shows this and only asks to change it through `onOpenChange`. While it is `undefined`, the\n * palette keeps its own state, starting from `defaultOpen`.\n */\n open?: boolean | undefined;\n /** Open state to start from while uncontrolled; `false` by default. */\n defaultOpen?: boolean | undefined;\n /**\n * Called for every request to open or close: Escape, a backdrop click, and choosing an item while\n * `closeOnSelect`. Called in both the controlled and the uncontrolled mode.\n */\n onOpenChange?: ((open: boolean) => void) | undefined;\n /** The groups to search in, filtered locally by `filter`; empty by default. */\n groups?: CommandPaletteGroup[] | undefined;\n /**\n * Recently used items, kept by the app (its local storage, its server, per user) and updated from\n * `onSelect`. Shown as the first group while the query is empty, unfiltered, and hidden while\n * the user searches.\n */\n recent?: CommandPaletteItem[] | undefined;\n /** Heading of the recent group; `\"Recent\"` by default. */\n recentLabel?: string | undefined;\n /**\n * The text in the search field. Any value but `undefined` makes it controlled: the field shows\n * this and only reports edits through `onQueryChange`.\n */\n query?: string | undefined;\n /** Text to start from while uncontrolled, and to reset to each time the palette opens; `\"\"`. */\n defaultQuery?: string | undefined;\n /** Called for every edit of the field, in both the controlled and the uncontrolled mode. */\n onQueryChange?: ((query: string) => void) | undefined;\n /**\n * Decides which of `groups` an edit keeps; {@link commandPaletteFilter} by default. `false` shows\n * `groups` as given, for an app that filters them itself or gets them filtered from a server.\n * Never applied to `recent` or to the results of `source`.\n */\n filter?: CommandPaletteFilter | false | undefined;\n /**\n * Loads results for the trimmed query, after `debounce` ms of quiet typing. Its `signal` is\n * aborted when a newer query, a close or an unmount makes the answer useless, and an answer that\n * arrives for an older query is dropped. Appended after `groups`.\n */\n source?: CommandPaletteSource | undefined;\n /** Milliseconds of quiet typing before `source` is called; `200` by default. */\n debounce?: number | undefined;\n /**\n * `source` is called only when the trimmed query has at least this many characters; `1` by\n * default. `0` also loads for the empty query.\n */\n minQueryLength?: number | undefined;\n /**\n * App-driven loading: shows the skeleton like a pending `source` does, for an app that loads\n * itself with a controlled `query`; `false` by default.\n */\n loading?: boolean | undefined;\n /**\n * Called for every chosen item, after the item's own `onSelect`. The place for the app to move the\n * item to the top of its `recent` list.\n */\n onSelect?: ((item: CommandPaletteItem, group: CommandPaletteGroup) => void) | undefined;\n /** Ask to close when an item is chosen; `true` by default. */\n closeOnSelect?: boolean | undefined;\n /** Placeholder of the field; `\"Type a command or search…\"` by default. It is not its name. */\n placeholder?: string | undefined;\n /** Accessible name of the field and, through `aria-labelledby`, of the listbox; `\"Search commands\"`. */\n searchLabel?: string | undefined;\n /** Shown and announced when nothing matches; `\"No results\"` by default. */\n noResultsText?: string | undefined;\n /** Shown and announced when `source` rejects; `\"Couldn't load results\"` by default. */\n errorText?: string | undefined;\n /**\n * Text of the polite announcement after a search settles; `\"1 result\"` or `\"N results\"` by\n * default. Not used for zero results, which announce `noResultsText`.\n */\n resultsAnnouncement?: ((count: number) => string) | undefined;\n /**\n * Slot under the results, for key hints built with `Kbd`. Drawn only when given:\n * `<>Press <Kbd keys={[\"Enter\"]} /> to run</>`.\n */\n footer?: JSX.Element | undefined;\n /** Added to the dialog element, after `smwb-command-palette`. */\n class?: string | undefined;\n /** Name of the dialog; `\"Command palette\"` by default. Not set when `aria-labelledby` is given. */\n \"aria-label\"?: string | undefined;\n /** Id of the element that names the dialog; replaces the default `aria-label`. */\n \"aria-labelledby\"?: string | undefined;\n /** Ids of the elements that describe the dialog. */\n \"aria-describedby\"?: string | undefined;\n /** Test id of the dialog element; `\"command-palette\"` unless given. */\n \"data-testid\"?: string | undefined;\n /** Ref of the dialog element. */\n ref?: Ref<HTMLDivElement> | undefined;\n}\n\n/**\n * Search and actions on ⌘K: a modal dialog with one search field and grouped results, for reaching\n * pages and running commands from the keyboard alone. Built on {@link Modal}, so it portals into the\n * body, traps the focus, closes on Escape only when it is the topmost overlay, and renders nothing on\n * the server.\n *\n * Results come from three places, drawn in this order: `recent` while the query is empty, `groups`\n * filtered locally by `filter`, and the answer of `source` for the current query. ArrowUp, ArrowDown,\n * PageUp and PageDown move the active option, Enter runs it, and Escape closes the palette. The first\n * enabled option is active as soon as the palette opens, so Enter runs the top hit.\n *\n * The palette does not bind Mod+K itself: the app does, with {@link createKeyboardShortcut}, so one\n * binding serves any opener and the same key list draws the hint.\n *\n * ```tsx\n * const [open, setOpen] = createSignal(false);\n * createKeyboardShortcut({ keys: [\"Mod\", \"K\"], onTrigger: () => setOpen(!open()) });\n * <Button onClick={() => setOpen(true)}>\n * Search <Kbd keys={[\"Mod\", \"K\"]} />\n * </Button>\n * <CommandPalette open={open()} onOpenChange={setOpen} groups={groups} recent={recent()} onSelect={pick} />\n * ```\n *\n * Filtering is linear and the results are not virtualized, so an app that expects thousands of items\n * should cap each group (50 is a good start) or search on a server through `source`.\n */\nexport function CommandPalette(props: CommandPaletteProps): JSX.Element {\n const local = mergeProps(\n {\n defaultOpen: false,\n groups: [] as CommandPaletteGroup[],\n recentLabel: \"Recent\",\n defaultQuery: \"\",\n filter: commandPaletteFilter as CommandPaletteFilter | false,\n debounce: 200,\n minQueryLength: 1,\n loading: false,\n closeOnSelect: true,\n placeholder: \"Type a command or search…\",\n searchLabel: \"Search commands\",\n noResultsText: \"No results\",\n errorText: \"Couldn't load results\",\n resultsAnnouncement: defaultResultsAnnouncement,\n \"aria-label\": \"Command palette\",\n \"data-testid\": \"command-palette\",\n },\n props\n );\n\n // One call, in the palette's body and not in the portaled panel, so the server and the client\n // consume ids in the same order.\n const paletteId = createId(undefined, \"smwb-command-palette\");\n const inputId = `${paletteId}-input`;\n const listboxId = `${paletteId}-listbox`;\n\n const [open, setOpen] = createControllableState<boolean>({\n value: () => local.open,\n defaultValue: local.defaultOpen,\n onChange: (next) => local.onOpenChange?.(next),\n });\n const [query, setQuery] = createControllableState<string>({\n value: () => local.query,\n defaultValue: local.defaultQuery,\n onChange: (next) => local.onQueryChange?.(next),\n });\n const trimmedQuery = createMemo(() => query().trim());\n\n const [asyncAnswer, setAsyncAnswer] = createSignal<AsyncAnswer | null>(null);\n const [failed, setFailed] = createSignal(false);\n const [debouncing, setDebouncing] = createSignal(false);\n const [inFlight, setInFlight] = createSignal(false);\n /** A debounce timer waiting, a request in flight, or the app's own `loading`. */\n const pending = (): boolean => debouncing() || inFlight() || local.loading;\n\n // The rows in draw order: the recent group while the query is empty, the static groups the\n // filter keeps, then the answer that belongs to the current query. A group left with no items\n // is dropped, heading included.\n const paletteGroups = createMemo<PaletteGroup[]>(() => {\n const text = query();\n const trimmed = trimmedQuery();\n const drawn: PaletteGroup[] = [];\n let optionIndex = 0;\n\n const push = (key: string, label: string, group: CommandPaletteGroup, items: CommandPaletteItem[]): void => {\n if (items.length === 0) return;\n const options = items.map((item) => {\n const option: PaletteOption = {\n id: `${listboxId}-option-${optionIndex}`,\n key: `${key}\\u0000${item.id}`,\n item,\n group,\n };\n optionIndex++;\n return option;\n });\n drawn.push({ key, label, labelId: `${listboxId}-group-${drawn.length}`, options });\n };\n\n const recent = local.recent;\n if (recent && trimmed === \"\") {\n push(\"recent\", local.recentLabel, { id: \"recent\", label: local.recentLabel, items: recent }, recent);\n }\n\n const filter = local.filter;\n for (const group of local.groups) {\n const items = filter === false ? group.items : group.items.filter((item) => filter(item, text));\n push(group.id ?? group.label, group.label, group, items);\n }\n\n const answer = asyncAnswer();\n if (answer !== null && answer.query === trimmed) {\n for (const group of answer.groups) {\n push(group.id ?? group.label, group.label, group, group.items);\n }\n }\n\n return drawn;\n });\n\n const flatOptions = createMemo<PaletteOption[]>(() => {\n const options: PaletteOption[] = [];\n for (const group of paletteGroups()) {\n for (const option of group.options) options.push(option);\n }\n return options;\n });\n\n const isOptionEnabled = (index: number): boolean => {\n const option = flatOptions()[index];\n return option !== undefined && !option.item.disabled;\n };\n\n // The active option is kept by key, not by index: results that still hold it keep it active, and\n // results that lost it move the active option to the first enabled one, or to none.\n const [activeKey, setActiveKey] = createSignal<string | null>(null);\n createEffect(() => {\n const options = flatOptions();\n const current = activeKey();\n if (current !== null && options.some((option) => option.key === current && !option.item.disabled)) return;\n const next = options[firstOption(options.length, isOptionEnabled)];\n setActiveKey(next ? next.key : null);\n });\n\n const activeIndex = createMemo<number>(() => {\n const key = activeKey();\n if (key === null) return -1;\n const options = flatOptions();\n for (let index = 0; index < options.length; index++) {\n const option = options[index];\n if (option && option.key === key) return option.item.disabled ? -1 : index;\n }\n return -1;\n });\n const activeDescendant = (): string | undefined => {\n const index = activeIndex();\n return index >= 0 ? flatOptions()[index]?.id : undefined;\n };\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n let controller: AbortController | undefined;\n let resultsEl: HTMLDivElement | undefined;\n let scrollAfterMove = false;\n let lastPointer: { x: number; y: number } | undefined;\n let announceTimer: ReturnType<typeof setTimeout> | undefined;\n\n const cancelRequest = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n if (controller !== undefined) {\n controller.abort();\n controller = undefined;\n }\n };\n\n const request = (source: CommandPaletteSource, trimmed: string): void => {\n const current = new AbortController();\n controller = current;\n setInFlight(true);\n void source(trimmed, { signal: current.signal }).then(\n (groups) => {\n // An answer is applied only while its request is still the current one, so a source that\n // ignores `signal` cannot show results for another query.\n if (controller !== current || current.signal.aborted) return;\n controller = undefined;\n setInFlight(false);\n setAsyncAnswer({ query: trimmed, groups });\n },\n (error: unknown) => {\n if (controller !== current || current.signal.aborted) return;\n controller = undefined;\n setInFlight(false);\n if (!isAbortError(error)) setFailed(true);\n }\n );\n };\n\n // A new query, or a close, leaves the previous answer behind: it belongs to another query.\n createEffect(() => {\n const isOpen = open();\n const trimmed = trimmedQuery();\n // Untracked: a caller's inline `source` is a new function on every read, and neither it nor a\n // changed `debounce` may start a request of its own.\n untrack(() => {\n cancelRequest();\n setDebouncing(false);\n setInFlight(false);\n setAsyncAnswer(null);\n setFailed(false);\n if (!isOpen) return;\n const source = local.source;\n if (!source || trimmed.length < local.minQueryLength) return;\n setDebouncing(true);\n timer = setTimeout(() => {\n timer = undefined;\n setDebouncing(false);\n request(source, trimmed);\n }, Math.max(0, local.debounce));\n });\n });\n\n // Each open starts again from `defaultQuery`, while uncontrolled, and on the first enabled\n // option, so Enter runs the top hit. The focus trap and the focus return are Modal's: it captures\n // the opener itself when the dialog opens and returns to it only if nothing else took the focus.\n createEffect(\n on(\n open,\n (isOpen) => {\n if (isOpen) {\n if (local.query === undefined) setQuery(local.defaultQuery);\n setActiveKey(null);\n }\n },\n { defer: true }\n )\n );\n\n // The results are announced once they settle, and a newer edit restarts the wait, so fast typing\n // makes no chatter. Loading itself is not announced: `aria-busy` covers it and the count follows.\n const [status, setStatus] = createSignal(\"\");\n createEffect(() => {\n const isOpen = open();\n const trimmed = trimmedQuery();\n const isPending = pending();\n const count = flatOptions().length;\n const didFail = failed();\n untrack(() => {\n if (announceTimer !== undefined) {\n clearTimeout(announceTimer);\n announceTimer = undefined;\n }\n if (!isOpen || trimmed === \"\") {\n setStatus(\"\");\n return;\n }\n if (isPending) return;\n const text = didFail ? local.errorText : count === 0 ? local.noResultsText : local.resultsAnnouncement(count);\n announceTimer = setTimeout(() => {\n announceTimer = undefined;\n setStatus(text);\n }, ANNOUNCE_DELAY);\n });\n });\n\n // Only a key scrolls the option into view: a pointer resting on a row while the results move\n // under it must not.\n createEffect(() => {\n const index = activeIndex();\n if (!scrollAfterMove) return;\n scrollAfterMove = false;\n const option = flatOptions()[index];\n if (!option || !resultsEl) return;\n const element = resultsEl.querySelector<HTMLElement>(`[id=\"${option.id}\"]`);\n if (element) keepInView(element, resultsEl);\n });\n\n onCleanup(() => {\n cancelRequest();\n if (announceTimer !== undefined) {\n clearTimeout(announceTimer);\n announceTimer = undefined;\n }\n });\n\n const choose = (item: CommandPaletteItem, group: CommandPaletteGroup): void => {\n if (item.disabled) return;\n // Closing first lets focus that a handler moves win over the trap handing it back to the opener.\n if (local.closeOnSelect) setOpen(false);\n item.onSelect?.();\n local.onSelect?.(item, group);\n };\n\n const moveActive = (event: KeyboardEvent, steps: number): void => {\n event.preventDefault();\n const options = flatOptions();\n const next = options[moveOption(options.length, isOptionEnabled, activeIndex(), steps)];\n if (!next || next.key === activeKey()) return;\n setActiveKey(next.key);\n scrollAfterMove = true;\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n // While an IME composition is open the keys belong to it. Escape then cancels the composition,\n // so it is marked handled and Modal leaves the palette open.\n if (event.isComposing || event.keyCode === 229) {\n if (event.key === \"Escape\") event.preventDefault();\n return;\n }\n // Modified keys stay with the field and the browser: Shift+ArrowDown selects text, Ctrl+Enter\n // belongs to the app. Nothing here stops propagation — Modal's Escape listener and the app's\n // Mod+K hook are on the document, and a stopped key never reaches them.\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n switch (event.key) {\n case \"ArrowDown\":\n moveActive(event, 1);\n break;\n case \"ArrowUp\":\n moveActive(event, -1);\n break;\n case \"PageDown\":\n moveActive(event, PAGE_STEP);\n break;\n case \"PageUp\":\n moveActive(event, -PAGE_STEP);\n break;\n case \"Enter\": {\n // Always prevented: the field must not submit a form around it.\n event.preventDefault();\n const option = flatOptions()[activeIndex()];\n if (option) choose(option.item, option.group);\n break;\n }\n }\n };\n\n const onQueryInput = (event: QueryInputEvent): void => {\n const text = event.currentTarget.value;\n setQuery(text);\n // A controlled caller that ignores the edit gets its own text back, as React DOM does.\n const shown = query();\n if (shown !== text) event.currentTarget.value = shown;\n };\n\n const onHover = (event: PointerEvent, option: PaletteOption): void => {\n if (option.item.disabled) return;\n // Only a real move counts: results scrolling under a resting pointer would otherwise keep\n // taking the active option.\n if (lastPointer && lastPointer.x === event.clientX && lastPointer.y === event.clientY) return;\n lastPointer = { x: event.clientX, y: event.clientY };\n setActiveKey(option.key);\n };\n\n // Modal's props type has no `data-testid`, and its optional aria props take no explicit\n // `undefined`, so the dialog's own attributes go in as one precisely-typed spread.\n const dialogAttributes = (): DialogAttributes => {\n const attributes: DialogAttributes = { \"data-testid\": local[\"data-testid\"] };\n if (local[\"aria-labelledby\"] !== undefined) attributes[\"aria-labelledby\"] = local[\"aria-labelledby\"];\n else attributes[\"aria-label\"] = local[\"aria-label\"];\n if (local[\"aria-describedby\"] !== undefined) attributes[\"aria-describedby\"] = local[\"aria-describedby\"];\n return attributes;\n };\n\n return (\n <Modal\n open={open()}\n onClose={() => setOpen(false)}\n size=\"medium\"\n animation=\"fade\"\n backdrop=\"dark\"\n closeOnEsc\n closeOnOutsideClick\n class={cn(\"smwb-command-palette\", local.class)}\n ref={local.ref}\n {...dialogAttributes()}\n >\n <CommandPalettePanel\n inputId={inputId}\n listboxId={listboxId}\n value={query()}\n placeholder={local.placeholder}\n searchLabel={local.searchLabel}\n groups={paletteGroups()}\n activeKey={activeKey()}\n activeDescendant={activeDescendant()}\n hasListbox={flatOptions().length > 0}\n pending={pending()}\n showEmpty={!pending() && !failed() && flatOptions().length === 0}\n showError={failed()}\n noResultsText={local.noResultsText}\n errorText={local.errorText}\n status={status()}\n footer={local.footer}\n resultsRef={(element) => (resultsEl = element)}\n onQueryInput={onQueryInput}\n onKeyDown={onKeyDown}\n onChoose={(option) => choose(option.item, option.group)}\n onHover={onHover}\n />\n </Modal>\n );\n}\n\nexport default CommandPalette;\n"],"names":["PAGE_STEP","ANNOUNCE_DELAY","LOADING_BAR_WIDTHS","defaultResultsAnnouncement","count","isAbortError","error","name","optionDescribedBy","option","ids","item","subtitle","undefined","push","id","shortcut","length","join","optionIcon","icon","_$createComponent","Icon","size","CommandPalettePanel","props","inputEl","atStart","value","createEffect","previous","next","footer","children","onPanelMouseDown","event","target","preventDefault","onMount","focus","preventScroll","_el$","_tmpl$6","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$1","$$mousedown","_$insert","$$keydown","onKeyDown","$$input","onQueryInput","_$use","element","_ref$","resultsRef","Show","when","hasListbox","_el$6","_tmpl$","For","each","groups","group","_el$10","_tmpl$7","_el$11","_el$12","label","options","_el$13","_tmpl$0","_el$15","_el$16","$$pointermove","onHover","$$click","onChoose","_el$14","_tmpl$8","_el$17","_tmpl$9","_$effect","_$setAttribute","Kbd","keys","_p$","_v$10","cn","activeKey","key","disabled","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","e","_$className","t","a","o","i","n","s","h","_v$0","labelId","_v$1","_v$","listboxId","_v$2","inputId","_v$3","pending","_el$7","_tmpl$2","width","_el$18","_tmpl$1","Skeleton","variant","height","component","showError","_el$8","_tmpl$3","errorText","showEmpty","_el$9","_tmpl$4","noResultsText","_el$0","_tmpl$5","status","_v$4","_v$5","placeholder","_v$6","searchLabel","_v$7","_v$8","_v$9","activeDescendant","CommandPalette","local","mergeProps","defaultOpen","recentLabel","defaultQuery","filter","commandPaletteFilter","debounce","minQueryLength","loading","closeOnSelect","resultsAnnouncement","paletteId","createId","open","setOpen","createControllableState","defaultValue","onChange","onOpenChange","query","setQuery","onQueryChange","trimmedQuery","createMemo","trim","asyncAnswer","setAsyncAnswer","createSignal","failed","setFailed","debouncing","setDebouncing","inFlight","setInFlight","paletteGroups","text","trimmed","drawn","optionIndex","items","map","recent","answer","flatOptions","isOptionEnabled","index","setActiveKey","current","some","firstOption","activeIndex","timer","controller","resultsEl","scrollAfterMove","lastPointer","announceTimer","cancelRequest","clearTimeout","abort","request","source","AbortController","signal","then","aborted","isOpen","untrack","setTimeout","Math","max","on","defer","setStatus","isPending","didFail","querySelector","keepInView","onCleanup","choose","onSelect","moveActive","steps","moveOption","isComposing","keyCode","ctrlKey","metaKey","altKey","shiftKey","currentTarget","shown","x","clientX","y","clientY","Modal","_$mergeProps","onClose","animation","backdrop","closeOnEsc","closeOnOutsideClick","class","ref","r$","_ref$2","dialogAttributes","attributes","_$memo","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CommandPaletteFilter } from "./commandPaletteTypes";
2
+ /**
3
+ * Lower case, without combining marks: "Café" → "cafe", "Ёжик" → "ежик". A side effect of dropping the marks
4
+ * is that "й" reads as "и", so a query with "и" also finds words with "й".
5
+ */
6
+ export declare function normalizeSearchText(text: string): string;
7
+ /**
8
+ * The palette's default filter: every word of the query occurs in the label, the subtitle or a keyword,
9
+ * ignoring case and accents. An empty query matches everything. It never reorders items.
10
+ */
11
+ export declare const commandPaletteFilter: CommandPaletteFilter;
@@ -0,0 +1,15 @@
1
+ function r(e) {
2
+ return e.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
3
+ }
4
+ const s = (e, n) => {
5
+ const t = r(n).split(/\s+/).filter(Boolean);
6
+ if (t.length === 0)
7
+ return !0;
8
+ const o = r([e.label, e.subtitle ?? "", ...e.keywords ?? []].join(" "));
9
+ return t.every((l) => o.includes(l));
10
+ };
11
+ export {
12
+ s as commandPaletteFilter,
13
+ r as normalizeSearchText
14
+ };
15
+ //# sourceMappingURL=commandPaletteFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandPaletteFilter.js","sources":["../../../../src/components/navigation/commandPalette/commandPaletteFilter.ts"],"sourcesContent":["import type { CommandPaletteFilter } from \"./commandPaletteTypes\";\n\n/**\n * Lower case, without combining marks: \"Café\" → \"cafe\", \"Ёжик\" → \"ежик\". A side effect of dropping the marks\n * is that \"й\" reads as \"и\", so a query with \"и\" also finds words with \"й\".\n */\nexport function normalizeSearchText(text: string): string {\n return text.normalize(\"NFD\").replace(/[̀-ͯ]/g, \"\").toLowerCase();\n}\n\n/**\n * The palette's default filter: every word of the query occurs in the label, the subtitle or a keyword,\n * ignoring case and accents. An empty query matches everything. It never reorders items.\n */\nexport const commandPaletteFilter: CommandPaletteFilter = (item, query) => {\n const words = normalizeSearchText(query).split(/\\s+/).filter(Boolean);\n if (words.length === 0) {\n return true;\n }\n const text = normalizeSearchText([item.label, item.subtitle ?? \"\", ...(item.keywords ?? [])].join(\" \"));\n return words.every((word) => text.includes(word));\n};\n"],"names":["normalizeSearchText","text","commandPaletteFilter","item","query","words","word"],"mappings":"AAMO,SAASA,EAAoBC,GAAsB;AACxD,SAAOA,EAAK,UAAU,KAAK,EAAE,QAAQ,UAAU,EAAE,EAAE,YAAA;AACrD;AAMO,MAAMC,IAA6C,CAACC,GAAMC,MAAU;AACzE,QAAMC,IAAQL,EAAoBI,CAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO;AACpE,MAAIC,EAAM,WAAW;AACnB,WAAO;AAET,QAAMJ,IAAOD,EAAoB,CAACG,EAAK,OAAOA,EAAK,YAAY,IAAI,GAAIA,EAAK,YAAY,CAAA,CAAG,EAAE,KAAK,GAAG,CAAC;AACtG,SAAOE,EAAM,MAAM,CAACC,MAASL,EAAK,SAASK,CAAI,CAAC;AAClD;"}
@@ -0,0 +1,13 @@
1
+ export type IsOptionEnabled = (index: number) => boolean;
2
+ /** The first enabled option, or -1. */
3
+ export declare function firstOption(count: number, isEnabled: IsOptionEnabled): number;
4
+ /** The last enabled option, or -1. */
5
+ export declare function lastOption(count: number, isEnabled: IsOptionEnabled): number;
6
+ /**
7
+ * The enabled option `steps` options after `from` (before it for a negative
8
+ * count), stopping at the first or the last one. With no active option, a move
9
+ * down starts at the first option and a move up at the last.
10
+ */
11
+ export declare function moveOption(count: number, isEnabled: IsOptionEnabled, from: number, steps: number): number;
12
+ /** Scrolls each scrolling box from the element up to `root` so the element shows. */
13
+ export declare function keepInView(element: HTMLElement, root: HTMLElement | null): void;