@setsquare/ui 0.5.0 → 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.
Files changed (172) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +42 -4
  3. package/dist/index.d.ts +15 -9
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/cn.d.ts.map +1 -1
  8. package/dist/lib/cn.js +1 -0
  9. package/dist/lib/cn.js.map +1 -1
  10. package/dist/lib/english.d.ts +11 -0
  11. package/dist/lib/english.d.ts.map +1 -0
  12. package/dist/lib/english.js +67 -0
  13. package/dist/lib/english.js.map +1 -0
  14. package/dist/lib/labels.d.ts +38 -8
  15. package/dist/lib/labels.d.ts.map +1 -1
  16. package/dist/lib/labels.js +97 -9
  17. package/dist/lib/labels.js.map +1 -1
  18. package/dist/lib/locale.d.ts +108 -0
  19. package/dist/lib/locale.d.ts.map +1 -0
  20. package/dist/lib/locale.js +42 -0
  21. package/dist/lib/locale.js.map +1 -0
  22. package/dist/shell/app-header.d.ts +4 -1
  23. package/dist/shell/app-header.d.ts.map +1 -1
  24. package/dist/shell/app-header.js +6 -3
  25. package/dist/shell/app-header.js.map +1 -1
  26. package/dist/shell/dashboard-shell.d.ts +16 -2
  27. package/dist/shell/dashboard-shell.d.ts.map +1 -1
  28. package/dist/shell/dashboard-shell.js +7 -3
  29. package/dist/shell/dashboard-shell.js.map +1 -1
  30. package/dist/shell/landmarks.d.ts +33 -0
  31. package/dist/shell/landmarks.d.ts.map +1 -0
  32. package/dist/shell/landmarks.js +20 -0
  33. package/dist/shell/landmarks.js.map +1 -0
  34. package/dist/shell/nav-status.d.ts +46 -0
  35. package/dist/shell/nav-status.d.ts.map +1 -0
  36. package/dist/shell/nav-status.js +26 -0
  37. package/dist/shell/nav-status.js.map +1 -0
  38. package/dist/shell/rail.d.ts +73 -0
  39. package/dist/shell/rail.d.ts.map +1 -0
  40. package/dist/shell/rail.js +87 -0
  41. package/dist/shell/rail.js.map +1 -0
  42. package/dist/shell/right-panel.d.ts +7 -2
  43. package/dist/shell/right-panel.d.ts.map +1 -1
  44. package/dist/shell/right-panel.js +13 -7
  45. package/dist/shell/right-panel.js.map +1 -1
  46. package/dist/shell/sidebar.d.ts +41 -8
  47. package/dist/shell/sidebar.d.ts.map +1 -1
  48. package/dist/shell/sidebar.js +73 -19
  49. package/dist/shell/sidebar.js.map +1 -1
  50. package/dist/shell/site-menu.d.ts +11 -3
  51. package/dist/shell/site-menu.d.ts.map +1 -1
  52. package/dist/shell/site-menu.js +7 -1
  53. package/dist/shell/site-menu.js.map +1 -1
  54. package/dist/shell/site-nav.d.ts +4 -1
  55. package/dist/shell/site-nav.d.ts.map +1 -1
  56. package/dist/shell/site-nav.js +3 -3
  57. package/dist/shell/site-nav.js.map +1 -1
  58. package/dist/shell/site-shell.d.ts +4 -2
  59. package/dist/shell/site-shell.d.ts.map +1 -1
  60. package/dist/shell/site-shell.js +3 -2
  61. package/dist/shell/site-shell.js.map +1 -1
  62. package/dist/styles/theme.css +78 -0
  63. package/dist/styles/tokens.css +4 -4
  64. package/dist/tokens.json +4 -4
  65. package/dist/ui/alert.d.ts +2 -0
  66. package/dist/ui/alert.d.ts.map +1 -1
  67. package/dist/ui/alert.js +11 -9
  68. package/dist/ui/alert.js.map +1 -1
  69. package/dist/ui/breadcrumbs.d.ts +9 -1
  70. package/dist/ui/breadcrumbs.d.ts.map +1 -1
  71. package/dist/ui/breadcrumbs.js +5 -2
  72. package/dist/ui/breadcrumbs.js.map +1 -1
  73. package/dist/ui/calendar.d.ts +1 -0
  74. package/dist/ui/calendar.d.ts.map +1 -1
  75. package/dist/ui/calendar.js +7 -1
  76. package/dist/ui/calendar.js.map +1 -1
  77. package/dist/ui/checkbox.d.ts.map +1 -1
  78. package/dist/ui/checkbox.js +7 -7
  79. package/dist/ui/checkbox.js.map +1 -1
  80. package/dist/ui/code-block-parts.d.ts +30 -0
  81. package/dist/ui/code-block-parts.d.ts.map +1 -0
  82. package/dist/ui/code-block-parts.js +27 -0
  83. package/dist/ui/code-block-parts.js.map +1 -0
  84. package/dist/ui/code-block.d.ts +4 -10
  85. package/dist/ui/code-block.d.ts.map +1 -1
  86. package/dist/ui/code-block.js +4 -9
  87. package/dist/ui/code-block.js.map +1 -1
  88. package/dist/ui/combo-box.d.ts +7 -1
  89. package/dist/ui/combo-box.d.ts.map +1 -1
  90. package/dist/ui/combo-box.js +9 -2
  91. package/dist/ui/combo-box.js.map +1 -1
  92. package/dist/ui/copy-button.d.ts +7 -1
  93. package/dist/ui/copy-button.d.ts.map +1 -1
  94. package/dist/ui/copy-button.js +11 -10
  95. package/dist/ui/copy-button.js.map +1 -1
  96. package/dist/ui/date-field.d.ts +1 -0
  97. package/dist/ui/date-field.d.ts.map +1 -1
  98. package/dist/ui/date-field.js +20 -16
  99. package/dist/ui/date-field.js.map +1 -1
  100. package/dist/ui/dialog.d.ts +6 -1
  101. package/dist/ui/dialog.d.ts.map +1 -1
  102. package/dist/ui/dialog.js +11 -8
  103. package/dist/ui/dialog.js.map +1 -1
  104. package/dist/ui/error-state.d.ts +17 -2
  105. package/dist/ui/error-state.d.ts.map +1 -1
  106. package/dist/ui/error-state.js +32 -34
  107. package/dist/ui/error-state.js.map +1 -1
  108. package/dist/ui/feature-card.d.ts +18 -3
  109. package/dist/ui/feature-card.d.ts.map +1 -1
  110. package/dist/ui/feature-card.js +18 -3
  111. package/dist/ui/feature-card.js.map +1 -1
  112. package/dist/ui/field.d.ts +28 -9
  113. package/dist/ui/field.d.ts.map +1 -1
  114. package/dist/ui/field.js +22 -10
  115. package/dist/ui/field.js.map +1 -1
  116. package/dist/ui/file-upload.d.ts +23 -5
  117. package/dist/ui/file-upload.d.ts.map +1 -1
  118. package/dist/ui/file-upload.js +54 -36
  119. package/dist/ui/file-upload.js.map +1 -1
  120. package/dist/ui/form.d.ts +11 -1
  121. package/dist/ui/form.d.ts.map +1 -1
  122. package/dist/ui/form.js +7 -4
  123. package/dist/ui/form.js.map +1 -1
  124. package/dist/ui/number-field.d.ts.map +1 -1
  125. package/dist/ui/number-field.js +5 -3
  126. package/dist/ui/number-field.js.map +1 -1
  127. package/dist/ui/pagination.d.ts +11 -3
  128. package/dist/ui/pagination.d.ts.map +1 -1
  129. package/dist/ui/pagination.js +30 -23
  130. package/dist/ui/pagination.js.map +1 -1
  131. package/dist/ui/radio-group.d.ts.map +1 -1
  132. package/dist/ui/radio-group.js +4 -4
  133. package/dist/ui/radio-group.js.map +1 -1
  134. package/dist/ui/search.d.ts +3 -0
  135. package/dist/ui/search.d.ts.map +1 -1
  136. package/dist/ui/search.js +11 -10
  137. package/dist/ui/search.js.map +1 -1
  138. package/dist/ui/select.d.ts +7 -1
  139. package/dist/ui/select.d.ts.map +1 -1
  140. package/dist/ui/select.js +7 -3
  141. package/dist/ui/select.js.map +1 -1
  142. package/dist/ui/selection-bar.d.ts +17 -4
  143. package/dist/ui/selection-bar.d.ts.map +1 -1
  144. package/dist/ui/selection-bar.js +15 -11
  145. package/dist/ui/selection-bar.js.map +1 -1
  146. package/dist/ui/sheet.d.ts +1 -0
  147. package/dist/ui/sheet.d.ts.map +1 -1
  148. package/dist/ui/sheet.js +4 -1
  149. package/dist/ui/sheet.js.map +1 -1
  150. package/dist/ui/slider.d.ts +9 -2
  151. package/dist/ui/slider.d.ts.map +1 -1
  152. package/dist/ui/slider.js +13 -5
  153. package/dist/ui/slider.js.map +1 -1
  154. package/dist/ui/tabs.d.ts +1 -0
  155. package/dist/ui/tabs.d.ts.map +1 -1
  156. package/dist/ui/tabs.js +13 -12
  157. package/dist/ui/tabs.js.map +1 -1
  158. package/dist/ui/text-field.d.ts.map +1 -1
  159. package/dist/ui/text-field.js +7 -3
  160. package/dist/ui/text-field.js.map +1 -1
  161. package/dist/ui/theme-switcher.d.ts +1 -0
  162. package/dist/ui/theme-switcher.d.ts.map +1 -1
  163. package/dist/ui/theme-switcher.js +7 -7
  164. package/dist/ui/theme-switcher.js.map +1 -1
  165. package/dist/ui/toast.d.ts +1 -0
  166. package/dist/ui/toast.d.ts.map +1 -1
  167. package/dist/ui/toast.js +4 -1
  168. package/dist/ui/toast.js.map +1 -1
  169. package/dist/ui/tree.d.ts.map +1 -1
  170. package/dist/ui/tree.js +5 -5
  171. package/dist/ui/tree.js.map +1 -1
  172. package/package.json +2 -1
@@ -1,15 +1,103 @@
1
+ import { IntlMessageFormat } from 'intl-messageformat';
2
+ /** The English defaults with any of the product's words laid over them, later layers winning. */
3
+ export function withLabels(defaults, ...layers) {
4
+ const words = { ...defaults };
5
+ for (const layer of layers) {
6
+ if (!layer)
7
+ continue;
8
+ for (const [key, word] of Object.entries(layer))
9
+ if (word !== undefined)
10
+ words[key] = word;
11
+ }
12
+ return words;
13
+ }
14
+ // Compiled templates, by locale and template. Labels are a fixed set, so this stays small; the cap is a guard.
15
+ const compiled = new Map();
16
+ function compile(template, locale) {
17
+ const key = `${locale}\u0000${template}`;
18
+ let message = compiled.get(key);
19
+ if (!message) {
20
+ if (compiled.size >= 1000)
21
+ compiled.clear();
22
+ // ignoreTag: `<b>` is text, as PHP's ICU and a product's translators read it, not rich-text markup.
23
+ message = new IntlMessageFormat(template, locale, undefined, { ignoreTag: true });
24
+ compiled.set(key, message);
25
+ }
26
+ return message;
27
+ }
28
+ /** Formats an ICU template in `locale`. Throws if it is malformed or a value it names is missing. */
29
+ export function formatLabel(template, values, locale) {
30
+ return String(compile(template, locale).format(values));
31
+ }
1
32
  /**
2
- * The words a component shows or says, which a product can replace one component at a time through its `labels`
3
- * prop: an object of strings, any of which can be left out to keep the English default. A word that carries a
4
- * value has a `{name}` placeholder in its string ("Remove {name}") rather than being a function, so `labels`
5
- * stays plain data that a server component can pass to a client one.
33
+ * Finished text as a template that formats to itself, for handing a word one component has formatted to another
34
+ * that formats its labels: an apostrophe is doubled and each brace quoted.
6
35
  */
7
- /** The English defaults with any of the product's words laid over them. */
8
- export function withLabels(defaults, labels) {
9
- return labels ? { ...defaults, ...labels } : defaults;
36
+ export function literal(text) {
37
+ return text.replace(/'/g, "''").replace(/[{}]/g, (brace) => `'${brace}'`);
10
38
  }
11
- /** Fills `{name}` placeholders: `fill('Remove {name}', { name: 'plan.pdf' })` is "Remove plan.pdf". */
12
- export function fill(template, values) {
39
+ /** Replaces `{name}` with its value and nothing else. For a path (`/projects?page={page}`), not for words. */
40
+ export function substitute(template, values) {
13
41
  return template.replace(/\{(\w+)\}/g, (match, key) => key in values ? String(values[key]) : match);
14
42
  }
43
+ function development() {
44
+ try {
45
+ return process.env.NODE_ENV !== 'production';
46
+ }
47
+ catch {
48
+ // No `process` at all: a page with no build step, which is nobody's development server.
49
+ return false;
50
+ }
51
+ }
52
+ /**
53
+ * Formats a word: `fill('Remove {name}', { name: 'plan.pdf' }, 'en')` is "Remove plan.pdf". A word that can't
54
+ * be formatted throws in development. In production it shows `fallback` (the package's English default for the
55
+ * word) formatted with the same values, and if that fails too, `fallback` with its plain `{name}` placeholders
56
+ * replaced, so a page never breaks over a word.
57
+ */
58
+ export function fill(template, values = {}, locale = 'en', fallback) {
59
+ try {
60
+ return formatLabel(template, values, locale);
61
+ }
62
+ catch (error) {
63
+ if (development())
64
+ throw error;
65
+ const english = fallback ?? template;
66
+ try {
67
+ return formatLabel(english, values, 'en');
68
+ }
69
+ catch {
70
+ return substitute(english, values);
71
+ }
72
+ }
73
+ }
74
+ const OPEN = '';
75
+ const CLOSE = '';
76
+ /**
77
+ * Stands in for a value that a component draws itself (a bold figure, a page number), so a template can be
78
+ * formatted whole and then split around it with `splitMarkers`. Only for a plain `{name}` placeholder: a marked
79
+ * value isn't a number, so it can't choose a plural.
80
+ */
81
+ export function marker(name) {
82
+ return `${OPEN}${name}${CLOSE}`;
83
+ }
84
+ /** A formatted word in pieces: its text, and `{ marker }` where each `marker(name)` was. */
85
+ export function splitMarkers(text) {
86
+ const pieces = [];
87
+ const pattern = new RegExp(`${OPEN}([^${CLOSE}]*)${CLOSE}`, 'g');
88
+ let at = 0;
89
+ for (const match of text.matchAll(pattern)) {
90
+ if (match.index > at)
91
+ pieces.push(text.slice(at, match.index));
92
+ pieces.push({ marker: match[1] });
93
+ at = match.index + match[0].length;
94
+ }
95
+ if (at < text.length)
96
+ pieces.push(text.slice(at));
97
+ return pieces;
98
+ }
99
+ /** A list in `locale`'s words and punctuation, through `Intl.ListFormat`: "A, B, C"; "PDF, PNG or JPEG". */
100
+ export function formatList(items, locale, options = { type: 'unit', style: 'short' }) {
101
+ return new Intl.ListFormat(locale, options).format(items);
102
+ }
15
103
  //# sourceMappingURL=labels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAmB,QAAW,EAAE,MAA8B;IACtF,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,IAAI,CAAC,QAAgB,EAAE,MAAuC;IAC5E,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE,CAC3D,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type LabelValues } from './labels.js';
3
+ import type { ShellLabels, SiteNavLabels } from '../shell/landmarks.js';
4
+ import type { RailLabels } from '../shell/rail.js';
5
+ import type { RightPanelLabels } from '../shell/right-panel.js';
6
+ import type { SidebarLabels, SidebarTriggerLabels } from '../shell/sidebar.js';
7
+ import type { SiteMenuLabels } from '../shell/site-menu.js';
8
+ import type { AlertLabels, OfflineAlertLabels } from '../ui/alert.js';
9
+ import type { BreadcrumbsLabels } from '../ui/breadcrumbs.js';
10
+ import type { CalendarLabels } from '../ui/calendar.js';
11
+ import type { CodeBlockLabels } from '../ui/code-block-parts.js';
12
+ import type { ComboBoxLabels } from '../ui/combo-box.js';
13
+ import type { CopyButtonLabels } from '../ui/copy-button.js';
14
+ import type { DateFieldLabels } from '../ui/date-field.js';
15
+ import type { ConfirmDialogLabels, DialogLabels } from '../ui/dialog.js';
16
+ import type { ErrorStateLabels } from '../ui/error-state.js';
17
+ import type { FeatureCardLabels } from '../ui/feature-card.js';
18
+ import type { FieldLabels } from '../ui/field.js';
19
+ import type { FileUploadLabels } from '../ui/file-upload.js';
20
+ import type { ErrorSummaryLabels } from '../ui/form.js';
21
+ import type { PaginationLabels } from '../ui/pagination.js';
22
+ import type { SearchLabels } from '../ui/search.js';
23
+ import type { SelectLabels } from '../ui/select.js';
24
+ import type { SelectionBarLabels } from '../ui/selection-bar.js';
25
+ import type { SheetLabels } from '../ui/sheet.js';
26
+ import type { RangeSliderLabels } from '../ui/slider.js';
27
+ import type { TabsLabels } from '../ui/tabs.js';
28
+ import type { ThemeSwitcherLabels } from '../ui/theme-switcher.js';
29
+ import type { ToasterLabels } from '../ui/toast.js';
30
+ /**
31
+ * The words every component can take app-wide, keyed by component. Each entry is that component's `labels`
32
+ * shape with every word optional; a word left out stays English.
33
+ */
34
+ export interface SetsquareLabels {
35
+ alert?: Partial<AlertLabels>;
36
+ breadcrumbs?: Partial<BreadcrumbsLabels>;
37
+ calendar?: Partial<CalendarLabels>;
38
+ /** CodeBlock's own words; its copy button's are `copyButton`'s. */
39
+ codeBlock?: Partial<Omit<CodeBlockLabels, keyof CopyButtonLabels>>;
40
+ /** ComboBox, over `field`. */
41
+ comboBox?: Partial<Omit<ComboBoxLabels, keyof FieldLabels>>;
42
+ confirmDialog?: Partial<ConfirmDialogLabels>;
43
+ copyButton?: Partial<CopyButtonLabels>;
44
+ /** DashboardShell's skip link. */
45
+ dashboardShell?: Partial<ShellLabels>;
46
+ /** DateField, TimeField, DatePicker and DateRangePicker, over `field`. */
47
+ dateField?: Partial<Omit<DateFieldLabels, keyof FieldLabels>>;
48
+ dialog?: Partial<DialogLabels>;
49
+ errorState?: Partial<ErrorStateLabels>;
50
+ /** ErrorSummary, and the one Form shows. */
51
+ errorSummary?: Partial<ErrorSummaryLabels>;
52
+ featureCard?: Partial<FeatureCardLabels>;
53
+ /** Every field. */
54
+ field?: Partial<FieldLabels>;
55
+ fileUpload?: Partial<FileUploadLabels>;
56
+ offlineAlert?: Partial<OfflineAlertLabels>;
57
+ pagination?: Partial<PaginationLabels>;
58
+ /** Rail, the navigation of layout option C, laid over `sidebar`'s words for the same keys. */
59
+ rail?: Partial<RailLabels>;
60
+ rangeSlider?: Partial<RangeSliderLabels>;
61
+ /** RightPanel and PanelToggle. */
62
+ rightPanel?: Partial<RightPanelLabels>;
63
+ search?: Partial<SearchLabels>;
64
+ selectionBar?: Partial<SelectionBarLabels>;
65
+ /** Select, over `field`. */
66
+ select?: Partial<Omit<SelectLabels, keyof FieldLabels>>;
67
+ sheet?: Partial<SheetLabels>;
68
+ sidebar?: Partial<SidebarLabels>;
69
+ sidebarTrigger?: Partial<SidebarTriggerLabels>;
70
+ /** SiteMenu's button; its navigation's name is `siteNav`'s. */
71
+ siteMenu?: Partial<Omit<SiteMenuLabels, keyof SiteNavLabels>>;
72
+ /** SiteNav, and SiteMenu's navigation. */
73
+ siteNav?: Partial<SiteNavLabels>;
74
+ /** SiteShell's skip link. */
75
+ siteShell?: Partial<ShellLabels>;
76
+ tabs?: Partial<TabsLabels>;
77
+ themeSwitcher?: Partial<ThemeSwitcherLabels>;
78
+ toaster?: Partial<ToasterLabels>;
79
+ }
80
+ export interface SetsquareLocaleProps {
81
+ /**
82
+ * A BCP 47 language tag (`en-GB`, `de`, `pl`): the language of the product's words, and of React Aria's own
83
+ * (the calendar's buttons, "Clear search", the table's "Select all"), numbers, dates and lists. Set it, or
84
+ * React Aria follows the server's default while rendering there and the browser's after hydration. Left out
85
+ * on a nested provider, it keeps the outer one's.
86
+ */
87
+ locale?: string;
88
+ /**
89
+ * Words for every component of a kind, keyed by component: `{ pagination: { previous: 'Zurück' } }`. A
90
+ * component's own `labels` prop wins over these, and these over the English defaults. A nested provider's
91
+ * words are laid over the outer one's, one component at a time.
92
+ */
93
+ labels?: SetsquareLabels;
94
+ children?: ReactNode;
95
+ }
96
+ /**
97
+ * Sets the language once for the whole product: React Aria's locale (through its I18nProvider) and every
98
+ * component's words. Put it high in the root layout, inside `<html lang>`, with the same locale.
99
+ */
100
+ export declare function SetsquareLocale({ locale, labels, children }: SetsquareLocaleProps): import("react").JSX.Element;
101
+ /** Formats one of a component's words, an ICU template, with its values: `t('remove', { name: 'plan.pdf' })`. */
102
+ export type Translate<T> = (key: keyof T & string, values?: LabelValues) => string;
103
+ /**
104
+ * A component's words: its English defaults, under the app-wide ones from `SetsquareLocale` (each name in
105
+ * `names`, later ones winning), under the instance's own `labels`. Returns a function that formats one word.
106
+ */
107
+ export declare function useLabels<T extends object>(names: keyof SetsquareLabels | (keyof SetsquareLabels)[], defaults: T, given: Partial<T> | undefined): Translate<T>;
108
+ //# sourceMappingURL=locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../src/lib/locale.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useMemo } from 'react';
4
+ import { I18nProvider, useLocale } from 'react-aria-components';
5
+ import { fill, withLabels } from './labels.js';
6
+ const LocaleContext = createContext({ locale: undefined, labels: {} });
7
+ /**
8
+ * Sets the language once for the whole product: React Aria's locale (through its I18nProvider) and every
9
+ * component's words. Put it high in the root layout, inside `<html lang>`, with the same locale.
10
+ */
11
+ export function SetsquareLocale({ locale, labels, children }) {
12
+ const outer = useContext(LocaleContext);
13
+ const resolved = locale ?? outer.locale;
14
+ const value = useMemo(() => {
15
+ if (!labels)
16
+ return { locale: resolved, labels: outer.labels };
17
+ const merged = { ...outer.labels };
18
+ for (const [key, words] of Object.entries(labels)) {
19
+ merged[key] = withLabels(merged[key] ?? {}, words);
20
+ }
21
+ return { locale: resolved, labels: merged };
22
+ }, [resolved, labels, outer.labels]);
23
+ const provided = _jsx(LocaleContext.Provider, { value: value, children: children });
24
+ return resolved ? _jsx(I18nProvider, { locale: resolved, children: provided }) : provided;
25
+ }
26
+ /**
27
+ * A component's words: its English defaults, under the app-wide ones from `SetsquareLocale` (each name in
28
+ * `names`, later ones winning), under the instance's own `labels`. Returns a function that formats one word.
29
+ */
30
+ export function useLabels(names, defaults, given) {
31
+ const { labels: appWide } = useContext(LocaleContext);
32
+ const { locale } = useLocale();
33
+ const layers = (Array.isArray(names) ? names : [names]).map((name) => appWide[name]);
34
+ // Compared by content, so `labels={{ … }}` written inline doesn't give the function a new identity each render.
35
+ const words = JSON.stringify(withLabels(defaults, ...layers, given));
36
+ return useMemo(() => {
37
+ const parsed = JSON.parse(words);
38
+ const english = defaults;
39
+ return (key, values) => fill(parsed[key], values, locale, english[key]);
40
+ }, [words, locale, defaults]);
41
+ }
42
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/lib/locale.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAqFjE,MAAM,aAAa,GAAG,aAAa,CAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAmB3F;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAwB;IAChF,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAqB,GAAG,EAAE;QAC7C,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAuC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACvE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAmC,EAAE,CAAC;YACpF,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAyB,EAAE,CAAC;IACjE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA0B,CAAC;IAC3F,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,MAAM,EAAE,QAAQ,YAAG,QAAQ,GAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzF,CAAC;AAKD;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,KAAwD,EACxD,QAAW,EACX,KAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CACzD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAA2B,CAClD,CAAC;IACF,gHAAgH;IAChH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAA2B,CAAC;QAC3D,MAAM,OAAO,GAAG,QAAkC,CAAC;QACnD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC"}
@@ -17,6 +17,9 @@ export interface AppHeaderProps {
17
17
  labels?: Partial<SidebarTriggerLabels>;
18
18
  className?: string;
19
19
  }
20
- /** The inset's top bar: sidebar trigger, where you are, search and the fixed actions. */
20
+ /**
21
+ * The inset's top bar: the navigation trigger, where you are, search and the fixed actions. With a Sidebar the
22
+ * trigger collapses it (or opens it on phones); with a Rail it is there on phones only.
23
+ */
21
24
  export declare function AppHeader({ breadcrumbs, brand, search, actions, labels, className, }: AppHeaderProps): import("react").JSX.Element;
22
25
  //# sourceMappingURL=app-header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-header.d.ts","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qHAAqH;IACrH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,cAAc,+BAuBhB"}
1
+ {"version":3,"file":"app-header.d.ts","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qHAAqH;IACrH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,cAAc,+BA0BhB"}
@@ -3,10 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from '../lib/cn.js';
4
4
  import { useShell } from './dashboard-shell.js';
5
5
  import { SidebarTrigger } from './sidebar.js';
6
- /** The inset's top bar: sidebar trigger, where you are, search and the fixed actions. */
6
+ /**
7
+ * The inset's top bar: the navigation trigger, where you are, search and the fixed actions. With a Sidebar the
8
+ * trigger collapses it (or opens it on phones); with a Rail it is there on phones only.
9
+ */
7
10
  export function AppHeader({ breadcrumbs, brand, search, actions, labels, className, }) {
8
- const { size, productName } = useShell();
9
- return (_jsxs("header", { style: { viewTransitionName: 'shell-header' }, className: cn('flex h-header shrink-0 items-center gap-2 border-b border-border px-3 @min-[48rem]/shell:px-4', className), children: [_jsx(SidebarTrigger, { labels: labels }), _jsx("span", { "aria-hidden": "true", className: "mx-1 h-6 w-px bg-border @max-[48rem]/shell:hidden" }), _jsx("div", { className: "flex min-w-0 flex-1 items-center", children: size === 'mobile'
11
+ const { size, productName, navigation } = useShell();
12
+ return (_jsxs("header", { style: { viewTransitionName: 'shell-header' }, className: cn('flex h-header shrink-0 items-center gap-2 border-b border-border px-3 @min-[48rem]/shell:px-4', className), children: [_jsx(SidebarTrigger, { labels: labels }), navigation !== 'rail' && (_jsx("span", { "aria-hidden": "true", className: "mx-1 h-6 w-px bg-border @max-[48rem]/shell:hidden" })), _jsx("div", { className: "flex min-w-0 flex-1 items-center", children: size === 'mobile'
10
13
  ? (brand ?? _jsx("span", { className: "truncate text-base font-bold", children: productName }))
11
14
  : breadcrumbs }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [search, actions] })] }));
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-header.js","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AAoBzE,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,EACxB,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GACM;IACf,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzC,OAAO,CACL,kBACE,KAAK,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,EAC7C,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,SAAS,CACV,aAED,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,EAClC,8BAAkB,MAAM,EAAC,SAAS,EAAC,mDAAmD,GAAG,EACzF,cAAK,SAAS,EAAC,kCAAkC,YAC9C,IAAI,KAAK,QAAQ;oBAChB,CAAC,CAAC,CAAC,KAAK,IAAI,eAAM,SAAS,EAAC,8BAA8B,YAAE,WAAW,GAAQ,CAAC;oBAChF,CAAC,CAAC,WAAW,GACX,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,MAAM,EACN,OAAO,IACJ,IACC,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"app-header.js","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AAoBzE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GACM;IACf,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrD,OAAO,CACL,kBACE,KAAK,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,EAC7C,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,SAAS,CACV,aAED,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,EAEjC,UAAU,KAAK,MAAM,IAAI,CACxB,8BAAkB,MAAM,EAAC,SAAS,EAAC,mDAAmD,GAAG,CAC1F,EACD,cAAK,SAAS,EAAC,kCAAkC,YAC9C,IAAI,KAAK,QAAQ;oBAChB,CAAC,CAAC,CAAC,KAAK,IAAI,eAAM,SAAS,EAAC,8BAA8B,YAAE,WAAW,GAAQ,CAAC;oBAChF,CAAC,CAAC,WAAW,GACX,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,MAAM,EACN,OAAO,IACJ,IACC,CACV,CAAC;AACJ,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { type CSSProperties, type ReactNode, type RefObject } from 'react';
2
+ import { type ShellLabels } from './landmarks.js';
2
3
  export type ShellSize = 'mobile' | 'tablet' | 'laptop' | 'desktop';
3
4
  export type PanelMode = 'inline' | 'sheet';
5
+ /** What the shell's navigation is: `Sidebar` (option B) or `Rail` (option C). */
6
+ export type ShellNavigation = 'sidebar' | 'rail';
4
7
  export interface ShellContextValue {
5
8
  size: ShellSize;
6
9
  sidebarCollapsed: boolean;
@@ -12,6 +15,8 @@ export interface ShellContextValue {
12
15
  panelMode: PanelMode;
13
16
  panelToggleRef: RefObject<HTMLButtonElement | null>;
14
17
  productName: string;
18
+ /** The navigation the shell holds, from its `navigation` prop. */
19
+ navigation: ShellNavigation;
15
20
  /** True when `size` was forced, so container-query fallbacks stand down. */
16
21
  isSizeForced: boolean;
17
22
  }
@@ -29,17 +34,26 @@ export interface DashboardShellProps {
29
34
  defaultSidebarCollapsed?: boolean;
30
35
  /** Force a size instead of measuring (previews, tests, Storybook). */
31
36
  size?: ShellSize;
37
+ /**
38
+ * The navigation it holds: `sidebar` (default) or `rail`. With `rail`, AppHeader's trigger only appears where it
39
+ * opens the phone's Sheet, since a rail has nothing to collapse. A prop rather than the Rail registering itself,
40
+ * so the server renders the right header and nothing changes when the page hydrates.
41
+ */
42
+ navigation?: ShellNavigation;
43
+ /** @deprecated Use `labels.skipLink`. Kept for one release. */
32
44
  skipLinkLabel?: string;
45
+ labels?: Partial<ShellLabels>;
33
46
  className?: string;
34
47
  style?: CSSProperties;
35
48
  }
36
49
  /**
37
- * Option B — the inset shell. Measures its own width and decides:
50
+ * The inset shell. Measures its own width and decides:
38
51
  * desktop ≥ bp-xl: sidebar expanded, panel inline · laptop ≥ bp-lg: sidebar icons, panel inline ·
39
52
  * tablet ≥ bp-md: sidebar icons, panel as a Sheet · mobile: sidebar and panel both Sheets.
53
+ * With `navigation="rail"` (option C) the Rail stays as it is at every width from bp-md, and is a Sheet on phones.
40
54
  * CSS container queries on `shell` do the first layout, so there is no flash before measuring.
41
55
  */
42
- export declare function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen, defaultSidebarCollapsed, size: forcedSize, skipLinkLabel, className, style, }: DashboardShellProps): import("react").JSX.Element;
56
+ export declare function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen, defaultSidebarCollapsed, size: forcedSize, navigation, skipLinkLabel, labels, className, style, }: DashboardShellProps): import("react").JSX.Element;
43
57
  /** The raised surface that holds the header, the page and the right panel. Edge to edge on phones. */
44
58
  export declare function ShellInset({ children, className }: {
45
59
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-shell.d.ts","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C;AACD,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D;AAeD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,oBAA4B,EAC5B,uBAAuB,EACvB,IAAI,EAAE,UAAU,EAChB,aAAsC,EACtC,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,+BAoGrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY9F;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE7F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,iBAAiB,EAAE,UAAU,GAC9B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,+BAsDA"}
1
+ {"version":3,"file":"dashboard-shell.d.ts","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C;AACD,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D;AAeD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,oBAA4B,EAC5B,uBAAuB,EACvB,IAAI,EAAE,UAAU,EAChB,UAAsB,EACtB,aAAa,EACb,MAAM,EACN,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,+BA8FrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY9F;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE7F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,iBAAiB,EAAE,UAAU,GAC9B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,+BAsDA"}
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
4
4
  import { cn } from '../lib/cn.js';
5
+ import { SkipLink } from './landmarks.js';
5
6
  const ShellContext = createContext(null);
6
7
  export function useShell() {
7
8
  const ctx = useContext(ShellContext);
@@ -29,12 +30,13 @@ function sizeFor(width, bp) {
29
30
  return 'desktop';
30
31
  }
31
32
  /**
32
- * Option B — the inset shell. Measures its own width and decides:
33
+ * The inset shell. Measures its own width and decides:
33
34
  * desktop ≥ bp-xl: sidebar expanded, panel inline · laptop ≥ bp-lg: sidebar icons, panel inline ·
34
35
  * tablet ≥ bp-md: sidebar icons, panel as a Sheet · mobile: sidebar and panel both Sheets.
36
+ * With `navigation="rail"` (option C) the Rail stays as it is at every width from bp-md, and is a Sheet on phones.
35
37
  * CSS container queries on `shell` do the first layout, so there is no flash before measuring.
36
38
  */
37
- export function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen = false, defaultSidebarCollapsed, size: forcedSize, skipLinkLabel = 'Skip to main content', className, style, }) {
39
+ export function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen = false, defaultSidebarCollapsed, size: forcedSize, navigation = 'sidebar', skipLinkLabel, labels, className, style, }) {
38
40
  const ref = useRef(null);
39
41
  const [measured, setMeasured] = useState(null);
40
42
  const size = forcedSize ?? measured ?? 'desktop';
@@ -86,6 +88,7 @@ export function DashboardShell({ children, productName, defaultPanelOpen, defaul
86
88
  panelMode,
87
89
  panelToggleRef,
88
90
  productName,
91
+ navigation,
89
92
  isSizeForced: !!forcedSize,
90
93
  }), [
91
94
  size,
@@ -96,9 +99,10 @@ export function DashboardShell({ children, productName, defaultPanelOpen, defaul
96
99
  setPanelOpen,
97
100
  panelMode,
98
101
  productName,
102
+ navigation,
99
103
  forcedSize,
100
104
  ]);
101
- return (_jsx(ShellContext.Provider, { value: value, children: _jsxs("div", { ref: ref, "data-size": size, style: style, className: cn('@container/shell relative flex h-dvh min-h-0 w-full overflow-hidden bg-sidebar text-foreground', className), children: [_jsx("a", { href: "#main", className: "group/skip absolute top-2 left-4 z-(--z-popover) inline-flex min-h-target min-w-target -translate-y-[200%] cursor-pointer items-center no-underline outline-none focus:translate-y-0", children: _jsx("span", { className: "inline-flex min-h-control items-center rounded-md bg-primary px-(--control-pad-x) text-sm font-semibold text-primary-foreground group-focus-visible/skip:focus-ring", children: skipLinkLabel }) }), children] }) }));
105
+ return (_jsx(ShellContext.Provider, { value: value, children: _jsxs("div", { ref: ref, "data-size": size, style: style, className: cn('@container/shell relative flex h-dvh min-h-0 w-full overflow-hidden bg-sidebar text-foreground', className), children: [_jsx(SkipLink, { href: "#main", shell: "dashboardShell", label: skipLinkLabel, labels: labels }), children] }) }));
102
106
  }
103
107
  /** The raised surface that holds the header, the page and the right panel. Edge to edge on phones. */
104
108
  export function ShellInset({ children, className }) {
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-shell.js","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-shell.js","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ /** A shell's words, for the `labels` prop on `DashboardShell` and `SiteShell`. */
3
+ export interface ShellLabels {
4
+ /** The skip link, the first thing a keyboard reaches. */
5
+ skipLink: string;
6
+ }
7
+ export declare const shellLabels: ShellLabels;
8
+ /**
9
+ * The skip link both shells start with. A client component of its own, so its words come from `SetsquareLocale`
10
+ * while SiteShell stays server-safe.
11
+ */
12
+ export declare function SkipLink({ href, shell, label, labels, }: {
13
+ href: string;
14
+ shell: 'dashboardShell' | 'siteShell';
15
+ /** `skipLinkLabel`, kept for one release. */
16
+ label?: string;
17
+ labels?: Partial<ShellLabels>;
18
+ }): import("react").JSX.Element;
19
+ /** The site's navigation's words, for the `labels` prop on `SiteNav` (and `SiteMenu`, whose nav it names too). */
20
+ export interface SiteNavLabels {
21
+ /** Names the navigation landmark. */
22
+ navigation: string;
23
+ }
24
+ export declare const siteNavLabels: SiteNavLabels;
25
+ /** SiteNav's landmark, named from `SetsquareLocale`, so SiteNav itself stays server-safe. */
26
+ export declare function SiteNavLandmark({ label, labels, className, children, }: {
27
+ /** `label`, kept for one release. */
28
+ label?: string;
29
+ labels?: Partial<SiteNavLabels>;
30
+ className?: string;
31
+ children: ReactNode;
32
+ }): import("react").JSX.Element;
33
+ //# sourceMappingURL=landmarks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landmarks.d.ts","sourceRoot":"","sources":["../../src/shell/landmarks.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,EAAE,WAAkD,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAAC;IACtC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B,+BAaA;AAED,kHAAkH;AAClH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,aAAyC,CAAC;AAEtE,6FAA6F;AAC7F,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE;IACD,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cn } from '../lib/cn.js';
4
+ import { useLabels } from '../lib/locale.js';
5
+ export const shellLabels = { skipLink: 'Skip to main content' };
6
+ /**
7
+ * The skip link both shells start with. A client component of its own, so its words come from `SetsquareLocale`
8
+ * while SiteShell stays server-safe.
9
+ */
10
+ export function SkipLink({ href, shell, label, labels, }) {
11
+ const t = useLabels(shell, shellLabels, labels);
12
+ return (_jsx("a", { href: href, className: "group/skip absolute top-2 left-4 z-(--z-popover) inline-flex min-h-target min-w-target -translate-y-[200%] cursor-pointer items-center no-underline outline-none focus:translate-y-0", children: _jsx("span", { className: "inline-flex min-h-control items-center rounded-md bg-primary px-(--control-pad-x) text-sm font-semibold text-primary-foreground group-focus-visible/skip:focus-ring", children: label ?? t('skipLink') }) }));
13
+ }
14
+ export const siteNavLabels = { navigation: 'Primary' };
15
+ /** SiteNav's landmark, named from `SetsquareLocale`, so SiteNav itself stays server-safe. */
16
+ export function SiteNavLandmark({ label, labels, className, children, }) {
17
+ const t = useLabels('siteNav', siteNavLabels, labels);
18
+ return (_jsx("nav", { "aria-label": label ?? t('navigation'), className: cn('hidden site-lg:block', className), children: children }));
19
+ }
20
+ //# sourceMappingURL=landmarks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landmarks.js","sourceRoot":"","sources":["../../src/shell/landmarks.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQ7C,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;AAE7E;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,GAOP;IACC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,CAEL,YACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,sLAAsL,YAEhM,eAAM,SAAS,EAAC,qKAAqK,YAClL,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,GAClB,GACL,CACL,CAAC;AACJ,CAAC;AAQD,MAAM,CAAC,MAAM,aAAa,GAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAEtE,6FAA6F;AAC7F,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,GAOT;IACC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACtD,OAAO,CACL,4BAAiB,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,YACxF,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type IconProp } from '../ui/icon.js';
3
+ /** What a nav item is doing: something is being worked on, or something waits for the person. */
4
+ export type NavStatus = 'working' | 'attention';
5
+ /** A detail's tone. `warning` adds an icon, the warning colour and words in the item's name. */
6
+ export type NavDetailTone = 'neutral' | 'warning';
7
+ /**
8
+ * A nav item's live status and detail, on SidebarItem and RailItem. `statusLabel` comes with `status`: it is said as
9
+ * part of the item's name, and is in the tooltip where the name is one.
10
+ */
11
+ export type NavItemLiveProps = {
12
+ /**
13
+ * A short value: "4/8", "$1.20". Under the name in a rail, after it in the sidebar; read as part of the name, in
14
+ * tabular numbers.
15
+ */
16
+ detail?: string;
17
+ /** Default `neutral`. `warning` ("near the budget") adds an icon and the label's words to the name. */
18
+ detailTone?: NavDetailTone;
19
+ } & ({
20
+ status?: undefined;
21
+ statusLabel?: undefined;
22
+ } | {
23
+ /** A badge on the icon: `working` is a ring that pulses as it appears, `attention` a dot in a ring. */
24
+ status: NavStatus;
25
+ /** Said as part of the name: "Claude is working", "A draft is waiting for you". */
26
+ statusLabel: string;
27
+ });
28
+ /** A status with no words to say it would be colour and shape alone: say so in the console. */
29
+ export declare function warnUnlabelledStatus(component: string, status?: NavStatus, label?: string): void;
30
+ /**
31
+ * The item's icon in a box that holds its status badge. The icon is rendered by `renderIcon`, so a component, an
32
+ * element or a custom drawing (a progress ring) all work; the box carries the colour, so a drawing that uses
33
+ * `currentColor` turns brand on the current page even if it ignores `className`.
34
+ */
35
+ export declare function NavIcon({ icon, status, className, }: {
36
+ icon: IconProp;
37
+ status?: NavStatus;
38
+ className?: string;
39
+ }): ReactElement;
40
+ /** The detail as shown: muted and tabular, or the warning colour after a warning icon. Hidden from assistive tech. */
41
+ export declare function NavDetail({ detail, tone, className, }: {
42
+ detail: string;
43
+ tone?: NavDetailTone;
44
+ className?: string;
45
+ }): ReactElement;
46
+ //# sourceMappingURL=nav-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-status.d.ts","sourceRoot":"","sources":["../../src/shell/nav-status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1D,iGAAiG;AACjG,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAChD,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,GAAG,CACA;IAAE,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/C;IACE,uGAAuG;IACvG,MAAM,EAAE,SAAS,CAAC;IAClB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB,CACJ,CAAC;AAIF,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,QAMzF;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,MAAM,EACN,SAAS,GACV,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,CAUf;AAED,sHAAsH;AACtH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,IAAI,EACJ,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,CAef"}