@kerfjs/ui 5.0.0-beta.75 → 5.0.0-beta.77

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 (443) hide show
  1. package/README.md +41 -1
  2. package/ai/component-catalog.json +235 -30
  3. package/ai/component-composition.json +131 -14
  4. package/ai/components/README.md +1 -1
  5. package/ai/components/badge.md +1 -1
  6. package/ai/components/chip.md +1 -1
  7. package/ai/components/content-item.md +8 -5
  8. package/ai/components/document-baseline.md +2 -2
  9. package/ai/components/grid.md +5 -3
  10. package/ai/components/lucide-icon.md +11 -0
  11. package/ai/components/nav-stack.md +1 -0
  12. package/ai/components/select.md +1 -0
  13. package/ai/components/split-view.md +1 -0
  14. package/ai/components/text.md +4 -2
  15. package/ai/components/toolbar-control-group.md +20 -3
  16. package/ai/components/toolbar-text.md +19 -4
  17. package/ai/components/toolbar.md +10 -4
  18. package/ai/public-api-signatures-v1.md +141 -66
  19. package/ai/skill.md +58 -5
  20. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  21. package/analyzer/index.mjs +11 -1
  22. package/dist/app-tab.js +1 -1
  23. package/dist/badge.d.ts +5 -3
  24. package/dist/badge.js +1 -1
  25. package/dist/browser/catalog.js +7 -7
  26. package/dist/browser/collapsible-panel.js +3 -3
  27. package/dist/browser/list-header.js +1 -1
  28. package/dist/browser/nav-stack.js +1 -1
  29. package/dist/browser/select.js +1 -1
  30. package/dist/browser/split-view.js +1 -1
  31. package/dist/browser/workbench.js +4 -4
  32. package/dist/catalog-resources.d.ts +6 -6
  33. package/dist/catalog-resources.js +1 -1
  34. package/dist/catalog-resources.js.map +1 -1
  35. package/dist/catalog.d.ts +5 -5
  36. package/dist/catalog.js +13 -13
  37. package/dist/catalog.js.map +1 -1
  38. package/dist/chip.d.ts +3 -2
  39. package/dist/chip.js +1 -1
  40. package/dist/{chunk-SVLDRGPJ.js → chunk-3RE2JMZU.js} +7 -3
  41. package/dist/chunk-3RE2JMZU.js.map +1 -0
  42. package/dist/{chunk-YDGNU2OD.js → chunk-4Y4L5YEI.js} +7 -2
  43. package/dist/chunk-4Y4L5YEI.js.map +1 -0
  44. package/dist/{chunk-V4WLBOVJ.js → chunk-5BZBIRQG.js} +4 -4
  45. package/dist/chunk-5BZBIRQG.js.map +1 -0
  46. package/dist/{chunk-SX7FJXPJ.js → chunk-5D3WDMIK.js} +4 -4
  47. package/dist/chunk-5D3WDMIK.js.map +1 -0
  48. package/dist/{chunk-O5GM2JAM.js → chunk-6VQPLV3O.js} +9 -9
  49. package/dist/chunk-6VQPLV3O.js.map +1 -0
  50. package/dist/{chunk-JA4J7Y4C.js → chunk-75I3SNUJ.js} +2 -2
  51. package/dist/chunk-75I3SNUJ.js.map +1 -0
  52. package/dist/{chunk-K47P7QZC.js → chunk-7QQ3HE47.js} +2 -2
  53. package/dist/chunk-7QQ3HE47.js.map +1 -0
  54. package/dist/{chunk-5I7QGQVT.js → chunk-AN5IWMTM.js} +2 -2
  55. package/dist/chunk-AN5IWMTM.js.map +1 -0
  56. package/dist/{chunk-3BYFWTP3.js → chunk-AOAW55JN.js} +2 -2
  57. package/dist/chunk-AOAW55JN.js.map +1 -0
  58. package/dist/{chunk-5UGLKFBF.js → chunk-ARZ4RSQO.js} +5 -6
  59. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  60. package/dist/{chunk-TCXDZNCX.js → chunk-BJLXE56E.js} +6 -6
  61. package/dist/chunk-BJLXE56E.js.map +1 -0
  62. package/dist/{chunk-RGS4WX2M.js → chunk-BYHGRKC3.js} +2 -2
  63. package/dist/chunk-BYHGRKC3.js.map +1 -0
  64. package/dist/{chunk-ZLKZFKLW.js → chunk-CEJ5FK6G.js} +2 -2
  65. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  66. package/dist/{chunk-SMZGAPCU.js → chunk-DQDTZE4W.js} +2 -2
  67. package/dist/chunk-DQDTZE4W.js.map +1 -0
  68. package/dist/{chunk-JGIV6ZDA.js → chunk-EFDCALR3.js} +2 -2
  69. package/dist/chunk-EFDCALR3.js.map +1 -0
  70. package/dist/{chunk-FKPKGP2H.js → chunk-G4VKQP7B.js} +2 -2
  71. package/dist/chunk-G4VKQP7B.js.map +1 -0
  72. package/dist/{chunk-DPAUKNB6.js → chunk-GS2QD3N7.js} +3 -3
  73. package/dist/chunk-GS2QD3N7.js.map +1 -0
  74. package/dist/{chunk-SLWCCHNP.js → chunk-H45DAZBL.js} +2 -2
  75. package/dist/chunk-H45DAZBL.js.map +1 -0
  76. package/dist/{chunk-DA3HS64I.js → chunk-H7ZJEI3H.js} +3 -3
  77. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  78. package/dist/{chunk-V4GAQ74C.js → chunk-HFLGWMG3.js} +4 -4
  79. package/dist/chunk-HFLGWMG3.js.map +1 -0
  80. package/dist/{chunk-HXTAPIHQ.js → chunk-HFQDSSED.js} +6 -6
  81. package/dist/chunk-HFQDSSED.js.map +1 -0
  82. package/dist/{chunk-WF75U3V4.js → chunk-HPREYDKV.js} +2 -2
  83. package/dist/chunk-HPREYDKV.js.map +1 -0
  84. package/dist/{chunk-VA5TN5PR.js → chunk-I4SDIMFA.js} +2 -2
  85. package/dist/chunk-I4SDIMFA.js.map +1 -0
  86. package/dist/{chunk-4SQK27MR.js → chunk-IM3GKYOG.js} +2 -2
  87. package/dist/chunk-IM3GKYOG.js.map +1 -0
  88. package/dist/{chunk-ALGYHYXP.js → chunk-J3AWE5I4.js} +2 -2
  89. package/dist/chunk-J3AWE5I4.js.map +1 -0
  90. package/dist/{chunk-OXO2QJWV.js → chunk-JOR5LGYE.js} +2 -2
  91. package/dist/chunk-JOR5LGYE.js.map +1 -0
  92. package/dist/{chunk-SRSJO5QE.js → chunk-LAZLBC2Q.js} +2 -2
  93. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  94. package/dist/{chunk-RFGW735Q.js → chunk-LRAIS3YB.js} +2 -2
  95. package/dist/chunk-LRAIS3YB.js.map +1 -0
  96. package/dist/{chunk-PL26TKNK.js → chunk-M6BWQMQY.js} +8 -8
  97. package/dist/chunk-M6BWQMQY.js.map +1 -0
  98. package/dist/{chunk-AYUHMAI6.js → chunk-MXNIVEVL.js} +2 -2
  99. package/dist/chunk-MXNIVEVL.js.map +1 -0
  100. package/dist/{chunk-4NG4Y2Q6.js → chunk-NJZMR7HM.js} +2 -2
  101. package/dist/chunk-NJZMR7HM.js.map +1 -0
  102. package/dist/{chunk-DG6G5EPF.js → chunk-NMWDHZVM.js} +2 -2
  103. package/dist/chunk-NMWDHZVM.js.map +1 -0
  104. package/dist/{chunk-X5QSICJ3.js → chunk-NS2TBYM4.js} +2 -2
  105. package/dist/chunk-NS2TBYM4.js.map +1 -0
  106. package/dist/{chunk-5TTZPGUY.js → chunk-NVKRZ5DI.js} +6 -6
  107. package/dist/chunk-NVKRZ5DI.js.map +1 -0
  108. package/dist/{chunk-4FEVHE7C.js → chunk-NVRJ7C3W.js} +4 -4
  109. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  110. package/dist/{chunk-BFPBS5Y4.js → chunk-O27D24CA.js} +2 -2
  111. package/dist/chunk-O27D24CA.js.map +1 -0
  112. package/dist/{chunk-DUBUXJA3.js → chunk-PQQQXJGV.js} +4 -2
  113. package/dist/chunk-PQQQXJGV.js.map +1 -0
  114. package/dist/{chunk-6DFDTWGG.js → chunk-QYXKMLHO.js} +2 -2
  115. package/dist/chunk-QYXKMLHO.js.map +1 -0
  116. package/dist/{chunk-TOICTHR2.js → chunk-RRCD3A6G.js} +14 -6
  117. package/dist/chunk-RRCD3A6G.js.map +1 -0
  118. package/dist/{chunk-I3Q7KKYM.js → chunk-S3ECMF23.js} +2 -2
  119. package/dist/chunk-S3ECMF23.js.map +1 -0
  120. package/dist/{chunk-PSHUSWQH.js → chunk-S4ZGTDSG.js} +2 -2
  121. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  122. package/dist/{chunk-HKVJ5MW3.js → chunk-VHXHLZ6R.js} +12 -3
  123. package/dist/chunk-VHXHLZ6R.js.map +1 -0
  124. package/dist/{chunk-NPNSKX3K.js → chunk-VLPE6OPN.js} +2 -2
  125. package/dist/chunk-VLPE6OPN.js.map +1 -0
  126. package/dist/{chunk-NCSWXG7G.js → chunk-VLQUXZKA.js} +9 -3
  127. package/dist/chunk-VLQUXZKA.js.map +1 -0
  128. package/dist/{chunk-EHIMH4J7.js → chunk-VR7MWD2X.js} +10 -4
  129. package/dist/chunk-VR7MWD2X.js.map +1 -0
  130. package/dist/chunk-WJN3V2H5.js +256 -0
  131. package/dist/chunk-WJN3V2H5.js.map +1 -0
  132. package/dist/{chunk-NN6GYOA2.js → chunk-XIZRXI7N.js} +2 -2
  133. package/dist/chunk-XIZRXI7N.js.map +1 -0
  134. package/dist/{chunk-TDN5EE3S.js → chunk-Y6KT7ZTR.js} +2 -2
  135. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  136. package/dist/{chunk-LHSUPNSE.js → chunk-YLJ6X3AC.js} +2 -2
  137. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  138. package/dist/{chunk-OYQIONQF.js → chunk-Z4EPMX25.js} +5 -5
  139. package/dist/chunk-Z4EPMX25.js.map +1 -0
  140. package/dist/{chunk-GRHJQWV2.js → chunk-Z6PE5T7N.js} +6 -6
  141. package/dist/chunk-Z6PE5T7N.js.map +1 -0
  142. package/dist/collapsible-panel.d.ts +6 -6
  143. package/dist/collapsible-panel.js +3 -3
  144. package/dist/collapsible-panel.js.map +1 -1
  145. package/dist/content-item.d.ts +13 -2
  146. package/dist/content-item.js +1 -1
  147. package/dist/css-values.js +1 -1
  148. package/dist/device-class.js +1 -1
  149. package/dist/device-class.js.map +1 -1
  150. package/dist/disclosure-arrow.js +1 -1
  151. package/dist/empty-state.js +1 -1
  152. package/dist/floating-toolbar.d.ts +1 -1
  153. package/dist/floating-toolbar.js +1 -1
  154. package/dist/grid.d.ts +10 -3
  155. package/dist/grid.js +1 -1
  156. package/dist/help-tags-register.js +1 -1
  157. package/dist/help-tags-register.js.map +1 -1
  158. package/dist/index.d.ts +28 -26
  159. package/dist/index.js +41 -40
  160. package/dist/list-action-row.js +1 -1
  161. package/dist/list-header.d.ts +1 -0
  162. package/dist/list-header.js +1 -1
  163. package/dist/list-inset-control.js +1 -1
  164. package/dist/list-inset-text.js +1 -1
  165. package/dist/list-item.js +1 -1
  166. package/dist/list.d.ts +2 -2
  167. package/dist/list.js +1 -1
  168. package/dist/loading-spinner.d.ts +4 -2
  169. package/dist/loading-spinner.js +1 -1
  170. package/dist/lucide-icon.d.ts +3 -1
  171. package/dist/lucide-icon.js +1 -1
  172. package/dist/nav-stack.d.ts +2 -1
  173. package/dist/nav-stack.js +1 -1
  174. package/dist/pane.js +1 -1
  175. package/dist/popup-menu-register.js +7 -7
  176. package/dist/popup-menu-register.js.map +1 -1
  177. package/dist/popup-menu.js +1 -1
  178. package/dist/resizable-region.d.ts +1 -1
  179. package/dist/resizable-region.js +1 -1
  180. package/dist/row.d.ts +2 -2
  181. package/dist/row.js +1 -1
  182. package/dist/segmented-control.js +1 -1
  183. package/dist/select-register.js +9 -6
  184. package/dist/select-register.js.map +1 -1
  185. package/dist/select.d.ts +2 -1
  186. package/dist/select.js +1 -1
  187. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  188. package/dist/skeleton.js +1 -1
  189. package/dist/spacer.js +1 -1
  190. package/dist/split-view.d.ts +2 -2
  191. package/dist/split-view.js +2 -2
  192. package/dist/split-view.js.map +1 -1
  193. package/dist/state-banner.d.ts +5 -3
  194. package/dist/state-banner.js +1 -1
  195. package/dist/styles/badge.css +1 -1
  196. package/dist/styles/chip.css +1 -1
  197. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  198. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  199. package/dist/styles/components/actions/toolbar/toolbar.css +424 -0
  200. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +841 -0
  201. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +164 -0
  202. package/dist/styles/components/collections/list/list.css +133 -0
  203. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  204. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  205. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  206. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  207. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  208. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  209. package/dist/styles/components/feedback/badge/badge.css +118 -0
  210. package/dist/styles/components/feedback/chip/chip.css +138 -0
  211. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  212. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  213. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  214. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  215. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  216. package/dist/styles/components/forms/select/select.css +454 -0
  217. package/dist/styles/components/forms/token-search-field/token-search-field.css +381 -0
  218. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +575 -0
  219. package/dist/styles/components/layout/grid/grid.css +85 -0
  220. package/dist/styles/components/layout/pane/pane.css +263 -0
  221. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  222. package/dist/styles/components/layout/row/row.css +111 -0
  223. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  224. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  225. package/dist/styles/components/layout/workbench/workbench.css +1067 -0
  226. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  227. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  228. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  229. package/dist/styles/components/navigation/nav-stack/nav-stack.css +248 -0
  230. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  231. package/dist/styles/components/navigation/tab-scaffold/tab-scaffold.css +207 -0
  232. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  233. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +29 -0
  234. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +56 -0
  235. package/dist/styles/components/typography/text/text.css +158 -0
  236. package/dist/styles/content-item.css +46 -1
  237. package/dist/styles/document.css +10 -0
  238. package/dist/styles/foundation.css +9 -6
  239. package/dist/styles/grid.css +50 -0
  240. package/dist/styles/lucide-icon.css +4 -0
  241. package/dist/styles/nav-stack.css +11 -0
  242. package/dist/styles/text.css +19 -0
  243. package/dist/styles/toolbar-control-group.css +51 -0
  244. package/dist/styles/toolbar-text.css +11 -0
  245. package/dist/styles/toolbar.css +32 -0
  246. package/dist/styles/webawesome.css +23 -6
  247. package/dist/sunken-panel.d.ts +1 -1
  248. package/dist/sunken-panel.js +1 -1
  249. package/dist/surface-scaffold.js +1 -1
  250. package/dist/tab-bar.js +1 -1
  251. package/dist/tab-scaffold.d.ts +1 -1
  252. package/dist/tab-scaffold.js +1 -1
  253. package/dist/tab-scaffold.js.map +1 -1
  254. package/dist/text.d.ts +16 -9
  255. package/dist/text.js +1 -1
  256. package/dist/token-search-field.d.ts +1 -1
  257. package/dist/token-search-field.js +1 -1
  258. package/dist/{token-search-field-CVGwDn2y.d.ts → token-search-model-DTcTXWMS.d.ts} +54 -54
  259. package/dist/token-search-model.d.ts +1 -1
  260. package/dist/token-search-model.js +1 -1
  261. package/dist/toolbar-control-group.d.ts +14 -2
  262. package/dist/toolbar-control-group.js +1 -1
  263. package/dist/toolbar-text.d.ts +10 -2
  264. package/dist/toolbar-text.js +1 -1
  265. package/dist/toolbar.d.ts +1 -1
  266. package/dist/toolbar.js +1 -1
  267. package/dist/value-table.js +1 -1
  268. package/dist/wire-catalog.js +2 -2
  269. package/dist/wire-catalog.js.map +1 -1
  270. package/dist/wire-content-items.js +1 -1
  271. package/dist/wire-content-items.js.map +1 -1
  272. package/dist/wire-nav-stack.js +59 -23
  273. package/dist/wire-nav-stack.js.map +1 -1
  274. package/dist/wire-resizable-regions.js +1 -1
  275. package/dist/wire-scroll-dividers.js +1 -1
  276. package/dist/wire-sidebar.js +1 -1
  277. package/dist/wire-sidebar.js.map +1 -1
  278. package/dist/wire-tab-bars.js +1 -1
  279. package/dist/wire-tab-scaffold.js +1 -1
  280. package/dist/wire-tab-scaffold.js.map +1 -1
  281. package/dist/wire-token-search-fields.d.ts +1 -1
  282. package/dist/wire-token-search-fields.js +1 -1
  283. package/dist/wire-toolbar-visibility.d.ts +13 -0
  284. package/dist/wire-toolbar-visibility.js +3 -0
  285. package/dist/wire-toolbar-visibility.js.map +1 -0
  286. package/dist/wire-workbench.js +1 -1
  287. package/dist/workbench.d.ts +3 -3
  288. package/dist/workbench.js +1 -1
  289. package/docs/accessibility.md +15 -0
  290. package/docs/collapsible-panel.md +5 -1
  291. package/docs/component-contract.md +56 -7
  292. package/docs/component-selection.md +73 -5
  293. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  294. package/docs/design/templates/empty-state/filtered.svg +1 -1
  295. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  296. package/docs/design/templates/empty-state/with-action.svg +1 -1
  297. package/docs/design/templates/empty-state-dark.svg +1 -1
  298. package/docs/design/templates/empty-state.svg +1 -1
  299. package/docs/design/templates/list/stack-dark.svg +1 -1
  300. package/docs/design/templates/list/stack.svg +1 -1
  301. package/docs/design/templates/list-dark.svg +1 -1
  302. package/docs/design/templates/list-header/action-dark.svg +1 -1
  303. package/docs/design/templates/list-header/action.svg +1 -1
  304. package/docs/design/templates/list-header/count-dark.svg +1 -1
  305. package/docs/design/templates/list-header/count.svg +1 -1
  306. package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
  307. package/docs/design/templates/list-header/inline-action.svg +1 -1
  308. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  309. package/docs/design/templates/list-header/size-l.svg +1 -1
  310. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  311. package/docs/design/templates/list-header/size-m.svg +1 -1
  312. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  313. package/docs/design/templates/list-header/size-xl.svg +1 -1
  314. package/docs/design/templates/list-header/size-xs-dark.svg +1 -1
  315. package/docs/design/templates/list-header/size-xs.svg +1 -1
  316. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  317. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  318. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  319. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  320. package/docs/design/templates/list-header-dark.svg +1 -1
  321. package/docs/design/templates/list-header.svg +1 -1
  322. package/docs/design/templates/list.svg +1 -1
  323. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  324. package/docs/design/templates/segmented-control/equal.svg +1 -1
  325. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  326. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  327. package/docs/design/templates/segmented-control-dark.svg +1 -1
  328. package/docs/design/templates/segmented-control.svg +1 -1
  329. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  330. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  331. package/docs/design/templates/tab-bar-dark.svg +1 -1
  332. package/docs/design/templates/tab-bar.svg +1 -1
  333. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  334. package/docs/design/templates/token-search-field/empty.svg +1 -1
  335. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  336. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  337. package/docs/design/templates/token-search-field-dark.svg +1 -1
  338. package/docs/design/templates/token-search-field.svg +1 -1
  339. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  340. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  341. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  342. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  343. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  344. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  345. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  346. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  347. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  348. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  349. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  350. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  351. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  352. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  353. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  354. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  355. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  356. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  357. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  358. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  359. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  360. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  361. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  362. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  363. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  364. package/docs/design/templates/toolbar-control-group.svg +1 -1
  365. package/docs/design/templates/toolbar-dark.svg +1 -1
  366. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  367. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  368. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  369. package/docs/design/templates/toolbar-text/default.svg +1 -1
  370. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  371. package/docs/design/templates/toolbar-text/large.svg +1 -1
  372. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  373. package/docs/design/templates/toolbar-text/small.svg +1 -1
  374. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  375. package/docs/design/templates/toolbar-text.svg +1 -1
  376. package/docs/design/templates/toolbar.svg +1 -1
  377. package/docs/design/templates/value-table/details-dark.svg +1 -1
  378. package/docs/design/templates/value-table/details.svg +1 -1
  379. package/docs/design/templates/value-table-dark.svg +1 -1
  380. package/docs/design/templates/value-table.svg +1 -1
  381. package/docs/design/templates.md +2 -0
  382. package/docs/document-baseline.md +4 -0
  383. package/docs/layout.md +23 -6
  384. package/docs/nav-stack.md +5 -1
  385. package/docs/sunken-panel.md +7 -7
  386. package/docs/ui-analyzer.md +12 -1
  387. package/docs/ui-doctor.md +12 -2
  388. package/docs/webawesome-theme.md +29 -59
  389. package/doctor/index.mjs +39 -30
  390. package/llms.txt +42 -1
  391. package/package.json +7 -2
  392. package/dist/chunk-3BYFWTP3.js.map +0 -1
  393. package/dist/chunk-4FEVHE7C.js.map +0 -1
  394. package/dist/chunk-4NG4Y2Q6.js.map +0 -1
  395. package/dist/chunk-4SQK27MR.js.map +0 -1
  396. package/dist/chunk-5I7QGQVT.js.map +0 -1
  397. package/dist/chunk-5TTZPGUY.js.map +0 -1
  398. package/dist/chunk-5UGLKFBF.js.map +0 -1
  399. package/dist/chunk-6DFDTWGG.js.map +0 -1
  400. package/dist/chunk-ALGYHYXP.js.map +0 -1
  401. package/dist/chunk-AYUHMAI6.js.map +0 -1
  402. package/dist/chunk-BFPBS5Y4.js.map +0 -1
  403. package/dist/chunk-DA3HS64I.js.map +0 -1
  404. package/dist/chunk-DG6G5EPF.js.map +0 -1
  405. package/dist/chunk-DPAUKNB6.js.map +0 -1
  406. package/dist/chunk-DUBUXJA3.js.map +0 -1
  407. package/dist/chunk-EHIMH4J7.js.map +0 -1
  408. package/dist/chunk-FKPKGP2H.js.map +0 -1
  409. package/dist/chunk-GRHJQWV2.js.map +0 -1
  410. package/dist/chunk-HKVJ5MW3.js.map +0 -1
  411. package/dist/chunk-HXTAPIHQ.js.map +0 -1
  412. package/dist/chunk-I3Q7KKYM.js.map +0 -1
  413. package/dist/chunk-JA4J7Y4C.js.map +0 -1
  414. package/dist/chunk-JGIV6ZDA.js.map +0 -1
  415. package/dist/chunk-K47P7QZC.js.map +0 -1
  416. package/dist/chunk-LHSUPNSE.js.map +0 -1
  417. package/dist/chunk-NCSWXG7G.js.map +0 -1
  418. package/dist/chunk-NN6GYOA2.js.map +0 -1
  419. package/dist/chunk-NPNSKX3K.js.map +0 -1
  420. package/dist/chunk-O5GM2JAM.js.map +0 -1
  421. package/dist/chunk-OXO2QJWV.js.map +0 -1
  422. package/dist/chunk-OYQIONQF.js.map +0 -1
  423. package/dist/chunk-PL26TKNK.js.map +0 -1
  424. package/dist/chunk-PSHUSWQH.js.map +0 -1
  425. package/dist/chunk-RFGW735Q.js.map +0 -1
  426. package/dist/chunk-RGS4WX2M.js.map +0 -1
  427. package/dist/chunk-SLWCCHNP.js.map +0 -1
  428. package/dist/chunk-SMZGAPCU.js.map +0 -1
  429. package/dist/chunk-SRSJO5QE.js.map +0 -1
  430. package/dist/chunk-SVLDRGPJ.js.map +0 -1
  431. package/dist/chunk-SX7FJXPJ.js.map +0 -1
  432. package/dist/chunk-TCXDZNCX.js.map +0 -1
  433. package/dist/chunk-TDN5EE3S.js.map +0 -1
  434. package/dist/chunk-TOICTHR2.js.map +0 -1
  435. package/dist/chunk-V4GAQ74C.js.map +0 -1
  436. package/dist/chunk-V4WLBOVJ.js.map +0 -1
  437. package/dist/chunk-VA5TN5PR.js.map +0 -1
  438. package/dist/chunk-WF75U3V4.js.map +0 -1
  439. package/dist/chunk-X5QSICJ3.js.map +0 -1
  440. package/dist/chunk-YDGNU2OD.js.map +0 -1
  441. package/dist/chunk-ZLKZFKLW.js.map +0 -1
  442. package/dist/{panel-toolbar-DDKh4uKd.d.ts → panel-toolbar-CL9tYOkh.d.ts} +1 -1
  443. package/dist/{types-BuHELdXR.d.ts → types-C9BubXfz.d.ts} +1 -1
@@ -2,6 +2,16 @@
2
2
 
3
3
  `@kerfjs/ui` components are plain functions that return Kerf `SafeHtml`. They have no component instance or lifecycle.
4
4
 
5
+ ### Shared semantic tones
6
+
7
+ `SemanticTone` is the shared color-role type for `Badge`, `Chip`, `StateBanner`,
8
+ and semantic `ContentItem` appearances: `neutral`, `info`, `pop`, `success`,
9
+ `warning`, and `danger`. Import it as a type from `@kerfjs/ui`,
10
+ `@kerfjs/ui/badge`, `@kerfjs/ui/state-banner`, or `@kerfjs/ui/content-item`.
11
+ Use `info` for the role backed by the existing `--kui-color-brand-*` tokens.
12
+ Migrate Badge/Chip `tone="brand"` to `tone="info"`; `BadgeTone` and
13
+ `StateBannerTone` remain deprecated aliases of `SemanticTone`.
14
+
5
15
  ## Selection boundary
6
16
 
7
17
  Begin with the [need-first component matrix](./component-selection.md). Reuse a
@@ -271,11 +281,11 @@ against the combined Kerf and consumer catalogs; do not duplicate a Kerf id.
271
281
  For Doctor's opt-in component ownership mode, add `styleSources` with the CSS
272
282
  paths each entry owns, relative to the consumer package root.
273
283
 
274
- - Components own semantic markup, stable anatomy, documented variants, ARIA projection, and package CSS hooks.
284
+ - Components own semantic markup, stable anatomy, documented variants, ARIA projection, and package CSS hooks. They may render and style raw HTML or Web Awesome implementation elements they create and control. A nested Kerf or application component remains its own owner even when the parent renders it.
275
285
  - Applications own signals/stores, product copy, domain-state mapping, persistence, routing, permissions, and transport.
276
286
  - Actions are `data-action` strings. Wire them at a stable root with `delegate()` or `delegateActions()` and retain the disposer.
277
287
  - A reusable component never owns per-instance mutable module state.
278
- - Consumers configure presentation through component props and documented `--kui-*` semantic tokens. Foundation tokens provide opinionated neutral, brand/info, non-status pop, success, warning, and danger fill/border/foreground roles. Application stylesheets must not select package component classes or descendants. If genuinely new structure needs CSS, encapsulate that structure and its stylesheet in an application-owned component; configure any nested Kerf components through their public APIs.
288
+ - Consumers configure presentation through component props and documented `--kui-*` semantic tokens. Foundation tokens provide opinionated neutral, brand/info, non-status pop, success, warning, and danger fill/border/foreground roles. Application stylesheets must not select package component classes or descendants. If genuinely new structure needs CSS, encapsulate that structure and its stylesheet in an application-owned component; configure any nested Kerf components through their public APIs. A thin composition that only connects other components should normally have no stylesheet. It may style only raw elements or layout it owns, never its component children.
279
289
 
280
290
  `ListItem.rootAttributes`, `ListActionRow.rootAttributes`,
281
291
  `ListHeader.rootAttributes`, `AppTab.rootAttributes`,
@@ -307,6 +317,8 @@ Both row components align a leading icon with the first label line when
307
317
  `multiline` allows the label to wrap; additional lines extend below that fixed
308
318
  visual anchor.
309
319
 
320
+ `ToolbarControlGroup.tileTone` selects `neutral`, `brand`, `success`, `warning`, or `danger` quiet fill, matching quiet border, and on-quiet foreground for a non-interactive icon tile. Compose a contained `single` group whose only child is a direct decorative LucideIcon (`aria-hidden="true"`). Omission preserves the normal group palette. The prop does not recolor interactive, mixed, multi-control, or borderless groups; keep real actions in controls with their existing focus/hover/pressed treatments.
321
+
310
322
  ### Public CSS anatomy
311
323
 
312
324
  The `publicClasses` array on each entry in
@@ -336,9 +348,10 @@ elements keyed on a child's state, naming the child by class inside `:has()`
336
348
  holds compact tabs), and it keeps styling raw native and raw Web
337
349
  Awesome children no kerf component owns, excluding kerf children by class
338
350
  (`wa-dropdown:not(.kui-popup-menu)`). `npm run check:css-ownership` enforces
339
- this in every component stylesheet (a `src/*.css` with a same-basename
340
- component), deriving the component names, the Web Awesome tags each component
341
- renders, and its composed children from `src/*.tsx`:
351
+ this in every component stylesheet (a same-basename `.css` and `.tsx` pair
352
+ under `src/components/<family>/<component>/`), deriving the component names,
353
+ the Web Awesome tags each component renders, and its composed children from the
354
+ colocated component source:
342
355
 
343
356
  - **Foreign classes.** Another component's class or `[data-component]` may
344
357
  appear only in an ancestor compound or inside `:has()` / `:not()`; the
@@ -507,7 +520,11 @@ declarations.
507
520
  `ContentItem` (`@kerfjs/ui/content-item`, rendering `.kui-content-item`) gives
508
521
  one child 8px inline margin, a real 1px border, 8px padding, and 12px corners;
509
522
  the border stays transparent unless `frame="framed"`, so framing never changes
510
- geometry. `shape="pill"` selects the 22px radius.
523
+ geometry. `shape="pill"` selects the 22px radius. `appearance="surface"`
524
+ paints the base surface, while `neutral`, `info`, `pop`, `success`, `warning`,
525
+ and `danger` coordinate the same quiet background, border, and readable
526
+ foreground tokens as `StateBanner`. The default `transparent` appearance
527
+ preserves the surrounding surface.
511
528
  `flush` removes block padding and borders while preserving inline geometry;
512
529
  `title` passes through as the native tooltip. Interactive hover uses the normal
513
530
  neutral fill so it remains visible on a lowered surface. For a card with
@@ -562,6 +579,8 @@ compact segment never becomes an oval. An icon-only `Select` joins a group as
562
579
  one more segment with its siblings' inset, radius, hover, and focus ring; only a
563
580
  lone Select grows the group to its icon-and-caret pill.
564
581
 
582
+ Select menus use native viewport shifting with 10px gutters: default menus grow to content (up to 20rem), while `fitMenu` matches trigger width and long labels wrap. Keep popup sizing and position repairs out of consumer CSS.
583
+
565
584
  For a rail view heading, use `Select presentation="title"`: its intrinsic
566
585
  36px borderless trigger has a bold large label flush with its leading edge and
567
586
  a caret beside that label. Set `focusRingInset` when a NavStack or panel clips
@@ -746,6 +765,9 @@ triangle. The SVG uses `fill="currentColor"`, so fill follows the icon's text
746
765
  color without styling its internal SVG from the application. Choose a Lucide
747
766
  node whose geometry supports a solid fill; the prop does not replace an icon
748
767
  node's own fill attributes.
768
+ The SVG is block-level by default. Pass `inline` when it belongs inside a
769
+ sentence or `Text`: the SVG becomes `inline-block`, keeps its inherited 1em
770
+ size unless `size` is supplied, and stays decorative unless `label` is set.
749
771
 
750
772
  `LoadingSpinner` accepts the same `size` steps as `LucideIcon`: `xs`, `s`, `m`,
751
773
  `l`, `xl` (12/16/20/24/32px at a 16px root) or a positive finite pixel
@@ -820,7 +842,7 @@ alphas, and dark raises them (`--wa-shadow-s` 14% to 50% black, `-m` 11% to
820
842
  page.
821
843
  Kerf owns the light `brand`, `success`, and `warning` `on-quiet` values in that
822
844
  theme layer: each keeps its hue but is dark enough to clear WCAG AA (4.5:1) on
823
- the lowered page background (`--kui-color-surface-lowered`, `#f2f2f7`), not
845
+ the lowered page background (`--kui-color-surface-lowered`, approximately `#f2f2f7` over white), not
824
846
  only on the white surface, so toned text reads on every background a page
825
847
  paints. It likewise owns every tone's loud pair: each `on-loud` text color
826
848
  clears AA on its `fill-loud` in both schemes. Light brand and danger keep white
@@ -846,3 +868,30 @@ Keep product adapters outside the package: connection-state maps, ticket empty-s
846
868
  ## Testing contract
847
869
 
848
870
  Each behavior has focused unit coverage and a real-browser flow through the production-backed catalog. Consumer bundle tests enforce subpath CSS reachability, transitive component styles, root/SSR isolation, optional registration boundaries, and the CSS-only Web Awesome theme boundary. `npm run check:css-ownership` rejects application selectors into Kerf or Web Awesome components, a non-minimal catalog compatibility stylesheet, or a return of the shared recipe stylesheet. Visual evidence supplements—never replaces—keyboard, focus, state, and event assertions.
871
+
872
+ ### Toolbar width visibility
873
+
874
+ `ToolbarText` and `ToolbarControlGroup` accept typed `hideBelow` and
875
+ `showBelow` CSS lengths. Call `wireToolbarVisibility(root)` from
876
+ `@kerfjs/ui/wire-toolbar-visibility` after mounting, and call its disposer when
877
+ the application unmounts. The nearest Toolbar's **content-box width**, excluding
878
+ padding, borders, and safe-area insets, determines visibility. `hideBelow={px(416)}`
879
+ hides strictly below 416px; `showBelow={px(416)}` shows strictly below 416px. At
880
+ 416px the first is visible and the second hidden. Together they define the visible
881
+ interval `[hideBelow, showBelow)`. Width rules intersect existing visibility and
882
+ expanded-state rules; they never force a CSS-hidden group visible.
883
+
884
+ Use `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, or `calc`/`plus` to construct
885
+ lengths. Percentages resolve against that content box, `em` uses the child item's
886
+ font size, and custom properties use its inherited and own token context. The
887
+ helper follows resizes, theme/token/font changes, inserted items, nested toolbars,
888
+ and relocated groups. Invalid, unresolved, negative, or contradictory thresholds
889
+ leave the item visible under this width policy. Server-rendered content is visible
890
+ until wiring runs; without browser observers, initial wiring and window resize
891
+ still update it. Probe context and lengths are reconciled only when their CSSOM
892
+ values change, so unrelated DOM observers can redraw without feeding an ongoing
893
+ mutation loop. Dispose to remove measurement probes and restore prior markers.
894
+
895
+ Hidden controls leave layout and keyboard navigation. A hidden busy group also
896
+ hides only its own adjacent busy status. Keep primary actions always available;
897
+ show a complementary overflow group for secondary actions at narrow widths.
@@ -25,11 +25,23 @@ Kerf or Web Awesome component from that stylesheet. See
25
25
  [`design-philosophy.md`](./design-philosophy.md) "Reach for the primitive, not for
26
26
  CSS".
27
27
 
28
+ ### Shared semantic tones
29
+
30
+ `SemanticTone` is the shared color-role type for `Badge`, `Chip`, `StateBanner`,
31
+ and semantic `ContentItem` appearances: `neutral`, `info`, `pop`, `success`,
32
+ `warning`, and `danger`. Import it as a type from `@kerfjs/ui`,
33
+ `@kerfjs/ui/badge`, `@kerfjs/ui/state-banner`, or `@kerfjs/ui/content-item`.
34
+ Use `info` for the role backed by the existing `--kui-color-brand-*` tokens.
35
+ Migrate Badge/Chip `tone="brand"` to `tone="info"`; `BadgeTone` and
36
+ `StateBannerTone` remain deprecated aliases of `SemanticTone`.
37
+
28
38
  ## Foundation tokens
29
39
 
30
40
  Import the opt-in `@kerfjs/ui/document.css` baseline when the application wants
31
41
  Kerf UI to own global box sizing, body typography/colors, plain-link color, and
32
- the definite full-height chain. Put `.kui-app-root` on the one direct mount
42
+ the definite full-height chain. It also lets native table cells and form controls
43
+ inherit the surrounding font metrics without removing table-header emphasis.
44
+ Put `.kui-app-root` on the one direct mount
33
45
  container only for a full-height shell; ordinary flowing pages can omit it. See
34
46
  [Document baseline](document-baseline.md).
35
47
 
@@ -86,6 +98,8 @@ keywords for width/height); and `SelectChoice.color` takes a
86
98
  role, or a `*-text` alias), from `foregroundColorVar()`, or from `foregroundColor()` via the `foregroundColor` helper for an application-chosen CSS color. `LucideIcon.color` accepts the same foreground type and otherwise inherits surrounding text color. The bare `success`,
87
99
  `warning`, `danger`, `pop`, and `accent` tokens are quiet fills, not
88
100
  foregrounds, and are rejected there; `colorVar()` returns a plain `CssColor`.
101
+ `LucideIcon` is block-level by default; set `inline` to let it flow inside
102
+ `Text` or other prose without changing its size or accessibility semantics.
89
103
  Do not substitute one brand for another. Row components
90
104
  have no declaration-string `style` prop; use `className`, documented public
91
105
  tokens, and semantic component props. Catalog media queries remain strings and
@@ -146,16 +160,16 @@ beside a `ContentItem` value, and connect its id to the preview group's
146
160
  | Application toolbar or heading — `Toolbar` | Leading identity, optional centered content, and trailing controls form one horizontal app bar or a page/panel/dialog heading. | Do not add bespoke heading geometry or a private wrapper; use the same zone contract everywhere. | Put identity/title text directly in a zone as `ToolbarText`; group controls and icon tiles in `ToolbarControlGroup`. | Actions, command availability, responsive relocation, state, and supporting copy below a heading. | `@kerfjs/ui/toolbar` | [Toolbar composition](../README.md#component-subpaths) |
147
161
  | Toolbar control cluster — `ToolbarControlGroup`, `ToolbarActionLink` | Related toolbar buttons, semantic links, compact/tight controls, avatar actions, or a dropdown trigger/menu surface need one configured chrome contract. | Do not use it merely to align unrelated controls. Do not restyle anchors or dropdown parts in application CSS; use `ToolbarActionLink`, `overflow`, and `menuInset`. Web Awesome `wa-button-group` is only for an exceptional grouped-action contract. | Delegate child actions; use `ToolbarActionLink` for native navigation, `overflow="scroll"` for bounded action rows, and `menuInset` for dropdown surface padding. Use `avatarImage` instead of inserting an `img`; use `SegmentedControl` for an exclusive choice. | Actions, destinations, pressed/expanded state, content, and policy. | `@kerfjs/ui/toolbar-control-group` | [Component ownership](./component-contract.md#ownership-boundaries) |
148
162
  | Floating controls over content — `FloatingToolbar` | A small cluster of controls (e.g. a drawer restore) must float over scrolling content — distinct and forced-dark — inside a positioned container. | Do not use it for a primary page or panel toolbar (use `Toolbar`), or for anything that must sit above dialogs/overlays — it is not top-layer. | Compose `ToolbarControlGroup`s and delegate their actions; the app owns visibility and position. | Controls, visibility, and position. | `@kerfjs/ui/floating-toolbar` | [Component subpaths](../README.md#component-subpaths) |
149
- | Toolbar identity text — `ToolbarText` | A toolbar needs extra-large (page/panel title), large, default, or compact textual identity. | Plain text is not a heading by default; when a title needs heading semantics pass `headingLevel`. Sizes below `xlarge` are intentionally quiet identity text with no tone option — do not use them as a normal-color subsection title; use `Text` with an `h2`–`h6` variant, or `ListHeader` for a list section. | Optional `headingLevel` for `role="heading"` + `aria-level`. Defaults to one line, ellipsized when it does not fit; `wrap` flows onto multiple lines, `ellipsis` toggles the trailing …, and `maxLines` caps a wrap. | Text, heading level, overflow behavior, and responsive priority. | `@kerfjs/ui/toolbar-text` | [Toolbar composition](../README.md#component-subpaths) |
163
+ | Toolbar identity text — `ToolbarText` | A toolbar needs extra-large (page/panel title), large, default, or compact textual identity. | Plain text is not a heading by default; when a title needs heading semantics pass `headingLevel`. Sizes below `xlarge` are intentionally quiet identity text in default tone — do not use them as a normal-color subsection title; use `Text` with an `h2`–`h6` variant, or `ListHeader` for a list section. | Optional `headingLevel` for `role="heading"` + `aria-level`. Defaults to one line, ellipsized when it does not fit; `wrap` flows onto multiple lines, `ellipsis` toggles the trailing …, and `maxLines` caps a wrap. | Text, heading level, overflow behavior, and responsive priority. | `@kerfjs/ui/toolbar-text` | [Toolbar composition](../README.md#component-subpaths) |
150
164
  | Semantic block or inline text — `Text` | Ordinary application copy needs native `h1`–`h6` or `p` semantics plus standard geometry, or inline secondary copy needs a native `span` without box geometry. | Do not choose heading levels for appearance alone or recreate muted, error, small, or code utility classes. Use `ToolbarText` for toolbar identity/title content and `ListInsetText` when list-aligned prose needs full margin/border/padding geometry. | Omit `variant` for the default `p`, choose `h1`–`h6` from the document outline, or choose `span` inside a row, label, or table cell. Independently compose `tone="quiet | danger"`, `size="compact"`, and `font="monospace"`; ordinary native global, `data-_`, and `aria-_` attributes pass through. | Copy, localization, semantic variant, presentation roles, and document heading hierarchy. | `@kerfjs/ui/text` | [Text](./layout.md#text) |
151
165
  | Vertical stack — `List` | Rows, sections, or arbitrary components need a consistent vertical stretch layout, optional standard/custom gap, flex growth, one vertical scroll owner, or edge dividers. | It is layout-only and does not provide `ul`/`ol` semantics. Do not nest scroll owners or use it when a horizontal layout is required. | Choose `gap`, `flex`, `scrollable`, and canonical `dividerSides` (`t`, `r`, `b`, `l` combinations in that order); bound the block size when scrolling. | Child semantics/content, containing height, and which optional layout behaviors apply. | `@kerfjs/ui/list` | [Pane geometry](../README.md#pane-and-content-geometry) |
152
- | Equal-width columns — `Grid` | Equal-width sibling columns need a fixed count or should collapse as their container narrows, while preserving equal tracks despite intrinsic child widths. | Do not use it for intrinsic, asymmetric, spanning, or masonry tracks; use application-owned CSS grid. Do not use it for a user-operable separator; use `ResizableRegion`. | Choose fixed `columns` or typed `minColumnWidth`, plus a typed `gap` and optional `flex`; responsive tracks preserve source order. | Child semantics/content, outer width, fixed count or minimum width, and typed gap/flex choices. | `@kerfjs/ui/grid` | [Grid](./layout.md#grid) |
166
+ | Equal-width columns — `Grid` | Equal-width sibling columns need a fixed count or should collapse as their container narrows, while preserving equal tracks despite intrinsic child widths. | Do not use it for intrinsic, asymmetric, spanning, or masonry tracks; use application-owned CSS grid. Do not use it for a user-operable separator; use `ResizableRegion`. | Choose fixed `columns` or typed `minColumnWidth`, plus typed `gap`, optional `flex`, and physical-side `textInsets` / `controlInsets` when the track group needs a standard text or control inset; text wins on overlap. | Child semantics/content, outer width, fixed count or minimum width, and typed gap/flex/inset choices. | `@kerfjs/ui/grid` | [Grid](./layout.md#grid) |
153
167
  | Navigation row — `ListItem` | A pane or navigation area needs a selectable, disabled, dormant-trailing, or multiline action row. | Do not put a control in `trailing`; use `ListActionRow` when the trailing region must be independently interactive. Use an `<a>` for navigation that must retain link behavior, a native `<button>` for an ordinary action, or implement the complete ARIA menu widget. | Delegate its `data-action`; compose inside a `.kui-content` section. Put domain event/drop metadata in `rootAttributes` rather than adding wrapper markup. The rounded root clips overflowing descendants; set `multiline` when the primary label should wrap. | Routing, selection, permissions, copy, action handling, and domain `data-*` values. | `@kerfjs/ui/list-item` | [Pane geometry](../README.md#pane-and-content-geometry) |
154
168
  | Navigation row with trailing action — `ListActionRow` | A full-width row needs a selectable primary action and an independently focusable trailing action. | Use `ListItem` when trailing content is dormant metadata. Do not put controls inside the row's `label`, `icon`, or `trailingActionIcon` SafeHtml slots. Do not use `AppTab` outside tablist semantics or `ToolbarControlGroup` outside a toolbar. | Delegate both action strings; update controlled selection and any popover/context-menu state in the app. | Routing, selection, both action policies, domain metadata, and popover/context-menu behavior. | `@kerfjs/ui/list-action-row` | [Accessibility](./accessibility.md#listactionrow) |
155
169
  | Navigation section heading — `ListHeader` | A menu section needs a full-width label, semantic count, non-count badge, logical-end action, or real disclosure state. | Do not concatenate counts into `label` or put numeric content in `badge`; use `count` with the localized full phrase in `countLabel`. Do not add a disclosure arrow to navigation that reveals nothing. Keep its 44px hit target; do not resize its 36px square. Do not use it as a page, panel, or dialog title; use a heading `Toolbar`. | Delegate its optional action; the app controls expanded state and revealed content. Toggle mode supplies `DisclosureArrow` unless `actionIcon` replaces it. Use `triggerAttributes` only for domain `data-*` or a native popover relationship. | Section organization, valid count and localized count label, disclosure state and content, non-count badge content, popover target behavior, and policy. | `@kerfjs/ui/list-header` | [Pane geometry](../README.md#pane-and-content-geometry) |
156
170
  | Inset self-bordered control — `ListInsetControl` | A control that owns its own border and padding but no outer margin (a search input, a `SegmentedControl`) must line up inside a `.kui-content` list with the standard 8px inline margins and stretch to fill the row. | Do not wrap a `.kui-content-item` or a `ListItem`/`ListHeader` that already owns its inline margin — that double-insets it. Do not add ad-hoc `margin`/`padding` around a bare control to align it; use this instead. | Place the self-bordered control(s) as children; they stretch to fill. It applies only the inline margin, flex stretch, and 8px gap — the child owns its own border and padding. | The control(s), their state, and action wiring. | `@kerfjs/ui/list-inset-control` | [Pane geometry](../README.md#component-subpaths) |
157
171
  | Inset bare text — `ListInsetText` | A plain string or inline content with no margin, border, or padding of its own must sit in a `.kui-content` list with its text edge aligned to the bordered items around it. | Do not use it to wrap a component that already owns content-item geometry (`ListItem`, `StateBanner`, a `.kui-content-item`) — that double-insets it. Do not hand-roll the 8px margin / 1px border / 8px padding. | Pass the text or inline `SafeHtml` as children; it supplies the 8px inline margin, 1px transparent border, and 8px padding so the text edge lands at the standard 17px inset. Pass `sides="rl"` to keep that horizontal inset but drop the vertical margin, border, and padding for tight text layout. | The text, copy, and localization. | `@kerfjs/ui/list-inset-text` | [Pane geometry](../README.md#component-subpaths) |
158
- | Self-contained content child — `ContentItem` | An ordinary surface-like child of a `Pane` or `.kui-content` stack needs the shared 8px margin / 1px border / 8px padding geometry; pass `frame="framed"` only when it marks a real distinction and must read as visibly bounded, and `shape="pill"` for the 22px radius. | Do not wrap a component that already owns content-item geometry (`ListItem`, `ListHeader`, `StateBanner`, `Toolbar`, `ValueTable`) or pad around it — that double-insets. Do not frame an item only to make it look contained. Use `SunkenPanel` for a lowered filled surface and `ListInsetText` for bare text that only needs to align. | Pass the item content as children; choose `frame` (`none` default, `framed`) and `shape` (`rounded` default, `pill`) instead of writing `.kui-content-item` modifier classes. Put safe `data-*` metadata in `rootAttributes`; `ariaLabel` names a distinct region and `focusTarget` makes it a programmatic focus target. | The content and whether it marks a distinction worth a visible frame. | `@kerfjs/ui/content-item` | [Content items](./layout.md#content-items) |
172
+ | Self-contained content child — `ContentItem` | An ordinary surface-like child of a `Pane` or `.kui-content` stack needs the shared 8px margin / 1px border / 8px padding geometry; pass `frame="framed"` only when it marks a real distinction, `appearance="surface"` or a semantic appearance for coordinated surface colors, and `shape="pill"` for the 22px radius. | Do not wrap a component that already owns content-item geometry (`ListItem`, `ListHeader`, `StateBanner`, `Toolbar`, `ValueTable`) or pad around it — that double-insets. Do not frame an item only to make it look contained. Use `SunkenPanel` for a lowered inset stack and `ListInsetText` for bare text that only needs to align. | Pass the item content as children; choose `appearance` (`transparent` default, `surface`, or a semantic status), `frame`, and `shape` instead of writing CSS. Put safe `data-*` metadata in `rootAttributes`; `ariaLabel` names a distinct region and `focusTarget` makes it a programmatic focus target. | The content, surface or status appearance, and whether it marks a distinction worth a visible frame. | `@kerfjs/ui/content-item` | [Content items](./layout.md#content-items) |
159
173
  | Application column — `Pane` | A sidebar, main area, inspector, or dialog needs shared vertical header/content/footer organization, one scroll owner, and optional edge separators. | Do not pad the pane shell, wrap child-owned geometry in competing insets, invent unrelated centered measures, or leave an icon-only rail for a hidden pane. | Import `Pane`, use `children` for its homogeneous primary content and the named `SafeHtml` prop slots `header`/`footer` for optional fixed chrome, then opt into only the needed logical-edge separators; add `ContentItem` children as needed. A visible pane owns collapse in its toolbar; move a hidden inline-start pane's restore control to the main toolbar leading edge and an inline-end pane's restore control to its trailing edge. | Layout hierarchy, reading width, responsive relocation, pane visibility state, slot semantics, labels, and separator placement. | `@kerfjs/ui/pane` | [Pane anatomy](./layout.md#anatomy) |
160
174
  | Scroll dividers — `wireScrollDividers` | Pinned chrome (a `Pane` header or footer, a `NavStack` top chrome or bottom toolbar, a `TabScaffold` bar, the sides of a `TabBar` strip, or app-owned chrome around a scroller) needs a divider only while content is scrolled away beneath it. | Do not keep a static toolbar divider to fake it or write a border onto another component; each component draws its own line from the wiring's state. | Call `wireScrollDividers` once at the app root and retain the disposer; it covers every `Pane`, `NavStack`, `TabScaffold`, and `TabBar` below it. Name app-owned arrangements in `targets` by id; a `Toolbar` or `List` named as chrome draws its facing side. Configure a pane with `chromeDividers` (`scroll` default, `always`, `none`). | Which panes follow the scroll, app-owned targets, and the disposer. | `@kerfjs/ui/wire-scroll-dividers` | [Scroll dividers](./layout.md#scroll-dividers) |
161
175
  | One-pane navigation — `NavStack` | A compact flow pushes into details while keeping earlier views mounted, or a single-pane screen needs the same stable layout contract. | Do not use it when list and detail should remain visible together; use `SplitView`. Do not use it alone for co-equal top-level destinations; use one stack per `TabScaffold` tab. | Keep the ordered view array controlled, put view-specific bottom chrome on each view (or use the component fallback), import its CSS explicitly, and call `wireNavStack` for back delegation, content-slide/chrome-cross-fade transitions, and focus move/restore. Mark a preferred initial target with `data-nav-focus` when DOM order is insufficient. | View keys/content/titles, push and pop actions, preferred initial focus targets, and per-view or persistent bottom toolbar content. | `@kerfjs/ui/nav-stack` | [App-layout decision matrix](./app-layouts.md#decision-matrix) |
@@ -379,8 +393,14 @@ When the expanded toolbar field has focus, its inset surface uses
379
393
  `--kui-token-search-background` or the default surface color if that token is
380
394
  unset.
381
395
 
396
+ `ToolbarControlGroup.tileTone` selects `neutral`, `brand`, `success`, `warning`, or `danger` quiet fill, matching quiet border, and on-quiet foreground for a non-interactive icon tile. Compose a contained `single` group whose only child is a direct decorative LucideIcon (`aria-hidden="true"`). Omission preserves the normal group palette. The prop does not recolor interactive, mixed, multi-control, or borderless groups; keep real actions in controls with their existing focus/hover/pressed treatments.
397
+
382
398
  ## Toolbar composition
383
399
 
400
+ Use `ToolbarText tone="dark"` on a loud or photo-backed toolbar surface to
401
+ match dark control groups. It applies to read-only headings and actionable
402
+ titles at every size; default tone retains existing identity and heading colors.
403
+
384
404
  A `FloatingToolbar` accepts `ToolbarControlGroup` directly as its children in
385
405
  both floating and inline placement. Name the toolbar with `label`; group its
386
406
  controls as you would in a `Toolbar` zone.
@@ -445,6 +465,29 @@ the control's dimensions, shows `LoadingSpinner` in its icon slot, sets
445
465
  | A command menu | `<ToolbarControlGroup single nestedDropdown><PopupMenu … /></ToolbarControlGroup>` | Register `@kerfjs/ui/popup-menu/register` once; set `menuInset` on the group |
446
466
  | A collapsible search box | `<ToolbarControlGroup single><TokenSearchField collapsible … /></ToolbarControlGroup>` | The group animates the iconic ↔ expanded states; `wireTokenSearchFields` manages expand/collapse/focus by default |
447
467
 
468
+ ### Application surfaces below search
469
+
470
+ Pass `expandedOverflow="visible"` to `ToolbarControlGroup content="search"`
471
+ when an application-owned suggestion list, date picker, or help surface extends
472
+ below it. The group is the positioning containing block, retains auto height,
473
+ and permits overflow only while `expanded` is true. Omission or `"clip"` keeps
474
+ existing behavior, including Kerf's built-in suggestions. Other content modes
475
+ and collapsed searches keep their existing overflow rules.
476
+
477
+ ```tsx
478
+ <ToolbarControlGroup content="search" expanded={open} expandedOverflow="visible">
479
+ <TokenSearchField id="ticket-search" label="Search tickets" presentation="toolbar-group" collapsible expanded={open} />
480
+ {open ? <AppDatePicker data-token-search-keep-open /> : null}
481
+ </ToolbarControlGroup>
482
+ ```
483
+
484
+ The application owns placement (for example absolute positioning below the
485
+ group), stacking, dismissal, and hiding/removing its surface on collapse. Mark
486
+ focusable floating content `data-token-search-keep-open`, or configure
487
+ `collapsible.keepOpenOn`, to keep an empty field open when focus enters it.
488
+ This prop does not escape clipping imposed by an ancestor or create a top-layer
489
+ popover. Do not override the group's position, height, or overflow in app CSS.
490
+
448
491
  ### Popup menu migration
449
492
 
450
493
  A **popup menu in a toolbar** is a `PopupMenu` (`@kerfjs/ui/popup-menu`) in a
@@ -593,7 +636,7 @@ requires a string label so the title cannot lose text hidden inside markup.
593
636
  ```tsx
594
637
  <Chip
595
638
  size="compact"
596
- tone="brand"
639
+ tone="info"
597
640
  itemId={tag.id}
598
641
  removeAction="remove-tag"
599
642
  removeLabel={`Remove ${tag.name} tag`}
@@ -631,3 +674,28 @@ replaces it (`PopupMenu` renders `wa-dropdown`; `Select` renders `wa-select` /
631
674
 
632
675
  All other entries in the [Web Awesome theme contract](./webawesome-theme.md#coverage)
633
676
  remain supported when their native semantic contract matches the product need.
677
+
678
+ ### Toolbar width visibility
679
+
680
+ `ToolbarText` and `ToolbarControlGroup` accept typed `hideBelow` and
681
+ `showBelow` CSS lengths. Call `wireToolbarVisibility` with the application root from
682
+ `@kerfjs/ui/wire-toolbar-visibility` after mounting, and call its disposer when
683
+ the application unmounts. The nearest Toolbar's **content-box width**, excluding
684
+ padding, borders, and safe-area insets, determines visibility. `hideBelow={px(416)}`
685
+ hides strictly below 416px; `showBelow={px(416)}` shows strictly below 416px. At
686
+ 416px the first is visible and the second hidden. Together they define the visible
687
+ interval `[hideBelow, showBelow)`. Width rules intersect existing visibility and
688
+ expanded-state rules; they never force a CSS-hidden group visible.
689
+
690
+ Use `px`, `rem`, `em`, `pct`, `space`, `lengthVar`, or `calc`/`plus` to construct
691
+ lengths. Percentages resolve against that content box, `em` uses the child item's
692
+ font size, and custom properties use its inherited and own token context. The
693
+ helper follows resizes, theme/token/font changes, inserted items, nested toolbars,
694
+ and relocated groups. Invalid, unresolved, negative, or contradictory thresholds
695
+ leave the item visible under this width policy. Server-rendered content is visible
696
+ until wiring runs; without browser observers, initial wiring and window resize
697
+ still update it. Dispose to remove measurement probes and restore prior markers.
698
+
699
+ Hidden controls leave layout and keyboard navigation. A hidden busy group also
700
+ hides only its own adjacent busy status. Keep primary actions always available;
701
+ show a complementary overflow group for secondary actions at narrow widths.
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 190" width="460" height="190"><defs><clipPath id="cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(174, 174, 178)"><clipPath id="svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(174,174,178)">No tickets match the current filters.</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 190" width="460" height="190"><defs><clipPath id="cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(194, 194, 198)"><clipPath id="svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(194,194,198)">No tickets match the current filters.</text></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 190" width="460" height="190"><defs><clipPath id="cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(110, 110, 115)"><clipPath id="svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(110,110,115)">No tickets match the current filters.</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 190" width="460" height="190"><defs><clipPath id="cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(98, 98, 103)"><clipPath id="svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(98,98,103)">No tickets match the current filters.</text></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 220" width="460" height="220"><defs><clipPath id="cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(174, 174, 178)"><clipPath id="svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(174,174,178)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(44,44,46)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">New ticket</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 220" width="460" height="220"><defs><clipPath id="cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(194, 194, 198)"><clipPath id="svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(194,194,198)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(44,44,46)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">New ticket</text></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 220" width="460" height="220"><defs><clipPath id="cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(110, 110, 115)"><clipPath id="svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(110,110,115)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(255,255,255)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">New ticket</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 220" width="460" height="220"><defs><clipPath id="cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g color="rgb(98, 98, 103)"><clipPath id="svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(98,98,103)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(255,255,255)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">New ticket</text></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 502" width="492" height="502"><defs><clipPath id="cp0"><rect x="16" y="38" width="460" height="220"/></clipPath><clipPath id="cp1"><rect x="16" y="296" width="460" height="190"/></clipPath><clipPath id="ct2"><rect x="16" y="16" width="460" height="22"/></clipPath><clipPath id="irc3"><rect x="16" y="38" width="460" height="220" rx="0"/></clipPath><clipPath id="ct5"><rect x="16" y="274" width="460" height="22"/></clipPath><clipPath id="irc6"><rect x="16" y="296" width="460" height="190" rx="0"/></clipPath></defs><rect x="0" y="0" width="492" height="502" rx="0" fill="rgb(28,28,30)"/><text x="16" y="28" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(174,174,178)">Icon, title, detail, and action</text><g clip-path="url(#cp0)"><g clip-path="url(#irc3)"><clipPath id="svgimg4vclip"><rect x="16" y="38" width="460" height="220"/></clipPath><g clip-path="url(#svgimg4vclip)"><g transform="translate(16 38)"><defs><clipPath id="svgimg4cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="svgimg4ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="svgimg4ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="svgimg4ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg4cp0)"><g color="rgb(174, 174, 178)"><clipPath id="svgimg4svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgimg4svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(174,174,178)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(44,44,46)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">New ticket</text></g></g></g></g><text x="16" y="286" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(174,174,178)">No results for a filter</text><g clip-path="url(#cp1)"><g clip-path="url(#irc6)"><clipPath id="svgimg7vclip"><rect x="16" y="296" width="460" height="190"/></clipPath><g clip-path="url(#svgimg7vclip)"><g transform="translate(16 296)"><defs><clipPath id="svgimg7cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="svgimg7ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="svgimg7ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg7cp0)"><g color="rgb(174, 174, 178)"><clipPath id="svgimg7svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgimg7svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(174, 174, 178)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(174,174,178)">No tickets match the current filters.</text></g></g></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 502" width="492" height="502"><defs><clipPath id="cp0"><rect x="16" y="38" width="460" height="220"/></clipPath><clipPath id="cp1"><rect x="16" y="296" width="460" height="190"/></clipPath><clipPath id="ct2"><rect x="16" y="16" width="460" height="22"/></clipPath><clipPath id="irc3"><rect x="16" y="38" width="460" height="220" rx="0"/></clipPath><clipPath id="ct5"><rect x="16" y="274" width="460" height="22"/></clipPath><clipPath id="irc6"><rect x="16" y="296" width="460" height="190" rx="0"/></clipPath></defs><rect x="0" y="0" width="492" height="502" rx="0" fill="rgb(28,28,30)"/><text x="16" y="28" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(174,174,178)">Icon, title, detail, and action</text><g clip-path="url(#cp0)"><g clip-path="url(#irc3)"><clipPath id="svgimg4vclip"><rect x="16" y="38" width="460" height="220"/></clipPath><g clip-path="url(#svgimg4vclip)"><g transform="translate(16 38)"><defs><clipPath id="svgimg4cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="svgimg4ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="svgimg4ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="svgimg4ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg4cp0)"><g color="rgb(194, 194, 198)"><clipPath id="svgimg4svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgimg4svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(194,194,198)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(44,44,46)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">New ticket</text></g></g></g></g><text x="16" y="286" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(174,174,178)">No results for a filter</text><g clip-path="url(#cp1)"><g clip-path="url(#irc6)"><clipPath id="svgimg7vclip"><rect x="16" y="296" width="460" height="190"/></clipPath><g clip-path="url(#svgimg7vclip)"><g transform="translate(16 296)"><defs><clipPath id="svgimg7cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="svgimg7ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="svgimg7ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg7cp0)"><g color="rgb(194, 194, 198)"><clipPath id="svgimg7svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgimg7svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(194, 194, 198)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(245,245,247)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(194,194,198)">No tickets match the current filters.</text></g></g></g></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 502" width="492" height="502"><defs><clipPath id="cp0"><rect x="16" y="38" width="460" height="220"/></clipPath><clipPath id="cp1"><rect x="16" y="296" width="460" height="190"/></clipPath><clipPath id="ct2"><rect x="16" y="16" width="460" height="22"/></clipPath><clipPath id="irc3"><rect x="16" y="38" width="460" height="220" rx="0"/></clipPath><clipPath id="ct5"><rect x="16" y="274" width="460" height="22"/></clipPath><clipPath id="irc6"><rect x="16" y="296" width="460" height="190" rx="0"/></clipPath></defs><rect x="0" y="0" width="492" height="502" rx="0" fill="rgb(255,255,255)"/><text x="16" y="28" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(110,110,115)">Icon, title, detail, and action</text><g clip-path="url(#cp0)"><g clip-path="url(#irc3)"><clipPath id="svgimg4vclip"><rect x="16" y="38" width="460" height="220"/></clipPath><g clip-path="url(#svgimg4vclip)"><g transform="translate(16 38)"><defs><clipPath id="svgimg4cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="svgimg4ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="svgimg4ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="svgimg4ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg4cp0)"><g color="rgb(110, 110, 115)"><clipPath id="svgimg4svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgimg4svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(110,110,115)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(255,255,255)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">New ticket</text></g></g></g></g><text x="16" y="286" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(110,110,115)">No results for a filter</text><g clip-path="url(#cp1)"><g clip-path="url(#irc6)"><clipPath id="svgimg7vclip"><rect x="16" y="296" width="460" height="190"/></clipPath><g clip-path="url(#svgimg7vclip)"><g transform="translate(16 296)"><defs><clipPath id="svgimg7cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="svgimg7ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="svgimg7ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg7cp0)"><g color="rgb(110, 110, 115)"><clipPath id="svgimg7svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgimg7svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(110, 110, 115)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(110,110,115)">No tickets match the current filters.</text></g></g></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 502" width="492" height="502"><defs><clipPath id="cp0"><rect x="16" y="38" width="460" height="220"/></clipPath><clipPath id="cp1"><rect x="16" y="296" width="460" height="190"/></clipPath><clipPath id="ct2"><rect x="16" y="16" width="460" height="22"/></clipPath><clipPath id="irc3"><rect x="16" y="38" width="460" height="220" rx="0"/></clipPath><clipPath id="ct5"><rect x="16" y="274" width="460" height="22"/></clipPath><clipPath id="irc6"><rect x="16" y="296" width="460" height="190" rx="0"/></clipPath></defs><rect x="0" y="0" width="492" height="502" rx="0" fill="rgb(255,255,255)"/><text x="16" y="28" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(110,110,115)">Icon, title, detail, and action</text><g clip-path="url(#cp0)"><g clip-path="url(#irc3)"><clipPath id="svgimg4vclip"><rect x="16" y="38" width="460" height="220"/></clipPath><g clip-path="url(#svgimg4vclip)"><g transform="translate(16 38)"><defs><clipPath id="svgimg4cp0"><rect x="214" y="53" width="32" height="32"/></clipPath><clipPath id="svgimg4ct2"><rect x="157.7" y="101" width="144.7" height="23"/></clipPath><clipPath id="svgimg4ct3"><rect x="73.7" y="132" width="312.7" height="20.3"/></clipPath><clipPath id="svgimg4ct4"><rect x="179.6" y="168.3" width="100.8" height="32"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="212" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg4cp0)"><g color="rgb(98, 98, 103)"><clipPath id="svgimg4svgic1"><rect x="214" y="53" width="32" height="32"/></clipPath><g clip-path="url(#svgimg4svgic1)"><g transform="translate(214 53)scale(1.33333)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="157.67" y="120" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No open tickets</text><text x="73.67" y="147" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(98,98,103)">When someone files a ticket it will show up here.</text><rect x="179.6" y="168.3" width="100.8" height="32" rx="16" fill="rgb(255,255,255)"/><text x="191.63" y="190.3" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">New ticket</text></g></g></g></g><text x="16" y="286" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="600" fill="rgb(110,110,115)">No results for a filter</text><g clip-path="url(#cp1)"><g clip-path="url(#irc6)"><clipPath id="svgimg7vclip"><rect x="16" y="296" width="460" height="190"/></clipPath><g clip-path="url(#svgimg7vclip)"><g transform="translate(16 296)"><defs><clipPath id="svgimg7cp0"><rect x="214" y="66" width="32" height="32.3"/></clipPath><clipPath id="svgimg7ct2"><rect x="174.4" y="114.3" width="111.2" height="23"/></clipPath><clipPath id="svgimg7ct3"><rect x="115.7" y="145.3" width="228.6" height="20.3"/></clipPath></defs><rect x="28.5" y="20.5" width="403" height="191" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#svgimg7cp0)"><g color="rgb(98, 98, 103)"><clipPath id="svgimg7svgic1"><rect x="214" y="66.3" width="32" height="32"/></clipPath><g clip-path="url(#svgimg7svgic1)"><g transform="translate(214 66.344)scale(1.33333)"><path d="M10 20a1 1 0 0 0 .6.9l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .5-1.3l7.2-8A1 1 0 0 0 21 3H3a1 1 0 0 0-.7 1.7l7.2 8A2 2 0 0 1 10 14Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(98, 98, 103)" stroke-width="1.5px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><text x="174.42" y="133.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="20" font-weight="650" fill="rgb(29,29,31)">No matches</text><text x="115.72" y="160.34" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="14" fill="rgb(98,98,103)">No tickets match the current filters.</text></g></g></g></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 230" width="420" height="230"><defs><clipPath id="cp0"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct1"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct2"><rect x="134.8" y="32" width="20.3" height="20"/></clipPath><clipPath id="cp3"><rect x="28" y="72" width="324" height="44"/></clipPath><clipPath id="ov4"><rect x="29" y="73" width="322" height="42" rx="11"/></clipPath><clipPath id="cp5"><rect x="37" y="85" width="18" height="18"/></clipPath><clipPath id="cp7"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ov8"><rect x="63" y="85" width="272" height="18" rx="0"/></clipPath><clipPath id="cp9"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ct10"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="cp11"><rect x="28" y="124" width="324" height="44"/></clipPath><clipPath id="ov12"><rect x="29" y="125" width="322" height="42" rx="11"/></clipPath><clipPath id="cp13"><rect x="37" y="137" width="18" height="18"/></clipPath><clipPath id="cp15"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ov16"><rect x="63" y="137" width="272" height="18" rx="0"/></clipPath><clipPath id="cp17"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ct18"><rect x="63" y="137" width="272" height="18"/></clipPath></defs><rect x="28.5" y="20.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g clip-path="url(#ct1)"><text x="37" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="650" fill="rgb(174,174,178)">WORKSPACE</text></g></g><rect x="134.8" y="32" width="20.3" height="20" rx="10" fill="rgb(17,17,19)"/><rect x="135.5" y="32.5" width="19" height="19" rx="9.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><text x="141.41" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="11" font-weight="650" fill="rgb(174,174,178)">2</text><g clip-path="url(#cp3)"><rect x="28" y="72" width="324" height="44" rx="12" fill="rgb(40,57,66)"/><rect x="28.5" y="72.5" width="323" height="43" rx="11.5" fill="none" stroke="rgb(53,92,109)" stroke-width="1"/><g clip-path="url(#ov4)"><g clip-path="url(#cp5)"><g color="rgb(245, 245, 247)"><clipPath id="svgic6"><rect x="37" y="85" width="18" height="18"/></clipPath><g clip-path="url(#svgic6)"><g transform="matrix(.75 0 0 .75 37 85)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp7)"><g clip-path="url(#ov8)"><g clip-path="url(#cp9)"><g clip-path="url(#ct10)"><text x="63" y="100" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" font-weight="650" fill="rgb(245,245,247)">Inbox</text></g></g></g></g></g></g><g clip-path="url(#cp11)"><rect x="28.5" y="124.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#ov12)"><g clip-path="url(#cp13)"><g color="rgb(245, 245, 247)"><clipPath id="svgic14"><rect x="37" y="137" width="18" height="18"/></clipPath><g clip-path="url(#svgic14)"><g transform="matrix(.75 0 0 .75 37 137)"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp15)"><g clip-path="url(#ov16)"><g clip-path="url(#cp17)"><g clip-path="url(#ct18)"><text x="63" y="152" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">Projects</text></g></g></g></g></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 230" width="420" height="230"><defs><clipPath id="cp0"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct1"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct2"><rect x="134.8" y="32" width="20.3" height="20"/></clipPath><clipPath id="cp3"><rect x="28" y="72" width="324" height="44"/></clipPath><clipPath id="ov4"><rect x="29" y="73" width="322" height="42" rx="11"/></clipPath><clipPath id="cp5"><rect x="37" y="85" width="18" height="18"/></clipPath><clipPath id="cp7"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ov8"><rect x="63" y="85" width="272" height="18" rx="0"/></clipPath><clipPath id="cp9"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ct10"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="cp11"><rect x="28" y="124" width="324" height="44"/></clipPath><clipPath id="ov12"><rect x="29" y="125" width="322" height="42" rx="11"/></clipPath><clipPath id="cp13"><rect x="37" y="137" width="18" height="18"/></clipPath><clipPath id="cp15"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ov16"><rect x="63" y="137" width="272" height="18" rx="0"/></clipPath><clipPath id="cp17"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ct18"><rect x="63" y="137" width="272" height="18"/></clipPath></defs><rect x="28.5" y="20.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g clip-path="url(#ct1)"><text x="37" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="650" fill="rgb(194,194,198)">WORKSPACE</text></g></g><rect x="134.8" y="32" width="20.3" height="20" rx="10" fill="rgba(228,228,255,0.075)"/><rect x="135.5" y="32.5" width="19" height="19" rx="9.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><text x="141.41" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="11" font-weight="650" fill="rgb(194,194,198)">2</text><g clip-path="url(#cp3)"><rect x="28" y="72" width="324" height="44" rx="12" fill="rgb(40,57,66)"/><rect x="28.5" y="72.5" width="323" height="43" rx="11.5" fill="none" stroke="rgb(53,92,109)" stroke-width="1"/><g clip-path="url(#ov4)"><g clip-path="url(#cp5)"><g color="rgb(245, 245, 247)"><clipPath id="svgic6"><rect x="37" y="85" width="18" height="18"/></clipPath><g clip-path="url(#svgic6)"><g transform="matrix(.75 0 0 .75 37 85)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp7)"><g clip-path="url(#ov8)"><g clip-path="url(#cp9)"><g clip-path="url(#ct10)"><text x="63" y="100" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" font-weight="650" fill="rgb(245,245,247)">Inbox</text></g></g></g></g></g></g><g clip-path="url(#cp11)"><rect x="28.5" y="124.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#ov12)"><g clip-path="url(#cp13)"><g color="rgb(245, 245, 247)"><clipPath id="svgic14"><rect x="37" y="137" width="18" height="18"/></clipPath><g clip-path="url(#svgic14)"><g transform="matrix(.75 0 0 .75 37 137)"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(245, 245, 247)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp15)"><g clip-path="url(#ov16)"><g clip-path="url(#cp17)"><g clip-path="url(#ct18)"><text x="63" y="152" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(245,245,247)">Projects</text></g></g></g></g></g></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 230" width="420" height="230"><defs><clipPath id="cp0"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct1"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct2"><rect x="134.8" y="32" width="20.3" height="20"/></clipPath><clipPath id="cp3"><rect x="28" y="72" width="324" height="44"/></clipPath><clipPath id="ov4"><rect x="29" y="73" width="322" height="42" rx="11"/></clipPath><clipPath id="cp5"><rect x="37" y="85" width="18" height="18"/></clipPath><clipPath id="cp7"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ov8"><rect x="63" y="85" width="272" height="18" rx="0"/></clipPath><clipPath id="cp9"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ct10"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="cp11"><rect x="28" y="124" width="324" height="44"/></clipPath><clipPath id="ov12"><rect x="29" y="125" width="322" height="42" rx="11"/></clipPath><clipPath id="cp13"><rect x="37" y="137" width="18" height="18"/></clipPath><clipPath id="cp15"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ov16"><rect x="63" y="137" width="272" height="18" rx="0"/></clipPath><clipPath id="cp17"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ct18"><rect x="63" y="137" width="272" height="18"/></clipPath></defs><rect x="28.5" y="20.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g clip-path="url(#ct1)"><text x="37" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="650" fill="rgb(110,110,115)">WORKSPACE</text></g></g><rect x="134.8" y="32" width="20.3" height="20" rx="10" fill="rgb(242,242,247)"/><rect x="135.5" y="32.5" width="19" height="19" rx="9.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><text x="141.41" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="11" font-weight="650" fill="rgb(110,110,115)">2</text><g clip-path="url(#cp3)"><rect x="28" y="72" width="324" height="44" rx="12" fill="rgb(214,233,249)"/><rect x="28.5" y="72.5" width="323" height="43" rx="11.5" fill="none" stroke="rgb(166,207,242)" stroke-width="1"/><g clip-path="url(#ov4)"><g clip-path="url(#cp5)"><g color="rgb(29, 29, 31)"><clipPath id="svgic6"><rect x="37" y="85" width="18" height="18"/></clipPath><g clip-path="url(#svgic6)"><g transform="matrix(.75 0 0 .75 37 85)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp7)"><g clip-path="url(#ov8)"><g clip-path="url(#cp9)"><g clip-path="url(#ct10)"><text x="63" y="100" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" font-weight="650" fill="rgb(29,29,31)">Inbox</text></g></g></g></g></g></g><g clip-path="url(#cp11)"><rect x="28.5" y="124.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#ov12)"><g clip-path="url(#cp13)"><g color="rgb(29, 29, 31)"><clipPath id="svgic14"><rect x="37" y="137" width="18" height="18"/></clipPath><g clip-path="url(#svgic14)"><g transform="matrix(.75 0 0 .75 37 137)"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp15)"><g clip-path="url(#ov16)"><g clip-path="url(#cp17)"><g clip-path="url(#ct18)"><text x="63" y="152" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">Projects</text></g></g></g></g></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 230" width="420" height="230"><defs><clipPath id="cp0"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct1"><rect x="29" y="26.5" width="97.8" height="31"/></clipPath><clipPath id="ct2"><rect x="134.8" y="32" width="20.3" height="20"/></clipPath><clipPath id="cp3"><rect x="28" y="72" width="324" height="44"/></clipPath><clipPath id="ov4"><rect x="29" y="73" width="322" height="42" rx="11"/></clipPath><clipPath id="cp5"><rect x="37" y="85" width="18" height="18"/></clipPath><clipPath id="cp7"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ov8"><rect x="63" y="85" width="272" height="18" rx="0"/></clipPath><clipPath id="cp9"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="ct10"><rect x="63" y="85" width="272" height="18"/></clipPath><clipPath id="cp11"><rect x="28" y="124" width="324" height="44"/></clipPath><clipPath id="ov12"><rect x="29" y="125" width="322" height="42" rx="11"/></clipPath><clipPath id="cp13"><rect x="37" y="137" width="18" height="18"/></clipPath><clipPath id="cp15"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ov16"><rect x="63" y="137" width="272" height="18" rx="0"/></clipPath><clipPath id="cp17"><rect x="63" y="137" width="272" height="18"/></clipPath><clipPath id="ct18"><rect x="63" y="137" width="272" height="18"/></clipPath></defs><rect x="28.5" y="20.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#cp0)"><g clip-path="url(#ct1)"><text x="37" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="12" font-weight="650" fill="rgb(98,98,103)">WORKSPACE</text></g></g><rect x="134.8" y="32" width="20.3" height="20" rx="10" fill="rgba(0,0,98,0.05)"/><rect x="135.5" y="32.5" width="19" height="19" rx="9.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><text x="141.41" y="46.5" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="11" font-weight="650" fill="rgb(98,98,103)">2</text><g clip-path="url(#cp3)"><rect x="28" y="72" width="324" height="44" rx="12" fill="rgb(214,233,249)"/><rect x="28.5" y="72.5" width="323" height="43" rx="11.5" fill="none" stroke="rgb(166,207,242)" stroke-width="1"/><g clip-path="url(#ov4)"><g clip-path="url(#cp5)"><g color="rgb(29, 29, 31)"><clipPath id="svgic6"><rect x="37" y="85" width="18" height="18"/></clipPath><g clip-path="url(#svgic6)"><g transform="matrix(.75 0 0 .75 37 85)"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/><path d="M5.5 5.1 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.4-6.9A2 2 0 0 0 16.8 4H7.2a2 2 0 0 0-1.7 1.1" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp7)"><g clip-path="url(#ov8)"><g clip-path="url(#cp9)"><g clip-path="url(#ct10)"><text x="63" y="100" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" font-weight="650" fill="rgb(29,29,31)">Inbox</text></g></g></g></g></g></g><g clip-path="url(#cp11)"><rect x="28.5" y="124.5" width="323" height="43" rx="11.5" fill="none" stroke="rgba(0,0,0,0)" stroke-width="1"/><g clip-path="url(#ov12)"><g clip-path="url(#cp13)"><g color="rgb(29, 29, 31)"><clipPath id="svgic14"><rect x="37" y="137" width="18" height="18"/></clipPath><g clip-path="url(#svgic14)"><g transform="matrix(.75 0 0 .75 37 137)"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" style="marker:none;vector-effect:none;color-interpolation:srgb" fill="none" stroke="rgb(29, 29, 31)" stroke-width="2px" stroke-dasharray="none" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="1" fill-opacity="1" opacity="1"/></g></g></g></g><g clip-path="url(#cp15)"><g clip-path="url(#ov16)"><g clip-path="url(#cp17)"><g clip-path="url(#ct18)"><text x="63" y="152" font-family="system-ui, &quot;-apple-system&quot;, sans-serif" font-size="16" fill="rgb(29,29,31)">Projects</text></g></g></g></g></g></g></svg>