@motech-development/breeze-ui 4.0.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ export { default as AppearanceControl } from './patterns/AppearanceControl/AppearanceControl';
1
2
  export type { ButtonProps, ButtonVariant, ControlSize, } from './primitives/Button/Button';
2
3
  export { Button } from './primitives/Button/Button';
4
+ export type { Appearance, ResolvedAppearance } from './provider/BreezeContext';
3
5
  export type { BreezeProviderProps } from './provider/BreezeProvider';
4
6
  export { BreezeProvider } from './provider/BreezeProvider';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC9F,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
package/lib/index.js CHANGED
@@ -1,19 +1,79 @@
1
- import { createContext as e, createElement as t, useContext as n, useMemo as r } from "react";
2
- import { Button as i } from "react-aria-components/Button";
3
- import { ProgressBarContext as a } from "react-aria-components/ProgressBar";
4
- import { useSlottedContext as o } from "react-aria-components/slots";
5
- import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
6
- import { I18nProvider as u, useLocale as d } from "react-aria-components/I18nProvider";
1
+ import { ToggleButton as e } from "react-aria-components/ToggleButton";
2
+ import { ToggleButtonGroup as t } from "react-aria-components/ToggleButtonGroup";
3
+ import { createContext as n, createElement as r, useCallback as i, useContext as a, useEffect as o, useLayoutEffect as s, useMemo as c, useState as l } from "react";
4
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
5
+ import { Button as p } from "react-aria-components/Button";
6
+ import { ProgressBarContext as m } from "react-aria-components/ProgressBar";
7
+ import { useSlottedContext as h } from "react-aria-components/slots";
8
+ import { I18nProvider as g, useLocale as _ } from "react-aria-components/I18nProvider";
7
9
  //#region src/provider/BreezeContext.ts
8
- var f = e(null);
9
- function p() {
10
- let e = n(f);
10
+ var v = n(null);
11
+ function y() {
12
+ let e = a(v);
11
13
  if (e === null) throw Error("Breeze components must be rendered within BreezeProvider.");
12
14
  return e;
13
15
  }
14
16
  //#endregion
17
+ //#region src/patterns/AppearanceControl/AppearanceControl.tsx
18
+ var b = {
19
+ base: {
20
+ control: "breeze:flex breeze:items-center breeze:gap-breeze-2 breeze:font-breeze-sans",
21
+ group: "breeze:flex breeze:items-center breeze:gap-breeze-2",
22
+ label: "breeze:grow breeze:text-breeze-sm breeze:text-breeze-ink",
23
+ option: "breeze:inline-flex breeze:items-center breeze:min-block-breeze-sm breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:border breeze:border-solid breeze:border-breeze-line-strong breeze:rounded-breeze-full breeze:bg-breeze-surface breeze:text-breeze-xs breeze:font-semibold breeze:text-breeze-ink breeze:cursor-pointer breeze:outline-offset-2 breeze:data-[hovered]:bg-breeze-sunken breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap"
24
+ },
25
+ compound: {},
26
+ size: {},
27
+ state: { selected: "breeze:data-[selected]:border-breeze-brand breeze:data-[selected]:bg-breeze-brand-soft breeze:data-[selected]:text-breeze-brand-text breeze:forced-colors:data-[selected]:outline-2 breeze:forced-colors:data-[selected]:outline-offset-2" },
28
+ variant: {}
29
+ }, x = [
30
+ {
31
+ message: "appearanceLight",
32
+ value: "light"
33
+ },
34
+ {
35
+ message: "appearanceAutomatic",
36
+ value: "automatic"
37
+ },
38
+ {
39
+ message: "appearanceDark",
40
+ value: "dark"
41
+ }
42
+ ];
43
+ function S(e) {
44
+ return x.some((t) => t.value === e);
45
+ }
46
+ function C() {
47
+ let { appearance: n, getMessageLocale: r, messages: i, setAppearance: a } = y();
48
+ return /* @__PURE__ */ f("div", {
49
+ className: b.base.control,
50
+ children: [/* @__PURE__ */ d("span", {
51
+ className: b.base.label,
52
+ lang: r("appearance"),
53
+ children: i.appearance
54
+ }), /* @__PURE__ */ d(t, {
55
+ "aria-label": i.appearance,
56
+ className: b.base.group,
57
+ disallowEmptySelection: !0,
58
+ lang: r("appearance"),
59
+ onSelectionChange: (e) => {
60
+ let [t] = e;
61
+ S(t) && a(t);
62
+ },
63
+ selectedKeys: [n],
64
+ selectionMode: "single",
65
+ children: x.map((t) => /* @__PURE__ */ d(e, {
66
+ className: [b.base.option, b.state.selected].join(" "),
67
+ id: t.value,
68
+ lang: r(t.message),
69
+ children: i[t.message]
70
+ }, t.value))
71
+ })]
72
+ });
73
+ }
74
+ //#endregion
15
75
  //#region src/primitives/Button/Button.tsx
16
- var m = {
76
+ var w = {
17
77
  base: {
18
78
  button: "breeze:relative breeze:inline-grid breeze:items-center breeze:justify-center breeze:gap-breeze-2 breeze:border breeze:border-solid breeze:rounded-breeze-ctl breeze:font-breeze-sans breeze:text-breeze-sm breeze:leading-breeze-snug breeze:cursor-pointer breeze:select-none breeze:[text-align:center] breeze:outline-offset-2 breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap",
19
79
  label: "breeze:[grid-area:1/1]",
@@ -43,85 +103,127 @@ var m = {
43
103
  secondary: "breeze:border-breeze-line-strong breeze:bg-breeze-surface breeze:text-breeze-ink breeze:data-[hovered]:bg-breeze-sunken breeze:data-[pressed]:bg-breeze-sunken"
44
104
  }
45
105
  };
46
- function h() {
47
- let e = o(a), { messageLocale: t, messages: n } = p();
48
- return /* @__PURE__ */ c("progress", {
106
+ function T() {
107
+ let e = h(m), { getMessageLocale: t, messages: n } = y();
108
+ return /* @__PURE__ */ d("progress", {
49
109
  "aria-label": n.loading,
50
- className: m.state.loadingStatus,
110
+ className: w.state.loadingStatus,
51
111
  id: e?.id,
52
- lang: t
112
+ lang: t("loading")
53
113
  });
54
114
  }
55
- function g({ "aria-controls": e, "aria-describedby": n, "aria-expanded": r, "aria-haspopup": a, "aria-label": o, "aria-labelledby": u, children: d, disabled: f = !1, form: g, id: _, loading: v = !1, name: y, onAction: b, ref: x, size: S = "md", type: C = "button", value: w, variant: T = "primary" }) {
56
- p();
115
+ function E({ "aria-controls": e, "aria-describedby": t, "aria-expanded": n, "aria-haspopup": i, "aria-label": a, "aria-labelledby": o, children: s, disabled: c = !1, form: l, id: m, loading: h = !1, name: g, onAction: _, ref: v, size: b = "md", type: x = "button", value: S, variant: C = "primary" }) {
116
+ y();
57
117
  let E = [
58
- m.base.button,
59
- m.variant[T],
60
- m.size[S],
61
- f && m.state.disabled,
62
- v && m.state.loading
118
+ w.base.button,
119
+ w.variant[C],
120
+ w.size[b],
121
+ c && w.state.disabled,
122
+ h && w.state.loading
63
123
  ].filter(Boolean).join(" ");
64
- return /* @__PURE__ */ l(i, {
124
+ return /* @__PURE__ */ f(p, {
65
125
  "aria-controls": e,
66
- "aria-describedby": n,
67
- "aria-expanded": r,
68
- "aria-haspopup": a,
69
- "aria-label": o ?? d,
70
- "aria-labelledby": u,
126
+ "aria-describedby": t,
127
+ "aria-expanded": n,
128
+ "aria-haspopup": i,
129
+ "aria-label": a ?? s,
130
+ "aria-labelledby": o,
71
131
  className: E,
72
- form: g,
73
- id: _,
74
- isDisabled: f,
75
- isPending: v,
76
- name: y,
77
- onPress: () => b?.(),
78
- ref: x,
79
- render: (e) => t("button", {
132
+ form: l,
133
+ id: m,
134
+ isDisabled: c,
135
+ isPending: h,
136
+ name: g,
137
+ onPress: () => _?.(),
138
+ ref: v,
139
+ render: (e) => r("button", {
80
140
  ...e,
81
- "aria-busy": v || void 0,
82
- onClick: v ? (e) => e.preventDefault() : e.onClick,
83
- type: C === "submit" ? "submit" : "button"
141
+ "aria-busy": h || void 0,
142
+ onClick: h ? (e) => e.preventDefault() : e.onClick,
143
+ type: x === "submit" ? "submit" : "button"
84
144
  }),
85
- type: C,
86
- value: w,
87
- children: [/* @__PURE__ */ c("span", {
88
- className: [m.base.label, v && m.state.loadingLabel].filter(Boolean).join(" "),
89
- children: d
90
- }), v && /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(h, {}), /* @__PURE__ */ c("span", {
145
+ type: x,
146
+ value: S,
147
+ children: [/* @__PURE__ */ d("span", {
148
+ className: [w.base.label, h && w.state.loadingLabel].filter(Boolean).join(" "),
149
+ children: s
150
+ }), h && /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d(T, {}), /* @__PURE__ */ d("span", {
91
151
  "aria-hidden": "true",
92
- className: [m.base.skeleton, m.compound.loading[T]].join(" "),
152
+ className: [w.base.skeleton, w.compound.loading[C]].join(" "),
93
153
  "data-breeze-skeleton": ""
94
154
  })] })]
95
155
  });
96
156
  }
97
157
  //#endregion
98
158
  //#region src/provider/en-GB.ts
99
- var _ = { loading: "Loading" };
159
+ var D = {
160
+ appearance: "Appearance",
161
+ appearanceAutomatic: "Auto",
162
+ appearanceDark: "Dark",
163
+ appearanceLight: "Light",
164
+ loading: "Loading"
165
+ };
100
166
  //#endregion
101
167
  //#region src/provider/BreezeProvider.tsx
102
- function v({ children: e }) {
103
- let { direction: t, locale: n } = d();
104
- return /* @__PURE__ */ c("div", {
168
+ function O(e, t) {
169
+ return e === "automatic" ? t ? "dark" : "light" : e;
170
+ }
171
+ function k({ children: e }) {
172
+ let { direction: t, locale: n } = _();
173
+ return /* @__PURE__ */ d("div", {
105
174
  "data-breeze-root": "",
106
175
  dir: t,
107
176
  lang: n,
108
177
  children: e
109
178
  });
110
179
  }
111
- function y({ children: e, locale: t, messages: n }) {
112
- return /* @__PURE__ */ c(u, {
113
- locale: t,
114
- children: /* @__PURE__ */ c(f, {
115
- value: r(() => ({
116
- locale: t,
117
- messageLocale: n ? t : "en-GB",
118
- messages: n ?? _
119
- }), [t, n]),
120
- children: /* @__PURE__ */ c(v, { children: e })
180
+ function A({ appearance: e, children: t, defaultAppearance: n = "automatic", locale: r, messages: a, onAppearanceChange: u }) {
181
+ let [f] = l(() => typeof window > "u" || !window.matchMedia ? null : window.matchMedia("(prefers-color-scheme: dark)")), [p, m] = l(() => f?.matches ?? !1), [h, _] = l(n), y = e ?? h, b = O(y, p);
182
+ o(() => {
183
+ if (!f) return;
184
+ m(f.matches);
185
+ let e = (e) => {
186
+ m(e.matches);
187
+ };
188
+ return f.addEventListener("change", e), () => f.removeEventListener("change", e);
189
+ }, [f]), s(() => {
190
+ let { documentElement: e } = document, t = e.dataset.theme, n = e.style.colorScheme;
191
+ return e.dataset.theme = b, e.style.colorScheme = b, () => {
192
+ t === void 0 ? delete e.dataset.theme : e.dataset.theme = t, e.style.colorScheme = n;
193
+ };
194
+ }, [b]);
195
+ let x = i((t) => {
196
+ e === void 0 && _(t), u?.(t);
197
+ }, [e, u]), S = i((e) => a?.[e] === void 0 ? "en-GB" : r, [r, a]);
198
+ return /* @__PURE__ */ d(g, {
199
+ locale: r,
200
+ children: /* @__PURE__ */ d(v, {
201
+ value: c(() => ({
202
+ appearance: y,
203
+ getMessageLocale: S,
204
+ locale: r,
205
+ messages: {
206
+ appearance: a?.appearance ?? D.appearance,
207
+ appearanceAutomatic: a?.appearanceAutomatic ?? D.appearanceAutomatic,
208
+ appearanceDark: a?.appearanceDark ?? D.appearanceDark,
209
+ appearanceLight: a?.appearanceLight ?? D.appearanceLight,
210
+ loading: a?.loading ?? D.loading
211
+ },
212
+ resolvedAppearance: b,
213
+ setAppearance: x
214
+ }), [
215
+ y,
216
+ S,
217
+ r,
218
+ a,
219
+ b,
220
+ x
221
+ ]),
222
+ children: /* @__PURE__ */ d(k, { children: t })
121
223
  })
122
224
  });
123
225
  }
124
226
  //#endregion
125
- export { y as BreezeProvider, g as Button };
227
+ export { C as AppearanceControl, A as BreezeProvider, E as Button };
126
228
 
127
229
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/provider/BreezeContext.ts","../src/primitives/Button/Button.tsx","../src/provider/en-GB.ts","../src/provider/BreezeProvider.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type enGB from './en-GB';\n\ninterface BreezeContextValue {\n locale: string;\n messageLocale: string;\n messages: typeof enGB;\n}\n\nexport const BreezeContext = createContext<BreezeContextValue | null>(null);\n\nexport function useBreezeContext(): BreezeContextValue {\n const context = useContext(BreezeContext);\n\n if (context === null) {\n throw new Error(\n 'Breeze components must be rendered within BreezeProvider.',\n );\n }\n\n return context;\n}\n","import type { ButtonHTMLAttributes, ReactElement, Ref } from 'react';\nimport { createElement } from 'react';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { ProgressBarContext } from 'react-aria-components/ProgressBar';\nimport { useSlottedContext } from 'react-aria-components/slots';\nimport { useBreezeContext } from '../../provider/BreezeContext';\n\nconst variants = {\n base: {\n button:\n 'breeze:relative breeze:inline-grid breeze:items-center breeze:justify-center breeze:gap-breeze-2 breeze:border breeze:border-solid breeze:rounded-breeze-ctl breeze:font-breeze-sans breeze:text-breeze-sm breeze:leading-breeze-snug breeze:cursor-pointer breeze:select-none breeze:[text-align:center] breeze:outline-offset-2 breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap',\n label: 'breeze:[grid-area:1/1]',\n skeleton:\n 'breeze:[grid-area:1/1] breeze:inline-size-full breeze:block-size-breeze-3 breeze:rounded-breeze-xs',\n },\n compound: {\n loading: {\n danger: 'breeze:bg-breeze-on-brand/35',\n primary: 'breeze:bg-breeze-on-brand/35',\n quiet: 'breeze:bg-breeze-line-strong',\n secondary: 'breeze:bg-breeze-line-strong',\n },\n },\n size: {\n lg: 'breeze:min-block-breeze-lg breeze:ps-breeze-5 breeze:pe-breeze-5 breeze:py-breeze-3',\n md: 'breeze:min-block-breeze-md breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:py-breeze-2',\n sm: 'breeze:min-block-breeze-sm breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:py-breeze-1',\n },\n state: {\n disabled: 'breeze:cursor-not-allowed breeze:opacity-50',\n loading: 'breeze:cursor-wait',\n loadingLabel: 'breeze:opacity-0',\n loadingStatus: 'breeze:sr-only',\n },\n variant: {\n danger:\n 'breeze:border-transparent breeze:bg-breeze-danger-fill breeze:text-breeze-on-brand breeze:data-[hovered]:bg-breeze-danger-hover breeze:data-[pressed]:bg-breeze-danger-hover',\n primary:\n 'breeze:border-transparent breeze:bg-breeze-brand breeze:text-breeze-on-brand breeze:data-[hovered]:bg-breeze-brand-hover breeze:data-[pressed]:bg-breeze-brand-hover',\n quiet:\n 'breeze:border-transparent breeze:bg-transparent breeze:text-breeze-brand-text breeze:data-[hovered]:bg-breeze-brand-soft breeze:data-[pressed]:bg-breeze-brand-soft',\n secondary:\n 'breeze:border-breeze-line-strong breeze:bg-breeze-surface breeze:text-breeze-ink breeze:data-[hovered]:bg-breeze-sunken breeze:data-[pressed]:bg-breeze-sunken',\n },\n} as const;\n\n/** Connect the pending announcement to a phrasing element inside the button. */\nfunction LoadingStatus(): ReactElement {\n const progress = useSlottedContext(ProgressBarContext);\n const { messageLocale, messages } = useBreezeContext();\n\n return (\n <progress\n aria-label={messages.loading}\n className={variants.state.loadingStatus}\n id={progress?.id}\n lang={messageLocale}\n />\n );\n}\n\n/** Button-specific visual treatments. */\nexport type ButtonVariant = keyof typeof variants.variant;\n\n/** Shared control sizes: 34, 38 and 52px, with a 44px coarse-pointer floor. */\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\n/** An intentional native subset; styling, slots and DOM event callbacks are closed. */\ntype NativeButtonProps = Pick<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | 'aria-controls'\n | 'aria-describedby'\n | 'aria-expanded'\n | 'aria-haspopup'\n | 'aria-label'\n | 'aria-labelledby'\n | 'form'\n | 'id'\n | 'name'\n>;\n\nexport interface ButtonProps extends NativeButtonProps {\n /** Visible action label, retained as the accessible name while loading. */\n children: string;\n /** Prevents activation and removes the button from the tab order. */\n disabled?: boolean;\n /** Shows the button's own skeleton and prevents repeat activation. */\n loading?: boolean;\n /** Reports a semantic activation, without a DOM event. */\n onAction?: () => void;\n ref?: Ref<HTMLButtonElement>;\n size?: ControlSize;\n type?: 'button' | 'submit';\n value?: string;\n variant?: ButtonVariant;\n}\n\n/**\n * Performs a semantic action with a visible label and an optional loading skeleton.\n *\n * @summary A closed, labelled action in four treatments and three sizes.\n */\nexport function Button({\n 'aria-controls': ariaControls,\n 'aria-describedby': ariaDescribedBy,\n 'aria-expanded': ariaExpanded,\n 'aria-haspopup': ariaHasPopup,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n children,\n disabled = false,\n form,\n id,\n loading = false,\n name,\n onAction,\n ref,\n size = 'md',\n type = 'button',\n value,\n variant = 'primary',\n}: Readonly<ButtonProps>): ReactElement {\n useBreezeContext();\n\n const className = [\n variants.base.button,\n variants.variant[variant],\n variants.size[size],\n disabled && variants.state.disabled,\n loading && variants.state.loading,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <AriaButton\n aria-controls={ariaControls}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={ariaLabel ?? children}\n aria-labelledby={ariaLabelledBy}\n className={className}\n form={form}\n id={id}\n isDisabled={disabled}\n isPending={loading}\n name={name}\n onPress={() => onAction?.()}\n ref={ref}\n render={(buttonProps) =>\n createElement('button', {\n ...buttonProps,\n // React Aria filters aria-busy; Breeze owns it on the native button.\n 'aria-busy': loading || undefined,\n // Keep the form's default submitter while pending so Enter cannot\n // bypass it through the browser's implicit-submission fallback.\n onClick: loading\n ? (event) => event.preventDefault()\n : buttonProps.onClick,\n type: type === 'submit' ? 'submit' : 'button',\n })\n }\n type={type}\n value={value}\n >\n <span\n className={[variants.base.label, loading && variants.state.loadingLabel]\n .filter(Boolean)\n .join(' ')}\n >\n {children}\n </span>\n {loading && (\n <>\n <LoadingStatus />\n <span\n aria-hidden=\"true\"\n className={[\n variants.base.skeleton,\n variants.compound.loading[variant],\n ].join(' ')}\n data-breeze-skeleton=\"\"\n />\n </>\n )}\n </AriaButton>\n );\n}\n","const enGB = {\n loading: 'Loading',\n};\n\nexport default enGB;\n","import type { ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { I18nProvider, useLocale } from 'react-aria-components/I18nProvider';\nimport { BreezeContext } from './BreezeContext';\nimport enGB from './en-GB';\n\n/** The required locale boundary for Breeze components. */\nexport interface BreezeProviderProps {\n children: ReactNode;\n /** BCP 47 locale for accessible interactions and future formatting components. */\n locale: string;\n /** Accessible messages translated into the provider locale; defaults to English. */\n messages?: typeof enGB;\n}\n\nfunction BreezeRoot({\n children,\n}: Readonly<Pick<BreezeProviderProps, 'children'>>) {\n const { direction, locale } = useLocale();\n\n return (\n <div data-breeze-root=\"\" dir={direction} lang={locale}>\n {children}\n </div>\n );\n}\n\n/**\n * Establishes the required locale and styling boundary.\n *\n * @summary Required locale and styling boundary for Breeze components.\n */\nexport function BreezeProvider({\n children,\n locale,\n messages,\n}: Readonly<BreezeProviderProps>) {\n const context = useMemo(\n () => ({\n locale,\n messageLocale: messages ? locale : 'en-GB',\n messages: messages ?? enGB,\n }),\n [locale, messages],\n );\n\n return (\n <I18nProvider locale={locale}>\n <BreezeContext value={context}>\n <BreezeRoot>{children}</BreezeRoot>\n </BreezeContext>\n </I18nProvider>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAa,IAAgB,EAAyC,IAAI;AAE1E,SAAgB,IAAuC;CACrD,IAAM,IAAU,EAAW,CAAa;CAExC,IAAI,MAAY,MACd,MAAU,MACR,2DACF;CAGF,OAAO;AACT;;;ACdA,IAAM,IAAW;CACf,MAAM;EACJ,QACE;EACF,OAAO;EACP,UACE;CACJ;CACA,UAAU,EACR,SAAS;EACP,QAAQ;EACR,SAAS;EACT,OAAO;EACP,WAAW;CACb,EACF;CACA,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;CACN;CACA,OAAO;EACL,UAAU;EACV,SAAS;EACT,cAAc;EACd,eAAe;CACjB;CACA,SAAS;EACP,QACE;EACF,SACE;EACF,OACE;EACF,WACE;CACJ;AACF;AAGA,SAAS,IAA8B;CACrC,IAAM,IAAW,EAAkB,CAAkB,GAC/C,EAAE,kBAAe,gBAAa,EAAiB;CAErD,OACE,kBAAC,YAAD;EACE,cAAY,EAAS;EACrB,WAAW,EAAS,MAAM;EAC1B,IAAI,GAAU;EACd,MAAM;CACP,CAAA;AAEL;AA2CA,SAAgB,EAAO,EACrB,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,aACA,cAAW,IACX,SACA,OACA,aAAU,IACV,SACA,aACA,QACA,UAAO,MACP,UAAO,UACP,UACA,aAAU,aAC4B;CACtC,EAAiB;CAEjB,IAAM,IAAY;EAChB,EAAS,KAAK;EACd,EAAS,QAAQ;EACjB,EAAS,KAAK;EACd,KAAY,EAAS,MAAM;EAC3B,KAAW,EAAS,MAAM;CAC5B,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,OACE,kBAAC,GAAD;EACE,iBAAe;EACf,oBAAkB;EAClB,iBAAe;EACf,iBAAe;EACf,cAAY,KAAa;EACzB,mBAAiB;EACN;EACL;EACF;EACJ,YAAY;EACZ,WAAW;EACL;EACN,eAAe,IAAW;EACrB;EACL,SAAS,MACP,EAAc,UAAU;GACtB,GAAG;GAEH,aAAa,KAAW,KAAA;GAGxB,SAAS,KACJ,MAAU,EAAM,eAAe,IAChC,EAAY;GAChB,MAAM,MAAS,WAAW,WAAW;EACvC,CAAC;EAEG;EACC;YA7BT,CA+BE,kBAAC,QAAD;GACE,WAAW,CAAC,EAAS,KAAK,OAAO,KAAW,EAAS,MAAM,YAAY,CAAC,CACrE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;GAEV;EACG,CAAA,GACL,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,CAAgB,CAAA,GAChB,kBAAC,QAAD;GACE,eAAY;GACZ,WAAW,CACT,EAAS,KAAK,UACd,EAAS,SAAS,QAAQ,EAC5B,CAAC,CAAC,KAAK,GAAG;GACV,wBAAqB;EACtB,CAAA,CACD,EAAA,CAAA,CAEM;;AAEhB;;;AC5LA,IAAM,IAAO,EACX,SAAS,UACX;;;ACaA,SAAS,EAAW,EAClB,eACkD;CAClD,IAAM,EAAE,cAAW,cAAW,EAAU;CAExC,OACE,kBAAC,OAAD;EAAK,oBAAiB;EAAG,KAAK;EAAW,MAAM;EAC5C;CACE,CAAA;AAET;AAOA,SAAgB,EAAe,EAC7B,aACA,WACA,eACgC;CAUhC,OACE,kBAAC,GAAD;EAAsB;YACpB,kBAAC,GAAD;GAAe,OAXH,SACP;IACL;IACA,eAAe,IAAW,IAAS;IACnC,UAAU,KAAY;GACxB,IACA,CAAC,GAAQ,CAAQ,CAKO;aACpB,kBAAC,GAAD,EAAa,YAAqB,CAAA;EACrB,CAAA;CACH,CAAA;AAElB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/provider/BreezeContext.ts","../src/patterns/AppearanceControl/AppearanceControl.tsx","../src/primitives/Button/Button.tsx","../src/provider/en-GB.ts","../src/provider/BreezeProvider.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type enGB from './en-GB';\n\nexport type Appearance = 'automatic' | 'dark' | 'light';\nexport type ResolvedAppearance = Exclude<Appearance, 'automatic'>;\n\ninterface BreezeContextValue {\n appearance: Appearance;\n getMessageLocale: (message: keyof typeof enGB) => string;\n locale: string;\n messages: typeof enGB;\n resolvedAppearance: ResolvedAppearance;\n setAppearance: (appearance: Appearance) => void;\n}\n\nexport const BreezeContext = createContext<BreezeContextValue | null>(null);\n\nexport function useBreezeContext(): BreezeContextValue {\n const context = useContext(BreezeContext);\n\n if (context === null) {\n throw new Error(\n 'Breeze components must be rendered within BreezeProvider.',\n );\n }\n\n return context;\n}\n","import { ToggleButton } from 'react-aria-components/ToggleButton';\nimport { ToggleButtonGroup } from 'react-aria-components/ToggleButtonGroup';\nimport {\n type Appearance,\n useBreezeContext,\n} from '../../provider/BreezeContext';\n\nconst variants = {\n base: {\n control:\n 'breeze:flex breeze:items-center breeze:gap-breeze-2 breeze:font-breeze-sans',\n group: 'breeze:flex breeze:items-center breeze:gap-breeze-2',\n label: 'breeze:grow breeze:text-breeze-sm breeze:text-breeze-ink',\n option:\n 'breeze:inline-flex breeze:items-center breeze:min-block-breeze-sm breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:border breeze:border-solid breeze:border-breeze-line-strong breeze:rounded-breeze-full breeze:bg-breeze-surface breeze:text-breeze-xs breeze:font-semibold breeze:text-breeze-ink breeze:cursor-pointer breeze:outline-offset-2 breeze:data-[hovered]:bg-breeze-sunken breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap',\n },\n compound: {},\n size: {},\n state: {\n selected:\n 'breeze:data-[selected]:border-breeze-brand breeze:data-[selected]:bg-breeze-brand-soft breeze:data-[selected]:text-breeze-brand-text breeze:forced-colors:data-[selected]:outline-2 breeze:forced-colors:data-[selected]:outline-offset-2',\n },\n variant: {},\n} as const;\n\nconst appearanceOptions = [\n {\n message: 'appearanceLight',\n value: 'light',\n },\n {\n message: 'appearanceAutomatic',\n value: 'automatic',\n },\n {\n message: 'appearanceDark',\n value: 'dark',\n },\n] as const;\n\nfunction isAppearance(value: unknown): value is Appearance {\n return appearanceOptions.some((option) => option.value === value);\n}\n\n/**\n * Lets a person choose light, automatic or dark appearance.\n *\n * @summary A three-option appearance control backed by BreezeProvider.\n */\nfunction AppearanceControl() {\n const { appearance, getMessageLocale, messages, setAppearance } =\n useBreezeContext();\n\n return (\n <div className={variants.base.control}>\n <span\n className={variants.base.label}\n lang={getMessageLocale('appearance')}\n >\n {messages.appearance}\n </span>\n <ToggleButtonGroup\n aria-label={messages.appearance}\n className={variants.base.group}\n disallowEmptySelection\n lang={getMessageLocale('appearance')}\n onSelectionChange={(keys) => {\n const [selection] = keys;\n\n if (isAppearance(selection)) {\n setAppearance(selection);\n }\n }}\n selectedKeys={[appearance]}\n selectionMode=\"single\"\n >\n {appearanceOptions.map((option) => (\n <ToggleButton\n className={[variants.base.option, variants.state.selected].join(\n ' ',\n )}\n id={option.value}\n key={option.value}\n lang={getMessageLocale(option.message)}\n >\n {messages[option.message]}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </div>\n );\n}\n\nexport default AppearanceControl;\n","import type { ButtonHTMLAttributes, Ref } from 'react';\nimport { createElement } from 'react';\nimport { Button as AriaButton } from 'react-aria-components/Button';\nimport { ProgressBarContext } from 'react-aria-components/ProgressBar';\nimport { useSlottedContext } from 'react-aria-components/slots';\nimport { useBreezeContext } from '../../provider/BreezeContext';\n\nconst variants = {\n base: {\n button:\n 'breeze:relative breeze:inline-grid breeze:items-center breeze:justify-center breeze:gap-breeze-2 breeze:border breeze:border-solid breeze:rounded-breeze-ctl breeze:font-breeze-sans breeze:text-breeze-sm breeze:leading-breeze-snug breeze:cursor-pointer breeze:select-none breeze:[text-align:center] breeze:outline-offset-2 breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap',\n label: 'breeze:[grid-area:1/1]',\n skeleton:\n 'breeze:[grid-area:1/1] breeze:inline-size-full breeze:block-size-breeze-3 breeze:rounded-breeze-xs',\n },\n compound: {\n loading: {\n danger: 'breeze:bg-breeze-on-brand/35',\n primary: 'breeze:bg-breeze-on-brand/35',\n quiet: 'breeze:bg-breeze-line-strong',\n secondary: 'breeze:bg-breeze-line-strong',\n },\n },\n size: {\n lg: 'breeze:min-block-breeze-lg breeze:ps-breeze-5 breeze:pe-breeze-5 breeze:py-breeze-3',\n md: 'breeze:min-block-breeze-md breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:py-breeze-2',\n sm: 'breeze:min-block-breeze-sm breeze:ps-breeze-3 breeze:pe-breeze-3 breeze:py-breeze-1',\n },\n state: {\n disabled: 'breeze:cursor-not-allowed breeze:opacity-50',\n loading: 'breeze:cursor-wait',\n loadingLabel: 'breeze:opacity-0',\n loadingStatus: 'breeze:sr-only',\n },\n variant: {\n danger:\n 'breeze:border-transparent breeze:bg-breeze-danger-fill breeze:text-breeze-on-brand breeze:data-[hovered]:bg-breeze-danger-hover breeze:data-[pressed]:bg-breeze-danger-hover',\n primary:\n 'breeze:border-transparent breeze:bg-breeze-brand breeze:text-breeze-on-brand breeze:data-[hovered]:bg-breeze-brand-hover breeze:data-[pressed]:bg-breeze-brand-hover',\n quiet:\n 'breeze:border-transparent breeze:bg-transparent breeze:text-breeze-brand-text breeze:data-[hovered]:bg-breeze-brand-soft breeze:data-[pressed]:bg-breeze-brand-soft',\n secondary:\n 'breeze:border-breeze-line-strong breeze:bg-breeze-surface breeze:text-breeze-ink breeze:data-[hovered]:bg-breeze-sunken breeze:data-[pressed]:bg-breeze-sunken',\n },\n} as const;\n\n/** Connect the pending announcement to a phrasing element inside the button. */\nfunction LoadingStatus() {\n const progress = useSlottedContext(ProgressBarContext);\n const { getMessageLocale, messages } = useBreezeContext();\n\n return (\n <progress\n aria-label={messages.loading}\n className={variants.state.loadingStatus}\n id={progress?.id}\n lang={getMessageLocale('loading')}\n />\n );\n}\n\n/** Button-specific visual treatments. */\nexport type ButtonVariant = keyof typeof variants.variant;\n\n/** Shared control sizes: 34, 38 and 52px, with a 44px coarse-pointer floor. */\nexport type ControlSize = 'sm' | 'md' | 'lg';\n\n/** An intentional native subset; styling, slots and DOM event callbacks are closed. */\ntype NativeButtonProps = Pick<\n ButtonHTMLAttributes<HTMLButtonElement>,\n | 'aria-controls'\n | 'aria-describedby'\n | 'aria-expanded'\n | 'aria-haspopup'\n | 'aria-label'\n | 'aria-labelledby'\n | 'form'\n | 'id'\n | 'name'\n>;\n\nexport interface ButtonProps extends NativeButtonProps {\n /** Visible action label, retained as the accessible name while loading. */\n children: string;\n /** Prevents activation and removes the button from the tab order. */\n disabled?: boolean;\n /** Shows the button's own skeleton and prevents repeat activation. */\n loading?: boolean;\n /** Reports a semantic activation, without a DOM event. */\n onAction?: () => void;\n ref?: Ref<HTMLButtonElement>;\n size?: ControlSize;\n type?: 'button' | 'submit';\n value?: string;\n variant?: ButtonVariant;\n}\n\n/**\n * Performs a semantic action with a visible label and an optional loading skeleton.\n *\n * @summary A closed, labelled action in four treatments and three sizes.\n */\nexport function Button({\n 'aria-controls': ariaControls,\n 'aria-describedby': ariaDescribedBy,\n 'aria-expanded': ariaExpanded,\n 'aria-haspopup': ariaHasPopup,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n children,\n disabled = false,\n form,\n id,\n loading = false,\n name,\n onAction,\n ref,\n size = 'md',\n type = 'button',\n value,\n variant = 'primary',\n}: Readonly<ButtonProps>) {\n useBreezeContext();\n\n const className = [\n variants.base.button,\n variants.variant[variant],\n variants.size[size],\n disabled && variants.state.disabled,\n loading && variants.state.loading,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <AriaButton\n aria-controls={ariaControls}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={ariaLabel ?? children}\n aria-labelledby={ariaLabelledBy}\n className={className}\n form={form}\n id={id}\n isDisabled={disabled}\n isPending={loading}\n name={name}\n onPress={() => onAction?.()}\n ref={ref}\n render={(buttonProps) =>\n createElement('button', {\n ...buttonProps,\n // React Aria filters aria-busy; Breeze owns it on the native button.\n 'aria-busy': loading || undefined,\n // Keep the form's default submitter while pending so Enter cannot\n // bypass it through the browser's implicit-submission fallback.\n onClick: loading\n ? (event) => event.preventDefault()\n : buttonProps.onClick,\n type: type === 'submit' ? 'submit' : 'button',\n })\n }\n type={type}\n value={value}\n >\n <span\n className={[variants.base.label, loading && variants.state.loadingLabel]\n .filter(Boolean)\n .join(' ')}\n >\n {children}\n </span>\n {loading && (\n <>\n <LoadingStatus />\n <span\n aria-hidden=\"true\"\n className={[\n variants.base.skeleton,\n variants.compound.loading[variant],\n ].join(' ')}\n data-breeze-skeleton=\"\"\n />\n </>\n )}\n </AriaButton>\n );\n}\n","const enGB = {\n appearance: 'Appearance',\n appearanceAutomatic: 'Auto',\n appearanceDark: 'Dark',\n appearanceLight: 'Light',\n loading: 'Loading',\n};\n\nexport default enGB;\n","import type { ReactNode } from 'react';\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\nimport { I18nProvider, useLocale } from 'react-aria-components/I18nProvider';\nimport { type Appearance, BreezeContext } from './BreezeContext';\nimport enGB from './en-GB';\n\ninterface BreezeProviderBaseProps {\n children: ReactNode;\n /** BCP 47 locale for accessible interactions and future formatting components. */\n locale: string;\n /** Accessible messages translated into the provider locale; defaults to English. */\n messages?: Partial<typeof enGB>;\n}\n\ninterface ControlledAppearanceProps {\n /** The application-owned appearance choice. */\n appearance: Appearance;\n defaultAppearance?: never;\n /** Reports a semantic appearance choice so the application can persist it. */\n onAppearanceChange: (appearance: Appearance) => void;\n}\n\ninterface UncontrolledAppearanceProps {\n appearance?: never;\n /** The initial appearance choice; defaults to automatic. */\n defaultAppearance?: Appearance;\n /** Reports a semantic appearance choice without persisting it. */\n onAppearanceChange?: (appearance: Appearance) => void;\n}\n\n/** The required locale and appearance boundary for Breeze components. */\nexport type BreezeProviderProps = BreezeProviderBaseProps &\n (ControlledAppearanceProps | UncontrolledAppearanceProps);\n\nfunction resolveAppearance(appearance: Appearance, prefersDark: boolean) {\n if (appearance === 'automatic') {\n return prefersDark ? 'dark' : 'light';\n }\n\n return appearance;\n}\n\nfunction BreezeRoot({\n children,\n}: Readonly<Pick<BreezeProviderProps, 'children'>>) {\n const { direction, locale } = useLocale();\n\n return (\n <div data-breeze-root=\"\" dir={direction} lang={locale}>\n {children}\n </div>\n );\n}\n\n/**\n * Establishes the required locale and styling boundary.\n *\n * @summary Required locale and styling boundary for Breeze components.\n */\nexport function BreezeProvider({\n appearance: controlledAppearance,\n children,\n defaultAppearance = 'automatic',\n locale,\n messages,\n onAppearanceChange,\n}: Readonly<BreezeProviderProps>) {\n const [preferredColorSchemeQuery] = useState(() =>\n typeof window === 'undefined' || !window.matchMedia\n ? null\n : window.matchMedia('(prefers-color-scheme: dark)'),\n );\n const [prefersDark, setPrefersDark] = useState(\n () => preferredColorSchemeQuery?.matches ?? false,\n );\n const [uncontrolledAppearance, setUncontrolledAppearance] =\n useState(defaultAppearance);\n const appearance = controlledAppearance ?? uncontrolledAppearance;\n const resolvedAppearance = resolveAppearance(appearance, prefersDark);\n\n useEffect(() => {\n if (!preferredColorSchemeQuery) {\n return undefined;\n }\n\n setPrefersDark(preferredColorSchemeQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setPrefersDark(event.matches);\n };\n\n preferredColorSchemeQuery.addEventListener('change', handleChange);\n\n return () =>\n preferredColorSchemeQuery.removeEventListener('change', handleChange);\n }, [preferredColorSchemeQuery]);\n\n useLayoutEffect(() => {\n const { documentElement } = document;\n const previousTheme = documentElement.dataset.theme;\n const previousColorScheme = documentElement.style.colorScheme;\n\n documentElement.dataset.theme = resolvedAppearance;\n documentElement.style.colorScheme = resolvedAppearance;\n\n return () => {\n if (previousTheme === undefined) {\n delete documentElement.dataset.theme;\n } else {\n documentElement.dataset.theme = previousTheme;\n }\n\n documentElement.style.colorScheme = previousColorScheme;\n };\n }, [resolvedAppearance]);\n\n const setAppearance = useCallback(\n (nextAppearance: Appearance) => {\n if (controlledAppearance === undefined) {\n setUncontrolledAppearance(nextAppearance);\n }\n\n onAppearanceChange?.(nextAppearance);\n },\n [controlledAppearance, onAppearanceChange],\n );\n const getMessageLocale = useCallback(\n (message: keyof typeof enGB) =>\n messages?.[message] === undefined ? 'en-GB' : locale,\n [locale, messages],\n );\n\n const context = useMemo(\n () => ({\n appearance,\n getMessageLocale,\n locale,\n messages: {\n appearance: messages?.appearance ?? enGB.appearance,\n appearanceAutomatic:\n messages?.appearanceAutomatic ?? enGB.appearanceAutomatic,\n appearanceDark: messages?.appearanceDark ?? enGB.appearanceDark,\n appearanceLight: messages?.appearanceLight ?? enGB.appearanceLight,\n loading: messages?.loading ?? enGB.loading,\n },\n resolvedAppearance,\n setAppearance,\n }),\n [\n appearance,\n getMessageLocale,\n locale,\n messages,\n resolvedAppearance,\n setAppearance,\n ],\n );\n\n return (\n <I18nProvider locale={locale}>\n <BreezeContext value={context}>\n <BreezeRoot>{children}</BreezeRoot>\n </BreezeContext>\n </I18nProvider>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Lets a person choose light, automatic or dark appearance.
3
+ *
4
+ * @summary A three-option appearance control backed by BreezeProvider.
5
+ */
6
+ declare function AppearanceControl(): import("react").JSX.Element;
7
+ export default AppearanceControl;
8
+ //# sourceMappingURL=AppearanceControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppearanceControl.d.ts","sourceRoot":"","sources":["../../../src/patterns/AppearanceControl/AppearanceControl.tsx"],"names":[],"mappings":"AA4CA;;;;GAIG;AACH,iBAAS,iBAAiB,gCA0CzB;AAED,eAAe,iBAAiB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ButtonHTMLAttributes, ReactElement, Ref } from 'react';
1
+ import type { ButtonHTMLAttributes, Ref } from 'react';
2
2
  declare const variants: {
3
3
  readonly base: {
4
4
  readonly button: "breeze:relative breeze:inline-grid breeze:items-center breeze:justify-center breeze:gap-breeze-2 breeze:border breeze:border-solid breeze:rounded-breeze-ctl breeze:font-breeze-sans breeze:text-breeze-sm breeze:leading-breeze-snug breeze:cursor-pointer breeze:select-none breeze:[text-align:center] breeze:outline-offset-2 breeze:data-[focus-visible]:outline-2 breeze:data-[focus-visible]:outline-solid breeze:data-[focus-visible]:outline-breeze-brand breeze:any-pointer-coarse:min-block-breeze-tap breeze:any-pointer-coarse:min-inline-breeze-tap";
@@ -57,6 +57,6 @@ export interface ButtonProps extends NativeButtonProps {
57
57
  *
58
58
  * @summary A closed, labelled action in four treatments and three sizes.
59
59
  */
60
- export declare function Button({ 'aria-controls': ariaControls, 'aria-describedby': ariaDescribedBy, 'aria-expanded': ariaExpanded, 'aria-haspopup': ariaHasPopup, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, children, disabled, form, id, loading, name, onAction, ref, size, type, value, variant, }: Readonly<ButtonProps>): ReactElement;
60
+ export declare function Button({ 'aria-controls': ariaControls, 'aria-describedby': ariaDescribedBy, 'aria-expanded': ariaExpanded, 'aria-haspopup': ariaHasPopup, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, children, disabled, form, id, loading, name, onAction, ref, size, type, value, variant, }: Readonly<ButtonProps>): import("react").JSX.Element;
61
61
  export {};
62
62
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAOrE,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCJ,CAAC;AAiBX,yCAAyC;AACzC,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,QAAQ,CAAC,OAAO,CAAC;AAE1D,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,uFAAuF;AACvF,KAAK,iBAAiB,GAAG,IAAI,CAC3B,oBAAoB,CAAC,iBAAiB,CAAC,EACrC,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,YAAY,GACZ,iBAAiB,GACjB,MAAM,GACN,IAAI,GACJ,MAAM,CACT,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,eAAe,EAAE,YAAY,EAC7B,kBAAkB,EAAE,eAAe,EACnC,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,QAAQ,EACR,QAAgB,EAChB,IAAI,EACJ,EAAE,EACF,OAAe,EACf,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,IAAW,EACX,IAAe,EACf,KAAK,EACL,OAAmB,GACpB,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,YAAY,CAmEtC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAOvD,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCJ,CAAC;AAiBX,yCAAyC;AACzC,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,QAAQ,CAAC,OAAO,CAAC;AAE1D,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,uFAAuF;AACvF,KAAK,iBAAiB,GAAG,IAAI,CAC3B,oBAAoB,CAAC,iBAAiB,CAAC,EACrC,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,YAAY,GACZ,iBAAiB,GACjB,MAAM,GACN,IAAI,GACJ,MAAM,CACT,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,eAAe,EAAE,YAAY,EAC7B,kBAAkB,EAAE,eAAe,EACnC,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,QAAQ,EACR,QAAgB,EAChB,IAAI,EACJ,EAAE,EACF,OAAe,EACf,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,IAAW,EACX,IAAe,EACf,KAAK,EACL,OAAmB,GACpB,EAAE,QAAQ,CAAC,WAAW,CAAC,+BAmEvB"}
@@ -1,8 +1,13 @@
1
1
  import type enGB from './en-GB';
2
+ export type Appearance = 'automatic' | 'dark' | 'light';
3
+ export type ResolvedAppearance = Exclude<Appearance, 'automatic'>;
2
4
  interface BreezeContextValue {
5
+ appearance: Appearance;
6
+ getMessageLocale: (message: keyof typeof enGB) => string;
3
7
  locale: string;
4
- messageLocale: string;
5
8
  messages: typeof enGB;
9
+ resolvedAppearance: ResolvedAppearance;
10
+ setAppearance: (appearance: Appearance) => void;
6
11
  }
7
12
  export declare const BreezeContext: import("react").Context<BreezeContextValue | null>;
8
13
  export declare function useBreezeContext(): BreezeContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"BreezeContext.d.ts","sourceRoot":"","sources":["../../src/provider/BreezeContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,oDAAiD,CAAC;AAE5E,wBAAgB,gBAAgB,IAAI,kBAAkB,CAUrD"}
1
+ {"version":3,"file":"BreezeContext.d.ts","sourceRoot":"","sources":["../../src/provider/BreezeContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAElE,UAAU,kBAAkB;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,OAAO,IAAI,KAAK,MAAM,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,IAAI,CAAC;IACtB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,aAAa,oDAAiD,CAAC;AAE5E,wBAAgB,gBAAgB,IAAI,kBAAkB,CAUrD"}
@@ -1,17 +1,34 @@
1
1
  import type { ReactNode } from 'react';
2
+ import { type Appearance } from './BreezeContext';
2
3
  import enGB from './en-GB';
3
- /** The required locale boundary for Breeze components. */
4
- export interface BreezeProviderProps {
4
+ interface BreezeProviderBaseProps {
5
5
  children: ReactNode;
6
6
  /** BCP 47 locale for accessible interactions and future formatting components. */
7
7
  locale: string;
8
8
  /** Accessible messages translated into the provider locale; defaults to English. */
9
- messages?: typeof enGB;
9
+ messages?: Partial<typeof enGB>;
10
10
  }
11
+ interface ControlledAppearanceProps {
12
+ /** The application-owned appearance choice. */
13
+ appearance: Appearance;
14
+ defaultAppearance?: never;
15
+ /** Reports a semantic appearance choice so the application can persist it. */
16
+ onAppearanceChange: (appearance: Appearance) => void;
17
+ }
18
+ interface UncontrolledAppearanceProps {
19
+ appearance?: never;
20
+ /** The initial appearance choice; defaults to automatic. */
21
+ defaultAppearance?: Appearance;
22
+ /** Reports a semantic appearance choice without persisting it. */
23
+ onAppearanceChange?: (appearance: Appearance) => void;
24
+ }
25
+ /** The required locale and appearance boundary for Breeze components. */
26
+ export type BreezeProviderProps = BreezeProviderBaseProps & (ControlledAppearanceProps | UncontrolledAppearanceProps);
11
27
  /**
12
28
  * Establishes the required locale and styling boundary.
13
29
  *
14
30
  * @summary Required locale and styling boundary for Breeze components.
15
31
  */
16
- export declare function BreezeProvider({ children, locale, messages, }: Readonly<BreezeProviderProps>): import("react").JSX.Element;
32
+ export declare function BreezeProvider({ appearance: controlledAppearance, children, defaultAppearance, locale, messages, onAppearanceChange, }: Readonly<BreezeProviderProps>): import("react").JSX.Element;
33
+ export {};
17
34
  //# sourceMappingURL=BreezeProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BreezeProvider.d.ts","sourceRoot":"","sources":["../../src/provider/BreezeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC;CACxB;AAcD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE,QAAQ,CAAC,mBAAmB,CAAC,+BAiB/B"}
1
+ {"version":3,"file":"BreezeProvider.d.ts","sourceRoot":"","sources":["../../src/provider/BreezeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AACjE,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;CACjC;AAED,UAAU,yBAAyB;IACjC,+CAA+C;IAC/C,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,8EAA8E;IAC9E,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CACtD;AAED,UAAU,2BAA2B;IACnC,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CACvD;AAED,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GACvD,CAAC,yBAAyB,GAAG,2BAA2B,CAAC,CAAC;AAsB5D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EACR,iBAA+B,EAC/B,MAAM,EACN,QAAQ,EACR,kBAAkB,GACnB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,+BAmG/B"}
@@ -1,4 +1,8 @@
1
1
  declare const enGB: {
2
+ appearance: string;
3
+ appearanceAutomatic: string;
4
+ appearanceDark: string;
5
+ appearanceLight: string;
2
6
  loading: string;
3
7
  };
4
8
  export default enGB;
@@ -1 +1 @@
1
- {"version":3,"file":"en-GB.d.ts","sourceRoot":"","sources":["../../src/provider/en-GB.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI;;CAET,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"en-GB.d.ts","sourceRoot":"","sources":["../../src/provider/en-GB.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI;;;;;;CAMT,CAAC;AAEF,eAAe,IAAI,CAAC"}
package/lib/styles.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-outline-style:solid}}}@layer theme;@layer base{:where([data-breeze-root]),:where([data-breeze-root]) *,:where([data-breeze-root]) :before,:where([data-breeze-root]) :after{box-sizing:border-box}:where([data-breeze-root]){background:var(--breeze-color-breeze-canvas);min-inline-size:0;color:var(--breeze-color-breeze-ink);font-family:var(--breeze-font-breeze-sans);font-size:var(--breeze-text-breeze-sm);font-synthesis:none;line-height:var(--breeze-leading-breeze-snug)}:where([data-breeze-root]) button{font:inherit}:where([data-breeze-root]) [hidden]{display:none!important}}@layer components;@layer utilities{:where([data-breeze-root]) .breeze\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where([data-breeze-root]) .breeze\:relative{position:relative}:where([data-breeze-root]) .breeze\:inline-grid{display:inline-grid}:where([data-breeze-root]) .breeze\:cursor-not-allowed{cursor:not-allowed}:where([data-breeze-root]) .breeze\:cursor-pointer{cursor:pointer}:where([data-breeze-root]) .breeze\:cursor-wait{cursor:wait}:where([data-breeze-root]) .breeze\:items-center{align-items:center}:where([data-breeze-root]) .breeze\:justify-center{justify-content:center}:where([data-breeze-root]) .breeze\:gap-breeze-2{gap:var(--breeze-spacing-breeze-2)}:where([data-breeze-root]) .breeze\:rounded-breeze-ctl{border-radius:var(--breeze-radius-breeze-ctl)}:where([data-breeze-root]) .breeze\:rounded-breeze-xs{border-radius:var(--breeze-radius-breeze-xs)}:where([data-breeze-root]) .breeze\:border{border-style:var(--tw-border-style);border-width:1px}:where([data-breeze-root]) .breeze\:border-solid{--tw-border-style:solid;border-style:solid}:where([data-breeze-root]) .breeze\:border-breeze-line-strong{border-color:var(--breeze-color-breeze-line-strong)}:where([data-breeze-root]) .breeze\:border-transparent{border-color:#0000}:where([data-breeze-root]) .breeze\:bg-breeze-brand{background-color:var(--breeze-color-breeze-brand)}:where([data-breeze-root]) .breeze\:bg-breeze-danger-fill{background-color:var(--breeze-color-breeze-danger-fill)}:where([data-breeze-root]) .breeze\:bg-breeze-line-strong{background-color:var(--breeze-color-breeze-line-strong)}:where([data-breeze-root]) .breeze\:bg-breeze-on-brand\/35{background-color:var(--breeze-color-breeze-on-brand)}@supports (color:color-mix(in lab, red, red)){:where([data-breeze-root]) .breeze\:bg-breeze-on-brand\/35{background-color:color-mix(in oklab, var(--breeze-color-breeze-on-brand) 35%, transparent)}}:where([data-breeze-root]) .breeze\:bg-breeze-surface{background-color:var(--breeze-color-breeze-surface)}:where([data-breeze-root]) .breeze\:bg-transparent{background-color:#0000}:where([data-breeze-root]) .breeze\:py-breeze-1{padding-block:var(--breeze-spacing-breeze-1)}:where([data-breeze-root]) .breeze\:py-breeze-2{padding-block:var(--breeze-spacing-breeze-2)}:where([data-breeze-root]) .breeze\:py-breeze-3{padding-block:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:ps-breeze-3{padding-inline-start:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:ps-breeze-5{padding-inline-start:var(--breeze-spacing-breeze-5)}:where([data-breeze-root]) .breeze\:pe-breeze-3{padding-inline-end:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:pe-breeze-5{padding-inline-end:var(--breeze-spacing-breeze-5)}:where([data-breeze-root]) .breeze\:\[text-align\:center\]{text-align:center}:where([data-breeze-root]) .breeze\:font-breeze-sans{font-family:var(--breeze-font-breeze-sans)}:where([data-breeze-root]) .breeze\:text-breeze-sm{font-size:var(--breeze-text-breeze-sm)}:where([data-breeze-root]) .breeze\:leading-breeze-snug{--tw-leading:var(--breeze-leading-breeze-snug);line-height:var(--breeze-leading-breeze-snug)}:where([data-breeze-root]) .breeze\:text-breeze-brand-text{color:var(--breeze-color-breeze-brand-text)}:where([data-breeze-root]) .breeze\:text-breeze-ink{color:var(--breeze-color-breeze-ink)}:where([data-breeze-root]) .breeze\:text-breeze-on-brand{color:var(--breeze-color-breeze-on-brand)}:where([data-breeze-root]) .breeze\:opacity-0{opacity:0}:where([data-breeze-root]) .breeze\:opacity-50{opacity:.5}:where([data-breeze-root]) .breeze\:outline-offset-2{outline-offset:2px}:where([data-breeze-root]) .breeze\:select-none{-webkit-user-select:none;user-select:none}:where([data-breeze-root]) .breeze\:\[grid-area\:1\/1\]{grid-area:1/1}:where([data-breeze-root]) .breeze\:block-size-breeze-3{block-size:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:inline-size-full{inline-size:100%}:where([data-breeze-root]) .breeze\:min-block-breeze-lg{min-block-size:var(--breeze-spacing-breeze-lg);min-block-size:var(--breeze-spacing-breeze-lg)}:where([data-breeze-root]) .breeze\:min-block-breeze-md{min-block-size:var(--breeze-spacing-breeze-md);min-block-size:var(--breeze-spacing-breeze-md)}:where([data-breeze-root]) .breeze\:min-block-breeze-sm{min-block-size:var(--breeze-spacing-breeze-sm);min-block-size:var(--breeze-spacing-breeze-sm)}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-2[data-focus-visible]{outline-style:var(--tw-outline-style);outline-width:2px}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-breeze-brand[data-focus-visible]{outline-color:var(--breeze-color-breeze-brand)}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-solid[data-focus-visible]{--tw-outline-style:solid;outline-style:solid}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-brand-hover[data-hovered]{background-color:var(--breeze-color-breeze-brand-hover)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-brand-soft[data-hovered]{background-color:var(--breeze-color-breeze-brand-soft)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-danger-hover[data-hovered]{background-color:var(--breeze-color-breeze-danger-hover)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-sunken[data-hovered]{background-color:var(--breeze-color-breeze-sunken)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-brand-hover[data-pressed]{background-color:var(--breeze-color-breeze-brand-hover)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-brand-soft[data-pressed]{background-color:var(--breeze-color-breeze-brand-soft)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-danger-hover[data-pressed]{background-color:var(--breeze-color-breeze-danger-hover)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-sunken[data-pressed]{background-color:var(--breeze-color-breeze-sunken)}@media (any-pointer:coarse){:where([data-breeze-root]) .breeze\:any-pointer-coarse\:min-block-breeze-tap{min-block-size:var(--breeze-spacing-breeze-tap);min-block-size:var(--breeze-spacing-breeze-tap)}:where([data-breeze-root]) .breeze\:any-pointer-coarse\:min-inline-breeze-tap{min-inline-size:var(--breeze-spacing-breeze-tap);min-inline-size:var(--breeze-spacing-breeze-tap)}}}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./assets/public-sans-latin-wght-normal-DdeTHZLK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root,:host{--breeze-breakpoint-breeze-sm:42.5625rem;--breeze-breakpoint-breeze-md:56.3125rem;--breeze-breakpoint-breeze-lg:73.8125rem;--breeze-font-breeze-sans:"Public Sans Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", helvetica, arial, sans-serif;--breeze-color-breeze-brand:#007fa8;--breeze-color-breeze-brand-hover:#007aa3;--breeze-color-breeze-brand-text:#006884;--breeze-color-breeze-brand-soft:#e3f2f8;--breeze-color-breeze-on-brand:#fff;--breeze-color-breeze-canvas:#f6f9fc;--breeze-color-breeze-surface:#fff;--breeze-color-breeze-raised:#f6f9fc;--breeze-color-breeze-sunken:#eff3f8;--breeze-color-breeze-line:#e3e8ee;--breeze-color-breeze-line-strong:#cfd7e0;--breeze-color-breeze-ink:#161616;--breeze-color-breeze-ink-2:#4a4f57;--breeze-color-breeze-ink-3:#66707c;--breeze-color-breeze-pos:#127a4e;--breeze-color-breeze-pos-soft:#e4f1ea;--breeze-color-breeze-warn:#8a5a0b;--breeze-color-breeze-warn-soft:#fdf3dc;--breeze-color-breeze-danger:#b4231d;--breeze-text-breeze-2xs:11px;--breeze-text-breeze-xs:12px;--breeze-text-breeze-sm:13px;--breeze-text-breeze-base:14px;--breeze-text-breeze-md:15px;--breeze-text-breeze-lg:17px;--breeze-text-breeze-xl:20px;--breeze-text-breeze-2xl:22px;--breeze-text-breeze-3xl:24px;--breeze-text-breeze-4xl:26px;--breeze-spacing-breeze-md:38px;--breeze-spacing-breeze-lg:52px;--breeze-spacing-breeze-sm:34px;--breeze-spacing-breeze-tap:44px;--breeze-spacing-breeze-row:64px;--breeze-spacing-breeze-sheet:610px;--breeze-spacing-breeze-card:400px;--breeze-radius-breeze-panel:8px;--breeze-radius-breeze-ctl:6px;--breeze-radius-breeze-chip:3px;--breeze-leading-breeze-tight:1.1;--breeze-leading-breeze-snug:1.45;--breeze-leading-breeze-normal:1.5;--breeze-tracking-breeze-tight:-.008em;--breeze-tracking-breeze-tighter:-.012em;--breeze-tracking-breeze-tightest:-.018em;--breeze-tracking-breeze-caps:.06em;--breeze-tracking-breeze-wide:.05em;--breeze-aspect-breeze-a4:1/1.414;--breeze-aspect-breeze-photo:3/4;--breeze-container-breeze-page:1500px;--breeze-container-breeze-read:54ch;--breeze-container-breeze-prose:52ch;--breeze-color-breeze-scrim:#0c121f;--breeze-radius-breeze-xs:2px;--breeze-radius-breeze-sm:4px;--breeze-color-breeze-danger-fill:#b4231d;--breeze-color-breeze-danger-hover:#981e19;--breeze-radius-breeze-full:9999px;--breeze-spacing-breeze-1:4px;--breeze-spacing-breeze-2:8px;--breeze-spacing-breeze-3:12px;--breeze-spacing-breeze-4:16px;--breeze-spacing-breeze-5:20px;--breeze-spacing-breeze-6:24px;--breeze-spacing-breeze-8:32px}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--breeze-shadow-panel:0 1px 1px #16161608, 0 2px 5px #1616160a;--breeze-shadow-overlay:0 1px 2px #1616160f, 0 8px 24px -10px #16161640}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--breeze-color-breeze-brand-text:#33aacf;--breeze-color-breeze-brand-soft:#12313b;--breeze-color-breeze-canvas:#161616;--breeze-color-breeze-surface:#1f1f1f;--breeze-color-breeze-raised:#262626;--breeze-color-breeze-sunken:#262626;--breeze-color-breeze-line:#303030;--breeze-color-breeze-line-strong:#3d3d3d;--breeze-color-breeze-ink:#f2f2f2;--breeze-color-breeze-ink-2:#b4b4b4;--breeze-color-breeze-ink-3:#949494;--breeze-color-breeze-pos:#3fbf8b;--breeze-color-breeze-pos-soft:#16291f;--breeze-color-breeze-warn:#e0b341;--breeze-color-breeze-warn-soft:#2a2314;--breeze-color-breeze-danger:#f1736a;--breeze-shadow-panel:0 1px 1px #0006;--breeze-shadow-overlay:0 1px 2px #00000080, 0 8px 24px -10px #000000b3}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--breeze-color-breeze-brand-text:#33aacf;--breeze-color-breeze-brand-soft:#12313b;--breeze-color-breeze-canvas:#161616;--breeze-color-breeze-surface:#1f1f1f;--breeze-color-breeze-raised:#262626;--breeze-color-breeze-sunken:#262626;--breeze-color-breeze-line:#303030;--breeze-color-breeze-line-strong:#3d3d3d;--breeze-color-breeze-ink:#f2f2f2;--breeze-color-breeze-ink-2:#b4b4b4;--breeze-color-breeze-ink-3:#949494;--breeze-color-breeze-pos:#3fbf8b;--breeze-color-breeze-pos-soft:#16291f;--breeze-color-breeze-warn:#e0b341;--breeze-color-breeze-warn-soft:#2a2314;--breeze-color-breeze-danger:#f1736a;--breeze-shadow-panel:0 1px 1px #0006;--breeze-shadow-overlay:0 1px 2px #00000080, 0 8px 24px -10px #000000b3}@media (prefers-reduced-motion:reduce){:where([data-breeze-root]) *,:where([data-breeze-root]) :before,:where([data-breeze-root]) :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (forced-colors:active){:where([data-breeze-root]) button{border-color:buttontext}:where([data-breeze-root]) [data-focus-visible]{outline-color:highlight}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-outline-style:solid}}}@layer theme;@layer base{:where([data-breeze-root]),:where([data-breeze-root]) *,:where([data-breeze-root]) :before,:where([data-breeze-root]) :after{box-sizing:border-box}:where([data-breeze-root]){background:var(--breeze-color-breeze-canvas);min-inline-size:0;color:var(--breeze-color-breeze-ink);font-family:var(--breeze-font-breeze-sans);font-size:var(--breeze-text-breeze-sm);font-synthesis:none;line-height:var(--breeze-leading-breeze-snug)}:where([data-breeze-root]) button{font:inherit}:where([data-breeze-root]) [hidden]{display:none!important}}@layer components;@layer utilities{:where([data-breeze-root]) .breeze\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where([data-breeze-root]) .breeze\:relative{position:relative}:where([data-breeze-root]) .breeze\:flex{display:flex}:where([data-breeze-root]) .breeze\:inline-flex{display:inline-flex}:where([data-breeze-root]) .breeze\:inline-grid{display:inline-grid}:where([data-breeze-root]) .breeze\:grow{flex-grow:1}:where([data-breeze-root]) .breeze\:cursor-not-allowed{cursor:not-allowed}:where([data-breeze-root]) .breeze\:cursor-pointer{cursor:pointer}:where([data-breeze-root]) .breeze\:cursor-wait{cursor:wait}:where([data-breeze-root]) .breeze\:items-center{align-items:center}:where([data-breeze-root]) .breeze\:justify-center{justify-content:center}:where([data-breeze-root]) .breeze\:gap-breeze-2{gap:var(--breeze-spacing-breeze-2)}:where([data-breeze-root]) .breeze\:rounded-breeze-ctl{border-radius:var(--breeze-radius-breeze-ctl)}:where([data-breeze-root]) .breeze\:rounded-breeze-full{border-radius:var(--breeze-radius-breeze-full)}:where([data-breeze-root]) .breeze\:rounded-breeze-xs{border-radius:var(--breeze-radius-breeze-xs)}:where([data-breeze-root]) .breeze\:border{border-style:var(--tw-border-style);border-width:1px}:where([data-breeze-root]) .breeze\:border-solid{--tw-border-style:solid;border-style:solid}:where([data-breeze-root]) .breeze\:border-breeze-line-strong{border-color:var(--breeze-color-breeze-line-strong)}:where([data-breeze-root]) .breeze\:border-transparent{border-color:#0000}:where([data-breeze-root]) .breeze\:bg-breeze-brand{background-color:var(--breeze-color-breeze-brand)}:where([data-breeze-root]) .breeze\:bg-breeze-danger-fill{background-color:var(--breeze-color-breeze-danger-fill)}:where([data-breeze-root]) .breeze\:bg-breeze-line-strong{background-color:var(--breeze-color-breeze-line-strong)}:where([data-breeze-root]) .breeze\:bg-breeze-on-brand\/35{background-color:var(--breeze-color-breeze-on-brand)}@supports (color:color-mix(in lab, red, red)){:where([data-breeze-root]) .breeze\:bg-breeze-on-brand\/35{background-color:color-mix(in oklab, var(--breeze-color-breeze-on-brand) 35%, transparent)}}:where([data-breeze-root]) .breeze\:bg-breeze-surface{background-color:var(--breeze-color-breeze-surface)}:where([data-breeze-root]) .breeze\:bg-transparent{background-color:#0000}:where([data-breeze-root]) .breeze\:py-breeze-1{padding-block:var(--breeze-spacing-breeze-1)}:where([data-breeze-root]) .breeze\:py-breeze-2{padding-block:var(--breeze-spacing-breeze-2)}:where([data-breeze-root]) .breeze\:py-breeze-3{padding-block:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:ps-breeze-3{padding-inline-start:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:ps-breeze-5{padding-inline-start:var(--breeze-spacing-breeze-5)}:where([data-breeze-root]) .breeze\:pe-breeze-3{padding-inline-end:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:pe-breeze-5{padding-inline-end:var(--breeze-spacing-breeze-5)}:where([data-breeze-root]) .breeze\:\[text-align\:center\]{text-align:center}:where([data-breeze-root]) .breeze\:font-breeze-sans{font-family:var(--breeze-font-breeze-sans)}:where([data-breeze-root]) .breeze\:text-breeze-sm{font-size:var(--breeze-text-breeze-sm)}:where([data-breeze-root]) .breeze\:text-breeze-xs{font-size:var(--breeze-text-breeze-xs)}:where([data-breeze-root]) .breeze\:leading-breeze-snug{--tw-leading:var(--breeze-leading-breeze-snug);line-height:var(--breeze-leading-breeze-snug)}:where([data-breeze-root]) .breeze\:text-breeze-brand-text{color:var(--breeze-color-breeze-brand-text)}:where([data-breeze-root]) .breeze\:text-breeze-ink{color:var(--breeze-color-breeze-ink)}:where([data-breeze-root]) .breeze\:text-breeze-on-brand{color:var(--breeze-color-breeze-on-brand)}:where([data-breeze-root]) .breeze\:opacity-0{opacity:0}:where([data-breeze-root]) .breeze\:opacity-50{opacity:.5}:where([data-breeze-root]) .breeze\:outline-offset-2{outline-offset:2px}:where([data-breeze-root]) .breeze\:select-none{-webkit-user-select:none;user-select:none}:where([data-breeze-root]) .breeze\:\[grid-area\:1\/1\]{grid-area:1/1}:where([data-breeze-root]) .breeze\:block-size-breeze-3{block-size:var(--breeze-spacing-breeze-3)}:where([data-breeze-root]) .breeze\:inline-size-full{inline-size:100%}:where([data-breeze-root]) .breeze\:min-block-breeze-lg{min-block-size:var(--breeze-spacing-breeze-lg);min-block-size:var(--breeze-spacing-breeze-lg)}:where([data-breeze-root]) .breeze\:min-block-breeze-md{min-block-size:var(--breeze-spacing-breeze-md);min-block-size:var(--breeze-spacing-breeze-md)}:where([data-breeze-root]) .breeze\:min-block-breeze-sm{min-block-size:var(--breeze-spacing-breeze-sm);min-block-size:var(--breeze-spacing-breeze-sm)}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-2[data-focus-visible]{outline-style:var(--tw-outline-style);outline-width:2px}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-breeze-brand[data-focus-visible]{outline-color:var(--breeze-color-breeze-brand)}:where([data-breeze-root]) .breeze\:data-\[focus-visible\]\:outline-solid[data-focus-visible]{--tw-outline-style:solid;outline-style:solid}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-brand-hover[data-hovered]{background-color:var(--breeze-color-breeze-brand-hover)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-brand-soft[data-hovered]{background-color:var(--breeze-color-breeze-brand-soft)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-danger-hover[data-hovered]{background-color:var(--breeze-color-breeze-danger-hover)}:where([data-breeze-root]) .breeze\:data-\[hovered\]\:bg-breeze-sunken[data-hovered]{background-color:var(--breeze-color-breeze-sunken)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-brand-hover[data-pressed]{background-color:var(--breeze-color-breeze-brand-hover)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-brand-soft[data-pressed]{background-color:var(--breeze-color-breeze-brand-soft)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-danger-hover[data-pressed]{background-color:var(--breeze-color-breeze-danger-hover)}:where([data-breeze-root]) .breeze\:data-\[pressed\]\:bg-breeze-sunken[data-pressed]{background-color:var(--breeze-color-breeze-sunken)}:where([data-breeze-root]) .breeze\:data-\[selected\]\:border-breeze-brand[data-selected]{border-color:var(--breeze-color-breeze-brand)}:where([data-breeze-root]) .breeze\:data-\[selected\]\:bg-breeze-brand-soft[data-selected]{background-color:var(--breeze-color-breeze-brand-soft)}:where([data-breeze-root]) .breeze\:data-\[selected\]\:text-breeze-brand-text[data-selected]{color:var(--breeze-color-breeze-brand-text)}@media (forced-colors:active){:where([data-breeze-root]) .breeze\:forced-colors\:data-\[selected\]\:outline-2[data-selected]{outline-style:var(--tw-outline-style);outline-width:2px}:where([data-breeze-root]) .breeze\:forced-colors\:data-\[selected\]\:outline-offset-2[data-selected]{outline-offset:2px}}@media (any-pointer:coarse){:where([data-breeze-root]) .breeze\:any-pointer-coarse\:min-block-breeze-tap{min-block-size:var(--breeze-spacing-breeze-tap);min-block-size:var(--breeze-spacing-breeze-tap)}:where([data-breeze-root]) .breeze\:any-pointer-coarse\:min-inline-breeze-tap{min-inline-size:var(--breeze-spacing-breeze-tap);min-inline-size:var(--breeze-spacing-breeze-tap)}}}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./assets/public-sans-latin-wght-normal-DdeTHZLK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root,:host{--breeze-breakpoint-breeze-sm:42.5625rem;--breeze-breakpoint-breeze-md:56.3125rem;--breeze-breakpoint-breeze-lg:73.8125rem;--breeze-font-breeze-sans:"Public Sans Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", helvetica, arial, sans-serif;--breeze-color-breeze-brand:#007fa8;--breeze-color-breeze-brand-hover:#007aa3;--breeze-color-breeze-brand-text:#006884;--breeze-color-breeze-brand-soft:#e3f2f8;--breeze-color-breeze-on-brand:#fff;--breeze-color-breeze-canvas:#f6f9fc;--breeze-color-breeze-surface:#fff;--breeze-color-breeze-raised:#f6f9fc;--breeze-color-breeze-sunken:#eff3f8;--breeze-color-breeze-line:#e3e8ee;--breeze-color-breeze-line-strong:#cfd7e0;--breeze-color-breeze-ink:#161616;--breeze-color-breeze-ink-2:#4a4f57;--breeze-color-breeze-ink-3:#66707c;--breeze-color-breeze-pos:#127a4e;--breeze-color-breeze-pos-soft:#e4f1ea;--breeze-color-breeze-warn:#8a5a0b;--breeze-color-breeze-warn-soft:#fdf3dc;--breeze-color-breeze-danger:#b4231d;--breeze-text-breeze-2xs:11px;--breeze-text-breeze-xs:12px;--breeze-text-breeze-sm:13px;--breeze-text-breeze-base:14px;--breeze-text-breeze-md:15px;--breeze-text-breeze-lg:17px;--breeze-text-breeze-xl:20px;--breeze-text-breeze-2xl:22px;--breeze-text-breeze-3xl:24px;--breeze-text-breeze-4xl:26px;--breeze-spacing-breeze-md:38px;--breeze-spacing-breeze-lg:52px;--breeze-spacing-breeze-sm:34px;--breeze-spacing-breeze-tap:44px;--breeze-spacing-breeze-row:64px;--breeze-spacing-breeze-sheet:610px;--breeze-spacing-breeze-card:400px;--breeze-radius-breeze-panel:8px;--breeze-radius-breeze-ctl:6px;--breeze-radius-breeze-chip:3px;--breeze-leading-breeze-tight:1.1;--breeze-leading-breeze-snug:1.45;--breeze-leading-breeze-normal:1.5;--breeze-tracking-breeze-tight:-.008em;--breeze-tracking-breeze-tighter:-.012em;--breeze-tracking-breeze-tightest:-.018em;--breeze-tracking-breeze-caps:.06em;--breeze-tracking-breeze-wide:.05em;--breeze-aspect-breeze-a4:1/1.414;--breeze-aspect-breeze-photo:3/4;--breeze-container-breeze-page:1500px;--breeze-container-breeze-read:54ch;--breeze-container-breeze-prose:52ch;--breeze-color-breeze-scrim:#0c121f;--breeze-radius-breeze-xs:2px;--breeze-radius-breeze-sm:4px;--breeze-color-breeze-danger-fill:#b4231d;--breeze-color-breeze-danger-hover:#981e19;--breeze-radius-breeze-full:9999px;--breeze-spacing-breeze-1:4px;--breeze-spacing-breeze-2:8px;--breeze-spacing-breeze-3:12px;--breeze-spacing-breeze-4:16px;--breeze-spacing-breeze-5:20px;--breeze-spacing-breeze-6:24px;--breeze-spacing-breeze-8:32px}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--breeze-shadow-panel:0 1px 1px #16161608, 0 2px 5px #1616160a;--breeze-shadow-overlay:0 1px 2px #1616160f, 0 8px 24px -10px #16161640}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--breeze-color-breeze-brand-text:#33aacf;--breeze-color-breeze-brand-soft:#12313b;--breeze-color-breeze-canvas:#161616;--breeze-color-breeze-surface:#1f1f1f;--breeze-color-breeze-raised:#262626;--breeze-color-breeze-sunken:#262626;--breeze-color-breeze-line:#303030;--breeze-color-breeze-line-strong:#3d3d3d;--breeze-color-breeze-ink:#f2f2f2;--breeze-color-breeze-ink-2:#b4b4b4;--breeze-color-breeze-ink-3:#949494;--breeze-color-breeze-pos:#3fbf8b;--breeze-color-breeze-pos-soft:#16291f;--breeze-color-breeze-warn:#e0b341;--breeze-color-breeze-warn-soft:#2a2314;--breeze-color-breeze-danger:#f1736a;--breeze-shadow-panel:0 1px 1px #0006;--breeze-shadow-overlay:0 1px 2px #00000080, 0 8px 24px -10px #000000b3}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--breeze-color-breeze-brand-text:#33aacf;--breeze-color-breeze-brand-soft:#12313b;--breeze-color-breeze-canvas:#161616;--breeze-color-breeze-surface:#1f1f1f;--breeze-color-breeze-raised:#262626;--breeze-color-breeze-sunken:#262626;--breeze-color-breeze-line:#303030;--breeze-color-breeze-line-strong:#3d3d3d;--breeze-color-breeze-ink:#f2f2f2;--breeze-color-breeze-ink-2:#b4b4b4;--breeze-color-breeze-ink-3:#949494;--breeze-color-breeze-pos:#3fbf8b;--breeze-color-breeze-pos-soft:#16291f;--breeze-color-breeze-warn:#e0b341;--breeze-color-breeze-warn-soft:#2a2314;--breeze-color-breeze-danger:#f1736a;--breeze-shadow-panel:0 1px 1px #0006;--breeze-shadow-overlay:0 1px 2px #00000080, 0 8px 24px -10px #000000b3}@media (prefers-reduced-motion:reduce){:where([data-breeze-root]) *,:where([data-breeze-root]) :before,:where([data-breeze-root]) :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (forced-colors:active){:where([data-breeze-root]) button{border-color:buttontext}:where([data-breeze-root]) [data-focus-visible]{outline-color:highlight}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motech-development/breeze-ui",
3
- "version": "4.0.0",
3
+ "version": "4.1.1",
4
4
  "description": "Accessible, domain-neutral UI primitives and patterns for Motech Development applications",
5
5
  "installConfig": {
6
6
  "hoistingLimits": "workspaces"