@iyulab/house-style 0.6.1 → 0.7.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 +17 -0
- package/package.json +2 -2
- package/styles/components.css +2 -3
- package/styles/patterns.css +1 -159
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.0] - 2026-10-16
|
|
4
|
+
|
|
5
|
+
### Removed
|
|
6
|
+
|
|
7
|
+
- The patterns deprecated in 0.6.0, each replaced by a component:
|
|
8
|
+
- `.hs-filter-bar` (`__search` · `__end`) and `.hs-chips` → `u-list-page` `slot="filters"` / `slot="applied"` (`@iyulab/enterprise`).
|
|
9
|
+
- `.hs-table-card` and `.hs-pager` → `<u-list-page appearance="card">` with `u-pagination` in `slot="pager"`.
|
|
10
|
+
- `.hs-table-toolbar` (`--selected` · `__title` · `__actions`) → `<u-action-bar slot="toolbar">` with the title in `slot="summary"`.
|
|
11
|
+
- `.hs-card` (`__head` · `__title` · `__link`) → `<u-group-box title>` (`@iyulab/modern-app`) or `<u-card>` (`@iyulab/components`).
|
|
12
|
+
- `.hs-field` (`__label` · `__required` · `__help` · `__error`) → `<u-field label>` (`@iyulab/components`).
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- `u-list-page` filters keep the page’s bottom alignment. The house rule set `align-items: center` on the filters row, so
|
|
17
|
+
a button next to a search field with a visible label stood level with the middle of «label + field» — about 10px above
|
|
18
|
+
the field.
|
|
19
|
+
|
|
3
20
|
## [0.6.1] - 2026-10-14
|
|
4
21
|
|
|
5
22
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iyulab/house-style",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.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": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@iyulab/flex-table": "^0.67.0",
|
|
78
78
|
"@iyulab/modern-app": "^0.54.0",
|
|
79
79
|
"@iyulab/router": "^0.24.0",
|
|
80
|
-
"@iyulab/u-widgets": "^0.
|
|
80
|
+
"@iyulab/u-widgets": "^0.34.0",
|
|
81
81
|
"@lit/react": "^1.0.8",
|
|
82
82
|
"@types/node": "^26.1.1",
|
|
83
83
|
"@types/react": "^19.3.0",
|
package/styles/components.css
CHANGED
|
@@ -172,11 +172,10 @@ u-field[invalid]::part(footer) {
|
|
|
172
172
|
color: var(--u-danger-color-strong);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
/* ── List page (`@iyulab/enterprise`) — the list screen: filters on one
|
|
176
|
-
* that takes 240–360px, applied chips below, and with `appearance="card"` toolbar · table · pager on one flat
|
|
175
|
+
/* ── List page (`@iyulab/enterprise`) — the list screen: filters on one row with an 8px gap, bottom-aligned (the page’s
|
|
176
|
+
* own alignment — a labelled field’s input stays level with the buttons beside it), a search field that takes 240–360px, applied chips below, and with `appearance="card"` toolbar · table · pager on one flat
|
|
177
177
|
* surface (the toolbar row draws its own 48px band, a quiet pager line). ── */
|
|
178
178
|
u-list-page::part(filters) {
|
|
179
|
-
align-items: center;
|
|
180
179
|
gap: var(--u-space-sm, 8px);
|
|
181
180
|
}
|
|
182
181
|
u-list-page > u-input[slot='filters'][type='search'] {
|
package/styles/patterns.css
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Prefix `hs-`. Everything sits in `@layer iyu.house`; an application rule always wins.
|
|
11
11
|
*
|
|
12
12
|
* Screen recipes (the guide shows each one):
|
|
13
|
-
* list = u-page-header →
|
|
13
|
+
* list = u-page-header → u-list-page (filters · applied · appearance="card": toolbar · table · pager)
|
|
14
14
|
* detail = side sheet: head (id · status · one primary action) → steps → u-info-section strip → tabs → cards
|
|
15
15
|
* edit = side sheet with .hs-fieldset sections and a pinned u-action-bar (summary slot)
|
|
16
16
|
*
|
|
@@ -35,93 +35,6 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
/* ── Filter bar — search · up to three key filters · "Filters" panel · applied chips ──
|
|
39
|
-
* @deprecated Use `u-list-page` (`@iyulab/enterprise` 0.33): the search and filters in `slot="filters"` (the house
|
|
40
|
-
* gives a search field 240–360px and centres the row — `components.css`), the applied chips (`u-chip removable`) in
|
|
41
|
-
* `slot="applied"`, which folds when empty. `__end` → `style="margin-inline-start: auto"` on the last filter.
|
|
42
|
-
* `.hs-chips` goes with it. remove: 0.7.0 */
|
|
43
|
-
.hs-filter-bar {
|
|
44
|
-
display: flex;
|
|
45
|
-
flex-wrap: wrap;
|
|
46
|
-
align-items: center;
|
|
47
|
-
gap: var(--u-space-sm, 8px);
|
|
48
|
-
}
|
|
49
|
-
.hs-filter-bar__search {
|
|
50
|
-
flex: 0 1 360px;
|
|
51
|
-
min-width: 240px;
|
|
52
|
-
}
|
|
53
|
-
.hs-filter-bar__end {
|
|
54
|
-
margin-inline-start: auto;
|
|
55
|
-
}
|
|
56
|
-
.hs-chips {
|
|
57
|
-
display: flex;
|
|
58
|
-
flex-wrap: wrap;
|
|
59
|
-
align-items: center;
|
|
60
|
-
gap: var(--u-space-xs, 6px);
|
|
61
|
-
}
|
|
62
|
-
.hs-chips:empty {
|
|
63
|
-
display: none;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/* ── Table card — toolbar · table · pager on one surface ────────────────
|
|
68
|
-
* @deprecated `.hs-table-card` and `.hs-pager`: use `<u-list-page appearance="card">` (`@iyulab/enterprise` 0.33) —
|
|
69
|
-
* the toolbar, view and pager regions on one surface with lines between them, and `u-pagination` in `slot="pager"`.
|
|
70
|
-
* @deprecated `.hs-table-toolbar` (`--selected` · `__title` · `__actions`): on a card list page use
|
|
71
|
-
* `<u-action-bar slot="toolbar">` with the title in `slot="summary"` — the house recipe gives it the 48px band and the
|
|
72
|
-
* selected tint follows the page's `:state(selected)` (`@iyulab/enterprise` 0.34); `u-rich-table` styles its own toolbar
|
|
73
|
-
* (`@iyulab/data-components` 0.50). remove: 0.7.0 */
|
|
74
|
-
.hs-table-card {
|
|
75
|
-
background: var(--u-bg-color);
|
|
76
|
-
border: 1px solid var(--u-border-color);
|
|
77
|
-
border-radius: var(--u-radius-xl, 10px);
|
|
78
|
-
overflow: hidden;
|
|
79
|
-
min-width: 0;
|
|
80
|
-
}
|
|
81
|
-
.hs-table-card > flex-table {
|
|
82
|
-
border: 0;
|
|
83
|
-
}
|
|
84
|
-
.hs-table-toolbar {
|
|
85
|
-
display: flex;
|
|
86
|
-
align-items: center;
|
|
87
|
-
justify-content: space-between;
|
|
88
|
-
gap: var(--u-space-sm, 8px);
|
|
89
|
-
min-height: 48px;
|
|
90
|
-
padding: var(--u-space-sm, 8px) var(--u-space-md, 12px);
|
|
91
|
-
border-bottom: 1px solid var(--u-border-color);
|
|
92
|
-
flex-wrap: wrap;
|
|
93
|
-
}
|
|
94
|
-
/* With a selection the toolbar becomes the bulk-action bar. */
|
|
95
|
-
.hs-table-toolbar[data-selected],
|
|
96
|
-
.hs-table-toolbar--selected {
|
|
97
|
-
background: var(--u-primary-bg-color);
|
|
98
|
-
}
|
|
99
|
-
/* In a `u-list-page appearance="card"` toolbar the region draws the line below. */
|
|
100
|
-
u-list-page > .hs-table-toolbar {
|
|
101
|
-
border-bottom: 0;
|
|
102
|
-
}
|
|
103
|
-
.hs-table-toolbar__title {
|
|
104
|
-
font-size: var(--hs-text-dense-size, 13px);
|
|
105
|
-
font-weight: 600;
|
|
106
|
-
}
|
|
107
|
-
.hs-table-toolbar__actions {
|
|
108
|
-
display: flex;
|
|
109
|
-
align-items: center;
|
|
110
|
-
gap: var(--u-space-sm, 8px);
|
|
111
|
-
flex-wrap: wrap;
|
|
112
|
-
}
|
|
113
|
-
.hs-pager {
|
|
114
|
-
display: flex;
|
|
115
|
-
align-items: center;
|
|
116
|
-
justify-content: space-between;
|
|
117
|
-
gap: var(--u-space-sm, 8px);
|
|
118
|
-
padding: var(--u-space-sm, 8px) var(--u-space-md, 12px);
|
|
119
|
-
border-top: 1px solid var(--u-border-color);
|
|
120
|
-
font-size: var(--u-text-label-size, 12px);
|
|
121
|
-
color: var(--u-txt-color-weak);
|
|
122
|
-
font-variant-numeric: tabular-nums;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
38
|
/* ── Plain table — for small server-rendered tables that do not need a grid ── */
|
|
126
39
|
.hs-table {
|
|
127
40
|
width: 100%;
|
|
@@ -208,38 +121,6 @@ tr[aria-selected='true'] .hs-row-actions {
|
|
|
208
121
|
.hs-row-actions { display: none; }
|
|
209
122
|
}
|
|
210
123
|
|
|
211
|
-
/* ── Card — a titled surface for detail panels and dashboards ───────────
|
|
212
|
-
* @deprecated `.hs-card` (`__head` · `__title` · `__link`): a titled card is `<u-group-box title>` (`@iyulab/modern-app`)
|
|
213
|
-
* with the link in `slot="actions"`; an untitled surface is `<u-card>` (`@iyulab/components`), or `<u-group-box flush>`
|
|
214
|
-
* when its content runs to the edge and holds a sticky footer (`u-card` clips its overflow). remove: 0.7.0 */
|
|
215
|
-
.hs-card {
|
|
216
|
-
background: var(--u-bg-color);
|
|
217
|
-
border: 1px solid var(--u-border-color);
|
|
218
|
-
border-radius: var(--u-radius-xl, 10px);
|
|
219
|
-
padding: var(--u-space-lg, 16px);
|
|
220
|
-
min-width: 0;
|
|
221
|
-
}
|
|
222
|
-
.hs-card__head {
|
|
223
|
-
display: flex;
|
|
224
|
-
align-items: center;
|
|
225
|
-
justify-content: space-between;
|
|
226
|
-
gap: var(--u-space-sm, 8px);
|
|
227
|
-
margin-bottom: var(--u-space-md, 12px);
|
|
228
|
-
}
|
|
229
|
-
.hs-card__title {
|
|
230
|
-
margin: 0;
|
|
231
|
-
font-size: var(--u-text-subtitle-size, 15px);
|
|
232
|
-
line-height: 22px;
|
|
233
|
-
font-weight: 600;
|
|
234
|
-
}
|
|
235
|
-
.hs-card__link {
|
|
236
|
-
font-size: var(--u-text-label-size, 12px);
|
|
237
|
-
font-weight: 500;
|
|
238
|
-
color: var(--u-link-txt-color);
|
|
239
|
-
text-decoration: none;
|
|
240
|
-
}
|
|
241
|
-
.hs-card__link:hover { text-decoration: underline; }
|
|
242
|
-
|
|
243
124
|
/* Description list — label / value pairs inside a card. */
|
|
244
125
|
.hs-dl {
|
|
245
126
|
display: grid;
|
|
@@ -305,45 +186,6 @@ tr[aria-selected='true'] .hs-row-actions {
|
|
|
305
186
|
clear: both;
|
|
306
187
|
margin-top: 0;
|
|
307
188
|
}
|
|
308
|
-
/* @deprecated Use `<u-field label>` (`@iyulab/components` 2.26) — `label`, `required`, `description` for the help line
|
|
309
|
-
and `invalid` + `validation-message` for the error; it names the control it wraps and fills the cell. The house
|
|
310
|
-
draws it this way (`components.css`: 40px controls, label and help steps). `.hs-field__label` · `__required` ·
|
|
311
|
-
`__help` · `__error` go with it. remove: 0.7.0 */
|
|
312
|
-
.hs-field {
|
|
313
|
-
display: grid;
|
|
314
|
-
gap: 6px;
|
|
315
|
-
align-content: start;
|
|
316
|
-
min-width: 0;
|
|
317
|
-
}
|
|
318
|
-
.hs-field__label {
|
|
319
|
-
font-size: var(--u-text-label-size, 12px);
|
|
320
|
-
line-height: 16px;
|
|
321
|
-
font-weight: 500;
|
|
322
|
-
color: var(--u-txt-color-weak);
|
|
323
|
-
}
|
|
324
|
-
.hs-field__required {
|
|
325
|
-
margin-inline-start: 2px;
|
|
326
|
-
color: var(--u-danger-color-strong);
|
|
327
|
-
}
|
|
328
|
-
.hs-field__help {
|
|
329
|
-
font-size: var(--u-text-caption-size, 12px);
|
|
330
|
-
line-height: 18px;
|
|
331
|
-
color: var(--u-txt-color-weaker);
|
|
332
|
-
}
|
|
333
|
-
.hs-field__error {
|
|
334
|
-
font-size: var(--u-text-caption-size, 12px);
|
|
335
|
-
line-height: 18px;
|
|
336
|
-
color: var(--u-danger-color-strong);
|
|
337
|
-
}
|
|
338
|
-
/* Form fields are 40px (the side-sheet and edit-form size); toolbars keep 32px. */
|
|
339
|
-
.hs-field {
|
|
340
|
-
--u-field-padding-block: calc(8.5em / 14); /* 14px: 21 + 17 + 2 = 40 — and with the density */
|
|
341
|
-
}
|
|
342
|
-
.hs-field :is(u-input, u-select, u-textarea, u-date-picker, u-date-range-picker) {
|
|
343
|
-
width: 100%;
|
|
344
|
-
--u-input-display: block;
|
|
345
|
-
--u-select-display: block;
|
|
346
|
-
}
|
|
347
189
|
/* Two or three columns — never four or more in a row. A column is at least half of a 480px row, so
|
|
348
190
|
* both grids drop to one column below 480px and .hs-grid-3 shows two between 480px and 728px. No size
|
|
349
191
|
* container: auto-fill against the grid's own width, capped at the column count. */
|