@zeyos/zx 4.3.4 → 4.4.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 +155 -0
- package/README.md +7 -0
- package/dist/types/components/activity-item/activity-item.d.ts +351 -0
- package/dist/types/components/activity-list/activity-list.d.ts +195 -0
- package/dist/types/components/app-sidebar/app-sidebar.d.ts +28 -0
- package/dist/types/components/button/button.d.ts +8 -0
- package/dist/types/components/calendar/calendar.d.ts +19 -0
- package/dist/types/components/card/card.d.ts +7 -0
- package/dist/types/components/card-view/card-view.d.ts +11 -3
- package/dist/types/components/card-view/record-card.d.ts +7 -1
- package/dist/types/components/code-editor/code-editor.d.ts +160 -0
- package/dist/types/components/code-editor/field-adapter.d.ts +5 -0
- package/dist/types/components/context-menu/context-menu.d.ts +18 -2
- package/dist/types/components/date-picker/date-picker.d.ts +8 -0
- package/dist/types/components/date-picker/time-picker.d.ts +7 -0
- package/dist/types/components/dialog/dialog.d.ts +29 -0
- package/dist/types/components/entity-ref/entity-ref.d.ts +331 -0
- package/dist/types/components/file-item/file-item.d.ts +234 -0
- package/dist/types/components/file-list/file-list.d.ts +171 -0
- package/dist/types/components/filter/filter.d.ts +91 -36
- package/dist/types/components/filter-panel/filter-panel.d.ts +449 -0
- package/dist/types/components/kanban-view/kanban-card.d.ts +138 -0
- package/dist/types/components/kanban-view/kanban-view.d.ts +170 -4
- package/dist/types/components/launcher/launcher.d.ts +19 -12
- package/dist/types/components/list-toolbar/list-toolbar.d.ts +599 -0
- package/dist/types/components/menu-button/menu-button.d.ts +4 -37
- package/dist/types/components/message/message.d.ts +7 -0
- package/dist/types/components/modal/modal.d.ts +48 -0
- package/dist/types/components/navigation-bar/navigation-bar.d.ts +105 -21
- package/dist/types/components/panel/panel.d.ts +7 -0
- package/dist/types/components/search/search.d.ts +7 -0
- package/dist/types/components/select/select.d.ts +4 -0
- package/dist/types/components/sort-control/sort-control.d.ts +105 -0
- package/dist/types/components/stat-tile/stat-tile.d.ts +277 -0
- package/dist/types/components/tabbox/tabbox.d.ts +7 -0
- package/dist/types/components/table/table.d.ts +144 -0
- package/dist/types/components/table-view/table-view.d.ts +11 -5
- package/dist/types/components/timebox/timebox.d.ts +7 -0
- package/dist/types/components/value-list/value-list.d.ts +8 -0
- package/dist/types/components/view/record-view.d.ts +96 -5
- package/dist/types/core/icons.d.ts +17 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/internal/app-rail.d.ts +10 -0
- package/dist/types/internal/menu-items.d.ts +134 -0
- package/dist/zx-zeyos.esm.js +616 -77
- package/dist/zx-zeyos.esm.min.js +8 -1
- package/dist/zx.css +2085 -238
- package/dist/zx.esm.js +6704 -1542
- package/dist/zx.esm.min.js +10 -3
- package/dist/zx.global.js +6704 -1542
- package/dist/zx.global.min.js +10 -3
- package/dist/zx.min.css +1 -1
- package/docs/api.json +1479 -127
- package/docs/llms.md +315 -10
- package/docs/llms.txt +11 -5
- package/package.json +1 -1
- package/src/components/activity-item/activity-item.css +137 -0
- package/src/components/activity-item/activity-item.js +599 -0
- package/src/components/activity-list/activity-list.css +64 -0
- package/src/components/activity-list/activity-list.js +375 -0
- package/src/components/app-rail/app-rail.css +227 -19
- package/src/components/app-sidebar/app-sidebar.css +414 -24
- package/src/components/app-sidebar/app-sidebar.js +65 -5
- package/src/components/button/button.css +8 -0
- package/src/components/button/button.js +6 -1
- package/src/components/calendar/calendar.js +33 -3
- package/src/components/card/card.js +12 -1
- package/src/components/card-view/card-view.css +1 -0
- package/src/components/card-view/card-view.js +25 -9
- package/src/components/card-view/record-card.js +7 -3
- package/src/components/code-editor/code-editor.css +67 -0
- package/src/components/code-editor/code-editor.js +288 -0
- package/src/components/code-editor/field-adapter.js +34 -0
- package/src/components/context-menu/context-menu.css +80 -3
- package/src/components/context-menu/context-menu.js +22 -30
- package/src/components/date-picker/date-picker.js +22 -8
- package/src/components/date-picker/month-picker.js +3 -3
- package/src/components/date-picker/time-picker.js +20 -8
- package/src/components/dialog/dialog.js +88 -66
- package/src/components/dropdown/dropdown.js +2 -2
- package/src/components/entity-ref/entity-ref.css +182 -0
- package/src/components/entity-ref/entity-ref.js +496 -0
- package/src/components/file-item/file-item.css +88 -0
- package/src/components/file-item/file-item.js +371 -0
- package/src/components/file-list/file-list.css +51 -0
- package/src/components/file-list/file-list.js +320 -0
- package/src/components/filter/filter.css +27 -1
- package/src/components/filter/filter.js +199 -45
- package/src/components/filter-panel/filter-panel.css +104 -0
- package/src/components/filter-panel/filter-panel.js +964 -0
- package/src/components/kanban-view/kanban-card.js +239 -0
- package/src/components/kanban-view/kanban-view.css +194 -0
- package/src/components/kanban-view/kanban-view.js +251 -8
- package/src/components/launcher/launcher.js +59 -27
- package/src/components/list-toolbar/list-toolbar.css +189 -0
- package/src/components/list-toolbar/list-toolbar.js +851 -0
- package/src/components/menu-button/menu-button.css +80 -3
- package/src/components/menu-button/menu-button.js +21 -37
- package/src/components/message/message.css +5 -2
- package/src/components/message/message.js +13 -2
- package/src/components/modal/modal.css +15 -0
- package/src/components/modal/modal.js +141 -0
- package/src/components/navigation-bar/navigation-bar.css +77 -2
- package/src/components/navigation-bar/navigation-bar.js +171 -4
- package/src/components/panel/panel.js +13 -2
- package/src/components/search/search.js +17 -5
- package/src/components/select/field-adapter.js +4 -1
- package/src/components/select/select.js +3 -0
- package/src/components/sort-control/sort-control.css +17 -0
- package/src/components/sort-control/sort-control.js +140 -0
- package/src/components/stat-tile/stat-tile.css +213 -0
- package/src/components/stat-tile/stat-tile.js +590 -0
- package/src/components/tabbox/tabbox.js +12 -1
- package/src/components/table/table.css +51 -2
- package/src/components/table/table.js +298 -19
- package/src/components/table-view/table-view.css +8 -2
- package/src/components/table-view/table-view.js +21 -6
- package/src/components/tag-picker/tag-picker.css +3 -1
- package/src/components/timebox/timebox.js +18 -5
- package/src/components/value-list/value-list.js +22 -6
- package/src/components/view/record-view.css +5 -0
- package/src/components/view/record-view.js +100 -7
- package/src/core/icons.js +74 -5
- package/src/index.js +25 -0
- package/src/internal/app-rail.js +19 -1
- package/src/internal/menu-items.js +142 -0
- package/styles/print.css +192 -0
- package/styles/zx.css +11 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { h, safeHref } from '../core/dom.js';
|
|
2
|
+
import { icon } from '../core/icons.js';
|
|
3
|
+
|
|
4
|
+
/** @typedef {'menuitem'|'menuitemcheckbox'|'menuitemradio'} MenuItemRole */
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Object} MenuController
|
|
7
|
+
* @property {() => unknown} close Close the owning menu.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {Object} MenuItem
|
|
11
|
+
* @property {string} label Item label.
|
|
12
|
+
* @property {string} [icon] Kernel icon name.
|
|
13
|
+
* @property {unknown} [value] Value emitted on selection.
|
|
14
|
+
* @property {boolean} [disabled=false] Whether selection is disabled.
|
|
15
|
+
* @property {boolean} [danger=false] Whether the action is dangerous.
|
|
16
|
+
* @property {string} [href] Native-link destination.
|
|
17
|
+
* @property {string} [target] Native-link target.
|
|
18
|
+
* @property {string} [rel] Native-link relationship.
|
|
19
|
+
* @property {string} [description] Supporting text under the label.
|
|
20
|
+
* @property {string|number} [badge] Compact trailing metadata.
|
|
21
|
+
* @property {string} [shortcut] Keyboard shortcut label.
|
|
22
|
+
* @property {string|number|Node} [adornment] Additional trailing content.
|
|
23
|
+
* @property {MenuItemRole} [role='menuitem'] APG role.
|
|
24
|
+
* @property {boolean} [checked=false] Checked state for checkbox/radio roles.
|
|
25
|
+
* @property {(value: unknown, item: MenuItem, controller: MenuController) => void} [onselect]
|
|
26
|
+
* Selection callback.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {Object} MenuHeading
|
|
30
|
+
* @property {'heading'} type Entry kind.
|
|
31
|
+
* @property {string} label Visible heading.
|
|
32
|
+
*/
|
|
33
|
+
/** @typedef {{type: 'separator'}} MenuSeparator */
|
|
34
|
+
/** @typedef {MenuItem|MenuHeading|MenuSeparator|'-'} MenuEntry */
|
|
35
|
+
|
|
36
|
+
export const MENU_ITEM_SELECTOR = [
|
|
37
|
+
'[role="menuitem"]',
|
|
38
|
+
'[role="menuitemcheckbox"]',
|
|
39
|
+
'[role="menuitemradio"]'
|
|
40
|
+
].join(',');
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reports whether an entry is an interactive menu action.
|
|
44
|
+
* @param {MenuEntry|unknown} entry Candidate entry.
|
|
45
|
+
* @returns {entry is MenuItem}
|
|
46
|
+
*/
|
|
47
|
+
export function isMenuItem(entry) {
|
|
48
|
+
return Boolean(entry && entry !== '-' && typeof entry === 'object'
|
|
49
|
+
&& !['heading', 'separator'].includes(String(/** @type {{type?: unknown}} */ (entry).type ?? '')));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Resolves the only APG roles accepted by the shared action model.
|
|
54
|
+
* @param {MenuItem} item Item definition.
|
|
55
|
+
* @returns {MenuItemRole}
|
|
56
|
+
*/
|
|
57
|
+
export function menuItemRole(item) {
|
|
58
|
+
return ['menuitemcheckbox', 'menuitemradio'].includes(String(item.role))
|
|
59
|
+
? /** @type {MenuItemRole} */ (item.role)
|
|
60
|
+
: 'menuitem';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Builds one menu's entries with shared structure and link safety.
|
|
65
|
+
* @param {MenuEntry[]} entries Entry definitions.
|
|
66
|
+
* @param {string} block CSS block name, without the `zx-` prefix.
|
|
67
|
+
* @returns {HTMLElement[]}
|
|
68
|
+
*/
|
|
69
|
+
export function renderMenuEntries(entries, block) {
|
|
70
|
+
const nodes = [];
|
|
71
|
+
entries.forEach((entry, index) => {
|
|
72
|
+
if (entry === '-' || (entry && typeof entry === 'object' && entry.type === 'separator')) {
|
|
73
|
+
nodes.push(h('div', { class: `zx-${block}__separator`, role: 'separator' }));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (entry && typeof entry === 'object' && entry.type === 'heading') {
|
|
77
|
+
nodes.push(h('div', {
|
|
78
|
+
class: `zx-${block}__heading`,
|
|
79
|
+
role: 'presentation'
|
|
80
|
+
}, String(entry.label ?? '')));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!isMenuItem(entry)) return;
|
|
84
|
+
|
|
85
|
+
const role = menuItemRole(entry);
|
|
86
|
+
const href = safeHref(entry.href);
|
|
87
|
+
const target = entry.target == null ? null : String(entry.target);
|
|
88
|
+
const rel = entry.rel == null
|
|
89
|
+
? (target === '_blank' ? 'noopener noreferrer' : null)
|
|
90
|
+
: String(entry.rel);
|
|
91
|
+
const content = [];
|
|
92
|
+
const leading = [];
|
|
93
|
+
if (role !== 'menuitem') {
|
|
94
|
+
leading.push(h('span', {
|
|
95
|
+
class: `zx-${block}__check`,
|
|
96
|
+
'data-check-kind': role === 'menuitemradio' ? 'radio' : 'checkbox'
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
if (entry.icon) leading.push(icon(entry.icon));
|
|
100
|
+
content.push(h('span', {
|
|
101
|
+
class: `zx-${block}__leading`,
|
|
102
|
+
ariaHidden: 'true'
|
|
103
|
+
}, leading));
|
|
104
|
+
content.push(h('span', { class: `zx-${block}__body` },
|
|
105
|
+
h('span', { class: `zx-${block}__label` }, String(entry.label ?? '')),
|
|
106
|
+
entry.description == null || entry.description === '' ? null : h('span', {
|
|
107
|
+
class: `zx-${block}__description`
|
|
108
|
+
}, String(entry.description))));
|
|
109
|
+
|
|
110
|
+
const meta = [];
|
|
111
|
+
if (entry.badge != null) {
|
|
112
|
+
meta.push(h('span', { class: `zx-${block}__badge` }, String(entry.badge)));
|
|
113
|
+
}
|
|
114
|
+
if (entry.shortcut) {
|
|
115
|
+
meta.push(h('kbd', { class: `zx-${block}__shortcut` }, String(entry.shortcut)));
|
|
116
|
+
}
|
|
117
|
+
if (entry.adornment != null) {
|
|
118
|
+
const adornment = entry.adornment && typeof entry.adornment === 'object'
|
|
119
|
+
&& 'nodeType' in entry.adornment
|
|
120
|
+
? /** @type {Node} */ (entry.adornment)
|
|
121
|
+
: String(entry.adornment);
|
|
122
|
+
meta.push(h('span', { class: `zx-${block}__adornment` }, adornment));
|
|
123
|
+
}
|
|
124
|
+
if (meta.length) content.push(h('span', { class: `zx-${block}__meta` }, meta));
|
|
125
|
+
|
|
126
|
+
const properties = {
|
|
127
|
+
class: `zx-${block}__item`,
|
|
128
|
+
role,
|
|
129
|
+
tabindex: '-1',
|
|
130
|
+
'data-menu-item': String(index),
|
|
131
|
+
'data-danger': entry.danger ? 'true' : null,
|
|
132
|
+
ariaDisabled: entry.disabled ? 'true' : null,
|
|
133
|
+
ariaChecked: role === 'menuitem' ? null : String(Boolean(entry.checked))
|
|
134
|
+
};
|
|
135
|
+
if (href) {
|
|
136
|
+
nodes.push(h('a', { ...properties, href, target, rel }, content));
|
|
137
|
+
} else {
|
|
138
|
+
nodes.push(h('button', { ...properties, type: 'button' }, content));
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return nodes;
|
|
142
|
+
}
|
package/styles/print.css
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Paper.
|
|
3
|
+
*
|
|
4
|
+
* Imported last from `styles/zx.css`, and everything in it lives inside the one `@media print`
|
|
5
|
+
* block below — so on screen this file contributes nothing at all, and on paper it is the last
|
|
6
|
+
* word. Consumers print invoices, delivery notes and reports out of these components, and until
|
|
7
|
+
* this file existed a printed table took its sticky header, its zebra stripes and whatever row
|
|
8
|
+
* the pointer happened to be over along with it.
|
|
9
|
+
*
|
|
10
|
+
* Paper differs from a screen in four ways, and every rule here answers one of them:
|
|
11
|
+
*
|
|
12
|
+
* - There is no viewport, so nothing may stick and nothing may scroll. A sticky header pins
|
|
13
|
+
* itself to the top of a sheet of paper, and a scroller prints exactly one screenful.
|
|
14
|
+
* - There is no pointer and no focus, so hover fills, focus rings and drag affordances are
|
|
15
|
+
* noise that costs toner.
|
|
16
|
+
* - There is no second page for the half of a card that did not fit, so blocks that read as one
|
|
17
|
+
* thing say where they may be cut, and a table repeats its header on every page.
|
|
18
|
+
* - Ink is not free and a fill is not a colour. Backgrounds come off; the one exception is a
|
|
19
|
+
* status badge, whose fill carries meaning its text alone does not.
|
|
20
|
+
*
|
|
21
|
+
* Semantic tokens only, as everywhere else. The borders are the interesting case: the light
|
|
22
|
+
* theme's `--zx-color-border` is a very pale grey that a printer renders as nothing, so the
|
|
23
|
+
* border roles are repointed — once, at the top — to a mix of the text colour, which prints.
|
|
24
|
+
*/
|
|
25
|
+
@media print {
|
|
26
|
+
/*
|
|
27
|
+
* Hairlines. `--zx-color-text` rather than a fixed grey so the mix follows the theme it is
|
|
28
|
+
* printed from, and both selectors are single-class so this beats the theme block that sets the
|
|
29
|
+
* same roles on the same element: this file is imported last, and on a tie the last one wins.
|
|
30
|
+
*/
|
|
31
|
+
.zx-scope,
|
|
32
|
+
[data-zx-theme] {
|
|
33
|
+
--zx-color-border: color-mix(in srgb, var(--zx-color-text) 45%, transparent);
|
|
34
|
+
--zx-color-border-strong: color-mix(in srgb, var(--zx-color-text) 65%, transparent);
|
|
35
|
+
--zx-color-border-control: color-mix(in srgb, var(--zx-color-text) 45%, transparent);
|
|
36
|
+
--zx-color-overlay-border: color-mix(in srgb, var(--zx-color-text) 45%, transparent);
|
|
37
|
+
--zx-color-overlay-divider: color-mix(in srgb, var(--zx-color-text) 45%, transparent);
|
|
38
|
+
/* The glass rim is a light tint of the page, which on white paper is the paper. */
|
|
39
|
+
--zx-color-glass-border: color-mix(in srgb, var(--zx-color-text) 45%, transparent);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* A fill is a boundary too, and the filled variants drew theirs with one: their border is
|
|
44
|
+
* `transparent` because the surface underneath said where the card ended. With the fill gone
|
|
45
|
+
* they would arrive on paper as loose text, so they take the hairline instead.
|
|
46
|
+
*/
|
|
47
|
+
.zx-scope .zx-card[data-variant="filled"],
|
|
48
|
+
.zx-scope .zx-record-card[data-variant="filled"] {
|
|
49
|
+
border-color: var(--zx-color-border);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
* Fills off. A badge is excluded by the selector rather than overridden afterwards, because its
|
|
54
|
+
* eleven kind/variant fills would otherwise have to be restated here one by one, and the copy
|
|
55
|
+
* would rot the first time badge.css gained a kind.
|
|
56
|
+
*/
|
|
57
|
+
.zx-scope,
|
|
58
|
+
.zx-scope *:not(.zx-badge, .zx-badge *),
|
|
59
|
+
.zx-scope *:not(.zx-badge, .zx-badge *)::before,
|
|
60
|
+
.zx-scope *:not(.zx-badge, .zx-badge *)::after {
|
|
61
|
+
background-color: transparent !important;
|
|
62
|
+
background-image: none !important;
|
|
63
|
+
box-shadow: none !important;
|
|
64
|
+
text-shadow: none !important;
|
|
65
|
+
-webkit-backdrop-filter: none !important;
|
|
66
|
+
backdrop-filter: none !important;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* The exception: a badge's colour is half of what it says, so it is asked for explicitly. */
|
|
70
|
+
.zx-scope .zx-badge {
|
|
71
|
+
-webkit-print-color-adjust: exact;
|
|
72
|
+
print-color-adjust: exact;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* A solid button's label is the colour that reads on its fill — white on the accent. With the
|
|
77
|
+
* fill gone that label is white on white, so the two kinds that have one take the page's text
|
|
78
|
+
* colour and a hairline of their own. Buttons are not hidden: a printed form or an approval
|
|
79
|
+
* sheet is read by someone who needs to see what the screen offered.
|
|
80
|
+
*/
|
|
81
|
+
.zx-scope .zx-btn[data-kind="primary"],
|
|
82
|
+
.zx-scope .zx-btn[data-kind="danger"] {
|
|
83
|
+
border-color: var(--zx-color-border);
|
|
84
|
+
color: var(--zx-color-text);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Nothing sticks to a sheet of paper. Everything below stacks where it was written instead. */
|
|
88
|
+
.zx-scope .zx-table th,
|
|
89
|
+
.zx-scope .zx-table__scroll[data-sticky-header="true"] th,
|
|
90
|
+
.zx-scope .zx-select__group,
|
|
91
|
+
.zx-scope .zx-calendar__agenda-heading,
|
|
92
|
+
.zx-scope .zx-toolbar,
|
|
93
|
+
.zx-scope .zx-list-toolbar {
|
|
94
|
+
position: static;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/*
|
|
98
|
+
* Nothing scrolls either: a scroller prints the rows that happen to be inside it and drops the
|
|
99
|
+
* rest, which on an invoice is a silently short invoice.
|
|
100
|
+
*/
|
|
101
|
+
.zx-scope .zx-table__scroll,
|
|
102
|
+
.zx-scope .zx-tree,
|
|
103
|
+
.zx-scope .zx-card-view,
|
|
104
|
+
.zx-scope .zx-record-view {
|
|
105
|
+
overflow: visible;
|
|
106
|
+
max-block-size: none;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* No pointer, no focus, no zebra — three states that only ever existed on a screen. */
|
|
110
|
+
.zx-scope .zx-table__scroll[data-zebra="true"] .zx-table__body tr:nth-child(even),
|
|
111
|
+
.zx-scope .zx-table__body tr[data-row]:hover,
|
|
112
|
+
.zx-scope .zx-table__body tr[aria-selected="true"] {
|
|
113
|
+
background: transparent;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.zx-scope :focus,
|
|
117
|
+
.zx-scope :focus-visible {
|
|
118
|
+
outline: none;
|
|
119
|
+
box-shadow: none;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Chrome and overlays: navigation a reader cannot follow, and panels floating over the page. */
|
|
123
|
+
.zx-scope .zx-navigation-bar,
|
|
124
|
+
.zx-scope .zx-app-rail,
|
|
125
|
+
.zx-scope .zx-app-sidebar,
|
|
126
|
+
.zx-modal,
|
|
127
|
+
.zx-dialog,
|
|
128
|
+
.zx-sheet,
|
|
129
|
+
.zx-dropdown,
|
|
130
|
+
.zx-context-menu,
|
|
131
|
+
.zx-tooltip,
|
|
132
|
+
.zx-launcher,
|
|
133
|
+
.zx-message-region,
|
|
134
|
+
[popover]:popover-open {
|
|
135
|
+
display: none !important;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
::backdrop {
|
|
139
|
+
display: none;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* A table that runs over a page break reintroduces itself on the next one. */
|
|
143
|
+
.zx-scope .zx-table thead {
|
|
144
|
+
display: table-header-group;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.zx-scope .zx-table tfoot {
|
|
148
|
+
display: table-footer-group;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Things that read as one object are not cut in half if they can be moved whole. */
|
|
152
|
+
.zx-scope .zx-card,
|
|
153
|
+
.zx-scope .zx-record-card,
|
|
154
|
+
.zx-scope .zx-stat-tile,
|
|
155
|
+
.zx-scope .zx-table__body tr {
|
|
156
|
+
break-inside: avoid;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* A link on paper is a dead end unless it says where it goes — in prose. Inside a table cell or
|
|
161
|
+
* on a button the appended URL is not information, it is a wrecked column, so those take it back
|
|
162
|
+
* off. Each of those selectors outranks the one above on specificity rather than on source
|
|
163
|
+
* order, so reordering the list cannot quietly turn one of them back on.
|
|
164
|
+
*/
|
|
165
|
+
.zx-scope a[href^="http"]::after {
|
|
166
|
+
content: " (" attr(href) ")";
|
|
167
|
+
font-size: var(--zx-text-sm);
|
|
168
|
+
font-weight: 400;
|
|
169
|
+
word-break: break-all;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.zx-scope a[href]:empty::after,
|
|
173
|
+
.zx-scope a[href].zx-icon-btn::after,
|
|
174
|
+
.zx-scope a:has(> .zx-icon:only-child)::after,
|
|
175
|
+
.zx-scope th a[href]::after,
|
|
176
|
+
.zx-scope td a[href]::after,
|
|
177
|
+
.zx-scope button a[href]::after,
|
|
178
|
+
.zx-scope a[href].zx-btn::after,
|
|
179
|
+
.zx-scope .zx-btn a[href]::after,
|
|
180
|
+
.zx-scope .zx-table a[href]::after,
|
|
181
|
+
.zx-scope .zx-badge a[href]::after,
|
|
182
|
+
.zx-scope a[href].zx-badge::after,
|
|
183
|
+
.zx-scope a[href].zx-entity-ref::after,
|
|
184
|
+
.zx-scope .zx-entity-ref a[href]::after,
|
|
185
|
+
.zx-scope .zx-breadcrumb a[href]::after,
|
|
186
|
+
.zx-scope a[href].zx-stat-tile::after,
|
|
187
|
+
.zx-scope .zx-tabbox a[href]::after,
|
|
188
|
+
.zx-scope .zx-tree a[href]::after,
|
|
189
|
+
.zx-scope .zx-file-item a[href]::after {
|
|
190
|
+
content: none;
|
|
191
|
+
}
|
|
192
|
+
}
|
package/styles/zx.css
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
@import url("../src/components/skeleton/skeleton.css");
|
|
19
19
|
@import url("../src/components/copy/copy-button.css");
|
|
20
20
|
@import url("../src/components/copy/copy-input.css");
|
|
21
|
+
@import url("../src/components/code-editor/code-editor.css");
|
|
21
22
|
@import url("../src/components/toolbar/toolbar.css");
|
|
22
23
|
@import url("../src/components/toggle/toggle.css");
|
|
23
24
|
@import url("../src/components/groupbox/groupbox.css");
|
|
@@ -31,6 +32,11 @@
|
|
|
31
32
|
@import url("../src/components/app-icon/app-icon.css");
|
|
32
33
|
@import url("../src/components/launcher/launcher.css");
|
|
33
34
|
@import url("../src/components/avatar/avatar.css");
|
|
35
|
+
@import url("../src/components/entity-ref/entity-ref.css");
|
|
36
|
+
@import url("../src/components/file-item/file-item.css");
|
|
37
|
+
@import url("../src/components/file-list/file-list.css");
|
|
38
|
+
@import url("../src/components/activity-item/activity-item.css");
|
|
39
|
+
@import url("../src/components/activity-list/activity-list.css");
|
|
34
40
|
@import url("../src/components/account-menu/account-menu.css");
|
|
35
41
|
@import url("../src/components/app-rail/app-rail.css");
|
|
36
42
|
@import url("../src/components/app-sidebar/app-sidebar.css");
|
|
@@ -60,6 +66,7 @@
|
|
|
60
66
|
@import url("../src/components/view/record-view.css");
|
|
61
67
|
@import url("../src/components/table/table.css");
|
|
62
68
|
@import url("../src/components/table-view/table-view.css");
|
|
69
|
+
@import url("../src/components/stat-tile/stat-tile.css");
|
|
63
70
|
@import url("../src/components/card-view/card-view.css");
|
|
64
71
|
@import url("../src/components/kanban-view/kanban-view.css");
|
|
65
72
|
@import url("../src/components/grid/grid.css");
|
|
@@ -67,7 +74,10 @@
|
|
|
67
74
|
@import url("../src/components/tree/tree.css");
|
|
68
75
|
@import url("../src/components/finder/finder.css");
|
|
69
76
|
@import url("../src/components/data-filter/data-filter.css");
|
|
77
|
+
@import url("../src/components/filter-panel/filter-panel.css");
|
|
78
|
+
@import url("../src/components/list-toolbar/list-toolbar.css");
|
|
70
79
|
@import url("../src/components/filter/filter.css");
|
|
80
|
+
@import url("../src/components/sort-control/sort-control.css");
|
|
71
81
|
@import url("../src/components/pagination/pagination.css");
|
|
72
82
|
@import url("../src/components/stepper/stepper.css");
|
|
73
83
|
@import url("../src/components/breadcrumb/breadcrumb.css");
|
|
@@ -78,3 +88,4 @@
|
|
|
78
88
|
@import url("../src/components/multi-value-editor/multi-value-editor.css");
|
|
79
89
|
@import url("../src/components/field-upload/field-upload.css");
|
|
80
90
|
@import url("../src/components/questionnaire/questionnaire.css");
|
|
91
|
+
@import url("./print.css");
|