@setsquare/ui 0.4.0 → 0.6.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 +129 -0
- package/README.md +41 -3
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/english.d.ts +11 -0
- package/dist/lib/english.d.ts.map +1 -0
- package/dist/lib/english.js +65 -0
- package/dist/lib/english.js.map +1 -0
- package/dist/lib/labels.d.ts +38 -8
- package/dist/lib/labels.d.ts.map +1 -1
- package/dist/lib/labels.js +97 -9
- package/dist/lib/labels.js.map +1 -1
- package/dist/lib/locale.d.ts +105 -0
- package/dist/lib/locale.d.ts.map +1 -0
- package/dist/lib/locale.js +42 -0
- package/dist/lib/locale.js.map +1 -0
- package/dist/lint/index.d.ts +5 -0
- package/dist/lint/index.d.ts.map +1 -1
- package/dist/lint/index.js +80 -3
- package/dist/lint/index.js.map +1 -1
- package/dist/shell/dashboard-shell.d.ts +4 -1
- package/dist/shell/dashboard-shell.d.ts.map +1 -1
- package/dist/shell/dashboard-shell.js +3 -2
- package/dist/shell/dashboard-shell.js.map +1 -1
- package/dist/shell/landmarks.d.ts +33 -0
- package/dist/shell/landmarks.d.ts.map +1 -0
- package/dist/shell/landmarks.js +20 -0
- package/dist/shell/landmarks.js.map +1 -0
- package/dist/shell/right-panel.d.ts +7 -2
- package/dist/shell/right-panel.d.ts.map +1 -1
- package/dist/shell/right-panel.js +13 -7
- package/dist/shell/right-panel.js.map +1 -1
- package/dist/shell/sidebar.d.ts +10 -2
- package/dist/shell/sidebar.d.ts.map +1 -1
- package/dist/shell/sidebar.js +31 -14
- package/dist/shell/sidebar.js.map +1 -1
- package/dist/shell/site-menu.d.ts +11 -3
- package/dist/shell/site-menu.d.ts.map +1 -1
- package/dist/shell/site-menu.js +7 -1
- package/dist/shell/site-menu.js.map +1 -1
- package/dist/shell/site-nav.d.ts +4 -1
- package/dist/shell/site-nav.d.ts.map +1 -1
- package/dist/shell/site-nav.js +3 -3
- package/dist/shell/site-nav.js.map +1 -1
- package/dist/shell/site-shell.d.ts +4 -2
- package/dist/shell/site-shell.d.ts.map +1 -1
- package/dist/shell/site-shell.js +3 -2
- package/dist/shell/site-shell.js.map +1 -1
- package/dist/styles/theme.css +2 -0
- package/dist/styles/tokens.css +9 -0
- package/dist/testing/index.d.ts +54 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +246 -9
- package/dist/testing/index.js.map +1 -1
- package/dist/tokens.json +25 -0
- package/dist/ui/alert.d.ts +2 -0
- package/dist/ui/alert.d.ts.map +1 -1
- package/dist/ui/alert.js +11 -9
- package/dist/ui/alert.js.map +1 -1
- package/dist/ui/breadcrumbs.d.ts +17 -1
- package/dist/ui/breadcrumbs.d.ts.map +1 -1
- package/dist/ui/breadcrumbs.js +6 -3
- package/dist/ui/breadcrumbs.js.map +1 -1
- package/dist/ui/button-styles.d.ts.map +1 -1
- package/dist/ui/button-styles.js +16 -6
- package/dist/ui/button-styles.js.map +1 -1
- package/dist/ui/calendar.d.ts +1 -0
- package/dist/ui/calendar.d.ts.map +1 -1
- package/dist/ui/calendar.js +7 -1
- package/dist/ui/calendar.js.map +1 -1
- package/dist/ui/checkbox.d.ts.map +1 -1
- package/dist/ui/checkbox.js +7 -7
- package/dist/ui/checkbox.js.map +1 -1
- package/dist/ui/code-block-parts.d.ts +30 -0
- package/dist/ui/code-block-parts.d.ts.map +1 -0
- package/dist/ui/code-block-parts.js +27 -0
- package/dist/ui/code-block-parts.js.map +1 -0
- package/dist/ui/code-block.d.ts +4 -10
- package/dist/ui/code-block.d.ts.map +1 -1
- package/dist/ui/code-block.js +4 -9
- package/dist/ui/code-block.js.map +1 -1
- package/dist/ui/combo-box.d.ts +13 -2
- package/dist/ui/combo-box.d.ts.map +1 -1
- package/dist/ui/combo-box.js +10 -3
- package/dist/ui/combo-box.js.map +1 -1
- package/dist/ui/copy-button.d.ts +7 -1
- package/dist/ui/copy-button.d.ts.map +1 -1
- package/dist/ui/copy-button.js +11 -10
- package/dist/ui/copy-button.js.map +1 -1
- package/dist/ui/date-field.d.ts +1 -0
- package/dist/ui/date-field.d.ts.map +1 -1
- package/dist/ui/date-field.js +20 -16
- package/dist/ui/date-field.js.map +1 -1
- package/dist/ui/dialog.d.ts +6 -1
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +11 -8
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/drop-indicator.d.ts +21 -0
- package/dist/ui/drop-indicator.d.ts.map +1 -0
- package/dist/ui/drop-indicator.js +20 -0
- package/dist/ui/drop-indicator.js.map +1 -0
- package/dist/ui/error-state.d.ts +17 -2
- package/dist/ui/error-state.d.ts.map +1 -1
- package/dist/ui/error-state.js +32 -34
- package/dist/ui/error-state.js.map +1 -1
- package/dist/ui/feature-card.d.ts +18 -3
- package/dist/ui/feature-card.d.ts.map +1 -1
- package/dist/ui/feature-card.js +18 -3
- package/dist/ui/feature-card.js.map +1 -1
- package/dist/ui/field.d.ts +28 -9
- package/dist/ui/field.d.ts.map +1 -1
- package/dist/ui/field.js +22 -10
- package/dist/ui/field.js.map +1 -1
- package/dist/ui/file-upload.d.ts +23 -5
- package/dist/ui/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload.js +54 -36
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/form.d.ts +11 -1
- package/dist/ui/form.d.ts.map +1 -1
- package/dist/ui/form.js +7 -4
- package/dist/ui/form.js.map +1 -1
- package/dist/ui/grid-list.d.ts +10 -3
- package/dist/ui/grid-list.d.ts.map +1 -1
- package/dist/ui/grid-list.js +18 -7
- package/dist/ui/grid-list.js.map +1 -1
- package/dist/ui/number-field.d.ts.map +1 -1
- package/dist/ui/number-field.js +5 -3
- package/dist/ui/number-field.js.map +1 -1
- package/dist/ui/pagination.d.ts +11 -3
- package/dist/ui/pagination.d.ts.map +1 -1
- package/dist/ui/pagination.js +30 -23
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/radio-group.d.ts.map +1 -1
- package/dist/ui/radio-group.js +4 -4
- package/dist/ui/radio-group.js.map +1 -1
- package/dist/ui/search.d.ts +3 -0
- package/dist/ui/search.d.ts.map +1 -1
- package/dist/ui/search.js +11 -10
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/select.d.ts +7 -1
- package/dist/ui/select.d.ts.map +1 -1
- package/dist/ui/select.js +7 -3
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/selection-bar.d.ts +17 -4
- package/dist/ui/selection-bar.d.ts.map +1 -1
- package/dist/ui/selection-bar.js +15 -11
- package/dist/ui/selection-bar.js.map +1 -1
- package/dist/ui/sheet.d.ts +1 -0
- package/dist/ui/sheet.d.ts.map +1 -1
- package/dist/ui/sheet.js +4 -1
- package/dist/ui/sheet.js.map +1 -1
- package/dist/ui/slider.d.ts +9 -2
- package/dist/ui/slider.d.ts.map +1 -1
- package/dist/ui/slider.js +13 -5
- package/dist/ui/slider.js.map +1 -1
- package/dist/ui/switch.d.ts +2 -1
- package/dist/ui/switch.d.ts.map +1 -1
- package/dist/ui/switch.js +5 -2
- package/dist/ui/switch.js.map +1 -1
- package/dist/ui/tabs.d.ts +1 -0
- package/dist/ui/tabs.d.ts.map +1 -1
- package/dist/ui/tabs.js +13 -12
- package/dist/ui/tabs.js.map +1 -1
- package/dist/ui/text-field.d.ts.map +1 -1
- package/dist/ui/text-field.js +7 -3
- package/dist/ui/text-field.js.map +1 -1
- package/dist/ui/theme-switcher.d.ts +1 -0
- package/dist/ui/theme-switcher.d.ts.map +1 -1
- package/dist/ui/theme-switcher.js +7 -7
- package/dist/ui/theme-switcher.js.map +1 -1
- package/dist/ui/toast.d.ts +1 -0
- package/dist/ui/toast.d.ts.map +1 -1
- package/dist/ui/toast.js +4 -1
- package/dist/ui/toast.js.map +1 -1
- package/dist/ui/toolbar.d.ts +22 -0
- package/dist/ui/toolbar.d.ts.map +1 -0
- package/dist/ui/toolbar.js +22 -0
- package/dist/ui/toolbar.js.map +1 -0
- package/dist/ui/tree.d.ts +57 -12
- package/dist/ui/tree.d.ts.map +1 -1
- package/dist/ui/tree.js +55 -16
- package/dist/ui/tree.js.map +1 -1
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,134 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.0 — 2026-10-13
|
|
4
|
+
|
|
5
|
+
Breaking: every word is an ICU MessageFormat template, and the package writes no sentence in code. None of 0.5's
|
|
6
|
+
defaults needed ICU quoting, but a product's template with an apostrophe before `{`, `}`, `#` or another
|
|
7
|
+
apostrophe now does, and some English defaults read differently (below).
|
|
8
|
+
|
|
9
|
+
- **`SetsquareLocale`**, new: sets the locale once for the whole product, and holds app-wide labels keyed by
|
|
10
|
+
component (`SetsquareLabels`). It wraps React Aria's `I18nProvider`, so React Aria's own words, numbers, dates
|
|
11
|
+
and lists follow the product's locale; without it they followed the server's default before hydration and the
|
|
12
|
+
browser's after. A component's own `labels` win over the app-wide ones; a nested provider lays its words over
|
|
13
|
+
the outer one's.
|
|
14
|
+
- **ICU MessageFormat.** Labels are formatted with `intl-messageformat` 12.1.3 (a new dependency, pinned; no
|
|
15
|
+
`eval` or `new Function`, so it runs under a CSP without `'unsafe-eval'`), constructed with `ignoreTag`, so `<b>`
|
|
16
|
+
is text. Plurals and `select` work in every language. A template with no holes formats to itself. A word that
|
|
17
|
+
can't be formatted throws in development; in production it shows the English default with the same values.
|
|
18
|
+
- **No sentence built in code:**
|
|
19
|
+
- Fields: the required message is `labels.enterValue` (`'Enter {label}'`) or `chooseValue` (`'Choose {label}'`),
|
|
20
|
+
with the label as written. In English it now reads "Enter Project name", not "Enter project name": give the
|
|
21
|
+
field `requiredMessage`, or the app a template of its own, where that reads badly.
|
|
22
|
+
- `SelectionBar`: the counts are ICU plurals. `noun` is optional (default `labels.item` and `labels.items`) and
|
|
23
|
+
fills `{singular}` and `{plural}`; `{noun}`, the plural, keeps 0.5 templates working for one release.
|
|
24
|
+
"All 1 project selected" is "1 project selected".
|
|
25
|
+
- `Pagination`: the noun is inside `range` (`'{from}–{to} of {total} {noun}'`), and counts reach ICU as numbers.
|
|
26
|
+
- `RightPanel`: the close button's `{title}` is the title as written, so "Close Details", not "Close details".
|
|
27
|
+
- `TreeItem`'s name, `SidebarSwitcher`'s name and `FileUpload`'s accepted types are lists through
|
|
28
|
+
`Intl.ListFormat` in the locale: "a PDF, PNG, or JPG file" in English.
|
|
29
|
+
- `Slider`'s range is `Intl.NumberFormat.formatRange`: "20–80", not "20 – 80".
|
|
30
|
+
- `FileUpload`'s announcements are labels, with plurals, each a sentence of its own in the live region.
|
|
31
|
+
- `CopyButton` is named by one template, `labels.name` (`'{word} {label}'`).
|
|
32
|
+
- **Words that had no way in** now come through `labels`: `FeatureCard`'s Show and Hide, its default label and the
|
|
33
|
+
toggle's names (`FeatureCardLabels`); `ErrorState`'s title and body for each kind; `FieldLabel`'s "(required)"
|
|
34
|
+
and "(optional)"; the checkbox messages; `Select`'s placeholder (`SelectLabels`); `ComboBox`'s empty list
|
|
35
|
+
(`ComboBoxLabels`); `CommandSearch`'s placeholder; `FileUpload`'s "or", its list's name, "Not added", "Not
|
|
36
|
+
uploaded" and the size and status line; `CodeBlock`'s scrolling name; `Sidebar` items' counts and tooltips.
|
|
37
|
+
`Alert`, `Calendar`, `Dialog`, `Sheet` and `Toaster` had their English as fallbacks in the JSX; it's in labels
|
|
38
|
+
defaults now, so the provider reaches it.
|
|
39
|
+
- **Loose props fold into `labels`**, and keep working for one release, winning over `labels`: `Breadcrumbs`'
|
|
40
|
+
`label` (`BreadcrumbsLabels.breadcrumbs`), `Sidebar`'s `label` (`primary`), `SiteNav`'s `label` and
|
|
41
|
+
`SiteMenu`'s `label` and `navLabel` (`SiteNavLabels`, `SiteMenuLabels`), both shells' `skipLinkLabel`
|
|
42
|
+
(`ShellLabels.skipLink`), `RangeSlider`'s `thumbLabels` (`RangeSliderLabels`), `PanelToggle`'s `label`
|
|
43
|
+
(`RightPanelLabels.toggle`) and `ConfirmDialog`'s `cancelLabel` (`cancel`). `Form` takes `labels` for its
|
|
44
|
+
`ErrorSummary` (`ErrorSummaryLabels`).
|
|
45
|
+
- **Numbers in the product's locale.** `Slider` and `formatBytes` formatted with `Intl.NumberFormat(undefined)`;
|
|
46
|
+
they use React Aria's locale. `formatBytes` takes the locale as an optional second argument. Sidebar counts are
|
|
47
|
+
formatted too.
|
|
48
|
+
- **Server-safe still.** `SiteShell`, `SiteNav` and `CodeBlock` keep no `'use client'`: their words are in small
|
|
49
|
+
client components (the skip link, SiteNav's landmark, CodeBlock's caption and scroller), so the provider reaches
|
|
50
|
+
them.
|
|
51
|
+
- **Tests.** `test/browser/labels.mjs` renders every design-system card inside `SetsquareLocale` at `locale="ar"`
|
|
52
|
+
with every word pseudo-translated, and fails on any of the package's English left in text, hidden text or names;
|
|
53
|
+
a control run with the English left in has to find it. A lint rule of this repository's
|
|
54
|
+
(`scripts/lint/words.mjs`, not shipped) fails English written into the components' JSX, a sentence built in a
|
|
55
|
+
template, a list joined in code and `Intl` in the runtime's locale; its tests fail each way 0.5.0 did it. Unit
|
|
56
|
+
tests cover the formatter and its fallbacks, the provider, and every count label in Polish.
|
|
57
|
+
- **Docs.** A Languages page on ui.setsquare.dev and a Languages section in the README. The Labels card sets its
|
|
58
|
+
French through `SetsquareLocale`, with an ICU plural.
|
|
59
|
+
- Developer-facing text stays English. Right-to-left layout is still to do.
|
|
60
|
+
|
|
61
|
+
## 0.5.0 — 2026-10-11
|
|
62
|
+
|
|
63
|
+
Breaking: the `Tree` draws no box of its own. A tree that should stay framed goes in a `Card`.
|
|
64
|
+
|
|
65
|
+
- **`Tree`'s new look**, the one `@setsquare/ui-blocks`' page outline is designed with. No border, card ground or
|
|
66
|
+
row dividers: rows sit on whatever holds the tree, `--nav-item-gap` apart, rounded, at least `--nav-item-height`
|
|
67
|
+
tall and `--target-min` at AAA. Each level indents by the new `--tree-indent` token (16px). `TreeHeader` is a
|
|
68
|
+
caption above its rows. Selected rows add a bold title and a `brand` icon to the old cues.
|
|
69
|
+
- **`TreeItem` gains `icon`, `status`, `statusLabel`, `alwaysShowActions`, `dragLabel` and `allowsDragging`.**
|
|
70
|
+
- `description` moves onto the title's line, and under the title when it doesn't fit. It wraps and is never
|
|
71
|
+
cut short, so the text-spacing overrides lose none of it. A string description joins the row's name.
|
|
72
|
+
- `status` takes a `StatusBadge`, on the title's line and under it on a narrow row, never squeezing the title;
|
|
73
|
+
`statusLabel` puts its words in the row's name, because React Aria names a
|
|
74
|
+
row from its `textValue` alone.
|
|
75
|
+
- A row's `actions` show on the selected, focused and hovered row. Elsewhere they're faded out and take no
|
|
76
|
+
pointer events, but stay focusable, so focus on one shows it. `alwaysShowActions` keeps them showing.
|
|
77
|
+
- **Drag and drop.** With `dragAndDropHooks`, every draggable row gets a drag button first among its buttons, so a
|
|
78
|
+
keyboard or screen reader drag can start: Enter on it, ↑ ↓ through the drop places, Enter to drop, Esc to
|
|
79
|
+
cancel. Focus comes back to the drag button after a cancel. `allowsDragging={false}` leaves the button off a
|
|
80
|
+
row that can't move, such as a column in a page layout. The dragged row fades to 50%; a row being dropped
|
|
81
|
+
into gets `brand-subtle` and a 2px `brand` outline.
|
|
82
|
+
- Rows that only hold rows: `disabledKeys` with `disabledBehavior="selection"` keeps them focusable and
|
|
83
|
+
undimmed, never selected. Documented; no code change.
|
|
84
|
+
- **`GridListItem` gains the same drag button, `dragLabel`, and dragging and drop-target states.** A draggable
|
|
85
|
+
row gives its start padding to the drag button, so the button's target needs no negative margin.
|
|
86
|
+
- **`DropIndicator`**, new: where a dragged row will land in a Tree or a GridList, for `renderDropIndicator`. A
|
|
87
|
+
4px `brand` line with a 2px `background` halo, taking no room until it's the target. `tone="canvas"` draws it in
|
|
88
|
+
the new `canvas-mark` and `canvas-mark-halo` tokens, for marks over a page the product doesn't style.
|
|
89
|
+
- **`Toolbar` and `ToolbarSeparator`**, new: React Aria's Toolbar, one tab stop with arrow keys between its
|
|
90
|
+
buttons, wrapping instead of overflowing. New design-system card: Toolbar.
|
|
91
|
+
- **Forced colours.** A selected `Tree` or `GridList` row loses its ground and inset marker to a forced palette,
|
|
92
|
+
so it draws its marker in `Highlight` there. The drop line turns `Highlight`. The drop-target outline now draws
|
|
93
|
+
in every mode: it had a width and no style, so it never showed.
|
|
94
|
+
- **A `Button` that can't act but keeps its focus** (`aria-disabled`, with the reason in its description) now
|
|
95
|
+
looks it: muted words, a muted ground for the filled variants, no hover, and the not-allowed cursor. It isn't
|
|
96
|
+
faded, so its words stay readable and its focus ring keeps its contrast.
|
|
97
|
+
- **Tokens.** `canvas-mark` (the brand at its light AAA value in every theme) and `canvas-mark-halo` (white), for
|
|
98
|
+
selection and drop marks over a page. The contrast check holds them at least 9:1 apart, so one of them has
|
|
99
|
+
3:1 against any solid colour underneath. `tree-indent`.
|
|
100
|
+
- **`renderIcon`** is exported: an `IconProp` (a component or an element) drawn at a size, the way the components
|
|
101
|
+
draw theirs, for an add-on's own components.
|
|
102
|
+
- **`Breadcrumbs` takes `onAction`,** for places inside a page rather than pages, such as a block's parents in a
|
|
103
|
+
page builder.
|
|
104
|
+
- **`ComboBox` takes `emptyState`:** what its open list says when nothing is in it, such as "Searching…" while
|
|
105
|
+
results load. It goes inside the list because React Aria hides the rest of the page from assistive technology
|
|
106
|
+
while the list is open, so a status line beside the field wouldn't be heard.
|
|
107
|
+
- **A breadcrumb can carry its own language.** `BreadcrumbItem` takes `lang` and `dir`, for a label in another
|
|
108
|
+
language than the interface, such as a page's own title in a page builder (3.1.2).
|
|
109
|
+
- **`setsquare-ui/client-directive` knows Puck.** A module that imports `@puckeditor/core` needs `'use client'`:
|
|
110
|
+
Puck's main entry ships without one. Its `/rsc` entry is server-safe and needs none.
|
|
111
|
+
- **`setsquare-ui/no-builder-surface-override`**, a new lint rule, `warn` in `recommended`: in a file that uses
|
|
112
|
+
`@setsquare/ui-blocks` or Puck, a Puck `overrides` key that replaces one of the builder's tested surfaces.
|
|
113
|
+
- **Docs.** The `GridList` README said Tab reaches a row's buttons. It's →; Tab leaves the list.
|
|
114
|
+
- **Cards and tests.** The Tree card is a page outline with icons, descriptions, a status, columns and drag and
|
|
115
|
+
drop, beside operations in a `Card`. The GridList card adds a list put in order by dragging. A new `drag`
|
|
116
|
+
browser suite drives both by keyboard in all four themes, measures the drop line against `background` and
|
|
117
|
+
`card`, and checks forced colours. The controls suite's Tree checks follow the new card.
|
|
118
|
+
- **`Switch` in forced colours.** Its thumb was drawn with a background, which forced colours remove, so on and off
|
|
119
|
+
looked the same. The track and thumb now take the system's colours there: Canvas and CanvasText, Highlight when
|
|
120
|
+
on.
|
|
121
|
+
- **`@setsquare/ui/testing`: focus appearance and focus not obscured.**
|
|
122
|
+
- `findWeakFocusIndicators` and `expectFocusAppearance` (2.4.13): for every control a keyboard reaches, the pixels
|
|
123
|
+
whose colour changes by 3:1 or more when it takes focus, against the area of a 2 CSS px perimeter of the unfocused
|
|
124
|
+
component, 4h + 4w − (16 − 4π)r for corner radius r (W3C's formulas, read on 9 October 2026). The component is
|
|
125
|
+
the part whose outline or box shadow changes on focus, so a three-layer control is measured by its paint, not its
|
|
126
|
+
transparent target.
|
|
127
|
+
- `findObscuredFocus` and `expectFocusNotObscured` (2.4.11 at `level: 'aa'`, 2.4.12 at `'aaa'`): Tab through the
|
|
128
|
+
page and sample each focused control for anything on top of it, into same-origin frames. A visually hidden input
|
|
129
|
+
is measured by its control, and only what's in view is sampled.
|
|
130
|
+
- `ScreenshotPage.screenshot` takes `scale`, for screenshots at CSS pixels.
|
|
131
|
+
|
|
3
132
|
## 0.4.0 — 2026-10-08
|
|
4
133
|
|
|
5
134
|
- **`Tree`, `TreeItem`, `TreeSection` and `TreeHeader`:** React Aria's Tree, for rows inside rows, such as a
|
package/README.md
CHANGED
|
@@ -74,6 +74,8 @@ import { Button, DashboardShell, ShellMain, TextField } from '@setsquare/ui';
|
|
|
74
74
|
|
|
75
75
|
Diagrams of workflows and resource maps are in an add-on, [`@setsquare/ui-flows`](packages/ui-flows/README.md). It's installed on its own, so a product that doesn't draw diagrams carries none of React Flow.
|
|
76
76
|
|
|
77
|
+
A page builder is in another, [`@setsquare/ui-blocks`](packages/ui-blocks/README.md), on Puck. A product that doesn't build pages carries none of Puck.
|
|
78
|
+
|
|
77
79
|
## Themes and levels
|
|
78
80
|
|
|
79
81
|
- `<html data-conformance="aa|aaa" class="dark?">` picks one of four themes: Light · AA, Dark · AA, Light · AAA, Dark · AAA.
|
|
@@ -132,6 +134,39 @@ Every control that can paint smaller than its target — buttons, links, icon bu
|
|
|
132
134
|
<p>Invite people by email, or share the <TextLink href="/settings/invite">workspace link</TextLink>.</p>
|
|
133
135
|
```
|
|
134
136
|
|
|
137
|
+
## Languages
|
|
138
|
+
|
|
139
|
+
Every word a component shows or says comes in English, and a product replaces any of them with its own, in any language. Set the locale and the app-wide words once, high in the root layout:
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import { SetsquareLocale } from '@setsquare/ui';
|
|
143
|
+
|
|
144
|
+
<html lang="de">
|
|
145
|
+
<body>
|
|
146
|
+
<SetsquareLocale
|
|
147
|
+
locale="de"
|
|
148
|
+
labels={{
|
|
149
|
+
alert: { dismiss: 'Schließen' },
|
|
150
|
+
selectionBar: {
|
|
151
|
+
selected: '{count, plural, one {# Projekt ausgewählt} other {# Projekte ausgewählt}}',
|
|
152
|
+
},
|
|
153
|
+
}}
|
|
154
|
+
>
|
|
155
|
+
{children}
|
|
156
|
+
</SetsquareLocale>
|
|
157
|
+
</body>
|
|
158
|
+
</html>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
- `locale` is a BCP 47 tag. React Aria's own words (a calendar's buttons, "Clear search", a table's "Select all"), numbers, dates and lists follow it; without it they follow the server's default while rendering there and the browser's after hydration. It wraps React Aria's `I18nProvider`, so a product doesn't import React Aria to set it.
|
|
162
|
+
- `labels` is keyed by component (`SetsquareLabels`): `pagination`, `fileUpload`, `field` for every field, and so on. A component's own `labels` prop wins, for one instance. Any word left out stays English. A nested `SetsquareLocale` lays its words over the outer one's.
|
|
163
|
+
- Every word is an ICU MessageFormat template, formatted by the package with `intl-messageformat` (no `eval`, so it runs under a CSP without `'unsafe-eval'`): `'Remove {name}'`, `'{count, plural, one {# file} few {# pliki} …}'`, `select`. A product passes its catalogue's lines through unformatted. `<b>` is text, as PHP's ICU reads it.
|
|
164
|
+
- No sentence is put together in code: no lowercasing, joining or plural logic. A field's required message is `'Enter {label}'` with the label as written; give a field `requiredMessage` where its own sentence reads better.
|
|
165
|
+
- A word that can't be formatted (malformed, or a value missing) throws in development. In production it shows the English default with the same values.
|
|
166
|
+
- Developer-facing text stays English: thrown errors, lint messages and the page checks' reports. Right-to-left layout isn't done yet: React Aria reads the direction from the locale, but the components' own classes are physical (`left-`, `ml-`).
|
|
167
|
+
|
|
168
|
+
The design system's README and the **Labels** card list every word and placeholder.
|
|
169
|
+
|
|
135
170
|
## Site layer
|
|
136
171
|
|
|
137
172
|
For a public page — a marketing site, a privacy notice — the stylesheet also brings Tailwind 4 utilities built from the tokens. They work in any Tailwind 4 app, with or without React:
|
|
@@ -230,7 +265,8 @@ The components avoid it: every scroll container and every control that hides an
|
|
|
230
265
|
| `setsquare-ui/no-static-control-root` | `static` passed in `className` to a Setsquare component whose root has to stay positioned. |
|
|
231
266
|
| `setsquare-ui/no-target-shrink` | `min-h-*` or `min-w-*` in the `className` of `Button`, `LinkButton`, `IconButton` or `Segment`. `className` is the target, and these replace its `--target-min` floor. |
|
|
232
267
|
| `setsquare-ui/no-visual-only-target` | `buttonVisualStyles()` in the `className` of a link or button: the paint on its own, which makes the painted box the pointer target. |
|
|
233
|
-
| `setsquare-ui/
|
|
268
|
+
| `setsquare-ui/no-builder-surface-override` | In a file that uses `@setsquare/ui-blocks` or Puck, a Puck `overrides` key (`actionBar`, `iframe`, `outline`, `fieldTypes` and the rest) that replaces one of the builder's own surfaces, whose tests then don't reach it. A warning in `recommended`. |
|
|
269
|
+
| `setsquare-ui/client-directive` | A module without `'use client'` that needs it (it imports React Aria or Puck's editor entry, `@puckeditor/core`, calls a hook other than `use`, `useCallback`, `useDebugValue`, `useId` or `useMemo`, calls `createContext`, or passes an event handler or a function as a prop or child), and one with it that needs none of those. Not in `recommended`: turn it on for the modules of a component library, where server components import them. |
|
|
234
270
|
|
|
235
271
|
ESLint (flat config, with a parser that reads TSX, such as typescript-eslint's):
|
|
236
272
|
|
|
@@ -309,6 +345,7 @@ The positioning, target, link, reflow, text-spacing and motion scans run in the
|
|
|
309
345
|
- **Types:** `tsc` on React 19.
|
|
310
346
|
- **Lint rules:** ESLint's `RuleTester`, and oxlint loading the built plugin through `jsPlugins`.
|
|
311
347
|
- **Unit:** the pagination window: seven slots on every page of an 8-, 20- and 239-page list, and a gap only where two or more pages are left out.
|
|
348
|
+
- **Words:** a lint rule of this repository's (`scripts/lint/words.mjs`) fails English written into the components' JSX, a template that builds a sentence, a list joined in code, and `Intl` formatting in the runtime's locale; its tests fail each way 0.5.0 did it. Unit tests cover the ICU formatter, its development and production fallbacks, `SetsquareLocale`'s layering, and every count label in Polish (one, few, many).
|
|
312
349
|
- **Contrast:** `scripts/check-contrast.mjs` computes every token pair the usage notes promise, in all four themes. It doesn't check colours a product adds.
|
|
313
350
|
- **Browser (Chromium only):** the design-system previews on React 19, loaded as the design-system artifact loads them:
|
|
314
351
|
- axe-core on every preview in all four themes;
|
|
@@ -326,9 +363,10 @@ The positioning, target, link, reflow, text-spacing and motion scans run in the
|
|
|
326
363
|
- tabs: the arrow keys in a row and a rail, Home and End, names with counts and badges, tooltips on hover (after 500ms, hoverable, closed by Escape and by a press) and on keyboard focus, the rail becoming a row below 480px, the three `hiddenPanels` modes (a draft surviving, a hidden panel's effects stopping, a Suspense read loading while pre-rendered), an important badge's pulse ending inside five seconds and replaying when its count rises, clear-on-open calling `onBadgeClear`, only opacity and colour changing at AAA, nothing animating under reduced motion, and no badge, ring or halo over any text in all three displays at full width and 360px;
|
|
327
364
|
- pagination: the tiers at 1, 4, 7, 8, 20, 21 and 239 pages, a row that never changes length, the names of page links and arrows, hrefs that keep the query and never use `meta.links`, rows per page keeping the first row in view, focus after paging, the page field's validation and alert, the pending mark and its message after 400ms (and the mark stopping inside five seconds), and motion at AA, AAA and under reduced motion;
|
|
328
365
|
- nothing on any preview running off its width, no text cut off or spilling with WCAG 1.4.12's spacing applied, and nothing but a loading indicator moving past five seconds, at AA and AAA;
|
|
366
|
+
- every preview inside `SetsquareLocale` at `locale="ar"` with every word pseudo-translated, failing on any of the package's English left in text, hidden text or names, with a control run that leaves the words in English and has to find them. It reads what a card shows as it loads, not what it shows after it's used;
|
|
329
367
|
- the page checks above, each also run on a page built to fail.
|
|
330
|
-
- **Packaging:** `pnpm package:verify` packs the tarball and installs it into a new Next.js app. It builds the app, loads it in both levels, and runs the page checks and the lint plugin from the installed package. It also follows a sidebar link on the freshly started app, to check the templates' page transition runs with its `nav-forward` type. The root layout's `ThemeScript` is checked to put a stored dark theme on `<html>` before any of the page's own JavaScript runs, and the footer's `ThemeSwitcher` to change it for the next page load. A route on the site templates is checked too: the current page, reflow at 320px, the Menu as a link to the footer's navigation with JavaScript off, and the swap to the Menu button when the page hydrates, in the same place and keeping focus.
|
|
331
|
-
- **The docs site** (`apps/docs`): `pnpm test:site` loads every page of its production build in all four themes at 1280px, and at AA and AAA at 390px (and each component the Playground shows). Each run has axe, positioning, targets, underlined links, sideways overflow and console errors. Visible focus runs in three of them (light, dark AAA and 390px AAA: both themes, both levels, both layouts) and cursors in three (light, light AAA and 390px AAA), and both check the sidebar and header, which are the same on every page, on the home page only; a check fails if that selector ever leaves out a control in a page's content. It also fails on console errors, sideways overflow, and any internal link to a page it doesn't check, and it follows a sidebar link, in Chromium and in WebKit, to check that the navigation stays client-side, runs the page transition, and covers the old page while it leaves. It also tries a shadcn/ui theme from the Playground: that it reaches every page, lasts through a reload without a flash, resets, and that a paste can set nothing but valid token values. The findings it accepts are listed in `test/site/pages.mjs`, each with its reason. The site brings its own palette, so its build runs the contrast audit against those colours.
|
|
368
|
+
- **Packaging:** `pnpm package:verify` packs the tarball and installs it into a new Next.js app. It builds the app, loads it in both levels, and runs the page checks and the lint plugin from the installed package. It also follows a sidebar link on the freshly started app, to check the templates' page transition runs with its `nav-forward` type. The root layout's `ThemeScript` is checked to put a stored dark theme on `<html>` before any of the page's own JavaScript runs, and the footer's `ThemeSwitcher` to change it for the next page load. A route on the site templates is checked too: the current page, reflow at 320px, the Menu as a link to the footer's navigation with JavaScript off, and the swap to the Menu button when the page hydrates, in the same place and keeping focus. `@setsquare/ui-blocks`' `ContentBuilder` is rendered from a Next.js page and checked to hydrate with no console errors, with the browser on a different platform from the server's.
|
|
369
|
+
- **The docs site** (`apps/docs`): `pnpm test:site` loads every page of its production build in all four themes at 1280px, and at AA and AAA at 390px (and each component the Playground shows). Each run has axe, positioning, targets, underlined links, sideways overflow and console errors. The dark run puts the browser on a different platform from the server's (Windows beside a Mac server, a Mac beside any other), so anything rendered differently on the two shows up as a hydration error. Visible focus runs in three of them (light, dark AAA and 390px AAA: both themes, both levels, both layouts) and cursors in three (light, light AAA and 390px AAA), and both check the sidebar and header, which are the same on every page, on the home page only; a check fails if that selector ever leaves out a control in a page's content. It also fails on console errors, sideways overflow, and any internal link to a page it doesn't check, and it follows a sidebar link, in Chromium and in WebKit, to check that the navigation stays client-side, runs the page transition, and covers the old page while it leaves. It also tries a shadcn/ui theme from the Playground: that it reaches every page, lasts through a reload without a flash, resets, and that a paste can set nothing but valid token values. The findings it accepts are listed in `test/site/pages.mjs`, each with its reason. The site brings its own palette, so its build runs the contrast audit against those colours.
|
|
332
370
|
- **Not tested:** other browsers; real screen readers (VoiceOver, NVDA and JAWS haven't been run on these components); Windows High Contrast; pasting files into the drop zone; everything that depends on a product's content.
|
|
333
371
|
|
|
334
372
|
## Developing
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* to the browser. Import from here, and the styles from "@setsquare/ui/styles.css".
|
|
7
7
|
*/
|
|
8
8
|
export { cn } from './lib/cn.js';
|
|
9
|
+
export { SetsquareLocale } from './lib/locale.js';
|
|
10
|
+
export type { SetsquareLocaleProps, SetsquareLabels } from './lib/locale.js';
|
|
9
11
|
export { useElementWidth } from './lib/use-element-width.js';
|
|
10
12
|
export { Button, LinkButton } from './ui/button.js';
|
|
11
13
|
export type { ButtonProps, LinkButtonProps } from './ui/button.js';
|
|
@@ -15,6 +17,7 @@ export { TextLink } from './ui/text-link.js';
|
|
|
15
17
|
export type { TextLinkProps } from './ui/text-link.js';
|
|
16
18
|
export { IconButton } from './ui/icon-button.js';
|
|
17
19
|
export type { IconButtonProps } from './ui/icon-button.js';
|
|
20
|
+
export { renderIcon } from './ui/icon.js';
|
|
18
21
|
export type { IconComponent, IconProp } from './ui/icon.js';
|
|
19
22
|
export { Tooltip, TooltipTrigger } from './ui/tooltip.js';
|
|
20
23
|
export { Kbd } from './ui/kbd.js';
|
|
@@ -22,7 +25,7 @@ export { StatusBadge } from './ui/badge.js';
|
|
|
22
25
|
export type { StatusTone, StatusBadgeProps } from './ui/badge.js';
|
|
23
26
|
export { Avatar, ProductMark } from './ui/avatar.js';
|
|
24
27
|
export { Breadcrumbs } from './ui/breadcrumbs.js';
|
|
25
|
-
export type { BreadcrumbItem, BreadcrumbsProps } from './ui/breadcrumbs.js';
|
|
28
|
+
export type { BreadcrumbItem, BreadcrumbsProps, BreadcrumbsLabels } from './ui/breadcrumbs.js';
|
|
26
29
|
export { Pagination } from './ui/pagination.js';
|
|
27
30
|
export type { PaginationProps, PaginationLabels, PaginationMeta } from './ui/pagination.js';
|
|
28
31
|
export { Tabs, TabList, Tab, TabPanel } from './ui/tabs.js';
|
|
@@ -38,6 +41,7 @@ export { AppSearch, CommandSearch, SearchTrigger } from './ui/search.js';
|
|
|
38
41
|
export type { SearchItem, SearchSection, SearchLabels } from './ui/search.js';
|
|
39
42
|
export { DashboardShell, ShellInset, ShellBody, ShellMain, useShell, useOptionalShell, } from './shell/dashboard-shell.js';
|
|
40
43
|
export type { ShellSize, PanelMode, DashboardShellProps } from './shell/dashboard-shell.js';
|
|
44
|
+
export type { ShellLabels, SiteNavLabels } from './shell/landmarks.js';
|
|
41
45
|
export { Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarGroup, SidebarList, SidebarItem, SidebarDisclosure, SidebarSwitcher, SidebarTrigger, useSidebarCollapsed, } from './shell/sidebar.js';
|
|
42
46
|
export type { SidebarLabels, SidebarTriggerLabels, SidebarDisclosureProps, SidebarSubItem, } from './shell/sidebar.js';
|
|
43
47
|
export { AppHeader } from './shell/app-header.js';
|
|
@@ -50,7 +54,7 @@ export type { SiteNavProps } from './shell/site-nav.js';
|
|
|
50
54
|
export { SiteNavLink, SitePathProvider } from './shell/site-nav-link.js';
|
|
51
55
|
export type { SiteNavLinkProps, SiteNavLinkVariant } from './shell/site-nav-link.js';
|
|
52
56
|
export { SiteMenu } from './shell/site-menu.js';
|
|
53
|
-
export type { SiteMenuProps } from './shell/site-menu.js';
|
|
57
|
+
export type { SiteMenuProps, SiteMenuLabels } from './shell/site-menu.js';
|
|
54
58
|
export { SiteFooter, SiteFooterGroup } from './shell/site-footer.js';
|
|
55
59
|
export type { SiteFooterProps, SiteFooterGroupProps } from './shell/site-footer.js';
|
|
56
60
|
export { samePath } from './shell/site-path.js';
|
|
@@ -65,7 +69,7 @@ export { LinkCard } from './ui/link-card.js';
|
|
|
65
69
|
export { SettingsCard } from './ui/settings-card.js';
|
|
66
70
|
export type { SettingsCardProps } from './ui/settings-card.js';
|
|
67
71
|
export { FeatureCard, FeatureCardItem } from './ui/feature-card.js';
|
|
68
|
-
export type { FeatureCardProps, FeatureCardItemProps } from './ui/feature-card.js';
|
|
72
|
+
export type { FeatureCardProps, FeatureCardItemProps, FeatureCardLabels, } from './ui/feature-card.js';
|
|
69
73
|
export { TimeOfDayIcon, timeOfDay } from './ui/time-of-day-icon.js';
|
|
70
74
|
export type { TimeOfDay, TimeOfDayIconProps } from './ui/time-of-day-icon.js';
|
|
71
75
|
export type { LinkCardProps } from './ui/link-card.js';
|
|
@@ -102,9 +106,9 @@ export { SearchField } from './ui/search-field.js';
|
|
|
102
106
|
export type { SearchFieldProps } from './ui/search-field.js';
|
|
103
107
|
export { ListBox, Option, OptionSection } from './ui/list-box.js';
|
|
104
108
|
export { Select } from './ui/select.js';
|
|
105
|
-
export type { SelectProps } from './ui/select.js';
|
|
109
|
+
export type { SelectProps, SelectLabels } from './ui/select.js';
|
|
106
110
|
export { ComboBox } from './ui/combo-box.js';
|
|
107
|
-
export type { ComboBoxProps } from './ui/combo-box.js';
|
|
111
|
+
export type { ComboBoxProps, ComboBoxLabels } from './ui/combo-box.js';
|
|
108
112
|
export { Checkbox, CheckboxGroup, SelectionCheckbox } from './ui/checkbox.js';
|
|
109
113
|
export type { CheckboxProps, CheckboxGroupProps, SelectionCheckboxProps } from './ui/checkbox.js';
|
|
110
114
|
export { RadioGroup, Radio } from './ui/radio-group.js';
|
|
@@ -112,7 +116,7 @@ export type { RadioGroupProps, RadioProps } from './ui/radio-group.js';
|
|
|
112
116
|
export { Switch } from './ui/switch.js';
|
|
113
117
|
export type { SwitchProps } from './ui/switch.js';
|
|
114
118
|
export { Form, FormSection, FormActions, ErrorSummary, StatusMessage } from './ui/form.js';
|
|
115
|
-
export type { FormProps, FormSectionProps, ErrorItem, ErrorSummaryProps } from './ui/form.js';
|
|
119
|
+
export type { FormProps, FormSectionProps, ErrorItem, ErrorSummaryProps, ErrorSummaryLabels, } from './ui/form.js';
|
|
116
120
|
export { SpinnerIcon, Spinner, ProgressBar } from './ui/spinner.js';
|
|
117
121
|
export type { SpinnerProps, ProgressBarProps } from './ui/spinner.js';
|
|
118
122
|
export { Skeleton, SkeletonText, TableSkeleton, LoadingState } from './ui/skeleton.js';
|
|
@@ -128,7 +132,7 @@ export type { ToastContent, ToastTone, ToasterLabels } from './ui/toast.js';
|
|
|
128
132
|
export { ErrorState, ErrorBoundary } from './ui/error-state.js';
|
|
129
133
|
export type { ErrorStateProps, ErrorKind, ErrorBoundaryProps, ErrorStateLabels, } from './ui/error-state.js';
|
|
130
134
|
export { Slider, RangeSlider } from './ui/slider.js';
|
|
131
|
-
export type { SliderProps, RangeSliderProps } from './ui/slider.js';
|
|
135
|
+
export type { SliderProps, RangeSliderProps, RangeSliderLabels } from './ui/slider.js';
|
|
132
136
|
export { Calendar, RangeCalendar } from './ui/calendar.js';
|
|
133
137
|
export type { CalendarProps, RangeCalendarProps, CalendarLabels } from './ui/calendar.js';
|
|
134
138
|
export { DateField, TimeField, DatePicker, DateRangePicker } from './ui/date-field.js';
|
|
@@ -139,6 +143,10 @@ export { GridList, GridListItem } from './ui/grid-list.js';
|
|
|
139
143
|
export type { GridListProps, GridListItemProps } from './ui/grid-list.js';
|
|
140
144
|
export { Tree, TreeItem, TreeSection, TreeHeader } from './ui/tree.js';
|
|
141
145
|
export type { TreeProps, TreeItemProps, TreeSectionProps } from './ui/tree.js';
|
|
146
|
+
export { DropIndicator } from './ui/drop-indicator.js';
|
|
147
|
+
export type { DropIndicatorProps } from './ui/drop-indicator.js';
|
|
148
|
+
export { Toolbar, ToolbarSeparator } from './ui/toolbar.js';
|
|
149
|
+
export type { ToolbarProps } from './ui/toolbar.js';
|
|
142
150
|
export { SelectionBar } from './ui/selection-bar.js';
|
|
143
151
|
export type { SelectionBarProps, SelectionBarLabels } from './ui/selection-bar.js';
|
|
144
152
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
* to the browser. Import from here, and the styles from "@setsquare/ui/styles.css".
|
|
7
7
|
*/
|
|
8
8
|
export { cn } from './lib/cn.js';
|
|
9
|
+
export { SetsquareLocale } from './lib/locale.js';
|
|
9
10
|
export { useElementWidth } from './lib/use-element-width.js';
|
|
10
11
|
export { Button, LinkButton } from './ui/button.js';
|
|
11
12
|
// From their own module, which has no 'use client', so a server component can call them.
|
|
12
13
|
export { buttonTargetStyles, buttonVisualStyles } from './ui/button-styles.js';
|
|
13
14
|
export { TextLink } from './ui/text-link.js';
|
|
14
15
|
export { IconButton } from './ui/icon-button.js';
|
|
16
|
+
export { renderIcon } from './ui/icon.js';
|
|
15
17
|
export { Tooltip, TooltipTrigger } from './ui/tooltip.js';
|
|
16
18
|
export { Kbd } from './ui/kbd.js';
|
|
17
19
|
export { StatusBadge } from './ui/badge.js';
|
|
@@ -80,5 +82,7 @@ export { DateField, TimeField, DatePicker, DateRangePicker } from './ui/date-fie
|
|
|
80
82
|
export { FileUpload, formatBytes } from './ui/file-upload.js';
|
|
81
83
|
export { GridList, GridListItem } from './ui/grid-list.js';
|
|
82
84
|
export { Tree, TreeItem, TreeSection, TreeHeader } from './ui/tree.js';
|
|
85
|
+
export { DropIndicator } from './ui/drop-indicator.js';
|
|
86
|
+
export { Toolbar, ToolbarSeparator } from './ui/toolbar.js';
|
|
83
87
|
export { SelectionBar } from './ui/selection-bar.js';
|
|
84
88
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,yFAAyF;AACzF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every component's English words, keyed as `SetsquareLabels` is: the defaults a product's labels replace. Not
|
|
3
|
+
* exported from the package. The pseudo-locale sweep (test/browser/labels.mjs) reads it from the build, to
|
|
4
|
+
* replace every word with a marked pseudo-translation and find any English left.
|
|
5
|
+
*/
|
|
6
|
+
import type { SetsquareLabels } from './locale.js';
|
|
7
|
+
/** Every key of `SetsquareLabels`, with every word: adding a component's labels to one and not here fails tsc. */
|
|
8
|
+
export declare const englishLabels: {
|
|
9
|
+
[K in keyof SetsquareLabels]-?: Required<NonNullable<SetsquareLabels[K]>>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=english.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"english.d.ts","sourceRoot":"","sources":["../../src/lib/english.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4BnD,kHAAkH;AAClH,eAAO,MAAM,aAAa,EAAE;KACzB,CAAC,IAAI,MAAM,eAAe,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAqC1E,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { shellLabels, siteNavLabels } from '../shell/landmarks.js';
|
|
2
|
+
import { rightPanelLabels } from '../shell/right-panel.js';
|
|
3
|
+
import { sidebarLabels, sidebarTriggerLabels } from '../shell/sidebar.js';
|
|
4
|
+
import { siteMenuLabels } from '../shell/site-menu.js';
|
|
5
|
+
import { alertLabels, offlineAlertLabels } from '../ui/alert.js';
|
|
6
|
+
import { breadcrumbsLabels } from '../ui/breadcrumbs.js';
|
|
7
|
+
import { calendarLabels } from '../ui/calendar.js';
|
|
8
|
+
import { codeBlockLabels } from '../ui/code-block-parts.js';
|
|
9
|
+
import { comboBoxLabels } from '../ui/combo-box.js';
|
|
10
|
+
import { copyButtonLabels } from '../ui/copy-button.js';
|
|
11
|
+
import { dateFieldLabels } from '../ui/date-field.js';
|
|
12
|
+
import { confirmDialogLabels, dialogLabels } from '../ui/dialog.js';
|
|
13
|
+
import { errorStateLabels } from '../ui/error-state.js';
|
|
14
|
+
import { featureCardLabels } from '../ui/feature-card.js';
|
|
15
|
+
import { fieldLabels } from '../ui/field.js';
|
|
16
|
+
import { fileUploadLabels } from '../ui/file-upload.js';
|
|
17
|
+
import { errorSummaryLabels } from '../ui/form.js';
|
|
18
|
+
import { paginationLabels } from '../ui/pagination.js';
|
|
19
|
+
import { searchLabels } from '../ui/search.js';
|
|
20
|
+
import { selectLabels } from '../ui/select.js';
|
|
21
|
+
import { selectionBarLabels } from '../ui/selection-bar.js';
|
|
22
|
+
import { sheetLabels } from '../ui/sheet.js';
|
|
23
|
+
import { rangeSliderLabels } from '../ui/slider.js';
|
|
24
|
+
import { tabsLabels } from '../ui/tabs.js';
|
|
25
|
+
import { themeSwitcherLabels } from '../ui/theme-switcher.js';
|
|
26
|
+
import { toasterLabels } from '../ui/toast.js';
|
|
27
|
+
/** Every key of `SetsquareLabels`, with every word: adding a component's labels to one and not here fails tsc. */
|
|
28
|
+
export const englishLabels = {
|
|
29
|
+
alert: alertLabels,
|
|
30
|
+
breadcrumbs: breadcrumbsLabels,
|
|
31
|
+
calendar: calendarLabels,
|
|
32
|
+
codeBlock: codeBlockLabels,
|
|
33
|
+
comboBox: { noMatches: comboBoxLabels.noMatches },
|
|
34
|
+
confirmDialog: confirmDialogLabels,
|
|
35
|
+
copyButton: copyButtonLabels,
|
|
36
|
+
dashboardShell: shellLabels,
|
|
37
|
+
dateField: {
|
|
38
|
+
tooEarly: dateFieldLabels.tooEarly,
|
|
39
|
+
tooLate: dateFieldLabels.tooLate,
|
|
40
|
+
unavailable: dateFieldLabels.unavailable,
|
|
41
|
+
},
|
|
42
|
+
dialog: dialogLabels,
|
|
43
|
+
errorState: errorStateLabels,
|
|
44
|
+
errorSummary: errorSummaryLabels,
|
|
45
|
+
featureCard: featureCardLabels,
|
|
46
|
+
field: fieldLabels,
|
|
47
|
+
fileUpload: fileUploadLabels,
|
|
48
|
+
offlineAlert: offlineAlertLabels,
|
|
49
|
+
pagination: paginationLabels,
|
|
50
|
+
rangeSlider: rangeSliderLabels,
|
|
51
|
+
rightPanel: rightPanelLabels,
|
|
52
|
+
search: searchLabels,
|
|
53
|
+
select: { placeholder: selectLabels.placeholder },
|
|
54
|
+
selectionBar: selectionBarLabels,
|
|
55
|
+
sheet: sheetLabels,
|
|
56
|
+
sidebar: sidebarLabels,
|
|
57
|
+
sidebarTrigger: sidebarTriggerLabels,
|
|
58
|
+
siteMenu: { menu: siteMenuLabels.menu },
|
|
59
|
+
siteNav: siteNavLabels,
|
|
60
|
+
siteShell: shellLabels,
|
|
61
|
+
tabs: tabsLabels,
|
|
62
|
+
themeSwitcher: themeSwitcherLabels,
|
|
63
|
+
toaster: toasterLabels,
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=english.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"english.js","sourceRoot":"","sources":["../../src/lib/english.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/labels.d.ts
CHANGED
|
@@ -1,11 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The words a component shows or says, which a product can replace one component at a time through its `labels`
|
|
3
|
-
* prop
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
export
|
|
3
|
+
* prop, or for the whole app through `SetsquareLocale`: an object of strings, any of which can be left out to
|
|
4
|
+
* keep the English default. Each word is an ICU MessageFormat template, so a value goes in a placeholder
|
|
5
|
+
* ("Remove {name}") and a count chooses the words it needs ("{count, plural, one {# file} other {# files}}"),
|
|
6
|
+
* in any language. Templates stay strings rather than functions, so `labels` is plain data that a server
|
|
7
|
+
* component can pass to a client one.
|
|
8
|
+
*/
|
|
9
|
+
/** The values a word's placeholders are filled with. */
|
|
10
|
+
export type LabelValues = Record<string, string | number>;
|
|
11
|
+
/** The English defaults with any of the product's words laid over them, later layers winning. */
|
|
12
|
+
export declare function withLabels<T extends object>(defaults: T, ...layers: (Partial<T> | undefined)[]): T;
|
|
13
|
+
/** Formats an ICU template in `locale`. Throws if it is malformed or a value it names is missing. */
|
|
14
|
+
export declare function formatLabel(template: string, values: LabelValues, locale: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Finished text as a template that formats to itself, for handing a word one component has formatted to another
|
|
17
|
+
* that formats its labels: an apostrophe is doubled and each brace quoted.
|
|
18
|
+
*/
|
|
19
|
+
export declare function literal(text: string): string;
|
|
20
|
+
/** Replaces `{name}` with its value and nothing else. For a path (`/projects?page={page}`), not for words. */
|
|
21
|
+
export declare function substitute(template: string, values: LabelValues): string;
|
|
22
|
+
/**
|
|
23
|
+
* Formats a word: `fill('Remove {name}', { name: 'plan.pdf' }, 'en')` is "Remove plan.pdf". A word that can't
|
|
24
|
+
* be formatted throws in development. In production it shows `fallback` (the package's English default for the
|
|
25
|
+
* word) formatted with the same values, and if that fails too, `fallback` with its plain `{name}` placeholders
|
|
26
|
+
* replaced, so a page never breaks over a word.
|
|
27
|
+
*/
|
|
28
|
+
export declare function fill(template: string, values?: LabelValues, locale?: string, fallback?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Stands in for a value that a component draws itself (a bold figure, a page number), so a template can be
|
|
31
|
+
* formatted whole and then split around it with `splitMarkers`. Only for a plain `{name}` placeholder: a marked
|
|
32
|
+
* value isn't a number, so it can't choose a plural.
|
|
33
|
+
*/
|
|
34
|
+
export declare function marker(name: string): string;
|
|
35
|
+
/** A formatted word in pieces: its text, and `{ marker }` where each `marker(name)` was. */
|
|
36
|
+
export declare function splitMarkers(text: string): (string | {
|
|
37
|
+
marker: string;
|
|
38
|
+
})[];
|
|
39
|
+
/** A list in `locale`'s words and punctuation, through `Intl.ListFormat`: "A, B, C"; "PDF, PNG or JPEG". */
|
|
40
|
+
export declare function formatList(items: string[], locale: string, options?: Intl.ListFormatOptions): string;
|
|
11
41
|
//# sourceMappingURL=labels.d.ts.map
|
package/dist/lib/labels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE1D,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,QAAQ,EAAE,CAAC,EACX,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,GACpC,CAAC,CAOH;AAiBD,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,8GAA8G;AAC9G,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAIxE;AAcD;;;;;GAKG;AACH,wBAAgB,IAAI,CAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,WAAgB,EACxB,MAAM,SAAO,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAYR;AAKD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAW1E;AAED,4GAA4G;AAC5G,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,IAAI,CAAC,iBAAoD,GACjE,MAAM,CAER"}
|