@qwickapps/react-framework 1.5.12 → 1.6.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 (65) hide show
  1. package/README.md +23 -0
  2. package/dist/components/blocks/ImageGallery.d.ts +30 -0
  3. package/dist/components/blocks/ImageGallery.d.ts.map +1 -0
  4. package/dist/components/blocks/OptionSelector.d.ts +45 -0
  5. package/dist/components/blocks/OptionSelector.d.ts.map +1 -0
  6. package/dist/components/blocks/index.d.ts +4 -0
  7. package/dist/components/blocks/index.d.ts.map +1 -1
  8. package/dist/components/forms/Captcha.d.ts +33 -28
  9. package/dist/components/forms/Captcha.d.ts.map +1 -1
  10. package/dist/components/forms/FormCheckbox.d.ts +15 -12
  11. package/dist/components/forms/FormCheckbox.d.ts.map +1 -1
  12. package/dist/components/forms/FormField.d.ts +20 -23
  13. package/dist/components/forms/FormField.d.ts.map +1 -1
  14. package/dist/components/forms/FormSelect.d.ts +16 -15
  15. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  16. package/dist/hooks/useBaseProps.d.ts +27 -1172
  17. package/dist/hooks/useBaseProps.d.ts.map +1 -1
  18. package/dist/index.esm.js +1674 -554
  19. package/dist/index.js +1676 -552
  20. package/dist/palettes/manifest.json +19 -19
  21. package/dist/schemas/CaptchaSchema.d.ts +16 -0
  22. package/dist/schemas/CaptchaSchema.d.ts.map +1 -0
  23. package/dist/schemas/FormCheckboxSchema.d.ts +16 -0
  24. package/dist/schemas/FormCheckboxSchema.d.ts.map +1 -0
  25. package/dist/schemas/FormFieldSchema.d.ts +23 -0
  26. package/dist/schemas/FormFieldSchema.d.ts.map +1 -0
  27. package/dist/schemas/FormSelectSchema.d.ts +20 -0
  28. package/dist/schemas/FormSelectSchema.d.ts.map +1 -0
  29. package/dist/schemas/ImageGallerySchema.d.ts +27 -0
  30. package/dist/schemas/ImageGallerySchema.d.ts.map +1 -0
  31. package/dist/schemas/OptionSelectorSchema.d.ts +34 -0
  32. package/dist/schemas/OptionSelectorSchema.d.ts.map +1 -0
  33. package/dist/schemas/index.d.ts +6 -0
  34. package/dist/schemas/index.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/src/components/blocks/Article.tsx +1 -1
  37. package/src/components/blocks/ImageGallery.tsx +464 -0
  38. package/src/components/blocks/OptionSelector.tsx +459 -0
  39. package/src/components/blocks/index.ts +4 -0
  40. package/src/components/forms/Captcha.tsx +57 -63
  41. package/src/components/forms/FormCheckbox.tsx +35 -43
  42. package/src/components/forms/FormField.tsx +50 -66
  43. package/src/components/forms/FormSelect.tsx +41 -49
  44. package/src/hooks/useBaseProps.ts +34 -1
  45. package/src/schemas/CaptchaSchema.ts +65 -0
  46. package/src/schemas/FormCheckboxSchema.ts +65 -0
  47. package/src/schemas/FormFieldSchema.ts +140 -0
  48. package/src/schemas/FormSelectSchema.ts +108 -0
  49. package/src/schemas/ImageGallerySchema.ts +148 -0
  50. package/src/schemas/OptionSelectorSchema.ts +216 -0
  51. package/src/schemas/index.ts +6 -0
  52. package/src/stories/ImageGallery.stories.tsx +497 -0
  53. package/src/stories/OptionSelector.stories.tsx +506 -0
  54. /package/dist/palettes/{palette-autumn.1.5.12.css → palette-autumn.1.6.0.css} +0 -0
  55. /package/dist/palettes/{palette-autumn.1.5.12.min.css → palette-autumn.1.6.0.min.css} +0 -0
  56. /package/dist/palettes/{palette-cosmic.1.5.12.css → palette-cosmic.1.6.0.css} +0 -0
  57. /package/dist/palettes/{palette-cosmic.1.5.12.min.css → palette-cosmic.1.6.0.min.css} +0 -0
  58. /package/dist/palettes/{palette-default.1.5.12.css → palette-default.1.6.0.css} +0 -0
  59. /package/dist/palettes/{palette-default.1.5.12.min.css → palette-default.1.6.0.min.css} +0 -0
  60. /package/dist/palettes/{palette-ocean.1.5.12.css → palette-ocean.1.6.0.css} +0 -0
  61. /package/dist/palettes/{palette-ocean.1.5.12.min.css → palette-ocean.1.6.0.min.css} +0 -0
  62. /package/dist/palettes/{palette-spring.1.5.12.css → palette-spring.1.6.0.css} +0 -0
  63. /package/dist/palettes/{palette-spring.1.5.12.min.css → palette-spring.1.6.0.min.css} +0 -0
  64. /package/dist/palettes/{palette-winter.1.5.12.css → palette-winter.1.6.0.css} +0 -0
  65. /package/dist/palettes/{palette-winter.1.5.12.min.css → palette-winter.1.6.0.min.css} +0 -0
package/README.md CHANGED
@@ -4,6 +4,29 @@ A complete React framework for building modern, responsive applications with int
4
4
 
5
5
  ## What's New
6
6
 
7
+ ### January 25, 2026 - E-Commerce Components (v1.5.13)
8
+
9
+ #### New Components
10
+
11
+ - **ImageGallery Component**: Professional image gallery with multiple display variants
12
+ - Three display modes: thumbnails (left/bottom/right), carousel, and grid
13
+ - Built-in zoom modal for full-screen viewing
14
+ - Customizable aspect ratios (1:1, 4:3, 16:9, custom)
15
+ - Responsive design with mobile-first approach
16
+ - Full theme compliance using CSS custom properties
17
+
18
+ - **OptionSelector Component**: Universal option selector for e-commerce and forms
19
+ - Text mode: Button grid for sizes, quantities (S, M, L, XL, etc.)
20
+ - Color mode: Circular swatches with hex color backgrounds
21
+ - Image mode: Rounded rectangle pattern/texture swatches
22
+ - Features: availability states, disabled options, tooltips, price adjustments
23
+ - Dropdown fallback for accessibility
24
+ - Consolidates previous SizeSelector and ColorSelector into unified component
25
+
26
+ #### Bug Fixes
27
+
28
+ - **Article Component**: Fixed TypeScript type error in Article component
29
+
7
30
  ### December 6, 2025 - Repository URLs Update (v1.5.5)
8
31
 
9
32
  - Updated repository and homepage URLs to point to public GitHub org
@@ -0,0 +1,30 @@
1
+ import { SerializableComponent } from '../shared/createSerializableView';
2
+ import { ViewProps } from '../shared/viewProps';
3
+ export interface GalleryImage {
4
+ url: string;
5
+ alt: string;
6
+ thumbnail?: string;
7
+ }
8
+ export interface ImageGalleryProps extends ViewProps {
9
+ /** Array of product images */
10
+ images: GalleryImage[];
11
+ /** Product name for accessibility */
12
+ productName: string;
13
+ /** Gallery display variant */
14
+ variant?: 'thumbnails' | 'carousel' | 'grid';
15
+ /** Position of thumbnails (only for thumbnails variant) */
16
+ thumbnailPosition?: 'left' | 'bottom' | 'right';
17
+ /** Aspect ratio for main image */
18
+ aspectRatio?: string;
19
+ /** Enable zoom functionality */
20
+ showZoom?: boolean;
21
+ /** Maximum number of images to display */
22
+ maxImages?: number;
23
+ /** Data source for dynamic loading */
24
+ dataSource?: string;
25
+ /** Data binding configuration */
26
+ bindingOptions?: Record<string, unknown>;
27
+ }
28
+ export declare const ImageGallery: SerializableComponent<ImageGalleryProps>;
29
+ export default ImageGallery;
30
+ //# sourceMappingURL=ImageGallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageGallery.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/ImageGallery.tsx"],"names":[],"mappings":"AAoCA,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,8BAA8B;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAC;IAEvB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAE7C,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEhD,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AA+XD,eAAO,MAAM,YAAY,EAAE,qBAAqB,CAAC,iBAAiB,CAM9D,CAAC;AAEL,eAAe,YAAY,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { SerializableComponent } from '../shared/createSerializableView';
2
+ import { ViewProps } from '../shared/viewProps';
3
+ export interface SelectOption {
4
+ /** Unique identifier */
5
+ id: string;
6
+ /** Display label */
7
+ label: string;
8
+ /** Whether this option is available for selection */
9
+ available: boolean;
10
+ /** Optional price adjustment */
11
+ price?: number;
12
+ /** Hex color value (for color display mode) */
13
+ hexValue?: string;
14
+ /** Image URL (for image or color display mode) */
15
+ imageUrl?: string;
16
+ }
17
+ export interface OptionSelectorProps extends ViewProps {
18
+ /** Array of available options */
19
+ options: SelectOption[];
20
+ /** Currently selected option ID */
21
+ selectedOption?: string;
22
+ /** Callback when option is selected */
23
+ onOptionSelect?: (optionId: string) => void;
24
+ /** Display mode */
25
+ displayMode?: 'text' | 'color' | 'image';
26
+ /** Display variant */
27
+ variant?: 'buttons' | 'dropdown' | 'grid';
28
+ /** Layout direction (for buttons variant) */
29
+ layout?: 'horizontal' | 'vertical' | 'wrap';
30
+ /** Visual size (for color/image modes) */
31
+ visualSize?: 'small' | 'medium' | 'large';
32
+ /** Show label below visual (for color/image modes) */
33
+ showLabel?: boolean;
34
+ /** Disable all selections */
35
+ disabled?: boolean;
36
+ /** Label for the selector */
37
+ label?: string;
38
+ /** Data source for dynamic loading */
39
+ dataSource?: string;
40
+ /** Data binding configuration */
41
+ bindingOptions?: Record<string, unknown>;
42
+ }
43
+ export declare const OptionSelector: SerializableComponent<OptionSelectorProps>;
44
+ export default OptionSelector;
45
+ //# sourceMappingURL=OptionSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionSelector.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/OptionSelector.tsx"],"names":[],"mappings":"AAkDA,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IAEX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,SAAS,EAAE,OAAO,CAAC;IAEnB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,iCAAiC;IACjC,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,uCAAuC;IACvC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAE5C,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAEzC,sBAAsB;IACtB,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAE1C,6CAA6C;IAC7C,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAE5C,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAE1C,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAqVD,eAAO,MAAM,cAAc,EAAE,qBAAqB,CAAC,mBAAmB,CAMlE,CAAC;AAEL,eAAe,cAAc,CAAC"}
@@ -22,6 +22,8 @@ export { default as Section } from './Section';
22
22
  export { default as Image } from './Image';
23
23
  export { default as Text } from './Text';
24
24
  export { default as ProductCard } from './ProductCard';
25
+ export { default as ImageGallery } from './ImageGallery';
26
+ export { default as OptionSelector } from './OptionSelector';
25
27
  export { default as FeatureCard } from './FeatureCard';
26
28
  export { default as CardListGrid } from './CardListGrid';
27
29
  export type { HeroBlockProps } from './HeroBlock';
@@ -36,6 +38,8 @@ export type { SectionProps } from './Section';
36
38
  export type { ImageProps } from './Image';
37
39
  export type { TextProps } from './Text';
38
40
  export type { ProductCardProps, Product, ProductCardAction } from './ProductCard';
41
+ export type { ImageGalleryProps, GalleryImage } from './ImageGallery';
42
+ export type { OptionSelectorProps, SelectOption } from './OptionSelector';
39
43
  export type { FeatureCardProps, FeatureItem, FeatureCardAction } from './FeatureCard';
40
44
  export type { CardListGridProps } from './CardListGrid';
41
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEzD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEzD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -11,45 +11,50 @@
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
  *
18
18
  * Copyright (c) 2025 QwickApps.com. All rights reserved.
19
19
  */
20
- import React from 'react';
21
- import { WithBaseProps } from '../../hooks/useBaseProps';
22
- export type CaptchaProvider = 'recaptcha-v2' | 'recaptcha-v3' | 'hcaptcha' | 'turnstile';
23
- interface CaptchaBaseProps {
24
- /** CAPTCHA provider */
25
- provider: CaptchaProvider;
26
- /** Site key (public key) */
27
- siteKey: string;
20
+ import type { SchemaProps } from '@qwickapps/schema';
21
+ import CaptchaModel from '../../schemas/CaptchaSchema';
22
+ import { ViewProps } from '../shared/viewProps';
23
+ import { SerializableComponent } from '../shared/createSerializableView';
24
+ declare global {
25
+ interface Window {
26
+ grecaptcha?: {
27
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
28
+ execute?: (siteKey: string, options: {
29
+ action: string;
30
+ }) => Promise<string>;
31
+ reset?: (widgetId: string | number) => void;
32
+ };
33
+ hcaptcha?: {
34
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
35
+ remove?: (widgetId: string | number) => void;
36
+ };
37
+ turnstile?: {
38
+ render?: (container: HTMLElement | null, params: Record<string, unknown>) => string | number;
39
+ remove?: (widgetId: string | number) => void;
40
+ };
41
+ }
42
+ }
43
+ /**
44
+ * Props interface for Captcha component
45
+ * Combines schema props with callback handlers
46
+ */
47
+ export interface CaptchaProps extends ViewProps, SchemaProps<typeof CaptchaModel> {
28
48
  /** Callback when CAPTCHA is successfully completed */
29
49
  onVerify: (token: string) => void;
30
50
  /** Callback when CAPTCHA expires or fails */
31
51
  onExpire?: () => void;
32
52
  /** Callback when CAPTCHA encounters an error */
33
53
  onError?: (error: Error) => void;
34
- /** Theme for the widget (light or dark) */
35
- theme?: 'light' | 'dark';
36
- /** Size of the widget */
37
- size?: 'normal' | 'compact' | 'invisible';
38
- /** reCAPTCHA v3 action name */
39
- action?: string;
40
- }
41
- export interface CaptchaProps extends WithBaseProps<CaptchaBaseProps> {
42
54
  }
43
- declare global {
44
- interface Window {
45
- grecaptcha?: unknown;
46
- hcaptcha?: unknown;
47
- turnstile?: unknown;
48
- onRecaptchaLoad?: () => void;
49
- onHcaptchaLoad?: () => void;
50
- onTurnstileLoad?: () => void;
51
- }
52
- }
53
- export declare const Captcha: React.ForwardRefExoticComponent<CaptchaProps & React.RefAttributes<HTMLDivElement>>;
55
+ /**
56
+ * Create Captcha component using the factory pattern
57
+ */
58
+ export declare const Captcha: SerializableComponent<CaptchaProps>;
54
59
  export default Captcha;
55
60
  //# sourceMappingURL=Captcha.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Captcha.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAgB,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE3F,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzF,UAAU,gBAAgB;IACxB,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,yBAAyB;IACzB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1C,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa,CAAC,gBAAgB,CAAC;CAAG;AAGxE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;KAC9B;CACF;AAED,eAAO,MAAM,OAAO,qFAgOlB,CAAC;AAOH,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Captcha.d.ts","sourceRoot":"","sources":["../../../src/components/forms/Captcha.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGjG,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,CAAC,EAAE;YACX,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;YAC7F,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5E,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;SAC7C,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;YAC7F,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;SAC9C,CAAC;QACF,SAAS,CAAC,EAAE;YACV,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;YAC7F,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;SAC9C,CAAC;KACH;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS,EAAE,WAAW,CAAC,OAAO,YAAY,CAAC;IAC/E,sDAAsD;IACtD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAyND;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,qBAAqB,CAAC,YAAY,CAKtD,CAAC;AAEH,eAAe,OAAO,CAAC"}
@@ -6,22 +6,25 @@
6
6
  * - Supports FormControlLabel for proper label positioning
7
7
  * - Handles required and disabled states
8
8
  * - Helper text support
9
- * - Base props support for grid behavior and styling
9
+ * - Schema-driven architecture with serialization support
10
10
  *
11
11
  * Copyright (c) 2025 QwickApps.com. All rights reserved.
12
12
  */
13
- import React from 'react';
14
- import { WithBaseProps } from '../../hooks/useBaseProps';
15
- interface FormCheckboxBaseProps {
16
- label: string;
17
- checked: boolean;
13
+ import type { SchemaProps } from '@qwickapps/schema';
14
+ import FormCheckboxModel from '../../schemas/FormCheckboxSchema';
15
+ import { ViewProps } from '../shared/viewProps';
16
+ import { SerializableComponent } from '../shared/createSerializableView';
17
+ /**
18
+ * Props interface for FormCheckbox component
19
+ * Combines schema props with callback handler
20
+ */
21
+ export interface FormCheckboxProps extends ViewProps, SchemaProps<typeof FormCheckboxModel> {
22
+ /** Callback when checkbox state changes */
18
23
  onChange: (checked: boolean) => void;
19
- helperText?: string;
20
- required?: boolean;
21
- disabled?: boolean;
22
- }
23
- export interface FormCheckboxProps extends WithBaseProps<FormCheckboxBaseProps> {
24
24
  }
25
- export declare const FormCheckbox: React.ForwardRefExoticComponent<FormCheckboxProps & React.RefAttributes<HTMLDivElement>>;
25
+ /**
26
+ * Create FormCheckbox component using the factory pattern
27
+ */
28
+ export declare const FormCheckbox: SerializableComponent<FormCheckboxProps>;
26
29
  export default FormCheckbox;
27
30
  //# sourceMappingURL=FormCheckbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormCheckbox.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormCheckbox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAgB,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE3F,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa,CAAC,qBAAqB,CAAC;CAAG;AAElF,eAAO,MAAM,YAAY,0FA2EvB,CAAC;AAOH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FormCheckbox.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormCheckbox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,iBAAiB,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEjG;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS,EAAE,WAAW,CAAC,OAAO,iBAAiB,CAAC;IACzF,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAiED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,qBAAqB,CAAC,iBAAiB,CAKhE,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -4,40 +4,37 @@
4
4
  * Features:
5
5
  * - Uses QwickApps CSS theme variables for consistent styling
6
6
  * - Supports text, number, password, and email input types
7
- * - Integrated with MUI FormControl, Input, and Select
7
+ * - Integrated with MUI FormControl, Input
8
8
  * - Handles readonly, disabled, and required states
9
9
  * - Support for adornments and helper text
10
- * - Base props support for grid behavior and styling
10
+ * - Schema-driven architecture with serialization support
11
11
  *
12
12
  * Copyright (c) 2025 QwickApps.com. All rights reserved.
13
13
  */
14
14
  import React from 'react';
15
- import { WithBaseProps } from '../../hooks/useBaseProps';
16
- export interface FormFieldOption {
17
- value: string | number;
18
- label: string;
19
- }
20
- interface FormFieldBaseProps {
21
- label: string;
22
- value: string | number;
15
+ import type { SchemaProps } from '@qwickapps/schema';
16
+ import FormFieldModel from '../../schemas/FormFieldSchema';
17
+ import { ViewProps } from '../shared/viewProps';
18
+ import { SerializableComponent } from '../shared/createSerializableView';
19
+ /**
20
+ * Props interface for FormField component
21
+ * Combines schema props with callback handlers and adornments
22
+ */
23
+ export interface FormFieldProps extends ViewProps, SchemaProps<typeof FormFieldModel> {
24
+ /** Callback when value changes */
23
25
  onChange?: (value: string | number) => void;
26
+ /** Raw change handler with event */
24
27
  onChangeRaw?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
25
- type?: 'text' | 'number' | 'password' | 'email' | 'tel';
26
- helperText?: string;
27
- required?: boolean;
28
- readOnly?: boolean;
29
- disabled?: boolean;
30
- disabledColor?: string;
31
- fullWidth?: boolean;
32
- multiline?: boolean;
33
- rows?: number;
34
- placeholder?: string;
28
+ /** Start adornment (icon, text, etc.) */
35
29
  startAdornment?: React.ReactNode;
30
+ /** End adornment (icon, text, etc.) */
36
31
  endAdornment?: React.ReactNode;
32
+ /** Additional input props */
37
33
  inputProps?: unknown;
38
34
  }
39
- export interface FormFieldProps extends WithBaseProps<FormFieldBaseProps> {
40
- }
41
- export declare const FormField: React.ForwardRefExoticComponent<FormFieldProps & React.RefAttributes<HTMLDivElement>>;
35
+ /**
36
+ * Create FormField component using the factory pattern
37
+ */
38
+ export declare const FormField: SerializableComponent<FormFieldProps>;
42
39
  export default FormField;
43
40
  //# sourceMappingURL=FormField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAgB,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE3F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC5C,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACrF,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa,CAAC,kBAAkB,CAAC;CAAG;AAE5E,eAAO,MAAM,SAAS,uFAyHpB,CAAC;AAOH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEjG;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,SAAS,EAAE,WAAW,CAAC,OAAO,cAAc,CAAC;IACnF,kCAAkC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC5C,oCAAoC;IACpC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACrF,yCAAyC;IACzC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,uCAAuC;IACvC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA+GD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,cAAc,CAK1D,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -6,30 +6,31 @@
6
6
  * - Simplified select-only interface (use FormField for mixed inputs)
7
7
  * - Support for placeholder, size variants, and helper text
8
8
  * - Integrated with MUI FormControl and Select
9
- * - Base props support for grid behavior and styling
9
+ * - Schema-driven architecture with serialization support
10
10
  *
11
11
  * Copyright (c) 2025 QwickApps.com. All rights reserved.
12
12
  */
13
- import React from 'react';
14
- import { WithBaseProps } from '../../hooks/useBaseProps';
13
+ import type { SchemaProps } from '@qwickapps/schema';
14
+ import FormSelectModel from '../../schemas/FormSelectSchema';
15
+ import { ViewProps } from '../shared/viewProps';
16
+ import { SerializableComponent } from '../shared/createSerializableView';
15
17
  export interface FormSelectOption {
16
18
  value: string | number;
17
19
  label: string;
18
20
  }
19
- interface FormSelectBaseProps {
20
- label?: string;
21
- value: string | number;
21
+ /**
22
+ * Props interface for FormSelect component
23
+ * Combines schema props with callback handlers
24
+ */
25
+ export interface FormSelectProps extends ViewProps, SchemaProps<typeof FormSelectModel> {
26
+ /** Callback when value changes */
22
27
  onChange: (value: string | number) => void;
28
+ /** Options array (runtime prop, overrides schema) */
23
29
  options: FormSelectOption[];
24
- helperText?: string;
25
- required?: boolean;
26
- disabled?: boolean;
27
- fullWidth?: boolean;
28
- size?: 'small' | 'medium';
29
- placeholder?: string;
30
30
  }
31
- export interface FormSelectProps extends WithBaseProps<FormSelectBaseProps> {
32
- }
33
- export declare const FormSelect: React.ForwardRefExoticComponent<FormSelectProps & React.RefAttributes<HTMLDivElement>>;
31
+ /**
32
+ * Create FormSelect component using the factory pattern
33
+ */
34
+ export declare const FormSelect: SerializableComponent<FormSelectProps>;
34
35
  export default FormSelect;
35
36
  //# sourceMappingURL=FormSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormSelect.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormSelect.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAgB,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa,CAAC,mBAAmB,CAAC;CAAG;AAE9E,eAAO,MAAM,UAAU,wFAyFrB,CAAC;AAOH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"FormSelect.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormSelect.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,eAAe,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAA0B,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEjG,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,SAAS,EAAE,WAAW,CAAC,OAAO,eAAe,CAAC;IACrF,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC3C,qDAAqD;IACrD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAiFD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,qBAAqB,CAAC,eAAe,CAK5D,CAAC;AAEH,eAAe,UAAU,CAAC"}