@scattered-light/loomiere-base-ui 0.7.1 → 0.9.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/README.md +53 -2
- package/dist/{chunk-JUUPOOQQ.js → chunk-LQWPDLLQ.js} +66 -3
- package/dist/chunk-LQWPDLLQ.js.map +1 -0
- package/dist/custom/collection/index.d.ts +6 -1
- package/dist/custom/collection/index.js +18 -12
- package/dist/custom/collection/index.js.map +1 -1
- package/dist/custom/index.d.ts +1 -1
- package/dist/custom/index.js +1 -1
- package/dist/design-system/components/AppBar/README.md +58 -0
- package/dist/design-system/components/AppBar/preview.html +19 -0
- package/dist/design-system/components/ContextMenu/README.md +1 -1
- package/dist/design-system/components/ContextMenu/preview.html +1 -1
- package/dist/design-system/components/DataList/README.md +1 -1
- package/dist/design-system/components/DataList/preview.html +1 -1
- package/dist/design-system/components/DataTable/README.md +1 -1
- package/dist/design-system/components/DataTable/preview.html +38 -38
- package/dist/design-system/components/DescriptionList/README.md +41 -0
- package/dist/design-system/components/DescriptionList/preview.html +19 -0
- package/dist/design-system/components/Drawer/README.md +1 -1
- package/dist/design-system/components/PickerButton/README.md +56 -0
- package/dist/design-system/components/PickerButton/preview.html +19 -0
- package/dist/design-system/components/ScrollArea/preview.html +2 -2
- package/dist/design-system/components/Sheet/README.md +46 -0
- package/dist/design-system/components/Sheet/preview.html +19 -0
- package/dist/design-system/components/StatFigure/README.md +38 -0
- package/dist/design-system/components/StatFigure/preview.html +19 -0
- package/dist/design-system/components/Table/README.md +2 -2
- package/dist/design-system/components/Table/preview.html +2 -2
- package/dist/design-system/components/ToggleGroup/README.md +2 -2
- package/dist/design-system/components/ToggleGroup/preview.html +1 -1
- package/dist/design-system/components/bundle.js +7 -7
- package/dist/design-system/components/index.d.ts +1 -1
- package/dist/design-system/components/styles.css +531 -56
- package/dist/{index-ChJXlxzq.d.ts → index-DdHpYalU.d.ts} +84 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/styles/components/Accordion.css +1 -1
- package/dist/styles/components/AlertDialog.css +1 -1
- package/dist/styles/components/Autocomplete.css +1 -1
- package/dist/styles/components/Avatar.css +1 -1
- package/dist/styles/components/Button.css +1 -1
- package/dist/styles/components/Checkbox.css +1 -1
- package/dist/styles/components/CheckboxGroup.css +1 -1
- package/dist/styles/components/Collapsible.css +1 -1
- package/dist/styles/components/Combobox.css +1 -1
- package/dist/styles/components/ContextMenu.css +1 -1
- package/dist/styles/components/Dialog.css +1 -1
- package/dist/styles/components/Drawer.css +8 -2
- package/dist/styles/components/Field.css +1 -1
- package/dist/styles/components/Fieldset.css +1 -1
- package/dist/styles/components/Form.css +1 -1
- package/dist/styles/components/Input.css +1 -1
- package/dist/styles/components/Menu.css +1 -1
- package/dist/styles/components/Menubar.css +1 -1
- package/dist/styles/components/Meter.css +1 -1
- package/dist/styles/components/NavigationMenu.css +1 -1
- package/dist/styles/components/NumberField.css +1 -1
- package/dist/styles/components/OTPField.css +1 -1
- package/dist/styles/components/Popover.css +1 -1
- package/dist/styles/components/PreviewCard.css +1 -1
- package/dist/styles/components/Progress.css +1 -1
- package/dist/styles/components/Radio.css +1 -1
- package/dist/styles/components/ScrollArea.css +1 -1
- package/dist/styles/components/Select.css +1 -1
- package/dist/styles/components/Separator.css +1 -1
- package/dist/styles/components/Slider.css +1 -1
- package/dist/styles/components/Switch.css +1 -1
- package/dist/styles/components/Tabs.css +1 -1
- package/dist/styles/components/Toast.css +1 -1
- package/dist/styles/components/Toggle.css +1 -1
- package/dist/styles/components/ToggleGroup.css +42 -1
- package/dist/styles/components/Toolbar.css +1 -1
- package/dist/styles/components/Tooltip.css +1 -1
- package/dist/styles/custom/AppBar.css +33 -0
- package/dist/styles/custom/Badge.css +1 -1
- package/dist/styles/custom/Collection.css +1 -1
- package/dist/styles/custom/CollectionPagination.css +1 -1
- package/dist/styles/custom/CollectionToolbar.css +1 -1
- package/dist/styles/custom/DataList.css +19 -1
- package/dist/styles/custom/DataTable.css +1 -1
- package/dist/styles/custom/DatePicker.css +1 -1
- package/dist/styles/custom/DescriptionList.css +75 -0
- package/dist/styles/custom/EditableList.css +1 -1
- package/dist/styles/custom/EmptyState.css +1 -1
- package/dist/styles/custom/ListDetail.css +1 -1
- package/dist/styles/custom/MoneyField.css +1 -1
- package/dist/styles/custom/PickerButton.css +85 -0
- package/dist/styles/custom/Sheet.css +90 -0
- package/dist/styles/custom/Splitter.css +1 -1
- package/dist/styles/custom/StatFigure.css +60 -0
- package/dist/styles/custom/Table.css +63 -1
- package/dist/styles/index.css +6 -1
- package/dist/styles/reset/accessibility.css +1 -1
- package/dist/styles/reset/reset-accessibility.css +1 -1
- package/dist/styles/reset/reset-tailwind.css +2 -2
- package/dist/styles/reset/reset.css +2 -2
- package/dist/styles/tailwind.css +6 -1
- package/package.json +2 -2
- package/dist/chunk-JUUPOOQQ.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
|
+
/* DescriptionList
|
|
3
|
+
*
|
|
4
|
+
* Label and value pairs in a native dl, one DescriptionItem (a div holding a dt and a dd)
|
|
5
|
+
* per pair, with a hairline between pairs. The default variant sets labels in a column
|
|
6
|
+
* beside their values. data-variant="leader" runs a dotted leader from each label to its
|
|
7
|
+
* value, which sits at the end of the row, as on a working paper. Labels are body text
|
|
8
|
+
* in the secondary color, values primary text with tabular numbers.
|
|
9
|
+
* Tokens: description-list.* (tokens/component/description-list.json).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.DescriptionList {
|
|
13
|
+
font-family: var(--sl-font-body-base-font-family);
|
|
14
|
+
font-size: var(--sl-font-body-base-font-size);
|
|
15
|
+
font-weight: var(--sl-font-body-base-font-weight);
|
|
16
|
+
line-height: var(--sl-font-body-base-line-height);
|
|
17
|
+
letter-spacing: var(--sl-font-body-base-letter-spacing);
|
|
18
|
+
margin: 0;
|
|
19
|
+
padding: 0;
|
|
20
|
+
font-variant-numeric: tabular-nums;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.DescriptionItem {
|
|
24
|
+
display: grid;
|
|
25
|
+
grid-template-columns: var(--sl-description-list-label-width) 2fr;
|
|
26
|
+
align-items: baseline;
|
|
27
|
+
column-gap: var(--sl-description-list-column-gap);
|
|
28
|
+
padding-block: var(--sl-description-list-row-padding-block);
|
|
29
|
+
padding-inline: var(--sl-description-list-row-padding-inline);
|
|
30
|
+
border-bottom: var(--sl-stroke-default) solid var(--sl-description-list-row-border-color);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.DescriptionItem:last-child {
|
|
34
|
+
border-bottom: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.DescriptionTerm {
|
|
38
|
+
margin: 0;
|
|
39
|
+
color: var(--sl-description-list-label-color);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.DescriptionDetails {
|
|
43
|
+
margin: 0;
|
|
44
|
+
min-width: 0;
|
|
45
|
+
color: var(--sl-description-list-value-color);
|
|
46
|
+
overflow-wrap: anywhere;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Leader: the label grows to fill the row, and its ::after is the dotted line that leads
|
|
50
|
+
to the value. The line sits on the text's baseline. */
|
|
51
|
+
.DescriptionList[data-variant='leader'] .DescriptionItem {
|
|
52
|
+
display: flex;
|
|
53
|
+
column-gap: var(--sl-description-list-leader-gap);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.DescriptionList[data-variant='leader'] .DescriptionTerm {
|
|
57
|
+
display: flex;
|
|
58
|
+
flex: 1 1 auto;
|
|
59
|
+
align-items: baseline;
|
|
60
|
+
gap: var(--sl-description-list-leader-gap);
|
|
61
|
+
min-width: 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.DescriptionList[data-variant='leader'] .DescriptionTerm::after {
|
|
65
|
+
content: '';
|
|
66
|
+
flex: 1 1 var(--sl-space-6);
|
|
67
|
+
min-width: var(--sl-space-6);
|
|
68
|
+
border-bottom: var(--sl-description-list-leader-width) dotted var(--sl-description-list-leader-color);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.DescriptionList[data-variant='leader'] .DescriptionDetails {
|
|
72
|
+
flex: 0 1 auto;
|
|
73
|
+
max-width: 60%;
|
|
74
|
+
text-align: end;
|
|
75
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* EditableList
|
|
3
3
|
*
|
|
4
4
|
* One table at every width, so a field is not submitted twice. Under the stack width each
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
|
+
/* PickerButton
|
|
3
|
+
*
|
|
4
|
+
* A trigger with a caps label before the current choice: CLIENT Alpha Services. The field
|
|
5
|
+
* look and states of a Select trigger; the label is caps-condense in picker-button.label-color,
|
|
6
|
+
* the choice is cut with an ellipsis at picker-button.max-width and the chevron turns while
|
|
7
|
+
* its popup is open. Tokens: picker-button.* (tokens/component/picker-button.json) and field.*.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.PickerButton {
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
color: var(--sl-field-color);
|
|
13
|
+
background: var(--sl-field-background);
|
|
14
|
+
border: var(--sl-field-border-width) solid var(--sl-field-border-color);
|
|
15
|
+
border-radius: var(--sl-field-radius);
|
|
16
|
+
transition: var(--sl-field-transition);
|
|
17
|
+
outline: none;
|
|
18
|
+
font-family: var(--sl-font-body-base-font-family);
|
|
19
|
+
font-size: var(--sl-font-body-base-font-size);
|
|
20
|
+
font-weight: var(--sl-font-body-base-font-weight);
|
|
21
|
+
line-height: var(--sl-font-body-base-line-height);
|
|
22
|
+
letter-spacing: var(--sl-font-body-base-letter-spacing);
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--sl-gap-control);
|
|
26
|
+
max-width: var(--sl-picker-button-max-width);
|
|
27
|
+
min-width: 0;
|
|
28
|
+
height: var(--sl-control-height-md);
|
|
29
|
+
margin: 0;
|
|
30
|
+
padding-block: var(--sl-control-padding-block);
|
|
31
|
+
padding-inline: var(--sl-control-padding-inline);
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.PickerButton:hover:not(:disabled) {
|
|
37
|
+
border-color: var(--sl-field-border-color-hover);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.PickerButton:focus-visible {
|
|
41
|
+
border-color: var(--sl-field-border-color-focus);
|
|
42
|
+
box-shadow: var(--sl-field-shadow-focus);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.PickerButton:disabled {
|
|
46
|
+
background: var(--sl-field-background-disabled);
|
|
47
|
+
color: var(--sl-field-color-disabled);
|
|
48
|
+
cursor: not-allowed;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.PickerButtonLabel {
|
|
52
|
+
font-family: var(--sl-font-caps-condense-font-family);
|
|
53
|
+
font-size: var(--sl-font-caps-condense-font-size);
|
|
54
|
+
font-weight: var(--sl-font-caps-condense-font-weight);
|
|
55
|
+
line-height: var(--sl-font-caps-condense-line-height);
|
|
56
|
+
letter-spacing: var(--sl-font-caps-condense-letter-spacing);
|
|
57
|
+
text-transform: var(--sl-font-caps-condense-text-transform);
|
|
58
|
+
flex: none;
|
|
59
|
+
color: var(--sl-picker-button-label-color);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.PickerButtonValue {
|
|
63
|
+
flex: 0 1 auto;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
text-overflow: ellipsis;
|
|
67
|
+
color: var(--sl-field-color);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.PickerButtonValue[data-placeholder] {
|
|
71
|
+
color: var(--sl-field-placeholder-color);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.PickerButtonIcon {
|
|
75
|
+
flex: none;
|
|
76
|
+
width: var(--sl-icon-size-base);
|
|
77
|
+
height: var(--sl-icon-size-base);
|
|
78
|
+
color: var(--sl-text-tertiary);
|
|
79
|
+
transition: transform var(--sl-duration-normal) var(--sl-easing-default);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.PickerButton[aria-expanded='true'] .PickerButtonIcon,
|
|
83
|
+
.PickerButton[data-popup-open] .PickerButtonIcon {
|
|
84
|
+
transform: rotate(180deg);
|
|
85
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
|
+
/* Sheet
|
|
3
|
+
*
|
|
4
|
+
* A working-paper surface: the raised surface with a heavier rule across its top
|
|
5
|
+
* (sheet.rule-width in sheet.rule-color) instead of its top border, and an optional tab
|
|
6
|
+
* label that sits on the rule like the tab of a ledger page. The tab is caps-condense on
|
|
7
|
+
* the inverse surface. An action (an Edit link, a count) sits at the end of the header row.
|
|
8
|
+
* Tokens: sheet.* (tokens/component/sheet.json).
|
|
9
|
+
*
|
|
10
|
+
* Content runs edge to edge, so a Table, DataList or leader DescriptionList inside lines up
|
|
11
|
+
* with the sheet's sides; data-inset on SheetBody pads it by sheet.padding instead. A Table
|
|
12
|
+
* inside drops its own outer border and corners, since the sheet is its frame.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
.Sheet {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
min-width: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.SheetHeader {
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: flex-end;
|
|
25
|
+
gap: var(--sl-sheet-header-gap);
|
|
26
|
+
min-height: var(--sl-sheet-tab-height);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.SheetTab {
|
|
30
|
+
font-family: var(--sl-font-caps-condense-font-family);
|
|
31
|
+
font-size: var(--sl-font-caps-condense-font-size);
|
|
32
|
+
font-weight: var(--sl-font-caps-condense-font-weight);
|
|
33
|
+
line-height: var(--sl-font-caps-condense-line-height);
|
|
34
|
+
letter-spacing: var(--sl-font-caps-condense-letter-spacing);
|
|
35
|
+
text-transform: var(--sl-font-caps-condense-text-transform);
|
|
36
|
+
display: inline-flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
height: var(--sl-sheet-tab-height);
|
|
39
|
+
padding-inline: var(--sl-sheet-tab-padding-inline);
|
|
40
|
+
background: var(--sl-sheet-tab-background);
|
|
41
|
+
color: var(--sl-sheet-tab-color);
|
|
42
|
+
border-radius: var(--sl-sheet-tab-radius) var(--sl-sheet-tab-radius) 0 0;
|
|
43
|
+
white-space: nowrap;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.SheetAction {
|
|
47
|
+
font-family: var(--sl-font-subtitle-condense-font-family);
|
|
48
|
+
font-size: var(--sl-font-subtitle-condense-font-size);
|
|
49
|
+
font-weight: var(--sl-font-subtitle-condense-font-weight);
|
|
50
|
+
line-height: var(--sl-font-subtitle-condense-line-height);
|
|
51
|
+
letter-spacing: var(--sl-font-subtitle-condense-letter-spacing);
|
|
52
|
+
margin-inline-start: auto;
|
|
53
|
+
padding-block-end: var(--sl-space-1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.SheetBody {
|
|
57
|
+
box-sizing: border-box;
|
|
58
|
+
flex: 1;
|
|
59
|
+
min-width: 0;
|
|
60
|
+
background: var(--sl-sheet-background);
|
|
61
|
+
border: var(--sl-sheet-border-width) solid var(--sl-sheet-border-color);
|
|
62
|
+
border-top: var(--sl-sheet-rule-width) solid var(--sl-sheet-rule-color);
|
|
63
|
+
border-radius: var(--sl-sheet-radius);
|
|
64
|
+
/* Rows inside keep to the rounded corners. clip, not hidden, so a sticky header still sticks. */
|
|
65
|
+
overflow: clip;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Under a tab the top corners stay square, so the tab sits flush on the rule. */
|
|
69
|
+
.Sheet[data-tab] > .SheetBody {
|
|
70
|
+
border-start-start-radius: 0;
|
|
71
|
+
border-start-end-radius: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.SheetBody[data-inset] {
|
|
75
|
+
padding: var(--sl-sheet-padding);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* The sheet is the frame: a table or list inside drops its own outer edge. */
|
|
79
|
+
.SheetBody > .Table,
|
|
80
|
+
.SheetBody > .CollectionView .Table,
|
|
81
|
+
.SheetBody > .DataList ul {
|
|
82
|
+
border: 0;
|
|
83
|
+
border-radius: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.SheetBody > .Table > thead > tr:first-child > *,
|
|
87
|
+
.SheetBody > .Table:not(:has(> thead)) > tbody:first-of-type > tr:first-child > *,
|
|
88
|
+
.SheetBody > .DataList ul > li:first-child {
|
|
89
|
+
border-top: 0;
|
|
90
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
|
+
/* StatFigure
|
|
3
|
+
*
|
|
4
|
+
* One large figure with a caps label above and a caption under it. The label is
|
|
5
|
+
* caps-condense, the figure uses the figures text family (mono, tabular numbers) at
|
|
6
|
+
* stat-figure.figure-font-size, the caption is body-condense. data-underline="double"
|
|
7
|
+
* draws a double rule under the figure only, the accountant's mark for a final total;
|
|
8
|
+
* data-tone="accent" colors the figure; data-size="sm" makes it smaller for a row of figures.
|
|
9
|
+
* Tokens: stat-figure.* (tokens/component/stat-figure.json).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.StatFigure {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
align-items: flex-start;
|
|
16
|
+
gap: var(--sl-stat-figure-gap);
|
|
17
|
+
min-width: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.StatFigureLabel {
|
|
21
|
+
font-family: var(--sl-font-caps-condense-font-family);
|
|
22
|
+
font-size: var(--sl-font-caps-condense-font-size);
|
|
23
|
+
font-weight: var(--sl-font-caps-condense-font-weight);
|
|
24
|
+
line-height: var(--sl-font-caps-condense-line-height);
|
|
25
|
+
letter-spacing: var(--sl-font-caps-condense-letter-spacing);
|
|
26
|
+
text-transform: var(--sl-font-caps-condense-text-transform);
|
|
27
|
+
color: var(--sl-stat-figure-label-color);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.StatFigureValue {
|
|
31
|
+
font-family: var(--sl-font-figures-base-font-family);
|
|
32
|
+
font-variant-numeric: var(--sl-font-figures-base-font-variant-numeric);
|
|
33
|
+
font-size: var(--sl-stat-figure-figure-font-size);
|
|
34
|
+
font-weight: var(--sl-stat-figure-figure-font-weight);
|
|
35
|
+
line-height: var(--sl-stat-figure-figure-line-height);
|
|
36
|
+
color: var(--sl-stat-figure-figure-color);
|
|
37
|
+
white-space: nowrap;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.StatFigure[data-size='sm'] .StatFigureValue {
|
|
41
|
+
font-size: var(--sl-stat-figure-figure-font-size-sm);
|
|
42
|
+
line-height: var(--sl-stat-figure-figure-line-height-sm);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.StatFigure[data-tone='accent'] .StatFigureValue {
|
|
46
|
+
color: var(--sl-stat-figure-figure-color-accent);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.StatFigure[data-underline='double'] .StatFigureValue {
|
|
50
|
+
border-bottom: var(--sl-stat-figure-underline-width) double var(--sl-stat-figure-underline-color);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.StatFigureCaption {
|
|
54
|
+
font-family: var(--sl-font-body-condense-font-family);
|
|
55
|
+
font-size: var(--sl-font-body-condense-font-size);
|
|
56
|
+
font-weight: var(--sl-font-body-condense-font-weight);
|
|
57
|
+
line-height: var(--sl-font-body-condense-line-height);
|
|
58
|
+
letter-spacing: var(--sl-font-body-condense-letter-spacing);
|
|
59
|
+
color: var(--sl-stat-figure-caption-color);
|
|
60
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* Table - Mojave Theme
|
|
3
3
|
*
|
|
4
4
|
* Base UI has no table, so this styles the native <table class="Table"> elements with the
|
|
@@ -11,6 +11,13 @@
|
|
|
11
11
|
* `<tr><td data-empty colSpan={n}><EmptyState size="compact" … /></td></tr>`. A cell with
|
|
12
12
|
* only text still uses this rule's padding. A cell whose child is an EmptyState lets the
|
|
13
13
|
* empty state pad itself. The empty row does not take the row hover.
|
|
14
|
+
*
|
|
15
|
+
* Totals: tr data-total="subtotal" draws a single rule above the row, and data-total="grand"
|
|
16
|
+
* a rule above and a double rule under, as on a working paper (table.total-*). They work in
|
|
17
|
+
* tbody or tfoot. A tfoot row without data-total keeps the header tray band.
|
|
18
|
+
*
|
|
19
|
+
* The working-paper rule (rule.width, 0 by default) replaces the table's top border with a
|
|
20
|
+
* heavier line in rule.color, drawn on the first row's cells so it stays with a sticky header.
|
|
14
21
|
*/
|
|
15
22
|
|
|
16
23
|
.Table {
|
|
@@ -29,6 +36,15 @@
|
|
|
29
36
|
border-radius: var(--sl-table-radius);
|
|
30
37
|
overflow: hidden;
|
|
31
38
|
font-variant-numeric: tabular-nums;
|
|
39
|
+
/* The top border steps aside while the working-paper rule is on (any rule.width above 0). */
|
|
40
|
+
border-top-width: max(0px, var(--sl-stroke-default) - var(--sl-rule-width) * 1000);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* The working-paper rule, on the first row: the header, or the body when there is none.
|
|
44
|
+
At rule.width 0 this is no border at all. */
|
|
45
|
+
.Table > thead > tr:first-child > *,
|
|
46
|
+
.Table:not(:has(> thead)) > tbody:first-of-type > tr:first-child > * {
|
|
47
|
+
border-top: var(--sl-rule-width) solid var(--sl-rule-color);
|
|
32
48
|
}
|
|
33
49
|
|
|
34
50
|
.Table caption {
|
|
@@ -140,6 +156,52 @@
|
|
|
140
156
|
border-bottom: none;
|
|
141
157
|
}
|
|
142
158
|
|
|
159
|
+
/* Subtotal and grand total rows: rules instead of a band, in the subtitle weight.
|
|
160
|
+
Hover and selection don't apply: a total is not a record. */
|
|
161
|
+
.Table tr[data-total] > * {
|
|
162
|
+
font-family: var(--sl-font-subtitle-condense-font-family);
|
|
163
|
+
font-size: var(--sl-font-subtitle-condense-font-size);
|
|
164
|
+
font-weight: var(--sl-font-subtitle-condense-font-weight);
|
|
165
|
+
line-height: var(--sl-font-subtitle-condense-line-height);
|
|
166
|
+
letter-spacing: var(--sl-font-subtitle-condense-letter-spacing);
|
|
167
|
+
background: var(--sl-table-total-background);
|
|
168
|
+
color: var(--sl-table-color);
|
|
169
|
+
border-top: var(--sl-table-subtotal-rule-width) solid var(--sl-table-total-rule-color);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.Table tbody tr[data-total] > * {
|
|
173
|
+
border-bottom: var(--sl-stroke-default) solid var(--sl-table-row-border-color);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.Table tbody tr[data-total]:last-child:not([data-total='grand']) > * {
|
|
177
|
+
border-bottom: none;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* The grand total: a double rule under the figures. */
|
|
181
|
+
.Table :is(tbody, tfoot) tr[data-total='grand'] > * {
|
|
182
|
+
border-bottom: var(--sl-table-grand-total-rule-width) double var(--sl-table-total-rule-color);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* A label or blank cell in a total row can leave the rules off, so they only run under the
|
|
186
|
+
figures: data-rule="none" on the cell. */
|
|
187
|
+
.Table :is(tbody, tfoot) tr[data-total] > [data-rule='none'] {
|
|
188
|
+
border-top-color: transparent;
|
|
189
|
+
border-bottom-color: transparent;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* In the footer the body's last row has no line under it, so those cells keep the footer's
|
|
193
|
+
usual line on top. */
|
|
194
|
+
.Table tfoot tr[data-total] > [data-rule='none'] {
|
|
195
|
+
border-top: var(--sl-stroke-default) solid var(--sl-table-border-color);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@media (hover: hover) {
|
|
199
|
+
.Table tbody tr[data-total]:hover > * {
|
|
200
|
+
background: var(--sl-table-total-background);
|
|
201
|
+
color: var(--sl-table-color);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
143
205
|
/* A header that stays put while the body scrolls (the table's wrapper scrolls) */
|
|
144
206
|
.Table[data-sticky-header] thead th {
|
|
145
207
|
position: sticky;
|
package/dist/styles/index.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* Loomiere for Base UI: component styles. Brand-free: every value is a --sl- variable from a
|
|
3
3
|
Loomiere theme. Load the theme first:
|
|
4
4
|
@import '<your theme>/tokens.css';
|
|
@@ -61,3 +61,8 @@
|
|
|
61
61
|
@import './custom/Table.css';
|
|
62
62
|
@import './custom/Collection.css';
|
|
63
63
|
@import './custom/EditableList.css';
|
|
64
|
+
@import './custom/Sheet.css';
|
|
65
|
+
@import './custom/StatFigure.css';
|
|
66
|
+
@import './custom/DescriptionList.css';
|
|
67
|
+
@import './custom/AppBar.css';
|
|
68
|
+
@import './custom/PickerButton.css';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* Focus, invalid, contrast — requires theme tokens (after theme-accessibility.css). */
|
|
3
3
|
|
|
4
4
|
:focus-visible {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* Accessibility — base rules (no theme color dependencies). Theme-specific focus/invalid: accessibility-theme.css */
|
|
3
3
|
|
|
4
4
|
/* Remove default focus; keyboard focus styled in accessibility-theme.css */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* CSS Reset - Mojave Theme */
|
|
3
3
|
|
|
4
4
|
/* ============================================
|
|
@@ -271,7 +271,7 @@ pre {
|
|
|
271
271
|
background: var(--sl-content-pre-background);
|
|
272
272
|
border: var(--sl-stroke-thin) solid var(--sl-content-pre-border);
|
|
273
273
|
color: var(--sl-content-pre-text);
|
|
274
|
-
border-radius: var(--sl-
|
|
274
|
+
border-radius: var(--sl-content-pre-radius);
|
|
275
275
|
overflow-x: auto;
|
|
276
276
|
margin-block: var(--sl-space-6);
|
|
277
277
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* CSS Reset - Mojave Theme */
|
|
3
3
|
|
|
4
4
|
/* ============================================
|
|
@@ -272,7 +272,7 @@ pre {
|
|
|
272
272
|
background: var(--sl-content-pre-background);
|
|
273
273
|
border: var(--sl-stroke-thin) solid var(--sl-content-pre-border);
|
|
274
274
|
color: var(--sl-content-pre-text);
|
|
275
|
-
border-radius: var(--sl-
|
|
275
|
+
border-radius: var(--sl-content-pre-radius);
|
|
276
276
|
overflow-x: auto;
|
|
277
277
|
margin-block: var(--sl-space-6);
|
|
278
278
|
}
|
package/dist/styles/tailwind.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @scattered-light/loomiere-base-ui 0.
|
|
1
|
+
/* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
|
|
2
2
|
/* Loomiere for Base UI: component styles for Tailwind CSS v4. Load Tailwind and the theme first:
|
|
3
3
|
@import 'tailwindcss';
|
|
4
4
|
@import '<your theme>/tokens.css';
|
|
@@ -64,3 +64,8 @@
|
|
|
64
64
|
@import './custom/Table.css' layer(components);
|
|
65
65
|
@import './custom/Collection.css' layer(components);
|
|
66
66
|
@import './custom/EditableList.css' layer(components);
|
|
67
|
+
@import './custom/Sheet.css' layer(components);
|
|
68
|
+
@import './custom/StatFigure.css' layer(components);
|
|
69
|
+
@import './custom/DescriptionList.css' layer(components);
|
|
70
|
+
@import './custom/AppBar.css' layer(components);
|
|
71
|
+
@import './custom/PickerButton.css' layer(components);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scattered-light/loomiere-base-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Base UI components styled by any Loomiere theme. Brand-free: every value is a --sl- variable.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base-ui",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
}
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"@scattered-light/loomiere": "0.
|
|
79
|
+
"@scattered-light/loomiere": "0.9.0",
|
|
80
80
|
"@tanstack/react-table": "^9.3.1"
|
|
81
81
|
}
|
|
82
82
|
}
|