@crewlethq/ui 0.52.1 → 0.53.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 (111) hide show
  1. package/README.md +18 -0
  2. package/dist/AgentHandoffPanel/index.js +8 -8
  3. package/dist/ArrangeFrame/index.js +2 -2
  4. package/dist/ArrangeList/index.js +5 -5
  5. package/dist/ArtifactBar/index.js +7 -7
  6. package/dist/ArtifactCard/index.js +6 -6
  7. package/dist/ArtifactMakeRow/index.js +2 -2
  8. package/dist/AvatarPicker/index.js +7 -7
  9. package/dist/Canvas/index.js +2 -2
  10. package/dist/CanvasBoard/index.js +4 -4
  11. package/dist/CanvasToolbar/index.js +3 -3
  12. package/dist/CharacterPicker/index.js +2 -2
  13. package/dist/Checkbox/index.js +4 -4
  14. package/dist/ColorField/index.js +4 -4
  15. package/dist/Combobox/index.js +5 -5
  16. package/dist/CommandPalette/index.js +8 -8
  17. package/dist/CommentThread/index.js +8 -8
  18. package/dist/Composer/index.js +5 -5
  19. package/dist/ConfirmField/index.js +4 -4
  20. package/dist/DataGrid/index.js +6 -6
  21. package/dist/DataTable/index.js +7 -7
  22. package/dist/DataView/index.js +10 -10
  23. package/dist/DatasetSource/index.js +1 -1
  24. package/dist/DocTabsEditor/index.js +5 -5
  25. package/dist/{Editor-ECT7XZNS.js → Editor-RAUVEXLG.js} +5 -5
  26. package/dist/FolderTile/FolderTile.d.ts +20 -13
  27. package/dist/FolderTile/index.d.ts +1 -1
  28. package/dist/FolderTile/index.js +1 -1
  29. package/dist/{FolderTile-MIUEB7SO.css → FolderTile-NM7CRTVH.css} +168 -29
  30. package/dist/HuePicker/index.js +4 -4
  31. package/dist/InlineEditor/index.js +1 -1
  32. package/dist/Input/index.js +3 -3
  33. package/dist/LinkInterstitial/index.js +3 -3
  34. package/dist/ListInput/index.js +6 -6
  35. package/dist/LogoSlot/index.js +1 -1
  36. package/dist/{LogoSlot-37RQBUCR.css → LogoSlot-NAJE5XY3.css} +9 -0
  37. package/dist/MarkdownEditor/index.js +4 -4
  38. package/dist/MergeConflicts/index.js +4 -4
  39. package/dist/Modal/index.js +2 -2
  40. package/dist/OrgTable/index.js +1 -1
  41. package/dist/PeopleRail/index.js +2 -2
  42. package/dist/PrincipalPicker/index.js +6 -6
  43. package/dist/RichEditor/index.js +1 -1
  44. package/dist/SegmentedControl/index.js +3 -3
  45. package/dist/SelectionBar/index.js +2 -2
  46. package/dist/SetupWizard/index.js +2 -2
  47. package/dist/ShareDialog/index.js +3 -3
  48. package/dist/SheetColumnEditor/index.js +11 -11
  49. package/dist/SheetGrid/index.js +4 -4
  50. package/dist/SlideFilmstrip/index.js +3 -3
  51. package/dist/Switcher/index.js +6 -6
  52. package/dist/TableCells/index.js +1 -1
  53. package/dist/Tabs/index.js +2 -2
  54. package/dist/TagsInput/index.js +2 -2
  55. package/dist/ThemeSwitcher/index.js +4 -4
  56. package/dist/TimeWindowPicker/index.js +5 -5
  57. package/dist/TreeCanvas/index.js +3 -3
  58. package/dist/VersionCompare/index.js +6 -6
  59. package/dist/{chunk-PGYIDNGG.js → chunk-362TAJUQ.js} +2 -2
  60. package/dist/{chunk-U3LNU4B2.js → chunk-4QW6K7RK.js} +1 -1
  61. package/dist/{chunk-WG7G7UY5.js → chunk-55H7REZK.js} +1 -1
  62. package/dist/{chunk-SMVWDO72.js → chunk-5FB6DGGC.js} +2 -2
  63. package/dist/{chunk-2ZXA2TN4.js → chunk-5WJAH6JG.js} +1 -1
  64. package/dist/{chunk-EO6DUDKB.js → chunk-5Z4DAS53.js} +1 -1
  65. package/dist/{chunk-UEPIBHS2.js → chunk-AQCJKX5R.js} +3 -3
  66. package/dist/{chunk-WV5SSDCZ.js → chunk-ATRRLHLU.js} +1 -1
  67. package/dist/{chunk-CNTBUK24.js → chunk-B424UBV3.js} +2 -2
  68. package/dist/{chunk-RBUA7ZNK.js → chunk-BIRR4RKZ.js} +1 -1
  69. package/dist/{chunk-Y4E6XL6M.js → chunk-CPOD27EG.js} +1 -1
  70. package/dist/{chunk-XPRHKEQ2.js → chunk-FAHAJWZR.js} +4 -4
  71. package/dist/{chunk-LXCRHVMZ.js → chunk-HTEQFRDI.js} +1 -1
  72. package/dist/{chunk-IRAS2CZ5.js → chunk-JFKPOVDA.js} +2 -2
  73. package/dist/{chunk-GGP7XCRG.js → chunk-JIMTX2X3.js} +1 -1
  74. package/dist/{chunk-PZZHO6OS.js → chunk-JV4G7LH3.js} +1 -1
  75. package/dist/{chunk-TVILVNPG.js → chunk-K3UA2GJF.js} +2 -2
  76. package/dist/{chunk-MZ3QFQDL.js → chunk-LP6EDXO5.js} +1 -1
  77. package/dist/{chunk-75BRUZEB.js → chunk-LZDTH436.js} +3 -3
  78. package/dist/{chunk-POPBDDGZ.js → chunk-N3MM67K4.js} +1 -1
  79. package/dist/{chunk-A6XFA2MW.js → chunk-ROXAHDMA.js} +3 -3
  80. package/dist/{chunk-BYOBPRTS.js → chunk-SYY26XBX.js} +1 -1
  81. package/dist/{chunk-FXHWOXGD.js → chunk-TFIINTEU.js} +17 -9
  82. package/dist/{chunk-YQB4NNAE.js → chunk-TNGIFWDG.js} +1 -1
  83. package/dist/{chunk-NILOJV62.js → chunk-UM5LMW5X.js} +1 -1
  84. package/dist/{chunk-OW37LQDZ.js → chunk-V3M7V5SO.js} +4 -4
  85. package/dist/{chunk-6D4SVNQD.js → chunk-VYVW24VC.js} +1 -1
  86. package/dist/{chunk-ZI4NRAIL.js → chunk-WCIJW2SA.js} +1 -1
  87. package/dist/{chunk-4L5L7HBA.js → chunk-WIYTIJF6.js} +1 -1
  88. package/dist/{chunk-3AX2O4RT.js → chunk-WO4W5FTB.js} +1 -1
  89. package/dist/{chunk-YFUG6ARA.js → chunk-XFZ7JWBJ.js} +2 -2
  90. package/dist/{chunk-PLHKAYFI.js → chunk-XSHA74LN.js} +4 -4
  91. package/dist/{chunk-F45VSK2M.js → chunk-Z2SK4MPL.js} +2 -2
  92. package/dist/{chunk-BUDVAXGD.js → chunk-ZXQXEP2S.js} +2 -2
  93. package/dist/{chunk-VBEMIZIJ.js → chunk-ZZL54LEO.js} +1 -1
  94. package/dist/generated/index.js +87 -87
  95. package/dist/index.js +87 -87
  96. package/dist/styles.css +179 -31
  97. package/dist/utils/index.js +1 -1
  98. package/package.json +3 -3
  99. package/dist/{chunk-DTSZUH6H.js → chunk-4C5CZT4D.js} +1 -1
  100. package/dist/{chunk-K2FNW3MK.js → chunk-5UEANIIW.js} +1 -1
  101. package/dist/{chunk-3RCHEFIL.js → chunk-DEBVNLFJ.js} +1 -1
  102. package/dist/{chunk-OCRVY42T.js → chunk-F6CKQX5D.js} +1 -1
  103. package/dist/{chunk-GKRPPSWY.js → chunk-I4Q6PACO.js} +1 -1
  104. package/dist/{chunk-VWYT3GVV.js → chunk-LKBZV5IT.js} +1 -1
  105. package/dist/{chunk-ICPQIAD6.js → chunk-MXBDOQA5.js} +1 -1
  106. package/dist/{chunk-N224FUS3.js → chunk-NC3Z6MM3.js} +1 -1
  107. package/dist/{chunk-R3BA3C4Y.js → chunk-RFK4ROA7.js} +1 -1
  108. package/dist/{chunk-S6J3EWDP.js → chunk-RRHB5WWN.js} +1 -1
  109. package/dist/{chunk-YCC2S7DF.js → chunk-SFG7TS4Q.js} +1 -1
  110. package/dist/{chunk-VS7EXOKP.js → chunk-TN22R6LW.js} +2 -2
  111. package/dist/{chunk-SNQRGH4A.js → chunk-VZICPYGR.js} +1 -1
package/dist/styles.css CHANGED
@@ -16587,12 +16587,12 @@ button.crewlet-finding-list__row:focus-visible {
16587
16587
  }
16588
16588
 
16589
16589
 
16590
- /* FolderTile-MIUEB7SO.css */
16590
+ /* FolderTile-NM7CRTVH.css */
16591
16591
  /*
16592
16592
  * A folder in a gallery: a short tile on Card (no preview), the folder glyph
16593
- * on a neutral tint over the name and one quiet line, and a More menu in the
16594
- * top corner outside the link. `row` is the full width, 44px row a phone
16595
- * takes, and a tile becomes one under the phone breakpoint.
16593
+ * on a neutral tint over the name and one quiet run of facts, and a More menu
16594
+ * level with the glyph, outside the link. `row` is the full width row a phone
16595
+ * takes (44px at least), and a tile becomes one under the phone breakpoint.
16596
16596
  *
16597
16597
  * ON TOP OF CARD, so every rule that changes Card's own layout carries Card's
16598
16598
  * class too: the two sheets meet at equal weight and the bundle orders them by
@@ -16600,10 +16600,11 @@ button.crewlet-finding-list__row:focus-visible {
16600
16600
  */
16601
16601
 
16602
16602
  /*
16603
- * THE ARTIFACT CARD'S CORNER, so a folder tile and the cards below it read as
16604
- * one gallery, and Card's own hover step (the hairline darkens, nothing
16605
- * lifts). The chosen state is Card's (`selected`): the selected edge over the
16606
- * selected fill.
16603
+ * THE ARTIFACT CARD'S CORNER AND HOVER, so a folder tile and the cards below
16604
+ * it read as one gallery: under the pointer the hairline darkens and a
16605
+ * hairline shadow settles under the tile, quickly and with the standard ease,
16606
+ * exactly as a card's does. Nothing lifts or moves. The chosen state is
16607
+ * Card's (`selected`): the selected edge over the selected fill.
16607
16608
  */
16608
16609
  .crewlet-card.crewlet-folder-tile {
16609
16610
  /*
@@ -16616,6 +16617,7 @@ button.crewlet-finding-list__row:focus-visible {
16616
16617
  --crewlet-folder-tile-pad-inline: var(--spacing-4);
16617
16618
  --crewlet-folder-tile-floor: auto;
16618
16619
  --crewlet-folder-tile-glyph: 40px;
16620
+ --crewlet-folder-tile-glyph-icon: 20px;
16619
16621
  --crewlet-folder-tile-glyph-radius: var(--radius-md);
16620
16622
  /*
16621
16623
  * THE WORDS ARE SET AS THE CARDS BESIDE THEM: a tile's name at a gallery
@@ -16644,13 +16646,36 @@ button.crewlet-finding-list__row:focus-visible {
16644
16646
  --crewlet-folder-tile-actions-shift: 0;
16645
16647
  --crewlet-folder-tile-reserve-link: 0px;
16646
16648
 
16649
+ /*
16650
+ * THE CARD'S SEPARATOR between two facts, a quiet dot with a step of air on
16651
+ * each side: the width each fact after the first opens with.
16652
+ */
16653
+ --crewlet-folder-tile-separator: var(--spacing-5);
16654
+ /* Who can see it is a glyph and its word; the row keeps the glyph alone. */
16655
+ --crewlet-folder-tile-word-position: static;
16656
+ --crewlet-folder-tile-word-size: auto;
16657
+ --crewlet-folder-tile-word-clip: none;
16658
+
16647
16659
  flex-direction: row;
16648
16660
  align-items: stretch;
16649
16661
  min-width: 0;
16650
16662
  border-radius: var(--crewlet-folder-tile-radius);
16651
16663
  }
16652
16664
 
16653
- /* ---- the row: a phone's, full width at 44px ---- */
16665
+ /* The card's quick step, over Card's slower interactive one. */
16666
+ .crewlet-card.crewlet-folder-tile.is-interactive {
16667
+ transition:
16668
+ border-color var(--motion-duration-fast) var(--motion-easing-out),
16669
+ box-shadow var(--motion-duration-fast) var(--motion-easing-out);
16670
+ }
16671
+
16672
+ .crewlet-card.crewlet-folder-tile:hover {
16673
+ box-shadow: var(--shadow-xs);
16674
+ }
16675
+
16676
+ /* ---- the row: a phone's, full width and 44px at least ----
16677
+ The glyph and its tint keep the tile's proportion (the glyph half the
16678
+ tint), at the list name cell's 32px tint. */
16654
16679
 
16655
16680
  .crewlet-card.crewlet-folder-tile--row {
16656
16681
  --crewlet-folder-tile-radius: var(--radius-lg);
@@ -16658,8 +16683,9 @@ button.crewlet-finding-list__row:focus-visible {
16658
16683
  --crewlet-folder-tile-pad-block: var(--spacing-1);
16659
16684
  --crewlet-folder-tile-pad-inline: var(--spacing-3);
16660
16685
  --crewlet-folder-tile-floor: var(--size-control-lg);
16661
- --crewlet-folder-tile-glyph: 28px;
16662
- --crewlet-folder-tile-glyph-radius: var(--radius-sm);
16686
+ --crewlet-folder-tile-glyph: 32px;
16687
+ --crewlet-folder-tile-glyph-icon: 16px;
16688
+ --crewlet-folder-tile-glyph-radius: var(--radius-md);
16663
16689
  --crewlet-folder-tile-words-gap: 2px;
16664
16690
  --crewlet-folder-tile-actions-inset: var(--spacing-2);
16665
16691
  --crewlet-folder-tile-direction: row;
@@ -16667,6 +16693,9 @@ button.crewlet-finding-list__row:focus-visible {
16667
16693
  --crewlet-folder-tile-actions-top: 50%;
16668
16694
  --crewlet-folder-tile-actions-shift: -50%;
16669
16695
  --crewlet-folder-tile-reserve-link: calc(var(--size-control-sm) + var(--spacing-1));
16696
+ --crewlet-folder-tile-word-position: absolute;
16697
+ --crewlet-folder-tile-word-size: 1px;
16698
+ --crewlet-folder-tile-word-clip: inset(50%);
16670
16699
  }
16671
16700
 
16672
16701
  /* UNDER THE PHONE BREAKPOINT A TILE IS THE ROW, strictly under, as the
@@ -16678,8 +16707,9 @@ button.crewlet-finding-list__row:focus-visible {
16678
16707
  --crewlet-folder-tile-pad-block: var(--spacing-1);
16679
16708
  --crewlet-folder-tile-pad-inline: var(--spacing-3);
16680
16709
  --crewlet-folder-tile-floor: var(--size-control-lg);
16681
- --crewlet-folder-tile-glyph: 28px;
16682
- --crewlet-folder-tile-glyph-radius: var(--radius-sm);
16710
+ --crewlet-folder-tile-glyph: 32px;
16711
+ --crewlet-folder-tile-glyph-icon: 16px;
16712
+ --crewlet-folder-tile-glyph-radius: var(--radius-md);
16683
16713
  --crewlet-folder-tile-words-gap: 2px;
16684
16714
  --crewlet-folder-tile-actions-inset: var(--spacing-2);
16685
16715
  --crewlet-folder-tile-direction: row;
@@ -16687,19 +16717,41 @@ button.crewlet-finding-list__row:focus-visible {
16687
16717
  --crewlet-folder-tile-actions-top: 50%;
16688
16718
  --crewlet-folder-tile-actions-shift: -50%;
16689
16719
  --crewlet-folder-tile-reserve-link: calc(var(--size-control-sm) + var(--spacing-1));
16720
+ --crewlet-folder-tile-word-position: absolute;
16721
+ --crewlet-folder-tile-word-size: 1px;
16722
+ --crewlet-folder-tile-word-clip: inset(50%);
16690
16723
  }
16691
16724
  }
16692
16725
 
16726
+ /*
16727
+ * THE STATES OUTLAST THE POINTER. Card's hover step darkens the hairline at
16728
+ * the same weight as a state's edge, and Card's sheet comes after this one, so
16729
+ * each state restates its edge under the pointer too: a chosen tile keeps the
16730
+ * selected edge, and a drop target, which is under the pointer by definition,
16731
+ * keeps its accent.
16732
+ */
16733
+ .crewlet-card.crewlet-folder-tile.is-selected,
16734
+ .crewlet-card.crewlet-folder-tile.is-selected:hover {
16735
+ border-color: var(--color-border-selected);
16736
+ }
16737
+
16693
16738
  /*
16694
16739
  * SOMETHING HELD OVER IT WOULD LAND IN IT: the accent edge over the accent's
16695
16740
  * soft fill, the same pair a file drop target takes while files are over it,
16696
- * so "let go here" reads one way across the package.
16741
+ * so "let go here" reads one way across the package. The glyph's tint takes
16742
+ * the accent's hairline and ink, so the folder itself says it is open to it.
16697
16743
  */
16698
- .crewlet-card.crewlet-folder-tile.is-drop-target {
16744
+ .crewlet-card.crewlet-folder-tile.is-drop-target,
16745
+ .crewlet-card.crewlet-folder-tile.is-drop-target:hover {
16699
16746
  border-color: var(--color-brand-accent);
16700
16747
  background-color: var(--color-brand-accent-soft);
16701
16748
  }
16702
16749
 
16750
+ .crewlet-folder-tile.is-drop-target .crewlet-folder-tile__glyph {
16751
+ box-shadow: inset 0 0 0 1px var(--color-brand-accent);
16752
+ color: var(--color-brand-accent-ink);
16753
+ }
16754
+
16703
16755
  .crewlet-card.crewlet-folder-tile:has(.crewlet-folder-tile__link:focus-visible) {
16704
16756
  outline: 2px solid var(--color-focus);
16705
16757
  outline-offset: var(--size-focus-ring-inset-offset);
@@ -16730,7 +16782,11 @@ button.crewlet-finding-list__row:focus-visible {
16730
16782
  padding-inline-end: calc(var(--crewlet-folder-tile-pad-inline) + var(--crewlet-folder-tile-reserve-link));
16731
16783
  }
16732
16784
 
16733
- /* A NEUTRAL TINT, never a kind's: a folder is not a kind. */
16785
+ /*
16786
+ * A NEUTRAL TINT, never a kind's: a folder is not a kind. Its hairline steps
16787
+ * up with the tile's under the pointer, as a folder's mark does on a list
16788
+ * row, so the one drawn thing on the tile answers too.
16789
+ */
16734
16790
  .crewlet-folder-tile__glyph {
16735
16791
  display: inline-flex;
16736
16792
  flex: none;
@@ -16743,6 +16799,17 @@ button.crewlet-finding-list__row:focus-visible {
16743
16799
  background: var(--color-surface-inset);
16744
16800
  box-shadow: inset 0 0 0 1px var(--color-border-default);
16745
16801
  color: var(--color-text-secondary);
16802
+ transition: box-shadow var(--motion-duration-fast) var(--motion-easing-out);
16803
+ }
16804
+
16805
+ .crewlet-folder-tile:hover .crewlet-folder-tile__glyph {
16806
+ box-shadow: inset 0 0 0 1px var(--color-border-hover);
16807
+ }
16808
+
16809
+ /* The glyph is drawn at the shape's size, whatever size the markup asks. */
16810
+ .crewlet-folder-tile__glyph > svg {
16811
+ width: var(--crewlet-folder-tile-glyph-icon);
16812
+ height: var(--crewlet-folder-tile-glyph-icon);
16746
16813
  }
16747
16814
 
16748
16815
  .crewlet-folder-tile__body {
@@ -16764,35 +16831,105 @@ button.crewlet-finding-list__row:focus-visible {
16764
16831
  }
16765
16832
 
16766
16833
  /*
16767
- * THE FACTS WRAP, NEVER CUT. "Everyone" and "Nothing you can open yet" are
16768
- * both things a reader has to read, and four tiles across a laptop's page do
16769
- * not have room for them on one line: the count moves under who can see the
16770
- * folder rather than losing its end to an ellipsis. The two are told apart by
16771
- * the visibility glyph and the gap between them, not by a separator, so a
16772
- * line that breaks never opens on a stray dot.
16834
+ * THE FACTS ARE ONE RUN, WRAPPED AND NEVER CUT. "Everyone · 12 artifacts · 2
16835
+ * folders" is the card's run: each fact after the first opens with the card's
16836
+ * quiet dot. Four tiles across a laptop's page have no room for "Only you ·
16837
+ * Nothing you can open yet" on one line, so the run breaks between who can
16838
+ * see the folder and what is inside rather than losing its end to an
16839
+ * ellipsis, and the count moves as one.
16840
+ *
16841
+ * A LINE NEVER OPENS ON A DOT. Every fact carries its dot in the separator's
16842
+ * width before it, and the run is drawn that width to the left of the facts'
16843
+ * own edge, which clips the overhang: the first fact of every line, the very
16844
+ * first and any the run broke onto a new line, lays its dot in the clipped
16845
+ * strip. The clip is horizontal only, so nothing above or below is cut.
16846
+ *
16847
+ * ONE QUIET INK for the run: who can see the folder takes the facts' tertiary
16848
+ * step rather than the access label's stronger word, so the line reads as one
16849
+ * calm caption beside the name, as a card's facts do.
16773
16850
  */
16774
16851
  .crewlet-folder-tile__facts {
16775
- display: flex;
16776
- flex-wrap: wrap;
16777
- align-items: center;
16778
- gap: 2px var(--spacing-3);
16852
+ display: block;
16779
16853
  min-width: 0;
16854
+ overflow-x: clip;
16780
16855
  color: var(--color-text-tertiary);
16781
16856
  font-size: var(--crewlet-folder-tile-facts);
16782
16857
  line-height: 1.35;
16783
16858
  }
16784
16859
 
16785
- .crewlet-folder-tile__visibility {
16786
- display: inline-flex;
16787
- flex: none;
16860
+ .crewlet-folder-tile__run {
16861
+ display: flex;
16862
+ flex-wrap: wrap;
16788
16863
  align-items: center;
16864
+ row-gap: 2px;
16865
+ min-width: 0;
16866
+ margin-inline-start: calc(-1 * var(--crewlet-folder-tile-separator));
16789
16867
  }
16790
16868
 
16791
- .crewlet-folder-tile__contents {
16869
+ .crewlet-folder-tile__fact {
16870
+ position: relative;
16871
+ display: block;
16792
16872
  min-width: 0;
16873
+ max-width: 100%;
16874
+ padding-inline-start: var(--crewlet-folder-tile-separator);
16793
16875
  overflow-wrap: anywhere;
16794
16876
  }
16795
16877
 
16878
+ .crewlet-folder-tile__fact::before {
16879
+ position: absolute;
16880
+ inset-inline-start: 0;
16881
+ width: var(--crewlet-folder-tile-separator);
16882
+ text-align: center;
16883
+ }
16884
+
16885
+ .crewlet-folder-tile__fact::before,
16886
+ .crewlet-folder-tile__count-dot::before {
16887
+ content: '·';
16888
+ content: '·' / '';
16889
+ }
16890
+
16891
+ /*
16892
+ * INSIDE THE COUNT the same dot in the same width, carried at the end of the
16893
+ * part before it. Each part is one piece on the line, so "3 artifacts · 3
16894
+ * folders" moves to its own line as one fact, a count too long even for that
16895
+ * breaks only after a dot, and a part wraps within itself only when it alone
16896
+ * is wider than the tile.
16897
+ */
16898
+ .crewlet-folder-tile__count-part {
16899
+ display: inline-block;
16900
+ max-width: 100%;
16901
+ }
16902
+
16903
+ .crewlet-folder-tile__count-dot {
16904
+ display: inline;
16905
+ padding-inline: calc((var(--crewlet-folder-tile-separator) - 0.3em) / 2);
16906
+ }
16907
+
16908
+ .crewlet-folder-tile__visibility {
16909
+ display: flex;
16910
+ align-items: center;
16911
+ }
16912
+
16913
+ .crewlet-folder-tile__visibility > .crewlet-artifact-access {
16914
+ color: inherit;
16915
+ }
16916
+
16917
+ /*
16918
+ * ON A ROW, WHO CAN SEE IT IS ITS GLYPH, as a gallery card's facts draw an
16919
+ * artifact's access: a phone's row has room for one line of facts, and "Only
16920
+ * you · Nothing you can open yet" beside a glyph and a menu broke onto a
16921
+ * second, leaving rows of two heights. The word is still there, hidden from
16922
+ * the eye only (the package's visually hidden recipe, switched by the shape),
16923
+ * so the tile's description keeps saying "Everyone", and the label's title
16924
+ * names it under the pointer.
16925
+ */
16926
+ .crewlet-folder-tile__visibility .crewlet-artifact-access__word {
16927
+ position: var(--crewlet-folder-tile-word-position);
16928
+ width: var(--crewlet-folder-tile-word-size);
16929
+ height: var(--crewlet-folder-tile-word-size);
16930
+ clip-path: var(--crewlet-folder-tile-word-clip);
16931
+ }
16932
+
16796
16933
  /*
16797
16934
  * THE TILE'S OWN CONTROLS, at its trailing edge and outside the link: hidden
16798
16935
  * until the tile is hovered or holds focus, so a gallery rests as names, and
@@ -16822,6 +16959,8 @@ button.crewlet-finding-list__row:focus-visible {
16822
16959
  }
16823
16960
 
16824
16961
  @media (prefers-reduced-motion: reduce) {
16962
+ .crewlet-card.crewlet-folder-tile.is-interactive,
16963
+ .crewlet-folder-tile__glyph,
16825
16964
  .crewlet-folder-tile__actions {
16826
16965
  transition: none;
16827
16966
  }
@@ -20114,7 +20253,7 @@ a.crewlet-icon-btn {
20114
20253
  }
20115
20254
 
20116
20255
 
20117
- /* LogoSlot-37RQBUCR.css */
20256
+ /* LogoSlot-NAJE5XY3.css */
20118
20257
  /*
20119
20258
  * One of a brand's logos on the ground it is made for. The ground and the ink
20120
20259
  * of its guide are the only values here that are not tokens: they arrive
@@ -20343,8 +20482,17 @@ a.crewlet-icon-btn {
20343
20482
  margin-block-start: var(--spacing-2);
20344
20483
  }
20345
20484
 
20485
+ /*
20486
+ * THE ACTION ROWS START AT THE TOP OF THEIR SHARED ROW. The row is as tall as
20487
+ * the tallest slot's actions (a slot whose Replace and Remove wrap onto two
20488
+ * lines), and a row stretched to it and centred put a neighbour's single
20489
+ * button half a line lower than the first button beside it. Held to the start,
20490
+ * every slot's first button stands on one line.
20491
+ */
20346
20492
  .crewlet-logo-slot-group__slots > .crewlet-logo-slot > .crewlet-logo-slot__foot {
20347
20493
  grid-row: 4;
20494
+ align-self: start;
20495
+ align-content: flex-start;
20348
20496
  margin-block-start: var(--spacing-2);
20349
20497
  }
20350
20498
 
@@ -3,6 +3,6 @@ export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-
3
3
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
4
4
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
5
5
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
6
- export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
7
6
  export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality } from '../chunk-NUZHC6MM.js';
7
+ export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
8
8
  export { cx } from '../chunk-ODEQTPFM.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.52.1",
3
+ "version": "0.53.0",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.52.1",
46
- "@crewlethq/tokens": "0.52.1",
45
+ "@crewlethq/icons": "0.53.0",
46
+ "@crewlethq/tokens": "0.53.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -1,8 +1,8 @@
1
1
  import { Stepper } from './chunk-LDGQIDIZ.js';
2
2
  import { PageHeader } from './chunk-DKB73KZI.js';
3
+ import { useMediaMatch } from './chunk-RTPQDNW3.js';
3
4
  import { Disclosure } from './chunk-OGXHZHRX.js';
4
5
  import { useHeadingLevel, nextHeadingLevel, headingTag, HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
- import { useMediaMatch } from './chunk-RTPQDNW3.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './SetupWizard-GZK5UDKC.css';
8
8
  import { useId, useRef, useEffect, createElement } from 'react';
@@ -1,7 +1,7 @@
1
1
  import { SlideStage } from './chunk-RMEBFYL7.js';
2
2
  import { useReorder } from './chunk-XJ2QEBMM.js';
3
- import { Kbd, isApplePlatform } from './chunk-SMBKXWML.js';
4
3
  import { Menu } from './chunk-3JIZ2A6K.js';
4
+ import { Kbd, isApplePlatform } from './chunk-SMBKXWML.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './SlideFilmstrip-PAT7P4OG.css';
@@ -1,7 +1,7 @@
1
1
  import { PRESENCE_LABELS, presenceOrder, collapseSessions } from './chunk-Z7JYG5TF.js';
2
2
  import { Avatar } from './chunk-PZKHBB7D.js';
3
- import { headingTag, useHeadingLevel } from './chunk-PQADV6P6.js';
4
3
  import { Button } from './chunk-OG6CL3EB.js';
4
+ import { headingTag, useHeadingLevel } from './chunk-PQADV6P6.js';
5
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './PeopleRail-SZGHZXVT.css';
@@ -1,7 +1,7 @@
1
1
  import { Toolbar } from './chunk-NR4CPM4T.js';
2
- import { announce } from './chunk-RSAQOKH3.js';
3
2
  import { Button } from './chunk-OG6CL3EB.js';
4
3
  import { returnFocus } from './chunk-NUZHC6MM.js';
4
+ import { announce } from './chunk-RSAQOKH3.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './SelectionBar-XPWKUOSC.css';
7
7
  import { useRef, useEffect } from 'react';
@@ -1,8 +1,8 @@
1
1
  import { StatusDot } from './chunk-WIATRXEJ.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
- import { Count } from './chunk-BHHIIK3M.js';
4
3
  import { Menu } from './chunk-3JIZ2A6K.js';
5
4
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
5
+ import { Count } from './chunk-BHHIIK3M.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './HitArea-QUOS6ZDJ.css';
@@ -1,5 +1,5 @@
1
- import { announce } from './chunk-RSAQOKH3.js';
2
1
  import { IconButton } from './chunk-LACA4JGC.js';
2
+ import { announce } from './chunk-RSAQOKH3.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ArrangeFrame-QXOQTFAH.css';
5
5
  import { forwardRef, useRef, useCallback, useState, useEffect } from 'react';
@@ -1,7 +1,7 @@
1
1
  import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
2
2
  import { Tooltip } from './chunk-I33UIUZD.js';
3
- import { Kbd } from './chunk-SMBKXWML.js';
4
3
  import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
4
+ import { Kbd } from './chunk-SMBKXWML.js';
5
5
  import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { returnFocus } from './chunk-NUZHC6MM.js';
7
7
  import { IconButton } from './chunk-LACA4JGC.js';
@@ -6,9 +6,9 @@ import { ChangeMark } from './chunk-66X5WDKE.js';
6
6
  import { isEmptyValue, displayText, ratingMax, findPerson, findOption, statusTone, editText, textMax, sheetLabels, normalizeValue, sameValue, spokenText, drawnColumns, fitSamples, fittedWidth, columnWidth, SHEET_COLUMN_BOUNDS, sortRows, SHEET_ROW_HEIGHT, cellKey, columnOffsets, SHEET_ROW_NUMBER_WIDTH, rangeOf, presenceByCell, presenceByRow, presenceByColumn, scrollToRow, planClear, visibleRows, cellDescription, nextSort, rowName, inRange, hasPrevious, flagText, toTSV, planPaste, parseTSV, isMod, moveFrom, isTypingKey, editorSide, optionHue, parseText, liveOptions, checkValue } from './chunk-LFSIKGRQ.js';
7
7
  import { presenceLabels } from './chunk-Z7JYG5TF.js';
8
8
  import { Popover } from './chunk-KHJIEPZV.js';
9
+ import { Avatar } from './chunk-PZKHBB7D.js';
9
10
  import { Tooltip } from './chunk-I33UIUZD.js';
10
11
  import { StatusDot } from './chunk-WIATRXEJ.js';
11
- import { Avatar } from './chunk-PZKHBB7D.js';
12
12
  import { Menu } from './chunk-3JIZ2A6K.js';
13
13
  import { Button } from './chunk-OG6CL3EB.js';
14
14
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -1,5 +1,5 @@
1
- import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
2
1
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
2
+ import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
3
3
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
@@ -1,9 +1,9 @@
1
1
  import { Tag } from './chunk-KYIAFNU7.js';
2
2
  import { useListbox } from './chunk-7KHM2FZH.js';
3
- import { announce } from './chunk-RSAQOKH3.js';
4
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
4
  import { useFocusModality } from './chunk-NUZHC6MM.js';
6
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
+ import { announce } from './chunk-RSAQOKH3.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './TagsInput-CLFHP6I2.css';
9
9
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
@@ -1,7 +1,7 @@
1
- import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
2
1
  import { useLayerContainer } from './chunk-OMV5W53A.js';
3
2
  import { Button } from './chunk-OG6CL3EB.js';
4
3
  import { focusables, useModalLayer, useBodyScrollLock } from './chunk-H5XTJ7GJ.js';
4
+ import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Modal-3HMP7WAZ.css';
@@ -1,9 +1,9 @@
1
1
  import { characterCountState, CharacterCount } from './chunk-XCUUI7E7.js';
2
- import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
3
- import { announce } from './chunk-RSAQOKH3.js';
4
2
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
3
  import { useFocusModality } from './chunk-NUZHC6MM.js';
4
+ import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
6
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
+ import { announce } from './chunk-RSAQOKH3.js';
7
7
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './Input-GMOWHZRG.css';
@@ -1,5 +1,5 @@
1
- import { useRoving, tabStop } from './chunk-EGMQURBR.js';
2
1
  import { Avatar } from './chunk-PZKHBB7D.js';
2
+ import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { CREWLET_CHARACTERS, CREWLET_CHARACTER_GEOMETRY } from '@crewlethq/icons/characters';
5
5
  import { jsx } from 'react/jsx-runtime';