@iyulab/house-style 0.1.4 โ 0.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 +23 -0
- package/README.md +8 -3
- package/package.json +19 -10
- package/styles/patterns.css +35 -29
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.0] - 2026-10-12
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- ๐ด**No size containment.** `.hs-detail` no longer establishes the `hs-detail` container, and the patterns no
|
|
8
|
+
longer use `@container` โ in Chromium a size container could stay collapsed after a commit that changed layout
|
|
9
|
+
elsewhere on the page. Each pattern now folds by its own width:
|
|
10
|
+
- `.hs-grid-2` / `.hs-grid-3` drop to one column below 480px of grid width; `.hs-grid-3` shows two columns between
|
|
11
|
+
480px and 728px (it went from three straight to one before). Empty trailing cells are kept, as before.
|
|
12
|
+
- `.hs-stats` stacks when the strip is narrower than 640px โ all stats at once, with the dividers turning
|
|
13
|
+
horizontal. Before, a strip outside a size container never stacked.
|
|
14
|
+
- `.hs-detail__cols` puts the side panel (340px) next to the main column when the columns are at least 960px wide.
|
|
15
|
+
If your CSS queried `@container hs-detail`, give that element `container: hs-detail / inline-size` yourself.
|
|
16
|
+
|
|
17
|
+
## [0.1.5] - 2026-10-09
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **The `@iyulab/modern-app` peer range now starts where the theme takes effect: `>=0.39.0`** (was `>=0.34.0`). The
|
|
22
|
+
theme sets `--app-sidebar-group-active-fg` so a sidebar group header that holds the current page stays readable on
|
|
23
|
+
the theme's light active surface; modern-app reads that property from 0.39.0. With 0.34โ0.38 the range allowed it,
|
|
24
|
+
and the header text was derived from the surface instead โ about 1.6:1 contrast in light mode.
|
|
25
|
+
|
|
3
26
|
## [0.1.4] - 2026-10-07
|
|
4
27
|
|
|
5
28
|
### Fixed
|
package/README.md
CHANGED
|
@@ -100,9 +100,14 @@ The live page is organized into sections:
|
|
|
100
100
|
## The reference app
|
|
101
101
|
|
|
102
102
|
The guide has a second half: a small but working line-of-business app, assembled only from
|
|
103
|
-
these libraries, at **https://iyulab.github.io/house-style/app/** (sign in with `demo` / `demo
|
|
104
|
-
โ the backend is mocked in the browser, there are
|
|
105
|
-
guide's sidebar under "Open the reference app".
|
|
103
|
+
these libraries, at **https://iyulab.github.io/house-style/app/** (sign in with `demo` / `demo`,
|
|
104
|
+
or `viewer` / `viewer` for a read-only account โ the backend is mocked in the browser, there are
|
|
105
|
+
no real accounts). It is reachable from the guide's sidebar under "Open the reference app".
|
|
106
|
+
|
|
107
|
+
The two accounts show permissions end to end: one permission decides both whether a link or
|
|
108
|
+
action is shown and whether its route lets the user in. The read-only account sees no create or
|
|
109
|
+
cancel actions, and opening the new-order screen by its address shows the blocked state
|
|
110
|
+
(`<u-empty-state variant="no-access">`) inside the shell.
|
|
106
111
|
|
|
107
112
|
Where the guide shows each pattern on its own, the app shows them load-bearing: a sidebar shell,
|
|
108
113
|
a list screen with filtering, selection and bulk actions, a master-detail order screen with an
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iyulab/house-style",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "The iyulab house theme: a CSS-only theme for @iyulab components โ tokens, component recipes, line-of-business layout patterns and a Tailwind CSS v4 preset โ plus the guide site that documents it.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -37,11 +37,19 @@
|
|
|
37
37
|
"typecheck": "tsc --noEmit",
|
|
38
38
|
"check:guide": "node scripts/check-guide.mjs",
|
|
39
39
|
"check:a11y": "node scripts/check-a11y.mjs",
|
|
40
|
+
"check:ladder": "node scripts/check-ladder.mjs",
|
|
40
41
|
"check:start-here": "node scripts/check-start-here.mjs",
|
|
41
42
|
"check:start-here:local": "node scripts/check-start-here.mjs --local",
|
|
42
43
|
"pretest": "node -e \"if(require('fs').existsSync('../../scripts/sibling-dist-check.js'))require('child_process').execFileSync('node',['../../scripts/sibling-dist-check.js'],{stdio:'inherit'})\"",
|
|
43
44
|
"test": "node --test \"tests/*.test.mjs\""
|
|
44
45
|
},
|
|
46
|
+
"iyulab": {
|
|
47
|
+
"upstreamChecks": {
|
|
48
|
+
"@iyulab/components": [
|
|
49
|
+
"check:ladder"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
45
53
|
"engines": {
|
|
46
54
|
"node": ">=20"
|
|
47
55
|
},
|
|
@@ -51,7 +59,7 @@
|
|
|
51
59
|
"peerDependencies": {
|
|
52
60
|
"@iyulab/components": "^2.0.0",
|
|
53
61
|
"@iyulab/flex-table": ">=0.41.0",
|
|
54
|
-
"@iyulab/modern-app": ">=0.
|
|
62
|
+
"@iyulab/modern-app": ">=0.39.0"
|
|
55
63
|
},
|
|
56
64
|
"peerDependenciesMeta": {
|
|
57
65
|
"@iyulab/flex-table": {
|
|
@@ -62,16 +70,17 @@
|
|
|
62
70
|
}
|
|
63
71
|
},
|
|
64
72
|
"devDependencies": {
|
|
65
|
-
"@iyulab/components": "^2.
|
|
66
|
-
"@iyulab/data-components": "^0.
|
|
67
|
-
"@iyulab/enterprise": "^0.
|
|
68
|
-
"@iyulab/
|
|
69
|
-
"@iyulab/
|
|
70
|
-
"@iyulab/
|
|
73
|
+
"@iyulab/components": "^2.20.0",
|
|
74
|
+
"@iyulab/data-components": "^0.47.0",
|
|
75
|
+
"@iyulab/enterprise": "^0.32.0",
|
|
76
|
+
"@iyulab/flex-table": "^0.64.0",
|
|
77
|
+
"@iyulab/modern-app": "^0.52.0",
|
|
78
|
+
"@iyulab/router": "^0.23.0",
|
|
79
|
+
"@iyulab/u-widgets": "^0.30.1",
|
|
71
80
|
"@lit/react": "^1.0.8",
|
|
72
81
|
"@types/node": "^26.1.1",
|
|
73
|
-
"@types/react": "^19.
|
|
74
|
-
"@types/react-dom": "^19.
|
|
82
|
+
"@types/react": "^19.3.0",
|
|
83
|
+
"@types/react-dom": "^19.3.0",
|
|
75
84
|
"axe-core": "^4.14.0",
|
|
76
85
|
"echarts": "^6.1.0",
|
|
77
86
|
"lit": "^3.3.2",
|
package/styles/patterns.css
CHANGED
|
@@ -147,21 +147,24 @@
|
|
|
147
147
|
|
|
148
148
|
/* โโ Stat strip โ the result's totals as cells, not a sentence โโโโโโโโโโโ
|
|
149
149
|
* 3โ5 cells: label โ value โ one supporting line. One hero value per screen at most. */
|
|
150
|
+
/* Side by side, or stacked when the strip is narrower than 640px โ all or nothing, never a ragged row.
|
|
151
|
+
* No size container: the threshold is each stat's flex-basis, calc((640px - 100%) * 999) โ negative
|
|
152
|
+
* (so 0) when wide, huge when narrow (the "Holy Albatross"). The dividers are the 1px gap showing the
|
|
153
|
+
* strip's border-coloured background, so they turn from vertical to horizontal on their own. */
|
|
150
154
|
.hs-stats {
|
|
151
|
-
display:
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
background: var(--u-
|
|
155
|
+
display: flex;
|
|
156
|
+
flex-wrap: wrap;
|
|
157
|
+
gap: 1px;
|
|
158
|
+
background: var(--u-border-color);
|
|
155
159
|
border: 1px solid var(--u-border-color);
|
|
156
160
|
border-radius: var(--u-radius-xl, 10px);
|
|
161
|
+
overflow: hidden;
|
|
157
162
|
}
|
|
158
163
|
.hs-stat {
|
|
164
|
+
flex: 1 1 calc((640px - 100%) * 999);
|
|
159
165
|
min-width: 0;
|
|
160
166
|
padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
.hs-stat:first-child {
|
|
164
|
-
border-inline-start: 0;
|
|
167
|
+
background: var(--u-bg-color);
|
|
165
168
|
}
|
|
166
169
|
.hs-stat__label {
|
|
167
170
|
font-size: var(--u-text-label-size, 12px);
|
|
@@ -199,11 +202,6 @@
|
|
|
199
202
|
.hs-stat--warning .hs-stat__value { color: var(--u-warning-color-strong); }
|
|
200
203
|
.hs-stat--danger .hs-stat__value { color: var(--u-danger-color-strong); }
|
|
201
204
|
.hs-stat--success .hs-stat__value { color: var(--u-success-color-strong); }
|
|
202
|
-
@container (max-width: 640px) {
|
|
203
|
-
.hs-stats { grid-auto-flow: row; }
|
|
204
|
-
.hs-stat { border-inline-start: 0; border-top: 1px solid var(--u-border-color); }
|
|
205
|
-
.hs-stat:first-child { border-top: 0; }
|
|
206
|
-
}
|
|
207
205
|
|
|
208
206
|
/* โโ Table card โ toolbar ยท table ยท pager on one surface โโโโโโโโโโโโโโโโ */
|
|
209
207
|
.hs-table-card {
|
|
@@ -381,18 +379,21 @@ a.hs-card:hover,
|
|
|
381
379
|
.hs-dl > dt { color: var(--u-txt-color-weak); }
|
|
382
380
|
.hs-dl > dd { margin: 0; min-width: 0; }
|
|
383
381
|
|
|
384
|
-
/* Two-column detail: main column plus a 340px side panel once the
|
|
385
|
-
.hs-
|
|
386
|
-
container: hs-detail / inline-size;
|
|
387
|
-
}
|
|
382
|
+
/* Two-column detail: main column plus a 340px side panel once the columns are 960px wide, one column
|
|
383
|
+
* below that. No size container โ the threshold is each column's flex-basis (see .hs-stats). */
|
|
388
384
|
.hs-detail__cols {
|
|
389
|
-
display:
|
|
390
|
-
|
|
385
|
+
display: flex;
|
|
386
|
+
flex-wrap: wrap;
|
|
391
387
|
gap: var(--u-space-lg, 16px);
|
|
392
|
-
align-items: start;
|
|
388
|
+
align-items: flex-start;
|
|
389
|
+
}
|
|
390
|
+
.hs-detail__cols > * {
|
|
391
|
+
flex: 1 1 calc((960px - 100%) * 999);
|
|
392
|
+
min-width: 0;
|
|
393
393
|
}
|
|
394
|
-
|
|
395
|
-
|
|
394
|
+
.hs-detail__cols > :last-child:not(:first-child) {
|
|
395
|
+
flex-grow: 0;
|
|
396
|
+
min-width: min(340px, 100%);
|
|
396
397
|
}
|
|
397
398
|
.hs-grid-cards {
|
|
398
399
|
display: grid;
|
|
@@ -493,18 +494,23 @@ a.hs-card:hover,
|
|
|
493
494
|
--u-input-display: block;
|
|
494
495
|
--u-select-display: block;
|
|
495
496
|
}
|
|
496
|
-
/* Two or three columns โ never four or more in a row.
|
|
497
|
+
/* Two or three columns โ never four or more in a row. A column is at least half of a 480px row, so
|
|
498
|
+
* both grids drop to one column below 480px and .hs-grid-3 shows two between 480px and 728px. No size
|
|
499
|
+
* container: auto-fill against the grid's own width, capped at the column count. */
|
|
497
500
|
.hs-grid-2,
|
|
498
501
|
.hs-grid-3 {
|
|
502
|
+
--hs-grid-gap: var(--u-space-lg, 16px);
|
|
503
|
+
--hs-grid-min: calc((480px - var(--hs-grid-gap)) / 2);
|
|
499
504
|
display: grid;
|
|
500
|
-
gap: var(--u-space-md, 12px) var(--
|
|
505
|
+
gap: var(--u-space-md, 12px) var(--hs-grid-gap);
|
|
501
506
|
}
|
|
502
|
-
.hs-grid-2 {
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
+
.hs-grid-2 {
|
|
508
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, max(var(--hs-grid-min), (100% - var(--hs-grid-gap)) / 2)), 1fr));
|
|
509
|
+
}
|
|
510
|
+
.hs-grid-3 {
|
|
511
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, max(var(--hs-grid-min), (100% - 2 * var(--hs-grid-gap)) / 3)), 1fr));
|
|
507
512
|
}
|
|
513
|
+
.hs-span-all { grid-column: 1 / -1; }
|
|
508
514
|
|
|
509
515
|
/* โโ Side sheet footer โ change summary on the left, Cancel / Save on the right โโ */
|
|
510
516
|
.hs-sheet-footer {
|