@crewlethq/ui 0.29.0 → 0.31.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 (51) hide show
  1. package/README.md +28 -3
  2. package/dist/ArtifactBar/ArtifactBar.d.ts +13 -1
  3. package/dist/ArtifactBar/index.js +1 -1
  4. package/dist/{ArtifactBar-IBWB5POL.css → ArtifactBar-MLMJHWY6.css} +7 -0
  5. package/dist/ArtifactCover/index.js +2 -2
  6. package/dist/CommentThread/index.js +2 -2
  7. package/dist/DataView/index.js +2 -2
  8. package/dist/Document/Document.d.ts +8 -1
  9. package/dist/Document/index.js +1 -1
  10. package/dist/{Document-PQGXJHB7.css → Document-G3YTZIUL.css} +71 -0
  11. package/dist/EditingStatus/EditingStatus.d.ts +25 -0
  12. package/dist/EditingStatus/index.d.ts +3 -0
  13. package/dist/EditingStatus/index.js +2 -0
  14. package/dist/EditingStatus-NFADEPSX.css +53 -0
  15. package/dist/Editor-YZ7KG2RD.js +2099 -0
  16. package/dist/Markdown/grammar.d.ts +170 -0
  17. package/dist/Markdown/index.d.ts +2 -0
  18. package/dist/Markdown/index.js +1 -0
  19. package/dist/RichEditor/Editor.d.ts +17 -0
  20. package/dist/RichEditor/RichEditor.d.ts +26 -0
  21. package/dist/RichEditor/codec.d.ts +78 -0
  22. package/dist/RichEditor/commands.d.ts +89 -0
  23. package/dist/RichEditor/index.d.ts +4 -0
  24. package/dist/RichEditor/index.js +8 -0
  25. package/dist/RichEditor/keys.d.ts +16 -0
  26. package/dist/RichEditor/nodeviews.d.ts +60 -0
  27. package/dist/RichEditor/paste.d.ts +47 -0
  28. package/dist/RichEditor/plugins.d.ts +49 -0
  29. package/dist/RichEditor/roundtrip.d.ts +14 -0
  30. package/dist/RichEditor/schema.d.ts +23 -0
  31. package/dist/RichEditor/types.d.ts +140 -0
  32. package/dist/RichEditor-NPD2KAPS.css +419 -0
  33. package/dist/RichEditorMarkdown/index.d.ts +1 -0
  34. package/dist/RichEditorMarkdown/index.js +3 -0
  35. package/dist/chunk-3DPIU2Q7.js +28 -0
  36. package/dist/{chunk-XALUCIG5.js → chunk-6AH2XJ3Q.js} +1 -1
  37. package/dist/chunk-A4E5YLXO.js +85 -0
  38. package/dist/{chunk-FKULOLKG.js → chunk-GR55WT4R.js} +1 -1
  39. package/dist/chunk-IDBHX5SR.js +12 -0
  40. package/dist/{chunk-WI6K5M5X.js → chunk-M3LUNN7F.js} +1 -1
  41. package/dist/{chunk-QMBP23BL.js → chunk-P4BOXB6E.js} +17 -1
  42. package/dist/chunk-SKOYC2CF.js +288 -0
  43. package/dist/chunk-VOX3YRFO.js +76 -0
  44. package/dist/chunk-YFW4MTK4.js +749 -0
  45. package/dist/generated/index.d.ts +4 -0
  46. package/dist/generated/index.js +50 -44
  47. package/dist/index.js +50 -44
  48. package/dist/styles.css +558 -2
  49. package/package.json +13 -3
  50. package/dist/{chunk-IFNQKWUO.js → chunk-OC46246T.js} +0 -0
  51. package/dist/{chunk-RODMM35O.js → chunk-UVJ5FF5V.js} +1 -1
package/dist/styles.css CHANGED
@@ -1996,7 +1996,7 @@ button.crewlet-account-row__who:focus-visible {
1996
1996
  }
1997
1997
 
1998
1998
 
1999
- /* ArtifactBar-IBWB5POL.css */
1999
+ /* ArtifactBar-MLMJHWY6.css */
2000
2000
  /*
2001
2001
  * One row, one hairline under it, the height of a large row. The lead (the
2002
2002
  * way back, the glyph, the title, the version) takes what the end leaves it
@@ -2191,6 +2191,13 @@ button.crewlet-account-row__who:focus-visible {
2191
2191
  margin-inline-start: var(--spacing-1);
2192
2192
  }
2193
2193
 
2194
+ .crewlet-artifact-bar__status {
2195
+ display: inline-flex;
2196
+ align-items: center;
2197
+ min-width: 0;
2198
+ margin-inline-end: var(--spacing-2);
2199
+ }
2200
+
2194
2201
  .crewlet-artifact-bar__presence {
2195
2202
  display: inline-flex;
2196
2203
  align-items: center;
@@ -11158,7 +11165,7 @@ svg.crewlet-datetime__chevron {
11158
11165
  }
11159
11166
 
11160
11167
 
11161
- /* Document-PQGXJHB7.css */
11168
+ /* Document-G3YTZIUL.css */
11162
11169
  /*
11163
11170
  * Rendered markdown, set as a document (Document.tsx).
11164
11171
  *
@@ -11448,6 +11455,133 @@ svg.crewlet-datetime__chevron {
11448
11455
  overflow-wrap: anywhere;
11449
11456
  }
11450
11457
 
11458
+ /*
11459
+ * A TABLE CELL'S ALIGNMENT, read off `data-align` as well as off a style: an
11460
+ * editor that may not write a style attribute under a strict policy marks a
11461
+ * column this way, and the cell is set as the reader's is.
11462
+ */
11463
+ .crewlet-document :where(th, td)[data-align='center'] {
11464
+ text-align: center;
11465
+ }
11466
+
11467
+ .crewlet-document :where(th, td)[data-align='right'] {
11468
+ text-align: end;
11469
+ }
11470
+
11471
+ /*
11472
+ * A CALLOUT (`> [!NOTE]` and its four siblings): a tinted block with its tone
11473
+ * named on a line of its own, read by its shape as everything here is. A
11474
+ * renderer emits an element with `data-callout="<tone>"` and `role="note"`,
11475
+ * the tone's name in an element with `data-callout-label`, and the blocks in
11476
+ * one with `data-callout-body`. The fill, the ink and the line are each tone's
11477
+ * declared steps, the same three `Callout` paints with.
11478
+ */
11479
+ .crewlet-document [data-callout] {
11480
+ --crewlet-document-callout-fill: var(--color-feedback-info-soft);
11481
+ --crewlet-document-callout-ink: var(--color-feedback-info-ink);
11482
+ --crewlet-document-callout-line: var(--color-feedback-info-line);
11483
+ padding: var(--spacing-3) var(--spacing-4);
11484
+ border-inline-start: 3px solid var(--crewlet-document-callout-line);
11485
+ border-radius: var(--radius-sm);
11486
+ background: var(--crewlet-document-callout-fill);
11487
+ }
11488
+
11489
+ .crewlet-document [data-callout='tip'] {
11490
+ --crewlet-document-callout-fill: var(--color-feedback-success-soft);
11491
+ --crewlet-document-callout-ink: var(--color-feedback-success-ink);
11492
+ --crewlet-document-callout-line: var(--color-feedback-success-line);
11493
+ }
11494
+
11495
+ .crewlet-document [data-callout='important'] {
11496
+ --crewlet-document-callout-fill: var(--color-brand-accent-soft);
11497
+ --crewlet-document-callout-ink: var(--color-brand-accent-ink);
11498
+ --crewlet-document-callout-line: var(--color-brand-accent);
11499
+ }
11500
+
11501
+ .crewlet-document [data-callout='warning'] {
11502
+ --crewlet-document-callout-fill: var(--color-feedback-warning-soft);
11503
+ --crewlet-document-callout-ink: var(--color-feedback-warning-ink);
11504
+ --crewlet-document-callout-line: var(--color-feedback-warning-line);
11505
+ }
11506
+
11507
+ .crewlet-document [data-callout='caution'] {
11508
+ --crewlet-document-callout-fill: var(--color-feedback-danger-soft);
11509
+ --crewlet-document-callout-ink: var(--color-feedback-danger-ink);
11510
+ --crewlet-document-callout-line: var(--color-feedback-danger-line);
11511
+ }
11512
+
11513
+ .crewlet-document [data-callout-label] {
11514
+ margin: 0 0 var(--spacing-1);
11515
+ color: var(--crewlet-document-callout-ink);
11516
+ font-size: var(--font-size-xs);
11517
+ font-weight: var(--font-weight-semibold);
11518
+ line-height: var(--font-line-height-snug);
11519
+ }
11520
+
11521
+ .crewlet-document [data-callout-body] {
11522
+ color: var(--color-text-primary);
11523
+ }
11524
+
11525
+ .crewlet-document [data-callout-body] > * + * {
11526
+ margin-block-start: var(--crewlet-document-gap);
11527
+ }
11528
+
11529
+
11530
+ /* EditingStatus-NFADEPSX.css */
11531
+ /*
11532
+ * The editing status (EditingStatus.tsx): a word and a dot, in the bar's own
11533
+ * small step, quiet until something is unsaved.
11534
+ */
11535
+
11536
+ .crewlet-editing-status {
11537
+ display: inline-flex;
11538
+ align-items: center;
11539
+ gap: var(--spacing-2);
11540
+ min-width: 0;
11541
+ color: var(--color-text-secondary);
11542
+ font-family: var(--font-family-sans);
11543
+ font-size: var(--font-size-compact);
11544
+ white-space: nowrap;
11545
+ }
11546
+
11547
+ .crewlet-editing-status__dot {
11548
+ flex: none;
11549
+ width: var(--spacing-2);
11550
+ height: var(--spacing-2);
11551
+ border-radius: var(--radius-circle);
11552
+ background: var(--color-text-tertiary);
11553
+ }
11554
+
11555
+ .crewlet-editing-status--dirty .crewlet-editing-status__dot {
11556
+ background: var(--color-brand-accent);
11557
+ }
11558
+
11559
+ .crewlet-editing-status__label {
11560
+ color: var(--color-text-primary);
11561
+ font-weight: var(--font-weight-medium);
11562
+ }
11563
+
11564
+ .crewlet-editing-status__state {
11565
+ overflow: hidden;
11566
+ color: var(--color-text-tertiary);
11567
+ text-overflow: ellipsis;
11568
+ }
11569
+
11570
+ .crewlet-editing-status__state::before {
11571
+ content: '\00b7';
11572
+ margin-right: var(--spacing-2);
11573
+ }
11574
+
11575
+ @media (width < 480px) {
11576
+ .crewlet-editing-status__state {
11577
+ position: absolute;
11578
+ width: 1px;
11579
+ height: 1px;
11580
+ overflow: hidden;
11581
+ clip-path: inset(50%);
11582
+ }
11583
+ }
11584
+
11451
11585
 
11452
11586
  /* EmptyState-C6HRBGT7.css */
11453
11587
  /*
@@ -18425,6 +18559,428 @@ button.crewlet-presence-stack__member:focus-visible {
18425
18559
  }
18426
18560
 
18427
18561
 
18562
+ /* RichEditor-NPD2KAPS.css */
18563
+ /*
18564
+ * The rich editor (RichEditor.tsx).
18565
+ *
18566
+ * THE DOCUMENT IS SET BY `Document`'s stylesheet, not by this one: the
18567
+ * editable element carries `crewlet-document`, so a heading, a list, a quote
18568
+ * or a table looks the same while it is edited as when it is read. What is
18569
+ * here is only what editing adds: the caret's world (ProseMirror's own
18570
+ * required rules, the placeholder, a selected node), the controls a block
18571
+ * draws in its slot, and the surfaces that float over the page (the slash
18572
+ * menu, the selection toolbar, the link and picture panels, the table bar).
18573
+ */
18574
+
18575
+ .crewlet-rich-editor {
18576
+ position: relative;
18577
+ min-width: 0;
18578
+ }
18579
+
18580
+ /* ── the editable document ─────────────────────────────────────────────── */
18581
+
18582
+ /*
18583
+ * ProseMirror's own required rules: whitespace is preserved as typed (the
18584
+ * view maps it to positions one to one), and ligatures are off so a caret
18585
+ * never lands inside one.
18586
+ */
18587
+ .crewlet-rich-editor__content {
18588
+ position: relative;
18589
+ min-height: calc(var(--spacing-10) * 3);
18590
+ outline: none;
18591
+ white-space: pre-wrap;
18592
+ white-space: break-spaces;
18593
+ word-wrap: break-word;
18594
+ font-variant-ligatures: none;
18595
+ font-feature-settings: 'liga' 0;
18596
+ caret-color: var(--color-brand-accent);
18597
+ }
18598
+
18599
+ .crewlet-rich-editor__content pre {
18600
+ white-space: pre-wrap;
18601
+ }
18602
+
18603
+ .crewlet-rich-editor__content li {
18604
+ position: relative;
18605
+ }
18606
+
18607
+ .crewlet-rich-editor__content [draggable][contenteditable='false'] {
18608
+ user-select: text;
18609
+ }
18610
+
18611
+ .crewlet-rich-editor__content.ProseMirror-hideselection *::selection {
18612
+ background: transparent;
18613
+ }
18614
+
18615
+ .crewlet-rich-editor__content.ProseMirror-hideselection {
18616
+ caret-color: transparent;
18617
+ }
18618
+
18619
+ .crewlet-rich-editor__content img.ProseMirror-separator {
18620
+ display: inline !important;
18621
+ border: none !important;
18622
+ margin: 0 !important;
18623
+ }
18624
+
18625
+ /* A selected block (a picture, a rule) is outlined, as a focused control is. */
18626
+ .crewlet-rich-editor__content .ProseMirror-selectednode {
18627
+ outline: 2px solid var(--color-focus);
18628
+ outline-offset: 2px;
18629
+ border-radius: var(--radius-xs);
18630
+ }
18631
+
18632
+ /* The caret between two blocks nobody can type into (two tables, say). */
18633
+ .crewlet-rich-editor__content .ProseMirror-gapcursor {
18634
+ display: none;
18635
+ position: absolute;
18636
+ pointer-events: none;
18637
+ }
18638
+
18639
+ .crewlet-rich-editor__content .ProseMirror-gapcursor::after {
18640
+ content: '';
18641
+ display: block;
18642
+ position: absolute;
18643
+ top: calc(var(--spacing-2) * -1);
18644
+ width: var(--spacing-5);
18645
+ border-top: 1px solid var(--color-text-primary);
18646
+ animation: crewlet-rich-editor-caret calc(var(--motion-duration-breath) / 2) steps(2, start) infinite;
18647
+ }
18648
+
18649
+ @keyframes crewlet-rich-editor-caret {
18650
+ to {
18651
+ visibility: hidden;
18652
+ }
18653
+ }
18654
+
18655
+ .crewlet-rich-editor__content.ProseMirror-focused .ProseMirror-gapcursor {
18656
+ display: block;
18657
+ }
18658
+
18659
+ /*
18660
+ * The placeholder and the empty line's hint: a decoration's attribute, drawn
18661
+ * here, so neither is text in the document. Floated with no height, so the
18662
+ * caret stands at the start of the line rather than after the words.
18663
+ */
18664
+ .crewlet-rich-editor__content .is-empty::before {
18665
+ content: attr(data-placeholder);
18666
+ float: left;
18667
+ height: 0;
18668
+ color: var(--color-text-tertiary);
18669
+ pointer-events: none;
18670
+ }
18671
+
18672
+ /* The slash and the word after it, while the menu is open. */
18673
+ .crewlet-rich-editor__slash {
18674
+ border-radius: var(--radius-xs);
18675
+ background: var(--color-brand-accent-soft);
18676
+ color: var(--color-brand-accent-ink);
18677
+ }
18678
+
18679
+ /* An EMPTY table cell keeps a width a pointer can land in; one with text is
18680
+ sized as the reader's is, so the columns do not move when editing starts. */
18681
+ .crewlet-rich-editor__content :where(th, td):has(> br.ProseMirror-trailingBreak:only-child) {
18682
+ min-width: calc(var(--spacing-10) * 1.5);
18683
+ }
18684
+
18685
+ /* A task's box is pressed here, where a reader's is only read. */
18686
+ .crewlet-rich-editor__content li > input[type='checkbox'] {
18687
+ cursor: pointer;
18688
+ }
18689
+
18690
+ /* A picture the page cannot show reads as its alt text, set apart as a chip. */
18691
+ .crewlet-rich-editor__image-alt {
18692
+ display: inline-flex;
18693
+ align-items: center;
18694
+ padding: 0 var(--spacing-2);
18695
+ border: 1px dashed var(--color-border-strong);
18696
+ border-radius: var(--radius-sm);
18697
+ color: var(--color-text-tertiary);
18698
+ font-size: var(--font-size-xs);
18699
+ }
18700
+
18701
+ .crewlet-rich-editor--disabled .crewlet-rich-editor__content {
18702
+ caret-color: transparent;
18703
+ }
18704
+
18705
+ /* ── a block's controls ─────────────────────────────────────────────────── */
18706
+
18707
+ .crewlet-rich-editor__code {
18708
+ position: relative;
18709
+ }
18710
+
18711
+ /*
18712
+ * A code block's language: a quiet field at the block's top right, read as
18713
+ * the language's name and turning into a field under the pointer or the
18714
+ * keyboard. An empty one shows only while the block is pointed at.
18715
+ */
18716
+ .crewlet-rich-editor__code-bar {
18717
+ position: absolute;
18718
+ top: var(--spacing-1);
18719
+ right: var(--spacing-1);
18720
+ z-index: var(--z-index-raised);
18721
+ }
18722
+
18723
+ .crewlet-rich-editor__lang {
18724
+ width: 12ch;
18725
+ height: var(--size-control-sm);
18726
+ padding: 0 var(--spacing-2);
18727
+ border: 1px solid transparent;
18728
+ border-radius: var(--radius-sm);
18729
+ background: transparent;
18730
+ color: var(--color-text-tertiary);
18731
+ font-family: var(--font-family-mono);
18732
+ font-size: var(--font-size-2xs);
18733
+ text-align: right;
18734
+ }
18735
+
18736
+ .crewlet-rich-editor__lang::placeholder {
18737
+ color: var(--color-text-tertiary);
18738
+ }
18739
+
18740
+ .crewlet-rich-editor__lang:placeholder-shown {
18741
+ opacity: 0;
18742
+ }
18743
+
18744
+ .crewlet-rich-editor__code:hover .crewlet-rich-editor__lang,
18745
+ .crewlet-rich-editor__lang:focus {
18746
+ opacity: 1;
18747
+ border-color: var(--color-border-default);
18748
+ background: var(--color-surface-elevated);
18749
+ text-align: left;
18750
+ }
18751
+
18752
+ .crewlet-rich-editor__lang:focus-visible {
18753
+ outline: 2px solid var(--color-focus);
18754
+ outline-offset: 0;
18755
+ }
18756
+
18757
+ /* A callout's tone, drawn as its label, and a menu under it. */
18758
+ .crewlet-rich-editor__tone {
18759
+ display: inline-flex;
18760
+ align-items: center;
18761
+ gap: var(--spacing-1);
18762
+ margin: 0;
18763
+ padding: 0;
18764
+ border: none;
18765
+ border-radius: var(--radius-xs);
18766
+ background: transparent;
18767
+ color: inherit;
18768
+ font: inherit;
18769
+ cursor: pointer;
18770
+ }
18771
+
18772
+ .crewlet-rich-editor__tone > svg {
18773
+ opacity: 0;
18774
+ }
18775
+
18776
+ .crewlet-rich-editor__tone:hover > svg,
18777
+ .crewlet-rich-editor__tone:focus-visible > svg,
18778
+ .crewlet-rich-editor__tone[aria-expanded='true'] > svg {
18779
+ opacity: 1;
18780
+ }
18781
+
18782
+ .crewlet-rich-editor__tone:hover {
18783
+ text-decoration: underline;
18784
+ text-underline-offset: 2px;
18785
+ }
18786
+
18787
+ .crewlet-rich-editor__tone:focus-visible {
18788
+ outline: 2px solid var(--color-focus);
18789
+ outline-offset: 2px;
18790
+ }
18791
+
18792
+ /* ── the floating surfaces ───────────────────────────────────────────────── */
18793
+
18794
+ /* Every one is the menu's surface: the same ground, line, radius and shadow. */
18795
+ .crewlet-rich-editor__menu,
18796
+ .crewlet-rich-editor__bar,
18797
+ .crewlet-rich-editor__bubble,
18798
+ .crewlet-rich-editor__panel {
18799
+ position: fixed;
18800
+ z-index: var(--z-index-popover);
18801
+ border: 1px solid var(--color-border-default);
18802
+ border-radius: var(--radius-md);
18803
+ background: var(--color-surface-subtle);
18804
+ box-shadow: var(--shadow-xl);
18805
+ font-family: var(--font-family-sans);
18806
+ animation: crewlet-rich-editor-in var(--motion-duration-fast) var(--motion-easing-emphasized);
18807
+ }
18808
+
18809
+ @keyframes crewlet-rich-editor-in {
18810
+ from {
18811
+ opacity: 0;
18812
+ transform: translateY(var(--spacing-1));
18813
+ }
18814
+ }
18815
+
18816
+ .crewlet-rich-editor__bar,
18817
+ .crewlet-rich-editor__bubble {
18818
+ display: flex;
18819
+ align-items: center;
18820
+ padding: var(--spacing-1);
18821
+ box-shadow: var(--shadow-lg);
18822
+ }
18823
+
18824
+ .crewlet-rich-editor__group {
18825
+ display: inline-flex;
18826
+ align-items: center;
18827
+ gap: calc(var(--spacing-1) / 2);
18828
+ }
18829
+
18830
+ .crewlet-rich-editor__group + .crewlet-rich-editor__group {
18831
+ margin-left: var(--spacing-1);
18832
+ padding-left: var(--spacing-1);
18833
+ border-left: 1px solid var(--color-border-default);
18834
+ }
18835
+
18836
+ /* The slash menu: a block's glyph on a tile, its name, and what it is. */
18837
+ .crewlet-rich-editor__menu {
18838
+ width: min(300px, calc(100vw - var(--spacing-8)));
18839
+ max-height: min(360px, 50vh);
18840
+ overflow-y: auto;
18841
+ overscroll-behavior: contain;
18842
+ padding: var(--spacing-1);
18843
+ }
18844
+
18845
+ .crewlet-rich-editor__group-heading {
18846
+ padding: var(--spacing-2) var(--spacing-2) var(--spacing-1);
18847
+ color: var(--color-text-tertiary);
18848
+ font-size: var(--font-size-2xs);
18849
+ font-weight: var(--font-weight-semibold);
18850
+ letter-spacing: var(--font-letter-spacing-wide);
18851
+ text-transform: uppercase;
18852
+ }
18853
+
18854
+ .crewlet-rich-editor__option {
18855
+ display: flex;
18856
+ align-items: center;
18857
+ gap: var(--spacing-3);
18858
+ padding: var(--spacing-1) var(--spacing-2);
18859
+ border-radius: var(--radius-sm);
18860
+ color: var(--color-text-primary);
18861
+ cursor: pointer;
18862
+ }
18863
+
18864
+ .crewlet-rich-editor__option.is-active {
18865
+ background: var(--color-surface-hover);
18866
+ }
18867
+
18868
+ .crewlet-rich-editor__option-icon {
18869
+ display: inline-flex;
18870
+ align-items: center;
18871
+ justify-content: center;
18872
+ flex: none;
18873
+ width: var(--size-control-md);
18874
+ height: var(--size-control-md);
18875
+ border: 1px solid var(--color-border-default);
18876
+ border-radius: var(--radius-sm);
18877
+ background: var(--color-surface-elevated);
18878
+ color: var(--color-text-secondary);
18879
+ }
18880
+
18881
+ .crewlet-rich-editor__option-text {
18882
+ display: flex;
18883
+ flex-direction: column;
18884
+ min-width: 0;
18885
+ flex: 1;
18886
+ }
18887
+
18888
+ .crewlet-rich-editor__option-label {
18889
+ font-size: var(--font-size-compact);
18890
+ line-height: var(--font-line-height-snug);
18891
+ }
18892
+
18893
+ .crewlet-rich-editor__option-description {
18894
+ overflow: hidden;
18895
+ color: var(--color-text-tertiary);
18896
+ font-size: var(--font-size-xs);
18897
+ line-height: var(--font-line-height-snug);
18898
+ text-overflow: ellipsis;
18899
+ white-space: nowrap;
18900
+ }
18901
+
18902
+ .crewlet-rich-editor__option-hint {
18903
+ flex: none;
18904
+ color: var(--color-text-tertiary);
18905
+ font-family: var(--font-family-mono);
18906
+ font-size: var(--font-size-2xs);
18907
+ }
18908
+
18909
+ .crewlet-rich-editor__empty {
18910
+ margin: 0;
18911
+ padding: var(--spacing-2);
18912
+ color: var(--color-text-tertiary);
18913
+ font-size: var(--font-size-compact);
18914
+ }
18915
+
18916
+ /* The link under the caret: where it goes, and what can be done with it. */
18917
+ .crewlet-rich-editor__bubble-link {
18918
+ display: inline-flex;
18919
+ align-items: center;
18920
+ gap: var(--spacing-1);
18921
+ max-width: min(260px, calc(100vw - 160px));
18922
+ padding: 0 var(--spacing-2);
18923
+ color: var(--color-brand-accent-ink);
18924
+ font-size: var(--font-size-compact);
18925
+ text-decoration: none;
18926
+ }
18927
+
18928
+ .crewlet-rich-editor__bubble-link:hover {
18929
+ text-decoration: underline;
18930
+ text-underline-offset: 2px;
18931
+ }
18932
+
18933
+ .crewlet-rich-editor__bubble-link:focus-visible {
18934
+ outline: 2px solid var(--color-focus);
18935
+ outline-offset: 0;
18936
+ border-radius: var(--radius-xs);
18937
+ }
18938
+
18939
+ .crewlet-rich-editor__bubble-href {
18940
+ overflow: hidden;
18941
+ text-overflow: ellipsis;
18942
+ white-space: nowrap;
18943
+ }
18944
+
18945
+ .crewlet-rich-editor__bubble-refused {
18946
+ padding: 0 var(--spacing-2);
18947
+ color: var(--color-feedback-warning-ink);
18948
+ font-size: var(--font-size-xs);
18949
+ }
18950
+
18951
+ /* A panel: the link's address, a picture's address and alt text, a caller's own. */
18952
+ .crewlet-rich-editor__panel {
18953
+ width: min(320px, calc(100vw - var(--spacing-8)));
18954
+ padding: var(--spacing-3);
18955
+ }
18956
+
18957
+ .crewlet-rich-editor__form {
18958
+ display: flex;
18959
+ flex-direction: column;
18960
+ gap: var(--spacing-3);
18961
+ margin: 0;
18962
+ }
18963
+
18964
+ .crewlet-rich-editor__form-actions {
18965
+ display: flex;
18966
+ justify-content: flex-end;
18967
+ gap: var(--spacing-2);
18968
+ }
18969
+
18970
+ @media (prefers-reduced-motion: reduce) {
18971
+ .crewlet-rich-editor__content .ProseMirror-gapcursor::after {
18972
+ animation: none;
18973
+ }
18974
+
18975
+ .crewlet-rich-editor__menu,
18976
+ .crewlet-rich-editor__bar,
18977
+ .crewlet-rich-editor__bubble,
18978
+ .crewlet-rich-editor__panel {
18979
+ animation: none;
18980
+ }
18981
+ }
18982
+
18983
+
18428
18984
  /* SandboxedFrame-L6HBQZCD.css */
18429
18985
  /*
18430
18986
  * The frame fills the box it is given. The page around it does not scroll
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.29.0",
3
+ "version": "0.31.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,18 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.29.0",
46
- "@crewlethq/tokens": "0.29.0",
45
+ "@crewlethq/icons": "0.31.0",
46
+ "@crewlethq/tokens": "0.31.0",
47
+ "prosemirror-commands": "1.7.2",
48
+ "prosemirror-gapcursor": "1.4.1",
49
+ "prosemirror-history": "1.5.1",
50
+ "prosemirror-inputrules": "1.5.1",
51
+ "prosemirror-keymap": "1.2.3",
52
+ "prosemirror-model": "1.25.12",
53
+ "prosemirror-schema-list": "1.5.1",
54
+ "prosemirror-state": "1.4.4",
55
+ "prosemirror-transform": "1.12.2",
56
+ "prosemirror-view": "1.42.6",
47
57
  "uqr": "0.1.3"
48
58
  },
49
59
  "peerDependencies": {
File without changes
@@ -1,7 +1,7 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
2
  import { Toolbar } from './chunk-PGRPNDWM.js';
3
- import { DateTimePicker } from './chunk-Y5NQ2LMS.js';
4
3
  import { DataTable } from './chunk-EBJREOKS.js';
4
+ import { DateTimePicker } from './chunk-Y5NQ2LMS.js';
5
5
  import { useListbox, useOptionKeys } from './chunk-F73MC7EZ.js';
6
6
  import { Popover } from './chunk-BWRGFKJP.js';
7
7
  import { Input } from './chunk-6QFAK2WV.js';