@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/AppShell/index.d.ts +1 -0
- package/dist/AppShell/index.js +1 -1
- package/dist/AppShell/screenWidth.d.ts +66 -0
- package/dist/DataGrid/DataGrid.d.ts +35 -3
- package/dist/DataGrid/index.js +1 -1
- package/dist/{DataGrid-QYORTTHI.css → DataGrid-NHIN2I42.css} +96 -93
- package/dist/ListDetail/ListDetail.d.ts +10 -5
- package/dist/ListDetail/index.js +1 -1
- package/dist/{ListDetail-5NXERLRJ.css → ListDetail-N3L7PB46.css} +38 -9
- package/dist/{chunk-AJLMINJU.js → chunk-E55DKVY7.js} +61 -3
- package/dist/{chunk-4W7F3JEK.js → chunk-ELLRZ5XR.js} +20 -9
- package/dist/{chunk-RXG543EB.js → chunk-YBC2CYPD.js} +4 -4
- package/dist/generated/index.js +16 -16
- package/dist/index.js +16 -16
- package/dist/styles.css +135 -103
- package/package.json +3 -3
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-
|
|
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
|
-
|
|
12690
|
-
|
|
12691
|
-
|
|
12692
|
-
|
|
12693
|
-
|
|
12694
|
-
|
|
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
|
-
|
|
12697
|
-
|
|
12700
|
+
display: block;
|
|
12701
|
+
}
|
|
12698
12702
|
|
|
12699
|
-
|
|
12700
|
-
|
|
12701
|
-
|
|
12703
|
+
:where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__head {
|
|
12704
|
+
display: none;
|
|
12705
|
+
}
|
|
12702
12706
|
|
|
12703
|
-
|
|
12704
|
-
|
|
12705
|
-
|
|
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
|
-
|
|
12709
|
-
|
|
12710
|
-
|
|
12711
|
-
|
|
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
|
-
|
|
12715
|
-
|
|
12716
|
-
|
|
12717
|
-
|
|
12718
|
-
|
|
12719
|
-
|
|
12720
|
-
|
|
12721
|
-
|
|
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
|
-
|
|
12725
|
-
|
|
12726
|
-
|
|
12728
|
+
:where(.crewlet-data-grid[data-stacked]) .crewlet-data-grid__cell:empty {
|
|
12729
|
+
display: none;
|
|
12730
|
+
}
|
|
12727
12731
|
|
|
12728
|
-
|
|
12729
|
-
|
|
12730
|
-
|
|
12731
|
-
|
|
12732
|
-
|
|
12733
|
-
|
|
12734
|
-
|
|
12735
|
-
|
|
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
|
-
|
|
12739
|
-
|
|
12740
|
-
|
|
12741
|
-
|
|
12742
|
-
|
|
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
|
-
|
|
12746
|
-
|
|
12747
|
-
|
|
12748
|
-
|
|
12749
|
-
|
|
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
|
-
|
|
12753
|
-
|
|
12754
|
-
|
|
12755
|
-
|
|
12756
|
-
|
|
12757
|
-
|
|
12758
|
-
|
|
12759
|
-
|
|
12760
|
-
|
|
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
|
-
|
|
12764
|
-
|
|
12765
|
-
|
|
12766
|
-
|
|
12767
|
-
|
|
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
|
-
|
|
12771
|
-
|
|
12772
|
-
|
|
12773
|
-
|
|
12774
|
-
|
|
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
|
-
|
|
12778
|
-
|
|
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
|
-
|
|
12782
|
-
|
|
12783
|
-
|
|
12784
|
-
|
|
12785
|
-
|
|
12786
|
-
|
|
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
|
-
|
|
12790
|
-
|
|
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
|
-
|
|
12794
|
-
|
|
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-
|
|
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
|
|
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
|
-
|
|
21620
|
-
|
|
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.
|
|
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.
|
|
46
|
-
"@crewlethq/tokens": "0.
|
|
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",
|