@mieweb/ui 0.6.1-dev.173 → 0.6.1-dev.174
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/{chunk-3Q2VWPML.cjs → chunk-5INNPOZZ.cjs} +5 -5
- package/dist/{chunk-3Q2VWPML.cjs.map → chunk-5INNPOZZ.cjs.map} +1 -1
- package/dist/{chunk-R25H4N4Z.js → chunk-6Y727LPG.js} +70 -3
- package/dist/chunk-6Y727LPG.js.map +1 -0
- package/dist/{chunk-X763OLF2.js → chunk-DZIUSGUF.js} +3 -3
- package/dist/{chunk-X763OLF2.js.map → chunk-DZIUSGUF.js.map} +1 -1
- package/dist/{chunk-CH26CHPH.js → chunk-O6MBLWAI.js} +3 -3
- package/dist/{chunk-CH26CHPH.js.map → chunk-O6MBLWAI.js.map} +1 -1
- package/dist/{chunk-3YRDZBW6.cjs → chunk-QPOTSLY6.cjs} +4 -4
- package/dist/{chunk-3YRDZBW6.cjs.map → chunk-QPOTSLY6.cjs.map} +1 -1
- package/dist/{chunk-FRT6RQND.cjs → chunk-YWHSQH7S.cjs} +70 -3
- package/dist/chunk-YWHSQH7S.cjs.map +1 -0
- package/dist/components/MediaEditor/index.cjs +7 -7
- package/dist/components/MediaEditor/index.js +2 -2
- package/dist/components/Select/index.cjs +3 -3
- package/dist/components/Select/index.js +1 -1
- package/dist/esheet.cjs +5 -5
- package/dist/esheet.js +2 -2
- package/dist/index.cjs +62 -62
- package/dist/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-FRT6RQND.cjs.map +0 -1
- package/dist/chunk-R25H4N4Z.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -38,7 +38,7 @@ var chunk74NOFB34_cjs = require('./chunk-74NOFB34.cjs');
|
|
|
38
38
|
var chunkFZQAF3WA_cjs = require('./chunk-FZQAF3WA.cjs');
|
|
39
39
|
var chunk6RV7HQ4U_cjs = require('./chunk-6RV7HQ4U.cjs');
|
|
40
40
|
var chunkUL3PQ7HL_cjs = require('./chunk-UL3PQ7HL.cjs');
|
|
41
|
-
var
|
|
41
|
+
var chunk5INNPOZZ_cjs = require('./chunk-5INNPOZZ.cjs');
|
|
42
42
|
var chunkS7JQ3FV5_cjs = require('./chunk-S7JQ3FV5.cjs');
|
|
43
43
|
var chunkGOKC4CCZ_cjs = require('./chunk-GOKC4CCZ.cjs');
|
|
44
44
|
require('./chunk-GLXTVCHN.cjs');
|
|
@@ -60,12 +60,12 @@ var chunkFQ3UCZUX_cjs = require('./chunk-FQ3UCZUX.cjs');
|
|
|
60
60
|
require('./chunk-VBWRH4UW.cjs');
|
|
61
61
|
var chunkBWYYA3LQ_cjs = require('./chunk-BWYYA3LQ.cjs');
|
|
62
62
|
var chunkRI56YPED_cjs = require('./chunk-RI56YPED.cjs');
|
|
63
|
-
var
|
|
63
|
+
var chunkQPOTSLY6_cjs = require('./chunk-QPOTSLY6.cjs');
|
|
64
64
|
var chunkU3ABLVYH_cjs = require('./chunk-U3ABLVYH.cjs');
|
|
65
65
|
var chunkRH43XBNV_cjs = require('./chunk-RH43XBNV.cjs');
|
|
66
66
|
var chunkXP6HELVG_cjs = require('./chunk-XP6HELVG.cjs');
|
|
67
67
|
var chunkUOOH356R_cjs = require('./chunk-UOOH356R.cjs');
|
|
68
|
-
var
|
|
68
|
+
var chunkYWHSQH7S_cjs = require('./chunk-YWHSQH7S.cjs');
|
|
69
69
|
var chunkZHBANUBI_cjs = require('./chunk-ZHBANUBI.cjs');
|
|
70
70
|
var chunkJC6Y3LGF_cjs = require('./chunk-JC6Y3LGF.cjs');
|
|
71
71
|
var chunkKJPOFUF5_cjs = require('./chunk-KJPOFUF5.cjs');
|
|
@@ -280,7 +280,7 @@ function AddContactModal({
|
|
|
280
280
|
}
|
|
281
281
|
),
|
|
282
282
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
283
|
-
|
|
283
|
+
chunkYWHSQH7S_cjs.Select,
|
|
284
284
|
{
|
|
285
285
|
id: "contact-sex",
|
|
286
286
|
options: SEX_OPTIONS,
|
|
@@ -6773,8 +6773,8 @@ function ConcernRow({
|
|
|
6773
6773
|
]
|
|
6774
6774
|
}
|
|
6775
6775
|
),
|
|
6776
|
-
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6777
|
-
|
|
6776
|
+
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(chunkQPOTSLY6_cjs.RowActionToolbar, { label: `Actions for ${current.text}`, align: "top", children: visibleActions.map((action) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6777
|
+
chunkQPOTSLY6_cjs.RowIconButton,
|
|
6778
6778
|
{
|
|
6779
6779
|
label: ACTION_META[action].label,
|
|
6780
6780
|
icon: ACTION_META[action].icon,
|
|
@@ -7203,13 +7203,13 @@ function OrderRow({
|
|
|
7203
7203
|
) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7204
7204
|
/* @__PURE__ */ jsxRuntime.jsx(OrderContent, { order }),
|
|
7205
7205
|
interactive && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7206
|
-
|
|
7206
|
+
chunkQPOTSLY6_cjs.RowActionToolbar,
|
|
7207
7207
|
{
|
|
7208
7208
|
label: `Actions for ${order.display}`,
|
|
7209
7209
|
group: "order",
|
|
7210
7210
|
children: [
|
|
7211
7211
|
canEdit && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7212
|
-
|
|
7212
|
+
chunkQPOTSLY6_cjs.RowIconButton,
|
|
7213
7213
|
{
|
|
7214
7214
|
label: "Edit",
|
|
7215
7215
|
icon: chunkUTYUT5YY_cjs.Pencil,
|
|
@@ -7277,7 +7277,7 @@ function OrderRow({
|
|
|
7277
7277
|
}
|
|
7278
7278
|
),
|
|
7279
7279
|
controls?.remove && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7280
|
-
|
|
7280
|
+
chunkQPOTSLY6_cjs.RowIconButton,
|
|
7281
7281
|
{
|
|
7282
7282
|
label: "Remove",
|
|
7283
7283
|
icon: chunkUTYUT5YY_cjs.Trash2,
|
|
@@ -7445,7 +7445,7 @@ var Assessment = React10__namespace.forwardRef(
|
|
|
7445
7445
|
null
|
|
7446
7446
|
);
|
|
7447
7447
|
const [announcement, setAnnouncement] = chunkYVPC65ZJ_cjs.useLiveAnnouncement();
|
|
7448
|
-
const ambientCodeLookup =
|
|
7448
|
+
const ambientCodeLookup = chunkQPOTSLY6_cjs.useCodeLookupConfig();
|
|
7449
7449
|
const effectiveRenderOrderSearch = renderOrderSearch === false ? void 0 : renderOrderSearch ?? (ambientCodeLookup ? contextOrderSearch(ambientCodeLookup) : void 0);
|
|
7450
7450
|
const concernById = React10__namespace.useMemo(
|
|
7451
7451
|
() => new Map(concerns.map((c) => [c.concernId, c])),
|
|
@@ -7700,7 +7700,7 @@ var Assessment = React10__namespace.forwardRef(
|
|
|
7700
7700
|
assertion.verificationStatus !== "confirmed" && /* @__PURE__ */ jsxRuntime.jsx(chunkEL2RSQTJ_cjs.Badge, { variant: "warning", size: "sm", children: assertion.verificationStatus }),
|
|
7701
7701
|
/* @__PURE__ */ jsxRuntime.jsx(CodingChips, { coding: assertion.coding }),
|
|
7702
7702
|
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7703
|
-
|
|
7703
|
+
chunkQPOTSLY6_cjs.RowActionToolbar,
|
|
7704
7704
|
{
|
|
7705
7705
|
label: `Actions for ${assertion.text}`,
|
|
7706
7706
|
align: "top",
|
|
@@ -7710,7 +7710,7 @@ var Assessment = React10__namespace.forwardRef(
|
|
|
7710
7710
|
if (action === "add-order" && !onAddOrder && !onAction)
|
|
7711
7711
|
return null;
|
|
7712
7712
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7713
|
-
|
|
7713
|
+
chunkQPOTSLY6_cjs.RowIconButton,
|
|
7714
7714
|
{
|
|
7715
7715
|
label: meta.label,
|
|
7716
7716
|
icon: meta.icon,
|
|
@@ -10702,7 +10702,7 @@ function ConditionEditor({
|
|
|
10702
10702
|
"data-testid": dataTestId
|
|
10703
10703
|
}) {
|
|
10704
10704
|
const prior = concern ? currentAssertion(concern) : void 0;
|
|
10705
|
-
const ambientCodeLookup =
|
|
10705
|
+
const ambientCodeLookup = chunkQPOTSLY6_cjs.useCodeLookupConfig();
|
|
10706
10706
|
const effectiveRenderCodeSearch = renderCodeSearch === false ? void 0 : renderCodeSearch ?? (ambientCodeLookup ? contextConditionCodeSearch(ambientCodeLookup) : void 0);
|
|
10707
10707
|
const [text, setText] = React10__namespace.useState("");
|
|
10708
10708
|
const [coding, setCoding] = React10__namespace.useState([]);
|
|
@@ -10834,7 +10834,7 @@ function ConditionEditor({
|
|
|
10834
10834
|
),
|
|
10835
10835
|
mode === "relate" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10836
10836
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10837
|
-
|
|
10837
|
+
chunkYWHSQH7S_cjs.Select,
|
|
10838
10838
|
{
|
|
10839
10839
|
label: "Relationship",
|
|
10840
10840
|
options: RELATIONSHIP_OPTIONS,
|
|
@@ -10843,7 +10843,7 @@ function ConditionEditor({
|
|
|
10843
10843
|
}
|
|
10844
10844
|
),
|
|
10845
10845
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10846
|
-
|
|
10846
|
+
chunkYWHSQH7S_cjs.Select,
|
|
10847
10847
|
{
|
|
10848
10848
|
label: "Related problem",
|
|
10849
10849
|
placeholder: "Select a problem\u2026",
|
|
@@ -10945,7 +10945,7 @@ function ConditionEditor({
|
|
|
10945
10945
|
coding.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-xs", children: "Optional \u2014 a name-only problem is valid. Codes can be added any time." }),
|
|
10946
10946
|
coding.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
|
|
10947
10947
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10948
|
-
|
|
10948
|
+
chunkYWHSQH7S_cjs.Select,
|
|
10949
10949
|
{
|
|
10950
10950
|
"aria-label": `Coding system ${i + 1}`,
|
|
10951
10951
|
options: CODING_SYSTEMS.map((s) => ({
|
|
@@ -11010,7 +11010,7 @@ function ConditionEditor({
|
|
|
11010
11010
|
] }, i))
|
|
11011
11011
|
] }),
|
|
11012
11012
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11013
|
-
|
|
11013
|
+
chunkYWHSQH7S_cjs.Select,
|
|
11014
11014
|
{
|
|
11015
11015
|
label: "Verification status",
|
|
11016
11016
|
options: VERIFICATION_OPTIONS,
|
|
@@ -11695,7 +11695,7 @@ function CheckrIntegration({
|
|
|
11695
11695
|
}
|
|
11696
11696
|
),
|
|
11697
11697
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11698
|
-
|
|
11698
|
+
chunkYWHSQH7S_cjs.Select,
|
|
11699
11699
|
{
|
|
11700
11700
|
label: packageLabel,
|
|
11701
11701
|
options: packageOptions,
|
|
@@ -14083,7 +14083,7 @@ function CSVColumnCard({
|
|
|
14083
14083
|
hasError && !column.ignored && "ring-warning-700/50 dark:ring-warning-400/50 ring-2"
|
|
14084
14084
|
),
|
|
14085
14085
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14086
|
-
|
|
14086
|
+
chunkYWHSQH7S_cjs.Select,
|
|
14087
14087
|
{
|
|
14088
14088
|
id: formatHtmlId(column.name),
|
|
14089
14089
|
label: `Map ${column.name} to field`,
|
|
@@ -14112,7 +14112,7 @@ function CSVColumnCard({
|
|
|
14112
14112
|
}
|
|
14113
14113
|
),
|
|
14114
14114
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
14115
|
-
|
|
14115
|
+
chunkYWHSQH7S_cjs.Select,
|
|
14116
14116
|
{
|
|
14117
14117
|
id: formatHtmlId(column.name, column.mappedTo),
|
|
14118
14118
|
label: `${column.name} sub-field`,
|
|
@@ -17373,7 +17373,7 @@ function ClaimProviderForm({
|
|
|
17373
17373
|
}
|
|
17374
17374
|
),
|
|
17375
17375
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17376
|
-
|
|
17376
|
+
chunkYWHSQH7S_cjs.Select,
|
|
17377
17377
|
{
|
|
17378
17378
|
label: "Role at this Organization",
|
|
17379
17379
|
value: formData.role,
|
|
@@ -17403,7 +17403,7 @@ function ClaimProviderForm({
|
|
|
17403
17403
|
"data-slot": "claim-form-section",
|
|
17404
17404
|
className: "space-y-4 border-t border-gray-200 pt-4 dark:border-gray-700",
|
|
17405
17405
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
17406
|
-
|
|
17406
|
+
chunkYWHSQH7S_cjs.Select,
|
|
17407
17407
|
{
|
|
17408
17408
|
label: "Preferred Language",
|
|
17409
17409
|
value: formData.preferredLanguage || "en",
|
|
@@ -17648,7 +17648,7 @@ function CreateInvoiceModal({
|
|
|
17648
17648
|
}
|
|
17649
17649
|
),
|
|
17650
17650
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17651
|
-
|
|
17651
|
+
chunkYWHSQH7S_cjs.Select,
|
|
17652
17652
|
{
|
|
17653
17653
|
label: "Employer",
|
|
17654
17654
|
options: employerOptions,
|
|
@@ -18339,7 +18339,7 @@ function EditUserRoleModal({
|
|
|
18339
18339
|
)
|
|
18340
18340
|
] }) }),
|
|
18341
18341
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18342
|
-
|
|
18342
|
+
chunkYWHSQH7S_cjs.Select,
|
|
18343
18343
|
{
|
|
18344
18344
|
label: "Role",
|
|
18345
18345
|
value: selectedRoleId,
|
|
@@ -18606,7 +18606,7 @@ function EmployeeForm({
|
|
|
18606
18606
|
}
|
|
18607
18607
|
),
|
|
18608
18608
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18609
|
-
|
|
18609
|
+
chunkYWHSQH7S_cjs.Select,
|
|
18610
18610
|
{
|
|
18611
18611
|
label: selectDepartments,
|
|
18612
18612
|
value: selectedDepartments[0] ?? "",
|
|
@@ -18721,7 +18721,7 @@ function EmployeeForm({
|
|
|
18721
18721
|
}
|
|
18722
18722
|
) }),
|
|
18723
18723
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-32", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
18724
|
-
|
|
18724
|
+
chunkYWHSQH7S_cjs.Select,
|
|
18725
18725
|
{
|
|
18726
18726
|
label: index === 0 ? "Type" : void 0,
|
|
18727
18727
|
"aria-label": index > 0 ? "Phone type" : void 0,
|
|
@@ -22745,7 +22745,7 @@ function InviteUserModal({
|
|
|
22745
22745
|
}
|
|
22746
22746
|
),
|
|
22747
22747
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22748
|
-
|
|
22748
|
+
chunkYWHSQH7S_cjs.Select,
|
|
22749
22749
|
{
|
|
22750
22750
|
label: "Role",
|
|
22751
22751
|
value: roleId,
|
|
@@ -26208,7 +26208,7 @@ var defaultOrderTabs = [
|
|
|
26208
26208
|
{ id: "rejected", label: "Rejected", statuses: ["rejected", "cancelled"] }
|
|
26209
26209
|
];
|
|
26210
26210
|
function orderToMedication(order) {
|
|
26211
|
-
const sig = order.detail ?
|
|
26211
|
+
const sig = order.detail ? chunkQPOTSLY6_cjs.parseSig(order.detail) : void 0;
|
|
26212
26212
|
return {
|
|
26213
26213
|
id: order.orderId,
|
|
26214
26214
|
name: order.display,
|
|
@@ -26216,7 +26216,7 @@ function orderToMedication(order) {
|
|
|
26216
26216
|
status: "unreconciled",
|
|
26217
26217
|
indication: order.indication,
|
|
26218
26218
|
pharmacyNotes: order.notes,
|
|
26219
|
-
...
|
|
26219
|
+
...chunkQPOTSLY6_cjs.labelToMedicationFields(order.display),
|
|
26220
26220
|
...sig && {
|
|
26221
26221
|
route: sig.route,
|
|
26222
26222
|
frequency: sig.frequency,
|
|
@@ -26287,7 +26287,7 @@ function BaseOrderEditor({
|
|
|
26287
26287
|
onSave
|
|
26288
26288
|
}) {
|
|
26289
26289
|
const config = TYPE_CONFIG[type];
|
|
26290
|
-
const ambientCodeLookup =
|
|
26290
|
+
const ambientCodeLookup = chunkQPOTSLY6_cjs.useCodeLookupConfig();
|
|
26291
26291
|
const effectiveCodeLookup = codeLookup === false ? void 0 : codeLookup ?? ambientCodeLookup ?? void 0;
|
|
26292
26292
|
const [draft, setDraft] = React10__namespace.useState(
|
|
26293
26293
|
() => order ?? {
|
|
@@ -26486,7 +26486,7 @@ function OrderEditor({
|
|
|
26486
26486
|
display: ""
|
|
26487
26487
|
};
|
|
26488
26488
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26489
|
-
|
|
26489
|
+
chunkQPOTSLY6_cjs.MedicationEditor,
|
|
26490
26490
|
{
|
|
26491
26491
|
open,
|
|
26492
26492
|
medication: order ? orderToMedication(order) : void 0,
|
|
@@ -29119,7 +29119,7 @@ function RelevanceControl({
|
|
|
29119
29119
|
{
|
|
29120
29120
|
role: "toolbar",
|
|
29121
29121
|
"aria-label": `Relevance for ${labelPrefix}`,
|
|
29122
|
-
onKeyDown:
|
|
29122
|
+
onKeyDown: chunkQPOTSLY6_cjs.toolbarKeyNav,
|
|
29123
29123
|
className: "border-border flex shrink-0 items-center overflow-hidden rounded-md border",
|
|
29124
29124
|
children: RELEVANCE_ORDER.map((relevance) => {
|
|
29125
29125
|
const active = value === relevance;
|
|
@@ -34570,7 +34570,7 @@ function ReportDashboard({
|
|
|
34570
34570
|
] }),
|
|
34571
34571
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
34572
34572
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
34573
|
-
|
|
34573
|
+
chunkYWHSQH7S_cjs.Select,
|
|
34574
34574
|
{
|
|
34575
34575
|
"aria-label": "Date range",
|
|
34576
34576
|
options: Array.isArray(dateRangeOptions) && dateRangeOptions.every(
|
|
@@ -36770,7 +36770,7 @@ function ServiceGeneralSettings({
|
|
|
36770
36770
|
}
|
|
36771
36771
|
),
|
|
36772
36772
|
categories.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
36773
|
-
|
|
36773
|
+
chunkYWHSQH7S_cjs.Select,
|
|
36774
36774
|
{
|
|
36775
36775
|
label: "Category",
|
|
36776
36776
|
value: categoryId || "",
|
|
@@ -37925,7 +37925,7 @@ function ServiceShippingSettings({
|
|
|
37925
37925
|
"data-slot": "shipping-settings-content",
|
|
37926
37926
|
children: [
|
|
37927
37927
|
shippingMethods.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
37928
|
-
|
|
37928
|
+
chunkYWHSQH7S_cjs.Select,
|
|
37929
37929
|
{
|
|
37930
37930
|
label: "Shipping Method",
|
|
37931
37931
|
value: selectedMethodId || "",
|
|
@@ -38007,7 +38007,7 @@ function ServiceShippingSettings({
|
|
|
38007
38007
|
}
|
|
38008
38008
|
) }),
|
|
38009
38009
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
38010
|
-
|
|
38010
|
+
chunkYWHSQH7S_cjs.Select,
|
|
38011
38011
|
{
|
|
38012
38012
|
label: "State",
|
|
38013
38013
|
value: address.state,
|
|
@@ -38135,7 +38135,7 @@ function SetupServiceModal({
|
|
|
38135
38135
|
}
|
|
38136
38136
|
),
|
|
38137
38137
|
showServicePicker && availableServices.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
38138
|
-
|
|
38138
|
+
chunkYWHSQH7S_cjs.Select,
|
|
38139
38139
|
{
|
|
38140
38140
|
label: "Select Service",
|
|
38141
38141
|
value: formData.serviceId || "",
|
|
@@ -38183,7 +38183,7 @@ function SetupServiceModal({
|
|
|
38183
38183
|
)
|
|
38184
38184
|
] }),
|
|
38185
38185
|
categories.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
38186
|
-
|
|
38186
|
+
chunkYWHSQH7S_cjs.Select,
|
|
38187
38187
|
{
|
|
38188
38188
|
label: "Category",
|
|
38189
38189
|
value: formData.categoryId || "",
|
|
@@ -42226,7 +42226,7 @@ function ReportTimeRange({
|
|
|
42226
42226
|
className: chunkOR5DRJCW_cjs.cn("flex flex-wrap items-center gap-3", className),
|
|
42227
42227
|
children: [
|
|
42228
42228
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
42229
|
-
|
|
42229
|
+
chunkYWHSQH7S_cjs.Select,
|
|
42230
42230
|
{
|
|
42231
42231
|
"aria-label": "Time range",
|
|
42232
42232
|
value: preset,
|
|
@@ -43136,23 +43136,23 @@ Object.defineProperty(exports, "FenceBlock", {
|
|
|
43136
43136
|
});
|
|
43137
43137
|
Object.defineProperty(exports, "FillerWordsModal", {
|
|
43138
43138
|
enumerable: true,
|
|
43139
|
-
get: function () { return
|
|
43139
|
+
get: function () { return chunk5INNPOZZ_cjs.FillerWordsModal; }
|
|
43140
43140
|
});
|
|
43141
43141
|
Object.defineProperty(exports, "MediaEditor", {
|
|
43142
43142
|
enumerable: true,
|
|
43143
|
-
get: function () { return
|
|
43143
|
+
get: function () { return chunk5INNPOZZ_cjs.MediaEditor; }
|
|
43144
43144
|
});
|
|
43145
43145
|
Object.defineProperty(exports, "SilenceSettingsModal", {
|
|
43146
43146
|
enumerable: true,
|
|
43147
|
-
get: function () { return
|
|
43147
|
+
get: function () { return chunk5INNPOZZ_cjs.SilenceSettingsModal; }
|
|
43148
43148
|
});
|
|
43149
43149
|
Object.defineProperty(exports, "SpeedMarkerMenu", {
|
|
43150
43150
|
enumerable: true,
|
|
43151
|
-
get: function () { return
|
|
43151
|
+
get: function () { return chunk5INNPOZZ_cjs.SpeedMarkerMenu; }
|
|
43152
43152
|
});
|
|
43153
43153
|
Object.defineProperty(exports, "WordEditorModal", {
|
|
43154
43154
|
enumerable: true,
|
|
43155
|
-
get: function () { return
|
|
43155
|
+
get: function () { return chunk5INNPOZZ_cjs.WordEditorModal; }
|
|
43156
43156
|
});
|
|
43157
43157
|
Object.defineProperty(exports, "PLAYBACK_SPEEDS", {
|
|
43158
43158
|
enumerable: true,
|
|
@@ -43388,67 +43388,67 @@ Object.defineProperty(exports, "isApplicable", {
|
|
|
43388
43388
|
});
|
|
43389
43389
|
Object.defineProperty(exports, "ALLERGY_TYPE_LABELS", {
|
|
43390
43390
|
enumerable: true,
|
|
43391
|
-
get: function () { return
|
|
43391
|
+
get: function () { return chunkQPOTSLY6_cjs.ALLERGY_TYPE_LABELS; }
|
|
43392
43392
|
});
|
|
43393
43393
|
Object.defineProperty(exports, "AllergyList", {
|
|
43394
43394
|
enumerable: true,
|
|
43395
|
-
get: function () { return
|
|
43395
|
+
get: function () { return chunkQPOTSLY6_cjs.AllergyList; }
|
|
43396
43396
|
});
|
|
43397
43397
|
Object.defineProperty(exports, "AllergyManager", {
|
|
43398
43398
|
enumerable: true,
|
|
43399
|
-
get: function () { return
|
|
43399
|
+
get: function () { return chunkQPOTSLY6_cjs.AllergyManager; }
|
|
43400
43400
|
});
|
|
43401
43401
|
Object.defineProperty(exports, "CodeLookupProvider", {
|
|
43402
43402
|
enumerable: true,
|
|
43403
|
-
get: function () { return
|
|
43403
|
+
get: function () { return chunkQPOTSLY6_cjs.CodeLookupProvider; }
|
|
43404
43404
|
});
|
|
43405
43405
|
Object.defineProperty(exports, "MEDICATION_STATUS_LABELS", {
|
|
43406
43406
|
enumerable: true,
|
|
43407
|
-
get: function () { return
|
|
43407
|
+
get: function () { return chunkQPOTSLY6_cjs.MEDICATION_STATUS_LABELS; }
|
|
43408
43408
|
});
|
|
43409
43409
|
Object.defineProperty(exports, "MedicationEditor", {
|
|
43410
43410
|
enumerable: true,
|
|
43411
|
-
get: function () { return
|
|
43411
|
+
get: function () { return chunkQPOTSLY6_cjs.MedicationEditor; }
|
|
43412
43412
|
});
|
|
43413
43413
|
Object.defineProperty(exports, "MedicationList", {
|
|
43414
43414
|
enumerable: true,
|
|
43415
|
-
get: function () { return
|
|
43415
|
+
get: function () { return chunkQPOTSLY6_cjs.MedicationList; }
|
|
43416
43416
|
});
|
|
43417
43417
|
Object.defineProperty(exports, "MedicationReconciliation", {
|
|
43418
43418
|
enumerable: true,
|
|
43419
|
-
get: function () { return
|
|
43419
|
+
get: function () { return chunkQPOTSLY6_cjs.MedicationReconciliation; }
|
|
43420
43420
|
});
|
|
43421
43421
|
Object.defineProperty(exports, "RowActionToolbar", {
|
|
43422
43422
|
enumerable: true,
|
|
43423
|
-
get: function () { return
|
|
43423
|
+
get: function () { return chunkQPOTSLY6_cjs.RowActionToolbar; }
|
|
43424
43424
|
});
|
|
43425
43425
|
Object.defineProperty(exports, "RowIconButton", {
|
|
43426
43426
|
enumerable: true,
|
|
43427
|
-
get: function () { return
|
|
43427
|
+
get: function () { return chunkQPOTSLY6_cjs.RowIconButton; }
|
|
43428
43428
|
});
|
|
43429
43429
|
Object.defineProperty(exports, "labelToMedicationFields", {
|
|
43430
43430
|
enumerable: true,
|
|
43431
|
-
get: function () { return
|
|
43431
|
+
get: function () { return chunkQPOTSLY6_cjs.labelToMedicationFields; }
|
|
43432
43432
|
});
|
|
43433
43433
|
Object.defineProperty(exports, "lookupToMedicationFields", {
|
|
43434
43434
|
enumerable: true,
|
|
43435
|
-
get: function () { return
|
|
43435
|
+
get: function () { return chunkQPOTSLY6_cjs.lookupToMedicationFields; }
|
|
43436
43436
|
});
|
|
43437
43437
|
Object.defineProperty(exports, "parseMedicationLabel", {
|
|
43438
43438
|
enumerable: true,
|
|
43439
|
-
get: function () { return
|
|
43439
|
+
get: function () { return chunkQPOTSLY6_cjs.parseMedicationLabel; }
|
|
43440
43440
|
});
|
|
43441
43441
|
Object.defineProperty(exports, "parseSig", {
|
|
43442
43442
|
enumerable: true,
|
|
43443
|
-
get: function () { return
|
|
43443
|
+
get: function () { return chunkQPOTSLY6_cjs.parseSig; }
|
|
43444
43444
|
});
|
|
43445
43445
|
Object.defineProperty(exports, "toolbarKeyNav", {
|
|
43446
43446
|
enumerable: true,
|
|
43447
|
-
get: function () { return
|
|
43447
|
+
get: function () { return chunkQPOTSLY6_cjs.toolbarKeyNav; }
|
|
43448
43448
|
});
|
|
43449
43449
|
Object.defineProperty(exports, "useCodeLookupConfig", {
|
|
43450
43450
|
enumerable: true,
|
|
43451
|
-
get: function () { return
|
|
43451
|
+
get: function () { return chunkQPOTSLY6_cjs.useCodeLookupConfig; }
|
|
43452
43452
|
});
|
|
43453
43453
|
Object.defineProperty(exports, "Textarea", {
|
|
43454
43454
|
enumerable: true,
|
|
@@ -43484,11 +43484,11 @@ Object.defineProperty(exports, "labelVariants", {
|
|
|
43484
43484
|
});
|
|
43485
43485
|
Object.defineProperty(exports, "Select", {
|
|
43486
43486
|
enumerable: true,
|
|
43487
|
-
get: function () { return
|
|
43487
|
+
get: function () { return chunkYWHSQH7S_cjs.Select; }
|
|
43488
43488
|
});
|
|
43489
43489
|
Object.defineProperty(exports, "selectTriggerVariants", {
|
|
43490
43490
|
enumerable: true,
|
|
43491
|
-
get: function () { return
|
|
43491
|
+
get: function () { return chunkYWHSQH7S_cjs.selectTriggerVariants; }
|
|
43492
43492
|
});
|
|
43493
43493
|
Object.defineProperty(exports, "Card", {
|
|
43494
43494
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ export { HtmlPreviewBlock } from './chunk-NCRYCG5G.js';
|
|
|
47
47
|
export { MermaidBlock } from './chunk-WGC3KOP7.js';
|
|
48
48
|
export { SurveyBlock } from './chunk-CPJIOOBM.js';
|
|
49
49
|
export { FenceBlock } from './chunk-MHJMUKLA.js';
|
|
50
|
-
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-
|
|
50
|
+
export { FillerWordsModal, MediaEditor, SilenceSettingsModal, SpeedMarkerMenu, WordEditorModal } from './chunk-O6MBLWAI.js';
|
|
51
51
|
export { PLAYBACK_SPEEDS } from './chunk-J7KWQJOB.js';
|
|
52
52
|
export { Slider, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './chunk-JBB25LFB.js';
|
|
53
53
|
import './chunk-RISZWWEQ.js';
|
|
@@ -75,8 +75,8 @@ import './chunk-IQ4KQJAO.js';
|
|
|
75
75
|
export { Breadcrumb, BreadcrumbSlash } from './chunk-HEH3QXOQ.js';
|
|
76
76
|
import { evaluateDue, completedKeys, normalizeOrders } from './chunk-Y5KEFV5O.js';
|
|
77
77
|
export { buildChartOrderRows, buildEncounterOrderRows, dueForOrder, evaluateDue, evaluateProgram, isApplicable } from './chunk-Y5KEFV5O.js';
|
|
78
|
-
import { useCodeLookupConfig, RowActionToolbar, RowIconButton, toolbarKeyNav, parseSig, labelToMedicationFields, MedicationEditor } from './chunk-
|
|
79
|
-
export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig } from './chunk-
|
|
78
|
+
import { useCodeLookupConfig, RowActionToolbar, RowIconButton, toolbarKeyNav, parseSig, labelToMedicationFields, MedicationEditor } from './chunk-DZIUSGUF.js';
|
|
79
|
+
export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig } from './chunk-DZIUSGUF.js';
|
|
80
80
|
import { Textarea } from './chunk-6LFG4JFF.js';
|
|
81
81
|
export { Textarea, textareaVariants } from './chunk-6LFG4JFF.js';
|
|
82
82
|
import { Tooltip } from './chunk-FZJBFJJR.js';
|
|
@@ -85,8 +85,8 @@ import { RadioGroup, Radio } from './chunk-EZKRAW2X.js';
|
|
|
85
85
|
export { Radio, RadioGroup, radioVariants } from './chunk-EZKRAW2X.js';
|
|
86
86
|
import { Label } from './chunk-DUPR6FEL.js';
|
|
87
87
|
export { Label, labelVariants } from './chunk-DUPR6FEL.js';
|
|
88
|
-
import { Select } from './chunk-
|
|
89
|
-
export { Select, selectTriggerVariants } from './chunk-
|
|
88
|
+
import { Select } from './chunk-6Y727LPG.js';
|
|
89
|
+
export { Select, selectTriggerVariants } from './chunk-6Y727LPG.js';
|
|
90
90
|
import { Card, CardHeader, CardContent, CardTitle } from './chunk-5BQE6BEL.js';
|
|
91
91
|
export { Card, CardActions, CardBadge, CardCollapsible, CardContent, CardDescription, CardDivider, CardFooter, CardHeader, CardMedia, CardStat, CardTitle, cardAccentVariants, cardVariants } from './chunk-5BQE6BEL.js';
|
|
92
92
|
import { DateInput } from './chunk-LIH3IZYK.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mieweb/ui",
|
|
3
|
-
"version": "0.6.1-dev.
|
|
3
|
+
"version": "0.6.1-dev.174",
|
|
4
4
|
"description": "A themeable, accessible React component library built with Tailwind CSS",
|
|
5
5
|
"author": "Medical Informatics Engineering, Inc.",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useEscapeKey","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-FRT6RQND.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\nexport interface SelectProps extends VariantProps<\n typeof selectTriggerVariants\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n error,\n helperText,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected option\n const selectedOption = flatOptions.find((opt) => opt.value === value);\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n React.useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const [dropdownStyle, setDropdownStyle] = React.useState<React.CSSProperties>(\n {}\n );\n\n const updateDropdownPosition = React.useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const isCondensed = document.body.classList.contains('condensed');\n const optionHeight = isCondensed ? 28 : 40;\n const estimatedDropdownHeight = Math.min(\n flatOptions.length * optionHeight + 16,\n 300\n );\n const openAbove =\n spaceBelow < estimatedDropdownHeight && spaceAbove > spaceBelow;\n\n setDropdownStyle({\n position: 'fixed',\n ...(openAbove\n ? { bottom: window.innerHeight - rect.top + 4 }\n : { top: rect.bottom + 4 }),\n left: rect.left,\n width: rect.width,\n maxHeight: Math.max(\n Math.min(openAbove ? spaceAbove - 8 : spaceBelow - 8, 300),\n 0\n ),\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n zIndex: 9999,\n });\n }, [flatOptions.length]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n updateDropdownPosition();\n\n window.addEventListener('scroll', updateDropdownPosition, true);\n window.addEventListener('resize', updateDropdownPosition);\n return () => {\n window.removeEventListener('scroll', updateDropdownPosition, true);\n window.removeEventListener('resize', updateDropdownPosition);\n };\n }, [isOpen, updateDropdownPosition]);\n\n // Handle value change\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, onValueChange]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [isOpen, highlightedIndex, filteredFlatOptions, handleValueChange]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={triggerRef}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={hasError || !!error}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({ size, hasError: hasError || !!error })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !selectedOption && 'text-muted-foreground'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={dropdownRef}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={option.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|