@histoire/controls 0.2.0 → 0.2.3

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 (28) hide show
  1. package/dist/components/HstCopyIcon.vue.d.ts +15 -0
  2. package/dist/components/design-tokens/HstColorShades.story.vue.d.ts +2 -0
  3. package/dist/components/design-tokens/HstColorShades.vue.d.ts +19 -0
  4. package/dist/index.d.ts +34 -0
  5. package/dist/index.es.js +2315 -86
  6. package/dist/style.css +91 -0
  7. package/histoire-dist/__sandbox.html +15 -0
  8. package/histoire-dist/assets/BaseEmpty.a84c14c8.js +1 -0
  9. package/histoire-dist/assets/HomeView.f524bd4b.js +1 -0
  10. package/histoire-dist/assets/HstCheckbox.story.9f622545.js +1 -0
  11. package/histoire-dist/assets/HstInput.story.945401ce.js +1 -0
  12. package/histoire-dist/assets/SearchModal.76c035f2.js +1 -0
  13. package/histoire-dist/assets/StoryView.e4c41518.js +15 -0
  14. package/histoire-dist/assets/global-components.84d0ab22.js +1 -0
  15. package/histoire-dist/assets/histoire-text-dark.a529813a.svg +89 -0
  16. package/histoire-dist/assets/histoire-text.1d4474b5.svg +89 -0
  17. package/histoire-dist/assets/histoire.8af7bd1f.svg +51 -0
  18. package/histoire-dist/assets/index.58f51dd0.js +1 -0
  19. package/histoire-dist/assets/preview-settings.a634d101.js +1 -0
  20. package/histoire-dist/assets/sandbox.2c60450a.js +1 -0
  21. package/histoire-dist/assets/style.7657d2ac.css +1 -0
  22. package/histoire-dist/assets/vendor.70a554f6.js +9 -0
  23. package/histoire-dist/index.html +15 -0
  24. package/package.json +19 -14
  25. package/src/components/HstCopyIcon.vue +34 -0
  26. package/src/components/design-tokens/HstColorShades.story.vue +381 -0
  27. package/src/components/design-tokens/HstColorShades.vue +80 -0
  28. package/src/index.ts +4 -0
@@ -0,0 +1,381 @@
1
+ <script lang="ts" setup>
2
+ import HstColorShades from './HstColorShades.vue'
3
+
4
+ const colors = {
5
+ slate: {
6
+ 50: '#f8fafc',
7
+ 100: '#f1f5f9',
8
+ 200: '#e2e8f0',
9
+ 300: '#cbd5e1',
10
+ 400: '#94a3b8',
11
+ 500: '#64748b',
12
+ 600: '#475569',
13
+ 700: '#334155',
14
+ 750: '#283548',
15
+ 800: '#1e293b',
16
+ 850: '#151f32',
17
+ 900: '#0f172a',
18
+ 950: '#09101f',
19
+ },
20
+ gray: {
21
+ 50: '#f9fafb',
22
+ 100: '#f3f4f6',
23
+ 200: '#e5e7eb',
24
+ 300: '#d1d5db',
25
+ 400: '#9ca3af',
26
+ 500: '#6b7280',
27
+ 600: '#4b5563',
28
+ 700: '#374151',
29
+ 750: '#2b3546',
30
+ 800: '#1f2937',
31
+ 850: '#18212f',
32
+ 900: '#111827',
33
+ 950: '#0c101d',
34
+ },
35
+ zinc: {
36
+ 50: '#fafafa',
37
+ 100: '#f4f4f5',
38
+ 200: '#e4e4e7',
39
+ 300: '#d4d4d8',
40
+ 400: '#a1a1aa',
41
+ 500: '#71717a',
42
+ 600: '#52525b',
43
+ 700: '#3f3f46',
44
+ 750: '#323238',
45
+ 800: '#27272a',
46
+ 850: '#1f1f21',
47
+ 900: '#18181b',
48
+ 950: '#101012',
49
+ },
50
+ neutral: {
51
+ 50: '#fafafa',
52
+ 100: '#f5f5f5',
53
+ 200: '#e5e5e5',
54
+ 300: '#d4d4d4',
55
+ 400: '#a3a3a3',
56
+ 500: '#737373',
57
+ 600: '#525252',
58
+ 700: '#404040',
59
+ 750: '#333333',
60
+ 800: '#262626',
61
+ 850: '#1f1f1f',
62
+ 900: '#171717',
63
+ 950: '#0f0f0f',
64
+ },
65
+ stone: {
66
+ 50: '#fafaf9',
67
+ 100: '#f5f5f4',
68
+ 200: '#e7e5e4',
69
+ 300: '#d6d3d1',
70
+ 400: '#a8a29e',
71
+ 500: '#78716c',
72
+ 600: '#57534e',
73
+ 700: '#44403c',
74
+ 750: '#363230',
75
+ 800: '#292524',
76
+ 850: '#211e1c',
77
+ 900: '#1c1917',
78
+ 950: '#171412',
79
+ },
80
+ red: {
81
+ 50: '#fef2f2',
82
+ 100: '#fee2e2',
83
+ 200: '#fecaca',
84
+ 300: '#fca5a5',
85
+ 400: '#f87171',
86
+ 500: '#ef4444',
87
+ 600: '#dc2626',
88
+ 700: '#b91c1c',
89
+ 800: '#991b1b',
90
+ 900: '#7f1d1d',
91
+ },
92
+ orange: {
93
+ 50: '#fff7ed',
94
+ 100: '#ffedd5',
95
+ 200: '#fed7aa',
96
+ 300: '#fdba74',
97
+ 400: '#fb923c',
98
+ 500: '#f97316',
99
+ 600: '#ea580c',
100
+ 700: '#c2410c',
101
+ 800: '#9a3412',
102
+ 900: '#7c2d12',
103
+ },
104
+ amber: {
105
+ 50: '#fffbeb',
106
+ 100: '#fef3c7',
107
+ 200: '#fde68a',
108
+ 300: '#fcd34d',
109
+ 400: '#fbbf24',
110
+ 500: '#f59e0b',
111
+ 600: '#d97706',
112
+ 700: '#b45309',
113
+ 800: '#92400e',
114
+ 900: '#78350f',
115
+ },
116
+ yellow: {
117
+ 50: '#fefce8',
118
+ 100: '#fef9c3',
119
+ 200: '#fef08a',
120
+ 300: '#fde047',
121
+ 400: '#facc15',
122
+ 500: '#eab308',
123
+ 600: '#ca8a04',
124
+ 700: '#a16207',
125
+ 800: '#854d0e',
126
+ 900: '#713f12',
127
+ },
128
+ lime: {
129
+ 50: '#f7fee7',
130
+ 100: '#ecfccb',
131
+ 200: '#d9f99d',
132
+ 300: '#bef264',
133
+ 400: '#a3e635',
134
+ 500: '#84cc16',
135
+ 600: '#65a30d',
136
+ 700: '#4d7c0f',
137
+ 800: '#3f6212',
138
+ 900: '#365314',
139
+ },
140
+ green: {
141
+ 50: '#f0fdf4',
142
+ 100: '#dcfce7',
143
+ 200: '#bbf7d0',
144
+ 300: '#86efac',
145
+ 400: '#4ade80',
146
+ 500: '#22c55e',
147
+ 600: '#16a34a',
148
+ 700: '#15803d',
149
+ 800: '#166534',
150
+ 900: '#14532d',
151
+ },
152
+ emerald: {
153
+ 50: '#ecfdf5',
154
+ 100: '#d1fae5',
155
+ 200: '#a7f3d0',
156
+ 300: '#6ee7b7',
157
+ 400: '#34d399',
158
+ 500: '#10b981',
159
+ 600: '#059669',
160
+ 700: '#047857',
161
+ 800: '#065f46',
162
+ 900: '#064e3b',
163
+ },
164
+ teal: {
165
+ 50: '#f0fdfa',
166
+ 100: '#ccfbf1',
167
+ 200: '#99f6e4',
168
+ 300: '#5eead4',
169
+ 400: '#2dd4bf',
170
+ 500: '#14b8a6',
171
+ 600: '#0d9488',
172
+ 700: '#0f766e',
173
+ 800: '#115e59',
174
+ 900: '#134e4a',
175
+ },
176
+ cyan: {
177
+ 50: '#ecfeff',
178
+ 100: '#cffafe',
179
+ 200: '#a5f3fc',
180
+ 300: '#67e8f9',
181
+ 400: '#22d3ee',
182
+ 500: '#06b6d4',
183
+ 600: '#0891b2',
184
+ 700: '#0e7490',
185
+ 800: '#155e75',
186
+ 900: '#164e63',
187
+ },
188
+ sky: {
189
+ 50: '#f0f9ff',
190
+ 100: '#e0f2fe',
191
+ 200: '#bae6fd',
192
+ 300: '#7dd3fc',
193
+ 400: '#38bdf8',
194
+ 500: '#0ea5e9',
195
+ 600: '#0284c7',
196
+ 700: '#0369a1',
197
+ 800: '#075985',
198
+ 900: '#0c4a6e',
199
+ },
200
+ blue: {
201
+ 50: '#eff6ff',
202
+ 100: '#dbeafe',
203
+ 200: '#bfdbfe',
204
+ 300: '#93c5fd',
205
+ 400: '#60a5fa',
206
+ 500: '#3b82f6',
207
+ 600: '#2563eb',
208
+ 700: '#1d4ed8',
209
+ 800: '#1e40af',
210
+ 900: '#1e3a8a',
211
+ },
212
+ indigo: {
213
+ 50: '#eef2ff',
214
+ 100: '#e0e7ff',
215
+ 200: '#c7d2fe',
216
+ 300: '#a5b4fc',
217
+ 400: '#818cf8',
218
+ 500: '#6366f1',
219
+ 600: '#4f46e5',
220
+ 700: '#4338ca',
221
+ 800: '#3730a3',
222
+ 900: '#312e81',
223
+ },
224
+ violet: {
225
+ 50: '#f5f3ff',
226
+ 100: '#ede9fe',
227
+ 200: '#ddd6fe',
228
+ 300: '#c4b5fd',
229
+ 400: '#a78bfa',
230
+ 500: '#8b5cf6',
231
+ 600: '#7c3aed',
232
+ 700: '#6d28d9',
233
+ 800: '#5b21b6',
234
+ 900: '#4c1d95',
235
+ },
236
+ purple: {
237
+ 50: '#faf5ff',
238
+ 100: '#f3e8ff',
239
+ 200: '#e9d5ff',
240
+ 300: '#d8b4fe',
241
+ 400: '#c084fc',
242
+ 500: '#a855f7',
243
+ 600: '#9333ea',
244
+ 700: '#7e22ce',
245
+ 800: '#6b21a8',
246
+ 900: '#581c87',
247
+ },
248
+ fuchsia: {
249
+ 50: '#fdf4ff',
250
+ 100: '#fae8ff',
251
+ 200: '#f5d0fe',
252
+ 300: '#f0abfc',
253
+ 400: '#e879f9',
254
+ 500: '#d946ef',
255
+ 600: '#c026d3',
256
+ 700: '#a21caf',
257
+ 800: '#86198f',
258
+ 900: '#701a75',
259
+ },
260
+ pink: {
261
+ 50: '#fdf2f8',
262
+ 100: '#fce7f3',
263
+ 200: '#fbcfe8',
264
+ 300: '#f9a8d4',
265
+ 400: '#f472b6',
266
+ 500: '#ec4899',
267
+ 600: '#db2777',
268
+ 700: '#be185d',
269
+ 800: '#9d174d',
270
+ 900: '#831843',
271
+ },
272
+ rose: {
273
+ 50: '#fff1f2',
274
+ 100: '#ffe4e6',
275
+ 200: '#fecdd3',
276
+ 300: '#fda4af',
277
+ 400: '#fb7185',
278
+ 500: '#f43f5e',
279
+ 600: '#e11d48',
280
+ 700: '#be123c',
281
+ 800: '#9f1239',
282
+ 900: '#881337',
283
+ },
284
+ }
285
+ </script>
286
+
287
+ <template>
288
+ <Story
289
+ title="design-tokens/HstColorShades"
290
+ responsive-disabled
291
+ >
292
+ <Variant title="default">
293
+ <HstColorShades
294
+ v-for="(shades, key) of colors"
295
+ :key="key"
296
+ :shades="shades"
297
+ :get-name="shade => `${key}-${shade}`"
298
+ />
299
+ </Variant>
300
+
301
+ <Variant title="background">
302
+ <HstColorShades
303
+ v-for="(shades, key) of colors"
304
+ :key="key"
305
+ :shades="shades"
306
+ :get-name="shade => `${key}-${shade}`"
307
+ >
308
+ <template #default="{ color }">
309
+ <div
310
+ class="htw-rounded htw-h-[100px]"
311
+ :style="{
312
+ backgroundColor: color,
313
+ }"
314
+ />
315
+ </template>
316
+ </HstColorShades>
317
+ </Variant>
318
+
319
+ <Variant title="text">
320
+ <HstColorShades
321
+ v-for="(shades, key) of colors"
322
+ :key="key"
323
+ :shades="shades"
324
+ :get-name="shade => `${key}-${shade}`"
325
+ >
326
+ <template #default="{ color }">
327
+ <div
328
+ class="htw-rounded htw-h-[100px] htw-text-5xl htw-flex htw-items-end"
329
+ :style="{
330
+ color: color,
331
+ }"
332
+ >
333
+ Aa
334
+ </div>
335
+ </template>
336
+ </HstColorShades>
337
+ </Variant>
338
+
339
+ <Variant title="border">
340
+ <HstColorShades
341
+ v-for="(shades, key) of colors"
342
+ :key="key"
343
+ :shades="shades"
344
+ :get-name="shade => `${key}-${shade}`"
345
+ >
346
+ <template #default="{ color }">
347
+ <div
348
+ class="htw-rounded htw-h-[100px] htw-border-solid htw-border-2"
349
+ :style="{
350
+ borderColor: color,
351
+ }"
352
+ />
353
+ </template>
354
+ </HstColorShades>
355
+ </Variant>
356
+
357
+ <Variant
358
+ title="with search"
359
+ :init-state="() => ({
360
+ search: '',
361
+ })"
362
+ >
363
+ <template #default="{ state }">
364
+ <HstColorShades
365
+ v-for="(shades, key) of colors"
366
+ :key="key"
367
+ :shades="shades"
368
+ :get-name="shade => `${key}-${shade}`"
369
+ :search="state.search"
370
+ />
371
+ </template>
372
+
373
+ <template #controls="{ state }">
374
+ <HstText
375
+ v-model="state.search"
376
+ title="Filter colors..."
377
+ />
378
+ </template>
379
+ </Variant>
380
+ </Story>
381
+ </template>
@@ -0,0 +1,80 @@
1
+ <script lang="ts">
2
+ export default {
3
+ name: 'HstColorShades',
4
+ }
5
+ </script>
6
+
7
+ <script lang="ts" setup>
8
+ import { computed, ref } from 'vue'
9
+ import HstCopyIcon from '../HstCopyIcon.vue'
10
+
11
+ const props = defineProps<{
12
+ shades: Record<string, string>
13
+ // @TODO report eslint bug
14
+ // eslint-disable-next-line func-call-spacing
15
+ getName?: (key: string, color: string) => string
16
+ search?: string
17
+ }>()
18
+
19
+ const shadesWithName = computed(() => {
20
+ const shades = props.shades
21
+ const getName = props.getName
22
+ return Object.entries(shades).map(([key, color]) => {
23
+ const name = getName ? getName(key, color) : key
24
+ return {
25
+ key,
26
+ color,
27
+ name,
28
+ }
29
+ })
30
+ })
31
+
32
+ const displayedShades = computed(() => {
33
+ let list = shadesWithName.value
34
+ if (props.search) {
35
+ const reg = new RegExp(props.search, 'i')
36
+ list = list.filter(({ name }) => reg.test(name))
37
+ }
38
+ return list
39
+ })
40
+ </script>
41
+
42
+ <template>
43
+ <div
44
+ v-if="displayedShades.length"
45
+ class="htw-grid htw-gap-4 htw-grid-cols-[repeat(auto-fill,minmax(100px,1fr))] htw-m-4"
46
+ >
47
+ <div
48
+ v-for="shade of displayedShades"
49
+ :key="shade.key"
50
+ class="htw-flex htw-flex-col htw-gap-2 htw-group"
51
+ >
52
+ <slot
53
+ :color="shade.color"
54
+ >
55
+ <div
56
+ class="htw-rounded-full htw-w-16 htw-h-16"
57
+ :style="{
58
+ backgroundColor: shade.color,
59
+ }"
60
+ />
61
+ </slot>
62
+ <div>
63
+ <div class="htw-flex htw-gap-1">
64
+ <pre class="htw-my-0">{{ shade.name }}</pre>
65
+ <HstCopyIcon
66
+ :content="shade.name"
67
+ class="htw-hidden group-hover:htw-block"
68
+ />
69
+ </div>
70
+ <div class="htw-flex htw-gap-1">
71
+ <pre class="htw-my-0 htw-opacity-50">{{ shade.color }}</pre>
72
+ <HstCopyIcon
73
+ :content="shade.color"
74
+ class="htw-hidden group-hover:htw-block"
75
+ />
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </template>
package/src/index.ts CHANGED
@@ -3,11 +3,15 @@ import HstCheckboxVue from './components/checkbox/HstCheckbox.vue'
3
3
  import HstTextVue from './components/text/HstText.vue'
4
4
  import HstNumberVue from './components/number/HstNumber.vue'
5
5
  import HstTextareaVue from './components/textarea/HstTextarea.vue'
6
+ import HstColorShadesVue from './components/design-tokens/HstColorShades.vue'
7
+ import HstCopyIconVue from './components/HstCopyIcon.vue'
6
8
 
7
9
  export const HstCheckbox = HstCheckboxVue
8
10
  export const HstText = HstTextVue
9
11
  export const HstNumber = HstNumberVue
10
12
  export const HstTextarea = HstTextareaVue
13
+ export const HstColorShades = HstColorShadesVue
14
+ export const HstCopyIcon = HstCopyIconVue
11
15
 
12
16
  export function registerVueComponents (app: App) {
13
17
  app.component('HstCheckbox', HstCheckboxVue)