@scattered-light/loomiere-base-ui 0.8.0 → 0.10.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 (83) hide show
  1. package/README.md +43 -2
  2. package/dist/{chunk-LJQ3RZDJ.js → chunk-PV5YOQMN.js} +69 -3
  3. package/dist/chunk-PV5YOQMN.js.map +1 -0
  4. package/dist/custom/index.d.ts +1 -1
  5. package/dist/custom/index.js +1 -1
  6. package/dist/design-system/components/AppBar/README.md +58 -0
  7. package/dist/design-system/components/AppBar/preview.html +19 -0
  8. package/dist/design-system/components/PickerButton/README.md +56 -0
  9. package/dist/design-system/components/PickerButton/preview.html +19 -0
  10. package/dist/design-system/components/SideNav/README.md +73 -0
  11. package/dist/design-system/components/SideNav/preview.html +19 -0
  12. package/dist/design-system/components/ToggleGroup/README.md +2 -2
  13. package/dist/design-system/components/ToggleGroup/preview.html +1 -1
  14. package/dist/design-system/components/bundle.js +7 -7
  15. package/dist/design-system/components/index.d.ts +1 -1
  16. package/dist/design-system/components/styles.css +400 -57
  17. package/dist/{index-CBAo353T.d.ts → index-D88kSSlM.d.ts} +78 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/styles/components/Accordion.css +1 -1
  21. package/dist/styles/components/AlertDialog.css +1 -1
  22. package/dist/styles/components/Autocomplete.css +1 -1
  23. package/dist/styles/components/Avatar.css +1 -1
  24. package/dist/styles/components/Button.css +1 -1
  25. package/dist/styles/components/Checkbox.css +1 -1
  26. package/dist/styles/components/CheckboxGroup.css +1 -1
  27. package/dist/styles/components/Collapsible.css +1 -1
  28. package/dist/styles/components/Combobox.css +1 -1
  29. package/dist/styles/components/ContextMenu.css +1 -1
  30. package/dist/styles/components/Dialog.css +1 -1
  31. package/dist/styles/components/Drawer.css +1 -1
  32. package/dist/styles/components/Field.css +1 -1
  33. package/dist/styles/components/Fieldset.css +1 -1
  34. package/dist/styles/components/Form.css +1 -1
  35. package/dist/styles/components/Input.css +1 -1
  36. package/dist/styles/components/Menu.css +1 -1
  37. package/dist/styles/components/Menubar.css +1 -1
  38. package/dist/styles/components/Meter.css +1 -1
  39. package/dist/styles/components/NavigationMenu.css +1 -1
  40. package/dist/styles/components/NumberField.css +1 -1
  41. package/dist/styles/components/OTPField.css +1 -1
  42. package/dist/styles/components/Popover.css +1 -1
  43. package/dist/styles/components/PreviewCard.css +1 -1
  44. package/dist/styles/components/Progress.css +1 -1
  45. package/dist/styles/components/Radio.css +1 -1
  46. package/dist/styles/components/ScrollArea.css +1 -1
  47. package/dist/styles/components/Select.css +1 -1
  48. package/dist/styles/components/Separator.css +1 -1
  49. package/dist/styles/components/Slider.css +1 -1
  50. package/dist/styles/components/Switch.css +1 -1
  51. package/dist/styles/components/Tabs.css +1 -1
  52. package/dist/styles/components/Toast.css +1 -1
  53. package/dist/styles/components/Toggle.css +1 -1
  54. package/dist/styles/components/ToggleGroup.css +42 -1
  55. package/dist/styles/components/Toolbar.css +1 -1
  56. package/dist/styles/components/Tooltip.css +1 -1
  57. package/dist/styles/custom/AppBar.css +33 -0
  58. package/dist/styles/custom/Badge.css +1 -1
  59. package/dist/styles/custom/Collection.css +1 -1
  60. package/dist/styles/custom/CollectionPagination.css +1 -1
  61. package/dist/styles/custom/CollectionToolbar.css +1 -1
  62. package/dist/styles/custom/DataList.css +1 -1
  63. package/dist/styles/custom/DataTable.css +1 -1
  64. package/dist/styles/custom/DatePicker.css +1 -1
  65. package/dist/styles/custom/DescriptionList.css +1 -1
  66. package/dist/styles/custom/EditableList.css +1 -1
  67. package/dist/styles/custom/EmptyState.css +1 -1
  68. package/dist/styles/custom/ListDetail.css +1 -1
  69. package/dist/styles/custom/MoneyField.css +1 -1
  70. package/dist/styles/custom/PickerButton.css +85 -0
  71. package/dist/styles/custom/Sheet.css +1 -1
  72. package/dist/styles/custom/SideNav.css +181 -0
  73. package/dist/styles/custom/Splitter.css +1 -1
  74. package/dist/styles/custom/StatFigure.css +1 -1
  75. package/dist/styles/custom/Table.css +1 -1
  76. package/dist/styles/index.css +4 -1
  77. package/dist/styles/reset/accessibility.css +1 -1
  78. package/dist/styles/reset/reset-accessibility.css +1 -1
  79. package/dist/styles/reset/reset-tailwind.css +1 -1
  80. package/dist/styles/reset/reset.css +1 -1
  81. package/dist/styles/tailwind.css +4 -1
  82. package/package.json +2 -2
  83. package/dist/chunk-LJQ3RZDJ.js.map +0 -1
@@ -0,0 +1,85 @@
1
+ /* @scattered-light/loomiere-base-ui 0.10.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
+ }
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Sheet
3
3
  *
4
4
  * A working-paper surface: the raised surface with a heavier rule across its top
@@ -0,0 +1,181 @@
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
+ /* SideNav
3
+ *
4
+ * The column of links down the side of a workspace. Rows are ruled apart with a hairline; the
5
+ * current row (aria-current="page") sits on the raised surface with a rule under it in the
6
+ * working-paper ink; counts are figures; group headings are caps labels. SideNavToggle is a
7
+ * small round button on the column's edge, whose chevron turns with the state. The parent
8
+ * sets the width and must not clip the toggle (overflow: visible), since it hangs over the edge.
9
+ * Tokens: side-nav.* (tokens/component/side-nav.json).
10
+ */
11
+
12
+ .SideNav {
13
+ position: relative;
14
+ box-sizing: border-box;
15
+ display: flex;
16
+ flex-direction: column;
17
+ height: 100%;
18
+ min-width: 0;
19
+ padding-block: var(--sl-space-4);
20
+ background: var(--sl-side-nav-background);
21
+ border-inline-end: var(--sl-stroke-default) solid var(--sl-side-nav-border-color);
22
+ }
23
+
24
+ .SideNav[data-collapsed] {
25
+ min-width: var(--sl-side-nav-collapsed-width);
26
+ }
27
+
28
+ /* Collapsed: only the toggle stays. */
29
+ .SideNav[data-collapsed] > :not(.SideNavToggle) {
30
+ display: none;
31
+ }
32
+
33
+ .SideNavItem {
34
+ font-family: var(--sl-font-body-base-font-family);
35
+ font-size: var(--sl-font-body-base-font-size);
36
+ font-weight: var(--sl-font-body-base-font-weight);
37
+ line-height: var(--sl-font-body-base-line-height);
38
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
39
+ box-sizing: border-box;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ gap: var(--sl-side-nav-item-gap);
44
+ min-height: var(--sl-side-nav-item-height);
45
+ padding-inline: var(--sl-side-nav-item-padding-inline);
46
+ color: var(--sl-side-nav-item-color);
47
+ text-decoration: none;
48
+ border-bottom: var(--sl-stroke-default) solid var(--sl-side-nav-item-divider-color);
49
+ cursor: pointer;
50
+ transition: background var(--sl-duration-fast) var(--sl-easing-default);
51
+ }
52
+
53
+ .SideNavItemText {
54
+ display: flex;
55
+ flex-direction: column;
56
+ min-width: 0;
57
+ }
58
+
59
+ .SideNavItemLabel {
60
+ overflow: hidden;
61
+ text-overflow: ellipsis;
62
+ white-space: nowrap;
63
+ }
64
+
65
+ .SideNavItemHint {
66
+ font-family: var(--sl-font-body-minimize-font-family);
67
+ font-size: var(--sl-font-body-minimize-font-size);
68
+ font-weight: var(--sl-font-body-minimize-font-weight);
69
+ line-height: var(--sl-font-body-minimize-line-height);
70
+ letter-spacing: var(--sl-font-body-minimize-letter-spacing);
71
+ color: var(--sl-side-nav-item-color-disabled);
72
+ }
73
+
74
+ .SideNavItem:hover:not([data-current]):not([data-disabled]) {
75
+ background: var(--sl-side-nav-item-background-hover);
76
+ }
77
+
78
+ .SideNavItem:focus-visible {
79
+ outline: var(--sl-focus-outline);
80
+ outline-offset: var(--sl-focus-outline-offset-inset);
81
+ }
82
+
83
+ .SideNavItem[data-current] {
84
+ background: var(--sl-side-nav-item-background-current);
85
+ font-weight: var(--sl-font-weight-semibold);
86
+ box-shadow: inset 0 calc(-1 * var(--sl-side-nav-indicator-width)) 0 var(--sl-side-nav-indicator-color);
87
+ }
88
+
89
+ .SideNavItem[data-disabled] {
90
+ color: var(--sl-side-nav-item-color-disabled);
91
+ cursor: default;
92
+ }
93
+
94
+ .SideNavItemCount {
95
+ flex: none;
96
+ font-family: var(--sl-font-figures-condense-font-family);
97
+ font-variant-numeric: var(--sl-font-figures-condense-font-variant-numeric);
98
+ font-size: var(--sl-font-figures-condense-font-size);
99
+ font-weight: var(--sl-font-weight-semibold);
100
+ line-height: var(--sl-font-figures-condense-line-height);
101
+ color: var(--sl-side-nav-count-color);
102
+ }
103
+
104
+ .SideNavItemCount[data-tone='quiet'] {
105
+ color: var(--sl-side-nav-count-color-quiet);
106
+ }
107
+
108
+ .SideNavGroupLabel {
109
+ font-family: var(--sl-font-caps-condense-font-family);
110
+ font-size: var(--sl-font-caps-condense-font-size);
111
+ font-weight: var(--sl-font-caps-condense-font-weight);
112
+ line-height: var(--sl-font-caps-condense-line-height);
113
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
114
+ text-transform: var(--sl-font-caps-condense-text-transform);
115
+ padding-top: var(--sl-side-nav-group-padding-top);
116
+ padding-bottom: var(--sl-space-1-5);
117
+ padding-inline: var(--sl-side-nav-item-padding-inline);
118
+ color: var(--sl-side-nav-group-label-color);
119
+ }
120
+
121
+ /* ============================================
122
+ COLLAPSE BUTTON
123
+ ============================================ */
124
+
125
+ .SideNavToggle {
126
+ all: unset;
127
+ box-sizing: border-box;
128
+ position: absolute;
129
+ z-index: 1;
130
+ top: var(--sl-side-nav-toggle-offset);
131
+ inset-inline-end: calc(-0.5 * var(--sl-side-nav-toggle-size));
132
+ display: inline-flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ width: var(--sl-side-nav-toggle-size);
136
+ height: var(--sl-side-nav-toggle-size);
137
+ border-radius: var(--sl-radius-pill);
138
+ background: var(--sl-side-nav-toggle-background);
139
+ border: var(--sl-stroke-default) solid var(--sl-side-nav-toggle-border-color);
140
+ color: var(--sl-text-secondary);
141
+ cursor: pointer;
142
+ transition: color var(--sl-duration-fast) var(--sl-easing-default),
143
+ border-color var(--sl-duration-fast) var(--sl-easing-default);
144
+ }
145
+
146
+ .SideNavToggle:hover {
147
+ color: var(--sl-text-primary);
148
+ border-color: var(--sl-text-primary);
149
+ }
150
+
151
+ .SideNavToggle:focus-visible {
152
+ outline: var(--sl-focus-outline);
153
+ outline-offset: var(--sl-focus-outline-offset);
154
+ }
155
+
156
+ .SideNavToggleIcon {
157
+ width: var(--sl-icon-size-minimize);
158
+ height: var(--sl-icon-size-minimize);
159
+ transition: transform var(--sl-duration-normal) var(--sl-easing-default);
160
+ }
161
+
162
+ /* The chevron points the way the column will go: left to collapse, right to expand. */
163
+ .SideNavToggle[aria-expanded='false'] .SideNavToggleIcon {
164
+ transform: rotate(180deg);
165
+ }
166
+
167
+ [dir='rtl'] .SideNavToggleIcon {
168
+ transform: scaleX(-1);
169
+ }
170
+
171
+ [dir='rtl'] .SideNavToggle[aria-expanded='false'] .SideNavToggleIcon {
172
+ transform: scaleX(-1) rotate(180deg);
173
+ }
174
+
175
+ @media (prefers-reduced-motion: reduce) {
176
+ .SideNavToggleIcon,
177
+ .SideNavItem,
178
+ .SideNavToggle {
179
+ transition: none;
180
+ }
181
+ }
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Splitter
3
3
  *
4
4
  * Two or more panels and a handle between them. Not a Base UI part. It follows the
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* StatFigure
3
3
  *
4
4
  * One large figure with a caps label above and a caption under it. The label is
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.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
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.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';
@@ -64,3 +64,6 @@
64
64
  @import './custom/Sheet.css';
65
65
  @import './custom/StatFigure.css';
66
66
  @import './custom/DescriptionList.css';
67
+ @import './custom/AppBar.css';
68
+ @import './custom/PickerButton.css';
69
+ @import './custom/SideNav.css';
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.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.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.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.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* CSS Reset - Mojave Theme */
3
3
 
4
4
  /* ============================================
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* CSS Reset - Mojave Theme */
3
3
 
4
4
  /* ============================================
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.10.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';
@@ -67,3 +67,6 @@
67
67
  @import './custom/Sheet.css' layer(components);
68
68
  @import './custom/StatFigure.css' layer(components);
69
69
  @import './custom/DescriptionList.css' layer(components);
70
+ @import './custom/AppBar.css' layer(components);
71
+ @import './custom/PickerButton.css' layer(components);
72
+ @import './custom/SideNav.css' layer(components);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scattered-light/loomiere-base-ui",
3
- "version": "0.8.0",
3
+ "version": "0.10.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.8.0",
79
+ "@scattered-light/loomiere": "0.10.0",
80
80
  "@tanstack/react-table": "^9.3.1"
81
81
  }
82
82
  }