@dataverse-kit/form-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/dist/businessRules-U1_MBgyG.d.cts +372 -0
  4. package/dist/businessRules-U1_MBgyG.d.ts +372 -0
  5. package/dist/context.cjs +151 -0
  6. package/dist/context.cjs.map +1 -0
  7. package/dist/context.d.cts +132 -0
  8. package/dist/context.d.ts +132 -0
  9. package/dist/context.mjs +113 -0
  10. package/dist/context.mjs.map +1 -0
  11. package/dist/control-DFOg_pc_.d.cts +1027 -0
  12. package/dist/control-DaXBm-52.d.ts +1027 -0
  13. package/dist/gridCustomizer-C0V9FAE_.d.ts +569 -0
  14. package/dist/gridCustomizer-mJO-kmQ4.d.cts +569 -0
  15. package/dist/hooks.cjs +85 -0
  16. package/dist/hooks.cjs.map +1 -0
  17. package/dist/hooks.d.cts +24 -0
  18. package/dist/hooks.d.ts +24 -0
  19. package/dist/hooks.mjs +60 -0
  20. package/dist/hooks.mjs.map +1 -0
  21. package/dist/icons.cjs +202 -0
  22. package/dist/icons.cjs.map +1 -0
  23. package/dist/icons.d.cts +130 -0
  24. package/dist/icons.d.ts +130 -0
  25. package/dist/icons.mjs +165 -0
  26. package/dist/icons.mjs.map +1 -0
  27. package/dist/index.cjs +6509 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +410 -0
  30. package/dist/index.d.ts +410 -0
  31. package/dist/index.mjs +6490 -0
  32. package/dist/index.mjs.map +1 -0
  33. package/dist/runtime-capabilities-BdGDdu0d.d.cts +119 -0
  34. package/dist/runtime-capabilities-Brfc7loJ.d.ts +119 -0
  35. package/dist/theme-BfeZIxmZ.d.cts +74 -0
  36. package/dist/theme-BfeZIxmZ.d.ts +74 -0
  37. package/dist/theme.cjs +215 -0
  38. package/dist/theme.cjs.map +1 -0
  39. package/dist/theme.d.cts +32 -0
  40. package/dist/theme.d.ts +32 -0
  41. package/dist/theme.mjs +186 -0
  42. package/dist/theme.mjs.map +1 -0
  43. package/dist/types.cjs +976 -0
  44. package/dist/types.cjs.map +1 -0
  45. package/dist/types.d.cts +813 -0
  46. package/dist/types.d.ts +813 -0
  47. package/dist/types.mjs +902 -0
  48. package/dist/types.mjs.map +1 -0
  49. package/dist/utils.cjs +250 -0
  50. package/dist/utils.cjs.map +1 -0
  51. package/dist/utils.d.cts +99 -0
  52. package/dist/utils.d.ts +99 -0
  53. package/dist/utils.mjs +220 -0
  54. package/dist/utils.mjs.map +1 -0
  55. package/dist/v8.cjs +4622 -0
  56. package/dist/v8.cjs.map +1 -0
  57. package/dist/v8.d.cts +730 -0
  58. package/dist/v8.d.ts +730 -0
  59. package/dist/v8.mjs +4622 -0
  60. package/dist/v8.mjs.map +1 -0
  61. package/dist/v9.cjs +19 -0
  62. package/dist/v9.cjs.map +1 -0
  63. package/dist/v9.d.cts +2 -0
  64. package/dist/v9.d.ts +2 -0
  65. package/dist/v9.mjs +1 -0
  66. package/dist/v9.mjs.map +1 -0
  67. package/package.json +113 -0
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { b as FormThemeSettings, a as FormThemeColors } from './theme-BfeZIxmZ.js';
3
+
4
+ /**
5
+ * Theme context provides resolved theme colors to runtime components.
6
+ *
7
+ * Lifted from apps/form-builder/src/contexts/ThemeContext.tsx in Phase 1a
8
+ * of the WYSIWYG-canvas refactor. Note the inversion: this provider takes
9
+ * `themeSettings` as a prop rather than reading the editor's Zustand store.
10
+ * The form-builder app supplies a thin wrapper that subscribes to its
11
+ * `useDesignerStore` selector and passes the value down — that keeps
12
+ * form-runtime free of editor-state dependencies and reusable by any host
13
+ * (designer canvas, preview, generated form code, the runtime.html entry).
14
+ */
15
+ declare const ThemeContext: React.Context<FormThemeColors>;
16
+ /** Hook to access the current form theme colors. */
17
+ declare function useFormTheme(): FormThemeColors;
18
+ interface FormThemeProviderProps {
19
+ /**
20
+ * Theme settings to resolve. Pass `form.settings.theme` from your form
21
+ * definition. When `undefined`, the resolver returns the DEFAULT_THEME
22
+ * colors — same fallback the form-builder editor relied on.
23
+ */
24
+ themeSettings: FormThemeSettings | undefined;
25
+ children: React.ReactNode;
26
+ }
27
+ /**
28
+ * Theme provider that resolves theme from caller-supplied settings.
29
+ */
30
+ declare const FormThemeProvider: React.FC<FormThemeProviderProps>;
31
+
32
+ export { FormThemeProvider, type FormThemeProviderProps, ThemeContext, useFormTheme };
package/dist/theme.mjs ADDED
@@ -0,0 +1,186 @@
1
+ // src/theme/FormThemeContext.tsx
2
+ import { createContext, useContext, useMemo } from "react";
3
+
4
+ // src/types/theme.ts
5
+ var THEME_PRESETS = [
6
+ {
7
+ id: "soft-blue",
8
+ name: "Soft blue",
9
+ colors: {
10
+ primary: "#0078d4",
11
+ primaryDark: "#005a9e",
12
+ headerBackground: "#ffffff",
13
+ sectionBackground: "#ffffff",
14
+ canvasBackground: "#f3f2f1",
15
+ textPrimary: "#323130",
16
+ textSecondary: "#605e5c",
17
+ border: "#edebe9",
18
+ inputBackground: "#ffffff",
19
+ inputBorder: "#8a8886"
20
+ }
21
+ },
22
+ {
23
+ id: "blue",
24
+ name: "Blue",
25
+ colors: {
26
+ primary: "#0078d4",
27
+ primaryDark: "#005a9e",
28
+ headerBackground: "#0078d4",
29
+ sectionBackground: "#e6f2ff",
30
+ canvasBackground: "#e6f2ff",
31
+ textPrimary: "#323130",
32
+ textSecondary: "#605e5c",
33
+ border: "#c7e0f4",
34
+ inputBackground: "#ffffff",
35
+ inputBorder: "#0078d4"
36
+ }
37
+ },
38
+ {
39
+ id: "light",
40
+ name: "Light",
41
+ colors: {
42
+ primary: "#605e5c",
43
+ primaryDark: "#3b3a39",
44
+ headerBackground: "#f5f5f5",
45
+ sectionBackground: "#ffffff",
46
+ canvasBackground: "#fafafa",
47
+ textPrimary: "#323130",
48
+ textSecondary: "#605e5c",
49
+ border: "#e1dfdd",
50
+ inputBackground: "#ffffff",
51
+ inputBorder: "#8a8886"
52
+ }
53
+ },
54
+ {
55
+ id: "coral",
56
+ name: "Coral",
57
+ colors: {
58
+ primary: "#d83b01",
59
+ primaryDark: "#a52a00",
60
+ headerBackground: "#d83b01",
61
+ sectionBackground: "#fff4f0",
62
+ canvasBackground: "#fff4f0",
63
+ textPrimary: "#323130",
64
+ textSecondary: "#605e5c",
65
+ border: "#f3d6cd",
66
+ inputBackground: "#ffffff",
67
+ inputBorder: "#d83b01"
68
+ }
69
+ },
70
+ {
71
+ id: "red",
72
+ name: "Red",
73
+ colors: {
74
+ primary: "#a4262c",
75
+ primaryDark: "#7e1e23",
76
+ headerBackground: "#a4262c",
77
+ sectionBackground: "#fdf3f4",
78
+ canvasBackground: "#fdf3f4",
79
+ textPrimary: "#323130",
80
+ textSecondary: "#605e5c",
81
+ border: "#f1d3d5",
82
+ inputBackground: "#ffffff",
83
+ inputBorder: "#a4262c"
84
+ }
85
+ },
86
+ {
87
+ id: "steel",
88
+ name: "Steel",
89
+ colors: {
90
+ primary: "#004578",
91
+ primaryDark: "#002d4e",
92
+ headerBackground: "#004578",
93
+ sectionBackground: "#f0f4f7",
94
+ canvasBackground: "#e8eef2",
95
+ textPrimary: "#323130",
96
+ textSecondary: "#605e5c",
97
+ border: "#c8d4dc",
98
+ inputBackground: "#ffffff",
99
+ inputBorder: "#004578"
100
+ }
101
+ },
102
+ {
103
+ id: "dune",
104
+ name: "Dune",
105
+ colors: {
106
+ primary: "#7a6855",
107
+ primaryDark: "#5c4f3f",
108
+ headerBackground: "#7a6855",
109
+ sectionBackground: "#f5f3f0",
110
+ canvasBackground: "#e8e4df",
111
+ textPrimary: "#323130",
112
+ textSecondary: "#605e5c",
113
+ border: "#d6d0c8",
114
+ inputBackground: "#ffffff",
115
+ inputBorder: "#7a6855"
116
+ }
117
+ },
118
+ {
119
+ id: "lavender",
120
+ name: "Lavender",
121
+ colors: {
122
+ primary: "#5c2d91",
123
+ primaryDark: "#472270",
124
+ headerBackground: "#5c2d91",
125
+ sectionBackground: "#f9f5ff",
126
+ canvasBackground: "#f5f0fa",
127
+ textPrimary: "#323130",
128
+ textSecondary: "#605e5c",
129
+ border: "#e1d4f0",
130
+ inputBackground: "#ffffff",
131
+ inputBorder: "#5c2d91"
132
+ }
133
+ },
134
+ {
135
+ id: "brown",
136
+ name: "Brown",
137
+ colors: {
138
+ primary: "#6d4c41",
139
+ primaryDark: "#4e362e",
140
+ headerBackground: "#6d4c41",
141
+ sectionBackground: "#f5f0ed",
142
+ canvasBackground: "#ebe5e1",
143
+ textPrimary: "#323130",
144
+ textSecondary: "#605e5c",
145
+ border: "#d4ccc7",
146
+ inputBackground: "#ffffff",
147
+ inputBorder: "#6d4c41"
148
+ }
149
+ }
150
+ ];
151
+ var DEFAULT_THEME = THEME_PRESETS[0];
152
+ function getThemeById(id) {
153
+ return THEME_PRESETS.find((t) => t.id === id) ?? DEFAULT_THEME;
154
+ }
155
+ function getResolvedThemeColors(themeSettings) {
156
+ const theme = getThemeById(themeSettings?.presetId ?? "soft-blue");
157
+ if (themeSettings?.customBackgroundColor) {
158
+ return {
159
+ ...theme.colors,
160
+ canvasBackground: themeSettings.customBackgroundColor
161
+ };
162
+ }
163
+ return theme.colors;
164
+ }
165
+
166
+ // src/theme/FormThemeContext.tsx
167
+ import { jsx } from "react/jsx-runtime";
168
+ var ThemeContext = createContext(DEFAULT_THEME.colors);
169
+ function useFormTheme() {
170
+ return useContext(ThemeContext);
171
+ }
172
+ var FormThemeProvider = ({
173
+ themeSettings,
174
+ children
175
+ }) => {
176
+ const themeColors = useMemo(() => {
177
+ return getResolvedThemeColors(themeSettings);
178
+ }, [themeSettings]);
179
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: themeColors, children });
180
+ };
181
+ export {
182
+ FormThemeProvider,
183
+ ThemeContext,
184
+ useFormTheme
185
+ };
186
+ //# sourceMappingURL=theme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/FormThemeContext.tsx","../src/types/theme.ts"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\nimport {\n FormThemeColors,\n FormThemeSettings,\n DEFAULT_THEME,\n getResolvedThemeColors,\n} from '../types';\n\n/**\n * Theme context provides resolved theme colors to runtime components.\n *\n * Lifted from apps/form-builder/src/contexts/ThemeContext.tsx in Phase 1a\n * of the WYSIWYG-canvas refactor. Note the inversion: this provider takes\n * `themeSettings` as a prop rather than reading the editor's Zustand store.\n * The form-builder app supplies a thin wrapper that subscribes to its\n * `useDesignerStore` selector and passes the value down — that keeps\n * form-runtime free of editor-state dependencies and reusable by any host\n * (designer canvas, preview, generated form code, the runtime.html entry).\n */\nexport const ThemeContext = createContext<FormThemeColors>(DEFAULT_THEME.colors);\n\n/** Hook to access the current form theme colors. */\nexport function useFormTheme(): FormThemeColors {\n return useContext(ThemeContext);\n}\n\nexport interface FormThemeProviderProps {\n /**\n * Theme settings to resolve. Pass `form.settings.theme` from your form\n * definition. When `undefined`, the resolver returns the DEFAULT_THEME\n * colors — same fallback the form-builder editor relied on.\n */\n themeSettings: FormThemeSettings | undefined;\n children: React.ReactNode;\n}\n\n/**\n * Theme provider that resolves theme from caller-supplied settings.\n */\nexport const FormThemeProvider: React.FC<FormThemeProviderProps> = ({\n themeSettings,\n children,\n}) => {\n const themeColors = useMemo(() => {\n return getResolvedThemeColors(themeSettings);\n }, [themeSettings]);\n\n return <ThemeContext.Provider value={themeColors}>{children}</ThemeContext.Provider>;\n};\n","/**\n * Theme configuration for Form Builder\n * Provides Canvas-app-style theming with 9 preset themes\n */\n\nexport interface FormThemeColors {\n /** Main accent color for buttons, links, focus rings */\n primary: string;\n /** Darker variant of primary */\n primaryDark: string;\n /** Form header bar background */\n headerBackground: string;\n /** Section card background */\n sectionBackground: string;\n /** Canvas/page background */\n canvasBackground: string;\n /** Main text color */\n textPrimary: string;\n /** Muted/secondary text color */\n textSecondary: string;\n /** Section and component borders */\n border: string;\n /** Input field background */\n inputBackground: string;\n /** Input field borders */\n inputBorder: string;\n}\n\nexport interface FormTheme {\n id: string;\n name: string;\n colors: FormThemeColors;\n}\n\nexport interface GradientStop {\n color: string;\n position: number; // 0-100\n}\n\nexport type BackgroundConfig =\n | { type: 'color'; color: string }\n | { type: 'image'; src: string; size: 'cover' | 'contain' | 'auto'; position: string;\n repeat: 'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y'; opacity?: number }\n | { type: 'gradient'; direction: number; stops: GradientStop[] };\n\nexport interface FormThemeSettings {\n /** The preset theme ID (e.g., 'blue', 'coral') */\n presetId: string;\n /** Optional custom background color that overrides theme's canvasBackground */\n customBackgroundColor?: string;\n /** Enhanced canvas background (color, image, or gradient) */\n canvasBackground?: BackgroundConfig;\n /** Enhanced header background (color, image, or gradient). When undefined, uses theme's headerBackground. */\n headerBackground?: BackgroundConfig;\n}\n\n/**\n * 9 preset themes matching Canvas app styling\n */\nexport const THEME_PRESETS: FormTheme[] = [\n {\n id: 'soft-blue',\n name: 'Soft blue',\n colors: {\n primary: '#0078d4',\n primaryDark: '#005a9e',\n headerBackground: '#ffffff',\n sectionBackground: '#ffffff',\n canvasBackground: '#f3f2f1',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#edebe9',\n inputBackground: '#ffffff',\n inputBorder: '#8a8886',\n },\n },\n {\n id: 'blue',\n name: 'Blue',\n colors: {\n primary: '#0078d4',\n primaryDark: '#005a9e',\n headerBackground: '#0078d4',\n sectionBackground: '#e6f2ff',\n canvasBackground: '#e6f2ff',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#c7e0f4',\n inputBackground: '#ffffff',\n inputBorder: '#0078d4',\n },\n },\n {\n id: 'light',\n name: 'Light',\n colors: {\n primary: '#605e5c',\n primaryDark: '#3b3a39',\n headerBackground: '#f5f5f5',\n sectionBackground: '#ffffff',\n canvasBackground: '#fafafa',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#e1dfdd',\n inputBackground: '#ffffff',\n inputBorder: '#8a8886',\n },\n },\n {\n id: 'coral',\n name: 'Coral',\n colors: {\n primary: '#d83b01',\n primaryDark: '#a52a00',\n headerBackground: '#d83b01',\n sectionBackground: '#fff4f0',\n canvasBackground: '#fff4f0',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#f3d6cd',\n inputBackground: '#ffffff',\n inputBorder: '#d83b01',\n },\n },\n {\n id: 'red',\n name: 'Red',\n colors: {\n primary: '#a4262c',\n primaryDark: '#7e1e23',\n headerBackground: '#a4262c',\n sectionBackground: '#fdf3f4',\n canvasBackground: '#fdf3f4',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#f1d3d5',\n inputBackground: '#ffffff',\n inputBorder: '#a4262c',\n },\n },\n {\n id: 'steel',\n name: 'Steel',\n colors: {\n primary: '#004578',\n primaryDark: '#002d4e',\n headerBackground: '#004578',\n sectionBackground: '#f0f4f7',\n canvasBackground: '#e8eef2',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#c8d4dc',\n inputBackground: '#ffffff',\n inputBorder: '#004578',\n },\n },\n {\n id: 'dune',\n name: 'Dune',\n colors: {\n primary: '#7a6855',\n primaryDark: '#5c4f3f',\n headerBackground: '#7a6855',\n sectionBackground: '#f5f3f0',\n canvasBackground: '#e8e4df',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#d6d0c8',\n inputBackground: '#ffffff',\n inputBorder: '#7a6855',\n },\n },\n {\n id: 'lavender',\n name: 'Lavender',\n colors: {\n primary: '#5c2d91',\n primaryDark: '#472270',\n headerBackground: '#5c2d91',\n sectionBackground: '#f9f5ff',\n canvasBackground: '#f5f0fa',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#e1d4f0',\n inputBackground: '#ffffff',\n inputBorder: '#5c2d91',\n },\n },\n {\n id: 'brown',\n name: 'Brown',\n colors: {\n primary: '#6d4c41',\n primaryDark: '#4e362e',\n headerBackground: '#6d4c41',\n sectionBackground: '#f5f0ed',\n canvasBackground: '#ebe5e1',\n textPrimary: '#323130',\n textSecondary: '#605e5c',\n border: '#d4ccc7',\n inputBackground: '#ffffff',\n inputBorder: '#6d4c41',\n },\n },\n];\n\n/** Default theme (Soft blue) */\nexport const DEFAULT_THEME = THEME_PRESETS[0];\n\n/** Standard color palette for the color picker (like Canvas app) */\nexport const STANDARD_COLORS = [\n '#ffffff', '#000000', '#1a1a1a', '#333333', '#4d4d4d',\n '#666666', '#808080', '#999999', '#b3b3b3', '#cccccc',\n '#a4262c', '#d83b01', '#ff8c00', '#ffb900', '#fff100',\n '#bad80a', '#107c10', '#00b294', '#0078d4', '#5c2d91',\n];\n\n/** Get theme by ID, falls back to default */\nexport function getThemeById(id: string): FormTheme {\n return THEME_PRESETS.find((t) => t.id === id) ?? DEFAULT_THEME;\n}\n\n/** Get theme colors for a form, applying custom background if set */\nexport function getResolvedThemeColors(\n themeSettings?: FormThemeSettings\n): FormThemeColors {\n const theme = getThemeById(themeSettings?.presetId ?? 'soft-blue');\n\n if (themeSettings?.customBackgroundColor) {\n return {\n ...theme.colors,\n canvasBackground: themeSettings.customBackgroundColor,\n };\n }\n\n return theme.colors;\n}\n"],"mappings":"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","names":[]}