@crewlethq/ui 0.52.2 → 0.54.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 (112) hide show
  1. package/README.md +26 -0
  2. package/dist/AgentHandoffPanel/index.js +5 -5
  3. package/dist/AppShell/index.js +3 -3
  4. package/dist/{AppShell-BIUFNT3J.css → AppShell-5LPXYUV3.css} +19 -3
  5. package/dist/ArrangeList/index.js +5 -5
  6. package/dist/ArtifactBar/index.js +5 -5
  7. package/dist/ArtifactCard/index.js +5 -5
  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/Checkbox/index.js +4 -4
  13. package/dist/ColorField/index.js +4 -4
  14. package/dist/Combobox/index.js +4 -4
  15. package/dist/CommandPalette/index.js +4 -4
  16. package/dist/CommentThread/index.js +5 -5
  17. package/dist/Composer/index.js +4 -4
  18. package/dist/ConfirmField/index.js +4 -4
  19. package/dist/ContrastHelp/index.js +1 -1
  20. package/dist/DataGrid/index.js +5 -5
  21. package/dist/DataTable/index.js +6 -6
  22. package/dist/DataView/index.js +8 -8
  23. package/dist/DateTimePicker/index.js +2 -2
  24. package/dist/DocTabsEditor/index.js +5 -5
  25. package/dist/{Editor-FEKMRFBK.js → Editor-RMM3NQJ2.js} +4 -4
  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 +5 -5
  31. package/dist/Input/index.js +3 -3
  32. package/dist/LinkInterstitial/index.js +1 -1
  33. package/dist/ListInput/index.js +4 -4
  34. package/dist/MarkdownEditor/index.js +5 -5
  35. package/dist/Menu/index.js +2 -2
  36. package/dist/MergeConflicts/index.js +5 -5
  37. package/dist/Modal/index.js +1 -1
  38. package/dist/OrgTable/index.js +1 -1
  39. package/dist/PresenterView/index.js +1 -1
  40. package/dist/PrincipalPicker/index.js +5 -5
  41. package/dist/ReviewList/ReviewList.d.ts +58 -0
  42. package/dist/ReviewList/index.d.ts +3 -0
  43. package/dist/ReviewList/index.js +6 -0
  44. package/dist/ReviewList-TIN6C2JN.css +116 -0
  45. package/dist/RichEditor/index.js +1 -1
  46. package/dist/SegmentedControl/index.js +4 -4
  47. package/dist/SelectionBar/index.js +2 -2
  48. package/dist/SetupWizard/SetupWizard.d.ts +17 -11
  49. package/dist/SetupWizard/index.js +1 -1
  50. package/dist/{SetupWizard-GZK5UDKC.css → SetupWizard-Z54H6RYW.css} +86 -15
  51. package/dist/ShareDialog/index.js +1 -1
  52. package/dist/SheetColumnEditor/index.js +9 -9
  53. package/dist/SheetGrid/index.js +4 -4
  54. package/dist/SlideFilmstrip/index.js +4 -4
  55. package/dist/Switcher/index.js +4 -4
  56. package/dist/Tabs/index.js +3 -3
  57. package/dist/TagsInput/index.js +3 -3
  58. package/dist/ThemeSwitcher/index.js +5 -5
  59. package/dist/TimeWindowPicker/index.js +4 -4
  60. package/dist/TreeCanvas/index.js +3 -3
  61. package/dist/TreeGrid/index.js +1 -1
  62. package/dist/VersionCompare/index.js +5 -5
  63. package/dist/{chunk-D6MTBXAJ.js → chunk-4QIGQC6Y.js} +2 -2
  64. package/dist/{chunk-CQEYF3UW.js → chunk-6PEALINJ.js} +2 -2
  65. package/dist/{chunk-2GIWL7IS.js → chunk-BR4FA2NG.js} +1 -1
  66. package/dist/{chunk-VP2ODUCC.js → chunk-CNTBUK24.js} +2 -2
  67. package/dist/{chunk-J53T2QAH.js → chunk-CONCQJ2X.js} +4 -4
  68. package/dist/{chunk-GRKGLZFM.js → chunk-DTCX5KCL.js} +4 -4
  69. package/dist/{chunk-EZ43L6T7.js → chunk-DU5AHR5B.js} +1 -1
  70. package/dist/{chunk-3NXWH5NC.js → chunk-E2X2MXVK.js} +1 -1
  71. package/dist/{chunk-G5SUSCWL.js → chunk-EMC2QD76.js} +1 -1
  72. package/dist/{chunk-SS4XCUUJ.js → chunk-F45VSK2M.js} +2 -2
  73. package/dist/{chunk-ILFEWRLG.js → chunk-GKRPPSWY.js} +1 -1
  74. package/dist/{chunk-7PE56HHD.js → chunk-GM2LN24I.js} +1 -1
  75. package/dist/{chunk-5O72FSOK.js → chunk-HEBW53YG.js} +2 -2
  76. package/dist/{chunk-VN47PYUF.js → chunk-IRAS2CZ5.js} +3 -3
  77. package/dist/{chunk-CUL5XV6O.js → chunk-JM5AN3CF.js} +1 -1
  78. package/dist/{chunk-SQ4JFHO7.js → chunk-K2FNW3MK.js} +1 -1
  79. package/dist/{chunk-3QSKDZR5.js → chunk-LHKIP4ZP.js} +2 -2
  80. package/dist/{chunk-VVOPDWLX.js → chunk-LVFG2RER.js} +1 -1
  81. package/dist/{chunk-SEPSXOGJ.js → chunk-LXCRHVMZ.js} +1 -1
  82. package/dist/{chunk-GPZXBJFU.js → chunk-M5LON3CU.js} +2 -2
  83. package/dist/{chunk-CAVWDJF4.js → chunk-MZ3QFQDL.js} +1 -1
  84. package/dist/{chunk-WXOYHVWG.js → chunk-N224FUS3.js} +1 -1
  85. package/dist/{chunk-X4NIE7CI.js → chunk-NILOJV62.js} +1 -1
  86. package/dist/chunk-OBUQVGEG.js +38 -0
  87. package/dist/{chunk-C6Z3MLSA.js → chunk-PZQK7DWI.js} +1 -1
  88. package/dist/{chunk-XS2FJVMT.js → chunk-PZZHO6OS.js} +1 -1
  89. package/dist/{chunk-SSHDQBHR.js → chunk-QEVW4DIN.js} +1 -1
  90. package/dist/{chunk-RQI43UJ7.js → chunk-QRA2GOK2.js} +1 -1
  91. package/dist/{chunk-34RMTXDZ.js → chunk-RBUA7ZNK.js} +1 -1
  92. package/dist/{chunk-6FVGSWLS.js → chunk-SMVWDO72.js} +1 -1
  93. package/dist/{chunk-FXHWOXGD.js → chunk-TFIINTEU.js} +17 -9
  94. package/dist/{chunk-5WYPSVRX.js → chunk-UD76FCAO.js} +1 -1
  95. package/dist/{chunk-RFPCHMSX.js → chunk-VBEMIZIJ.js} +1 -1
  96. package/dist/{chunk-NMR7AJSB.js → chunk-VEXOODVM.js} +1 -1
  97. package/dist/{chunk-DTSZUH6H.js → chunk-WXWMHYKW.js} +1 -1
  98. package/dist/{chunk-FNPZ3LLQ.js → chunk-XNKARRTG.js} +2 -2
  99. package/dist/{chunk-UJ4VVK7R.js → chunk-XS7HRQVY.js} +1 -1
  100. package/dist/{chunk-6VQA2LZC.js → chunk-ZBZUTUE7.js} +2 -2
  101. package/dist/generated/index.d.ts +1 -0
  102. package/dist/generated/index.js +68 -67
  103. package/dist/index.js +68 -67
  104. package/dist/styles.css +395 -50
  105. package/package.json +3 -3
  106. package/dist/{chunk-SXBJMBSV.js → chunk-25S5YROP.js} +2 -2
  107. package/dist/{chunk-TMM32U7D.js → chunk-3JIZ2A6K.js} +1 -1
  108. package/dist/{chunk-P432I5DQ.js → chunk-55MPFB2U.js} +0 -0
  109. package/dist/{chunk-OCRVY42T.js → chunk-F6CKQX5D.js} +1 -1
  110. package/dist/{chunk-ZFM5L7M4.js → chunk-I6NNUIIT.js} +1 -1
  111. package/dist/{chunk-D7Q5MQRF.js → chunk-ICPQIAD6.js} +1 -1
  112. package/dist/{chunk-LJHH4WWB.js → chunk-QLEJPU5R.js} +2 -2
package/README.md CHANGED
@@ -204,6 +204,32 @@ places:
204
204
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
205
205
  when the content beneath it moves, and every panel anchored inside follows.
206
206
 
207
+ ## Changes in 0.56.0
208
+
209
+ The setup wizard's review step and footer, laid out for a decision.
210
+
211
+ **`ReviewList` is new**: a setup's parts reviewed before it is finished, as rows of one bordered box. Each `ReviewList.Item` carries the part's glyph on a tile (`icon`), its name as a heading one level under where the list sits (`title`), its state as a pill (`status`, a `label` and a `tone` of `success`, `neutral`, `warning` or `danger`), the way back to it at the end of the row (`action`), and the values it holds under the name (`children`). What keeps a part from being finished is said under its values as an alert (`error`), once a finish was tried. Rows share the box's hairline, so a tall row of logos never leaves holes beside a one-line name as a grid of cards does; under 28rem of the list's own width the values take the whole row.
212
+
213
+ **`SetupWizard`'s tracks are its measure, not the window.** The content's track is at most its 640px column, so on a wide window the aside stands right beside the content and the header and the footer end where the parts do, rather than the preview standing at the window's far edge with a void between. A `wide` step takes the content's and the aside's columns together (1000px at most), so its footer ends where every other step's does. A wizard with no `aside` holds no row for one under 70rem, and no second gap above the footer. The tracks are `--crewlet-setup-wizard-rail`, `-column`, `-aside` and `-gap` on the root. What to change: the content no longer carries `max-width: 640px` of its own (the track holds it).
214
+
215
+ **`SetupWizard`'s footer ends the screen.** Inside an `AppShell` the footer takes back the shell's room under the content, so at the end of a scroll it rests on the scroller's bottom edge, where it stood while scrolling, with no strip of empty sheet under it. The wizard is meant to be the screen's last element. On a phone the actions share two rows: the way out and the step's other actions on the first, and the step's last action (its primary) the whole width on the second.
216
+
217
+ **`AppShell` names the room under its content**: `--crewlet-app-shell-content-end` (64px, 48px under the shell breakpoint, 20px on a `fill` screen) pads the content column's end, and a bar docked to the bottom of the scroller takes it back with a negative margin of the same length. The drawn padding is unchanged.
218
+
219
+ ## Changes in 0.55.0
220
+
221
+ The folder tile, made production grade.
222
+
223
+ **A folder tile's facts are one run.** Who can see the folder and what is inside are now separated by the gallery card's quiet dot ("Everyone · 12 artifacts · 2 folders"), in the facts' one tertiary ink. Where the tile is narrow the run breaks before the count, which moves as one; a count too long even for its own line breaks only after a dot. No line opens on a dot. `folderContentsParts` is new: the count as its parts, which `describeFolderContents` joins.
224
+
225
+ **The glyph follows the shape.** The folder glyph is drawn at the shape's size: 20px in a 40px tint on a tile, 16px in a 32px tint on a row. A tile that takes the row's shape under the phone breakpoint draws the row's glyph, where it used to keep the tile's 20px glyph in a 28px tint.
226
+
227
+ **A row's visibility is its glyph.** On a row, and a tile on a phone, who can see the folder is drawn as its glyph alone, as a gallery card draws an artifact's access, so every row keeps one line of facts. The word stays in the tile's description and in the label's title.
228
+
229
+ **Hover and states match the gallery card.** Under the pointer the hairline darkens and the card's hairline shadow settles, at the card's quick step, and the glyph's tint steps up with it. A chosen tile keeps its selected edge and a drop target its accent edge under the pointer, where Card's hover used to replace both. A drop target's glyph takes the accent.
230
+
231
+ Hosts that lay folder tiles above artifact cards should use the cards' column count and column step, so each tile's edges line up with the card below it.
232
+
207
233
  ## Changes in 0.54.0
208
234
 
209
235
  **A `LogoSlotGroup`'s action rows start at the top of their shared row.** Where one slot's actions wrap onto two lines (Replace and Remove in a narrow column), the row is as tall as they are, and the other slots' single buttons stood centred in it, half a line below the first button beside them. Every slot's first button now stands on one line.
@@ -1,19 +1,19 @@
1
- export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-3NXWH5NC.js';
1
+ export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-E2X2MXVK.js';
2
2
  import '../chunk-AUQPBL4O.js';
3
3
  import '../chunk-JQ7IFSF6.js';
4
4
  import '../chunk-OGXHZHRX.js';
5
- import '../chunk-UJ4VVK7R.js';
5
+ import '../chunk-XS7HRQVY.js';
6
6
  import '../chunk-NBDN5JZV.js';
7
7
  import '../chunk-SMBKXWML.js';
8
- import '../chunk-LJHH4WWB.js';
8
+ import '../chunk-QLEJPU5R.js';
9
9
  import '../chunk-XCUUI7E7.js';
10
10
  import '../chunk-FZVJDJFN.js';
11
11
  import '../chunk-BHHIIK3M.js';
12
12
  import '../chunk-PQADV6P6.js';
13
- import '../chunk-RSAQOKH3.js';
14
13
  import '../chunk-OG6CL3EB.js';
15
14
  import '../chunk-H5XTJ7GJ.js';
16
- import '../chunk-LACA4JGC.js';
17
15
  import '../chunk-NUZHC6MM.js';
16
+ import '../chunk-RSAQOKH3.js';
17
+ import '../chunk-LACA4JGC.js';
18
18
  import '../chunk-BZFWDIV6.js';
19
19
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-D6MTBXAJ.js';
1
+ export { AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, useAppShell } from '../chunk-4QIGQC6Y.js';
2
2
  import '../chunk-RTPQDNW3.js';
3
- import '../chunk-TMM32U7D.js';
3
+ import '../chunk-3JIZ2A6K.js';
4
4
  import '../chunk-OMV5W53A.js';
5
5
  import '../chunk-2YTOOH3A.js';
6
6
  import '../chunk-OG6CL3EB.js';
7
7
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -611,13 +611,25 @@
611
611
  programmatic focus does not match :focus-visible, so neither the browser nor
612
612
  the document baseline draws a ring around the whole screen. */
613
613
 
614
+ /*
615
+ * THE CONTENT'S END is room under the last line, so it never reads flush
616
+ * against the window's edge. It is a custom property,
617
+ * `--crewlet-app-shell-content-end`, because a screen that ends in a bar
618
+ * docked to the bottom of the scroller (a setup's footer) IS that edge: the
619
+ * bar takes the room back with a negative margin of the same length, and
620
+ * sits on the scroller's bottom at the end of a scroll exactly where it stood
621
+ * while scrolling, rather than riding the room's height above it.
622
+ */
614
623
  .crewlet-app-shell__content {
624
+ --crewlet-app-shell-content-end: var(--spacing-10);
625
+
615
626
  display: flex;
616
627
  flex-direction: column;
617
628
  gap: var(--spacing-5);
618
629
  max-width: var(--size-content-max);
619
630
  margin: 0 auto;
620
- padding: var(--spacing-5) var(--spacing-5) var(--spacing-10);
631
+ padding: var(--spacing-5) var(--spacing-5);
632
+ padding-bottom: var(--crewlet-app-shell-content-end);
621
633
  min-width: 0;
622
634
  }
623
635
 
@@ -636,8 +648,9 @@
636
648
  }
637
649
 
638
650
  .crewlet-app-shell--fill .crewlet-app-shell__content {
651
+ --crewlet-app-shell-content-end: var(--spacing-5);
652
+
639
653
  height: 100%;
640
- padding-bottom: var(--spacing-5);
641
654
  }
642
655
 
643
656
  /* Hidden by default, revealed by the breakpoint below: the wide layout has the
@@ -756,7 +769,10 @@
756
769
  }
757
770
 
758
771
  .crewlet-app-shell__content {
759
- padding: var(--spacing-4) var(--spacing-4) var(--spacing-9);
772
+ --crewlet-app-shell-content-end: var(--spacing-9);
773
+
774
+ padding: var(--spacing-4) var(--spacing-4);
775
+ padding-bottom: var(--crewlet-app-shell-content-end);
760
776
  }
761
777
  }
762
778
 
@@ -1,13 +1,13 @@
1
- export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-SSHDQBHR.js';
1
+ export { ArrangeList, DEFAULT_ARRANGE_LABELS } from '../chunk-QEVW4DIN.js';
2
2
  import '../chunk-A722MUNR.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
- import '../chunk-RQI43UJ7.js';
5
- import '../chunk-LJHH4WWB.js';
4
+ import '../chunk-QRA2GOK2.js';
5
+ import '../chunk-QLEJPU5R.js';
6
6
  import '../chunk-XCUUI7E7.js';
7
7
  import '../chunk-PQADV6P6.js';
8
- import '../chunk-RSAQOKH3.js';
9
8
  import '../chunk-H5XTJ7GJ.js';
10
- import '../chunk-LACA4JGC.js';
11
9
  import '../chunk-NUZHC6MM.js';
10
+ import '../chunk-RSAQOKH3.js';
11
+ import '../chunk-LACA4JGC.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,20 +1,20 @@
1
- export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-VN47PYUF.js';
1
+ export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-IRAS2CZ5.js';
2
2
  import '../chunk-OOC7Q67K.js';
3
3
  import '../chunk-I33UIUZD.js';
4
- import '../chunk-6FVGSWLS.js';
5
- import '../chunk-ILFEWRLG.js';
4
+ import '../chunk-SMVWDO72.js';
5
+ import '../chunk-GKRPPSWY.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-EGMQURBR.js';
8
8
  import '../chunk-AVL52EME.js';
9
9
  import '../chunk-RSKW25Y5.js';
10
10
  import '../chunk-SMBKXWML.js';
11
11
  import '../chunk-BHHIIK3M.js';
12
- import '../chunk-TMM32U7D.js';
12
+ import '../chunk-3JIZ2A6K.js';
13
13
  import '../chunk-OMV5W53A.js';
14
14
  import '../chunk-2YTOOH3A.js';
15
15
  import '../chunk-OG6CL3EB.js';
16
16
  import '../chunk-H5XTJ7GJ.js';
17
- import '../chunk-LACA4JGC.js';
18
17
  import '../chunk-NUZHC6MM.js';
18
+ import '../chunk-LACA4JGC.js';
19
19
  import '../chunk-BZFWDIV6.js';
20
20
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-CUL5XV6O.js';
1
+ export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-JM5AN3CF.js';
2
2
  import '../chunk-TEUQWOWZ.js';
3
3
  import '../chunk-CI3VPIJN.js';
4
4
  import '../chunk-3CZ7XAVY.js';
@@ -8,16 +8,16 @@ import '../chunk-PZKHBB7D.js';
8
8
  import '../chunk-RV6XB5UV.js';
9
9
  import '../chunk-INHXF2CL.js';
10
10
  import '../chunk-AV2DXAEL.js';
11
- import '../chunk-RQI43UJ7.js';
11
+ import '../chunk-QRA2GOK2.js';
12
12
  import '../chunk-BGLKLXL3.js';
13
13
  export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-RSKW25Y5.js';
14
- import '../chunk-LJHH4WWB.js';
14
+ import '../chunk-QLEJPU5R.js';
15
15
  import '../chunk-XCUUI7E7.js';
16
16
  import '../chunk-BHHIIK3M.js';
17
17
  import '../chunk-PQADV6P6.js';
18
- import '../chunk-RSAQOKH3.js';
19
18
  import '../chunk-H5XTJ7GJ.js';
20
- import '../chunk-LACA4JGC.js';
21
19
  import '../chunk-NUZHC6MM.js';
20
+ import '../chunk-RSAQOKH3.js';
21
+ import '../chunk-LACA4JGC.js';
22
22
  import '../chunk-BZFWDIV6.js';
23
23
  import '../chunk-ODEQTPFM.js';
@@ -1,20 +1,20 @@
1
- export { AvatarPicker } from '../chunk-3QSKDZR5.js';
2
- import '../chunk-34RMTXDZ.js';
1
+ export { AvatarPicker } from '../chunk-LHKIP4ZP.js';
2
+ import '../chunk-RBUA7ZNK.js';
3
3
  import '../chunk-KHJIEPZV.js';
4
- import '../chunk-AYKXMIOR.js';
5
4
  import '../chunk-SNQRGH4A.js';
6
- import '../chunk-6FVGSWLS.js';
7
- import '../chunk-ILFEWRLG.js';
5
+ import '../chunk-AYKXMIOR.js';
6
+ import '../chunk-SMVWDO72.js';
7
+ import '../chunk-GKRPPSWY.js';
8
8
  import '../chunk-WIATRXEJ.js';
9
9
  import '../chunk-EGMQURBR.js';
10
10
  import '../chunk-PZKHBB7D.js';
11
11
  import '../chunk-BHHIIK3M.js';
12
- import '../chunk-TMM32U7D.js';
12
+ import '../chunk-3JIZ2A6K.js';
13
13
  import '../chunk-OMV5W53A.js';
14
14
  import '../chunk-2YTOOH3A.js';
15
15
  import '../chunk-OG6CL3EB.js';
16
16
  import '../chunk-H5XTJ7GJ.js';
17
- import '../chunk-LACA4JGC.js';
18
17
  import '../chunk-NUZHC6MM.js';
18
+ import '../chunk-LACA4JGC.js';
19
19
  import '../chunk-BZFWDIV6.js';
20
20
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
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-D7Q5MQRF.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-ICPQIAD6.js';
2
2
  import '../chunk-LM3ISVJA.js';
3
3
  import '../chunk-I33UIUZD.js';
4
4
  import '../chunk-SMBKXWML.js';
5
5
  import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-OG6CL3EB.js';
7
7
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,15 +1,15 @@
1
- export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-VP2ODUCC.js';
1
+ export { BOARD_NAME_MIN_CHARS, CANVAS_BOARD_MAX_LIVE, CANVAS_BOARD_MIN_LIVE_WIDTH, CANVAS_BOARD_MIN_ZOOM, CANVAS_NOTE_COLORS, CanvasBoard, TITLE_GLYPH_EM, boardName, boardRoom, liveBoards, titleSize } from '../chunk-CNTBUK24.js';
2
2
  import '../chunk-5SZGKSGL.js';
3
- import '../chunk-X4NIE7CI.js';
3
+ import '../chunk-NILOJV62.js';
4
4
  import '../chunk-NR4CPM4T.js';
5
- import '../chunk-D7Q5MQRF.js';
5
+ import '../chunk-ICPQIAD6.js';
6
6
  import '../chunk-LM3ISVJA.js';
7
7
  import '../chunk-I33UIUZD.js';
8
8
  import '../chunk-SMBKXWML.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-OG6CL3EB.js';
11
11
  import '../chunk-H5XTJ7GJ.js';
12
- import '../chunk-LACA4JGC.js';
13
12
  import '../chunk-NUZHC6MM.js';
13
+ import '../chunk-LACA4JGC.js';
14
14
  import '../chunk-BZFWDIV6.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { CanvasToolbar, toolForKey } from '../chunk-X4NIE7CI.js';
1
+ export { CanvasToolbar, toolForKey } from '../chunk-NILOJV62.js';
2
2
  import '../chunk-NR4CPM4T.js';
3
- import '../chunk-D7Q5MQRF.js';
3
+ import '../chunk-ICPQIAD6.js';
4
4
  import '../chunk-LM3ISVJA.js';
5
5
  import '../chunk-I33UIUZD.js';
6
6
  import '../chunk-SMBKXWML.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-H5XTJ7GJ.js';
10
- import '../chunk-LACA4JGC.js';
11
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-LACA4JGC.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { Checkbox, CheckboxGroup } from '../chunk-RQI43UJ7.js';
2
- import '../chunk-LJHH4WWB.js';
1
+ export { Checkbox, CheckboxGroup } from '../chunk-QRA2GOK2.js';
2
+ import '../chunk-QLEJPU5R.js';
3
3
  import '../chunk-XCUUI7E7.js';
4
4
  import '../chunk-PQADV6P6.js';
5
- import '../chunk-RSAQOKH3.js';
6
5
  import '../chunk-H5XTJ7GJ.js';
7
- import '../chunk-LACA4JGC.js';
8
6
  import '../chunk-NUZHC6MM.js';
7
+ import '../chunk-RSAQOKH3.js';
8
+ import '../chunk-LACA4JGC.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { ColorField } from '../chunk-5WYPSVRX.js';
1
+ export { ColorField } from '../chunk-UD76FCAO.js';
2
2
  import '../chunk-7W3LYIOC.js';
3
- import '../chunk-LJHH4WWB.js';
3
+ import '../chunk-QLEJPU5R.js';
4
4
  import '../chunk-XCUUI7E7.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-RSAQOKH3.js';
7
6
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
7
  import '../chunk-NUZHC6MM.js';
8
+ import '../chunk-RSAQOKH3.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,12 +1,12 @@
1
- export { Combobox } from '../chunk-C6Z3MLSA.js';
1
+ export { Combobox } from '../chunk-PZQK7DWI.js';
2
2
  import '../chunk-7KHM2FZH.js';
3
- import '../chunk-LJHH4WWB.js';
3
+ import '../chunk-QLEJPU5R.js';
4
4
  import '../chunk-XCUUI7E7.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-RSAQOKH3.js';
7
6
  import '../chunk-2YTOOH3A.js';
8
7
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-LACA4JGC.js';
10
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-RSAQOKH3.js';
10
+ import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,17 +1,17 @@
1
- export { CommandPalette } from '../chunk-NMR7AJSB.js';
1
+ export { CommandPalette } from '../chunk-VEXOODVM.js';
2
2
  import '../chunk-YCC2S7DF.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-SMBKXWML.js';
5
- import '../chunk-LJHH4WWB.js';
5
+ import '../chunk-QLEJPU5R.js';
6
6
  import '../chunk-XCUUI7E7.js';
7
7
  import '../chunk-BHHIIK3M.js';
8
8
  import '../chunk-PQADV6P6.js';
9
- import '../chunk-RSAQOKH3.js';
10
9
  import '../chunk-OMV5W53A.js';
11
10
  import '../chunk-2YTOOH3A.js';
12
11
  import '../chunk-OG6CL3EB.js';
13
12
  import '../chunk-H5XTJ7GJ.js';
14
- import '../chunk-LACA4JGC.js';
15
13
  import '../chunk-NUZHC6MM.js';
14
+ import '../chunk-RSAQOKH3.js';
15
+ import '../chunk-LACA4JGC.js';
16
16
  import '../chunk-BZFWDIV6.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -1,20 +1,20 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-EZ43L6T7.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-DU5AHR5B.js';
2
2
  import '../chunk-CI3VPIJN.js';
3
3
  import '../chunk-3CZ7XAVY.js';
4
4
  import '../chunk-EUCC37WY.js';
5
5
  import '../chunk-5AQBPHZD.js';
6
6
  import '../chunk-PZKHBB7D.js';
7
7
  import '../chunk-PWG3VHRQ.js';
8
- import '../chunk-UJ4VVK7R.js';
8
+ import '../chunk-XS7HRQVY.js';
9
9
  import '../chunk-SMBKXWML.js';
10
- import '../chunk-LJHH4WWB.js';
10
+ import '../chunk-QLEJPU5R.js';
11
11
  import '../chunk-XCUUI7E7.js';
12
12
  import '../chunk-BHHIIK3M.js';
13
13
  import '../chunk-PQADV6P6.js';
14
- import '../chunk-RSAQOKH3.js';
15
14
  import '../chunk-OG6CL3EB.js';
16
15
  import '../chunk-H5XTJ7GJ.js';
17
- import '../chunk-LACA4JGC.js';
18
16
  import '../chunk-NUZHC6MM.js';
17
+ import '../chunk-RSAQOKH3.js';
18
+ import '../chunk-LACA4JGC.js';
19
19
  import '../chunk-BZFWDIV6.js';
20
20
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-UJ4VVK7R.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-XS7HRQVY.js';
2
2
  import '../chunk-SMBKXWML.js';
3
- import '../chunk-LJHH4WWB.js';
3
+ import '../chunk-QLEJPU5R.js';
4
4
  import '../chunk-XCUUI7E7.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-RSAQOKH3.js';
7
6
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
7
  import '../chunk-NUZHC6MM.js';
8
+ import '../chunk-RSAQOKH3.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { ConfirmField, confirmMatches } from '../chunk-2GIWL7IS.js';
1
+ export { ConfirmField, confirmMatches } from '../chunk-BR4FA2NG.js';
2
2
  import '../chunk-5CLW2CXT.js';
3
- import '../chunk-LJHH4WWB.js';
3
+ import '../chunk-QLEJPU5R.js';
4
4
  import '../chunk-XCUUI7E7.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-RSAQOKH3.js';
7
6
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-LACA4JGC.js';
9
7
  import '../chunk-NUZHC6MM.js';
8
+ import '../chunk-RSAQOKH3.js';
9
+ import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -6,7 +6,7 @@ import '../chunk-7W3LYIOC.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-H5XTJ7GJ.js';
9
- import '../chunk-LACA4JGC.js';
10
9
  import '../chunk-NUZHC6MM.js';
10
+ import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from '../chunk-7PE56HHD.js';
2
- import '../chunk-RQI43UJ7.js';
1
+ export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from '../chunk-GM2LN24I.js';
2
+ import '../chunk-QRA2GOK2.js';
3
3
  import '../chunk-PPUR46MK.js';
4
- import '../chunk-LJHH4WWB.js';
4
+ import '../chunk-QLEJPU5R.js';
5
5
  import '../chunk-XCUUI7E7.js';
6
6
  import '../chunk-PQADV6P6.js';
7
- import '../chunk-RSAQOKH3.js';
8
7
  import '../chunk-RTPQDNW3.js';
9
8
  import '../chunk-OG6CL3EB.js';
10
9
  import '../chunk-H5XTJ7GJ.js';
11
- import '../chunk-LACA4JGC.js';
12
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-RSAQOKH3.js';
12
+ import '../chunk-LACA4JGC.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,19 +1,19 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-5O72FSOK.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-HEBW53YG.js';
2
2
  import '../chunk-YCC2S7DF.js';
3
3
  import '../chunk-STJ7QBC3.js';
4
4
  import '../chunk-DTIW4CHZ.js';
5
5
  import '../chunk-EUCC37WY.js';
6
6
  import '../chunk-AV2DXAEL.js';
7
- import '../chunk-RQI43UJ7.js';
8
- import '../chunk-LJHH4WWB.js';
7
+ import '../chunk-QRA2GOK2.js';
8
+ import '../chunk-QLEJPU5R.js';
9
9
  import '../chunk-XCUUI7E7.js';
10
10
  import '../chunk-PQADV6P6.js';
11
- import '../chunk-RSAQOKH3.js';
12
- import '../chunk-TMM32U7D.js';
11
+ import '../chunk-3JIZ2A6K.js';
13
12
  import '../chunk-OMV5W53A.js';
14
13
  import '../chunk-OG6CL3EB.js';
15
14
  import '../chunk-H5XTJ7GJ.js';
16
- import '../chunk-LACA4JGC.js';
17
15
  import '../chunk-NUZHC6MM.js';
16
+ import '../chunk-RSAQOKH3.js';
17
+ import '../chunk-LACA4JGC.js';
18
18
  import '../chunk-BZFWDIV6.js';
19
19
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-GRKGLZFM.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-DTCX5KCL.js';
2
2
  import '../chunk-DKB73KZI.js';
3
- import '../chunk-5O72FSOK.js';
4
- import '../chunk-ZFM5L7M4.js';
3
+ import '../chunk-I6NNUIIT.js';
4
+ import '../chunk-HEBW53YG.js';
5
5
  import '../chunk-YCC2S7DF.js';
6
6
  import '../chunk-7KHM2FZH.js';
7
7
  import '../chunk-STJ7QBC3.js';
@@ -12,18 +12,18 @@ import '../chunk-KHJIEPZV.js';
12
12
  import '../chunk-3CZ7XAVY.js';
13
13
  import '../chunk-EUCC37WY.js';
14
14
  import '../chunk-AV2DXAEL.js';
15
- import '../chunk-RQI43UJ7.js';
15
+ import '../chunk-QRA2GOK2.js';
16
16
  import '../chunk-SMBKXWML.js';
17
- import '../chunk-LJHH4WWB.js';
17
+ import '../chunk-QLEJPU5R.js';
18
18
  import '../chunk-XCUUI7E7.js';
19
19
  import '../chunk-BHHIIK3M.js';
20
20
  import '../chunk-PQADV6P6.js';
21
- import '../chunk-RSAQOKH3.js';
22
- import '../chunk-TMM32U7D.js';
21
+ import '../chunk-3JIZ2A6K.js';
23
22
  import '../chunk-OMV5W53A.js';
24
23
  import '../chunk-OG6CL3EB.js';
25
24
  import '../chunk-H5XTJ7GJ.js';
26
- import '../chunk-LACA4JGC.js';
27
25
  import '../chunk-NUZHC6MM.js';
26
+ import '../chunk-RSAQOKH3.js';
27
+ import '../chunk-LACA4JGC.js';
28
28
  import '../chunk-BZFWDIV6.js';
29
29
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-ZFM5L7M4.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-I6NNUIIT.js';
2
2
  import '../chunk-GXQ3B46I.js';
3
3
  import '../chunk-KHJIEPZV.js';
4
4
  import '../chunk-OMV5W53A.js';
5
5
  import '../chunk-OG6CL3EB.js';
6
6
  import '../chunk-H5XTJ7GJ.js';
7
- import '../chunk-LACA4JGC.js';
8
7
  import '../chunk-NUZHC6MM.js';
8
+ import '../chunk-LACA4JGC.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-FNPZ3LLQ.js';
1
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-XNKARRTG.js';
2
2
  import '../chunk-XJ2QEBMM.js';
3
- import '../chunk-LJHH4WWB.js';
3
+ import '../chunk-QLEJPU5R.js';
4
4
  import '../chunk-XCUUI7E7.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-RSAQOKH3.js';
7
- import '../chunk-TMM32U7D.js';
6
+ import '../chunk-3JIZ2A6K.js';
8
7
  import '../chunk-OMV5W53A.js';
9
8
  import '../chunk-OG6CL3EB.js';
10
9
  import '../chunk-H5XTJ7GJ.js';
11
- import '../chunk-LACA4JGC.js';
12
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-RSAQOKH3.js';
12
+ import '../chunk-LACA4JGC.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -2,16 +2,16 @@ import { richEditorLabels } from './chunk-CSQTDGTS.js';
2
2
  import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
3
3
  import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-BAKPMH3S.js';
4
4
  import { Toolbar } from './chunk-NR4CPM4T.js';
5
- import { FormField, Input } from './chunk-LJHH4WWB.js';
5
+ import { FormField, Input } from './chunk-QLEJPU5R.js';
6
6
  import './chunk-XCUUI7E7.js';
7
7
  import './chunk-PQADV6P6.js';
8
- import './chunk-RSAQOKH3.js';
9
- import { Menu } from './chunk-TMM32U7D.js';
8
+ import { Menu } from './chunk-3JIZ2A6K.js';
10
9
  import { placePopup, viewportBounds } from './chunk-OMV5W53A.js';
11
10
  import { Button } from './chunk-OG6CL3EB.js';
12
11
  import { usePopupLayer } from './chunk-H5XTJ7GJ.js';
13
- import { IconButton } from './chunk-LACA4JGC.js';
14
12
  import './chunk-NUZHC6MM.js';
13
+ import './chunk-RSAQOKH3.js';
14
+ import { IconButton } from './chunk-LACA4JGC.js';
15
15
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
16
16
  import { cx } from './chunk-ODEQTPFM.js';
17
17
  import { forwardRef, useMemo, useRef, useState, useId, useSyncExternalStore, useCallback, useLayoutEffect, useEffect, useImperativeHandle } from 'react';
@@ -17,14 +17,17 @@ export interface FolderContentsLabels {
17
17
  nothing: string;
18
18
  }
19
19
  /**
20
- * The line a folder's tile and its list row say about what is inside: "12
21
- * artifacts · 2 folders", one part alone when the other is none, and "Nothing
22
- * you can open yet" for neither.
20
+ * What a folder's tile and its list row say about what is inside, as its
21
+ * parts: "12 artifacts" and "2 folders", one part alone when the other is
22
+ * none, and "Nothing you can open yet" for neither.
23
23
  *
24
24
  * ONE PHRASING, EXPORTED, so the grid's tile and the list's name cell
25
- * (`ArtifactNameCell kind="folder"`, whose `detail` takes this) never say the
26
- * same count two ways.
25
+ * (`ArtifactNameCell kind="folder"`, whose `detail` takes
26
+ * `describeFolderContents`) never say the same count two ways. The tile draws
27
+ * the parts with its own separator between them.
27
28
  */
29
+ export declare function folderContentsParts(contents: FolderContents, labels?: Partial<FolderContentsLabels>): string[];
30
+ /** The same parts as one line: "12 artifacts · 2 folders". */
28
31
  export declare function describeFolderContents(contents: FolderContents, labels?: Partial<FolderContentsLabels>): string;
29
32
  export type FolderTileSize = 'tile' | 'row';
30
33
  export interface FolderTileLabels extends FolderContentsLabels {
@@ -60,24 +63,28 @@ export interface FolderTileProps {
60
63
  dropTarget?: boolean | undefined;
61
64
  /**
62
65
  * `tile` is a gallery's (a grid of them, a few across); `row` is the full
63
- * width, 44px row a phone takes. A tile takes the row's shape on its own
64
- * under the phone breakpoint.
66
+ * width row a phone takes, at least 44px tall. A tile takes the row's shape
67
+ * on its own under the phone breakpoint.
65
68
  */
66
69
  size?: FolderTileSize | undefined;
67
70
  className?: string | undefined;
68
71
  labels?: Partial<FolderTileLabels> | undefined;
69
72
  }
70
73
  /**
71
- * A folder in a gallery: the folder glyph on a neutral tint, the name on one
72
- * line, who can see it and what is inside, and a More menu.
74
+ * A folder in a gallery: the folder glyph on a neutral tint with the More
75
+ * menu level with it, the name on one line, and one quiet run of facts (who
76
+ * can see it, then what is inside).
73
77
  *
74
78
  * SHORTER THAN AN ARTIFACT'S CARD AND WITH NO PREVIEW, so a folder and an
75
79
  * artifact never look alike and the kind's badge keeps its meaning. The tint
76
- * is neutral for the same reason: a folder is not a kind.
80
+ * is neutral for the same reason: a folder is not a kind. Everything else is
81
+ * the card's: its inset, its corner, its type steps and its hover.
77
82
  *
78
- * THE FACTS ARE NEVER CUT. Who can see the folder and what is inside wrap
79
- * onto a second line where the tile is narrow; only the name, which carries
80
- * its whole self on hover, is cut to one line.
83
+ * THE FACTS ARE ONE RUN, NEVER CUT. Each fact after the first is opened by
84
+ * the card's quiet dot. Where the tile is narrow the run breaks between who
85
+ * can see the folder and what is inside, the count holding together, and a
86
+ * line that breaks never opens on a dot. Only the name, which carries its
87
+ * whole self on hover, is cut to one line.
81
88
  *
82
89
  * THE WHOLE TILE IS ONE LINK, named by the folder's name alone and described
83
90
  * by the rest, so a reader moving by link hears "Q3 launch" and then, if they