uisv 0.0.4 → 0.0.6

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 (48) hide show
  1. package/README.md +3 -0
  2. package/dist/components/alert.svelte +274 -0
  3. package/dist/components/alert.svelte.d.ts +24 -0
  4. package/dist/components/badge.svelte +227 -0
  5. package/dist/components/badge.svelte.d.ts +19 -0
  6. package/dist/components/banner.svelte +257 -0
  7. package/dist/components/banner.svelte.d.ts +24 -0
  8. package/dist/components/button.svelte +385 -0
  9. package/dist/components/button.svelte.d.ts +49 -0
  10. package/dist/components/card.svelte +70 -0
  11. package/dist/components/card.svelte.d.ts +17 -0
  12. package/dist/components/checkbox.svelte +176 -0
  13. package/dist/components/checkbox.svelte.d.ts +27 -0
  14. package/dist/components/checkboxgroup.svelte +260 -0
  15. package/dist/components/checkboxgroup.svelte.d.ts +26 -0
  16. package/dist/components/chip.svelte +82 -0
  17. package/dist/components/chip.svelte.d.ts +17 -0
  18. package/dist/components/h1.svelte +28 -0
  19. package/dist/components/h1.svelte.d.ts +11 -0
  20. package/dist/components/h2.svelte +30 -0
  21. package/dist/components/h2.svelte.d.ts +11 -0
  22. package/dist/components/index.d.ts +30 -0
  23. package/dist/components/index.js +30 -0
  24. package/dist/components/p.svelte +22 -0
  25. package/dist/components/p.svelte.d.ts +11 -0
  26. package/dist/components/pin-input.svelte +162 -0
  27. package/dist/components/pin-input.svelte.d.ts +25 -0
  28. package/dist/components/placeholder.svelte +32 -0
  29. package/dist/components/placeholder.svelte.d.ts +7 -0
  30. package/dist/components/progress.svelte +124 -0
  31. package/dist/components/progress.svelte.d.ts +21 -0
  32. package/dist/components/slider.svelte +172 -0
  33. package/dist/components/slider.svelte.d.ts +44 -0
  34. package/dist/components/switch.svelte +181 -0
  35. package/dist/components/switch.svelte.d.ts +27 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +2 -0
  38. package/dist/types.d.ts +7 -0
  39. package/dist/types.js +1 -0
  40. package/dist/utils/common.d.ts +14 -0
  41. package/dist/utils/common.js +18 -0
  42. package/dist/utils/keys.d.ts +8 -0
  43. package/dist/utils/keys.js +8 -0
  44. package/dist/utils/types.d.ts +1 -0
  45. package/dist/utils/types.js +1 -0
  46. package/dist/vite.d.ts +38 -0
  47. package/dist/vite.js +57 -0
  48. package/package.json +4 -4
@@ -0,0 +1,172 @@
1
+ <script module lang="ts">
2
+ import { Slider } from 'bits-ui';
3
+ import type { PropColor } from '../types.js';
4
+ import type { ClassNameValue } from 'tailwind-merge';
5
+ import { tv } from 'tailwind-variants';
6
+
7
+ export type SliderProps<T> = {
8
+ value?: T;
9
+ default?: number | number[];
10
+ color?: PropColor;
11
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
12
+ disabled?: boolean;
13
+ thumblabel?: boolean;
14
+ orientation?: 'vertical' | 'horizontal';
15
+ step?: number;
16
+ min?: number;
17
+ max?: number;
18
+ ui?: {
19
+ root?: ClassNameValue;
20
+ range?: ClassNameValue;
21
+ thumb?: ClassNameValue;
22
+ };
23
+ };
24
+ </script>
25
+
26
+ <script lang="ts" generics="T extends number | number[]">
27
+ let {
28
+ value = $bindable(),
29
+ default: def_value = 0,
30
+ color = 'primary',
31
+ size = 'md',
32
+ disabled,
33
+ thumblabel,
34
+ orientation = 'horizontal',
35
+ step,
36
+ min,
37
+ max,
38
+ ui = {}
39
+ }: SliderProps<T> = $props();
40
+
41
+ const default_value = $derived.by(() => {
42
+ if (typeof def_value === 'number') return [def_value];
43
+
44
+ return def_value;
45
+ });
46
+ let slider_value = $derived({
47
+ get() {
48
+ if (typeof value === 'number') return [value];
49
+
50
+ return (value as number[]) ?? default_value;
51
+ },
52
+ set(v: number[]) {
53
+ value = (v?.length !== 1 ? v : v[0]) as T;
54
+ }
55
+ });
56
+ const thumbs = $derived(slider_value.get()?.length ?? 1);
57
+ const classes = $derived.by(() =>
58
+ tv({
59
+ slots: {
60
+ root: [
61
+ 'relative w-full flex rounded-full bg-neutral-300',
62
+ orientation === 'horizontal' ? 'items-center' : 'justify-center mx-1'
63
+ ],
64
+ range: [
65
+ 'rounded-full bg-neutral-200 p-0.5 relative transition',
66
+ orientation === 'horizontal' ? 'h-full' : 'w-full'
67
+ ],
68
+ thumb: 'bg-white rounded-full border-2 outline-none transition',
69
+ tick: ''
70
+ },
71
+ variants: {
72
+ color: {
73
+ primary: {
74
+ root: '',
75
+ range: 'bg-primary-500',
76
+ thumb: 'border-primary-500'
77
+ },
78
+ secondary: {
79
+ range: ['bg-neutral-900'],
80
+ thumb: 'border-neutral-900'
81
+ },
82
+ info: {
83
+ range: ['bg-info-500'],
84
+ thumb: 'border-info-500'
85
+ },
86
+ success: {
87
+ range: ['bg-success-500'],
88
+ thumb: 'border-success-500'
89
+ },
90
+ warning: {
91
+ range: ['bg-warning-500'],
92
+ thumb: 'border-warning-500'
93
+ },
94
+ error: {
95
+ range: ['bg-error-500'],
96
+ thumb: 'border-error-500'
97
+ }
98
+ },
99
+ size: {
100
+ xs: {
101
+ root: [orientation === 'horizontal' ? 'h-1.5' : ''],
102
+ thumb: 'size-4',
103
+ tick: 'size-2.5'
104
+ },
105
+ sm: {
106
+ root: [orientation === 'horizontal' ? 'h-1.75' : ''],
107
+ thumb: 'size-4.5',
108
+ tick: 'size-3'
109
+ },
110
+ md: {
111
+ root: [orientation === 'horizontal' ? 'h-2' : 'w-2 h-48'],
112
+ thumb: 'size-5',
113
+ tick: 'size-3.5'
114
+ },
115
+ lg: {
116
+ root: [orientation === 'horizontal' ? 'h-2.5' : ''],
117
+ thumb: 'size-5.5',
118
+ tick: 'size-4'
119
+ },
120
+ xl: {
121
+ root: [orientation === 'horizontal' ? 'h-3' : 'w-3'],
122
+ thumb: 'size-6',
123
+ tick: 'size-4.5'
124
+ }
125
+ },
126
+ orientation: {
127
+ horizontal: {
128
+ root: '',
129
+ thumb: '',
130
+ tick: ''
131
+ },
132
+ vertical: {
133
+ root: '',
134
+ thumb: '',
135
+ tick: ''
136
+ }
137
+ }
138
+ },
139
+ compoundVariants: []
140
+ })({ color, size, orientation })
141
+ );
142
+ </script>
143
+
144
+ <Slider.Root
145
+ type="multiple"
146
+ bind:value={slider_value.get, slider_value.set}
147
+ {min}
148
+ {max}
149
+ {step}
150
+ {orientation}
151
+ {disabled}
152
+ class={classes.root({ class: [disabled ? 'opacity-75 cursor-not-allowed' : '', ui.root] })}
153
+ >
154
+ <Slider.Range class={classes.range({ class: [ui.range] })} />
155
+
156
+ {#each { length: thumbs }, index (index)}
157
+ <Slider.Thumb {index} class={classes.thumb({ class: ['group', ui.thumb] })}>
158
+ {#if thumblabel}
159
+ <Slider.ThumbLabel
160
+ {index}
161
+ position="bottom"
162
+ class={[
163
+ 'opacity-0 transition pointer-events-none text-sm shadow-md px-2 h-6 flex items-center rounded-md mt-1 border border-secondary-200',
164
+ 'data-[active=""]:(opacity-100) group-hover:(opacity-100)'
165
+ ]}
166
+ >
167
+ {slider_value.get()[index]}
168
+ </Slider.ThumbLabel>
169
+ {/if}
170
+ </Slider.Thumb>
171
+ {/each}
172
+ </Slider.Root>
@@ -0,0 +1,44 @@
1
+ import { Slider } from 'bits-ui';
2
+ import type { PropColor } from '../types.js';
3
+ import type { ClassNameValue } from 'tailwind-merge';
4
+ export type SliderProps<T> = {
5
+ value?: T;
6
+ default?: number | number[];
7
+ color?: PropColor;
8
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
+ disabled?: boolean;
10
+ thumblabel?: boolean;
11
+ orientation?: 'vertical' | 'horizontal';
12
+ step?: number;
13
+ min?: number;
14
+ max?: number;
15
+ ui?: {
16
+ root?: ClassNameValue;
17
+ range?: ClassNameValue;
18
+ thumb?: ClassNameValue;
19
+ };
20
+ };
21
+ declare function $$render<T extends number | number[]>(): {
22
+ props: SliderProps<T>;
23
+ exports: {};
24
+ bindings: "value";
25
+ slots: {};
26
+ events: {};
27
+ };
28
+ declare class __sveltets_Render<T extends number | number[]> {
29
+ props(): ReturnType<typeof $$render<T>>['props'];
30
+ events(): ReturnType<typeof $$render<T>>['events'];
31
+ slots(): ReturnType<typeof $$render<T>>['slots'];
32
+ bindings(): "value";
33
+ exports(): {};
34
+ }
35
+ interface $$IsomorphicComponent {
36
+ new <T extends number | number[]>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
37
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
38
+ } & ReturnType<__sveltets_Render<T>['exports']>;
39
+ <T extends number | number[]>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
40
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
41
+ }
42
+ declare const Slider: $$IsomorphicComponent;
43
+ type Slider<T extends number | number[]> = InstanceType<typeof Slider<T>>;
44
+ export default Slider;
@@ -0,0 +1,181 @@
1
+ <script module lang="ts">
2
+ import type { PropColor } from '../types.js';
3
+ import { isComponent, isSnippet } from '../utils/common.js';
4
+ import type { Snippet } from 'svelte';
5
+ import type { ClassNameValue } from 'tailwind-merge';
6
+ import { tv } from 'tailwind-variants';
7
+ import type { Component } from 'vitest-browser-svelte';
8
+
9
+ export type SwitchProps = {
10
+ value?: boolean;
11
+ color?: PropColor;
12
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
13
+ disabled?: boolean;
14
+ loading?: boolean;
15
+ loadingicon?: string | Snippet | Component;
16
+ uncheckedicon?: string | Snippet | Component;
17
+ checkedicon?: string | Snippet | Component;
18
+ label?: string | Snippet;
19
+ description?: string | Snippet;
20
+ required?: boolean;
21
+ ui?: {
22
+ root?: ClassNameValue;
23
+ container?: ClassNameValue;
24
+ thumb?: ClassNameValue;
25
+ label?: ClassNameValue;
26
+ description?: ClassNameValue;
27
+ };
28
+ };
29
+ </script>
30
+
31
+ <script lang="ts">
32
+ let {
33
+ value = $bindable(false),
34
+ color = 'primary',
35
+ size = 'md',
36
+ disabled,
37
+ loading,
38
+ loadingicon = 'i-lucide-loader-circle',
39
+ uncheckedicon,
40
+ checkedicon,
41
+ label,
42
+ description,
43
+ required,
44
+ ui = {}
45
+ }: SwitchProps = $props();
46
+
47
+ const classes = $derived.by(() =>
48
+ tv({
49
+ slots: {
50
+ root: 'flex-inline gap-2',
51
+ container: 'rounded-full bg-neutral-200 p-0.5 relative transition',
52
+ thumb: [
53
+ 'bg-white block rounded-full absolute top-0.5 transition grid place-items-center',
54
+ value ? 'translate-x-full' : 'text-neutral-500'
55
+ ],
56
+ icon: 'pi',
57
+ label: 'text-sm',
58
+ description: 'text-sm text-neutral-500'
59
+ },
60
+ variants: {
61
+ color: {
62
+ primary: {
63
+ container: ['', value && 'bg-primary-500 text-primary-500']
64
+ },
65
+ secondary: {
66
+ container: ['', value && 'bg-neutral-900 text-neutral-900']
67
+ },
68
+ info: {
69
+ container: ['', value && 'bg-info-500 text-info-500']
70
+ },
71
+ success: {
72
+ container: ['', value && 'bg-success-500 text-success-500']
73
+ },
74
+ warning: {
75
+ container: ['', value && 'bg-warning-500 text-warning-500']
76
+ },
77
+ error: {
78
+ container: ['', value && 'bg-error-500 text-error-500']
79
+ }
80
+ },
81
+ size: {
82
+ xs: {
83
+ container: 'w-7 min-w-7 h-4',
84
+ thumb: 'size-3',
85
+ icon: 'size-2.5'
86
+ },
87
+ sm: {
88
+ container: 'w-8 min-w-8 h-4.5',
89
+ thumb: 'size-3.5',
90
+ icon: 'size-3'
91
+ },
92
+ md: {
93
+ container: 'w-9 min-w-9 h-5',
94
+ thumb: 'size-4',
95
+ icon: 'size-3.5'
96
+ },
97
+ lg: {
98
+ container: 'w-10 min-w-10 h-5.5',
99
+ thumb: 'size-4.5',
100
+ icon: 'size-4'
101
+ },
102
+ xl: {
103
+ container: 'w-11 min-w-11 h-6',
104
+ thumb: 'size-5',
105
+ icon: 'size-4.5'
106
+ }
107
+ }
108
+ },
109
+ compoundVariants: []
110
+ })({ color, size })
111
+ );
112
+ </script>
113
+
114
+ <div
115
+ data-state={value ? 'checked' : 'unchecked'}
116
+ class={classes.root({
117
+ class: [(loading || disabled) && 'opacity-50', ui.thumb]
118
+ })}
119
+ >
120
+ <button
121
+ aria-label="switch"
122
+ data-state={value ? 'checked' : 'unchecked'}
123
+ class={classes.container({ class: [loading && 'cursor-not-allowed', ui.thumb] })}
124
+ onclick={() => {
125
+ console.log('click');
126
+ if (loading) return;
127
+ value = !value;
128
+ }}
129
+ >
130
+ <span data-state={value ? 'checked' : 'unchecked'} class={classes.thumb({ class: ui.thumb })}>
131
+ {@render Icon(uncheckedicon, [(loading || value) && 'opacity-0'])}
132
+ {@render Icon(checkedicon, [(loading || !value) && 'opacity-0'])}
133
+ {@render Icon(loadingicon || 'i-lucide-loader-circle', [
134
+ 'animate-spin',
135
+ !loading && 'opacity-0'
136
+ ])}
137
+ </span>
138
+ </button>
139
+
140
+ {#if label}
141
+ <span>
142
+ <div
143
+ class={classes.label({
144
+ class: [required ? 'after:content-["*"] after:text-error-500' : '', ui.thumb]
145
+ })}
146
+ >
147
+ {#if typeof label === 'string'}
148
+ {label}
149
+ {:else}
150
+ {@render label()}
151
+ {/if}
152
+ </div>
153
+
154
+ {#if description}
155
+ <div class={classes.description({ class: ui.thumb })}>
156
+ {#if typeof description === 'string'}
157
+ {description}
158
+ {:else}
159
+ {@render description()}
160
+ {/if}
161
+ </div>
162
+ {/if}
163
+ </span>
164
+ {/if}
165
+ </div>
166
+
167
+ {#snippet Icon(ico?: SwitchProps['checkedicon'], icon_class?: ClassNameValue)}
168
+ <div class={['absolute', icon_class]}>
169
+ {#if typeof ico === 'string'}
170
+ <div
171
+ data-state={value ? 'checked' : 'unchecked'}
172
+ class={classes.icon({ class: [ico] })}
173
+ ></div>
174
+ {:else if isSnippet(ico)}
175
+ {@render ico()}
176
+ {:else if isComponent(ico)}
177
+ {@const Iconn = ico}
178
+ <Iconn />
179
+ {/if}
180
+ </div>
181
+ {/snippet}
@@ -0,0 +1,27 @@
1
+ import type { PropColor } from '../types.js';
2
+ import type { Snippet } from 'svelte';
3
+ import type { ClassNameValue } from 'tailwind-merge';
4
+ import type { Component } from 'vitest-browser-svelte';
5
+ export type SwitchProps = {
6
+ value?: boolean;
7
+ color?: PropColor;
8
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
+ disabled?: boolean;
10
+ loading?: boolean;
11
+ loadingicon?: string | Snippet | Component;
12
+ uncheckedicon?: string | Snippet | Component;
13
+ checkedicon?: string | Snippet | Component;
14
+ label?: string | Snippet;
15
+ description?: string | Snippet;
16
+ required?: boolean;
17
+ ui?: {
18
+ root?: ClassNameValue;
19
+ container?: ClassNameValue;
20
+ thumb?: ClassNameValue;
21
+ label?: ClassNameValue;
22
+ description?: ClassNameValue;
23
+ };
24
+ };
25
+ declare const Switch: import("svelte").Component<SwitchProps, {}, "value">;
26
+ type Switch = ReturnType<typeof Switch>;
27
+ export default Switch;
@@ -0,0 +1,2 @@
1
+ export * from './components/index.js';
2
+ export * from './types.js';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './components/index.js';
2
+ export * from './types.js';
@@ -0,0 +1,7 @@
1
+ declare module '#theme/button' {
2
+ import button from './theme/button.ts';
3
+
4
+ export default ReturnType<typeof button>;
5
+ }
6
+
7
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { Snippet, Component } from 'svelte';
2
+ export declare const tv: import("tailwind-variants").TV;
3
+ /**
4
+ * Checks if a value is a Svelte snippet
5
+ * @param v - The value to check (should be Snippet | Component)
6
+ * @returns true if the value is a snippet, false otherwise
7
+ */
8
+ export declare const isSnippet: (v: unknown) => v is Snippet;
9
+ /**
10
+ * Checks if a value is a Svelte component
11
+ * @param v - The value to check (should be Snippet | Component)
12
+ * @returns true if the value is a component, false otherwise
13
+ */
14
+ export declare const isComponent: (v: unknown) => v is Component;
@@ -0,0 +1,18 @@
1
+ import { createTV } from 'tailwind-variants';
2
+ export const tv = createTV({});
3
+ /**
4
+ * Checks if a value is a Svelte snippet
5
+ * @param v - The value to check (should be Snippet | Component)
6
+ * @returns true if the value is a snippet, false otherwise
7
+ */
8
+ export const isSnippet = (v) => {
9
+ return typeof v === 'object' && v !== null && '$$render' in v;
10
+ };
11
+ /**
12
+ * Checks if a value is a Svelte component
13
+ * @param v - The value to check (should be Snippet | Component)
14
+ * @returns true if the value is a component, false otherwise
15
+ */
16
+ export const isComponent = (v) => {
17
+ return typeof v === 'function' || (typeof v === 'object' && v !== null && !('$$render' in v));
18
+ };
@@ -0,0 +1,8 @@
1
+ export declare const FORM_OPTION_CONTEXT_KEY: unique symbol;
2
+ export declare const FORM_BUS_CONTEXT_KEY: unique symbol;
3
+ export declare const FORM_STATE_CONTEXT_KEY: unique symbol;
4
+ export declare const FORM_FIELD_CONTEXT_KEY: unique symbol;
5
+ export declare const FORM_TID_CONTEXT_KEY: unique symbol;
6
+ export declare const FORM_INPUTS_CONTEXT_KEY: unique symbol;
7
+ export declare const FORM_LOADING_CONTEXT_KEY: unique symbol;
8
+ export declare const FORM_ERRORS_CONTEXT_KEY: unique symbol;
@@ -0,0 +1,8 @@
1
+ export const FORM_OPTION_CONTEXT_KEY = Symbol('uisv.form-options');
2
+ export const FORM_BUS_CONTEXT_KEY = Symbol('uisv.form-events');
3
+ export const FORM_STATE_CONTEXT_KEY = Symbol('uisv.form-state');
4
+ export const FORM_FIELD_CONTEXT_KEY = Symbol('uisv.form-field');
5
+ export const FORM_TID_CONTEXT_KEY = Symbol('uisv.input-id');
6
+ export const FORM_INPUTS_CONTEXT_KEY = Symbol('uisv.form-inputs');
7
+ export const FORM_LOADING_CONTEXT_KEY = Symbol('uisv.form-loading');
8
+ export const FORM_ERRORS_CONTEXT_KEY = Symbol('uisv.form-errors');
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";
package/dist/vite.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { type WebFontsOptions } from '@unocss/preset-web-fonts';
2
+ import type { PropColor } from './types.js';
3
+ export type PluginOptions = {
4
+ /**
5
+ * Colors as UnoCSS color name, hex color, or UnoCSS theme color object
6
+ * @example
7
+ * {
8
+ * primary: 'orange',
9
+ * secondary: 'neutral',
10
+ * info: '#00F',
11
+ * success: '#0F0',
12
+ * warning: 'FF0',
13
+ * error: {
14
+ * 50: '#fef2f2';
15
+ * 100: '#fee2e2';
16
+ * 200: '#fecaca';
17
+ * 300: '#fca5a5';
18
+ * 400: '#f87171';
19
+ * 500: '#ef4444';
20
+ * 600: '#dc2626';
21
+ * 700: '#b91c1c';
22
+ * 800: '#991b1b';
23
+ * 900: '#7f1d1d';
24
+ * 950: '#450a0a';
25
+ * }
26
+ * }
27
+ */
28
+ colors?: Partial<Record<PropColor, string | Record<number, string>>>;
29
+ /**
30
+ * Options for the UnoCSS web fonts plugin
31
+ */
32
+ fonts?: WebFontsOptions;
33
+ /**
34
+ * Corner radius for every* component
35
+ */
36
+ radius?: number;
37
+ };
38
+ export declare function uisv(options: Required<PluginOptions>): import("vite").Plugin<any>[][];
package/dist/vite.js ADDED
@@ -0,0 +1,57 @@
1
+ import uno_plugin from 'unocss/vite';
2
+ import { transformerVariantGroup, transformerCompileClass, transformerDirectives, presetWind4, presetWebFonts } from 'unocss';
3
+ import {} from '@unocss/preset-web-fonts';
4
+ import { presetIcons } from 'unocss';
5
+ import { defu } from 'defu';
6
+ import { getColors } from 'theme-colors';
7
+ export function uisv(options) {
8
+ const _opts = defu(options, {
9
+ colors: {
10
+ primary: 'orange',
11
+ secondary: 'neutral',
12
+ info: 'blue',
13
+ success: 'green',
14
+ warning: 'yellow',
15
+ error: 'red'
16
+ },
17
+ fonts: {
18
+ fonts: {
19
+ sans: 'Public Sans:400,500,600'
20
+ }
21
+ }
22
+ });
23
+ return [
24
+ uno_plugin({
25
+ theme: {
26
+ radius: {
27
+ base: `${_opts.radius || 0.375}rem`
28
+ }
29
+ },
30
+ preflights: [
31
+ {
32
+ getCSS: () => 'body { font-size: var(--font-sans);}'
33
+ }
34
+ ],
35
+ presets: [
36
+ presetWind4({
37
+ preflights: {
38
+ reset: true
39
+ }
40
+ }),
41
+ presetWebFonts(_opts.fonts),
42
+ presetIcons()
43
+ ],
44
+ transformers: [transformerVariantGroup(), transformerCompileClass(), transformerDirectives()],
45
+ extendTheme: (theme) => {
46
+ for (const [color, value] of Object.entries(_opts.colors)) {
47
+ if (typeof value !== 'string') {
48
+ theme.colors[color] = value;
49
+ continue;
50
+ }
51
+ const in_theme = theme.colors[value];
52
+ theme.colors[color] = in_theme ? in_theme : getColors(value);
53
+ }
54
+ }
55
+ })
56
+ ];
57
+ }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "uisv",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "ui library for the rest of us",
5
5
  "license": "MIT",
6
6
  "repository": "ui-sv/uisv",
7
- "homepage": "https://github.com/ui-sv/uisv",
7
+ "homepage": "https://uisv.pages.dev",
8
8
  "scripts": {
9
9
  "dev": "vite dev",
10
10
  "build": "vite build && npm run prepack",
@@ -45,6 +45,7 @@
45
45
  "devDependencies": {
46
46
  "@eslint/compat": "^1.2.5",
47
47
  "@eslint/js": "^9.22.0",
48
+ "@iconify-json/logos": "^1.2.9",
48
49
  "@iconify-json/lucide": "^1.2.68",
49
50
  "@iconify-json/solar": "^1.2.4",
50
51
  "@sveltejs/adapter-auto": "^6.0.0",
@@ -57,13 +58,13 @@
57
58
  "@unocss/reset": "^66.5.1",
58
59
  "@vitest/browser": "^3.2.3",
59
60
  "bits-ui": "^2.11.0",
60
- "carta-md": "^4.11.1",
61
61
  "defu": "^6.1.4",
62
62
  "eslint": "^9.22.0",
63
63
  "eslint-config-prettier": "^10.0.1",
64
64
  "eslint-plugin-svelte": "^3.0.0",
65
65
  "globals": "^16.0.0",
66
66
  "mdsvex": "^0.12.3",
67
+ "mode-watcher": "^1.1.0",
67
68
  "playwright": "^1.53.0",
68
69
  "prettier": "^3.4.2",
69
70
  "prettier-plugin-svelte": "^3.3.3",
@@ -73,7 +74,6 @@
73
74
  "svelte-check": "^4.0.0",
74
75
  "tailwind-merge": "^3.3.1",
75
76
  "tailwind-variants": "^3.1.1",
76
- "tailwindcss": "^4.1.13",
77
77
  "theme-colors": "^0.1.0",
78
78
  "typescript": "^5.0.0",
79
79
  "typescript-eslint": "^8.20.0",