@denisluyo/react-web 0.1.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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/Button.d.ts +19 -0
  4. package/dist/Button.d.ts.map +1 -0
  5. package/dist/Button.js +7 -0
  6. package/dist/Checkbox.d.ts +13 -0
  7. package/dist/Checkbox.d.ts.map +1 -0
  8. package/dist/Checkbox.js +11 -0
  9. package/dist/Chip.d.ts +21 -0
  10. package/dist/Chip.d.ts.map +1 -0
  11. package/dist/Chip.js +24 -0
  12. package/dist/RadioButton.d.ts +14 -0
  13. package/dist/RadioButton.d.ts.map +1 -0
  14. package/dist/RadioButton.js +10 -0
  15. package/dist/TextArea.d.ts +23 -0
  16. package/dist/TextArea.d.ts.map +1 -0
  17. package/dist/TextArea.js +19 -0
  18. package/dist/TextField.d.ts +44 -0
  19. package/dist/TextField.d.ts.map +1 -0
  20. package/dist/TextField.js +23 -0
  21. package/dist/Toast.d.ts +20 -0
  22. package/dist/Toast.d.ts.map +1 -0
  23. package/dist/Toast.js +14 -0
  24. package/dist/assets/checkbox-check.svg +5 -0
  25. package/dist/assets/chip-info-mark.svg +3 -0
  26. package/dist/assets/chip-info-ring.svg +3 -0
  27. package/dist/assets/password-eye-slash.svg +3 -0
  28. package/dist/assets/toast-close-backward.svg +1 -0
  29. package/dist/assets/toast-close-forward.svg +1 -0
  30. package/dist/assets/toast-error.svg +1 -0
  31. package/dist/assets/toast-information.svg +1 -0
  32. package/dist/assets/toast-success.svg +1 -0
  33. package/dist/assets/toast-warning.svg +1 -0
  34. package/dist/button.css +204 -0
  35. package/dist/checkbox.css +79 -0
  36. package/dist/chip.css +106 -0
  37. package/dist/index.d.ts +15 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +7 -0
  40. package/dist/radio-button.css +138 -0
  41. package/dist/styles.css +7 -0
  42. package/dist/text-area.css +119 -0
  43. package/dist/text-field.css +181 -0
  44. package/dist/toast.css +152 -0
  45. package/package.json +39 -0
@@ -0,0 +1,181 @@
1
+ .ds-text-field {
2
+ display: inline-flex;
3
+ width: 328px;
4
+ max-width: 100%;
5
+ flex-direction: column;
6
+ gap: var(--ds-semantic-units-base-spacing-xs, 4px);
7
+ color: var(--ds-semantic-color-text-neutral-primary, #000);
8
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
9
+ }
10
+
11
+ .ds-text-field__label,
12
+ .ds-text-field__help {
13
+ min-height: 16px;
14
+ font-size: var(--ds-semantic-typography-large-bodies-body3-semibold-size, 12px);
15
+ font-weight: var(--ds-semantic-typography-large-bodies-body3-semibold-weight, 600);
16
+ line-height: var(--ds-semantic-typography-large-bodies-body3-semibold-line-height, 16px);
17
+ letter-spacing: var(--ds-semantic-typography-large-bodies-body3-semibold-letter-spacing, 0);
18
+ }
19
+
20
+ .ds-text-field__label {
21
+ color: var(--ds-semantic-color-text-neutral-secondary, #6c6c6c);
22
+ }
23
+
24
+ .ds-text-field__field {
25
+ box-sizing: border-box;
26
+ display: flex;
27
+ width: 100%;
28
+ height: 56px;
29
+ align-items: center;
30
+ gap: var(--ds-semantic-units-base-spacing-s, 8px);
31
+ padding: var(--ds-semantic-units-base-spacing-l, 16px);
32
+ border: var(--ds-semantic-border-width-xs, 1px) solid var(--ds-semantic-color-border-neutral-tertiary, #b3b3b3);
33
+ border-radius: var(--ds-semantic-units-border-radius-s, 8px);
34
+ background: var(--ds-semantic-color-background-neutral-primary, #fafafa);
35
+ transition: border-color var(--ds-semantic-motion-duration-fast, 120ms) var(--ds-semantic-motion-easing-standard, ease);
36
+ }
37
+
38
+ .ds-text-field__field:focus-within,
39
+ .ds-text-field[data-preview-state='focus'] .ds-text-field__field,
40
+ .ds-text-field[data-preview-state='writing'] .ds-text-field__field {
41
+ border-color: var(--ds-semantic-color-border-brand-default, #7d5df3);
42
+ }
43
+
44
+ .ds-text-field__adornment {
45
+ display: inline-flex;
46
+ flex: 0 0 auto;
47
+ align-items: center;
48
+ justify-content: center;
49
+ }
50
+
51
+ .ds-text-field__password-toggle {
52
+ display: inline-flex;
53
+ width: 24px;
54
+ height: 24px;
55
+ flex: 0 0 24px;
56
+ align-items: center;
57
+ justify-content: center;
58
+ margin: 0;
59
+ padding: 0;
60
+ border: 0;
61
+ border-radius: var(--ds-semantic-units-border-radius-xs, 4px);
62
+ color: var(--ds-semantic-color-border-neutral-secondary, #404040);
63
+ background: transparent;
64
+ cursor: pointer;
65
+ }
66
+
67
+ .ds-text-field__password-toggle:focus-visible {
68
+ outline: var(--ds-semantic-border-width-s, 2px) solid var(--ds-semantic-color-border-brand-default, #7d5df3);
69
+ outline-offset: 2px;
70
+ }
71
+
72
+ .ds-text-field__password-icon {
73
+ display: block;
74
+ width: 22px;
75
+ height: 22px;
76
+ background: currentColor;
77
+ -webkit-mask: url('./assets/password-eye-slash.svg') center / 22px 22px no-repeat;
78
+ mask: url('./assets/password-eye-slash.svg') center / 22px 22px no-repeat;
79
+ }
80
+
81
+ .ds-text-field__field:focus-within .ds-text-field__password-toggle,
82
+ .ds-text-field[data-preview-state='focus'] .ds-text-field__password-toggle,
83
+ .ds-text-field[data-preview-state='writing'] .ds-text-field__password-toggle {
84
+ color: var(--ds-semantic-color-text-brand-primary, #7d5df3);
85
+ }
86
+
87
+ .ds-text-field__input-shell {
88
+ position: relative;
89
+ min-width: 0;
90
+ flex: 1 1 auto;
91
+ }
92
+
93
+ .ds-text-field__input {
94
+ display: block;
95
+ width: 100%;
96
+ min-width: 0;
97
+ height: 24px;
98
+ margin: 0;
99
+ padding: 0;
100
+ border: 0;
101
+ outline: 0;
102
+ color: var(--ds-semantic-color-text-neutral-primary, #000);
103
+ background: transparent;
104
+ font: inherit;
105
+ font-size: var(--ds-semantic-typography-large-bodies-body1-regular-size, 16px);
106
+ font-weight: var(--ds-semantic-typography-large-bodies-body1-regular-weight, 400);
107
+ line-height: var(--ds-semantic-typography-large-bodies-body1-regular-line-height, 24px);
108
+ letter-spacing: var(--ds-semantic-typography-large-bodies-body1-regular-letter-spacing, 0);
109
+ }
110
+
111
+ .ds-text-field__input::placeholder {
112
+ color: var(--ds-semantic-color-text-neutral-tertiary, #a0a0a0);
113
+ opacity: 1;
114
+ }
115
+
116
+ .ds-text-field__help {
117
+ padding-inline: var(--ds-semantic-units-base-spacing-s, 8px);
118
+ color: var(--ds-semantic-color-text-neutral-tertiary, #a0a0a0);
119
+ }
120
+
121
+ .ds-text-field[data-error='true'] .ds-text-field__label,
122
+ .ds-text-field[data-error='true'] .ds-text-field__help {
123
+ color: var(--ds-semantic-color-text-feedback-bold-error, #f22418);
124
+ }
125
+
126
+ .ds-text-field[data-error='true'] .ds-text-field__field,
127
+ .ds-text-field[data-preview-state='error-writing'] .ds-text-field__field {
128
+ border-color: var(--ds-semantic-color-border-feedback-bold-error, #f22418);
129
+ }
130
+
131
+ .ds-text-field[data-error='true'] .ds-text-field__password-toggle,
132
+ .ds-text-field[data-preview-state='error-writing'] .ds-text-field__password-toggle {
133
+ color: var(--ds-semantic-color-text-feedback-bold-error, #f22418);
134
+ }
135
+
136
+ .ds-text-field[data-disabled='true'] .ds-text-field__field {
137
+ border-color: transparent;
138
+ background: var(--ds-semantic-color-background-neutral-disabled, #e1e1e1);
139
+ }
140
+
141
+ .ds-text-field[data-disabled='true'] .ds-text-field__label,
142
+ .ds-text-field[data-disabled='true'] .ds-text-field__help,
143
+ .ds-text-field[data-disabled='true'] .ds-text-field__password-toggle {
144
+ color: var(--ds-semantic-color-text-neutral-disabled, #e1e1e1);
145
+ }
146
+
147
+ .ds-text-field__password-toggle:disabled {
148
+ cursor: not-allowed;
149
+ }
150
+
151
+ .ds-text-field__input:disabled {
152
+ color: var(--ds-semantic-color-text-neutral-tertiary, #a0a0a0);
153
+ cursor: not-allowed;
154
+ opacity: 1;
155
+ -webkit-text-fill-color: currentColor;
156
+ }
157
+
158
+ .ds-text-field__preview {
159
+ display: inline-flex;
160
+ position: absolute;
161
+ inset: 0 auto auto 0;
162
+ height: 24px;
163
+ align-items: center;
164
+ pointer-events: none;
165
+ visibility: hidden;
166
+ white-space: pre;
167
+ font-size: var(--ds-semantic-typography-large-bodies-body1-regular-size, 16px);
168
+ font-weight: var(--ds-semantic-typography-large-bodies-body1-regular-weight, 400);
169
+ line-height: var(--ds-semantic-typography-large-bodies-body1-regular-line-height, 24px);
170
+ }
171
+
172
+ .ds-text-field__preview-caret {
173
+ width: 1px;
174
+ height: 18px;
175
+ background: var(--ds-semantic-color-text-brand-primary, #7d5df3);
176
+ visibility: visible;
177
+ }
178
+
179
+ @media (prefers-reduced-motion: reduce) {
180
+ .ds-text-field__field { transition: none; }
181
+ }
package/dist/toast.css ADDED
@@ -0,0 +1,152 @@
1
+ .ds-toast {
2
+ box-sizing: border-box;
3
+ display: flex;
4
+ width: min(328px, 100%);
5
+ min-width: min(328px, 100%);
6
+ min-height: 56px;
7
+ align-items: center;
8
+ gap: var(--ds-semantic-units-base-spacing-s, 8px);
9
+ padding: var(--ds-semantic-units-base-spacing-s, 8px);
10
+ border-radius: var(--ds-semantic-units-border-radius-s, 8px);
11
+ color: var(--ds-semantic-color-text-neutral-primary, #000);
12
+ background: var(--ds-semantic-color-background-feedback-medium-informative, #8fcefa);
13
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
14
+ font-size: var(--ds-semantic-typography-small-captions-caption1-semibold-size, 12px);
15
+ font-weight: var(--ds-semantic-typography-small-captions-caption1-semibold-weight, 600);
16
+ line-height: var(--ds-semantic-typography-small-captions-caption1-semibold-line-height, 16px);
17
+ letter-spacing: var(--ds-semantic-typography-small-captions-caption1-semibold-letter-spacing, 0);
18
+ }
19
+
20
+ .ds-toast[data-state='success'] {
21
+ background: var(--ds-semantic-color-background-feedback-medium-success, #8ef4a0);
22
+ }
23
+
24
+ .ds-toast[data-state='warning'] {
25
+ background: var(--ds-semantic-color-background-feedback-medium-alert, #f4c48e);
26
+ }
27
+
28
+ .ds-toast[data-state='error'] {
29
+ background: var(--ds-semantic-color-background-feedback-medium-error, var(--ds-semantic-color-background-feedback-medium-error-light, #f59999));
30
+ }
31
+
32
+ .ds-toast__content {
33
+ display: flex;
34
+ min-width: 0;
35
+ flex: 1 1 auto;
36
+ align-items: center;
37
+ gap: var(--ds-semantic-units-base-spacing-s, 8px);
38
+ }
39
+
40
+ .ds-toast__label {
41
+ min-width: 0;
42
+ flex: 1 1 auto;
43
+ overflow-wrap: anywhere;
44
+ }
45
+
46
+ .ds-toast__icon {
47
+ display: grid;
48
+ width: 24px;
49
+ height: 24px;
50
+ flex: 0 0 24px;
51
+ place-items: center;
52
+ }
53
+
54
+ .ds-toast__state-icon {
55
+ display: block;
56
+ width: 20px;
57
+ height: 20px;
58
+ background: currentColor;
59
+ -webkit-mask-position: center;
60
+ mask-position: center;
61
+ -webkit-mask-repeat: no-repeat;
62
+ mask-repeat: no-repeat;
63
+ -webkit-mask-size: contain;
64
+ mask-size: contain;
65
+ }
66
+
67
+ .ds-toast__state-icon--information {
68
+ color: var(--ds-semantic-color-background-feedback-bold-informative, #0088ff);
69
+ -webkit-mask-image: url('./assets/toast-information.svg');
70
+ mask-image: url('./assets/toast-information.svg');
71
+ }
72
+
73
+ .ds-toast__state-icon--success {
74
+ -webkit-mask-image: url('./assets/toast-success.svg');
75
+ mask-image: url('./assets/toast-success.svg');
76
+ }
77
+
78
+ .ds-toast__state-icon--warning {
79
+ width: 19px;
80
+ height: 18px;
81
+ -webkit-mask-image: url('./assets/toast-warning.svg');
82
+ mask-image: url('./assets/toast-warning.svg');
83
+ }
84
+
85
+ .ds-toast__state-icon--error {
86
+ width: 19px;
87
+ height: 19px;
88
+ -webkit-mask-image: url('./assets/toast-error.svg');
89
+ mask-image: url('./assets/toast-error.svg');
90
+ }
91
+
92
+ .ds-toast__close {
93
+ display: grid;
94
+ width: 20px;
95
+ height: 20px;
96
+ flex: 0 0 20px;
97
+ place-items: center;
98
+ margin: 0;
99
+ padding: 0;
100
+ border: 0;
101
+ border-radius: var(--ds-semantic-units-border-radius-xs, 4px);
102
+ color: inherit;
103
+ background: transparent;
104
+ cursor: pointer;
105
+ }
106
+
107
+ .ds-toast__close:hover {
108
+ background: rgb(0 0 0 / 8%);
109
+ }
110
+
111
+ .ds-toast__close:active {
112
+ background: rgb(0 0 0 / 14%);
113
+ }
114
+
115
+ .ds-toast__close:focus-visible {
116
+ outline: var(--ds-semantic-border-width-s, 2px) solid currentColor;
117
+ outline-offset: 2px;
118
+ }
119
+
120
+ .ds-toast__close-icon {
121
+ display: block;
122
+ position: relative;
123
+ width: 12px;
124
+ height: 12px;
125
+ }
126
+
127
+ .ds-toast__close-stroke {
128
+ display: block;
129
+ position: absolute;
130
+ inset: 0;
131
+ background: currentColor;
132
+ -webkit-mask-position: center;
133
+ mask-position: center;
134
+ -webkit-mask-repeat: no-repeat;
135
+ mask-repeat: no-repeat;
136
+ -webkit-mask-size: contain;
137
+ mask-size: contain;
138
+ }
139
+
140
+ .ds-toast__close-stroke--forward {
141
+ -webkit-mask-image: url('./assets/toast-close-forward.svg');
142
+ mask-image: url('./assets/toast-close-forward.svg');
143
+ }
144
+
145
+ .ds-toast__close-stroke--backward {
146
+ -webkit-mask-image: url('./assets/toast-close-backward.svg');
147
+ mask-image: url('./assets/toast-close-backward.svg');
148
+ }
149
+
150
+ @media (prefers-reduced-motion: reduce) {
151
+ .ds-toast__close { transition: none; }
152
+ }
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@denisluyo/react-web",
3
+ "version": "0.1.0",
4
+ "description": "Componentes React web generales del Design System de Denis Luyo.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "files": ["dist", "README.md", "LICENSE"],
8
+ "keywords": ["design-system", "react", "components", "ui"],
9
+ "publishConfig": {
10
+ "access": "public",
11
+ "registry": "https://registry.npmjs.org/"
12
+ },
13
+ "sideEffects": ["**/*.css"],
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./styles.css": "./dist/styles.css"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.build.json && cp src/button.css src/radio-button.css src/checkbox.css src/text-field.css src/text-area.css src/chip.css src/toast.css src/styles.css dist/ && cp -R src/assets dist/",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit",
24
+ "test": "pnpm build && node --test",
25
+ "prepublishOnly": "pnpm test"
26
+ },
27
+ "peerDependencies": {
28
+ "react": ">=18"
29
+ },
30
+ "devDependencies": {
31
+ "@types/react": "^19.2.0",
32
+ "react": "19.2.8",
33
+ "react-dom": "19.2.8",
34
+ "typescript": "7.0.2"
35
+ },
36
+ "engines": {
37
+ "node": ">=18"
38
+ }
39
+ }