@sigx/lynx-daisyui 0.1.3 → 0.4.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.
- package/README.md +109 -0
- package/dist/buttons/Button.js +53 -0
- package/dist/data/Avatar.js +46 -0
- package/dist/feedback/Alert.js +13 -0
- package/dist/feedback/Badge.js +17 -0
- package/dist/feedback/Loading.js +16 -0
- package/dist/feedback/Modal.js +23 -0
- package/dist/feedback/Progress.js +17 -0
- package/dist/feedback/Skeleton.js +18 -0
- package/dist/feedback/Steps.js +16 -0
- package/dist/forms/Checkbox.js +32 -0
- package/dist/forms/FormField.js +5 -0
- package/dist/forms/Input.js +25 -0
- package/dist/forms/Radio.js +28 -0
- package/dist/forms/Select.js +33 -0
- package/dist/forms/Textarea.js +31 -0
- package/dist/forms/Toggle.js +32 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +38 -552
- package/dist/layout/Card.js +39 -0
- package/dist/layout/Center.d.ts +2 -1
- package/dist/layout/Center.js +24 -0
- package/dist/layout/Col.d.ts +2 -2
- package/dist/layout/Col.js +33 -0
- package/dist/layout/Divider.js +27 -0
- package/dist/layout/Row.d.ts +2 -2
- package/dist/layout/Row.js +33 -0
- package/dist/layout/ScrollView.js +18 -0
- package/dist/layout/Spacer.js +11 -0
- package/dist/navigation/NavHeader.d.ts +32 -0
- package/dist/navigation/NavHeader.js +62 -0
- package/dist/navigation/NavTabBar.d.ts +36 -0
- package/dist/navigation/NavTabBar.js +58 -0
- package/dist/navigation/Tabs.js +18 -0
- package/dist/preset/index.js +66 -26
- package/dist/shared/press.d.ts +2 -0
- package/dist/shared/press.js +6 -0
- package/dist/shared/styles.d.ts +29 -1
- package/dist/shared/styles.js +90 -0
- package/dist/styles/index.css.d.ts +7 -0
- package/dist/theme/ThemeProvider.d.ts +82 -0
- package/dist/theme/ThemeProvider.js +83 -0
- package/dist/typography/Heading.js +19 -0
- package/dist/typography/Text.d.ts +11 -1
- package/dist/typography/Text.js +25 -0
- package/package.json +18 -9
- package/dist/index.js.map +0 -1
- package/dist/preset/index.js.map +0 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<ThemeProvider>` and `useTheme()` — daisyui theme switching for
|
|
3
|
+
* `@sigx/lynx-daisyui`.
|
|
4
|
+
*
|
|
5
|
+
* The package ships two color themes (`daisy-light`, `daisy-dark`) plus
|
|
6
|
+
* style modifier themes (`daisy-rounded`, `daisy-flat`). Each is a CSS
|
|
7
|
+
* class containing scoped `--color-*` / `--radius-*` / `--border-*`
|
|
8
|
+
* variable definitions; descendants of an element with the class
|
|
9
|
+
* inherit those variables (Lynx has `enableCSSInheritance: true` in
|
|
10
|
+
* its layout-pipeline defaults), and the daisyui components are built
|
|
11
|
+
* to read those vars directly.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
*
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { ThemeProvider, useTheme } from '@sigx/lynx-daisyui';
|
|
17
|
+
*
|
|
18
|
+
* defineApp(() => () => (
|
|
19
|
+
* <ThemeProvider initial="daisy-light">
|
|
20
|
+
* <App />
|
|
21
|
+
* </ThemeProvider>
|
|
22
|
+
* ));
|
|
23
|
+
*
|
|
24
|
+
* // Anywhere inside:
|
|
25
|
+
* const theme = useTheme();
|
|
26
|
+
* theme.toggle(); // daisy-light ↔ daisy-dark
|
|
27
|
+
* theme.set('daisy-dark'); // explicit
|
|
28
|
+
* theme.name; // 'daisy-light' | 'daisy-dark' | custom string
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* For multi-class compositions (color + modifier), set a custom string:
|
|
32
|
+
* `theme.set('daisy-light daisy-rounded')`.
|
|
33
|
+
*/
|
|
34
|
+
import { type Define } from '@sigx/lynx';
|
|
35
|
+
/**
|
|
36
|
+
* Theme class applied to the provider's host view. The two built-ins
|
|
37
|
+
* (`daisy-light` / `daisy-dark`) get autocomplete; arbitrary strings
|
|
38
|
+
* are accepted for custom themes or multi-class compositions like
|
|
39
|
+
* `'daisy-light daisy-rounded'`.
|
|
40
|
+
*/
|
|
41
|
+
export type DaisyTheme = 'daisy-light' | 'daisy-dark' | (string & {});
|
|
42
|
+
export interface ThemeController {
|
|
43
|
+
/** Current theme class. Reactive — read inside render/effect to track. */
|
|
44
|
+
readonly name: DaisyTheme;
|
|
45
|
+
/** Replace the active theme. */
|
|
46
|
+
set(name: DaisyTheme): void;
|
|
47
|
+
/**
|
|
48
|
+
* Flip between `daisy-light` and `daisy-dark`. When the active
|
|
49
|
+
* theme is neither (custom / multi-class), defaults to
|
|
50
|
+
* `daisy-dark` on first call.
|
|
51
|
+
*/
|
|
52
|
+
toggle(): void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Access the enclosing daisyui theme controller. Throws when used
|
|
56
|
+
* outside `<ThemeProvider>` — install a provider at your app root.
|
|
57
|
+
*/
|
|
58
|
+
export declare const useTheme: import("@sigx/runtime-core").InjectableFunction<ThemeController>;
|
|
59
|
+
export type ThemeProviderProps =
|
|
60
|
+
/** Initial theme class. Defaults to `daisy-light`. */
|
|
61
|
+
Define.Prop<'initial', DaisyTheme, false>
|
|
62
|
+
/** Extra classes appended to the theme class on the host view. */
|
|
63
|
+
& Define.Prop<'class', string, false>
|
|
64
|
+
/** Extra inline style on the host view. Merged after the base flex-fill defaults. */
|
|
65
|
+
& Define.Prop<'style', Record<string, string | number>, false> & Define.Slot<'default'>;
|
|
66
|
+
/**
|
|
67
|
+
* Wraps children in a `<view class={theme}>` so the daisyui CSS
|
|
68
|
+
* variables defined inside `.daisy-light` / `.daisy-dark` inherit
|
|
69
|
+
* down to every descendant.
|
|
70
|
+
*
|
|
71
|
+
* The host view defaults to flex-fill long-form so the wrapper doesn't
|
|
72
|
+
* collapse between ancestors that flex (e.g. `<SafeAreaProvider>`) and
|
|
73
|
+
* descendants that need a sized parent (`<SafeAreaView>`). Consumers
|
|
74
|
+
* override the layout via `style`.
|
|
75
|
+
*
|
|
76
|
+
* Theme name is held in an *object* signal (not a primitive) so the
|
|
77
|
+
* literal-union type survives — `signal<T>` widens primitive literals
|
|
78
|
+
* to plain `string` via `Widen<T>`.
|
|
79
|
+
*/
|
|
80
|
+
export declare const ThemeProvider: import("@sigx/runtime-core").ComponentFactory<ThemeProviderProps, void, {
|
|
81
|
+
default: () => import("@sigx/runtime-core").JSXElement | import("@sigx/runtime-core").JSXElement[] | null;
|
|
82
|
+
}>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@sigx/lynx/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* `<ThemeProvider>` and `useTheme()` — daisyui theme switching for
|
|
4
|
+
* `@sigx/lynx-daisyui`.
|
|
5
|
+
*
|
|
6
|
+
* The package ships two color themes (`daisy-light`, `daisy-dark`) plus
|
|
7
|
+
* style modifier themes (`daisy-rounded`, `daisy-flat`). Each is a CSS
|
|
8
|
+
* class containing scoped `--color-*` / `--radius-*` / `--border-*`
|
|
9
|
+
* variable definitions; descendants of an element with the class
|
|
10
|
+
* inherit those variables (Lynx has `enableCSSInheritance: true` in
|
|
11
|
+
* its layout-pipeline defaults), and the daisyui components are built
|
|
12
|
+
* to read those vars directly.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
*
|
|
16
|
+
* ```tsx
|
|
17
|
+
* import { ThemeProvider, useTheme } from '@sigx/lynx-daisyui';
|
|
18
|
+
*
|
|
19
|
+
* defineApp(() => () => (
|
|
20
|
+
* <ThemeProvider initial="daisy-light">
|
|
21
|
+
* <App />
|
|
22
|
+
* </ThemeProvider>
|
|
23
|
+
* ));
|
|
24
|
+
*
|
|
25
|
+
* // Anywhere inside:
|
|
26
|
+
* const theme = useTheme();
|
|
27
|
+
* theme.toggle(); // daisy-light ↔ daisy-dark
|
|
28
|
+
* theme.set('daisy-dark'); // explicit
|
|
29
|
+
* theme.name; // 'daisy-light' | 'daisy-dark' | custom string
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* For multi-class compositions (color + modifier), set a custom string:
|
|
33
|
+
* `theme.set('daisy-light daisy-rounded')`.
|
|
34
|
+
*/
|
|
35
|
+
import { component, defineInjectable, defineProvide, signal, } from '@sigx/lynx';
|
|
36
|
+
/**
|
|
37
|
+
* Access the enclosing daisyui theme controller. Throws when used
|
|
38
|
+
* outside `<ThemeProvider>` — install a provider at your app root.
|
|
39
|
+
*/
|
|
40
|
+
export const useTheme = defineInjectable(() => {
|
|
41
|
+
throw new Error('[lynx-daisyui] useTheme() called outside <ThemeProvider>. Wrap your app root with `<ThemeProvider initial="daisy-light">…</ThemeProvider>`.');
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Wraps children in a `<view class={theme}>` so the daisyui CSS
|
|
45
|
+
* variables defined inside `.daisy-light` / `.daisy-dark` inherit
|
|
46
|
+
* down to every descendant.
|
|
47
|
+
*
|
|
48
|
+
* The host view defaults to flex-fill long-form so the wrapper doesn't
|
|
49
|
+
* collapse between ancestors that flex (e.g. `<SafeAreaProvider>`) and
|
|
50
|
+
* descendants that need a sized parent (`<SafeAreaView>`). Consumers
|
|
51
|
+
* override the layout via `style`.
|
|
52
|
+
*
|
|
53
|
+
* Theme name is held in an *object* signal (not a primitive) so the
|
|
54
|
+
* literal-union type survives — `signal<T>` widens primitive literals
|
|
55
|
+
* to plain `string` via `Widen<T>`.
|
|
56
|
+
*/
|
|
57
|
+
export const ThemeProvider = component(({ props, slots }) => {
|
|
58
|
+
const state = signal({ name: props.initial ?? 'daisy-light' });
|
|
59
|
+
const controller = {
|
|
60
|
+
get name() { return state.name; },
|
|
61
|
+
set(next) { state.name = next; },
|
|
62
|
+
toggle() {
|
|
63
|
+
if (state.name === 'daisy-light')
|
|
64
|
+
state.name = 'daisy-dark';
|
|
65
|
+
else if (state.name === 'daisy-dark')
|
|
66
|
+
state.name = 'daisy-light';
|
|
67
|
+
else
|
|
68
|
+
state.name = 'daisy-dark';
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
defineProvide(useTheme, () => controller);
|
|
72
|
+
return () => {
|
|
73
|
+
const baseStyle = {
|
|
74
|
+
flexGrow: 1,
|
|
75
|
+
flexShrink: 1,
|
|
76
|
+
flexBasis: 0,
|
|
77
|
+
minHeight: 0,
|
|
78
|
+
display: 'flex',
|
|
79
|
+
flexDirection: 'column',
|
|
80
|
+
};
|
|
81
|
+
return (_jsx("view", { class: `${state.name}${props.class ? ' ' + props.class : ''}`, style: props.style ? { ...baseStyle, ...props.style } : baseStyle, children: slots.default?.() }));
|
|
82
|
+
};
|
|
83
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@sigx/lynx/jsx-runtime";
|
|
2
|
+
import { component } from '@sigx/lynx';
|
|
3
|
+
const levelClasses = {
|
|
4
|
+
1: 'text-3xl font-bold',
|
|
5
|
+
2: 'text-2xl font-bold',
|
|
6
|
+
3: 'text-xl font-semibold',
|
|
7
|
+
4: 'text-lg font-semibold',
|
|
8
|
+
5: 'text-base font-semibold',
|
|
9
|
+
6: 'text-sm font-semibold',
|
|
10
|
+
};
|
|
11
|
+
export const Heading = component(({ props, slots }) => {
|
|
12
|
+
const getClasses = () => {
|
|
13
|
+
const c = [levelClasses[props.level ?? 2], 'text-base-content'];
|
|
14
|
+
if (props.class)
|
|
15
|
+
c.push(props.class);
|
|
16
|
+
return c.join(' ');
|
|
17
|
+
};
|
|
18
|
+
return () => _jsx("text", { class: getClasses(), children: slots.default?.() });
|
|
19
|
+
});
|
|
@@ -2,7 +2,17 @@ import { type Define } from '@sigx/lynx';
|
|
|
2
2
|
export type TextSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl';
|
|
3
3
|
export type TextWeight = 'light' | 'normal' | 'medium' | 'semibold' | 'bold';
|
|
4
4
|
export type TextColor = 'base-content' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
|
|
5
|
-
export type TextProps = Define.Prop<'size', TextSize, false> & Define.Prop<'weight', TextWeight, false> & Define.Prop<'color', TextColor, false> & Define.Prop<'class', string, false>
|
|
5
|
+
export type TextProps = Define.Prop<'size', TextSize, false> & Define.Prop<'weight', TextWeight, false> & Define.Prop<'color', TextColor, false> & Define.Prop<'class', string, false>
|
|
6
|
+
/**
|
|
7
|
+
* Allow native text selection (long-press to select, system copy menu).
|
|
8
|
+
* Maps to Lynx 3.7+'s `text-selection` attribute.
|
|
9
|
+
*/
|
|
10
|
+
& Define.Prop<'selectable', boolean, false>
|
|
11
|
+
/**
|
|
12
|
+
* When `selectable` is enabled, suppress the system context menu so the
|
|
13
|
+
* app can render its own. Maps to Lynx 3.7+'s `custom-text-selection`.
|
|
14
|
+
*/
|
|
15
|
+
& Define.Prop<'customSelection', boolean, false> & Define.Slot<'default'>;
|
|
6
16
|
export declare const Text: import("@sigx/runtime-core").ComponentFactory<TextProps, void, {
|
|
7
17
|
default: () => import("@sigx/runtime-core").JSXElement | import("@sigx/runtime-core").JSXElement[] | null;
|
|
8
18
|
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@sigx/lynx/jsx-runtime";
|
|
2
|
+
import { component } from '@sigx/lynx';
|
|
3
|
+
const sizeClasses = {
|
|
4
|
+
xs: 'text-xs', sm: 'text-sm', base: 'text-base', lg: 'text-lg',
|
|
5
|
+
xl: 'text-xl', '2xl': 'text-2xl', '3xl': 'text-3xl',
|
|
6
|
+
};
|
|
7
|
+
const weightClasses = {
|
|
8
|
+
light: 'font-light', normal: 'font-normal', medium: 'font-medium',
|
|
9
|
+
semibold: 'font-semibold', bold: 'font-bold',
|
|
10
|
+
};
|
|
11
|
+
export const Text = component(({ props, slots }) => {
|
|
12
|
+
const getClasses = () => {
|
|
13
|
+
const c = [];
|
|
14
|
+
if (props.size)
|
|
15
|
+
c.push(sizeClasses[props.size]);
|
|
16
|
+
if (props.weight)
|
|
17
|
+
c.push(weightClasses[props.weight]);
|
|
18
|
+
if (props.color)
|
|
19
|
+
c.push(`text-${props.color}`);
|
|
20
|
+
if (props.class)
|
|
21
|
+
c.push(props.class);
|
|
22
|
+
return c.join(' ');
|
|
23
|
+
};
|
|
24
|
+
return () => (_jsx("text", { class: getClasses(), "text-selection": props.selectable, "custom-text-selection": props.customSelection, children: slots.default?.() }));
|
|
25
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sigx/lynx-daisyui",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "DaisyUI integration for sigx-lynx",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
"import": "./dist/preset/index.js",
|
|
16
16
|
"default": "./dist/preset/index.js"
|
|
17
17
|
},
|
|
18
|
-
"./styles":
|
|
18
|
+
"./styles": {
|
|
19
|
+
"types": "./dist/styles/index.css.d.ts",
|
|
20
|
+
"default": "./dist/styles/index.css"
|
|
21
|
+
},
|
|
19
22
|
"./package.json": "./package.json"
|
|
20
23
|
},
|
|
21
24
|
"repository": {
|
|
@@ -34,17 +37,23 @@
|
|
|
34
37
|
"LICENSE"
|
|
35
38
|
],
|
|
36
39
|
"dependencies": {
|
|
37
|
-
"@sigx/lynx": "^0.1
|
|
40
|
+
"@sigx/lynx": "^0.4.1",
|
|
41
|
+
"@sigx/lynx-gestures": "^0.4.1"
|
|
38
42
|
},
|
|
39
43
|
"peerDependencies": {
|
|
40
|
-
"tailwindcss": "^3.0.0 || ^4.0.0"
|
|
44
|
+
"tailwindcss": "^3.0.0 || ^4.0.0",
|
|
45
|
+
"@sigx/lynx-navigation": "^0.4.1"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"@sigx/lynx-navigation": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
41
51
|
},
|
|
42
52
|
"devDependencies": {
|
|
43
|
-
"@sigx/vite": "^0.4.3",
|
|
44
53
|
"@typescript/native-preview": "7.0.0-dev.20260511.1",
|
|
45
54
|
"tailwindcss": "^4.0.0",
|
|
46
55
|
"typescript": "^6.0.3",
|
|
47
|
-
"
|
|
56
|
+
"@sigx/lynx-navigation": "^0.4.1"
|
|
48
57
|
},
|
|
49
58
|
"publishConfig": {
|
|
50
59
|
"access": "public"
|
|
@@ -60,8 +69,8 @@
|
|
|
60
69
|
"author": "Andreas Ekdahl",
|
|
61
70
|
"license": "MIT",
|
|
62
71
|
"scripts": {
|
|
63
|
-
"build": "
|
|
64
|
-
"dev": "
|
|
65
|
-
"clean": "
|
|
72
|
+
"build": "node ../../scripts/clean.mjs dist && tsgo && node ../../scripts/copy-assets.mjs src/styles dist/styles",
|
|
73
|
+
"dev": "tsgo --watch",
|
|
74
|
+
"clean": "node ../../scripts/clean.mjs dist .turbo"
|
|
66
75
|
}
|
|
67
76
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/feedback/Loading.tsx","../src/buttons/Button.tsx","../src/layout/Card.tsx","../src/shared/styles.ts","../src/layout/Row.tsx","../src/layout/Col.tsx","../src/layout/Center.tsx","../src/layout/Spacer.tsx","../src/layout/ScrollView.tsx","../src/layout/Divider.tsx","../src/forms/Input.tsx","../src/forms/Toggle.tsx","../src/forms/Checkbox.tsx","../src/forms/Select.tsx","../src/forms/Radio.tsx","../src/forms/Textarea.tsx","../src/forms/FormField.tsx","../src/feedback/Badge.tsx","../src/feedback/Alert.tsx","../src/feedback/Progress.tsx","../src/feedback/Modal.tsx","../src/feedback/Skeleton.tsx","../src/feedback/Steps.tsx","../src/navigation/Tabs.tsx","../src/data/Avatar.tsx","../src/typography/Text.tsx","../src/typography/Heading.tsx"],"sourcesContent":["import { component, type Define } from '@sigx/lynx';\n\nexport type LoadingType = 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';\nexport type LoadingSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type LoadingColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport type LoadingProps =\n & Define.Prop<'type', LoadingType, false>\n & Define.Prop<'size', LoadingSize, false>\n & Define.Prop<'color', LoadingColor, false>\n & Define.Prop<'class', string, false>;\n\nexport const Loading = component<LoadingProps>(({ props }) => {\n const getClasses = () => {\n const c = ['loading'];\n c.push(`loading-${props.type ?? 'spinner'}`);\n if (props.size) c.push(`loading-${props.size}`);\n if (props.color) c.push(`text-${props.color}`);\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <view class={getClasses()} />;\n});\n","import { component, type Define } from '@sigx/lynx';\nimport { Loading } from '../feedback/Loading.js';\n\nexport type ButtonVariant =\n | 'primary' | 'secondary' | 'accent' | 'info'\n | 'success' | 'warning' | 'error' | 'ghost'\n | 'link' | 'neutral';\n\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport type ButtonProps =\n & Define.Prop<'variant', ButtonVariant, false>\n & Define.Prop<'size', ButtonSize, false>\n & Define.Prop<'outline', boolean, false>\n & Define.Prop<'soft', boolean, false>\n & Define.Prop<'wide', boolean, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'loading', boolean, false>\n & Define.Prop<'block', boolean, false>\n & Define.Prop<'circle', boolean, false>\n & Define.Prop<'square', boolean, false>\n & Define.Prop<'active', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>\n & Define.Event<'press', void>;\n\nconst variantClasses: Record<ButtonVariant, string> = {\n primary: 'btn-primary', secondary: 'btn-secondary', accent: 'btn-accent',\n info: 'btn-info', success: 'btn-success', warning: 'btn-warning',\n error: 'btn-error', ghost: 'btn-ghost', link: 'btn-link', neutral: 'btn-neutral',\n};\n\nconst sizeClasses: Record<ButtonSize, string> = {\n xs: 'btn-xs', sm: 'btn-sm', md: '', lg: 'btn-lg', xl: 'btn-xl',\n};\n\nexport const Button = component<ButtonProps>(({ props, slots, emit }) => {\n const getClasses = () => {\n const c = ['btn'];\n if (props.variant) c.push(variantClasses[props.variant]);\n if (props.size) { const s = sizeClasses[props.size]; if (s) c.push(s); }\n if (props.outline) c.push('btn-outline');\n if (props.soft) c.push('btn-soft');\n if (props.wide) c.push('btn-wide');\n if (props.loading) c.push('btn-loading');\n if (props.block) c.push('btn-block');\n if (props.circle) c.push('btn-circle');\n if (props.square) c.push('btn-square');\n if (props.active) c.push('btn-active');\n if (props.disabled) c.push('btn-disabled');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => (\n <view\n class={getClasses()}\n bindtap={() => { if (!props.disabled && !props.loading) emit('press'); }}\n >\n {props.loading\n ? <Loading type=\"spinner\" size=\"sm\" />\n : slots.default?.()}\n </view>\n );\n});\n","import { component, compound, type Define } from '@sigx/lynx';\n\nexport type CardProps =\n & Define.Prop<'bordered', boolean, false>\n & Define.Prop<'shadow', boolean | 'sm' | 'md' | 'lg', false>\n & Define.Prop<'compact', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst _Card = component<CardProps>(({ props, slots }) => {\n const getClasses = () => {\n const c = ['card'];\n if (props.bordered) c.push('card-bordered');\n if (props.compact) c.push('card-compact');\n if (props.shadow === true) c.push('shadow-md');\n else if (props.shadow === 'sm') c.push('shadow-sm');\n else if (props.shadow === 'md') c.push('shadow-md');\n else if (props.shadow === 'lg') c.push('shadow-lg');\n else if (props.shadow === undefined) c.push('shadow-md');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <view class={getClasses()}>{slots.default?.()}</view>;\n});\n\ntype CardBodyProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst CardBody = component<CardBodyProps>(({ props, slots }) => {\n return () => (\n <view class={`card-body${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\ntype CardTitleProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst CardTitle = component<CardTitleProps>(({ props, slots }) => {\n return () => (\n <text class={`card-title${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </text>\n );\n});\n\ntype CardActionsProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst CardActions = component<CardActionsProps>(({ props, slots }) => {\n return () => (\n <view class={`card-actions${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\nexport const Card = compound(_Card, {\n Body: CardBody,\n Title: CardTitle,\n Actions: CardActions,\n});\n","export type SpacingValue = number | {\n x?: number;\n y?: number;\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n};\n\nexport interface BoxProps {\n width?: number | string;\n height?: number | string;\n flex?: number;\n background?: string;\n borderRadius?: number;\n padding?: SpacingValue;\n margin?: SpacingValue;\n}\n\nexport function resolveSpacing(\n value: SpacingValue | undefined,\n prefix: 'padding' | 'margin'\n): Record<string, number> {\n if (value === undefined) return {};\n\n if (typeof value === 'number') {\n return {\n [`${prefix}Top`]: value,\n [`${prefix}Right`]: value,\n [`${prefix}Bottom`]: value,\n [`${prefix}Left`]: value,\n };\n }\n\n const style: Record<string, number> = {};\n\n if (value.top !== undefined) style[`${prefix}Top`] = value.top;\n else if (value.y !== undefined) style[`${prefix}Top`] = value.y;\n\n if (value.bottom !== undefined) style[`${prefix}Bottom`] = value.bottom;\n else if (value.y !== undefined) style[`${prefix}Bottom`] = value.y;\n\n if (value.right !== undefined) style[`${prefix}Right`] = value.right;\n else if (value.x !== undefined) style[`${prefix}Right`] = value.x;\n\n if (value.left !== undefined) style[`${prefix}Left`] = value.left;\n else if (value.x !== undefined) style[`${prefix}Left`] = value.x;\n\n return style;\n}\n\nexport function resolveBoxStyle(props: BoxProps): Record<string, unknown> {\n const style: Record<string, unknown> = {};\n\n if (props.width !== undefined) style.width = props.width;\n if (props.height !== undefined) style.height = props.height;\n if (props.flex !== undefined) style.flex = props.flex;\n if (props.background !== undefined) style.backgroundColor = props.background;\n if (props.borderRadius !== undefined) style.borderRadius = props.borderRadius;\n\n Object.assign(style, resolveSpacing(props.padding, 'padding'));\n Object.assign(style, resolveSpacing(props.margin, 'margin'));\n\n return style;\n}\n","import { component, type Define } from '@sigx/lynx';\nimport { type SpacingValue, type BoxProps, resolveSpacing, resolveBoxStyle } from '../shared/styles.js';\n\nexport type RowProps =\n & Define.Prop<'gap', number, false>\n & Define.Prop<'align', 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline', false>\n & Define.Prop<'justify', 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly', false>\n & Define.Prop<'wrap', boolean, false>\n & Define.Prop<'padding', SpacingValue, false>\n & Define.Prop<'margin', SpacingValue, false>\n & Define.Prop<'width', number | string, false>\n & Define.Prop<'height', number | string, false>\n & Define.Prop<'flex', number, false>\n & Define.Prop<'background', string, false>\n & Define.Prop<'borderRadius', number, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const Row = component<RowProps>(({ props, slots }) => {\n const getStyle = (): Record<string, string | number> => {\n const style: Record<string, string | number> = {\n display: 'flex',\n flexDirection: 'row',\n };\n\n if (props.gap !== undefined) style.gap = props.gap;\n if (props.align) style.alignItems = props.align;\n if (props.justify) style.justifyContent = props.justify;\n if (props.wrap) style.flexWrap = 'wrap';\n\n const box = resolveBoxStyle({\n width: props.width,\n height: props.height,\n flex: props.flex,\n background: props.background,\n borderRadius: props.borderRadius,\n padding: props.padding,\n margin: props.margin,\n });\n for (const key in box) {\n style[key] = box[key] as string | number;\n }\n\n return style;\n };\n\n return () => (\n <view class={props.class} style={getStyle()}>\n {slots.default?.()}\n </view>\n );\n});\n","import { component, type Define } from '@sigx/lynx';\nimport { type SpacingValue, type BoxProps, resolveSpacing, resolveBoxStyle } from '../shared/styles.js';\n\nexport type ColProps =\n & Define.Prop<'gap', number, false>\n & Define.Prop<'align', 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline', false>\n & Define.Prop<'justify', 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly', false>\n & Define.Prop<'wrap', boolean, false>\n & Define.Prop<'padding', SpacingValue, false>\n & Define.Prop<'margin', SpacingValue, false>\n & Define.Prop<'width', number | string, false>\n & Define.Prop<'height', number | string, false>\n & Define.Prop<'flex', number, false>\n & Define.Prop<'background', string, false>\n & Define.Prop<'borderRadius', number, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const Col = component<ColProps>(({ props, slots }) => {\n const getStyle = (): Record<string, string | number> => {\n const style: Record<string, string | number> = {\n display: 'flex',\n flexDirection: 'column',\n };\n\n if (props.gap !== undefined) style.gap = props.gap;\n if (props.align) style.alignItems = props.align;\n if (props.justify) style.justifyContent = props.justify;\n if (props.wrap) style.flexWrap = 'wrap';\n\n const box = resolveBoxStyle({\n width: props.width,\n height: props.height,\n flex: props.flex,\n background: props.background,\n borderRadius: props.borderRadius,\n padding: props.padding,\n margin: props.margin,\n });\n for (const key in box) {\n style[key] = box[key] as string | number;\n }\n\n return style;\n };\n\n return () => (\n <view class={props.class} style={getStyle()}>\n {slots.default?.()}\n </view>\n );\n});\n","import { component, type Define } from '@sigx/lynx';\nimport { resolveBoxStyle } from '../shared/styles.js';\n\nexport type CenterProps =\n & Define.Prop<'width', number | string, false>\n & Define.Prop<'height', number | string, false>\n & Define.Prop<'flex', number, false>\n & Define.Prop<'background', string, false>\n & Define.Prop<'borderRadius', number, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const Center = component<CenterProps>(({ props, slots }) => {\n const getStyle = (): Record<string, string | number> => {\n const style: Record<string, string | number> = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n };\n\n const box = resolveBoxStyle({\n width: props.width,\n height: props.height,\n flex: props.flex,\n background: props.background,\n borderRadius: props.borderRadius,\n });\n for (const key in box) {\n style[key] = box[key] as string | number;\n }\n\n return style;\n };\n\n return () => (\n <view class={props.class} style={getStyle()}>\n {slots.default?.()}\n </view>\n );\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type SpacerProps =\n & Define.Prop<'size', number, false>\n & Define.Prop<'class', string, false>;\n\nexport const Spacer = component<SpacerProps>(({ props }) => {\n const getStyle = (): Record<string, string | number> => {\n if (props.size !== undefined) {\n return { width: props.size, height: props.size };\n }\n return { flex: 1 };\n };\n\n return () => (\n <view class={props.class} style={getStyle()} />\n );\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type ScrollViewProps =\n & Define.Prop<'direction', 'vertical' | 'horizontal', false>\n & Define.Prop<'height', number | string, false>\n & Define.Prop<'width', number | string, false>\n & Define.Prop<'flex', number, false>\n & Define.Prop<'showScrollbar', boolean, false>\n & Define.Prop<'bounces', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const ScrollView = component<ScrollViewProps>(({ props, slots }) => {\n const getStyle = (): Record<string, string | number> => {\n const style: Record<string, string | number> = {};\n if (props.height !== undefined) style.height = props.height;\n if (props.width !== undefined) style.width = props.width;\n if (props.flex !== undefined) style.flex = props.flex;\n return style;\n };\n\n return () => {\n const dir = props.direction ?? 'vertical';\n return (\n <scroll-view\n class={props.class}\n style={getStyle()}\n scroll-orientation={dir}\n scroll-y={dir === 'vertical' ? true : undefined}\n scroll-x={dir === 'horizontal' ? true : undefined}\n show-scrollbar={props.showScrollbar}\n bounces={props.bounces}\n >\n {slots.default?.()}\n </scroll-view>\n );\n };\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type DividerProps =\n & Define.Prop<'vertical', boolean, false>\n & Define.Prop<'color', string, false>\n & Define.Prop<'margin', number, false>\n & Define.Prop<'class', string, false>;\n\nexport const Divider = component<DividerProps>(({ props }) => {\n const getClasses = () => {\n const c = [props.vertical ? 'divider-vertical' : 'divider'];\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n const getStyle = (): Record<string, string | number> => {\n const style: Record<string, string | number> = {};\n if (props.color) style.backgroundColor = props.color;\n if (props.margin !== undefined) {\n if (props.vertical) {\n style.marginLeft = props.margin;\n style.marginRight = props.margin;\n } else {\n style.marginTop = props.margin;\n style.marginBottom = props.margin;\n }\n }\n return style;\n };\n\n return () => (\n <view class={getClasses()} style={getStyle()} />\n );\n});\n","import { component, type Define, type Model } from '@sigx/lynx';\n\nexport type InputSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type InputVariant = 'bordered' | 'ghost';\nexport type InputColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport type InputProps =\n & Define.Prop<'placeholder', string, false>\n & Define.Prop<'size', InputSize, false>\n & Define.Prop<'variant', InputVariant, false>\n & Define.Prop<'color', InputColor, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'type', 'text' | 'number' | 'password', false>\n & Define.Prop<'class', string, false>\n & Define.Model<string>;\n\nconst sizeClasses: Record<InputSize, string> = {\n xs: 'input-xs', sm: 'input-sm', md: '', lg: 'input-lg',\n};\n\nexport const Input = component<InputProps>(({ props }) => {\n const getClasses = () => {\n const c = ['input'];\n if (props.variant === 'bordered') c.push('input-bordered');\n if (props.variant === 'ghost') c.push('input-ghost');\n if (props.color) c.push(`input-${props.color}`);\n if (props.size) { const s = sizeClasses[props.size]; if (s) c.push(s); }\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => (\n <input\n class={getClasses()}\n placeholder={props.placeholder}\n type={props.type ?? 'text'}\n disabled={props.disabled}\n model={props.model}\n />\n );\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type ToggleColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\nexport type ToggleSize = 'xs' | 'sm' | 'md' | 'lg';\n\nexport type ToggleProps =\n & Define.Prop<'checked', boolean, false>\n & Define.Prop<'color', ToggleColor, false>\n & Define.Prop<'size', ToggleSize, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Event<'change', boolean>;\n\nconst thumbOffsetMap: Record<ToggleSize, number> = {\n xs: 10, sm: 16, md: 20, lg: 24,\n};\n\nexport const Toggle = component<ToggleProps>(({ props, emit }) => {\n const getClasses = () => {\n const c = ['toggle'];\n const size = props.size ?? 'md';\n c.push(`toggle-${size}`);\n if (props.color) c.push(`toggle-${props.color}`);\n if (props.checked) c.push('toggle-checked');\n if (props.disabled) c.push('toggle-disabled');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => {\n const checked = !!props.checked;\n const size = props.size ?? 'md';\n const offset = checked ? thumbOffsetMap[size] : 0;\n\n return (\n <view\n class={getClasses()}\n bindtap={() => {\n if (!props.disabled) emit('change', !checked);\n }}\n >\n <view\n class=\"toggle-thumb\"\n style={{ transform: `translateX(${offset}px)` }}\n />\n </view>\n );\n };\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type CheckboxColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\nexport type CheckboxSize = 'xs' | 'sm' | 'md' | 'lg';\n\nexport type CheckboxProps =\n & Define.Prop<'checked', boolean, false>\n & Define.Prop<'color', CheckboxColor, false>\n & Define.Prop<'size', CheckboxSize, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Event<'change', boolean>;\n\nconst checkmarkSizeMap: Record<CheckboxSize, number> = {\n xs: 10, sm: 12, md: 14, lg: 19,\n};\n\nexport const Checkbox = component<CheckboxProps>(({ props, emit }) => {\n const getClasses = () => {\n const c = ['checkbox'];\n const size = props.size ?? 'md';\n if (size !== 'md') c.push(`checkbox-${size}`);\n if (props.color) c.push(`checkbox-${props.color}`);\n if (props.checked) c.push('checkbox-checked');\n if (props.disabled) c.push('checkbox-disabled');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => {\n const checked = !!props.checked;\n const size = props.size ?? 'md';\n\n return (\n <view\n class={getClasses()}\n bindtap={() => {\n if (!props.disabled) emit('change', !checked);\n }}\n >\n {checked ? (\n <text class=\"checkbox-mark\" style={{ fontSize: checkmarkSizeMap[size] }}>✓</text>\n ) : null}\n </view>\n );\n };\n});\n","import { component, signal, type Define } from '@sigx/lynx';\n\nexport type SelectSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type SelectVariant = 'bordered' | 'ghost';\nexport type SelectColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport type SelectProps =\n & Define.Prop<'options', SelectOption[], false>\n & Define.Prop<'value', string, false>\n & Define.Prop<'placeholder', string, false>\n & Define.Prop<'size', SelectSize, false>\n & Define.Prop<'variant', SelectVariant, false>\n & Define.Prop<'color', SelectColor, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Event<'change', string>;\n\nexport const Select = component<SelectProps>(({ props, emit }) => {\n const state = signal({ open: false });\n\n const getClasses = () => {\n const c = ['select'];\n if (props.variant === 'bordered') c.push('select-bordered');\n if (props.variant === 'ghost') c.push('select-ghost');\n if (props.color) c.push(`select-${props.color}`);\n if (props.size) c.push(`select-${props.size}`);\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n const getSelectedLabel = () => {\n const opts = props.options ?? [];\n const found = opts.find((o) => o.value === props.value);\n return found ? found.label : (props.placeholder ?? 'Select...');\n };\n\n return () => (\n <view style={{ position: 'relative', opacity: props.disabled ? 0.5 : 1 }}>\n <view\n class={getClasses()}\n bindtap={() => {\n if (!props.disabled) state.open = !state.open;\n }}\n >\n <text>{getSelectedLabel()}</text>\n <view style={{ marginLeft: 'auto' }}><text>{state.open ? '▲' : '▼'}</text></view>\n </view>\n\n {state.open && !props.disabled && (\n <view class=\"select-dropdown\" style={{ position: 'absolute', top: '100%', left: 0, right: 0, zIndex: 10 }}>\n {(props.options ?? []).map((option) => (\n <view\n class={`select-option${option.value === props.value ? ' select-option-active' : ''}`}\n bindtap={() => {\n emit('change', option.value);\n state.open = false;\n }}\n >\n <text>{option.label}</text>\n </view>\n ))}\n </view>\n )}\n </view>\n );\n});\n","import { component, compound, type Define } from '@sigx/lynx';\n\nexport type RadioColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\nexport type RadioSize = 'xs' | 'sm' | 'md' | 'lg';\n\nexport type RadioGroupProps =\n & Define.Prop<'value', string, false>\n & Define.Prop<'color', RadioColor, false>\n & Define.Prop<'size', RadioSize, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>\n & Define.Event<'change', string>;\n\nexport type RadioItemProps =\n & Define.Prop<'value', string, false>\n & Define.Prop<'label', string, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'checked', boolean, false>\n & Define.Prop<'color', RadioColor, false>\n & Define.Prop<'size', RadioSize, false>\n & Define.Prop<'class', string, false>\n & Define.Event<'select', string>;\n\nconst RadioItem = component<RadioItemProps>(({ props, emit }) => {\n const getClasses = () => {\n const c = ['radio'];\n if (props.color) c.push(`radio-${props.color}`);\n if (props.size) c.push(`radio-${props.size}`);\n if (props.checked) c.push('radio-checked');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => (\n <view\n style={{ flexDirection: 'row', alignItems: 'center', gap: 8, opacity: props.disabled ? 0.5 : 1 }}\n bindtap={() => {\n if (!props.disabled && props.value != null) emit('select', props.value);\n }}\n >\n <view class={getClasses()}>\n {props.checked && <view class=\"radio-mark\" />}\n </view>\n {props.label && <text>{props.label}</text>}\n </view>\n );\n});\n\nconst _RadioGroup = component<RadioGroupProps>(({ props, slots }) => {\n return () => (\n <view class={props.class ?? ''} style={{ gap: 8 }}>\n {slots.default?.()}\n </view>\n );\n});\n\nexport const Radio = compound(_RadioGroup, {\n Item: RadioItem,\n});\n","import { component, type Define, type Model } from '@sigx/lynx';\n\nexport type TextareaSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type TextareaVariant = 'bordered' | 'ghost';\nexport type TextareaColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport type TextareaProps =\n & Define.Prop<'placeholder', string, false>\n & Define.Prop<'rows', number, false>\n & Define.Prop<'size', TextareaSize, false>\n & Define.Prop<'variant', TextareaVariant, false>\n & Define.Prop<'color', TextareaColor, false>\n & Define.Prop<'disabled', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Model<string>;\n\nconst sizeClasses: Record<TextareaSize, string> = {\n xs: 'textarea-xs', sm: 'textarea-sm', md: '', lg: 'textarea-lg',\n};\n\nexport const Textarea = component<TextareaProps>(({ props }) => {\n const getClasses = () => {\n const c = ['textarea'];\n if (props.variant === 'bordered') c.push('textarea-bordered');\n if (props.variant === 'ghost') c.push('textarea-ghost');\n if (props.color) c.push(`textarea-${props.color}`);\n if (props.size) { const s = sizeClasses[props.size]; if (s) c.push(s); }\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n const getHeight = () => {\n const rows = props.rows ?? 3;\n const lineHeight = 20;\n const padding = 16;\n return rows * lineHeight + padding;\n };\n\n return () => (\n <textarea\n class={getClasses()}\n placeholder={props.placeholder}\n disabled={props.disabled}\n model={props.model}\n style={{ height: getHeight() }}\n />\n );\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type FormFieldProps =\n & Define.Prop<'label', string, false>\n & Define.Prop<'error', string, false>\n & Define.Prop<'required', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const FormField = component<FormFieldProps>(({ props, slots }) => {\n return () => (\n <view class={['form-control', props.class].filter(Boolean).join(' ')} style={{ gap: 4 }}>\n {props.label && (\n <view class=\"label\">\n <text class=\"label-text\">\n {props.required ? `${props.label} *` : props.label}\n </text>\n </view>\n )}\n {slots.default?.()}\n {props.error && (\n <view class=\"label\">\n <text class=\"label-text-error\">\n {props.error}\n </text>\n </view>\n )}\n </view>\n );\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral' | 'ghost';\nexport type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';\n\nexport type BadgeProps =\n & Define.Prop<'variant', BadgeVariant, false>\n & Define.Prop<'size', BadgeSize, false>\n & Define.Prop<'outline', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const Badge = component<BadgeProps>(({ props, slots }) => {\n const getClasses = () => {\n const c = ['badge'];\n if (props.variant) c.push(`badge-${props.variant}`);\n if (props.size) c.push(`badge-${props.size}`);\n if (props.outline) c.push('badge-outline');\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <view class={getClasses()}>{slots.default?.()}</view>;\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\nexport type AlertProps =\n & Define.Prop<'variant', AlertVariant, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport const Alert = component<AlertProps>(({ props, slots }) => {\n const getClasses = () => {\n const c = ['alert'];\n if (props.variant) c.push(`alert-${props.variant}`);\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <view class={getClasses()}>{slots.default?.()}</view>;\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type ProgressColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport type ProgressProps =\n & Define.Prop<'value', number, false>\n & Define.Prop<'max', number, false>\n & Define.Prop<'color', ProgressColor, false>\n & Define.Prop<'class', string, false>;\n\nexport const Progress = component<ProgressProps>(({ props }) => {\n const getClasses = () => {\n const c = ['progress'];\n if (props.color) c.push(`progress-${props.color}`);\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => {\n const max = props.max ?? 100;\n const pct = Math.min(Math.max((props.value ?? 0) / max, 0), 1) * 100;\n\n return (\n <view class={getClasses()}>\n <view\n class=\"progress-bar\"\n style={{ width: `${pct}%` }}\n />\n </view>\n );\n };\n});\n","import { component, compound, type Define } from '@sigx/lynx';\n\nexport type ModalProps =\n & Define.Prop<'open', boolean, false>\n & Define.Prop<'onClose', () => void, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst _Modal = component<ModalProps>(({ props, slots }) => {\n return () => {\n if (!props.open) return <view style={{ display: 'none' }} />;\n\n return (\n <view\n class=\"modal-overlay\"\n bindtap={() => { props.onClose?.(); }}\n >\n <view\n class={`modal-box${props.class ? ' ' + props.class : ''}`}\n bindtap={(e: any) => { e?.stopPropagation?.(); }}\n >\n {slots.default?.()}\n </view>\n </view>\n );\n };\n});\n\ntype ModalHeaderProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst ModalHeader = component<ModalHeaderProps>(({ props, slots }) => {\n return () => (\n <view class={`modal-header${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\ntype ModalBodyProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst ModalBody = component<ModalBodyProps>(({ props, slots }) => {\n return () => (\n <view class={`modal-body${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\ntype ModalActionsProps = Define.Prop<'class', string, false> & Define.Slot<'default'>;\nconst ModalActions = component<ModalActionsProps>(({ props, slots }) => {\n return () => (\n <view class={`modal-action${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\nexport const Modal = compound(_Modal, {\n Header: ModalHeader,\n Body: ModalBody,\n Actions: ModalActions,\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type SkeletonProps =\n & Define.Prop<'width', number | string, false>\n & Define.Prop<'height', number | string, false>\n & Define.Prop<'circle', boolean, false>\n & Define.Prop<'class', string, false>;\n\nexport const Skeleton = component<SkeletonProps>(({ props }) => {\n return () => {\n const style: Record<string, any> = {};\n\n if (props.width != null) style.width = props.width;\n if (props.height != null) style.height = props.height;\n\n if (props.circle) {\n const size = props.width ?? props.height ?? 48;\n style.width = size;\n style.height = size;\n style.borderRadius = typeof size === 'number' ? size / 2 : '50%';\n }\n\n return (\n <view\n class={`skeleton${props.class ? ' ' + props.class : ''}`}\n style={style}\n />\n );\n };\n});\n","import { component, compound, type Define } from '@sigx/lynx';\n\nexport type StepColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';\n\nexport type StepsProps =\n & Define.Prop<'vertical', boolean, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport type StepProps =\n & Define.Prop<'color', StepColor, false>\n & Define.Prop<'content', string, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst _Steps = component<StepsProps>(({ props, slots }) => {\n return () => {\n const isVertical = props.vertical ?? false;\n\n return (\n <view\n class={`steps${isVertical ? ' steps-vertical' : ' steps-horizontal'}${props.class ? ' ' + props.class : ''}`}\n >\n {slots.default?.()}\n </view>\n );\n };\n});\n\nconst Step = component<StepProps>(({ props, slots }) => {\n return () => {\n const color = props.color;\n const colorClass = color ? ` step-${color}` : '';\n\n return (\n <view class={`step${colorClass}${props.class ? ' ' + props.class : ''}`}>\n <view class={`step-indicator${colorClass}`}>\n {props.content ? <text style={{ fontSize: 14 }}>{props.content}</text> : null}\n </view>\n {slots.default?.()}\n </view>\n );\n };\n});\n\nexport const Steps = compound(_Steps, { Step });\n","import { component, compound, type Define } from '@sigx/lynx';\n\nexport type TabsProps =\n & Define.Prop<'activeTab', string, false>\n & Define.Prop<'onChange', (value: string) => void, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nexport type TabProps =\n & Define.Prop<'value', string>\n & Define.Prop<'label', string, false>\n & Define.Prop<'active', boolean, false>\n & Define.Prop<'onPress', () => void, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst _Tabs = component<TabsProps>(({ props, slots }) => {\n return () => (\n <view class={`tabs${props.class ? ' ' + props.class : ''}`}>\n {slots.default?.()}\n </view>\n );\n});\n\nconst Tab = component<TabProps>(({ props, slots }) => {\n return () => {\n const isActive = props.active ?? false;\n\n return (\n <view\n class={`tab${isActive ? ' tab-active' : ''}${props.class ? ' ' + props.class : ''}`}\n bindtap={() => {\n props.onPress?.();\n }}\n >\n {slots.default?.()}\n {props.label ? <text>{props.label}</text> : null}\n </view>\n );\n };\n});\n\nexport const Tabs = compound(_Tabs, {\n Tab,\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport type AvatarProps =\n & Define.Prop<'src', string, false>\n & Define.Prop<'size', AvatarSize, false>\n & Define.Prop<'rounded', boolean | 'full', false>\n & Define.Prop<'placeholder', string, false>\n & Define.Prop<'online', boolean, false>\n & Define.Prop<'offline', boolean, false>\n & Define.Prop<'class', string, false>;\n\nconst sizeMap: Record<AvatarSize, number> = {\n xs: 24,\n sm: 32,\n md: 48,\n lg: 64,\n xl: 96,\n};\n\nconst fontSizeMap: Record<AvatarSize, number> = {\n xs: 10,\n sm: 12,\n md: 18,\n lg: 24,\n xl: 36,\n};\n\nexport const Avatar = component<AvatarProps>(({ props }) => {\n return () => {\n const size = props.size || 'md';\n const dim = sizeMap[size];\n\n const classes: string[] = ['avatar'];\n if (props.online) classes.push('online');\n if (props.offline) classes.push('offline');\n if (props.placeholder && !props.src) classes.push('placeholder');\n if (props.class) classes.push(props.class);\n\n const rounded = props.rounded;\n const borderRadius = rounded === 'full' || rounded === true ? dim / 2 : 8;\n\n const innerStyle = {\n width: dim,\n height: dim,\n borderRadius,\n overflow: 'hidden' as any,\n alignItems: 'center',\n justifyContent: 'center',\n display: 'flex',\n };\n\n if (props.src) {\n return (\n <view class={classes.join(' ')}>\n <view style={innerStyle}>\n <image\n src={props.src}\n style={{ width: dim, height: dim, borderRadius }}\n />\n </view>\n </view>\n );\n }\n\n return (\n <view class={classes.join(' ')}>\n <view class=\"avatar-placeholder\" style={innerStyle}>\n <text style={{ fontSize: fontSizeMap[size] }}>{props.placeholder || '?'}</text>\n </view>\n </view>\n );\n };\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type TextSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl';\nexport type TextWeight = 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\nexport type TextColor = 'base-content' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n\nexport type TextProps =\n & Define.Prop<'size', TextSize, false>\n & Define.Prop<'weight', TextWeight, false>\n & Define.Prop<'color', TextColor, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst sizeClasses: Record<TextSize, string> = {\n xs: 'text-xs', sm: 'text-sm', base: 'text-base', lg: 'text-lg',\n xl: 'text-xl', '2xl': 'text-2xl', '3xl': 'text-3xl',\n};\n\nconst weightClasses: Record<TextWeight, string> = {\n light: 'font-light', normal: 'font-normal', medium: 'font-medium',\n semibold: 'font-semibold', bold: 'font-bold',\n};\n\nexport const Text = component<TextProps>(({ props, slots }) => {\n const getClasses = () => {\n const c: string[] = [];\n if (props.size) c.push(sizeClasses[props.size]);\n if (props.weight) c.push(weightClasses[props.weight]);\n if (props.color) c.push(`text-${props.color}`);\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <text class={getClasses()}>{slots.default?.()}</text>;\n});\n","import { component, type Define } from '@sigx/lynx';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type HeadingProps =\n & Define.Prop<'level', HeadingLevel, false>\n & Define.Prop<'class', string, false>\n & Define.Slot<'default'>;\n\nconst levelClasses: Record<HeadingLevel, string> = {\n 1: 'text-3xl font-bold',\n 2: 'text-2xl font-bold',\n 3: 'text-xl font-semibold',\n 4: 'text-lg font-semibold',\n 5: 'text-base font-semibold',\n 6: 'text-sm font-semibold',\n};\n\nexport const Heading = component<HeadingProps>(({ props, slots }) => {\n const getClasses = () => {\n const c = [levelClasses[props.level ?? 2], 'text-base-content'];\n if (props.class) c.push(props.class);\n return c.join(' ');\n };\n\n return () => <text class={getClasses()}>{slots.default?.()}</text>;\n});\n"],"mappings":";;;AAYA,IAAa,IAAU,GAAyB,EAAE,eAAY;CAC5D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,UAAU;EAKrB,OAJA,EAAE,KAAK,WAAW,EAAM,QAAQ,YAAY,EACxC,EAAM,QAAM,EAAE,KAAK,WAAW,EAAM,OAAO,EAC3C,EAAM,SAAO,EAAE,KAAK,QAAQ,EAAM,QAAQ,EAC1C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD,EAAM,OAAO,GAAY,EAAI,CAAA;EAC1C,ECGI,IAAgD;CACpD,SAAS;CAAe,WAAW;CAAiB,QAAQ;CAC5D,MAAM;CAAY,SAAS;CAAe,SAAS;CACnD,OAAO;CAAa,OAAO;CAAa,MAAM;CAAY,SAAS;CACpE,EAEK,IAA0C;CAC9C,IAAI;CAAU,IAAI;CAAU,IAAI;CAAI,IAAI;CAAU,IAAI;CACvD,EAEY,IAAS,GAAwB,EAAE,UAAO,UAAO,cAAW;CACvE,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,MAAM;EAEjB,IADI,EAAM,WAAS,EAAE,KAAK,EAAe,EAAM,SAAS,EACpD,EAAM,MAAM;GAAE,IAAM,IAAI,EAAY,EAAM;GAAO,AAAI,KAAG,EAAE,KAAK,EAAE;;EAWrE,OAVI,EAAM,WAAS,EAAE,KAAK,cAAc,EACpC,EAAM,QAAM,EAAE,KAAK,WAAW,EAC9B,EAAM,QAAM,EAAE,KAAK,WAAW,EAC9B,EAAM,WAAS,EAAE,KAAK,cAAc,EACpC,EAAM,SAAO,EAAE,KAAK,YAAY,EAChC,EAAM,UAAQ,EAAE,KAAK,aAAa,EAClC,EAAM,UAAQ,EAAE,KAAK,aAAa,EAClC,EAAM,UAAQ,EAAE,KAAK,aAAa,EAClC,EAAM,YAAU,EAAE,KAAK,eAAe,EACtC,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aACE,kBAAC,QAAD;EACE,OAAO,GAAY;EACnB,eAAe;GAAE,AAAI,CAAC,EAAM,YAAY,CAAC,EAAM,WAAS,EAAK,QAAQ;;YAEpE,EAAM,UACH,kBAAC,GAAD;GAAS,MAAK;GAAU,MAAK;GAAO,CAAA,GACpC,EAAM,WAAW;EAChB,CAAA;EAET,ECXW,IAAO,EA5CN,GAAsB,EAAE,UAAO,eAAY;CACvD,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,OAAO;EASlB,OARI,EAAM,YAAU,EAAE,KAAK,gBAAgB,EACvC,EAAM,WAAS,EAAE,KAAK,eAAe,EACrC,EAAM,WAAW,KAAM,EAAE,KAAK,YAAY,GACrC,EAAM,WAAW,OAAM,EAAE,KAAK,YAAY,GAC1C,EAAM,WAAW,OAAM,EAAE,KAAK,YAAY,GAC1C,EAAM,WAAW,OAAM,EAAE,KAAK,YAAY,GAC1C,EAAM,WAAW,KAAA,KAAW,EAAE,KAAK,YAAY,EACpD,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD;EAAM,OAAO,GAAY;YAAG,EAAM,WAAW;EAAQ,CAAA;EA8BvC,EAAO;CAClC,MA3Be,GAA0B,EAAE,UAAO,qBAEhD,kBAAC,QAAD;EAAM,OAAO,YAAY,EAAM,QAAQ,MAAM,EAAM,QAAQ;YACxD,EAAM,WAAW;EACb,CAAA,CAuBH;CACN,OAnBgB,GAA2B,EAAE,UAAO,qBAElD,kBAAC,QAAD;EAAM,OAAO,aAAa,EAAM,QAAQ,MAAM,EAAM,QAAQ;YACzD,EAAM,WAAW;EACb,CAAA,CAeF;CACP,SAXkB,GAA6B,EAAE,UAAO,qBAEtD,kBAAC,QAAD;EAAM,OAAO,eAAe,EAAM,QAAQ,MAAM,EAAM,QAAQ;YAC3D,EAAM,WAAW;EACb,CAAA,CAOA;CACV,CAAC;;;ACtCF,SAAgB,EACd,GACA,GACwB;CACxB,IAAI,MAAU,KAAA,GAAW,OAAO,EAAE;CAElC,IAAI,OAAO,KAAU,UACnB,OAAO;GACJ,GAAG,EAAO,OAAO;GACjB,GAAG,EAAO,SAAS;GACnB,GAAG,EAAO,UAAU;GACpB,GAAG,EAAO,QAAQ;EACpB;CAGH,IAAM,IAAgC,EAAE;CAcxC,OAZI,EAAM,QAAQ,KAAA,IACT,EAAM,MAAM,KAAA,MAAW,EAAM,GAAG,EAAO,QAAQ,EAAM,KADjC,EAAM,GAAG,EAAO,QAAQ,EAAM,KAGvD,EAAM,WAAW,KAAA,IACZ,EAAM,MAAM,KAAA,MAAW,EAAM,GAAG,EAAO,WAAW,EAAM,KADjC,EAAM,GAAG,EAAO,WAAW,EAAM,QAG7D,EAAM,UAAU,KAAA,IACX,EAAM,MAAM,KAAA,MAAW,EAAM,GAAG,EAAO,UAAU,EAAM,KADjC,EAAM,GAAG,EAAO,UAAU,EAAM,OAG3D,EAAM,SAAS,KAAA,IACV,EAAM,MAAM,KAAA,MAAW,EAAM,GAAG,EAAO,SAAS,EAAM,KADjC,EAAM,GAAG,EAAO,SAAS,EAAM,MAGtD;;AAGT,SAAgB,EAAgB,GAA0C;CACxE,IAAM,IAAiC,EAAE;CAWzC,OATI,EAAM,UAAU,KAAA,MAAW,EAAM,QAAQ,EAAM,QAC/C,EAAM,WAAW,KAAA,MAAW,EAAM,SAAS,EAAM,SACjD,EAAM,SAAS,KAAA,MAAW,EAAM,OAAO,EAAM,OAC7C,EAAM,eAAe,KAAA,MAAW,EAAM,kBAAkB,EAAM,aAC9D,EAAM,iBAAiB,KAAA,MAAW,EAAM,eAAe,EAAM,eAEjE,OAAO,OAAO,GAAO,EAAe,EAAM,SAAS,UAAU,CAAC,EAC9D,OAAO,OAAO,GAAO,EAAe,EAAM,QAAQ,SAAS,CAAC,EAErD;;;;AC7CT,IAAa,IAAM,GAAqB,EAAE,UAAO,eAAY;CAC3D,IAAM,UAAkD;EACtD,IAAM,IAAyC;GAC7C,SAAS;GACT,eAAe;GAChB;EAKD,AAHI,EAAM,QAAQ,KAAA,MAAW,EAAM,MAAM,EAAM,MAC3C,EAAM,UAAO,EAAM,aAAa,EAAM,QACtC,EAAM,YAAS,EAAM,iBAAiB,EAAM,UAC5C,EAAM,SAAM,EAAM,WAAW;EAEjC,IAAM,IAAM,EAAgB;GAC1B,OAAO,EAAM;GACb,QAAQ,EAAM;GACd,MAAM,EAAM;GACZ,YAAY,EAAM;GAClB,cAAc,EAAM;GACpB,SAAS,EAAM;GACf,QAAQ,EAAM;GACf,CAAC;EACF,KAAK,IAAM,KAAO,GAChB,EAAM,KAAO,EAAI;EAGnB,OAAO;;CAGT,aACE,kBAAC,QAAD;EAAM,OAAO,EAAM;EAAO,OAAO,GAAU;YACxC,EAAM,WAAW;EACb,CAAA;EAET,ECjCW,IAAM,GAAqB,EAAE,UAAO,eAAY;CAC3D,IAAM,UAAkD;EACtD,IAAM,IAAyC;GAC7C,SAAS;GACT,eAAe;GAChB;EAKD,AAHI,EAAM,QAAQ,KAAA,MAAW,EAAM,MAAM,EAAM,MAC3C,EAAM,UAAO,EAAM,aAAa,EAAM,QACtC,EAAM,YAAS,EAAM,iBAAiB,EAAM,UAC5C,EAAM,SAAM,EAAM,WAAW;EAEjC,IAAM,IAAM,EAAgB;GAC1B,OAAO,EAAM;GACb,QAAQ,EAAM;GACd,MAAM,EAAM;GACZ,YAAY,EAAM;GAClB,cAAc,EAAM;GACpB,SAAS,EAAM;GACf,QAAQ,EAAM;GACf,CAAC;EACF,KAAK,IAAM,KAAO,GAChB,EAAM,KAAO,EAAI;EAGnB,OAAO;;CAGT,aACE,kBAAC,QAAD;EAAM,OAAO,EAAM;EAAO,OAAO,GAAU;YACxC,EAAM,WAAW;EACb,CAAA;EAET,ECvCW,IAAS,GAAwB,EAAE,UAAO,eAAY;CACjE,IAAM,UAAkD;EACtD,IAAM,IAAyC;GAC7C,SAAS;GACT,gBAAgB;GAChB,YAAY;GACb,EAEK,IAAM,EAAgB;GAC1B,OAAO,EAAM;GACb,QAAQ,EAAM;GACd,MAAM,EAAM;GACZ,YAAY,EAAM;GAClB,cAAc,EAAM;GACrB,CAAC;EACF,KAAK,IAAM,KAAO,GAChB,EAAM,KAAO,EAAI;EAGnB,OAAO;;CAGT,aACE,kBAAC,QAAD;EAAM,OAAO,EAAM;EAAO,OAAO,GAAU;YACxC,EAAM,WAAW;EACb,CAAA;EAET,ECjCW,IAAS,GAAwB,EAAE,eAAY;CAC1D,IAAM,UACA,EAAM,SAAS,KAAA,IAGZ,EAAE,MAAM,GAAG,GAFT;EAAE,OAAO,EAAM;EAAM,QAAQ,EAAM;EAAM;CAKpD,aACE,kBAAC,QAAD;EAAM,OAAO,EAAM;EAAO,OAAO,GAAU;EAAI,CAAA;EAEjD,ECLW,IAAa,GAA4B,EAAE,UAAO,eAAY;CACzE,IAAM,UAAkD;EACtD,IAAM,IAAyC,EAAE;EAIjD,OAHI,EAAM,WAAW,KAAA,MAAW,EAAM,SAAS,EAAM,SACjD,EAAM,UAAU,KAAA,MAAW,EAAM,QAAQ,EAAM,QAC/C,EAAM,SAAS,KAAA,MAAW,EAAM,OAAO,EAAM,OAC1C;;CAGT,aAAa;EACX,IAAM,IAAM,EAAM,aAAa;EAC/B,OACE,kBAAC,eAAD;GACE,OAAO,EAAM;GACb,OAAO,GAAU;GACjB,sBAAoB;GACpB,YAAU,MAAQ,aAAa,KAAO,KAAA;GACtC,YAAU,MAAQ,eAAe,KAAO,KAAA;GACxC,kBAAgB,EAAM;GACtB,SAAS,EAAM;aAEd,EAAM,WAAW;GACN,CAAA;;EAGlB,EC7BW,IAAU,GAAyB,EAAE,eAAY;CAC5D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,EAAM,WAAW,qBAAqB,UAAU;EAE3D,OADI,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;IAGd,UAAkD;EACtD,IAAM,IAAyC,EAAE;EAWjD,OAVI,EAAM,UAAO,EAAM,kBAAkB,EAAM,QAC3C,EAAM,WAAW,KAAA,MACf,EAAM,YACR,EAAM,aAAa,EAAM,QACzB,EAAM,cAAc,EAAM,WAE1B,EAAM,YAAY,EAAM,QACxB,EAAM,eAAe,EAAM,UAGxB;;CAGT,aACE,kBAAC,QAAD;EAAM,OAAO,GAAY;EAAE,OAAO,GAAU;EAAI,CAAA;EAElD,ECjBI,IAAyC;CAC7C,IAAI;CAAY,IAAI;CAAY,IAAI;CAAI,IAAI;CAC7C,EAEY,IAAQ,GAAuB,EAAE,eAAY;CACxD,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,QAAQ;EAInB,IAHI,EAAM,YAAY,cAAY,EAAE,KAAK,iBAAiB,EACtD,EAAM,YAAY,WAAS,EAAE,KAAK,cAAc,EAChD,EAAM,SAAO,EAAE,KAAK,SAAS,EAAM,QAAQ,EAC3C,EAAM,MAAM;GAAE,IAAM,IAAI,EAAY,EAAM;GAAO,AAAI,KAAG,EAAE,KAAK,EAAE;;EAErE,OADI,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aACE,kBAAC,SAAD;EACE,OAAO,GAAY;EACnB,aAAa,EAAM;EACnB,MAAM,EAAM,QAAQ;EACpB,UAAU,EAAM;EAChB,OAAO,EAAM;EACb,CAAA;EAEJ,EC3BI,IAA6C;CACjD,IAAI;CAAI,IAAI;CAAI,IAAI;CAAI,IAAI;CAC7B,EAEY,IAAS,GAAwB,EAAE,UAAO,cAAW;CAChE,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,SAAS,EACd,IAAO,EAAM,QAAQ;EAM3B,OALA,EAAE,KAAK,UAAU,IAAO,EACpB,EAAM,SAAO,EAAE,KAAK,UAAU,EAAM,QAAQ,EAC5C,EAAM,WAAS,EAAE,KAAK,iBAAiB,EACvC,EAAM,YAAU,EAAE,KAAK,kBAAkB,EACzC,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa;EACX,IAAM,IAAU,CAAC,CAAC,EAAM,SAClB,IAAO,EAAM,QAAQ,MACrB,IAAS,IAAU,EAAe,KAAQ;EAEhD,OACE,kBAAC,QAAD;GACE,OAAO,GAAY;GACnB,eAAe;IACb,AAAK,EAAM,YAAU,EAAK,UAAU,CAAC,EAAQ;;aAG/C,kBAAC,QAAD;IACE,OAAM;IACN,OAAO,EAAE,WAAW,cAAc,EAAO,MAAM;IAC/C,CAAA;GACG,CAAA;;EAGX,ECnCI,IAAiD;CACrD,IAAI;CAAI,IAAI;CAAI,IAAI;CAAI,IAAI;CAC7B,EAEY,IAAW,GAA0B,EAAE,UAAO,cAAW;CACpE,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,WAAW,EAChB,IAAO,EAAM,QAAQ;EAM3B,OALI,MAAS,QAAM,EAAE,KAAK,YAAY,IAAO,EACzC,EAAM,SAAO,EAAE,KAAK,YAAY,EAAM,QAAQ,EAC9C,EAAM,WAAS,EAAE,KAAK,mBAAmB,EACzC,EAAM,YAAU,EAAE,KAAK,oBAAoB,EAC3C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa;EACX,IAAM,IAAU,CAAC,CAAC,EAAM,SAClB,IAAO,EAAM,QAAQ;EAE3B,OACE,kBAAC,QAAD;GACE,OAAO,GAAY;GACnB,eAAe;IACb,AAAK,EAAM,YAAU,EAAK,UAAU,CAAC,EAAQ;;aAG9C,IACC,kBAAC,QAAD;IAAM,OAAM;IAAgB,OAAO,EAAE,UAAU,EAAiB,IAAO;cAAE;IAAQ,CAAA,GAC/E;GACC,CAAA;;EAGX,ECxBW,IAAS,GAAwB,EAAE,UAAO,cAAW;CAChE,IAAM,IAAQ,EAAO,EAAE,MAAM,IAAO,CAAC,EAE/B,UAAmB;EACvB,IAAM,IAAI,CAAC,SAAS;EAMpB,OALI,EAAM,YAAY,cAAY,EAAE,KAAK,kBAAkB,EACvD,EAAM,YAAY,WAAS,EAAE,KAAK,eAAe,EACjD,EAAM,SAAO,EAAE,KAAK,UAAU,EAAM,QAAQ,EAC5C,EAAM,QAAM,EAAE,KAAK,UAAU,EAAM,OAAO,EAC1C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;IAGd,UAAyB;EAE7B,IAAM,KADO,EAAM,WAAW,EAAE,EACb,MAAM,MAAM,EAAE,UAAU,EAAM,MAAM;EACvD,OAAO,IAAQ,EAAM,QAAS,EAAM,eAAe;;CAGrD,aACE,kBAAC,QAAD;EAAM,OAAO;GAAE,UAAU;GAAY,SAAS,EAAM,WAAW,KAAM;GAAG;YAAxE,CACE,kBAAC,QAAD;GACE,OAAO,GAAY;GACnB,eAAe;IACb,AAAK,EAAM,aAAU,EAAM,OAAO,CAAC,EAAM;;aAH7C,CAME,kBAAC,QAAD,EAAA,UAAO,GAAkB,EAAQ,CAAA,EACjC,kBAAC,QAAD;IAAM,OAAO,EAAE,YAAY,QAAQ;cAAE,kBAAC,QAAD,EAAA,UAAO,EAAM,OAAO,MAAM,KAAW,CAAA;IAAO,CAAA,CAC5E;MAEN,EAAM,QAAQ,CAAC,EAAM,YACpB,kBAAC,QAAD;GAAM,OAAM;GAAkB,OAAO;IAAE,UAAU;IAAY,KAAK;IAAQ,MAAM;IAAG,OAAO;IAAG,QAAQ;IAAI;cACrG,EAAM,WAAW,EAAE,EAAE,KAAK,MAC1B,kBAAC,QAAD;IACE,OAAO,gBAAgB,EAAO,UAAU,EAAM,QAAQ,0BAA0B;IAChF,eAAe;KAEb,AADA,EAAK,UAAU,EAAO,MAAM,EAC5B,EAAM,OAAO;;cAGf,kBAAC,QAAD,EAAA,UAAO,EAAO,OAAa,CAAA;IACtB,CAAA,CACP;GACG,CAAA,CAEJ;;EAET,EC/CI,IAAY,GAA2B,EAAE,UAAO,cAAW;CAC/D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,QAAQ;EAKnB,OAJI,EAAM,SAAO,EAAE,KAAK,SAAS,EAAM,QAAQ,EAC3C,EAAM,QAAM,EAAE,KAAK,SAAS,EAAM,OAAO,EACzC,EAAM,WAAS,EAAE,KAAK,gBAAgB,EACtC,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aACE,kBAAC,QAAD;EACE,OAAO;GAAE,eAAe;GAAO,YAAY;GAAU,KAAK;GAAG,SAAS,EAAM,WAAW,KAAM;GAAG;EAChG,eAAe;GACb,AAAI,CAAC,EAAM,YAAY,EAAM,SAAS,QAAM,EAAK,UAAU,EAAM,MAAM;;YAH3E,CAME,kBAAC,QAAD;GAAM,OAAO,GAAY;aACtB,EAAM,WAAW,kBAAC,QAAD,EAAM,OAAM,cAAe,CAAA;GACxC,CAAA,EACN,EAAM,SAAS,kBAAC,QAAD,EAAA,UAAO,EAAM,OAAa,CAAA,CACrC;;EAET,EAUW,IAAQ,EARD,GAA4B,EAAE,UAAO,qBAErD,kBAAC,QAAD;CAAM,OAAO,EAAM,SAAS;CAAI,OAAO,EAAE,KAAK,GAAG;WAC9C,EAAM,WAAW;CACb,CAAA,CAImB,EAAa,EACzC,MAAM,GACP,CAAC,EC1CI,IAA4C;CAChD,IAAI;CAAe,IAAI;CAAe,IAAI;CAAI,IAAI;CACnD,EAEY,IAAW,GAA0B,EAAE,eAAY;CAC9D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,WAAW;EAItB,IAHI,EAAM,YAAY,cAAY,EAAE,KAAK,oBAAoB,EACzD,EAAM,YAAY,WAAS,EAAE,KAAK,iBAAiB,EACnD,EAAM,SAAO,EAAE,KAAK,YAAY,EAAM,QAAQ,EAC9C,EAAM,MAAM;GAAE,IAAM,IAAI,EAAY,EAAM;GAAO,AAAI,KAAG,EAAE,KAAK,EAAE;;EAErE,OADI,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;IAGd,WACS,EAAM,QAAQ,KAGb,KAAa;CAG7B,aACE,kBAAC,YAAD;EACE,OAAO,GAAY;EACnB,aAAa,EAAM;EACnB,UAAU,EAAM;EAChB,OAAO,EAAM;EACb,OAAO,EAAE,QAAQ,GAAW,EAAE;EAC9B,CAAA;EAEJ,ECtCW,IAAY,GAA2B,EAAE,UAAO,qBAEzD,kBAAC,QAAD;CAAM,OAAO,CAAC,gBAAgB,EAAM,MAAM,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;CAAE,OAAO,EAAE,KAAK,GAAG;WAAvF;EACG,EAAM,SACL,kBAAC,QAAD;GAAM,OAAM;aACV,kBAAC,QAAD;IAAM,OAAM;cACT,EAAM,WAAW,GAAG,EAAM,MAAM,MAAM,EAAM;IACxC,CAAA;GACF,CAAA;EAER,EAAM,WAAW;EACjB,EAAM,SACL,kBAAC,QAAD;GAAM,OAAM;aACV,kBAAC,QAAD;IAAM,OAAM;cACT,EAAM;IACF,CAAA;GACF,CAAA;EAEJ;GAET,ECjBW,IAAQ,GAAuB,EAAE,UAAO,eAAY;CAC/D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,QAAQ;EAKnB,OAJI,EAAM,WAAS,EAAE,KAAK,SAAS,EAAM,UAAU,EAC/C,EAAM,QAAM,EAAE,KAAK,SAAS,EAAM,OAAO,EACzC,EAAM,WAAS,EAAE,KAAK,gBAAgB,EACtC,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD;EAAM,OAAO,GAAY;YAAG,EAAM,WAAW;EAAQ,CAAA;EAClE,ECdW,IAAQ,GAAuB,EAAE,UAAO,eAAY;CAC/D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,QAAQ;EAGnB,OAFI,EAAM,WAAS,EAAE,KAAK,SAAS,EAAM,UAAU,EAC/C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD;EAAM,OAAO,GAAY;YAAG,EAAM,WAAW;EAAQ,CAAA;EAClE,ECRW,IAAW,GAA0B,EAAE,eAAY;CAC9D,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,WAAW;EAGtB,OAFI,EAAM,SAAO,EAAE,KAAK,YAAY,EAAM,QAAQ,EAC9C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa;EACX,IAAM,IAAM,EAAM,OAAO,KACnB,IAAM,KAAK,IAAI,KAAK,KAAK,EAAM,SAAS,KAAK,GAAK,EAAE,EAAE,EAAE,GAAG;EAEjE,OACE,kBAAC,QAAD;GAAM,OAAO,GAAY;aACvB,kBAAC,QAAD;IACE,OAAM;IACN,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;IAC3B,CAAA;GACG,CAAA;;EAGX,ECwBW,IAAQ,EA/CN,GAAuB,EAAE,UAAO,qBAEtC,EAAM,OAGT,kBAAC,QAAD;CACE,OAAM;CACN,eAAe;EAAE,EAAM,WAAW;;WAElC,kBAAC,QAAD;EACE,OAAO,YAAY,EAAM,QAAQ,MAAM,EAAM,QAAQ;EACrD,UAAU,MAAW;GAAE,GAAG,mBAAmB;;YAE5C,EAAM,WAAW;EACb,CAAA;CACF,CAAA,GAbe,kBAAC,QAAD,EAAM,OAAO,EAAE,SAAS,QAAQ,EAAI,CAAA,CA6ClC,EAAQ;CACpC,QA3BkB,GAA6B,EAAE,UAAO,qBAEtD,kBAAC,QAAD;EAAM,OAAO,eAAe,EAAM,QAAQ,MAAM,EAAM,QAAQ;YAC3D,EAAM,WAAW;EACb,CAAA,CAuBD;CACR,MAnBgB,GAA2B,EAAE,UAAO,qBAElD,kBAAC,QAAD;EAAM,OAAO,aAAa,EAAM,QAAQ,MAAM,EAAM,QAAQ;YACzD,EAAM,WAAW;EACb,CAAA,CAeH;CACN,SAXmB,GAA8B,EAAE,UAAO,qBAExD,kBAAC,QAAD;EAAM,OAAO,eAAe,EAAM,QAAQ,MAAM,EAAM,QAAQ;YAC3D,EAAM,WAAW;EACb,CAAA,CAOA;CACV,CAAC,ECnDW,IAAW,GAA0B,EAAE,qBACrC;CACX,IAAM,IAA6B,EAAE;CAKrC,IAHI,EAAM,SAAS,SAAM,EAAM,QAAQ,EAAM,QACzC,EAAM,UAAU,SAAM,EAAM,SAAS,EAAM,SAE3C,EAAM,QAAQ;EAChB,IAAM,IAAO,EAAM,SAAS,EAAM,UAAU;EAG5C,AAFA,EAAM,QAAQ,GACd,EAAM,SAAS,GACf,EAAM,eAAe,OAAO,KAAS,WAAW,IAAO,IAAI;;CAG7D,OACE,kBAAC,QAAD;EACE,OAAO,WAAW,EAAM,QAAQ,MAAM,EAAM,QAAQ;EAC7C;EACP,CAAA;EAGN,ECgBW,IAAQ,EA9BN,GAAuB,EAAE,UAAO,qBAKzC,kBAAC,QAAD;CACE,OAAO,QAJQ,EAAM,YAAY,KAIL,oBAAoB,sBAAsB,EAAM,QAAQ,MAAM,EAAM,QAAQ;WAEvG,EAAM,WAAW;CACb,CAAA,CAqBiB,EAAQ,EAAE,MAhB3B,GAAsB,EAAE,UAAO,qBAC7B;CACX,IAAM,IAAQ,EAAM,OACd,IAAa,IAAQ,SAAS,MAAU;CAE9C,OACE,kBAAC,QAAD;EAAM,OAAO,OAAO,IAAa,EAAM,QAAQ,MAAM,EAAM,QAAQ;YAAnE,CACE,kBAAC,QAAD;GAAM,OAAO,iBAAiB;aAC3B,EAAM,UAAU,kBAAC,QAAD;IAAM,OAAO,EAAE,UAAU,IAAI;cAAG,EAAM;IAAe,CAAA,GAAG;GACpE,CAAA,EACN,EAAM,WAAW,CACb;;EAK2B,EAAM,CAAC,ECHlC,IAAO,EA1BN,GAAsB,EAAE,UAAO,qBAEzC,kBAAC,QAAD;CAAM,OAAO,OAAO,EAAM,QAAQ,MAAM,EAAM,QAAQ;WACnD,EAAM,WAAW;CACb,CAAA,CAsBkB,EAAO,EAClC,KAnBU,GAAqB,EAAE,UAAO,qBAKpC,kBAAC,QAAD;CACE,OAAO,MAJM,EAAM,UAAU,KAIL,gBAAgB,KAAK,EAAM,QAAQ,MAAM,EAAM,QAAQ;CAC/E,eAAe;EACb,EAAM,WAAW;;WAHrB,CAMG,EAAM,WAAW,EACjB,EAAM,QAAQ,kBAAC,QAAD,EAAA,UAAO,EAAM,OAAa,CAAA,GAAG,KACvC;GAMX,EACD,CAAC,EC/BI,IAAsC;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAEK,IAA0C;CAC9C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAEY,IAAS,GAAwB,EAAE,qBACjC;CACX,IAAM,IAAO,EAAM,QAAQ,MACrB,IAAM,EAAQ,IAEd,IAAoB,CAAC,SAAS;CAIpC,AAHI,EAAM,UAAQ,EAAQ,KAAK,SAAS,EACpC,EAAM,WAAS,EAAQ,KAAK,UAAU,EACtC,EAAM,eAAe,CAAC,EAAM,OAAK,EAAQ,KAAK,cAAc,EAC5D,EAAM,SAAO,EAAQ,KAAK,EAAM,MAAM;CAE1C,IAAM,IAAU,EAAM,SAChB,IAAe,MAAY,UAAU,MAAY,KAAO,IAAM,IAAI,GAElE,IAAa;EACjB,OAAO;EACP,QAAQ;EACR;EACA,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACV;CAeD,OAbI,EAAM,MAEN,kBAAC,QAAD;EAAM,OAAO,EAAQ,KAAK,IAAI;YAC5B,kBAAC,QAAD;GAAM,OAAO;aACX,kBAAC,SAAD;IACE,KAAK,EAAM;IACX,OAAO;KAAE,OAAO;KAAK,QAAQ;KAAK;KAAc;IAChD,CAAA;GACG,CAAA;EACF,CAAA,GAKT,kBAAC,QAAD;EAAM,OAAO,EAAQ,KAAK,IAAI;YAC5B,kBAAC,QAAD;GAAM,OAAM;GAAqB,OAAO;aACtC,kBAAC,QAAD;IAAM,OAAO,EAAE,UAAU,EAAY,IAAO;cAAG,EAAM,eAAe;IAAW,CAAA;GAC1E,CAAA;EACF,CAAA;EAGX,EC7DI,IAAwC;CAC5C,IAAI;CAAW,IAAI;CAAW,MAAM;CAAa,IAAI;CACrD,IAAI;CAAW,OAAO;CAAY,OAAO;CAC1C,EAEK,IAA4C;CAChD,OAAO;CAAc,QAAQ;CAAe,QAAQ;CACpD,UAAU;CAAiB,MAAM;CAClC,EAEY,IAAO,GAAsB,EAAE,UAAO,eAAY;CAC7D,IAAM,UAAmB;EACvB,IAAM,IAAc,EAAE;EAKtB,OAJI,EAAM,QAAM,EAAE,KAAK,EAAY,EAAM,MAAM,EAC3C,EAAM,UAAQ,EAAE,KAAK,EAAc,EAAM,QAAQ,EACjD,EAAM,SAAO,EAAE,KAAK,QAAQ,EAAM,QAAQ,EAC1C,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD;EAAM,OAAO,GAAY;YAAG,EAAM,WAAW;EAAQ,CAAA;EAClE,ECzBI,IAA6C;CACjD,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ,EAEY,IAAU,GAAyB,EAAE,UAAO,eAAY;CACnE,IAAM,UAAmB;EACvB,IAAM,IAAI,CAAC,EAAa,EAAM,SAAS,IAAI,oBAAoB;EAE/D,OADI,EAAM,SAAO,EAAE,KAAK,EAAM,MAAM,EAC7B,EAAE,KAAK,IAAI;;CAGpB,aAAa,kBAAC,QAAD;EAAM,OAAO,GAAY;YAAG,EAAM,WAAW;EAAQ,CAAA;EAClE"}
|
package/dist/preset/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/preset/index.ts"],"sourcesContent":["import type { Config } from 'tailwindcss';\n\n/**\n * DaisyUI Lynx Tailwind Preset\n *\n * Maps DaisyUI semantic color tokens to CSS custom properties\n * defined in @sigx/lynx-daisyui/styles. Consumers add this\n * preset to their tailwind.config.ts so utilities like\n * `bg-primary` and `text-base-content` resolve to our tokens.\n */\nconst daisyColors: Record<string, string> = {\n 'primary': 'var(--color-primary)',\n 'primary-content': 'var(--color-primary-content)',\n 'secondary': 'var(--color-secondary)',\n 'secondary-content': 'var(--color-secondary-content)',\n 'accent': 'var(--color-accent)',\n 'accent-content': 'var(--color-accent-content)',\n 'neutral': 'var(--color-neutral)',\n 'neutral-content': 'var(--color-neutral-content)',\n 'base-100': 'var(--color-base-100)',\n 'base-200': 'var(--color-base-200)',\n 'base-300': 'var(--color-base-300)',\n 'base-content': 'var(--color-base-content)',\n 'info': 'var(--color-info)',\n 'info-content': 'var(--color-info-content)',\n 'success': 'var(--color-success)',\n 'success-content': 'var(--color-success-content)',\n 'warning': 'var(--color-warning)',\n 'warning-content': 'var(--color-warning-content)',\n 'error': 'var(--color-error)',\n 'error-content': 'var(--color-error-content)',\n};\n\nexport const DaisyLynxPreset: Partial<Config> = {\n theme: {\n extend: {\n colors: daisyColors,\n },\n },\n};\n\n/** Alias — preferred consumer name. */\nexport const daisyuiPreset = DaisyLynxPreset;\n"],"mappings":"AAiCA,IAAa,IAAmC,EAC9C,OAAO,EACL,QAAQ,EACN,QAAQ;CAzBZ,SAAW;CACX,mBAAmB;CACnB,WAAa;CACb,qBAAqB;CACrB,QAAU;CACV,kBAAkB;CAClB,SAAW;CACX,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,gBAAgB;CAChB,MAAQ;CACR,gBAAgB;CAChB,SAAW;CACX,mBAAmB;CACnB,SAAW;CACX,mBAAmB;CACnB,OAAS;CACT,iBAAiB;CAML,EACT,EACF,EACF,EAGY,IAAgB"}
|