@optilogic/core 1.1.0 → 1.2.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/dist/index.cjs +285 -488
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -34
- package/dist/index.d.ts +50 -34
- package/dist/index.js +283 -481
- package/dist/index.js.map +1 -1
- package/dist/styles.css +84 -80
- package/dist/tailwind-preset.cjs +1 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.js +1 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/package.json +1 -1
- package/src/components/calendar.tsx +7 -2
- package/src/components/context-menu.tsx +2 -2
- package/src/components/data-grid/DataGrid.tsx +1 -1
- package/src/components/dropdown-menu.tsx +2 -2
- package/src/components/file-view/components/HtmlRenderer.tsx +108 -2
- package/src/components/popover.tsx +1 -1
- package/src/components/select.tsx +1 -1
- package/src/components/tooltip.tsx +2 -2
- package/src/index.ts +3 -8
- package/src/styles.css +84 -80
- package/src/tailwind-preset.ts +1 -0
- package/src/theme/index.ts +3 -8
- package/src/theme/presets.ts +211 -497
- package/src/theme/types.ts +10 -0
- package/src/theme/utils.ts +24 -0
package/dist/styles.css
CHANGED
|
@@ -17,94 +17,98 @@
|
|
|
17
17
|
|
|
18
18
|
@layer base {
|
|
19
19
|
:root {
|
|
20
|
+
/* Matches OPTILOGIC_LEGACY_THEME */
|
|
20
21
|
--background: 0 0% 100%;
|
|
21
|
-
--foreground:
|
|
22
|
-
--card: 0 0%
|
|
23
|
-
--card-foreground:
|
|
22
|
+
--foreground: 243 82% 20%;
|
|
23
|
+
--card: 0 0% 98%;
|
|
24
|
+
--card-foreground: 243 82% 20%;
|
|
24
25
|
--popover: 0 0% 100%;
|
|
25
|
-
--popover-foreground:
|
|
26
|
-
--primary:
|
|
27
|
-
--primary-foreground:
|
|
28
|
-
--secondary:
|
|
29
|
-
--secondary-foreground:
|
|
30
|
-
--muted:
|
|
31
|
-
--muted-foreground:
|
|
32
|
-
--accent:
|
|
33
|
-
--accent-foreground:
|
|
34
|
-
--destructive: 0
|
|
35
|
-
--destructive-foreground:
|
|
36
|
-
--success:
|
|
37
|
-
--success-foreground:
|
|
38
|
-
--warning:
|
|
39
|
-
--warning-foreground:
|
|
40
|
-
--border:
|
|
41
|
-
--input:
|
|
42
|
-
--ring:
|
|
43
|
-
--
|
|
44
|
-
--toggle-track
|
|
45
|
-
--
|
|
46
|
-
--
|
|
47
|
-
--
|
|
48
|
-
--chip
|
|
26
|
+
--popover-foreground: 243 82% 20%;
|
|
27
|
+
--primary: 243 82% 20%;
|
|
28
|
+
--primary-foreground: 0 0% 100%;
|
|
29
|
+
--secondary: 234 86% 67%;
|
|
30
|
+
--secondary-foreground: 0 0% 100%;
|
|
31
|
+
--muted: 216 27% 92%;
|
|
32
|
+
--muted-foreground: 0 1% 45%;
|
|
33
|
+
--accent: 229 87% 90%;
|
|
34
|
+
--accent-foreground: 243 82% 20%;
|
|
35
|
+
--destructive: 0 72% 51%;
|
|
36
|
+
--destructive-foreground: 0 0% 100%;
|
|
37
|
+
--success: 151 48% 50%;
|
|
38
|
+
--success-foreground: 0 0% 100%;
|
|
39
|
+
--warning: 45 90% 62%;
|
|
40
|
+
--warning-foreground: 243 82% 20%;
|
|
41
|
+
--border: 0 0% 82%;
|
|
42
|
+
--input: 0 0% 82%;
|
|
43
|
+
--ring: 234 86% 67%;
|
|
44
|
+
--popover-border: var(--border);
|
|
45
|
+
--toggle-track: 0 0% 82%;
|
|
46
|
+
--toggle-track-foreground: 0 0% 100%;
|
|
47
|
+
--input-hover: 234 86% 67%;
|
|
48
|
+
--divider: 0 0% 82%;
|
|
49
|
+
--chip: 227 88% 85%;
|
|
50
|
+
--chip-foreground: 243 82% 20%;
|
|
49
51
|
--disabled-opacity: 0.5;
|
|
50
52
|
--radius: 0.5rem;
|
|
51
|
-
--chart-1:
|
|
52
|
-
--chart-2:
|
|
53
|
-
--chart-3:
|
|
54
|
-
--chart-4:
|
|
55
|
-
--chart-5:
|
|
56
|
-
--chart-6:
|
|
57
|
-
--chart-7:
|
|
58
|
-
--chart-8:
|
|
59
|
-
--chart-9:
|
|
60
|
-
--chart-10:
|
|
61
|
-
--chart-11:
|
|
62
|
-
--chart-12:
|
|
53
|
+
--chart-1: 100 63% 51%;
|
|
54
|
+
--chart-2: 45 90% 62%;
|
|
55
|
+
--chart-3: 234 86% 67%;
|
|
56
|
+
--chart-4: 151 48% 50%;
|
|
57
|
+
--chart-5: 233 80% 76%;
|
|
58
|
+
--chart-6: 0 72% 51%;
|
|
59
|
+
--chart-7: 24 73% 55%;
|
|
60
|
+
--chart-8: 170 69% 46%;
|
|
61
|
+
--chart-9: 25 38% 44%;
|
|
62
|
+
--chart-10: 174 100% 34%;
|
|
63
|
+
--chart-11: 266 54% 50%;
|
|
64
|
+
--chart-12: 326 72% 55%;
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
.dark {
|
|
66
|
-
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--card
|
|
70
|
-
--
|
|
71
|
-
--popover
|
|
72
|
-
--
|
|
73
|
-
--primary
|
|
74
|
-
--
|
|
75
|
-
--secondary
|
|
76
|
-
--
|
|
77
|
-
--muted
|
|
78
|
-
--
|
|
79
|
-
--accent
|
|
80
|
-
--
|
|
81
|
-
--destructive
|
|
82
|
-
--
|
|
83
|
-
--success
|
|
84
|
-
--
|
|
85
|
-
--warning
|
|
86
|
-
--
|
|
87
|
-
--
|
|
88
|
-
--
|
|
89
|
-
--
|
|
90
|
-
--
|
|
91
|
-
--
|
|
92
|
-
--
|
|
93
|
-
--
|
|
94
|
-
--
|
|
68
|
+
/* Matches MODERN_DARK_THEME */
|
|
69
|
+
--background: 240 6% 4%;
|
|
70
|
+
--foreground: 0 0% 98%;
|
|
71
|
+
--card: 240 6% 10%;
|
|
72
|
+
--card-foreground: 0 0% 98%;
|
|
73
|
+
--popover: 240 6% 10%;
|
|
74
|
+
--popover-foreground: 0 0% 98%;
|
|
75
|
+
--primary: 217 91% 60%;
|
|
76
|
+
--primary-foreground: 0 0% 100%;
|
|
77
|
+
--secondary: 240 4% 16%;
|
|
78
|
+
--secondary-foreground: 0 0% 98%;
|
|
79
|
+
--muted: 240 4% 16%;
|
|
80
|
+
--muted-foreground: 240 5% 65%;
|
|
81
|
+
--accent: 240 4% 16%;
|
|
82
|
+
--accent-foreground: 0 0% 98%;
|
|
83
|
+
--destructive: 0 84% 60%;
|
|
84
|
+
--destructive-foreground: 0 0% 100%;
|
|
85
|
+
--success: 142 71% 45%;
|
|
86
|
+
--success-foreground: 0 0% 100%;
|
|
87
|
+
--warning: 48 96% 53%;
|
|
88
|
+
--warning-foreground: 240 6% 4%;
|
|
89
|
+
--border: 240 4% 26%;
|
|
90
|
+
--input: 240 4% 26%;
|
|
91
|
+
--ring: 217 91% 60%;
|
|
92
|
+
--popover-border: 240 4% 34%;
|
|
93
|
+
--toggle-track: 240 4% 26%;
|
|
94
|
+
--toggle-track-foreground: 0 0% 98%;
|
|
95
|
+
--input-hover: 217 91% 60%;
|
|
96
|
+
--divider: 240 4% 26%;
|
|
97
|
+
--chip: 240 4% 16%;
|
|
98
|
+
--chip-foreground: 240 5% 83%;
|
|
95
99
|
--disabled-opacity: 0.5;
|
|
96
|
-
--chart-1:
|
|
97
|
-
--chart-2:
|
|
98
|
-
--chart-3:
|
|
99
|
-
--chart-4:
|
|
100
|
-
--chart-5:
|
|
101
|
-
--chart-6:
|
|
102
|
-
--chart-7:
|
|
103
|
-
--chart-8:
|
|
104
|
-
--chart-9:
|
|
105
|
-
--chart-10:
|
|
106
|
-
--chart-11:
|
|
107
|
-
--chart-12:
|
|
100
|
+
--chart-1: 217 91% 60%;
|
|
101
|
+
--chart-2: 142 71% 45%;
|
|
102
|
+
--chart-3: 38 92% 50%;
|
|
103
|
+
--chart-4: 0 84% 60%;
|
|
104
|
+
--chart-5: 270 60% 60%;
|
|
105
|
+
--chart-6: 174 60% 50%;
|
|
106
|
+
--chart-7: 24 95% 53%;
|
|
107
|
+
--chart-8: 330 80% 60%;
|
|
108
|
+
--chart-9: 199 89% 48%;
|
|
109
|
+
--chart-10: 48 96% 53%;
|
|
110
|
+
--chart-11: 162 63% 41%;
|
|
111
|
+
--chart-12: 292 84% 61%;
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
114
|
|
package/dist/tailwind-preset.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"tailwind-preset.cjs","sourcesContent":["import type { Config } from \"tailwindcss\";\n\n/**\n * opti-ui Tailwind CSS preset\n *\n * This preset provides the theme configuration required for opti-ui components.\n * Consumers should extend their Tailwind config with this preset.\n *\n * @example\n * // tailwind.config.js\n * import { optiUiPreset } from '@optilogic/core/tailwind-preset';\n *\n * export default {\n * presets: [optiUiPreset],\n * content: [\n * './src/**\\/*.{js,ts,jsx,tsx}',\n * './node_modules/@optilogic/core/dist/**\\/*.{js,mjs}'\n * ]\n * }\n */\nexport const optiUiPreset: Partial<Config> = {\n darkMode: [\"class\"],\n theme: {\n extend: {\n colors: {\n // Background colors\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n\n // Card\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Popover\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n\n // Primary\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n\n // Secondary\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n\n // Muted\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n\n // Accent\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n\n // Destructive\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n\n // Success\n success: {\n DEFAULT: \"hsl(var(--success))\",\n foreground: \"hsl(var(--success-foreground))\",\n },\n\n // Warning\n warning: {\n DEFAULT: \"hsl(var(--warning))\",\n foreground: \"hsl(var(--warning-foreground))\",\n },\n\n // Border, input, ring\n border: \"hsl(var(--border))\",\n input: {\n DEFAULT: \"hsl(var(--input))\",\n hover: \"hsl(var(--input-hover))\",\n },\n ring: \"hsl(var(--ring))\",\n divider: \"hsl(var(--divider))\",\n\n // Toggle/switch track\n \"toggle-track\": {\n DEFAULT: \"hsl(var(--toggle-track))\",\n foreground: \"hsl(var(--toggle-track-foreground))\",\n },\n\n // Chip\n chip: {\n DEFAULT: \"hsl(var(--chip))\",\n foreground: \"hsl(var(--chip-foreground))\",\n },\n\n // Chart colors\n chart: {\n 1: \"hsl(var(--chart-1))\",\n 2: \"hsl(var(--chart-2))\",\n 3: \"hsl(var(--chart-3))\",\n 4: \"hsl(var(--chart-4))\",\n 5: \"hsl(var(--chart-5))\",\n 6: \"hsl(var(--chart-6))\",\n 7: \"hsl(var(--chart-7))\",\n 8: \"hsl(var(--chart-8))\",\n 9: \"hsl(var(--chart-9))\",\n 10: \"hsl(var(--chart-10))\",\n 11: \"hsl(var(--chart-11))\",\n 12: \"hsl(var(--chart-12))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [],\n};\n\nexport default optiUiPreset;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"tailwind-preset.cjs","sourcesContent":["import type { Config } from \"tailwindcss\";\n\n/**\n * opti-ui Tailwind CSS preset\n *\n * This preset provides the theme configuration required for opti-ui components.\n * Consumers should extend their Tailwind config with this preset.\n *\n * @example\n * // tailwind.config.js\n * import { optiUiPreset } from '@optilogic/core/tailwind-preset';\n *\n * export default {\n * presets: [optiUiPreset],\n * content: [\n * './src/**\\/*.{js,ts,jsx,tsx}',\n * './node_modules/@optilogic/core/dist/**\\/*.{js,mjs}'\n * ]\n * }\n */\nexport const optiUiPreset: Partial<Config> = {\n darkMode: [\"class\"],\n theme: {\n extend: {\n colors: {\n // Background colors\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n\n // Card\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Popover\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n\n // Primary\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n\n // Secondary\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n\n // Muted\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n\n // Accent\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n\n // Destructive\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n\n // Success\n success: {\n DEFAULT: \"hsl(var(--success))\",\n foreground: \"hsl(var(--success-foreground))\",\n },\n\n // Warning\n warning: {\n DEFAULT: \"hsl(var(--warning))\",\n foreground: \"hsl(var(--warning-foreground))\",\n },\n\n // Border, input, ring\n border: \"hsl(var(--border))\",\n \"popover-border\": \"hsl(var(--popover-border))\",\n input: {\n DEFAULT: \"hsl(var(--input))\",\n hover: \"hsl(var(--input-hover))\",\n },\n ring: \"hsl(var(--ring))\",\n divider: \"hsl(var(--divider))\",\n\n // Toggle/switch track\n \"toggle-track\": {\n DEFAULT: \"hsl(var(--toggle-track))\",\n foreground: \"hsl(var(--toggle-track-foreground))\",\n },\n\n // Chip\n chip: {\n DEFAULT: \"hsl(var(--chip))\",\n foreground: \"hsl(var(--chip-foreground))\",\n },\n\n // Chart colors\n chart: {\n 1: \"hsl(var(--chart-1))\",\n 2: \"hsl(var(--chart-2))\",\n 3: \"hsl(var(--chart-3))\",\n 4: \"hsl(var(--chart-4))\",\n 5: \"hsl(var(--chart-5))\",\n 6: \"hsl(var(--chart-6))\",\n 7: \"hsl(var(--chart-7))\",\n 8: \"hsl(var(--chart-8))\",\n 9: \"hsl(var(--chart-9))\",\n 10: \"hsl(var(--chart-10))\",\n 11: \"hsl(var(--chart-11))\",\n 12: \"hsl(var(--chart-12))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [],\n};\n\nexport default optiUiPreset;\n"]}
|
package/dist/tailwind-preset.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"tailwind-preset.js","sourcesContent":["import type { Config } from \"tailwindcss\";\n\n/**\n * opti-ui Tailwind CSS preset\n *\n * This preset provides the theme configuration required for opti-ui components.\n * Consumers should extend their Tailwind config with this preset.\n *\n * @example\n * // tailwind.config.js\n * import { optiUiPreset } from '@optilogic/core/tailwind-preset';\n *\n * export default {\n * presets: [optiUiPreset],\n * content: [\n * './src/**\\/*.{js,ts,jsx,tsx}',\n * './node_modules/@optilogic/core/dist/**\\/*.{js,mjs}'\n * ]\n * }\n */\nexport const optiUiPreset: Partial<Config> = {\n darkMode: [\"class\"],\n theme: {\n extend: {\n colors: {\n // Background colors\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n\n // Card\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Popover\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n\n // Primary\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n\n // Secondary\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n\n // Muted\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n\n // Accent\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n\n // Destructive\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n\n // Success\n success: {\n DEFAULT: \"hsl(var(--success))\",\n foreground: \"hsl(var(--success-foreground))\",\n },\n\n // Warning\n warning: {\n DEFAULT: \"hsl(var(--warning))\",\n foreground: \"hsl(var(--warning-foreground))\",\n },\n\n // Border, input, ring\n border: \"hsl(var(--border))\",\n input: {\n DEFAULT: \"hsl(var(--input))\",\n hover: \"hsl(var(--input-hover))\",\n },\n ring: \"hsl(var(--ring))\",\n divider: \"hsl(var(--divider))\",\n\n // Toggle/switch track\n \"toggle-track\": {\n DEFAULT: \"hsl(var(--toggle-track))\",\n foreground: \"hsl(var(--toggle-track-foreground))\",\n },\n\n // Chip\n chip: {\n DEFAULT: \"hsl(var(--chip))\",\n foreground: \"hsl(var(--chip-foreground))\",\n },\n\n // Chart colors\n chart: {\n 1: \"hsl(var(--chart-1))\",\n 2: \"hsl(var(--chart-2))\",\n 3: \"hsl(var(--chart-3))\",\n 4: \"hsl(var(--chart-4))\",\n 5: \"hsl(var(--chart-5))\",\n 6: \"hsl(var(--chart-6))\",\n 7: \"hsl(var(--chart-7))\",\n 8: \"hsl(var(--chart-8))\",\n 9: \"hsl(var(--chart-9))\",\n 10: \"hsl(var(--chart-10))\",\n 11: \"hsl(var(--chart-11))\",\n 12: \"hsl(var(--chart-12))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [],\n};\n\nexport default optiUiPreset;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"tailwind-preset.js","sourcesContent":["import type { Config } from \"tailwindcss\";\n\n/**\n * opti-ui Tailwind CSS preset\n *\n * This preset provides the theme configuration required for opti-ui components.\n * Consumers should extend their Tailwind config with this preset.\n *\n * @example\n * // tailwind.config.js\n * import { optiUiPreset } from '@optilogic/core/tailwind-preset';\n *\n * export default {\n * presets: [optiUiPreset],\n * content: [\n * './src/**\\/*.{js,ts,jsx,tsx}',\n * './node_modules/@optilogic/core/dist/**\\/*.{js,mjs}'\n * ]\n * }\n */\nexport const optiUiPreset: Partial<Config> = {\n darkMode: [\"class\"],\n theme: {\n extend: {\n colors: {\n // Background colors\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n\n // Card\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n\n // Popover\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n\n // Primary\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n\n // Secondary\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n\n // Muted\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n\n // Accent\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n\n // Destructive\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n\n // Success\n success: {\n DEFAULT: \"hsl(var(--success))\",\n foreground: \"hsl(var(--success-foreground))\",\n },\n\n // Warning\n warning: {\n DEFAULT: \"hsl(var(--warning))\",\n foreground: \"hsl(var(--warning-foreground))\",\n },\n\n // Border, input, ring\n border: \"hsl(var(--border))\",\n \"popover-border\": \"hsl(var(--popover-border))\",\n input: {\n DEFAULT: \"hsl(var(--input))\",\n hover: \"hsl(var(--input-hover))\",\n },\n ring: \"hsl(var(--ring))\",\n divider: \"hsl(var(--divider))\",\n\n // Toggle/switch track\n \"toggle-track\": {\n DEFAULT: \"hsl(var(--toggle-track))\",\n foreground: \"hsl(var(--toggle-track-foreground))\",\n },\n\n // Chip\n chip: {\n DEFAULT: \"hsl(var(--chip))\",\n foreground: \"hsl(var(--chip-foreground))\",\n },\n\n // Chart colors\n chart: {\n 1: \"hsl(var(--chart-1))\",\n 2: \"hsl(var(--chart-2))\",\n 3: \"hsl(var(--chart-3))\",\n 4: \"hsl(var(--chart-4))\",\n 5: \"hsl(var(--chart-5))\",\n 6: \"hsl(var(--chart-6))\",\n 7: \"hsl(var(--chart-7))\",\n 8: \"hsl(var(--chart-8))\",\n 9: \"hsl(var(--chart-9))\",\n 10: \"hsl(var(--chart-10))\",\n 11: \"hsl(var(--chart-11))\",\n 12: \"hsl(var(--chart-12))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: \"0\" },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: \"0\" },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [],\n};\n\nexport default optiUiPreset;\n"]}
|
package/package.json
CHANGED
|
@@ -143,14 +143,19 @@ function Calendar({
|
|
|
143
143
|
"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
|
|
144
144
|
week: "flex w-full mt-2",
|
|
145
145
|
day: cn(
|
|
146
|
-
"relative p-0 text-center text-sm focus-within:relative focus-within:z-20
|
|
146
|
+
"relative p-0 text-center text-sm focus-within:relative focus-within:z-20",
|
|
147
|
+
"[&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md",
|
|
148
|
+
// Override the button's ghost text color when day is selected (data-selected is on the td, not the button)
|
|
149
|
+
"[&[data-selected]>button]:bg-primary [&[data-selected]>button]:text-primary-foreground",
|
|
150
|
+
"[&[data-selected]>button]:hover:bg-primary/90 [&[data-selected]>button]:hover:text-primary-foreground",
|
|
151
|
+
"[&[data-selected]>button]:focus:bg-primary [&[data-selected]>button]:focus:text-primary-foreground",
|
|
147
152
|
props.mode === "range"
|
|
148
153
|
? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md"
|
|
149
154
|
: "[&:has([aria-selected])]:rounded-md"
|
|
150
155
|
),
|
|
151
156
|
day_button: cn(
|
|
152
157
|
buttonVariants({ variant: "ghost" }),
|
|
153
|
-
"h-9 w-9 p-0 font-normal
|
|
158
|
+
"h-9 w-9 p-0 font-normal"
|
|
154
159
|
),
|
|
155
160
|
range_start: "day-range-start rounded-l-md",
|
|
156
161
|
range_end: "day-range-end rounded-r-md",
|
|
@@ -217,7 +217,7 @@ function MenuItem({ item, onClose, depth = 0 }: MenuItemProps) {
|
|
|
217
217
|
<div
|
|
218
218
|
className={cn(
|
|
219
219
|
"fixed z-[60] min-w-[180px] max-w-[280px]",
|
|
220
|
-
"rounded-md border border-border",
|
|
220
|
+
"rounded-md border border-popover-border",
|
|
221
221
|
"bg-popover text-popover-foreground",
|
|
222
222
|
"shadow-lg",
|
|
223
223
|
"animate-in fade-in-0 zoom-in-95",
|
|
@@ -337,7 +337,7 @@ export function ContextMenu({
|
|
|
337
337
|
ref={menuRef}
|
|
338
338
|
className={cn(
|
|
339
339
|
"fixed z-50 min-w-[180px] max-w-[280px]",
|
|
340
|
-
"rounded-md border border-border",
|
|
340
|
+
"rounded-md border border-popover-border",
|
|
341
341
|
"bg-popover text-popover-foreground",
|
|
342
342
|
"shadow-lg",
|
|
343
343
|
"animate-in fade-in-0 zoom-in-95",
|
|
@@ -756,7 +756,7 @@ export function DataGrid<T = Record<string, CellValue>>({
|
|
|
756
756
|
{/* Tooltip for long content */}
|
|
757
757
|
{hoveredCell && (
|
|
758
758
|
<div
|
|
759
|
-
className="fixed z-[200] p-3 bg-popover text-popover-foreground border border-border rounded-md shadow-xl max-w-md break-words text-sm pointer-events-none"
|
|
759
|
+
className="fixed z-[200] p-3 bg-popover text-popover-foreground border border-popover-border rounded-md shadow-xl max-w-md break-words text-sm pointer-events-none"
|
|
760
760
|
style={{
|
|
761
761
|
left: `${hoveredCell.x}px`,
|
|
762
762
|
top: `${hoveredCell.y}px`,
|
|
@@ -50,7 +50,7 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
50
50
|
<DropdownMenuPrimitive.SubContent
|
|
51
51
|
ref={ref}
|
|
52
52
|
className={cn(
|
|
53
|
-
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg",
|
|
53
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-md border border-popover-border bg-popover p-1 text-popover-foreground shadow-lg",
|
|
54
54
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
55
55
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
56
56
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -73,7 +73,7 @@ const DropdownMenuContent = React.forwardRef<
|
|
|
73
73
|
ref={ref}
|
|
74
74
|
sideOffset={sideOffset}
|
|
75
75
|
className={cn(
|
|
76
|
-
"z-50 min-w-[8rem] max-w-[90vw] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-
|
|
76
|
+
"z-50 min-w-[8rem] max-w-[90vw] overflow-hidden rounded-md border border-popover-border bg-popover p-1 text-popover-foreground shadow-lg",
|
|
77
77
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
78
78
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
79
79
|
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
@@ -1,22 +1,128 @@
|
|
|
1
|
+
import * as React from "react";
|
|
1
2
|
import { cn } from "../../../utils/cn";
|
|
2
3
|
import type { FileRendererProps } from "../types";
|
|
3
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Strict CSP applied at two layers:
|
|
7
|
+
*
|
|
8
|
+
* 1. `csp` attribute on the <iframe> — browser-enforced, cannot be
|
|
9
|
+
* overridden or loosened by anything inside the document.
|
|
10
|
+
* (Supported in Chromium-based browsers.)
|
|
11
|
+
*
|
|
12
|
+
* 2. <meta http-equiv="Content-Security-Policy"> in the <head> of the
|
|
13
|
+
* srcdoc — fallback for browsers that don't support the `csp` attr.
|
|
14
|
+
* Safe from injection: content is placed in <body>, and per the
|
|
15
|
+
* HTML5 spec CSP meta tags are only honoured in <head>. Multiple
|
|
16
|
+
* CSP policies are additive (can only restrict, never loosen).
|
|
17
|
+
*/
|
|
18
|
+
const CSP_POLICY = [
|
|
19
|
+
"default-src 'none'",
|
|
20
|
+
"script-src 'unsafe-inline'",
|
|
21
|
+
"style-src 'unsafe-inline'",
|
|
22
|
+
"img-src data: blob:",
|
|
23
|
+
].join("; ");
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* All Permissions-Policy features explicitly denied. Prevents sandboxed
|
|
27
|
+
* content from accessing device APIs even if a future browser grants
|
|
28
|
+
* them by default.
|
|
29
|
+
*/
|
|
30
|
+
const PERMISSIONS_POLICY = [
|
|
31
|
+
"camera=()",
|
|
32
|
+
"microphone=()",
|
|
33
|
+
"geolocation=()",
|
|
34
|
+
"payment=()",
|
|
35
|
+
"usb=()",
|
|
36
|
+
"display-capture=()",
|
|
37
|
+
"fullscreen=()",
|
|
38
|
+
"autoplay=()",
|
|
39
|
+
"web-share=()",
|
|
40
|
+
"screen-wake-lock=()",
|
|
41
|
+
"xr-spatial-tracking=()",
|
|
42
|
+
"magnetometer=()",
|
|
43
|
+
"gyroscope=()",
|
|
44
|
+
"accelerometer=()",
|
|
45
|
+
].join(", ");
|
|
46
|
+
|
|
47
|
+
function buildSandboxedHtml(content: string): string {
|
|
48
|
+
return `<!DOCTYPE html>
|
|
49
|
+
<html>
|
|
50
|
+
<head>
|
|
51
|
+
<meta http-equiv="Content-Security-Policy" content="${CSP_POLICY}">
|
|
52
|
+
<script>
|
|
53
|
+
// Neutralise APIs that the sandbox + CSP can't fully block.
|
|
54
|
+
// This runs in <head> before any user content in <body>.
|
|
55
|
+
// Uses Object.defineProperty to make overrides non-configurable
|
|
56
|
+
// so user scripts cannot restore the original via prototype tricks.
|
|
57
|
+
(function(){
|
|
58
|
+
// postMessage: iframe can message parent even without allow-same-origin.
|
|
59
|
+
// Kill it so content can't probe or spam any future parent listeners.
|
|
60
|
+
// Also kill parent/top refs as an extra layer.
|
|
61
|
+
var noop = function(){};
|
|
62
|
+
try { Object.defineProperty(window, 'postMessage', { value: noop, writable: false, configurable: false }); } catch(e) {}
|
|
63
|
+
try { Object.defineProperty(window, 'parent', { value: window, writable: false, configurable: false }); } catch(e) {}
|
|
64
|
+
try { Object.defineProperty(window, 'top', { value: window, writable: false, configurable: false }); } catch(e) {}
|
|
65
|
+
try { Object.defineProperty(window, 'opener', { value: null, writable: false, configurable: false }); } catch(e) {}
|
|
66
|
+
|
|
67
|
+
// RTCPeerConnection: not governed by CSP; could contact a STUN server
|
|
68
|
+
// over UDP to leak the user's IP. Kill all browser-prefixed variants.
|
|
69
|
+
var rtcNames = ['RTCPeerConnection', 'webkitRTCPeerConnection', 'mozRTCPeerConnection'];
|
|
70
|
+
for (var i = 0; i < rtcNames.length; i++) {
|
|
71
|
+
try { Object.defineProperty(window, rtcNames[i], { value: undefined, writable: false, configurable: false }); } catch(e) {}
|
|
72
|
+
}
|
|
73
|
+
})();
|
|
74
|
+
</script>
|
|
75
|
+
</head>
|
|
76
|
+
<body>${content}</body>
|
|
77
|
+
</html>`;
|
|
78
|
+
}
|
|
79
|
+
|
|
4
80
|
/**
|
|
5
81
|
* HtmlRenderer
|
|
6
82
|
*
|
|
7
|
-
* Renders HTML content in a
|
|
83
|
+
* Renders HTML content in a triple-locked iframe:
|
|
84
|
+
*
|
|
85
|
+
* Layer 1 — `sandbox="allow-scripts"` (no allow-same-origin):
|
|
86
|
+
* Opaque origin. No access to parent DOM, cookies, localStorage,
|
|
87
|
+
* sessionStorage, or IndexedDB. No form submission, popups,
|
|
88
|
+
* top-navigation, or pointer-lock.
|
|
89
|
+
*
|
|
90
|
+
* Layer 2 — Content-Security-Policy (iframe `csp` attr + meta fallback):
|
|
91
|
+
* Blocks ALL network requests (fetch, XHR, WebSocket, sendBeacon,
|
|
92
|
+
* image pings, external scripts/styles/fonts). Only inline scripts,
|
|
93
|
+
* inline styles, and data:/blob: images are allowed.
|
|
94
|
+
*
|
|
95
|
+
* Layer 3 — Permissions-Policy via `allow` attribute:
|
|
96
|
+
* Explicitly denies every device/sensor API (camera, microphone,
|
|
97
|
+
* geolocation, payment, USB, display-capture, etc.).
|
|
98
|
+
*
|
|
99
|
+
* Additional hardening:
|
|
100
|
+
* - referrerpolicy="no-referrer" — no URL leakage to embedded content
|
|
8
101
|
*/
|
|
9
102
|
export function HtmlRenderer({
|
|
10
103
|
content,
|
|
11
104
|
fileName,
|
|
12
105
|
className,
|
|
13
106
|
}: FileRendererProps) {
|
|
107
|
+
const srcDoc = React.useMemo(
|
|
108
|
+
() => buildSandboxedHtml(content ?? ""),
|
|
109
|
+
[content],
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
// The `csp` attribute is a valid HTML attribute for iframes (enforces CSP
|
|
113
|
+
// at the browser level, cannot be overridden by document content) but is
|
|
114
|
+
// not yet in React's type definitions. We spread it to avoid a TS error.
|
|
115
|
+
const iframeProps = { csp: CSP_POLICY } as React.IframeHTMLAttributes<HTMLIFrameElement>;
|
|
116
|
+
|
|
14
117
|
return (
|
|
15
118
|
<iframe
|
|
16
|
-
srcDoc={
|
|
119
|
+
srcDoc={srcDoc}
|
|
17
120
|
sandbox="allow-scripts"
|
|
18
121
|
title={fileName}
|
|
122
|
+
referrerPolicy="no-referrer"
|
|
123
|
+
allow={PERMISSIONS_POLICY}
|
|
19
124
|
className={cn("h-full w-full border-0", className)}
|
|
125
|
+
{...iframeProps}
|
|
20
126
|
/>
|
|
21
127
|
);
|
|
22
128
|
}
|
|
@@ -44,7 +44,7 @@ const PopoverContent = React.forwardRef<
|
|
|
44
44
|
align={align}
|
|
45
45
|
sideOffset={sideOffset}
|
|
46
46
|
className={cn(
|
|
47
|
-
"z-50 w-auto max-w-[90vw] rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-
|
|
47
|
+
"z-50 w-auto max-w-[90vw] rounded-md border border-popover-border bg-popover p-4 text-popover-foreground shadow-lg outline-none",
|
|
48
48
|
// Animation
|
|
49
49
|
"data-[state=open]:animate-in data-[state=closed]:animate-out",
|
|
50
50
|
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
@@ -76,7 +76,7 @@ const SelectContent = React.forwardRef<
|
|
|
76
76
|
<SelectPrimitive.Content
|
|
77
77
|
ref={ref}
|
|
78
78
|
className={cn(
|
|
79
|
-
"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-
|
|
79
|
+
"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border border-popover-border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
|
|
80
80
|
position === "popper" &&
|
|
81
81
|
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
82
82
|
className
|
|
@@ -53,11 +53,11 @@ const TooltipContent = React.forwardRef<
|
|
|
53
53
|
"px-2.5 py-1.5 rounded-md",
|
|
54
54
|
// Colors
|
|
55
55
|
"bg-popover text-popover-foreground",
|
|
56
|
-
"border border-border",
|
|
56
|
+
"border border-popover-border",
|
|
57
57
|
// Typography
|
|
58
58
|
"text-xs font-medium",
|
|
59
59
|
// Shadow
|
|
60
|
-
"shadow-
|
|
60
|
+
"shadow-lg",
|
|
61
61
|
// Animation
|
|
62
62
|
"animate-in fade-in-0 zoom-in-95",
|
|
63
63
|
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
package/src/index.ts
CHANGED
|
@@ -380,16 +380,11 @@ export {
|
|
|
380
380
|
type ThemeHSL,
|
|
381
381
|
type ColorFieldConfig,
|
|
382
382
|
// Presets
|
|
383
|
-
GREEN_THEME,
|
|
384
383
|
OPTILOGIC_LEGACY_THEME,
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
SCIFI_THEME,
|
|
388
|
-
OCEAN_THEME,
|
|
389
|
-
SUNSET_THEME,
|
|
390
|
-
FOREST_THEME,
|
|
391
|
-
CYBERPUNK_THEME,
|
|
384
|
+
OPTILOGIC_DARK_THEME,
|
|
385
|
+
MODERN_LIGHT_THEME,
|
|
392
386
|
MINIMALIST_LIGHT_THEME,
|
|
387
|
+
MODERN_DARK_THEME,
|
|
393
388
|
DARK_ELEGANT_THEME,
|
|
394
389
|
PRESET_THEMES,
|
|
395
390
|
ALL_THEMES,
|