@smwb/ui-solid 0.13.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -1 +1 @@
1
- {"version":3,"file":"tab.js","sources":["../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../../base/ripple\";\nimport { useTabsContext } from \"../tabsContext\";\nimport { mergeRefs, type Ref } from \"../../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../../primitives/callHandler\";\n\nexport interface TabProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: JSX.Element;\n isActive?: boolean;\n contentRef?: Ref<HTMLSpanElement>;\n icon?: JSX.Element;\n stacked?: boolean;\n tag?: string;\n /** With `tag=\"a\"`: where the link goes, so the tab stays a real link. */\n href?: string;\n disabled?: boolean;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nexport function Tab(props: ParentProps<TabProps>): JSX.Element {\n const ctx = useTabsContext();\n const [root, setRoot] = createSignal<HTMLButtonElement | HTMLAnchorElement>();\n // The tab's position in the tab list: it follows the tab when tabs around it\n // are added, removed or reordered.\n const index = ctx ? ctx.registerTab(root) : () => -1;\n const merged = mergeProps({ isActive: false, stacked: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"label\",\n \"isActive\",\n \"contentRef\",\n \"icon\",\n \"stacked\",\n \"tag\",\n \"disabled\",\n \"onClick\",\n \"ref\",\n // The tab sets this on its root too; its own handler calls the caller's first.\n \"onPointerDown\",\n ]);\n\n // Read the icon and the label once: markup passed as a prop is created anew on\n // every read, and during hydration the copy made for the <Show> test has no\n // server DOM node to adopt (\"Unable to find DOM nodes for hydration key\").\n const icon = children(() => local.icon);\n const label = children(() => local.label);\n\n let rippleActions: RippleActionsRef | undefined;\n\n const active = (): boolean => (ctx ? ctx.value() === index() : local.isActive);\n\n const onClick: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n // Inside Tabs too the caller's onClick runs first, then the tab list picks the tab.\n callHandler(local.onClick, event);\n ctx?.onChange(event, index());\n };\n\n const onPointerDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, PointerEvent> = (event) => {\n callHandler(local.onPointerDown, event);\n rippleActions?.onRipple(event);\n };\n\n const tag = (): string => local.tag ?? \"button\";\n\n return (\n <Dynamic\n component={tag()}\n {...rest}\n ref={mergeRefs(local.ref, setRoot)}\n class={cn(\"smwb-tab\", local.class, {\n \"smwb-tab--active\": active(),\n \"smwb-tab--stacked\": local.stacked,\n \"smwb-tab--disabled\": local.disabled,\n })}\n onClick={onClick}\n onPointerDown={onPointerDown}\n // The role, the selection and the roving tabindex belong to the tab list:\n // they win over the caller's. A tab that is not disabled keeps the\n // caller's aria-disabled.\n role=\"tab\"\n aria-selected={active()}\n aria-disabled={local.disabled || undefined}\n tabindex={active() ? 0 : -1}\n disabled={tag() === \"button\" ? local.disabled : undefined}\n >\n <span class=\"smwb-tab__content\" ref={mergeRefs(local.contentRef)}>\n <Show when={icon()}>\n <span class=\"smwb-tab__icon\">{icon()}</span>\n </Show>\n <Show when={label()}>\n <span class=\"smwb-tab__text-label\">{label()}</span>\n </Show>\n </span>\n <Ripple actionRef={(actions) => (rippleActions = actions)} classes={{ child: \"tab__ripple-child\" }} />\n </Dynamic>\n );\n}\n\nexport default Tab;\n"],"names":["Tab","props","ctx","useTabsContext","root","setRoot","createSignal","index","registerTab","merged","mergeProps","isActive","stacked","local","rest","splitProps","icon","children","label","rippleActions","active","value","onClick","event","callHandler","onChange","onPointerDown","onRipple","tag","_$createComponent","Dynamic","_$mergeProps","component","ref","r$","_ref$","mergeRefs","cn","class","disabled","role","undefined","tabindex","_$memo","_el$","_tmpl$3","_ref$2","contentRef","_$use","_$insert","Show","when","_el$2","_tmpl$","_el$3","_tmpl$2","Ripple","actionRef","actions","classes","child"],"mappings":"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"}
1
+ {"version":3,"file":"tab.js","sources":["../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../../base/ripple\";\nimport { Icon } from \"../../../base/icon\";\nimport { useTabsContext, type TabCloseReason } from \"../tabsContext\";\nimport { mergeRefs, type Ref } from \"../../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../../primitives/callHandler\";\n\nexport type { TabCloseReason };\n\n/** What a function given as `actions` receives. */\nexport interface TabActionsApi {\n /**\n * Ask for the tab to close, as its close button does: `onClose` is called with this event and the\n * reason \"actions\", and `Tabs` moves focus on to the neighbour once the tab goes, even though focus\n * is in a menu drawn outside the row. Call it from the item that closes the tab (\"Terminate\"), with\n * that item's event. It works on a tab that is not `closable`.\n */\n close: (event: Event) => void;\n}\n\n// `onClose` is the close button's, not the element's `close` event handler.\nexport interface TabProps extends Omit<JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement>, \"onClose\"> {\n label?: JSX.Element;\n isActive?: boolean;\n /**\n * Whether the tab is the one in the page's Tab order (`tabindex` 0, the others -1). `Tabs` sets\n * it: the focused tab while focus is in the row, the selected one otherwise. On its own a tab\n * is the stop while `isActive`.\n */\n tabStop?: boolean;\n contentRef?: Ref<HTMLSpanElement>;\n /**\n * A decorative status marker drawn left of the label (a running/done/failed icon). Its\n * wrapper renders `aria-hidden=\"true\"`, so the tab's accessible name stays the label\n * alone: the icon is not announced on top of it. To have the status read out, put it\n * in the `label` itself.\n */\n icon?: JSX.Element;\n stacked?: boolean;\n /** The element to render. A tab with an `href` is an `a` unless you say otherwise. */\n tag?: string;\n /**\n * Navigation mode: where the tab goes. The tab is then a real link (`<a href role=\"tab\">`, with\n * no `target`: a tab never opens another window), so it opens in place and middle click, copy\n * link and the like work. A router takes over the plain click in `onClick` with\n * `event.preventDefault()`; `Tabs` still calls `onChange` for it. A modified or non-primary click\n * (Ctrl, Meta, Shift or Alt held, or a button other than the main one) is the browser's, as\n * \"open in a new tab\": the router must let it through, and `Tabs` does not call `onChange`.\n * The one exception is a middle press on a `closable` tab: it closes the tab instead, as in an\n * editor, and its default is prevented so nothing opens.\n */\n href?: string;\n disabled?: boolean;\n /**\n * Draw a close button after the tab, and let Delete or Backspace on the focused tab close it too\n * (Backspace because a Mac has no Delete key); the tab lists them in `aria-keyshortcuts`. A\n * middle click on the tab closes it as well (`reason` \"middleClick\"): the browser's own\n * middle-click action (autoscroll, opening a link tab in a new window) is suppressed, and the\n * click never selects. The tab does not close itself: `onClose` asks for it and the owner\n * removes the `Tab`. The button is a sibling of the tab, not inside its `role=\"tab\"`, so the\n * tab's accessible name is its label alone.\n * It is out of the Tab order (`tabindex` -1), so the row keeps one tab stop, and a press on it takes\n * no focus and never selects the tab. When the tab that has focus closes, `Tabs` moves focus to the\n * tab that takes its place (the previous one if it was last), skipping disabled tabs. A disabled tab\n * has a disabled button.\n *\n * The button stays in the accessibility tree, named by `closeLabel`: it is how a screen reader user\n * who cannot press Delete, as on a touch screen, closes the tab. It sits in the tab list beside its\n * tab, though, and ARIA 1.2 lets a `tablist` own only `tab`s: a linter that applies that strictly\n * (axe `aria-required-children`) can flag the button, and whatever `actions` holds.\n *\n * To switch it off on a tab, pass `false` rather than leaving it out: a tab given `closable` or\n * `actions` is wrapped in an item with them, a tab given neither is not, and moving between the two\n * recreates the tab and drops its focus.\n */\n closable?: boolean;\n /**\n * Asks for the tab to close, and receives what asked for it: the close button's click (`reason`\n * \"button\"), the key press of Delete or Backspace on the tab (`reason` \"key\", its default is\n * prevented), the middle press on the tab (`reason` \"middleClick\", its default is prevented too),\n * or the event passed to `close` by the tab's `actions` (`reason` \"actions\"). The owner removes\n * the `Tab`.\n */\n onClose?: (event: Event, reason: TabCloseReason) => void;\n /** Accessible label of the close button. English by default; set it to localise, or to name the tab (\"Close Terminal 1\"). */\n closeLabel?: string;\n /**\n * Content after the tab, before the close button: a trigger with a `Menu` (\"Rename\", \"Terminate\"),\n * or any control. Give a function to get `{ close }` (see `TabActionsApi`); it is called once.\n * Like the close button the content is a sibling of the tab, so it is not part of the tab's name;\n * the tab's own `ref`, `class` and handlers stay on the `role=\"tab\"` element. It stays in the\n * accessibility tree as written, inside the tab list (see `closable`).\n *\n * The row has one tab stop, so give the trigger `tabindex={-1}`. Shift+F10 or the Menu key on the\n * focused tab, which the tab lists in `aria-keyshortcuts`, focuses the first control in `actions`\n * and clicks it, unless that control says `aria-expanded=\"true\"` (it is already open). If the\n * control names its popup in `aria-controls`, the first enabled `menuitem` in that element then\n * takes focus, as the WAI-ARIA menu button pattern asks: ArrowDown moves on, Enter chooses, and\n * Escape hands focus back to the trigger. Without `aria-controls` focus stays on the trigger.\n *\n * The row clips what overflows it: draw the menu in a `Portal`, anchored to the trigger and with\n * the `id` the trigger names. A choice that removes the tab (\"Terminate\") should call `close` with\n * its event, so that `onClose` removes the tab and `Tabs` moves focus on to the neighbour; a tab\n * removed some other way leaves focus on the page.\n */\n actions?: JSX.Element | ((api: TabActionsApi) => JSX.Element);\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\n/** A click that asks the browser for something else than \"go here\": a new tab, a new window, a download. */\nconst isModifiedClick = (event: MouseEvent): boolean =>\n event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey;\n\nconst hasModifier = (event: KeyboardEvent): boolean => event.ctrlKey || event.metaKey || event.altKey || event.shiftKey;\n\n/** What the Menu key and Shift+F10 stand for: the actions' trigger. */\nconst ACTIONS_TRIGGER = 'button:not(:disabled), a[href], [role=\"button\"]:not([aria-disabled=\"true\"]), [tabindex]';\n\n/** The item of an opened menu that takes focus first. */\nconst FIRST_MENU_ITEM = '[role^=\"menuitem\"]:not([aria-disabled=\"true\"])';\n\n/** Focus the first item of the popup `trigger` names in `aria-controls`, if it is there. */\nconst focusPopupOf = (trigger: HTMLElement): void => {\n for (const id of trigger.getAttribute(\"aria-controls\")?.split(/\\s+/) ?? []) {\n const item = id ? trigger.ownerDocument.getElementById(id)?.querySelector<HTMLElement>(FIRST_MENU_ITEM) : null;\n if (item) {\n // The menu may not be placed yet: a scroll to it would jump to the corner it starts in.\n item.focus({ preventScroll: true });\n return;\n }\n }\n};\n\nexport function Tab(props: ParentProps<TabProps>): JSX.Element {\n const ctx = useTabsContext();\n const [root, setRoot] = createSignal<HTMLButtonElement | HTMLAnchorElement>();\n const merged = mergeProps({ isActive: false, stacked: false, closeLabel: \"Close tab\" }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"label\",\n \"isActive\",\n \"contentRef\",\n \"icon\",\n \"stacked\",\n \"tag\",\n \"href\",\n \"tabStop\",\n \"disabled\",\n // `Tabs` owns this: it is the item that drags, not the tab. The caller's value\n // is dropped, as in the React `Tab`.\n \"draggable\",\n \"closable\",\n \"onClose\",\n \"closeLabel\",\n \"actions\",\n \"id\",\n \"aria-controls\",\n // A tab opens in place: a caller's target is dropped, not passed on.\n \"target\" as keyof TabProps,\n \"onClick\",\n \"onKeyDown\",\n \"ref\",\n // The tab sets this on its root too; its own handler calls the caller's first.\n \"onPointerDown\",\n \"onMouseDown\",\n ]);\n\n // The tab's position in the tab list: it follows the tab when tabs around it\n // are added, removed or reordered.\n const index = ctx\n ? ctx.registerTab(root, {\n id: () => local.id,\n disabled: () =>\n Boolean(local.disabled) || props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\",\n closable: () => Boolean(local.closable),\n requestClose: (event) => close(event, \"key\"),\n })\n : () => -1;\n\n // Read the icon and the label once: markup passed as a prop is created anew on\n // every read, and during hydration the copy made for the <Show> test has no\n // server DOM node to adopt (\"Unable to find DOM nodes for hydration key\").\n const icon = children(() => local.icon);\n const label = children(() => local.label);\n // The actions are drawn whenever they are given, so reading them here, once, is safe. A function\n // is the tab's to call, with its api: `children` would call it with nothing.\n const actionsApi: TabActionsApi = { close: (event) => close(event, \"actions\") };\n const actions = children(() => {\n const given = local.actions;\n return typeof given === \"function\" ? (given as (api: TabActionsApi) => JSX.Element)(actionsApi) : given;\n });\n const hasActions = (): boolean => actions.toArray().length > 0;\n\n let rippleActions: RippleActionsRef | undefined;\n let actionsEl: HTMLSpanElement | undefined;\n\n const active = (): boolean => (ctx ? ctx.value() === index() : local.isActive);\n\n const tag = (): string => local.tag ?? (local.href !== undefined ? \"a\" : \"button\");\n // Anything but a button is not disabled by the attribute: its clicks are swallowed here.\n const inert = (): boolean => Boolean(local.disabled) && tag() !== \"button\";\n\n const onClick: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n if (inert()) {\n event.preventDefault();\n return;\n }\n // Inside Tabs too the caller's onClick runs first, then the tab list picks the tab.\n callHandler(local.onClick, event);\n // A link tab opens elsewhere on a modified click: the browser's, not a selection here.\n if (local.href !== undefined && isModifiedClick(event)) return;\n ctx?.onChange(event, index());\n };\n\n const close = (event: Event, reason: TabCloseReason): void => {\n // The row notes which tab is closing before the owner removes it.\n ctx?.closing(index(), reason);\n local.onClose?.(event, reason);\n };\n\n // A button clicks on Enter and Space by itself, a link on Enter only: Space does it here.\n const onKeyDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, KeyboardEvent> = (event) => {\n callHandler(local.onKeyDown, event);\n if (local.disabled || event.defaultPrevented || event.target !== event.currentTarget) return;\n if (tag() !== \"button\" && event.key === \" \") {\n event.preventDefault();\n event.currentTarget.click();\n } else if (local.closable && (event.key === \"Delete\" || event.key === \"Backspace\") && !hasModifier(event)) {\n event.preventDefault();\n close(event, \"key\");\n } else if (hasActions() && (event.key === \"ContextMenu\" || (event.key === \"F10\" && event.shiftKey))) {\n // The Menu key, or Shift+F10: the keyboard's right click. The trigger takes focus first, so\n // the menu it opens hands focus back to it on Escape.\n const trigger = actionsEl?.querySelector<HTMLElement>(ACTIONS_TRIGGER);\n if (trigger) {\n event.preventDefault();\n trigger.focus();\n // The keys mean \"open\": a menu that already is open is not toggled shut.\n if (trigger.getAttribute(\"aria-expanded\") !== \"true\") {\n trigger.click();\n }\n focusPopupOf(trigger);\n }\n }\n };\n\n const onPointerDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, PointerEvent> = (event) => {\n callHandler(local.onPointerDown, event);\n rippleActions?.onRipple(event);\n };\n\n // Middle click on a closable tab closes it, IDE-style: the browser's own middle-click\n // action (autoscroll, opening a link tab in a new window) is suppressed and the tab is\n // never selected. A middle click on a tab that is not closable is the browser's, untouched.\n const onMouseDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n callHandler(local.onMouseDown, event);\n if (event.button === 1 && local.closable && !local.disabled) {\n event.preventDefault();\n close(event, \"middleClick\");\n }\n };\n\n // Inside Tabs the row decides, whatever the caller passed.\n const tabStop = (): boolean => (ctx ? ctx.tabStop(index()) : (local.tabStop ?? active()));\n\n // What the tab answers to, for assistive technology; the caller's own list is kept.\n // The chords are best-effort: browsers reserve Mod+W and Mod+Shift+[/] in a page of\n // their own tabs, and they bite only in an embedded webview.\n const keyshortcuts = (): string | undefined =>\n [\n props[\"aria-keyshortcuts\"],\n !local.disabled && local.closable ? \"Delete Backspace\" : undefined,\n !local.disabled && hasActions() ? \"Shift+F10 ContextMenu\" : undefined,\n !local.disabled && local.closable ? \"Meta+W Control+W\" : undefined,\n !local.disabled ? \"Meta+Shift+[ Control+Shift+[ Meta+Shift+] Control+Shift+]\" : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // A tab given neither `closable` nor `actions` is the bare element, as it always was.\n const wrapped = (): boolean => local.closable !== undefined || actions() !== undefined;\n\n // Only a reorderable row makes its items draggable, and a disabled tab never — the same\n // contract as the registration's `disabled`. Rendered on the item (the wrapper, or the\n // bare tab when there is none), so `draggable` is in the server markup, as in React.\n const draggable = (): boolean | undefined =>\n ctx?.reorderable() && !local.disabled && props[\"aria-disabled\"] !== true && props[\"aria-disabled\"] !== \"true\"\n ? true\n : undefined;\n\n const renderTab = (): JSX.Element => (\n <Dynamic\n component={tag()}\n {...rest}\n ref={mergeRefs(local.ref, setRoot)}\n class={cn(\"smwb-tab\", local.class, {\n \"smwb-tab--active\": active(),\n \"smwb-tab--stacked\": local.stacked,\n \"smwb-tab--disabled\": local.disabled,\n })}\n id={local.id ?? ctx?.tabId(index())}\n aria-controls={local[\"aria-controls\"] ?? (ctx?.hasPanels() ? ctx.panelId(index()) : undefined)}\n // A disabled link has no href, so it is no link to follow or to focus.\n href={inert() ? undefined : local.href}\n draggable={wrapped() ? undefined : draggable()}\n onClick={onClick}\n onKeyDown={onKeyDown}\n onPointerDown={onPointerDown}\n onMouseDown={onMouseDown}\n // The role, the selection and the roving tabindex belong to the tab list:\n // they win over the caller's. A tab that is not disabled keeps the\n // caller's aria-disabled.\n role=\"tab\"\n aria-selected={active()}\n aria-disabled={local.disabled || undefined}\n aria-keyshortcuts={keyshortcuts()}\n tabindex={tabStop() ? 0 : -1}\n disabled={tag() === \"button\" ? local.disabled : undefined}\n >\n <span class=\"smwb-tab__content\" ref={mergeRefs(local.contentRef)}>\n <Show when={icon()}>\n <span class=\"smwb-tab__icon\" aria-hidden=\"true\">\n {icon()}\n </span>\n </Show>\n <Show when={label()}>\n <span class=\"smwb-tab__text-label\">{label()}</span>\n </Show>\n </span>\n <Ripple actionRef={(api) => (rippleActions = api)} classes={{ child: \"tab__ripple-child\" }} />\n </Dynamic>\n );\n\n return (\n <Show when={wrapped()} fallback={renderTab()}>\n <div\n class={cn(\"smwb-tab-item\", {\n \"smwb-tab-item--active\": active(),\n \"smwb-tab-item--disabled\": local.disabled,\n })}\n draggable={draggable()}\n >\n {renderTab()}\n <Show when={hasActions()}>\n <span class=\"smwb-tab__actions\" ref={actionsEl}>\n {actions()}\n </span>\n </Show>\n <Show when={local.closable}>\n <button\n type=\"button\"\n class=\"smwb-tab__close\"\n // Out of the Tab order, so the row keeps its one tab stop; Delete on the tab closes it.\n tabindex={-1}\n aria-label={local.closeLabel}\n disabled={Boolean(local.disabled)}\n // A press does not take focus from where it is: from the tab being closed, or the page.\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => close(event, \"button\")}\n >\n <Icon name=\"close\" size={16} />\n </button>\n </Show>\n </div>\n </Show>\n );\n}\n\nexport default Tab;\n"],"names":["isModifiedClick","event","button","ctrlKey","metaKey","shiftKey","altKey","hasModifier","ACTIONS_TRIGGER","FIRST_MENU_ITEM","focusPopupOf","trigger","id","getAttribute","split","item","ownerDocument","getElementById","querySelector","focus","preventScroll","Tab","props","ctx","useTabsContext","root","setRoot","createSignal","merged","mergeProps","isActive","stacked","closeLabel","local","rest","splitProps","index","registerTab","disabled","Boolean","closable","requestClose","close","icon","children","label","actionsApi","actions","given","hasActions","toArray","length","rippleActions","actionsEl","active","value","tag","href","undefined","inert","onClick","preventDefault","callHandler","onChange","reason","closing","onClose","onKeyDown","defaultPrevented","target","currentTarget","key","click","onPointerDown","onRipple","onMouseDown","tabStop","keyshortcuts","filter","join","wrapped","draggable","reorderable","renderTab","_$createComponent","Dynamic","_$mergeProps","component","ref","r$","_ref$","mergeRefs","cn","class","tabId","hasPanels","panelId","_$memo","role","tabindex","_el$","_tmpl$3","_ref$2","contentRef","_$use","_$insert","Show","when","_el$2","_tmpl$","_el$3","_tmpl$2","Ripple","actionRef","api","classes","child","fallback","_el$4","_tmpl$6","_el$5","_tmpl$4","_ref$3","_el$6","_tmpl$5","$$click","$$mousedown","Icon","name","size","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","_v$3","_v$4","_$className","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type JSX, type ParentProps } from "solid-js";
2
+ export interface TabPanelProps extends JSX.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * The tab this panel belongs to: its index, counted as for the `value` of `Tabs`. The panel
5
+ * shows while that tab is selected and is hidden otherwise.
6
+ */
7
+ index: number;
8
+ /** Extra class on the panel. */
9
+ class?: string;
10
+ /** The panel's content. It stays in the document while the panel is hidden. */
11
+ children?: JSX.Element;
12
+ }
13
+ /**
14
+ * The content of one tab. Give it to the `panels` of `Tabs`, which links it to its tab: the panel
15
+ * is `aria-labelledby` the tab and the tab `aria-controls` the panel. A panel is `role="tabpanel"`
16
+ * and a tab stop of its own (`tabindex="0"`), so Tab moves from the tab list to the panel. A panel
17
+ * placed anywhere else is not linked to any tabs and is always shown (its `hidden` is yours).
18
+ */
19
+ export declare function TabPanel(props: ParentProps<TabPanelProps>): JSX.Element;
20
+ export default TabPanel;
@@ -0,0 +1,34 @@
1
+ import { spread as l, mergeProps as o, insert as s, template as d } from "solid-js/web";
2
+ import '../../../../assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css';import '../../../../assets/styles/less/tokens.entry.css';/* empty css */
3
+ /* empty css */
4
+ import { splitProps as p, mergeProps as m } from "solid-js";
5
+ import c from "clsx";
6
+ import { useTabsContext as u } from "../tabsContext.js";
7
+ var b = /* @__PURE__ */ d("<div>");
8
+ function $(a) {
9
+ const r = u(), [e, i] = p(a, ["index", "class", "children"]), n = m({
10
+ get id() {
11
+ return r?.panelId(e.index);
12
+ },
13
+ get "aria-labelledby"() {
14
+ return r?.tabId(e.index);
15
+ },
16
+ tabindex: 0
17
+ }, i);
18
+ return (() => {
19
+ var t = b();
20
+ return l(t, o(n, {
21
+ get class() {
22
+ return c("smwb-tab-panel", e.class);
23
+ },
24
+ role: "tabpanel",
25
+ get hidden() {
26
+ return r ? r.value() !== e.index : n.hidden;
27
+ }
28
+ }), !1, !0), s(t, () => e.children), t;
29
+ })();
30
+ }
31
+ export {
32
+ $ as TabPanel
33
+ };
34
+ //# sourceMappingURL=tabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabPanel.js","sources":["../../../../../src/components/navigation/tabs/tabPanel/tabPanel.tsx"],"sourcesContent":["import { type JSX, type ParentProps, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { useTabsContext } from \"../tabsContext\";\n\nexport interface TabPanelProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * The tab this panel belongs to: its index, counted as for the `value` of `Tabs`. The panel\n * shows while that tab is selected and is hidden otherwise.\n */\n index: number;\n /** Extra class on the panel. */\n class?: string;\n /** The panel's content. It stays in the document while the panel is hidden. */\n children?: JSX.Element;\n}\n\n/**\n * The content of one tab. Give it to the `panels` of `Tabs`, which links it to its tab: the panel\n * is `aria-labelledby` the tab and the tab `aria-controls` the panel. A panel is `role=\"tabpanel\"`\n * and a tab stop of its own (`tabindex=\"0\"`), so Tab moves from the tab list to the panel. A panel\n * placed anywhere else is not linked to any tabs and is always shown (its `hidden` is yours).\n */\nexport function TabPanel(props: ParentProps<TabPanelProps>): JSX.Element {\n const ctx = useTabsContext();\n const [local, rest] = splitProps(props, [\"index\", \"class\", \"children\"]);\n // Yours win: a TabPanel outside Tabs `panels` has no ids to give, and a caller's\n // `id`, `aria-labelledby` or `tabindex` replaces the linked ones.\n const linked = mergeProps(\n {\n get id() {\n return ctx?.panelId(local.index);\n },\n get \"aria-labelledby\"() {\n return ctx?.tabId(local.index);\n },\n tabindex: 0,\n },\n rest\n );\n\n return (\n <div {...linked} class={cn(\"smwb-tab-panel\", local.class)} role=\"tabpanel\" hidden={ctx ? ctx.value() !== local.index : linked.hidden}>\n {local.children}\n </div>\n );\n}\n\nexport default TabPanel;\n"],"names":["TabPanel","props","ctx","useTabsContext","local","rest","splitProps","linked","mergeProps","id","panelId","index","tabId","tabindex","_el$","_tmpl$","_$spread","_$mergeProps","cn","class","hidden","value","_$insert","children"],"mappings":";;;;;;;AAwBO,SAASA,EAASC,GAAgD;AACvE,QAAMC,IAAMC,EAAAA,GACN,CAACC,GAAOC,CAAI,IAAIC,EAAWL,GAAO,CAAC,SAAS,SAAS,UAAU,CAAC,GAGhEM,IAASC,EACb;AAAA,IACE,IAAIC,KAAK;AACP,aAAOP,GAAKQ,QAAQN,EAAMO,KAAK;AAAA,IACjC;AAAA,IACA,IAAI,oBAAoB;AACtB,aAAOT,GAAKU,MAAMR,EAAMO,KAAK;AAAA,IAC/B;AAAA,IACAE,UAAU;AAAA,EAAA,GAEZR,CACF;AAEA,UAAA,MAAA;AAAA,QAAAS,IAAAC,EAAAA;AAAAC,WAAAA,EAAAF,GAAAG,EACWV,GAAM;AAAA,MAAA,IAAA,QAAA;AAAA,eAASW,EAAG,kBAAkBd,EAAMe,KAAK;AAAA,MAAC;AAAA,MAAA,MAAO;AAAA,MAAU,IAACC,SAAM;AAAA,eAAElB,IAAMA,EAAImB,MAAAA,MAAYjB,EAAMO,QAAQJ,EAAOa;AAAAA,MAAM;AAAA,IAAA,CAAA,GAAA,IAAA,EAAA,GAAAE,EAAAR,GAAA,MACjIV,EAAMmB,QAAQ,GAAAT;AAAAA,EAAA,GAAA;AAGrB;"}
@@ -1,6 +1,28 @@
1
1
  import { type JSX, type ParentProps } from "solid-js";
2
2
  import { Tab } from "./tab/tab";
3
3
  import { type Ref } from "../../../primitives/mergeRefs";
4
+ /**
5
+ * Tabs follow the WAI-ARIA tabs pattern with manual activation. The selected tab is the row's one
6
+ * tab stop (`tabindex` 0, the others -1). The arrow keys along the row's `orientation` move focus to
7
+ * the next or the previous tab (wrapping at the ends), Home and End to the first and the last one;
8
+ * disabled tabs are skipped. Enter or Space then selects the focused tab, as a click does:
9
+ * `onChange` is called for it, with the key's click. Moving focus changes nothing by itself, so a
10
+ * row of link tabs does not navigate as the arrows pass them. Tab leaves the row for what follows
11
+ * it, the selected `TabPanel` first when `panels` are given.
12
+ *
13
+ * A `Tab` can be `closable` and take `actions`; they sit beside the tab and out of the Tab order.
14
+ * Delete on the focused tab, its close button or its `actions` (through `close`) ask `onClose` to
15
+ * close it, and when it goes, focus moves to the tab that takes its place instead of falling to the
16
+ * page. A middle click on a closable tab closes it too.
17
+ *
18
+ * With `onReorder` the row's tabs drag onto one another to reorder: `onReorder(from, to)` reports
19
+ * the drop and the owner moves the tabs; dropping the selected tab reports its new index through
20
+ * `onChange` as well, so the selection follows the moved tab. With `overflowMenu` a scrollable
21
+ * row that overflows gains
22
+ * a trigger beside it listing the clipped tabs. The chords Mod+W (close the focused closable tab)
23
+ * and Mod+Shift+[ / Mod+Shift+] (switch to the previous / next tab) are handled on the row, as
24
+ * best-effort: a browser of its own tabs reserves them.
25
+ */
4
26
  export interface TabsProps {
5
27
  /**
6
28
  * Index of the selected tab: its position in the row. Tabs count in the order they
@@ -8,11 +30,34 @@ export interface TabsProps {
8
30
  * removed or reordered count by their new place.
9
31
  */
10
32
  value: number;
11
- /** Called with the index of the clicked tab, counted as for `value`. */
33
+ /**
34
+ * Called with the index of the clicked tab, counted as for `value`. A tab chosen from the keyboard
35
+ * (Enter or Space on the focused tab) calls it with that click too. A modified or non-primary
36
+ * click (Ctrl, Meta, Shift or Alt held, or a button other than the main one) on a link tab
37
+ * (`Tab` with `href`) is the browser's, as "open in a new tab": it does not call `onChange`.
38
+ */
12
39
  onChange: (event: MouseEvent & {
13
40
  currentTarget: HTMLElement;
14
41
  target: Element;
15
42
  }, index: number) => void;
43
+ /**
44
+ * Which way the tabs run. It sets `aria-orientation` on the tab list and picks the arrow keys that
45
+ * move between tabs: Left and Right when horizontal, Up and Down when vertical. The styles draw
46
+ * a horizontal row; a vertical list is yours to lay out.
47
+ */
48
+ orientation?: "horizontal" | "vertical";
49
+ /**
50
+ * The content of the tabs: `TabPanel`s, rendered after the tab row. With them each tab gets
51
+ * `aria-controls` its panel and each panel `aria-labelledby` its tab. Without them the tabs link
52
+ * to nothing, as before. Give a panel to every tab: a tab whose panel is left out still names it.
53
+ * A `TabPanel` placed anywhere else is not linked to the tabs and is always shown.
54
+ */
55
+ panels?: JSX.Element;
56
+ /**
57
+ * Base of the ids that link tabs and panels: tab `n` is `{id}-tab-{n}`, its panel `{id}-panel-{n}`.
58
+ * It is also the id of the root element. A generated one by default.
59
+ */
60
+ id?: string;
16
61
  /** Draw the indicator as wide as the selected tab's label rather than the whole tab. */
17
62
  indicatorContent?: boolean;
18
63
  /**
@@ -20,8 +65,33 @@ export interface TabsProps {
20
65
  * more tabs are hidden fades out.
21
66
  */
22
67
  scrollable?: boolean;
23
- /** With `scrollable`: buttons at both ends that scroll the row while it overflows. */
68
+ /**
69
+ * With `scrollable`: buttons at both ends that scroll the row while it overflows. They are for
70
+ * the pointer and stay out of the Tab order: the arrow keys reach every tab and scroll it into
71
+ * view.
72
+ */
24
73
  scrollButtons?: boolean;
74
+ /**
75
+ * Present ⇒ the row is reorderable by dragging a tab onto another (pointer-only; there is no
76
+ * keyboard reorder). `Tabs` does not move the tabs itself: it reports the drag with
77
+ * `onReorder(from, to)` — indexes counted as for `value` — and the owner reorders its state.
78
+ * The tabs keep their focus through a reorder; when the moved tab is the selected one,
79
+ * `onChange` reports its new index too, so a controlled owner keeps it selected. That `onChange`
80
+ * carries the drop's own event standing in for the click's: the index argument is authoritative —
81
+ * `currentTarget` is the scroll area the drop delegates to, not the tab.
82
+ */
83
+ onReorder?: (from: number, to: number) => void;
84
+ /**
85
+ * With `scrollable`: when the row overflows, a trigger button is rendered beside the scroller
86
+ * (in the scroll buttons' spot) that opens a menu of the tabs the viewport clips — any clipped
87
+ * part beyond a 1px tolerance counts. Each entry shows the tab's icon and label, the selected one is marked
88
+ * `aria-current="true"`, and choosing one calls `onChange` for it and scrolls it into view.
89
+ * The trigger appears only after the browser has measured an overflow, so the server markup
90
+ * shows none.
91
+ */
92
+ overflowMenu?: boolean;
93
+ /** Accessible label of the overflow-menu trigger. English by default; set it to localise. */
94
+ overflowMenuAriaLabel?: string;
25
95
  /** Compact tabs: labels as written (no capitals, no letter spacing) and less padding. */
26
96
  dense?: boolean;
27
97
  /** Accessible label of the button that scrolls back. */
@@ -35,5 +105,5 @@ export interface TabsProps {
35
105
  }
36
106
  export declare function Tabs(props: ParentProps<TabsProps>): JSX.Element;
37
107
  export { Tab };
38
- export type { TabProps } from "./tab/tab";
108
+ export type { TabProps, TabActionsApi, TabCloseReason } from "./tab/tab";
39
109
  export default Tabs;