@qwickapps/react-framework 1.5.13 → 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 (46) hide show
  1. package/dist/components/forms/Captcha.d.ts +33 -28
  2. package/dist/components/forms/Captcha.d.ts.map +1 -1
  3. package/dist/components/forms/FormCheckbox.d.ts +15 -12
  4. package/dist/components/forms/FormCheckbox.d.ts.map +1 -1
  5. package/dist/components/forms/FormField.d.ts +20 -23
  6. package/dist/components/forms/FormField.d.ts.map +1 -1
  7. package/dist/components/forms/FormSelect.d.ts +16 -15
  8. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  9. package/dist/hooks/useBaseProps.d.ts +27 -1172
  10. package/dist/hooks/useBaseProps.d.ts.map +1 -1
  11. package/dist/index.esm.js +349 -156
  12. package/dist/index.js +348 -155
  13. package/dist/palettes/manifest.json +19 -19
  14. package/dist/schemas/CaptchaSchema.d.ts +16 -0
  15. package/dist/schemas/CaptchaSchema.d.ts.map +1 -0
  16. package/dist/schemas/FormCheckboxSchema.d.ts +16 -0
  17. package/dist/schemas/FormCheckboxSchema.d.ts.map +1 -0
  18. package/dist/schemas/FormFieldSchema.d.ts +23 -0
  19. package/dist/schemas/FormFieldSchema.d.ts.map +1 -0
  20. package/dist/schemas/FormSelectSchema.d.ts +20 -0
  21. package/dist/schemas/FormSelectSchema.d.ts.map +1 -0
  22. package/dist/schemas/index.d.ts +4 -0
  23. package/dist/schemas/index.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/components/forms/Captcha.tsx +57 -63
  26. package/src/components/forms/FormCheckbox.tsx +35 -43
  27. package/src/components/forms/FormField.tsx +50 -66
  28. package/src/components/forms/FormSelect.tsx +41 -49
  29. package/src/hooks/useBaseProps.ts +34 -1
  30. package/src/schemas/CaptchaSchema.ts +65 -0
  31. package/src/schemas/FormCheckboxSchema.ts +65 -0
  32. package/src/schemas/FormFieldSchema.ts +140 -0
  33. package/src/schemas/FormSelectSchema.ts +108 -0
  34. package/src/schemas/index.ts +4 -0
  35. /package/dist/palettes/{palette-autumn.1.5.13.css → palette-autumn.1.6.0.css} +0 -0
  36. /package/dist/palettes/{palette-autumn.1.5.13.min.css → palette-autumn.1.6.0.min.css} +0 -0
  37. /package/dist/palettes/{palette-cosmic.1.5.13.css → palette-cosmic.1.6.0.css} +0 -0
  38. /package/dist/palettes/{palette-cosmic.1.5.13.min.css → palette-cosmic.1.6.0.min.css} +0 -0
  39. /package/dist/palettes/{palette-default.1.5.13.css → palette-default.1.6.0.css} +0 -0
  40. /package/dist/palettes/{palette-default.1.5.13.min.css → palette-default.1.6.0.min.css} +0 -0
  41. /package/dist/palettes/{palette-ocean.1.5.13.css → palette-ocean.1.6.0.css} +0 -0
  42. /package/dist/palettes/{palette-ocean.1.5.13.min.css → palette-ocean.1.6.0.min.css} +0 -0
  43. /package/dist/palettes/{palette-spring.1.5.13.css → palette-spring.1.6.0.css} +0 -0
  44. /package/dist/palettes/{palette-spring.1.5.13.min.css → palette-spring.1.6.0.min.css} +0 -0
  45. /package/dist/palettes/{palette-winter.1.5.13.css → palette-winter.1.6.0.css} +0 -0
  46. /package/dist/palettes/{palette-winter.1.5.13.min.css → palette-winter.1.6.0.min.css} +0 -0
package/dist/index.js CHANGED
@@ -22976,36 +22976,31 @@ function DialogContentText({
22976
22976
  });
22977
22977
  }
22978
22978
 
22979
- const FormField = /*#__PURE__*/React.forwardRef((props, ref) => {
22980
- const {
22981
- gridProps,
22982
- styleProps,
22983
- htmlProps,
22984
- restProps
22985
- } = useBaseProps(props);
22986
- const {
22987
- label,
22988
- value,
22989
- onChange,
22990
- onChangeRaw,
22991
- type = 'text',
22992
- helperText,
22993
- required = false,
22994
- readOnly = false,
22995
- disabled = false,
22996
- disabledColor,
22997
- fullWidth = true,
22998
- multiline = false,
22999
- rows,
23000
- placeholder,
23001
- startAdornment,
23002
- endAdornment,
23003
- inputProps
23004
- } = restProps;
23005
- // Generate a unique ID for the input field
22979
+ /**
22980
+ * FormFieldView - Pure view component that renders the input field
22981
+ */
22982
+ function FormFieldView({
22983
+ label,
22984
+ value,
22985
+ onChange,
22986
+ onChangeRaw,
22987
+ type = 'text',
22988
+ helperText,
22989
+ required = false,
22990
+ readOnly = false,
22991
+ disabled = false,
22992
+ disabledColor,
22993
+ fullWidth = true,
22994
+ multiline = false,
22995
+ rows,
22996
+ placeholder,
22997
+ startAdornment,
22998
+ endAdornment,
22999
+ inputProps,
23000
+ ...restProps
23001
+ }) {
23006
23002
  const fieldId = React.useId();
23007
23003
  const handleChange = e => {
23008
- // If onChangeRaw is provided, use it instead
23009
23004
  if (onChangeRaw) {
23010
23005
  onChangeRaw(e);
23011
23006
  return;
@@ -23029,8 +23024,7 @@ const FormField = /*#__PURE__*/React.forwardRef((props, ref) => {
23029
23024
  '& input.Mui-disabled': disabledColor ? {
23030
23025
  color: disabledColor,
23031
23026
  WebkitTextFillColor: disabledColor
23032
- } : undefined,
23033
- ...styleProps.sx
23027
+ } : undefined
23034
23028
  };
23035
23029
  const labelStyles = {
23036
23030
  left: -12,
@@ -23041,18 +23035,8 @@ const FormField = /*#__PURE__*/React.forwardRef((props, ref) => {
23041
23035
  color: 'var(--theme-secondary)'
23042
23036
  };
23043
23037
  return jsxRuntime.jsxs(material.FormControl, {
23044
- ref: ref,
23045
23038
  fullWidth: fullWidth,
23046
- ...htmlProps,
23047
- ...styleProps,
23048
- ...(gridProps && {
23049
- 'data-grid-span': gridProps.span,
23050
- 'data-grid-xs': gridProps.xs,
23051
- 'data-grid-sm': gridProps.sm,
23052
- 'data-grid-md': gridProps.md,
23053
- 'data-grid-lg': gridProps.lg,
23054
- 'data-grid-xl': gridProps.xl
23055
- }),
23039
+ ...restProps,
23056
23040
  children: [jsxRuntime.jsx(material.InputLabel, {
23057
23041
  htmlFor: fieldId,
23058
23042
  sx: labelStyles,
@@ -23084,32 +23068,33 @@ const FormField = /*#__PURE__*/React.forwardRef((props, ref) => {
23084
23068
  children: helperText
23085
23069
  })]
23086
23070
  });
23087
- });
23088
- FormField.displayName = 'FormField';
23089
- // Mark as QwickApp component
23090
- Object.assign(FormField, {
23091
- [QWICKAPP_COMPONENT]: true
23071
+ }
23072
+ /**
23073
+ * Create FormField component using the factory pattern
23074
+ */
23075
+ const FormField = createSerializableView({
23076
+ tagName: 'FormField',
23077
+ version: '1.0.0',
23078
+ role: 'input',
23079
+ View: FormFieldView
23092
23080
  });
23093
23081
 
23094
- const FormSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
23095
- const {
23096
- gridProps,
23097
- styleProps,
23098
- htmlProps,
23099
- restProps
23100
- } = useBaseProps(props);
23101
- const {
23102
- label,
23103
- value,
23104
- onChange,
23105
- options,
23106
- helperText,
23107
- required = false,
23108
- disabled = false,
23109
- fullWidth = true,
23110
- size = 'small',
23111
- placeholder
23112
- } = restProps;
23082
+ /**
23083
+ * FormSelectView - Pure view component that renders the select field
23084
+ */
23085
+ function FormSelectView({
23086
+ label,
23087
+ value,
23088
+ onChange,
23089
+ options,
23090
+ helperText,
23091
+ required = false,
23092
+ disabled = false,
23093
+ fullWidth = true,
23094
+ size = 'small',
23095
+ placeholder,
23096
+ ...restProps
23097
+ }) {
23113
23098
  const handleChange = e => {
23114
23099
  onChange(e.target.value);
23115
23100
  };
@@ -23123,8 +23108,7 @@ const FormSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
23123
23108
  backgroundColor: 'var(--theme-surface-variant)',
23124
23109
  borderColor: 'var(--theme-surface)',
23125
23110
  color: 'var(--theme-text-primary)',
23126
- borderRadius: 1,
23127
- ...styleProps.sx
23111
+ borderRadius: 1
23128
23112
  };
23129
23113
  const labelStyles = {
23130
23114
  left: -12,
@@ -23135,19 +23119,9 @@ const FormSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
23135
23119
  color: 'var(--theme-secondary)'
23136
23120
  };
23137
23121
  return jsxRuntime.jsxs(material.FormControl, {
23138
- ref: ref,
23139
23122
  fullWidth: fullWidth,
23140
23123
  size: size,
23141
- ...htmlProps,
23142
- ...styleProps,
23143
- ...(gridProps && {
23144
- 'data-grid-span': gridProps.span,
23145
- 'data-grid-xs': gridProps.xs,
23146
- 'data-grid-sm': gridProps.sm,
23147
- 'data-grid-md': gridProps.md,
23148
- 'data-grid-lg': gridProps.lg,
23149
- 'data-grid-xl': gridProps.xl
23150
- }),
23124
+ ...restProps,
23151
23125
  children: [label && jsxRuntime.jsx(material.InputLabel, {
23152
23126
  sx: labelStyles,
23153
23127
  shrink: true,
@@ -23172,28 +23146,29 @@ const FormSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
23172
23146
  children: helperText
23173
23147
  })]
23174
23148
  });
23175
- });
23176
- FormSelect.displayName = 'FormSelect';
23177
- // Mark as QwickApp component
23178
- Object.assign(FormSelect, {
23179
- [QWICKAPP_COMPONENT]: true
23149
+ }
23150
+ /**
23151
+ * Create FormSelect component using the factory pattern
23152
+ */
23153
+ const FormSelect = createSerializableView({
23154
+ tagName: 'FormSelect',
23155
+ version: '1.0.0',
23156
+ role: 'input',
23157
+ View: FormSelectView
23180
23158
  });
23181
23159
 
23182
- const FormCheckbox = /*#__PURE__*/React.forwardRef((props, ref) => {
23183
- const {
23184
- gridProps,
23185
- styleProps,
23186
- htmlProps,
23187
- restProps
23188
- } = useBaseProps(props);
23189
- const {
23190
- label,
23191
- checked,
23192
- onChange,
23193
- helperText,
23194
- required = false,
23195
- disabled = false
23196
- } = restProps;
23160
+ /**
23161
+ * FormCheckboxView - Pure view component that renders the checkbox
23162
+ */
23163
+ function FormCheckboxView({
23164
+ label,
23165
+ checked,
23166
+ onChange,
23167
+ helperText,
23168
+ required = false,
23169
+ disabled = false,
23170
+ ...restProps
23171
+ }) {
23197
23172
  const handleChange = e => {
23198
23173
  onChange(e.target.checked);
23199
23174
  };
@@ -23213,25 +23188,14 @@ const FormCheckbox = /*#__PURE__*/React.forwardRef((props, ref) => {
23213
23188
  },
23214
23189
  '& .MuiFormControlLabel-label.Mui-disabled': {
23215
23190
  color: 'var(--theme-text-disabled)'
23216
- },
23217
- ...styleProps.sx
23191
+ }
23218
23192
  };
23219
23193
  const helperTextStyles = {
23220
23194
  color: 'var(--theme-secondary)',
23221
- marginLeft: '32px' // Align with checkbox + label
23195
+ marginLeft: '32px'
23222
23196
  };
23223
23197
  return jsxRuntime.jsxs(material.FormControl, {
23224
- ref: ref,
23225
- ...htmlProps,
23226
- ...styleProps,
23227
- ...(gridProps && {
23228
- 'data-grid-span': gridProps.span,
23229
- 'data-grid-xs': gridProps.xs,
23230
- 'data-grid-sm': gridProps.sm,
23231
- 'data-grid-md': gridProps.md,
23232
- 'data-grid-lg': gridProps.lg,
23233
- 'data-grid-xl': gridProps.xl
23234
- }),
23198
+ ...restProps,
23235
23199
  children: [jsxRuntime.jsx(material.FormControlLabel, {
23236
23200
  control: jsxRuntime.jsx(material.Checkbox, {
23237
23201
  checked: checked,
@@ -23247,30 +23211,31 @@ const FormCheckbox = /*#__PURE__*/React.forwardRef((props, ref) => {
23247
23211
  children: helperText
23248
23212
  })]
23249
23213
  });
23250
- });
23251
- FormCheckbox.displayName = 'FormCheckbox';
23252
- // Mark as QwickApp component
23253
- Object.assign(FormCheckbox, {
23254
- [QWICKAPP_COMPONENT]: true
23214
+ }
23215
+ /**
23216
+ * Create FormCheckbox component using the factory pattern
23217
+ */
23218
+ const FormCheckbox = createSerializableView({
23219
+ tagName: 'FormCheckbox',
23220
+ version: '1.0.0',
23221
+ role: 'input',
23222
+ View: FormCheckboxView
23255
23223
  });
23256
23224
 
23257
- const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23258
- const {
23259
- gridProps,
23260
- styleProps,
23261
- htmlProps,
23262
- restProps
23263
- } = useBaseProps(props);
23264
- const {
23265
- provider,
23266
- siteKey,
23267
- onVerify,
23268
- onExpire,
23269
- onError,
23270
- theme = 'light',
23271
- size = 'normal',
23272
- action = 'submit'
23273
- } = restProps;
23225
+ /**
23226
+ * CaptchaView - Pure view component that renders the CAPTCHA widget
23227
+ */
23228
+ function CaptchaView({
23229
+ provider,
23230
+ siteKey,
23231
+ onVerify,
23232
+ onExpire,
23233
+ onError,
23234
+ theme = 'light',
23235
+ size = 'normal',
23236
+ action = 'submit',
23237
+ ...restProps
23238
+ }) {
23274
23239
  const containerRef = React.useRef(null);
23275
23240
  const widgetIdRef = React.useRef(null);
23276
23241
  const [isLoaded, setIsLoaded] = React.useState(false);
@@ -23343,7 +23308,7 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23343
23308
  try {
23344
23309
  switch (provider) {
23345
23310
  case 'recaptcha-v2':
23346
- if (window.grecaptcha && window.grecaptcha.render) {
23311
+ if (window.grecaptcha?.render) {
23347
23312
  widgetIdRef.current = window.grecaptcha.render(containerRef.current, {
23348
23313
  sitekey: siteKey,
23349
23314
  callback: onVerify,
@@ -23360,7 +23325,7 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23360
23325
  break;
23361
23326
  case 'recaptcha-v3':
23362
23327
  // reCAPTCHA v3 is invisible and executes programmatically
23363
- if (window.grecaptcha && window.grecaptcha.execute) {
23328
+ if (window.grecaptcha?.execute) {
23364
23329
  window.grecaptcha.execute(siteKey, {
23365
23330
  action
23366
23331
  }).then(token => {
@@ -23372,7 +23337,7 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23372
23337
  }
23373
23338
  break;
23374
23339
  case 'hcaptcha':
23375
- if (window.hcaptcha && window.hcaptcha.render) {
23340
+ if (window.hcaptcha?.render) {
23376
23341
  widgetIdRef.current = window.hcaptcha.render(containerRef.current, {
23377
23342
  sitekey: siteKey,
23378
23343
  callback: onVerify,
@@ -23388,7 +23353,7 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23388
23353
  }
23389
23354
  break;
23390
23355
  case 'turnstile':
23391
- if (window.turnstile && window.turnstile.render) {
23356
+ if (window.turnstile?.render) {
23392
23357
  widgetIdRef.current = window.turnstile.render(containerRef.current, {
23393
23358
  sitekey: siteKey,
23394
23359
  callback: onVerify,
@@ -23439,20 +23404,10 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23439
23404
  return null;
23440
23405
  }
23441
23406
  return jsxRuntime.jsxs(material.Box, {
23442
- ref: ref,
23443
- ...htmlProps,
23407
+ ...restProps,
23444
23408
  sx: {
23445
- my: 2,
23446
- ...styleProps.sx
23409
+ my: 2
23447
23410
  },
23448
- ...(gridProps && {
23449
- 'data-grid-span': gridProps.span,
23450
- 'data-grid-xs': gridProps.xs,
23451
- 'data-grid-sm': gridProps.sm,
23452
- 'data-grid-md': gridProps.md,
23453
- 'data-grid-lg': gridProps.lg,
23454
- 'data-grid-xl': gridProps.xl
23455
- }),
23456
23411
  children: [error && jsxRuntime.jsx(material.Alert, {
23457
23412
  severity: "error",
23458
23413
  sx: {
@@ -23463,11 +23418,15 @@ const Captcha = /*#__PURE__*/React.forwardRef((props, ref) => {
23463
23418
  ref: containerRef
23464
23419
  })]
23465
23420
  });
23466
- });
23467
- Captcha.displayName = 'Captcha';
23468
- // Mark as QwickApp component
23469
- Object.assign(Captcha, {
23470
- [QWICKAPP_COMPONENT]: true
23421
+ }
23422
+ /**
23423
+ * Create Captcha component using the factory pattern
23424
+ */
23425
+ const Captcha = createSerializableView({
23426
+ tagName: 'Captcha',
23427
+ version: '1.0.0',
23428
+ role: 'input',
23429
+ View: CaptchaView
23471
23430
  });
23472
23431
 
23473
23432
  /**
@@ -31066,6 +31025,240 @@ __decorate([schema.Field(), schema.Editor({
31066
31025
  }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormBlockModel.prototype, "backgroundImage", void 0);
31067
31026
  exports.FormBlockModel = __decorate([schema.Schema('FormBlock', '1.0.0')], exports.FormBlockModel);
31068
31027
 
31028
+ /**
31029
+ * Schema for FormSelect component - Themed dropdown select input
31030
+ *
31031
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
31032
+ */
31033
+ exports.FormSelectModel = class FormSelectModel extends ViewSchema {};
31034
+ __decorate([schema.Field(), schema.Editor({
31035
+ field_type: schema.FieldType.TEXT,
31036
+ label: 'Label',
31037
+ description: 'Label text for the select field',
31038
+ placeholder: 'Enter label...'
31039
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "label", void 0);
31040
+ __decorate([schema.Field(), schema.Editor({
31041
+ field_type: schema.FieldType.TEXT,
31042
+ label: 'Value',
31043
+ description: 'Current selected value',
31044
+ placeholder: ''
31045
+ }), classValidator.IsString(), __metadata("design:type", Object)], exports.FormSelectModel.prototype, "value", void 0);
31046
+ __decorate([schema.Field(), schema.Editor({
31047
+ field_type: schema.FieldType.TEXTAREA,
31048
+ label: 'Options',
31049
+ description: 'Select options as JSON array: [{"value": "1", "label": "Option 1"}]',
31050
+ placeholder: '[{"value": "1", "label": "Option 1"}]'
31051
+ }), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "options", void 0);
31052
+ __decorate([schema.Field(), schema.Editor({
31053
+ field_type: schema.FieldType.TEXT,
31054
+ label: 'Helper Text',
31055
+ description: 'Helper text displayed below the select',
31056
+ placeholder: 'Enter helper text...'
31057
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "helperText", void 0);
31058
+ __decorate([schema.Field({
31059
+ defaultValue: false
31060
+ }), schema.Editor({
31061
+ field_type: schema.FieldType.BOOLEAN,
31062
+ label: 'Required',
31063
+ description: 'Mark field as required'
31064
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormSelectModel.prototype, "required", void 0);
31065
+ __decorate([schema.Field({
31066
+ defaultValue: false
31067
+ }), schema.Editor({
31068
+ field_type: schema.FieldType.BOOLEAN,
31069
+ label: 'Disabled',
31070
+ description: 'Disable the select field'
31071
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormSelectModel.prototype, "disabled", void 0);
31072
+ __decorate([schema.Field({
31073
+ defaultValue: true
31074
+ }), schema.Editor({
31075
+ field_type: schema.FieldType.BOOLEAN,
31076
+ label: 'Full Width',
31077
+ description: 'Make select take full width of container'
31078
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormSelectModel.prototype, "fullWidth", void 0);
31079
+ __decorate([schema.Field({
31080
+ defaultValue: 'small'
31081
+ }), schema.Editor({
31082
+ field_type: schema.FieldType.SELECT,
31083
+ label: 'Size',
31084
+ description: 'Size variant of the select field'
31085
+ }), classValidator.IsOptional(), classValidator.IsIn(['small', 'medium']), __metadata("design:type", String)], exports.FormSelectModel.prototype, "size", void 0);
31086
+ __decorate([schema.Field(), schema.Editor({
31087
+ field_type: schema.FieldType.TEXT,
31088
+ label: 'Placeholder',
31089
+ description: 'Placeholder text when no value is selected',
31090
+ placeholder: 'Select an option...'
31091
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormSelectModel.prototype, "placeholder", void 0);
31092
+ exports.FormSelectModel = __decorate([schema.Schema('FormSelect', '1.0.0')], exports.FormSelectModel);
31093
+
31094
+ /**
31095
+ * Schema for FormField component - Themed text/number input field
31096
+ *
31097
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
31098
+ */
31099
+ exports.FormFieldModel = class FormFieldModel extends ViewSchema {};
31100
+ __decorate([schema.Field(), schema.Editor({
31101
+ field_type: schema.FieldType.TEXT,
31102
+ label: 'Label',
31103
+ description: 'Label text for the input field',
31104
+ placeholder: 'Enter label...'
31105
+ }), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "label", void 0);
31106
+ __decorate([schema.Field(), schema.Editor({
31107
+ field_type: schema.FieldType.TEXT,
31108
+ label: 'Value',
31109
+ description: 'Current input value',
31110
+ placeholder: ''
31111
+ }), classValidator.IsString(), __metadata("design:type", Object)], exports.FormFieldModel.prototype, "value", void 0);
31112
+ __decorate([schema.Field({
31113
+ defaultValue: 'text'
31114
+ }), schema.Editor({
31115
+ field_type: schema.FieldType.SELECT,
31116
+ label: 'Input Type',
31117
+ description: 'Type of input field'
31118
+ }), classValidator.IsOptional(), classValidator.IsIn(['text', 'number', 'password', 'email', 'tel']), __metadata("design:type", String)], exports.FormFieldModel.prototype, "type", void 0);
31119
+ __decorate([schema.Field(), schema.Editor({
31120
+ field_type: schema.FieldType.TEXT,
31121
+ label: 'Helper Text',
31122
+ description: 'Helper text displayed below the input',
31123
+ placeholder: 'Enter helper text...'
31124
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "helperText", void 0);
31125
+ __decorate([schema.Field({
31126
+ defaultValue: false
31127
+ }), schema.Editor({
31128
+ field_type: schema.FieldType.BOOLEAN,
31129
+ label: 'Required',
31130
+ description: 'Mark field as required'
31131
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormFieldModel.prototype, "required", void 0);
31132
+ __decorate([schema.Field({
31133
+ defaultValue: false
31134
+ }), schema.Editor({
31135
+ field_type: schema.FieldType.BOOLEAN,
31136
+ label: 'Read Only',
31137
+ description: 'Make field read-only'
31138
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormFieldModel.prototype, "readOnly", void 0);
31139
+ __decorate([schema.Field({
31140
+ defaultValue: false
31141
+ }), schema.Editor({
31142
+ field_type: schema.FieldType.BOOLEAN,
31143
+ label: 'Disabled',
31144
+ description: 'Disable the input field'
31145
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormFieldModel.prototype, "disabled", void 0);
31146
+ __decorate([schema.Field(), schema.Editor({
31147
+ field_type: schema.FieldType.TEXT,
31148
+ label: 'Disabled Color',
31149
+ description: 'Custom color for disabled state (CSS color value)',
31150
+ placeholder: 'var(--theme-text-disabled)'
31151
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "disabledColor", void 0);
31152
+ __decorate([schema.Field({
31153
+ defaultValue: true
31154
+ }), schema.Editor({
31155
+ field_type: schema.FieldType.BOOLEAN,
31156
+ label: 'Full Width',
31157
+ description: 'Make input take full width of container'
31158
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormFieldModel.prototype, "fullWidth", void 0);
31159
+ __decorate([schema.Field({
31160
+ defaultValue: false
31161
+ }), schema.Editor({
31162
+ field_type: schema.FieldType.BOOLEAN,
31163
+ label: 'Multiline',
31164
+ description: 'Enable multiline textarea mode'
31165
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormFieldModel.prototype, "multiline", void 0);
31166
+ __decorate([schema.Field(), schema.Editor({
31167
+ field_type: schema.FieldType.TEXT,
31168
+ label: 'Rows',
31169
+ description: 'Number of rows for multiline textarea',
31170
+ placeholder: '4'
31171
+ }), classValidator.IsOptional(), classValidator.IsInt(), classValidator.Min(1), __metadata("design:type", Number)], exports.FormFieldModel.prototype, "rows", void 0);
31172
+ __decorate([schema.Field(), schema.Editor({
31173
+ field_type: schema.FieldType.TEXT,
31174
+ label: 'Placeholder',
31175
+ description: 'Placeholder text',
31176
+ placeholder: 'Enter text...'
31177
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormFieldModel.prototype, "placeholder", void 0);
31178
+ exports.FormFieldModel = __decorate([schema.Schema('FormField', '1.0.0')], exports.FormFieldModel);
31179
+
31180
+ /**
31181
+ * Schema for FormCheckbox component - Themed checkbox input
31182
+ *
31183
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
31184
+ */
31185
+ exports.FormCheckboxModel = class FormCheckboxModel extends ViewSchema {};
31186
+ __decorate([schema.Field(), schema.Editor({
31187
+ field_type: schema.FieldType.TEXT,
31188
+ label: 'Label',
31189
+ description: 'Label text for the checkbox',
31190
+ placeholder: 'Enter label...'
31191
+ }), classValidator.IsString(), __metadata("design:type", String)], exports.FormCheckboxModel.prototype, "label", void 0);
31192
+ __decorate([schema.Field({
31193
+ defaultValue: false
31194
+ }), schema.Editor({
31195
+ field_type: schema.FieldType.BOOLEAN,
31196
+ label: 'Checked',
31197
+ description: 'Checkbox checked state'
31198
+ }), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormCheckboxModel.prototype, "checked", void 0);
31199
+ __decorate([schema.Field(), schema.Editor({
31200
+ field_type: schema.FieldType.TEXT,
31201
+ label: 'Helper Text',
31202
+ description: 'Helper text displayed below the checkbox',
31203
+ placeholder: 'Enter helper text...'
31204
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.FormCheckboxModel.prototype, "helperText", void 0);
31205
+ __decorate([schema.Field({
31206
+ defaultValue: false
31207
+ }), schema.Editor({
31208
+ field_type: schema.FieldType.BOOLEAN,
31209
+ label: 'Required',
31210
+ description: 'Mark checkbox as required'
31211
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormCheckboxModel.prototype, "required", void 0);
31212
+ __decorate([schema.Field({
31213
+ defaultValue: false
31214
+ }), schema.Editor({
31215
+ field_type: schema.FieldType.BOOLEAN,
31216
+ label: 'Disabled',
31217
+ description: 'Disable the checkbox'
31218
+ }), classValidator.IsOptional(), classValidator.IsBoolean(), __metadata("design:type", Boolean)], exports.FormCheckboxModel.prototype, "disabled", void 0);
31219
+ exports.FormCheckboxModel = __decorate([schema.Schema('FormCheckbox', '1.0.0')], exports.FormCheckboxModel);
31220
+
31221
+ /**
31222
+ * Schema for Captcha component - Universal CAPTCHA widget
31223
+ *
31224
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
31225
+ */
31226
+ exports.CaptchaModel = class CaptchaModel extends ViewSchema {};
31227
+ __decorate([schema.Field(), schema.Editor({
31228
+ field_type: schema.FieldType.SELECT,
31229
+ label: 'CAPTCHA Provider',
31230
+ description: 'Which CAPTCHA service to use'
31231
+ }), classValidator.IsIn(['recaptcha-v2', 'recaptcha-v3', 'hcaptcha', 'turnstile']), __metadata("design:type", String)], exports.CaptchaModel.prototype, "provider", void 0);
31232
+ __decorate([schema.Field(), schema.Editor({
31233
+ field_type: schema.FieldType.TEXT,
31234
+ label: 'Site Key',
31235
+ description: 'Public site key from CAPTCHA provider',
31236
+ placeholder: 'Enter site key...'
31237
+ }), classValidator.IsString(), __metadata("design:type", String)], exports.CaptchaModel.prototype, "siteKey", void 0);
31238
+ __decorate([schema.Field({
31239
+ defaultValue: 'light'
31240
+ }), schema.Editor({
31241
+ field_type: schema.FieldType.SELECT,
31242
+ label: 'Theme',
31243
+ description: 'CAPTCHA widget theme'
31244
+ }), classValidator.IsOptional(), classValidator.IsIn(['light', 'dark']), __metadata("design:type", String)], exports.CaptchaModel.prototype, "theme", void 0);
31245
+ __decorate([schema.Field({
31246
+ defaultValue: 'normal'
31247
+ }), schema.Editor({
31248
+ field_type: schema.FieldType.SELECT,
31249
+ label: 'Size',
31250
+ description: 'CAPTCHA widget size'
31251
+ }), classValidator.IsOptional(), classValidator.IsIn(['normal', 'compact', 'invisible']), __metadata("design:type", String)], exports.CaptchaModel.prototype, "size", void 0);
31252
+ __decorate([schema.Field({
31253
+ defaultValue: 'submit'
31254
+ }), schema.Editor({
31255
+ field_type: schema.FieldType.TEXT,
31256
+ label: 'Action',
31257
+ description: 'reCAPTCHA v3 action name',
31258
+ placeholder: 'submit'
31259
+ }), classValidator.IsOptional(), classValidator.IsString(), __metadata("design:type", String)], exports.CaptchaModel.prototype, "action", void 0);
31260
+ exports.CaptchaModel = __decorate([schema.Schema('Captcha', '1.0.0')], exports.CaptchaModel);
31261
+
31069
31262
  /**
31070
31263
  * FooterSection Schema - Defines data structure for footer sections
31071
31264
  *