@idealyst/mcp-server 1.2.123 → 1.2.125

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.
@@ -1118,6 +1118,26 @@ var componentMetadata = {
1118
1118
  "Configure safe areas appropriately"
1119
1119
  ]
1120
1120
  },
1121
+ ScrollView: {
1122
+ category: "layout",
1123
+ description: "Scrollable container for long or overflowing content. Replaces the deprecated `<View scrollable>` pattern. Supports vertical, horizontal, and bidirectional scrolling with scroll event callbacks and imperative scroll controls via ref.",
1124
+ features: [
1125
+ "direction prop: 'vertical' (default) | 'horizontal' | 'both'",
1126
+ "Scroll callbacks: onScroll, onScrollBegin, onScrollEnd, onEndReached (for infinite scroll)",
1127
+ "Imperative ref: scrollTo, scrollToEnd, scrollToStart, getScrollPosition",
1128
+ "Same spacing shorthand props as View: padding, paddingVertical, paddingHorizontal, gap, margin, etc.",
1129
+ "Background, radius, and border variants (same as View)",
1130
+ "showsIndicator, pagingEnabled, bounces, scrollEnabled, keyboardDismissMode props",
1131
+ "contentContainerStyle for styling the inner content wrapper"
1132
+ ],
1133
+ bestPractices: [
1134
+ "Use ScrollView for scrollable content instead of <View scrollable> (deprecated)",
1135
+ "Use onEndReached + onEndReachedThreshold for infinite scroll / load-more patterns",
1136
+ 'Use direction="horizontal" for horizontal carousels or galleries',
1137
+ "Use ref with scrollTo/scrollToEnd for programmatic scroll control",
1138
+ "Wrap in a flex:1 container or give explicit height \u2014 ScrollView needs bounded parent height"
1139
+ ]
1140
+ },
1121
1141
  Select: {
1122
1142
  category: "form",
1123
1143
  description: "Dropdown selection component for choosing from a list of options",
@@ -1217,14 +1237,18 @@ var componentMetadata = {
1217
1237
  description: "Structured data display in rows and columns",
1218
1238
  features: [
1219
1239
  "Sortable columns",
1220
- "Custom cell rendering",
1221
- "Header and footer",
1222
- "Striped rows"
1240
+ "Custom cell rendering via column `render` function",
1241
+ "Custom column titles (ReactNode) \u2014 render icons, badges, or any element as header",
1242
+ "Footer row support \u2014 static content or computed from data via `footer` callback",
1243
+ "Striped, bordered, and standard type variants",
1244
+ "Column alignment (left, center, right)"
1223
1245
  ],
1224
1246
  bestPractices: [
1225
1247
  "Use for structured, comparable data",
1226
1248
  "Align numbers to the right",
1227
- "Provide sorting for large datasets"
1249
+ "Column `title` accepts ReactNode \u2014 use for custom headers with icons or styled text",
1250
+ "Column `footer` accepts ReactNode or `(data: T[]) => ReactNode` \u2014 use the callback form for computed values like sums/averages",
1251
+ "Footer only renders when at least one column has a `footer` defined"
1228
1252
  ]
1229
1253
  },
1230
1254
  Tabs: {
@@ -1357,7 +1381,10 @@ var componentAliases = {
1357
1381
  photo: "Image",
1358
1382
  picture: "Image",
1359
1383
  img: "Image",
1360
- thumbnail: "Image"
1384
+ thumbnail: "Image",
1385
+ scroll: "ScrollView",
1386
+ scrollview: "ScrollView",
1387
+ scrollable: "ScrollView"
1361
1388
  };
1362
1389
  function findComponentName(componentName) {
1363
1390
  if (componentMetadata[componentName]) {
@@ -12968,14 +12995,16 @@ import { Outlet, useNavigator } from '@idealyst/navigation';
12968
12995
  import type { StackLayoutProps } from '@idealyst/navigation';
12969
12996
  import { View, Text, Pressable, Icon, Divider } from '@idealyst/components';
12970
12997
  import type { IconName } from '@idealyst/components';
12998
+ import { useTheme } from '@idealyst/theme';
12971
12999
 
12972
13000
  export function AppLayout({ routes, currentPath, options }: StackLayoutProps) {
12973
13001
  const { navigate } = useNavigator();
13002
+ const theme = useTheme();
12974
13003
 
12975
13004
  return (
12976
13005
  <View style={{ flex: 1, flexDirection: 'row' }}>
12977
13006
  {/* Sidebar */}
12978
- <View style={{ width: 260, borderRightWidth: 1, borderRightColor: '#e0e0e0', backgroundColor: '#fafafa' }}>
13007
+ <View style={{ width: 260, borderRightWidth: 1, borderRightColor: theme.colors.border.primary, backgroundColor: theme.colors.surface.secondary }}>
12979
13008
  {/* Logo / App name */}
12980
13009
  <View style={{ height: 56, justifyContent: 'center', paddingHorizontal: 16 }}>
12981
13010
  <Text typography="h6" weight="bold">{options?.headerTitle || 'My App'}</Text>
@@ -13000,18 +13029,20 @@ export function AppLayout({ routes, currentPath, options }: StackLayoutProps) {
13000
13029
  paddingVertical: 10,
13001
13030
  paddingHorizontal: 12,
13002
13031
  borderRadius: 8,
13003
- backgroundColor: isActive ? 'rgba(0,122,255,0.08)' : 'transparent',
13032
+ backgroundColor: isActive ? theme.intents.primary.light : 'transparent',
13004
13033
  }}
13005
13034
  >
13035
+ {/* Icon uses EITHER color OR textColor \u2014 never both */}
13006
13036
  <Icon
13007
13037
  name={(route.options?.icon as IconName) || 'circle-outline'}
13008
13038
  size="sm"
13009
- color={isActive ? '#007AFF' : '#666'}
13039
+ color={isActive ? 'primary' : undefined}
13010
13040
  />
13011
13041
  <Text
13012
13042
  typography="body2"
13013
- weight={isActive ? 'semibold' : 'regular'}
13014
- style={{ color: isActive ? '#007AFF' : '#333' }}
13043
+ weight={isActive ? 'semibold' : 'normal'}
13044
+ color={isActive ? undefined : 'secondary'}
13045
+ style={isActive ? { color: theme.intents.primary.primary } : undefined}
13015
13046
  >
13016
13047
  {route.options?.title || route.path}
13017
13048
  </Text>
@@ -13169,7 +13200,7 @@ export function TabLayout({ routes, currentPath }: TabLayoutProps) {
13169
13200
  {opts?.tabBarLabel && (
13170
13201
  <Text
13171
13202
  typography="body2"
13172
- weight={isActive ? 'semibold' : 'regular'}
13203
+ weight={isActive ? 'semibold' : 'normal'}
13173
13204
  style={{ color: isActive ? '#007AFF' : '#8E8E93' }}
13174
13205
  >
13175
13206
  {opts.tabBarLabel}
@@ -13384,7 +13415,7 @@ export function DashboardLayout({ routes, currentPath, options }: StackLayoutPro
13384
13415
  {!collapsed && (
13385
13416
  <Text
13386
13417
  typography="body2"
13387
- weight={isActive ? 'semibold' : 'regular'}
13418
+ weight={isActive ? 'semibold' : 'normal'}
13388
13419
  style={{ color: isActive ? '#007AFF' : '#333' }}
13389
13420
  >
13390
13421
  {route.options?.title || route.path}
@@ -16288,7 +16319,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16288
16319
  1. **Text** does NOT have \`variant\`, \`intent\`, \`size\`, \`fontSize\`, \`numberOfLines\`, \`ellipsizeMode\`, \`selectable\`, \`textColor\`, or \`onPress\`. Use \`typography\` (\`h1\`\u2013\`h6\`, \`subtitle1\`, \`subtitle2\`, \`body1\`, \`body2\`, \`caption\`), \`weight\` (\`light\`, \`normal\`, \`medium\`, \`semibold\`, \`bold\`), and \`color\` (\`primary\`, \`secondary\`, \`tertiary\`, \`inverse\`). **\`textColor\` is an Icon-only prop** \u2014 Text uses \`color\`. For pressable text, wrap in \`Pressable\` or use \`Button type="text"\`.
16289
16320
  2. **TextInput** does NOT have \`label\`, \`error\`, \`editable\`, \`autoComplete\`, \`keyboardType\`, or \`onChange\`. Compose labels/errors with \`Text\` + \`View\`. Use \`onChangeText\`, \`inputMode\` (\`'text' | 'email' | 'password' | 'number'\` \u2014 NOT \`'decimal'\`, \`'numeric'\`, \`'tel'\`, \`'url'\`), and \`textContentType\`. **TextArea has a DIFFERENT API** \u2014 it DOES support \`label\`, \`error\`, \`rows\`, \`onChange\`, but does NOT have \`onBlur\` or \`onChangeText\`. Always look up TextArea types separately.
16290
16321
  3. **Button/IconButton** \`type\` is \`'contained' | 'outlined' | 'text'\` \u2014 NOT \`'ghost'\`, \`'solid'\`, \`'default'\`. Button has \`leftIcon\` and \`rightIcon\` \u2014 NOT \`icon\`.
16291
- 4. **View** does NOT have \`direction\`, \`align\`, or \`onPress\` props. For touch handling, wrap content in \`Pressable\` from \`@idealyst/components\` (NOT from \`react-native\`): \`<Pressable onPress={handlePress}><View>...</View></Pressable>\`. For horizontal layout use \`style={{ flexDirection: 'row' }}\`. View spacing shorthand props (all accept Size: \`xs\`|\`sm\`|\`md\`|\`lg\`|\`xl\`): \`padding\`, \`paddingVertical\`, \`paddingHorizontal\`, \`margin\`, \`marginVertical\`, \`marginHorizontal\`, \`gap\`/\`spacing\`. Do NOT use \`paddingTop\`, \`paddingBottom\`, \`paddingLeft\`, \`paddingRight\`, \`marginTop\`, \`marginBottom\`, \`marginLeft\`, \`marginRight\` as shorthand props \u2014 they do NOT exist and will cause TS2353. For single-side spacing, use \`style={{ paddingTop: 16 }}\`. Other View props: \`background\`, \`radius\`, \`border\`, \`scrollable\`. \`border\` is \`'none' | 'thin' | 'thick'\` \u2014 NOT \`'outline'\`, \`'solid'\`.
16322
+ 4. **View** does NOT have \`direction\`, \`align\`, \`flex\`, or \`onPress\` props. \`flex={1}\` is NOT a shorthand \u2014 use \`style={{ flex: 1 }}\`. For touch handling, wrap content in \`Pressable\` from \`@idealyst/components\` (NOT from \`react-native\`): \`<Pressable onPress={handlePress}><View>...</View></Pressable>\`. For horizontal layout use \`style={{ flexDirection: 'row' }}\`. View spacing shorthand props (all accept Size: \`xs\`|\`sm\`|\`md\`|\`lg\`|\`xl\`): \`padding\`, \`paddingVertical\`, \`paddingHorizontal\`, \`margin\`, \`marginVertical\`, \`marginHorizontal\`, \`gap\`/\`spacing\`. Do NOT use \`paddingTop\`, \`paddingBottom\`, \`paddingLeft\`, \`paddingRight\`, \`marginTop\`, \`marginBottom\`, \`marginLeft\`, \`marginRight\` as shorthand props \u2014 they do NOT exist and will cause TS2353. For single-side spacing, use \`style={{ paddingTop: 16 }}\`. Other View props: \`background\`, \`radius\`, \`border\`. \`border\` is \`'none' | 'thin' | 'thick'\` \u2014 NOT \`'outline'\`, \`'solid'\`. **For scrollable content, use \`<ScrollView>\` instead of \`<View scrollable>\`** (\`scrollable\` prop is deprecated).
16292
16323
  5. **Badge** \`type\` is \`'filled' | 'outlined' | 'dot'\` \u2014 NOT \`'soft'\`, \`'subtle'\`, \`'solid'\`. **Intent type narrowing (CRITICAL):** TS widens string literals in objects/arrays to \`string\`, which fails \`intent\` props. Rules: (a) Simple ternaries in JSX work fine: \`<Badge intent={cond ? 'success' : 'danger'}>\`. (b) **Do NOT use \`as const\` on ternary expressions** \u2014 \`(cond ? 'a' : 'b') as const\` causes TS1355. (c) **Arrays/objects with intent values MUST use \`as const\`**: \`const items = [{ intent: 'success' as const, label: 'OK' }]\` or \`const items = [{ intent: 'success', label: 'OK' }] as const\`. Without \`as const\`, \`item.intent\` becomes \`string\` which fails. (d) For computed values, use typed variable: \`const intent: Intent = ...;\` (import Intent from @idealyst/theme). This applies to ALL components with intent/type props.
16293
16324
  6. **Avatar** uses \`src\` for image URL, \`fallback\` for initials \u2014 NOT \`name\`, \`initials\`, \`label\`. Shape: \`'circle' | 'square'\`.
16294
16325
  7. **Link** requires a \`to\` prop (path string) \u2014 it's a navigation link, NOT pressable text.
@@ -16297,6 +16328,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16297
16328
  10. The component is **TextInput**, NOT \`Input\`.
16298
16329
  11. **Card** is a simple container \u2014 there are NO compound components like \`Card.Content\`, \`Card.Header\`, \`Card.Body\`, \`Card.Footer\`, \`Card.Title\`. Just put children directly inside \`<Card>...</Card>\`. **Card does NOT have \`border\`, \`scrollable\`, or \`backgroundColor\` props** (those are View-only). Card styling props: \`type\` (\`'default'|'outlined'|'elevated'|'filled'\`), \`radius\`, \`intent\`, \`background\`, plus spacing (\`padding\`, \`margin\`, \`gap\`). For borders use \`type="outlined"\`.
16299
16330
  12. **Switch** uses \`checked\` and \`onChange\` \u2014 NOT \`value\` and \`onValueChange\` (React Native convention). Also has \`label\`, \`labelPosition\`, \`disabled\`.
16331
+ 13. **Icon color props are mutually exclusive** \u2014 \`IconProps\` is a discriminated union: use EITHER \`color\` (palette: \`'primary'\`, \`'blue.500'\`) OR \`textColor\` (\`'primary'\`, \`'secondary'\`) \u2014 NEVER both. Passing both (even conditionally like \`color={cond ? x : undefined} textColor={cond ? undefined : y}\`) causes TS2322 because TypeScript cannot resolve the union. Instead: \`<Icon name="home" color={isActive ? 'primary' : undefined} />\` or use separate JSX branches.
16300
16332
 
16301
16333
  ### Navigation
16302
16334
  11. **NavigatorProvider** takes a \`route\` prop (SINGULAR) \u2014 NOT \`routes\`: \`<NavigatorProvider route={routeConfig} />\`. There is NO \`Router\` export.
@@ -16306,7 +16338,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16306
16338
  15. \`useParams()\` does NOT accept generic type arguments. It returns \`Record<string, string | undefined>\`. Do NOT write \`useParams<{ id: string }>()\` \u2014 that causes TS2558. Always guard for undefined: \`const id = params.id; if (!id) return null;\`.
16307
16339
 
16308
16340
  ### Imports & Styling
16309
- 16. **Never** import from \`react-native\` \u2014 no \`TouchableOpacity\`, \`FlatList\`, \`ScrollView\`, \`Animated\`, \`Dimensions\`, \`Linking\`, \`Platform\`. Idealyst provides cross-platform alternatives for all of these (e.g., \`openExternalLinks\` on Markdown, \`Pressable\` from \`@idealyst/components\`). **\`ScrollView\` is NOT exported from \`@idealyst/components\`** \u2014 use \`<View scrollable>\` instead. Do NOT \`import { ScrollView } from '@idealyst/components'\` \u2014 it will cause a TS import error.
16341
+ 16. **Never** import from \`react-native\` \u2014 no \`TouchableOpacity\`, \`FlatList\`, \`ScrollView\`, \`Animated\`, \`Dimensions\`, \`Linking\`, \`Platform\`. Idealyst provides cross-platform alternatives for all of these (e.g., \`openExternalLinks\` on Markdown, \`Pressable\` from \`@idealyst/components\`). **For scrollable content, use \`<ScrollView>\` from \`@idealyst/components\`** (NOT \`<View scrollable>\` which is deprecated). \`ScrollView\` supports \`direction\` (\`'vertical' | 'horizontal' | 'both'\`), scroll callbacks (\`onScroll\`, \`onScrollBegin\`, \`onScrollEnd\`, \`onEndReached\`), and imperative controls via ref (\`scrollTo\`, \`scrollToEnd\`, \`scrollToStart\`). It also accepts the same spacing shorthand props as View (\`padding\`, \`gap\`, \`margin\`, etc.).
16310
16342
  17. **Never** import from \`react-native-unistyles\` \u2014 use \`@idealyst/theme\` (\`configureThemes\`, \`ThemeSettings\`, \`useTheme\`).
16311
16343
  18. **useTheme()** returns the Theme object **directly** (NOT wrapped): \`const theme = useTheme();\`. Do NOT destructure: \`const { theme } = useTheme()\` \u2014 causes TS2339.
16312
16344
  19. **Spacing & Layout**: Use component shorthand props for spacing \u2014 NOT \`theme.spacing\` (which does NOT exist). The correct patterns:
@@ -23829,7 +23861,7 @@ var import_url = require("url");
23829
23861
  // src/generated/types.json
23830
23862
  var types_default = {
23831
23863
  version: "1.0.93",
23832
- extractedAt: "2026-02-24T21:11:17.058Z",
23864
+ extractedAt: "2026-03-11T20:52:45.143Z",
23833
23865
  components: {
23834
23866
  Accordion: {
23835
23867
  name: "Accordion",
@@ -28100,6 +28132,12 @@ var types_default = {
28100
28132
  required: false,
28101
28133
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears."
28102
28134
  },
28135
+ {
28136
+ name: "keyboardAvoidingOffset",
28137
+ type: "number | undefined",
28138
+ required: false,
28139
+ description: "Additional offset to subtract from the keyboard height when avoiding the keyboard.\nThe Screen automatically accounts for the tab bar height when inside a tab navigator,\nbut this prop can be used for other fixed UI elements that occupy space at the bottom."
28140
+ },
28103
28141
  {
28104
28142
  name: "onLayout",
28105
28143
  type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/hooks/useWebLayout/types").LayoutChangeEvent) => void) | undefined',
@@ -28107,7 +28145,7 @@ var types_default = {
28107
28145
  description: "Called when the layout of the screen changes.\nProvides the new width, height, x, and y coordinates."
28108
28146
  }
28109
28147
  ],
28110
- typeDefinition: "export interface ScreenProps extends ContainerStyleProps {\n /**\n * The content to display inside the screen\n */\n children?: ReactNode;\n\n /**\n * Background variant - controls the background color\n */\n background?: Surface | 'transparent';\n\n /**\n * Safe area padding for all edges (lower precedence).\n * Individual edge props (safeAreaTop, etc.) override this when set.\n */\n safeArea?: boolean;\n\n /**\n * Safe area padding for the top edge.\n * Overrides safeArea for top when explicitly set.\n */\n safeAreaTop?: boolean;\n\n /**\n * Safe area padding for the bottom edge.\n * Overrides safeArea for bottom when explicitly set.\n */\n safeAreaBottom?: boolean;\n\n /**\n * Safe area padding for the left edge.\n * Overrides safeArea for left when explicitly set.\n */\n safeAreaLeft?: boolean;\n\n /**\n * Safe area padding for the right edge.\n * Overrides safeArea for right when explicitly set.\n */\n safeAreaRight?: boolean;\n\n /**\n * Content inset padding for scrollable content (mobile only)\n * Adds padding to the scroll view's content container\n * Useful for adding safe area insets or additional spacing\n */\n contentInset?: {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n };\n\n /**\n * Additional styles (platform-specific)\n */\n style?: StyleProp<ViewStyle>;\n\n /**\n * Test ID for testing\n */\n testID?: string;\n\n /**\n * Scrollable content\n */\n scrollable?: boolean;\n\n /**\n * Whether to avoid the keyboard on native platforms (iOS/Android).\n * When enabled, content will shift up when the keyboard appears.\n * @default true\n * @platform native\n */\n avoidKeyboard?: boolean;\n\n /**\n * Called when the layout of the screen changes.\n * Provides the new width, height, x, and y coordinates.\n */\n onLayout?: (event: LayoutChangeEvent) => void;\n}",
28148
+ typeDefinition: "export interface ScreenProps extends ContainerStyleProps {\n /**\n * The content to display inside the screen\n */\n children?: ReactNode;\n\n /**\n * Background variant - controls the background color\n */\n background?: Surface | 'transparent';\n\n /**\n * Safe area padding for all edges (lower precedence).\n * Individual edge props (safeAreaTop, etc.) override this when set.\n */\n safeArea?: boolean;\n\n /**\n * Safe area padding for the top edge.\n * Overrides safeArea for top when explicitly set.\n */\n safeAreaTop?: boolean;\n\n /**\n * Safe area padding for the bottom edge.\n * Overrides safeArea for bottom when explicitly set.\n */\n safeAreaBottom?: boolean;\n\n /**\n * Safe area padding for the left edge.\n * Overrides safeArea for left when explicitly set.\n */\n safeAreaLeft?: boolean;\n\n /**\n * Safe area padding for the right edge.\n * Overrides safeArea for right when explicitly set.\n */\n safeAreaRight?: boolean;\n\n /**\n * Content inset padding for scrollable content (mobile only)\n * Adds padding to the scroll view's content container\n * Useful for adding safe area insets or additional spacing\n */\n contentInset?: {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n };\n\n /**\n * Additional styles (platform-specific)\n */\n style?: StyleProp<ViewStyle>;\n\n /**\n * Test ID for testing\n */\n testID?: string;\n\n /**\n * Scrollable content\n */\n scrollable?: boolean;\n\n /**\n * Whether to avoid the keyboard on native platforms (iOS/Android).\n * When enabled, content will shift up when the keyboard appears.\n * @default true\n * @platform native\n */\n avoidKeyboard?: boolean;\n\n /**\n * Additional offset to subtract from the keyboard height when avoiding the keyboard.\n * The Screen automatically accounts for the tab bar height when inside a tab navigator,\n * but this prop can be used for other fixed UI elements that occupy space at the bottom.\n * @default 0\n * @platform native\n */\n keyboardAvoidingOffset?: number;\n\n /**\n * Called when the layout of the screen changes.\n * Provides the new width, height, x, and y coordinates.\n */\n onLayout?: (event: LayoutChangeEvent) => void;\n}",
28111
28149
  relatedTypes: {},
28112
28150
  registry: {
28113
28151
  name: "Screen",
@@ -28196,6 +28234,13 @@ var types_default = {
28196
28234
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears.",
28197
28235
  required: false
28198
28236
  },
28237
+ keyboardAvoidingOffset: {
28238
+ name: "keyboardAvoidingOffset",
28239
+ type: "number | undefined",
28240
+ default: 0,
28241
+ description: "Additional offset to subtract from the keyboard height when avoiding the keyboard.\nThe Screen automatically accounts for the tab bar height when inside a tab navigator,\nbut this prop can be used for other fixed UI elements that occupy space at the bottom.",
28242
+ required: false
28243
+ },
28199
28244
  id: {
28200
28245
  name: "id",
28201
28246
  type: "string | undefined",
@@ -28258,6 +28303,384 @@ var types_default = {
28258
28303
  }
28259
28304
  }
28260
28305
  },
28306
+ ScrollView: {
28307
+ name: "ScrollView",
28308
+ propsInterface: "ScrollViewProps",
28309
+ props: [
28310
+ {
28311
+ name: "children",
28312
+ type: "React.ReactNode",
28313
+ required: false
28314
+ },
28315
+ {
28316
+ name: "direction",
28317
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollViewDirection | undefined',
28318
+ required: false,
28319
+ description: "Scroll direction. Defaults to 'vertical'."
28320
+ },
28321
+ {
28322
+ name: "background",
28323
+ type: "string | undefined",
28324
+ required: false,
28325
+ description: "Background variant"
28326
+ },
28327
+ {
28328
+ name: "radius",
28329
+ type: "string | undefined",
28330
+ required: false,
28331
+ description: "Border radius variant"
28332
+ },
28333
+ {
28334
+ name: "border",
28335
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollViewBorderVariant | undefined',
28336
+ required: false,
28337
+ description: "Border variant"
28338
+ },
28339
+ {
28340
+ name: "backgroundColor",
28341
+ type: "string | undefined",
28342
+ required: false,
28343
+ description: "Custom background color (overrides background variant)"
28344
+ },
28345
+ {
28346
+ name: "borderRadius",
28347
+ type: "number | undefined",
28348
+ required: false,
28349
+ description: "Custom border radius (overrides radius variant)"
28350
+ },
28351
+ {
28352
+ name: "borderWidth",
28353
+ type: "number | undefined",
28354
+ required: false,
28355
+ description: "Custom border width (overrides border variant)"
28356
+ },
28357
+ {
28358
+ name: "borderColor",
28359
+ type: "string | undefined",
28360
+ required: false,
28361
+ description: "Custom border color"
28362
+ },
28363
+ {
28364
+ name: "style",
28365
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/theme/node_modules/react-native/Libraries/StyleSheet/StyleSheet").StyleProp<import("/home/nicho/Development/idealyst-framework/packages/theme/node_modules/react-native/Libraries/StyleSheet/StyleSheetTypes").ViewStyle>',
28366
+ required: false,
28367
+ description: "Additional styles"
28368
+ },
28369
+ {
28370
+ name: "contentContainerStyle",
28371
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/theme/node_modules/react-native/Libraries/StyleSheet/StyleSheet").StyleProp<import("/home/nicho/Development/idealyst-framework/packages/theme/node_modules/react-native/Libraries/StyleSheet/StyleSheetTypes").ViewStyle>',
28372
+ required: false,
28373
+ description: "Styles applied to the content container"
28374
+ },
28375
+ {
28376
+ name: "showsIndicator",
28377
+ type: "boolean | undefined",
28378
+ required: false,
28379
+ description: "Whether to show scroll indicators. Defaults to true."
28380
+ },
28381
+ {
28382
+ name: "pagingEnabled",
28383
+ type: "boolean | undefined",
28384
+ required: false,
28385
+ description: "Whether to enable paging behavior"
28386
+ },
28387
+ {
28388
+ name: "bounces",
28389
+ type: "boolean | undefined",
28390
+ required: false,
28391
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true."
28392
+ },
28393
+ {
28394
+ name: "onScroll",
28395
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28396
+ required: false,
28397
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency."
28398
+ },
28399
+ {
28400
+ name: "onScrollBegin",
28401
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28402
+ required: false,
28403
+ description: "Called when scrolling begins (user starts dragging)."
28404
+ },
28405
+ {
28406
+ name: "onScrollEnd",
28407
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28408
+ required: false,
28409
+ description: "Called when scrolling ends (momentum settles or user lifts finger)."
28410
+ },
28411
+ {
28412
+ name: "onEndReached",
28413
+ type: "(() => void) | undefined",
28414
+ required: false,
28415
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns."
28416
+ },
28417
+ {
28418
+ name: "onEndReachedThreshold",
28419
+ type: "number | undefined",
28420
+ required: false,
28421
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0."
28422
+ },
28423
+ {
28424
+ name: "scrollEventThrottle",
28425
+ type: "number | undefined",
28426
+ required: false,
28427
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps)."
28428
+ },
28429
+ {
28430
+ name: "scrollEnabled",
28431
+ type: "boolean | undefined",
28432
+ required: false,
28433
+ description: "Whether scrolling is enabled. Defaults to true."
28434
+ },
28435
+ {
28436
+ name: "keyboardDismissMode",
28437
+ type: '"none" | "on-drag" | "interactive" | undefined',
28438
+ required: false,
28439
+ description: "Whether the keyboard should dismiss on drag."
28440
+ },
28441
+ {
28442
+ name: "testID",
28443
+ type: "string | undefined",
28444
+ required: false,
28445
+ description: "Test ID for testing"
28446
+ },
28447
+ {
28448
+ name: "onLayout",
28449
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/hooks/useWebLayout/types").LayoutChangeEvent) => void) | undefined',
28450
+ required: false,
28451
+ description: "Callback when layout changes"
28452
+ }
28453
+ ],
28454
+ typeDefinition: "export interface ScrollViewProps extends ContainerStyleProps {\n children?: ReactNode;\n\n /** Scroll direction. Defaults to 'vertical'. */\n direction?: ScrollViewDirection;\n\n /** Background variant */\n background?: ScrollViewBackgroundVariant;\n\n /** Border radius variant */\n radius?: ScrollViewRadiusVariant;\n\n /** Border variant */\n border?: ScrollViewBorderVariant;\n\n /** Custom background color (overrides background variant) */\n backgroundColor?: string;\n\n /** Custom border radius (overrides radius variant) */\n borderRadius?: number;\n\n /** Custom border width (overrides border variant) */\n borderWidth?: number;\n\n /** Custom border color */\n borderColor?: string;\n\n /** Additional styles */\n style?: StyleProp<ViewStyle>;\n\n /** Styles applied to the content container */\n contentContainerStyle?: StyleProp<ViewStyle>;\n\n /** Whether to show scroll indicators. Defaults to true. */\n showsIndicator?: boolean;\n\n /** Whether to enable paging behavior */\n pagingEnabled?: boolean;\n\n /** Whether the scroll view bounces at the edges (iOS). Defaults to true. */\n bounces?: boolean;\n\n /**\n * Called continuously as the user scrolls.\n * Use `scrollEventThrottle` to control frequency.\n */\n onScroll?: (event: ScrollEvent) => void;\n\n /**\n * Called when scrolling begins (user starts dragging).\n */\n onScrollBegin?: (event: ScrollEvent) => void;\n\n /**\n * Called when scrolling ends (momentum settles or user lifts finger).\n */\n onScrollEnd?: (event: ScrollEvent) => void;\n\n /**\n * Called when the scroll position reaches the end of the content.\n * Useful for infinite scroll / load-more patterns.\n */\n onEndReached?: () => void;\n\n /**\n * Distance from the end (in pixels) at which onEndReached fires.\n * Defaults to 0.\n */\n onEndReachedThreshold?: number;\n\n /**\n * Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps).\n */\n scrollEventThrottle?: number;\n\n /** Whether scrolling is enabled. Defaults to true. */\n scrollEnabled?: boolean;\n\n /** Whether the keyboard should dismiss on drag. */\n keyboardDismissMode?: 'none' | 'on-drag' | 'interactive';\n\n /** Test ID for testing */\n testID?: string;\n\n /** Callback when layout changes */\n onLayout?: (event: LayoutChangeEvent) => void;\n}",
28455
+ relatedTypes: {
28456
+ ScrollViewBackgroundVariant: "export type ScrollViewBackgroundVariant = Surface | 'transparent';",
28457
+ ScrollViewRadiusVariant: "export type ScrollViewRadiusVariant = Size | 'none';",
28458
+ ScrollViewBorderVariant: "export type ScrollViewBorderVariant = 'none' | 'thin' | 'thick';",
28459
+ ScrollViewDirection: "export type ScrollViewDirection = 'vertical' | 'horizontal' | 'both';",
28460
+ ScrollPosition: "export interface ScrollPosition {\n x: number;\n y: number;\n}",
28461
+ ScrollContentSize: "export interface ScrollContentSize {\n width: number;\n height: number;\n}",
28462
+ ScrollLayoutSize: "export interface ScrollLayoutSize {\n width: number;\n height: number;\n}",
28463
+ ScrollEvent: "export interface ScrollEvent {\n /** Current scroll offset */\n position: ScrollPosition;\n /** Size of the scrollable content */\n contentSize: ScrollContentSize;\n /** Size of the visible scroll container */\n layoutSize: ScrollLayoutSize;\n /** Whether the content is scrolled to the end (vertical or horizontal depending on direction) */\n isAtEnd: boolean;\n /** Whether the content is scrolled to the start */\n isAtStart: boolean;\n}",
28464
+ ScrollToOptions: "export interface ScrollToOptions {\n x?: number;\n y?: number;\n animated?: boolean;\n}",
28465
+ ScrollViewRef: "export interface ScrollViewRef {\n /** Scroll to a specific position */\n scrollTo: (options: ScrollToOptions) => void;\n /** Scroll to the end of the content */\n scrollToEnd: (options?: { animated?: boolean }) => void;\n /** Scroll to the top/start of the content */\n scrollToStart: (options?: { animated?: boolean }) => void;\n /** Get current scroll position */\n getScrollPosition: () => ScrollPosition;\n /** Get the underlying native element */\n getInnerElement: () => any;\n}"
28466
+ },
28467
+ registry: {
28468
+ name: "ScrollView",
28469
+ description: "Scrollable container with scroll event abstractions and imperative scroll controls.",
28470
+ props: {
28471
+ direction: {
28472
+ name: "direction",
28473
+ type: "ScrollViewDirection | undefined",
28474
+ values: [
28475
+ "vertical",
28476
+ "horizontal",
28477
+ "both"
28478
+ ],
28479
+ description: "Scroll direction. Defaults to 'vertical'.",
28480
+ required: false
28481
+ },
28482
+ background: {
28483
+ name: "background",
28484
+ type: "any",
28485
+ description: "Background variant",
28486
+ required: false
28487
+ },
28488
+ radius: {
28489
+ name: "radius",
28490
+ type: "any",
28491
+ description: "Border radius variant",
28492
+ required: false
28493
+ },
28494
+ border: {
28495
+ name: "border",
28496
+ type: "ScrollViewBorderVariant | undefined",
28497
+ values: [
28498
+ "none",
28499
+ "thin",
28500
+ "thick"
28501
+ ],
28502
+ description: "Border variant",
28503
+ required: false
28504
+ },
28505
+ backgroundColor: {
28506
+ name: "backgroundColor",
28507
+ type: "string | undefined",
28508
+ description: "Custom background color (overrides background variant)",
28509
+ required: false
28510
+ },
28511
+ borderRadius: {
28512
+ name: "borderRadius",
28513
+ type: "number | undefined",
28514
+ description: "Custom border radius (overrides radius variant)",
28515
+ required: false
28516
+ },
28517
+ borderWidth: {
28518
+ name: "borderWidth",
28519
+ type: "number | undefined",
28520
+ description: "Custom border width (overrides border variant)",
28521
+ required: false
28522
+ },
28523
+ borderColor: {
28524
+ name: "borderColor",
28525
+ type: "string | undefined",
28526
+ description: "Custom border color",
28527
+ required: false
28528
+ },
28529
+ contentContainerStyle: {
28530
+ name: "contentContainerStyle",
28531
+ type: "any",
28532
+ description: "Styles applied to the content container",
28533
+ required: false
28534
+ },
28535
+ showsIndicator: {
28536
+ name: "showsIndicator",
28537
+ type: "boolean | undefined",
28538
+ values: [
28539
+ "false",
28540
+ "true"
28541
+ ],
28542
+ description: "Whether to show scroll indicators. Defaults to true.",
28543
+ required: false
28544
+ },
28545
+ pagingEnabled: {
28546
+ name: "pagingEnabled",
28547
+ type: "boolean | undefined",
28548
+ values: [
28549
+ "false",
28550
+ "true"
28551
+ ],
28552
+ description: "Whether to enable paging behavior",
28553
+ required: false
28554
+ },
28555
+ bounces: {
28556
+ name: "bounces",
28557
+ type: "boolean | undefined",
28558
+ values: [
28559
+ "false",
28560
+ "true"
28561
+ ],
28562
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true.",
28563
+ required: false
28564
+ },
28565
+ onScroll: {
28566
+ name: "onScroll",
28567
+ type: "((event: ScrollEvent) => void) | undefined",
28568
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency.",
28569
+ required: false
28570
+ },
28571
+ onScrollBegin: {
28572
+ name: "onScrollBegin",
28573
+ type: "((event: ScrollEvent) => void) | undefined",
28574
+ description: "Called when scrolling begins (user starts dragging).",
28575
+ required: false
28576
+ },
28577
+ onScrollEnd: {
28578
+ name: "onScrollEnd",
28579
+ type: "((event: ScrollEvent) => void) | undefined",
28580
+ description: "Called when scrolling ends (momentum settles or user lifts finger).",
28581
+ required: false
28582
+ },
28583
+ onEndReached: {
28584
+ name: "onEndReached",
28585
+ type: "(() => void) | undefined",
28586
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns.",
28587
+ required: false
28588
+ },
28589
+ onEndReachedThreshold: {
28590
+ name: "onEndReachedThreshold",
28591
+ type: "number | undefined",
28592
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0.",
28593
+ required: false
28594
+ },
28595
+ scrollEventThrottle: {
28596
+ name: "scrollEventThrottle",
28597
+ type: "number | undefined",
28598
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps).",
28599
+ required: false
28600
+ },
28601
+ scrollEnabled: {
28602
+ name: "scrollEnabled",
28603
+ type: "boolean | undefined",
28604
+ values: [
28605
+ "false",
28606
+ "true"
28607
+ ],
28608
+ description: "Whether scrolling is enabled. Defaults to true.",
28609
+ required: false
28610
+ },
28611
+ keyboardDismissMode: {
28612
+ name: "keyboardDismissMode",
28613
+ type: '"none" | "on-drag" | "interactive" | undefined',
28614
+ values: [
28615
+ "none",
28616
+ "on-drag",
28617
+ "interactive"
28618
+ ],
28619
+ description: "Whether the keyboard should dismiss on drag.",
28620
+ required: false
28621
+ },
28622
+ id: {
28623
+ name: "id",
28624
+ type: "string | undefined",
28625
+ description: "Unique identifier for the element (maps to id on web, nativeID on native)",
28626
+ required: false
28627
+ },
28628
+ gap: {
28629
+ name: "gap",
28630
+ type: "any",
28631
+ description: "Gap between children (uses theme.sizes.view[size].spacing)",
28632
+ required: false
28633
+ },
28634
+ spacing: {
28635
+ name: "spacing",
28636
+ type: "any",
28637
+ description: "Alias for gap - spacing between children",
28638
+ required: false
28639
+ },
28640
+ padding: {
28641
+ name: "padding",
28642
+ type: "any",
28643
+ description: "Padding on all sides (uses theme.sizes.view[size].padding)",
28644
+ required: false
28645
+ },
28646
+ paddingVertical: {
28647
+ name: "paddingVertical",
28648
+ type: "any",
28649
+ description: "Vertical padding (top + bottom)",
28650
+ required: false
28651
+ },
28652
+ paddingHorizontal: {
28653
+ name: "paddingHorizontal",
28654
+ type: "any",
28655
+ description: "Horizontal padding (left + right)",
28656
+ required: false
28657
+ },
28658
+ margin: {
28659
+ name: "margin",
28660
+ type: "any",
28661
+ description: "Margin on all sides (uses theme.sizes.view[size].spacing)",
28662
+ required: false
28663
+ },
28664
+ marginVertical: {
28665
+ name: "marginVertical",
28666
+ type: "any",
28667
+ description: "Vertical margin (top + bottom)",
28668
+ required: false
28669
+ },
28670
+ marginHorizontal: {
28671
+ name: "marginHorizontal",
28672
+ type: "any",
28673
+ description: "Horizontal margin (left + right)",
28674
+ required: false
28675
+ }
28676
+ },
28677
+ category: "display",
28678
+ filePath: "../components/src/ScrollView",
28679
+ sampleProps: {
28680
+ children: "'Scrollable content'"
28681
+ }
28682
+ }
28683
+ },
28261
28684
  Select: {
28262
28685
  name: "Select",
28263
28686
  propsInterface: "SelectProps",
@@ -29766,6 +30189,12 @@ var types_default = {
29766
30189
  type: "boolean | undefined",
29767
30190
  required: false
29768
30191
  },
30192
+ {
30193
+ name: "fill",
30194
+ type: "boolean | undefined",
30195
+ required: false,
30196
+ description: "When true, the textarea expands to fill available vertical space using flex.\nOverrides `rows` and `autoGrow` height logic. All container layers get `flex: 1`."
30197
+ },
29769
30198
  {
29770
30199
  name: "maxLength",
29771
30200
  type: "number | undefined",
@@ -29828,7 +30257,7 @@ var types_default = {
29828
30257
  required: false
29829
30258
  }
29830
30259
  ],
29831
- typeDefinition: "export interface TextAreaProps extends FormInputStyleProps, FormAccessibilityProps {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /**\n * Called when a key is pressed while the textarea is focused.\n * Includes modifier key states (ctrl, shift, alt, meta).\n * Web only - no-op on native.\n */\n onKeyDown?: (event: KeyboardEventData) => void;\n placeholder?: string;\n disabled?: boolean;\n rows?: number;\n minHeight?: number;\n maxHeight?: number;\n autoGrow?: boolean;\n maxLength?: number;\n label?: string;\n error?: string;\n helperText?: string;\n resize?: TextAreaResizeVariant;\n showCharacterCount?: boolean;\n intent?: TextAreaIntentVariant;\n size?: TextAreaSizeVariant;\n /**\n * Visual style type of the textarea\n * @default 'outlined'\n */\n type?: TextAreaType;\n style?: StyleProp<ViewStyle>;\n textareaStyle?: StyleProp<TextStyle>;\n testID?: string;\n}",
30260
+ typeDefinition: "export interface TextAreaProps extends FormInputStyleProps, FormAccessibilityProps {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /**\n * Called when a key is pressed while the textarea is focused.\n * Includes modifier key states (ctrl, shift, alt, meta).\n * Web only - no-op on native.\n */\n onKeyDown?: (event: KeyboardEventData) => void;\n placeholder?: string;\n disabled?: boolean;\n rows?: number;\n minHeight?: number;\n maxHeight?: number;\n autoGrow?: boolean;\n /**\n * When true, the textarea expands to fill available vertical space using flex.\n * Overrides `rows` and `autoGrow` height logic. All container layers get `flex: 1`.\n */\n fill?: boolean;\n maxLength?: number;\n label?: string;\n error?: string;\n helperText?: string;\n resize?: TextAreaResizeVariant;\n showCharacterCount?: boolean;\n intent?: TextAreaIntentVariant;\n size?: TextAreaSizeVariant;\n /**\n * Visual style type of the textarea\n * @default 'outlined'\n */\n type?: TextAreaType;\n style?: StyleProp<ViewStyle>;\n textareaStyle?: StyleProp<TextStyle>;\n testID?: string;\n}",
29832
30261
  relatedTypes: {
29833
30262
  TextAreaIntentVariant: "export type TextAreaIntentVariant = Intent;",
29834
30263
  TextAreaSizeVariant: "export type TextAreaSizeVariant = Size;",
@@ -29898,6 +30327,16 @@ var types_default = {
29898
30327
  ],
29899
30328
  required: false
29900
30329
  },
30330
+ fill: {
30331
+ name: "fill",
30332
+ type: "boolean | undefined",
30333
+ values: [
30334
+ "false",
30335
+ "true"
30336
+ ],
30337
+ description: "When true, the textarea expands to fill available vertical space using flex.\nOverrides `rows` and `autoGrow` height logic. All container layers get `flex: 1`.",
30338
+ required: false
30339
+ },
29901
30340
  maxLength: {
29902
30341
  name: "maxLength",
29903
30342
  type: "number | undefined",
@@ -30972,7 +31411,7 @@ var types_default = {
30972
31411
  name: "scrollable",
30973
31412
  type: "boolean | undefined",
30974
31413
  required: false,
30975
- description: "Enable scrollable content.\n- Native: Wraps children in a ScrollView\n- Web: Renders a wrapper + content structure where the wrapper fills available\n space (or uses explicit dimensions) and content is absolutely positioned with\n overflow:auto. Sizing/margin styles go to wrapper, visual styles to content."
31414
+ description: ""
30976
31415
  },
30977
31416
  {
30978
31417
  name: "testID",
@@ -30987,7 +31426,7 @@ var types_default = {
30987
31426
  description: "Callback when the view's layout changes.\nCalled with layout information (x, y, width, height) when the component\nmounts or when its dimensions change."
30988
31427
  }
30989
31428
  ],
30990
- typeDefinition: "export interface ViewProps extends ContainerStyleProps {\n /**\n * The content to display inside the view\n */\n children?: ReactNode;\n\n /**\n * Background variant\n */\n background?: ViewBackgroundVariant;\n\n /**\n * Border radius variant\n */\n radius?: ViewRadiusVariant;\n\n /**\n * Border variant\n */\n border?: ViewBorderVariant;\n\n /**\n * Custom background color (overrides background variant)\n */\n backgroundColor?: string;\n\n /**\n * Custom border radius (overrides radius variant)\n */\n borderRadius?: number;\n\n /**\n * Custom border width (overrides border variant)\n */\n borderWidth?: number;\n\n /**\n * Custom border color\n */\n borderColor?: string;\n\n /**\n * Additional styles. Supports responsive values for any property.\n * @example\n * ```tsx\n * // Responsive flexDirection\n * <View style={{ flexDirection: { xs: 'column', md: 'row' } }} />\n *\n * // Mix responsive and static values\n * <View style={{ padding: { xs: 8, lg: 16 }, backgroundColor: '#fff' }} />\n * ```\n */\n style?: ViewStyleProp;\n\n /**\n * Enable scrollable content.\n * - Native: Wraps children in a ScrollView\n * - Web: Renders a wrapper + content structure where the wrapper fills available\n * space (or uses explicit dimensions) and content is absolutely positioned with\n * overflow:auto. Sizing/margin styles go to wrapper, visual styles to content.\n */\n scrollable?: boolean;\n\n /**\n * Test ID for testing\n */\n testID?: string;\n\n /**\n * Callback when the view's layout changes.\n * Called with layout information (x, y, width, height) when the component\n * mounts or when its dimensions change.\n */\n onLayout?: (event: LayoutChangeEvent) => void;\n}",
31429
+ typeDefinition: "export interface ViewProps extends ContainerStyleProps {\n /**\n * The content to display inside the view\n */\n children?: ReactNode;\n\n /**\n * Background variant\n */\n background?: ViewBackgroundVariant;\n\n /**\n * Border radius variant\n */\n radius?: ViewRadiusVariant;\n\n /**\n * Border variant\n */\n border?: ViewBorderVariant;\n\n /**\n * Custom background color (overrides background variant)\n */\n backgroundColor?: string;\n\n /**\n * Custom border radius (overrides radius variant)\n */\n borderRadius?: number;\n\n /**\n * Custom border width (overrides border variant)\n */\n borderWidth?: number;\n\n /**\n * Custom border color\n */\n borderColor?: string;\n\n /**\n * Additional styles. Supports responsive values for any property.\n * @example\n * ```tsx\n * // Responsive flexDirection\n * <View style={{ flexDirection: { xs: 'column', md: 'row' } }} />\n *\n * // Mix responsive and static values\n * <View style={{ padding: { xs: 8, lg: 16 }, backgroundColor: '#fff' }} />\n * ```\n */\n style?: ViewStyleProp;\n\n /**\n * @deprecated Use the ScrollView component instead, which provides scroll event\n * abstractions (onScroll, onScrollBegin, onScrollEnd, onEndReached) and imperative\n * scroll controls (scrollTo, scrollToEnd, scrollToStart) via ref.\n *\n * Enable scrollable content.\n * - Native: Wraps children in a ScrollView\n * - Web: Renders a wrapper + content structure where the wrapper fills available\n * space (or uses explicit dimensions) and content is absolutely positioned with\n * overflow:auto. Sizing/margin styles go to wrapper, visual styles to content.\n */\n scrollable?: boolean;\n\n /**\n * Test ID for testing\n */\n testID?: string;\n\n /**\n * Callback when the view's layout changes.\n * Called with layout information (x, y, width, height) when the component\n * mounts or when its dimensions change.\n */\n onLayout?: (event: LayoutChangeEvent) => void;\n}",
30991
31430
  relatedTypes: {
30992
31431
  ViewStyleProp: "export type ViewStyleProp = StyleProp<ViewStyle> | ResponsiveStyle | React.CSSProperties;",
30993
31432
  ViewBackgroundVariant: "export type ViewBackgroundVariant = Surface | 'transparent';",
@@ -31052,7 +31491,6 @@ var types_default = {
31052
31491
  "false",
31053
31492
  "true"
31054
31493
  ],
31055
- description: "Enable scrollable content.\n- Native: Wraps children in a ScrollView\n- Web: Renders a wrapper + content structure where the wrapper fills available\n space (or uses explicit dimensions) and content is absolutely positioned with\n overflow:auto. Sizing/margin styles go to wrapper, visual styles to content.",
31056
31494
  required: false
31057
31495
  },
31058
31496
  id: {
@@ -63463,6 +63901,13 @@ var types_default = {
63463
63901
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears.",
63464
63902
  required: false
63465
63903
  },
63904
+ keyboardAvoidingOffset: {
63905
+ name: "keyboardAvoidingOffset",
63906
+ type: "number | undefined",
63907
+ default: 0,
63908
+ description: "Additional offset to subtract from the keyboard height when avoiding the keyboard.\nThe Screen automatically accounts for the tab bar height when inside a tab navigator,\nbut this prop can be used for other fixed UI elements that occupy space at the bottom.",
63909
+ required: false
63910
+ },
63466
63911
  id: {
63467
63912
  name: "id",
63468
63913
  type: "string | undefined",
@@ -63524,6 +63969,222 @@ var types_default = {
63524
63969
  children: "'Screen content'"
63525
63970
  }
63526
63971
  },
63972
+ ScrollView: {
63973
+ name: "ScrollView",
63974
+ description: "Scrollable container with scroll event abstractions and imperative scroll controls.",
63975
+ props: {
63976
+ direction: {
63977
+ name: "direction",
63978
+ type: "ScrollViewDirection | undefined",
63979
+ values: [
63980
+ "vertical",
63981
+ "horizontal",
63982
+ "both"
63983
+ ],
63984
+ description: "Scroll direction. Defaults to 'vertical'.",
63985
+ required: false
63986
+ },
63987
+ background: {
63988
+ name: "background",
63989
+ type: "any",
63990
+ description: "Background variant",
63991
+ required: false
63992
+ },
63993
+ radius: {
63994
+ name: "radius",
63995
+ type: "any",
63996
+ description: "Border radius variant",
63997
+ required: false
63998
+ },
63999
+ border: {
64000
+ name: "border",
64001
+ type: "ScrollViewBorderVariant | undefined",
64002
+ values: [
64003
+ "none",
64004
+ "thin",
64005
+ "thick"
64006
+ ],
64007
+ description: "Border variant",
64008
+ required: false
64009
+ },
64010
+ backgroundColor: {
64011
+ name: "backgroundColor",
64012
+ type: "string | undefined",
64013
+ description: "Custom background color (overrides background variant)",
64014
+ required: false
64015
+ },
64016
+ borderRadius: {
64017
+ name: "borderRadius",
64018
+ type: "number | undefined",
64019
+ description: "Custom border radius (overrides radius variant)",
64020
+ required: false
64021
+ },
64022
+ borderWidth: {
64023
+ name: "borderWidth",
64024
+ type: "number | undefined",
64025
+ description: "Custom border width (overrides border variant)",
64026
+ required: false
64027
+ },
64028
+ borderColor: {
64029
+ name: "borderColor",
64030
+ type: "string | undefined",
64031
+ description: "Custom border color",
64032
+ required: false
64033
+ },
64034
+ contentContainerStyle: {
64035
+ name: "contentContainerStyle",
64036
+ type: "any",
64037
+ description: "Styles applied to the content container",
64038
+ required: false
64039
+ },
64040
+ showsIndicator: {
64041
+ name: "showsIndicator",
64042
+ type: "boolean | undefined",
64043
+ values: [
64044
+ "false",
64045
+ "true"
64046
+ ],
64047
+ description: "Whether to show scroll indicators. Defaults to true.",
64048
+ required: false
64049
+ },
64050
+ pagingEnabled: {
64051
+ name: "pagingEnabled",
64052
+ type: "boolean | undefined",
64053
+ values: [
64054
+ "false",
64055
+ "true"
64056
+ ],
64057
+ description: "Whether to enable paging behavior",
64058
+ required: false
64059
+ },
64060
+ bounces: {
64061
+ name: "bounces",
64062
+ type: "boolean | undefined",
64063
+ values: [
64064
+ "false",
64065
+ "true"
64066
+ ],
64067
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true.",
64068
+ required: false
64069
+ },
64070
+ onScroll: {
64071
+ name: "onScroll",
64072
+ type: "((event: ScrollEvent) => void) | undefined",
64073
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency.",
64074
+ required: false
64075
+ },
64076
+ onScrollBegin: {
64077
+ name: "onScrollBegin",
64078
+ type: "((event: ScrollEvent) => void) | undefined",
64079
+ description: "Called when scrolling begins (user starts dragging).",
64080
+ required: false
64081
+ },
64082
+ onScrollEnd: {
64083
+ name: "onScrollEnd",
64084
+ type: "((event: ScrollEvent) => void) | undefined",
64085
+ description: "Called when scrolling ends (momentum settles or user lifts finger).",
64086
+ required: false
64087
+ },
64088
+ onEndReached: {
64089
+ name: "onEndReached",
64090
+ type: "(() => void) | undefined",
64091
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns.",
64092
+ required: false
64093
+ },
64094
+ onEndReachedThreshold: {
64095
+ name: "onEndReachedThreshold",
64096
+ type: "number | undefined",
64097
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0.",
64098
+ required: false
64099
+ },
64100
+ scrollEventThrottle: {
64101
+ name: "scrollEventThrottle",
64102
+ type: "number | undefined",
64103
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps).",
64104
+ required: false
64105
+ },
64106
+ scrollEnabled: {
64107
+ name: "scrollEnabled",
64108
+ type: "boolean | undefined",
64109
+ values: [
64110
+ "false",
64111
+ "true"
64112
+ ],
64113
+ description: "Whether scrolling is enabled. Defaults to true.",
64114
+ required: false
64115
+ },
64116
+ keyboardDismissMode: {
64117
+ name: "keyboardDismissMode",
64118
+ type: '"none" | "on-drag" | "interactive" | undefined',
64119
+ values: [
64120
+ "none",
64121
+ "on-drag",
64122
+ "interactive"
64123
+ ],
64124
+ description: "Whether the keyboard should dismiss on drag.",
64125
+ required: false
64126
+ },
64127
+ id: {
64128
+ name: "id",
64129
+ type: "string | undefined",
64130
+ description: "Unique identifier for the element (maps to id on web, nativeID on native)",
64131
+ required: false
64132
+ },
64133
+ gap: {
64134
+ name: "gap",
64135
+ type: "any",
64136
+ description: "Gap between children (uses theme.sizes.view[size].spacing)",
64137
+ required: false
64138
+ },
64139
+ spacing: {
64140
+ name: "spacing",
64141
+ type: "any",
64142
+ description: "Alias for gap - spacing between children",
64143
+ required: false
64144
+ },
64145
+ padding: {
64146
+ name: "padding",
64147
+ type: "any",
64148
+ description: "Padding on all sides (uses theme.sizes.view[size].padding)",
64149
+ required: false
64150
+ },
64151
+ paddingVertical: {
64152
+ name: "paddingVertical",
64153
+ type: "any",
64154
+ description: "Vertical padding (top + bottom)",
64155
+ required: false
64156
+ },
64157
+ paddingHorizontal: {
64158
+ name: "paddingHorizontal",
64159
+ type: "any",
64160
+ description: "Horizontal padding (left + right)",
64161
+ required: false
64162
+ },
64163
+ margin: {
64164
+ name: "margin",
64165
+ type: "any",
64166
+ description: "Margin on all sides (uses theme.sizes.view[size].spacing)",
64167
+ required: false
64168
+ },
64169
+ marginVertical: {
64170
+ name: "marginVertical",
64171
+ type: "any",
64172
+ description: "Vertical margin (top + bottom)",
64173
+ required: false
64174
+ },
64175
+ marginHorizontal: {
64176
+ name: "marginHorizontal",
64177
+ type: "any",
64178
+ description: "Horizontal margin (left + right)",
64179
+ required: false
64180
+ }
64181
+ },
64182
+ category: "display",
64183
+ filePath: "../components/src/ScrollView",
64184
+ sampleProps: {
64185
+ children: "'Scrollable content'"
64186
+ }
64187
+ },
63527
64188
  Select: {
63528
64189
  name: "Select",
63529
64190
  description: "Dropdown selection component for choosing from a list of options.\nSupports searchable filtering on web and native presentation modes on iOS.",
@@ -64474,6 +65135,16 @@ var types_default = {
64474
65135
  ],
64475
65136
  required: false
64476
65137
  },
65138
+ fill: {
65139
+ name: "fill",
65140
+ type: "boolean | undefined",
65141
+ values: [
65142
+ "false",
65143
+ "true"
65144
+ ],
65145
+ description: "When true, the textarea expands to fill available vertical space using flex.\nOverrides `rows` and `autoGrow` height logic. All container layers get `flex: 1`.",
65146
+ required: false
65147
+ },
64477
65148
  maxLength: {
64478
65149
  name: "maxLength",
64479
65150
  type: "number | undefined",
@@ -65071,7 +65742,6 @@ var types_default = {
65071
65742
  "false",
65072
65743
  "true"
65073
65744
  ],
65074
- description: "Enable scrollable content.\n- Native: Wraps children in a ScrollView\n- Web: Renders a wrapper + content structure where the wrapper fills available\n space (or uses explicit dimensions) and content is absolutely positioned with\n overflow:auto. Sizing/margin styles go to wrapper, visual styles to content.",
65075
65745
  required: false
65076
65746
  },
65077
65747
  id: {
@@ -65778,7 +66448,12 @@ function postProcessComponentTypes(componentName, result) {
65778
66448
  }
65779
66449
  if (componentName.toLowerCase() === "view") {
65780
66450
  if (typeof result === "object" && result !== null) {
65781
- result.usageNote = "View spacing shorthand props: padding, paddingVertical, paddingHorizontal, margin, marginVertical, marginHorizontal, gap/spacing. These accept Size values (xs, sm, md, lg, xl). Do NOT use paddingTop, paddingBottom, paddingLeft, paddingRight, marginTop, marginBottom, marginLeft, marginRight as shorthand props \u2014 they do NOT exist and will cause TS2353. For single-side spacing use style={{ paddingTop: 16 }}. View does NOT have a `pointerEvents` JSX prop. Use style={{ pointerEvents: 'none' }} instead.";
66451
+ result.usageNote = "View spacing shorthand props: padding, paddingVertical, paddingHorizontal, margin, marginVertical, marginHorizontal, gap/spacing. These accept Size values (xs, sm, md, lg, xl). Do NOT use paddingTop, paddingBottom, paddingLeft, paddingRight, marginTop, marginBottom, marginLeft, marginRight as shorthand props \u2014 they do NOT exist and will cause TS2353. For single-side spacing use style={{ paddingTop: 16 }}. View does NOT have a `pointerEvents` JSX prop. Use style={{ pointerEvents: 'none' }} instead. **For scrollable content, use `<ScrollView>` from @idealyst/components** (NOT `<View scrollable>` which is deprecated). ScrollView supports direction ('vertical'|'horizontal'|'both'), scroll callbacks (onScroll, onEndReached), and imperative controls via ref (scrollTo, scrollToEnd, scrollToStart).";
66452
+ }
66453
+ }
66454
+ if (componentName.toLowerCase() === "scrollview") {
66455
+ if (typeof result === "object" && result !== null) {
66456
+ result.usageNote = "ScrollView is the replacement for the deprecated `<View scrollable>` pattern. Import from @idealyst/components: `import { ScrollView } from '@idealyst/components'`. Key props: direction ('vertical'|'horizontal'|'both'), onScroll, onScrollBegin, onScrollEnd, onEndReached (infinite scroll), showsIndicator, pagingEnabled, bounces, scrollEnabled, keyboardDismissMode. Accepts same spacing shorthand props as View: padding, paddingVertical, paddingHorizontal, gap, margin, etc. Imperative ref (ScrollViewRef): scrollTo({x,y,animated}), scrollToEnd(), scrollToStart(), getScrollPosition(). Use `contentContainerStyle` for inner content styling (e.g., gap between items). ScrollView needs bounded parent height \u2014 wrap in a flex:1 container or give explicit height. Example: `<ScrollView padding=\"md\" gap=\"sm\" onEndReached={loadMore}>{items.map(...)}</ScrollView>`";
65782
66457
  }
65783
66458
  }
65784
66459
  if (componentName.toLowerCase() === "textarea") {
@@ -65786,6 +66461,11 @@ function postProcessComponentTypes(componentName, result) {
65786
66461
  result.usageNote = "TextArea has a DIFFERENT API from TextInput. TextArea uses onChange (not onChangeText) and does NOT have onBlur. TextArea DOES support label, error, and rows props (TextInput does NOT support label/error). TextArea supports `fill` prop: when true, all container layers get flex: 1 so the textarea expands to fill available vertical space (useful inside Dialog with avoidKeyboard). Always call get_component_types('TextArea') separately \u2014 do NOT assume it shares TextInput's props.";
65787
66462
  }
65788
66463
  }
66464
+ if (componentName.toLowerCase() === "table") {
66465
+ if (typeof result === "object" && result !== null) {
66466
+ result.usageNote = "Table column `title` accepts ReactNode \u2014 you can render icons, styled text, or any element as the column header. Table column `footer` accepts `ReactNode | ((data: T[]) => ReactNode)`. Use static ReactNode for labels (e.g., 'Total'), or a callback function for computed values (e.g., `(data) => '$' + data.reduce((sum, r) => sum + r.price, 0).toFixed(2)`). The footer row only renders when at least one column has a `footer` defined \u2014 columns without `footer` render empty cells. Table does NOT have compound components \u2014 no Table.Header, Table.Body, Table.Footer. Use the `columns` prop with `title` and `footer` fields.";
66467
+ }
66468
+ }
65789
66469
  if (componentName.toLowerCase() === "image") {
65790
66470
  if (typeof result === "object" && result !== null) {
65791
66471
  result.usageNote = "Image uses `objectFit` (CSS convention) \u2014 NOT `resizeMode` (React Native convention). Valid objectFit values: 'contain', 'cover', 'fill', 'none', 'scale-down'. Image uses `source` prop (accepts URL string or ImageSourcePropType) \u2014 NOT `src`. Example: <Image source=\"https://example.com/photo.jpg\" objectFit=\"cover\" width={200} height={200} />";
@@ -65793,7 +66473,7 @@ function postProcessComponentTypes(componentName, result) {
65793
66473
  }
65794
66474
  if (componentName.toLowerCase() === "icon") {
65795
66475
  if (typeof result === "object" && result !== null) {
65796
- result.usageNote = "Icon color props: Use `intent` for semantic coloring (primary, danger, success, etc.) \u2014 renders the icon in the intent's primary color. Use `textColor` for text-semantic coloring (primary, secondary, tertiary, inverse) \u2014 renders the icon using theme.colors.text[textColor]. Use `color` for arbitrary hex/rgb colors. If the icon represents an action or status, use `intent`. If it should match surrounding text color, use `textColor`.";
66476
+ result.usageNote = "Icon color props: Use `intent` for semantic coloring (primary, danger, success, etc.) \u2014 renders the icon in the intent's primary color. Use `textColor` for text-semantic coloring (primary, secondary, tertiary, inverse) \u2014 renders the icon using theme.colors.text[textColor]. Use `color` for palette colors (e.g., 'primary', 'blue.500'). **CRITICAL: `color` and `textColor` are MUTUALLY EXCLUSIVE (discriminated union).** NEVER pass both \u2014 even conditionally with undefined values. Use one or the other. WRONG: `<Icon name='x' color={cond ? 'primary' : undefined} textColor={cond ? undefined : 'secondary'} />` \u2014 causes TS2322. RIGHT: `<Icon name='x' color={isActive ? 'primary' : 'neutral.400'} />` or use separate JSX branches.";
65797
66477
  }
65798
66478
  }
65799
66479
  if (componentName.toLowerCase() === "badge") {