@things-factory/board-ui 10.1.41 → 10.1.42
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/dist-client/board-list/board-thumb.d.ts +33 -0
- package/dist-client/board-list/board-thumb.js +119 -0
- package/dist-client/board-list/board-thumb.js.map +1 -0
- package/dist-client/graphql/favorite-board.js +3 -0
- package/dist-client/graphql/favorite-board.js.map +1 -1
- package/dist-client/graphql/my-board.js +3 -0
- package/dist-client/graphql/my-board.js.map +1 -1
- package/dist-client/graphql/play-group.js +2 -0
- package/dist-client/graphql/play-group.js.map +1 -1
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +1 -0
- package/dist-client/index.js.map +1 -1
- package/dist-client/pages/board-list-page.d.ts +39 -42
- package/dist-client/pages/board-list-page.js +388 -284
- package/dist-client/pages/board-list-page.js.map +1 -1
- package/dist-client/pages/board-modeller-page.d.ts +2 -0
- package/dist-client/pages/board-modeller-page.js +18 -1
- package/dist-client/pages/board-modeller-page.js.map +1 -1
- package/dist-client/pages/board-template/board-template-list-page.d.ts +21 -10
- package/dist-client/pages/board-template/board-template-list-page.js +147 -136
- package/dist-client/pages/board-template/board-template-list-page.js.map +1 -1
- package/dist-client/pages/play-list-page.d.ts +22 -12
- package/dist-client/pages/play-list-page.js +264 -113
- package/dist-client/pages/play-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/setting-let/board-modeller-setting-let.d.ts +21 -0
- package/dist-client/setting-let/board-modeller-setting-let.js +144 -0
- package/dist-client/setting-let/board-modeller-setting-let.js.map +1 -0
- package/dist-client/styles/board-card-styles.d.ts +11 -0
- package/dist-client/styles/board-card-styles.js +90 -0
- package/dist-client/styles/board-card-styles.js.map +1 -0
- package/dist-client/themes/board-theme.css +32 -19
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/utils/board-meta.d.ts +10 -0
- package/dist-client/utils/board-meta.js +34 -0
- package/dist-client/utils/board-meta.js.map +1 -0
- package/dist-client/viewparts/board-basic-info.d.ts +38 -7
- package/dist-client/viewparts/board-basic-info.js +378 -349
- package/dist-client/viewparts/board-basic-info.js.map +1 -1
- package/dist-client/viewparts/board-info-link.d.ts +5 -1
- package/dist-client/viewparts/board-info-link.js +79 -21
- package/dist-client/viewparts/board-info-link.js.map +1 -1
- package/dist-client/viewparts/board-info-template.d.ts +15 -0
- package/dist-client/viewparts/board-info-template.js +97 -0
- package/dist-client/viewparts/board-info-template.js.map +1 -0
- package/dist-client/viewparts/board-info.d.ts +5 -0
- package/dist-client/viewparts/board-info.js +24 -73
- package/dist-client/viewparts/board-info.js.map +1 -1
- package/dist-client/viewparts/board-template-builder.d.ts +1 -0
- package/dist-client/viewparts/board-template-builder.js +37 -65
- package/dist-client/viewparts/board-template-builder.js.map +1 -1
- package/dist-client/viewparts/board-template-info.d.ts +3 -0
- package/dist-client/viewparts/board-template-info.js +75 -134
- package/dist-client/viewparts/board-template-info.js.map +1 -1
- package/dist-client/viewparts/group-info-basic.d.ts +8 -3
- package/dist-client/viewparts/group-info-basic.js +54 -190
- package/dist-client/viewparts/group-info-basic.js.map +1 -1
- package/dist-client/viewparts/group-info-import.d.ts +3 -1
- package/dist-client/viewparts/group-info-import.js +29 -62
- package/dist-client/viewparts/group-info-import.js.map +1 -1
- package/dist-client/viewparts/group-info.d.ts +4 -0
- package/dist-client/viewparts/group-info.js +21 -55
- package/dist-client/viewparts/group-info.js.map +1 -1
- package/dist-client/viewparts/info-dialog-styles.d.ts +19 -0
- package/dist-client/viewparts/info-dialog-styles.js +194 -0
- package/dist-client/viewparts/info-dialog-styles.js.map +1 -0
- package/dist-client/viewparts/link-builder.d.ts +3 -0
- package/dist-client/viewparts/link-builder.js +87 -81
- package/dist-client/viewparts/link-builder.js.map +1 -1
- package/dist-client/viewparts/play-group-info-basic.d.ts +4 -3
- package/dist-client/viewparts/play-group-info-basic.js +49 -188
- package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
- package/dist-client/viewparts/play-group-info.d.ts +4 -0
- package/dist-client/viewparts/play-group-info.js +22 -53
- package/dist-client/viewparts/play-group-info.js.map +1 -1
- package/package.json +4 -4
- package/translations/en.json +32 -0
- package/translations/ja.json +10 -0
- package/translations/ko.json +32 -0
- package/translations/ms.json +8 -0
- package/translations/zh.json +10 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import '@material/web/radio/radio.js';
|
|
3
|
+
import '@operato/i18n/ox-i18n.js';
|
|
4
|
+
import '@things-factory/setting-base';
|
|
5
|
+
import { css, html, LitElement } from 'lit';
|
|
6
|
+
import { customElement, state } from 'lit/decorators.js';
|
|
7
|
+
import { i18next, localize } from '@operato/i18n';
|
|
8
|
+
import { clientSettingStore } from '@operato/shell/object-store.js';
|
|
9
|
+
export const BOARD_MODELLER_SETTING_KEY = 'board-modeller';
|
|
10
|
+
/** Where the modeller keeps its editing tools: next to the selection (default) or in the top bar. */
|
|
11
|
+
export async function getModellerToolbarMode() {
|
|
12
|
+
try {
|
|
13
|
+
const { toolbar = 'contextual' } = (await clientSettingStore.get(BOARD_MODELLER_SETTING_KEY))?.value || {};
|
|
14
|
+
return toolbar === 'toolbar' || toolbar === 'docked' ? toolbar : 'contextual';
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return 'contextual';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The setting behind the modeller's two toolbar layouts. Both are the same verbs; this only decides
|
|
22
|
+
* whether they float next to what is selected or sit in one fixed row across the top.
|
|
23
|
+
*/
|
|
24
|
+
let BoardModellerSettingLet = class BoardModellerSettingLet extends localize(i18next)(LitElement) {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.mode = 'contextual';
|
|
28
|
+
}
|
|
29
|
+
static { this.styles = [
|
|
30
|
+
css `
|
|
31
|
+
[options] {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: 8px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
label {
|
|
38
|
+
display: flex;
|
|
39
|
+
gap: 10px;
|
|
40
|
+
align-items: flex-start;
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
|
|
43
|
+
font: var(--label-font);
|
|
44
|
+
color: var(--md-sys-color-on-surface);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
label md-radio {
|
|
48
|
+
flex: none;
|
|
49
|
+
margin-top: -2px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
label b {
|
|
53
|
+
display: block;
|
|
54
|
+
font-weight: 500;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
label small {
|
|
58
|
+
display: block;
|
|
59
|
+
color: var(--md-sys-color-on-surface-variant);
|
|
60
|
+
}
|
|
61
|
+
`
|
|
62
|
+
]; }
|
|
63
|
+
render() {
|
|
64
|
+
return html `
|
|
65
|
+
<setting-let>
|
|
66
|
+
<ox-i18n slot="title" msgid="title.board modeller setting">Modeller contextual edit toolbar</ox-i18n>
|
|
67
|
+
|
|
68
|
+
<div slot="content" options>
|
|
69
|
+
<label>
|
|
70
|
+
<md-radio
|
|
71
|
+
name="modeller-toolbar"
|
|
72
|
+
value="contextual"
|
|
73
|
+
?checked=${this.mode === 'contextual'}
|
|
74
|
+
@change=${() => this.onChange('contextual')}
|
|
75
|
+
></md-radio>
|
|
76
|
+
<span>
|
|
77
|
+
<b>${i18next.t('label.modeller toolbar contextual', { defaultValue: 'Floating, next to the selection' })}</b>
|
|
78
|
+
<small>
|
|
79
|
+
${i18next.t('text.modeller toolbar contextual', {
|
|
80
|
+
defaultValue: 'Shows only the tools that apply to what is selected. The top row keeps undo, redo, fit, preview and the panel.'
|
|
81
|
+
})}
|
|
82
|
+
</small>
|
|
83
|
+
</span>
|
|
84
|
+
</label>
|
|
85
|
+
|
|
86
|
+
<label>
|
|
87
|
+
<md-radio
|
|
88
|
+
name="modeller-toolbar"
|
|
89
|
+
value="docked"
|
|
90
|
+
?checked=${this.mode === 'docked'}
|
|
91
|
+
@change=${() => this.onChange('docked')}
|
|
92
|
+
></md-radio>
|
|
93
|
+
<span>
|
|
94
|
+
<b>${i18next.t('label.modeller toolbar docked', { defaultValue: 'Docked at the top of the canvas' })}</b>
|
|
95
|
+
<small>
|
|
96
|
+
${i18next.t('text.modeller toolbar docked', {
|
|
97
|
+
defaultValue: 'The same selection tools, pinned top-centre of the canvas so they never cover a shape or a handle.'
|
|
98
|
+
})}
|
|
99
|
+
</small>
|
|
100
|
+
</span>
|
|
101
|
+
</label>
|
|
102
|
+
|
|
103
|
+
<label>
|
|
104
|
+
<md-radio
|
|
105
|
+
name="modeller-toolbar"
|
|
106
|
+
value="toolbar"
|
|
107
|
+
?checked=${this.mode === 'toolbar'}
|
|
108
|
+
@change=${() => this.onChange('toolbar')}
|
|
109
|
+
></md-radio>
|
|
110
|
+
<span>
|
|
111
|
+
<b>${i18next.t('label.modeller toolbar fixed', { defaultValue: 'Classic toolbar with every tool' })}</b>
|
|
112
|
+
<small>
|
|
113
|
+
${i18next.t('text.modeller toolbar fixed', {
|
|
114
|
+
defaultValue: 'Every tool in one row across the top, all the time.'
|
|
115
|
+
})}
|
|
116
|
+
</small>
|
|
117
|
+
</span>
|
|
118
|
+
</label>
|
|
119
|
+
</div>
|
|
120
|
+
</setting-let>
|
|
121
|
+
`;
|
|
122
|
+
}
|
|
123
|
+
async firstUpdated() {
|
|
124
|
+
this.mode = await getModellerToolbarMode();
|
|
125
|
+
}
|
|
126
|
+
async onChange(mode) {
|
|
127
|
+
this.mode = mode;
|
|
128
|
+
try {
|
|
129
|
+
await clientSettingStore.put({ key: BOARD_MODELLER_SETTING_KEY, value: { toolbar: mode } });
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
console.error('Failed to update board modeller setting (toolbar):', e);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
__decorate([
|
|
137
|
+
state(),
|
|
138
|
+
__metadata("design:type", String)
|
|
139
|
+
], BoardModellerSettingLet.prototype, "mode", void 0);
|
|
140
|
+
BoardModellerSettingLet = __decorate([
|
|
141
|
+
customElement('board-modeller-setting-let')
|
|
142
|
+
], BoardModellerSettingLet);
|
|
143
|
+
export { BoardModellerSettingLet };
|
|
144
|
+
//# sourceMappingURL=board-modeller-setting-let.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-modeller-setting-let.js","sourceRoot":"","sources":["../../client/setting-let/board-modeller-setting-let.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/radio/radio.js'\nimport '@operato/i18n/ox-i18n.js'\nimport '@things-factory/setting-base'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { clientSettingStore } from '@operato/shell/object-store.js'\n\nexport type ModellerToolbarMode = 'contextual' | 'docked' | 'toolbar'\n\nexport const BOARD_MODELLER_SETTING_KEY = 'board-modeller'\n\n/** Where the modeller keeps its editing tools: next to the selection (default) or in the top bar. */\nexport async function getModellerToolbarMode(): Promise<ModellerToolbarMode> {\n try {\n const { toolbar = 'contextual' } = (await clientSettingStore.get(BOARD_MODELLER_SETTING_KEY))?.value || {}\n return toolbar === 'toolbar' || toolbar === 'docked' ? toolbar : 'contextual'\n } catch {\n return 'contextual'\n }\n}\n\n/**\n * The setting behind the modeller's two toolbar layouts. Both are the same verbs; this only decides\n * whether they float next to what is selected or sit in one fixed row across the top.\n */\n@customElement('board-modeller-setting-let')\nexport class BoardModellerSettingLet extends localize(i18next)(LitElement) {\n static styles = [\n css`\n [options] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n label {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n cursor: pointer;\n\n font: var(--label-font);\n color: var(--md-sys-color-on-surface);\n }\n\n label md-radio {\n flex: none;\n margin-top: -2px;\n }\n\n label b {\n display: block;\n font-weight: 500;\n }\n\n label small {\n display: block;\n color: var(--md-sys-color-on-surface-variant);\n }\n `\n ]\n\n @state() private mode: ModellerToolbarMode = 'contextual'\n\n render() {\n return html`\n <setting-let>\n <ox-i18n slot=\"title\" msgid=\"title.board modeller setting\">Modeller contextual edit toolbar</ox-i18n>\n\n <div slot=\"content\" options>\n <label>\n <md-radio\n name=\"modeller-toolbar\"\n value=\"contextual\"\n ?checked=${this.mode === 'contextual'}\n @change=${() => this.onChange('contextual')}\n ></md-radio>\n <span>\n <b>${i18next.t('label.modeller toolbar contextual', { defaultValue: 'Floating, next to the selection' })}</b>\n <small>\n ${i18next.t('text.modeller toolbar contextual', {\n defaultValue: 'Shows only the tools that apply to what is selected. The top row keeps undo, redo, fit, preview and the panel.'\n })}\n </small>\n </span>\n </label>\n\n <label>\n <md-radio\n name=\"modeller-toolbar\"\n value=\"docked\"\n ?checked=${this.mode === 'docked'}\n @change=${() => this.onChange('docked')}\n ></md-radio>\n <span>\n <b>${i18next.t('label.modeller toolbar docked', { defaultValue: 'Docked at the top of the canvas' })}</b>\n <small>\n ${i18next.t('text.modeller toolbar docked', {\n defaultValue: 'The same selection tools, pinned top-centre of the canvas so they never cover a shape or a handle.'\n })}\n </small>\n </span>\n </label>\n\n <label>\n <md-radio\n name=\"modeller-toolbar\"\n value=\"toolbar\"\n ?checked=${this.mode === 'toolbar'}\n @change=${() => this.onChange('toolbar')}\n ></md-radio>\n <span>\n <b>${i18next.t('label.modeller toolbar fixed', { defaultValue: 'Classic toolbar with every tool' })}</b>\n <small>\n ${i18next.t('text.modeller toolbar fixed', {\n defaultValue: 'Every tool in one row across the top, all the time.'\n })}\n </small>\n </span>\n </label>\n </div>\n </setting-let>\n `\n }\n\n async firstUpdated() {\n this.mode = await getModellerToolbarMode()\n }\n\n private async onChange(mode: ModellerToolbarMode) {\n this.mode = mode\n\n try {\n await clientSettingStore.put({ key: BOARD_MODELLER_SETTING_KEY, value: { toolbar: mode } })\n } catch (e) {\n console.error('Failed to update board modeller setting (toolbar):', e)\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one card look for every board catalog - board list, play list, template list.
|
|
3
|
+
*
|
|
4
|
+
* Each page hosts an `ox-grist` in CARD mode and sets the card by `--data-card-*` variables. The
|
|
5
|
+
* three pages used to carry the same forty lines apiece (2026-09-23); a drift between them is
|
|
6
|
+
* exactly the "why does this page look different" complaint this suite keeps hearing, so the
|
|
7
|
+
* tokens now live once, here, and a page adds only what is its own (a FAB, a chip strip).
|
|
8
|
+
*
|
|
9
|
+
* Sized and typed after figure-ui's figure-list-page.ts, so board and figure read as one product.
|
|
10
|
+
*/
|
|
11
|
+
export declare const BoardCardStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* The one card look for every board catalog - board list, play list, template list.
|
|
4
|
+
*
|
|
5
|
+
* Each page hosts an `ox-grist` in CARD mode and sets the card by `--data-card-*` variables. The
|
|
6
|
+
* three pages used to carry the same forty lines apiece (2026-09-23); a drift between them is
|
|
7
|
+
* exactly the "why does this page look different" complaint this suite keeps hearing, so the
|
|
8
|
+
* tokens now live once, here, and a page adds only what is its own (a FAB, a chip strip).
|
|
9
|
+
*
|
|
10
|
+
* Sized and typed after figure-ui's figure-list-page.ts, so board and figure read as one product.
|
|
11
|
+
*/
|
|
12
|
+
export const BoardCardStyles = css `
|
|
13
|
+
:host {
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
position: relative;
|
|
17
|
+
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
|
|
20
|
+
--data-card-min-width: 240px;
|
|
21
|
+
--data-card-record-card-border-radius: 6px;
|
|
22
|
+
--data-card-record-card-padding: 0;
|
|
23
|
+
--data-card-thumbnail-aspect: 16 / 9;
|
|
24
|
+
--data-card-thumbnail-padding: 0;
|
|
25
|
+
--data-card-thumbnail-radius: 6px 6px 0 0;
|
|
26
|
+
/* The card's two surfaces. The theme raises both in dark (--board-card-surface / -plate in
|
|
27
|
+
* operato-board's board-accent.css): the light defaults - white card, light plate - become
|
|
28
|
+
* black on black there, and a card that does not lift off its page is not a card. */
|
|
29
|
+
--data-card-record-card-background-color: var(--board-card-surface, var(--md-sys-color-surface-container-lowest));
|
|
30
|
+
--data-card-thumbnail-background: var(--board-card-plate, var(--md-sys-color-surface-container));
|
|
31
|
+
/* The right margin clears the corner where the action icons sit (below). */
|
|
32
|
+
--data-card-item-margin: 10px 52px 10px 12px;
|
|
33
|
+
--data-card-item-name-font: 500 0.9rem/1.35 var(--theme-font, 'Roboto');
|
|
34
|
+
--data-card-item-name-color: var(--md-sys-color-on-surface);
|
|
35
|
+
--data-card-item-etc-font: normal 0.72rem/1.2 var(--theme-font, 'Roboto');
|
|
36
|
+
/* The second line under the name is a side note, not a rival to it. */
|
|
37
|
+
--data-card-item-disc-font: normal 0.72rem/1.2 var(--theme-font, 'Roboto');
|
|
38
|
+
--data-card-item-disc-color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));
|
|
39
|
+
/* A page's own FAB and the grid's scroll-to-top FAB share the bottom-right corner by default;
|
|
40
|
+
* push the scroll button up so the two never collide. */
|
|
41
|
+
--data-card-fab-position-vertical: 64px;
|
|
42
|
+
/* record-card.ts reads these two with no fallback - unset means no hover feedback at all. */
|
|
43
|
+
--data-card-record-card-border-hover: 1px solid var(--md-sys-color-outline-variant);
|
|
44
|
+
--data-card-record-card-boxshadow-hover: 0 2px 8px rgba(0, 0, 0, 0.16);
|
|
45
|
+
/* Card actions are secondary to the picture and the name: small, in the quiet outline tone. */
|
|
46
|
+
--data-card-gutter-icon-size: 16px;
|
|
47
|
+
--data-card-gutter-icon-color: var(--md-sys-color-outline);
|
|
48
|
+
/* One or two small icons do not deserve a row of their own under the text: park them in the
|
|
49
|
+
* bottom-right corner, level with the meta line, so the information area stays two lines tall. */
|
|
50
|
+
--data-card-gutters-position: absolute;
|
|
51
|
+
--data-card-gutters-inset: auto 8px 9px auto;
|
|
52
|
+
--data-card-gutters-margin: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* .page-fill is WorkSurfacePageStyles' own class (flex: 1; min-height: 0) - the min-height half
|
|
56
|
+
* is what lets ox-grist's internal scroller, not the page, be the thing that scrolls. */
|
|
57
|
+
|
|
58
|
+
/* The extended FAB every catalog uses for its one primary action - a pill with an icon and a
|
|
59
|
+
* label, not a bare circle, so a first-time visitor does not have to guess what the + makes. */
|
|
60
|
+
button[fab] {
|
|
61
|
+
position: absolute;
|
|
62
|
+
right: var(--spacing-large, 12px);
|
|
63
|
+
bottom: var(--spacing-large, 12px);
|
|
64
|
+
z-index: 10;
|
|
65
|
+
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
gap: 6px;
|
|
69
|
+
padding: 10px 18px 10px 14px;
|
|
70
|
+
font: var(--label-font, inherit);
|
|
71
|
+
font-size: 0.82rem;
|
|
72
|
+
font-weight: 600;
|
|
73
|
+
color: var(--md-sys-color-on-primary-container);
|
|
74
|
+
background-color: var(--md-sys-color-primary-container);
|
|
75
|
+
border: none;
|
|
76
|
+
border-radius: var(--md-sys-shape-corner-full, 999px);
|
|
77
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);
|
|
78
|
+
cursor: pointer;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
button[fab]:hover {
|
|
82
|
+
color: var(--md-sys-color-on-primary, #fff);
|
|
83
|
+
background-color: var(--md-sys-color-primary);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
button[fab] md-icon {
|
|
87
|
+
--md-icon-size: 20px;
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
//# sourceMappingURL=board-card-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-card-styles.js","sourceRoot":"","sources":["../../client/styles/board-card-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EjC,CAAA","sourcesContent":["import { css } from 'lit'\n\n/**\n * The one card look for every board catalog - board list, play list, template list.\n *\n * Each page hosts an `ox-grist` in CARD mode and sets the card by `--data-card-*` variables. The\n * three pages used to carry the same forty lines apiece (2026-09-23); a drift between them is\n * exactly the \"why does this page look different\" complaint this suite keeps hearing, so the\n * tokens now live once, here, and a page adds only what is its own (a FAB, a chip strip).\n *\n * Sized and typed after figure-ui's figure-list-page.ts, so board and figure read as one product.\n */\nexport const BoardCardStyles = css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n\n overflow: hidden;\n\n --data-card-min-width: 240px;\n --data-card-record-card-border-radius: 6px;\n --data-card-record-card-padding: 0;\n --data-card-thumbnail-aspect: 16 / 9;\n --data-card-thumbnail-padding: 0;\n --data-card-thumbnail-radius: 6px 6px 0 0;\n /* The card's two surfaces. The theme raises both in dark (--board-card-surface / -plate in\n * operato-board's board-accent.css): the light defaults - white card, light plate - become\n * black on black there, and a card that does not lift off its page is not a card. */\n --data-card-record-card-background-color: var(--board-card-surface, var(--md-sys-color-surface-container-lowest));\n --data-card-thumbnail-background: var(--board-card-plate, var(--md-sys-color-surface-container));\n /* The right margin clears the corner where the action icons sit (below). */\n --data-card-item-margin: 10px 52px 10px 12px;\n --data-card-item-name-font: 500 0.9rem/1.35 var(--theme-font, 'Roboto');\n --data-card-item-name-color: var(--md-sys-color-on-surface);\n --data-card-item-etc-font: normal 0.72rem/1.2 var(--theme-font, 'Roboto');\n /* The second line under the name is a side note, not a rival to it. */\n --data-card-item-disc-font: normal 0.72rem/1.2 var(--theme-font, 'Roboto');\n --data-card-item-disc-color: var(--md-sys-color-on-surface-variant, var(--md-sys-color-on-surface));\n /* A page's own FAB and the grid's scroll-to-top FAB share the bottom-right corner by default;\n * push the scroll button up so the two never collide. */\n --data-card-fab-position-vertical: 64px;\n /* record-card.ts reads these two with no fallback - unset means no hover feedback at all. */\n --data-card-record-card-border-hover: 1px solid var(--md-sys-color-outline-variant);\n --data-card-record-card-boxshadow-hover: 0 2px 8px rgba(0, 0, 0, 0.16);\n /* Card actions are secondary to the picture and the name: small, in the quiet outline tone. */\n --data-card-gutter-icon-size: 16px;\n --data-card-gutter-icon-color: var(--md-sys-color-outline);\n /* One or two small icons do not deserve a row of their own under the text: park them in the\n * bottom-right corner, level with the meta line, so the information area stays two lines tall. */\n --data-card-gutters-position: absolute;\n --data-card-gutters-inset: auto 8px 9px auto;\n --data-card-gutters-margin: 0;\n }\n\n /* .page-fill is WorkSurfacePageStyles' own class (flex: 1; min-height: 0) - the min-height half\n * is what lets ox-grist's internal scroller, not the page, be the thing that scrolls. */\n\n /* The extended FAB every catalog uses for its one primary action - a pill with an icon and a\n * label, not a bare circle, so a first-time visitor does not have to guess what the + makes. */\n button[fab] {\n position: absolute;\n right: var(--spacing-large, 12px);\n bottom: var(--spacing-large, 12px);\n z-index: 10;\n\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 18px 10px 14px;\n font: var(--label-font, inherit);\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--md-sys-color-on-primary-container);\n background-color: var(--md-sys-color-primary-container);\n border: none;\n border-radius: var(--md-sys-shape-corner-full, 999px);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);\n cursor: pointer;\n }\n\n button[fab]:hover {\n color: var(--md-sys-color-on-primary, #fff);\n background-color: var(--md-sys-color-primary);\n }\n\n button[fab] md-icon {\n --md-icon-size: 20px;\n }\n`\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
body {
|
|
2
|
-
--board-renderer-border: 1px solid
|
|
2
|
+
--board-renderer-border: 1px solid var(--md-sys-color-outline-variant);
|
|
3
3
|
--board-renderer-max-width: 120px;
|
|
4
4
|
--board-renderer-name-background-color: var(--secondary-text-color);
|
|
5
5
|
--board-renderer-name-font: normal 13px var(--theme-font);
|
|
@@ -8,7 +8,7 @@ body {
|
|
|
8
8
|
--board-renderer-font: bold 16px/25px var(--md-icon-font, 'Material Symbols Outlined');
|
|
9
9
|
|
|
10
10
|
/* list page style*/
|
|
11
|
-
--board-list-star-color:
|
|
11
|
+
--board-list-star-color: var(--md-sys-color-outline);
|
|
12
12
|
--board-list-star-active-color: var(--status-warning-color);
|
|
13
13
|
|
|
14
14
|
--card-list-rows-height: 180px;
|
|
@@ -28,30 +28,43 @@ body {
|
|
|
28
28
|
--card-list-create-label-color: var(--md-sys-color-secondary);
|
|
29
29
|
--card-list-create-input-font: normal 14px var(--theme-font);
|
|
30
30
|
--card-list-create-input-color: var();
|
|
31
|
-
--card-list-create-input-border: 1px solid
|
|
31
|
+
--card-list-create-input-border: 1px solid var(--md-sys-color-outline-variant);
|
|
32
32
|
--card-list-create-input-border-radius: var(--border-radius);
|
|
33
33
|
--card-list-create-input-padding: 2px 9px;
|
|
34
34
|
--card-list-create-margin: 0 0 7px 0;
|
|
35
35
|
|
|
36
|
-
/*
|
|
37
|
-
|
|
36
|
+
/*
|
|
37
|
+
* Modeller chrome - toolbar, palette rail, property panel - sits on the neutral surface scale.
|
|
38
|
+
* It used to wear the accent roles (secondary, secondary-container): fine as a warm grey in
|
|
39
|
+
* light, but in dark those roles are the *light* colours of the palette, so the toolbar became
|
|
40
|
+
* a tan bar and the panel a brown block on a black page (2026-09-24). The accent belongs to the
|
|
41
|
+
* selection and the pressed tool, not to the furniture.
|
|
42
|
+
*/
|
|
43
|
+
--edit-toolbar-background-color: var(--md-sys-color-surface-container-high);
|
|
38
44
|
--edit-toolbar-bigger-icon-size: 45px;
|
|
39
|
-
--edit-toolbar-bigger-icon-line: 1px solid
|
|
40
|
-
--component-toolbar-background-color: var(--md-sys-color-
|
|
41
|
-
|
|
42
|
-
--component-toolbar-
|
|
43
|
-
--component-
|
|
44
|
-
--component-
|
|
45
|
+
--edit-toolbar-bigger-icon-line: 1px solid var(--md-sys-color-outline-variant);
|
|
46
|
+
--component-toolbar-background-color: var(--md-sys-color-surface-container-low);
|
|
47
|
+
/* Wide enough for a glyph with a caption under it. */
|
|
48
|
+
--component-toolbar-icon-size: 64px;
|
|
49
|
+
--component-toolbar-border: 1px solid var(--md-sys-color-outline-variant);
|
|
50
|
+
--component-toolbar-icon-color: var(--md-sys-color-on-surface-variant);
|
|
51
|
+
--component-toolbar-active-background: var(--md-sys-color-secondary-container);
|
|
52
|
+
--component-toolbar-hover-background: var(--md-sys-color-surface-container-high);
|
|
53
|
+
--component-menu-title-background: var(--md-sys-color-surface-container-highest);
|
|
54
|
+
--component-menu-title-color: var(--md-sys-color-on-surface);
|
|
55
|
+
--component-menu-background-color: var(--md-sys-color-surface-container-high);
|
|
56
|
+
--component-detail-background-color: var(--md-sys-color-surface-container-high);
|
|
57
|
+
--component-menu-border-color: var(--md-sys-color-outline-variant);
|
|
45
58
|
--component-menu-title: bold 11px/16px var(--theme-font);
|
|
46
|
-
--component-menu-item-color: var(--md-sys-color-
|
|
47
|
-
--component-menu-item-hover-color: var(--md-sys-color-
|
|
59
|
+
--component-menu-item-color: var(--md-sys-color-on-surface-variant);
|
|
60
|
+
--component-menu-item-hover-color: var(--md-sys-color-on-surface);
|
|
48
61
|
--component-menu-item-icon-size: 20px;
|
|
49
|
-
--property-sidebar-background-color: var(--md-sys-color-
|
|
50
|
-
--property-sidebar-tab-icon-color: var(--md-sys-color-
|
|
51
|
-
--property-sidebar-fieldset-border: 1px solid
|
|
52
|
-
--property-sidebar-fieldset-label: normal
|
|
53
|
-
--property-sidebar-fieldset-legend-color: var(--md-sys-color-on-
|
|
54
|
-
--property-sidebar-fieldset-legend:
|
|
62
|
+
--property-sidebar-background-color: var(--md-sys-color-surface-container);
|
|
63
|
+
--property-sidebar-tab-icon-color: var(--md-sys-color-on-surface-variant);
|
|
64
|
+
--property-sidebar-fieldset-border: 1px solid var(--md-sys-color-outline-variant);
|
|
65
|
+
--property-sidebar-fieldset-label: normal 0.78rem/1.3 var(--theme-font);
|
|
66
|
+
--property-sidebar-fieldset-legend-color: var(--md-sys-color-on-surface);
|
|
67
|
+
--property-sidebar-fieldset-legend: 600 0.74rem/1.4 var(--theme-font);
|
|
55
68
|
/*
|
|
56
69
|
* 씬 아웃라인은 목록/트리라서 본문 성격이다. 강조 역할(secondary·primary)을 글자색과 칩 배경에
|
|
57
70
|
* 쓰고 있어서 패널 전체가 브랜드색으로 물들고, 다크에서는 그 역할들이 밝아져 더 튀었다.
|