@vantageos/mosaic 0.2.1 → 0.3.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -0
- package/dist/Alert.schema-BQsZGG6P.d.cts +41 -0
- package/dist/Alert.schema-BQsZGG6P.d.ts +41 -0
- package/dist/ConfirmDialog-B3CQQGmJ.d.cts +34 -0
- package/dist/ConfirmDialog-B3CQQGmJ.d.ts +34 -0
- package/dist/Skeleton.schema-BO0ca2UX.d.cts +135 -0
- package/dist/Skeleton.schema-BO0ca2UX.d.ts +135 -0
- package/dist/Tabs.schema-BzcEyeq8.d.cts +79 -0
- package/dist/Tabs.schema-BzcEyeq8.d.ts +79 -0
- package/dist/artifacts.cjs +20 -2
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +20 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/confirmation.cjs +44 -2
- package/dist/confirmation.cjs.map +1 -1
- package/dist/confirmation.d.cts +34 -1
- package/dist/confirmation.d.ts +34 -1
- package/dist/confirmation.js +41 -3
- package/dist/confirmation.js.map +1 -1
- package/dist/display.cjs +145 -2
- package/dist/display.cjs.map +1 -1
- package/dist/display.d.cts +1 -0
- package/dist/display.d.ts +1 -0
- package/dist/display.js +140 -3
- package/dist/display.js.map +1 -1
- package/dist/forms.cjs +1412 -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 +1331 -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 +188 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +177 -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 +20 -2
- package/dist/media.cjs.map +1 -1
- package/dist/media.js +20 -2
- package/dist/media.js.map +1 -1
- package/dist/preact/artifacts.d.ts +2 -0
- package/dist/preact/confirmation.d.ts +86 -0
- package/dist/preact/confirmation.js +263 -0
- package/dist/preact/confirmation.js.map +1 -1
- package/dist/preact/display.d.ts +241 -0
- package/dist/preact/display.js +366 -0
- package/dist/preact/display.js.map +1 -1
- package/dist/preact/forms.d.ts +875 -0
- package/dist/preact/forms.js +1323 -0
- package/dist/preact/forms.js.map +1 -0
- package/dist/preact/index.d.ts +2 -0
- package/dist/preact/input.d.ts +89 -0
- package/dist/preact/input.js +194 -0
- package/dist/preact/input.js.map +1 -1
- package/dist/preact/media.d.ts +2 -0
- package/dist/preact/progress.d.ts +2 -0
- package/dist/progress.cjs +20 -2
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.js +20 -2
- package/dist/progress.js.map +1 -1
- package/dist/react/confirmation.cjs +267 -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 +263 -0
- package/dist/react/confirmation.js.map +1 -1
- package/dist/react/display.cjs +372 -0
- package/dist/react/display.cjs.map +1 -1
- package/dist/react/display.d.cts +112 -1
- package/dist/react/display.d.ts +112 -1
- package/dist/react/display.js +362 -0
- package/dist/react/display.js.map +1 -1
- package/dist/react/forms.cjs +1384 -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 +1323 -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/tokens.d.cts +35 -0
- package/dist/tokens.d.ts +35 -0
- package/package.json +74 -49
- package/registry.yaml +154 -1
package/dist/input.cjs
CHANGED
|
@@ -94,9 +94,28 @@ function ConfirmDialog(raw) {
|
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
+
var TabItemSchema = zod.z.object({
|
|
98
|
+
id: zod.z.string().min(1),
|
|
99
|
+
label: zod.z.string().min(1),
|
|
100
|
+
/** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */
|
|
101
|
+
content: zod.z.unknown(),
|
|
102
|
+
disabled: zod.z.boolean().optional().default(false)
|
|
103
|
+
});
|
|
104
|
+
var TabsPropsSchema = zod.z.object({
|
|
105
|
+
tabs: zod.z.array(TabItemSchema).min(1),
|
|
106
|
+
value: zod.z.string().optional(),
|
|
107
|
+
defaultValue: zod.z.string().optional(),
|
|
108
|
+
orientation: zod.z.enum(["horizontal", "vertical"]).default("horizontal"),
|
|
109
|
+
locale: zod.z.enum(["en", "fr"]).default("en")
|
|
110
|
+
});
|
|
111
|
+
function validateTabsProps(raw) {
|
|
112
|
+
return TabsPropsSchema.parse(raw);
|
|
113
|
+
}
|
|
97
114
|
|
|
98
115
|
exports.ConfirmDialog = ConfirmDialog;
|
|
99
116
|
exports.ConfirmDialogPropsSchema = ConfirmDialogPropsSchema;
|
|
117
|
+
exports.TabsPropsSchema = TabsPropsSchema;
|
|
100
118
|
exports.validateConfirmDialogProps = validateConfirmDialogProps;
|
|
119
|
+
exports.validateTabsProps = validateTabsProps;
|
|
101
120
|
//# sourceMappingURL=input.cjs.map
|
|
102
121
|
//# sourceMappingURL=input.cjs.map
|
package/dist/input.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx"],"names":["z","useRef","useId","useEffect","jsx","jsxs"],"mappings":"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","file":"input.cjs","sourcesContent":["import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx","../src/components/input/Tabs.schema.ts"],"names":["z","useRef","useId","useEffect","jsx","jsxs"],"mappings":"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","file":"input.cjs","sourcesContent":["import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Tabs.error.invalidProps\n\n/**\n * Tabs component props schema.\n *\n * Supports controlled (value + onValueChange) and uncontrolled (defaultValue) modes.\n * orientation — \"horizontal\" (default) or \"vertical\" — affects ArrowLeft/Right vs ArrowUp/Down nav.\n * tabs — ordered list of tab descriptors (id must be unique within the instance).\n */\nexport const TabItemSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n /** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */\n content: z.unknown(),\n disabled: z.boolean().optional().default(false),\n});\n\nexport type TabItem = z.infer<typeof TabItemSchema>;\n\nexport const TabsPropsSchema = z.object({\n tabs: z.array(TabItemSchema).min(1),\n value: z.string().optional(),\n defaultValue: z.string().optional(),\n orientation: z.enum([\"horizontal\", \"vertical\"]).default(\"horizontal\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\n/** Runtime props — onValueChange is a function (not serialisable via Zod, kept outside schema). */\nexport type TabsProps = z.infer<typeof TabsPropsSchema> & {\n onValueChange?: (id: string) => void;\n};\n\nexport function validateTabsProps(raw: unknown): z.infer<typeof TabsPropsSchema> {\n return TabsPropsSchema.parse(raw);\n}\n"]}
|
package/dist/input.d.cts
CHANGED
|
@@ -1,34 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
title: z.ZodString;
|
|
6
|
-
message: z.ZodString;
|
|
7
|
-
confirmLabel: z.ZodString;
|
|
8
|
-
cancelLabel: z.ZodString;
|
|
9
|
-
variant: z.ZodDefault<z.ZodEnum<["default", "danger"]>>;
|
|
10
|
-
locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
|
|
11
|
-
}, "strip", z.ZodTypeAny, {
|
|
12
|
-
locale: "en" | "fr";
|
|
13
|
-
message: string;
|
|
14
|
-
title: string;
|
|
15
|
-
confirmLabel: string;
|
|
16
|
-
cancelLabel: string;
|
|
17
|
-
variant: "default" | "danger";
|
|
18
|
-
}, {
|
|
19
|
-
message: string;
|
|
20
|
-
title: string;
|
|
21
|
-
confirmLabel: string;
|
|
22
|
-
cancelLabel: string;
|
|
23
|
-
locale?: "en" | "fr" | undefined;
|
|
24
|
-
variant?: "default" | "danger" | undefined;
|
|
25
|
-
}>;
|
|
26
|
-
type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {
|
|
27
|
-
onConfirm: () => void;
|
|
28
|
-
onCancel: () => void;
|
|
29
|
-
};
|
|
30
|
-
declare function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema>;
|
|
31
|
-
|
|
32
|
-
declare function ConfirmDialog(raw: Omit<ConfirmDialogProps, "variant" | "locale"> & Partial<Pick<ConfirmDialogProps, "variant" | "locale">>): react_jsx_runtime.JSX.Element | null;
|
|
33
|
-
|
|
34
|
-
export { ConfirmDialog, type ConfirmDialogProps, ConfirmDialogPropsSchema, validateConfirmDialogProps };
|
|
1
|
+
export { C as ConfirmDialog, a as ConfirmDialogProps, b as ConfirmDialogPropsSchema, v as validateConfirmDialogProps } from './ConfirmDialog-B3CQQGmJ.cjs';
|
|
2
|
+
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from './Tabs.schema-BzcEyeq8.cjs';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'zod';
|
package/dist/input.d.ts
CHANGED
|
@@ -1,34 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
title: z.ZodString;
|
|
6
|
-
message: z.ZodString;
|
|
7
|
-
confirmLabel: z.ZodString;
|
|
8
|
-
cancelLabel: z.ZodString;
|
|
9
|
-
variant: z.ZodDefault<z.ZodEnum<["default", "danger"]>>;
|
|
10
|
-
locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
|
|
11
|
-
}, "strip", z.ZodTypeAny, {
|
|
12
|
-
locale: "en" | "fr";
|
|
13
|
-
message: string;
|
|
14
|
-
title: string;
|
|
15
|
-
confirmLabel: string;
|
|
16
|
-
cancelLabel: string;
|
|
17
|
-
variant: "default" | "danger";
|
|
18
|
-
}, {
|
|
19
|
-
message: string;
|
|
20
|
-
title: string;
|
|
21
|
-
confirmLabel: string;
|
|
22
|
-
cancelLabel: string;
|
|
23
|
-
locale?: "en" | "fr" | undefined;
|
|
24
|
-
variant?: "default" | "danger" | undefined;
|
|
25
|
-
}>;
|
|
26
|
-
type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {
|
|
27
|
-
onConfirm: () => void;
|
|
28
|
-
onCancel: () => void;
|
|
29
|
-
};
|
|
30
|
-
declare function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema>;
|
|
31
|
-
|
|
32
|
-
declare function ConfirmDialog(raw: Omit<ConfirmDialogProps, "variant" | "locale"> & Partial<Pick<ConfirmDialogProps, "variant" | "locale">>): react_jsx_runtime.JSX.Element | null;
|
|
33
|
-
|
|
34
|
-
export { ConfirmDialog, type ConfirmDialogProps, ConfirmDialogPropsSchema, validateConfirmDialogProps };
|
|
1
|
+
export { C as ConfirmDialog, a as ConfirmDialogProps, b as ConfirmDialogPropsSchema, v as validateConfirmDialogProps } from './ConfirmDialog-B3CQQGmJ.js';
|
|
2
|
+
export { T as TabItem, a as TabsProps, b as TabsPropsSchema, v as validateTabsProps } from './Tabs.schema-BzcEyeq8.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'zod';
|
package/dist/input.js
CHANGED
|
@@ -92,7 +92,24 @@ function ConfirmDialog(raw) {
|
|
|
92
92
|
return null;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
+
var TabItemSchema = z.object({
|
|
96
|
+
id: z.string().min(1),
|
|
97
|
+
label: z.string().min(1),
|
|
98
|
+
/** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */
|
|
99
|
+
content: z.unknown(),
|
|
100
|
+
disabled: z.boolean().optional().default(false)
|
|
101
|
+
});
|
|
102
|
+
var TabsPropsSchema = z.object({
|
|
103
|
+
tabs: z.array(TabItemSchema).min(1),
|
|
104
|
+
value: z.string().optional(),
|
|
105
|
+
defaultValue: z.string().optional(),
|
|
106
|
+
orientation: z.enum(["horizontal", "vertical"]).default("horizontal"),
|
|
107
|
+
locale: z.enum(["en", "fr"]).default("en")
|
|
108
|
+
});
|
|
109
|
+
function validateTabsProps(raw) {
|
|
110
|
+
return TabsPropsSchema.parse(raw);
|
|
111
|
+
}
|
|
95
112
|
|
|
96
|
-
export { ConfirmDialog, ConfirmDialogPropsSchema, validateConfirmDialogProps };
|
|
113
|
+
export { ConfirmDialog, ConfirmDialogPropsSchema, TabsPropsSchema, validateConfirmDialogProps, validateTabsProps };
|
|
97
114
|
//# sourceMappingURL=input.js.map
|
|
98
115
|
//# sourceMappingURL=input.js.map
|
package/dist/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx"],"names":[],"mappings":";;;;;AAIO,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACzB,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC9B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,OAAA,EAAS,EAAE,IAAA,CAAK,CAAC,WAAW,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACxD,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,MAAM,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAI;AAC3C,CAAC;AAOM,SAAS,2BAA2B,GAAA,EAAwD;AACjG,EAAA,OAAO,wBAAA,CAAyB,MAAM,GAAG,CAAA;AAC3C;ACbA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,SAAA,GAAY,OAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,UAAU,KAAA,EAAM;AACtB,EAAA,MAAM,YAAY,KAAA,EAAM;AAExB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AAEzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAA,CAAO,SAAA,EAAU;AACjB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAA,EAAM;AAAA,IAChC,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAS,cAAc,CAAA,EAAqC;AAC1D,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF;AAEA,EAAA,SAAS,oBAAoB,CAAA,EAAkC;AAC7D,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,SAAA,CAAU,OAAA,EAAS;AAClC,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GACJ,OAAA,KAAY,QAAA,GACR,8MAAA,GACA,iNAAA;AAEN,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAW,MAAA;AAAA,MACX,iBAAA,EAAiB,OAAA;AAAA,MACjB,kBAAA,EAAkB,SAAA;AAAA,MAClB,SAAA,EAAW,aAAA;AAAA,MACX,OAAA,EAAS,mBAAA;AAAA,MACT,SAAA,EAAU,uEAAA;AAAA,MAGV,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,yBAAA;AAAA,UACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAClC,SAAA,EAAW,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAEpC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,uCACxB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gCACC,GAAA,EAAA,EAAE,EAAA,EAAI,SAAA,EAAW,SAAA,EAAU,yBACzB,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,QAAA;AAAA,kBACT,SAAA,EAAU,wMAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BACA,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAS,SAAA,EAAW,SAAA,EAAW,kBAClD,QAAA,EAAA,YAAA,EACH;AAAA,aAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AAEO,SAAS,cACd,GAAA,EAEA;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,2BAA2B,GAAG,CAAA;AAC7C,IAAA,uBAAO,GAAA,CAAC,sBAAoB,GAAG,MAAA,EAAQ,WAAW,GAAA,CAAI,SAAA,EAAW,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,CAAA;AAAA,EAC3F,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,mEAA8D,GAAG,CAAA;AAC/E,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"input.js","sourcesContent":["import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/input/ConfirmDialog.schema.ts","../src/components/input/ConfirmDialog.tsx","../src/components/input/Tabs.schema.ts"],"names":["z"],"mappings":"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","file":"input.js","sourcesContent":["import { z } from \"zod\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nexport const ConfirmDialogPropsSchema = z.object({\n title: z.string().min(1),\n message: z.string().min(1),\n confirmLabel: z.string().min(1),\n cancelLabel: z.string().min(1),\n variant: z.enum([\"default\", \"danger\"]).default(\"default\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\nexport type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function validateConfirmDialogProps(raw: unknown): z.infer<typeof ConfirmDialogPropsSchema> {\n return ConfirmDialogPropsSchema.parse(raw);\n}\n","\"use client\";\n\n// i18nKeys: ConfirmDialog.button.confirm, ConfirmDialog.button.cancel, ConfirmDialog.aria.dialog\n\nimport { type KeyboardEvent, type MouseEvent, useEffect, useId, useRef } from \"react\";\nimport { type ConfirmDialogProps, validateConfirmDialogProps } from \"./ConfirmDialog.schema\";\n\nfunction ConfirmDialogInner({\n title,\n message,\n confirmLabel,\n cancelLabel,\n variant,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const messageId = useId();\n\n useEffect(() => {\n const dialog = dialogRef.current;\n /* v8 ignore next 2 */\n if (!dialog) return;\n dialog.showModal();\n return () => {\n if (dialog.open) dialog.close();\n };\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDialogElement>) {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }\n\n function handleBackdropClick(e: MouseEvent<HTMLDialogElement>) {\n if (e.target === dialogRef.current) {\n onCancel();\n }\n }\n\n const confirmClassName =\n variant === \"danger\"\n ? \"bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n : \"bg-gray-900 text-white hover:bg-gray-700 focus-visible:outline-gray-900 px-4 py-2 rounded-md text-sm font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\";\n\n return (\n <dialog\n ref={dialogRef}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n onKeyDown={handleKeyDown}\n onClick={handleBackdropClick}\n className=\"rounded-lg shadow-xl p-0 backdrop:bg-black/40 w-full max-w-md mx-auto\"\n >\n {/* Inner div stops click propagation so backdrop-click only fires on <dialog> itself */}\n <div\n className=\"p-6 flex flex-col gap-4\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <h2 id={titleId} className=\"text-lg font-semibold text-gray-900\">\n {title}\n </h2>\n <p id={messageId} className=\"text-sm text-gray-600\">\n {message}\n </p>\n <div className=\"flex justify-end gap-3 mt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400 transition-colors\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" onClick={onConfirm} className={confirmClassName}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </dialog>\n );\n}\n\nexport function ConfirmDialog(\n raw: Omit<ConfirmDialogProps, \"variant\" | \"locale\"> &\n Partial<Pick<ConfirmDialogProps, \"variant\" | \"locale\">>,\n) {\n try {\n const parsed = validateConfirmDialogProps(raw);\n return <ConfirmDialogInner {...parsed} onConfirm={raw.onConfirm} onCancel={raw.onCancel} />;\n } catch (err) {\n console.error(\"[ConfirmDialog] Invalid props — component will not render.\", err);\n return null;\n }\n}\n","import { z } from \"zod\";\n\n// i18nKeys: Tabs.error.invalidProps\n\n/**\n * Tabs component props schema.\n *\n * Supports controlled (value + onValueChange) and uncontrolled (defaultValue) modes.\n * orientation — \"horizontal\" (default) or \"vertical\" — affects ArrowLeft/Right vs ArrowUp/Down nav.\n * tabs — ordered list of tab descriptors (id must be unique within the instance).\n */\nexport const TabItemSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n /** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */\n content: z.unknown(),\n disabled: z.boolean().optional().default(false),\n});\n\nexport type TabItem = z.infer<typeof TabItemSchema>;\n\nexport const TabsPropsSchema = z.object({\n tabs: z.array(TabItemSchema).min(1),\n value: z.string().optional(),\n defaultValue: z.string().optional(),\n orientation: z.enum([\"horizontal\", \"vertical\"]).default(\"horizontal\"),\n locale: z.enum([\"en\", \"fr\"]).default(\"en\"),\n});\n\n/** Runtime props — onValueChange is a function (not serialisable via Zod, kept outside schema). */\nexport type TabsProps = z.infer<typeof TabsPropsSchema> & {\n onValueChange?: (id: string) => void;\n};\n\nexport function validateTabsProps(raw: unknown): z.infer<typeof TabsPropsSchema> {\n return TabsPropsSchema.parse(raw);\n}\n"]}
|
package/dist/media.cjs
CHANGED
|
@@ -23,7 +23,16 @@ var EN = {
|
|
|
23
23
|
"TokenDisplayOnceModal.warning.once": "This token will only be shown once. Copy it now.",
|
|
24
24
|
"TokenDisplayOnceModal.copied": "Copied",
|
|
25
25
|
"StatusBadge.aria.status": "Status",
|
|
26
|
-
"StatusBadge.error.invalidProps": "StatusBadge: invalid props"
|
|
26
|
+
"StatusBadge.error.invalidProps": "StatusBadge: invalid props",
|
|
27
|
+
"EmptyState.error.invalidProps": "EmptyState: invalid props",
|
|
28
|
+
"Toast.aria.close": "Close notification",
|
|
29
|
+
"Toast.error.invalidProps": "Toast: invalid props",
|
|
30
|
+
"Alert.aria.dismiss": "Dismiss alert",
|
|
31
|
+
"Alert.error.invalidProps": "Alert: invalid props",
|
|
32
|
+
"VirtualList.empty.message": "No items to display",
|
|
33
|
+
"VirtualList.error.invalidProps": "VirtualList: invalid props",
|
|
34
|
+
"Skeleton.aria.label": "Loading",
|
|
35
|
+
"Skeleton.error.invalidProps": "Skeleton: invalid props"
|
|
27
36
|
};
|
|
28
37
|
var FR = {
|
|
29
38
|
"ProgressBar.aria.label": "Progression",
|
|
@@ -44,7 +53,16 @@ var FR = {
|
|
|
44
53
|
"TokenDisplayOnceModal.warning.once": "Ce jeton ne sera affich\xE9 qu'une seule fois. Copiez-le maintenant.",
|
|
45
54
|
"TokenDisplayOnceModal.copied": "Copi\xE9",
|
|
46
55
|
"StatusBadge.aria.status": "Statut",
|
|
47
|
-
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides"
|
|
56
|
+
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides",
|
|
57
|
+
"EmptyState.error.invalidProps": "EmptyState : propri\xE9t\xE9s invalides",
|
|
58
|
+
"Toast.aria.close": "Fermer la notification",
|
|
59
|
+
"Toast.error.invalidProps": "Toast : propri\xE9t\xE9s invalides",
|
|
60
|
+
"Alert.aria.dismiss": "Fermer l'alerte",
|
|
61
|
+
"Alert.error.invalidProps": "Alert : propri\xE9t\xE9s invalides",
|
|
62
|
+
"VirtualList.empty.message": "Aucun \xE9l\xE9ment \xE0 afficher",
|
|
63
|
+
"VirtualList.error.invalidProps": "VirtualList : propri\xE9t\xE9s invalides",
|
|
64
|
+
"Skeleton.aria.label": "Chargement",
|
|
65
|
+
"Skeleton.error.invalidProps": "Skeleton : propri\xE9t\xE9s invalides"
|
|
48
66
|
};
|
|
49
67
|
var TABLE = {
|
|
50
68
|
en: EN,
|
package/dist/media.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx"],"names":["z","jsx"],"mappings":"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","file":"media.cjs","sourcesContent":["/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for the 6\n * v0.1.0 components. Inlined here so that `<Comp>` renderers can resolve\n * `t(key, locale)` without dragging react-i18next into the component runtime\n * (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","// i18nKeys: StatusBadge.aria.status, StatusBadge.error.invalidProps\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\n\ntype Variant = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n success: \"bg-green-100 text-green-800 ring-1 ring-green-300\",\n warning: \"bg-amber-100 text-amber-800 ring-1 ring-amber-300\",\n danger: \"bg-red-100 text-red-800 ring-1 ring-red-300\",\n info: \"bg-blue-100 text-blue-800 ring-1 ring-blue-300\",\n neutral: \"bg-slate-100 text-slate-800 ring-1 ring-slate-300\",\n};\n\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\n const ariaLabel = label ?? status;\n return (\n <output\n aria-label={ariaLabel}\n lang={locale}\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {label ?? status}\n </output>\n );\n}\n\n/**\n * StatusBadge accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function StatusBadge(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <StatusBadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"StatusBadge.error.invalidProps\", locale)}</span>;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx"],"names":["z","jsx"],"mappings":";;;;;;AAaA,IAAM,EAAA,GAAK;AAAA,EACT,wBAAA,EAA0B,UAAA;AAAA,EAC1B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,8BAAA,EAAgC,SAAA;AAAA,EAChC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,sBAAA,EAAwB,YAAA;AAAA,EACxB,2BAAA,EAA6B,WAAA;AAAA,EAC7B,2BAAA,EAA6B,eAAA;AAAA,EAC7B,yBAAA,EAA2B,oBAAA;AAAA,EAC3B,8BAAA,EAAgC,0BAAA;AAAA,EAChC,+BAAA,EAAiC,2BAAA;AAAA,EACjC,qCAAA,EAAuC,iCAAA;AAAA,EACvC,gCAAA,EAAkC,gCAAA;AAAA,EAClC,mCAAA,EAAqC,YAAA;AAAA,EACrC,oCAAA,EAAsC,OAAA;AAAA,EACtC,oCAAA,EAAsC,kDAAA;AAAA,EACtC,8BAAA,EAAgC,QAAA;AAAA,EAChC,yBAAA,EAA2B,QAAA;AAAA,EAC3B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,+BAAA,EAAiC,2BAAA;AAAA,EACjC,kBAAA,EAAoB,oBAAA;AAAA,EACpB,0BAAA,EAA4B,sBAAA;AAAA,EAC5B,oBAAA,EAAsB,eAAA;AAAA,EACtB,0BAAA,EAA4B,sBAAA;AAAA,EAC5B,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,qBAAA,EAAuB,SAAA;AAAA,EACvB,6BAAA,EAA+B;AACjC,CAAA;AAEA,IAAM,EAAA,GAAsC;AAAA,EAC1C,wBAAA,EAA0B,aAAA;AAAA,EAC1B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,8BAAA,EAAgC,WAAA;AAAA,EAChC,6BAAA,EAA+B,SAAA;AAAA,EAC/B,2BAAA,EAA6B,sCAAA;AAAA,EAC7B,sBAAA,EAAwB,uBAAA;AAAA,EACxB,2BAAA,EAA6B,eAAA;AAAA,EAC7B,2BAAA,EAA6B,uBAAA;AAAA,EAC7B,yBAAA,EAA2B,gCAAA;AAAA,EAC3B,8BAAA,EAAgC,wCAAA;AAAA,EAChC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,qCAAA,EAAuC,+CAAA;AAAA,EACvC,gCAAA,EAAkC,4CAAA;AAAA,EAClC,mCAAA,EAAqC,iBAAA;AAAA,EACrC,oCAAA,EAAsC,QAAA;AAAA,EACtC,oCAAA,EACE,sEAAA;AAAA,EACF,8BAAA,EAAgC,UAAA;AAAA,EAChC,yBAAA,EAA2B,QAAA;AAAA,EAC3B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,+BAAA,EAAiC,yCAAA;AAAA,EACjC,kBAAA,EAAoB,wBAAA;AAAA,EACpB,0BAAA,EAA4B,oCAAA;AAAA,EAC5B,oBAAA,EAAsB,iBAAA;AAAA,EACtB,0BAAA,EAA4B,oCAAA;AAAA,EAC5B,2BAAA,EAA6B,mCAAA;AAAA,EAC7B,gCAAA,EAAkC,0CAAA;AAAA,EAClC,qBAAA,EAAuB,YAAA;AAAA,EACvB,6BAAA,EAA+B;AACjC,CAAA;AAIA,IAAM,KAAA,GAA6D;AAAA,EACjE,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAGO,SAAS,CAAA,CAAE,GAAA,EAAoB,MAAA,GAAuB,IAAA,EAAc;AACzE,EAAA,OAAO,MAAM,MAAM,CAAA,GAAI,GAAG,CAAA,IAAK,KAAA,CAAM,GAAG,GAAG,CAAA;AAC7C;ACpFO,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAASA,KAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACtF,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAQA,KAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,IAAI,CAAC;AAC7B,CAAC;AAIM,SAAS,cAAc,GAAA,EAAgC;AAC5D,EAAA,OAAO,sBAAA,CAAuB,MAAM,GAAG,CAAA;AACzC;ACNA,IAAM,cAAA,GAA0C;AAAA,EAC9C,OAAA,EAAS,mDAAA;AAAA,EACT,OAAA,EAAS,mDAAA;AAAA,EACT,MAAA,EAAQ,6CAAA;AAAA,EACR,IAAA,EAAM,gDAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AASA,SAAS,iBAAiB,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,QAAO,EAA0B;AACnF,EAAA,MAAM,YAAY,KAAA,IAAS,MAAA;AAC3B,EAAA,uBACEC,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,EAAW,CAAA,wEAAA,EAA2E,cAAA,CAAe,OAAO,CAAC,CAAA,CAAA;AAAA,MAE5G,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA,GACZ;AAEJ;AAMO,SAAS,YAAY,GAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,cAAc,GAAG,CAAA;AAC/B,IAAA,uBAAOA,cAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,GAAuB,GAAA,CAAI,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,IAAA;AAC1D,IAAA,sCAAQ,MAAA,EAAA,EAAK,IAAA,EAAK,SAAS,QAAA,EAAA,CAAA,CAAE,gCAAA,EAAkC,MAAM,CAAA,EAAE,CAAA;AAAA,EACzE;AACF","file":"media.cjs","sourcesContent":["/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for the 6\n * v0.1.0 components. Inlined here so that `<Comp>` renderers can resolve\n * `t(key, locale)` without dragging react-i18next into the component runtime\n * (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","// i18nKeys: StatusBadge.aria.status, StatusBadge.error.invalidProps\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\n\ntype Variant = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n success: \"bg-green-100 text-green-800 ring-1 ring-green-300\",\n warning: \"bg-amber-100 text-amber-800 ring-1 ring-amber-300\",\n danger: \"bg-red-100 text-red-800 ring-1 ring-red-300\",\n info: \"bg-blue-100 text-blue-800 ring-1 ring-blue-300\",\n neutral: \"bg-slate-100 text-slate-800 ring-1 ring-slate-300\",\n};\n\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\n const ariaLabel = label ?? status;\n return (\n <output\n aria-label={ariaLabel}\n lang={locale}\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {label ?? status}\n </output>\n );\n}\n\n/**\n * StatusBadge accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function StatusBadge(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <StatusBadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"StatusBadge.error.invalidProps\", locale)}</span>;\n }\n}\n"]}
|
package/dist/media.js
CHANGED
|
@@ -21,7 +21,16 @@ var EN = {
|
|
|
21
21
|
"TokenDisplayOnceModal.warning.once": "This token will only be shown once. Copy it now.",
|
|
22
22
|
"TokenDisplayOnceModal.copied": "Copied",
|
|
23
23
|
"StatusBadge.aria.status": "Status",
|
|
24
|
-
"StatusBadge.error.invalidProps": "StatusBadge: invalid props"
|
|
24
|
+
"StatusBadge.error.invalidProps": "StatusBadge: invalid props",
|
|
25
|
+
"EmptyState.error.invalidProps": "EmptyState: invalid props",
|
|
26
|
+
"Toast.aria.close": "Close notification",
|
|
27
|
+
"Toast.error.invalidProps": "Toast: invalid props",
|
|
28
|
+
"Alert.aria.dismiss": "Dismiss alert",
|
|
29
|
+
"Alert.error.invalidProps": "Alert: invalid props",
|
|
30
|
+
"VirtualList.empty.message": "No items to display",
|
|
31
|
+
"VirtualList.error.invalidProps": "VirtualList: invalid props",
|
|
32
|
+
"Skeleton.aria.label": "Loading",
|
|
33
|
+
"Skeleton.error.invalidProps": "Skeleton: invalid props"
|
|
25
34
|
};
|
|
26
35
|
var FR = {
|
|
27
36
|
"ProgressBar.aria.label": "Progression",
|
|
@@ -42,7 +51,16 @@ var FR = {
|
|
|
42
51
|
"TokenDisplayOnceModal.warning.once": "Ce jeton ne sera affich\xE9 qu'une seule fois. Copiez-le maintenant.",
|
|
43
52
|
"TokenDisplayOnceModal.copied": "Copi\xE9",
|
|
44
53
|
"StatusBadge.aria.status": "Statut",
|
|
45
|
-
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides"
|
|
54
|
+
"StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides",
|
|
55
|
+
"EmptyState.error.invalidProps": "EmptyState : propri\xE9t\xE9s invalides",
|
|
56
|
+
"Toast.aria.close": "Fermer la notification",
|
|
57
|
+
"Toast.error.invalidProps": "Toast : propri\xE9t\xE9s invalides",
|
|
58
|
+
"Alert.aria.dismiss": "Fermer l'alerte",
|
|
59
|
+
"Alert.error.invalidProps": "Alert : propri\xE9t\xE9s invalides",
|
|
60
|
+
"VirtualList.empty.message": "Aucun \xE9l\xE9ment \xE0 afficher",
|
|
61
|
+
"VirtualList.error.invalidProps": "VirtualList : propri\xE9t\xE9s invalides",
|
|
62
|
+
"Skeleton.aria.label": "Chargement",
|
|
63
|
+
"Skeleton.error.invalidProps": "Skeleton : propri\xE9t\xE9s invalides"
|
|
46
64
|
};
|
|
47
65
|
var TABLE = {
|
|
48
66
|
en: EN,
|
package/dist/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx"],"names":[],"mappings":"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","file":"media.js","sourcesContent":["/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for the 6\n * v0.1.0 components. Inlined here so that `<Comp>` renderers can resolve\n * `t(key, locale)` without dragging react-i18next into the component runtime\n * (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","// i18nKeys: StatusBadge.aria.status, StatusBadge.error.invalidProps\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\n\ntype Variant = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n success: \"bg-green-100 text-green-800 ring-1 ring-green-300\",\n warning: \"bg-amber-100 text-amber-800 ring-1 ring-amber-300\",\n danger: \"bg-red-100 text-red-800 ring-1 ring-red-300\",\n info: \"bg-blue-100 text-blue-800 ring-1 ring-blue-300\",\n neutral: \"bg-slate-100 text-slate-800 ring-1 ring-slate-300\",\n};\n\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\n const ariaLabel = label ?? status;\n return (\n <output\n aria-label={ariaLabel}\n lang={locale}\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {label ?? status}\n </output>\n );\n}\n\n/**\n * StatusBadge accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function StatusBadge(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <StatusBadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"StatusBadge.error.invalidProps\", locale)}</span>;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/strings.ts","../src/components/media/StatusBadge.schema.ts","../src/components/media/StatusBadge.tsx"],"names":[],"mappings":"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","file":"media.js","sourcesContent":["/**\n * Compile-time mirror of `@vantageos/mosaic-i18n` EN/FR locales for the 6\n * v0.1.0 components. Inlined here so that `<Comp>` renderers can resolve\n * `t(key, locale)` without dragging react-i18next into the component runtime\n * (keeps bundle small and tests provider-free). Drift is gated by\n * `mosaic-registry-drift-check.mjs` which validates the canonical\n * `packages/mosaic-i18n/src/locales/{en,fr}.json` against `registry.yaml`.\n *\n * Mosaic standard §8: production JSX MUST resolve user-facing strings via\n * `t()` — no hardcoded English literals.\n */\nexport type MosaicLocale = \"en\" | \"fr\";\n\nconst EN = {\n \"ProgressBar.aria.label\": \"Progress\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar: invalid props\",\n \"ConfirmDialog.button.confirm\": \"Confirm\",\n \"ConfirmDialog.button.cancel\": \"Cancel\",\n \"ConfirmDialog.aria.dialog\": \"Confirmation dialog\",\n \"TableView.aria.table\": \"Data table\",\n \"TableView.pagination.next\": \"Next page\",\n \"TableView.pagination.prev\": \"Previous page\",\n \"TableView.empty.message\": \"No data to display\",\n \"TableView.error.invalidProps\": \"TableView: invalid props\",\n \"MarkdownRenderer.aria.content\": \"Rendered Markdown content\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer: invalid props\",\n \"MarkdownRenderer.error.tooLong\": \"Content exceeds maximum length\",\n \"TokenDisplayOnceModal.button.copy\": \"Copy token\",\n \"TokenDisplayOnceModal.button.close\": \"Close\",\n \"TokenDisplayOnceModal.warning.once\": \"This token will only be shown once. Copy it now.\",\n \"TokenDisplayOnceModal.copied\": \"Copied\",\n \"StatusBadge.aria.status\": \"Status\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge: invalid props\",\n \"EmptyState.error.invalidProps\": \"EmptyState: invalid props\",\n \"Toast.aria.close\": \"Close notification\",\n \"Toast.error.invalidProps\": \"Toast: invalid props\",\n \"Alert.aria.dismiss\": \"Dismiss alert\",\n \"Alert.error.invalidProps\": \"Alert: invalid props\",\n \"VirtualList.empty.message\": \"No items to display\",\n \"VirtualList.error.invalidProps\": \"VirtualList: invalid props\",\n \"Skeleton.aria.label\": \"Loading\",\n \"Skeleton.error.invalidProps\": \"Skeleton: invalid props\",\n} as const;\n\nconst FR: Record<keyof typeof EN, string> = {\n \"ProgressBar.aria.label\": \"Progression\",\n \"ProgressBar.error.invalidProps\": \"ProgressBar : propriétés invalides\",\n \"ConfirmDialog.button.confirm\": \"Confirmer\",\n \"ConfirmDialog.button.cancel\": \"Annuler\",\n \"ConfirmDialog.aria.dialog\": \"Boîte de dialogue de confirmation\",\n \"TableView.aria.table\": \"Tableau de données\",\n \"TableView.pagination.next\": \"Page suivante\",\n \"TableView.pagination.prev\": \"Page précédente\",\n \"TableView.empty.message\": \"Aucune donnée à afficher\",\n \"TableView.error.invalidProps\": \"TableView : propriétés invalides\",\n \"MarkdownRenderer.aria.content\": \"Contenu Markdown rendu\",\n \"MarkdownRenderer.error.invalidProps\": \"MarkdownRenderer : propriétés invalides\",\n \"MarkdownRenderer.error.tooLong\": \"Le contenu dépasse la longueur maximale\",\n \"TokenDisplayOnceModal.button.copy\": \"Copier le jeton\",\n \"TokenDisplayOnceModal.button.close\": \"Fermer\",\n \"TokenDisplayOnceModal.warning.once\":\n \"Ce jeton ne sera affiché qu'une seule fois. Copiez-le maintenant.\",\n \"TokenDisplayOnceModal.copied\": \"Copié\",\n \"StatusBadge.aria.status\": \"Statut\",\n \"StatusBadge.error.invalidProps\": \"StatusBadge : propriétés invalides\",\n \"EmptyState.error.invalidProps\": \"EmptyState : propriétés invalides\",\n \"Toast.aria.close\": \"Fermer la notification\",\n \"Toast.error.invalidProps\": \"Toast : propriétés invalides\",\n \"Alert.aria.dismiss\": \"Fermer l'alerte\",\n \"Alert.error.invalidProps\": \"Alert : propriétés invalides\",\n \"VirtualList.empty.message\": \"Aucun élément à afficher\",\n \"VirtualList.error.invalidProps\": \"VirtualList : propriétés invalides\",\n \"Skeleton.aria.label\": \"Chargement\",\n \"Skeleton.error.invalidProps\": \"Skeleton : propriétés invalides\",\n};\n\nexport type MosaicI18nKey = keyof typeof EN;\n\nconst TABLE: Record<MosaicLocale, Record<MosaicI18nKey, string>> = {\n en: EN,\n fr: FR,\n};\n\n/** Resolves a Mosaic i18n key for the given locale, falling back to EN. */\nexport function t(key: MosaicI18nKey, locale: MosaicLocale = \"en\"): string {\n return TABLE[locale]?.[key] ?? TABLE.en[key];\n}\n","import { z } from \"zod\";\n\nexport const StatusBadgePropsSchema = z.object({\n status: z.string(),\n variant: z.enum([\"success\", \"warning\", \"danger\", \"info\", \"neutral\"]).default(\"neutral\"),\n label: z.string().optional(),\n locale: z.enum([\"en\", \"fr\"]),\n});\n\nexport type StatusBadgeProps = z.infer<typeof StatusBadgePropsSchema>;\n\nexport function validateProps(raw: unknown): StatusBadgeProps {\n return StatusBadgePropsSchema.parse(raw);\n}\n","// i18nKeys: StatusBadge.aria.status, StatusBadge.error.invalidProps\nimport React from \"react\";\nimport { type MosaicLocale, t } from \"../../i18n/strings.js\";\nimport { type StatusBadgeProps, validateProps } from \"./StatusBadge.schema\";\n\ntype Variant = \"success\" | \"warning\" | \"danger\" | \"info\" | \"neutral\";\n\nconst variantClasses: Record<Variant, string> = {\n success: \"bg-green-100 text-green-800 ring-1 ring-green-300\",\n warning: \"bg-amber-100 text-amber-800 ring-1 ring-amber-300\",\n danger: \"bg-red-100 text-red-800 ring-1 ring-red-300\",\n info: \"bg-blue-100 text-blue-800 ring-1 ring-blue-300\",\n neutral: \"bg-slate-100 text-slate-800 ring-1 ring-slate-300\",\n};\n\ninterface StatusBadgeInnerProps {\n status: string;\n variant: Variant;\n label?: string;\n locale: \"en\" | \"fr\";\n}\n\nfunction StatusBadgeInner({ status, variant, label, locale }: StatusBadgeInnerProps) {\n const ariaLabel = label ?? status;\n return (\n <output\n aria-label={ariaLabel}\n lang={locale}\n className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${variantClasses[variant]}`}\n >\n {label ?? status}\n </output>\n );\n}\n\n/**\n * StatusBadge accepts any props object for JSX and MCP postMessage injection alike.\n * Internal Zod validation narrows the type — invalid data renders an accessible error fallback.\n */\nexport function StatusBadge(raw: Record<string, unknown>) {\n try {\n const props = validateProps(raw);\n return <StatusBadgeInner {...props} />;\n } catch {\n const locale: MosaicLocale = raw.locale === \"fr\" ? \"fr\" : \"en\";\n return <span role=\"alert\">{t(\"StatusBadge.error.invalidProps\", locale)}</span>;\n }\n}\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Alert component props schema.
|
|
6
|
+
*
|
|
7
|
+
* Persistent inline banner (vs Toast which is ephemeral + auto-dismissing).
|
|
8
|
+
*
|
|
9
|
+
* variant — controls visual style + ARIA role auto-assignment:
|
|
10
|
+
* "error" → role="alert" (assertive, interrupts screen reader)
|
|
11
|
+
* all others → role="status" (polite, non-intrusive)
|
|
12
|
+
* title — consumer-driven; caller passes already-localized string
|
|
13
|
+
* description — optional supporting text beneath the title
|
|
14
|
+
* dismissible — when true, renders a dismiss button (default: false)
|
|
15
|
+
* onDismiss — callback fired when dismiss button is clicked
|
|
16
|
+
* locale — controls dismiss button aria-label language
|
|
17
|
+
*/
|
|
18
|
+
declare const AlertPropsSchema: z.ZodObject<{
|
|
19
|
+
variant: z.ZodEnum<["success", "error", "info", "warning"]>;
|
|
20
|
+
title: z.ZodString;
|
|
21
|
+
description: z.ZodOptional<z.ZodString>;
|
|
22
|
+
dismissible: z.ZodDefault<z.ZodBoolean>;
|
|
23
|
+
locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
variant: "success" | "error" | "info" | "warning";
|
|
26
|
+
title: string;
|
|
27
|
+
dismissible: boolean;
|
|
28
|
+
locale: "en" | "fr";
|
|
29
|
+
description?: string | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
variant: "success" | "error" | "info" | "warning";
|
|
32
|
+
title: string;
|
|
33
|
+
description?: string | undefined;
|
|
34
|
+
dismissible?: boolean | undefined;
|
|
35
|
+
locale?: "en" | "fr" | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
type AlertProps = z.infer<typeof AlertPropsSchema> & {
|
|
38
|
+
onDismiss?: () => void;
|
|
39
|
+
};
|
|
40
|
+
declare function validateAlertProps(raw: unknown): z.infer<typeof AlertPropsSchema>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Alert — persistent inline banner (Preact 10 implementation).
|
|
44
|
+
*
|
|
45
|
+
* Contrast with Toast: Alert is PERSISTENT (no auto-dismiss), inline in the
|
|
46
|
+
* document flow. Toast is ephemeral + portal-mounted.
|
|
47
|
+
*
|
|
48
|
+
* Accepts `Record<string, unknown>` for MCP postMessage injection safety.
|
|
49
|
+
* Zod validation narrows before render. Invalid props → accessible error span.
|
|
50
|
+
*
|
|
51
|
+
* WCAG-AA:
|
|
52
|
+
* - variant="error" → role="alert" + aria-live="assertive"
|
|
53
|
+
* - all others → role="status" + aria-live="polite"
|
|
54
|
+
*/
|
|
55
|
+
declare function Alert(raw: Omit<AlertProps, "locale" | "dismissible"> & Partial<Pick<AlertProps, "locale" | "dismissible">>): react_jsx_runtime.JSX.Element;
|
|
56
|
+
|
|
57
|
+
declare const ConfirmDialogPropsSchema: z.ZodObject<{
|
|
58
|
+
title: z.ZodString;
|
|
59
|
+
message: z.ZodString;
|
|
60
|
+
confirmLabel: z.ZodString;
|
|
61
|
+
cancelLabel: z.ZodString;
|
|
62
|
+
variant: z.ZodDefault<z.ZodEnum<["default", "danger"]>>;
|
|
63
|
+
locale: z.ZodDefault<z.ZodEnum<["en", "fr"]>>;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
variant: "default" | "danger";
|
|
66
|
+
message: string;
|
|
67
|
+
title: string;
|
|
68
|
+
locale: "en" | "fr";
|
|
69
|
+
confirmLabel: string;
|
|
70
|
+
cancelLabel: string;
|
|
71
|
+
}, {
|
|
72
|
+
message: string;
|
|
73
|
+
title: string;
|
|
74
|
+
confirmLabel: string;
|
|
75
|
+
cancelLabel: string;
|
|
76
|
+
variant?: "default" | "danger" | undefined;
|
|
77
|
+
locale?: "en" | "fr" | undefined;
|
|
78
|
+
}>;
|
|
79
|
+
type ConfirmDialogProps = z.infer<typeof ConfirmDialogPropsSchema> & {
|
|
80
|
+
onConfirm: () => void;
|
|
81
|
+
onCancel: () => void;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
declare function ConfirmDialog(raw: Omit<ConfirmDialogProps, "variant" | "locale"> & Partial<Pick<ConfirmDialogProps, "variant" | "locale">>): react_jsx_runtime.JSX.Element | null;
|
|
85
|
+
|
|
86
|
+
export { Alert, type AlertProps, AlertPropsSchema, ConfirmDialog as ConfirmModal, type ConfirmDialogProps as ConfirmModalProps, validateAlertProps };
|