@iyulab/house-style 0.5.0 → 0.6.1

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 CHANGED
@@ -1,5 +1,75 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.1] - 2026-10-14
4
+
5
+ ### Fixed
6
+
7
+ - Requires `@iyulab/modern-app` 0.54.0 or later when it is installed (optional peer range `>=0.54.0`, was `>=0.39.0`).
8
+ The 0.6.0 table toolbar recipe pads the card list page's `u-action-bar` through `--action-bar-padding-inline`, which
9
+ `u-action-bar` reads from 0.54.0 — with an older modern-app the toolbar row lost its side padding without a
10
+ warning.
11
+
12
+ ### Guide
13
+
14
+ - The reference app's orders list is a card list page: the toolbar says how many orders are selected and turns into
15
+ the bulk-action bar while they are, and the table draws no selection bar of its own (`hide-toolbar`,
16
+ `@iyulab/data-components` 0.51). «Cancel selected» acts only on the table view's selection.
17
+
18
+ ## [0.6.0] - 2026-10-14
19
+
20
+ ### Added
21
+
22
+ - **`u-field` as the house form row** — 40px controls (the edit-form size, with the density), the label at the label
23
+ step in the weak colour, the help line in the weaker colour and the error in the danger colour. Needs
24
+ `@iyulab/components` 2.26 (the `header` · `label` · `footer` parts).
25
+
26
+ - **`u-list-page` as the house list screen** — the filters row centred with an 8px gap, a search field
27
+ (`type="search"`) at 240–360px, and with `appearance="card"` a flat surface (10px radius) with a 48px toolbar and a
28
+ quiet pager line (12px, weak, tabular). Needs `@iyulab/enterprise` 0.33.
29
+
30
+ - **The table toolbar as the bulk-action bar** — a 48px band above the rows; while rows are selected it takes the
31
+ primary tint, and its title (the count, or what the list holds) sits at the dense step, semibold, in ink. On a card
32
+ list page the toolbar row is a `u-action-bar` with the title in `slot="summary"`, and the tint follows the page's
33
+ `:state(selected)` (`@iyulab/enterprise` 0.34.1); `u-rich-table` gets the same look on its own toolbar and selection
34
+ bar (`@iyulab/data-components` 0.50).
35
+
36
+ ### Changed
37
+
38
+ - Requires `@iyulab/components` 2.26.0 or later (peer range `^2.26.0`) — the `u-field` recipe styles its `header`,
39
+ `label` and `footer` parts.
40
+
41
+ ### Deprecated
42
+
43
+ - **`.hs-filter-bar` (and `__search` · `__end`) and `.hs-chips` — use `u-list-page`** (`@iyulab/enterprise` 0.33): the
44
+ search and filters in `slot="filters"`, the applied chips in `slot="applied"` (it folds when empty), `__end` →
45
+ `margin-inline-start: auto` on the last filter. Removed in 0.7.0.
46
+ - **`.hs-table-card` and `.hs-pager` — use `<u-list-page appearance="card">`** with `u-pagination` in `slot="pager"`.
47
+ Removed in 0.7.0.
48
+ - **`.hs-table-toolbar` (`--selected` · `__title` · `__actions`) — use `<u-action-bar slot="toolbar">`** on a card list
49
+ page, the title in `slot="summary"`; the selected tint follows the page's `:state(selected)`. `u-rich-table` styles
50
+ its own toolbar. Removed in 0.7.0.
51
+ - **`.hs-field` and its parts — use `<u-field label>`** (`@iyulab/components` 2.26): `__label` → `label`, `__required`
52
+ → `required`, `__help` → `description`, `__error` → `invalid` with `validation-message`. The component also names the
53
+ control it wraps (the class pattern relied on a wrapping `<label>`). Removed in 0.7.0.
54
+ - **`.hs-card` (`__head` · `__title` · `__link`) — a titled card is `<u-group-box title>`** (`@iyulab/modern-app`) with
55
+ the link in `slot="actions"`; an untitled surface is `<u-card>`, or `<u-group-box flush>` when the content runs to
56
+ the edge and holds a sticky footer (`u-card` clips its overflow). Removed in 0.7.0.
57
+
58
+ ### Removed
59
+
60
+ - The 0.5.0 deprecations: `.hs-callout` and its parts (use `<u-alert inline open>`), `.hs-views` / `.hs-views__tab`
61
+ and `.hs-count` (use `<u-tab-nav>` with `<u-tab href count>`), a whole card as a link — `a.hs-card` and
62
+ `.hs-card--link` (use `<u-card href>`) — and `.hs-attr` (use `<u-tag size="sm" appearance="outlined">`).
63
+
64
+ ### Guide
65
+
66
+ - The edit form's fields are `u-field`.
67
+ - The table toolbar is a `u-action-bar` with the title in `slot="summary"`; the raw table speaks `selection-change`, so
68
+ the toolbar turns into the bulk-action bar while a row is selected.
69
+ - The brand swatches are `u-card`s and the edit form sits in a `u-group-box flush`.
70
+ - The list screen is a `u-list-page appearance="card"` — filters, an applied chip, the toolbar, the table and a
71
+ `u-pagination`.
72
+
3
73
  ## [0.5.0] - 2026-10-14
4
74
 
5
75
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iyulab/house-style",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
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": {
@@ -58,9 +58,9 @@
58
58
  "pretendard": "^1.3.9"
59
59
  },
60
60
  "peerDependencies": {
61
- "@iyulab/components": "^2.25.0",
61
+ "@iyulab/components": "^2.26.0",
62
62
  "@iyulab/flex-table": ">=0.41.0",
63
- "@iyulab/modern-app": ">=0.39.0"
63
+ "@iyulab/modern-app": ">=0.54.0"
64
64
  },
65
65
  "peerDependenciesMeta": {
66
66
  "@iyulab/flex-table": {
@@ -71,9 +71,9 @@
71
71
  }
72
72
  },
73
73
  "devDependencies": {
74
- "@iyulab/components": "^2.25.0",
75
- "@iyulab/data-components": "^0.49.0",
76
- "@iyulab/enterprise": "^0.32.0",
74
+ "@iyulab/components": "^2.26.0",
75
+ "@iyulab/data-components": "^0.51.0",
76
+ "@iyulab/enterprise": "^0.34.1",
77
77
  "@iyulab/flex-table": "^0.67.0",
78
78
  "@iyulab/modern-app": "^0.54.0",
79
79
  "@iyulab/router": "^0.24.0",
@@ -147,6 +147,84 @@ u-tag[size='sm'] {
147
147
  --tag-gap: 4px;
148
148
  }
149
149
 
150
+ /* ── Field — a labelled field is a form row: 40px controls (the side-sheet and edit-form size; toolbars keep 32px
151
+ * with unlabelled controls), the label at the label step in the weak colour, the help line in the weaker colour.
152
+ * A control's own size wins (`size="sm"` / `"lg"` set the padding on the control itself). ── */
153
+ u-field {
154
+ --u-field-padding-block: calc(8.5em / 14); /* 14px: 21 + 17 + 2 = 40 — and with the density */
155
+ }
156
+ u-field::part(header) {
157
+ margin-bottom: 6px;
158
+ font-size: var(--u-text-label-size, 12px);
159
+ }
160
+ u-field::part(label) {
161
+ line-height: 16px;
162
+ font-weight: 500;
163
+ color: var(--u-txt-color-weak);
164
+ }
165
+ u-field::part(footer) {
166
+ margin-top: 6px;
167
+ font-size: var(--u-text-caption-size, 12px);
168
+ line-height: 18px;
169
+ color: var(--u-txt-color-weaker);
170
+ }
171
+ u-field[invalid]::part(footer) {
172
+ color: var(--u-danger-color-strong);
173
+ }
174
+
175
+ /* ── List page (`@iyulab/enterprise`) — the list screen: filters on one centred row with an 8px gap and a search field
176
+ * that takes 240–360px, applied chips below, and with `appearance="card"` toolbar · table · pager on one flat
177
+ * surface (the toolbar row draws its own 48px band, a quiet pager line). ── */
178
+ u-list-page::part(filters) {
179
+ align-items: center;
180
+ gap: var(--u-space-sm, 8px);
181
+ }
182
+ u-list-page > u-input[slot='filters'][type='search'] {
183
+ flex: 0 1 360px;
184
+ min-width: 240px;
185
+ }
186
+ u-list-page[appearance='card']::part(surface) {
187
+ border-radius: var(--u-radius-xl, 10px);
188
+ background-color: var(--u-bg-color);
189
+ }
190
+ u-list-page[appearance='card']::part(pager) {
191
+ font-size: var(--u-text-label-size, 12px);
192
+ color: var(--u-txt-color-weak);
193
+ font-variant-numeric: tabular-nums;
194
+ }
195
+
196
+ /* ── Table toolbar — a 48px band above the rows; while rows are selected it is the bulk-action bar: the primary tint,
197
+ * and its title (the count, or what the list holds) at the dense step, semibold, in ink. On a card list page the
198
+ * toolbar row is a `u-action-bar` with its title in `slot="summary"`; the tint follows the page's
199
+ * `:state(selected)` (the visible view's selection, `@iyulab/enterprise` 0.34). `u-rich-table` draws its own
200
+ * toolbar and selection bar (`@iyulab/data-components` 0.50). ── */
201
+ u-list-page[appearance='card'] > u-action-bar[slot='toolbar'] {
202
+ --action-bar-padding-inline: var(--u-space-md, 12px);
203
+ box-sizing: border-box;
204
+ min-height: 48px;
205
+ padding-block: var(--u-space-sm, 8px);
206
+ }
207
+ u-list-page[appearance='card'] > u-action-bar[slot='toolbar']::part(summary) {
208
+ font-size: var(--hs-text-dense-size, 13px);
209
+ font-weight: 600;
210
+ color: var(--u-txt-color);
211
+ }
212
+ u-list-page[appearance='card']:state(selected)::part(toolbar),
213
+ u-rich-table:state(selected)::part(toolbar),
214
+ u-rich-table:state(selected)::part(selection-bar) {
215
+ background-color: var(--u-primary-bg-color);
216
+ }
217
+ u-rich-table::part(toolbar),
218
+ u-rich-table::part(selection-bar) {
219
+ box-sizing: border-box;
220
+ min-height: 48px;
221
+ }
222
+ u-rich-table::part(selection-info) {
223
+ font-size: var(--hs-text-dense-size, 13px);
224
+ font-weight: 600;
225
+ color: var(--u-txt-color);
226
+ }
227
+
150
228
  /* ── Tab strip of links (saved views) — ink, not blue: the current view is ink text with an ink underline,
151
229
  * at the dense text step. ── */
152
230
  u-tab-nav {
@@ -35,64 +35,11 @@
35
35
  }
36
36
 
37
37
 
38
- /* ── Saved views — tabs above the filter bar, each with a count ─────────── */
39
- /* @deprecated Use `<u-tab-nav label>` with `<u-tab href count>` (`@iyulab/components` 2.25) — the same strip as a
40
- navigation landmark of links: the current view is `aria-current="page"` (these tabs are URLs, so they are links,
41
- not a tablist), each link is a Tab stop, and `count` is the quiet count. The house draws it this way
42
- (`components.css`). `.hs-count` goes with it. remove: 0.6.0 */
43
- .hs-views {
44
- display: flex;
45
- gap: var(--u-space-2xs, 4px);
46
- /* The base line is an inset shadow, not a border: a tab's 2px underline paints over it without the tab
47
- reaching past the box — with a border and a -1px tab margin the scroll container overflowed by 1px and
48
- drew a vertical scrollbar beside the tabs. */
49
- box-shadow: inset 0 -1px 0 var(--u-border-color);
50
- overflow-x: auto;
51
- }
52
- .hs-views__tab {
53
- display: inline-flex;
54
- align-items: center;
55
- gap: 6px;
56
- padding: var(--u-space-sm, 8px) var(--u-space-md, 12px);
57
- border: 0;
58
- border-bottom: 2px solid transparent;
59
- background: none;
60
- font: inherit;
61
- font-size: var(--hs-text-dense-size, 13px);
62
- line-height: 20px;
63
- color: var(--u-txt-color-weak);
64
- text-decoration: none; /* a tab may be a link (`aria-current="page"`) */
65
- white-space: nowrap;
66
- cursor: pointer;
67
- }
68
- .hs-views__tab:hover {
69
- color: var(--u-txt-color);
70
- }
71
- .hs-views__tab[aria-selected='true'],
72
- .hs-views__tab[aria-current='page'] {
73
- color: var(--u-txt-color);
74
- border-bottom-color: var(--u-txt-color);
75
- font-weight: 600;
76
- }
77
- .hs-views__tab:focus-visible {
78
- outline: 2px solid var(--u-focus-ring-color);
79
- outline-offset: -2px;
80
- }
81
- .hs-count {
82
- display: inline-block;
83
- min-width: 20px;
84
- padding: 0 6px;
85
- border-radius: var(--u-radius-pill, 9999px);
86
- background: var(--u-bg-color-raised);
87
- color: var(--u-txt-color-weak);
88
- font-size: var(--u-text-overline-size, 11px);
89
- line-height: 16px;
90
- font-weight: 500;
91
- text-align: center;
92
- font-variant-numeric: tabular-nums;
93
- }
94
-
95
- /* ── Filter bar — search · up to three key filters · "Filters" panel · applied chips ── */
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 */
96
43
  .hs-filter-bar {
97
44
  display: flex;
98
45
  flex-wrap: wrap;
@@ -117,7 +64,13 @@
117
64
  }
118
65
 
119
66
 
120
- /* ── Table card — toolbar · table · pager on one surface ──────────────── */
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 */
121
74
  .hs-table-card {
122
75
  background: var(--u-bg-color);
123
76
  border: 1px solid var(--u-border-color);
@@ -143,6 +96,10 @@
143
96
  .hs-table-toolbar--selected {
144
97
  background: var(--u-primary-bg-color);
145
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
+ }
146
103
  .hs-table-toolbar__title {
147
104
  font-size: var(--hs-text-dense-size, 13px);
148
105
  font-weight: 600;
@@ -251,7 +208,10 @@ tr[aria-selected='true'] .hs-row-actions {
251
208
  .hs-row-actions { display: none; }
252
209
  }
253
210
 
254
- /* ── Card — a titled surface for detail panels and dashboards ─────────── */
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 */
255
215
  .hs-card {
256
216
  background: var(--u-bg-color);
257
217
  border: 1px solid var(--u-border-color);
@@ -279,17 +239,6 @@ tr[aria-selected='true'] .hs-row-actions {
279
239
  text-decoration: none;
280
240
  }
281
241
  .hs-card__link:hover { text-decoration: underline; }
282
- /* @deprecated A whole card as a link: use `<u-card href>` (`@iyulab/components` 2.25) — the outer box is the link,
283
- the border carries hover and the card does not lift. remove: 0.6.0 */
284
- a.hs-card,
285
- .hs-card--link { cursor: pointer; transition: border-color 0.12s ease-out; }
286
- /* A whole card as a link reads as a card: ink text, no underline — the border carries hover. */
287
- a.hs-card { color: inherit; text-decoration: none; }
288
- a.hs-card:hover,
289
- .hs-card--link:hover { border-color: var(--u-border-color-strong); }
290
- @media (prefers-reduced-motion: reduce) {
291
- a.hs-card, .hs-card--link { transition: none; }
292
- }
293
242
 
294
243
  /* Description list — label / value pairs inside a card. */
295
244
  .hs-dl {
@@ -327,38 +276,6 @@ a.hs-card:hover,
327
276
  align-items: start;
328
277
  }
329
278
 
330
- /* ── Callout — a conclusion in the title, two lines of body at most ──────
331
- * @deprecated Use `<u-alert inline open>` (`@iyulab/components` 2.25) — `status` for the tone, `title` for the
332
- * conclusion, the body as content, actions in `slot="footer"`, and `slot="icon"` for a note's pencil; a note is a
333
- * neutral alert with `role="note"`. The house lays the footer out as the right-hand action column
334
- * (`components.css`). remove: 0.6.0
335
- * No thick coloured edge: an icon and a tint carry the tone. `--note` is a person's note
336
- * (a remark on a record), not a warning — it is neutral on purpose. */
337
- .hs-callout {
338
- display: grid;
339
- grid-template-columns: auto minmax(0, 1fr) auto;
340
- gap: var(--u-space-md, 12px);
341
- align-items: start;
342
- padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
343
- border-radius: var(--u-radius-xl, 10px);
344
- background: var(--u-bg-color-raised);
345
- font-size: var(--hs-text-dense-size, 13px);
346
- line-height: 20px;
347
- }
348
- .hs-callout__icon { color: var(--u-txt-color-weak); line-height: 20px; }
349
- .hs-callout__title { font-weight: 600; color: var(--u-txt-color); }
350
- .hs-callout__body { color: var(--u-txt-color-weak); }
351
- .hs-callout__actions { display: flex; gap: var(--u-space-sm, 8px); align-items: center; }
352
- .hs-callout--info { background: var(--u-info-bg-color); }
353
- .hs-callout--info .hs-callout__icon { color: var(--u-info-color-strong); }
354
- .hs-callout--success { background: var(--u-success-bg-color); }
355
- .hs-callout--success .hs-callout__icon { color: var(--u-success-color-strong); }
356
- .hs-callout--warning { background: var(--u-warning-bg-color); }
357
- .hs-callout--warning .hs-callout__icon { color: var(--u-warning-color-strong); }
358
- .hs-callout--danger { background: var(--u-danger-bg-color); }
359
- .hs-callout--danger .hs-callout__icon { color: var(--u-danger-color-strong); }
360
- .hs-callout--note { background: var(--u-bg-color-raised); }
361
-
362
279
  /* ── Form — label above, help below; sections instead of one long grid ── */
363
280
  .hs-fieldset {
364
281
  margin: 0;
@@ -388,6 +305,10 @@ a.hs-card:hover,
388
305
  clear: both;
389
306
  margin-top: 0;
390
307
  }
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 */
391
312
  .hs-field {
392
313
  display: grid;
393
314
  gap: 6px;
@@ -443,22 +364,6 @@ a.hs-card:hover,
443
364
 
444
365
 
445
366
  /* ── Small marks ───────────────────────────────────────────────────────── */
446
- /* A quiet attribute label next to an identifier (not a status — no colour).
447
- @deprecated Use `<u-tag size="sm" appearance="outlined">` (`@iyulab/components` 2.25). remove: 0.6.0 */
448
- .hs-attr {
449
- display: inline-flex;
450
- align-items: center;
451
- height: 18px;
452
- padding: 0 5px;
453
- border: 1px solid var(--u-border-color);
454
- border-radius: var(--u-radius-md, 4px);
455
- font-size: var(--u-text-overline-size, 11px);
456
- line-height: 16px;
457
- font-weight: 500;
458
- color: var(--u-txt-color-weak);
459
- white-space: nowrap;
460
- vertical-align: middle;
461
- }
462
367
  /* Days left: neutral, soon (warning), overdue (danger). */
463
368
  .hs-due {
464
369
  display: inline-flex;