@alfadocs/ui-kit-debug 1.4.13 → 1.4.14
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/dist/_chunks/{address-fields-D-8akw2m.js → address-fields-CZP4Wncx.js} +2 -2
- package/dist/_chunks/{address-fields-D-8akw2m.js.map → address-fields-CZP4Wncx.js.map} +1 -1
- package/dist/_chunks/{agenda-card-BQDs2ZMp.js → agenda-card-pdN49pMu.js} +2 -2
- package/dist/_chunks/{agenda-card-BQDs2ZMp.js.map → agenda-card-pdN49pMu.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-BTyWsVwT.js → agenda-tray-CYR-znfE.js} +2 -2
- package/dist/_chunks/{agenda-tray-BTyWsVwT.js.map → agenda-tray-CYR-znfE.js.map} +1 -1
- package/dist/_chunks/{ai-consent-banner-gVcoiXxv.js → ai-consent-banner-DLF6FNXv.js} +2 -2
- package/dist/_chunks/{ai-consent-banner-gVcoiXxv.js.map → ai-consent-banner-DLF6FNXv.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-Bt0twrML.js → anamnesis-card-BylMLHYj.js} +2 -2
- package/dist/_chunks/{anamnesis-card-Bt0twrML.js.map → anamnesis-card-BylMLHYj.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-card-BKGVcwny.js → anamnesis-summary-card-DGVKBQoq.js} +134 -116
- package/dist/_chunks/anamnesis-summary-card-DGVKBQoq.js.map +1 -0
- package/dist/_chunks/{anamnesis-summary-rows-B5MAYkJ-.js → anamnesis-summary-rows-C73SWVy3.js} +3034 -2954
- package/dist/_chunks/anamnesis-summary-rows-C73SWVy3.js.map +1 -0
- package/dist/_chunks/{antenatal-schedule-timeline-BSLrOQ3S.js → antenatal-schedule-timeline-BjlF2rTz.js} +2 -2
- package/dist/_chunks/{antenatal-schedule-timeline-BSLrOQ3S.js.map → antenatal-schedule-timeline-BjlF2rTz.js.map} +1 -1
- package/dist/_chunks/{appointment-card-kcUC7vWR.js → appointment-card-BhcPJpXh.js} +2 -2
- package/dist/_chunks/{appointment-card-kcUC7vWR.js.map → appointment-card-BhcPJpXh.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-BC3dlZu5.js → appointment-timeline-DT1uFp8z.js} +2 -2
- package/dist/_chunks/{appointment-timeline-BC3dlZu5.js.map → appointment-timeline-DT1uFp8z.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-BPY5rATW.js → appointment-tray-DvyVK7um.js} +2 -2
- package/dist/_chunks/{appointment-tray-BPY5rATW.js.map → appointment-tray-DvyVK7um.js.map} +1 -1
- package/dist/_chunks/{badge-CIt-UFEx.js → badge-sTusUqZD.js} +23 -18
- package/dist/_chunks/{badge-CIt-UFEx.js.map → badge-sTusUqZD.js.map} +1 -1
- package/dist/_chunks/{bishop-score-B6iYYO0c.js → bishop-score-BV1JAEMV.js} +3 -3
- package/dist/_chunks/{bishop-score-B6iYYO0c.js.map → bishop-score-BV1JAEMV.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-DC5SaqXT.js → bmi-calculator-CdR-RLFj.js} +5 -5
- package/dist/_chunks/{bmi-calculator-DC5SaqXT.js.map → bmi-calculator-CdR-RLFj.js.map} +1 -1
- package/dist/_chunks/{booking-CmHX15dh.js → booking-CGKof8QU.js} +2 -2
- package/dist/_chunks/{booking-CmHX15dh.js.map → booking-CGKof8QU.js.map} +1 -1
- package/dist/_chunks/{care-plan-card-9tLgsDYY.js → care-plan-card-C83Hb9EE.js} +3 -3
- package/dist/_chunks/{care-plan-card-9tLgsDYY.js.map → care-plan-card-C83Hb9EE.js.map} +1 -1
- package/dist/_chunks/{care-plan-entry-card-CSan4h7A.js → care-plan-entry-card-CHMPSTCz.js} +2 -2
- package/dist/_chunks/{care-plan-entry-card-CSan4h7A.js.map → care-plan-entry-card-CHMPSTCz.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-D_BTi77b.js → care-plan-header-_B0TTWT1.js} +2 -2
- package/dist/_chunks/{care-plan-header-D_BTi77b.js.map → care-plan-header-_B0TTWT1.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-ByzQ86uz.js → clinical-note-card-BBgFd2nB.js} +2 -2
- package/dist/_chunks/{clinical-note-card-ByzQ86uz.js.map → clinical-note-card-BBgFd2nB.js.map} +1 -1
- package/dist/_chunks/{connection-status-D8mZ4klk.js → connection-status-NT8hUtYl.js} +2 -2
- package/dist/_chunks/{connection-status-D8mZ4klk.js.map → connection-status-NT8hUtYl.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-DuW6VpzY.js → contact-profile-card-BxHiG8e6.js} +2 -2
- package/dist/_chunks/{contact-profile-card-DuW6VpzY.js.map → contact-profile-card-BxHiG8e6.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-B_NlctlQ.js → cycle-calculator-DJZYvNhw.js} +4 -4
- package/dist/_chunks/{cycle-calculator-B_NlctlQ.js.map → cycle-calculator-DJZYvNhw.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-BUvrZRi0.js → dependent-selector-cJlJFAKD.js} +2 -2
- package/dist/_chunks/{dependent-selector-BUvrZRi0.js.map → dependent-selector-cJlJFAKD.js.map} +1 -1
- package/dist/_chunks/{document-preview-Di15VrpQ.js → document-preview-Aae2yKvY.js} +2 -2
- package/dist/_chunks/{document-preview-Di15VrpQ.js.map → document-preview-Aae2yKvY.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-le1z3KpW.js → due-date-calculator-ajaQ4ya5.js} +6 -6
- package/dist/_chunks/{due-date-calculator-le1z3KpW.js.map → due-date-calculator-ajaQ4ya5.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-DXA6ZpMq.js → fetal-weight-jon6GIfQ.js} +4 -4
- package/dist/_chunks/{fetal-weight-DXA6ZpMq.js.map → fetal-weight-jon6GIfQ.js.map} +1 -1
- package/dist/_chunks/{field-value-BCFLVBmu.js → field-value-BbiDRyNh.js} +2 -2
- package/dist/_chunks/{field-value-BCFLVBmu.js.map → field-value-BbiDRyNh.js.map} +1 -1
- package/dist/_chunks/{file-manager-BjCM2fZB.js → file-manager-CML_C6_h.js} +2 -2
- package/dist/_chunks/{file-manager-BjCM2fZB.js.map → file-manager-CML_C6_h.js.map} +1 -1
- package/dist/_chunks/form-field-CahJzTxp.js +131 -0
- package/dist/_chunks/form-field-CahJzTxp.js.map +1 -0
- package/dist/_chunks/{gestational-age-calculator-Ch8vmJAl.js → gestational-age-calculator-dEpQDWcb.js} +5 -5
- package/dist/_chunks/{gestational-age-calculator-Ch8vmJAl.js.map → gestational-age-calculator-dEpQDWcb.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-BT6lki_i.js → hcg-doubling-CC6TLtHd.js} +4 -4
- package/dist/_chunks/{hcg-doubling-BT6lki_i.js.map → hcg-doubling-CC6TLtHd.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-C7GvyK66.js → link-cell-renderer-D3IsW_2R.js} +3 -3
- package/dist/_chunks/{link-cell-renderer-C7GvyK66.js.map → link-cell-renderer-D3IsW_2R.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-BhRH7Zi4.js → marketplace-app-shell-b5hN-Q0m.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-BhRH7Zi4.js.map → marketplace-app-shell-b5hN-Q0m.js.map} +1 -1
- package/dist/_chunks/{notes-panel-Bz83SO4-.js → notes-panel-D6HKLLS-.js} +2 -2
- package/dist/_chunks/{notes-panel-Bz83SO4-.js.map → notes-panel-D6HKLLS-.js.map} +1 -1
- package/dist/_chunks/{number-input-CM1q9zvH.js → number-input-Cgu2TtA8.js} +30 -21
- package/dist/_chunks/number-input-Cgu2TtA8.js.map +1 -0
- package/dist/_chunks/{operator-hero-CpJkDNAM.js → operator-hero-CCDnIa1S.js} +2 -2
- package/dist/_chunks/{operator-hero-CpJkDNAM.js.map → operator-hero-CCDnIa1S.js.map} +1 -1
- package/dist/_chunks/{optical-prescription-CQR_WJiS.js → optical-prescription-DtzEqFQm.js} +2 -2
- package/dist/_chunks/{optical-prescription-CQR_WJiS.js.map → optical-prescription-DtzEqFQm.js.map} +1 -1
- package/dist/_chunks/{patient-details-CnFgF3MU.js → patient-details-rENrE_qY.js} +3 -3
- package/dist/_chunks/{patient-details-CnFgF3MU.js.map → patient-details-rENrE_qY.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-DfbOtOV6.js → patient-summary-card-DQJgOOrA.js} +3 -3
- package/dist/_chunks/{patient-summary-card-DfbOtOV6.js.map → patient-summary-card-DQJgOOrA.js.map} +1 -1
- package/dist/_chunks/{patient-table-BXzcrC79.js → patient-table-BubxfOWL.js} +3 -3
- package/dist/_chunks/{patient-table-BXzcrC79.js.map → patient-table-BubxfOWL.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-Ckh3b7Xx.js → payment-automation-upsell-CnaBPt5e.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-Ckh3b7Xx.js.map → payment-automation-upsell-CnaBPt5e.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-Dn6-tH-D.js → payment-request-card-CvhDzDNk.js} +2 -2
- package/dist/_chunks/{payment-request-card-Dn6-tH-D.js.map → payment-request-card-CvhDzDNk.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-B0yko9Xm.js → periodontal-chart-brakjj0s.js} +2 -2
- package/dist/_chunks/{periodontal-chart-B0yko9Xm.js.map → periodontal-chart-brakjj0s.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-card-HbYTmWlo.js → periodontal-chart-card-Bz-ebteE.js} +2 -2
- package/dist/_chunks/{periodontal-chart-card-HbYTmWlo.js.map → periodontal-chart-card-Bz-ebteE.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-Qk4F3Wc_.js → periodontal-diagnosis-HrFsVi-C.js} +3 -3
- package/dist/_chunks/{periodontal-diagnosis-Qk4F3Wc_.js.map → periodontal-diagnosis-HrFsVi-C.js.map} +1 -1
- package/dist/_chunks/{periodontal-risk-chart-ByKuM4cF.js → periodontal-risk-chart-0x7KVZjL.js} +2 -2
- package/dist/_chunks/{periodontal-risk-chart-ByKuM4cF.js.map → periodontal-risk-chart-0x7KVZjL.js.map} +1 -1
- package/dist/_chunks/{practice-results-C5exrEn0.js → practice-results-DWUZRm2x.js} +2 -2
- package/dist/_chunks/{practice-results-C5exrEn0.js.map → practice-results-DWUZRm2x.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-4tPV_Yko.js → pregnancy-dating-DQVpFs_f.js} +6 -6
- package/dist/_chunks/{pregnancy-dating-4tPV_Yko.js.map → pregnancy-dating-DQVpFs_f.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-BBgbWBGe.js → pregnancy-weight-gain-hm3QJALe.js} +5 -5
- package/dist/_chunks/{pregnancy-weight-gain-BBgbWBGe.js.map → pregnancy-weight-gain-hm3QJALe.js.map} +1 -1
- package/dist/_chunks/radio-group-rXDJADzW.js +175 -0
- package/dist/_chunks/radio-group-rXDJADzW.js.map +1 -0
- package/dist/_chunks/{radiograph-panel.agent-Drj0hYVV.js → radiograph-panel.agent-CAXFgCyn.js} +3 -3
- package/dist/_chunks/{radiograph-panel.agent-Drj0hYVV.js.map → radiograph-panel.agent-CAXFgCyn.js.map} +1 -1
- package/dist/_chunks/{signature-status-chip-DlLJk1VA.js → signature-status-chip-DqrPIJtH.js} +2 -2
- package/dist/_chunks/{signature-status-chip-DlLJk1VA.js.map → signature-status-chip-DqrPIJtH.js.map} +1 -1
- package/dist/_chunks/{tab-bar-Ddp_ZbnL.js → tab-bar-DvFJIQfL.js} +2 -2
- package/dist/_chunks/{tab-bar-Ddp_ZbnL.js.map → tab-bar-DvFJIQfL.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-T7vaKJcA.js → tasks-panel-BBkZuejF.js} +2 -2
- package/dist/_chunks/{tasks-panel-T7vaKJcA.js.map → tasks-panel-BBkZuejF.js.map} +1 -1
- package/dist/_chunks/{unit-converter-Dsk__pjA.js → unit-converter-iDxlxKmm.js} +3 -3
- package/dist/_chunks/{unit-converter-Dsk__pjA.js.map → unit-converter-iDxlxKmm.js.map} +1 -1
- package/dist/_chunks/{widget-picker-DqMbjQy_.js → widget-picker-em4xGgv0.js} +2 -2
- package/dist/_chunks/{widget-picker-DqMbjQy_.js.map → widget-picker-em4xGgv0.js.map} +1 -1
- package/dist/_chunks/{workflow-map-BNBeG2zn.js → workflow-map-BVofnDYh.js} +2 -2
- package/dist/_chunks/{workflow-map-BNBeG2zn.js.map → workflow-map-BVofnDYh.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/index.js +1 -1
- package/dist/components/anamnesis-card/index.js +1 -1
- package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts +2 -2
- package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts.map +1 -1
- package/dist/components/anamnesis-summary-card/index.js +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/connection-status/index.js +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +2 -2
- package/dist/components/fetal-weight/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/form-field/form-field.d.ts +8 -0
- package/dist/components/form-field/form-field.d.ts.map +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.d.ts +5 -2
- package/dist/components/number-input/number-input.d.ts.map +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/optical-prescription/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/periodontal-chart/index.js +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/periodontal-diagnosis/index.js +1 -1
- package/dist/components/periodontal-risk-chart/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/radio-group/index.js +1 -1
- package/dist/components/radio-group/radio-group.d.ts +5 -0
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/signature-status-chip/index.js +1 -1
- package/dist/components/tab-bar/index.js +1 -1
- package/dist/components/tasks-panel/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/widget-picker/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/host-compat.css +4 -1
- package/dist/index.js +56 -56
- package/dist/patterns/anamnesis/anamnesis-evolution.d.ts +7 -1
- package/dist/patterns/anamnesis/anamnesis-evolution.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-field.d.ts +15 -1
- package/dist/patterns/anamnesis/anamnesis-field.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-i18n.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-indicators.d.ts +3 -1
- package/dist/patterns/anamnesis/anamnesis-indicators.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-intake.d.ts +3 -2
- package/dist/patterns/anamnesis/anamnesis-intake.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-questionnaire.d.ts.map +1 -1
- package/dist/patterns/anamnesis/anamnesis-types.d.ts +3 -0
- package/dist/patterns/anamnesis/anamnesis-types.d.ts.map +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/tokens.css +3 -3
- package/package.json +1 -1
- package/dist/_chunks/anamnesis-summary-card-BKGVcwny.js.map +0 -1
- package/dist/_chunks/anamnesis-summary-rows-B5MAYkJ-.js.map +0 -1
- package/dist/_chunks/form-field-D1oqYisL.js +0 -127
- package/dist/_chunks/form-field-D1oqYisL.js.map +0 -1
- package/dist/_chunks/number-input-CM1q9zvH.js.map +0 -1
- package/dist/_chunks/radio-group-BmIqhIT2.js +0 -171
- package/dist/_chunks/radio-group-BmIqhIT2.js.map +0 -1
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { jsxs as a, Fragment as z, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as V, useId as B, useMemo as x } from "react";
|
|
3
|
-
import { c as u } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { useTranslation as C } from "react-i18next";
|
|
5
|
-
import { F as I } from "./form-field-context-B3APVHKx.js";
|
|
6
|
-
import { C as $ } from "./circle-alert-rGDZ73Wh.js";
|
|
7
|
-
const k = u("ds:text-start", {
|
|
8
|
-
variants: {
|
|
9
|
-
orientation: {
|
|
10
|
-
vertical: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]",
|
|
11
|
-
horizontal: "ds:grid ds:grid-cols-[minmax(0,var(--form-label-inline-size))_minmax(0,1fr)] ds:items-start ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-xs)]"
|
|
12
|
-
},
|
|
13
|
-
disabled: {
|
|
14
|
-
true: "ds:opacity-50 ds:cursor-not-allowed",
|
|
15
|
-
false: ""
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
defaultVariants: {
|
|
19
|
-
orientation: "vertical",
|
|
20
|
-
disabled: !1
|
|
21
|
-
}
|
|
22
|
-
}), T = u("ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", {
|
|
23
|
-
variants: {
|
|
24
|
-
orientation: {
|
|
25
|
-
vertical: "",
|
|
26
|
-
horizontal: "ds:min-w-0"
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
defaultVariants: {
|
|
30
|
-
orientation: "vertical"
|
|
31
|
-
}
|
|
32
|
-
}), q = V(
|
|
33
|
-
(v, h) => {
|
|
34
|
-
const {
|
|
35
|
-
label: g,
|
|
36
|
-
labelEnd: l,
|
|
37
|
-
description: n,
|
|
38
|
-
error: r,
|
|
39
|
-
required: d = !1,
|
|
40
|
-
optional: b = !1,
|
|
41
|
-
orientation: c = "vertical",
|
|
42
|
-
disabled: o = !1,
|
|
43
|
-
className: y,
|
|
44
|
-
children: N,
|
|
45
|
-
...F
|
|
46
|
-
} = v, { t: j } = C(), s = B(), t = `${s}-help`, i = `${s}-error`, m = !!r, p = x(
|
|
47
|
-
() => [n ? t : null, r ? i : null].filter(Boolean).join(" "),
|
|
48
|
-
[n, r, t, i]
|
|
49
|
-
), w = x(
|
|
50
|
-
() => ({
|
|
51
|
-
id: s,
|
|
52
|
-
helpId: t,
|
|
53
|
-
errorId: i,
|
|
54
|
-
describedBy: p,
|
|
55
|
-
invalid: m,
|
|
56
|
-
required: d,
|
|
57
|
-
disabled: o
|
|
58
|
-
}),
|
|
59
|
-
[s, t, i, p, m, d, o]
|
|
60
|
-
), f = /* @__PURE__ */ a(z, { children: [
|
|
61
|
-
g,
|
|
62
|
-
d && /* @__PURE__ */ e(
|
|
63
|
-
"span",
|
|
64
|
-
{
|
|
65
|
-
"aria-hidden": "true",
|
|
66
|
-
className: "ds:text-destructive ds:ms-[var(--spacing-xs)]",
|
|
67
|
-
children: "*"
|
|
68
|
-
}
|
|
69
|
-
),
|
|
70
|
-
b && /* @__PURE__ */ a("span", { className: "ds:text-muted-foreground ds:ms-[var(--spacing-xs)] ds:font-normal", children: [
|
|
71
|
-
"(",
|
|
72
|
-
j("common.optional", "optional"),
|
|
73
|
-
")"
|
|
74
|
-
] })
|
|
75
|
-
] });
|
|
76
|
-
return /* @__PURE__ */ e(I.Provider, { value: w, children: /* @__PURE__ */ a(
|
|
77
|
-
"div",
|
|
78
|
-
{
|
|
79
|
-
ref: h,
|
|
80
|
-
className: k({ orientation: c, disabled: o, className: y }),
|
|
81
|
-
"data-component": "form-field",
|
|
82
|
-
...F,
|
|
83
|
-
children: [
|
|
84
|
-
/* @__PURE__ */ a(
|
|
85
|
-
"label",
|
|
86
|
-
{
|
|
87
|
-
id: `${s}-label`,
|
|
88
|
-
htmlFor: s,
|
|
89
|
-
className: l ? "type-label ds:text-foreground ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]" : "type-label ds:text-foreground",
|
|
90
|
-
children: [
|
|
91
|
-
l ? /* @__PURE__ */ e("span", { children: f }) : f,
|
|
92
|
-
l ? /* @__PURE__ */ e("span", { className: "ds:inline-flex ds:shrink-0 ds:items-center", children: l }) : null
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
),
|
|
96
|
-
/* @__PURE__ */ a("div", { className: T({ orientation: c }), children: [
|
|
97
|
-
N,
|
|
98
|
-
n && /* @__PURE__ */ e("p", { id: t, className: "type-body-sm ds:text-muted-foreground", children: n }),
|
|
99
|
-
r && /* @__PURE__ */ a(
|
|
100
|
-
"p",
|
|
101
|
-
{
|
|
102
|
-
id: i,
|
|
103
|
-
role: "alert",
|
|
104
|
-
className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive",
|
|
105
|
-
children: [
|
|
106
|
-
/* @__PURE__ */ e(
|
|
107
|
-
$,
|
|
108
|
-
{
|
|
109
|
-
"aria-hidden": "true",
|
|
110
|
-
className: "ds:size-4 ds:shrink-0"
|
|
111
|
-
}
|
|
112
|
-
),
|
|
113
|
-
/* @__PURE__ */ e("span", { children: r })
|
|
114
|
-
]
|
|
115
|
-
}
|
|
116
|
-
)
|
|
117
|
-
] })
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
) });
|
|
121
|
-
}
|
|
122
|
-
);
|
|
123
|
-
q.displayName = "FormField";
|
|
124
|
-
export {
|
|
125
|
-
q as F
|
|
126
|
-
};
|
|
127
|
-
//# sourceMappingURL=form-field-D1oqYisL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"form-field-D1oqYisL.js","sources":["../../src/components/form-field/form-field.tsx"],"sourcesContent":["import { forwardRef, useId, useMemo, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CircleAlert } from 'lucide-react';\nimport {\n FormFieldContext,\n type FormFieldContextShape,\n} from './form-field-context';\n\nconst fieldVariants = cva('ds:text-start', {\n variants: {\n orientation: {\n vertical: 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n horizontal:\n 'ds:grid ds:grid-cols-[minmax(0,var(--form-label-inline-size))_minmax(0,1fr)] ds:items-start ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-xs)]',\n },\n disabled: {\n true: 'ds:opacity-50 ds:cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n disabled: false,\n },\n});\n\nconst slotsVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]', {\n variants: {\n orientation: {\n vertical: '',\n horizontal: 'ds:min-w-0',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n});\n\ntype RequiredIndicator =\n | { required?: boolean; optional?: never }\n | { required?: never; optional?: boolean };\n\ninterface BaseFormFieldProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children'>,\n Omit<VariantProps<typeof fieldVariants>, 'disabled'> {\n label: string;\n /**\n * Rendered at the inline end of the label line — a status chip or a\n * marker, never a control. Part of the label, so its text joins the\n * field's accessible name (\"Allergies, Highlighted\").\n */\n labelEnd?: React.ReactNode;\n description?: string;\n error?: string;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nexport type FormFieldProps = BaseFormFieldProps & RequiredIndicator;\n\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(\n (props, ref) => {\n const {\n label,\n labelEnd,\n description,\n error,\n required = false,\n optional = false,\n orientation = 'vertical',\n disabled = false,\n className,\n children,\n ...rest\n } = props as BaseFormFieldProps & {\n required?: boolean;\n optional?: boolean;\n };\n\n const { t } = useTranslation();\n const id = useId();\n const helpId = `${id}-help`;\n const errorId = `${id}-error`;\n const invalid = Boolean(error);\n\n const describedBy = useMemo(\n () =>\n [description ? helpId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' '),\n [description, error, helpId, errorId],\n );\n\n const ctx: FormFieldContextShape = useMemo(\n () => ({\n id,\n helpId,\n errorId,\n describedBy,\n invalid,\n required,\n disabled,\n }),\n [id, helpId, errorId, describedBy, invalid, required, disabled],\n );\n\n const labelText = (\n <>\n {label}\n {required && (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-destructive ds:ms-[var(--spacing-xs)]\"\n >\n *\n </span>\n )}\n {optional && (\n <span className=\"ds:text-muted-foreground ds:ms-[var(--spacing-xs)] ds:font-normal\">\n ({t('common.optional', 'optional')})\n </span>\n )}\n </>\n );\n return (\n <FormFieldContext.Provider value={ctx}>\n <div\n ref={ref}\n className={fieldVariants({ orientation, disabled, className })}\n data-component=\"form-field\"\n {...rest}\n >\n <label\n id={`${id}-label`}\n htmlFor={id}\n className={\n labelEnd\n ? 'type-label ds:text-foreground ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]'\n : 'type-label ds:text-foreground'\n }\n >\n {/* Wrapped only when something sits at the end: the plain\n label keeps its text as a direct child, as consumers assert. */}\n {labelEnd ? <span>{labelText}</span> : labelText}\n {labelEnd ? (\n <span className=\"ds:inline-flex ds:shrink-0 ds:items-center\">\n {labelEnd}\n </span>\n ) : null}\n </label>\n <div className={slotsVariants({ orientation })}>\n {children}\n {description && (\n <p id={helpId} className=\"type-body-sm ds:text-muted-foreground\">\n {description}\n </p>\n )}\n {error && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0\"\n />\n <span>{error}</span>\n </p>\n )}\n </div>\n </div>\n </FormFieldContext.Provider>\n );\n },\n);\n\nFormField.displayName = 'FormField';\n"],"names":["fieldVariants","cva","slotsVariants","FormField","forwardRef","props","ref","label","labelEnd","description","error","required","optional","orientation","disabled","className","children","rest","t","useTranslation","id","useId","helpId","errorId","invalid","describedBy","useMemo","ctx","labelText","jsxs","Fragment","jsx","FormFieldContext","CircleAlert"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number-input-CM1q9zvH.js","sources":["../../src/components/number-input/number-input.agent.ts","../../src/components/number-input/use-locale-number.ts","../../src/components/number-input/number-input.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — NumberInput. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { NumberInputHandle } from './number-input';\n\nexport const numberInputAgent: AgentAdapter<NumberInputHandle> = {\n id: 'number-input',\n capabilities: ['set_value'],\n state: {\n value: {\n type: 'number | null',\n descriptionKey: 'ui.agent.numberInput.state.value',\n description: 'Current numeric value, or null when empty.',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.numberInput.state.isEmpty',\n description: 'Whether the input has no value.',\n read: (handle) => handle.getValue() === null,\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: number | null }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: ['number', 'null'] } },\n required: ['value'],\n },\n idempotent: true,\n examples: [{ args: { value: 42 } }, { args: { value: null } }],\n descriptionKey: 'ui.agent.numberInput.actions.setValue',\n description: 'Replace the numeric value, or pass null to clear.',\n invoke: (handle, args: { value: number | null }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.numberInput.actions.clear',\n description: 'Empty the input. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n focus: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.numberInput.actions.focus',\n description: 'Move keyboard focus to the input.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'number-input',\n description: 'Marks the NumberInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import { useMemo } from 'react';\n\nexport type NumberInputMode = 'integer' | 'decimal' | 'currency' | 'percentage';\n\nexport interface LocaleNumber {\n /** Format a JS number for display (e.g. `1234.5` → `1.234,5` in de-DE). */\n format: (value: number) => string;\n /** Parse a locale-formatted string back to a JS number. Returns `NaN` for invalid input. */\n parse: (text: string) => number;\n /** The decimal separator for this locale (e.g. `.` or `,`). */\n decimalSeparator: string;\n /** The grouping separator for this locale (e.g. `,` or `.` or ` `). */\n groupingSeparator: string;\n /** The correct `inputMode` for the virtual keyboard. */\n inputMode: 'numeric' | 'decimal';\n}\n\nfunction normalizeDigits(text: string): string {\n let result = '';\n for (const ch of text) {\n const code = ch.codePointAt(0);\n if (code === undefined) continue;\n if (code >= 0x0660 && code <= 0x0669) {\n result += String.fromCodePoint(0x30 + (code - 0x0660));\n } else if (code >= 0x06f0 && code <= 0x06f9) {\n result += String.fromCodePoint(0x30 + (code - 0x06f0));\n } else {\n result += ch;\n }\n }\n return result;\n}\n\nexport function useLocaleNumber(\n locale: string,\n mode: NumberInputMode,\n currency?: string,\n): LocaleNumber {\n return useMemo(() => {\n const parts = new Intl.NumberFormat(locale).formatToParts(1234.5);\n const decimalSeparator =\n parts.find((p) => p.type === 'decimal')?.value ?? '.';\n const groupingSeparator =\n parts.find((p) => p.type === 'group')?.value ?? ',';\n\n const displayFormatter: Intl.NumberFormat = (() => {\n if (mode === 'currency') {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency ?? 'USD',\n });\n }\n if (mode === 'percentage') {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n maximumFractionDigits: 4,\n });\n }\n if (mode === 'integer') {\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 0 });\n }\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 10 });\n })();\n\n const format = (value: number): string => {\n if (!Number.isFinite(value)) return '';\n return displayFormatter.format(value);\n };\n\n const parse = (text: string): number => {\n if (!text) return NaN;\n const normalized = normalizeDigits(text);\n const trimmed = normalized.trim();\n const hasMinus = trimmed.startsWith('-') || trimmed.startsWith('\\u2212');\n\n let cleaned = '';\n for (const ch of normalized) {\n if (ch >= '0' && ch <= '9') {\n cleaned += ch;\n } else if (ch === decimalSeparator) {\n cleaned += '.';\n }\n }\n if (!cleaned || cleaned === '.') return NaN;\n\n let n = Number(cleaned);\n if (!Number.isFinite(n)) return NaN;\n if (hasMinus) n = -n;\n if (mode === 'percentage') n = n / 100;\n return n;\n };\n\n let inputMode: 'numeric' | 'decimal' = 'decimal';\n if (mode === 'integer') {\n inputMode = 'numeric';\n } else if (mode === 'currency') {\n try {\n const { maximumFractionDigits } = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency ?? 'USD',\n }).resolvedOptions();\n inputMode = maximumFractionDigits === 0 ? 'numeric' : 'decimal';\n } catch {\n inputMode = 'decimal';\n }\n }\n\n return {\n format,\n parse,\n decimalSeparator,\n groupingSeparator,\n inputMode,\n };\n }, [locale, mode, currency]);\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FormEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useFormField } from '../form-field/form-field-context';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { numberInputAgent } from './number-input.agent';\nimport { useLocaleNumber, type NumberInputMode } from './use-locale-number';\n\n/** Agent-readiness curated handle for NumberInput. */\nexport interface NumberInputHandle {\n getValue: () => number | null;\n setValue: (value: number | null) => void;\n clear: () => void;\n focus: () => void;\n}\n\nconst numberInputVariants = cva(\n [\n 'ds:flex ds:items-center ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:bg-input ds:text-foreground',\n 'ds:shadow-[var(--shadow-input)]',\n 'ds:transition-[colors,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-within:outline-[length:var(--focus-ring-width)] ds:focus-within:outline-solid',\n 'ds:focus-within:outline-ring ds:focus-within:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:has-[:disabled]:cursor-not-allowed ds:has-[:disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: 'ds:border-border',\n error: 'ds:border-destructive ds:focus-within:outline-destructive',\n },\n // Intrinsic sizes shrink-wrap the frame around field, unit and paddings;\n // the floor keeps a bare 'sm' field a valid tap target.\n inline: {\n full: 'ds:w-full',\n sm: 'ds:w-fit ds:min-w-[var(--min-target-size)]',\n md: 'ds:w-fit ds:min-w-[var(--min-target-size)]',\n lg: 'ds:w-fit ds:min-w-[var(--min-target-size)]',\n },\n },\n defaultVariants: { size: 'md', tone: 'default', inline: 'full' },\n },\n);\n\n// Field padding follows its neighbour: chevrons bring their own inset, a bare\n// frame needs the TextInput gutter, a unit closes the gap to the number.\nconst fieldVariants = cva(\n 'ds:min-w-0 ds:bg-transparent ds:outline-none ds:text-start ds:tabular-nums ds:disabled:cursor-not-allowed',\n {\n variants: {\n variant: { stepper: 'ds:ps-2', plain: 'ds:ps-3' },\n hasUnit: { true: 'ds:pe-1', false: '' },\n // `ch` is the advance of \"0\", so with tabular numerals N digits fit\n // exactly; box-content keeps the paddings outside that count.\n inline: {\n full: 'ds:flex-1 ds:w-full',\n sm: 'ds:box-content ds:w-[8ch]',\n md: 'ds:box-content ds:w-[12ch]',\n lg: 'ds:box-content ds:w-[16ch]',\n },\n },\n compoundVariants: [\n { variant: 'stepper', hasUnit: false, class: 'ds:pe-2' },\n { variant: 'plain', hasUnit: false, class: 'ds:pe-3' },\n ],\n defaultVariants: { variant: 'stepper', hasUnit: false, inline: 'full' },\n },\n);\n\nconst unitVariants = cva(\n 'ds:shrink-0 ds:select-none ds:whitespace-nowrap ds:text-muted-foreground',\n {\n variants: {\n variant: { stepper: 'ds:pe-1', plain: 'ds:pe-3' },\n },\n defaultVariants: { variant: 'stepper' },\n },\n);\n\nconst spinnerButton = [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:h-full ds:shrink-0',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n].join(' ');\n\nexport type { NumberInputMode };\n\nexport interface NumberInputProps\n extends\n Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'onChange' | 'value' | 'defaultValue' | 'size'\n >,\n VariantProps<typeof numberInputVariants> {\n /** Current numeric value (controlled). */\n value?: number | null;\n /** Initial value (uncontrolled). */\n defaultValue?: number;\n /** Fires with the parsed number (not a string). `null` when the field is empty. */\n onChange?: (value: number | null) => void;\n /** Minimum allowed value. Maps to `aria-valuemin`. */\n min?: number;\n /** Maximum allowed value. Maps to `aria-valuemax`. */\n max?: number;\n /** Increment step. Defaults to `1`. */\n step?: number;\n /** Display/parse mode. Defaults to `'integer'`. */\n mode?: NumberInputMode;\n /** ISO 4217 currency code, required when `mode='currency'`. */\n currency?: string;\n /** BCP 47 locale. Defaults to the app language (`i18n.language`), then\n * `navigator.language`, then `'en-US'`. */\n locale?: string;\n /** Size variant. */\n size?: 'sm' | 'md' | 'lg';\n /** 'stepper' (default) keeps the chevron buttons; 'plain' renders the bare\n * field — keyboard arrows still step, and the wheel scrolls the page as it\n * always has. */\n variant?: 'stepper' | 'plain';\n /** Unit shown inside the field at the inline end (e.g. \"cm\"), muted; joins\n * the input's accessible description, never its value. */\n unit?: string;\n /** Intrinsic inline size: 'full' (default) fills the container; 'sm' ≈ 8\n * characters, 'md' ≈ 12, 'lg' ≈ 16 — plus room for the unit and paddings. */\n inline?: 'sm' | 'md' | 'lg' | 'full';\n /** Additional class names on the wrapper. */\n className?: string;\n}\n\nconst resolveDefaultLocale = (): string => {\n if (typeof navigator !== 'undefined' && navigator.language) {\n return navigator.language;\n }\n return 'en-US';\n};\n\n/** The app language, when i18next has one. An uninitialised instance reports\n * `undefined` (or an empty string), and handing either to `Intl` would pick\n * the runtime default over the browser's — the fallback below does better. */\nconst appLocale = (language: unknown): string | undefined =>\n typeof language === 'string' && language.trim() !== '' ? language : undefined;\n\nfunction decimalPlaces(n: number): number {\n if (!Number.isFinite(n)) return 0;\n const s = String(n);\n const dot = s.indexOf('.');\n if (dot === -1) return 0;\n return s.length - dot - 1;\n}\n\nfunction roundToStep(value: number, step: number): number {\n if (step <= 0 || !Number.isFinite(step)) return value;\n const precision = decimalPlaces(step);\n const factor = 10 ** precision;\n return Math.round(value * factor) / factor;\n}\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n step = 1,\n mode = 'integer',\n currency,\n locale,\n size = 'md',\n tone,\n variant = 'stepper',\n unit,\n inline = 'full',\n className,\n id,\n disabled,\n onFocus,\n onBlur,\n onKeyDown,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const ctx = useFormField();\n const inputId = id ?? ctx.id;\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n\n // The unit is a description, not part of the value: a reader hears\n // \"175, cm\" rather than \"175cm\", and the number stays a number.\n const unitId = useId();\n const describedBy =\n [ctx.describedBy, unit ? unitId : undefined].filter(Boolean).join(' ') ||\n undefined;\n\n // The app language wins over the browser's: an Italian practice on an\n // English OS still types 72,5 — the separator the rest of the screen uses.\n const resolvedLocale =\n locale ?? appLocale(i18n.language) ?? resolveDefaultLocale();\n const localeNumber = useLocaleNumber(resolvedLocale, mode, currency);\n const {\n decimalSeparator,\n groupingSeparator,\n format: localeFormat,\n parse: localeParse,\n } = localeNumber;\n\n const innerInputRef = useRef<HTMLInputElement | null>(null);\n const composedRef = composeRefs(ref, innerInputRef);\n\n const [currentValueRaw, setCurrentValue] = useControllableState<\n number | null\n >({\n value,\n defaultValue: defaultValue ?? null,\n onChange,\n });\n const currentValue: number | null = currentValueRaw ?? null;\n\n const currentValueRef = useRef<number | null>(currentValue);\n currentValueRef.current = currentValue;\n\n const formatForEdit = useCallback(\n (n: number): string => {\n const displayed = mode === 'percentage' ? n * 100 : n;\n const raw = Number.isInteger(displayed)\n ? String(displayed)\n : displayed.toString();\n return raw.replace('.', decimalSeparator);\n },\n [mode, decimalSeparator],\n );\n\n const formatCurrent = useCallback(\n (n: number | null | undefined): string =>\n n === null || n === undefined || Number.isNaN(n) ? '' : localeFormat(n),\n [localeFormat],\n );\n\n const [inputText, setInputText] = useState<string>(() =>\n formatCurrent(currentValue),\n );\n const isFocusedRef = useRef(false);\n const [crossedBounds, setCrossedBounds] = useState(false);\n // The text on screen is not a number. Set on BLUR, never mid-typing: \"-\"\n // and \"1,\" are legitimate states on the way to a value and shouting at\n // them would make the field unusable.\n const [textNotANumber, setTextNotANumber] = useState(false);\n\n /** Can this character be part of a number in this locale? Everything else\n * is refused at the keystroke: a letter in a number field is never a typo\n * the user meant, and silently dropping it on blur is what made the field\n * look as though it validated nothing at all. Arabic-Indic and extended\n * Arabic-Indic digits pass — `parse` already normalises them. */\n const isNumberChar = useCallback(\n (ch: string): boolean => {\n if (ch >= '0' && ch <= '9') return true;\n const code = ch.codePointAt(0) ?? 0;\n if (code >= 0x0660 && code <= 0x0669) return true;\n if (code >= 0x06f0 && code <= 0x06f9) return true;\n return (\n ch === decimalSeparator ||\n ch === groupingSeparator ||\n ch === '-' ||\n ch === '\\u2212'\n );\n },\n [decimalSeparator, groupingSeparator],\n );\n\n /** Strip what could never belong to a number. Applied to whatever reaches\n * `change` — a paste of \"72,5 kg\" keeps its 72,5 rather than being\n * refused outright, which is the one case worth being lenient about. */\n const stripNonNumber = useCallback(\n (text: string): string => {\n let kept = '';\n for (const ch of text) {\n if (isNumberChar(ch)) kept += ch;\n }\n return kept;\n },\n [isNumberChar],\n );\n\n useEffect(() => {\n // Not while the reader is looking at their own invalid text: committing\n // null below would otherwise bounce back through here and erase it,\n // leaving a blank red box that says nothing about what was wrong.\n if (!isFocusedRef.current && !textNotANumber) {\n setInputText(formatCurrent(currentValue));\n }\n }, [currentValue, formatCurrent, textNotANumber]);\n\n const computedInvalid =\n crossedBounds ||\n textNotANumber ||\n (currentValue !== null &&\n ((min !== undefined && currentValue < min) ||\n (max !== undefined && currentValue > max)));\n const ariaInvalid = ctx.invalid || computedInvalid;\n const effectiveTone: 'default' | 'error' = ariaInvalid\n ? 'error'\n : (tone ?? 'default');\n\n const commitValue = (next: number | null) => {\n setCurrentValue(next);\n };\n\n const applyDelta = (multiplier: number) => {\n const base = currentValue ?? 0;\n let next = base + step * multiplier;\n if (min !== undefined) next = Math.max(min, next);\n if (max !== undefined) next = Math.min(max, next);\n next = roundToStep(next, step);\n commitValue(next);\n setCrossedBounds(false);\n setInputText(\n isFocusedRef.current ? formatForEdit(next) : formatCurrent(next),\n );\n };\n\n const jumpTo = (target: number) => {\n commitValue(target);\n setCrossedBounds(false);\n setInputText(\n isFocusedRef.current ? formatForEdit(target) : formatCurrent(target),\n );\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (effectiveDisabled) return;\n\n const { key, shiftKey } = event;\n if (key === 'ArrowUp') {\n event.preventDefault();\n applyDelta(shiftKey ? 10 : 1);\n } else if (key === 'ArrowDown') {\n event.preventDefault();\n applyDelta(shiftKey ? -10 : -1);\n } else if (key === 'PageUp') {\n event.preventDefault();\n applyDelta(100);\n } else if (key === 'PageDown') {\n event.preventDefault();\n applyDelta(-100);\n } else if (key === 'Home' && min !== undefined) {\n event.preventDefault();\n jumpTo(min);\n } else if (key === 'End' && max !== undefined) {\n event.preventDefault();\n jumpTo(max);\n }\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const text = stripNonNumber(event.target.value);\n setInputText(text);\n if (text.trim() === '') {\n commitValue(null);\n setCrossedBounds(false);\n setTextNotANumber(false);\n return;\n }\n const parsed = localeParse(text);\n if (!Number.isNaN(parsed)) {\n commitValue(parsed);\n // Typing your way back to a number clears the flag immediately —\n // the reader should not have to leave the field to see it go.\n setTextNotANumber(false);\n }\n };\n\n /** Refuse a single disallowed keystroke without touching the caret.\n * Multi-character insertions (paste, IME) fall through to `change`, which\n * strips rather than refuses — losing a whole paste over a stray unit\n * would be worse than cleaning it. */\n const handleBeforeInput = (event: FormEvent<HTMLInputElement>) => {\n const { data } = event.nativeEvent as InputEvent;\n if (typeof data !== 'string' || data.length !== 1) return;\n if (!isNumberChar(data)) event.preventDefault();\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n isFocusedRef.current = true;\n if (currentValue !== null && currentValue !== undefined) {\n setInputText(formatForEdit(currentValue));\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n isFocusedRef.current = false;\n\n if (inputText.trim() === '') {\n commitValue(null);\n setCrossedBounds(false);\n setTextNotANumber(false);\n setInputText('');\n return;\n }\n const parsed = localeParse(inputText);\n if (Number.isNaN(parsed)) {\n // KEEP WHAT WAS TYPED AND SAY IT IS WRONG. Reverting to the last good\n // value silently discarded the reader's input and looked like the\n // field simply ignored them; the box now goes to the error tone with\n // aria-invalid, holding no number until it is fixed.\n setTextNotANumber(true);\n setCrossedBounds(false);\n commitValue(null);\n return;\n }\n const crossed =\n (min !== undefined && parsed < min) ||\n (max !== undefined && parsed > max);\n setCrossedBounds(crossed);\n setTextNotANumber(false);\n commitValue(parsed);\n setInputText(formatCurrent(parsed));\n };\n\n const preventButtonBlur = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n };\n\n const handleIncrement = () => applyDelta(1);\n const handleDecrement = () => applyDelta(-1);\n\n const agentHandle = useMemo<NumberInputHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => {\n commitValue(next);\n setInputText(\n next === null\n ? ''\n : isFocusedRef.current\n ? formatForEdit(next)\n : formatCurrent(next),\n );\n },\n clear: () => {\n commitValue(null);\n setInputText('');\n setCrossedBounds(false);\n },\n focus: () => innerInputRef.current?.focus(),\n }),\n // The handle is reconstructed per render; consumers (the agent runtime)\n // re-register only when the identity changes, which is a cheap no-op.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formatForEdit, formatCurrent],\n );\n useAgentRegistration(numberInputAgent, agentHandle, id);\n\n const decrementDisabled =\n effectiveDisabled ||\n (min !== undefined && currentValue !== null && currentValue <= min);\n const incrementDisabled =\n effectiveDisabled ||\n (max !== undefined && currentValue !== null && currentValue >= max);\n\n const valueNow = currentValue ?? undefined;\n const valueTextNeeded =\n (mode === 'currency' || mode === 'percentage') && currentValue !== null;\n const valueText =\n valueTextNeeded && currentValue !== null\n ? localeFormat(currentValue)\n : undefined;\n\n const patternAttr =\n localeNumber.inputMode === 'numeric' ? '[0-9]*' : undefined;\n\n return (\n <div\n className={numberInputVariants({\n size,\n tone: effectiveTone,\n inline,\n className,\n })}\n data-component=\"number-input\"\n data-component-id={id}\n data-mode={mode}\n data-variant={variant}\n data-inline={inline}\n >\n {variant === 'stepper' ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t('inputs.number.decrement', 'Decrement')}\n onClick={handleDecrement}\n onMouseDown={preventButtonBlur}\n disabled={decrementDisabled}\n className={`${spinnerButton} ds:ps-2 ds:pe-1`}\n >\n <ChevronDown aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n <input\n ref={composedRef}\n id={inputId}\n type=\"text\"\n role=\"spinbutton\"\n inputMode={localeNumber.inputMode}\n pattern={patternAttr}\n autoComplete=\"off\"\n value={inputText}\n disabled={effectiveDisabled}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={valueNow}\n aria-valuetext={valueText}\n aria-invalid={ariaInvalid || undefined}\n aria-required={ctx.required || undefined}\n aria-describedby={describedBy}\n onBeforeInput={handleBeforeInput}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className={fieldVariants({ variant, hasUnit: Boolean(unit), inline })}\n {...rest}\n />\n {unit ? (\n <span id={unitId} className={unitVariants({ variant })}>\n {unit}\n </span>\n ) : null}\n {variant === 'stepper' ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t('inputs.number.increment', 'Increment')}\n onClick={handleIncrement}\n onMouseDown={preventButtonBlur}\n disabled={incrementDisabled}\n className={`${spinnerButton} ds:ps-1 ds:pe-2`}\n >\n <ChevronUp aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n"],"names":["numberInputAgent","handle","args","normalizeDigits","text","result","ch","code","useLocaleNumber","locale","mode","currency","useMemo","parts","decimalSeparator","_a","p","groupingSeparator","_b","displayFormatter","format","value","parse","normalized","trimmed","hasMinus","cleaned","n","inputMode","maximumFractionDigits","numberInputVariants","cva","fieldVariants","unitVariants","spinnerButton","resolveDefaultLocale","appLocale","language","decimalPlaces","dot","roundToStep","step","factor","NumberInput","forwardRef","defaultValue","onChange","min","max","size","tone","variant","unit","inline","className","id","disabled","onFocus","onBlur","onKeyDown","rest","ref","t","i18n","useTranslation","ctx","useFormField","inputId","effectiveDisabled","unitId","useId","describedBy","resolvedLocale","localeNumber","localeFormat","localeParse","innerInputRef","useRef","composedRef","composeRefs","currentValueRaw","setCurrentValue","useControllableState","currentValue","currentValueRef","formatForEdit","useCallback","displayed","formatCurrent","inputText","setInputText","useState","isFocusedRef","crossedBounds","setCrossedBounds","textNotANumber","setTextNotANumber","isNumberChar","stripNonNumber","kept","useEffect","computedInvalid","ariaInvalid","effectiveTone","commitValue","next","applyDelta","multiplier","jumpTo","target","handleKeyDown","event","key","shiftKey","handleInputChange","parsed","handleBeforeInput","data","handleFocus","handleBlur","crossed","preventButtonBlur","handleIncrement","handleDecrement","agentHandle","useAgentRegistration","decrementDisabled","incrementDisabled","valueNow","valueText","patternAttr","jsxs","jsx","ChevronDown","ChevronUp"],"mappings":"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"}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { jsx as e, jsxs as o, Fragment as J } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as L, useId as O, useMemo as z, useRef as B, useState as Q } from "react";
|
|
3
|
-
import * as U from "@radix-ui/react-radio-group";
|
|
4
|
-
import { c as W } from "./index-D2ZczOXr.js";
|
|
5
|
-
import { a as S } from "./radio-TWf9Q-mp.js";
|
|
6
|
-
import { c as X } from "./compose-refs-C0k0tdqF.js";
|
|
7
|
-
import { u as Y } from "./registry-DvAUVLHh.js";
|
|
8
|
-
import { u as Z } from "./use-direction-Dp8h70PP.js";
|
|
9
|
-
import { C as E } from "./circle-alert-rGDZ73Wh.js";
|
|
10
|
-
const ee = {
|
|
11
|
-
id: "radio-group",
|
|
12
|
-
capabilities: ["select_single"],
|
|
13
|
-
state: {
|
|
14
|
-
value: {
|
|
15
|
-
type: "string",
|
|
16
|
-
descriptionKey: "ui.agent.radioGroup.state.value",
|
|
17
|
-
description: "Currently selected radio value, or empty string when none.",
|
|
18
|
-
read: (t) => t.getValue()
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
actions: {
|
|
22
|
-
set_value: {
|
|
23
|
-
safety: "write",
|
|
24
|
-
argsType: "{ value: string }",
|
|
25
|
-
descriptionKey: "ui.agent.radioGroup.actions.setValue",
|
|
26
|
-
description: "Select the radio with the given value.",
|
|
27
|
-
invoke: (t, s) => {
|
|
28
|
-
t.setValue(s.value);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
domHooks: {
|
|
33
|
-
root: {
|
|
34
|
-
attr: "data-component",
|
|
35
|
-
value: "radio-group",
|
|
36
|
-
description: "Marks the RadioGroup root."
|
|
37
|
-
},
|
|
38
|
-
instanceId: {
|
|
39
|
-
attr: "data-component-id",
|
|
40
|
-
sourceProp: "id",
|
|
41
|
-
description: "Sourced from the id prop."
|
|
42
|
-
},
|
|
43
|
-
item: {
|
|
44
|
-
attr: "data-option-id",
|
|
45
|
-
description: "Stable opaque value emitted on each rendered Radio child."
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}, se = W("ds:flex", {
|
|
49
|
-
variants: {
|
|
50
|
-
variant: {
|
|
51
|
-
vertical: "ds:flex-col ds:gap-[var(--spacing-sm)]",
|
|
52
|
-
horizontal: "ds:flex-row ds:flex-wrap ds:gap-[var(--spacing-md)]",
|
|
53
|
-
card: "ds:flex-col ds:gap-[var(--spacing-md)]"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
defaultVariants: {
|
|
57
|
-
variant: "vertical"
|
|
58
|
-
}
|
|
59
|
-
}), te = L(
|
|
60
|
-
({
|
|
61
|
-
children: t,
|
|
62
|
-
variant: s = "vertical",
|
|
63
|
-
label: n,
|
|
64
|
-
labelEnd: l,
|
|
65
|
-
description: c,
|
|
66
|
-
error: a,
|
|
67
|
-
required: p,
|
|
68
|
-
disabled: $,
|
|
69
|
-
className: A,
|
|
70
|
-
id: u,
|
|
71
|
-
value: m,
|
|
72
|
-
defaultValue: v,
|
|
73
|
-
onValueChange: i,
|
|
74
|
-
...C
|
|
75
|
-
}, P) => {
|
|
76
|
-
const f = O(), g = `${f}-legend`, h = `${f}-description`, x = `${f}-error`, H = [c ? h : null, a ? x : null].filter(Boolean).join(" ") || void 0, K = n ? g : void 0, M = s === "horizontal" ? "horizontal" : "vertical", y = z(
|
|
77
|
-
() => ({ variant: s }),
|
|
78
|
-
[s]
|
|
79
|
-
), R = c ? /* @__PURE__ */ e("p", { id: h, className: "type-body-sm ds:text-muted-foreground", children: c }) : null, N = a ? /* @__PURE__ */ o(
|
|
80
|
-
"p",
|
|
81
|
-
{
|
|
82
|
-
id: x,
|
|
83
|
-
role: "alert",
|
|
84
|
-
className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive",
|
|
85
|
-
children: [
|
|
86
|
-
/* @__PURE__ */ e(E, { "aria-hidden": "true", className: "ds:size-4 ds:shrink-0" }),
|
|
87
|
-
/* @__PURE__ */ e("span", { children: a })
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
) : null, b = B(null), T = X(P, b), _ = Z(b), r = m !== void 0, [D, F] = Q(
|
|
91
|
-
v ?? ""
|
|
92
|
-
), w = r ? m ?? "" : D, G = B(w);
|
|
93
|
-
G.current = w;
|
|
94
|
-
const V = (d) => {
|
|
95
|
-
r || F(d), i == null || i(d);
|
|
96
|
-
}, q = z(
|
|
97
|
-
() => ({
|
|
98
|
-
getValue: () => G.current,
|
|
99
|
-
setValue: (d) => V(d)
|
|
100
|
-
}),
|
|
101
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
102
|
-
[r, i]
|
|
103
|
-
);
|
|
104
|
-
Y(ee, q, u);
|
|
105
|
-
const I = /* @__PURE__ */ e(
|
|
106
|
-
U.Root,
|
|
107
|
-
{
|
|
108
|
-
ref: T,
|
|
109
|
-
id: u,
|
|
110
|
-
orientation: M,
|
|
111
|
-
dir: _,
|
|
112
|
-
disabled: $,
|
|
113
|
-
required: p,
|
|
114
|
-
value: r ? m : void 0,
|
|
115
|
-
defaultValue: r ? void 0 : v,
|
|
116
|
-
onValueChange: V,
|
|
117
|
-
"aria-labelledby": K,
|
|
118
|
-
"aria-describedby": H,
|
|
119
|
-
"aria-invalid": !!a || void 0,
|
|
120
|
-
"aria-required": p || void 0,
|
|
121
|
-
className: se({ variant: s, className: A }),
|
|
122
|
-
"data-component": "radio-group",
|
|
123
|
-
"data-component-id": u,
|
|
124
|
-
...C,
|
|
125
|
-
children: t
|
|
126
|
-
}
|
|
127
|
-
), k = "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0", j = /* @__PURE__ */ o(J, { children: [
|
|
128
|
-
n,
|
|
129
|
-
p ? /* @__PURE__ */ e(
|
|
130
|
-
"span",
|
|
131
|
-
{
|
|
132
|
-
"aria-hidden": "true",
|
|
133
|
-
className: "ds:text-destructive ds:ms-[var(--spacing-xs)]",
|
|
134
|
-
children: "*"
|
|
135
|
-
}
|
|
136
|
-
) : null
|
|
137
|
-
] });
|
|
138
|
-
return n ? /* @__PURE__ */ e(S.Provider, { value: y, children: /* @__PURE__ */ o(
|
|
139
|
-
"fieldset",
|
|
140
|
-
{
|
|
141
|
-
role: "presentation",
|
|
142
|
-
className: `${k} ds:border-0 ds:p-0 ds:m-0`,
|
|
143
|
-
children: [
|
|
144
|
-
/* @__PURE__ */ e(
|
|
145
|
-
"legend",
|
|
146
|
-
{
|
|
147
|
-
id: g,
|
|
148
|
-
className: l ? "type-label ds:text-foreground ds:p-0 ds:w-full" : "type-label ds:text-foreground ds:p-0",
|
|
149
|
-
children: l ? /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
|
|
150
|
-
/* @__PURE__ */ e("span", { children: j }),
|
|
151
|
-
/* @__PURE__ */ e("span", { className: "ds:inline-flex ds:shrink-0 ds:items-center", children: l })
|
|
152
|
-
] }) : j
|
|
153
|
-
}
|
|
154
|
-
),
|
|
155
|
-
R,
|
|
156
|
-
I,
|
|
157
|
-
N
|
|
158
|
-
]
|
|
159
|
-
}
|
|
160
|
-
) }) : /* @__PURE__ */ e(S.Provider, { value: y, children: /* @__PURE__ */ o("div", { className: k, children: [
|
|
161
|
-
R,
|
|
162
|
-
I,
|
|
163
|
-
N
|
|
164
|
-
] }) });
|
|
165
|
-
}
|
|
166
|
-
);
|
|
167
|
-
te.displayName = "RadioGroup";
|
|
168
|
-
export {
|
|
169
|
-
te as R
|
|
170
|
-
};
|
|
171
|
-
//# sourceMappingURL=radio-group-BmIqhIT2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radio-group-BmIqhIT2.js","sources":["../../src/components/radio-group/radio-group.agent.ts","../../src/components/radio-group/radio-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — RadioGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { RadioGroupHandle } from './radio-group';\n\nexport const radioGroupAgent: AgentAdapter<RadioGroupHandle> = {\n id: 'radio-group',\n capabilities: ['select_single'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.radioGroup.state.value',\n description: 'Currently selected radio value, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n descriptionKey: 'ui.agent.radioGroup.actions.setValue',\n description: 'Select the radio with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'radio-group',\n description: 'Marks the RadioGroup root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Stable opaque value emitted on each rendered Radio child.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport * as RadixRadioGroup from '@radix-ui/react-radio-group';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { CircleAlert } from 'lucide-react';\nimport {\n RadioGroupInternalContext,\n type RadioGroupInternalContextShape,\n type RadioGroupVariant,\n} from './radio-group-context';\nimport { useDirection } from '../_shared/use-direction';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { useAgentRegistration } from '../../agent';\nimport { radioGroupAgent } from './radio-group.agent';\n\n/** Agent-readiness curated handle for RadioGroup. */\nexport interface RadioGroupHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n}\n\nconst radioGroupVariants = cva('ds:flex', {\n variants: {\n variant: {\n vertical: 'ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal: 'ds:flex-row ds:flex-wrap ds:gap-[var(--spacing-md)]',\n card: 'ds:flex-col ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: {\n variant: 'vertical',\n },\n});\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixRadioGroup.Root>;\n\nexport interface RadioGroupProps\n extends\n Omit<RadixRootProps, 'children' | 'orientation'>,\n VariantProps<typeof radioGroupVariants> {\n children: React.ReactNode;\n variant?: RadioGroupVariant;\n label?: string;\n /** Rendered at the inline end of the legend line — a status chip or a\n * marker, never a control. Its text joins the group's accessible name. */\n labelEnd?: React.ReactNode;\n description?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n children,\n variant = 'vertical',\n label,\n labelEnd,\n description,\n error,\n required,\n disabled,\n className,\n id,\n value,\n defaultValue,\n onValueChange,\n ...props\n },\n ref,\n ) => {\n const baseId = useId();\n const legendId = `${baseId}-legend`;\n const descriptionId = `${baseId}-description`;\n const errorId = `${baseId}-error`;\n\n const describedBy =\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n // When a visible label is provided it names the inner radiogroup via\n // aria-labelledby. The outer <fieldset> is neutralised to role=\"presentation\"\n // (below) so screen readers announce ONE named radiogroup, not a named group\n // wrapping a named radiogroup.\n const labelledBy = label ? legendId : undefined;\n\n const orientation: 'vertical' | 'horizontal' =\n variant === 'horizontal' ? 'horizontal' : 'vertical';\n\n const ctxValue: RadioGroupInternalContextShape = useMemo(\n () => ({ variant }),\n [variant],\n );\n\n const descriptionNode = description ? (\n <p id={descriptionId} className=\"type-body-sm ds:text-muted-foreground\">\n {description}\n </p>\n ) : null;\n\n const errorNode = error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = composeRefs(ref, rootRef);\n const dir = useDirection(rootRef);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const handleValueChange = (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n };\n\n const agentHandle = useMemo<RadioGroupHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => handleValueChange(next),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isControlled, onValueChange],\n );\n useAgentRegistration(radioGroupAgent, agentHandle, id);\n\n const root = (\n <RadixRadioGroup.Root\n ref={composedRef}\n id={id}\n orientation={orientation}\n dir={dir}\n disabled={disabled}\n required={required}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n onValueChange={handleValueChange}\n aria-labelledby={labelledBy}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n aria-required={required || undefined}\n className={radioGroupVariants({ variant, className })}\n data-component=\"radio-group\"\n data-component-id={id}\n {...props}\n >\n {children}\n </RadixRadioGroup.Root>\n );\n\n const outerClasses =\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:min-w-0';\n\n const legendText = (\n <>\n {label}\n {required ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:text-destructive ds:ms-[var(--spacing-xs)]\"\n >\n *\n </span>\n ) : null}\n </>\n );\n if (label) {\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <fieldset\n role=\"presentation\"\n className={`${outerClasses} ds:border-0 ds:p-0 ds:m-0`}\n >\n {/* A legend cannot flex itself reliably, so the row lives in a\n span inside it; the legend goes full-width only when there is\n something to push to the end. */}\n <legend\n id={legendId}\n className={\n labelEnd\n ? 'type-label ds:text-foreground ds:p-0 ds:w-full'\n : 'type-label ds:text-foreground ds:p-0'\n }\n >\n {labelEnd ? (\n <span className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span>{legendText}</span>\n <span className=\"ds:inline-flex ds:shrink-0 ds:items-center\">\n {labelEnd}\n </span>\n </span>\n ) : (\n legendText\n )}\n </legend>\n {descriptionNode}\n {root}\n {errorNode}\n </fieldset>\n </RadioGroupInternalContext.Provider>\n );\n }\n\n return (\n <RadioGroupInternalContext.Provider value={ctxValue}>\n <div className={outerClasses}>\n {descriptionNode}\n {root}\n {errorNode}\n </div>\n </RadioGroupInternalContext.Provider>\n );\n },\n);\n\nRadioGroup.displayName = 'RadioGroup';\n"],"names":["radioGroupAgent","handle","args","radioGroupVariants","cva","RadioGroup","forwardRef","children","variant","label","labelEnd","description","error","required","disabled","className","id","value","defaultValue","onValueChange","props","ref","baseId","useId","legendId","descriptionId","errorId","describedBy","labelledBy","orientation","ctxValue","useMemo","descriptionNode","jsx","errorNode","jsxs","CircleAlert","rootRef","useRef","composedRef","composeRefs","dir","useDirection","isControlled","internalValue","setInternalValue","useState","currentValue","currentValueRef","handleValueChange","next","agentHandle","useAgentRegistration","root","RadixRadioGroup","outerClasses","legendText","Fragment","RadioGroupInternalContext"],"mappings":"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"}
|