@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.
Files changed (97) hide show
  1. package/README.md +181 -0
  2. package/dist/Alert.schema-BQsZGG6P.d.cts +41 -0
  3. package/dist/Alert.schema-BQsZGG6P.d.ts +41 -0
  4. package/dist/ConfirmDialog-B3CQQGmJ.d.cts +34 -0
  5. package/dist/ConfirmDialog-B3CQQGmJ.d.ts +34 -0
  6. package/dist/Skeleton.schema-BO0ca2UX.d.cts +135 -0
  7. package/dist/Skeleton.schema-BO0ca2UX.d.ts +135 -0
  8. package/dist/Tabs.schema-BzcEyeq8.d.cts +79 -0
  9. package/dist/Tabs.schema-BzcEyeq8.d.ts +79 -0
  10. package/dist/artifacts.cjs +20 -2
  11. package/dist/artifacts.cjs.map +1 -1
  12. package/dist/artifacts.js +20 -2
  13. package/dist/artifacts.js.map +1 -1
  14. package/dist/confirmation.cjs +44 -2
  15. package/dist/confirmation.cjs.map +1 -1
  16. package/dist/confirmation.d.cts +34 -1
  17. package/dist/confirmation.d.ts +34 -1
  18. package/dist/confirmation.js +41 -3
  19. package/dist/confirmation.js.map +1 -1
  20. package/dist/display.cjs +145 -2
  21. package/dist/display.cjs.map +1 -1
  22. package/dist/display.d.cts +1 -0
  23. package/dist/display.d.ts +1 -0
  24. package/dist/display.js +140 -3
  25. package/dist/display.js.map +1 -1
  26. package/dist/forms.cjs +1412 -0
  27. package/dist/forms.cjs.map +1 -0
  28. package/dist/forms.d.cts +159 -0
  29. package/dist/forms.d.ts +159 -0
  30. package/dist/forms.js +1331 -0
  31. package/dist/forms.js.map +1 -0
  32. package/dist/index-CwXVgtGb.d.cts +917 -0
  33. package/dist/index-CwXVgtGb.d.ts +917 -0
  34. package/dist/index.cjs +188 -2
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +5 -2
  37. package/dist/index.d.ts +5 -2
  38. package/dist/index.js +177 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/input.cjs +19 -0
  41. package/dist/input.cjs.map +1 -1
  42. package/dist/input.d.cts +4 -34
  43. package/dist/input.d.ts +4 -34
  44. package/dist/input.js +18 -1
  45. package/dist/input.js.map +1 -1
  46. package/dist/media.cjs +20 -2
  47. package/dist/media.cjs.map +1 -1
  48. package/dist/media.js +20 -2
  49. package/dist/media.js.map +1 -1
  50. package/dist/preact/artifacts.d.ts +2 -0
  51. package/dist/preact/confirmation.d.ts +86 -0
  52. package/dist/preact/confirmation.js +263 -0
  53. package/dist/preact/confirmation.js.map +1 -1
  54. package/dist/preact/display.d.ts +241 -0
  55. package/dist/preact/display.js +366 -0
  56. package/dist/preact/display.js.map +1 -1
  57. package/dist/preact/forms.d.ts +875 -0
  58. package/dist/preact/forms.js +1323 -0
  59. package/dist/preact/forms.js.map +1 -0
  60. package/dist/preact/index.d.ts +2 -0
  61. package/dist/preact/input.d.ts +89 -0
  62. package/dist/preact/input.js +194 -0
  63. package/dist/preact/input.js.map +1 -1
  64. package/dist/preact/media.d.ts +2 -0
  65. package/dist/preact/progress.d.ts +2 -0
  66. package/dist/progress.cjs +20 -2
  67. package/dist/progress.cjs.map +1 -1
  68. package/dist/progress.js +20 -2
  69. package/dist/progress.js.map +1 -1
  70. package/dist/react/confirmation.cjs +267 -0
  71. package/dist/react/confirmation.cjs.map +1 -1
  72. package/dist/react/confirmation.d.cts +21 -1
  73. package/dist/react/confirmation.d.ts +21 -1
  74. package/dist/react/confirmation.js +263 -0
  75. package/dist/react/confirmation.js.map +1 -1
  76. package/dist/react/display.cjs +372 -0
  77. package/dist/react/display.cjs.map +1 -1
  78. package/dist/react/display.d.cts +112 -1
  79. package/dist/react/display.d.ts +112 -1
  80. package/dist/react/display.js +362 -0
  81. package/dist/react/display.js.map +1 -1
  82. package/dist/react/forms.cjs +1384 -0
  83. package/dist/react/forms.cjs.map +1 -0
  84. package/dist/react/forms.d.cts +5 -0
  85. package/dist/react/forms.d.ts +5 -0
  86. package/dist/react/forms.js +1323 -0
  87. package/dist/react/forms.js.map +1 -0
  88. package/dist/react/input.cjs +197 -0
  89. package/dist/react/input.cjs.map +1 -1
  90. package/dist/react/input.d.cts +13 -1
  91. package/dist/react/input.d.ts +13 -1
  92. package/dist/react/input.js +194 -0
  93. package/dist/react/input.js.map +1 -1
  94. package/dist/tokens.d.cts +35 -0
  95. package/dist/tokens.d.ts +35 -0
  96. package/package.json +74 -49
  97. package/registry.yaml +154 -1
package/dist/index.cjs CHANGED
@@ -33,7 +33,16 @@ var EN = {
33
33
  "TokenDisplayOnceModal.warning.once": "This token will only be shown once. Copy it now.",
34
34
  "TokenDisplayOnceModal.copied": "Copied",
35
35
  "StatusBadge.aria.status": "Status",
36
- "StatusBadge.error.invalidProps": "StatusBadge: invalid props"
36
+ "StatusBadge.error.invalidProps": "StatusBadge: invalid props",
37
+ "EmptyState.error.invalidProps": "EmptyState: invalid props",
38
+ "Toast.aria.close": "Close notification",
39
+ "Toast.error.invalidProps": "Toast: invalid props",
40
+ "Alert.aria.dismiss": "Dismiss alert",
41
+ "Alert.error.invalidProps": "Alert: invalid props",
42
+ "VirtualList.empty.message": "No items to display",
43
+ "VirtualList.error.invalidProps": "VirtualList: invalid props",
44
+ "Skeleton.aria.label": "Loading",
45
+ "Skeleton.error.invalidProps": "Skeleton: invalid props"
37
46
  };
38
47
  var FR = {
39
48
  "ProgressBar.aria.label": "Progression",
@@ -54,7 +63,16 @@ var FR = {
54
63
  "TokenDisplayOnceModal.warning.once": "Ce jeton ne sera affich\xE9 qu'une seule fois. Copiez-le maintenant.",
55
64
  "TokenDisplayOnceModal.copied": "Copi\xE9",
56
65
  "StatusBadge.aria.status": "Statut",
57
- "StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides"
66
+ "StatusBadge.error.invalidProps": "StatusBadge : propri\xE9t\xE9s invalides",
67
+ "EmptyState.error.invalidProps": "EmptyState : propri\xE9t\xE9s invalides",
68
+ "Toast.aria.close": "Fermer la notification",
69
+ "Toast.error.invalidProps": "Toast : propri\xE9t\xE9s invalides",
70
+ "Alert.aria.dismiss": "Fermer l'alerte",
71
+ "Alert.error.invalidProps": "Alert : propri\xE9t\xE9s invalides",
72
+ "VirtualList.empty.message": "Aucun \xE9l\xE9ment \xE0 afficher",
73
+ "VirtualList.error.invalidProps": "VirtualList : propri\xE9t\xE9s invalides",
74
+ "Skeleton.aria.label": "Chargement",
75
+ "Skeleton.error.invalidProps": "Skeleton : propri\xE9t\xE9s invalides"
58
76
  };
59
77
  var TABLE = {
60
78
  en: EN,
@@ -216,6 +234,23 @@ function ConfirmDialog(raw) {
216
234
  return null;
217
235
  }
218
236
  }
237
+ var TabItemSchema = zod.z.object({
238
+ id: zod.z.string().min(1),
239
+ label: zod.z.string().min(1),
240
+ /** ReactNode / PreactNode — accepted as unknown at Zod layer (JSX not serialisable). */
241
+ content: zod.z.unknown(),
242
+ disabled: zod.z.boolean().optional().default(false)
243
+ });
244
+ var TabsPropsSchema = zod.z.object({
245
+ tabs: zod.z.array(TabItemSchema).min(1),
246
+ value: zod.z.string().optional(),
247
+ defaultValue: zod.z.string().optional(),
248
+ orientation: zod.z.enum(["horizontal", "vertical"]).default("horizontal"),
249
+ locale: zod.z.enum(["en", "fr"]).default("en")
250
+ });
251
+ function validateTabsProps(raw) {
252
+ return TabsPropsSchema.parse(raw);
253
+ }
219
254
  var ColumnDefSchema = zod.z.object({
220
255
  key: zod.z.string().min(1),
221
256
  header: zod.z.string().min(1)
@@ -461,6 +496,125 @@ function VirtualTable({
461
496
  }
462
497
  );
463
498
  }
499
+ var EmptyStatePropsSchema = zod.z.object({
500
+ title: zod.z.string().min(1),
501
+ description: zod.z.string().optional(),
502
+ action: zod.z.object({
503
+ label: zod.z.string().min(1),
504
+ variant: zod.z.enum(["primary", "secondary"]).default("primary")
505
+ }).optional(),
506
+ locale: zod.z.enum(["en", "fr"]).default("en")
507
+ });
508
+ function validateEmptyStateProps(raw) {
509
+ return EmptyStatePropsSchema.parse(raw);
510
+ }
511
+
512
+ // src/components/display/Skeleton.logic.ts
513
+ function getAnimationClass(animation) {
514
+ switch (animation) {
515
+ case "pulse":
516
+ return "animate-pulse";
517
+ case "wave":
518
+ return "skeleton-wave";
519
+ case "none":
520
+ return "";
521
+ }
522
+ }
523
+ function getVariantClass(variant) {
524
+ switch (variant) {
525
+ case "rect":
526
+ return "rounded-md";
527
+ case "circle":
528
+ return "rounded-full";
529
+ case "text":
530
+ return "rounded";
531
+ }
532
+ }
533
+ var SKELETON_BG_CLASS = "bg-gray-200 dark:bg-gray-700";
534
+ function textLineKey(index) {
535
+ return `skeleton-line-${index}`;
536
+ }
537
+ function lastLineWidth(index, total, baseWidth) {
538
+ if (total > 1 && index === total - 1) {
539
+ return "75%";
540
+ }
541
+ return baseWidth;
542
+ }
543
+ var SkeletonPropsSchema = zod.z.object({
544
+ variant: zod.z.enum(["rect", "circle", "text"]).default("rect"),
545
+ width: zod.z.union([zod.z.string().min(1), zod.z.number().positive()]).optional(),
546
+ height: zod.z.union([zod.z.string().min(1), zod.z.number().positive()]).optional(),
547
+ count: zod.z.number().int().min(1).max(20).default(1),
548
+ animation: zod.z.enum(["pulse", "wave", "none"]).default("pulse"),
549
+ locale: zod.z.enum(["en", "fr"]).default("en")
550
+ });
551
+ function validateSkeletonProps(raw) {
552
+ return SkeletonPropsSchema.parse(raw);
553
+ }
554
+ function resolveSkeletonDimensions(variant, width, height) {
555
+ const toCss = (v, fallback) => {
556
+ if (v === void 0) return fallback;
557
+ if (typeof v === "number") return `${v}px`;
558
+ return v;
559
+ };
560
+ if (variant === "circle") {
561
+ const size = width !== void 0 ? toCss(width, "40px") : height !== void 0 ? toCss(height, "40px") : "40px";
562
+ return { widthCss: size, heightCss: size };
563
+ }
564
+ if (variant === "text") {
565
+ return {
566
+ widthCss: toCss(width, "100%"),
567
+ heightCss: toCss(height, "16px")
568
+ };
569
+ }
570
+ return {
571
+ widthCss: toCss(width, "100%"),
572
+ heightCss: toCss(height, "100px")
573
+ };
574
+ }
575
+ function SkeletonInner({ variant, width, height, count, animation, locale }) {
576
+ const { widthCss, heightCss } = resolveSkeletonDimensions(variant, width, height);
577
+ const animClass = getAnimationClass(animation);
578
+ const variantClass = getVariantClass(variant);
579
+ const ariaLabel = t("Skeleton.aria.label", locale);
580
+ const baseClass = `${SKELETON_BG_CLASS} ${variantClass} ${animClass}`.trim();
581
+ if (variant === "text") {
582
+ return (
583
+ // biome-ignore lint/a11y/useSemanticElements: role="status" is the correct ARIA pattern for loading indicators; <output> conveys form output semantics which is incorrect here
584
+ /* @__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(
585
+ "span",
586
+ {
587
+ className: `block ${baseClass}`,
588
+ style: {
589
+ width: lastLineWidth(i, count, widthCss),
590
+ height: heightCss
591
+ },
592
+ "aria-hidden": "true"
593
+ },
594
+ textLineKey(i)
595
+ )) })
596
+ );
597
+ }
598
+ return /* @__PURE__ */ jsxRuntime.jsx(
599
+ "div",
600
+ {
601
+ role: "status",
602
+ "aria-label": ariaLabel,
603
+ "aria-busy": "true",
604
+ className: `block ${baseClass}`,
605
+ style: { width: widthCss, height: heightCss }
606
+ }
607
+ );
608
+ }
609
+ function Skeleton(raw) {
610
+ try {
611
+ const props = validateSkeletonProps(raw);
612
+ return /* @__PURE__ */ jsxRuntime.jsx(SkeletonInner, { ...props });
613
+ } catch {
614
+ const locale = raw.locale === "fr" ? "fr" : "en";
615
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { role: "alert", className: "text-red-600 text-sm", children: t("Skeleton.error.invalidProps", locale) });
616
+ }
617
+ }
464
618
  var MarkdownRendererPropsSchema = zod.z.object({
465
619
  content: zod.z.string(),
466
620
  locale: zod.z.enum(["en", "fr"]),
@@ -621,6 +775,26 @@ function TokenDisplayOnceModal(raw) {
621
775
  return null;
622
776
  }
623
777
  }
778
+ var ToastPropsSchema = zod.z.object({
779
+ variant: zod.z.enum(["success", "error", "info", "warning"]),
780
+ title: zod.z.string().min(1),
781
+ description: zod.z.string().optional(),
782
+ duration: zod.z.number().int().nonnegative().default(5e3),
783
+ locale: zod.z.enum(["en", "fr"]).default("en")
784
+ });
785
+ function validateToastProps(raw) {
786
+ return ToastPropsSchema.parse(raw);
787
+ }
788
+ var AlertPropsSchema = zod.z.object({
789
+ variant: zod.z.enum(["success", "error", "info", "warning"]),
790
+ title: zod.z.string().min(1),
791
+ description: zod.z.string().optional(),
792
+ dismissible: zod.z.boolean().default(false),
793
+ locale: zod.z.enum(["en", "fr"]).default("en")
794
+ });
795
+ function validateAlertProps(raw) {
796
+ return AlertPropsSchema.parse(raw);
797
+ }
624
798
  var StatusBadgePropsSchema = zod.z.object({
625
799
  status: zod.z.string(),
626
800
  variant: zod.z.enum(["success", "warning", "danger", "info", "neutral"]).default("neutral"),
@@ -745,8 +919,10 @@ function createMosaicResource(componentName, props, locale = "en") {
745
919
  }
746
920
  var MOSAIC_SUPPORTED_COMPONENTS = COMPONENT_KEYS;
747
921
 
922
+ exports.AlertPropsSchema = AlertPropsSchema;
748
923
  exports.ConfirmDialog = ConfirmDialog;
749
924
  exports.ConfirmDialogPropsSchema = ConfirmDialogPropsSchema;
925
+ exports.EmptyStatePropsSchema = EmptyStatePropsSchema;
750
926
  exports.MCP_UI_CAPABILITY_KEY = MCP_UI_CAPABILITY_KEY;
751
927
  exports.MOSAIC_MIME_TYPE = MOSAIC_MIME_TYPE;
752
928
  exports.MOSAIC_STREAM_CHUNK_TYPE = MOSAIC_STREAM_CHUNK_TYPE;
@@ -755,21 +931,31 @@ exports.MarkdownRenderer = MarkdownRenderer;
755
931
  exports.MarkdownRendererPropsSchema = MarkdownRendererPropsSchema;
756
932
  exports.ProgressBar = ProgressBar;
757
933
  exports.ProgressBarPropsSchema = ProgressBarPropsSchema;
934
+ exports.Skeleton = Skeleton;
935
+ exports.SkeletonPropsSchema = SkeletonPropsSchema;
758
936
  exports.StatusBadge = StatusBadge;
759
937
  exports.StatusBadgePropsSchema = StatusBadgePropsSchema;
760
938
  exports.StreamingTableView = StreamingTableView;
761
939
  exports.TableView = TableView;
762
940
  exports.TableViewPropsSchema = TableViewPropsSchema;
941
+ exports.TabsPropsSchema = TabsPropsSchema;
942
+ exports.ToastPropsSchema = ToastPropsSchema;
763
943
  exports.TokenDisplayOnceModal = TokenDisplayOnceModal;
764
944
  exports.TokenDisplayOnceModalPropsSchema = TokenDisplayOnceModalPropsSchema;
765
945
  exports.createMosaicResource = createMosaicResource;
766
946
  exports.createPostMessageObservable = createPostMessageObservable;
947
+ exports.resolveSkeletonDimensions = resolveSkeletonDimensions;
767
948
  exports.useStreamingHydration = useStreamingHydration;
949
+ exports.validateAlertProps = validateAlertProps;
768
950
  exports.validateConfirmDialogProps = validateConfirmDialogProps;
951
+ exports.validateEmptyStateProps = validateEmptyStateProps;
769
952
  exports.validateMarkdownRendererProps = validateProps2;
770
953
  exports.validateProps = validateProps;
954
+ exports.validateSkeletonProps = validateSkeletonProps;
771
955
  exports.validateStatusBadgeProps = validateProps3;
772
956
  exports.validateTableViewProps = validateTableViewProps;
957
+ exports.validateTabsProps = validateTabsProps;
958
+ exports.validateToastProps = validateToastProps;
773
959
  exports.validateTokenDisplayOnceModalProps = validateTokenDisplayOnceModalProps;
774
960
  //# sourceMappingURL=index.cjs.map
775
961
  //# sourceMappingURL=index.cjs.map