secure-ui-components 0.1.0-beta.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 (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +310 -0
  3. package/dist/components/secure-datetime/secure-datetime.css +263 -0
  4. package/dist/components/secure-datetime/secure-datetime.d.ts +124 -0
  5. package/dist/components/secure-datetime/secure-datetime.d.ts.map +1 -0
  6. package/dist/components/secure-datetime/secure-datetime.js +610 -0
  7. package/dist/components/secure-datetime/secure-datetime.js.map +1 -0
  8. package/dist/components/secure-file-upload/secure-file-upload.css +334 -0
  9. package/dist/components/secure-file-upload/secure-file-upload.d.ts +150 -0
  10. package/dist/components/secure-file-upload/secure-file-upload.d.ts.map +1 -0
  11. package/dist/components/secure-file-upload/secure-file-upload.js +911 -0
  12. package/dist/components/secure-file-upload/secure-file-upload.js.map +1 -0
  13. package/dist/components/secure-form/secure-form.css +62 -0
  14. package/dist/components/secure-form/secure-form.d.ts +128 -0
  15. package/dist/components/secure-form/secure-form.d.ts.map +1 -0
  16. package/dist/components/secure-form/secure-form.js +697 -0
  17. package/dist/components/secure-form/secure-form.js.map +1 -0
  18. package/dist/components/secure-input/secure-input.css +168 -0
  19. package/dist/components/secure-input/secure-input.d.ts +114 -0
  20. package/dist/components/secure-input/secure-input.d.ts.map +1 -0
  21. package/dist/components/secure-input/secure-input.js +785 -0
  22. package/dist/components/secure-input/secure-input.js.map +1 -0
  23. package/dist/components/secure-select/secure-select.css +195 -0
  24. package/dist/components/secure-select/secure-select.d.ts +149 -0
  25. package/dist/components/secure-select/secure-select.d.ts.map +1 -0
  26. package/dist/components/secure-select/secure-select.js +634 -0
  27. package/dist/components/secure-select/secure-select.js.map +1 -0
  28. package/dist/components/secure-submit-button/secure-submit-button.css +135 -0
  29. package/dist/components/secure-submit-button/secure-submit-button.d.ts +61 -0
  30. package/dist/components/secure-submit-button/secure-submit-button.d.ts.map +1 -0
  31. package/dist/components/secure-submit-button/secure-submit-button.js +399 -0
  32. package/dist/components/secure-submit-button/secure-submit-button.js.map +1 -0
  33. package/dist/components/secure-table/secure-table.css +341 -0
  34. package/dist/components/secure-table/secure-table.d.ts +64 -0
  35. package/dist/components/secure-table/secure-table.d.ts.map +1 -0
  36. package/dist/components/secure-table/secure-table.js +567 -0
  37. package/dist/components/secure-table/secure-table.js.map +1 -0
  38. package/dist/components/secure-textarea/secure-textarea.css +153 -0
  39. package/dist/components/secure-textarea/secure-textarea.d.ts +111 -0
  40. package/dist/components/secure-textarea/secure-textarea.d.ts.map +1 -0
  41. package/dist/components/secure-textarea/secure-textarea.js +477 -0
  42. package/dist/components/secure-textarea/secure-textarea.js.map +1 -0
  43. package/dist/core/base-component.d.ts +134 -0
  44. package/dist/core/base-component.d.ts.map +1 -0
  45. package/dist/core/base-component.js +303 -0
  46. package/dist/core/base-component.js.map +1 -0
  47. package/dist/core/base.css +37 -0
  48. package/dist/core/security-config.d.ts +89 -0
  49. package/dist/core/security-config.d.ts.map +1 -0
  50. package/dist/core/security-config.js +273 -0
  51. package/dist/core/security-config.js.map +1 -0
  52. package/dist/core/types.d.ts +212 -0
  53. package/dist/core/types.d.ts.map +1 -0
  54. package/dist/core/types.js +7 -0
  55. package/dist/core/types.js.map +1 -0
  56. package/dist/index.d.ts +18 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +19 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/package.json +89 -0
  61. package/dist/styles/tokens.css +257 -0
  62. package/package.json +118 -0
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Secure-UI Design Tokens
3
+ *
4
+ * These CSS Custom Properties can be overridden at any level:
5
+ * - :root level (global)
6
+ * - Per-component level (secure-input { --var: value; })
7
+ * - Per-instance level (style attribute or class)
8
+ *
9
+ * Architecture: Design Tokens → Component Styles → User Overrides
10
+ */
11
+
12
+ :host,
13
+ :root {
14
+ /* ============================================
15
+ COLOR SYSTEM
16
+ ============================================ */
17
+
18
+ /* Security Tier Colors */
19
+ --secure-ui-tier-public: #e0e0e0;
20
+ --secure-ui-tier-authenticated: #2196F3;
21
+ --secure-ui-tier-sensitive: #FF9800;
22
+ --secure-ui-tier-critical: #F44336;
23
+
24
+ /* Semantic Colors */
25
+ --secure-ui-color-primary: #667eea;
26
+ --secure-ui-color-success: #10b981;
27
+ --secure-ui-color-warning: #f59e0b;
28
+ --secure-ui-color-error: #ef4444;
29
+ --secure-ui-color-info: #3b82f6;
30
+
31
+ /* Neutral Colors */
32
+ --secure-ui-color-text-primary: #1f2937;
33
+ --secure-ui-color-text-secondary: #6b7280;
34
+ --secure-ui-color-text-disabled: #9ca3af;
35
+ --secure-ui-color-text-inverse: #ffffff;
36
+
37
+ --secure-ui-color-bg-primary: #ffffff;
38
+ --secure-ui-color-bg-secondary: #f9fafb;
39
+ --secure-ui-color-bg-tertiary: #f3f4f6;
40
+ --secure-ui-color-bg-disabled: #e5e7eb;
41
+
42
+ --secure-ui-color-border: #d1d5db;
43
+ --secure-ui-color-border-hover: #9ca3af;
44
+ --secure-ui-color-border-focus: #3b82f6;
45
+
46
+ /* ============================================
47
+ SPACING SYSTEM
48
+ ============================================ */
49
+
50
+ --secure-ui-space-0: 0;
51
+ --secure-ui-space-1: 0.25rem; /* 4px */
52
+ --secure-ui-space-2: 0.5rem; /* 8px */
53
+ --secure-ui-space-3: 0.75rem; /* 12px */
54
+ --secure-ui-space-4: 1rem; /* 16px */
55
+ --secure-ui-space-5: 1.25rem; /* 20px */
56
+ --secure-ui-space-6: 1.5rem; /* 24px */
57
+ --secure-ui-space-8: 2rem; /* 32px */
58
+ --secure-ui-space-10: 2.5rem; /* 40px */
59
+ --secure-ui-space-12: 3rem; /* 48px */
60
+
61
+ /* ============================================
62
+ TYPOGRAPHY SYSTEM
63
+ ============================================ */
64
+
65
+ /* Font Families */
66
+ --secure-ui-font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
67
+ --secure-ui-font-family-mono: 'SF Mono', 'Monaco', 'Cascadia Code', 'Courier New', monospace;
68
+
69
+ /* Font Sizes */
70
+ --secure-ui-font-size-xs: 0.75rem; /* 12px */
71
+ --secure-ui-font-size-sm: 0.875rem; /* 14px */
72
+ --secure-ui-font-size-base: 1rem; /* 16px */
73
+ --secure-ui-font-size-lg: 1.125rem; /* 18px */
74
+ --secure-ui-font-size-xl: 1.25rem; /* 20px */
75
+ --secure-ui-font-size-2xl: 1.5rem; /* 24px */
76
+ --secure-ui-font-size-3xl: 1.875rem; /* 30px */
77
+
78
+ /* Font Weights */
79
+ --secure-ui-font-weight-normal: 400;
80
+ --secure-ui-font-weight-medium: 500;
81
+ --secure-ui-font-weight-semibold: 600;
82
+ --secure-ui-font-weight-bold: 700;
83
+
84
+ /* Line Heights */
85
+ --secure-ui-line-height-tight: 1.25;
86
+ --secure-ui-line-height-normal: 1.5;
87
+ --secure-ui-line-height-relaxed: 1.75;
88
+
89
+ /* ============================================
90
+ BORDER SYSTEM
91
+ ============================================ */
92
+
93
+ --secure-ui-border-width-thin: 1px;
94
+ --secure-ui-border-width-base: 2px;
95
+ --secure-ui-border-width-thick: 4px;
96
+
97
+ --secure-ui-border-radius-none: 0;
98
+ --secure-ui-border-radius-sm: 0.25rem; /* 4px */
99
+ --secure-ui-border-radius-base: 0.375rem; /* 6px */
100
+ --secure-ui-border-radius-md: 0.5rem; /* 8px */
101
+ --secure-ui-border-radius-lg: 0.75rem; /* 12px */
102
+ --secure-ui-border-radius-xl: 1rem; /* 16px */
103
+ --secure-ui-border-radius-full: 9999px;
104
+
105
+ /* ============================================
106
+ SHADOW SYSTEM
107
+ ============================================ */
108
+
109
+ --secure-ui-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
110
+ --secure-ui-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
111
+ --secure-ui-shadow-base: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
112
+ --secure-ui-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
113
+ --secure-ui-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
114
+ --secure-ui-shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
115
+
116
+ --secure-ui-shadow-focus: 0 0 0 3px rgba(59, 130, 246, 0.1);
117
+ --secure-ui-shadow-focus-error: 0 0 0 3px rgba(239, 68, 68, 0.1);
118
+
119
+ /* ============================================
120
+ TRANSITION SYSTEM
121
+ ============================================ */
122
+
123
+ --secure-ui-transition-fast: 150ms;
124
+ --secure-ui-transition-base: 200ms;
125
+ --secure-ui-transition-slow: 300ms;
126
+
127
+ --secure-ui-transition-ease-in: cubic-bezier(0.4, 0, 1, 1);
128
+ --secure-ui-transition-ease-out: cubic-bezier(0, 0, 0.2, 1);
129
+ --secure-ui-transition-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
130
+
131
+ /* ============================================
132
+ COMPONENT-SPECIFIC TOKENS
133
+ ============================================ */
134
+
135
+ /* Input Components */
136
+ --secure-ui-input-height: 2.5rem; /* 40px */
137
+ --secure-ui-input-padding-x: var(--secure-ui-space-3);
138
+ --secure-ui-input-padding-y: var(--secure-ui-space-2);
139
+ --secure-ui-input-font-size: var(--secure-ui-font-size-sm);
140
+ --secure-ui-input-border-width: var(--secure-ui-border-width-base);
141
+ --secure-ui-input-border-radius: var(--secure-ui-border-radius-base);
142
+ --secure-ui-input-bg: var(--secure-ui-color-bg-primary);
143
+ --secure-ui-input-border-color: var(--secure-ui-color-border);
144
+ --secure-ui-input-border-color-hover: var(--secure-ui-color-border-hover);
145
+ --secure-ui-input-border-color-focus: var(--secure-ui-color-border-focus);
146
+ --secure-ui-input-text-color: var(--secure-ui-color-text-primary);
147
+ --secure-ui-input-placeholder-color: var(--secure-ui-color-text-secondary);
148
+ --secure-ui-input-disabled-bg: var(--secure-ui-color-bg-disabled);
149
+ --secure-ui-input-disabled-opacity: 0.6;
150
+
151
+ /* Textarea Components */
152
+ --secure-ui-textarea-min-height: 5rem; /* 80px */
153
+ --secure-ui-textarea-padding: var(--secure-ui-space-2) var(--secure-ui-space-3);
154
+
155
+ /* Select Components */
156
+ --secure-ui-select-height: var(--secure-ui-input-height);
157
+ --secure-ui-select-padding: var(--secure-ui-input-padding-y) var(--secure-ui-input-padding-x);
158
+ --secure-ui-select-background-color: var(--secure-ui-input-bg);
159
+ --secure-ui-select-color: var(--secure-ui-input-text-color);
160
+
161
+ /* Button Components */
162
+ --secure-ui-button-height: var(--secure-ui-input-height);
163
+ --secure-ui-button-padding-x: var(--secure-ui-space-4);
164
+ --secure-ui-button-padding-y: var(--secure-ui-space-2);
165
+ --secure-ui-button-border-radius: var(--secure-ui-border-radius-base);
166
+ --secure-ui-button-font-weight: var(--secure-ui-font-weight-medium);
167
+
168
+ /* Form Components */
169
+ --secure-ui-form-gap: var(--secure-ui-space-4);
170
+ --secure-ui-form-label-margin-bottom: var(--secure-ui-space-1);
171
+ --secure-ui-form-error-margin-top: 0; /*var(--secure-ui-space-1)*/
172
+
173
+ /* File Upload Components */
174
+ --secure-ui-upload-border-style: dashed;
175
+ --secure-ui-upload-border-width: var(--secure-ui-border-width-base);
176
+ --secure-ui-upload-padding: var(--secure-ui-space-8);
177
+ --secure-ui-upload-border-radius: var(--secure-ui-border-radius-lg);
178
+
179
+ /* table component */
180
+ --secure-ui-table-header-bg: var(--secure-ui-color-bg-secondary);
181
+ --secure-ui-table-row-hover-bg: var(--secure-ui-color-bg-tertiary);
182
+ --secure-ui-table-border-color: var(--secure-ui-color-border);
183
+ --secure-ui-table-font-size: var(--secure-ui-font-size-sm);
184
+ --secure-ui-table-font-color: var(--secure-ui-color-text-primary);
185
+ --secure-ui-table-padding: var(--secure-ui-space-3);
186
+ --secure-ui-table-border-radius: var(--secure-ui-border-radius-md);
187
+ --secure-ui-td-padding: var(--secure-ui-space-3);
188
+ --secure-ui-th-padding: var(--secure-ui-space-3);
189
+ --secure-ui-table-cell-text-align: left;
190
+
191
+ /* Badge Components */
192
+ --secure-ui-badge-padding: var(--secure-ui-space-1) var(--secure-ui-space-2);
193
+ --secure-ui-badge-font-size: var(--secure-ui-font-size-xs);
194
+ --secure-ui-badge-border-radius: var(--secure-ui-border-radius-sm);
195
+
196
+ /* Label Components */
197
+ --secure-ui-label-font-size: var(--secure-ui-font-size-sm);
198
+ --secure-ui-label-font-weight: var(--secure-ui-font-weight-medium);
199
+ --secure-ui-label-color: var(--secure-ui-color-text-primary);
200
+
201
+ /* Error Message Components */
202
+ --error-display: block;
203
+ --secure-ui-error-font-size: var(--secure-ui-font-size-xs);
204
+ --secure-ui-error-color: var(--secure-ui-color-error);
205
+
206
+ /* ============================================
207
+ Z-INDEX SYSTEM
208
+ ============================================ */
209
+
210
+ --secure-ui-z-base: 0;
211
+ --secure-ui-z-dropdown: 1000;
212
+ --secure-ui-z-sticky: 1100;
213
+ --secure-ui-z-fixed: 1200;
214
+ --secure-ui-z-modal-backdrop: 1300;
215
+ --secure-ui-z-modal: 1400;
216
+ --secure-ui-z-popover: 1500;
217
+ --secure-ui-z-tooltip: 1600;
218
+ }
219
+
220
+ /* ============================================
221
+ DARK MODE SUPPORT
222
+ ============================================ */
223
+
224
+ @media (prefers-color-scheme: dark) {
225
+ :host,
226
+ :root {
227
+ /* Override colors for dark mode */
228
+ --secure-ui-color-text-primary: #f9fafb;
229
+ --secure-ui-color-text-secondary: #d1d5db;
230
+ --secure-ui-color-text-disabled: #6b7280;
231
+
232
+ --secure-ui-color-bg-primary: #1f2937;
233
+ --secure-ui-color-bg-secondary: #111827;
234
+ --secure-ui-color-bg-tertiary: #374151;
235
+ --secure-ui-color-bg-disabled: #4b5563;
236
+
237
+ --secure-ui-color-border: #4b5563;
238
+ --secure-ui-color-border-hover: #6b7280;
239
+ --secure-ui-color-border-focus: #60a5fa;
240
+
241
+ --secure-ui-input-bg: #1f2937;
242
+ --secure-ui-input-disabled-bg: #4b5563;
243
+ }
244
+ }
245
+
246
+ /* ============================================
247
+ REDUCED MOTION SUPPORT
248
+ ============================================ */
249
+
250
+ @media (prefers-reduced-motion: reduce) {
251
+ :host,
252
+ :root {
253
+ --secure-ui-transition-fast: 0ms;
254
+ --secure-ui-transition-base: 0ms;
255
+ --secure-ui-transition-slow: 0ms;
256
+ }
257
+ }
package/package.json ADDED
@@ -0,0 +1,118 @@
1
+ {
2
+ "name": "secure-ui-components",
3
+ "version": "0.1.0-beta.1",
4
+ "description": "Security-first web component library with zero dependencies",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./secure-input": {
15
+ "types": "./dist/components/secure-input/secure-input.d.ts",
16
+ "import": "./dist/components/secure-input/secure-input.js"
17
+ },
18
+ "./secure-textarea": {
19
+ "types": "./dist/components/secure-textarea/secure-textarea.d.ts",
20
+ "import": "./dist/components/secure-textarea/secure-textarea.js"
21
+ },
22
+ "./secure-select": {
23
+ "types": "./dist/components/secure-select/secure-select.d.ts",
24
+ "import": "./dist/components/secure-select/secure-select.js"
25
+ },
26
+ "./secure-form": {
27
+ "types": "./dist/components/secure-form/secure-form.d.ts",
28
+ "import": "./dist/components/secure-form/secure-form.js"
29
+ },
30
+ "./secure-file-upload": {
31
+ "types": "./dist/components/secure-file-upload/secure-file-upload.d.ts",
32
+ "import": "./dist/components/secure-file-upload/secure-file-upload.js"
33
+ },
34
+ "./secure-datetime": {
35
+ "types": "./dist/components/secure-datetime/secure-datetime.d.ts",
36
+ "import": "./dist/components/secure-datetime/secure-datetime.js"
37
+ },
38
+ "./secure-table": {
39
+ "types": "./dist/components/secure-table/secure-table.d.ts",
40
+ "import": "./dist/components/secure-table/secure-table.js"
41
+ },
42
+ "./base-component": {
43
+ "types": "./dist/core/base-component.d.ts",
44
+ "import": "./dist/core/base-component.js"
45
+ },
46
+ "./security-config": {
47
+ "types": "./dist/core/security-config.d.ts",
48
+ "import": "./dist/core/security-config.js"
49
+ },
50
+ "./tokens.css": "./dist/styles/tokens.css"
51
+ },
52
+ "files": [
53
+ "dist",
54
+ "README.md",
55
+ "LICENSE"
56
+ ],
57
+ "scripts": {
58
+ "clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true})\"",
59
+ "typecheck": "tsc --noEmit",
60
+ "build:ts": "tsc",
61
+ "build:css": "node build/css-inliner.js",
62
+ "build": "npm run clean && npm run build:ts && npm run build:css",
63
+ "build:dev": "npm run build:ts && node build/dev-build.js",
64
+ "serve": "node server.js",
65
+ "serve:dev": "node --watch server.js",
66
+ "start": "npm run build && npm run serve",
67
+ "dev": "npm run build && npm run serve:dev",
68
+ "lint": "eslint src tests",
69
+ "lint:fix": "eslint src tests --fix",
70
+ "test": "vitest run",
71
+ "test:watch": "vitest",
72
+ "test:coverage": "vitest run --coverage",
73
+ "size": "size-limit",
74
+ "audit:check": "npm audit --audit-level=high",
75
+ "prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build"
76
+ },
77
+ "keywords": [
78
+ "web-components",
79
+ "security",
80
+ "ui",
81
+ "form-components",
82
+ "typescript",
83
+ "progressive-enhancement",
84
+ "zero-dependencies",
85
+ "xss-prevention",
86
+ "audit-logging",
87
+ "input-validation",
88
+ "shadow-dom",
89
+ "custom-elements"
90
+ ],
91
+ "author": "Barry Prendergast <barryprendergast@gmail.com>",
92
+ "license": "MIT",
93
+ "repository": {
94
+ "type": "git",
95
+ "url": "https://github.com/Barryprender/Secure-UI.git"
96
+ },
97
+ "bugs": {
98
+ "url": "https://github.com/Barryprender/Secure-UI/issues"
99
+ },
100
+ "homepage": "https://github.com/Barryprender/Secure-UI#readme",
101
+ "devDependencies": {
102
+ "@size-limit/preset-small-lib": "^12.0.1",
103
+ "@vitest/coverage-v8": "^4.0.18",
104
+ "axe-core": "^4.11.1",
105
+ "cors": "^2.8.5",
106
+ "eslint-plugin-security": "^4.0.0",
107
+ "express": "^4.18.2",
108
+ "happy-dom": "^20.4.0",
109
+ "jsdom": "^27.4.0",
110
+ "size-limit": "^12.0.1",
111
+ "typescript": "^5.5.0",
112
+ "typescript-eslint": "^8.57.0",
113
+ "vitest": "^4.0.18"
114
+ },
115
+ "engines": {
116
+ "node": ">=18.0.0"
117
+ }
118
+ }