@vantageos/mosaic 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +145 -0
- package/README.md +193 -0
- package/dist/Alert.schema-LPJE5gFP.d.cts +71 -0
- package/dist/Alert.schema-LPJE5gFP.d.ts +71 -0
- package/dist/ConfirmDialog-B3CQQGmJ.d.cts +34 -0
- package/dist/ConfirmDialog-B3CQQGmJ.d.ts +34 -0
- package/dist/MarkdownRenderer.schema-Rx7kIeVA.d.cts +22 -0
- package/dist/MarkdownRenderer.schema-Rx7kIeVA.d.ts +22 -0
- package/dist/ProgressBar.schema-CdVYx0Wq.d.cts +22 -0
- package/dist/ProgressBar.schema-CdVYx0Wq.d.ts +22 -0
- package/dist/StatusBadge.schema-1tOjB4Ir.d.cts +22 -0
- package/dist/StatusBadge.schema-1tOjB4Ir.d.ts +22 -0
- package/dist/Tabs.schema-BzcEyeq8.d.cts +79 -0
- package/dist/Tabs.schema-BzcEyeq8.d.ts +79 -0
- package/dist/artifacts.cjs +144 -2
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.d.cts +3 -21
- package/dist/artifacts.d.ts +3 -21
- package/dist/artifacts.js +144 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/confirmation.cjs +168 -2
- package/dist/confirmation.cjs.map +1 -1
- package/dist/confirmation.d.cts +24 -20
- package/dist/confirmation.d.ts +24 -20
- package/dist/confirmation.js +165 -3
- package/dist/confirmation.js.map +1 -1
- package/dist/display.cjs +272 -2
- package/dist/display.cjs.map +1 -1
- package/dist/display.d.cts +132 -1
- package/dist/display.d.ts +132 -1
- package/dist/display.js +267 -3
- package/dist/display.js.map +1 -1
- package/dist/forms.cjs +1415 -0
- package/dist/forms.cjs.map +1 -0
- package/dist/forms.d.cts +159 -0
- package/dist/forms.d.ts +159 -0
- package/dist/forms.js +1334 -0
- package/dist/forms.js.map +1 -0
- package/dist/index-CwXVgtGb.d.cts +917 -0
- package/dist/index-CwXVgtGb.d.ts +917 -0
- package/dist/index.cjs +315 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -6
- package/dist/index.d.ts +11 -6
- package/dist/index.js +304 -3
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +19 -0
- package/dist/input.cjs.map +1 -1
- package/dist/input.d.cts +4 -34
- package/dist/input.d.ts +4 -34
- package/dist/input.js +18 -1
- package/dist/input.js.map +1 -1
- package/dist/media.cjs +144 -2
- package/dist/media.cjs.map +1 -1
- package/dist/media.d.cts +3 -21
- package/dist/media.d.ts +3 -21
- package/dist/media.js +144 -2
- package/dist/media.js.map +1 -1
- package/dist/preact/artifacts.d.ts +39 -1
- package/dist/preact/artifacts.js +234 -0
- package/dist/preact/artifacts.js.map +1 -1
- package/dist/preact/confirmation.d.ts +115 -1
- package/dist/preact/confirmation.js +503 -0
- package/dist/preact/confirmation.js.map +1 -1
- package/dist/preact/display.d.ts +366 -1
- package/dist/preact/display.js +774 -0
- package/dist/preact/display.js.map +1 -1
- package/dist/preact/forms.d.ts +875 -0
- package/dist/preact/forms.js +1326 -0
- package/dist/preact/forms.js.map +1 -0
- package/dist/preact/input.d.ts +88 -1
- package/dist/preact/input.js +194 -0
- package/dist/preact/input.js.map +1 -1
- package/dist/preact/progress.d.ts +35 -1
- package/dist/preact/progress.js +263 -0
- package/dist/preact/progress.js.map +1 -1
- package/dist/progress.cjs +144 -2
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.d.cts +3 -21
- package/dist/progress.d.ts +3 -21
- package/dist/progress.js +144 -2
- package/dist/progress.js.map +1 -1
- package/dist/react/artifacts.cjs +241 -0
- package/dist/react/artifacts.cjs.map +1 -1
- package/dist/react/artifacts.d.cts +20 -1
- package/dist/react/artifacts.d.ts +20 -1
- package/dist/react/artifacts.js +234 -0
- package/dist/react/artifacts.js.map +1 -1
- package/dist/react/confirmation.cjs +513 -0
- package/dist/react/confirmation.cjs.map +1 -1
- package/dist/react/confirmation.d.cts +21 -1
- package/dist/react/confirmation.d.ts +21 -1
- package/dist/react/confirmation.js +503 -0
- package/dist/react/confirmation.js.map +1 -1
- package/dist/react/display.cjs +788 -0
- package/dist/react/display.cjs.map +1 -1
- package/dist/react/display.d.cts +129 -1
- package/dist/react/display.d.ts +129 -1
- package/dist/react/display.js +771 -0
- package/dist/react/display.js.map +1 -1
- package/dist/react/forms.cjs +1387 -0
- package/dist/react/forms.cjs.map +1 -0
- package/dist/react/forms.d.cts +5 -0
- package/dist/react/forms.d.ts +5 -0
- package/dist/react/forms.js +1326 -0
- package/dist/react/forms.js.map +1 -0
- package/dist/react/input.cjs +197 -0
- package/dist/react/input.cjs.map +1 -1
- package/dist/react/input.d.cts +13 -1
- package/dist/react/input.d.ts +13 -1
- package/dist/react/input.js +194 -0
- package/dist/react/input.js.map +1 -1
- package/dist/react/progress.cjs +266 -0
- package/dist/react/progress.cjs.map +1 -1
- package/dist/react/progress.d.cts +17 -1
- package/dist/react/progress.d.ts +17 -1
- package/dist/react/progress.js +263 -0
- package/dist/react/progress.js.map +1 -1
- package/package.json +87 -61
- package/registry.yaml +167 -1
package/dist/index.cjs
CHANGED
|
@@ -15,6 +15,7 @@ var DOMPurify__default = /*#__PURE__*/_interopDefault(DOMPurify);
|
|
|
15
15
|
|
|
16
16
|
// src/i18n/strings.ts
|
|
17
17
|
var EN = {
|
|
18
|
+
// ─── Non-forms components ──────────────────────────────────────────────────
|
|
18
19
|
"ProgressBar.aria.label": "Progress",
|
|
19
20
|
"ProgressBar.error.invalidProps": "ProgressBar: invalid props",
|
|
20
21
|
"ConfirmDialog.button.confirm": "Confirm",
|
|
@@ -33,9 +34,80 @@ var EN = {
|
|
|
33
34
|
"TokenDisplayOnceModal.warning.once": "This token will only be shown once. Copy it now.",
|
|
34
35
|
"TokenDisplayOnceModal.copied": "Copied",
|
|
35
36
|
"StatusBadge.aria.status": "Status",
|
|
36
|
-
"StatusBadge.error.invalidProps": "StatusBadge: invalid props"
|
|
37
|
+
"StatusBadge.error.invalidProps": "StatusBadge: invalid props",
|
|
38
|
+
"EmptyState.error.invalidProps": "EmptyState: invalid props",
|
|
39
|
+
"Toast.aria.close": "Close notification",
|
|
40
|
+
"Toast.error.invalidProps": "Toast: invalid props",
|
|
41
|
+
"Alert.aria.dismiss": "Dismiss alert",
|
|
42
|
+
"Alert.error.invalidProps": "Alert: invalid props",
|
|
43
|
+
"VirtualList.empty.message": "No items to display",
|
|
44
|
+
"VirtualList.error.invalidProps": "VirtualList: invalid props",
|
|
45
|
+
"Skeleton.aria.label": "Loading",
|
|
46
|
+
"Skeleton.error.invalidProps": "Skeleton: invalid props",
|
|
47
|
+
// ─── Forms — useMosaicForm ─────────────────────────────────────────────────
|
|
48
|
+
"useMosaicForm.error.invalidProps": "useMosaicForm: invalid options",
|
|
49
|
+
// ─── Forms — FormProvider ──────────────────────────────────────────────────
|
|
50
|
+
"FormProvider.error.invalidProps": "FormProvider: invalid props",
|
|
51
|
+
// ─── Forms — FormField ────────────────────────────────────────────────────
|
|
52
|
+
"FormField.error.invalidProps": "FormField: invalid props",
|
|
53
|
+
// ─── Forms — ErrorDisplay ─────────────────────────────────────────────────
|
|
54
|
+
"ErrorDisplay.error.required": "This field is required",
|
|
55
|
+
"ErrorDisplay.error.min": "Value is below the minimum",
|
|
56
|
+
"ErrorDisplay.error.max": "Value exceeds the maximum",
|
|
57
|
+
"ErrorDisplay.error.minLength": "Input is too short",
|
|
58
|
+
"ErrorDisplay.error.maxLength": "Input is too long",
|
|
59
|
+
"ErrorDisplay.error.pattern": "Invalid format",
|
|
60
|
+
"ErrorDisplay.error.email": "Enter a valid email address",
|
|
61
|
+
"ErrorDisplay.error.url": "Enter a valid URL",
|
|
62
|
+
"ErrorDisplay.error.generic": "Invalid value",
|
|
63
|
+
// ─── Forms — SubmitButton ─────────────────────────────────────────────────
|
|
64
|
+
"SubmitButton.aria.submit": "Submit form",
|
|
65
|
+
"SubmitButton.state.loading": "Submitting\u2026",
|
|
66
|
+
"SubmitButton.error.invalidProps": "SubmitButton: invalid props",
|
|
67
|
+
// ─── Forms — Input ────────────────────────────────────────────────────────
|
|
68
|
+
"Input.aria.label": "Input field",
|
|
69
|
+
"Input.error.required": "This field is required",
|
|
70
|
+
"Input.error.invalid": "Invalid value",
|
|
71
|
+
"Input.error.tooLong": "Input is too long",
|
|
72
|
+
"Input.error.tooShort": "Input is too short",
|
|
73
|
+
"Input.error.invalidProps": "Input: invalid props",
|
|
74
|
+
// ─── Forms — Textarea ─────────────────────────────────────────────────────
|
|
75
|
+
"Textarea.aria.label": "Text area",
|
|
76
|
+
"Textarea.error.required": "This field is required",
|
|
77
|
+
"Textarea.error.tooLong": "Text is too long",
|
|
78
|
+
"Textarea.counter.remaining": "characters remaining",
|
|
79
|
+
"Textarea.error.invalidProps": "Textarea: invalid props",
|
|
80
|
+
// ─── Forms — FieldArray ───────────────────────────────────────────────────
|
|
81
|
+
"FieldArray.aria.list": "List of items",
|
|
82
|
+
"FieldArray.aria.addItem": "Add item",
|
|
83
|
+
"FieldArray.aria.removeItem": "Remove item",
|
|
84
|
+
"FieldArray.error.invalidProps": "FieldArray: invalid props",
|
|
85
|
+
// ─── Forms — Checkbox ─────────────────────────────────────────────────────
|
|
86
|
+
"Checkbox.aria.label": "Checkbox",
|
|
87
|
+
"Checkbox.error.required": "This field must be checked",
|
|
88
|
+
"Checkbox.error.invalidProps": "Checkbox: invalid props",
|
|
89
|
+
// ─── Forms — MultiSelect ──────────────────────────────────────────────────
|
|
90
|
+
"MultiSelect.aria.label": "Multi-select field",
|
|
91
|
+
"MultiSelect.aria.removeChip": "Remove",
|
|
92
|
+
"MultiSelect.error.required": "Select at least one option",
|
|
93
|
+
"MultiSelect.error.maxItems": "Maximum number of selections reached",
|
|
94
|
+
"MultiSelect.placeholder": "Select options\u2026",
|
|
95
|
+
"MultiSelect.search.placeholder": "Search\u2026",
|
|
96
|
+
"MultiSelect.empty": "No options available",
|
|
97
|
+
"MultiSelect.error.invalidProps": "MultiSelect: invalid props",
|
|
98
|
+
// ─── Forms — RadioGroup ───────────────────────────────────────────────────
|
|
99
|
+
"RadioGroup.aria.label": "Radio group",
|
|
100
|
+
"RadioGroup.error.required": "Select one option",
|
|
101
|
+
"RadioGroup.error.invalidProps": "RadioGroup: invalid props",
|
|
102
|
+
// ─── Forms — Select ───────────────────────────────────────────────────────
|
|
103
|
+
"Select.placeholder": "Select an option\u2026",
|
|
104
|
+
"Select.search.placeholder": "Search\u2026",
|
|
105
|
+
"Select.empty": "No options available",
|
|
106
|
+
"Select.error.required": "Select an option",
|
|
107
|
+
"Select.error.invalidProps": "Select: invalid props"
|
|
37
108
|
};
|
|
38
109
|
var FR = {
|
|
110
|
+
// ─── Non-forms components ──────────────────────────────────────────────────
|
|
39
111
|
"ProgressBar.aria.label": "Progression",
|
|
40
112
|
"ProgressBar.error.invalidProps": "ProgressBar : propri\xE9t\xE9s invalides",
|
|
41
113
|
"ConfirmDialog.button.confirm": "Confirmer",
|
|
@@ -54,7 +126,77 @@ var FR = {
|
|
|
54
126
|
"TokenDisplayOnceModal.warning.once": "Ce jeton ne sera affich\xE9 qu'une seule fois. Copiez-le maintenant.",
|
|
55
127
|
"TokenDisplayOnceModal.copied": "Copi\xE9",
|
|
56
128
|
"StatusBadge.aria.status": "Statut",
|
|
57
|
-
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides"
|
|
129
|
+
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides",
|
|
130
|
+
"EmptyState.error.invalidProps": "EmptyState : propri\xE9t\xE9s invalides",
|
|
131
|
+
"Toast.aria.close": "Fermer la notification",
|
|
132
|
+
"Toast.error.invalidProps": "Toast : propri\xE9t\xE9s invalides",
|
|
133
|
+
"Alert.aria.dismiss": "Fermer l'alerte",
|
|
134
|
+
"Alert.error.invalidProps": "Alert : propri\xE9t\xE9s invalides",
|
|
135
|
+
"VirtualList.empty.message": "Aucun \xE9l\xE9ment \xE0 afficher",
|
|
136
|
+
"VirtualList.error.invalidProps": "VirtualList : propri\xE9t\xE9s invalides",
|
|
137
|
+
"Skeleton.aria.label": "Chargement",
|
|
138
|
+
"Skeleton.error.invalidProps": "Skeleton : propri\xE9t\xE9s invalides",
|
|
139
|
+
// ─── Forms — useMosaicForm ─────────────────────────────────────────────────
|
|
140
|
+
"useMosaicForm.error.invalidProps": "useMosaicForm : options invalides",
|
|
141
|
+
// ─── Forms — FormProvider ──────────────────────────────────────────────────
|
|
142
|
+
"FormProvider.error.invalidProps": "FormProvider : propri\xE9t\xE9s invalides",
|
|
143
|
+
// ─── Forms — FormField ────────────────────────────────────────────────────
|
|
144
|
+
"FormField.error.invalidProps": "FormField : propri\xE9t\xE9s invalides",
|
|
145
|
+
// ─── Forms — ErrorDisplay ─────────────────────────────────────────────────
|
|
146
|
+
"ErrorDisplay.error.required": "Ce champ est obligatoire",
|
|
147
|
+
"ErrorDisplay.error.min": "La valeur est inf\xE9rieure au minimum",
|
|
148
|
+
"ErrorDisplay.error.max": "La valeur d\xE9passe le maximum",
|
|
149
|
+
"ErrorDisplay.error.minLength": "La saisie est trop courte",
|
|
150
|
+
"ErrorDisplay.error.maxLength": "La saisie est trop longue",
|
|
151
|
+
"ErrorDisplay.error.pattern": "Format invalide",
|
|
152
|
+
"ErrorDisplay.error.email": "Saisissez une adresse e-mail valide",
|
|
153
|
+
"ErrorDisplay.error.url": "Saisissez une URL valide",
|
|
154
|
+
"ErrorDisplay.error.generic": "Valeur invalide",
|
|
155
|
+
// ─── Forms — SubmitButton ─────────────────────────────────────────────────
|
|
156
|
+
"SubmitButton.aria.submit": "Soumettre le formulaire",
|
|
157
|
+
"SubmitButton.state.loading": "Envoi en cours\u2026",
|
|
158
|
+
"SubmitButton.error.invalidProps": "SubmitButton : propri\xE9t\xE9s invalides",
|
|
159
|
+
// ─── Forms — Input ────────────────────────────────────────────────────────
|
|
160
|
+
"Input.aria.label": "Champ de saisie",
|
|
161
|
+
"Input.error.required": "Ce champ est obligatoire",
|
|
162
|
+
"Input.error.invalid": "Valeur invalide",
|
|
163
|
+
"Input.error.tooLong": "La saisie est trop longue",
|
|
164
|
+
"Input.error.tooShort": "La saisie est trop courte",
|
|
165
|
+
"Input.error.invalidProps": "Input : propri\xE9t\xE9s invalides",
|
|
166
|
+
// ─── Forms — Textarea ─────────────────────────────────────────────────────
|
|
167
|
+
"Textarea.aria.label": "Zone de texte",
|
|
168
|
+
"Textarea.error.required": "Ce champ est obligatoire",
|
|
169
|
+
"Textarea.error.tooLong": "Le texte est trop long",
|
|
170
|
+
"Textarea.counter.remaining": "caract\xE8res restants",
|
|
171
|
+
"Textarea.error.invalidProps": "Textarea : propri\xE9t\xE9s invalides",
|
|
172
|
+
// ─── Forms — FieldArray ───────────────────────────────────────────────────
|
|
173
|
+
"FieldArray.aria.list": "Liste d'\xE9l\xE9ments",
|
|
174
|
+
"FieldArray.aria.addItem": "Ajouter un \xE9l\xE9ment",
|
|
175
|
+
"FieldArray.aria.removeItem": "Supprimer l'\xE9l\xE9ment",
|
|
176
|
+
"FieldArray.error.invalidProps": "FieldArray : propri\xE9t\xE9s invalides",
|
|
177
|
+
// ─── Forms — Checkbox ─────────────────────────────────────────────────────
|
|
178
|
+
"Checkbox.aria.label": "Case \xE0 cocher",
|
|
179
|
+
"Checkbox.error.required": "Ce champ doit \xEAtre coch\xE9",
|
|
180
|
+
"Checkbox.error.invalidProps": "Checkbox : propri\xE9t\xE9s invalides",
|
|
181
|
+
// ─── Forms — MultiSelect ──────────────────────────────────────────────────
|
|
182
|
+
"MultiSelect.aria.label": "Champ de s\xE9lection multiple",
|
|
183
|
+
"MultiSelect.aria.removeChip": "Retirer",
|
|
184
|
+
"MultiSelect.error.required": "S\xE9lectionnez au moins une option",
|
|
185
|
+
"MultiSelect.error.maxItems": "Nombre maximum de s\xE9lections atteint",
|
|
186
|
+
"MultiSelect.placeholder": "S\xE9lectionner des options\u2026",
|
|
187
|
+
"MultiSelect.search.placeholder": "Rechercher\u2026",
|
|
188
|
+
"MultiSelect.empty": "Aucune option disponible",
|
|
189
|
+
"MultiSelect.error.invalidProps": "MultiSelect : propri\xE9t\xE9s invalides",
|
|
190
|
+
// ─── Forms — RadioGroup ───────────────────────────────────────────────────
|
|
191
|
+
"RadioGroup.aria.label": "Groupe de boutons radio",
|
|
192
|
+
"RadioGroup.error.required": "S\xE9lectionnez une option",
|
|
193
|
+
"RadioGroup.error.invalidProps": "RadioGroup : propri\xE9t\xE9s invalides",
|
|
194
|
+
// ─── Forms — Select ───────────────────────────────────────────────────────
|
|
195
|
+
"Select.placeholder": "S\xE9lectionner une option\u2026",
|
|
196
|
+
"Select.search.placeholder": "Rechercher\u2026",
|
|
197
|
+
"Select.empty": "Aucune option disponible",
|
|
198
|
+
"Select.error.required": "S\xE9lectionnez une option",
|
|
199
|
+
"Select.error.invalidProps": "Select : propri\xE9t\xE9s invalides"
|
|
58
200
|
};
|
|
59
201
|
var TABLE = {
|
|
60
202
|
en: EN,
|
|
@@ -216,6 +358,23 @@ function ConfirmDialog(raw) {
|
|
|
216
358
|
return null;
|
|
217
359
|
}
|
|
218
360
|
}
|
|
361
|
+
var TabItemSchema = zod.z.object({
|
|
362
|
+
id: zod.z.string().min(1),
|
|
363
|
+
label: zod.z.string().min(1),
|
|
364
|
+
/** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */
|
|
365
|
+
content: zod.z.unknown(),
|
|
366
|
+
disabled: zod.z.boolean().optional().default(false)
|
|
367
|
+
});
|
|
368
|
+
var TabsPropsSchema = zod.z.object({
|
|
369
|
+
tabs: zod.z.array(TabItemSchema).min(1),
|
|
370
|
+
value: zod.z.string().optional(),
|
|
371
|
+
defaultValue: zod.z.string().optional(),
|
|
372
|
+
orientation: zod.z.enum(["horizontal", "vertical"]).default("horizontal"),
|
|
373
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
374
|
+
});
|
|
375
|
+
function validateTabsProps(raw) {
|
|
376
|
+
return TabsPropsSchema.parse(raw);
|
|
377
|
+
}
|
|
219
378
|
var ColumnDefSchema = zod.z.object({
|
|
220
379
|
key: zod.z.string().min(1),
|
|
221
380
|
header: zod.z.string().min(1)
|
|
@@ -405,6 +564,9 @@ function VirtualTable({
|
|
|
405
564
|
{
|
|
406
565
|
"data-virtual": "true",
|
|
407
566
|
ref: scrollRef,
|
|
567
|
+
tabIndex: 0,
|
|
568
|
+
role: "region",
|
|
569
|
+
"aria-label": ariaLabel,
|
|
408
570
|
style: { height: 400, overflow: "auto", position: "relative" },
|
|
409
571
|
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
410
572
|
"table",
|
|
@@ -461,6 +623,125 @@ function VirtualTable({
|
|
|
461
623
|
}
|
|
462
624
|
);
|
|
463
625
|
}
|
|
626
|
+
var EmptyStatePropsSchema = zod.z.object({
|
|
627
|
+
title: zod.z.string().min(1),
|
|
628
|
+
description: zod.z.string().optional(),
|
|
629
|
+
action: zod.z.object({
|
|
630
|
+
label: zod.z.string().min(1),
|
|
631
|
+
variant: zod.z.enum(["primary", "secondary"]).default("primary")
|
|
632
|
+
}).optional(),
|
|
633
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
634
|
+
});
|
|
635
|
+
function validateEmptyStateProps(raw) {
|
|
636
|
+
return EmptyStatePropsSchema.parse(raw);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
// src/components/display/Skeleton.logic.ts
|
|
640
|
+
function getAnimationClass(animation) {
|
|
641
|
+
switch (animation) {
|
|
642
|
+
case "pulse":
|
|
643
|
+
return "animate-pulse";
|
|
644
|
+
case "wave":
|
|
645
|
+
return "skeleton-wave";
|
|
646
|
+
case "none":
|
|
647
|
+
return "";
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
function getVariantClass(variant) {
|
|
651
|
+
switch (variant) {
|
|
652
|
+
case "rect":
|
|
653
|
+
return "rounded-md";
|
|
654
|
+
case "circle":
|
|
655
|
+
return "rounded-full";
|
|
656
|
+
case "text":
|
|
657
|
+
return "rounded";
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
var SKELETON_BG_CLASS = "bg-gray-200 dark:bg-gray-700";
|
|
661
|
+
function textLineKey(index) {
|
|
662
|
+
return `skeleton-line-${index}`;
|
|
663
|
+
}
|
|
664
|
+
function lastLineWidth(index, total, baseWidth) {
|
|
665
|
+
if (total > 1 && index === total - 1) {
|
|
666
|
+
return "75%";
|
|
667
|
+
}
|
|
668
|
+
return baseWidth;
|
|
669
|
+
}
|
|
670
|
+
var SkeletonPropsSchema = zod.z.object({
|
|
671
|
+
variant: zod.z.enum(["rect", "circle", "text"]).default("rect"),
|
|
672
|
+
width: zod.z.union([zod.z.string().min(1), zod.z.number().positive()]).optional(),
|
|
673
|
+
height: zod.z.union([zod.z.string().min(1), zod.z.number().positive()]).optional(),
|
|
674
|
+
count: zod.z.number().int().min(1).max(20).default(1),
|
|
675
|
+
animation: zod.z.enum(["pulse", "wave", "none"]).default("pulse"),
|
|
676
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
677
|
+
});
|
|
678
|
+
function validateSkeletonProps(raw) {
|
|
679
|
+
return SkeletonPropsSchema.parse(raw);
|
|
680
|
+
}
|
|
681
|
+
function resolveSkeletonDimensions(variant, width, height) {
|
|
682
|
+
const toCss = (v, fallback) => {
|
|
683
|
+
if (v === void 0) return fallback;
|
|
684
|
+
if (typeof v === "number") return `${v}px`;
|
|
685
|
+
return v;
|
|
686
|
+
};
|
|
687
|
+
if (variant === "circle") {
|
|
688
|
+
const size = width !== void 0 ? toCss(width, "40px") : height !== void 0 ? toCss(height, "40px") : "40px";
|
|
689
|
+
return { widthCss: size, heightCss: size };
|
|
690
|
+
}
|
|
691
|
+
if (variant === "text") {
|
|
692
|
+
return {
|
|
693
|
+
widthCss: toCss(width, "100%"),
|
|
694
|
+
heightCss: toCss(height, "16px")
|
|
695
|
+
};
|
|
696
|
+
}
|
|
697
|
+
return {
|
|
698
|
+
widthCss: toCss(width, "100%"),
|
|
699
|
+
heightCss: toCss(height, "100px")
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
function SkeletonInner({ variant, width, height, count, animation, locale }) {
|
|
703
|
+
const { widthCss, heightCss } = resolveSkeletonDimensions(variant, width, height);
|
|
704
|
+
const animClass = getAnimationClass(animation);
|
|
705
|
+
const variantClass = getVariantClass(variant);
|
|
706
|
+
const ariaLabel = t("Skeleton.aria.label", locale);
|
|
707
|
+
const baseClass = `${SKELETON_BG_CLASS} ${variantClass} ${animClass}`.trim();
|
|
708
|
+
if (variant === "text") {
|
|
709
|
+
return (
|
|
710
|
+
// biome-ignore lint/a11y/useSemanticElements: role="status" is the correct ARIA pattern for loading indicators; <output> conveys form output semantics which is incorrect here
|
|
711
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { role: "status", "aria-label": ariaLabel, "aria-busy": "true", className: "flex flex-col gap-2", children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
712
|
+
"span",
|
|
713
|
+
{
|
|
714
|
+
className: `block ${baseClass}`,
|
|
715
|
+
style: {
|
|
716
|
+
width: lastLineWidth(i, count, widthCss),
|
|
717
|
+
height: heightCss
|
|
718
|
+
},
|
|
719
|
+
"aria-hidden": "true"
|
|
720
|
+
},
|
|
721
|
+
textLineKey(i)
|
|
722
|
+
)) })
|
|
723
|
+
);
|
|
724
|
+
}
|
|
725
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
726
|
+
"div",
|
|
727
|
+
{
|
|
728
|
+
role: "status",
|
|
729
|
+
"aria-label": ariaLabel,
|
|
730
|
+
"aria-busy": "true",
|
|
731
|
+
className: `block ${baseClass}`,
|
|
732
|
+
style: { width: widthCss, height: heightCss }
|
|
733
|
+
}
|
|
734
|
+
);
|
|
735
|
+
}
|
|
736
|
+
function Skeleton(raw) {
|
|
737
|
+
try {
|
|
738
|
+
const props = validateSkeletonProps(raw);
|
|
739
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SkeletonInner, { ...props });
|
|
740
|
+
} catch {
|
|
741
|
+
const locale = raw.locale === "fr" ? "fr" : "en";
|
|
742
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { role: "alert", className: "text-red-600 text-sm", children: t("Skeleton.error.invalidProps", locale) });
|
|
743
|
+
}
|
|
744
|
+
}
|
|
464
745
|
var MarkdownRendererPropsSchema = zod.z.object({
|
|
465
746
|
content: zod.z.string(),
|
|
466
747
|
locale: zod.z.enum(["en", "fr"]),
|
|
@@ -621,6 +902,26 @@ function TokenDisplayOnceModal(raw) {
|
|
|
621
902
|
return null;
|
|
622
903
|
}
|
|
623
904
|
}
|
|
905
|
+
var ToastPropsSchema = zod.z.object({
|
|
906
|
+
variant: zod.z.enum(["success", "error", "info", "warning"]),
|
|
907
|
+
title: zod.z.string().min(1),
|
|
908
|
+
description: zod.z.string().optional(),
|
|
909
|
+
duration: zod.z.number().int().nonnegative().default(5e3),
|
|
910
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
911
|
+
});
|
|
912
|
+
function validateToastProps(raw) {
|
|
913
|
+
return ToastPropsSchema.parse(raw);
|
|
914
|
+
}
|
|
915
|
+
var AlertPropsSchema = zod.z.object({
|
|
916
|
+
variant: zod.z.enum(["success", "error", "info", "warning"]),
|
|
917
|
+
title: zod.z.string().min(1),
|
|
918
|
+
description: zod.z.string().optional(),
|
|
919
|
+
dismissible: zod.z.boolean().default(false),
|
|
920
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
921
|
+
});
|
|
922
|
+
function validateAlertProps(raw) {
|
|
923
|
+
return AlertPropsSchema.parse(raw);
|
|
924
|
+
}
|
|
624
925
|
var StatusBadgePropsSchema = zod.z.object({
|
|
625
926
|
status: zod.z.string(),
|
|
626
927
|
variant: zod.z.enum(["success", "warning", "danger", "info", "neutral"]).default("neutral"),
|
|
@@ -745,8 +1046,10 @@ function createMosaicResource(componentName, props, locale = "en") {
|
|
|
745
1046
|
}
|
|
746
1047
|
var MOSAIC_SUPPORTED_COMPONENTS = COMPONENT_KEYS;
|
|
747
1048
|
|
|
1049
|
+
exports.AlertPropsSchema = AlertPropsSchema;
|
|
748
1050
|
exports.ConfirmDialog = ConfirmDialog;
|
|
749
1051
|
exports.ConfirmDialogPropsSchema = ConfirmDialogPropsSchema;
|
|
1052
|
+
exports.EmptyStatePropsSchema = EmptyStatePropsSchema;
|
|
750
1053
|
exports.MCP_UI_CAPABILITY_KEY = MCP_UI_CAPABILITY_KEY;
|
|
751
1054
|
exports.MOSAIC_MIME_TYPE = MOSAIC_MIME_TYPE;
|
|
752
1055
|
exports.MOSAIC_STREAM_CHUNK_TYPE = MOSAIC_STREAM_CHUNK_TYPE;
|
|
@@ -755,21 +1058,31 @@ exports.MarkdownRenderer = MarkdownRenderer;
|
|
|
755
1058
|
exports.MarkdownRendererPropsSchema = MarkdownRendererPropsSchema;
|
|
756
1059
|
exports.ProgressBar = ProgressBar;
|
|
757
1060
|
exports.ProgressBarPropsSchema = ProgressBarPropsSchema;
|
|
1061
|
+
exports.Skeleton = Skeleton;
|
|
1062
|
+
exports.SkeletonPropsSchema = SkeletonPropsSchema;
|
|
758
1063
|
exports.StatusBadge = StatusBadge;
|
|
759
1064
|
exports.StatusBadgePropsSchema = StatusBadgePropsSchema;
|
|
760
1065
|
exports.StreamingTableView = StreamingTableView;
|
|
761
1066
|
exports.TableView = TableView;
|
|
762
1067
|
exports.TableViewPropsSchema = TableViewPropsSchema;
|
|
1068
|
+
exports.TabsPropsSchema = TabsPropsSchema;
|
|
1069
|
+
exports.ToastPropsSchema = ToastPropsSchema;
|
|
763
1070
|
exports.TokenDisplayOnceModal = TokenDisplayOnceModal;
|
|
764
1071
|
exports.TokenDisplayOnceModalPropsSchema = TokenDisplayOnceModalPropsSchema;
|
|
765
1072
|
exports.createMosaicResource = createMosaicResource;
|
|
766
1073
|
exports.createPostMessageObservable = createPostMessageObservable;
|
|
1074
|
+
exports.resolveSkeletonDimensions = resolveSkeletonDimensions;
|
|
767
1075
|
exports.useStreamingHydration = useStreamingHydration;
|
|
1076
|
+
exports.validateAlertProps = validateAlertProps;
|
|
768
1077
|
exports.validateConfirmDialogProps = validateConfirmDialogProps;
|
|
1078
|
+
exports.validateEmptyStateProps = validateEmptyStateProps;
|
|
769
1079
|
exports.validateMarkdownRendererProps = validateProps2;
|
|
770
1080
|
exports.validateProps = validateProps;
|
|
1081
|
+
exports.validateSkeletonProps = validateSkeletonProps;
|
|
771
1082
|
exports.validateStatusBadgeProps = validateProps3;
|
|
772
1083
|
exports.validateTableViewProps = validateTableViewProps;
|
|
1084
|
+
exports.validateTabsProps = validateTabsProps;
|
|
1085
|
+
exports.validateToastProps = validateToastProps;
|
|
773
1086
|
exports.validateTokenDisplayOnceModalProps = validateTokenDisplayOnceModalProps;
|
|
774
1087
|
//# sourceMappingURL=index.cjs.map
|
|
775
1088
|
//# sourceMappingURL=index.cjs.map
|