@capillaryjs/capillary-ui 1.1.0 → 1.3.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/CHANGELOG.md +117 -2
- package/README.md +196 -35
- package/colors/README.md +53 -3
- package/colors/gray/colors.css +4 -2
- package/colors/green/colors.css +4 -2
- package/colors/iceblue/colors.css +4 -2
- package/colors/ocean/colors.css +4 -2
- package/colors/orange/colors.css +4 -2
- package/colors/purple/colors.css +4 -2
- package/colors/red/colors.css +7 -3
- package/colors/yellow/colors.css +8 -4
- package/dist/Components/app/app.d.ts +3 -3
- package/dist/Components/app/app.d.ts.map +1 -1
- package/dist/Components/component.d.ts +24 -3
- package/dist/Components/component.d.ts.map +1 -1
- package/dist/Components/data/descriptionList.d.ts.map +1 -1
- package/dist/Components/data/listview/listview.d.ts.map +1 -1
- package/dist/Components/data/table/DataTable.d.ts +8 -0
- package/dist/Components/data/table/DataTable.d.ts.map +1 -1
- package/dist/Components/data/table/FilterPanel.d.ts.map +1 -1
- package/dist/Components/data/table/TableHeader.d.ts +2 -0
- package/dist/Components/data/table/TableHeader.d.ts.map +1 -1
- package/dist/Components/data/table/TableHeaderCell.d.ts +18 -0
- package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Components/data/table/tableDataSource.d.ts +6 -0
- package/dist/Components/data/table/tableDataSource.d.ts.map +1 -1
- package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
- package/dist/Components/layout/groupBox.d.ts.map +1 -1
- package/dist/Components/layout/header.d.ts.map +1 -1
- package/dist/Components/layout/layout.d.ts +2 -2
- package/dist/Components/layout/layout.d.ts.map +1 -1
- package/dist/Components/layout/layoutTraits.d.ts +6 -0
- package/dist/Components/layout/layoutTraits.d.ts.map +1 -1
- package/dist/Components/layout/optionGroup.d.ts.map +1 -1
- package/dist/Components/layout/optionsBox.d.ts +2 -1
- package/dist/Components/layout/optionsBox.d.ts.map +1 -1
- package/dist/Components/layout/splitView.d.ts +2 -0
- package/dist/Components/layout/splitView.d.ts.map +1 -1
- package/dist/Components/lineinputs/CheckableControl.d.ts +2 -2
- package/dist/Components/lineinputs/CheckableControl.d.ts.map +1 -1
- package/dist/Components/lineinputs/LabeledInputControl.d.ts +2 -2
- package/dist/Components/lineinputs/LabeledInputControl.d.ts.map +1 -1
- package/dist/Components/lineinputs/LineControl.d.ts +7 -0
- package/dist/Components/lineinputs/LineControl.d.ts.map +1 -0
- package/dist/Components/lineinputs/SelectControl.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +9 -3
- package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts +1 -0
- package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts +1 -0
- package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/datetime/TemporalInput.d.ts.map +1 -1
- package/dist/Components/lineinputs/dropdown.d.ts +4 -2
- package/dist/Components/lineinputs/dropdown.d.ts.map +1 -1
- package/dist/Components/lineinputs/radio.d.ts +9 -4
- package/dist/Components/lineinputs/radio.d.ts.map +1 -1
- package/dist/Components/lineinputs/requiredPresentation.d.ts +21 -0
- package/dist/Components/lineinputs/requiredPresentation.d.ts.map +1 -0
- package/dist/Components/lineinputs/textbox.d.ts.map +1 -1
- package/dist/Components/lineinputs/toggle.d.ts +4 -2
- package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
- package/dist/Components/menu/button.d.ts +2 -2
- package/dist/Components/menu/button.d.ts.map +1 -1
- package/dist/Components/status/progressBar.d.ts +2 -2
- package/dist/Components/status/progressBar.d.ts.map +1 -1
- package/dist/Components/status/statusPresentation.d.ts.map +1 -1
- package/dist/Components/theme/stylesheetPicker.d.ts +2 -1
- package/dist/Components/theme/stylesheetPicker.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2697 -2079
- package/dist/index.js.map +1 -1
- package/dist/jsx-dev-runtime.js +3 -3
- package/dist/jsx-runtime-Ba-uafjl.js +1631 -0
- package/dist/jsx-runtime-Ba-uafjl.js.map +1 -0
- package/dist/jsx-runtime.js +2 -2
- package/dist/localization.d.ts +1 -1
- package/dist/localization.d.ts.map +1 -1
- package/dist/routing/RouteOutlet.d.ts.map +1 -1
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/styling/theme.d.ts +1 -1
- package/dist/styling/theme.d.ts.map +1 -1
- package/docs/application-composition-guide.md +22 -5
- package/package.json +3 -3
- package/styles/structural.css +704 -158
- package/themes/README.md +9 -2
- package/themes/base.css +114 -18
- package/themes/capillary/theme.css +300 -0
- package/themes/shiny/theme.css +33 -15
- package/themes/soft/theme.css +37 -0
- package/themes/white/theme.css +52 -0
- package/dist/jsx-dev-runtime-D3UnwrKT.js +0 -1362
- package/dist/jsx-dev-runtime-D3UnwrKT.js.map +0 -1
- package/themes/java/theme.css +0 -21
package/themes/README.md
CHANGED
|
@@ -25,9 +25,11 @@ Published themes are:
|
|
|
25
25
|
|
|
26
26
|
| Theme | Appearance capability | Intent |
|
|
27
27
|
| --- | --- | --- |
|
|
28
|
-
| `
|
|
29
|
-
| `java` | Light | Desktop control treatment inspired by classic Java interfaces |
|
|
28
|
+
| `capillary` | Light | Bright, compact card treatment with restrained elevation and palette-primary selection |
|
|
30
29
|
| `shiny` | Light | Gloss, depth, and chromed graphical surfaces |
|
|
30
|
+
| `soft` | Light | Soft, rounded treatment |
|
|
31
|
+
| `white` | Light | Airy, rounded treatment |
|
|
32
|
+
| `minimal` | Adaptive (`light`, `dark`, or system) | Restrained platform-oriented treatment |
|
|
31
33
|
|
|
32
34
|
Custom properties are the primary instrument. A theme declares them on `:root`
|
|
33
35
|
inside `@layer theme`, and `color-scheme` is the only ordinary property that
|
|
@@ -78,6 +80,11 @@ Themes still must not `@import`, must not declare `--palette-*` anchors, which
|
|
|
78
80
|
belong to `colors/<name>/colors.css`, and must not restate a value already set
|
|
79
81
|
by `base.css`.
|
|
80
82
|
|
|
83
|
+
Theme chrome that establishes a surface, text, border, or fill must derive from
|
|
84
|
+
the appropriate palette role or a shared UI role. Literal black and white may
|
|
85
|
+
remain in translucent gloss and shadow overlays: those effects are deliberately
|
|
86
|
+
neutral and must not tint the underlying palette-derived surface.
|
|
87
|
+
|
|
81
88
|
`capillaryUiThemeVariableCatalog` is the machine-readable public contract. Its
|
|
82
89
|
fallback chain runs from palette roles through global UI roles and shared
|
|
83
90
|
families, then to optional component-specific roles. A small theme can
|
package/themes/base.css
CHANGED
|
@@ -10,9 +10,15 @@
|
|
|
10
10
|
--palette-contrast-dark: var(--palette-dark);
|
|
11
11
|
--palette-light-clear: color-mix(in srgb, var(--palette-light) 0%, transparent);
|
|
12
12
|
--palette-light-faint: color-mix(in srgb, var(--palette-light) 8%, transparent);
|
|
13
|
-
|
|
14
|
-
--palette-
|
|
13
|
+
/* Semantic status colors; distinct from the neutral tonal ramp below. */
|
|
14
|
+
--palette-status-negative: #b3261e;
|
|
15
|
+
--palette-status-positive: #287a3c;
|
|
16
|
+
--palette-status-neutral: #64748b;
|
|
15
17
|
--palette-primary-500: #2989d8;
|
|
18
|
+
/* 0 removes primary hue from the three muted chrome surfaces; 1 retains
|
|
19
|
+
their calibrated palette tint. Palette files may choose a value in
|
|
20
|
+
this inclusive range without affecting the accent ramp. */
|
|
21
|
+
--palette-primary-surface-saturation: 1;
|
|
16
22
|
--palette-secondary-500: #7137a8;
|
|
17
23
|
--palette-neutral-500: #7892aa;
|
|
18
24
|
|
|
@@ -38,6 +44,20 @@
|
|
|
38
44
|
--palette-primary-light: var(--palette-primary-200);
|
|
39
45
|
--palette-primary-dark: var(--palette-primary-800);
|
|
40
46
|
|
|
47
|
+
/* Muted surface tones, separate from the potentially saturated accent ramp.
|
|
48
|
+
Desaturate the primary, then tint with the light endpoint in sRGB.
|
|
49
|
+
The rational weights/hue offsets preserve Ice blue's historical
|
|
50
|
+
#f5f7f8 / #ebeff3 / #d7dee3 exactly; see colors/README.md. */
|
|
51
|
+
--palette-primary-surface-light: color-mix(in srgb,
|
|
52
|
+
hsl(from var(--palette-primary-500) calc(h - 248 / 35) calc(s * 759 / 2975 * var(--palette-primary-surface-saturation)) l) calc(100% * 17 / 253),
|
|
53
|
+
var(--palette-light));
|
|
54
|
+
--palette-primary-surface-medium: color-mix(in srgb,
|
|
55
|
+
hsl(from var(--palette-primary-500) calc(h + 102 / 35) calc(s * 253 / 700 * var(--palette-primary-surface-saturation)) l) calc(100% * 32 / 253),
|
|
56
|
+
var(--palette-light));
|
|
57
|
+
--palette-primary-surface-dark: color-mix(in srgb,
|
|
58
|
+
hsl(from var(--palette-primary-500) calc(h - 73 / 35) calc(s * 759 / 2975 * var(--palette-primary-surface-saturation)) l) calc(100% * 68 / 253),
|
|
59
|
+
var(--palette-light));
|
|
60
|
+
|
|
41
61
|
--palette-secondary-50: color-mix(in oklch, var(--palette-secondary-500) 8%, var(--palette-secondary-light-mix));
|
|
42
62
|
--palette-secondary-100: color-mix(in oklch, var(--palette-secondary-500) 16%, var(--palette-secondary-light-mix));
|
|
43
63
|
--palette-secondary-200: color-mix(in oklch, var(--palette-secondary-500) 32%, var(--palette-secondary-light-mix));
|
|
@@ -74,6 +94,8 @@
|
|
|
74
94
|
--font-size: 12px;
|
|
75
95
|
--line-height: normal;
|
|
76
96
|
--control-min-height: 2em;
|
|
97
|
+
--control-row-min-height: 0px;
|
|
98
|
+
--control-row-padding-block: .25em;
|
|
77
99
|
--space-xs: 0px;
|
|
78
100
|
--space-sm: 6px;
|
|
79
101
|
--space-md: 1rem;
|
|
@@ -91,9 +113,19 @@
|
|
|
91
113
|
--ui-shadow: none;
|
|
92
114
|
--focus-ring: 0 0 0 1px var(--ui-accent-color-highlight);
|
|
93
115
|
--focus-color: var(--ui-accent-color);
|
|
94
|
-
--
|
|
116
|
+
--negative-color: var(--palette-status-negative, #b3261e);
|
|
117
|
+
--positive-color: var(--palette-status-positive, #287a3c);
|
|
118
|
+
--neutral-status-color: var(--palette-status-neutral, #64748b);
|
|
119
|
+
--error-color: var(--negative-color);
|
|
95
120
|
--error-contrast: var(--palette-contrast-light, #fff);
|
|
96
|
-
|
|
121
|
+
/* Error state needs a lightness and spatial signal as well as a hue. This
|
|
122
|
+
* stays distinguishable when a palette primary is also red. */
|
|
123
|
+
--error-control-border: color-mix(in oklch, var(--error-color) 76%, var(--palette-dark));
|
|
124
|
+
--error-control-underlay: color-mix(in srgb, var(--error-color) 20%, transparent);
|
|
125
|
+
--error-control-shadow: 0 0 0 3px var(--error-control-underlay);
|
|
126
|
+
--error-icon-border: none;
|
|
127
|
+
--error-icon-shadow: 0 1px 2px color-mix(in srgb, var(--palette-dark) 24%, transparent);
|
|
128
|
+
--success-color: var(--positive-color);
|
|
97
129
|
|
|
98
130
|
/* Layout components */
|
|
99
131
|
--panel-background: var(--palette-neutral-50);
|
|
@@ -102,8 +134,20 @@
|
|
|
102
134
|
--panel-shadow: none;
|
|
103
135
|
--panel-radius: var(--radius-md);
|
|
104
136
|
|
|
105
|
-
/*
|
|
137
|
+
/* Floating table-filter surface. It inherits ordinary panel chrome by
|
|
138
|
+
* default, while themes can make this compact elevated surface distinct. */
|
|
139
|
+
--filter-panel-background: var(--panel-background);
|
|
140
|
+
--filter-panel-color: var(--panel-color);
|
|
141
|
+
--filter-panel-border: var(--panel-border);
|
|
142
|
+
--filter-panel-shadow: var(--panel-shadow);
|
|
143
|
+
--filter-panel-radius: var(--panel-radius);
|
|
144
|
+
--filter-panel-padding: 8px;
|
|
145
|
+
--filter-panel-min-width: 180px;
|
|
146
|
+
|
|
147
|
+
/* Explicit surfaces; managed layouts own shared gutters and the perimeter. */
|
|
106
148
|
--island-margin: 1rem;
|
|
149
|
+
--island-gap: 1rem;
|
|
150
|
+
--island-inset: var(--island-gap);
|
|
107
151
|
--island-padding: 0;
|
|
108
152
|
--island-background: var(--panel-background);
|
|
109
153
|
--island-border: var(--panel-border);
|
|
@@ -138,6 +182,13 @@
|
|
|
138
182
|
--section-header-border: var(--header-border);
|
|
139
183
|
--section-header-shadow: var(--header-shadow);
|
|
140
184
|
--section-header-font-size: 1rem;
|
|
185
|
+
--section-header-font-weight: bold;
|
|
186
|
+
--groupbox-section-header-color: var(--section-header-color);
|
|
187
|
+
--groupbox-section-separator: 1px solid var(--ui-border-color);
|
|
188
|
+
--groupbox-column-header-color: var(--ui-color);
|
|
189
|
+
--groupbox-column-separator: 1px solid var(--ui-border-color);
|
|
190
|
+
/* Inner GroupBox content rhythm is deliberately separate from island gutters. */
|
|
191
|
+
--groupbox-content-gap: 2px;
|
|
141
192
|
|
|
142
193
|
--toolbar-background: var(--palette-neutral-100);
|
|
143
194
|
--toolbar-color: var(--palette-neutral-950);
|
|
@@ -150,8 +201,17 @@
|
|
|
150
201
|
--input-color: var(--text-color);
|
|
151
202
|
--input-border: 1px solid #aaa;
|
|
152
203
|
--input-shadow: none;
|
|
204
|
+
/* A missing required value is actionable but not yet a validation error. */
|
|
205
|
+
--required-color: var(--negative-color);
|
|
206
|
+
--required-indicator-background: transparent;
|
|
207
|
+
--required-indicator-color: var(--negative-color);
|
|
153
208
|
--input-background-disabled: var(--ui-medium-bg-color);
|
|
154
209
|
--input-color-disabled: #777;
|
|
210
|
+
/* Read-only values remain readable and focusable; they are not disabled. */
|
|
211
|
+
--input-background-readonly: var(--ui-primary-bg-color);
|
|
212
|
+
--input-color-readonly: var(--input-color);
|
|
213
|
+
--input-border-readonly: var(--input-border);
|
|
214
|
+
--input-shadow-readonly: var(--input-shadow);
|
|
155
215
|
--dropdown-appearance: none;
|
|
156
216
|
--dropdown-padding-inline-end: 1.75em;
|
|
157
217
|
--dropdown-select-background: transparent;
|
|
@@ -160,20 +220,27 @@
|
|
|
160
220
|
--dropdown-underlay-content: "";
|
|
161
221
|
--dropdown-underlay-background: var(--input-background);
|
|
162
222
|
--dropdown-underlay-background-disabled: var(--input-background-disabled);
|
|
223
|
+
--dropdown-underlay-background-readonly: var(--input-background-readonly);
|
|
163
224
|
--dropdown-underlay-border: var(--input-border);
|
|
164
225
|
--dropdown-underlay-border-disabled: var(--ui-input-border-disabled);
|
|
226
|
+
--dropdown-underlay-border-readonly: var(--input-border-readonly);
|
|
165
227
|
--dropdown-underlay-shadow: var(--input-shadow);
|
|
228
|
+
--dropdown-underlay-shadow-readonly: var(--input-shadow-readonly);
|
|
166
229
|
--dropdown-underlay-start-radius: var(--ui-border-radius);
|
|
167
230
|
--dropdown-trigger-content: '\25BE';
|
|
168
231
|
--dropdown-trigger-width: calc(var(--dd-btn-width) - 1px);
|
|
169
232
|
--dropdown-trigger-color: var(--button-color);
|
|
233
|
+
--dropdown-trigger-color-readonly: var(--input-color-readonly);
|
|
170
234
|
--dropdown-trigger-background: var(--button-background);
|
|
171
235
|
--dropdown-trigger-background-hover: var(--button-background-hover);
|
|
172
236
|
--dropdown-trigger-background-disabled: var(--button-background-disabled);
|
|
237
|
+
--dropdown-trigger-background-readonly: var(--input-background-readonly);
|
|
173
238
|
--dropdown-trigger-border: var(--button-border);
|
|
174
239
|
--dropdown-trigger-border-disabled: var(--button-border-disabled);
|
|
240
|
+
--dropdown-trigger-border-readonly: var(--input-border-readonly);
|
|
175
241
|
--dropdown-trigger-end-radius: var(--ui-border-radius);
|
|
176
242
|
--dropdown-trigger-shadow: var(--button-shadow);
|
|
243
|
+
--dropdown-trigger-shadow-readonly: var(--input-shadow-readonly);
|
|
177
244
|
--dropdown-trigger-shadow-hover: var(--button-shadow);
|
|
178
245
|
|
|
179
246
|
/* Action components */
|
|
@@ -192,18 +259,46 @@
|
|
|
192
259
|
--selection-background: var(--palette-primary);
|
|
193
260
|
--selection-color: var(--palette-contrast-light);
|
|
194
261
|
--checkbox-box-background: var(--input-background);
|
|
262
|
+
--checkbox-box-background-readonly: var(--input-background-readonly);
|
|
195
263
|
--checkbox-box-background-checked: var(--selection-background);
|
|
196
264
|
--checkbox-box-border: var(--input-border);
|
|
265
|
+
--checkbox-box-border-readonly: var(--input-border-readonly);
|
|
266
|
+
--checkbox-box-border-checked: var(--checkbox-box-border);
|
|
267
|
+
--checkbox-box-size: 1em;
|
|
268
|
+
--checkbox-box-radius: var(--radius-sm);
|
|
197
269
|
--checkbox-box-shadow: none;
|
|
270
|
+
--checkbox-box-shadow-readonly: var(--input-shadow-readonly);
|
|
198
271
|
--checkbox-box-shadow-checked: var(--checkbox-box-shadow);
|
|
199
272
|
--checkbox-symbol-color: var(--selection-color);
|
|
273
|
+
--checkbox-negative-background: var(--palette-status-negative);
|
|
274
|
+
--checkbox-negative-color: var(--palette-contrast-light);
|
|
275
|
+
--checkbox-negative-border: var(--checkbox-box-border-checked);
|
|
276
|
+
--checkbox-negative-shadow: var(--checkbox-box-shadow-checked);
|
|
277
|
+
--checkbox-positive-background: var(--palette-status-positive);
|
|
278
|
+
--checkbox-positive-color: var(--palette-contrast-light);
|
|
279
|
+
--checkbox-positive-border: var(--checkbox-box-border-checked);
|
|
280
|
+
--checkbox-positive-shadow: var(--checkbox-box-shadow-checked);
|
|
281
|
+
--checkbox-neutral-background: var(--palette-status-neutral);
|
|
282
|
+
--checkbox-neutral-color: var(--palette-contrast-light);
|
|
283
|
+
--checkbox-neutral-border: var(--checkbox-box-border-checked);
|
|
284
|
+
--checkbox-neutral-shadow: var(--checkbox-box-shadow-checked);
|
|
285
|
+
--radio-box-background-checked: var(--checkbox-box-background-checked);
|
|
286
|
+
--radio-box-border-checked: var(--checkbox-box-border-checked);
|
|
287
|
+
--radio-box-shadow-checked: var(--checkbox-box-shadow-checked);
|
|
288
|
+
--radio-symbol-color: var(--checkbox-symbol-color);
|
|
289
|
+
--radio-symbol-size: .4em;
|
|
290
|
+
--radio-group-gap: 0px;
|
|
200
291
|
--checkable-label-color-disabled: #aaa;
|
|
292
|
+
--checkable-label-color-readonly: var(--input-color-readonly);
|
|
201
293
|
--toggle-button-background: var(--button-background);
|
|
294
|
+
--toggle-button-background-readonly: var(--input-background-readonly);
|
|
202
295
|
--toggle-button-background-checked: var(--palette-primary-700);
|
|
203
296
|
--toggle-button-border-checked: var(--button-border);
|
|
297
|
+
--toggle-button-border-readonly: var(--input-border-readonly);
|
|
204
298
|
--toggle-button-selected-inline-overlap: 0;
|
|
205
299
|
--toggle-button-selected-z-index: 0;
|
|
206
300
|
--toggle-button-shadow: none;
|
|
301
|
+
--toggle-button-shadow-readonly: none;
|
|
207
302
|
--toggle-button-shadow-checked: none;
|
|
208
303
|
--toggle-group-shadow: none;
|
|
209
304
|
--toggle-inactive-shared-border-color: var(--palette-neutral-500);
|
|
@@ -280,6 +375,7 @@
|
|
|
280
375
|
--ui-padding: 8px;
|
|
281
376
|
--ui-padding-h: 8px;
|
|
282
377
|
--ui-padding-v: 0px;
|
|
378
|
+
--ui-control-padding: 0 5px;
|
|
283
379
|
--ui-margin: 1px;
|
|
284
380
|
--ui-border-radius: 3px;
|
|
285
381
|
--ui-text-color: var(--ui-color);
|
|
@@ -294,9 +390,9 @@
|
|
|
294
390
|
--ui-input-text-color-disabled: #777;
|
|
295
391
|
--ui-accent-color: var(--ui-select-bg-dark);
|
|
296
392
|
--ui-accent-color-highlight: var(--primary-color-l90);
|
|
297
|
-
--ui-primary-bg-color:
|
|
298
|
-
--ui-medium-bg-color:
|
|
299
|
-
--ui-dark-bg-color:
|
|
393
|
+
--ui-primary-bg-color: var(--palette-primary-surface-light);
|
|
394
|
+
--ui-medium-bg-color: var(--palette-primary-surface-medium);
|
|
395
|
+
--ui-dark-bg-color: var(--palette-primary-surface-dark);
|
|
300
396
|
--ui-dark2-bg-color: var(--palette-neutral-400);
|
|
301
397
|
--text-color: var(--palette-neutral-950);
|
|
302
398
|
--primary-color-l90: var(--palette-primary-200);
|
|
@@ -308,17 +404,17 @@
|
|
|
308
404
|
--input-width: 15em;
|
|
309
405
|
--groupbox-preferred-width: 15rem;
|
|
310
406
|
--button-border-disabled: #777;
|
|
311
|
-
--error-text-color-light:
|
|
312
|
-
--error-text-color-dark:
|
|
313
|
-
--error-border-color:
|
|
314
|
-
--error-bg:
|
|
315
|
-
--error-bg-translucent:
|
|
407
|
+
--error-text-color-light: color-mix(in oklch, var(--negative-color) 24%, var(--palette-light));
|
|
408
|
+
--error-text-color-dark: color-mix(in oklch, var(--negative-color) 58%, var(--palette-dark));
|
|
409
|
+
--error-border-color: var(--negative-color);
|
|
410
|
+
--error-bg: color-mix(in oklch, var(--negative-color) 32%, var(--palette-light));
|
|
411
|
+
--error-bg-translucent: color-mix(in srgb, var(--negative-color) 13%, transparent);
|
|
316
412
|
--error-bg-neutral: #fff;
|
|
317
|
-
--success-text-color-light:
|
|
318
|
-
--success-text-color-dark:
|
|
319
|
-
--success-border-color:
|
|
320
|
-
--success-bg:
|
|
321
|
-
--success-bg-translucent:
|
|
413
|
+
--success-text-color-light: color-mix(in oklch, var(--positive-color) 24%, var(--palette-light));
|
|
414
|
+
--success-text-color-dark: color-mix(in oklch, var(--positive-color) 58%, var(--palette-dark));
|
|
415
|
+
--success-border-color: var(--positive-color);
|
|
416
|
+
--success-bg: color-mix(in oklch, var(--positive-color) 32%, var(--palette-light));
|
|
417
|
+
--success-bg-translucent: color-mix(in srgb, var(--positive-color) 13%, transparent);
|
|
322
418
|
--success-bg-neutral: #fff;
|
|
323
419
|
--icon-filter-hue: 205deg;
|
|
324
420
|
--icon-filter: brightness(1) opacity(.7) hue-rotate(var(--icon-filter-hue)) saturate(.75);
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
@charset "utf-8";
|
|
2
|
+
|
|
3
|
+
/* The restrained, card-oriented Capillary treatment. */
|
|
4
|
+
@layer theme {
|
|
5
|
+
:root {
|
|
6
|
+
color-scheme: only light;
|
|
7
|
+
--ui-control-padding: 6px 5px;
|
|
8
|
+
--control-row-padding-block: 0em;
|
|
9
|
+
/* Reserve one row for the roomiest native temporal body without changing
|
|
10
|
+
* the theme's painted input, button, checkbox or radio geometry. */
|
|
11
|
+
--control-row-min-height: 2.75em;
|
|
12
|
+
--font-family: Arial, Helvetica, sans-serif;
|
|
13
|
+
--radius-sm: 6px;
|
|
14
|
+
--radius-md: 10px;
|
|
15
|
+
--radius-lg: 18px;
|
|
16
|
+
--ui-border-radius: 9px;
|
|
17
|
+
--application-background: color-mix(in oklch, var(--palette-neutral-100) 52%, var(--palette-light));
|
|
18
|
+
--ui-background: color-mix(in oklch, var(--palette-neutral-100) 34%, var(--palette-light));
|
|
19
|
+
--ui-color: var(--palette-neutral-900);
|
|
20
|
+
--ui-border: 1px solid color-mix(in srgb, var(--palette-dark) 16%, var(--palette-light));
|
|
21
|
+
--ui-shadow: 0 0.4rem 1.25rem color-mix(in srgb, var(--palette-dark) 12%, transparent);
|
|
22
|
+
--focus-ring: 0 0 0 2px color-mix(in oklch, var(--palette-primary) 36%, var(--palette-light));
|
|
23
|
+
--focus-color: var(--palette-primary);
|
|
24
|
+
--panel-background: linear-gradient(to bottom, #fafafa, #eee);
|
|
25
|
+
--panel-color: var(--ui-color);
|
|
26
|
+
--panel-border: 1px solid color-mix(in srgb, var(--palette-dark) 15%, var(--palette-light));
|
|
27
|
+
--panel-shadow:
|
|
28
|
+
inset 0 1px 0 color-mix(in srgb, var(--palette-light) 96%, transparent),
|
|
29
|
+
inset 0 -1px 0 color-mix(in srgb, var(--palette-dark) 8%, transparent),
|
|
30
|
+
0 0.125rem 0.4rem color-mix(in srgb, var(--palette-dark) 10%, transparent);
|
|
31
|
+
--panel-radius: var(--radius-lg);
|
|
32
|
+
--filter-panel-radius: var(--radius-md);
|
|
33
|
+
--filter-panel-padding: 0.65rem 0.75rem;
|
|
34
|
+
--filter-panel-shadow:
|
|
35
|
+
inset 0 1px 0 color-mix(in srgb, var(--palette-light) 96%, transparent),
|
|
36
|
+
inset 0 -1px 0 color-mix(in srgb, var(--palette-dark) 8%, transparent),
|
|
37
|
+
0 0.3rem 0.85rem color-mix(in srgb, var(--palette-dark) 16%, transparent);
|
|
38
|
+
--island-padding: .5rem;
|
|
39
|
+
--header-background: transparent;
|
|
40
|
+
--header-color: var(--palette-primary-500);
|
|
41
|
+
--section-header-background: transparent;
|
|
42
|
+
--section-header-color: var(--palette-primary-500);
|
|
43
|
+
--section-header-font-size: 1.2rem;
|
|
44
|
+
--section-header-font-weight: 700;
|
|
45
|
+
|
|
46
|
+
--groupbox-section-font-size: 1.05rem;
|
|
47
|
+
--groupbox-section-header-color: var(--palette-primary-500);
|
|
48
|
+
--groupbox-section-separator: 0 solid transparent;
|
|
49
|
+
--groupbox-column-separator: 1px solid color-mix(in srgb, var(--palette-dark) 13%, var(--palette-light));
|
|
50
|
+
--groupbox-content-gap: 0rem;
|
|
51
|
+
|
|
52
|
+
--toolbar-background: unset;
|
|
53
|
+
--toolbar-color: var(--ui-color);
|
|
54
|
+
--toolbar-border: unset;
|
|
55
|
+
--toolbar-shadow: unset;
|
|
56
|
+
|
|
57
|
+
--input-background: #fefefe;
|
|
58
|
+
--input-color: var(--ui-color);
|
|
59
|
+
--input-border: 1px solid color-mix(in srgb, var(--palette-dark) 18%, var(--palette-light));
|
|
60
|
+
--input-shadow: inset 0 1px 1px color-mix(in srgb, var(--palette-dark) 8%, transparent), 0 1px 2px color-mix(in srgb, var(--palette-dark) 7%, transparent);
|
|
61
|
+
--input-background-disabled: var(--palette-neutral-100);
|
|
62
|
+
--input-color-disabled: var(--palette-neutral-500);
|
|
63
|
+
/* Keep the dropdown chevron on the input surface rather than making it a
|
|
64
|
+
* second, button-like segment. */
|
|
65
|
+
--dropdown-trigger-width: 1.75em;
|
|
66
|
+
--dropdown-trigger-color: color-mix(in srgb, var(--palette-dark) 58%, var(--palette-light));
|
|
67
|
+
--dropdown-trigger-background: transparent;
|
|
68
|
+
--dropdown-trigger-background-hover: transparent;
|
|
69
|
+
--dropdown-trigger-background-disabled: transparent;
|
|
70
|
+
--dropdown-trigger-border: 0 solid transparent;
|
|
71
|
+
--dropdown-trigger-border-disabled: 0 solid transparent;
|
|
72
|
+
--dropdown-trigger-shadow: none;
|
|
73
|
+
--dropdown-trigger-shadow-hover: none;
|
|
74
|
+
--button-background: linear-gradient(to bottom, var(--palette-light), color-mix(in srgb, var(--palette-dark) 5%, var(--palette-light)));
|
|
75
|
+
--button-background-hover: linear-gradient(to bottom, var(--palette-light), color-mix(in srgb, var(--palette-dark) 9%, var(--palette-light)));
|
|
76
|
+
--capillary-active-background: radial-gradient(120% 85% at 40% 5%, #fff7, #fff0 55%), linear-gradient(to bottom, var(--palette-primary-700), var(--palette-primary) 62%, var(--palette-primary-400));
|
|
77
|
+
--capillary-active-border: 1px solid color-mix(in srgb, var(--palette-primary-700) 72%, var(--palette-dark));
|
|
78
|
+
--capillary-active-shadow: inset 0 1px 0 #fff4, inset 0 -1px 0 color-mix(in srgb, var(--palette-primary-700) 38%, transparent), 0 1px 2px color-mix(in srgb, var(--palette-dark) 14%, transparent);
|
|
79
|
+
--button-background-active: var(--capillary-active-background);
|
|
80
|
+
--button-background-disabled: var(--palette-neutral-100);
|
|
81
|
+
--button-color: var(--ui-color);
|
|
82
|
+
--button-border: 1px solid color-mix(in srgb, var(--palette-dark) 18%, var(--palette-light));
|
|
83
|
+
--button-border-disabled: 1px solid color-mix(in srgb, var(--palette-dark) 9%, var(--palette-light));
|
|
84
|
+
--button-shadow: 0 1px 2px color-mix(in srgb, var(--palette-dark) 12%, transparent);
|
|
85
|
+
--button-shadow-active: var(--capillary-active-shadow);
|
|
86
|
+
--checkbox-box-background: var(--palette-light);
|
|
87
|
+
--checkbox-box-background-checked: var(--capillary-active-background);
|
|
88
|
+
--checkbox-box-border-checked: var(--palette-primary-500);
|
|
89
|
+
--checkbox-box-radius: 3px;
|
|
90
|
+
--checkbox-box-size: 1rem;
|
|
91
|
+
--checkbox-box-shadow: var(--input-shadow);
|
|
92
|
+
--checkbox-box-shadow-checked: var(--capillary-active-shadow);
|
|
93
|
+
--checkbox-negative-background: radial-gradient(120% 85% at 40% 5%, #fff6, #fff0 55%), linear-gradient(to bottom, color-mix(in srgb, var(--palette-status-negative) 84%, var(--palette-dark)), var(--palette-status-negative));
|
|
94
|
+
--checkbox-negative-border: 1px solid color-mix(in srgb, var(--palette-status-negative) 72%, var(--palette-dark));
|
|
95
|
+
--checkbox-negative-shadow: inset 0 1px 0 #fff4, inset 0 -1px 0 color-mix(in srgb, var(--palette-status-negative) 38%, transparent), 0 1px 2px color-mix(in srgb, var(--palette-dark) 14%, transparent);
|
|
96
|
+
--checkbox-positive-background: radial-gradient(120% 85% at 40% 5%, #fff6, #fff0 55%), linear-gradient(to bottom, color-mix(in srgb, var(--palette-status-positive) 84%, var(--palette-dark)), var(--palette-status-positive));
|
|
97
|
+
--checkbox-positive-border: 1px solid color-mix(in srgb, var(--palette-status-positive) 72%, var(--palette-dark));
|
|
98
|
+
--checkbox-positive-shadow: inset 0 1px 0 #fff4, inset 0 -1px 0 color-mix(in srgb, var(--palette-status-positive) 38%, transparent), 0 1px 2px color-mix(in srgb, var(--palette-dark) 14%, transparent);
|
|
99
|
+
--checkbox-neutral-background: radial-gradient(120% 85% at 40% 5%, #fff6, #fff0 55%), linear-gradient(to bottom, color-mix(in srgb, var(--palette-status-neutral) 84%, var(--palette-dark)), var(--palette-status-neutral));
|
|
100
|
+
--checkbox-neutral-border: 1px solid color-mix(in srgb, var(--palette-status-neutral) 72%, var(--palette-dark));
|
|
101
|
+
--checkbox-neutral-shadow: inset 0 1px 0 #fff4, inset 0 -1px 0 color-mix(in srgb, var(--palette-status-neutral) 38%, transparent), 0 1px 2px color-mix(in srgb, var(--palette-dark) 14%, transparent);
|
|
102
|
+
--radio-box-background-checked: var(--checkbox-box-background);
|
|
103
|
+
--radio-box-border-checked: 1px solid var(--palette-primary);
|
|
104
|
+
--radio-box-shadow-checked: var(--checkbox-box-shadow);
|
|
105
|
+
--radio-symbol-color: var(--palette-primary);
|
|
106
|
+
--radio-symbol-size: 0.5em;
|
|
107
|
+
|
|
108
|
+
--toggle-button-background-checked: var(--capillary-active-background);
|
|
109
|
+
--toggle-button-border-checked: var(--palette-primary-50);
|
|
110
|
+
--toggle-button-selected-inline-overlap: -1px;
|
|
111
|
+
--toggle-button-selected-z-index: 1;
|
|
112
|
+
--toggle-button-shadow-checked: var(--capillary-active-shadow);
|
|
113
|
+
--toggle-group-shadow: var(--button-shadow);
|
|
114
|
+
--toggle-inactive-shared-border-color: transparent;
|
|
115
|
+
--toggle-inactive-separator-background: #ddd;
|
|
116
|
+
--toggle-inactive-separator-block-inset: 0.35rem;
|
|
117
|
+
|
|
118
|
+
--tabline-background: transparent;
|
|
119
|
+
--tab-active-background: var(--palette-light);
|
|
120
|
+
--tab-button-background: color-mix(in oklch, var(--palette-light) 78%, var(--ui-primary-bg-color));
|
|
121
|
+
--tab-button-background-active: var(--palette-light);
|
|
122
|
+
--tab-button-shadow: none;
|
|
123
|
+
--tab-button-shadow-active: 0 -1px 0 var(--palette-primary), var(--button-shadow);
|
|
124
|
+
--table-header-background: color-mix(in oklch, var(--palette-light) 74%, var(--ui-primary-bg-color));
|
|
125
|
+
--table-header-color: var(--ui-color);
|
|
126
|
+
--table-row-background: var(--palette-light);
|
|
127
|
+
--table-row-alt-background: color-mix(in oklch, var(--palette-light) 78%, var(--ui-primary-bg-color));
|
|
128
|
+
--row-hover-background: color-mix(in oklch, var(--palette-primary-100) 45%, var(--palette-light));
|
|
129
|
+
--navigation-bar-background: unset;
|
|
130
|
+
--navigation-bar-border: unset;
|
|
131
|
+
--navigation-bar-shadow: unset;
|
|
132
|
+
--navigation-link-color: var(--ui-color);
|
|
133
|
+
--navigation-link-color-hover: var(--palette-primary-700);
|
|
134
|
+
--navigation-link-color-active: var(--palette-contrast-light);
|
|
135
|
+
--navigation-link-color-current: var(--palette-contrast-light);
|
|
136
|
+
--navigation-link-background-hover: color-mix(in oklch, var(--palette-primary-100) 54%, var(--palette-light));
|
|
137
|
+
--navigation-link-background-active: var(--palette-primary);
|
|
138
|
+
--navigation-link-background-current: var(--palette-primary);
|
|
139
|
+
--progress-track-background: color-mix(in oklch, var(--palette-light) 58%, var(--ui-dark-bg-color));
|
|
140
|
+
--progress-track-color: var(--ui-color);
|
|
141
|
+
--progress-track-shadow: inset 0 1px 2px color-mix(in oklch, var(--palette-dark) 12%, transparent);
|
|
142
|
+
--progress-value-background: linear-gradient(to bottom, var(--palette-primary-400), var(--palette-primary));
|
|
143
|
+
--progress-value-shadow: inset 0 1px 1px color-mix(in oklch, var(--palette-light) 35%, transparent);
|
|
144
|
+
--colored-shadow:
|
|
145
|
+
inset 0 1px 0 color-mix(in srgb, var(--palette-light) 52%, transparent),
|
|
146
|
+
inset 0 -1px 0 color-mix(in srgb, var(--c1, var(--colored-dark)) 42%, transparent),
|
|
147
|
+
0 0.125rem 0.3rem color-mix(in srgb, var(--palette-dark) 16%, transparent);
|
|
148
|
+
--block-graph-block-border: 1px solid color-mix(in srgb,
|
|
149
|
+
var(--c1, var(--colored-dark)) 68%, var(--palette-light));
|
|
150
|
+
--block-graph-block-radius: var(--radius-sm);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
cap-button > button[aria-pressed="true"] {
|
|
155
|
+
color: var(--palette-contrast-light);
|
|
156
|
+
background: var(--button-background-active);
|
|
157
|
+
border-color: var(--palette-primary);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
cap-button > button:active:not(:disabled, [aria-disabled="true"]) {
|
|
161
|
+
color: var(--palette-contrast-light);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* The shared select shell normally divides the underlay and trigger. Capillary
|
|
165
|
+
* uses one continuous input surface; the chevron is only an overlay. */
|
|
166
|
+
cap-dropdown > cap-selectshell::after {
|
|
167
|
+
border-radius: var(--ui-border-radius);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Section GroupBoxes form the first-level card hierarchy. Nested control
|
|
171
|
+
* GroupBoxes stay flat so their separators continue to organize the card body. */
|
|
172
|
+
cap-groupbox.cap-groupbox-section:not(cap-groupbox cap-groupbox) {
|
|
173
|
+
padding: 0.75rem 1rem 0;
|
|
174
|
+
border: var(--panel-border);
|
|
175
|
+
border-radius: var(--radius-lg);
|
|
176
|
+
background: var(--panel-background);
|
|
177
|
+
box-shadow: var(--panel-shadow);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
:root {
|
|
182
|
+
--application-background:
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
* Fold 1:
|
|
187
|
+
* tall fold rising from lower-left toward upper-middle
|
|
188
|
+
*/
|
|
189
|
+
radial-gradient(
|
|
190
|
+
130% 185% at 145% 118%,
|
|
191
|
+
rgb(255 255 255 / 0.00) 0%,
|
|
192
|
+
rgb(255 255 255 / 0.02) 18%,
|
|
193
|
+
rgb(255 255 255 / 0.05) 32%,
|
|
194
|
+
rgb(255 255 255 / 0.09) 44%,
|
|
195
|
+
rgb(255 255 255 / 0.14) 52%,
|
|
196
|
+
rgb(255 255 255 / 0.20) calc(58% - 2px),
|
|
197
|
+
rgb(255 255 255 / 0.96) calc(58% - 1px),
|
|
198
|
+
rgb(255 255 255 / 0.99) 58%,
|
|
199
|
+
rgb(255 255 255 / 0.00) calc(58% + 2px)
|
|
200
|
+
),
|
|
201
|
+
|
|
202
|
+
radial-gradient(
|
|
203
|
+
160% 115% at 95% 118%,
|
|
204
|
+
rgb(255 255 255 / 0.00) 0%,
|
|
205
|
+
rgb(255 255 255 / 0.02) 18%,
|
|
206
|
+
rgb(255 255 255 / 0.05) 32%,
|
|
207
|
+
rgb(255 255 255 / 0.09) 44%,
|
|
208
|
+
rgb(255 255 255 / 0.14) 52%,
|
|
209
|
+
rgb(255 255 255 / 0.20) calc(58% - 2px),
|
|
210
|
+
rgb(255 255 255 / 0.96) calc(58% - 1px),
|
|
211
|
+
rgb(255 255 255 / 0.99) 58%,
|
|
212
|
+
rgb(255 255 255 / 0.00) calc(58% + 2px)
|
|
213
|
+
),
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
/*
|
|
217
|
+
* Fold 2:
|
|
218
|
+
* broad sweep across the lower-middle
|
|
219
|
+
*/
|
|
220
|
+
radial-gradient(
|
|
221
|
+
130% 210% at -48% 82%,
|
|
222
|
+
rgb(255 255 255 / 0.00) 0%,
|
|
223
|
+
rgb(255 255 255 / 0.02) 24%,
|
|
224
|
+
rgb(255 255 255 / 0.05) 40%,
|
|
225
|
+
rgb(255 255 255 / 0.09) 52%,
|
|
226
|
+
rgb(255 255 255 / 0.14) 60%,
|
|
227
|
+
rgb(255 255 255 / 0.20) calc(66% - 2px),
|
|
228
|
+
rgb(255 255 255 / 0.82) calc(66% - 1px),
|
|
229
|
+
rgb(255 255 255 / 0.88) 66%,
|
|
230
|
+
rgb(255 255 255 / 0.00) calc(66% + 2px)
|
|
231
|
+
),
|
|
232
|
+
|
|
233
|
+
/*
|
|
234
|
+
* Fold 3:
|
|
235
|
+
* subtle top-right fold
|
|
236
|
+
*/
|
|
237
|
+
radial-gradient(
|
|
238
|
+
125% 155% at 138% -28%,
|
|
239
|
+
rgb(255 255 255 / 0.00) 0%,
|
|
240
|
+
rgb(255 255 255 / 0.01) 24%,
|
|
241
|
+
rgb(255 255 255 / 0.03) 38%,
|
|
242
|
+
rgb(255 255 255 / 0.07) 48%,
|
|
243
|
+
rgb(255 255 255 / 0.12) 54%,
|
|
244
|
+
rgb(255 255 255 / 0.20) calc(57% - 2px),
|
|
245
|
+
rgb(255 255 255 / 0.55) calc(57% - 1px),
|
|
246
|
+
rgb(255 255 255 / 0.62) 57%,
|
|
247
|
+
rgb(255 255 255 / 0.00) calc(57% + 2px)
|
|
248
|
+
),
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
radial-gradient(
|
|
252
|
+
125% 155% at 0% -25%,
|
|
253
|
+
rgb(255 255 255 / 0.00) 0%,
|
|
254
|
+
rgb(255 255 255 / 0.01) 24%,
|
|
255
|
+
rgb(255 255 255 / 0.03) 38%,
|
|
256
|
+
rgb(255 255 255 / 0.07) 48%,
|
|
257
|
+
rgb(255 255 255 / 0.12) 54%,
|
|
258
|
+
rgb(255 255 255 / 0.20) calc(57% - 2px),
|
|
259
|
+
rgb(255 255 255 / 0.55) calc(57% - 1px),
|
|
260
|
+
rgb(255 255 255 / 0.62) 57%,
|
|
261
|
+
rgb(255 255 255 / 0.00) calc(57% + 2px)
|
|
262
|
+
),
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* very subtle overall lighting
|
|
266
|
+
*/
|
|
267
|
+
linear-gradient(
|
|
268
|
+
135deg,
|
|
269
|
+
rgb(255 255 255 / 0.06) 0%,
|
|
270
|
+
transparent 42%,
|
|
271
|
+
rgb(0 0 0 / 0.025) 100%
|
|
272
|
+
),
|
|
273
|
+
|
|
274
|
+
#cfcfcf;
|
|
275
|
+
|
|
276
|
+
background-attachment: local;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
html {
|
|
280
|
+
min-height: 100vh;
|
|
281
|
+
height: 100%;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
body {
|
|
285
|
+
background: var(--application-background) no-repeat;
|
|
286
|
+
min-height: 100vh;
|
|
287
|
+
height: 100%;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
cap-app {
|
|
291
|
+
background: none;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
cap-listview,
|
|
295
|
+
cap-treeview,
|
|
296
|
+
cap-datatable {
|
|
297
|
+
border: var(--input-border);
|
|
298
|
+
box-shadow: var(--input-shadow);
|
|
299
|
+
border-radius: var(--ui-border-radius);
|
|
300
|
+
}
|