@crewlethq/ui 0.64.1 → 0.65.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.
package/dist/styles.css CHANGED
@@ -12206,7 +12206,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
12206
12206
  }
12207
12207
 
12208
12208
 
12209
- /* DataGrid-QYORTTHI.css */
12209
+ /* DataGrid-NHIN2I42.css */
12210
12210
  /*
12211
12211
  * DataGrid: a list as columns, one track list on the grid.
12212
12212
  *
@@ -12676,7 +12676,7 @@ button.crewlet-data-grid__row-link {
12676
12676
  }
12677
12677
  }
12678
12678
 
12679
- /* ---- A ROW IS A CARD ON A PHONE -----------------------------------------
12679
+ /* ---- A ROW IS A CARD ON A PHONE, OR WHERE COLUMNS DO NOT FIT -----------------------------------------
12680
12680
  A GRID IS COLUMNS, AND A PHONE DOES NOT HAVE THEM: the grid clips (for its
12681
12681
  sticky head), so the columns past the edge were cut off with nothing to
12682
12682
  scroll to, and a sideways scroller resolves every flexible track to zero. So
@@ -12686,113 +12686,116 @@ button.crewlet-data-grid__row-link {
12686
12686
  (`:empty`), and a cell that draws a marked absence has content and stays.
12687
12687
  The sort is in the application's state, so a sorted list still arrives
12688
12688
  sorted. */
12689
- @media (width < 640px) {
12690
- .crewlet-data-grid {
12691
- /* No ghost control is pulled out here (see above): every line of a card
12692
- starts at the grid's edge, and a compact row's marks run on one line,
12693
- where the hover ground swallowed the gap before it. */
12694
- --crewlet-data-grid-control-outdent: 0px;
12689
+ /* Card rows are the grid's own decision (`data-stacked`, DataGrid.tsx): set
12690
+ on a phone, and wherever the grid's own width cannot hold its columns once
12691
+ every give-way column has gone. `:where()` keeps each rule's weight what it
12692
+ was when this block was a media query, so a rule written against the card
12693
+ shape still wins where it did. */
12694
+ .crewlet-data-grid:where([data-stacked]) {
12695
+ /* No ghost control is pulled out here (see above): every line of a card
12696
+ starts at the grid's edge, and a compact row's marks run on one line,
12697
+ where the hover ground swallowed the gap before it. */
12698
+ --crewlet-data-grid-control-outdent: 0px;
12695
12699
 
12696
- display: block;
12697
- }
12700
+ display: block;
12701
+ }
12698
12702
 
12699
- .crewlet-data-grid__head {
12700
- display: none;
12701
- }
12703
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__head {
12704
+ display: none;
12705
+ }
12702
12706
 
12703
- .crewlet-data-grid__body,
12704
- .crewlet-data-grid__band {
12705
- display: block;
12706
- }
12707
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__body,
12708
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__band {
12709
+ display: block;
12710
+ }
12707
12711
 
12708
- .crewlet-data-grid__row {
12709
- display: block;
12710
- padding: var(--spacing-2) var(--crewlet-data-grid-edge);
12711
- min-height: 0;
12712
- }
12712
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__row {
12713
+ display: block;
12714
+ padding: var(--spacing-2) var(--crewlet-data-grid-edge);
12715
+ min-height: 0;
12716
+ }
12713
12717
 
12714
- /* A FIXED BASIS lines the names up without a track, and the name wraps
12715
- inside it rather than pushing its value past every other card line. */
12716
- .crewlet-data-grid__cell {
12717
- display: flex;
12718
- align-items: baseline;
12719
- gap: var(--spacing-3);
12720
- padding: 1px 0;
12721
- min-width: 0;
12722
- }
12718
+ /* A FIXED BASIS lines the names up without a track, and the name wraps
12719
+ inside it rather than pushing its value past every other card line. */
12720
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell {
12721
+ display: flex;
12722
+ align-items: baseline;
12723
+ gap: var(--spacing-3);
12724
+ padding: 1px 0;
12725
+ min-width: 0;
12726
+ }
12723
12727
 
12724
- .crewlet-data-grid__cell:empty {
12725
- display: none;
12726
- }
12728
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell:empty {
12729
+ display: none;
12730
+ }
12727
12731
 
12728
- .crewlet-data-grid__cell[data-label]::before {
12729
- content: attr(data-label);
12730
- flex: 0 0 7rem;
12731
- overflow-wrap: anywhere;
12732
- font-size: var(--font-size-2xs);
12733
- text-transform: uppercase;
12734
- letter-spacing: var(--font-letter-spacing-wide);
12735
- color: var(--color-text-tertiary);
12736
- }
12732
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell[data-label]::before {
12733
+ content: attr(data-label);
12734
+ flex: 0 0 7rem;
12735
+ overflow-wrap: anywhere;
12736
+ font-size: var(--font-size-2xs);
12737
+ text-transform: uppercase;
12738
+ letter-spacing: var(--font-letter-spacing-wide);
12739
+ color: var(--color-text-tertiary);
12740
+ }
12737
12741
 
12738
- /* `shrink` and `right` are column shapes, and there are no columns here. */
12739
- .crewlet-data-grid__cell--shrink,
12740
- .crewlet-data-grid__cell--right {
12741
- white-space: normal;
12742
- justify-content: flex-start;
12743
- }
12742
+ /* `shrink` and `right` are column shapes, and there are no columns here. */
12743
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--shrink,
12744
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell--right {
12745
+ white-space: normal;
12746
+ justify-content: flex-start;
12747
+ }
12744
12748
 
12745
- .crewlet-data-grid__cell .crewlet-data-grid__truncate {
12746
- white-space: normal;
12747
- overflow: visible;
12748
- text-overflow: clip;
12749
- overflow-wrap: anywhere;
12750
- }
12749
+ :where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell .crewlet-data-grid__truncate {
12750
+ white-space: normal;
12751
+ overflow: visible;
12752
+ text-overflow: clip;
12753
+ overflow-wrap: anywhere;
12754
+ }
12751
12755
 
12752
- /* ---- THE COMPACT ROW (`phoneRows="compact"`) ---------------------------
12753
- TWO LINES, NO LABELS: what the row is, then its marks. One flex run that
12754
- breaks once: the lead cells first, a zero-height full-width `::after`
12755
- between them and the rest, then every other cell in column order. */
12756
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__row {
12757
- display: flex;
12758
- flex-wrap: wrap;
12759
- align-items: center;
12760
- gap: var(--spacing-1) var(--spacing-2);
12761
- }
12756
+ /* ---- THE COMPACT ROW (`phoneRows="compact"`) ---------------------------
12757
+ TWO LINES, NO LABELS: what the row is, then its marks. One flex run that
12758
+ breaks once: the lead cells first, a zero-height full-width `::after`
12759
+ between them and the rest, then every other cell in column order. */
12760
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__row {
12761
+ display: flex;
12762
+ flex-wrap: wrap;
12763
+ align-items: center;
12764
+ gap: var(--spacing-1) var(--spacing-2);
12765
+ }
12762
12766
 
12763
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__row::after {
12764
- content: '';
12765
- order: 1;
12766
- flex-basis: 100%;
12767
- height: 0;
12768
- }
12767
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__row::after {
12768
+ content: '';
12769
+ order: 1;
12770
+ flex-basis: 100%;
12771
+ height: 0;
12772
+ }
12769
12773
 
12770
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell {
12771
- order: 2;
12772
- padding: 0;
12773
- align-items: center;
12774
- gap: var(--spacing-1);
12775
- }
12774
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__cell {
12775
+ order: 2;
12776
+ padding: 0;
12777
+ align-items: center;
12778
+ gap: var(--spacing-1);
12779
+ }
12776
12780
 
12777
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-lead] {
12778
- order: 0;
12779
- }
12781
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__cell[data-lead] {
12782
+ order: 0;
12783
+ }
12780
12784
 
12781
- /* The title takes the rest of the first line, beside the key. */
12782
- .crewlet-data-grid[data-phone-rows='compact']
12783
- .crewlet-data-grid__cell[data-lead]:not(.crewlet-data-grid__cell--shrink) {
12784
- flex: 1 1 0;
12785
- min-width: 0;
12786
- font-weight: var(--font-weight-medium);
12787
- }
12785
+ /* The title takes the rest of the first line, beside the key. */
12786
+ .crewlet-data-grid[data-phone-rows='compact']
12787
+ .crewlet-data-grid__cell[data-lead]:not(.crewlet-data-grid__cell--shrink) {
12788
+ flex: 1 1 0;
12789
+ min-width: 0;
12790
+ font-weight: var(--font-weight-medium);
12791
+ }
12788
12792
 
12789
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-label]::before {
12790
- content: none;
12791
- }
12793
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__cell[data-label]::before {
12794
+ content: none;
12795
+ }
12792
12796
 
12793
- .crewlet-data-grid[data-phone-rows='compact'] .crewlet-data-grid__cell[data-phone-omit] {
12794
- display: none;
12795
- }
12797
+ .crewlet-data-grid[data-phone-rows='compact']:where([data-stacked]) .crewlet-data-grid__cell[data-phone-omit] {
12798
+ display: none;
12796
12799
  }
12797
12800
 
12798
12801
 
@@ -21577,10 +21580,19 @@ a.crewlet-icon-btn {
21577
21580
  }
21578
21581
 
21579
21582
 
21580
- /* ListDetail-5NXERLRJ.css */
21583
+ /* ListDetail-N3L7PB46.css */
21581
21584
  /*
21582
21585
  * ListDetail: a list beside the detail of what is chosen in it, each scrolling
21583
- * on its own in the height it is given, one pane on a phone (ListDetail.tsx).
21586
+ * on its own in the height it is given, one pane where it is narrow
21587
+ * (ListDetail.tsx).
21588
+ *
21589
+ * IT FOLDS BY ITS OWN WIDTH, NOT THE WINDOW'S. The root is an inline-size
21590
+ * container and the panes are its child, so the fold answers how wide THIS
21591
+ * list and detail are: beside an aside the reader opened (the assistant) a
21592
+ * 1375px window can leave the screen 443px, and a fold that asked the window
21593
+ * drew the detail 130px wide beside a 17rem list. The phone rule below is the
21594
+ * one decision that stays the window's: on a phone the page scrolls as a
21595
+ * whole rather than each pane on its own.
21584
21596
  */
21585
21597
 
21586
21598
  /* THE HAIRLINE STANDS MIDWAY between the two panes: the list's inset before it
@@ -21589,11 +21601,20 @@ a.crewlet-icon-btn {
21589
21601
  .crewlet-list-detail {
21590
21602
  --crewlet-list-detail-gutter: var(--spacing-7);
21591
21603
 
21604
+ container: crewlet-list-detail / inline-size;
21605
+ display: flex;
21606
+ flex: 1 1 auto;
21607
+ flex-direction: column;
21608
+ height: 100%;
21609
+ min-width: 0;
21610
+ min-height: 0;
21611
+ }
21612
+
21613
+ .crewlet-list-detail__panes {
21592
21614
  display: grid;
21593
21615
  flex: 1 1 auto;
21594
21616
  grid-template-columns: var(--crewlet-list-detail-list, 17rem) minmax(0, 1fr);
21595
21617
  gap: var(--crewlet-list-detail-gutter);
21596
- height: 100%;
21597
21618
  min-width: 0;
21598
21619
  min-height: 0;
21599
21620
  }
@@ -21616,19 +21637,18 @@ a.crewlet-icon-btn {
21616
21637
  overflow-y: auto;
21617
21638
  }
21618
21639
 
21619
- @media (width < 640px) {
21620
- .crewlet-list-detail {
21640
+ /* ONE PANE UNDER 640px OF ITS OWN WIDTH: the list and a reading detail do not
21641
+ both fit, so the pane `showing` names takes the whole width and keeps its
21642
+ own scroller, which is what lets it sit in a screen that fills the window. */
21643
+ @container crewlet-list-detail (width < 640px) {
21644
+ .crewlet-list-detail__panes {
21621
21645
  grid-template-columns: minmax(0, 1fr);
21622
- height: auto;
21623
21646
  }
21624
21647
 
21625
21648
  .crewlet-list-detail__list {
21626
21649
  padding-right: 0;
21627
21650
  border-right: 0;
21628
- }
21629
-
21630
- .crewlet-list-detail__detail {
21631
- overflow: visible;
21651
+ overflow-y: auto;
21632
21652
  }
21633
21653
 
21634
21654
  .crewlet-list-detail--showing-list .crewlet-list-detail__detail,
@@ -21637,6 +21657,18 @@ a.crewlet-icon-btn {
21637
21657
  }
21638
21658
  }
21639
21659
 
21660
+ /* ON A PHONE THE PAGE SCROLLS AS A WHOLE, as tall as its content. */
21661
+ @media (width < 640px) {
21662
+ .crewlet-list-detail {
21663
+ height: auto;
21664
+ }
21665
+
21666
+ .crewlet-list-detail__list,
21667
+ .crewlet-list-detail__detail {
21668
+ overflow: visible;
21669
+ }
21670
+ }
21671
+
21640
21672
 
21641
21673
  /* ListInput-4ISMGZDQ.css */
21642
21674
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.64.1",
3
+ "version": "0.65.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.64.1",
46
- "@crewlethq/tokens": "0.64.1",
45
+ "@crewlethq/icons": "0.65.0",
46
+ "@crewlethq/tokens": "0.65.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",