@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
@@ -50,6 +50,13 @@ export interface WidgetFrameProps extends Omit<HTMLAttributes<HTMLElement>, 'tit
50
50
  * other figure keeps the frame's inset.
51
51
  */
52
52
  flush?: boolean | undefined;
53
+ /**
54
+ * Keep the title's two lines whether it fills them or not, so the figures of
55
+ * a row of frames start on one line: a number under a title of one line and
56
+ * a number under a title of two stood a line apart. For a row of figures
57
+ * read across (stats and meters), never for a frame alone in its row.
58
+ */
59
+ holdTitle?: boolean | undefined;
53
60
  /** The heading level of the title. Default 3, under a board's own heading. */
54
61
  headingLevel?: 2 | 3 | 4 | undefined;
55
62
  /** Overrides the shared clock, for a story or a suite. */
@@ -83,4 +90,4 @@ export interface WidgetFrameProps extends Omit<HTMLAttributes<HTMLElement>, 'tit
83
90
  * Sits inside the host's `ArrangeFrame`, which owns the grid, the drag and
84
91
  * the resize; this owns what is inside the card.
85
92
  */
86
- export declare function WidgetFrame({ title, source, onCite, actions, flush, headingLevel, now, labels, className, children, ...rest }: WidgetFrameProps): import("react").JSX.Element;
93
+ export declare function WidgetFrame({ title, source, onCite, actions, flush, holdTitle, headingLevel, now, labels, className, children, ...rest }: WidgetFrameProps): import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
- export { WidgetFrame } from '../chunk-AAOH2P6Y.js';
2
- import '../chunk-W5J7R5EB.js';
1
+ export { WidgetFrame } from '../chunk-DFK5EQTU.js';
2
+ import '../chunk-TEUQWOWZ.js';
3
3
  import '../chunk-3CZ7XAVY.js';
4
4
  import '../chunk-EUCC37WY.js';
5
5
  import '../chunk-BZFWDIV6.js';
@@ -60,6 +60,11 @@
60
60
  line-clamp: 2;
61
61
  }
62
62
 
63
+ /* A held title keeps its two lines empty or not (see `holdTitle`). */
64
+ .crewlet-widget-frame--hold-title .crewlet-widget-frame__title {
65
+ min-height: calc(2 * 1em * var(--font-line-height-snug));
66
+ }
67
+
63
68
  /* The controls stand on the title's first line: the box is one line of the
64
69
  title tall and the control is centred in it, whatever its own height. */
65
70
  .crewlet-widget-frame__actions {
@@ -77,15 +82,27 @@
77
82
  overflow: auto;
78
83
  }
79
84
 
80
- /* A flush figure reaches the frame's sides, and a table's cells take the
81
- frame's inset, so its first column starts under the title and its row
82
- rules meet the border. */
85
+ /*
86
+ * A flush figure reaches the frame's sides, and a table's OUTER cells take the
87
+ * frame's inset, so its first column starts under the title, its last ends
88
+ * where the title row's controls do, and its row rules meet the border.
89
+ *
90
+ * ONLY THE OUTER ONES. Every cell took the frame's 16px a side, so two columns
91
+ * stood 32px apart and a table of eight columns ran past a widget the full
92
+ * width of a board; between columns a cell keeps the compact table's own
93
+ * inset. The last column is the last before the table's trailing spacer,
94
+ * which is not a column of the data.
95
+ */
83
96
  .crewlet-widget-frame--flush .crewlet-widget-frame__body {
84
97
  padding-inline: 0;
85
98
  }
86
99
 
87
- .crewlet-widget-frame--flush .crewlet-data-table--compact {
88
- --crewlet-data-table-cell-pad-x: var(--spacing-4);
100
+ .crewlet-widget-frame--flush .crewlet-data-table--compact :is(th, td):first-child {
101
+ padding-inline-start: var(--spacing-4);
102
+ }
103
+
104
+ .crewlet-widget-frame--flush .crewlet-data-table--compact :is(th, td):nth-last-child(1 of :not(.crewlet-data-table__th--spacer, .crewlet-data-table__td--spacer)) {
105
+ padding-inline-end: var(--spacing-4);
89
106
  }
90
107
 
91
108
  /* A stat tile drawn flush as the figure stands on the frame's inset; its own
@@ -95,6 +112,23 @@
95
112
  padding: 0;
96
113
  }
97
114
 
115
+ /* A FRAME TOO NARROW FOR THE DISPLAY NUMBER sets it a step down rather than
116
+ cutting it: two columns of a board are about 120px, and a number at the
117
+ display step lost its last digits there ("123.…"). */
118
+ @container crewlet-widget-frame (width < 11rem) {
119
+ .crewlet-widget-frame__body .crewlet-statcard__value {
120
+ font-size: var(--font-size-xl);
121
+ }
122
+ }
123
+
124
+ /* NOR DOES IT RESERVE A SECOND LINE IT HAS NOTHING FOR. The reserve keeps a
125
+ StatGroup's tiles at one height; a frame takes its height from the board,
126
+ and the empty line stood as a band of air between the number and the
127
+ citation that no other figure has. */
128
+ .crewlet-widget-frame__body .crewlet-statcard__sub:empty {
129
+ display: none;
130
+ }
131
+
98
132
  .crewlet-widget-frame__blocked {
99
133
  display: flex;
100
134
  align-items: flex-start;
@@ -190,8 +224,18 @@
190
224
  align-items: flex-start;
191
225
  }
192
226
 
227
+ /* STACKED, THE TITLE TAKES A SECOND LINE BEFORE IT ENDS: a frame three
228
+ columns wide cut "Deploys for the chosen service" to "Deploys for the
229
+ chosen se…". Past two lines it ends in an ellipsis, and the whole title
230
+ is the citation's tooltip. */
193
231
  .crewlet-widget-frame__source {
232
+ display: -webkit-box;
194
233
  max-width: 100%;
234
+ white-space: normal;
235
+ overflow-wrap: anywhere;
236
+ -webkit-box-orient: vertical;
237
+ -webkit-line-clamp: 2;
238
+ line-clamp: 2;
195
239
  }
196
240
 
197
241
  .crewlet-widget-frame__when::before {
@@ -1,5 +1,5 @@
1
1
  import { useThemePreference, useDensityPreference } from './chunk-Z24ZUSTX.js';
2
- import { SegmentedControl } from './chunk-RCQXUT5K.js';
2
+ import { SegmentedControl } from './chunk-CCAXYHQS.js';
3
3
  import { SunGlyph, MonitorGlyph, MoonGlyph } from '@crewlethq/icons/glyphs';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,25 +1,26 @@
1
- import { Skeleton } from './chunk-W5J7R5EB.js';
2
1
  import { frameThemeMessage, readFrameHello, frameOriginMatches, negotiateBridge, FRAME_MESSAGE, portTargetOrigin, checkFrameSandbox, httpOrigin, isFrameNonce, frameFragment, readOpenLink, externalUrl, isFocusExit } from './chunk-F6V2PTN6.js';
3
- import { Callout } from './chunk-SVSCLHHI.js';
2
+ import { Callout } from './chunk-SZZRIHGT.js';
3
+ import { Skeleton } from './chunk-TEUQWOWZ.js';
4
4
  import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
- import './SandboxedFrame-L6HBQZCD.css';
6
+ import './SandboxedFrame-P5NASXB7.css';
7
7
  import { useState, useMemo, useRef, useEffect } from 'react';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
9
9
 
10
10
  var LABELS = {
11
11
  loading: (title) => `Loading ${title}`,
12
- failed: "This page failed to load.",
12
+ failed: "This page failed to load",
13
13
  failedDetail: "It did not finish starting. Reload it, and if it fails again, ask its owner to republish it.",
14
- navigated: "This page left its frame, so it was closed.",
14
+ navigated: "This page left its frame, so it was closed",
15
15
  navigatedDetail: "An artifact may only show its own pages. Reload it to open it again.",
16
- refused: "This page cannot be shown safely.",
16
+ refused: "This page cannot be shown safely",
17
17
  refusedDetail: "It arrived with a frame policy this dashboard does not accept.",
18
- outdated: "This page needs a newer dashboard.",
18
+ outdated: "This page needs a newer dashboard",
19
19
  outdatedDetail: "Reload the dashboard to update it, then open the page again.",
20
20
  reload: "Reload"
21
21
  };
22
22
  var FRAME_HELLO_TIMEOUT_MS = 1e4;
23
+ var FRAME_LOAD_GRACE_MS = 1500;
23
24
  function framePolicy(src, origin, mode, sandbox, nonce, theme) {
24
25
  const verdict = checkFrameSandbox(sandbox, mode);
25
26
  if (!verdict.ok) return { ok: false, refusal: { kind: "sandbox", tokens: verdict.refused } };
@@ -54,6 +55,7 @@ function FrameInstance(props) {
54
55
  onRefusal: _onRefusal,
55
56
  onReload,
56
57
  helloTimeoutMs = FRAME_HELLO_TIMEOUT_MS,
58
+ loadGraceMs = FRAME_LOAD_GRACE_MS,
57
59
  labels,
58
60
  className,
59
61
  ...rest
@@ -168,7 +170,7 @@ function FrameInstance(props) {
168
170
  }
169
171
  owed = true;
170
172
  clearTimeout(loadTimer);
171
- loadTimer = setTimeout(() => end(greeted > 0 ? "navigated" : "failed"), helloTimeoutMs);
173
+ loadTimer = setTimeout(() => end(greeted > 0 ? "navigated" : "failed"), Math.min(helloTimeoutMs, loadGraceMs));
172
174
  };
173
175
  window.addEventListener("message", onWindowMessage);
174
176
  frame.addEventListener("load", onLoad);
@@ -183,7 +185,7 @@ function FrameInstance(props) {
183
185
  clearTimeout(loadTimer);
184
186
  closePort();
185
187
  };
186
- }, [policy, mode, nonce, helloTimeoutMs]);
188
+ }, [policy, mode, nonce, helloTimeoutMs, loadGraceMs]);
187
189
  const { mode: themeMode, palette, density } = theme;
188
190
  useEffect(() => {
189
191
  portRef.current?.postMessage(frameThemeMessage({ mode: themeMode, palette, density }));
@@ -216,17 +218,15 @@ function FrameInstance(props) {
216
218
  ...credentialless
217
219
  }
218
220
  ) : null,
219
- state === "loading" ? /* @__PURE__ */ jsx("div", { className: "crewlet-sandboxed-frame__loading", children: /* @__PURE__ */ jsx(Skeleton, { variant: "box", width: "100%", height: "100%", label: text.loading(title) }) }) : null,
220
- ending ? /* @__PURE__ */ jsx("div", { className: "crewlet-sandboxed-frame__end", children: /* @__PURE__ */ jsx(
221
- Callout,
221
+ state === "loading" ? /* @__PURE__ */ jsx(FrameLoading, { label: text.loading(title) }) : null,
222
+ ending ? /* @__PURE__ */ jsx(
223
+ FrameEnd,
222
224
  {
223
- variant: "danger",
224
- title: text[ending.title],
225
- live: "polite",
225
+ heading: text[ending.title],
226
226
  action: onReload ? /* @__PURE__ */ jsx(Button, { variant: "outline", size: "small", onClick: onReload, children: text.reload }) : void 0,
227
227
  children: text[ending.detail]
228
228
  }
229
- ) }) : null
229
+ ) : null
230
230
  ]
231
231
  }
232
232
  );
@@ -239,5 +239,38 @@ var END_TEXT = {
239
239
  refused: { title: "refused", detail: "refusedDetail" },
240
240
  outdated: { title: "outdated", detail: "outdatedDetail" }
241
241
  };
242
+ function FrameLoading({ label }) {
243
+ return /* @__PURE__ */ jsx("div", { className: "crewlet-sandboxed-frame__loading", children: /* @__PURE__ */ jsx(
244
+ Skeleton,
245
+ {
246
+ variant: "box",
247
+ width: "100%",
248
+ height: "100%",
249
+ marginTop: 0,
250
+ borderRadius: "var(--radius-md)",
251
+ label
252
+ }
253
+ ) });
254
+ }
255
+ function FrameEnd({ heading, action, children }) {
256
+ return /* @__PURE__ */ jsx("div", { className: "crewlet-sandboxed-frame__end", children: /* @__PURE__ */ jsx(Callout, { variant: "danger", title: heading, live: "polite", action, children }) });
257
+ }
258
+ function SandboxedFramePlaceholder({ title, label, className, ...rest }) {
259
+ return /* @__PURE__ */ jsx(
260
+ "div",
261
+ {
262
+ ...rest,
263
+ role: "region",
264
+ "aria-label": title,
265
+ "aria-busy": true,
266
+ "data-state": "loading",
267
+ className: cx("crewlet-sandboxed-frame", className),
268
+ children: /* @__PURE__ */ jsx(FrameLoading, { label: label ?? LABELS.loading(title) })
269
+ }
270
+ );
271
+ }
272
+ function SandboxedFrameNotice({ title, heading, action, children, className, ...rest }) {
273
+ return /* @__PURE__ */ jsx("div", { ...rest, role: "region", "aria-label": title, "data-state": "failed", className: cx("crewlet-sandboxed-frame", className), children: /* @__PURE__ */ jsx(FrameEnd, { heading, action, children }) });
274
+ }
242
275
 
243
- export { FRAME_HELLO_TIMEOUT_MS, SandboxedFrame };
276
+ export { FRAME_HELLO_TIMEOUT_MS, FRAME_LOAD_GRACE_MS, SandboxedFrame, SandboxedFrameNotice, SandboxedFramePlaceholder };
@@ -1,4 +1,4 @@
1
- import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
1
+ import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
2
2
  import { usePopupLayer } from './chunk-R25RGPUB.js';
3
3
  import { Button } from './chunk-OG6CL3EB.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
@@ -99,14 +99,13 @@ function Menu({
99
99
  width: rect.width,
100
100
  height: rect.height
101
101
  };
102
- const whole = { x: 0, y: 0, width: host.width, height: host.height };
103
102
  const bounds = {
104
103
  x: LAYER_GAP,
105
104
  y: LAYER_GAP,
106
105
  width: host.width - 2 * LAYER_GAP,
107
106
  height: host.height - 2 * LAYER_GAP
108
107
  };
109
- if (outsideBounds(local, whole)) {
108
+ if (anchorGone(rect, host, inHost)) {
110
109
  close(true);
111
110
  return;
112
111
  }
@@ -1,9 +1,9 @@
1
1
  import { presenceHueClass } from './chunk-I6POAB4V.js';
2
2
  import { presenceLabels, presenceOrder } from './chunk-Z7JYG5TF.js';
3
- import { AVATAR_SIZES, Avatar } from './chunk-5OM447RW.js';
3
+ import { AVATAR_SIZES, Avatar } from './chunk-PZKHBB7D.js';
4
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
- import './PresenceStack-QSXQJND5.css';
6
+ import './PresenceStack-FJJQVH74.css';
7
7
  import { isCrewletCharacter } from '@crewlethq/icons/characters';
8
8
  import { jsxs, jsx } from 'react/jsx-runtime';
9
9
 
@@ -1,12 +1,12 @@
1
- import { LayerNodeBridge } from './chunk-VYOKRN2I.js';
1
+ import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
2
2
  import { Kbd } from './chunk-SMBKXWML.js';
3
- import { Tooltip } from './chunk-QWOPX2MN.js';
4
- import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-HMPFGIWM.js';
3
+ import { Tooltip } from './chunk-6ZJ3N7QI.js';
4
+ import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
5
5
  import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { IconButton } from './chunk-4FQT6ZAY.js';
7
7
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
- import './Canvas-LRVNW7XN.css';
9
+ import './Canvas-VUG2HLZK.css';
10
10
  import { useId, useRef, useState, useCallback, useLayoutEffect, useImperativeHandle, useEffect } from 'react';
11
11
  import { CURSORS, ZoomOutGlyph, ZoomInGlyph, FullscreenGlyph } from '@crewlethq/icons/glyphs';
12
12
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -515,7 +515,7 @@ function Canvas({
515
515
  {
516
516
  className: cx("crewlet-canvas", className),
517
517
  ref: root,
518
- style: CURSOR_PROPERTIES,
518
+ style: ground === "grid" ? { ...CURSOR_PROPERTIES, ...gridProperties(view) } : CURSOR_PROPERTIES,
519
519
  "data-cursor": cursor,
520
520
  "data-dimmed": dimmed,
521
521
  "data-ground": ground,
@@ -628,6 +628,10 @@ function Canvas({
628
628
  }
629
629
  );
630
630
  }
631
+ function gridOf(view) {
632
+ const k = view.k > 0 && Number.isFinite(view.k) ? view.k : 1;
633
+ return { scale: k * 2 ** -Math.floor(Math.log2(k)), x: view.x, y: view.y };
634
+ }
631
635
  var CURSOR_PROPERTIES = {
632
636
  "--crewlet-canvas-cursor-pointer": CURSORS.pointer,
633
637
  "--crewlet-canvas-cursor-hand": CURSORS.hand,
@@ -635,6 +639,14 @@ var CURSOR_PROPERTIES = {
635
639
  "--crewlet-canvas-cursor-crosshair": CURSORS.crosshair,
636
640
  "--crewlet-canvas-cursor-text": CURSORS.text
637
641
  };
642
+ function gridProperties(view) {
643
+ const grid = gridOf(view);
644
+ return {
645
+ "--crewlet-canvas-grid-scale": String(grid.scale),
646
+ "--crewlet-canvas-grid-x": `${grid.x}px`,
647
+ "--crewlet-canvas-grid-y": `${grid.y}px`
648
+ };
649
+ }
638
650
  function ZoomReadout({
639
651
  zoom,
640
652
  onZoom,
@@ -716,4 +728,4 @@ function swallowNextClick(within) {
716
728
  setTimeout(() => window.removeEventListener("click", swallow, { capture: true }), 0);
717
729
  }
718
730
 
719
- 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 };
731
+ 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 };
@@ -1,6 +1,6 @@
1
1
  import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './Section-QR3ILQVK.css';
3
+ import './Section-O5AHGSOG.css';
4
4
  import { useId } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,8 +1,8 @@
1
1
  import { Toolbar } from './chunk-PGRPNDWM.js';
2
- import { ShortcutTip } from './chunk-OTN35CI4.js';
2
+ import { ShortcutTip } from './chunk-3P4Y5RX6.js';
3
3
  import { IconButton } from './chunk-4FQT6ZAY.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './CanvasToolbar-AE5MXH7T.css';
5
+ import './CanvasToolbar-EM5EVZED.css';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
8
8
  function toolForKey(tools, event) {
@@ -20,7 +20,7 @@ function CanvasToolbar({
20
20
  return /* @__PURE__ */ jsx(Toolbar, { label, className: cx("crewlet-canvas-toolbar", className), children: tools.map((tool) => /* @__PURE__ */ jsx(ShortcutTip, { label: tool.label, keys: [tool.shortcut], children: /* @__PURE__ */ jsx(
21
21
  IconButton,
22
22
  {
23
- size: "md",
23
+ size: "sm",
24
24
  label: tool.label,
25
25
  title: "",
26
26
  icon: tool.icon,
@@ -1,4 +1,4 @@
1
- import { MARKDOWN_CALLOUT_NAMES } from './chunk-SKOYC2CF.js';
1
+ import { MARKDOWN_CALLOUT_NAMES } from './chunk-KK5OYNAF.js';
2
2
 
3
3
  // src/RichEditor/types.ts
4
4
  var RICH_EDITOR_LABELS = {
@@ -1,4 +1,4 @@
1
- import { AVATAR_SIZES, Avatar } from './chunk-5OM447RW.js';
1
+ import { AVATAR_SIZES, Avatar } from './chunk-PZKHBB7D.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
3
  import './Avatar-3C2H2WA4.css';
4
4
  import './AvatarStack-GEJBNV7E.css';
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './Note-ONSKKTOA.css';
2
+ import './Note-WI5MLZOO.css';
3
3
  import { forwardRef, useId } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
@@ -0,0 +1,54 @@
1
+ import { IconButton } from './chunk-4FQT6ZAY.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './SlideNav-BLFJF6AH.css';
4
+ import { ChevronLeftGlyph, ChevronRightGlyph } from '@crewlethq/icons/glyphs';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var SLIDE_NAV_LABELS = {
8
+ nav: "Slide controls",
9
+ previous: "Previous slide",
10
+ next: "Next slide",
11
+ start: "This is the first slide",
12
+ end: "End of the deck",
13
+ position: (position, total) => `${position} of ${total}`
14
+ };
15
+ function SlideNav({
16
+ position,
17
+ total,
18
+ onPrevious,
19
+ onNext,
20
+ tone = "page",
21
+ children,
22
+ className,
23
+ labels
24
+ }) {
25
+ const text = { ...SLIDE_NAV_LABELS, ...labels };
26
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-slide-nav", `crewlet-slide-nav--${tone}`, className), role: "group", "aria-label": text.nav, children: [
27
+ /* @__PURE__ */ jsx(
28
+ IconButton,
29
+ {
30
+ label: text.previous,
31
+ icon: /* @__PURE__ */ jsx(ChevronLeftGlyph, {}),
32
+ variant: "ghost",
33
+ size: "sm",
34
+ onClick: onPrevious,
35
+ disabledReason: position <= 1 ? text.start : void 0
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsx("span", { className: "crewlet-slide-nav__position", children: text.position(position, total) }),
39
+ /* @__PURE__ */ jsx(
40
+ IconButton,
41
+ {
42
+ label: text.next,
43
+ icon: /* @__PURE__ */ jsx(ChevronRightGlyph, {}),
44
+ variant: "ghost",
45
+ size: "sm",
46
+ onClick: onNext,
47
+ disabledReason: position >= total ? text.end : void 0
48
+ }
49
+ ),
50
+ children ? /* @__PURE__ */ jsx("span", { className: "crewlet-slide-nav__more", children }) : null
51
+ ] });
52
+ }
53
+
54
+ export { SLIDE_NAV_LABELS, SlideNav };
@@ -1,4 +1,4 @@
1
- import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
1
+ import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
2
2
  import { usePopupLayer } from './chunk-R25RGPUB.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Tooltip-LKQF7CE4.css';
@@ -28,6 +28,7 @@ var CLOSE_DELAY = ms(motion.duration.base);
28
28
  function Tooltip({
29
29
  content,
30
30
  placement = "top",
31
+ align = "center",
31
32
  disabled = false,
32
33
  openDelay = OPEN_DELAY,
33
34
  closeDelay = CLOSE_DELAY,
@@ -94,20 +95,21 @@ function Tooltip({
94
95
  const host = inHost ? container.getBoundingClientRect() : viewportBounds();
95
96
  const rect = at.getBoundingClientRect();
96
97
  const own = box.getBoundingClientRect();
98
+ const rtl = getComputedStyle(at).direction === "rtl";
99
+ const startX = align === "center" ? rect.x + rect.width / 2 - own.width / 2 : rtl ? rect.right - own.width : rect.x;
97
100
  const local = {
98
- x: rect.x + rect.width / 2 - own.width / 2 - (inHost ? host.x : 0),
101
+ x: startX - (inHost ? host.x : 0),
99
102
  y: rect.y - (inHost ? host.y : 0),
100
103
  width: rect.width,
101
104
  height: rect.height
102
105
  };
103
- const whole = { x: 0, y: 0, width: host.width, height: host.height };
104
106
  const bounds = {
105
107
  x: LAYER_GAP,
106
108
  y: LAYER_GAP,
107
109
  width: host.width - 2 * LAYER_GAP,
108
110
  height: host.height - 2 * LAYER_GAP
109
111
  };
110
- if (outsideBounds({ ...local, x: rect.x - (inHost ? host.x : 0) }, whole)) {
112
+ if (anchorGone(rect, host, inHost)) {
111
113
  setOpen(false);
112
114
  return;
113
115
  }
@@ -115,7 +117,7 @@ function Tooltip({
115
117
  setPlace(
116
118
  (was) => was && was.left === spot.left && was.top === spot.top && was.side === spot.side ? was : spot
117
119
  );
118
- }, [container, placement]);
120
+ }, [align, container, placement]);
119
121
  useLayoutEffect(() => {
120
122
  if (!open) return;
121
123
  position();
@@ -1,14 +1,14 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
- import { DateTimePicker } from './chunk-Y5NQ2LMS.js';
3
- import { DataTable } from './chunk-EBJREOKS.js';
2
+ import { DateTimePicker } from './chunk-BY4N65PM.js';
3
+ import { DataTable } from './chunk-UXXJDIYE.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
5
5
  import { Toolbar } from './chunk-PGRPNDWM.js';
6
- import { Popover } from './chunk-BWRGFKJP.js';
6
+ import { Popover } from './chunk-K3IJQNB7.js';
7
7
  import { Input } from './chunk-6QFAK2WV.js';
8
8
  import { Kbd } from './chunk-SMBKXWML.js';
9
9
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
10
10
  import { Count } from './chunk-BHHIIK3M.js';
11
- import { Menu } from './chunk-2HIOJ4YZ.js';
11
+ import { Menu } from './chunk-3EB2AV3H.js';
12
12
  import { Button } from './chunk-OG6CL3EB.js';
13
13
  import { IconButton } from './chunk-4FQT6ZAY.js';
14
14
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -1,7 +1,7 @@
1
- import { useLayerContainer } from './chunk-HMPFGIWM.js';
1
+ import { useLayerContainer } from './chunk-OMV5W53A.js';
2
2
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Toaster-EOOOTSJT.css';
4
+ import './Toaster-C6BQ7L6I.css';
5
5
  import { createContext, useMemo, useState, useRef, useEffect, useContext, useCallback } from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { XGlyph, CircleAlertGlyph, TriangleAlertGlyph, CircleCheckGlyph, InfoGlyph } from '@crewlethq/icons/glyphs';
@@ -1,5 +1,5 @@
1
- import { Select } from './chunk-FC4YTTFJ.js';
2
- import { Popover } from './chunk-BWRGFKJP.js';
1
+ import { Select } from './chunk-BQ7AKL2N.js';
2
+ import { Popover } from './chunk-K3IJQNB7.js';
3
3
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
4
4
  import { Input } from './chunk-6QFAK2WV.js';
5
5
  import { isComposing } from './chunk-R25RGPUB.js';
@@ -1,5 +1,5 @@
1
1
  import { Combobox } from './chunk-QS4ZGTEU.js';
2
- import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-4KP4RC3O.js';
2
+ import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './PrincipalPicker-7NNZTGUP.css';
5
5
  import { useState, useId, useMemo } from 'react';
@@ -1,7 +1,7 @@
1
1
  import { useListbox, useOptionKeys, useHighlightRest } from './chunk-F73MC7EZ.js';
2
- import { useLayerContainer, viewportBounds, outsideBounds, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-HMPFGIWM.js';
2
+ import { useLayerContainer, viewportBounds, anchorGone, placePopup, LAYER_GAP, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Select-2P7AWUE4.css';
4
+ import './Select-A54YS5EP.css';
5
5
  import { forwardRef, useId, useMemo, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { ChevronDownGlyph, CheckGlyph, SearchGlyph } from '@crewlethq/icons/glyphs';
@@ -24,6 +24,7 @@ var Select = forwardRef(function Select2({
24
24
  align = "left",
25
25
  active = false,
26
26
  error = false,
27
+ appearance = "field",
27
28
  ariaLabel,
28
29
  searchable = false,
29
30
  searchPlaceholder = "Search",
@@ -37,7 +38,7 @@ var Select = forwardRef(function Select2({
37
38
  }, ref) {
38
39
  const generatedId = useId();
39
40
  const rootId = id ?? generatedId;
40
- const classes = cx(className, width === "auto" && "crewlet-select--auto");
41
+ const classes = cx(className, width === "auto" && "crewlet-select--auto", appearance === "quiet" && "crewlet-select--quiet");
41
42
  const chosen = useMemo(() => {
42
43
  if (multiple) return Array.isArray(value) ? value : [];
43
44
  if (value === void 0 || value === null) return [];
@@ -310,8 +311,7 @@ var ListboxSelect = forwardRef(function ListboxSelect2({
310
311
  width: rect.width,
311
312
  height: rect.height
312
313
  };
313
- const whole = { x: 0, y: 0, width: host.width, height: host.height };
314
- if (outsideBounds(local, whole)) {
314
+ if (anchorGone(rect, host, inHost)) {
315
315
  close(panel.current?.contains(document.activeElement) ?? false);
316
316
  return;
317
317
  }
@@ -1,4 +1,4 @@
1
- import { Popover } from './chunk-BWRGFKJP.js';
1
+ import { Popover } from './chunk-K3IJQNB7.js';
2
2
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
3
3
  import { Button } from './chunk-OG6CL3EB.js';
4
4
  import { IconButton } from './chunk-4FQT6ZAY.js';
@@ -1,4 +1,4 @@
1
- import { MARKDOWN_CALLOUT_TONES, parseMarkdownSpans, markdownInline, markdownCodeText } from './chunk-SKOYC2CF.js';
1
+ import { MARKDOWN_CALLOUT_TONES, parseMarkdownSpans, markdownInline, markdownCodeText } from './chunk-KK5OYNAF.js';
2
2
  import { Schema, Fragment } from 'prosemirror-model';
3
3
 
4
4
  function headingTag(level) {
@@ -1,4 +1,4 @@
1
- import { tabId } from './chunk-HJEVSQN6.js';
1
+ import { tabId } from './chunk-VL6CUNSX.js';
2
2
  import { useRoving, tabStop } from './chunk-RKKO7QHH.js';
3
3
  import { Count } from './chunk-BHHIIK3M.js';
4
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';