@alfadocs/ui-kit 1.26.1 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import { D as m } from "./dialog-UbKJCi1X.js";
5
5
  import { B as z } from "./button-nJaPh_HC.js";
6
6
  import { I as xe } from "./icon-button-DA2CAGHZ.js";
7
7
  import { C as Y } from "./checkbox-BuZ1u__2.js";
8
- import { a as Re } from "./whatsapp-button-CuFIHJzG.js";
8
+ import { a as Re } from "./whatsapp-button-Ai4YAVkl.js";
9
9
  import { S as Z } from "./select-Bi8zril7.js";
10
10
  import { S as be } from "./switch-OILsBLWo.js";
11
11
  import { A as _ } from "./alert-CiJT540z.js";
@@ -414,4 +414,4 @@ Me.displayName = "SignatureRequestModal";
414
414
  export {
415
415
  Me as S
416
416
  };
417
- //# sourceMappingURL=signature-request-CwlAmVLw.js.map
417
+ //# sourceMappingURL=signature-request-C-IsbkPf.js.map
@@ -1,8 +1,8 @@
1
1
  import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as _, useMemo as A } from "react";
3
- import { c as m } from "./index-D2ZczOXr.js";
4
- import { useTranslation as j } from "react-i18next";
5
- function u({
2
+ import { forwardRef as B, useMemo as A } from "react";
3
+ import { c as p } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as C } from "react-i18next";
5
+ function h({
6
6
  className: a
7
7
  }) {
8
8
  return /* @__PURE__ */ r(
@@ -17,7 +17,7 @@ function u({
17
17
  }
18
18
  );
19
19
  }
20
- const k = m(
20
+ const j = p(
21
21
  [
22
22
  // `position` is provided by `positionVariants` below — `static`
23
23
  // sets `ds:relative` (so the pseudo-element touch-target anchors),
@@ -119,7 +119,7 @@ const k = m(
119
119
  size: "md"
120
120
  }
121
121
  }
122
- ), C = m("", {
122
+ ), k = p("", {
123
123
  variants: {
124
124
  position: {
125
125
  // `relative` so the `::before` pseudo touch-target (defined in
@@ -137,36 +137,92 @@ const k = m(
137
137
  }
138
138
  },
139
139
  defaultVariants: { position: "static" }
140
- });
141
- function B(a, n) {
140
+ }), N = p("", {
141
+ variants: {
142
+ collapseLabelBelow: {
143
+ sm: "ds:max-sm:gap-0 ds:max-sm:p-0 ds:max-sm:min-h-0 ds:max-sm:rounded-full ds:max-sm:shadow-[var(--shadow-lg)]",
144
+ md: "ds:max-md:gap-0 ds:max-md:p-0 ds:max-md:min-h-0 ds:max-md:rounded-full ds:max-md:shadow-[var(--shadow-lg)]"
145
+ },
146
+ size: {
147
+ sm: "",
148
+ md: "",
149
+ lg: ""
150
+ }
151
+ },
152
+ compoundVariants: [
153
+ // Mirrors the `fab` size ladder above. The `sm` circle keeps the
154
+ // pseudo touch-target the `pill sm` compound already paints below
155
+ // the `sm:` breakpoint, so 40px still hits 44/48px on a phone.
156
+ {
157
+ collapseLabelBelow: "sm",
158
+ size: "sm",
159
+ class: "ds:max-sm:h-10 ds:max-sm:w-10 ds:max-sm:[&_svg]:size-5"
160
+ },
161
+ {
162
+ collapseLabelBelow: "sm",
163
+ size: "md",
164
+ class: "ds:max-sm:h-14 ds:max-sm:w-14 ds:max-sm:[&_svg]:size-7"
165
+ },
166
+ {
167
+ collapseLabelBelow: "sm",
168
+ size: "lg",
169
+ class: "ds:max-sm:h-16 ds:max-sm:w-16 ds:max-sm:[&_svg]:size-8"
170
+ },
171
+ // The `pill sm` pseudo touch-target only paints below `sm:`, so a
172
+ // 40px circle collapsed at `md` would sit under the target minimum
173
+ // between the two breakpoints. Size that one circle to the minimum
174
+ // itself (44px, 48px in the accessible themes) instead.
175
+ {
176
+ collapseLabelBelow: "md",
177
+ size: "sm",
178
+ class: "ds:max-md:h-[var(--min-target-size)] ds:max-md:w-[var(--min-target-size)] ds:max-md:[&_svg]:size-5"
179
+ },
180
+ {
181
+ collapseLabelBelow: "md",
182
+ size: "md",
183
+ class: "ds:max-md:h-14 ds:max-md:w-14 ds:max-md:[&_svg]:size-7"
184
+ },
185
+ {
186
+ collapseLabelBelow: "md",
187
+ size: "lg",
188
+ class: "ds:max-md:h-16 ds:max-md:w-16 ds:max-md:[&_svg]:size-8"
189
+ }
190
+ ]
191
+ }), V = {
192
+ sm: "ds:max-sm:sr-only",
193
+ md: "ds:max-md:sr-only"
194
+ };
195
+ function $(a, o) {
142
196
  const s = a.replace(/\D/g, "");
143
197
  if (s.length === 0)
144
198
  return null;
145
- const d = `https://wa.me/${s}`;
146
- return n ? `${d}?text=${encodeURIComponent(n)}` : d;
199
+ const l = `https://wa.me/${s}`;
200
+ return o ? `${l}?text=${encodeURIComponent(o)}` : l;
147
201
  }
148
- const L = _(
202
+ const T = B(
149
203
  ({
150
204
  phoneNumber: a,
151
- message: n,
205
+ message: o,
152
206
  variant: s = "pill",
153
- size: d = "md",
154
- position: h,
155
- label: g,
207
+ size: l = "md",
208
+ position: u,
209
+ label: x,
156
210
  tone: w = "standard",
157
- className: x,
211
+ collapseLabelBelow: z,
212
+ className: _,
158
213
  ...i
159
- }, z) => {
160
- const { t: p } = j(), f = A(
161
- () => B(a, n),
162
- [a, n]
163
- ), e = g ?? p(s === "fab" ? "whatsApp.fabLabel" : w === "question" ? "whatsApp.questionPrompt" : "whatsApp.label"), y = [
164
- k({ variant: s, size: d }),
165
- C({ position: h }),
166
- x
167
- ].filter(Boolean).join(" "), o = f === null, v = {
168
- ref: z,
169
- ...o ? {} : {
214
+ }, y) => {
215
+ const { t: v } = C(), f = A(
216
+ () => $(a, o),
217
+ [a, o]
218
+ ), e = x ?? v(s === "fab" ? "whatsApp.fabLabel" : w === "question" ? "whatsApp.questionPrompt" : "whatsApp.label"), n = s === "pill" ? z : void 0, L = [
219
+ j({ variant: s, size: l }),
220
+ k({ position: u }),
221
+ n ? N({ collapseLabelBelow: n, size: l }) : "",
222
+ _
223
+ ].filter(Boolean).join(" "), t = f === null, b = {
224
+ ref: y,
225
+ ...t ? {} : {
170
226
  href: f,
171
227
  target: "_blank",
172
228
  rel: "noopener noreferrer"
@@ -178,39 +234,40 @@ const L = _(
178
234
  /* `tabIndex` too: an <a> without href is not focusable, and
179
235
  `aria-disabled` presupposes something focus CAN reach — otherwise
180
236
  the reason the control is disabled never reaches a keyboard. */
181
- ...o ? { role: "link", tabIndex: 0 } : {},
182
- "aria-disabled": o ? !0 : void 0,
237
+ ...t ? { role: "link", tabIndex: 0 } : {},
238
+ "aria-disabled": t ? !0 : void 0,
183
239
  "data-component": "whatsapp-button",
184
240
  "data-variant": s,
185
- onClick: (l) => {
186
- var b;
187
- o && l.preventDefault(), (b = i.onClick) == null || b.call(i, l);
241
+ "data-collapse-label-below": n,
242
+ onClick: (m) => {
243
+ var g;
244
+ t && m.preventDefault(), (g = i.onClick) == null || g.call(i, m);
188
245
  },
189
- className: y
190
- }, t = o ? null : p("link.opensInNewTab", "Opens in a new tab");
246
+ className: L
247
+ }, d = t ? null : v("link.opensInNewTab", "Opens in a new tab");
191
248
  if (s === "fab") {
192
- const l = typeof e == "string" ? t ? `${e} — ${t}` : e : void 0;
193
- return /* @__PURE__ */ c("a", { ...i, ...v, "aria-label": l, children: [
194
- /* @__PURE__ */ r(u, {}),
249
+ const m = typeof e == "string" ? d ? `${e} — ${d}` : e : void 0;
250
+ return /* @__PURE__ */ c("a", { ...i, ...b, "aria-label": m, children: [
251
+ /* @__PURE__ */ r(h, {}),
195
252
  typeof e != "string" ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
196
253
  e,
197
- t ? ` — ${t}` : null
254
+ d ? ` — ${d}` : null
198
255
  ] }) : null
199
256
  ] });
200
257
  }
201
- return /* @__PURE__ */ c("a", { ...i, ...v, children: [
202
- /* @__PURE__ */ r(u, {}),
203
- /* @__PURE__ */ r("span", { children: e }),
204
- t ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
258
+ return /* @__PURE__ */ c("a", { ...i, ...b, children: [
259
+ /* @__PURE__ */ r(h, {}),
260
+ /* @__PURE__ */ r("span", { className: n ? V[n] : void 0, children: e }),
261
+ d ? /* @__PURE__ */ c("span", { className: "ds:sr-only", children: [
205
262
  " — ",
206
- t
263
+ d
207
264
  ] }) : null
208
265
  ] });
209
266
  }
210
267
  );
211
- L.displayName = "WhatsAppButton";
268
+ T.displayName = "WhatsAppButton";
212
269
  export {
213
- L as W,
214
- u as a
270
+ T as W,
271
+ h as a
215
272
  };
216
- //# sourceMappingURL=whatsapp-button-CuFIHJzG.js.map
273
+ //# sourceMappingURL=whatsapp-button-Ai4YAVkl.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "1.26.1",
3
+ "packageVersion": "1.28.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -10220,7 +10220,7 @@
10220
10220
  },
10221
10221
  "item": {
10222
10222
  "attr": "data-result-id",
10223
- "description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. Each card also carries two anchors: data-component=\"practice-result-open-cta\" (practice page) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost — present only when the practice set one)."
10223
+ "description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. Each card also carries up to two anchors: data-component=\"practice-result-open-cta\" (practice page; absent when the consumer sets showCardOpenButton=false) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost — present only when the practice set one)."
10224
10224
  }
10225
10225
  }
10226
10226
  },
@@ -1,4 +1,4 @@
1
- import { P as t, p as a } from "../../_chunks/practice-results-DL_ExLYE.js";
1
+ import { P as t, p as a } from "../../_chunks/practice-results-CxIsU2YO.js";
2
2
  export {
3
3
  t as PracticeResults,
4
4
  a as practiceResultsAgent
@@ -249,6 +249,15 @@ export interface PracticeResultsProps extends Omit<ComponentPropsWithoutRef<'div
249
249
  * of this override — the time is the message.
250
250
  */
251
251
  cardBookButtonLabel?: string;
252
+ /**
253
+ * Whether each card renders the secondary "Open" button next to
254
+ * "Book". Defaults to `true`. Set `false` on a surface where both
255
+ * buttons would lead to the same page, so the card carries one
256
+ * clear call to action: the booking site's practice page hosts the
257
+ * booking flow, so its cards keep only "Book". `onResultSelect`
258
+ * never fires with `source: 'open-button'` while hidden.
259
+ */
260
+ showCardOpenButton?: boolean;
252
261
  'aria-label'?: string;
253
262
  /** Agent-readiness instance id. */
254
263
  id?: string;
@@ -1,4 +1,4 @@
1
- import { W as t, a as s } from "../../_chunks/whatsapp-button-CuFIHJzG.js";
1
+ import { W as t, a as s } from "../../_chunks/whatsapp-button-Ai4YAVkl.js";
2
2
  export {
3
3
  t as WhatsAppButton,
4
4
  s as WhatsAppGlyph
@@ -42,6 +42,17 @@ export interface WhatsAppButtonProps extends Omit<AnchorHTMLAttributes<HTMLAncho
42
42
  * glyph-only and its `aria-label` stays concise via `fabLabel`.
43
43
  */
44
44
  tone?: 'standard' | 'question';
45
+ /**
46
+ * Pill only. Below the named Tailwind breakpoint the pill becomes a
47
+ * glyph-only circle (the `fab` chrome of the same `size`) and the
48
+ * label moves to screen-reader-only text, so the accessible name is
49
+ * unchanged. Pure CSS, so server render and first paint agree.
50
+ * Use it where the pill's copy earns its space on desktop but would
51
+ * crowd a phone: the booking site's practice page passes `"sm"`.
52
+ *
53
+ * Ignored for `variant="fab"`, which is glyph-only already.
54
+ */
55
+ collapseLabelBelow?: 'sm' | 'md';
45
56
  }
46
57
  export declare const WhatsAppButton: import("react").ForwardRefExoticComponent<WhatsAppButtonProps & import("react").RefAttributes<HTMLAnchorElement>>;
47
58
  export {};
package/dist/index.js CHANGED
@@ -202,7 +202,7 @@ import { P as kc, a as Bc, p as Gc } from "./_chunks/periodontal-chart-card-qEZP
202
202
  import { D as Hc, P as wc, a as Uc, b as Vc, c as Wc, S as Kc, e as Yc, i as Xc, p as qc } from "./_chunks/periodontal-diagnosis-HrFsVi-C.js";
203
203
  import { P as jc, a as Qc, c as Jc, p as Zc, r as $c } from "./_chunks/periodontal-risk-chart-0x7KVZjL.js";
204
204
  import { C as ef, a as sf, b as rf, c as of } from "./_chunks/contact-profile-card-BZqi8Hck.js";
205
- import { P as nf, p as pf } from "./_chunks/practice-results-DL_ExLYE.js";
205
+ import { P as nf, p as pf } from "./_chunks/practice-results-CxIsU2YO.js";
206
206
  import { P as lf, a as df, p as Af, b as cf } from "./_chunks/payment-request-card-lmKLwsDs.js";
207
207
  import { P as gf, f as Sf, p as Cf, a as Tf, s as xf, b as uf, c as Pf } from "./_chunks/payment-form-Ds1I9KqB.js";
208
208
  import { P as Ef, p as Rf } from "./_chunks/pdf-viewer-DUIsV9s5.js";
@@ -219,14 +219,14 @@ import { T as Rg, t as _g, r as bg } from "./_chunks/tooth-scheme-C9jssOmy.js";
219
219
  import { C as Dg, a as hg, b as Og, c as Fg, d as Lg, e as Mg, F as yg, f as kg, g as Bg, h as Gg, I as vg, P as Hg, i as wg, S as Ug, j as Vg, k as Wg, l as Kg, m as Yg, n as Xg, T as qg, o as zg, p as jg, q as Qg, r as Jg, s as Zg, t as $g, u as aS, v as eS, w as sS, x as rS, y as oS, z as tS, A as nS, B as iS, D as pS, E as mS, G as lS, H as dS, J as AS, K as cS, L as fS, M as gS, N as SS, O as CS, Q as TS, R as xS, U as uS, V as PS, W as IS, X as ES, Y as RS, Z as _S, _ as bS, $ as NS } from "./_chunks/tooth-data-DR8Kdnup.js";
220
220
  import { C as hS, D as OS, T as FS, t as LS, a as MS } from "./_chunks/tooth-finding-palette-vqC-D2Ye.js";
221
221
  import { T as kS } from "./_chunks/transaction-chip-DJCstquX.js";
222
- import { W as GS, a as vS } from "./_chunks/whatsapp-button-CuFIHJzG.js";
222
+ import { W as GS, a as vS } from "./_chunks/whatsapp-button-Ai4YAVkl.js";
223
223
  import { C as wS, W as US, a as VS, b as WS, c as KS, i as YS, l as XS, m as qS, r as zS, w as jS, d as QS, e as JS, f as ZS } from "./_chunks/workflow-map-dNzJjBWG.js";
224
224
  import { A as aC, a as eC, b as sC, c as rC } from "./_chunks/alia-sidebar-BWcWZivN.js";
225
225
  import { A as tC, a as nC, L as iC, P as pC, S as mC, T as lC, b as dC, c as AC, d as cC, e as fC, f as gC, g as SC, h as CC, i as TC, j as xC, k as uC, l as PC, m as IC, n as EC, o as RC, p as _C, r as bC, q as NC, s as DC, t as hC, u as OC } from "./_chunks/anamnesis-summary-rows-DwjqZgR5.js";
226
- import { C as LC, a as MC, b as yC, D as kC, c as BC, S as GC, V as vC, W as HC, d as wC, i as UC, m as VC, r as WC, u as KC, e as YC, f as XC } from "./_chunks/calendar-workspace-DWW5ZtQ0.js";
226
+ import { C as LC, a as MC, b as yC, D as kC, c as BC, S as GC, V as vC, W as HC, d as wC, i as UC, m as VC, r as WC, u as KC, e as YC, f as XC } from "./_chunks/calendar-workspace-Cs4hNB40.js";
227
227
  import { C as zC, M as jC, P as QC } from "./_chunks/marketplace-app-shell-C4AjQmvz.js";
228
228
  import { P as ZC } from "./_chunks/payment-automation-upsell-DwQW2fRp.js";
229
- import { S as aT } from "./_chunks/signature-request-CwlAmVLw.js";
229
+ import { S as aT } from "./_chunks/signature-request-C-IsbkPf.js";
230
230
  import { D as sT, d as rT } from "./_chunks/dependent-selector-cJlJFAKD.js";
231
231
  import { D as tT, d as nT } from "./_chunks/document-preview-CDb-n_W7.js";
232
232
  import { D as pT, d as mT } from "./_chunks/document-scanner-C5Vrbu21.js";
@@ -1,4 +1,4 @@
1
- import { C as s, a as r, b as E, D as P, c as t, S, V as A, W as C, d, i as o, m as D, r as i, u as n, e as W, f as _ } from "../../_chunks/calendar-workspace-DWW5ZtQ0.js";
1
+ import { C as s, a as r, b as E, D as P, c as t, S, V as A, W as C, d, i as o, m as D, r as i, u as n, e as W, f as _ } from "../../_chunks/calendar-workspace-Cs4hNB40.js";
2
2
  export {
3
3
  s as CALENDAR_PREFERENCE_KEYS,
4
4
  r as CalendarDataProvider,
@@ -1,4 +1,4 @@
1
- import { S as o } from "../../_chunks/signature-request-CwlAmVLw.js";
1
+ import { S as o } from "../../_chunks/signature-request-C-IsbkPf.js";
2
2
  export {
3
3
  o as SignatureRequestModal
4
4
  };