@sigx/lynx-daisyui 0.4.0 → 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.
Files changed (43) hide show
  1. package/dist/buttons/Button.js +53 -0
  2. package/dist/data/Avatar.js +46 -0
  3. package/dist/feedback/Alert.js +13 -0
  4. package/dist/feedback/Badge.js +17 -0
  5. package/dist/feedback/Loading.js +16 -0
  6. package/dist/feedback/Modal.js +23 -0
  7. package/dist/feedback/Progress.js +17 -0
  8. package/dist/feedback/Skeleton.js +18 -0
  9. package/dist/feedback/Steps.js +16 -0
  10. package/dist/forms/Checkbox.js +32 -0
  11. package/dist/forms/FormField.js +5 -0
  12. package/dist/forms/Input.js +25 -0
  13. package/dist/forms/Radio.js +28 -0
  14. package/dist/forms/Select.js +33 -0
  15. package/dist/forms/Textarea.js +31 -0
  16. package/dist/forms/Toggle.js +32 -0
  17. package/dist/index.d.ts +60 -58
  18. package/dist/index.js +38 -678
  19. package/dist/layout/Card.js +39 -0
  20. package/dist/layout/Center.d.ts +2 -1
  21. package/dist/layout/Center.js +24 -0
  22. package/dist/layout/Col.d.ts +2 -2
  23. package/dist/layout/Col.js +33 -0
  24. package/dist/layout/Divider.js +27 -0
  25. package/dist/layout/Row.d.ts +2 -2
  26. package/dist/layout/Row.js +33 -0
  27. package/dist/layout/ScrollView.js +18 -0
  28. package/dist/layout/Spacer.js +11 -0
  29. package/dist/navigation/NavHeader.js +62 -0
  30. package/dist/navigation/NavTabBar.js +58 -0
  31. package/dist/navigation/Tabs.js +18 -0
  32. package/dist/preset/index.js +66 -40
  33. package/dist/shared/press.d.ts +2 -0
  34. package/dist/shared/press.js +6 -0
  35. package/dist/shared/styles.d.ts +29 -1
  36. package/dist/shared/styles.js +90 -0
  37. package/dist/theme/ThemeProvider.js +83 -0
  38. package/dist/typography/Heading.js +19 -0
  39. package/dist/typography/Text.d.ts +11 -1
  40. package/dist/typography/Text.js +25 -0
  41. package/package.json +8 -9
  42. package/dist/index.js.map +0 -1
  43. package/dist/preset/index.js.map +0 -1
@@ -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> & Define.Slot<'default'>;
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.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "DaisyUI integration for sigx-lynx",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -37,11 +37,12 @@
37
37
  "LICENSE"
38
38
  ],
39
39
  "dependencies": {
40
- "@sigx/lynx": "^0.4.0"
40
+ "@sigx/lynx": "^0.4.1",
41
+ "@sigx/lynx-gestures": "^0.4.1"
41
42
  },
42
43
  "peerDependencies": {
43
44
  "tailwindcss": "^3.0.0 || ^4.0.0",
44
- "@sigx/lynx-navigation": "^0.4.0"
45
+ "@sigx/lynx-navigation": "^0.4.1"
45
46
  },
46
47
  "peerDependenciesMeta": {
47
48
  "@sigx/lynx-navigation": {
@@ -49,12 +50,10 @@
49
50
  }
50
51
  },
51
52
  "devDependencies": {
52
- "@sigx/vite": "^0.4.3",
53
53
  "@typescript/native-preview": "7.0.0-dev.20260511.1",
54
54
  "tailwindcss": "^4.0.0",
55
55
  "typescript": "^6.0.3",
56
- "vite": "^8.0.12",
57
- "@sigx/lynx-navigation": "^0.4.0"
56
+ "@sigx/lynx-navigation": "^0.4.1"
58
57
  },
59
58
  "publishConfig": {
60
59
  "access": "public"
@@ -70,8 +69,8 @@
70
69
  "author": "Andreas Ekdahl",
71
70
  "license": "MIT",
72
71
  "scripts": {
73
- "build": "vite build && tsgo --emitDeclarationOnly && node ../../scripts/copy-assets.mjs src/styles dist/styles",
74
- "dev": "vite build --watch",
75
- "clean": "rm -rf dist .turbo *.tsbuildinfo"
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"
76
75
  }
77
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/navigation/NavTabBar.tsx","../src/navigation/NavHeader.tsx","../src/theme/ThemeProvider.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';\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) {\n // Lynx (like React Native) expands `flex: n` shorthand to\n // `flex: n n auto`, where `flexBasis: 'auto'` means \"size to content\n // first\" — which collapses the layout chain. Write the long-form so\n // `<Center flex={1}>` etc. actually fill remaining space.\n style.flexGrow = props.flex;\n style.flexShrink = 1;\n style.flexBasis = 0;\n style.minHeight = 0;\n }\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';\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';\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';\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","/**\n * `<NavTabBar>` — daisy-themed tab bar for `@sigx/lynx-navigation`.\n *\n * Pairs with `<Tabs>` + `<Tabs.Screen>` from `@sigx/lynx-navigation`:\n * subscribes to `useTabs()` for the active tab + tab list, dispatches\n * tab changes via `setActive`. Pure UI / styling; the navigation\n * package owns state.\n *\n * Default visual treatment: bottom navigation bar — base-200 background,\n * top separator line, active label in primary color.\n *\n * Use the standalone daisy `<Tabs>` / `<Tab>` (also exported from this\n * package) instead when you want generic tab UI not driven by navigation\n * state (e.g. segmented controls inside a settings panel).\n */\nimport { component, type Define, type JSXElement } from '@sigx/lynx';\nimport { useTabs, type TabInfo } from '@sigx/lynx-navigation';\n\n/** Rendering context passed to a `renderTab` consumer. */\nexport interface NavTabRenderContext {\n /** True when this tab is currently active. Reactive — re-runs render on change. */\n readonly active: boolean;\n /** Activates this tab. Use as a `bindtap` handler on the rendered node. */\n onPress(): void;\n}\n\nexport type NavTabBarPosition = 'top' | 'bottom';\nexport type NavTabBarBackground = 'base-100' | 'base-200' | 'base-300' | 'transparent';\n\nexport type NavTabBarProps =\n /** Where the bar sits in the layout — controls which edge gets the separator border. Default 'bottom'. */\n & Define.Prop<'position', NavTabBarPosition, false>\n /** Surface color token. Default 'base-200'. */\n & Define.Prop<'background', NavTabBarBackground, false>\n /** Show a separator line on the edge opposite `position`. Default true. */\n & Define.Prop<'bordered', boolean, false>\n /** Replace per-tab rendering entirely. */\n & Define.Prop<'renderTab', (info: TabInfo, ctx: NavTabRenderContext) => JSXElement, false>;\n\nconst backgroundClass: Record<NavTabBarBackground, string> = {\n 'base-100': 'bg-base-100',\n 'base-200': 'bg-base-200',\n 'base-300': 'bg-base-300',\n 'transparent': '',\n};\n\nexport const NavTabBar = component<NavTabBarProps>(({ props }) => {\n const nav = useTabs();\n return () => {\n const tabs = nav.tabs;\n const active = nav.active;\n const renderer = props.renderTab;\n const position = props.position ?? 'bottom';\n const bg = backgroundClass[props.background ?? 'base-200'];\n const bordered = props.bordered ?? true;\n // Bottom tab bar → top border. Top tab bar → bottom border.\n const borderClass = bordered\n ? (position === 'bottom' ? 'border-t border-base-300' : 'border-b border-base-300')\n : '';\n const containerClass = ['flex flex-row', bg, borderClass].filter(Boolean).join(' ');\n\n return (\n <view accessibility-element={false} class={containerClass}>\n {tabs.map((info) => {\n const isActive = info.name === active;\n const onPress = () => nav.setActive(info.name);\n if (renderer) {\n return renderer(info, { active: isActive, onPress });\n }\n return (\n <DefaultNavTab\n info={info}\n active={isActive}\n onPress={onPress}\n />\n );\n })}\n </view>\n );\n };\n});\n\nconst DefaultNavTab = component<\n & Define.Prop<'info', TabInfo, true>\n & Define.Prop<'active', boolean, true>\n & Define.Prop<'onPress', () => void, true>\n>(({ props }) => {\n return () => {\n const label = props.info.label ?? props.info.name;\n const a11y = props.info.accessibilityLabel ?? label;\n const textColor = props.active ? 'text-primary font-semibold' : 'text-base-content opacity-60';\n return (\n <view\n bindtap={() => props.onPress()}\n accessibility-element={true}\n accessibility-label={a11y}\n accessibility-trait=\"button\"\n accessibility-status={props.active ? 'selected' : undefined}\n class=\"flex-1 items-center justify-center py-3\"\n >\n {props.info.icon ?? null}\n <text class={`text-sm ${textColor}`}>{label}</text>\n </view>\n );\n };\n});\n","/**\n * `<NavHeader>` — daisy-themed header bar for `@sigx/lynx-navigation`.\n *\n * Pairs with `<Stack>` from `@sigx/lynx-navigation`:\n *\n * ```tsx\n * <Stack initialRoute=\"tripsHome\">\n * <NavHeader />\n * </Stack>\n * ```\n *\n * Reads the focused screen's options + slot fills via\n * `useScreenChrome()`, applies daisy theming (base-200 surface, bottom\n * separator, native-ish horizontal layout with centred title).\n *\n * The navigation package's own `<Header />` is intentionally headless —\n * no flex-row, no padding, no theme — for consumers who want to do all\n * styling themselves. This component is the batteries-included variant\n * for daisyui consumers.\n */\nimport { component, type Define, type JSXElement } from '@sigx/lynx';\nimport { useScreenChrome } from '@sigx/lynx-navigation';\n\nexport type NavHeaderBackground = 'base-100' | 'base-200' | 'base-300' | 'transparent';\n\nexport type NavHeaderProps =\n /** Surface color token. Default 'base-200'. */\n & Define.Prop<'background', NavHeaderBackground, false>\n /** Show a separator line at the bottom. Default true. */\n & Define.Prop<'bordered', boolean, false>\n /** Replace the back button entirely. Receives `pop` so the custom node can wire its own tap handler. */\n & Define.Prop<'renderBack', (ctx: { pop: () => void }) => JSXElement, false>;\n\nconst backgroundClass: Record<NavHeaderBackground, string> = {\n 'base-100': 'bg-base-100',\n 'base-200': 'bg-base-200',\n 'base-300': 'bg-base-300',\n 'transparent': '',\n};\n\nexport const NavHeader = component<NavHeaderProps>(({ props }) => {\n const chrome = useScreenChrome();\n\n return () => {\n if (!chrome.headerShown) return null;\n\n // Full override: <Screen.Header> rendered.\n const override = chrome.header;\n if (override) return override();\n\n const bg = backgroundClass[props.background ?? 'base-200'];\n const bordered = props.bordered ?? true;\n const borderClass = bordered ? 'border-b border-base-300' : '';\n const containerClass = [\n 'flex flex-row items-center px-3',\n 'h-12', // ~48dp / standard nav bar height\n bg,\n borderClass,\n ].filter(Boolean).join(' ');\n\n const left = chrome.headerLeft?.()\n ?? (chrome.canGoBack\n ? (props.renderBack\n ? props.renderBack({ pop: chrome.pop })\n : <DefaultBackButton onPress={chrome.pop} />)\n : null);\n\n const right = chrome.headerRight?.() ?? null;\n\n return (\n <view class={containerClass}>\n {/* Left zone — fixed min width so the centred title is stable */}\n <view class=\"flex flex-row items-center\" style={{ minWidth: 56 }}>\n {left}\n </view>\n {/* Title fills the middle */}\n <view class=\"flex-1 items-center justify-center\">\n <text class=\"text-base-content text-base font-semibold\">\n {chrome.title}\n </text>\n </view>\n {/* Right zone — matches left min width for symmetry */}\n <view\n class=\"flex flex-row items-center justify-end\"\n style={{ minWidth: 56 }}\n >\n {right}\n </view>\n </view>\n );\n };\n});\n\nconst DefaultBackButton = component<Define.Prop<'onPress', () => void, true>>(({ props }) => {\n return () => (\n <view\n bindtap={() => props.onPress()}\n accessibility-element={true}\n accessibility-label=\"Back\"\n accessibility-trait=\"button\"\n class=\"px-2 py-2\"\n >\n <text class=\"text-primary text-base\">‹ Back</text>\n </view>\n );\n});\n","/**\n * `<ThemeProvider>` and `useTheme()` — daisyui theme switching for\n * `@sigx/lynx-daisyui`.\n *\n * The package ships two color themes (`daisy-light`, `daisy-dark`) plus\n * style modifier themes (`daisy-rounded`, `daisy-flat`). Each is a CSS\n * class containing scoped `--color-*` / `--radius-*` / `--border-*`\n * variable definitions; descendants of an element with the class\n * inherit those variables (Lynx has `enableCSSInheritance: true` in\n * its layout-pipeline defaults), and the daisyui components are built\n * to read those vars directly.\n *\n * Usage:\n *\n * ```tsx\n * import { ThemeProvider, useTheme } from '@sigx/lynx-daisyui';\n *\n * defineApp(() => () => (\n * <ThemeProvider initial=\"daisy-light\">\n * <App />\n * </ThemeProvider>\n * ));\n *\n * // Anywhere inside:\n * const theme = useTheme();\n * theme.toggle(); // daisy-light ↔ daisy-dark\n * theme.set('daisy-dark'); // explicit\n * theme.name; // 'daisy-light' | 'daisy-dark' | custom string\n * ```\n *\n * For multi-class compositions (color + modifier), set a custom string:\n * `theme.set('daisy-light daisy-rounded')`.\n */\nimport {\n component,\n defineInjectable,\n defineProvide,\n signal,\n type Define,\n} from '@sigx/lynx';\n\n/**\n * Theme class applied to the provider's host view. The two built-ins\n * (`daisy-light` / `daisy-dark`) get autocomplete; arbitrary strings\n * are accepted for custom themes or multi-class compositions like\n * `'daisy-light daisy-rounded'`.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types\nexport type DaisyTheme = 'daisy-light' | 'daisy-dark' | (string & {});\n\nexport interface ThemeController {\n /** Current theme class. Reactive — read inside render/effect to track. */\n readonly name: DaisyTheme;\n /** Replace the active theme. */\n set(name: DaisyTheme): void;\n /**\n * Flip between `daisy-light` and `daisy-dark`. When the active\n * theme is neither (custom / multi-class), defaults to\n * `daisy-dark` on first call.\n */\n toggle(): void;\n}\n\n/**\n * Access the enclosing daisyui theme controller. Throws when used\n * outside `<ThemeProvider>` — install a provider at your app root.\n */\nexport const useTheme = defineInjectable<ThemeController>(() => {\n throw new Error(\n '[lynx-daisyui] useTheme() called outside <ThemeProvider>. Wrap your app root with `<ThemeProvider initial=\"daisy-light\">…</ThemeProvider>`.',\n );\n});\n\nexport type ThemeProviderProps =\n /** Initial theme class. Defaults to `daisy-light`. */\n & Define.Prop<'initial', DaisyTheme, false>\n /** Extra classes appended to the theme class on the host view. */\n & Define.Prop<'class', string, false>\n /** Extra inline style on the host view. Merged after the base flex-fill defaults. */\n & Define.Prop<'style', Record<string, string | number>, false>\n & Define.Slot<'default'>;\n\n/**\n * Wraps children in a `<view class={theme}>` so the daisyui CSS\n * variables defined inside `.daisy-light` / `.daisy-dark` inherit\n * down to every descendant.\n *\n * The host view defaults to flex-fill long-form so the wrapper doesn't\n * collapse between ancestors that flex (e.g. `<SafeAreaProvider>`) and\n * descendants that need a sized parent (`<SafeAreaView>`). Consumers\n * override the layout via `style`.\n *\n * Theme name is held in an *object* signal (not a primitive) so the\n * literal-union type survives — `signal<T>` widens primitive literals\n * to plain `string` via `Widen<T>`.\n */\nexport const ThemeProvider = component<ThemeProviderProps>(({ props, slots }) => {\n const state = signal<{ name: DaisyTheme }>({ name: props.initial ?? 'daisy-light' });\n\n const controller: ThemeController = {\n get name() { return state.name; },\n set(next) { state.name = next; },\n toggle() {\n if (state.name === 'daisy-light') state.name = 'daisy-dark';\n else if (state.name === 'daisy-dark') state.name = 'daisy-light';\n else state.name = 'daisy-dark';\n },\n };\n\n defineProvide(useTheme, () => controller);\n\n return () => {\n const baseStyle: Record<string, string | number> = {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n };\n return (\n <view\n class={`${state.name}${props.class ? ' ' + props.class : ''}`}\n style={props.style ? { ...baseStyle, ...props.style } : baseStyle}\n >\n {slots.default?.()}\n </view>\n );\n };\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":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/preset/index.ts"],"sourcesContent":["import type { Config } from 'tailwindcss';\nimport plugin from 'tailwindcss/plugin';\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 *\n * Also ships a `flex-fill` utility — the Lynx-correct \"fill remaining\n * space\" class. Why this is in our preset rather than baked into Lynx's\n * own tailwind preset: in Lynx (like React Native) `flex: 1` shorthand\n * expands to `flex: 1 1 auto`, where `flexBasis: 'auto'` sizes the box\n * to its content first, collapsing the layout chain. The browser-CSS\n * intuition that `flex-1` = \"fill remaining space\" is wrong here, and\n * Tailwind's own `flex-1` class expands to the same broken shorthand.\n * `flex-fill` writes the long-form properties directly so the result\n * actually fills.\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\nconst lynxLayoutPlugin = plugin(({ addUtilities }) => {\n addUtilities({\n // Long-form flex-fill — the Lynx-correct \"take remaining space along\n // the main axis\" utility. Default flex direction column; consumers\n // who want a horizontal fill compose with `flex-row` on the parent.\n '.flex-fill': {\n flexGrow: '1',\n flexShrink: '1',\n flexBasis: '0',\n minHeight: '0',\n display: 'flex',\n flexDirection: 'column',\n },\n });\n});\n\nexport const DaisyLynxPreset: Partial<Config> = {\n theme: {\n extend: {\n colors: daisyColors,\n },\n },\n plugins: [lynxLayoutPlugin],\n};\n\n/** Alias — preferred consumer name. */\nexport const daisyuiPreset = DaisyLynxPreset;\n"],"mappings":";;AAqBA,IAAM,IAAsC;CAC1C,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;CAClB,EAEK,IAAmB,GAAQ,EAAE,sBAAmB;CACpD,EAAa,EAIX,cAAc;EACZ,UAAU;EACV,YAAY;EACZ,WAAW;EACX,WAAW;EACX,SAAS;EACT,eAAe;EAChB,EACF,CAAC;EACF,EAEW,IAAmC;CAC9C,OAAO,EACL,QAAQ,EACN,QAAQ,GACT,EACF;CACD,SAAS,CAAC,EAAiB;CAC5B,EAGY,IAAgB"}