@syntrologie/runtime-sdk 0.2.1 → 0.2.3

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 (144) hide show
  1. package/CAPABILITIES.md +400 -0
  2. package/dist/SmartCanvasApp.js +28 -10
  3. package/dist/SmartCanvasApp.js.map +1 -1
  4. package/dist/api.d.ts +23 -0
  5. package/dist/api.js +23 -5
  6. package/dist/api.js.map +1 -1
  7. package/dist/blocks/data/ComparisonBlock.d.ts +10 -0
  8. package/dist/blocks/data/ComparisonBlock.js +92 -0
  9. package/dist/blocks/data/ComparisonBlock.js.map +1 -0
  10. package/dist/blocks/data/StatsBlock.d.ts +10 -0
  11. package/dist/blocks/data/StatsBlock.js +103 -0
  12. package/dist/blocks/data/StatsBlock.js.map +1 -0
  13. package/dist/blocks/data/index.d.ts +2 -0
  14. package/dist/blocks/data/index.js +3 -0
  15. package/dist/blocks/data/index.js.map +1 -0
  16. package/dist/blocks/index.d.ts +26 -0
  17. package/dist/blocks/index.js +94 -0
  18. package/dist/blocks/index.js.map +1 -0
  19. package/dist/blocks/interactive/ChecklistBlock.d.ts +11 -0
  20. package/dist/blocks/interactive/ChecklistBlock.js +110 -0
  21. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -0
  22. package/dist/blocks/interactive/RatingBlock.d.ts +11 -0
  23. package/dist/blocks/interactive/RatingBlock.js +131 -0
  24. package/dist/blocks/interactive/RatingBlock.js.map +1 -0
  25. package/dist/blocks/interactive/index.d.ts +2 -0
  26. package/dist/blocks/interactive/index.js +3 -0
  27. package/dist/blocks/interactive/index.js.map +1 -0
  28. package/dist/blocks/notification/NotificationBlock.d.ts +26 -0
  29. package/dist/blocks/notification/NotificationBlock.js +166 -0
  30. package/dist/blocks/notification/NotificationBlock.js.map +1 -0
  31. package/dist/blocks/notification/index.d.ts +1 -0
  32. package/dist/blocks/notification/index.js +2 -0
  33. package/dist/blocks/notification/index.js.map +1 -0
  34. package/dist/bootstrap.d.ts +19 -1
  35. package/dist/bootstrap.js +118 -17
  36. package/dist/bootstrap.js.map +1 -1
  37. package/dist/components/ShadowCanvasOverlay.d.ts +12 -3
  38. package/dist/components/ShadowCanvasOverlay.js +75 -24
  39. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  40. package/dist/components/{RectangleCard.d.ts → TileCard.d.ts} +4 -4
  41. package/dist/components/{RectangleCard.js → TileCard.js} +57 -6
  42. package/dist/components/TileCard.js.map +1 -0
  43. package/dist/components/TileWheel.d.ts +8 -0
  44. package/dist/components/{RectangleWheel.js → TileWheel.js} +7 -7
  45. package/dist/components/TileWheel.js.map +1 -0
  46. package/dist/configFetcher.js.map +1 -1
  47. package/dist/earlyPatcher.js +1 -2
  48. package/dist/earlyPatcher.js.map +1 -1
  49. package/dist/editorLoader.js +74 -17
  50. package/dist/editorLoader.js.map +1 -1
  51. package/dist/experiments/adapters/growthbook.d.ts +18 -2
  52. package/dist/experiments/adapters/growthbook.js +17 -3
  53. package/dist/experiments/adapters/growthbook.js.map +1 -1
  54. package/dist/experiments/registry.d.ts +18 -4
  55. package/dist/experiments/registry.js +1 -1
  56. package/dist/experiments/registry.js.map +1 -1
  57. package/dist/experiments/types.d.ts +8 -3
  58. package/dist/fetchers/cdnFetcher.js.map +1 -1
  59. package/dist/fetchers/experimentsFetcher.js +20 -0
  60. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  61. package/dist/fetchers/types.d.ts +2 -2
  62. package/dist/hooks/useCanvasOverlays.d.ts +5 -1
  63. package/dist/hooks/useCanvasOverlays.js +33 -13
  64. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  65. package/dist/hooks/useShadowCanvasConfig.d.ts +9 -2
  66. package/dist/hooks/useShadowCanvasConfig.js +8 -8
  67. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  68. package/dist/hostPatcher/core/patcher.js +14 -15
  69. package/dist/hostPatcher/core/patcher.js.map +1 -1
  70. package/dist/hostPatcher/core/sanitizer.js +1 -1
  71. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  72. package/dist/hostPatcher/core/types.d.ts +8 -9
  73. package/dist/hostPatcher/policy/defaultPolicy.d.ts +4 -0
  74. package/dist/hostPatcher/policy/defaultPolicy.js +9 -37
  75. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  76. package/dist/hostPatcher/utils/anchors.js +3 -3
  77. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  78. package/dist/index.d.ts +2 -2
  79. package/dist/index.js +2 -2
  80. package/dist/index.js.map +1 -1
  81. package/dist/overlays/recipeRegistry.d.ts +14 -0
  82. package/dist/overlays/recipeRegistry.js +32 -0
  83. package/dist/overlays/recipeRegistry.js.map +1 -0
  84. package/dist/overlays/runtime/index.d.ts +1 -0
  85. package/dist/overlays/runtime/index.js +1 -0
  86. package/dist/overlays/runtime/index.js.map +1 -1
  87. package/dist/overlays/runtime/overlay/modal.d.ts +11 -0
  88. package/dist/overlays/runtime/overlay/modal.js +78 -0
  89. package/dist/overlays/runtime/overlay/modal.js.map +1 -0
  90. package/dist/overlays/runtime/overlay/root.js +132 -0
  91. package/dist/overlays/runtime/overlay/root.js.map +1 -1
  92. package/dist/overlays/runtime/overlay/runner.d.ts +2 -0
  93. package/dist/overlays/runtime/overlay/runner.js +441 -2
  94. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  95. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -0
  96. package/dist/overlays/runtime/overlay/tooltip.js +61 -1
  97. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  98. package/dist/overlays/schema.d.ts +6 -6
  99. package/dist/overlays/types.d.ts +55 -1
  100. package/dist/react.d.ts +6 -1
  101. package/dist/react.js +31 -9
  102. package/dist/react.js.map +1 -1
  103. package/dist/render/RenderContext.d.ts +39 -0
  104. package/dist/render/RenderContext.js +67 -0
  105. package/dist/render/RenderContext.js.map +1 -0
  106. package/dist/render/index.d.ts +3 -0
  107. package/dist/render/index.js +3 -0
  108. package/dist/render/index.js.map +1 -0
  109. package/dist/render/types.d.ts +81 -0
  110. package/dist/render/types.js +2 -0
  111. package/dist/render/types.js.map +1 -0
  112. package/dist/smart-canvas.esm.js +192 -25
  113. package/dist/smart-canvas.esm.js.map +4 -4
  114. package/dist/smart-canvas.js +25962 -26846
  115. package/dist/smart-canvas.js.map +4 -4
  116. package/dist/smart-canvas.min.js +192 -25
  117. package/dist/smart-canvas.min.js.map +4 -4
  118. package/dist/telemetry/adapters/posthog.d.ts +6 -0
  119. package/dist/telemetry/adapters/posthog.js +48 -0
  120. package/dist/telemetry/adapters/posthog.js.map +1 -1
  121. package/dist/telemetry/types.d.ts +30 -0
  122. package/dist/theme/ThemeProvider.d.ts +31 -0
  123. package/dist/theme/ThemeProvider.js +109 -0
  124. package/dist/theme/ThemeProvider.js.map +1 -0
  125. package/dist/theme/defaultTheme.d.ts +18 -0
  126. package/dist/theme/defaultTheme.js +163 -0
  127. package/dist/theme/defaultTheme.js.map +1 -0
  128. package/dist/theme/extractHostTheme.d.ts +14 -0
  129. package/dist/theme/extractHostTheme.js +261 -0
  130. package/dist/theme/extractHostTheme.js.map +1 -0
  131. package/dist/theme/index.d.ts +5 -0
  132. package/dist/theme/index.js +7 -0
  133. package/dist/theme/index.js.map +1 -0
  134. package/dist/theme/types.d.ts +91 -0
  135. package/dist/theme/types.js +6 -0
  136. package/dist/theme/types.js.map +1 -0
  137. package/dist/token.d.ts +4 -0
  138. package/dist/token.js.map +1 -1
  139. package/dist/types.d.ts +228 -47
  140. package/package.json +8 -4
  141. package/schema/canvas-config.schema.json +24 -15
  142. package/dist/components/RectangleCard.js.map +0 -1
  143. package/dist/components/RectangleWheel.d.ts +0 -8
  144. package/dist/components/RectangleWheel.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Single comparison item
4
+ */
5
+ function ComparisonItemCard({ item, accentColor, layout, }) {
6
+ const isHighlighted = item.highlight;
7
+ const cardStyle = {
8
+ display: "flex",
9
+ flexDirection: layout === "list" ? "row" : "column",
10
+ alignItems: layout === "list" ? "center" : "flex-start",
11
+ gap: layout === "list" ? "var(--sc-spacing-md, 0.75rem)" : "var(--sc-spacing-xs, 0.25rem)",
12
+ padding: "var(--sc-spacing-md, 0.75rem)",
13
+ borderRadius: "var(--sc-border-radius-sm, 6px)",
14
+ background: isHighlighted
15
+ ? "var(--sc-color-primary-muted, rgba(99, 102, 241, 0.15))"
16
+ : "var(--sc-color-background-subtle, rgba(0, 0, 0, 0.2))",
17
+ border: isHighlighted
18
+ ? `1px solid ${accentColor}`
19
+ : "1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))",
20
+ transition: "all 0.15s ease",
21
+ };
22
+ const iconStyle = {
23
+ fontSize: "1.25rem",
24
+ marginBottom: layout === "list" ? 0 : "var(--sc-spacing-xs, 0.25rem)",
25
+ };
26
+ const labelStyle = {
27
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
28
+ color: "var(--sc-color-text-secondary, #a1a1a6)",
29
+ flex: layout === "list" ? 1 : undefined,
30
+ };
31
+ const valueStyle = {
32
+ fontSize: "var(--sc-font-size-lg, 1rem)",
33
+ fontWeight: "var(--sc-font-weight-semibold, 600)",
34
+ color: isHighlighted ? accentColor : "var(--sc-color-text, #f5f5f7)",
35
+ };
36
+ return (_jsxs("div", { style: cardStyle, children: [item.icon && _jsx("span", { style: iconStyle, children: item.icon }), _jsx("span", { style: labelStyle, children: item.label }), _jsx("span", { style: valueStyle, children: item.value })] }));
37
+ }
38
+ /**
39
+ * Comparison block component - displays items in grid/list/table layout
40
+ */
41
+ export function ComparisonBlock({ content, accentColor }) {
42
+ const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
43
+ const layout = content.layout || "grid";
44
+ const columns = content.columns || 2;
45
+ // Find best item if highlightBest is true
46
+ let processedItems = content.items;
47
+ if (content.highlightBest && !content.items.some((i) => i.highlight)) {
48
+ // Find the item with highest numeric value
49
+ const itemsWithNumeric = content.items.map((item) => ({
50
+ ...item,
51
+ numericValue: typeof item.value === "number" ? item.value : parseFloat(String(item.value)),
52
+ }));
53
+ const maxValue = Math.max(...itemsWithNumeric.map((i) => i.numericValue || 0));
54
+ processedItems = itemsWithNumeric.map((item) => ({
55
+ ...item,
56
+ highlight: item.numericValue === maxValue,
57
+ }));
58
+ }
59
+ const containerStyle = {
60
+ display: layout === "table" ? "block" : layout === "list" ? "flex" : "grid",
61
+ flexDirection: layout === "list" ? "column" : undefined,
62
+ gridTemplateColumns: layout === "grid" ? `repeat(${columns}, 1fr)` : undefined,
63
+ gap: "var(--sc-spacing-sm, 0.5rem)",
64
+ padding: "var(--sc-spacing-sm, 0.5rem) 0",
65
+ };
66
+ // Table layout
67
+ if (layout === "table") {
68
+ return (_jsx("table", { style: {
69
+ width: "100%",
70
+ borderCollapse: "collapse",
71
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
72
+ }, children: _jsx("tbody", { children: processedItems.map((item, idx) => (_jsxs("tr", { style: {
73
+ borderBottom: idx < processedItems.length - 1
74
+ ? "1px solid var(--sc-color-border-subtle, rgba(255, 255, 255, 0.06))"
75
+ : undefined,
76
+ }, children: [_jsxs("td", { style: {
77
+ padding: "var(--sc-spacing-sm, 0.5rem) 0",
78
+ color: "var(--sc-color-text-secondary, #a1a1a6)",
79
+ display: "flex",
80
+ alignItems: "center",
81
+ gap: "var(--sc-spacing-sm, 0.5rem)",
82
+ }, children: [item.icon && _jsx("span", { children: item.icon }), item.label] }), _jsx("td", { style: {
83
+ padding: "var(--sc-spacing-sm, 0.5rem) 0",
84
+ textAlign: "right",
85
+ fontWeight: "var(--sc-font-weight-semibold, 600)",
86
+ color: item.highlight ? primaryColor : "var(--sc-color-text, #f5f5f7)",
87
+ }, children: item.value })] }, idx))) }) }));
88
+ }
89
+ // Grid or list layout
90
+ return (_jsx("div", { style: containerStyle, children: processedItems.map((item, idx) => (_jsx(ComparisonItemCard, { item: item, accentColor: primaryColor, layout: layout }, idx))) }));
91
+ }
92
+ //# sourceMappingURL=ComparisonBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComparisonBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/ComparisonBlock.tsx"],"names":[],"mappings":";AAQA;;GAEG;AACH,SAAS,kBAAkB,CAAC,EAC1B,IAAI,EACJ,WAAW,EACX,MAAM,GAKP;IACC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;IAErC,MAAM,SAAS,GAAkB;QAC/B,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACnD,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;QACvD,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,+BAA+B;QAC1F,OAAO,EAAE,+BAA+B;QACxC,YAAY,EAAE,iCAAiC;QAC/C,UAAU,EAAE,aAAa;YACvB,CAAC,CAAC,yDAAyD;YAC3D,CAAC,CAAC,uDAAuD;QAC3D,MAAM,EAAE,aAAa;YACnB,CAAC,CAAC,aAAa,WAAW,EAAE;YAC5B,CAAC,CAAC,oEAAoE;QACxE,UAAU,EAAE,gBAAgB;KAC7B,CAAC;IAEF,MAAM,SAAS,GAAkB;QAC/B,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;KACtE,CAAC;IAEF,MAAM,UAAU,GAAkB;QAChC,QAAQ,EAAE,gCAAgC;QAC1C,KAAK,EAAE,yCAAyC;QAChD,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KACxC,CAAC;IAEF,MAAM,UAAU,GAAkB;QAChC,QAAQ,EAAE,8BAA8B;QACxC,UAAU,EAAE,qCAAqC;QACjD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,+BAA+B;KACrE,CAAC;IAEF,OAAO,CACL,eAAK,KAAK,EAAE,SAAS,aAClB,IAAI,CAAC,IAAI,IAAI,eAAM,KAAK,EAAE,SAAS,YAAG,IAAI,CAAC,IAAI,GAAQ,EACxD,eAAM,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,KAAK,GAAQ,EAC5C,eAAM,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,KAAK,GAAQ,IACxC,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAwB;IAC5E,MAAM,YAAY,GAAG,WAAW,IAAI,kCAAkC,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IAErC,0CAA0C;IAC1C,IAAI,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IACnC,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;QACrE,2CAA2C;QAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,GAAG,IAAI;YACP,YAAY,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3F,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/E,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,YAAY,KAAK,QAAQ;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,cAAc,GAAkB;QACpC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QAC3E,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACvD,mBAAmB,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC9E,GAAG,EAAE,8BAA8B;QACnC,OAAO,EAAE,gCAAgC;KAC1C,CAAC;IAEF,eAAe;IACf,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,CACL,gBACE,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM;gBACb,cAAc,EAAE,UAAU;gBAC1B,QAAQ,EAAE,gCAAgC;aAC3C,YAED,0BACG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CACjC,cAEE,KAAK,EAAE;wBACL,YAAY,EACV,GAAG,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;4BAC7B,CAAC,CAAC,oEAAoE;4BACtE,CAAC,CAAC,SAAS;qBAChB,aAED,cACE,KAAK,EAAE;gCACL,OAAO,EAAE,gCAAgC;gCACzC,KAAK,EAAE,yCAAyC;gCAChD,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,GAAG,EAAE,8BAA8B;6BACpC,aAEA,IAAI,CAAC,IAAI,IAAI,yBAAO,IAAI,CAAC,IAAI,GAAQ,EACrC,IAAI,CAAC,KAAK,IACR,EACL,aACE,KAAK,EAAE;gCACL,OAAO,EAAE,gCAAgC;gCACzC,SAAS,EAAE,OAAO;gCAClB,UAAU,EAAE,qCAAqC;gCACjD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,+BAA+B;6BACvE,YAEA,IAAI,CAAC,KAAK,GACR,KA7BA,GAAG,CA8BL,CACN,CAAC,GACI,GACF,CACT,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,OAAO,CACL,cAAK,KAAK,EAAE,cAAc,YACvB,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CACjC,KAAC,kBAAkB,IAEjB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,MAAM,IAHT,GAAG,CAIR,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { StatsContent } from "../../types";
2
+ interface StatsBlockProps {
3
+ content: StatsContent;
4
+ accentColor?: string;
5
+ }
6
+ /**
7
+ * Stats block component - displays a metric with trend and sparkline
8
+ */
9
+ export declare function StatsBlock({ content, accentColor }: StatsBlockProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ /**
4
+ * Trend indicator component
5
+ */
6
+ function TrendBadge({ trend }) {
7
+ const isPositive = trend.direction === "up";
8
+ const isNegative = trend.direction === "down";
9
+ const color = isPositive
10
+ ? "var(--sc-color-success, #34c759)"
11
+ : isNegative
12
+ ? "var(--sc-color-error, #ff453a)"
13
+ : "var(--sc-color-text-muted, #8e8e93)";
14
+ const bgColor = isPositive
15
+ ? "var(--sc-color-success-muted, rgba(52, 199, 89, 0.15))"
16
+ : isNegative
17
+ ? "var(--sc-color-error-muted, rgba(255, 69, 58, 0.15))"
18
+ : "rgba(142, 142, 147, 0.15)";
19
+ const ArrowIcon = () => (_jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", style: {
20
+ transform: isPositive ? "rotate(0deg)" : isNegative ? "rotate(180deg)" : "rotate(90deg)",
21
+ }, children: _jsx("path", { d: "M5 1v8M5 1L2 4M5 1l3 3", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
22
+ return (_jsxs("span", { style: {
23
+ display: "inline-flex",
24
+ alignItems: "center",
25
+ gap: "4px",
26
+ padding: "2px 8px",
27
+ borderRadius: "var(--sc-border-radius-full, 9999px)",
28
+ background: bgColor,
29
+ color: color,
30
+ fontSize: "var(--sc-font-size-xs, 0.7rem)",
31
+ fontWeight: "var(--sc-font-weight-medium, 500)",
32
+ }, children: [_jsx(ArrowIcon, {}), trend.value, trend.timeframe && (_jsx("span", { style: { color: "var(--sc-color-text-muted, #8e8e93)" }, children: trend.timeframe }))] }));
33
+ }
34
+ /**
35
+ * Mini sparkline chart using SVG
36
+ */
37
+ function Sparkline({ data, color }) {
38
+ const { path, width, height } = useMemo(() => {
39
+ const w = 60;
40
+ const h = 24;
41
+ const padding = 2;
42
+ if (data.length < 2) {
43
+ return { path: "", width: w, height: h };
44
+ }
45
+ const min = Math.min(...data);
46
+ const max = Math.max(...data);
47
+ const range = max - min || 1;
48
+ const points = data.map((value, index) => {
49
+ const x = padding + (index / (data.length - 1)) * (w - padding * 2);
50
+ const y = h - padding - ((value - min) / range) * (h - padding * 2);
51
+ return { x, y };
52
+ });
53
+ const pathData = points.reduce((acc, point, i) => {
54
+ return acc + (i === 0 ? `M ${point.x} ${point.y}` : ` L ${point.x} ${point.y}`);
55
+ }, "");
56
+ return { path: pathData, width: w, height: h };
57
+ }, [data]);
58
+ if (!path)
59
+ return null;
60
+ return (_jsxs("svg", { width: width, height: height, viewBox: `0 0 ${width} ${height}`, style: { overflow: "visible" }, children: [_jsx("path", { d: path, stroke: color, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }), _jsx("defs", { children: _jsxs("linearGradient", { id: "sparkline-gradient", x1: "0", x2: "0", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: color, stopOpacity: "0.3" }), _jsx("stop", { offset: "100%", stopColor: color, stopOpacity: "0" })] }) }), _jsx("path", { d: `${path} L ${width - 2} ${height} L 2 ${height} Z`, fill: "url(#sparkline-gradient)" })] }));
61
+ }
62
+ /**
63
+ * Stats block component - displays a metric with trend and sparkline
64
+ */
65
+ export function StatsBlock({ content, accentColor }) {
66
+ const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
67
+ const containerStyle = {
68
+ display: "flex",
69
+ flexDirection: "column",
70
+ gap: "var(--sc-spacing-sm, 0.5rem)",
71
+ padding: "var(--sc-spacing-sm, 0.5rem) 0",
72
+ };
73
+ const valueContainerStyle = {
74
+ display: "flex",
75
+ alignItems: "baseline",
76
+ gap: "var(--sc-spacing-xs, 0.25rem)",
77
+ };
78
+ const valueStyle = {
79
+ fontSize: "var(--sc-font-size-xxl, 1.5rem)",
80
+ fontWeight: "var(--sc-font-weight-bold, 700)",
81
+ color: primaryColor,
82
+ letterSpacing: "-0.02em",
83
+ lineHeight: 1,
84
+ };
85
+ const unitStyle = {
86
+ fontSize: "var(--sc-font-size-md, 0.9rem)",
87
+ fontWeight: "var(--sc-font-weight-normal, 400)",
88
+ color: "var(--sc-color-text-muted, #8e8e93)",
89
+ };
90
+ const labelStyle = {
91
+ fontSize: "var(--sc-font-size-sm, 0.8rem)",
92
+ color: "var(--sc-color-text-secondary, #a1a1a6)",
93
+ margin: 0,
94
+ };
95
+ const bottomRowStyle = {
96
+ display: "flex",
97
+ alignItems: "center",
98
+ justifyContent: "space-between",
99
+ marginTop: "var(--sc-spacing-xs, 0.25rem)",
100
+ };
101
+ return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: valueContainerStyle, children: [content.prefix && _jsx("span", { style: unitStyle, children: content.prefix }), _jsx("span", { style: valueStyle, children: content.value }), content.suffix && _jsx("span", { style: unitStyle, children: content.suffix })] }), _jsx("p", { style: labelStyle, children: content.label }), (content.trend || content.sparkline) && (_jsxs("div", { style: bottomRowStyle, children: [content.trend && _jsx(TrendBadge, { trend: content.trend }), content.sparkline && content.sparkline.length > 1 && (_jsx(Sparkline, { data: content.sparkline, color: primaryColor }))] }))] }));
102
+ }
103
+ //# sourceMappingURL=StatsBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsBlock.js","sourceRoot":"","sources":["../../../src/blocks/data/StatsBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { StatsBlock } from "./StatsBlock";
2
+ export { ComparisonBlock } from "./ComparisonBlock";
@@ -0,0 +1,3 @@
1
+ export { StatsBlock } from "./StatsBlock";
2
+ export { ComparisonBlock } from "./ComparisonBlock";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blocks/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,26 @@
1
+ export * from "./notification";
2
+ export * from "./data";
3
+ export * from "./interactive";
4
+ import type { ReactNode } from "react";
5
+ import type { TileContent } from "../types";
6
+ /**
7
+ * Block renderer function type
8
+ */
9
+ export type BlockRenderer = (content: TileContent, options: {
10
+ accentColor?: string;
11
+ onDismiss?: () => void;
12
+ onRatingSubmit?: (value: number) => void;
13
+ }) => ReactNode | null;
14
+ /**
15
+ * Render a block based on its content type
16
+ * Returns null if the type is not recognized as a new block type
17
+ */
18
+ export declare function renderBlock(content: TileContent, options?: {
19
+ accentColor?: string;
20
+ onDismiss?: () => void;
21
+ onRatingSubmit?: (value: number) => void;
22
+ }): ReactNode | null;
23
+ /**
24
+ * Check if a content type is handled by the new block system
25
+ */
26
+ export declare function isNewBlockType(type: string): boolean;
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // Block components by category
3
+ export * from "./notification";
4
+ export * from "./data";
5
+ export * from "./interactive";
6
+ import { NotificationBlock } from "./notification";
7
+ import { StatsBlock, ComparisonBlock } from "./data";
8
+ import { RatingBlock, ChecklistBlock } from "./interactive";
9
+ /**
10
+ * Check if content is a notification type
11
+ */
12
+ function isNotificationContent(content) {
13
+ return ["alert", "success", "warning", "info", "error"].includes(content.type);
14
+ }
15
+ /**
16
+ * Check if content is stats type
17
+ */
18
+ function isStatsContent(content) {
19
+ return content.type === "stats";
20
+ }
21
+ /**
22
+ * Check if content is comparison type
23
+ */
24
+ function isComparisonContent(content) {
25
+ return content.type === "comparison";
26
+ }
27
+ /**
28
+ * Check if content is rating type
29
+ */
30
+ function isRatingContent(content) {
31
+ return content.type === "rating";
32
+ }
33
+ /**
34
+ * Check if content is checklist type
35
+ */
36
+ function isChecklistContent(content) {
37
+ return content.type === "checklist";
38
+ }
39
+ /**
40
+ * Render a block based on its content type
41
+ * Returns null if the type is not recognized as a new block type
42
+ */
43
+ export function renderBlock(content, options = {}) {
44
+ // Notification blocks
45
+ if (isNotificationContent(content)) {
46
+ return (_jsx(NotificationBlock, { content: content, accentColor: options.accentColor, onDismiss: options.onDismiss }));
47
+ }
48
+ // Data blocks
49
+ if (isStatsContent(content)) {
50
+ return _jsx(StatsBlock, { content: content, accentColor: options.accentColor });
51
+ }
52
+ if (isComparisonContent(content)) {
53
+ return _jsx(ComparisonBlock, { content: content, accentColor: options.accentColor });
54
+ }
55
+ // Interactive blocks
56
+ if (isRatingContent(content)) {
57
+ return (_jsx(RatingBlock, { content: content, accentColor: options.accentColor, onSubmit: options.onRatingSubmit }));
58
+ }
59
+ if (isChecklistContent(content)) {
60
+ return (_jsx(ChecklistBlock, { content: content, accentColor: options.accentColor }));
61
+ }
62
+ // Not a new block type, return null to fall back to legacy rendering
63
+ return null;
64
+ }
65
+ /**
66
+ * Check if a content type is handled by the new block system
67
+ */
68
+ export function isNewBlockType(type) {
69
+ const newBlockTypes = [
70
+ // Notification
71
+ "alert",
72
+ "success",
73
+ "warning",
74
+ "info",
75
+ "error",
76
+ // Data
77
+ "stats",
78
+ "comparison",
79
+ "chart",
80
+ "table",
81
+ // Interactive
82
+ "form",
83
+ "rating",
84
+ "progress",
85
+ "survey",
86
+ "checklist",
87
+ // Media
88
+ "video",
89
+ "gallery",
90
+ "code",
91
+ ];
92
+ return newBlockTypes.includes(type);
93
+ }
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blocks/index.tsx"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAY9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc5D;;GAEG;AACH,SAAS,qBAAqB,CAAC,OAAoB;IACjD,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAoB;IAC1C,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAoB;IAC3C,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAoB;IAC9C,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAAoB,EACpB,UAII,EAAE;IAEN,sBAAsB;IACtB,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,CACL,KAAC,iBAAiB,IAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,SAAS,EAAE,OAAO,CAAC,SAAS,GAC5B,CACH,CAAC;IACJ,CAAC;IAED,cAAc;IACd,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,GAAI,CAAC;IAC5E,CAAC;IAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,GAAI,CAAC;IACjF,CAAC;IAED,qBAAqB;IACrB,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,CACL,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,QAAQ,EAAE,OAAO,CAAC,cAAc,GAChC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,CACL,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,CAAC,WAAW,GAChC,CACH,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,aAAa,GAAG;QACpB,eAAe;QACf,OAAO;QACP,SAAS;QACT,SAAS;QACT,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,YAAY;QACZ,OAAO;QACP,OAAO;QACP,cAAc;QACd,MAAM;QACN,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,OAAO;QACP,SAAS;QACT,MAAM;KACP,CAAC;IACF,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ChecklistContent } from "../../types";
2
+ interface ChecklistBlockProps {
3
+ content: ChecklistContent;
4
+ accentColor?: string;
5
+ }
6
+ /**
7
+ * Checklist/Action Center block component
8
+ * Displays a list of action items with navigation links
9
+ */
10
+ export declare function ChecklistBlock({ content, accentColor }: ChecklistBlockProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,110 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Checklist/Action Center block component
4
+ * Displays a list of action items with navigation links
5
+ */
6
+ export function ChecklistBlock({ content, accentColor }) {
7
+ const primaryColor = accentColor || "var(--sc-color-primary, #6366f1)";
8
+ const completedCount = content.items.filter(item => item.completed).length;
9
+ const totalCount = content.items.length;
10
+ const containerStyle = {
11
+ display: "flex",
12
+ flexDirection: "column",
13
+ gap: "var(--sc-spacing-sm, 0.5rem)",
14
+ };
15
+ const progressStyle = {
16
+ display: "flex",
17
+ alignItems: "center",
18
+ gap: "var(--sc-spacing-sm, 0.5rem)",
19
+ marginBottom: "var(--sc-spacing-sm, 0.5rem)",
20
+ fontSize: "var(--sc-font-size-xs, 0.75rem)",
21
+ color: "var(--sc-color-text-muted, #8e8e93)",
22
+ };
23
+ const progressBarContainerStyle = {
24
+ flex: 1,
25
+ height: "4px",
26
+ background: "var(--sc-color-surface, rgba(58, 58, 60, 0.8))",
27
+ borderRadius: "2px",
28
+ overflow: "hidden",
29
+ };
30
+ const progressBarStyle = {
31
+ height: "100%",
32
+ width: `${totalCount > 0 ? (completedCount / totalCount) * 100 : 0}%`,
33
+ background: primaryColor,
34
+ borderRadius: "2px",
35
+ transition: "width 0.3s ease",
36
+ };
37
+ const itemStyle = (completed) => ({
38
+ display: "flex",
39
+ alignItems: "flex-start",
40
+ gap: "var(--sc-spacing-md, 0.75rem)",
41
+ padding: "var(--sc-spacing-md, 0.75rem)",
42
+ background: "var(--sc-color-surface, rgba(58, 58, 60, 0.5))",
43
+ borderRadius: "var(--sc-border-radius-md, 10px)",
44
+ border: "1px solid var(--sc-color-border, rgba(255, 255, 255, 0.08))",
45
+ opacity: completed ? 0.6 : 1,
46
+ transition: "all 0.15s ease",
47
+ });
48
+ const checkboxStyle = (completed) => ({
49
+ width: "20px",
50
+ height: "20px",
51
+ borderRadius: "50%",
52
+ border: completed ? "none" : "2px solid var(--sc-color-border, rgba(255, 255, 255, 0.2))",
53
+ background: completed ? "#34c759" : "transparent",
54
+ display: "flex",
55
+ alignItems: "center",
56
+ justifyContent: "center",
57
+ flexShrink: 0,
58
+ marginTop: "2px",
59
+ });
60
+ const textContainerStyle = {
61
+ flex: 1,
62
+ minWidth: 0,
63
+ };
64
+ const titleStyle = (completed) => ({
65
+ fontSize: "var(--sc-font-size-sm, 0.85rem)",
66
+ fontWeight: "var(--sc-font-weight-semibold, 600)",
67
+ color: "var(--sc-color-text, #f5f5f7)",
68
+ margin: 0,
69
+ textDecoration: completed ? "line-through" : "none",
70
+ });
71
+ const descriptionStyle = {
72
+ fontSize: "var(--sc-font-size-xs, 0.75rem)",
73
+ color: "var(--sc-color-text-muted, #8e8e93)",
74
+ margin: "var(--sc-spacing-xs, 0.25rem) 0 0",
75
+ lineHeight: 1.4,
76
+ };
77
+ const linkButtonStyle = {
78
+ display: "inline-flex",
79
+ alignItems: "center",
80
+ gap: "var(--sc-spacing-xs, 0.25rem)",
81
+ padding: "var(--sc-spacing-xs, 0.25rem) var(--sc-spacing-sm, 0.5rem)",
82
+ borderRadius: "var(--sc-border-radius-sm, 6px)",
83
+ border: "1px solid var(--sc-color-border, rgba(255, 255, 255, 0.15))",
84
+ background: "transparent",
85
+ color: "var(--sc-color-text, #f5f5f7)",
86
+ fontSize: "var(--sc-font-size-xs, 0.75rem)",
87
+ fontWeight: "var(--sc-font-weight-medium, 500)",
88
+ cursor: "pointer",
89
+ textDecoration: "none",
90
+ transition: "all 0.15s ease",
91
+ flexShrink: 0,
92
+ };
93
+ const handleItemClick = (href) => {
94
+ if (href && typeof window !== "undefined") {
95
+ window.location.href = href;
96
+ }
97
+ };
98
+ return (_jsxs("div", { style: containerStyle, children: [content.showProgress !== false && totalCount > 0 && (_jsxs("div", { style: progressStyle, children: [_jsxs("span", { children: [completedCount, " of ", totalCount] }), _jsx("div", { style: progressBarContainerStyle, children: _jsx("div", { style: progressBarStyle }) })] })), content.items.map((item) => {
99
+ var _a, _b, _c;
100
+ return (_jsxs("div", { style: itemStyle((_a = item.completed) !== null && _a !== void 0 ? _a : false), children: [_jsx("div", { style: checkboxStyle((_b = item.completed) !== null && _b !== void 0 ? _b : false), children: item.completed && (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M20 6L9 17l-5-5", stroke: "white", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }) })) }), _jsxs("div", { style: textContainerStyle, children: [_jsx("p", { style: titleStyle((_c = item.completed) !== null && _c !== void 0 ? _c : false), children: item.title }), item.description && (_jsx("p", { style: descriptionStyle, children: item.description }))] }), item.href && !item.completed && (_jsxs("button", { style: linkButtonStyle, onClick: (e) => {
101
+ e.stopPropagation();
102
+ handleItemClick(item.href);
103
+ }, onMouseEnter: (e) => {
104
+ e.currentTarget.style.background = "var(--sc-color-surface, rgba(58, 58, 60, 0.8))";
105
+ }, onMouseLeave: (e) => {
106
+ e.currentTarget.style.background = "transparent";
107
+ }, children: [item.linkLabel || "Go", _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M5 12h14M12 5l7 7-7 7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })] }))] }, item.id));
108
+ })] }));
109
+ }
110
+ //# sourceMappingURL=ChecklistBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChecklistBlock.js","sourceRoot":"","sources":["../../../src/blocks/interactive/ChecklistBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RatingContent } from "../../types";
2
+ interface RatingBlockProps {
3
+ content: RatingContent;
4
+ onSubmit?: (value: number) => void;
5
+ accentColor?: string;
6
+ }
7
+ /**
8
+ * Rating block component
9
+ */
10
+ export declare function RatingBlock({ content, onSubmit, accentColor }: RatingBlockProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};