@schukai/monster 4.150.3 → 4.150.4
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/package.json +1 -1
- package/source/components/datatable/style/datatable.pcss +2 -2
- package/source/components/datatable/stylesheet/datatable.mjs +1 -1
- package/source/components/form/sheet.mjs +13 -8
- package/test/cases/components/datatable/mobile-layout.mjs +18 -0
- package/test/cases/components/form/sheet.mjs +40 -0
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"author":"Volker Schukai","dependencies":{"@floating-ui/dom":"^1.7.6"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"4.150.
|
|
1
|
+
{"author":"Volker Schukai","dependencies":{"@floating-ui/dom":"^1.7.6"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"4.150.4"}
|
|
@@ -560,9 +560,9 @@ monster-state[data-monster-role=empty-without-action]::part(action) {
|
|
|
560
560
|
& :is(monster-button-bar, .monster-button-group) {
|
|
561
561
|
--monster-button-bar-gap: 0;
|
|
562
562
|
--monster-button-bar-item-spacing: 0;
|
|
563
|
-
--monster-control-bar-button-inline-size:
|
|
563
|
+
--monster-control-bar-button-inline-size: max-content;
|
|
564
564
|
--monster-control-bar-height: max(2.75rem, 44px);
|
|
565
|
-
--monster-control-bar-item-flex:
|
|
565
|
+
--monster-control-bar-item-flex: 0 0 auto;
|
|
566
566
|
--monster-control-bar-slot-flex: 1 1 auto;
|
|
567
567
|
box-sizing: border-box;
|
|
568
568
|
display: flex;
|
|
@@ -99,7 +99,7 @@ try {
|
|
|
99
99
|
--monster-theme-control-bg-color,var(--monster-bg-color-primary-1)
|
|
100
100
|
);border:0;border-bottom:1px solid var(--monster-theme-control-border-color);border-left:1px solid var(--monster-theme-control-border-color);border-right:1px solid var(--monster-theme-control-border-color);display:grid;gap:.35rem .75rem;grid-template-columns:minmax(5.5rem,.35fr) minmax(0,1fr);justify-content:stretch;min-height:2.75rem;overflow:visible;padding:.625rem .75rem;white-space:normal;word-break:break-word}.center:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div),.end:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div),.start:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){justify-content:stretch}[data-monster-datatable-row-start]:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){border-radius:var(--monster-theme-control-border-radius) var(--monster-theme-control-border-radius) 0 0;border-top:1px solid var(--monster-theme-control-border-color);margin-top:.75rem}[data-monster-datatable-row-end]:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){border-radius:0 0 var(--monster-theme-control-border-radius) var(--monster-theme-control-border-radius);margin-bottom:.75rem}[data-monster-datatable-row-start][data-monster-datatable-row-end]:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){border-radius:var(--monster-theme-control-border-radius)}[data-monster-features~=select]:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){align-items:center;background-color:var(
|
|
101
101
|
--monster-theme-surface-subtle,var(--monster-bg-color-primary-2)
|
|
102
|
-
);display:flex;min-height:max(2.75rem,var(--monster-control-min-block-size,44px))}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div):has(:is(monster-button,monster-button-bar,monster-action-button,monster-select,monster-filter-select,select[multiple])){grid-template-columns:minmax(0,1fr)}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div) :is(monster-select,monster-filter-select,select[multiple]){box-sizing:border-box;display:block;max-width:100%;min-width:0;width:100%}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div) :is(monster-button-bar,.monster-button-group){--monster-button-bar-gap:0;--monster-button-bar-item-spacing:0;--monster-control-bar-button-inline-size:
|
|
102
|
+
);display:flex;min-height:max(2.75rem,var(--monster-control-min-block-size,44px))}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div):has(:is(monster-button,monster-button-bar,monster-action-button,monster-select,monster-filter-select,select[multiple])){grid-template-columns:minmax(0,1fr)}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div) :is(monster-select,monster-filter-select,select[multiple]){box-sizing:border-box;display:block;max-width:100%;min-width:0;width:100%}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div) :is(monster-button-bar,.monster-button-group){--monster-button-bar-gap:0;--monster-button-bar-item-spacing:0;--monster-control-bar-button-inline-size:max-content;--monster-control-bar-height:max(2.75rem,44px);--monster-control-bar-item-flex:0 0 auto;--monster-control-bar-slot-flex:1 1 auto;box-sizing:border-box;display:flex;flex-wrap:wrap;gap:0;max-width:100%;min-width:0;width:100%}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div) :is(monster-button,monster-action-button,button,[role=button]){box-sizing:border-box;flex:1 1 8rem;min-height:max(2.75rem,var(--monster-control-min-block-size,44px));min-width:0}:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div)>:is(monster-button,monster-action-button){display:block;width:100%}.selected:is(:is(.small[data-monster-role=control] [data-monster-role=datatable])>div){background-color:var(
|
|
103
103
|
--monster-theme-accent-subtle,var(--monster-bg-color-selection-2)
|
|
104
104
|
);color:var(
|
|
105
105
|
--monster-theme-accent,var(--monster-color-selection-2)
|
|
@@ -30,6 +30,7 @@ import { isArray, isObject, isString } from "../../types/is.mjs";
|
|
|
30
30
|
import { ID } from "../../types/id.mjs";
|
|
31
31
|
import { clone } from "../../util/clone.mjs";
|
|
32
32
|
|
|
33
|
+
import "./button.mjs";
|
|
33
34
|
import { SheetStyleSheet } from "./stylesheet/sheet.mjs";
|
|
34
35
|
|
|
35
36
|
export { Sheet };
|
|
@@ -391,13 +392,17 @@ function syncToolbarState() {
|
|
|
391
392
|
|
|
392
393
|
this[addRowButtonSymbol].hidden = !addRow;
|
|
393
394
|
this[addColumnButtonSymbol].hidden = !addCol;
|
|
394
|
-
this[addRowButtonSymbol].
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
395
|
+
this[addRowButtonSymbol].setOption(
|
|
396
|
+
"disabled",
|
|
397
|
+
this.getOption("disabled", false) || !addRow,
|
|
398
|
+
);
|
|
399
|
+
this[addColumnButtonSymbol].setOption(
|
|
400
|
+
"disabled",
|
|
401
|
+
this.getOption("disabled", false) || !addCol,
|
|
402
|
+
);
|
|
398
403
|
|
|
399
|
-
this[addRowButtonSymbol].
|
|
400
|
-
this[addColumnButtonSymbol].
|
|
404
|
+
this[addRowButtonSymbol].setOption("classes.button", buttonClass);
|
|
405
|
+
this[addColumnButtonSymbol].setOption("classes.button", buttonClass);
|
|
401
406
|
if (isString(labels.addRow)) {
|
|
402
407
|
this[addRowButtonSymbol].textContent = labels.addRow;
|
|
403
408
|
}
|
|
@@ -2427,8 +2432,8 @@ function getTemplate() {
|
|
|
2427
2432
|
return `
|
|
2428
2433
|
<div data-monster-role="control" part="control">
|
|
2429
2434
|
<div data-monster-role="toolbar" part="toolbar">
|
|
2430
|
-
<button
|
|
2431
|
-
<button
|
|
2435
|
+
<monster-button data-monster-role="add-row" part="add-row"></monster-button>
|
|
2436
|
+
<monster-button data-monster-role="add-column" part="add-column"></monster-button>
|
|
2432
2437
|
</div>
|
|
2433
2438
|
<div data-monster-role="grid-wrapper" part="grid-wrapper">
|
|
2434
2439
|
<div data-monster-role="grid" part="grid"></div>
|
|
@@ -80,6 +80,24 @@ describe("Datatable mobile layout", () => {
|
|
|
80
80
|
expect(generated).not.to.include("--monster-button-bar-gap:0.5rem");
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
+
it("measures responsive row actions at their compact width", () => {
|
|
84
|
+
expect(source).to.include(
|
|
85
|
+
"--monster-control-bar-button-inline-size: max-content",
|
|
86
|
+
);
|
|
87
|
+
expect(source).to.include(
|
|
88
|
+
"--monster-control-bar-item-flex: 0 0 auto",
|
|
89
|
+
);
|
|
90
|
+
expect(source).not.to.include(
|
|
91
|
+
"--monster-control-bar-button-inline-size: 100%",
|
|
92
|
+
);
|
|
93
|
+
expect(generated).to.include(
|
|
94
|
+
"--monster-control-bar-button-inline-size:max-content",
|
|
95
|
+
);
|
|
96
|
+
expect(generated).to.include(
|
|
97
|
+
"--monster-control-bar-item-flex:0 0 auto",
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
|
|
83
101
|
it("keeps icon-only row overflow menus compact", () => {
|
|
84
102
|
expect(source).to.include("& > monster-button-bar");
|
|
85
103
|
expect(source).to.include("--monster-action-menu-min-inline-size: auto");
|
|
@@ -27,6 +27,46 @@ describe("Sheet", function () {
|
|
|
27
27
|
expect(document.createElement("monster-sheet")).to.be.instanceof(Sheet);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
+
it("should use Monster controls for visible toolbar actions", async function () {
|
|
31
|
+
const sheet = document.createElement("monster-sheet");
|
|
32
|
+
sheet.setOptions({
|
|
33
|
+
classes: { button: "monster-button-outline-secondary" },
|
|
34
|
+
features: { addRows: true, addColumns: true },
|
|
35
|
+
labels: { addRow: "Append row", addColumn: "Append column" },
|
|
36
|
+
});
|
|
37
|
+
document.getElementById("mocks").appendChild(sheet);
|
|
38
|
+
|
|
39
|
+
const addRow = sheet.shadowRoot.querySelector(
|
|
40
|
+
'[data-monster-role="add-row"]',
|
|
41
|
+
);
|
|
42
|
+
const addColumn = sheet.shadowRoot.querySelector(
|
|
43
|
+
'[data-monster-role="add-column"]',
|
|
44
|
+
);
|
|
45
|
+
const menuItems = sheet.shadowRoot.querySelectorAll(
|
|
46
|
+
'[data-monster-role="context-menu"] [role="menuitem"]',
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
expect(addRow.tagName).to.equal("MONSTER-BUTTON");
|
|
50
|
+
expect(addColumn.tagName).to.equal("MONSTER-BUTTON");
|
|
51
|
+
expect(addRow.textContent).to.equal("Append row");
|
|
52
|
+
expect(addColumn.textContent).to.equal("Append column");
|
|
53
|
+
expect(addRow.getOption("classes.button")).to.equal(
|
|
54
|
+
"monster-button-outline-secondary",
|
|
55
|
+
);
|
|
56
|
+
expect(addRow.getOption("disabled")).to.equal(false);
|
|
57
|
+
expect(Array.from(menuItems).every((item) => item.tagName === "BUTTON")).to
|
|
58
|
+
.equal(true);
|
|
59
|
+
|
|
60
|
+
const rowCount = sheet.value.rows.length;
|
|
61
|
+
addRow.click();
|
|
62
|
+
expect(sheet.value.rows).to.have.length(rowCount + 1);
|
|
63
|
+
|
|
64
|
+
sheet.setOption("disabled", true);
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
66
|
+
expect(addRow.getOption("disabled")).to.equal(true);
|
|
67
|
+
expect(addColumn.getOption("disabled")).to.equal(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
30
70
|
it("should name editable cells from their row and column labels", function () {
|
|
31
71
|
const sheet = document.createElement("monster-sheet");
|
|
32
72
|
sheet.setOptions({
|