@admin-layout/demo-tailwind-browser 10.1.1-alpha.9 → 12.0.16-alpha.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 (42) hide show
  1. package/lib/components/OTPExamples.d.ts.map +1 -1
  2. package/lib/components/OTPExamples.js +32 -28
  3. package/lib/components/OTPExamples.js.map +1 -1
  4. package/lib/components/ThemeShowCase/FeaturesSection.d.ts +2 -0
  5. package/lib/components/ThemeShowCase/FeaturesSection.d.ts.map +1 -0
  6. package/lib/components/ThemeShowCase/FeaturesSection.js +64 -0
  7. package/lib/components/ThemeShowCase/FeaturesSection.js.map +1 -0
  8. package/lib/components/ThemeShowCase/HeroSection.d.ts +2 -0
  9. package/lib/components/ThemeShowCase/HeroSection.d.ts.map +1 -0
  10. package/lib/components/ThemeShowCase/HeroSection.js +92 -0
  11. package/lib/components/ThemeShowCase/HeroSection.js.map +1 -0
  12. package/lib/components/ThemeShowCase/ThemeShowcase.d.ts +2 -0
  13. package/lib/components/ThemeShowCase/ThemeShowcase.d.ts.map +1 -0
  14. package/lib/components/ThemeShowCase/ThemeShowcase.js +242 -0
  15. package/lib/components/ThemeShowCase/ThemeShowcase.js.map +1 -0
  16. package/lib/components/ThemeShowCase/index.d.ts +3 -0
  17. package/lib/components/ThemeShowCase/index.d.ts.map +1 -0
  18. package/lib/components/ThemeShowCase/index.js +6 -0
  19. package/lib/components/ThemeShowCase/index.js.map +1 -0
  20. package/lib/components/exception/403/Component.d.ts.map +1 -1
  21. package/lib/components/exception/403/Component.js +7 -17
  22. package/lib/components/exception/403/Component.js.map +1 -1
  23. package/lib/components/exception/404/Component.d.ts.map +1 -1
  24. package/lib/components/exception/404/Component.js +7 -17
  25. package/lib/components/exception/404/Component.js.map +1 -1
  26. package/lib/components/exception/500/Component.d.ts.map +1 -1
  27. package/lib/components/exception/500/Component.js +7 -17
  28. package/lib/components/exception/500/Component.js.map +1 -1
  29. package/lib/components/result/fail/Component.d.ts.map +1 -1
  30. package/lib/components/result/fail/Component.js +17 -26
  31. package/lib/components/result/fail/Component.js.map +1 -1
  32. package/lib/components/result/success/Component.d.ts.map +1 -1
  33. package/lib/components/result/success/Component.js +12 -21
  34. package/lib/components/result/success/Component.js.map +1 -1
  35. package/lib/compute.js +4 -4
  36. package/lib/compute.js.map +1 -1
  37. package/lib/routes.json +5 -5
  38. package/package.json +4 -4
  39. package/lib/components/ThemeExample.d.ts +0 -4
  40. package/lib/components/ThemeExample.d.ts.map +0 -1
  41. package/lib/components/ThemeExample.js +0 -436
  42. package/lib/components/ThemeExample.js.map +0 -1
@@ -1,436 +0,0 @@
1
- import {jsxs,jsx}from'react/jsx-runtime';import {useTheme}from'@admin-layout/tailwind-design-pro';const ThemeShowcase = () => {
2
- const {
3
- theme,
4
- isDarkMode
5
- } = useTheme();
6
- // Get text color based on dark mode
7
- const textColors = isDarkMode ? theme.colors.text.dark : theme.colors.text.light;
8
- return jsxs("div", {
9
- className: "w-full max-w-4xl mx-auto space-y-8",
10
- children: [jsxs("section", {
11
- className: "space-y-4",
12
- children: [jsx("h2", {
13
- className: "text-2xl font-bold",
14
- style: {
15
- color: textColors.primary
16
- },
17
- children: "Color Palette"
18
- }), jsxs("div", {
19
- className: "space-y-4",
20
- children: [jsxs("div", {
21
- children: [jsx("h3", {
22
- className: "mb-2 font-medium",
23
- style: {
24
- color: textColors.secondary
25
- },
26
- children: "Primary"
27
- }), jsx("div", {
28
- className: "grid grid-cols-11 gap-1 h-12",
29
- children: Object.entries(theme.colors.primary).map(([shade, color]) => jsx("div", {
30
- className: "rounded flex items-end justify-center p-1",
31
- style: {
32
- backgroundColor: color
33
- },
34
- children: jsx("span", {
35
- className: "text-[10px] font-mono",
36
- style: {
37
- color: parseInt(shade) > 500 ? '#fff' : '#000',
38
- opacity: 0.8
39
- },
40
- children: shade
41
- })
42
- }, `primary-${shade}`))
43
- })]
44
- }), jsxs("div", {
45
- children: [jsx("h3", {
46
- className: "mb-2 font-medium",
47
- style: {
48
- color: textColors.secondary
49
- },
50
- children: "Secondary"
51
- }), jsx("div", {
52
- className: "grid grid-cols-11 gap-1 h-12",
53
- children: Object.entries(theme.colors.secondary).map(([shade, color]) => jsx("div", {
54
- className: "rounded flex items-end justify-center p-1",
55
- style: {
56
- backgroundColor: color
57
- },
58
- children: jsx("span", {
59
- className: "text-[10px] font-mono",
60
- style: {
61
- color: parseInt(shade) > 500 ? '#fff' : '#000',
62
- opacity: 0.8
63
- },
64
- children: shade
65
- })
66
- }, `secondary-${shade}`))
67
- })]
68
- }), jsxs("div", {
69
- children: [jsx("h3", {
70
- className: "mb-2 font-medium",
71
- style: {
72
- color: textColors.secondary
73
- },
74
- children: "Accent"
75
- }), jsx("div", {
76
- className: "grid grid-cols-11 gap-1 h-12",
77
- children: Object.entries(theme.colors.accent).map(([shade, color]) => jsx("div", {
78
- className: "rounded flex items-end justify-center p-1",
79
- style: {
80
- backgroundColor: color
81
- },
82
- children: jsx("span", {
83
- className: "text-[10px] font-mono",
84
- style: {
85
- color: parseInt(shade) > 500 ? '#fff' : '#000',
86
- opacity: 0.8
87
- },
88
- children: shade
89
- })
90
- }, `accent-${shade}`))
91
- })]
92
- }), jsxs("div", {
93
- className: "grid grid-cols-3 gap-4",
94
- children: [jsxs("div", {
95
- children: [jsx("h3", {
96
- className: "mb-2 font-medium",
97
- style: {
98
- color: textColors.secondary
99
- },
100
- children: "Success"
101
- }), jsx("div", {
102
- className: "h-12 rounded flex items-center justify-center",
103
- style: {
104
- backgroundColor: theme.colors.success[500]
105
- },
106
- children: jsx("span", {
107
- className: "text-white font-medium",
108
- children: "Success"
109
- })
110
- })]
111
- }), jsxs("div", {
112
- children: [jsx("h3", {
113
- className: "mb-2 font-medium",
114
- style: {
115
- color: textColors.secondary
116
- },
117
- children: "Warning"
118
- }), jsx("div", {
119
- className: "h-12 rounded flex items-center justify-center",
120
- style: {
121
- backgroundColor: theme.colors.warning[500]
122
- },
123
- children: jsx("span", {
124
- className: "text-black font-medium",
125
- children: "Warning"
126
- })
127
- })]
128
- }), jsxs("div", {
129
- children: [jsx("h3", {
130
- className: "mb-2 font-medium",
131
- style: {
132
- color: textColors.secondary
133
- },
134
- children: "Error"
135
- }), jsx("div", {
136
- className: "h-12 rounded flex items-center justify-center",
137
- style: {
138
- backgroundColor: theme.colors.error[500]
139
- },
140
- children: jsx("span", {
141
- className: "text-white font-medium",
142
- children: "Error"
143
- })
144
- })]
145
- })]
146
- })]
147
- })]
148
- }), jsxs("section", {
149
- className: "space-y-4",
150
- children: [jsx("h2", {
151
- className: "text-2xl font-bold",
152
- style: {
153
- color: textColors.primary
154
- },
155
- children: "Typography"
156
- }), jsxs("div", {
157
- className: "space-y-6",
158
- children: [jsxs("div", {
159
- className: "space-y-3",
160
- children: [jsx("h1", {
161
- className: "text-4xl",
162
- style: {
163
- fontFamily: theme.fontFamily.sans.join(', '),
164
- fontWeight: theme.typography.headings.fontWeight,
165
- lineHeight: theme.typography.headings.lineHeight,
166
- letterSpacing: theme.typography.headings.letterSpacing,
167
- color: textColors.primary
168
- },
169
- children: "Heading 1"
170
- }), jsx("h2", {
171
- className: "text-3xl",
172
- style: {
173
- fontFamily: theme.fontFamily.sans.join(', '),
174
- fontWeight: theme.typography.headings.fontWeight,
175
- lineHeight: theme.typography.headings.lineHeight,
176
- letterSpacing: theme.typography.headings.letterSpacing,
177
- color: textColors.primary
178
- },
179
- children: "Heading 2"
180
- }), jsx("h3", {
181
- className: "text-2xl",
182
- style: {
183
- fontFamily: theme.fontFamily.sans.join(', '),
184
- fontWeight: theme.typography.headings.fontWeight,
185
- lineHeight: theme.typography.headings.lineHeight,
186
- letterSpacing: theme.typography.headings.letterSpacing,
187
- color: textColors.primary
188
- },
189
- children: "Heading 3"
190
- }), jsx("h4", {
191
- className: "text-xl",
192
- style: {
193
- fontFamily: theme.fontFamily.sans.join(', '),
194
- fontWeight: theme.typography.headings.fontWeight,
195
- lineHeight: theme.typography.headings.lineHeight,
196
- letterSpacing: theme.typography.headings.letterSpacing,
197
- color: textColors.primary
198
- },
199
- children: "Heading 4"
200
- })]
201
- }), jsxs("div", {
202
- className: "space-y-3",
203
- children: [jsxs("p", {
204
- className: "text-base",
205
- style: {
206
- fontFamily: theme.fontFamily.sans.join(', '),
207
- fontWeight: theme.typography.body.fontWeight,
208
- lineHeight: theme.typography.body.lineHeight,
209
- letterSpacing: theme.typography.body.letterSpacing,
210
- color: textColors.primary
211
- },
212
- children: ["This is regular body text in the ", theme.name, " theme. It demonstrates the default paragraph styling with appropriate line height and letter spacing."]
213
- }), jsx("p", {
214
- className: "text-sm",
215
- style: {
216
- fontFamily: theme.fontFamily.sans.join(', '),
217
- fontWeight: theme.typography.body.fontWeight,
218
- lineHeight: theme.typography.body.lineHeight,
219
- letterSpacing: theme.typography.body.letterSpacing,
220
- color: textColors.secondary
221
- },
222
- children: "This is smaller text that might be used for secondary information."
223
- }), jsx("p", {
224
- className: "text-xs",
225
- style: {
226
- fontFamily: theme.fontFamily.sans.join(', '),
227
- fontWeight: theme.typography.body.fontWeight,
228
- lineHeight: theme.typography.body.lineHeight,
229
- letterSpacing: theme.typography.body.letterSpacing,
230
- color: textColors.tertiary
231
- },
232
- children: "This is small text used for captions, hints, or metadata."
233
- })]
234
- }), jsxs("div", {
235
- children: [jsx("h3", {
236
- className: "mb-2 font-medium",
237
- style: {
238
- color: textColors.secondary
239
- },
240
- children: "Monospace"
241
- }), jsxs("code", {
242
- className: "text-sm block p-3 rounded",
243
- style: {
244
- fontFamily: theme.fontFamily.mono.join(', '),
245
- backgroundColor: isDarkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.05)',
246
- color: textColors.primary
247
- },
248
- children: ["console.log(\"Hello from the ", theme.name, " theme!\");"]
249
- })]
250
- })]
251
- })]
252
- }), jsxs("section", {
253
- className: "space-y-4",
254
- children: [jsx("h2", {
255
- className: "text-2xl font-bold",
256
- style: {
257
- color: textColors.primary
258
- },
259
- children: "Components"
260
- }), jsxs("div", {
261
- className: "space-y-6",
262
- children: [jsxs("div", {
263
- children: [jsx("h3", {
264
- className: "mb-4 font-medium",
265
- style: {
266
- color: textColors.secondary
267
- },
268
- children: "Buttons"
269
- }), jsxs("div", {
270
- className: "flex flex-wrap gap-4",
271
- children: [jsx("button", {
272
- className: "transition-all hover:scale-105",
273
- style: {
274
- backgroundColor: theme.components.buttons.primary.background,
275
- color: theme.components.buttons.primary.text,
276
- borderRadius: theme.components.buttons.primary.borderRadius,
277
- padding: theme.components.buttons.primary.padding,
278
- fontWeight: theme.components.buttons.primary.fontWeight
279
- },
280
- children: "Primary Button"
281
- }), jsx("button", {
282
- className: "transition-all hover:scale-105",
283
- style: {
284
- backgroundColor: theme.components.buttons.secondary.background,
285
- color: theme.components.buttons.secondary.text,
286
- border: theme.components.buttons.secondary.border,
287
- borderRadius: theme.components.buttons.secondary.borderRadius,
288
- padding: theme.components.buttons.secondary.padding,
289
- fontWeight: theme.components.buttons.secondary.fontWeight
290
- },
291
- children: "Secondary Button"
292
- })]
293
- })]
294
- }), jsxs("div", {
295
- children: [jsx("h3", {
296
- className: "mb-4 font-medium",
297
- style: {
298
- color: textColors.secondary
299
- },
300
- children: "Cards"
301
- }), jsxs("div", {
302
- className: "grid grid-cols-1 md:grid-cols-2 gap-6",
303
- children: [jsxs("div", {
304
- style: {
305
- borderRadius: theme.components.cards.borderRadius,
306
- padding: theme.components.cards.padding,
307
- boxShadow: theme.components.cards.shadow,
308
- border: theme.components.cards.border,
309
- backgroundColor: isDarkMode ? 'rgba(255, 255, 255, 0.05)' : 'white'
310
- },
311
- children: [jsx("h4", {
312
- className: "text-lg mb-2",
313
- style: {
314
- color: textColors.primary,
315
- fontWeight: theme.typography.headings.fontWeight
316
- },
317
- children: "Card Title"
318
- }), jsxs("p", {
319
- style: {
320
- color: textColors.secondary
321
- },
322
- children: ["This is an example card component styled according to the ", theme.name, " theme guidelines."]
323
- })]
324
- }), jsxs("div", {
325
- style: {
326
- borderRadius: theme.components.cards.borderRadius,
327
- padding: theme.components.cards.padding,
328
- boxShadow: theme.components.cards.shadow,
329
- border: theme.components.cards.border,
330
- backgroundColor: isDarkMode ? 'rgba(255, 255, 255, 0.05)' : 'white'
331
- },
332
- children: [jsx("h4", {
333
- className: "text-lg mb-2",
334
- style: {
335
- color: textColors.primary,
336
- fontWeight: theme.typography.headings.fontWeight
337
- },
338
- children: "Featured Content"
339
- }), jsx("p", {
340
- style: {
341
- color: textColors.secondary
342
- },
343
- children: "Cards can be used to highlight important content or provide interactive elements."
344
- }), jsx("button", {
345
- className: "mt-4 transition-all hover:scale-105",
346
- style: {
347
- backgroundColor: theme.components.buttons.primary.background,
348
- color: theme.components.buttons.primary.text,
349
- borderRadius: theme.components.buttons.primary.borderRadius,
350
- padding: '8px 16px',
351
- // Smaller for card context
352
- fontWeight: theme.components.buttons.primary.fontWeight
353
- },
354
- children: "Learn More"
355
- })]
356
- })]
357
- })]
358
- }), jsxs("div", {
359
- children: [jsx("h3", {
360
- className: "mb-4 font-medium",
361
- style: {
362
- color: textColors.secondary
363
- },
364
- children: "Form Controls"
365
- }), jsxs("div", {
366
- className: "space-y-4 max-w-md",
367
- children: [jsxs("div", {
368
- children: [jsx("label", {
369
- className: "block mb-2 text-sm font-medium",
370
- style: {
371
- color: textColors.secondary
372
- },
373
- children: "Text Input"
374
- }), jsx("input", {
375
- type: "text",
376
- placeholder: "Enter some text",
377
- className: "w-full transition-all focus:ring-2 focus:outline-none",
378
- style: {
379
- backgroundColor: isDarkMode ? 'rgba(255, 255, 255, 0.05)' : 'white',
380
- color: textColors.primary,
381
- borderRadius: theme.components.inputs.borderRadius,
382
- padding: theme.components.inputs.padding,
383
- fontSize: theme.components.inputs.fontSize,
384
- lineHeight: theme.components.inputs.lineHeight,
385
- border: `1px solid ${isDarkMode ? 'rgba(255, 255, 255, 0.2)' : theme.components.inputs.borderColor}`
386
- }
387
- })]
388
- }), jsxs("div", {
389
- children: [jsx("label", {
390
- className: "block mb-2 text-sm font-medium",
391
- style: {
392
- color: textColors.secondary
393
- },
394
- children: "Select Menu"
395
- }), jsxs("select", {
396
- className: "w-full transition-all focus:ring-2 focus:outline-none",
397
- style: {
398
- backgroundColor: isDarkMode ? 'rgba(255, 255, 255, 0.05)' : 'white',
399
- color: textColors.primary,
400
- borderRadius: theme.components.inputs.borderRadius,
401
- padding: theme.components.inputs.padding,
402
- fontSize: theme.components.inputs.fontSize,
403
- lineHeight: theme.components.inputs.lineHeight,
404
- border: `1px solid ${isDarkMode ? 'rgba(255, 255, 255, 0.2)' : theme.components.inputs.borderColor}`
405
- },
406
- children: [jsx("option", {
407
- children: "Option 1"
408
- }), jsx("option", {
409
- children: "Option 2"
410
- }), jsx("option", {
411
- children: "Option 3"
412
- })]
413
- })]
414
- }), jsxs("div", {
415
- className: "flex items-center",
416
- children: [jsx("input", {
417
- type: "checkbox",
418
- id: "checkbox-example",
419
- className: "mr-2 h-4 w-4 transition-all",
420
- style: {
421
- accentColor: theme.colors.primary[500]
422
- }
423
- }), jsx("label", {
424
- htmlFor: "checkbox-example",
425
- style: {
426
- color: textColors.primary
427
- },
428
- children: "Checkbox example"
429
- })]
430
- })]
431
- })]
432
- })]
433
- })]
434
- })]
435
- });
436
- };export{ThemeShowcase as default};//# sourceMappingURL=ThemeExample.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeExample.js","sources":["../../src/components/ThemeExample.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}