@zeyos/zx 5.0.0 → 5.2.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 +164 -0
- package/README.md +2 -1
- package/dist/types/components/account-menu/account-menu.d.ts +8 -0
- package/dist/types/components/activity-list/activity-list.d.ts +9 -1
- package/dist/types/components/app-icon/app-icon.d.ts +14 -2
- package/dist/types/components/app-sidebar/app-sidebar.d.ts +288 -14
- package/dist/types/components/calendar/calendar.d.ts +67 -5
- package/dist/types/components/card-view/card-view.d.ts +7 -4
- package/dist/types/components/card-view/record-card.d.ts +11 -0
- package/dist/types/components/context-menu/context-menu.d.ts +6 -2
- package/dist/types/components/data-filter/data-filter.d.ts +4 -4
- package/dist/types/components/dropdown/dropdown.d.ts +22 -7
- package/dist/types/components/field/field.d.ts +30 -0
- package/dist/types/components/fieldset/external-adapter.d.ts +83 -0
- package/dist/types/components/fieldset/fieldset.d.ts +7 -0
- package/dist/types/components/file-list/file-list.d.ts +35 -3
- package/dist/types/components/filter/filter.d.ts +127 -3
- package/dist/types/components/filter-panel/filter-panel.d.ts +36 -7
- package/dist/types/components/launcher/launcher.d.ts +8 -0
- package/dist/types/components/list-toolbar/list-toolbar.d.ts +15 -6
- package/dist/types/components/menu-button/menu-button.d.ts +6 -0
- package/dist/types/components/message/message.d.ts +14 -1
- package/dist/types/components/modal/modal.d.ts +30 -0
- package/dist/types/components/module-bar/module-bar.d.ts +395 -0
- package/dist/types/components/pagination/pagination.d.ts +17 -3
- package/dist/types/components/select/select.d.ts +6 -0
- package/dist/types/components/sheet/sheet.d.ts +15 -0
- package/dist/types/components/table/table.d.ts +265 -17
- package/dist/types/components/view/record-view.d.ts +59 -2
- package/dist/types/components/view-settings/view-settings.d.ts +879 -0
- package/dist/types/components/workspace-switcher/workspace-switcher.d.ts +327 -0
- package/dist/types/core/component.d.ts +12 -2
- package/dist/types/core/i18n.d.ts +27 -3
- package/dist/types/core/keyboard.d.ts +98 -1
- package/dist/types/core/messages.d.ts +382 -0
- package/dist/types/core/overlay-host.d.ts +28 -1
- package/dist/types/core/overlay-stack.d.ts +260 -0
- package/dist/types/index.d.ts +5 -2
- package/dist/types/internal/app-rail.d.ts +38 -0
- package/dist/types/internal/menu-items.d.ts +71 -3
- package/dist/types/zeyos/index.d.ts +1 -0
- package/dist/types/zeyos/launcher.d.ts +9 -0
- package/dist/types/zeyos/module-bar.d.ts +176 -0
- package/dist/types/zeyos/query.d.ts +31 -5
- package/dist/types/zeyos/table.d.ts +245 -8
- package/dist/types/zeyos/view.d.ts +16 -2
- package/dist/zx-zeyos.esm.js +4422 -430
- package/dist/zx-zeyos.esm.min.js +5 -5
- package/dist/zx.css +1417 -134
- package/dist/zx.esm.js +6986 -830
- package/dist/zx.esm.min.js +8 -8
- package/dist/zx.global.js +6986 -830
- package/dist/zx.global.min.js +8 -8
- package/dist/zx.min.css +1 -1
- package/docs/api.json +794 -17
- package/docs/llms.md +503 -63
- package/docs/llms.txt +6 -2
- package/package.json +1 -1
- package/src/components/account-menu/account-menu.js +12 -0
- package/src/components/activity-list/activity-list.js +27 -1
- package/src/components/app-icon/app-icon.css +13 -2
- package/src/components/app-icon/app-icon.js +11 -1
- package/src/components/app-rail/app-rail.css +19 -0
- package/src/components/app-sidebar/app-sidebar.css +204 -3
- package/src/components/app-sidebar/app-sidebar.js +646 -40
- package/src/components/breadcrumb/breadcrumb.css +1 -1
- package/src/components/calendar/calendar.css +1 -1
- package/src/components/calendar/calendar.js +26 -52
- package/src/components/card/card.css +2 -2
- package/src/components/card-view/card-view.css +5 -5
- package/src/components/card-view/card-view.js +13 -9
- package/src/components/card-view/record-card.js +14 -3
- package/src/components/code-editor/code-editor.css +1 -1
- package/src/components/code-editor/field-adapter.js +9 -2
- package/src/components/context-menu/context-menu.js +8 -2
- package/src/components/copy/copy-input.css +1 -1
- package/src/components/data-filter/data-filter.js +2 -2
- package/src/components/date-picker/time-picker.css +2 -2
- package/src/components/dock/dock.css +5 -4
- package/src/components/dropdown/dropdown.js +157 -72
- package/src/components/field/field.js +33 -3
- package/src/components/fieldset/external-adapter.js +363 -0
- package/src/components/fieldset/fieldset.js +10 -59
- package/src/components/file-list/file-list.js +144 -21
- package/src/components/filter/filter.css +86 -2
- package/src/components/filter/filter.js +300 -8
- package/src/components/filter-panel/filter-panel.js +149 -32
- package/src/components/finder/finder.css +1 -1
- package/src/components/kanban-view/kanban-view.css +3 -3
- package/src/components/kanban-view/kanban-view.js +5 -2
- package/src/components/launcher/launcher.css +1 -1
- package/src/components/launcher/launcher.js +29 -3
- package/src/components/list-toolbar/list-toolbar.js +39 -13
- package/src/components/master-panel/master-panel.js +0 -1
- package/src/components/menu-button/menu-button.css +63 -0
- package/src/components/menu-button/menu-button.js +97 -11
- package/src/components/message/message.js +60 -20
- package/src/components/modal/modal.css +1 -1
- package/src/components/modal/modal.js +66 -13
- package/src/components/module-bar/module-bar.css +486 -0
- package/src/components/module-bar/module-bar.js +1074 -0
- package/src/components/multi-value-editor/multi-value-editor.css +1 -1
- package/src/components/number-field/field-adapter.js +2 -1
- package/src/components/pagination/pagination.css +5 -5
- package/src/components/pagination/pagination.js +20 -4
- package/src/components/panel/panel.css +3 -2
- package/src/components/questionnaire/questionnaire.css +4 -4
- package/src/components/rating/field-adapter.js +2 -1
- package/src/components/rating/rating.css +1 -1
- package/src/components/search/search.css +4 -1
- package/src/components/select/select.js +9 -0
- package/src/components/sheet/sheet.css +1 -1
- package/src/components/sheet/sheet.js +74 -32
- package/src/components/slider/field-adapter.js +6 -1
- package/src/components/slider/slider.css +2 -2
- package/src/components/split-view/split-view.css +1 -1
- package/src/components/stat-tile/stat-tile.css +1 -1
- package/src/components/stepper/stepper.css +1 -1
- package/src/components/tabbox/tabbox.css +9 -5
- package/src/components/table/table.css +86 -11
- package/src/components/table/table.js +628 -57
- package/src/components/tag-picker/field-adapter.js +2 -1
- package/src/components/tooltip/tooltip.js +35 -17
- package/src/components/tree/tree.css +1 -1
- package/src/components/view/record-view.css +1 -1
- package/src/components/view/record-view.js +178 -18
- package/src/components/view-settings/view-settings.css +285 -0
- package/src/components/view-settings/view-settings.js +1830 -0
- package/src/components/workspace-switcher/workspace-switcher.css +188 -0
- package/src/components/workspace-switcher/workspace-switcher.js +463 -0
- package/src/core/component.js +88 -17
- package/src/core/fontawesome.js +5 -1
- package/src/core/i18n.js +47 -4
- package/src/core/icons.js +12 -2
- package/src/core/keyboard.js +206 -11
- package/src/core/messages.js +427 -0
- package/src/core/overlay-host.js +64 -9
- package/src/core/overlay-stack.js +487 -0
- package/src/core/position.js +22 -3
- package/src/index.js +5 -2
- package/src/internal/app-rail.js +134 -53
- package/src/internal/menu-items.js +61 -3
- package/src/zeyos/form.js +5 -3
- package/src/zeyos/index.js +3 -0
- package/src/zeyos/launcher.js +8 -3
- package/src/zeyos/module-bar.js +181 -0
- package/src/zeyos/query.js +44 -13
- package/src/zeyos/table.js +220 -80
- package/src/zeyos/view.js +43 -93
- package/styles/base.css +16 -1
- package/styles/print.css +1 -1
- package/styles/tokens/dark.css +4 -0
- package/styles/tokens/semantic.css +56 -28
- package/styles/zx.css +3 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ModuleBar — the module level of an application, one tile per module.
|
|
3
|
+
*
|
|
4
|
+
* The bar is a target per module, and inside each target a tile carrying the module's identity:
|
|
5
|
+
*
|
|
6
|
+
* - **The size follows the control height.** A target is one control plus a space-2 margin, and a
|
|
7
|
+
* tile one control less a space-1 inset, so a theme that changes `--zx-control-height` resizes
|
|
8
|
+
* the bar with every other control instead of leaving a fixed strip beside it.
|
|
9
|
+
* - **Identity is the tile; where you are is the target.** The tile keeps its colour in every
|
|
10
|
+
* state. The current module puts the neutral current fill behind it, the same fill a current row
|
|
11
|
+
* takes in the navigation, never a coloured ring or an edge bar.
|
|
12
|
+
* - **Colour arrives as data.** A tone resolves through the theme's categorical palette; a host
|
|
13
|
+
* colour arrives as `--zx-module-bar-color` on the tile, and the stylesheet only mixes it. The
|
|
14
|
+
* appearance is an attribute of the tile, not of the bar, because the "All modules" catalogue
|
|
15
|
+
* is portaled out of the bar and draws the same tiles.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
.zx-module-bar {
|
|
19
|
+
--zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-2));
|
|
20
|
+
--zx-module-bar-tile: calc(var(--zx-control-height) - var(--zx-space-1));
|
|
21
|
+
--zx-module-bar-gap: var(--zx-space-1);
|
|
22
|
+
--zx-module-bar-pad: var(--zx-space-2);
|
|
23
|
+
--zx-module-bar-radius: var(--zx-radius-lg);
|
|
24
|
+
/* The bar with names beside its tiles: wide enough for "Knowledge base" and a count. */
|
|
25
|
+
--zx-module-bar-column: 12rem;
|
|
26
|
+
display: flex;
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
min-inline-size: 0;
|
|
29
|
+
min-block-size: 0;
|
|
30
|
+
background: var(--zx-color-bg-chrome);
|
|
31
|
+
color: var(--zx-color-text);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.zx-module-bar[data-orientation="vertical"] {
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
inline-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-module-bar-pad));
|
|
37
|
+
block-size: 100%;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Names beside the tiles make the bar a navigation column of its own: a row per module, the count
|
|
41
|
+
at the end of the row, as wide as a sidebar needs for a two-word module name. */
|
|
42
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] {
|
|
43
|
+
inline-size: var(--zx-module-bar-column);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] > .zx-module-bar__list { align-items: stretch; }
|
|
47
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] > .zx-module-bar__header { align-items: stretch; }
|
|
48
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] > .zx-module-bar__footer { align-items: stretch; }
|
|
49
|
+
|
|
50
|
+
.zx-module-bar[data-labels="beside"] .zx-module-bar__item {
|
|
51
|
+
grid-template-columns: var(--zx-module-bar-tile) minmax(0, 1fr) auto;
|
|
52
|
+
place-content: normal;
|
|
53
|
+
align-items: center;
|
|
54
|
+
justify-items: start;
|
|
55
|
+
column-gap: var(--zx-space-2);
|
|
56
|
+
inline-size: 100%;
|
|
57
|
+
block-size: auto;
|
|
58
|
+
min-block-size: var(--zx-module-bar-target);
|
|
59
|
+
padding: var(--zx-space-1) var(--zx-space-2);
|
|
60
|
+
color: var(--zx-color-text);
|
|
61
|
+
font-size: var(--zx-text-md);
|
|
62
|
+
font-weight: 500;
|
|
63
|
+
line-height: 1.3;
|
|
64
|
+
text-align: start;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.zx-module-bar[data-labels="beside"] .zx-module-bar__label { text-align: start; }
|
|
68
|
+
|
|
69
|
+
.zx-module-bar[data-labels="beside"] .zx-module-bar__badge {
|
|
70
|
+
position: static;
|
|
71
|
+
justify-self: end;
|
|
72
|
+
box-shadow: none;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Printed names need a wider target: two short lines of extra-small text under the tile. */
|
|
76
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="below"] {
|
|
77
|
+
--zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-8));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.zx-module-bar[data-orientation="horizontal"] {
|
|
81
|
+
flex-direction: row;
|
|
82
|
+
align-items: center;
|
|
83
|
+
inline-size: 100%;
|
|
84
|
+
block-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-space-1));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* A coarse pointer keeps a 40px target whatever the theme's control height says. */
|
|
88
|
+
@media (pointer: coarse) {
|
|
89
|
+
.zx-module-bar { --zx-module-bar-target: max(40px, calc(var(--zx-control-height) + var(--zx-space-2))); }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.zx-module-bar__header,
|
|
93
|
+
.zx-module-bar__footer {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex: none;
|
|
96
|
+
align-items: center;
|
|
97
|
+
justify-content: center;
|
|
98
|
+
gap: var(--zx-module-bar-gap);
|
|
99
|
+
padding: var(--zx-module-bar-pad);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.zx-module-bar[data-orientation="vertical"] > .zx-module-bar__header,
|
|
103
|
+
.zx-module-bar[data-orientation="vertical"] > .zx-module-bar__footer { flex-direction: column; }
|
|
104
|
+
.zx-module-bar[data-orientation="horizontal"] > .zx-module-bar__header,
|
|
105
|
+
.zx-module-bar[data-orientation="horizontal"] > .zx-module-bar__footer { padding-block: 0; }
|
|
106
|
+
.zx-module-bar__header[hidden],
|
|
107
|
+
.zx-module-bar__footer[hidden] { display: none; }
|
|
108
|
+
|
|
109
|
+
/* The list takes the space between header and footer and never asks for more: what does not fit
|
|
110
|
+
moves behind "All modules". Its padding is not decoration — the focus ring is a 3px glow and a
|
|
111
|
+
tighter box would clip it off the first and last tile. */
|
|
112
|
+
.zx-module-bar__list {
|
|
113
|
+
display: flex;
|
|
114
|
+
flex: 1;
|
|
115
|
+
gap: var(--zx-module-bar-gap);
|
|
116
|
+
min-inline-size: 0;
|
|
117
|
+
min-block-size: 0;
|
|
118
|
+
margin: 0;
|
|
119
|
+
padding: var(--zx-space-1);
|
|
120
|
+
overflow: hidden;
|
|
121
|
+
list-style: none;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.zx-module-bar[data-orientation="vertical"] > .zx-module-bar__list { flex-direction: column; align-items: center; }
|
|
125
|
+
.zx-module-bar[data-orientation="horizontal"] > .zx-module-bar__list { flex-direction: row; align-items: center; }
|
|
126
|
+
.zx-module-bar[data-all-modules="never"] > .zx-module-bar__list { overflow: auto; scrollbar-width: none; }
|
|
127
|
+
|
|
128
|
+
.zx-module-bar__row { display: flex; flex: none; }
|
|
129
|
+
.zx-module-bar__row[hidden],
|
|
130
|
+
.zx-module-bar__heading[hidden] { display: none; }
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* A section of modules. With names printed it is a quiet caption over its modules, like the
|
|
134
|
+
* section headings of a menu; on an icon strip or bar it is a short rule between the groups, its
|
|
135
|
+
* caption kept for screen readers, and left out above the very first module.
|
|
136
|
+
*/
|
|
137
|
+
.zx-module-bar__heading {
|
|
138
|
+
position: relative;
|
|
139
|
+
flex: none;
|
|
140
|
+
align-self: center;
|
|
141
|
+
background: var(--zx-color-border-subtle);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.zx-module-bar[data-orientation="vertical"] .zx-module-bar__heading { inline-size: var(--zx-space-4); block-size: 1px; margin-block: var(--zx-space-1); }
|
|
145
|
+
.zx-module-bar[data-orientation="horizontal"] .zx-module-bar__heading { inline-size: 1px; block-size: var(--zx-space-4); margin-inline: var(--zx-space-1); }
|
|
146
|
+
.zx-module-bar:not([data-labels="beside"]) .zx-module-bar__heading[data-leading] { display: none; }
|
|
147
|
+
|
|
148
|
+
.zx-module-bar__heading-label {
|
|
149
|
+
position: absolute;
|
|
150
|
+
inline-size: 1px;
|
|
151
|
+
block-size: 1px;
|
|
152
|
+
overflow: hidden;
|
|
153
|
+
clip-path: inset(50%);
|
|
154
|
+
white-space: nowrap;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] .zx-module-bar__heading {
|
|
158
|
+
align-self: stretch;
|
|
159
|
+
inline-size: auto;
|
|
160
|
+
block-size: auto;
|
|
161
|
+
margin-block: var(--zx-space-2) 0;
|
|
162
|
+
padding: var(--zx-space-1) var(--zx-space-2);
|
|
163
|
+
background: none;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.zx-module-bar[data-orientation="vertical"][data-labels="beside"] .zx-module-bar__heading[data-leading] { margin-block-start: 0; }
|
|
167
|
+
|
|
168
|
+
.zx-module-bar[data-labels="beside"] .zx-module-bar__heading-label {
|
|
169
|
+
position: static;
|
|
170
|
+
inline-size: auto;
|
|
171
|
+
block-size: auto;
|
|
172
|
+
overflow: visible;
|
|
173
|
+
clip-path: none;
|
|
174
|
+
color: var(--zx-color-text-muted);
|
|
175
|
+
font-size: var(--zx-text-xs);
|
|
176
|
+
font-weight: var(--zx-weight-semibold);
|
|
177
|
+
line-height: 1.3;
|
|
178
|
+
white-space: normal;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.zx-module-bar__item {
|
|
182
|
+
position: relative;
|
|
183
|
+
display: grid;
|
|
184
|
+
place-content: center;
|
|
185
|
+
justify-items: center;
|
|
186
|
+
box-sizing: border-box;
|
|
187
|
+
inline-size: var(--zx-module-bar-target);
|
|
188
|
+
block-size: var(--zx-module-bar-target);
|
|
189
|
+
border: 0;
|
|
190
|
+
border-radius: var(--zx-module-bar-radius);
|
|
191
|
+
background: transparent;
|
|
192
|
+
padding: 0;
|
|
193
|
+
color: var(--zx-color-text-muted);
|
|
194
|
+
font: inherit;
|
|
195
|
+
text-decoration: none;
|
|
196
|
+
cursor: pointer;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.zx-module-bar[data-labels="below"] .zx-module-bar__item {
|
|
200
|
+
align-content: start;
|
|
201
|
+
gap: var(--zx-space-1);
|
|
202
|
+
block-size: auto;
|
|
203
|
+
min-block-size: calc(var(--zx-module-bar-tile) + 2lh + var(--zx-space-3));
|
|
204
|
+
padding: var(--zx-space-1) 2px;
|
|
205
|
+
font-size: var(--zx-text-xs);
|
|
206
|
+
line-height: 1.2;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.zx-module-bar__item:hover {
|
|
210
|
+
background: var(--zx-color-bg-hover);
|
|
211
|
+
color: var(--zx-color-text);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.zx-module-bar__item:focus-visible {
|
|
215
|
+
outline-color: transparent;
|
|
216
|
+
box-shadow: var(--zx-focus-ring);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/*
|
|
220
|
+
* Where you are. With flyouts the current module takes the fill and an open flyout the hover
|
|
221
|
+
* step, as on a rail. With an adjacent panel the fill marks the module whose menu the panel
|
|
222
|
+
* shows; when that is not the current one, the current module keeps the full text colour and a
|
|
223
|
+
* heavier name, the way a closed branch over the active route does in the tree.
|
|
224
|
+
*/
|
|
225
|
+
.zx-module-bar[data-menus="flyout"] .zx-module-bar__item[aria-current],
|
|
226
|
+
.zx-module-bar[data-menus="none"] .zx-module-bar__item[aria-expanded="true"],
|
|
227
|
+
.zx-module-bar[data-menus="none"]:not(:has(.zx-module-bar__item[aria-expanded="true"])) .zx-module-bar__item[aria-current] {
|
|
228
|
+
background: var(--zx-color-bg-current);
|
|
229
|
+
color: var(--zx-color-text);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.zx-module-bar__item[aria-current],
|
|
233
|
+
.zx-module-bar__item[data-module-bar-more][aria-expanded="true"],
|
|
234
|
+
.zx-module-bar[data-menus="flyout"] .zx-module-bar__item[aria-expanded="true"] {
|
|
235
|
+
color: var(--zx-color-text);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.zx-module-bar[data-menus="flyout"] .zx-module-bar__item[aria-expanded="true"]:not([aria-current]),
|
|
239
|
+
.zx-module-bar__item[data-module-bar-more][aria-expanded="true"] {
|
|
240
|
+
background: var(--zx-color-bg-hover);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.zx-module-bar__item[aria-current] .zx-module-bar__label,
|
|
244
|
+
.zx-module-bar[data-menus="none"] .zx-module-bar__item[aria-expanded="true"] .zx-module-bar__label {
|
|
245
|
+
font-weight: var(--zx-weight-semibold);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* Unavailable, and still readable: the tile carries the dimming, the name keeps the muted role. */
|
|
249
|
+
.zx-module-bar__item[aria-disabled="true"],
|
|
250
|
+
.zx-module-bar__entry[aria-disabled="true"] {
|
|
251
|
+
color: var(--zx-color-text-muted);
|
|
252
|
+
cursor: not-allowed;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.zx-module-bar__item[aria-disabled="true"] .zx-module-bar__tile,
|
|
256
|
+
.zx-module-bar__entry[aria-disabled="true"] .zx-module-bar__tile { opacity: .55; }
|
|
257
|
+
.zx-module-bar__item[aria-disabled="true"]:hover,
|
|
258
|
+
.zx-module-bar__entry[aria-disabled="true"]:hover { background: transparent; }
|
|
259
|
+
|
|
260
|
+
.zx-module-bar__label {
|
|
261
|
+
max-inline-size: 100%;
|
|
262
|
+
hyphens: auto;
|
|
263
|
+
overflow-wrap: break-word;
|
|
264
|
+
text-align: center;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* ---------------------------------------------------------------- the tile and its appearances */
|
|
268
|
+
|
|
269
|
+
.zx-module-bar__tile {
|
|
270
|
+
--zx-module-bar-fill: transparent;
|
|
271
|
+
--zx-module-bar-ink: currentColor;
|
|
272
|
+
display: grid;
|
|
273
|
+
flex: none;
|
|
274
|
+
place-items: center;
|
|
275
|
+
inline-size: var(--zx-module-bar-tile);
|
|
276
|
+
block-size: var(--zx-module-bar-tile);
|
|
277
|
+
border-radius: var(--zx-radius-lg);
|
|
278
|
+
background: var(--zx-module-bar-fill);
|
|
279
|
+
color: var(--zx-module-bar-ink);
|
|
280
|
+
font-size: calc(var(--zx-module-bar-tile) * .58);
|
|
281
|
+
line-height: 1;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.zx-module-bar__initial {
|
|
285
|
+
font-size: .9em;
|
|
286
|
+
font-weight: var(--zx-weight-semibold);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Tint: the glyph in the module's colour on a soft fill of it. A tone takes the palette's own
|
|
290
|
+
pair, which holds 4.5:1; a host colour is mixed toward the text colour for its ink, so it reads
|
|
291
|
+
in whichever direction the theme runs. */
|
|
292
|
+
.zx-module-bar__tile[data-appearance="tint"][data-color] {
|
|
293
|
+
--zx-module-bar-fill: color-mix(in srgb, var(--zx-module-bar-color) 16%, var(--zx-color-bg-surface));
|
|
294
|
+
--zx-module-bar-ink: color-mix(in srgb, var(--zx-module-bar-color) 70%, var(--zx-color-text));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="blue"] { --zx-module-bar-fill: var(--zx-color-tone-blue-bg); --zx-module-bar-ink: var(--zx-color-tone-blue-fg); }
|
|
298
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="teal"] { --zx-module-bar-fill: var(--zx-color-tone-teal-bg); --zx-module-bar-ink: var(--zx-color-tone-teal-fg); }
|
|
299
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="green"] { --zx-module-bar-fill: var(--zx-color-tone-green-bg); --zx-module-bar-ink: var(--zx-color-tone-green-fg); }
|
|
300
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="amber"] { --zx-module-bar-fill: var(--zx-color-tone-amber-bg); --zx-module-bar-ink: var(--zx-color-tone-amber-fg); }
|
|
301
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="orange"] { --zx-module-bar-fill: var(--zx-color-tone-orange-bg); --zx-module-bar-ink: var(--zx-color-tone-orange-fg); }
|
|
302
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="red"] { --zx-module-bar-fill: var(--zx-color-tone-red-bg); --zx-module-bar-ink: var(--zx-color-tone-red-fg); }
|
|
303
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="pink"] { --zx-module-bar-fill: var(--zx-color-tone-pink-bg); --zx-module-bar-ink: var(--zx-color-tone-pink-fg); }
|
|
304
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="violet"] { --zx-module-bar-fill: var(--zx-color-tone-violet-bg); --zx-module-bar-ink: var(--zx-color-tone-violet-fg); }
|
|
305
|
+
.zx-module-bar__tile[data-appearance="tint"][data-tone="slate"] { --zx-module-bar-fill: var(--zx-color-tone-slate-bg); --zx-module-bar-ink: var(--zx-color-tone-slate-fg); }
|
|
306
|
+
|
|
307
|
+
/* Solid: the identity tile itself, an AppIcon sized by the bar. Its material is AppIcon's. */
|
|
308
|
+
.zx-module-bar__tile[data-appearance="solid"] { font-size: inherit; }
|
|
309
|
+
|
|
310
|
+
/* Plain: monochrome glyphs in the item's own colour; identity colour is not drawn. */
|
|
311
|
+
.zx-module-bar__tile[data-appearance="plain"] { --zx-module-bar-ink: currentColor; }
|
|
312
|
+
|
|
313
|
+
/* The count a tile carries. A number that fits stays a number; past two characters it is a dot,
|
|
314
|
+
and the figure is in the control's accessible name either way. */
|
|
315
|
+
.zx-module-bar__badge {
|
|
316
|
+
position: absolute;
|
|
317
|
+
inset-block-start: 0;
|
|
318
|
+
inset-inline-end: 0;
|
|
319
|
+
min-inline-size: var(--zx-space-4);
|
|
320
|
+
block-size: var(--zx-space-4);
|
|
321
|
+
border-radius: var(--zx-radius-full);
|
|
322
|
+
background: var(--zx-color-accent);
|
|
323
|
+
box-shadow: 0 0 0 2px var(--zx-color-bg-chrome);
|
|
324
|
+
box-sizing: border-box;
|
|
325
|
+
padding-inline: var(--zx-space-1);
|
|
326
|
+
color: var(--zx-color-on-accent);
|
|
327
|
+
font-size: var(--zx-text-xs);
|
|
328
|
+
font-variant-numeric: tabular-nums;
|
|
329
|
+
font-weight: var(--zx-weight-semibold);
|
|
330
|
+
line-height: var(--zx-space-4);
|
|
331
|
+
text-align: center;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.zx-module-bar__badge[data-zx-badge="dot"] {
|
|
335
|
+
min-inline-size: 0;
|
|
336
|
+
inline-size: var(--zx-space-2);
|
|
337
|
+
block-size: var(--zx-space-2);
|
|
338
|
+
padding: 0;
|
|
339
|
+
font-size: 0;
|
|
340
|
+
line-height: 0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* -------------------------------------------------------------------- the "All modules" catalogue */
|
|
344
|
+
|
|
345
|
+
/* The panel is portaled to the overlay host, so the bar's scale is restated here against the same
|
|
346
|
+
tokens; the catalogue's tiles are a step larger than the bar's, because each sits over a name. */
|
|
347
|
+
.zx-module-bar__popover {
|
|
348
|
+
--zx-module-bar-tile: calc(var(--zx-control-height) + var(--zx-space-1));
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* `styles/zx.css` imports this file before `dropdown.css`, so the size the panel takes back from
|
|
352
|
+
the generic overlay surface has to out-specify it. */
|
|
353
|
+
.zx-dropdown.zx-module-bar__popover {
|
|
354
|
+
inline-size: min(26rem, calc(100vw - 2 * var(--zx-space-3)));
|
|
355
|
+
max-block-size: min(34rem, calc(100vh - 2 * var(--zx-space-6)));
|
|
356
|
+
overflow: auto;
|
|
357
|
+
padding: var(--zx-space-2);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.zx-module-bar__catalogue { display: grid; gap: var(--zx-space-1); }
|
|
361
|
+
|
|
362
|
+
.zx-module-bar__filter {
|
|
363
|
+
box-sizing: border-box;
|
|
364
|
+
inline-size: 100%;
|
|
365
|
+
block-size: var(--zx-control-height);
|
|
366
|
+
margin-block-end: var(--zx-space-1);
|
|
367
|
+
border: 1px solid var(--zx-color-border-control);
|
|
368
|
+
border-radius: var(--zx-control-radius);
|
|
369
|
+
background: var(--zx-color-bg-control);
|
|
370
|
+
padding-inline: var(--zx-control-pad-x);
|
|
371
|
+
color: var(--zx-color-text);
|
|
372
|
+
font: inherit;
|
|
373
|
+
font-size: var(--zx-control-font-size);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.zx-module-bar__filter::placeholder { color: var(--zx-color-text-placeholder); }
|
|
377
|
+
|
|
378
|
+
.zx-module-bar__filter:focus-visible {
|
|
379
|
+
outline-color: transparent;
|
|
380
|
+
border-color: var(--zx-color-accent);
|
|
381
|
+
box-shadow: var(--zx-focus-ring);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.zx-module-bar__group[hidden] { display: none; }
|
|
385
|
+
|
|
386
|
+
.zx-module-bar__group-label {
|
|
387
|
+
padding: var(--zx-space-2) var(--zx-space-2) var(--zx-space-1);
|
|
388
|
+
color: var(--zx-color-text-muted);
|
|
389
|
+
font-size: var(--zx-text-xs);
|
|
390
|
+
font-weight: var(--zx-weight-semibold);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.zx-module-bar__grid {
|
|
394
|
+
display: grid;
|
|
395
|
+
grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
|
|
396
|
+
gap: var(--zx-space-1);
|
|
397
|
+
margin: 0;
|
|
398
|
+
padding: 0;
|
|
399
|
+
list-style: none;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.zx-module-bar__grid > li { display: flex; }
|
|
403
|
+
.zx-module-bar__grid > li[hidden] { display: none; }
|
|
404
|
+
|
|
405
|
+
.zx-module-bar__entry {
|
|
406
|
+
position: relative;
|
|
407
|
+
display: grid;
|
|
408
|
+
align-content: start;
|
|
409
|
+
justify-items: center;
|
|
410
|
+
gap: var(--zx-space-1);
|
|
411
|
+
box-sizing: border-box;
|
|
412
|
+
inline-size: 100%;
|
|
413
|
+
border: 0;
|
|
414
|
+
border-radius: var(--zx-radius-md);
|
|
415
|
+
background: transparent;
|
|
416
|
+
padding: var(--zx-space-2) var(--zx-space-1);
|
|
417
|
+
color: var(--zx-color-text);
|
|
418
|
+
font: inherit;
|
|
419
|
+
font-size: var(--zx-text-sm);
|
|
420
|
+
line-height: 1.25;
|
|
421
|
+
text-align: center;
|
|
422
|
+
text-decoration: none;
|
|
423
|
+
cursor: pointer;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.zx-module-bar__entry:hover { background: var(--zx-color-bg-hover); }
|
|
427
|
+
|
|
428
|
+
.zx-module-bar__entry:focus-visible {
|
|
429
|
+
outline-color: transparent;
|
|
430
|
+
box-shadow: var(--zx-focus-ring);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.zx-module-bar__entry[aria-current] {
|
|
434
|
+
background: var(--zx-color-bg-current);
|
|
435
|
+
font-weight: var(--zx-weight-semibold);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
.zx-module-bar__entry-label {
|
|
439
|
+
max-inline-size: 100%;
|
|
440
|
+
hyphens: auto;
|
|
441
|
+
overflow-wrap: break-word;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.zx-module-bar__entry-badge {
|
|
445
|
+
color: var(--zx-color-text-muted);
|
|
446
|
+
font-size: var(--zx-text-xs);
|
|
447
|
+
font-variant-numeric: tabular-nums;
|
|
448
|
+
font-weight: 500;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.zx-module-bar__empty {
|
|
452
|
+
margin: 0;
|
|
453
|
+
padding: var(--zx-space-4) var(--zx-space-2);
|
|
454
|
+
color: var(--zx-color-text-muted);
|
|
455
|
+
font-size: var(--zx-text-sm);
|
|
456
|
+
text-align: center;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.zx-module-bar__empty[hidden] { display: none; }
|
|
460
|
+
|
|
461
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
462
|
+
.zx-module-bar__item,
|
|
463
|
+
.zx-module-bar__entry {
|
|
464
|
+
transition: background-color var(--zx-dur-fast) var(--zx-ease),
|
|
465
|
+
color var(--zx-dur-fast) var(--zx-ease),
|
|
466
|
+
box-shadow var(--zx-dur-fast) var(--zx-ease);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.zx-module-bar__item:active,
|
|
470
|
+
.zx-module-bar__entry:active { transform: scale(.96); }
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/* Forced colours drop author backgrounds: the system's selected pair marks where you are, and
|
|
474
|
+
every tile keeps an outline so its shape survives the loss of its fill. */
|
|
475
|
+
@media (forced-colors: active) {
|
|
476
|
+
.zx-module-bar__item[aria-current],
|
|
477
|
+
.zx-module-bar[data-menus="none"] .zx-module-bar__item[aria-expanded="true"],
|
|
478
|
+
.zx-module-bar__entry[aria-current] {
|
|
479
|
+
background: Highlight;
|
|
480
|
+
color: HighlightText;
|
|
481
|
+
forced-color-adjust: none;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.zx-module-bar__tile { outline: 1px solid CanvasText; }
|
|
485
|
+
.zx-module-bar__badge { border: 1px solid CanvasText; }
|
|
486
|
+
}
|