@crewlethq/ui 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/README.md +149 -5
  2. package/dist/AccessDeniedCard/AccessDeniedCard.d.ts +5 -0
  3. package/dist/AccessDeniedCard/index.js +1 -5
  4. package/dist/AccessDeniedCard-QVNDMT46.css +8 -0
  5. package/dist/AppShell/index.js +4 -4
  6. package/dist/{AppShell-GCM4TDVY.css → AppShell-JTSEOA57.css} +3 -1
  7. package/dist/ArrangeGroup/ArrangeGroup.d.ts +16 -1
  8. package/dist/ArrangeGroup/index.d.ts +1 -1
  9. package/dist/ArrangeGroup/index.js +1 -1
  10. package/dist/{ArrangeGroup-GY5YMP6E.css → ArrangeGroup-KRWWOJKR.css} +43 -0
  11. package/dist/ArrangeList/index.js +2 -2
  12. package/dist/ArtifactBar/index.js +14 -12
  13. package/dist/{ArtifactBar-MLMJHWY6.css → ArtifactBar-C462VD4C.css} +8 -3
  14. package/dist/ArtifactCard/ArtifactCard.d.ts +64 -6
  15. package/dist/ArtifactCard/index.d.ts +2 -2
  16. package/dist/ArtifactCard/index.js +6 -4
  17. package/dist/ArtifactCard-XHRLAL7C.css +289 -0
  18. package/dist/ArtifactCover/index.js +8 -6
  19. package/dist/ArtifactIcon/index.js +7 -5
  20. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +53 -0
  21. package/dist/ArtifactKindIllustration/index.d.ts +3 -0
  22. package/dist/ArtifactKindIllustration/index.js +3 -0
  23. package/dist/ArtifactKindIllustration-4NG6IE3C.css +211 -0
  24. package/dist/ArtifactPanel/ArtifactPanel.d.ts +6 -2
  25. package/dist/ArtifactPanel/index.js +1 -1
  26. package/dist/{ArtifactPanel-YFXT5O77.css → ArtifactPanel-HW3SU7CP.css} +25 -7
  27. package/dist/Avatar/Avatar.d.ts +6 -4
  28. package/dist/Avatar/index.js +2 -2
  29. package/dist/AvatarPicker/index.js +8 -8
  30. package/dist/Callout/index.js +1 -1
  31. package/dist/{Callout-SXXK4B5R.css → Callout-ZAVG3P66.css} +46 -6
  32. package/dist/Canvas/Canvas.d.ts +33 -2
  33. package/dist/Canvas/index.d.ts +1 -1
  34. package/dist/Canvas/index.js +4 -4
  35. package/dist/{Canvas-LRVNW7XN.css → Canvas-VUG2HLZK.css} +23 -0
  36. package/dist/CanvasBoard/CanvasBoard.d.ts +38 -3
  37. package/dist/CanvasBoard/budget.d.ts +9 -3
  38. package/dist/CanvasBoard/index.d.ts +2 -2
  39. package/dist/CanvasBoard/index.js +7 -7
  40. package/dist/{CanvasBoard-MBZVBWDO.css → CanvasBoard-5NNSKY6A.css} +127 -6
  41. package/dist/CanvasToolbar/index.js +5 -5
  42. package/dist/{CanvasToolbar-AE5MXH7T.css → CanvasToolbar-EM5EVZED.css} +4 -2
  43. package/dist/ChangeMark/index.js +4 -4
  44. package/dist/CharacterPicker/index.js +2 -2
  45. package/dist/Charts/ActivityStrip.d.ts +16 -1
  46. package/dist/Charts/BarList.d.ts +6 -0
  47. package/dist/Charts/ChartEmpty.d.ts +33 -0
  48. package/dist/Charts/Legend.d.ts +6 -0
  49. package/dist/Charts/StackedBar.d.ts +4 -1
  50. package/dist/Charts/StackedColumns.d.ts +14 -3
  51. package/dist/Charts/TimeSeries.d.ts +11 -1
  52. package/dist/Charts/index.d.ts +2 -0
  53. package/dist/Charts/index.js +1 -1
  54. package/dist/{Charts-RY4JN5FC.css → Charts-MBJG72BS.css} +140 -16
  55. package/dist/Checkbox/index.js +1 -1
  56. package/dist/{Checkbox-5UORUG3F.css → Checkbox-ALWG3WV2.css} +11 -0
  57. package/dist/CommandPalette/index.js +3 -3
  58. package/dist/{CommandPalette-HBTNKHZQ.css → CommandPalette-7CFGVBND.css} +4 -0
  59. package/dist/CommentThread/index.js +5 -5
  60. package/dist/Container/index.js +1 -1
  61. package/dist/{Container-3TSKMGNI.css → Container-34BAKG7B.css} +3 -1
  62. package/dist/{DashboardCover-RMINBODB.css → DashboardCover-KYGYMRKW.css} +42 -9
  63. package/dist/DataTable/index.js +5 -5
  64. package/dist/{DataTable-WZK3V62B.css → DataTable-NL2YWAIA.css} +4 -1
  65. package/dist/DataView/index.js +8 -8
  66. package/dist/DateTimePicker/index.js +3 -3
  67. package/dist/DocTabsEditor/DocTabsEditor.d.ts +34 -21
  68. package/dist/DocTabsEditor/index.js +4 -1
  69. package/dist/DocTabsEditor-4M452LNS.css +189 -0
  70. package/dist/Document/Document.d.ts +18 -1
  71. package/dist/Document/index.d.ts +2 -2
  72. package/dist/Document/index.js +1 -1
  73. package/dist/{Document-G3YTZIUL.css → Document-JUGCSQ4L.css} +78 -5
  74. package/dist/EditingStatus/index.js +1 -1
  75. package/dist/{EditingStatus-L6THUAN7.css → EditingStatus-NNA2CKIL.css} +17 -4
  76. package/dist/{Editor-YWBUJAQU.js → Editor-UUZ7XKCU.js} +5 -5
  77. package/dist/EntityChip/index.js +3 -3
  78. package/dist/FactList/index.js +3 -3
  79. package/dist/FollowBanner/index.js +3 -3
  80. package/dist/Fullscreen/index.d.ts +1 -0
  81. package/dist/Fullscreen/index.js +1 -1
  82. package/dist/Fullscreen/useIdle.d.ts +16 -0
  83. package/dist/HuePicker/index.js +3 -3
  84. package/dist/ImageUpload/index.js +3 -3
  85. package/dist/Layer/index.d.ts +1 -1
  86. package/dist/Layer/index.js +1 -1
  87. package/dist/Layer/place.d.ts +18 -0
  88. package/dist/LayersList/LayersList.d.ts +57 -0
  89. package/dist/LayersList/index.d.ts +3 -0
  90. package/dist/LayersList/index.js +3 -0
  91. package/dist/LayersList-NQZEIPZB.css +82 -0
  92. package/dist/LinkInterstitial/index.js +4 -4
  93. package/dist/ListInput/index.js +1 -1
  94. package/dist/LivePreview/LivePreview.d.ts +83 -0
  95. package/dist/LivePreview/budget.d.ts +50 -0
  96. package/dist/LivePreview/index.d.ts +5 -0
  97. package/dist/LivePreview/index.js +2 -0
  98. package/dist/LivePreview-SRO7KHO4.css +65 -0
  99. package/dist/Markdown/index.js +1 -1
  100. package/dist/MarkdownEditor/index.js +5 -5
  101. package/dist/MediaMatch/index.d.ts +1 -0
  102. package/dist/MediaMatch/index.js +1 -0
  103. package/dist/MediaMatch/useMediaMatch.d.ts +19 -0
  104. package/dist/Menu/index.js +2 -2
  105. package/dist/MergeConflicts/index.js +4 -4
  106. package/dist/Modal/index.js +2 -2
  107. package/dist/{Modal-XOSV6FAH.css → Modal-7MWRCWAI.css} +30 -0
  108. package/dist/Note/index.js +1 -1
  109. package/dist/{Note-ONSKKTOA.css → Note-WI5MLZOO.css} +13 -0
  110. package/dist/OrgLabel/index.js +3 -3
  111. package/dist/OrgNode/index.js +4 -4
  112. package/dist/OrgTable/index.js +7 -7
  113. package/dist/PeopleRail/index.js +3 -3
  114. package/dist/Popover/index.js +2 -2
  115. package/dist/PresenceStack/index.js +3 -3
  116. package/dist/{PresenceStack-QSXQJND5.css → PresenceStack-FJJQVH74.css} +11 -3
  117. package/dist/PresenterView/PresenterView.d.ts +3 -0
  118. package/dist/PresenterView/index.js +5 -3
  119. package/dist/PresenterView-T3EXIQ5S.css +147 -0
  120. package/dist/Principal/index.js +3 -3
  121. package/dist/PrincipalPicker/index.js +4 -4
  122. package/dist/RichEditor/index.js +5 -5
  123. package/dist/RichEditor/schema.d.ts +1 -1
  124. package/dist/RichEditorMarkdown/index.js +3 -3
  125. package/dist/SandboxedFrame/SandboxedFrame.d.ts +44 -2
  126. package/dist/SandboxedFrame/index.d.ts +2 -2
  127. package/dist/SandboxedFrame/index.js +3 -3
  128. package/dist/SandboxedFrame-P5NASXB7.css +72 -0
  129. package/dist/Section/index.js +1 -1
  130. package/dist/{Section-QR3ILQVK.css → Section-O5AHGSOG.css} +28 -5
  131. package/dist/SegmentedControl/index.js +3 -3
  132. package/dist/Select/Select.d.ts +10 -0
  133. package/dist/Select/index.d.ts +1 -1
  134. package/dist/Select/index.js +2 -2
  135. package/dist/{Select-2P7AWUE4.css → Select-A54YS5EP.css} +29 -0
  136. package/dist/ShareDialog/ShareDialog.d.ts +10 -0
  137. package/dist/ShareDialog/index.js +9 -9
  138. package/dist/{ShareDialog-YZ4F37MW.css → ShareDialog-4QDCBWMH.css} +12 -0
  139. package/dist/SheetGrid/SheetGrid.d.ts +7 -3
  140. package/dist/SheetGrid/index.js +8 -8
  141. package/dist/{SheetGrid-J3TKKXZL.css → SheetGrid-GDPCCZ4V.css} +154 -14
  142. package/dist/SheetModel/fit.d.ts +34 -0
  143. package/dist/SheetModel/index.d.ts +1 -0
  144. package/dist/SheetModel/index.js +1 -1
  145. package/dist/SheetModel/labels.d.ts +1 -1
  146. package/dist/Shortcut/index.js +1 -1
  147. package/dist/Skeleton/Skeleton.d.ts +2 -1
  148. package/dist/Skeleton/index.js +1 -1
  149. package/dist/SlideCompare/SlideCompare.d.ts +6 -1
  150. package/dist/SlideCompare/index.js +3 -3
  151. package/dist/{SlideCompare-MGM3U2ME.css → SlideCompare-HTCMPQFY.css} +36 -3
  152. package/dist/SlideFilmstrip/SlideFilmstrip.d.ts +14 -3
  153. package/dist/SlideFilmstrip/index.js +3 -3
  154. package/dist/{SlideFilmstrip-BCLNAHFX.css → SlideFilmstrip-5U6Z55GS.css} +63 -2
  155. package/dist/SlideGrid/index.js +3 -3
  156. package/dist/{SlideGrid-RT6QEQEE.css → SlideGrid-S4LTJ4UU.css} +9 -5
  157. package/dist/SlideNav/SlideNav.d.ts +49 -0
  158. package/dist/SlideNav/index.d.ts +3 -0
  159. package/dist/SlideNav/index.js +4 -0
  160. package/dist/SlideNav-BLFJF6AH.css +53 -0
  161. package/dist/SlideStage/SlideStage.d.ts +9 -1
  162. package/dist/SlideStage/index.js +2 -2
  163. package/dist/{SlideStage-KGRRALXR.css → SlideStage-S2FISF4C.css} +23 -0
  164. package/dist/StatCard/StatCard.d.ts +16 -1
  165. package/dist/StatCard/index.js +1 -1
  166. package/dist/{StatCard-KPAFD4E2.css → StatCard-4T7TMWMN.css} +40 -13
  167. package/dist/Switcher/index.js +6 -6
  168. package/dist/TableCells/index.js +3 -3
  169. package/dist/Tabs/Tabs.d.ts +21 -4
  170. package/dist/Tabs/index.js +1 -1
  171. package/dist/{Tabs-CJGO35BH.css → Tabs-MMZXV5EF.css} +9 -8
  172. package/dist/TagsInput/index.js +1 -1
  173. package/dist/ThemeSwitcher/index.js +4 -4
  174. package/dist/TimeWindowPicker/index.js +4 -4
  175. package/dist/Toaster/index.js +2 -2
  176. package/dist/{Toaster-EOOOTSJT.css → Toaster-C6BQ7L6I.css} +10 -1
  177. package/dist/Toolbar/index.js +1 -1
  178. package/dist/Tooltip/Tooltip.d.ts +12 -1
  179. package/dist/Tooltip/index.d.ts +1 -1
  180. package/dist/Tooltip/index.js +2 -2
  181. package/dist/TreeCanvas/index.js +5 -5
  182. package/dist/TreeGrid/index.js +3 -3
  183. package/dist/VersionCompare/index.js +4 -4
  184. package/dist/VersionTimeline/index.js +4 -4
  185. package/dist/WidgetFrame/WidgetFrame.d.ts +8 -1
  186. package/dist/WidgetFrame/index.js +2 -2
  187. package/dist/{WidgetFrame-LRZIL62O.css → WidgetFrame-BTFW3CRK.css} +49 -5
  188. package/dist/{chunk-WJDQ7XQA.js → chunk-2QEDJSJC.js} +1 -1
  189. package/dist/{chunk-VYDFB6PJ.js → chunk-356JNSER.js} +50 -17
  190. package/dist/{chunk-2HIOJ4YZ.js → chunk-3EB2AV3H.js} +2 -3
  191. package/dist/{chunk-ODT5H4MN.js → chunk-3LYWD3BO.js} +2 -2
  192. package/dist/{chunk-OTN35CI4.js → chunk-3P4Y5RX6.js} +18 -6
  193. package/dist/{chunk-FAQGGX2Z.js → chunk-3TFDQLW3.js} +1 -1
  194. package/dist/{chunk-E6EWK5YY.js → chunk-3Y56GQPM.js} +3 -3
  195. package/dist/{chunk-A4E5YLXO.js → chunk-4B6LSFDS.js} +1 -1
  196. package/dist/{chunk-UAN5NE7M.js → chunk-5AQBPHZD.js} +1 -1
  197. package/dist/{chunk-CJKMURZO.js → chunk-5SZGKSGL.js} +1 -1
  198. package/dist/chunk-6VOS2GMB.js +54 -0
  199. package/dist/{chunk-QWOPX2MN.js → chunk-6ZJ3N7QI.js} +7 -5
  200. package/dist/{chunk-3ZAFJ4GK.js → chunk-7Q7WDXHG.js} +4 -4
  201. package/dist/{chunk-QH3AKP2N.js → chunk-AC22RZKC.js} +2 -2
  202. package/dist/{chunk-UZ6MA2V6.js → chunk-AORVEG5V.js} +2 -2
  203. package/dist/{chunk-ZITJKF6Z.js → chunk-AYB6AYNH.js} +1 -1
  204. package/dist/{chunk-FC4YTTFJ.js → chunk-BQ7AKL2N.js} +5 -5
  205. package/dist/{chunk-Y5NQ2LMS.js → chunk-BY4N65PM.js} +1 -1
  206. package/dist/{chunk-YFW4MTK4.js → chunk-C7DKX453.js} +1 -1
  207. package/dist/{chunk-RCQXUT5K.js → chunk-CCAXYHQS.js} +1 -1
  208. package/dist/{chunk-JQLTG4KH.js → chunk-CCLNGVCM.js} +62 -51
  209. package/dist/{chunk-6AH2XJ3Q.js → chunk-CFAJP777.js} +3 -3
  210. package/dist/{chunk-4KP4RC3O.js → chunk-CI3VPIJN.js} +1 -1
  211. package/dist/{chunk-7T42VQQT.js → chunk-CPEPST4S.js} +1 -1
  212. package/dist/{chunk-AAOH2P6Y.js → chunk-DFK5EQTU.js} +5 -3
  213. package/dist/{chunk-V5IGUXMZ.js → chunk-E4NNGC6X.js} +4 -4
  214. package/dist/{chunk-TGYDROIB.js → chunk-EBCHVFCS.js} +4 -4
  215. package/dist/{chunk-LWXRD6L6.js → chunk-EWAFN2IU.js} +118 -27
  216. package/dist/{chunk-YDBC4DNW.js → chunk-FWYHRU7M.js} +1 -1
  217. package/dist/{chunk-HVNTQ36V.js → chunk-GMU6SQ6B.js} +4 -4
  218. package/dist/{chunk-LIXSV5YI.js → chunk-GPHWCK7M.js} +1 -1
  219. package/dist/{chunk-UQHKFF2N.js → chunk-GPWJCP3U.js} +1 -1
  220. package/dist/{chunk-77DRMDXR.js → chunk-HG5VF3TZ.js} +192 -67
  221. package/dist/{chunk-QVE4GJAT.js → chunk-HJO4WCH6.js} +1 -1
  222. package/dist/{chunk-JI5AVQLA.js → chunk-HOIZ6MIS.js} +1 -1
  223. package/dist/{chunk-I3BSQUKN.js → chunk-HUVG2FFT.js} +1 -1
  224. package/dist/{chunk-VS3KOOOL.js → chunk-ILAEBSLJ.js} +3 -3
  225. package/dist/{chunk-P4BOXB6E.js → chunk-IUD5VA2Z.js} +6 -7
  226. package/dist/{chunk-GR55WT4R.js → chunk-IYO2N5ZH.js} +2 -2
  227. package/dist/{chunk-RWA4H2TV.js → chunk-J6ON5SYE.js} +1 -1
  228. package/dist/{chunk-AMNN4WDX.js → chunk-JBUMD6DS.js} +2 -2
  229. package/dist/{chunk-BWRGFKJP.js → chunk-K3IJQNB7.js} +2 -3
  230. package/dist/{chunk-LFNUH4GY.js → chunk-K4VP6ZKE.js} +1 -1
  231. package/dist/{chunk-ZR5VN5IV.js → chunk-KD2IRYCT.js} +2 -2
  232. package/dist/chunk-KF6YGL4B.js +160 -0
  233. package/dist/{chunk-SKOYC2CF.js → chunk-KK5OYNAF.js} +2 -1
  234. package/dist/{chunk-UB7TJEKZ.js → chunk-KV3ODJXH.js} +6 -7
  235. package/dist/chunk-LL5AFXU7.js +96 -0
  236. package/dist/{chunk-VYOKRN2I.js → chunk-LM3ISVJA.js} +1 -1
  237. package/dist/{chunk-E6CR5PEV.js → chunk-LV4APO72.js} +8 -2
  238. package/dist/{chunk-B4EBHPK3.js → chunk-M5KZX5JE.js} +9 -2
  239. package/dist/{chunk-HMPFGIWM.js → chunk-OMV5W53A.js} +10 -1
  240. package/dist/chunk-ONL54WMH.js +55 -0
  241. package/dist/{chunk-AKEZ3G5V.js → chunk-ONQKKHON.js} +1 -1
  242. package/dist/{chunk-LZHLSQYK.js → chunk-OOWPSBIS.js} +2 -2
  243. package/dist/{chunk-4KWOKX2B.js → chunk-OSKJZNBT.js} +1 -1
  244. package/dist/{chunk-4JUKWWUD.js → chunk-PLDUNXAO.js} +1 -1
  245. package/dist/{chunk-EHQTPVV4.js → chunk-PLTCDSTU.js} +1 -1
  246. package/dist/{chunk-5OM447RW.js → chunk-PZKHBB7D.js} +1 -1
  247. package/dist/{chunk-VEB5ERRE.js → chunk-QWNVSR6G.js} +2 -2
  248. package/dist/{chunk-IG75YMUN.js → chunk-RTPQDNW3.js} +1 -1
  249. package/dist/{chunk-YEKYVJQR.js → chunk-SGHIAGPR.js} +2 -2
  250. package/dist/{chunk-SVSCLHHI.js → chunk-SZZRIHGT.js} +1 -1
  251. package/dist/{chunk-EBNI36UQ.js → chunk-T46NR3WP.js} +3 -3
  252. package/dist/{chunk-FPS3JIPQ.js → chunk-TC7DJTXI.js} +1 -1
  253. package/dist/{chunk-W5J7R5EB.js → chunk-TEUQWOWZ.js} +1 -1
  254. package/dist/chunk-THROPJZC.js +115 -0
  255. package/dist/{chunk-IDBHX5SR.js → chunk-TRQCHF2F.js} +1 -1
  256. package/dist/{chunk-M3LUNN7F.js → chunk-TYKQ33CL.js} +13 -2
  257. package/dist/chunk-UDQW6UK7.js +129 -0
  258. package/dist/{chunk-WTNUVQVI.js → chunk-UHJQDFKQ.js} +1 -1
  259. package/dist/{chunk-VVRL27HM.js → chunk-ULPL26BU.js} +2 -2
  260. package/dist/{chunk-EBJREOKS.js → chunk-UXXJDIYE.js} +4 -4
  261. package/dist/{chunk-5LUI3WQP.js → chunk-V43UVX4H.js} +1 -1
  262. package/dist/{chunk-W4XYY73O.js → chunk-VHZ3AXJD.js} +1 -1
  263. package/dist/{chunk-NHBP2XS5.js → chunk-VI5FWDZW.js} +51 -3
  264. package/dist/{chunk-HJEVSQN6.js → chunk-VL6CUNSX.js} +11 -5
  265. package/dist/{chunk-XDTYBF2F.js → chunk-W5XCNEZC.js} +39 -1
  266. package/dist/{chunk-LDJ3J4TQ.js → chunk-WGD2HX2A.js} +1 -1
  267. package/dist/{chunk-FQCLKD7U.js → chunk-WKEPORNM.js} +1 -1
  268. package/dist/{chunk-PJD2KFHX.js → chunk-WPX6A5BV.js} +38 -13
  269. package/dist/{chunk-I3KKZ2O3.js → chunk-XEGZHHRH.js} +45 -36
  270. package/dist/{chunk-IKB6HFGK.js → chunk-XO7PUL4F.js} +6 -4
  271. package/dist/chunk-XTOVADJU.js +170 -0
  272. package/dist/chunk-XV32RKQZ.js +142 -0
  273. package/dist/{chunk-TBMDMXEX.js → chunk-YA3AWELW.js} +1 -1
  274. package/dist/{chunk-HVIX5ECM.js → chunk-YEVG2X5R.js} +1 -1
  275. package/dist/chunk-YZFLH463.js +215 -0
  276. package/dist/generated/index.d.ts +5 -0
  277. package/dist/generated/index.js +112 -108
  278. package/dist/index.js +112 -108
  279. package/dist/styles.css +1982 -228
  280. package/package.json +3 -3
  281. package/dist/AccessDeniedCard-WXM5DBDZ.css +0 -8
  282. package/dist/ArtifactCard-EXVAEBV6.css +0 -109
  283. package/dist/DocTabsEditor-RCOWHX5J.css +0 -78
  284. package/dist/PresenterView-T2C6ZZ3N.css +0 -103
  285. package/dist/SandboxedFrame-L6HBQZCD.css +0 -50
  286. package/dist/chunk-CRKFL423.js +0 -74
  287. package/dist/chunk-GOSQXEZU.js +0 -102
  288. package/dist/chunk-MBNFJSZS.js +0 -107
  289. package/dist/chunk-RV7SZAHR.js +0 -105
  290. package/dist/chunk-UZ7ZUSLH.js +0 -179
  291. package/dist/utils/useMediaMatch.d.ts +0 -12
  292. /package/dist/{chunk-TF2P3OPS.js → chunk-YCARLYI6.js} +0 -0
@@ -176,10 +176,12 @@ export declare const AVATAR_CHARACTER_FULL_DETAIL = 56;
176
176
  /**
177
177
  * Two uppercase initials, or one where the name has only one letter to give.
178
178
  *
179
- * SPLIT ON WHITESPACE, HYPHEN, UNDERSCORE AND DOT, because half the names this
180
- * draws are handles rather than names: `backend-engineer` gives BE,
181
- * `sre_lead` gives SL and `carlos.diaz` gives CD, where splitting on spaces
182
- * alone gives B, S and C and a roster of identical badges.
179
+ * SPLIT ON WHITESPACE, HYPHEN, UNDERSCORE, DOT AND COLON, because half the
180
+ * names this draws are handles rather than names: `backend-engineer` gives BE,
181
+ * `sre_lead` gives SL, `carlos.diaz` gives CD and `ci:release` CR, where
182
+ * splitting on spaces alone gives B, S, C and C and a roster of identical
183
+ * badges. PUNCTUATION AROUND A WORD IS NOT A LETTER: "review (API token)"
184
+ * gave R( where it gives RA.
183
185
  *
184
186
  * A SINGLE WORD STILL GIVES TWO LETTERS, because the seats an org chart names
185
187
  * in one word are the ones it draws most (CEO, SWE, PM, DevRel), and a badge
@@ -1,3 +1,3 @@
1
- export { AvatarStack, avatarStackLabel } from '../chunk-UAN5NE7M.js';
2
- export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR_STATUSES, AVATAR_STATUS_LABELS, Avatar, avatarCorner, avatarInitialsName, avatarPixels, avatarTint, getInitials } from '../chunk-5OM447RW.js';
1
+ export { AvatarStack, avatarStackLabel } from '../chunk-5AQBPHZD.js';
2
+ export { AVATAR_CHARACTER_FULL_DETAIL, AVATAR_CORNER_RATIO, AVATAR_SIZES, AVATAR_STATUSES, AVATAR_STATUS_LABELS, Avatar, avatarCorner, avatarInitialsName, avatarPixels, avatarTint, getInitials } from '../chunk-PZKHBB7D.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { AvatarPicker } from '../chunk-TGYDROIB.js';
2
- import '../chunk-LIXSV5YI.js';
3
- import '../chunk-BWRGFKJP.js';
1
+ export { AvatarPicker } from '../chunk-EBCHVFCS.js';
2
+ import '../chunk-GPHWCK7M.js';
3
+ import '../chunk-K3IJQNB7.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
- import '../chunk-HVIX5ECM.js';
6
- import '../chunk-RCQXUT5K.js';
7
- import '../chunk-HJEVSQN6.js';
5
+ import '../chunk-YEVG2X5R.js';
6
+ import '../chunk-CCAXYHQS.js';
7
+ import '../chunk-VL6CUNSX.js';
8
8
  import '../chunk-RKKO7QHH.js';
9
- import '../chunk-5OM447RW.js';
9
+ import '../chunk-PZKHBB7D.js';
10
10
  import '../chunk-BHHIIK3M.js';
11
- import '../chunk-HMPFGIWM.js';
11
+ import '../chunk-OMV5W53A.js';
12
12
  import '../chunk-R25RGPUB.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,2 +1,2 @@
1
- export { Callout } from '../chunk-SVSCLHHI.js';
1
+ export { Callout } from '../chunk-SZZRIHGT.js';
2
2
  import '../chunk-ODEQTPFM.js';
@@ -22,8 +22,15 @@
22
22
  */
23
23
  --crewlet-callout-line: transparent;
24
24
 
25
- display: flex;
26
- align-items: flex-start;
25
+ /* THE GLYPH, THE TEXT, AND AN ACTION'S COLUMN only where there is one: the
26
+ third track is implicit, so a callout without an action keeps no gap
27
+ for it at its end. A grid rather than a row, so a narrow callout can put
28
+ its action under the text, in the text's own column, whatever the glyph
29
+ is. */
30
+ display: grid;
31
+ grid-template-columns: auto minmax(0, 1fr);
32
+ grid-auto-columns: auto;
33
+ align-items: start;
27
34
  gap: var(--spacing-2);
28
35
  /* The engine's own: a tight strip rather than a padded card. This sits
29
36
  above a screen or between two sections and takes a line or two of text,
@@ -38,17 +45,29 @@
38
45
  line-height: var(--font-line-height-normal);
39
46
  }
40
47
 
48
+ /*
49
+ * WITH AN ACTION, ONE LINE OF TEXT CENTRES ON THE BUTTON. The row is the
50
+ * button's height and the text sat at its top, three pixels above the
51
+ * button's label. The content is padded by half of what the control is
52
+ * taller than a line, and the icon moved down with it, so a one-line callout
53
+ * reads as one line and a longer one keeps its icon on its first line.
54
+ */
55
+ .crewlet-callout:has(> .crewlet-callout__action) {
56
+ --crewlet-callout-lead: max(0px, calc((var(--size-control-sm) - 1lh) / 2));
57
+ /* Measured by its own width, so the action can move under the text. */
58
+ container: crewlet-callout / inline-size;
59
+ }
60
+
41
61
  .crewlet-callout__icon {
42
62
  display: inline-flex;
43
- flex: none;
44
63
  /* On the first line's optical centre rather than its box top, which a 16px
45
64
  glyph beside a 13px line sits two pixels above. */
46
- margin-top: 2px;
65
+ margin-top: calc(2px + var(--crewlet-callout-lead, 0px));
47
66
  }
48
67
 
49
68
  .crewlet-callout__content {
50
69
  min-width: 0;
51
- flex: 1;
70
+ padding-block: var(--crewlet-callout-lead, 0px);
52
71
  }
53
72
 
54
73
  .crewlet-callout__title {
@@ -59,10 +78,31 @@
59
78
  }
60
79
 
61
80
  .crewlet-callout__action {
62
- flex: none;
81
+ grid-column: 3;
82
+ grid-row: 1;
63
83
  align-self: center;
64
84
  }
65
85
 
86
+ /*
87
+ * A NARROW CALLOUT PUTS ITS ACTION UNDER THE TEXT, at the start of the text's
88
+ * column, so the sentence keeps the callout's whole measure. Beside it, a
89
+ * phone's width left the message a column of a word or two a line. The text
90
+ * no longer centres on a button beside it, so it sits at its own top.
91
+ */
92
+ @container crewlet-callout (width < 28rem) {
93
+ .crewlet-callout__icon,
94
+ .crewlet-callout__content {
95
+ --crewlet-callout-lead: 0px;
96
+ }
97
+
98
+ .crewlet-callout__action {
99
+ grid-column: 2;
100
+ grid-row: 2;
101
+ justify-self: start;
102
+ align-self: start;
103
+ }
104
+ }
105
+
66
106
  /*
67
107
  * Inline code inside a callout takes the callout's ink. A mono chip that kept
68
108
  * its own neutral ink inside a danger banner read as the one part of the
@@ -169,9 +169,10 @@ export interface CanvasLabels {
169
169
  }
170
170
  /**
171
171
  * What the field under the content is drawn as. `plain` is the page's own
172
- * ground; `dotted` lays a grid of dots on it. See [CanvasProps.ground].
172
+ * ground; `dotted` lays a grid of dots on the frame, and `grid` lays one on
173
+ * the content's own plane. See [CanvasProps.ground].
173
174
  */
174
- export type CanvasGround = 'plain' | 'dotted';
175
+ export type CanvasGround = 'plain' | 'dotted' | 'grid';
175
176
  export interface CanvasProps {
176
177
  /** The accessible name of the viewport, such as "Organization chart". */
177
178
  label: string;
@@ -259,6 +260,13 @@ export interface CanvasProps {
259
260
  * anybody drags it. They are drawn on the frame rather than on the content,
260
261
  * so they stay put while the content moves over them. `plain`, the default,
261
262
  * is the page's own ground and nothing else.
263
+ *
264
+ * `grid` is a design tool's ground: the same dots laid on the content's own
265
+ * plane, so they pan with it and their pitch follows the zoom (see
266
+ * [gridOf]). For a canvas of things a person places and arranges, where the
267
+ * grid is the surface they are placed ON rather than a texture behind a
268
+ * chart, and a grid that stayed put while the boards moved over it would
269
+ * read as two planes sliding apart.
262
270
  */
263
271
  ground?: CanvasGround | undefined;
264
272
  /**
@@ -304,3 +312,26 @@ export interface CanvasProps {
304
312
  className?: string | undefined;
305
313
  }
306
314
  export declare function Canvas({ label, content, children, overlay, controls, controlsPlacement, controlsExtra, controlsActualSize, controlsBelow, hint, largestItemWidth, dimmed, ground, minZoom, cursor, refitOnResize, touch, labels, onReady, onViewChange, ref, className, }: CanvasProps): import("react").JSX.Element;
315
+ /**
316
+ * Every pointer cursor, as custom properties on the canvas's root: the field
317
+ * reads the one its [CanvasCursor] names, and content inside the canvas (a
318
+ * board's shield, a resize handle's neighbours) reads the same drawings
319
+ * rather than the browser's own, so one pointer family runs across the whole
320
+ * surface. Each falls back to its keyword where it is read.
321
+ */
322
+ /**
323
+ * WHERE A `grid` GROUND'S DOTS FALL for a view: their pitch on screen as a
324
+ * multiple of the dotted step, and the screen point one of them sits on.
325
+ *
326
+ * The world's pitch doubles or halves with the zoom so the screen pitch stays
327
+ * between one and two steps, as a design tool's grid does: at every zoom the
328
+ * dots are as dense as the dotted ground's and never twice as sparse, and one
329
+ * of them always sits on the content's origin, so the grid and the content
330
+ * never slide apart. The offset is the view's own translation, since the
331
+ * background repeats from it both ways.
332
+ */
333
+ export declare function gridOf(view: CanvasView): {
334
+ scale: number;
335
+ x: number;
336
+ y: number;
337
+ };
@@ -1,5 +1,5 @@
1
1
  import './Canvas.css';
2
- export { Canvas } from './Canvas.js';
2
+ export { Canvas, gridOf } from './Canvas.js';
3
3
  export type { CanvasCursor, CanvasGround, CanvasHandle, CanvasLabels, CanvasProps } from './Canvas.js';
4
4
  export { ShortcutTip } from './ShortcutTip.js';
5
5
  export type { ShortcutTipProps } from './ShortcutTip.js';
@@ -1,8 +1,8 @@
1
- export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-OTN35CI4.js';
2
- import '../chunk-VYOKRN2I.js';
1
+ export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, ShortcutTip, anchorView, beyondSlop, clampPan, clampZoom, fitView, gridOf, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-3P4Y5RX6.js';
2
+ import '../chunk-LM3ISVJA.js';
3
3
  import '../chunk-SMBKXWML.js';
4
- import '../chunk-QWOPX2MN.js';
5
- import '../chunk-HMPFGIWM.js';
4
+ import '../chunk-6ZJ3N7QI.js';
5
+ import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-R25RGPUB.js';
7
7
  import '../chunk-OG6CL3EB.js';
8
8
  import '../chunk-4FQT6ZAY.js';
@@ -33,6 +33,19 @@
33
33
  background-size: var(--spacing-5) var(--spacing-5);
34
34
  }
35
35
 
36
+ /*
37
+ * A GRID ON THE CONTENT'S PLANE (`ground="grid"`): the same dots, but pitched
38
+ * and placed by the view (`gridOf`), so they pan and zoom with the content.
39
+ * The dots themselves stay one screen pixel, as a design tool's do.
40
+ */
41
+ .crewlet-canvas[data-ground='grid'] {
42
+ background-image: radial-gradient(var(--color-border-strong) 1px, transparent 1.2px);
43
+ background-size:
44
+ calc(var(--spacing-5) * var(--crewlet-canvas-grid-scale, 1))
45
+ calc(var(--spacing-5) * var(--crewlet-canvas-grid-scale, 1));
46
+ background-position: var(--crewlet-canvas-grid-x, 0) var(--crewlet-canvas-grid-y, 0);
47
+ }
48
+
36
49
  .crewlet-canvas__viewport {
37
50
  position: absolute;
38
51
  inset: 0;
@@ -239,6 +252,16 @@
239
252
  display: none;
240
253
  }
241
254
 
255
+ /*
256
+ * THE NOTE GROWS AWAY FROM THE CORNER. It comes and goes as the canvas's state
257
+ * does, and drawn on the corner's side of the zoom bar it would push the bar
258
+ * out from under a pointer on its way to it; so in a bottom corner it is drawn
259
+ * above the bar, and the bar never moves.
260
+ */
261
+ .crewlet-canvas__controls:not([data-placement='top-right']) .crewlet-canvas__hint {
262
+ order: -1;
263
+ }
264
+
242
265
  /*
243
266
  * THE ZOOM READOUT, between the two steppers. It says where the view stands,
244
267
  * which two chevrons never do, and it is the way to a number without pressing a
@@ -36,12 +36,18 @@
36
36
  *
37
37
  * HOVER AND SELECTION ARE OUTLINES IN THE ACCENT, at one screen pixel and two,
38
38
  * over a board's own hairline edge; hovering a board's name outlines its board,
39
- * because the name is how a reader picks a board out of a crowded canvas.
39
+ * because the name is how a reader picks a board out of a crowded canvas. The
40
+ * selection is the component's own unless the caller holds it (`selected`
41
+ * with `onSelectedChange`), which is how a list of boards beside the canvas
42
+ * marks the board picked on it and picks one there.
40
43
  *
41
44
  * THE CHROME STAYS ONE SIZE ON SCREEN. Titles, edges, outlines and handles
42
45
  * are counter-scaled by the zoom, so a board's label is readable, its edge is
43
46
  * a hairline and its handle is a full pointer target whatever the zoom, while
44
- * the board itself scales with the canvas.
47
+ * the board itself scales with the canvas. What a board says is held to the
48
+ * room it is drawn in (`boardRoom`): a name too narrow to read is not drawn,
49
+ * and a placeholder drops the lines it has no room for rather than spill them
50
+ * over the boards beside it.
45
51
  */
46
52
  import { type ReactNode, type Ref } from 'react';
47
53
  import { type CanvasHandle, type CanvasLabels, type CanvasPoint } from '../Canvas/index.js';
@@ -80,6 +86,11 @@ export interface CanvasBoardNote {
80
86
  text: string;
81
87
  color?: CanvasNoteColor | undefined;
82
88
  }
89
+ /** What is selected on a board canvas: one board or one note. */
90
+ export interface CanvasBoardSelection {
91
+ kind: 'board' | 'note';
92
+ id: string;
93
+ }
83
94
  /** A frame as an edit reports it. */
84
95
  export interface CanvasBoardRect {
85
96
  x: number;
@@ -167,6 +178,14 @@ export interface CanvasBoardProps {
167
178
  onOpen?: ((id: string) => void) | undefined;
168
179
  /** The board that holds the pointer changed; null is the canvas itself. */
169
180
  onActivate?: ((id: string | null) => void) | undefined;
181
+ /**
182
+ * The selected board or note, for a caller that holds it (a list of boards
183
+ * that marks the one picked on the canvas). Left out, the canvas keeps its
184
+ * own; null is nothing selected.
185
+ */
186
+ selected?: CanvasBoardSelection | null | undefined;
187
+ /** The selection changed, by a press on the canvas or by Escape. */
188
+ onSelectedChange?: ((selection: CanvasBoardSelection | null) => void) | undefined;
170
189
  /** Anything else in the canvas's control bar. */
171
190
  controlsExtra?: ReactNode | undefined;
172
191
  /** The floating tool palette. On by default; the keys work either way. */
@@ -177,4 +196,20 @@ export interface CanvasBoardProps {
177
196
  canvasRef?: Ref<CanvasHandle> | undefined;
178
197
  className?: string | undefined;
179
198
  }
180
- export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onOpen, onActivate, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
199
+ /**
200
+ * WHAT A BOARD HAS ROOM TO SAY, from its size on screen.
201
+ *
202
+ * `title` is whether its name is drawn above it: a name narrower than a few
203
+ * letters reads as a stray mark, so a board drawn narrower than
204
+ * [BOARD_TITLE_MIN_WIDTH] goes unnamed until it is zoomed into. `lines` is how
205
+ * many of a placeholder's two lines (its size, then why it is not running) fit
206
+ * inside it at the chrome's own type, so the lines it has no room for are left
207
+ * out rather than clipped at both ends.
208
+ */
209
+ export declare function boardRoom(width: number, height: number): {
210
+ title: boolean;
211
+ lines: 0 | 1 | 2;
212
+ };
213
+ /** The narrowest a board is drawn, in screen pixels, with its name above it. */
214
+ export declare const BOARD_TITLE_MIN_WIDTH = 40;
215
+ export declare function CanvasBoard({ label, boards, notes, renderBoard, maxLive, minLiveWidth, editable, minSide, maxSide, onBoardChange, onNoteChange, onNoteRemove, onNoteCreate, onOpen, onActivate, selected: heldSelection, onSelectedChange, controlsExtra, toolbar, labels, canvasLabels, canvasRef, className, }: CanvasBoardProps): import("react").JSX.Element;
@@ -26,10 +26,16 @@ export interface BoardFrame {
26
26
  */
27
27
  export declare const CANVAS_BOARD_MAX_LIVE = 12;
28
28
  /**
29
- * The narrowest a board may be drawn, in screen pixels, and still be live:
30
- * below it a page's text is unreadable, so running it buys nothing.
29
+ * The narrowest a board may be drawn, in screen pixels, and still be live.
30
+ *
31
+ * Below it a page is a smear, so running it buys nothing. Above it the page's
32
+ * text may be too small to read, but its layout and colour are not, and they
33
+ * are how a reader tells one board of a design from the next: a canvas
34
+ * fitted on a phone or zoomed out over a dozen boards draws them a hundred or
35
+ * so pixels wide, and at a wider floor every one of them was a grey box. The
36
+ * cost of running more is held by [CANVAS_BOARD_MAX_LIVE], not by this.
31
37
  */
32
- export declare const CANVAS_BOARD_MIN_LIVE_WIDTH = 160;
38
+ export declare const CANVAS_BOARD_MIN_LIVE_WIDTH = 96;
33
39
  /**
34
40
  * The boards to frame for a view: those on screen and at least `minWidth`
35
41
  * pixels wide there, the most visible area first, at most `max` of them,
@@ -1,5 +1,5 @@
1
1
  import './CanvasBoard.css';
2
- export { CanvasBoard, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, TITLE_GLYPH_EM, titleSize } from './CanvasBoard.js';
3
- export type { CanvasBoardItem, CanvasBoardLabels, CanvasBoardNote, CanvasBoardProps, CanvasBoardRect, CanvasBoardTool, CanvasNoteColor, } from './CanvasBoard.js';
2
+ export { BOARD_TITLE_MIN_WIDTH, CanvasBoard, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, TITLE_GLYPH_EM, boardRoom, titleSize, } from './CanvasBoard.js';
3
+ export type { CanvasBoardItem, CanvasBoardLabels, CanvasBoardNote, CanvasBoardProps, CanvasBoardRect, CanvasBoardSelection, CanvasBoardTool, CanvasNoteColor, } from './CanvasBoard.js';
4
4
  export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, liveBoards } from './budget.js';
5
5
  export type { BoardFrame } from './budget.js';
@@ -1,12 +1,12 @@
1
- export { CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, liveBoards, titleSize } from '../chunk-PJD2KFHX.js';
2
- import '../chunk-CJKMURZO.js';
3
- import '../chunk-E6EWK5YY.js';
1
+ export { BOARD_TITLE_MIN_WIDTH, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardRoom, liveBoards, titleSize } from '../chunk-WPX6A5BV.js';
2
+ import '../chunk-5SZGKSGL.js';
3
+ import '../chunk-3Y56GQPM.js';
4
4
  import '../chunk-PGRPNDWM.js';
5
- import '../chunk-OTN35CI4.js';
6
- import '../chunk-VYOKRN2I.js';
5
+ import '../chunk-3P4Y5RX6.js';
6
+ import '../chunk-LM3ISVJA.js';
7
7
  import '../chunk-SMBKXWML.js';
8
- import '../chunk-QWOPX2MN.js';
9
- import '../chunk-HMPFGIWM.js';
8
+ import '../chunk-6ZJ3N7QI.js';
9
+ import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-R25RGPUB.js';
11
11
  import '../chunk-OG6CL3EB.js';
12
12
  import '../chunk-4FQT6ZAY.js';
@@ -5,7 +5,12 @@
5
5
  * writes on the layer, so it stays one size on screen.
6
6
  */
7
7
 
8
+ /*
9
+ * A SIZE CONTAINER BY ITS WIDTH, so the palette can tell a canvas too narrow
10
+ * to hold it beside the zoom bar on one line (see below).
11
+ */
8
12
  .crewlet-canvas-board {
13
+ container: crewlet-canvas-board / inline-size;
9
14
  height: 100%;
10
15
  min-height: 0;
11
16
  }
@@ -27,6 +32,10 @@
27
32
 
28
33
  /* ---- the tool palette, floating at the foot of the field ----------------- */
29
34
 
35
+ /*
36
+ * CENTRED AT THE FOOT, on the zoom bar's line: the two bars are one control
37
+ * step tall and stand the same inset from the field's edge.
38
+ */
30
39
  .crewlet-canvas-board__tools {
31
40
  position: absolute;
32
41
  bottom: var(--spacing-3);
@@ -35,6 +44,20 @@
35
44
  transform: translateX(-50%);
36
45
  }
37
46
 
47
+ /*
48
+ * A NARROW CANVAS (a phone, a split pane) has no room at its foot for the
49
+ * palette between the zoom bar and the edge, so the palette moves to the top
50
+ * left corner, which the zoom bar never takes.
51
+ */
52
+ @container crewlet-canvas-board (width < 36rem) {
53
+ .crewlet-canvas-board__tools {
54
+ top: var(--spacing-3);
55
+ bottom: auto;
56
+ left: var(--spacing-3);
57
+ transform: none;
58
+ }
59
+ }
60
+
38
61
  /* ---- a board ------------------------------------------------------------ */
39
62
 
40
63
  .crewlet-canvas-board__board {
@@ -97,7 +120,7 @@
97
120
  cursor: var(--crewlet-canvas-cursor-pointer, default);
98
121
  }
99
122
 
100
- /* A board that is not running draws its title and size at screen size. */
123
+ /* A board that is not running draws its size, and why, at screen size. */
101
124
  .crewlet-canvas-board__placeholder {
102
125
  position: absolute;
103
126
  inset: 0;
@@ -111,25 +134,59 @@
111
134
  text-align: center;
112
135
  }
113
136
 
114
- /* ONE BLOCK, SCALED ONCE: its lines keep their spacing at screen size rather
115
- than each line shrinking back into the space the zoom left it. */
137
+ /*
138
+ * ONE BLOCK, SCALED ONCE: its lines keep their spacing at screen size rather
139
+ * than each line shrinking back into the space the zoom left it. It is held to
140
+ * the board's width ON SCREEN (the board's own width times the zoom, less a
141
+ * margin each side), so a line the component judged to fit never runs past
142
+ * the board's edges into the boards beside it.
143
+ */
116
144
  .crewlet-canvas-board__placeholder-text {
117
145
  display: flex;
118
146
  flex-direction: column;
119
147
  align-items: center;
120
148
  gap: var(--spacing-1);
121
149
  flex: none;
150
+ box-sizing: border-box;
151
+ max-width: calc(100% * var(--crewlet-canvas-board-zoom));
152
+ padding-inline: var(--spacing-2);
122
153
  transform: scale(var(--crewlet-canvas-board-unzoom));
123
154
  }
124
155
 
125
- .crewlet-canvas-board__placeholder-title {
156
+ .crewlet-canvas-board__placeholder-text > * {
157
+ max-width: 100%;
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ white-space: nowrap;
161
+ }
162
+
163
+ .crewlet-canvas-board__placeholder-size {
126
164
  color: var(--color-text-secondary);
127
- font-size: var(--font-size-sm);
128
165
  font-weight: var(--font-weight-medium);
166
+ font-variant-numeric: tabular-nums;
129
167
  }
130
168
 
131
169
  /* ---- chrome, at screen size --------------------------------------------- */
132
170
 
171
+ /*
172
+ * THE CHROME IS DRAWN OVER THE CONTENT, every board's and note's over every
173
+ * board and note, as a design tool draws its frame names. It is counter-scaled
174
+ * to one size on screen while the content shrinks with the zoom, so far out a
175
+ * name reaches over the note or board above it; drawn in document order it
176
+ * went under a note laid out after its board, and that note took every press
177
+ * meant for the name and the open control.
178
+ */
179
+ .crewlet-canvas-board__chrome,
180
+ .crewlet-canvas-board__note-tools,
181
+ .crewlet-canvas-board__resize {
182
+ z-index: 1;
183
+ }
184
+
185
+ /*
186
+ * ONE LINE OF TYPE TALL, whatever sits in it: the open control is centred on
187
+ * the line and allowed past it, so a row of boards zoomed far out loses only
188
+ * a title's height to the names above it rather than a button's.
189
+ */
133
190
  .crewlet-canvas-board__chrome {
134
191
  position: absolute;
135
192
  bottom: 100%;
@@ -139,11 +196,42 @@
139
196
  gap: var(--spacing-1);
140
197
  box-sizing: border-box;
141
198
  width: calc(100% * var(--crewlet-canvas-board-zoom));
199
+ height: calc(var(--font-size-xs) * var(--font-line-height-normal) + var(--spacing-1));
142
200
  padding-bottom: var(--spacing-1);
143
201
  transform: scale(var(--crewlet-canvas-board-unzoom));
144
202
  transform-origin: bottom left;
145
203
  }
146
204
 
205
+ /* A board drawn too narrow to name goes unnamed (`boardRoom`). */
206
+ .crewlet-canvas-board__board[data-untitled] > .crewlet-canvas-board__chrome {
207
+ display: none;
208
+ }
209
+
210
+ .crewlet-canvas-board__open {
211
+ flex: none;
212
+ }
213
+
214
+ /*
215
+ * THE OPEN CONTROL IS THE BOARD'S, NOT THE CANVAS'S: where a pointer can
216
+ * hover, it is drawn on the board under it, the selected board and the
217
+ * control that has focus, so a canvas at rest shows its names and nothing
218
+ * else. A touch screen has no hover to find it by, so it is always drawn
219
+ * there.
220
+ */
221
+ @media (hover: hover) {
222
+ /*
223
+ * HIDDEN, IT TAKES NO ROOM: out of the row rather than only transparent, so
224
+ * a narrow board's name has the whole width to itself at rest instead of
225
+ * being cut to its first letter beside an empty slot. It still takes focus,
226
+ * and is put back in the row when it has it.
227
+ */
228
+ .crewlet-canvas-board__board:not(:hover, [data-selected]) .crewlet-canvas-board__open:not(:focus-visible) {
229
+ position: absolute;
230
+ opacity: 0;
231
+ pointer-events: none;
232
+ }
233
+ }
234
+
147
235
  /* The board's name: small, quiet, and the accent once its board is picked out. */
148
236
  .crewlet-canvas-board__title {
149
237
  min-width: 0;
@@ -151,6 +239,7 @@
151
239
  color: var(--color-text-tertiary);
152
240
  font-size: var(--font-size-xs);
153
241
  font-weight: var(--font-weight-medium);
242
+ line-height: var(--font-line-height-normal);
154
243
  text-overflow: ellipsis;
155
244
  white-space: nowrap;
156
245
  cursor: var(--crewlet-canvas-cursor-pointer, default);
@@ -166,7 +255,7 @@
166
255
  margin: 0;
167
256
  padding: var(--spacing-1) var(--spacing-2);
168
257
  border: 1px solid transparent;
169
- border-radius: var(--radius-sm);
258
+ border-radius: var(--radius-md);
170
259
  background: transparent;
171
260
  font: inherit;
172
261
  cursor: var(--crewlet-canvas-cursor-pointer, default);
@@ -178,6 +267,21 @@
178
267
  border-color: var(--color-border-default);
179
268
  }
180
269
 
270
+ /*
271
+ * A NAME THAT IS ALSO A MOVE HANDLE keeps the name's type and its place: the
272
+ * handle's padding and edge are taken back by a margin the same size, so the
273
+ * letters stay on the board's left edge and the title's line, and only the
274
+ * hover's box reaches past them.
275
+ */
276
+ .crewlet-canvas-board__title.crewlet-canvas-board__handle {
277
+ flex: 0 1 auto;
278
+ margin-block: calc(-1 * (var(--spacing-1) + 1px));
279
+ margin-inline-start: calc(-1 * (var(--spacing-2) + 1px));
280
+ font-size: var(--font-size-xs);
281
+ font-weight: var(--font-weight-medium);
282
+ line-height: var(--font-line-height-normal);
283
+ }
284
+
181
285
  /* Both handles draw an edge of their own, so the ring sits over it. */
182
286
  .crewlet-canvas-board__handle:focus-visible,
183
287
  .crewlet-canvas-board__resize:focus-visible {
@@ -333,6 +437,23 @@
333
437
  transform-origin: bottom left;
334
438
  }
335
439
 
440
+ /*
441
+ * A NOTE'S TOOLS ARE THE NOTE'S, as a board's open control is the board's:
442
+ * where a pointer can hover they are drawn on the note under it, the selected
443
+ * note and the note holding focus, rather than over every note at once.
444
+ */
445
+ @media (hover: hover) {
446
+ .crewlet-canvas-board__note-tools {
447
+ opacity: 0;
448
+ }
449
+
450
+ .crewlet-canvas-board__note:hover .crewlet-canvas-board__note-tools,
451
+ .crewlet-canvas-board__note[data-selected] .crewlet-canvas-board__note-tools,
452
+ .crewlet-canvas-board__note:focus-within .crewlet-canvas-board__note-tools {
453
+ opacity: 1;
454
+ }
455
+ }
456
+
336
457
  .crewlet-canvas-board__note-move {
337
458
  width: var(--spacing-6);
338
459
  height: var(--spacing-6);
@@ -1,10 +1,10 @@
1
- export { CanvasToolbar, toolForKey } from '../chunk-E6EWK5YY.js';
1
+ export { CanvasToolbar, toolForKey } from '../chunk-3Y56GQPM.js';
2
2
  import '../chunk-PGRPNDWM.js';
3
- import '../chunk-OTN35CI4.js';
4
- import '../chunk-VYOKRN2I.js';
3
+ import '../chunk-3P4Y5RX6.js';
4
+ import '../chunk-LM3ISVJA.js';
5
5
  import '../chunk-SMBKXWML.js';
6
- import '../chunk-QWOPX2MN.js';
7
- import '../chunk-HMPFGIWM.js';
6
+ import '../chunk-6ZJ3N7QI.js';
7
+ import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-R25RGPUB.js';
9
9
  import '../chunk-OG6CL3EB.js';
10
10
  import '../chunk-4FQT6ZAY.js';
@@ -1,5 +1,7 @@
1
1
  /*
2
- * A canvas's tool palette (CanvasToolbar.tsx): the zoom bar's glass surface,
2
+ * A canvas's tool palette (CanvasToolbar.tsx): the zoom bar's glass surface
3
+ * and its control step (the small one, which every toolbar and panel control
4
+ * takes), so the two bars stand the same height on the field's foot,
3
5
  * with the tool in hand drawn SOLID in the accent rather than the soft tint a
4
6
  * toggle takes elsewhere, because it is the one fact about the palette a
5
7
  * reader checks from across the field before every press.
@@ -14,7 +16,7 @@
14
16
  backdrop-filter: blur(var(--blur-sm));
15
17
  border: 1px solid var(--color-border-default);
16
18
  border-radius: var(--radius-md);
17
- box-shadow: var(--shadow-sm);
19
+ box-shadow: var(--shadow-xs);
18
20
  }
19
21
 
20
22
  .crewlet-canvas-toolbar .crewlet-icon-btn {
@@ -1,8 +1,8 @@
1
- export { ChangeMark } from '../chunk-YEKYVJQR.js';
2
- import '../chunk-NHBP2XS5.js';
1
+ export { ChangeMark } from '../chunk-SGHIAGPR.js';
2
+ import '../chunk-VI5FWDZW.js';
3
3
  import '../chunk-Z7JYG5TF.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
- import '../chunk-QWOPX2MN.js';
6
- import '../chunk-HMPFGIWM.js';
5
+ import '../chunk-6ZJ3N7QI.js';
6
+ import '../chunk-OMV5W53A.js';
7
7
  import '../chunk-R25RGPUB.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import '../chunk-3L5NHASN.js';
2
- export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-HVIX5ECM.js';
2
+ export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-YEVG2X5R.js';
3
3
  import '../chunk-RKKO7QHH.js';
4
- import '../chunk-5OM447RW.js';
4
+ import '../chunk-PZKHBB7D.js';
5
5
  import '../chunk-ODEQTPFM.js';