@qwickapps/react-framework 1.5.13 → 1.7.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 (91) hide show
  1. package/dist/components/Scaffold.d.ts +2 -2
  2. package/dist/components/Scaffold.d.ts.map +1 -1
  3. package/dist/components/forms/Captcha.d.ts +33 -28
  4. package/dist/components/forms/Captcha.d.ts.map +1 -1
  5. package/dist/components/forms/FormCheckbox.d.ts +15 -12
  6. package/dist/components/forms/FormCheckbox.d.ts.map +1 -1
  7. package/dist/components/forms/FormField.d.ts +20 -23
  8. package/dist/components/forms/FormField.d.ts.map +1 -1
  9. package/dist/components/forms/FormSelect.d.ts +16 -15
  10. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  11. package/dist/contexts/QwickAppContext.d.ts +1 -1
  12. package/dist/contexts/QwickAppContext.d.ts.map +1 -1
  13. package/dist/hooks/useBaseProps.d.ts +27 -1172
  14. package/dist/hooks/useBaseProps.d.ts.map +1 -1
  15. package/dist/index.css +1 -1
  16. package/dist/index.esm.css +1 -1
  17. package/dist/index.esm.js +393 -160
  18. package/dist/index.js +393 -159
  19. package/dist/palettes/PaletteBoutique.d.ts +10 -0
  20. package/dist/palettes/PaletteBoutique.d.ts.map +1 -0
  21. package/dist/palettes/index.d.ts +1 -0
  22. package/dist/palettes/index.d.ts.map +1 -1
  23. package/dist/palettes/manifest.json +33 -19
  24. package/dist/palettes/{palette-autumn.1.5.13.css → palette-autumn.1.7.0.css} +3 -1
  25. package/dist/palettes/palette-autumn.1.7.0.min.css +1 -0
  26. package/dist/palettes/palette-autumn.latest.css +3 -1
  27. package/dist/palettes/palette-autumn.latest.min.css +1 -1
  28. package/dist/palettes/palette-boutique.1.7.0.css +176 -0
  29. package/dist/palettes/palette-boutique.1.7.0.min.css +1 -0
  30. package/dist/palettes/palette-boutique.latest.css +176 -0
  31. package/dist/palettes/palette-boutique.latest.min.css +1 -0
  32. package/dist/palettes/{palette-cosmic.1.5.13.css → palette-cosmic.1.7.0.css} +3 -1
  33. package/dist/palettes/palette-cosmic.1.7.0.min.css +1 -0
  34. package/dist/palettes/palette-cosmic.latest.css +3 -1
  35. package/dist/palettes/palette-cosmic.latest.min.css +1 -1
  36. package/dist/palettes/{palette-ocean.1.5.13.css → palette-ocean.1.7.0.css} +3 -1
  37. package/dist/palettes/palette-ocean.1.7.0.min.css +1 -0
  38. package/dist/palettes/palette-ocean.latest.css +3 -1
  39. package/dist/palettes/palette-ocean.latest.min.css +1 -1
  40. package/dist/palettes/{palette-spring.1.5.13.css → palette-spring.1.7.0.css} +3 -1
  41. package/dist/palettes/palette-spring.1.7.0.min.css +1 -0
  42. package/dist/palettes/palette-spring.latest.css +3 -1
  43. package/dist/palettes/palette-spring.latest.min.css +1 -1
  44. package/dist/palettes/{palette-winter.1.5.13.css → palette-winter.1.7.0.css} +3 -1
  45. package/dist/palettes/palette-winter.1.7.0.min.css +1 -0
  46. package/dist/palettes/palette-winter.latest.css +3 -1
  47. package/dist/palettes/palette-winter.latest.min.css +1 -1
  48. package/dist/schemas/CaptchaSchema.d.ts +16 -0
  49. package/dist/schemas/CaptchaSchema.d.ts.map +1 -0
  50. package/dist/schemas/FormCheckboxSchema.d.ts +16 -0
  51. package/dist/schemas/FormCheckboxSchema.d.ts.map +1 -0
  52. package/dist/schemas/FormFieldSchema.d.ts +23 -0
  53. package/dist/schemas/FormFieldSchema.d.ts.map +1 -0
  54. package/dist/schemas/FormSelectSchema.d.ts +20 -0
  55. package/dist/schemas/FormSelectSchema.d.ts.map +1 -0
  56. package/dist/schemas/index.d.ts +4 -0
  57. package/dist/schemas/index.d.ts.map +1 -1
  58. package/dist/schemas/transformers/ComponentTransformer.d.ts +1 -0
  59. package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -1
  60. package/package.json +2 -1
  61. package/src/components/QwickApp.css +22 -0
  62. package/src/components/Scaffold.css +5 -0
  63. package/src/components/Scaffold.tsx +5 -3
  64. package/src/components/forms/Captcha.tsx +57 -63
  65. package/src/components/forms/FormCheckbox.tsx +35 -43
  66. package/src/components/forms/FormField.tsx +50 -66
  67. package/src/components/forms/FormSelect.tsx +41 -49
  68. package/src/contexts/QwickAppContext.tsx +1 -1
  69. package/src/hooks/useBaseProps.ts +34 -1
  70. package/src/palettes/PaletteAutumn.css +3 -1
  71. package/src/palettes/PaletteBoutique.css +176 -0
  72. package/src/palettes/PaletteBoutique.ts +16 -0
  73. package/src/palettes/PaletteCosmic.css +3 -1
  74. package/src/palettes/PaletteOcean.css +3 -1
  75. package/src/palettes/PaletteSpring.css +3 -1
  76. package/src/palettes/PaletteWinter.css +3 -1
  77. package/src/palettes/index.ts +3 -0
  78. package/src/palettes/manifest.json +12 -1
  79. package/src/schemas/CaptchaSchema.ts +65 -0
  80. package/src/schemas/FormCheckboxSchema.ts +65 -0
  81. package/src/schemas/FormFieldSchema.ts +140 -0
  82. package/src/schemas/FormSelectSchema.ts +108 -0
  83. package/src/schemas/index.ts +4 -0
  84. package/src/schemas/transformers/ComponentTransformer.ts +32 -2
  85. package/dist/palettes/palette-autumn.1.5.13.min.css +0 -1
  86. package/dist/palettes/palette-cosmic.1.5.13.min.css +0 -1
  87. package/dist/palettes/palette-ocean.1.5.13.min.css +0 -1
  88. package/dist/palettes/palette-spring.1.5.13.min.css +0 -1
  89. package/dist/palettes/palette-winter.1.5.13.min.css +0 -1
  90. /package/dist/palettes/{palette-default.1.5.13.css → palette-default.1.7.0.css} +0 -0
  91. /package/dist/palettes/{palette-default.1.5.13.min.css → palette-default.1.7.0.min.css} +0 -0
@@ -61,12 +61,14 @@ html[data-palette="ocean"][data-theme="light"] {
61
61
  --palette-error-main: #ef4444;
62
62
  --palette-error-light: #fee2e2;
63
63
  --palette-error-dark: #7f1d1d;
64
+ --palette-on-error: #ffffff;
64
65
  --palette-error-border: #fecaca;
65
-
66
+
66
67
  /* Warning palette - Sandy yellow */
67
68
  --palette-warning-main: #f59e0b;
68
69
  --palette-warning-light: #fef3c7;
69
70
  --palette-warning-dark: #78350f;
71
+ --palette-on-warning: #000000;
70
72
  --palette-warning-border: #fde68a;
71
73
 
72
74
  /* Info palette - Crystal blue */
@@ -0,0 +1 @@
1
+ html[data-palette="ocean"]:not([data-theme="dark"]),html[data-palette="ocean"][data-theme="light"]{--palette-primary-main:#0891b2;--palette-primary-light:#22d3ee;--palette-primary-dark:#164e63;--palette-on-primary:#ffffff;--palette-secondary-main:#0f766e;--palette-secondary-light:#14b8a6;--palette-secondary-dark:#134e4a;--palette-on-secondary:#ffffff;--palette-surface-main:#f0fdfa;--palette-surface-variant:#ccfbf1;--palette-surface-elevated:#ffffff;--palette-on-surface:#164e63;--palette-background-main:#ecfeff;--palette-background-dark:#cffafe;--palette-background-overlay:rgba(236,254,255,0.95);--palette-on-background:#0f766e;--palette-header-bg-start:rgba(236,254,255,0.98);--palette-header-bg-end:rgba(236,254,255,0.95);--palette-header-collapsed-bg-start:rgba(236,254,255,0.99);--palette-header-collapsed-bg-end:rgba(236,254,255,0.96);--palette-text-primary:#164e63;--palette-text-secondary:#0891b2;--palette-text-disabled:rgba(22,78,99,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#a7f3d0;--palette-border-light:rgba(22,78,99,0.12);--palette-border-lighter:rgba(22,78,99,0.05);--palette-border-medium:#67e8f9;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#065f46;--palette-success-border:#a7f3d0;--palette-error-main:#ef4444;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-on-error:#ffffff;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#78350f;--palette-on-warning:#000000;--palette-warning-border:#fde68a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#f97316;--palette-accent-light:#fb923c;--palette-accent-dark:#ea580c;--palette-on-accent:#ffffff;--palette-control-main:#0c4a6e;--palette-control-light:#075985;--palette-control-text:#cffafe;--palette-control-border:#0891b2}html[data-palette="ocean"][data-theme="dark"]{--palette-primary-main:#22d3ee;--palette-primary-light:#67e8f9;--palette-primary-dark:#0891b2;--palette-on-primary:#0a1a1f;--palette-secondary-main:#5eead4;--palette-secondary-light:#99f6e4;--palette-secondary-dark:#14b8a6;--palette-on-secondary:#0a1a1f;--palette-surface-main:#122830;--palette-surface-variant:#1a3a45;--palette-surface-elevated:#0e7490;--palette-on-surface:#cffafe;--palette-background-main:#040a0d;--palette-background-dark:#0a1418;--palette-background-overlay:rgba(10,26,31,0.95);--palette-on-background:#5eead4;--palette-header-bg-start:rgba(4,10,13,0.98);--palette-header-bg-end:rgba(4,10,13,0.95);--palette-header-collapsed-bg-start:rgba(4,10,13,0.99);--palette-header-collapsed-bg-end:rgba(4,10,13,0.96);--palette-text-primary:#cffafe;--palette-text-secondary:#a5f3fc;--palette-text-disabled:rgba(207,250,254,0.38);--palette-text-inverted:#020617;--palette-border-main:#155e75;--palette-border-light:rgba(207,250,254,0.12);--palette-border-lighter:rgba(207,250,254,0.05);--palette-border-medium:#0c4a6e;--palette-success-main:#34d399;--palette-success-light:#065f46;--palette-success-dark:#10b981;--palette-success-border:#047857;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb7185;--palette-warning-light:#881337;--palette-warning-dark:#e11d48;--palette-warning-border:#be123c;--palette-info-main:#0ea5e9;--palette-info-light:#0c4a6e;--palette-info-dark:#38bdf8;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#ea580c;--palette-accent-light:#fb923c;--palette-accent-dark:#c2410c;--palette-on-accent:#cffafe;--palette-control-main:#164e63;--palette-control-light:#0e7490;--palette-control-text:#ecfeff;--palette-control-border:#155e75}
@@ -61,12 +61,14 @@ html[data-palette="ocean"][data-theme="light"] {
61
61
  --palette-error-main: #ef4444;
62
62
  --palette-error-light: #fee2e2;
63
63
  --palette-error-dark: #7f1d1d;
64
+ --palette-on-error: #ffffff;
64
65
  --palette-error-border: #fecaca;
65
-
66
+
66
67
  /* Warning palette - Sandy yellow */
67
68
  --palette-warning-main: #f59e0b;
68
69
  --palette-warning-light: #fef3c7;
69
70
  --palette-warning-dark: #78350f;
71
+ --palette-on-warning: #000000;
70
72
  --palette-warning-border: #fde68a;
71
73
 
72
74
  /* Info palette - Crystal blue */
@@ -1 +1 @@
1
- html[data-palette="ocean"]:not([data-theme="dark"]),html[data-palette="ocean"][data-theme="light"]{--palette-primary-main:#0891b2;--palette-primary-light:#22d3ee;--palette-primary-dark:#164e63;--palette-on-primary:#ffffff;--palette-secondary-main:#0f766e;--palette-secondary-light:#14b8a6;--palette-secondary-dark:#134e4a;--palette-on-secondary:#ffffff;--palette-surface-main:#f0fdfa;--palette-surface-variant:#ccfbf1;--palette-surface-elevated:#ffffff;--palette-on-surface:#164e63;--palette-background-main:#ecfeff;--palette-background-dark:#cffafe;--palette-background-overlay:rgba(236,254,255,0.95);--palette-on-background:#0f766e;--palette-header-bg-start:rgba(236,254,255,0.98);--palette-header-bg-end:rgba(236,254,255,0.95);--palette-header-collapsed-bg-start:rgba(236,254,255,0.99);--palette-header-collapsed-bg-end:rgba(236,254,255,0.96);--palette-text-primary:#164e63;--palette-text-secondary:#0891b2;--palette-text-disabled:rgba(22,78,99,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#a7f3d0;--palette-border-light:rgba(22,78,99,0.12);--palette-border-lighter:rgba(22,78,99,0.05);--palette-border-medium:#67e8f9;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#065f46;--palette-success-border:#a7f3d0;--palette-error-main:#ef4444;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#78350f;--palette-warning-border:#fde68a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#f97316;--palette-accent-light:#fb923c;--palette-accent-dark:#ea580c;--palette-on-accent:#ffffff;--palette-control-main:#0c4a6e;--palette-control-light:#075985;--palette-control-text:#cffafe;--palette-control-border:#0891b2}html[data-palette="ocean"][data-theme="dark"]{--palette-primary-main:#22d3ee;--palette-primary-light:#67e8f9;--palette-primary-dark:#0891b2;--palette-on-primary:#0a1a1f;--palette-secondary-main:#5eead4;--palette-secondary-light:#99f6e4;--palette-secondary-dark:#14b8a6;--palette-on-secondary:#0a1a1f;--palette-surface-main:#122830;--palette-surface-variant:#1a3a45;--palette-surface-elevated:#0e7490;--palette-on-surface:#cffafe;--palette-background-main:#040a0d;--palette-background-dark:#0a1418;--palette-background-overlay:rgba(10,26,31,0.95);--palette-on-background:#5eead4;--palette-header-bg-start:rgba(4,10,13,0.98);--palette-header-bg-end:rgba(4,10,13,0.95);--palette-header-collapsed-bg-start:rgba(4,10,13,0.99);--palette-header-collapsed-bg-end:rgba(4,10,13,0.96);--palette-text-primary:#cffafe;--palette-text-secondary:#a5f3fc;--palette-text-disabled:rgba(207,250,254,0.38);--palette-text-inverted:#020617;--palette-border-main:#155e75;--palette-border-light:rgba(207,250,254,0.12);--palette-border-lighter:rgba(207,250,254,0.05);--palette-border-medium:#0c4a6e;--palette-success-main:#34d399;--palette-success-light:#065f46;--palette-success-dark:#10b981;--palette-success-border:#047857;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb7185;--palette-warning-light:#881337;--palette-warning-dark:#e11d48;--palette-warning-border:#be123c;--palette-info-main:#0ea5e9;--palette-info-light:#0c4a6e;--palette-info-dark:#38bdf8;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#ea580c;--palette-accent-light:#fb923c;--palette-accent-dark:#c2410c;--palette-on-accent:#cffafe;--palette-control-main:#164e63;--palette-control-light:#0e7490;--palette-control-text:#ecfeff;--palette-control-border:#155e75}
1
+ html[data-palette="ocean"]:not([data-theme="dark"]),html[data-palette="ocean"][data-theme="light"]{--palette-primary-main:#0891b2;--palette-primary-light:#22d3ee;--palette-primary-dark:#164e63;--palette-on-primary:#ffffff;--palette-secondary-main:#0f766e;--palette-secondary-light:#14b8a6;--palette-secondary-dark:#134e4a;--palette-on-secondary:#ffffff;--palette-surface-main:#f0fdfa;--palette-surface-variant:#ccfbf1;--palette-surface-elevated:#ffffff;--palette-on-surface:#164e63;--palette-background-main:#ecfeff;--palette-background-dark:#cffafe;--palette-background-overlay:rgba(236,254,255,0.95);--palette-on-background:#0f766e;--palette-header-bg-start:rgba(236,254,255,0.98);--palette-header-bg-end:rgba(236,254,255,0.95);--palette-header-collapsed-bg-start:rgba(236,254,255,0.99);--palette-header-collapsed-bg-end:rgba(236,254,255,0.96);--palette-text-primary:#164e63;--palette-text-secondary:#0891b2;--palette-text-disabled:rgba(22,78,99,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#a7f3d0;--palette-border-light:rgba(22,78,99,0.12);--palette-border-lighter:rgba(22,78,99,0.05);--palette-border-medium:#67e8f9;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#065f46;--palette-success-border:#a7f3d0;--palette-error-main:#ef4444;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-on-error:#ffffff;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#78350f;--palette-on-warning:#000000;--palette-warning-border:#fde68a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#f97316;--palette-accent-light:#fb923c;--palette-accent-dark:#ea580c;--palette-on-accent:#ffffff;--palette-control-main:#0c4a6e;--palette-control-light:#075985;--palette-control-text:#cffafe;--palette-control-border:#0891b2}html[data-palette="ocean"][data-theme="dark"]{--palette-primary-main:#22d3ee;--palette-primary-light:#67e8f9;--palette-primary-dark:#0891b2;--palette-on-primary:#0a1a1f;--palette-secondary-main:#5eead4;--palette-secondary-light:#99f6e4;--palette-secondary-dark:#14b8a6;--palette-on-secondary:#0a1a1f;--palette-surface-main:#122830;--palette-surface-variant:#1a3a45;--palette-surface-elevated:#0e7490;--palette-on-surface:#cffafe;--palette-background-main:#040a0d;--palette-background-dark:#0a1418;--palette-background-overlay:rgba(10,26,31,0.95);--palette-on-background:#5eead4;--palette-header-bg-start:rgba(4,10,13,0.98);--palette-header-bg-end:rgba(4,10,13,0.95);--palette-header-collapsed-bg-start:rgba(4,10,13,0.99);--palette-header-collapsed-bg-end:rgba(4,10,13,0.96);--palette-text-primary:#cffafe;--palette-text-secondary:#a5f3fc;--palette-text-disabled:rgba(207,250,254,0.38);--palette-text-inverted:#020617;--palette-border-main:#155e75;--palette-border-light:rgba(207,250,254,0.12);--palette-border-lighter:rgba(207,250,254,0.05);--palette-border-medium:#0c4a6e;--palette-success-main:#34d399;--palette-success-light:#065f46;--palette-success-dark:#10b981;--palette-success-border:#047857;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb7185;--palette-warning-light:#881337;--palette-warning-dark:#e11d48;--palette-warning-border:#be123c;--palette-info-main:#0ea5e9;--palette-info-light:#0c4a6e;--palette-info-dark:#38bdf8;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#ea580c;--palette-accent-light:#fb923c;--palette-accent-dark:#c2410c;--palette-on-accent:#cffafe;--palette-control-main:#164e63;--palette-control-light:#0e7490;--palette-control-text:#ecfeff;--palette-control-border:#155e75}
@@ -55,12 +55,14 @@ html[data-palette="spring"][data-theme="light"] {
55
55
  --palette-error-main: #f43f5e;
56
56
  --palette-error-light: #ffe4e6;
57
57
  --palette-error-dark: #881337;
58
+ --palette-on-error: #ffffff;
58
59
  --palette-error-border: #fecdd3;
59
-
60
+
60
61
  /* Warning palette - Daffodil */
61
62
  --palette-warning-main: #eab308;
62
63
  --palette-warning-light: #fefce8;
63
64
  --palette-warning-dark: #713f12;
65
+ --palette-on-warning: #000000;
64
66
  --palette-warning-border: #fef08a;
65
67
 
66
68
  /* Info palette - Sky blue */
@@ -0,0 +1 @@
1
+ html[data-palette="spring"]:not([data-theme="dark"]),html[data-palette="spring"][data-theme="light"]{--palette-primary-main:#16a34a;--palette-primary-light:#4ade80;--palette-primary-dark:#15803d;--palette-on-primary:#ffffff;--palette-secondary-main:#ec4899;--palette-secondary-light:#f472b6;--palette-secondary-dark:#be185d;--palette-on-secondary:#ffffff;--palette-surface-main:#f7fee7;--palette-surface-variant:#d9f7be;--palette-surface-elevated:#ffffff;--palette-on-surface:#14532d;--palette-background-main:#f0fdf4;--palette-background-dark:#dcfce7;--palette-background-overlay:rgba(240,253,244,0.95);--palette-on-background:#166534;--palette-text-primary:#14532d;--palette-text-secondary:#166534;--palette-text-disabled:rgba(20,83,45,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#bbf7d0;--palette-border-light:rgba(20,83,45,0.12);--palette-border-lighter:rgba(20,83,45,0.05);--palette-border-medium:#86efac;--palette-success-main:#22c55e;--palette-success-light:#dcfce7;--palette-success-dark:#15803d;--palette-success-border:#bbf7d0;--palette-error-main:#f43f5e;--palette-error-light:#ffe4e6;--palette-error-dark:#881337;--palette-on-error:#ffffff;--palette-error-border:#fecdd3;--palette-warning-main:#eab308;--palette-warning-light:#fefce8;--palette-warning-dark:#713f12;--palette-on-warning:#000000;--palette-warning-border:#fef08a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#14532d;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#365314;--palette-control-light:#4d7c0f;--palette-control-text:#ecfdf5;--palette-control-border:#65a30d}html[data-palette="spring"][data-theme="dark"]{--palette-primary-main:#4ade80;--palette-primary-light:#86efac;--palette-primary-dark:#16a34a;--palette-on-primary:#0f1f0f;--palette-secondary-main:#f472b6;--palette-secondary-light:#f9a8d4;--palette-secondary-dark:#ec4899;--palette-on-secondary:#0f1f0f;--palette-surface-main:#162816;--palette-surface-variant:#1f351f;--palette-surface-elevated:#2d4a2d;--palette-on-surface:#dcfce7;--palette-background-main:#060b06;--palette-background-dark:#0c140c;--palette-background-overlay:rgba(6,11,6,0.95);--palette-on-background:#bbf7d0;--palette-header-bg-start:rgba(6,11,6,0.98);--palette-header-bg-end:rgba(6,11,6,0.95);--palette-header-collapsed-bg-start:rgba(6,11,6,0.99);--palette-header-collapsed-bg-end:rgba(6,11,6,0.96);--palette-text-primary:#dcfce7;--palette-text-secondary:#bbf7d0;--palette-text-disabled:rgba(220,252,231,0.38);--palette-text-inverted:#0a120a;--palette-border-main:#166534;--palette-border-light:rgba(220,252,231,0.12);--palette-border-lighter:rgba(220,252,231,0.05);--palette-border-medium:#14532d;--palette-success-main:#22c55e;--palette-success-light:#14532d;--palette-success-dark:#4ade80;--palette-success-border:#166534;--palette-error-main:#f472b6;--palette-error-light:#881337;--palette-error-dark:#ec4899;--palette-error-border:#be185d;--palette-warning-main:#facc15;--palette-warning-light:#713f12;--palette-warning-dark:#eab308;--palette-warning-border:#a16207;--palette-info-main:#06b6d4;--palette-info-light:#164e63;--palette-info-dark:#22d3ee;--palette-on-info:#0a120a;--palette-info-border:#0891b2;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#dcfce7;--palette-control-main:#1a2e1a;--palette-control-light:#2d4a2d;--palette-control-text:#dcfce7;--palette-control-border:#166534}
@@ -55,12 +55,14 @@ html[data-palette="spring"][data-theme="light"] {
55
55
  --palette-error-main: #f43f5e;
56
56
  --palette-error-light: #ffe4e6;
57
57
  --palette-error-dark: #881337;
58
+ --palette-on-error: #ffffff;
58
59
  --palette-error-border: #fecdd3;
59
-
60
+
60
61
  /* Warning palette - Daffodil */
61
62
  --palette-warning-main: #eab308;
62
63
  --palette-warning-light: #fefce8;
63
64
  --palette-warning-dark: #713f12;
65
+ --palette-on-warning: #000000;
64
66
  --palette-warning-border: #fef08a;
65
67
 
66
68
  /* Info palette - Sky blue */
@@ -1 +1 @@
1
- html[data-palette="spring"]:not([data-theme="dark"]),html[data-palette="spring"][data-theme="light"]{--palette-primary-main:#16a34a;--palette-primary-light:#4ade80;--palette-primary-dark:#15803d;--palette-on-primary:#ffffff;--palette-secondary-main:#ec4899;--palette-secondary-light:#f472b6;--palette-secondary-dark:#be185d;--palette-on-secondary:#ffffff;--palette-surface-main:#f7fee7;--palette-surface-variant:#d9f7be;--palette-surface-elevated:#ffffff;--palette-on-surface:#14532d;--palette-background-main:#f0fdf4;--palette-background-dark:#dcfce7;--palette-background-overlay:rgba(240,253,244,0.95);--palette-on-background:#166534;--palette-text-primary:#14532d;--palette-text-secondary:#166534;--palette-text-disabled:rgba(20,83,45,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#bbf7d0;--palette-border-light:rgba(20,83,45,0.12);--palette-border-lighter:rgba(20,83,45,0.05);--palette-border-medium:#86efac;--palette-success-main:#22c55e;--palette-success-light:#dcfce7;--palette-success-dark:#15803d;--palette-success-border:#bbf7d0;--palette-error-main:#f43f5e;--palette-error-light:#ffe4e6;--palette-error-dark:#881337;--palette-error-border:#fecdd3;--palette-warning-main:#eab308;--palette-warning-light:#fefce8;--palette-warning-dark:#713f12;--palette-warning-border:#fef08a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#14532d;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#365314;--palette-control-light:#4d7c0f;--palette-control-text:#ecfdf5;--palette-control-border:#65a30d}html[data-palette="spring"][data-theme="dark"]{--palette-primary-main:#4ade80;--palette-primary-light:#86efac;--palette-primary-dark:#16a34a;--palette-on-primary:#0f1f0f;--palette-secondary-main:#f472b6;--palette-secondary-light:#f9a8d4;--palette-secondary-dark:#ec4899;--palette-on-secondary:#0f1f0f;--palette-surface-main:#162816;--palette-surface-variant:#1f351f;--palette-surface-elevated:#2d4a2d;--palette-on-surface:#dcfce7;--palette-background-main:#060b06;--palette-background-dark:#0c140c;--palette-background-overlay:rgba(6,11,6,0.95);--palette-on-background:#bbf7d0;--palette-header-bg-start:rgba(6,11,6,0.98);--palette-header-bg-end:rgba(6,11,6,0.95);--palette-header-collapsed-bg-start:rgba(6,11,6,0.99);--palette-header-collapsed-bg-end:rgba(6,11,6,0.96);--palette-text-primary:#dcfce7;--palette-text-secondary:#bbf7d0;--palette-text-disabled:rgba(220,252,231,0.38);--palette-text-inverted:#0a120a;--palette-border-main:#166534;--palette-border-light:rgba(220,252,231,0.12);--palette-border-lighter:rgba(220,252,231,0.05);--palette-border-medium:#14532d;--palette-success-main:#22c55e;--palette-success-light:#14532d;--palette-success-dark:#4ade80;--palette-success-border:#166534;--palette-error-main:#f472b6;--palette-error-light:#881337;--palette-error-dark:#ec4899;--palette-error-border:#be185d;--palette-warning-main:#facc15;--palette-warning-light:#713f12;--palette-warning-dark:#eab308;--palette-warning-border:#a16207;--palette-info-main:#06b6d4;--palette-info-light:#164e63;--palette-info-dark:#22d3ee;--palette-on-info:#0a120a;--palette-info-border:#0891b2;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#dcfce7;--palette-control-main:#1a2e1a;--palette-control-light:#2d4a2d;--palette-control-text:#dcfce7;--palette-control-border:#166534}
1
+ html[data-palette="spring"]:not([data-theme="dark"]),html[data-palette="spring"][data-theme="light"]{--palette-primary-main:#16a34a;--palette-primary-light:#4ade80;--palette-primary-dark:#15803d;--palette-on-primary:#ffffff;--palette-secondary-main:#ec4899;--palette-secondary-light:#f472b6;--palette-secondary-dark:#be185d;--palette-on-secondary:#ffffff;--palette-surface-main:#f7fee7;--palette-surface-variant:#d9f7be;--palette-surface-elevated:#ffffff;--palette-on-surface:#14532d;--palette-background-main:#f0fdf4;--palette-background-dark:#dcfce7;--palette-background-overlay:rgba(240,253,244,0.95);--palette-on-background:#166534;--palette-text-primary:#14532d;--palette-text-secondary:#166534;--palette-text-disabled:rgba(20,83,45,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#bbf7d0;--palette-border-light:rgba(20,83,45,0.12);--palette-border-lighter:rgba(20,83,45,0.05);--palette-border-medium:#86efac;--palette-success-main:#22c55e;--palette-success-light:#dcfce7;--palette-success-dark:#15803d;--palette-success-border:#bbf7d0;--palette-error-main:#f43f5e;--palette-error-light:#ffe4e6;--palette-error-dark:#881337;--palette-on-error:#ffffff;--palette-error-border:#fecdd3;--palette-warning-main:#eab308;--palette-warning-light:#fefce8;--palette-warning-dark:#713f12;--palette-on-warning:#000000;--palette-warning-border:#fef08a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#14532d;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#365314;--palette-control-light:#4d7c0f;--palette-control-text:#ecfdf5;--palette-control-border:#65a30d}html[data-palette="spring"][data-theme="dark"]{--palette-primary-main:#4ade80;--palette-primary-light:#86efac;--palette-primary-dark:#16a34a;--palette-on-primary:#0f1f0f;--palette-secondary-main:#f472b6;--palette-secondary-light:#f9a8d4;--palette-secondary-dark:#ec4899;--palette-on-secondary:#0f1f0f;--palette-surface-main:#162816;--palette-surface-variant:#1f351f;--palette-surface-elevated:#2d4a2d;--palette-on-surface:#dcfce7;--palette-background-main:#060b06;--palette-background-dark:#0c140c;--palette-background-overlay:rgba(6,11,6,0.95);--palette-on-background:#bbf7d0;--palette-header-bg-start:rgba(6,11,6,0.98);--palette-header-bg-end:rgba(6,11,6,0.95);--palette-header-collapsed-bg-start:rgba(6,11,6,0.99);--palette-header-collapsed-bg-end:rgba(6,11,6,0.96);--palette-text-primary:#dcfce7;--palette-text-secondary:#bbf7d0;--palette-text-disabled:rgba(220,252,231,0.38);--palette-text-inverted:#0a120a;--palette-border-main:#166534;--palette-border-light:rgba(220,252,231,0.12);--palette-border-lighter:rgba(220,252,231,0.05);--palette-border-medium:#14532d;--palette-success-main:#22c55e;--palette-success-light:#14532d;--palette-success-dark:#4ade80;--palette-success-border:#166534;--palette-error-main:#f472b6;--palette-error-light:#881337;--palette-error-dark:#ec4899;--palette-error-border:#be185d;--palette-warning-main:#facc15;--palette-warning-light:#713f12;--palette-warning-dark:#eab308;--palette-warning-border:#a16207;--palette-info-main:#06b6d4;--palette-info-light:#164e63;--palette-info-dark:#22d3ee;--palette-on-info:#0a120a;--palette-info-border:#0891b2;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#dcfce7;--palette-control-main:#1a2e1a;--palette-control-light:#2d4a2d;--palette-control-text:#dcfce7;--palette-control-border:#166534}
@@ -61,12 +61,14 @@ html[data-palette="winter"][data-theme="light"] {
61
61
  --palette-error-main: #dc2626;
62
62
  --palette-error-light: #fee2e2;
63
63
  --palette-error-dark: #7f1d1d;
64
+ --palette-on-error: #ffffff;
64
65
  --palette-error-border: #fecaca;
65
-
66
+
66
67
  /* Warning palette - Amber frost */
67
68
  --palette-warning-main: #d97706;
68
69
  --palette-warning-light: #fef3c7;
69
70
  --palette-warning-dark: #92400e;
71
+ --palette-on-warning: #000000;
70
72
  --palette-warning-border: #fde68a;
71
73
 
72
74
  /* Info palette - Arctic blue */
@@ -0,0 +1 @@
1
+ html[data-palette="winter"]:not([data-theme="dark"]),html[data-palette="winter"][data-theme="light"]{--palette-primary-main:#0077be;--palette-primary-light:#5ba3d0;--palette-primary-dark:#005082;--palette-on-primary:#ffffff;--palette-secondary-main:#4682b4;--palette-secondary-light:#7ba7cc;--palette-secondary-dark:#2e5984;--palette-on-secondary:#ffffff;--palette-surface-main:#fafbfc;--palette-surface-variant:#e2e8f0;--palette-surface-elevated:#ffffff;--palette-on-surface:#0f172a;--palette-background-main:#f8fafc;--palette-background-dark:#f1f5f9;--palette-background-overlay:rgba(248,250,252,0.95);--palette-on-background:#475569;--palette-header-bg-start:rgba(248,250,252,0.98);--palette-header-bg-end:rgba(248,250,252,0.95);--palette-header-collapsed-bg-start:rgba(248,250,252,0.99);--palette-header-collapsed-bg-end:rgba(248,250,252,0.96);--palette-text-primary:#0f172a;--palette-text-secondary:#475569;--palette-text-disabled:rgba(15,23,42,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#cbd5e1;--palette-border-light:rgba(15,23,42,0.12);--palette-border-lighter:rgba(15,23,42,0.05);--palette-border-medium:#94a3b8;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#064e3b;--palette-success-border:#a7f3d0;--palette-error-main:#dc2626;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-on-error:#ffffff;--palette-error-border:#fecaca;--palette-warning-main:#d97706;--palette-warning-light:#fef3c7;--palette-warning-dark:#92400e;--palette-on-warning:#000000;--palette-warning-border:#fde68a;--palette-info-main:#0284c7;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}html[data-palette="winter"][data-theme="dark"]{--palette-primary-main:#7dd3fc;--palette-primary-light:#bae6fd;--palette-primary-dark:#0369a1;--palette-on-primary:#020617;--palette-secondary-main:#94a3b8;--palette-secondary-light:#cbd5e1;--palette-secondary-dark:#64748b;--palette-on-secondary:#020617;--palette-surface-main:#172033;--palette-surface-variant:#1e293b;--palette-surface-elevated:#334155;--palette-on-surface:#f8fafc;--palette-background-main:#04080f;--palette-background-dark:#0a1018;--palette-background-overlay:rgba(15,23,42,0.95);--palette-on-background:#cbd5e1;--palette-header-bg-start:rgba(4,8,15,0.98);--palette-header-bg-end:rgba(4,8,15,0.95);--palette-header-collapsed-bg-start:rgba(4,8,15,0.99);--palette-header-collapsed-bg-end:rgba(4,8,15,0.96);--palette-text-primary:#f8fafc;--palette-text-secondary:#cbd5e1;--palette-text-disabled:rgba(248,250,252,0.38);--palette-text-inverted:#020617;--palette-border-main:#475569;--palette-border-light:rgba(248,250,252,0.12);--palette-border-lighter:rgba(248,250,252,0.05);--palette-border-medium:#334155;--palette-success-main:#34d399;--palette-success-light:#064e3b;--palette-success-dark:#10b981;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb923c;--palette-warning-light:#9a3412;--palette-warning-dark:#f97316;--palette-warning-border:#c2410c;--palette-info-main:#38bdf8;--palette-info-light:#0c4a6e;--palette-info-dark:#0ea5e9;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#f8fafc;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}
@@ -61,12 +61,14 @@ html[data-palette="winter"][data-theme="light"] {
61
61
  --palette-error-main: #dc2626;
62
62
  --palette-error-light: #fee2e2;
63
63
  --palette-error-dark: #7f1d1d;
64
+ --palette-on-error: #ffffff;
64
65
  --palette-error-border: #fecaca;
65
-
66
+
66
67
  /* Warning palette - Amber frost */
67
68
  --palette-warning-main: #d97706;
68
69
  --palette-warning-light: #fef3c7;
69
70
  --palette-warning-dark: #92400e;
71
+ --palette-on-warning: #000000;
70
72
  --palette-warning-border: #fde68a;
71
73
 
72
74
  /* Info palette - Arctic blue */
@@ -1 +1 @@
1
- html[data-palette="winter"]:not([data-theme="dark"]),html[data-palette="winter"][data-theme="light"]{--palette-primary-main:#0077be;--palette-primary-light:#5ba3d0;--palette-primary-dark:#005082;--palette-on-primary:#ffffff;--palette-secondary-main:#4682b4;--palette-secondary-light:#7ba7cc;--palette-secondary-dark:#2e5984;--palette-on-secondary:#ffffff;--palette-surface-main:#fafbfc;--palette-surface-variant:#e2e8f0;--palette-surface-elevated:#ffffff;--palette-on-surface:#0f172a;--palette-background-main:#f8fafc;--palette-background-dark:#f1f5f9;--palette-background-overlay:rgba(248,250,252,0.95);--palette-on-background:#475569;--palette-header-bg-start:rgba(248,250,252,0.98);--palette-header-bg-end:rgba(248,250,252,0.95);--palette-header-collapsed-bg-start:rgba(248,250,252,0.99);--palette-header-collapsed-bg-end:rgba(248,250,252,0.96);--palette-text-primary:#0f172a;--palette-text-secondary:#475569;--palette-text-disabled:rgba(15,23,42,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#cbd5e1;--palette-border-light:rgba(15,23,42,0.12);--palette-border-lighter:rgba(15,23,42,0.05);--palette-border-medium:#94a3b8;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#064e3b;--palette-success-border:#a7f3d0;--palette-error-main:#dc2626;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-error-border:#fecaca;--palette-warning-main:#d97706;--palette-warning-light:#fef3c7;--palette-warning-dark:#92400e;--palette-warning-border:#fde68a;--palette-info-main:#0284c7;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}html[data-palette="winter"][data-theme="dark"]{--palette-primary-main:#7dd3fc;--palette-primary-light:#bae6fd;--palette-primary-dark:#0369a1;--palette-on-primary:#020617;--palette-secondary-main:#94a3b8;--palette-secondary-light:#cbd5e1;--palette-secondary-dark:#64748b;--palette-on-secondary:#020617;--palette-surface-main:#172033;--palette-surface-variant:#1e293b;--palette-surface-elevated:#334155;--palette-on-surface:#f8fafc;--palette-background-main:#04080f;--palette-background-dark:#0a1018;--palette-background-overlay:rgba(15,23,42,0.95);--palette-on-background:#cbd5e1;--palette-header-bg-start:rgba(4,8,15,0.98);--palette-header-bg-end:rgba(4,8,15,0.95);--palette-header-collapsed-bg-start:rgba(4,8,15,0.99);--palette-header-collapsed-bg-end:rgba(4,8,15,0.96);--palette-text-primary:#f8fafc;--palette-text-secondary:#cbd5e1;--palette-text-disabled:rgba(248,250,252,0.38);--palette-text-inverted:#020617;--palette-border-main:#475569;--palette-border-light:rgba(248,250,252,0.12);--palette-border-lighter:rgba(248,250,252,0.05);--palette-border-medium:#334155;--palette-success-main:#34d399;--palette-success-light:#064e3b;--palette-success-dark:#10b981;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb923c;--palette-warning-light:#9a3412;--palette-warning-dark:#f97316;--palette-warning-border:#c2410c;--palette-info-main:#38bdf8;--palette-info-light:#0c4a6e;--palette-info-dark:#0ea5e9;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#f8fafc;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}
1
+ html[data-palette="winter"]:not([data-theme="dark"]),html[data-palette="winter"][data-theme="light"]{--palette-primary-main:#0077be;--palette-primary-light:#5ba3d0;--palette-primary-dark:#005082;--palette-on-primary:#ffffff;--palette-secondary-main:#4682b4;--palette-secondary-light:#7ba7cc;--palette-secondary-dark:#2e5984;--palette-on-secondary:#ffffff;--palette-surface-main:#fafbfc;--palette-surface-variant:#e2e8f0;--palette-surface-elevated:#ffffff;--palette-on-surface:#0f172a;--palette-background-main:#f8fafc;--palette-background-dark:#f1f5f9;--palette-background-overlay:rgba(248,250,252,0.95);--palette-on-background:#475569;--palette-header-bg-start:rgba(248,250,252,0.98);--palette-header-bg-end:rgba(248,250,252,0.95);--palette-header-collapsed-bg-start:rgba(248,250,252,0.99);--palette-header-collapsed-bg-end:rgba(248,250,252,0.96);--palette-text-primary:#0f172a;--palette-text-secondary:#475569;--palette-text-disabled:rgba(15,23,42,0.38);--palette-text-inverted:#ffffff;--palette-border-main:#cbd5e1;--palette-border-light:rgba(15,23,42,0.12);--palette-border-lighter:rgba(15,23,42,0.05);--palette-border-medium:#94a3b8;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#064e3b;--palette-success-border:#a7f3d0;--palette-error-main:#dc2626;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-on-error:#ffffff;--palette-error-border:#fecaca;--palette-warning-main:#d97706;--palette-warning-light:#fef3c7;--palette-warning-dark:#92400e;--palette-on-warning:#000000;--palette-warning-border:#fde68a;--palette-info-main:#0284c7;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#ffffff;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#ffffff;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}html[data-palette="winter"][data-theme="dark"]{--palette-primary-main:#7dd3fc;--palette-primary-light:#bae6fd;--palette-primary-dark:#0369a1;--palette-on-primary:#020617;--palette-secondary-main:#94a3b8;--palette-secondary-light:#cbd5e1;--palette-secondary-dark:#64748b;--palette-on-secondary:#020617;--palette-surface-main:#172033;--palette-surface-variant:#1e293b;--palette-surface-elevated:#334155;--palette-on-surface:#f8fafc;--palette-background-main:#04080f;--palette-background-dark:#0a1018;--palette-background-overlay:rgba(15,23,42,0.95);--palette-on-background:#cbd5e1;--palette-header-bg-start:rgba(4,8,15,0.98);--palette-header-bg-end:rgba(4,8,15,0.95);--palette-header-collapsed-bg-start:rgba(4,8,15,0.99);--palette-header-collapsed-bg-end:rgba(4,8,15,0.96);--palette-text-primary:#f8fafc;--palette-text-secondary:#cbd5e1;--palette-text-disabled:rgba(248,250,252,0.38);--palette-text-inverted:#020617;--palette-border-main:#475569;--palette-border-light:rgba(248,250,252,0.12);--palette-border-lighter:rgba(248,250,252,0.05);--palette-border-medium:#334155;--palette-success-main:#34d399;--palette-success-light:#064e3b;--palette-success-dark:#10b981;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb923c;--palette-warning-light:#9a3412;--palette-warning-dark:#f97316;--palette-warning-border:#c2410c;--palette-info-main:#38bdf8;--palette-info-light:#0c4a6e;--palette-info-dark:#0ea5e9;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#f8fafc;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Schema for Captcha component - Universal CAPTCHA widget
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ import 'reflect-metadata';
7
+ import ViewSchema from './ViewSchema';
8
+ export declare class CaptchaModel extends ViewSchema {
9
+ provider: 'recaptcha-v2' | 'recaptcha-v3' | 'hcaptcha' | 'turnstile';
10
+ siteKey: string;
11
+ theme?: 'light' | 'dark';
12
+ size?: 'normal' | 'compact' | 'invisible';
13
+ action?: string;
14
+ }
15
+ export default CaptchaModel;
16
+ //# sourceMappingURL=CaptchaSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CaptchaSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/CaptchaSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,qBACa,YAAa,SAAQ,UAAU;IAQ1C,QAAQ,EAAG,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;IAUtE,OAAO,EAAG,MAAM,CAAC;IAUjB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAUzB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAW1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Schema for FormCheckbox component - Themed checkbox input
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ import 'reflect-metadata';
7
+ import ViewSchema from './ViewSchema';
8
+ export declare class FormCheckboxModel extends ViewSchema {
9
+ label: string;
10
+ checked: boolean;
11
+ helperText?: string;
12
+ required?: boolean;
13
+ disabled?: boolean;
14
+ }
15
+ export default FormCheckboxModel;
16
+ //# sourceMappingURL=FormCheckboxSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormCheckboxSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/FormCheckboxSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,qBACa,iBAAkB,SAAQ,UAAU;IAS/C,KAAK,EAAG,MAAM,CAAC;IASf,OAAO,EAAG,OAAO,CAAC;IAWlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAUpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAUnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Schema for FormField component - Themed text/number input field
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ import 'reflect-metadata';
7
+ import ViewSchema from './ViewSchema';
8
+ export declare class FormFieldModel extends ViewSchema {
9
+ label: string;
10
+ value: string | number;
11
+ type?: 'text' | 'number' | 'password' | 'email' | 'tel';
12
+ helperText?: string;
13
+ required?: boolean;
14
+ readOnly?: boolean;
15
+ disabled?: boolean;
16
+ disabledColor?: string;
17
+ fullWidth?: boolean;
18
+ multiline?: boolean;
19
+ rows?: number;
20
+ placeholder?: string;
21
+ }
22
+ export default FormFieldModel;
23
+ //# sourceMappingURL=FormFieldSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFieldSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/FormFieldSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,qBACa,cAAe,SAAQ,UAAU;IAS5C,KAAK,EAAG,MAAM,CAAC;IAUf,KAAK,EAAG,MAAM,GAAG,MAAM,CAAC;IAUxB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;IAWxD,UAAU,CAAC,EAAE,MAAM,CAAC;IAUpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAUnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAUnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAWnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAUvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAUpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAYpB,IAAI,CAAC,EAAE,MAAM,CAAC;IAWd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Schema for FormSelect component - Themed dropdown select input
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ import 'reflect-metadata';
7
+ import ViewSchema from './ViewSchema';
8
+ export declare class FormSelectModel extends ViewSchema {
9
+ label?: string;
10
+ value: string | number;
11
+ options: string;
12
+ helperText?: string;
13
+ required?: boolean;
14
+ disabled?: boolean;
15
+ fullWidth?: boolean;
16
+ size?: 'small' | 'medium';
17
+ placeholder?: string;
18
+ }
19
+ export default FormSelectModel;
20
+ //# sourceMappingURL=FormSelectSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSelectSchema.d.ts","sourceRoot":"","sources":["../../src/schemas/FormSelectSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,qBACa,eAAgB,SAAQ,UAAU;IAU7C,KAAK,CAAC,EAAE,MAAM,CAAC;IAUf,KAAK,EAAG,MAAM,GAAG,MAAM,CAAC;IAUxB,OAAO,EAAG,MAAM,CAAC;IAWjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAUpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAUnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAUnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAUpB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAW1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAe,eAAe,CAAC"}
@@ -23,6 +23,10 @@ export * from './FeatureGridSchema';
23
23
  export * from './FeatureItemSchema';
24
24
  export * from './FooterItemSchema';
25
25
  export * from './FormBlockSchema';
26
+ export * from './FormSelectSchema';
27
+ export * from './FormFieldSchema';
28
+ export * from './FormCheckboxSchema';
29
+ export * from './CaptchaSchema';
26
30
  export * from './FooterSchema';
27
31
  export * from './FooterSectionSchema';
28
32
  export * from './GridCellSchema';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,yBAAyB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,yBAAyB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -108,6 +108,7 @@ export declare class ComponentTransformer {
108
108
  static transformHTMLElement(element: Element): ReactNode | null;
109
109
  /**
110
110
  * Transform HTML string to React nodes using registered patterns
111
+ * Supports both server-side (linkedom) and client-side (DOMParser) rendering
111
112
  * @param html - HTML string to transform
112
113
  * @returns Array of React nodes
113
114
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentTransformer.d.ts","sourceRoot":"","sources":["../../../src/schemas/transformers/ComponentTransformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAc,EAAE,SAAS,EAAgB,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAchE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAc3D;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5C;;;OAGG;IACH,MAAM,CAAC,YAAY,IAAI,OAAO;IAI9B;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,uBAAuB,GAAG,IAAI;IA4BvE;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,MAAM;IAKvD;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE;IAe9E;;;;KAIC;IACD,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAQpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmD9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAkE5B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAI/C;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA4BtC;;;OAGG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAI1C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAOtE;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAe/D;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAS/C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA+C/B;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;CAGzC"}
1
+ {"version":3,"file":"ComponentTransformer.d.ts","sourceRoot":"","sources":["../../../src/schemas/transformers/ComponentTransformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAc,EAAE,SAAS,EAAgB,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AA2BhE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAc3D;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5C;;;OAGG;IACH,MAAM,CAAC,YAAY,IAAI,OAAO;IAI9B;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,uBAAuB,GAAG,IAAI;IA4BvE;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,MAAM;IAKvD;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE;IAe9E;;;;KAIC;IACD,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAQpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmD9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAkE5B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAI/C;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA4BtC;;;OAGG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAI1C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAOtE;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAe/D;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAyB/C;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA+C/B;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;CAGzC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwickapps/react-framework",
3
- "version": "1.5.13",
3
+ "version": "1.7.0",
4
4
  "description": "Complete React framework with responsive navigation, flexible layouts, theming system, and reusable components for building modern applications.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -73,6 +73,7 @@
73
73
  "license": "PolyForm-Shield-1.0.0",
74
74
  "dependencies": {
75
75
  "@qwickapps/schema": "^1.3.2",
76
+ "linkedom": "^0.18.12",
76
77
  "marked": "^4.3.0",
77
78
  "md5": "^2.3.0",
78
79
  "sanitize-html": "^2.17.0"
@@ -339,6 +339,11 @@ html[data-palette="default"][data-theme="dark"] {
339
339
  --theme-elevation-2: 0 4px 8px rgba(0, 0, 0, 0.15);
340
340
  --theme-elevation-3: 0 6px 12px rgba(0, 0, 0, 0.2);
341
341
  --theme-elevation-4: 0 8px 16px rgba(0, 0, 0, 0.25);
342
+
343
+ /* Overlay colors for semi-transparent surfaces */
344
+ --theme-overlay-80: color-mix(in srgb, var(--palette-surface-main) 80%, transparent);
345
+ --theme-overlay-90: color-mix(in srgb, var(--palette-surface-main) 90%, transparent);
346
+ --theme-overlay-95: color-mix(in srgb, var(--palette-surface-main) 95%, transparent);
342
347
  }
343
348
 
344
349
  /* ===== THEME-SPECIFIC ADAPTATIONS ===== */
@@ -459,3 +464,20 @@ pre code {
459
464
  padding: 0;
460
465
  border-radius: 0;
461
466
  }
467
+
468
+ /* Global link styles using theme variables */
469
+ a {
470
+ color: var(--theme-link-color);
471
+ text-decoration: none;
472
+ transition: color 0.2s ease;
473
+ }
474
+
475
+ a:hover {
476
+ color: var(--theme-link-hover);
477
+ text-decoration: underline;
478
+ }
479
+
480
+ a:visited {
481
+ color: var(--theme-link-color);
482
+ opacity: 0.8;
483
+ }
@@ -48,6 +48,11 @@
48
48
  border-bottom: 1px solid var(--scaffold-outline);
49
49
  box-shadow: var(--scaffold-shadow);
50
50
  z-index: 1100;
51
+
52
+ /* Fix for iOS PWA fullscreen mode bleed-through (GH-1) */
53
+ isolation: isolate;
54
+ -webkit-backdrop-filter: blur(0px);
55
+ backdrop-filter: blur(0px);
51
56
  }
52
57
 
53
58
  .appbar-content {
@@ -33,8 +33,8 @@ const logger = loggers.scaffold;
33
33
  export interface AppBarProps {
34
34
  /** Title to display in the app bar */
35
35
  title?: string;
36
- /** Actions to display on the right side */
37
- actions?: React.ReactNode;
36
+ /** Actions to display on the right side - use render function for server/client boundary safety */
37
+ actions?: React.ReactNode | (() => React.ReactNode);
38
38
  /** Whether to show the menu button (for drawer toggle) */
39
39
  showMenuButton?: boolean;
40
40
  /** Custom logo override */
@@ -400,7 +400,9 @@ const Scaffold: React.FC<ScaffoldProps> = ({
400
400
  <div className="appbar-right">
401
401
  {enhancedAppBar?.actions && (
402
402
  <div key="appbar-actions" className="appbar-actions">
403
- {enhancedAppBar.actions}
403
+ {typeof enhancedAppBar.actions === 'function'
404
+ ? enhancedAppBar.actions()
405
+ : enhancedAppBar.actions}
404
406
  </div>
405
407
  )}
406
408
  {/* Theme and Palette Switchers */}
@@ -11,7 +11,7 @@
11
11
  * - Provider-agnostic API
12
12
  * - Automatic script loading
13
13
  * - TypeScript support
14
- * - Themed styling with base props support
14
+ * - Themed styling with schema-driven architecture
15
15
  * - Grid behavior support
16
16
  * - Error handling
17
17
  *
@@ -20,57 +20,57 @@
20
20
 
21
21
  import React, { useEffect, useRef, useState } from 'react';
22
22
  import { Box, Alert } from '@mui/material';
23
- import { useBaseProps, WithBaseProps, QWICKAPP_COMPONENT } from '../../hooks/useBaseProps';
23
+ import type { SchemaProps } from '@qwickapps/schema';
24
+ import CaptchaModel from '../../schemas/CaptchaSchema';
25
+ import { ViewProps } from '../shared/viewProps';
26
+ import { createSerializableView, SerializableComponent } from '../shared/createSerializableView';
24
27
 
25
- export type CaptchaProvider = 'recaptcha-v2' | 'recaptcha-v3' | 'hcaptcha' | 'turnstile';
28
+ // Declare global interfaces for CAPTCHA providers
29
+ declare global {
30
+ interface Window {
31
+ grecaptcha?: {
32
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
33
+ execute?: (siteKey: string, options: { action: string }) => Promise<string>;
34
+ reset?: (widgetId: string | number) => void;
35
+ };
36
+ hcaptcha?: {
37
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
38
+ remove?: (widgetId: string | number) => void;
39
+ };
40
+ turnstile?: {
41
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
42
+ remove?: (widgetId: string | number) => void;
43
+ };
44
+ }
45
+ }
26
46
 
27
- interface CaptchaBaseProps {
28
- /** CAPTCHA provider */
29
- provider: CaptchaProvider;
30
- /** Site key (public key) */
31
- siteKey: string;
47
+ /**
48
+ * Props interface for Captcha component
49
+ * Combines schema props with callback handlers
50
+ */
51
+ export interface CaptchaProps extends ViewProps, SchemaProps<typeof CaptchaModel> {
32
52
  /** Callback when CAPTCHA is successfully completed */
33
53
  onVerify: (token: string) => void;
34
54
  /** Callback when CAPTCHA expires or fails */
35
55
  onExpire?: () => void;
36
56
  /** Callback when CAPTCHA encounters an error */
37
57
  onError?: (error: Error) => void;
38
- /** Theme for the widget (light or dark) */
39
- theme?: 'light' | 'dark';
40
- /** Size of the widget */
41
- size?: 'normal' | 'compact' | 'invisible';
42
- /** reCAPTCHA v3 action name */
43
- action?: string;
44
58
  }
45
59
 
46
- export interface CaptchaProps extends WithBaseProps<CaptchaBaseProps> {}
47
-
48
- // Declare global interfaces for CAPTCHA providers
49
- declare global {
50
- interface Window {
51
- grecaptcha?: unknown;
52
- hcaptcha?: unknown;
53
- turnstile?: unknown;
54
- onRecaptchaLoad?: () => void;
55
- onHcaptchaLoad?: () => void;
56
- onTurnstileLoad?: () => void;
57
- }
58
- }
59
-
60
- export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, ref) => {
61
- const { gridProps, styleProps, htmlProps, restProps } = useBaseProps(props);
62
-
63
- const {
64
- provider,
65
- siteKey,
66
- onVerify,
67
- onExpire,
68
- onError,
69
- theme = 'light',
70
- size = 'normal',
71
- action = 'submit',
72
- } = restProps as CaptchaBaseProps;
73
-
60
+ /**
61
+ * CaptchaView - Pure view component that renders the CAPTCHA widget
62
+ */
63
+ function CaptchaView({
64
+ provider,
65
+ siteKey,
66
+ onVerify,
67
+ onExpire,
68
+ onError,
69
+ theme = 'light',
70
+ size = 'normal',
71
+ action = 'submit',
72
+ ...restProps
73
+ }: CaptchaProps) {
74
74
  const containerRef = useRef<HTMLDivElement>(null);
75
75
  const widgetIdRef = useRef<string | number | null>(null);
76
76
  const [isLoaded, setIsLoaded] = useState(false);
@@ -155,7 +155,7 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
155
155
  try {
156
156
  switch (provider) {
157
157
  case 'recaptcha-v2':
158
- if (window.grecaptcha && window.grecaptcha.render) {
158
+ if (window.grecaptcha?.render) {
159
159
  widgetIdRef.current = window.grecaptcha.render(containerRef.current, {
160
160
  sitekey: siteKey,
161
161
  callback: onVerify,
@@ -173,7 +173,7 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
173
173
 
174
174
  case 'recaptcha-v3':
175
175
  // reCAPTCHA v3 is invisible and executes programmatically
176
- if (window.grecaptcha && window.grecaptcha.execute) {
176
+ if (window.grecaptcha?.execute) {
177
177
  window.grecaptcha.execute(siteKey, { action }).then((token: string) => {
178
178
  onVerify(token);
179
179
  }).catch((err: Error) => {
@@ -184,7 +184,7 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
184
184
  break;
185
185
 
186
186
  case 'hcaptcha':
187
- if (window.hcaptcha && window.hcaptcha.render) {
187
+ if (window.hcaptcha?.render) {
188
188
  widgetIdRef.current = window.hcaptcha.render(containerRef.current, {
189
189
  sitekey: siteKey,
190
190
  callback: onVerify,
@@ -201,7 +201,7 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
201
201
  break;
202
202
 
203
203
  case 'turnstile':
204
- if (window.turnstile && window.turnstile.render) {
204
+ if (window.turnstile?.render) {
205
205
  widgetIdRef.current = window.turnstile.render(containerRef.current, {
206
206
  sitekey: siteKey,
207
207
  callback: onVerify,
@@ -257,21 +257,10 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
257
257
 
258
258
  return (
259
259
  <Box
260
- ref={ref}
261
- {...htmlProps}
260
+ {...restProps}
262
261
  sx={{
263
262
  my: 2,
264
- ...styleProps.sx,
265
263
  }}
266
- // Store grid props as data attributes for ColumnLayout to pick up
267
- {...(gridProps && {
268
- 'data-grid-span': gridProps.span,
269
- 'data-grid-xs': gridProps.xs,
270
- 'data-grid-sm': gridProps.sm,
271
- 'data-grid-md': gridProps.md,
272
- 'data-grid-lg': gridProps.lg,
273
- 'data-grid-xl': gridProps.xl,
274
- })}
275
264
  >
276
265
  {error && (
277
266
  <Alert severity="error" sx={{ mb: 2 }}>
@@ -281,11 +270,16 @@ export const Captcha = React.forwardRef<HTMLDivElement, CaptchaProps>((props, re
281
270
  <div ref={containerRef} />
282
271
  </Box>
283
272
  );
284
- });
285
-
286
- Captcha.displayName = 'Captcha';
273
+ }
287
274
 
288
- // Mark as QwickApp component
289
- Object.assign(Captcha, { [QWICKAPP_COMPONENT]: true });
275
+ /**
276
+ * Create Captcha component using the factory pattern
277
+ */
278
+ export const Captcha: SerializableComponent<CaptchaProps> = createSerializableView<CaptchaProps>({
279
+ tagName: 'Captcha',
280
+ version: '1.0.0',
281
+ role: 'input',
282
+ View: CaptchaView,
283
+ });
290
284
 
291
285
  export default Captcha;