@agimon-ai/po-native-components 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +71 -0
  3. package/dist/components/Badge.d.mts +17 -0
  4. package/dist/components/Badge.d.mts.map +1 -0
  5. package/dist/components/Badge.mjs +106 -0
  6. package/dist/components/Badge.mjs.map +1 -0
  7. package/dist/components/Button.d.mts +20 -0
  8. package/dist/components/Button.d.mts.map +1 -0
  9. package/dist/components/Button.mjs +278 -0
  10. package/dist/components/Button.mjs.map +1 -0
  11. package/dist/components/CodeBlock.d.mts +10 -0
  12. package/dist/components/CodeBlock.d.mts.map +1 -0
  13. package/dist/components/CodeBlock.mjs +88 -0
  14. package/dist/components/CodeBlock.mjs.map +1 -0
  15. package/dist/components/Dialog.d.mts +52 -0
  16. package/dist/components/Dialog.d.mts.map +1 -0
  17. package/dist/components/Dialog.mjs +257 -0
  18. package/dist/components/Dialog.mjs.map +1 -0
  19. package/dist/components/Dot.d.mts +17 -0
  20. package/dist/components/Dot.d.mts.map +1 -0
  21. package/dist/components/Dot.mjs +94 -0
  22. package/dist/components/Dot.mjs.map +1 -0
  23. package/dist/components/DropdownMenu.d.mts +63 -0
  24. package/dist/components/DropdownMenu.d.mts.map +1 -0
  25. package/dist/components/DropdownMenu.mjs +256 -0
  26. package/dist/components/DropdownMenu.mjs.map +1 -0
  27. package/dist/components/EmptyState.d.mts +14 -0
  28. package/dist/components/EmptyState.d.mts.map +1 -0
  29. package/dist/components/EmptyState.mjs +64 -0
  30. package/dist/components/EmptyState.mjs.map +1 -0
  31. package/dist/components/Input.d.mts +19 -0
  32. package/dist/components/Input.d.mts.map +1 -0
  33. package/dist/components/Input.mjs +123 -0
  34. package/dist/components/Input.mjs.map +1 -0
  35. package/dist/components/Label.d.mts +13 -0
  36. package/dist/components/Label.d.mts.map +1 -0
  37. package/dist/components/Label.mjs +36 -0
  38. package/dist/components/Label.mjs.map +1 -0
  39. package/dist/components/List.d.mts +48 -0
  40. package/dist/components/List.d.mts.map +1 -0
  41. package/dist/components/List.mjs +156 -0
  42. package/dist/components/List.mjs.map +1 -0
  43. package/dist/components/Markdown.d.mts +15 -0
  44. package/dist/components/Markdown.d.mts.map +1 -0
  45. package/dist/components/Markdown.mjs +219 -0
  46. package/dist/components/Markdown.mjs.map +1 -0
  47. package/dist/components/MessageItem.d.mts +87 -0
  48. package/dist/components/MessageItem.d.mts.map +1 -0
  49. package/dist/components/MessageItem.mjs +361 -0
  50. package/dist/components/MessageItem.mjs.map +1 -0
  51. package/dist/components/Panel.d.mts +15 -0
  52. package/dist/components/Panel.d.mts.map +1 -0
  53. package/dist/components/Panel.mjs +77 -0
  54. package/dist/components/Panel.mjs.map +1 -0
  55. package/dist/components/PoNativeProvider.d.mts +15 -0
  56. package/dist/components/PoNativeProvider.d.mts.map +1 -0
  57. package/dist/components/PoNativeProvider.mjs +22 -0
  58. package/dist/components/PoNativeProvider.mjs.map +1 -0
  59. package/dist/components/SectionLabel.d.mts +6 -0
  60. package/dist/components/SectionLabel.d.mts.map +1 -0
  61. package/dist/components/SectionLabel.mjs +40 -0
  62. package/dist/components/SectionLabel.mjs.map +1 -0
  63. package/dist/components/SegmentedControl.d.mts +26 -0
  64. package/dist/components/SegmentedControl.d.mts.map +1 -0
  65. package/dist/components/SegmentedControl.mjs +56 -0
  66. package/dist/components/SegmentedControl.mjs.map +1 -0
  67. package/dist/components/Sheet.d.mts +39 -0
  68. package/dist/components/Sheet.d.mts.map +1 -0
  69. package/dist/components/Sheet.mjs +166 -0
  70. package/dist/components/Sheet.mjs.map +1 -0
  71. package/dist/components/SheetFrame.mjs +84 -0
  72. package/dist/components/SheetFrame.mjs.map +1 -0
  73. package/dist/components/Spinner.d.mts +19 -0
  74. package/dist/components/Spinner.d.mts.map +1 -0
  75. package/dist/components/Spinner.mjs +34 -0
  76. package/dist/components/Spinner.mjs.map +1 -0
  77. package/dist/components/StatusBadge.d.mts +23 -0
  78. package/dist/components/StatusBadge.d.mts.map +1 -0
  79. package/dist/components/StatusBadge.mjs +116 -0
  80. package/dist/components/StatusBadge.mjs.map +1 -0
  81. package/dist/components/Tabs.d.mts +44 -0
  82. package/dist/components/Tabs.d.mts.map +1 -0
  83. package/dist/components/Tabs.mjs +197 -0
  84. package/dist/components/Tabs.mjs.map +1 -0
  85. package/dist/components/Textarea.d.mts +10 -0
  86. package/dist/components/Textarea.d.mts.map +1 -0
  87. package/dist/components/Textarea.mjs +29 -0
  88. package/dist/components/Textarea.mjs.map +1 -0
  89. package/dist/icons/IconColorContext.d.mts +10 -0
  90. package/dist/icons/IconColorContext.d.mts.map +1 -0
  91. package/dist/icons/IconColorContext.mjs +13 -0
  92. package/dist/icons/IconColorContext.mjs.map +1 -0
  93. package/dist/icons/iconGlyphs.d.mts +120 -0
  94. package/dist/icons/iconGlyphs.d.mts.map +1 -0
  95. package/dist/icons/iconGlyphs.mjs +121 -0
  96. package/dist/icons/iconGlyphs.mjs.map +1 -0
  97. package/dist/icons/icons.d.mts +122 -0
  98. package/dist/icons/icons.d.mts.map +1 -0
  99. package/dist/icons/icons.mjs +79 -0
  100. package/dist/icons/icons.mjs.map +1 -0
  101. package/dist/index.d.mts +27 -0
  102. package/dist/index.mjs +27 -0
  103. package/dist/lib/fonts.d.mts +13 -0
  104. package/dist/lib/fonts.d.mts.map +1 -0
  105. package/dist/lib/fonts.mjs +22 -0
  106. package/dist/lib/fonts.mjs.map +1 -0
  107. package/dist/lib/haptics.d.mts +7 -0
  108. package/dist/lib/haptics.d.mts.map +1 -0
  109. package/dist/lib/haptics.mjs +25 -0
  110. package/dist/lib/haptics.mjs.map +1 -0
  111. package/dist/lib/insideSheet.mjs +16 -0
  112. package/dist/lib/insideSheet.mjs.map +1 -0
  113. package/dist/lib/markdown.mjs +271 -0
  114. package/dist/lib/markdown.mjs.map +1 -0
  115. package/dist/lib/tone.mjs +50 -0
  116. package/dist/lib/tone.mjs.map +1 -0
  117. package/dist/lib/useControllable.mjs +22 -0
  118. package/dist/lib/useControllable.mjs.map +1 -0
  119. package/dist/lib/wrapText.mjs +20 -0
  120. package/dist/lib/wrapText.mjs.map +1 -0
  121. package/llms.txt +8 -0
  122. package/package.json +104 -0
@@ -0,0 +1,44 @@
1
+ import { StyleProp, ViewProps, ViewStyle } from "react-native";
2
+ import { ReactNode } from "react";
3
+ //#region src/components/Tabs.d.ts
4
+ export interface TabsProps extends Omit<ViewProps, 'children' | 'style'> {
5
+ /** Controlled mode; pair with onValueChange. Omit it and the tabs keep their own state. */
6
+ value?: string;
7
+ defaultValue?: string;
8
+ onValueChange?: (value: string) => void;
9
+ children?: ReactNode;
10
+ style?: StyleProp<ViewStyle>;
11
+ }
12
+ export declare function Tabs({ value, defaultValue, onValueChange, children, style, ...props }: TabsProps): import("react").JSX.Element;
13
+ export interface TabsListProps {
14
+ children?: ReactNode;
15
+ style?: StyleProp<ViewStyle>;
16
+ }
17
+ /** The tab strip; it scrolls sideways when the tabs outgrow it. */
18
+ export declare function TabsList({ children, style }: TabsListProps): import("react").JSX.Element;
19
+ export interface TabsTriggerProps {
20
+ value: string;
21
+ disabled?: boolean;
22
+ /** The label; a bare string is drawn in the tab's type, and a TabBadge may follow it. */
23
+ children?: ReactNode;
24
+ accessibilityLabel?: string;
25
+ style?: StyleProp<ViewStyle>;
26
+ }
27
+ export declare function TabsTrigger({ value, disabled, children, accessibilityLabel, style }: TabsTriggerProps): import("react").JSX.Element;
28
+ export interface TabsContentProps extends Omit<ViewProps, 'children' | 'style'> {
29
+ value: string;
30
+ children?: ReactNode;
31
+ style?: StyleProp<ViewStyle>;
32
+ }
33
+ /** The panel for one tab; only the active one renders. */
34
+ export declare function TabsContent({ value, children, style, ...props }: TabsContentProps): import("react").JSX.Element | null;
35
+ export interface TabBadgeProps {
36
+ /** Defaults to the enclosing tab's state: it inverts on the active tab so it stays readable on the tint. */
37
+ active?: boolean;
38
+ children?: ReactNode;
39
+ style?: StyleProp<ViewStyle>;
40
+ }
41
+ /** The count beside a tab's label. */
42
+ export declare function TabBadge({ active, children, style }: TabBadgeProps): import("react").JSX.Element;
43
+ //#endregion
44
+ //# sourceMappingURL=Tabs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.mts","names":[],"sources":["../../src/components/Tabs.tsx"],"mappings":";;;iBA8BiB,kBAAkB,KAAK;;EAEtC;EACA;EACA,iBAAiB;EACjB,WAAW;EACX,QAAQ,UAAU;;wBAGJ,OAAO,OAAO,cAAc,eAAe,UAAU,UAAU,SAAS,4BAAS,IAAA;iBAehF;EACf,WAAW;EACX,QAAQ,UAAU;;;wBAIJ,WAAW,UAAU,SAAS,gCAAa,IAAA;iBAc1C;EACf;EACA;;EAEA,WAAW;EACX;EACA,QAAQ,UAAU;;wBAGJ,cAAc,OAAO,UAAkB,UAAU,oBAAoB,SAAS,mCAAgB,IAAA;iBA2B7F,yBAAyB,KAAK;EAC7C;EACA,WAAW;EACX,QAAQ,UAAU;;;wBAIJ,cAAc,OAAO,UAAU,UAAU,SAAS,mCAAgB,IAAA;iBAUjE;;EAEf;EACA,WAAW;EACX,QAAQ,UAAU;;;wBAIJ,WAAW,QAAQ,UAAU,SAAS,gCAAa,IAAA"}
@@ -0,0 +1,197 @@
1
+ import { fontOf } from "../lib/fonts.mjs";
2
+ import { wrapText } from "../lib/wrapText.mjs";
3
+ import { selectionTick } from "../lib/haptics.mjs";
4
+ import { useControllable } from "../lib/useControllable.mjs";
5
+ import { View } from "react-native-unistyles/components/native/View";
6
+ import { StyleSheet } from "react-native-unistyles";
7
+ import { Text } from "react-native-unistyles/components/native/Text";
8
+ import { createContext, useContext } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ import { Pressable } from "react-native-unistyles/components/native/Pressable";
11
+ import { ScrollView } from "react-native-unistyles/components/native/ScrollView";
12
+
13
+ //#region src/components/Tabs.tsx
14
+ /** `min-h-6`, padded to Apple's 44pt tap target by hitSlop. */
15
+ const TAB_HEIGHT = 24;
16
+ const DISABLED_OPACITY = .4;
17
+ const BADGE_SIZE = 15;
18
+ const TabsContext = createContext({
19
+ value: void 0,
20
+ setValue: () => void 0
21
+ });
22
+ /** Whether the enclosing trigger is active, so a TabBadge inverts without being told. */
23
+ const TabActiveContext = createContext(false);
24
+ function Tabs({ value, defaultValue, onValueChange, children, style, ...props }) {
25
+ const [current, setValue] = useControllable(value, defaultValue, onValueChange);
26
+ return /* @__PURE__ */ jsx(TabsContext.Provider, {
27
+ value: {
28
+ value: current,
29
+ setValue
30
+ },
31
+ children: /* @__PURE__ */ jsx(View, {
32
+ style: [styles.tabs, style],
33
+ ...props,
34
+ children
35
+ })
36
+ });
37
+ }
38
+ /** The tab strip; it scrolls sideways when the tabs outgrow it. */
39
+ function TabsList({ children, style }) {
40
+ return /* @__PURE__ */ jsx(ScrollView, {
41
+ horizontal: true,
42
+ showsHorizontalScrollIndicator: false,
43
+ accessibilityRole: "tablist",
44
+ style: styles.listScroll,
45
+ contentContainerStyle: [styles.list, style],
46
+ children
47
+ });
48
+ }
49
+ function TabsTrigger({ value, disabled = false, children, accessibilityLabel, style }) {
50
+ const tabs = useContext(TabsContext);
51
+ const active = tabs.value === value;
52
+ const _styles = styles;
53
+ {
54
+ const styles = _styles.useVariants({ active });
55
+ return /* @__PURE__ */ jsx(Pressable, {
56
+ accessibilityRole: "tab",
57
+ accessibilityLabel,
58
+ accessibilityState: {
59
+ selected: active,
60
+ disabled
61
+ },
62
+ disabled,
63
+ hitSlop: 10,
64
+ onPress: () => {
65
+ if (active) return;
66
+ selectionTick();
67
+ tabs.setValue(value);
68
+ },
69
+ style: ({ pressed }) => [
70
+ styles.tab,
71
+ pressed && !active && styles.pressed,
72
+ disabled && styles.disabled,
73
+ style
74
+ ],
75
+ children: ({ pressed }) => /* @__PURE__ */ jsx(TabActiveContext.Provider, {
76
+ value: active,
77
+ children: wrapText(children, [styles.label, pressed && !active && styles.labelPressed])
78
+ })
79
+ });
80
+ }
81
+ }
82
+ /** The panel for one tab; only the active one renders. */
83
+ function TabsContent({ value, children, style, ...props }) {
84
+ if (useContext(TabsContext).value !== value) return null;
85
+ return /* @__PURE__ */ jsx(View, {
86
+ style: [styles.content, style],
87
+ ...props,
88
+ children: wrapText(children, styles.contentText)
89
+ });
90
+ }
91
+ /** The count beside a tab's label. */
92
+ function TabBadge({ active, children, style }) {
93
+ const inherited = useContext(TabActiveContext);
94
+ const _styles2 = styles;
95
+ {
96
+ const styles = _styles2.useVariants({ badge: active ?? inherited ? "active" : "idle" });
97
+ return /* @__PURE__ */ jsx(View, {
98
+ style: [styles.badge, style],
99
+ children: /* @__PURE__ */ jsx(Text, {
100
+ style: styles.badgeText,
101
+ children
102
+ })
103
+ });
104
+ }
105
+ }
106
+ const styles = StyleSheet.create((theme) => ({
107
+ tabs: {
108
+ gap: theme.spacing(2),
109
+ uni__dependencies: [0]
110
+ },
111
+ listScroll: { flexGrow: 0 },
112
+ list: {
113
+ flexDirection: "row",
114
+ alignItems: "center",
115
+ gap: theme.spacing(1),
116
+ uni__dependencies: [0]
117
+ },
118
+ tab: {
119
+ flexDirection: "row",
120
+ alignItems: "center",
121
+ gap: theme.spacing(1.5),
122
+ minHeight: TAB_HEIGHT,
123
+ minWidth: TAB_HEIGHT,
124
+ borderRadius: theme.borderRadius.DEFAULT,
125
+ paddingHorizontal: theme.spacing(2),
126
+ paddingVertical: theme.spacing(1),
127
+ variants: { active: {
128
+ true: { backgroundColor: theme.colors["tint-green"] },
129
+ false: {}
130
+ } },
131
+ uni__dependencies: [0, 4]
132
+ },
133
+ pressed: {
134
+ backgroundColor: theme.colors.panel,
135
+ uni__dependencies: [0]
136
+ },
137
+ disabled: { opacity: DISABLED_OPACITY },
138
+ label: {
139
+ fontFamily: fontOf(theme.fontFamily.sans),
140
+ fontSize: theme.fontSize.base,
141
+ lineHeight: theme.lineHeight.base,
142
+ variants: { active: {
143
+ true: {
144
+ color: theme.colors.green,
145
+ fontWeight: theme.fontWeight.semibold
146
+ },
147
+ false: {
148
+ color: theme.colors.dim,
149
+ fontWeight: theme.fontWeight.medium
150
+ }
151
+ } },
152
+ uni__dependencies: [0, 4]
153
+ },
154
+ labelPressed: {
155
+ color: theme.colors.hi,
156
+ uni__dependencies: [0]
157
+ },
158
+ content: {
159
+ flexGrow: 1,
160
+ minHeight: 0
161
+ },
162
+ contentText: {
163
+ color: theme.colors.dim,
164
+ fontFamily: fontOf(theme.fontFamily.sans),
165
+ fontSize: theme.fontSize.sm,
166
+ lineHeight: theme.lineHeight.sm,
167
+ uni__dependencies: [0]
168
+ },
169
+ badge: {
170
+ alignItems: "center",
171
+ justifyContent: "center",
172
+ height: BADGE_SIZE,
173
+ minWidth: BADGE_SIZE,
174
+ borderRadius: theme.borderRadius.full,
175
+ paddingHorizontal: theme.spacing(1),
176
+ variants: { badge: {
177
+ active: { backgroundColor: theme.colors.green },
178
+ idle: { backgroundColor: theme.colors.panel }
179
+ } },
180
+ uni__dependencies: [0, 4]
181
+ },
182
+ badgeText: {
183
+ fontFamily: fontOf(theme.fontFamily.sans),
184
+ fontSize: theme.fontSize["2xs"],
185
+ lineHeight: theme.lineHeight["2xs"],
186
+ fontWeight: theme.fontWeight.semibold,
187
+ variants: { badge: {
188
+ active: { color: theme.colors.rail },
189
+ idle: { color: theme.colors.dim }
190
+ } },
191
+ uni__dependencies: [0, 4]
192
+ }
193
+ }));
194
+
195
+ //#endregion
196
+ export { TabBadge, Tabs, TabsContent, TabsList, TabsTrigger };
197
+ //# sourceMappingURL=Tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.mjs","names":["createContext","ReactNode","useContext","StyleProp","ViewProps","ViewStyle","StyleSheet","fontOf","selectionTick","useControllable","wrapText","TAB_HEIGHT","MIN_TAP_TARGET","DISABLED_OPACITY","BADGE_SIZE","TabsState","value","setValue","TabsContext","undefined","TabActiveContext","TabsProps","Omit","defaultValue","onValueChange","children","style","Tabs","props","current","next","styles","tabs","TabsListProps","TabsList","listScroll","list","TabsTriggerProps","disabled","accessibilityLabel","TabsTrigger","active","_styles","useVariants","selected","pressed","tab","label","labelPressed","TabsContentProps","TabsContent","content","contentText","TabBadgeProps","TabBadge","inherited","_styles2","badge","badgeText","create","theme","gap","spacing","uni__dependencies","flexGrow","flexDirection","alignItems","minHeight","minWidth","borderRadius","DEFAULT","paddingHorizontal","paddingVertical","variants","true","backgroundColor","colors","false","panel","opacity","fontFamily","sans","fontSize","base","lineHeight","color","green","fontWeight","semibold","dim","medium","hi","sm","justifyContent","height","full","idle","rail"],"sources":["../../src/components/Tabs.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext } from 'react';\nimport { Pressable, ScrollView, type StyleProp, Text, View, type ViewProps, type ViewStyle } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport { fontOf } from '../lib/fonts';\nimport { selectionTick } from '../lib/haptics';\nimport { useControllable } from '../lib/useControllable';\nimport { wrapText } from '../lib/wrapText';\n\n/*\n * The web Tabs on a horizontal ScrollView: a strip that scrolls when the tabs\n * outgrow the screen, the active tab in a green tint, and a selection tick on\n * each change. The panels swap in place.\n */\n\n/** `min-h-6`, padded to Apple's 44pt tap target by hitSlop. */\nconst TAB_HEIGHT = 24;\nconst MIN_TAP_TARGET = 44;\nconst DISABLED_OPACITY = 0.4;\nconst BADGE_SIZE = 15;\n\ninterface TabsState {\n value: string | undefined;\n setValue: (value: string) => void;\n}\n\nconst TabsContext = createContext<TabsState>({ value: undefined, setValue: () => undefined });\n/** Whether the enclosing trigger is active, so a TabBadge inverts without being told. */\nconst TabActiveContext = createContext(false);\n\nexport interface TabsProps extends Omit<ViewProps, 'children' | 'style'> {\n /** Controlled mode; pair with onValueChange. Omit it and the tabs keep their own state. */\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nexport function Tabs({ value, defaultValue, onValueChange, children, style, ...props }: TabsProps) {\n const [current, setValue] = useControllable<string | undefined>(\n value,\n defaultValue,\n onValueChange as ((next: string | undefined) => void) | undefined,\n );\n return (\n <TabsContext.Provider value={{ value: current, setValue }}>\n <View style={[styles.tabs, style]} {...props}>\n {children}\n </View>\n </TabsContext.Provider>\n );\n}\n\nexport interface TabsListProps {\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/** The tab strip; it scrolls sideways when the tabs outgrow it. */\nexport function TabsList({ children, style }: TabsListProps) {\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n accessibilityRole=\"tablist\"\n style={styles.listScroll}\n contentContainerStyle={[styles.list, style]}\n >\n {children}\n </ScrollView>\n );\n}\n\nexport interface TabsTriggerProps {\n value: string;\n disabled?: boolean;\n /** The label; a bare string is drawn in the tab's type, and a TabBadge may follow it. */\n children?: ReactNode;\n accessibilityLabel?: string;\n style?: StyleProp<ViewStyle>;\n}\n\nexport function TabsTrigger({ value, disabled = false, children, accessibilityLabel, style }: TabsTriggerProps) {\n const tabs = useContext(TabsContext);\n const active = tabs.value === value;\n styles.useVariants({ active });\n return (\n <Pressable\n accessibilityRole=\"tab\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ selected: active, disabled }}\n disabled={disabled}\n hitSlop={(MIN_TAP_TARGET - TAB_HEIGHT) / 2}\n onPress={() => {\n if (active) return;\n selectionTick();\n tabs.setValue(value);\n }}\n style={({ pressed }) => [styles.tab, pressed && !active && styles.pressed, disabled && styles.disabled, style]}\n >\n {({ pressed }) => (\n <TabActiveContext.Provider value={active}>\n {wrapText(children, [styles.label, pressed && !active && styles.labelPressed])}\n </TabActiveContext.Provider>\n )}\n </Pressable>\n );\n}\n\nexport interface TabsContentProps extends Omit<ViewProps, 'children' | 'style'> {\n value: string;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/** The panel for one tab; only the active one renders. */\nexport function TabsContent({ value, children, style, ...props }: TabsContentProps) {\n const tabs = useContext(TabsContext);\n if (tabs.value !== value) return null;\n return (\n <View style={[styles.content, style]} {...props}>\n {wrapText(children, styles.contentText)}\n </View>\n );\n}\n\nexport interface TabBadgeProps {\n /** Defaults to the enclosing tab's state: it inverts on the active tab so it stays readable on the tint. */\n active?: boolean;\n children?: ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\n/** The count beside a tab's label. */\nexport function TabBadge({ active, children, style }: TabBadgeProps) {\n const inherited = useContext(TabActiveContext);\n styles.useVariants({ badge: (active ?? inherited) ? 'active' : 'idle' });\n return (\n <View style={[styles.badge, style]}>\n <Text style={styles.badgeText}>{children}</Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create((theme) => ({\n tabs: { gap: theme.spacing(2) },\n listScroll: { flexGrow: 0 },\n list: { flexDirection: 'row', alignItems: 'center', gap: theme.spacing(1) },\n tab: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n minHeight: TAB_HEIGHT,\n minWidth: TAB_HEIGHT,\n borderRadius: theme.borderRadius.DEFAULT,\n paddingHorizontal: theme.spacing(2),\n paddingVertical: theme.spacing(1),\n variants: {\n active: {\n true: { backgroundColor: theme.colors['tint-green'] },\n false: {},\n },\n },\n },\n pressed: { backgroundColor: theme.colors.panel },\n disabled: { opacity: DISABLED_OPACITY },\n label: {\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n variants: {\n active: {\n true: { color: theme.colors.green, fontWeight: theme.fontWeight.semibold },\n false: { color: theme.colors.dim, fontWeight: theme.fontWeight.medium },\n },\n },\n },\n labelPressed: { color: theme.colors.hi },\n content: { flexGrow: 1, minHeight: 0 },\n contentText: {\n color: theme.colors.dim,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n },\n badge: {\n alignItems: 'center',\n justifyContent: 'center',\n height: BADGE_SIZE,\n minWidth: BADGE_SIZE,\n borderRadius: theme.borderRadius.full,\n paddingHorizontal: theme.spacing(1),\n variants: {\n badge: {\n active: { backgroundColor: theme.colors.green },\n idle: { backgroundColor: theme.colors.panel },\n },\n },\n },\n badgeText: {\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize['2xs'],\n lineHeight: theme.lineHeight['2xs'],\n fontWeight: theme.fontWeight.semibold,\n variants: {\n badge: {\n active: { color: theme.colors.rail },\n idle: { color: theme.colors.dim },\n },\n },\n },\n}));\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { InputProps } from "./Input.mjs";
2
+ //#region src/components/Textarea.d.ts
3
+ export interface TextareaProps extends Omit<InputProps, 'multiline'> {
4
+ /** Visible lines before the field scrolls; sets the minimum height. */
5
+ rows?: number;
6
+ }
7
+ /** The multi-line field, styled as the Input; `bare` drops the well for a composer that draws its own. */
8
+ export declare function Textarea({ rows, size, style, ...props }: TextareaProps): import("react").JSX.Element;
9
+ //#endregion
10
+ //# sourceMappingURL=Textarea.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.d.mts","names":[],"sources":["../../src/components/Textarea.tsx"],"mappings":";;iBAIiB,sBAAsB,KAAK;;EAE1C;;;wBAMc,WAAW,MAAqB,MAAa,UAAU,SAAS,gCAAa,IAAA"}
@@ -0,0 +1,29 @@
1
+ import { Input } from "./Input.mjs";
2
+ import { StyleSheet } from "react-native-unistyles";
3
+ import { jsx } from "react/jsx-runtime";
4
+
5
+ //#region src/components/Textarea.tsx
6
+ const DEFAULT_ROWS = 2;
7
+ /** The multi-line field, styled as the Input; `bare` drops the well for a composer that draws its own. */
8
+ function Textarea({ rows = DEFAULT_ROWS, size = "md", style, ...props }) {
9
+ return /* @__PURE__ */ jsx(Input, {
10
+ multiline: true,
11
+ numberOfLines: rows,
12
+ size,
13
+ textAlignVertical: "top",
14
+ style: [styles.area(rows, size), style],
15
+ ...props
16
+ });
17
+ }
18
+ const styles = StyleSheet.create((theme) => ({ area: (rows, size) => {
19
+ const step = size === "xs" || size === "sm" ? "sm" : "base";
20
+ return {
21
+ minHeight: Math.max(44, rows * theme.lineHeight[step] + theme.spacing(3)),
22
+ lineHeight: theme.lineHeight[step],
23
+ uni__dependencies: [0]
24
+ };
25
+ } }));
26
+
27
+ //#endregion
28
+ export { Textarea };
29
+ //# sourceMappingURL=Textarea.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.mjs","names":["StyleSheet","Input","InputProps","TextareaProps","Omit","rows","DEFAULT_ROWS","Textarea","size","style","props","styles","area","create","theme","NonNullable","step","minHeight","Math","max","lineHeight","spacing","uni__dependencies"],"sources":["../../src/components/Textarea.tsx"],"sourcesContent":["import { StyleSheet } from 'react-native-unistyles';\n\nimport { Input, type InputProps } from './Input';\n\nexport interface TextareaProps extends Omit<InputProps, 'multiline'> {\n /** Visible lines before the field scrolls; sets the minimum height. */\n rows?: number;\n}\n\nconst DEFAULT_ROWS = 2;\n\n/** The multi-line field, styled as the Input; `bare` drops the well for a composer that draws its own. */\nexport function Textarea({ rows = DEFAULT_ROWS, size = 'md', style, ...props }: TextareaProps) {\n return (\n <Input\n multiline\n numberOfLines={rows}\n size={size}\n textAlignVertical=\"top\"\n style={[styles.area(rows, size), style]}\n {...props}\n />\n );\n}\n\nconst styles = StyleSheet.create((theme) => ({\n area: (rows: number, size: NonNullable<InputProps['size']>) => {\n const step = size === 'xs' || size === 'sm' ? 'sm' : 'base';\n return {\n minHeight: Math.max(44, rows * theme.lineHeight[step] + theme.spacing(3)),\n lineHeight: theme.lineHeight[step],\n };\n },\n}));\n"],"mappings":";;;;;AASA,MAAMM,eAAe;;AAGrB,SAAgBC,SAAS,EAAEF,OAAOC,cAAcE,OAAO,MAAMC,OAAO,GAAGC,SAAwB;CAC7F,OACE,oBAAC,OAAD;EACE;EACA,eAAeL;EACTG;EACN,mBAAkB;EAClB,OAAO,CAACG,OAAOC,KAAKP,MAAMG,IAAI,GAAGC,KAAK;EACtC,GAAIC;CAAM;AAGhB;AAEA,MAAMC,SAASX,WAAWa,QAAQC,WAAW,EAC3CF,OAAOP,MAAcG,SAA0C;CAC7D,MAAMQ,OAAOR,SAAS,QAAQA,SAAS,OAAO,OAAO;CACrD,OAAO;EACLS,WAAWC,KAAKC,IAAI,IAAId,OAAOS,MAAMM,WAAWJ,QAAQF,MAAMO,QAAQ,CAAC,CAAC;EACxED,YAAYN,MAAMM,WAAWJ;EAAKM,mBAAA,CAAA,CAAA;CACpC;AACF,EACF,EAAE"}
@@ -0,0 +1,10 @@
1
+ import { NativeColorToken } from "@agimon-ai/po-web-components/nativeTheme";
2
+ //#region src/icons/IconColorContext.d.ts
3
+ /**
4
+ * The ink an icon takes when its caller names none. A web icon inherits
5
+ * `currentColor`; a native one cannot, so a Button provides its label colour
6
+ * here and an icon inside it matches the label without being told.
7
+ */
8
+ export declare const IconColorContext: import("react").Context<NativeColorToken | undefined>;
9
+ //#endregion
10
+ //# sourceMappingURL=IconColorContext.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconColorContext.d.mts","names":[],"sources":["../../src/icons/IconColorContext.ts"],"mappings":";;;;;;;qBAQa,kCAAgB,QAAA"}
@@ -0,0 +1,13 @@
1
+ import { createContext } from "react";
2
+
3
+ //#region src/icons/IconColorContext.ts
4
+ /**
5
+ * The ink an icon takes when its caller names none. A web icon inherits
6
+ * `currentColor`; a native one cannot, so a Button provides its label colour
7
+ * here and an icon inside it matches the label without being told.
8
+ */
9
+ const IconColorContext = createContext(void 0);
10
+
11
+ //#endregion
12
+ export { IconColorContext };
13
+ //# sourceMappingURL=IconColorContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconColorContext.mjs","names":[],"sources":["../../src/icons/IconColorContext.ts"],"sourcesContent":["import type { NativeColorToken } from '@agimon-ai/po-web-components/nativeTheme';\nimport { createContext } from 'react';\n\n/**\n * The ink an icon takes when its caller names none. A web icon inherits\n * `currentColor`; a native one cannot, so a Button provides its label colour\n * here and an icon inside it matches the label without being told.\n */\nexport const IconColorContext = createContext<NativeColorToken | undefined>(undefined);\n"],"mappings":";;;;;;;;AAQA,MAAa,mBAAmB,cAA4C,MAAS"}
@@ -0,0 +1,120 @@
1
+ //#region src/icons/iconGlyphs.d.ts
2
+ /**
3
+ * The curated native icon set: the same names the web library re-exports from
4
+ * lucide, each drawn with the platform's own family. iOS gets an SF Symbol,
5
+ * Android and web get a Material Icons glyph. Kept free of React Native so a
6
+ * unit test can check every glyph against the installed glyph map.
7
+ */
8
+ export declare const ICON_GLYPHS: {
9
+ readonly Check: {
10
+ readonly sf: 'checkmark';
11
+ readonly material: 'check';
12
+ };
13
+ readonly ChevronDown: {
14
+ readonly sf: 'chevron.down';
15
+ readonly material: 'expand-more';
16
+ };
17
+ readonly ChevronRight: {
18
+ readonly sf: 'chevron.right';
19
+ readonly material: 'chevron-right';
20
+ };
21
+ readonly Alert: {
22
+ readonly sf: 'exclamationmark.circle';
23
+ readonly material: 'error-outline';
24
+ };
25
+ readonly Copy: {
26
+ readonly sf: 'doc.on.doc';
27
+ readonly material: 'content-copy';
28
+ };
29
+ readonly Message: {
30
+ readonly sf: 'message';
31
+ readonly material: 'chat-bubble-outline';
32
+ };
33
+ readonly Kebab: {
34
+ readonly sf: 'ellipsis';
35
+ readonly material: 'more-vert';
36
+ };
37
+ readonly Edit: {
38
+ readonly sf: 'pencil';
39
+ readonly material: 'edit';
40
+ };
41
+ readonly Gear: {
42
+ readonly sf: 'gearshape';
43
+ readonly material: 'settings';
44
+ };
45
+ readonly Send: {
46
+ readonly sf: 'paperplane';
47
+ readonly material: 'send';
48
+ };
49
+ readonly Task: {
50
+ readonly sf: 'checkmark.square';
51
+ readonly material: 'check-box';
52
+ };
53
+ readonly Trash: {
54
+ readonly sf: 'trash';
55
+ readonly material: 'delete-outline';
56
+ };
57
+ readonly Wrench: {
58
+ readonly sf: 'wrench.and.screwdriver';
59
+ readonly material: 'build';
60
+ };
61
+ readonly Close: {
62
+ readonly sf: 'xmark';
63
+ readonly material: 'close';
64
+ };
65
+ readonly Folder: {
66
+ readonly sf: 'folder';
67
+ readonly material: 'folder';
68
+ };
69
+ readonly Branch: {
70
+ readonly sf: 'arrow.triangle.branch';
71
+ readonly material: 'call-split';
72
+ };
73
+ readonly Home: {
74
+ readonly sf: 'house';
75
+ readonly material: 'home';
76
+ };
77
+ readonly Activity: {
78
+ readonly sf: 'waveform.path.ecg';
79
+ readonly material: 'monitor-heart';
80
+ };
81
+ readonly ArrowRight: {
82
+ readonly sf: 'arrow.right';
83
+ readonly material: 'arrow-forward';
84
+ };
85
+ readonly Plus: {
86
+ readonly sf: 'plus';
87
+ readonly material: 'add';
88
+ };
89
+ readonly Users: {
90
+ readonly sf: 'person.2';
91
+ readonly material: 'group';
92
+ };
93
+ readonly PlayCircle: {
94
+ readonly sf: 'play.circle';
95
+ readonly material: 'play-circle-outline';
96
+ };
97
+ readonly Workflow: {
98
+ readonly sf: 'flowchart';
99
+ readonly material: 'account-tree';
100
+ };
101
+ readonly Palette: {
102
+ readonly sf: 'paintpalette';
103
+ readonly material: 'palette';
104
+ };
105
+ readonly Lightbulb: {
106
+ readonly sf: 'lightbulb';
107
+ readonly material: 'lightbulb-outline';
108
+ };
109
+ readonly Sparkles: {
110
+ readonly sf: 'sparkles';
111
+ readonly material: 'auto-awesome';
112
+ };
113
+ readonly Lock: {
114
+ readonly sf: 'lock';
115
+ readonly material: 'lock-outline';
116
+ };
117
+ };
118
+ export type IconName = keyof typeof ICON_GLYPHS;
119
+ //#endregion
120
+ //# sourceMappingURL=iconGlyphs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconGlyphs.d.mts","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"mappings":";;;;;;;qBAMa;WACX;aAAS;aAAiB;;WAC1B;aAAe;aAAoB;;WACnC;aAAgB;aAAqB;;WACrC;aAAS;aAA8B;;WACvC;aAAQ;aAAkB;;WAC1B;aAAW;aAAe;;WAE1B;aAAS;aAAgB;;WACzB;aAAQ;aAAc;;WACtB;aAAQ;aAAiB;;WACzB;aAAQ;aAAkB;;WAC1B;aAAQ;aAAwB;;WAChC;aAAS;aAAa;;WACtB;aAAU;aAA8B;;WACxC;aAAS;aAAa;;WACtB;aAAU;aAAc;;WACxB;aAAU;aAA6B;;WACvC;aAAQ;aAAa;;WACrB;aAAY;aAAyB;;WACrC;aAAc;aAAmB;;WACjC;aAAQ;aAAY;;WACpB;aAAS;aAAgB;;WACzB;aAAc;aAAmB;;WACjC;aAAY;aAAiB;;WAC7B;aAAW;aAAoB;;WAC/B;aAAa;aAAiB;;WAC9B;aAAY;aAAgB;;WAC5B;aAAQ;aAAY;;;YAGV,wBAAwB"}
@@ -0,0 +1,121 @@
1
+ //#region src/icons/iconGlyphs.ts
2
+ /**
3
+ * The curated native icon set: the same names the web library re-exports from
4
+ * lucide, each drawn with the platform's own family. iOS gets an SF Symbol,
5
+ * Android and web get a Material Icons glyph. Kept free of React Native so a
6
+ * unit test can check every glyph against the installed glyph map.
7
+ */
8
+ const ICON_GLYPHS = {
9
+ Check: {
10
+ sf: "checkmark",
11
+ material: "check"
12
+ },
13
+ ChevronDown: {
14
+ sf: "chevron.down",
15
+ material: "expand-more"
16
+ },
17
+ ChevronRight: {
18
+ sf: "chevron.right",
19
+ material: "chevron-right"
20
+ },
21
+ Alert: {
22
+ sf: "exclamationmark.circle",
23
+ material: "error-outline"
24
+ },
25
+ Copy: {
26
+ sf: "doc.on.doc",
27
+ material: "content-copy"
28
+ },
29
+ Message: {
30
+ sf: "message",
31
+ material: "chat-bubble-outline"
32
+ },
33
+ Kebab: {
34
+ sf: "ellipsis",
35
+ material: "more-vert"
36
+ },
37
+ Edit: {
38
+ sf: "pencil",
39
+ material: "edit"
40
+ },
41
+ Gear: {
42
+ sf: "gearshape",
43
+ material: "settings"
44
+ },
45
+ Send: {
46
+ sf: "paperplane",
47
+ material: "send"
48
+ },
49
+ Task: {
50
+ sf: "checkmark.square",
51
+ material: "check-box"
52
+ },
53
+ Trash: {
54
+ sf: "trash",
55
+ material: "delete-outline"
56
+ },
57
+ Wrench: {
58
+ sf: "wrench.and.screwdriver",
59
+ material: "build"
60
+ },
61
+ Close: {
62
+ sf: "xmark",
63
+ material: "close"
64
+ },
65
+ Folder: {
66
+ sf: "folder",
67
+ material: "folder"
68
+ },
69
+ Branch: {
70
+ sf: "arrow.triangle.branch",
71
+ material: "call-split"
72
+ },
73
+ Home: {
74
+ sf: "house",
75
+ material: "home"
76
+ },
77
+ Activity: {
78
+ sf: "waveform.path.ecg",
79
+ material: "monitor-heart"
80
+ },
81
+ ArrowRight: {
82
+ sf: "arrow.right",
83
+ material: "arrow-forward"
84
+ },
85
+ Plus: {
86
+ sf: "plus",
87
+ material: "add"
88
+ },
89
+ Users: {
90
+ sf: "person.2",
91
+ material: "group"
92
+ },
93
+ PlayCircle: {
94
+ sf: "play.circle",
95
+ material: "play-circle-outline"
96
+ },
97
+ Workflow: {
98
+ sf: "flowchart",
99
+ material: "account-tree"
100
+ },
101
+ Palette: {
102
+ sf: "paintpalette",
103
+ material: "palette"
104
+ },
105
+ Lightbulb: {
106
+ sf: "lightbulb",
107
+ material: "lightbulb-outline"
108
+ },
109
+ Sparkles: {
110
+ sf: "sparkles",
111
+ material: "auto-awesome"
112
+ },
113
+ Lock: {
114
+ sf: "lock",
115
+ material: "lock-outline"
116
+ }
117
+ };
118
+
119
+ //#endregion
120
+ export { ICON_GLYPHS };
121
+ //# sourceMappingURL=iconGlyphs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconGlyphs.mjs","names":[],"sources":["../../src/icons/iconGlyphs.ts"],"sourcesContent":["/**\n * The curated native icon set: the same names the web library re-exports from\n * lucide, each drawn with the platform's own family. iOS gets an SF Symbol,\n * Android and web get a Material Icons glyph. Kept free of React Native so a\n * unit test can check every glyph against the installed glyph map.\n */\nexport const ICON_GLYPHS = {\n Check: { sf: 'checkmark', material: 'check' },\n ChevronDown: { sf: 'chevron.down', material: 'expand-more' },\n ChevronRight: { sf: 'chevron.right', material: 'chevron-right' },\n Alert: { sf: 'exclamationmark.circle', material: 'error-outline' },\n Copy: { sf: 'doc.on.doc', material: 'content-copy' },\n Message: { sf: 'message', material: 'chat-bubble-outline' },\n // Each platform's own overflow mark: a horizontal ellipsis on iOS, vertical dots on Android.\n Kebab: { sf: 'ellipsis', material: 'more-vert' },\n Edit: { sf: 'pencil', material: 'edit' },\n Gear: { sf: 'gearshape', material: 'settings' },\n Send: { sf: 'paperplane', material: 'send' },\n Task: { sf: 'checkmark.square', material: 'check-box' },\n Trash: { sf: 'trash', material: 'delete-outline' },\n Wrench: { sf: 'wrench.and.screwdriver', material: 'build' },\n Close: { sf: 'xmark', material: 'close' },\n Folder: { sf: 'folder', material: 'folder' },\n Branch: { sf: 'arrow.triangle.branch', material: 'call-split' },\n Home: { sf: 'house', material: 'home' },\n Activity: { sf: 'waveform.path.ecg', material: 'monitor-heart' },\n ArrowRight: { sf: 'arrow.right', material: 'arrow-forward' },\n Plus: { sf: 'plus', material: 'add' },\n Users: { sf: 'person.2', material: 'group' },\n PlayCircle: { sf: 'play.circle', material: 'play-circle-outline' },\n Workflow: { sf: 'flowchart', material: 'account-tree' },\n Palette: { sf: 'paintpalette', material: 'palette' },\n Lightbulb: { sf: 'lightbulb', material: 'lightbulb-outline' },\n Sparkles: { sf: 'sparkles', material: 'auto-awesome' },\n Lock: { sf: 'lock', material: 'lock-outline' },\n} as const;\n\nexport type IconName = keyof typeof ICON_GLYPHS;\n"],"mappings":";;;;;;;AAMA,MAAa,cAAc;CACzB,OAAO;EAAE,IAAI;EAAa,UAAU;CAAQ;CAC5C,aAAa;EAAE,IAAI;EAAgB,UAAU;CAAc;CAC3D,cAAc;EAAE,IAAI;EAAiB,UAAU;CAAgB;CAC/D,OAAO;EAAE,IAAI;EAA0B,UAAU;CAAgB;CACjE,MAAM;EAAE,IAAI;EAAc,UAAU;CAAe;CACnD,SAAS;EAAE,IAAI;EAAW,UAAU;CAAsB;CAE1D,OAAO;EAAE,IAAI;EAAY,UAAU;CAAY;CAC/C,MAAM;EAAE,IAAI;EAAU,UAAU;CAAO;CACvC,MAAM;EAAE,IAAI;EAAa,UAAU;CAAW;CAC9C,MAAM;EAAE,IAAI;EAAc,UAAU;CAAO;CAC3C,MAAM;EAAE,IAAI;EAAoB,UAAU;CAAY;CACtD,OAAO;EAAE,IAAI;EAAS,UAAU;CAAiB;CACjD,QAAQ;EAAE,IAAI;EAA0B,UAAU;CAAQ;CAC1D,OAAO;EAAE,IAAI;EAAS,UAAU;CAAQ;CACxC,QAAQ;EAAE,IAAI;EAAU,UAAU;CAAS;CAC3C,QAAQ;EAAE,IAAI;EAAyB,UAAU;CAAa;CAC9D,MAAM;EAAE,IAAI;EAAS,UAAU;CAAO;CACtC,UAAU;EAAE,IAAI;EAAqB,UAAU;CAAgB;CAC/D,YAAY;EAAE,IAAI;EAAe,UAAU;CAAgB;CAC3D,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAM;CACpC,OAAO;EAAE,IAAI;EAAY,UAAU;CAAQ;CAC3C,YAAY;EAAE,IAAI;EAAe,UAAU;CAAsB;CACjE,UAAU;EAAE,IAAI;EAAa,UAAU;CAAe;CACtD,SAAS;EAAE,IAAI;EAAgB,UAAU;CAAU;CACnD,WAAW;EAAE,IAAI;EAAa,UAAU;CAAoB;CAC5D,UAAU;EAAE,IAAI;EAAY,UAAU;CAAe;CACrD,MAAM;EAAE,IAAI;EAAQ,UAAU;CAAe;AAC/C"}