@qwickapps/react-framework 1.8.1 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +4 -7
  2. package/dist/components/Html.d.ts.map +1 -1
  3. package/dist/components/forms/FormField.d.ts +2 -0
  4. package/dist/components/forms/FormField.d.ts.map +1 -1
  5. package/dist/components/forms/FormSelect.d.ts +2 -0
  6. package/dist/components/forms/FormSelect.d.ts.map +1 -1
  7. package/dist/index.css +1 -1
  8. package/dist/index.esm.css +1 -1
  9. package/dist/index.esm.js +107 -41
  10. package/dist/index.js +107 -41
  11. package/dist/palettes/manifest.json +22 -22
  12. package/dist/schemas/FormFieldSchema.d.ts +1 -0
  13. package/dist/schemas/FormFieldSchema.d.ts.map +1 -1
  14. package/dist/schemas/FormSelectSchema.d.ts +1 -0
  15. package/dist/schemas/FormSelectSchema.d.ts.map +1 -1
  16. package/package.json +23 -21
  17. package/scripts/build-palettes.cjs +0 -0
  18. package/scripts/create-project.sh +0 -0
  19. package/src/components/Html.tsx +7 -1
  20. package/src/components/Logo.tsx +1 -1
  21. package/src/components/Scaffold.css +3 -0
  22. package/src/components/forms/FormField.tsx +6 -0
  23. package/src/components/forms/FormSelect.tsx +6 -0
  24. package/src/schemas/FormFieldSchema.ts +11 -0
  25. package/src/schemas/FormSelectSchema.ts +11 -0
  26. /package/dist/palettes/{palette-autumn.1.8.1.css → palette-autumn.1.9.1.css} +0 -0
  27. /package/dist/palettes/{palette-autumn.1.8.1.min.css → palette-autumn.1.9.1.min.css} +0 -0
  28. /package/dist/palettes/{palette-boutique.1.8.1.css → palette-boutique.1.9.1.css} +0 -0
  29. /package/dist/palettes/{palette-boutique.1.8.1.min.css → palette-boutique.1.9.1.min.css} +0 -0
  30. /package/dist/palettes/{palette-cosmic.1.8.1.css → palette-cosmic.1.9.1.css} +0 -0
  31. /package/dist/palettes/{palette-cosmic.1.8.1.min.css → palette-cosmic.1.9.1.min.css} +0 -0
  32. /package/dist/palettes/{palette-default.1.8.1.css → palette-default.1.9.1.css} +0 -0
  33. /package/dist/palettes/{palette-default.1.8.1.min.css → palette-default.1.9.1.min.css} +0 -0
  34. /package/dist/palettes/{palette-ocean.1.8.1.css → palette-ocean.1.9.1.css} +0 -0
  35. /package/dist/palettes/{palette-ocean.1.8.1.min.css → palette-ocean.1.9.1.min.css} +0 -0
  36. /package/dist/palettes/{palette-spring.1.8.1.css → palette-spring.1.9.1.css} +0 -0
  37. /package/dist/palettes/{palette-spring.1.8.1.min.css → palette-spring.1.9.1.min.css} +0 -0
  38. /package/dist/palettes/{palette-winter.1.8.1.css → palette-winter.1.9.1.css} +0 -0
  39. /package/dist/palettes/{palette-winter.1.8.1.min.css → palette-winter.1.9.1.min.css} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./manifest.schema.json",
3
- "version": "1.8.1",
3
+ "version": "1.9.1",
4
4
  "palettes": [
5
5
  {
6
6
  "id": "default",
@@ -8,11 +8,11 @@
8
8
  "description": "Classic blue and neutral color scheme - the original QwickApps palette",
9
9
  "author": "QwickApps",
10
10
  "license": "PolyForm-Shield-1.0.0",
11
- "version": "1.8.1",
12
- "file": "palette-default.1.8.1.css",
11
+ "version": "1.9.1",
12
+ "file": "palette-default.1.9.1.css",
13
13
  "primaryColor": "#007bff",
14
14
  "inlined": true,
15
- "fileMinified": "palette-default.1.8.1.min.css",
15
+ "fileMinified": "palette-default.1.9.1.min.css",
16
16
  "fileLatest": "palette-default.latest.css",
17
17
  "fileLatestMinified": "palette-default.latest.min.css"
18
18
  },
@@ -22,11 +22,11 @@
22
22
  "description": "Warm oranges, golden yellows, and earthy browns - inspired by fall foliage",
23
23
  "author": "QwickApps",
24
24
  "license": "PolyForm-Shield-1.0.0",
25
- "version": "1.8.1",
26
- "file": "palette-autumn.1.8.1.css",
25
+ "version": "1.9.1",
26
+ "file": "palette-autumn.1.9.1.css",
27
27
  "primaryColor": "#ea580c",
28
28
  "inlined": false,
29
- "fileMinified": "palette-autumn.1.8.1.min.css",
29
+ "fileMinified": "palette-autumn.1.9.1.min.css",
30
30
  "fileLatest": "palette-autumn.latest.css",
31
31
  "fileLatestMinified": "palette-autumn.latest.min.css"
32
32
  },
@@ -36,11 +36,11 @@
36
36
  "description": "Sophisticated teal, bronze, and navy - perfect for premium retail and fashion brands",
37
37
  "author": "QwickApps",
38
38
  "license": "PolyForm-Shield-1.0.0",
39
- "version": "1.8.1",
40
- "file": "palette-boutique.1.8.1.css",
39
+ "version": "1.9.1",
40
+ "file": "palette-boutique.1.9.1.css",
41
41
  "primaryColor": "#3ca6b6",
42
42
  "inlined": false,
43
- "fileMinified": "palette-boutique.1.8.1.min.css",
43
+ "fileMinified": "palette-boutique.1.9.1.min.css",
44
44
  "fileLatest": "palette-boutique.latest.css",
45
45
  "fileLatestMinified": "palette-boutique.latest.min.css"
46
46
  },
@@ -50,11 +50,11 @@
50
50
  "description": "Modern purple gradient for creative and tech brands - inspired by cosmic nebulae",
51
51
  "author": "QwickApps",
52
52
  "license": "PolyForm-Shield-1.0.0",
53
- "version": "1.8.1",
54
- "file": "palette-cosmic.1.8.1.css",
53
+ "version": "1.9.1",
54
+ "file": "palette-cosmic.1.9.1.css",
55
55
  "primaryColor": "#8b5cf6",
56
56
  "inlined": false,
57
- "fileMinified": "palette-cosmic.1.8.1.min.css",
57
+ "fileMinified": "palette-cosmic.1.9.1.min.css",
58
58
  "fileLatest": "palette-cosmic.latest.css",
59
59
  "fileLatestMinified": "palette-cosmic.latest.min.css"
60
60
  },
@@ -64,11 +64,11 @@
64
64
  "description": "Deep blues, aqua teals, and seafoam greens - inspired by ocean depths",
65
65
  "author": "QwickApps",
66
66
  "license": "PolyForm-Shield-1.0.0",
67
- "version": "1.8.1",
68
- "file": "palette-ocean.1.8.1.css",
67
+ "version": "1.9.1",
68
+ "file": "palette-ocean.1.9.1.css",
69
69
  "primaryColor": "#0891b2",
70
70
  "inlined": false,
71
- "fileMinified": "palette-ocean.1.8.1.min.css",
71
+ "fileMinified": "palette-ocean.1.9.1.min.css",
72
72
  "fileLatest": "palette-ocean.latest.css",
73
73
  "fileLatestMinified": "palette-ocean.latest.min.css"
74
74
  },
@@ -78,11 +78,11 @@
78
78
  "description": "Fresh greens, soft pinks, and bright yellows - inspired by spring blooms",
79
79
  "author": "QwickApps",
80
80
  "license": "PolyForm-Shield-1.0.0",
81
- "version": "1.8.1",
82
- "file": "palette-spring.1.8.1.css",
81
+ "version": "1.9.1",
82
+ "file": "palette-spring.1.9.1.css",
83
83
  "primaryColor": "#16a34a",
84
84
  "inlined": false,
85
- "fileMinified": "palette-spring.1.8.1.min.css",
85
+ "fileMinified": "palette-spring.1.9.1.min.css",
86
86
  "fileLatest": "palette-spring.latest.css",
87
87
  "fileLatestMinified": "palette-spring.latest.min.css"
88
88
  },
@@ -92,11 +92,11 @@
92
92
  "description": "Cool blues, icy whites, and frosty grays - inspired by winter landscapes",
93
93
  "author": "QwickApps",
94
94
  "license": "PolyForm-Shield-1.0.0",
95
- "version": "1.8.1",
96
- "file": "palette-winter.1.8.1.css",
95
+ "version": "1.9.1",
96
+ "file": "palette-winter.1.9.1.css",
97
97
  "primaryColor": "#0077be",
98
98
  "inlined": false,
99
- "fileMinified": "palette-winter.1.8.1.min.css",
99
+ "fileMinified": "palette-winter.1.9.1.min.css",
100
100
  "fileLatest": "palette-winter.latest.css",
101
101
  "fileLatestMinified": "palette-winter.latest.min.css"
102
102
  }
@@ -18,6 +18,7 @@ export declare class FormFieldModel extends ViewSchema {
18
18
  multiline?: boolean;
19
19
  rows?: number;
20
20
  placeholder?: string;
21
+ name?: string;
21
22
  }
22
23
  export default FormFieldModel;
23
24
  //# sourceMappingURL=FormFieldSchema.d.ts.map
@@ -1 +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"}
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;IAWrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAe,cAAc,CAAC"}
@@ -15,6 +15,7 @@ export declare class FormSelectModel extends ViewSchema {
15
15
  fullWidth?: boolean;
16
16
  size?: 'small' | 'medium';
17
17
  placeholder?: string;
18
+ name?: string;
18
19
  }
19
20
  export default FormSelectModel;
20
21
  //# sourceMappingURL=FormSelectSchema.d.ts.map
@@ -1 +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"}
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;IAWrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAe,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@qwickapps/react-framework",
3
- "version": "1.8.1",
3
+ "version": "1.9.1",
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",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "create": "./scripts/create-qwickapps-project.js"
9
+ "create": "scripts/create-qwickapps-project.js"
10
10
  },
11
11
  "exports": {
12
12
  ".": {
@@ -37,6 +37,24 @@
37
37
  "scripts",
38
38
  "QUICK_START_GUIDE.md"
39
39
  ],
40
+ "scripts": {
41
+ "build": "rollup -c && npm run build-palettes",
42
+ "build-palettes": "node scripts/build-palettes.cjs",
43
+ "build:dev": "NODE_ENV=development rollup -c && npm run build-palettes",
44
+ "build:prod": "NODE_ENV=production STRIP_LOGS=true rollup -c && npm run build-palettes",
45
+ "dev": "rollup -c -w",
46
+ "test": "jest",
47
+ "test:watch": "jest --watch",
48
+ "test:coverage": "jest --coverage",
49
+ "clean": "rm -rf dist node_modules .rollup.cache storybook-static",
50
+ "create-project": "node scripts/create-qwickapps-project.js",
51
+ "validate:clean-install": "./qa/clean-install/validate.sh",
52
+ "prepublishOnly": "npm run build && npm run validate:clean-install",
53
+ "publish": "npm publish",
54
+ "publish:palettes": "../../products/qwickapps/anvil/publish-palettes.sh",
55
+ "storybook": "storybook dev -p 6006",
56
+ "build-storybook": "storybook build"
57
+ },
40
58
  "keywords": [
41
59
  "react",
42
60
  "framework",
@@ -162,23 +180,7 @@
162
180
  },
163
181
  "repository": {
164
182
  "type": "git",
165
- "url": "https://github.com/qwickapps/react-framework.git"
183
+ "url": "git+https://github.com/qwickapps/react-framework.git"
166
184
  },
167
- "homepage": "https://github.com/qwickapps/react-framework#readme",
168
- "scripts": {
169
- "build": "rollup -c && npm run build-palettes",
170
- "build-palettes": "node scripts/build-palettes.cjs",
171
- "build:dev": "NODE_ENV=development rollup -c && npm run build-palettes",
172
- "build:prod": "NODE_ENV=production STRIP_LOGS=true rollup -c && npm run build-palettes",
173
- "dev": "rollup -c -w",
174
- "test": "jest",
175
- "test:watch": "jest --watch",
176
- "test:coverage": "jest --coverage",
177
- "clean": "rm -rf dist node_modules .rollup.cache storybook-static",
178
- "create-project": "node scripts/create-qwickapps-project.js",
179
- "validate:clean-install": "./qa/clean-install/validate.sh",
180
- "publish:palettes": "../../products/qwickapps/anvil/publish-palettes.sh",
181
- "storybook": "storybook dev -p 6006",
182
- "build-storybook": "storybook build"
183
- }
184
- }
185
+ "homepage": "https://github.com/qwickapps/react-framework#readme"
186
+ }
File without changes
File without changes
@@ -137,7 +137,13 @@ function HtmlView({
137
137
  ...styleProps.sx
138
138
  }}
139
139
  >
140
- {components}
140
+ {Array.isArray(components)
141
+ ? components.map((child, idx) =>
142
+ React.isValidElement(child) && child.key == null
143
+ ? React.cloneElement(child as ReactElement, { key: `html-child-${idx}` })
144
+ : child
145
+ )
146
+ : components}
141
147
  </Box>
142
148
  );
143
149
 
@@ -233,7 +233,7 @@ function LogoView({
233
233
  setCalculatedBadgePosition(badgePos);
234
234
  setSvgWidth(requiredWidth);
235
235
  }
236
- }, [name, badge, badgeOffset, calculateBadgePosition, fontSize, height, parseNameParts, svgWidth]);
236
+ }, [name, badge, badgeOffset, calculateBadgePosition, fontSize, height, parseNameParts]);
237
237
 
238
238
  // Determine CSS class for variant
239
239
  let variantClass = '';
@@ -458,6 +458,9 @@
458
458
  background: var(--scaffold-background);
459
459
  transition: padding 0.3s ease;
460
460
  box-sizing: border-box;
461
+ /* Establish stacking context below app bar to prevent content bleed-through on scroll (GH-1) */
462
+ position: relative;
463
+ z-index: 1;
461
464
  }
462
465
 
463
466
  /* =================== ANIMATIONS =================== */
@@ -40,6 +40,8 @@ export interface FormFieldProps extends ViewProps, SchemaProps<typeof FormFieldM
40
40
  endAdornment?: React.ReactNode;
41
41
  /** Additional input props */
42
42
  inputProps?: unknown;
43
+ /** Show error state styling */
44
+ error?: boolean;
43
45
  }
44
46
 
45
47
  /**
@@ -60,9 +62,11 @@ function FormFieldView({
60
62
  multiline = false,
61
63
  rows,
62
64
  placeholder,
65
+ name,
63
66
  startAdornment,
64
67
  endAdornment,
65
68
  inputProps,
69
+ error,
66
70
  // Exclude ViewProps that conflict with MUI FormControl types
67
71
  margin: _margin,
68
72
  marginTop: _marginTop,
@@ -128,6 +132,7 @@ function FormFieldView({
128
132
  return (
129
133
  <FormControl
130
134
  fullWidth={fullWidth}
135
+ error={error}
131
136
  {...restProps}
132
137
  >
133
138
  <InputLabel htmlFor={fieldId} sx={labelStyles} shrink>
@@ -136,6 +141,7 @@ function FormFieldView({
136
141
 
137
142
  <Input
138
143
  id={fieldId}
144
+ name={name}
139
145
  type={type}
140
146
  value={value}
141
147
  onChange={handleChange}
@@ -38,6 +38,8 @@ export interface FormSelectProps extends ViewProps, SchemaProps<typeof FormSelec
38
38
  onChange: (value: string | number) => void;
39
39
  /** Options array (runtime prop, overrides schema) */
40
40
  options: FormSelectOption[];
41
+ /** Show error state styling */
42
+ error?: boolean;
41
43
  }
42
44
 
43
45
  /**
@@ -54,6 +56,8 @@ function FormSelectView({
54
56
  fullWidth = true,
55
57
  size = 'small',
56
58
  placeholder,
59
+ name,
60
+ error,
57
61
  // Exclude ViewProps that conflict with MUI FormControl types
58
62
  margin: _margin,
59
63
  marginTop: _marginTop,
@@ -99,6 +103,7 @@ function FormSelectView({
99
103
  <FormControl
100
104
  fullWidth={fullWidth}
101
105
  size={size}
106
+ error={error}
102
107
  {...restProps}
103
108
  >
104
109
  {label && (
@@ -108,6 +113,7 @@ function FormSelectView({
108
113
  )}
109
114
 
110
115
  <Select
116
+ name={name}
111
117
  value={value}
112
118
  onChange={handleChange}
113
119
  disabled={disabled}
@@ -135,6 +135,17 @@ export class FormFieldModel extends ViewSchema {
135
135
  @IsOptional()
136
136
  @IsString()
137
137
  placeholder?: string;
138
+
139
+ @Field()
140
+ @Editor({
141
+ field_type: FieldType.TEXT,
142
+ label: 'Name',
143
+ description: 'Name attribute for the input (for forms and accessibility)',
144
+ placeholder: 'Enter name...'
145
+ })
146
+ @IsOptional()
147
+ @IsString()
148
+ name?: string;
138
149
  }
139
150
 
140
151
  export default FormFieldModel;
@@ -103,6 +103,17 @@ export class FormSelectModel extends ViewSchema {
103
103
  @IsOptional()
104
104
  @IsString()
105
105
  placeholder?: string;
106
+
107
+ @Field()
108
+ @Editor({
109
+ field_type: FieldType.TEXT,
110
+ label: 'Name',
111
+ description: 'Name attribute for the select (for forms and accessibility)',
112
+ placeholder: 'Enter name...'
113
+ })
114
+ @IsOptional()
115
+ @IsString()
116
+ name?: string;
106
117
  }
107
118
 
108
119
  export default FormSelectModel;