@alfadocs/ui-kit 0.16.0 → 0.17.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.
Files changed (31) hide show
  1. package/dist/_chunks/benefit-card-DXmrAyfn.js +219 -0
  2. package/dist/_chunks/{carousel.agent-OTn-kMQg.js → carousel.agent-Xuw9LPZN.js} +14 -7
  3. package/dist/_chunks/copy-field-BCHAZ8QV.js +298 -0
  4. package/dist/_chunks/{navigation-menu-Bav1d_wA.js → navigation-menu-DdufF-_4.js} +18 -18
  5. package/dist/_chunks/{pagination-OQBlnb1H.js → pagination-F1ei4khE.js} +180 -158
  6. package/dist/_chunks/public-header.agent-BIBQzkeV.js +557 -0
  7. package/dist/agent-catalog.json +37 -1
  8. package/dist/components/benefit-card/index.js +1 -1
  9. package/dist/components/carousel/index.js +1 -1
  10. package/dist/components/copy-field/copy-field.agent.d.ts +16 -0
  11. package/dist/components/copy-field/copy-field.d.ts +50 -0
  12. package/dist/components/copy-field/index.d.ts +5 -0
  13. package/dist/components/copy-field/index.js +6 -0
  14. package/dist/components/index.d.ts +1 -0
  15. package/dist/components/navigation-menu/index.js +1 -1
  16. package/dist/components/pagination/index.js +1 -1
  17. package/dist/components/public-header/index.d.ts +1 -1
  18. package/dist/components/public-header/index.js +1 -1
  19. package/dist/components/public-header/public-header.d.ts +36 -1
  20. package/dist/hooks/use-controllable-state.d.ts +10 -0
  21. package/dist/hooks/use-copy-to-clipboard.d.ts +45 -0
  22. package/dist/i18n/config.js +21 -0
  23. package/dist/i18n/resources.d.ts +21 -0
  24. package/dist/index.js +458 -455
  25. package/dist/locales/de.json +7 -0
  26. package/dist/locales/en.json +7 -0
  27. package/dist/locales/it.json +7 -0
  28. package/dist/tokens.css +1 -1
  29. package/package.json +5 -1
  30. package/dist/_chunks/benefit-card-Czs0oXdi.js +0 -161
  31. package/dist/_chunks/public-header.agent-ZLBAQ30j.js +0 -242
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit",
3
- "version": "0.16.0",
3
+ "version": "0.17.1",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe.",
6
6
  "license": "BUSL-1.1",
@@ -155,6 +155,10 @@
155
155
  "types": "./dist/components/contact-card/index.d.ts",
156
156
  "import": "./dist/components/contact-card/index.js"
157
157
  },
158
+ "./copy-field": {
159
+ "types": "./dist/components/copy-field/index.d.ts",
160
+ "import": "./dist/components/copy-field/index.js"
161
+ },
158
162
  "./data-table": {
159
163
  "types": "./dist/components/data-table/index.d.ts",
160
164
  "import": "./dist/components/data-table/index.js"
@@ -1,161 +0,0 @@
1
- import { jsx as r, jsxs as g } from "react/jsx-runtime";
2
- import { forwardRef as u, useContext as k, Children as y, createContext as w } from "react";
3
- import { c as l } from "./index-D2ZczOXr.js";
4
- const b = [
5
- "violet",
6
- "purple",
7
- "magenta",
8
- "blue",
9
- "green",
10
- "red"
11
- ], m = w(null), C = l("ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-lg)]", {
12
- variants: {
13
- columns: {
14
- 1: "ds:md:grid-cols-1",
15
- 2: "ds:md:grid-cols-2",
16
- 3: "ds:md:grid-cols-3",
17
- 4: "ds:md:grid-cols-4"
18
- }
19
- },
20
- defaultVariants: { columns: 3 }
21
- }), N = l(
22
- [
23
- "ds:relative ds:rounded-[var(--radius-lg)] ds:overflow-hidden",
24
- "ds:flex ds:flex-col ds:h-full",
25
- "ds:bg-[var(--card)] ds:text-[var(--card-foreground)]",
26
- // Hover lift — the transform is gated through `motion-safe:` so users
27
- // with `prefers-reduced-motion: reduce` see only the shadow change.
28
- // `--animation-duration` is pinned to 0ms in the accessible theme,
29
- // which collapses the transition without dropping the rule entirely.
30
- "ds:transition-[transform,box-shadow] ds:duration-[var(--animation-duration)]",
31
- "ds:motion-reduce:transition-none",
32
- "ds:hover:shadow-[var(--shadow-hover)]",
33
- "ds:motion-safe:hover:-translate-y-0.5"
34
- ].join(" "),
35
- {
36
- variants: {
37
- variant: {
38
- elevated: "ds:shadow-[var(--shadow-card)]",
39
- outlined: "ds:border ds:border-[color:var(--border)]"
40
- },
41
- // 4px accent strip via the logical `border-block-start` shorthand.
42
- // Tailwind v4 doesn't ship per-side logical-border utilities, so the
43
- // bracketed CSS shorthand is the kit's idiom (mirrors patterns at
44
- // `src/patterns/operator-profile/operator-profile.tsx`).
45
- accent: {
46
- primary: "ds:[border-block-start:4px_solid_var(--primary)]",
47
- accent: "ds:[border-block-start:4px_solid_var(--accent)]",
48
- info: "ds:[border-block-start:4px_solid_var(--info)]",
49
- success: "ds:[border-block-start:4px_solid_var(--success)]",
50
- warning: "ds:[border-block-start:4px_solid_var(--warning)]",
51
- violet: "ds:[border-block-start:4px_solid_var(--color-violet-500)]",
52
- purple: "ds:[border-block-start:4px_solid_var(--color-purple-500)]",
53
- magenta: "ds:[border-block-start:4px_solid_var(--color-magenta-500)]",
54
- blue: "ds:[border-block-start:4px_solid_var(--color-blue-500)]",
55
- green: "ds:[border-block-start:4px_solid_var(--color-green-500)]",
56
- red: "ds:[border-block-start:4px_solid_var(--color-red-500)]"
57
- }
58
- },
59
- defaultVariants: { variant: "elevated", accent: "primary" }
60
- }
61
- ), j = l(
62
- [
63
- "ds:inline-flex ds:items-center ds:justify-center",
64
- "ds:size-12 ds:rounded-[var(--radius-md)] ds:shrink-0",
65
- "ds:[&>svg]:size-6"
66
- ].join(" "),
67
- {
68
- variants: {
69
- accent: {
70
- primary: "ds:text-[color:var(--primary)] ds:bg-[color-mix(in_srgb,var(--primary)_12%,var(--background))]",
71
- accent: "ds:text-[color:var(--accent)] ds:bg-[color-mix(in_srgb,var(--accent)_12%,var(--background))]",
72
- info: "ds:text-[color:var(--info)] ds:bg-[color-mix(in_srgb,var(--info)_12%,var(--background))]",
73
- success: "ds:text-[color:var(--success)] ds:bg-[color-mix(in_srgb,var(--success)_12%,var(--background))]",
74
- warning: "ds:text-[color:var(--warning)] ds:bg-[color-mix(in_srgb,var(--warning)_12%,var(--background))]",
75
- violet: "ds:text-[color:var(--color-violet-500)] ds:bg-[color-mix(in_srgb,var(--color-violet-500)_12%,var(--background))]",
76
- purple: "ds:text-[color:var(--color-purple-500)] ds:bg-[color-mix(in_srgb,var(--color-purple-500)_12%,var(--background))]",
77
- magenta: "ds:text-[color:var(--color-magenta-500)] ds:bg-[color-mix(in_srgb,var(--color-magenta-500)_12%,var(--background))]",
78
- blue: "ds:text-[color:var(--color-blue-500)] ds:bg-[color-mix(in_srgb,var(--color-blue-500)_12%,var(--background))]",
79
- green: "ds:text-[color:var(--color-green-500)] ds:bg-[color-mix(in_srgb,var(--color-green-500)_12%,var(--background))]",
80
- red: "ds:text-[color:var(--color-red-500)] ds:bg-[color-mix(in_srgb,var(--color-red-500)_12%,var(--background))]"
81
- }
82
- },
83
- defaultVariants: { accent: "primary" }
84
- }
85
- );
86
- function B(o, a) {
87
- return o !== "auto" ? o : a ? b[a.index % b.length] : "primary";
88
- }
89
- const p = u(
90
- ({ columns: o = 3, children: a, className: t, ...s }, n) => {
91
- const c = y.toArray(a);
92
- return /* @__PURE__ */ r(
93
- "div",
94
- {
95
- ref: n,
96
- "data-component": "benefit-card-row",
97
- className: C({ columns: o, className: t }),
98
- ...s,
99
- children: c.map((e, d) => /* @__PURE__ */ r(m.Provider, { value: { index: d }, children: e }, d))
100
- }
101
- );
102
- }
103
- );
104
- p.displayName = "BenefitCard.Row";
105
- const x = u(
106
- ({
107
- step: o,
108
- icon: a,
109
- title: t,
110
- cta: s,
111
- variant: n = "elevated",
112
- accent: c = "auto",
113
- children: e,
114
- className: d,
115
- ..._
116
- }, f) => {
117
- const h = k(m), i = B(c, h), v = typeof o == "number";
118
- return /* @__PURE__ */ r(
119
- "article",
120
- {
121
- ref: f,
122
- "data-component": "benefit-card",
123
- "data-accent": i,
124
- className: N({ variant: n, accent: i, className: d }),
125
- ..._,
126
- children: /* @__PURE__ */ g("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-lg)] ds:flex-1", children: [
127
- (a || v) && /* @__PURE__ */ g("div", { className: "ds:flex ds:items-start ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
128
- a ? /* @__PURE__ */ r(
129
- "span",
130
- {
131
- "aria-hidden": "true",
132
- className: j({ accent: i }),
133
- children: a
134
- }
135
- ) : /* @__PURE__ */ r("span", { "aria-hidden": "true" }),
136
- v ? /* @__PURE__ */ r(
137
- "span",
138
- {
139
- "aria-hidden": "true",
140
- "data-part": "step",
141
- className: "type-eyebrow ds:rounded-[var(--radius-full)] ds:bg-[var(--muted)] ds:text-[var(--muted-foreground)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]",
142
- children: String(o).padStart(2, "0")
143
- }
144
- ) : null
145
- ] }),
146
- /* @__PURE__ */ r("h3", { className: "type-title-card ds:text-[var(--foreground)]", children: t }),
147
- e ? /* @__PURE__ */ r("div", { className: "type-body ds:text-[var(--muted-foreground)] ds:flex-1", children: e }) : null,
148
- s ? /* @__PURE__ */ r("div", { className: "ds:mt-[var(--spacing-xs)]", children: s }) : null
149
- ] })
150
- }
151
- );
152
- }
153
- );
154
- x.displayName = "BenefitCard";
155
- const E = Object.assign(x, {
156
- Row: p
157
- });
158
- export {
159
- E as B
160
- };
161
- //# sourceMappingURL=benefit-card-Czs0oXdi.js.map
@@ -1,242 +0,0 @@
1
- import { jsxs as g, jsx as s } from "react/jsx-runtime";
2
- import { forwardRef as P, useId as Y, useState as b, useCallback as N, useImperativeHandle as q, useEffect as j, useRef as L } from "react";
3
- import { c as C } from "./index-D2ZczOXr.js";
4
- import { useTranslation as S } from "react-i18next";
5
- import { I as D } from "./icon-button-C4CGcYuz.js";
6
- import { S as c } from "./sheet-BT0izeoI.js";
7
- import { X as F } from "./x-CCcI3eJp.js";
8
- import { M as W } from "./menu-XRhW3_99.js";
9
- const X = C(
10
- [
11
- "ds:flex ds:items-center ds:gap-[var(--spacing-md)]",
12
- "ds:w-full ds:z-[var(--z-sticky)]",
13
- "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)]",
14
- "ds:h-14 ds:md:h-16",
15
- "ds:transition-[background-color,box-shadow,transform] ds:duration-[var(--animation-duration)]",
16
- "ds:motion-reduce:transition-none"
17
- ].join(" "),
18
- {
19
- variants: {
20
- variant: {
21
- default: "ds:bg-[var(--card)] ds:text-[var(--foreground)] ds:border-b ds:border-[color:var(--border)]",
22
- // Transparent fades to default once data-stuck="true" (set by the
23
- // rAF scroll listener). The fade is handled via the same
24
- // background utility so `data-stuck` swaps cleanly between states.
25
- transparent: [
26
- "ds:bg-transparent ds:text-[var(--foreground)]",
27
- "ds:data-[stuck=true]:bg-[var(--card)]",
28
- "ds:data-[stuck=true]:shadow-[var(--shadow-md)]",
29
- "ds:forced-colors:border-b ds:forced-colors:border-[CanvasText]"
30
- ].join(" "),
31
- // `dark` flips its own scope into the dark token set so nav
32
- // links + buttons inside read off-white text on the blue-800
33
- // surface. Without the `theme-dark` scope the children inherit
34
- // the light-theme `--foreground` (blue-500) and fail
35
- // color-contrast at ~1.3:1.
36
- dark: "theme-dark ds:bg-[var(--color-blue-800)] ds:text-[var(--foreground)]"
37
- },
38
- sticky: {
39
- none: "",
40
- top: "ds:sticky ds:top-0",
41
- // `scroll-up` is sticky but translates off-screen when scrolling
42
- // down past `stickyOffset` (handled by data-hidden="true") and
43
- // slides back in when scrolling up.
44
- "scroll-up": [
45
- "ds:sticky ds:top-0",
46
- "ds:data-[hidden=true]:-translate-y-full"
47
- ].join(" ")
48
- }
49
- },
50
- defaultVariants: { variant: "default", sticky: "none" }
51
- }
52
- ), $ = C(
53
- [
54
- "ds:inline-flex ds:items-center",
55
- "ds:type-body-sm ds:font-medium",
56
- "ds:text-[var(--foreground)]",
57
- "ds:rounded-[var(--radius-sm)]",
58
- "ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:py-[var(--spacing-2xs)]",
59
- "ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid",
60
- "ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
61
- "ds:hover:text-[var(--primary)]",
62
- "ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none",
63
- "ds:data-[active=true]:text-[var(--primary)]",
64
- "ds:data-[active=true]:[box-shadow:inset_0_-2px_0_var(--primary)]"
65
- ].join(" ")
66
- );
67
- function G() {
68
- const [e, d] = b(() => typeof window > "u" || !window.matchMedia ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches);
69
- return j(() => {
70
- if (typeof window > "u" || !window.matchMedia) return;
71
- const r = window.matchMedia("(prefers-reduced-motion: reduce)"), n = () => d(r.matches);
72
- return r.addEventListener("change", n), () => r.removeEventListener("change", n);
73
- }, []), e;
74
- }
75
- function J(e, d, r) {
76
- const [n, a] = b(!1), [p, o] = b(!1), l = L(0), u = L(!1);
77
- return j(() => {
78
- if (!e || typeof window > "u") return;
79
- l.current = window.scrollY;
80
- const f = () => {
81
- const t = window.scrollY;
82
- if (a(t > r), d === "scroll-up") {
83
- const v = t - l.current;
84
- v > 4 && t > r ? o(!0) : (v < -4 || t <= r) && o(!1);
85
- }
86
- l.current = t, u.current = !1;
87
- }, m = () => {
88
- u.current || (u.current = !0, window.requestAnimationFrame(f));
89
- };
90
- return window.addEventListener("scroll", m, { passive: !0 }), f(), () => {
91
- window.removeEventListener("scroll", m);
92
- };
93
- }, [e, d, r]), { stuck: n, hidden: p };
94
- }
95
- const I = P(
96
- ({
97
- logo: e,
98
- homeHref: d = "/",
99
- homeLabel: r,
100
- navSlot: n,
101
- actionsSlot: a,
102
- variant: p = "default",
103
- sticky: o = "none",
104
- stickyOffset: l = 80,
105
- menuLabel: u,
106
- navLabel: f,
107
- id: m,
108
- className: t,
109
- ...v
110
- }, E) => {
111
- const { t: h } = S(), y = G(), O = Y(), H = `${m ?? O}-sheet`, [i, w] = b(!1), _ = p === "transparent" || o === "scroll-up", { stuck: z, hidden: T } = J(
112
- _,
113
- o,
114
- l
115
- ), A = y ? !1 : T, k = N(() => w(!0), []), M = N(() => w(!1), []);
116
- q(
117
- E,
118
- () => ({
119
- openMenu: k,
120
- closeMenu: M,
121
- getMenuOpen: () => i
122
- }),
123
- [k, M, i]
124
- );
125
- const B = r ?? h("publicHeader.homeLabel", "AlfaDocs — home"), x = f ?? h("publicHeader.primaryNavLabel", "Primary"), V = u ?? (i ? h("publicHeader.closeMenu", "Close menu") : h("publicHeader.openMenu", "Open menu"));
126
- return /* @__PURE__ */ g(
127
- "header",
128
- {
129
- ...v,
130
- "data-component": "public-header",
131
- "data-component-id": m,
132
- "data-stuck": z ? "true" : void 0,
133
- "data-hidden": A ? "true" : void 0,
134
- "data-state": y ? "reduced-motion" : void 0,
135
- className: X({ variant: p, sticky: o, className: t }),
136
- children: [
137
- /* @__PURE__ */ s(
138
- "a",
139
- {
140
- href: d,
141
- "aria-label": B,
142
- className: "ds:inline-flex ds:items-center ds:rounded-[var(--radius-sm)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
143
- children: e
144
- }
145
- ),
146
- n ? /* @__PURE__ */ s(
147
- "nav",
148
- {
149
- "aria-label": x,
150
- className: "ds:hidden ds:md:flex ds:items-center ds:gap-[var(--spacing-md)] ds:ms-[var(--spacing-lg)]",
151
- children: n
152
- }
153
- ) : null,
154
- a ? /* @__PURE__ */ s("div", { className: "ds:hidden ds:md:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ms-auto", children: a }) : null,
155
- /* @__PURE__ */ g(c, { open: i, onOpenChange: w, children: [
156
- /* @__PURE__ */ s(c.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
157
- D,
158
- {
159
- size: "md",
160
- intent: "ghost",
161
- className: "ds:ms-auto ds:md:hidden",
162
- icon: i ? /* @__PURE__ */ s(F, { "aria-hidden": "true" }) : /* @__PURE__ */ s(W, { "aria-hidden": "true" }),
163
- "aria-controls": H,
164
- "aria-expanded": i,
165
- "aria-label": V
166
- }
167
- ) }),
168
- /* @__PURE__ */ g(c.Content, { side: "end", size: "md", id: H, children: [
169
- /* @__PURE__ */ s(c.Header, { children: /* @__PURE__ */ s(c.Title, { children: x }) }),
170
- /* @__PURE__ */ s(c.Body, { children: /* @__PURE__ */ g("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
171
- n ? /* @__PURE__ */ s(
172
- "nav",
173
- {
174
- "aria-label": x,
175
- className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]",
176
- children: n
177
- }
178
- ) : null,
179
- a ? /* @__PURE__ */ s("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:mt-[var(--spacing-md)]", children: a }) : null
180
- ] }) })
181
- ] })
182
- ] })
183
- ]
184
- }
185
- );
186
- }
187
- );
188
- I.displayName = "PublicHeader";
189
- const R = P(({ active: e, className: d, children: r, ...n }, a) => /* @__PURE__ */ s(
190
- "a",
191
- {
192
- ref: a,
193
- ...n,
194
- "data-active": e ? "true" : void 0,
195
- "aria-current": e ? "page" : void 0,
196
- className: [$(), d].filter(Boolean).join(" "),
197
- children: r
198
- }
199
- ));
200
- R.displayName = "PublicHeader.NavLink";
201
- const de = Object.assign(I, {
202
- NavLink: R
203
- }), ae = {
204
- id: "public-header",
205
- capabilities: ["open", "close"],
206
- state: {
207
- menuOpen: {
208
- type: "boolean",
209
- description: "Whether the mobile drawer is currently open.",
210
- read: (e) => e.getMenuOpen()
211
- }
212
- },
213
- actions: {
214
- open_menu: {
215
- safety: "read",
216
- description: "Open the mobile drawer.",
217
- invoke: (e) => {
218
- e.openMenu();
219
- }
220
- },
221
- close_menu: {
222
- safety: "read",
223
- description: "Close the mobile drawer.",
224
- invoke: (e) => {
225
- e.closeMenu();
226
- }
227
- }
228
- },
229
- domHooks: {
230
- root: { attr: "data-component", value: "public-header" },
231
- instanceId: {
232
- attr: "data-component-id",
233
- sourceProp: "id",
234
- description: "Sourced from the id prop on PublicHeader."
235
- }
236
- }
237
- };
238
- export {
239
- de as P,
240
- ae as p
241
- };
242
- //# sourceMappingURL=public-header.agent-ZLBAQ30j.js.map