@idealyst/mcp-server 1.2.123 → 1.2.124

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.
@@ -998,6 +998,26 @@ var componentMetadata = {
998
998
  "Configure safe areas appropriately"
999
999
  ]
1000
1000
  },
1001
+ ScrollView: {
1002
+ category: "layout",
1003
+ 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.",
1004
+ features: [
1005
+ "direction prop: 'vertical' (default) | 'horizontal' | 'both'",
1006
+ "Scroll callbacks: onScroll, onScrollBegin, onScrollEnd, onEndReached (for infinite scroll)",
1007
+ "Imperative ref: scrollTo, scrollToEnd, scrollToStart, getScrollPosition",
1008
+ "Same spacing shorthand props as View: padding, paddingVertical, paddingHorizontal, gap, margin, etc.",
1009
+ "Background, radius, and border variants (same as View)",
1010
+ "showsIndicator, pagingEnabled, bounces, scrollEnabled, keyboardDismissMode props",
1011
+ "contentContainerStyle for styling the inner content wrapper"
1012
+ ],
1013
+ bestPractices: [
1014
+ "Use ScrollView for scrollable content instead of <View scrollable> (deprecated)",
1015
+ "Use onEndReached + onEndReachedThreshold for infinite scroll / load-more patterns",
1016
+ 'Use direction="horizontal" for horizontal carousels or galleries',
1017
+ "Use ref with scrollTo/scrollToEnd for programmatic scroll control",
1018
+ "Wrap in a flex:1 container or give explicit height \u2014 ScrollView needs bounded parent height"
1019
+ ]
1020
+ },
1001
1021
  Select: {
1002
1022
  category: "form",
1003
1023
  description: "Dropdown selection component for choosing from a list of options",
@@ -1237,7 +1257,10 @@ var componentAliases = {
1237
1257
  photo: "Image",
1238
1258
  picture: "Image",
1239
1259
  img: "Image",
1240
- thumbnail: "Image"
1260
+ thumbnail: "Image",
1261
+ scroll: "ScrollView",
1262
+ scrollview: "ScrollView",
1263
+ scrollable: "ScrollView"
1241
1264
  };
1242
1265
  function findComponentName(componentName) {
1243
1266
  if (componentMetadata[componentName]) {
@@ -12848,14 +12871,16 @@ import { Outlet, useNavigator } from '@idealyst/navigation';
12848
12871
  import type { StackLayoutProps } from '@idealyst/navigation';
12849
12872
  import { View, Text, Pressable, Icon, Divider } from '@idealyst/components';
12850
12873
  import type { IconName } from '@idealyst/components';
12874
+ import { useTheme } from '@idealyst/theme';
12851
12875
 
12852
12876
  export function AppLayout({ routes, currentPath, options }: StackLayoutProps) {
12853
12877
  const { navigate } = useNavigator();
12878
+ const theme = useTheme();
12854
12879
 
12855
12880
  return (
12856
12881
  <View style={{ flex: 1, flexDirection: 'row' }}>
12857
12882
  {/* Sidebar */}
12858
- <View style={{ width: 260, borderRightWidth: 1, borderRightColor: '#e0e0e0', backgroundColor: '#fafafa' }}>
12883
+ <View style={{ width: 260, borderRightWidth: 1, borderRightColor: theme.colors.border.primary, backgroundColor: theme.colors.surface.secondary }}>
12859
12884
  {/* Logo / App name */}
12860
12885
  <View style={{ height: 56, justifyContent: 'center', paddingHorizontal: 16 }}>
12861
12886
  <Text typography="h6" weight="bold">{options?.headerTitle || 'My App'}</Text>
@@ -12880,18 +12905,20 @@ export function AppLayout({ routes, currentPath, options }: StackLayoutProps) {
12880
12905
  paddingVertical: 10,
12881
12906
  paddingHorizontal: 12,
12882
12907
  borderRadius: 8,
12883
- backgroundColor: isActive ? 'rgba(0,122,255,0.08)' : 'transparent',
12908
+ backgroundColor: isActive ? theme.intents.primary.light : 'transparent',
12884
12909
  }}
12885
12910
  >
12911
+ {/* Icon uses EITHER color OR textColor \u2014 never both */}
12886
12912
  <Icon
12887
12913
  name={(route.options?.icon as IconName) || 'circle-outline'}
12888
12914
  size="sm"
12889
- color={isActive ? '#007AFF' : '#666'}
12915
+ color={isActive ? 'primary' : undefined}
12890
12916
  />
12891
12917
  <Text
12892
12918
  typography="body2"
12893
- weight={isActive ? 'semibold' : 'regular'}
12894
- style={{ color: isActive ? '#007AFF' : '#333' }}
12919
+ weight={isActive ? 'semibold' : 'normal'}
12920
+ color={isActive ? undefined : 'secondary'}
12921
+ style={isActive ? { color: theme.intents.primary.primary } : undefined}
12895
12922
  >
12896
12923
  {route.options?.title || route.path}
12897
12924
  </Text>
@@ -13049,7 +13076,7 @@ export function TabLayout({ routes, currentPath }: TabLayoutProps) {
13049
13076
  {opts?.tabBarLabel && (
13050
13077
  <Text
13051
13078
  typography="body2"
13052
- weight={isActive ? 'semibold' : 'regular'}
13079
+ weight={isActive ? 'semibold' : 'normal'}
13053
13080
  style={{ color: isActive ? '#007AFF' : '#8E8E93' }}
13054
13081
  >
13055
13082
  {opts.tabBarLabel}
@@ -13264,7 +13291,7 @@ export function DashboardLayout({ routes, currentPath, options }: StackLayoutPro
13264
13291
  {!collapsed && (
13265
13292
  <Text
13266
13293
  typography="body2"
13267
- weight={isActive ? 'semibold' : 'regular'}
13294
+ weight={isActive ? 'semibold' : 'normal'}
13268
13295
  style={{ color: isActive ? '#007AFF' : '#333' }}
13269
13296
  >
13270
13297
  {route.options?.title || route.path}
@@ -16178,7 +16205,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16178
16205
  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"\`.
16179
16206
  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.
16180
16207
  3. **Button/IconButton** \`type\` is \`'contained' | 'outlined' | 'text'\` \u2014 NOT \`'ghost'\`, \`'solid'\`, \`'default'\`. Button has \`leftIcon\` and \`rightIcon\` \u2014 NOT \`icon\`.
16181
- 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'\`.
16208
+ 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).
16182
16209
  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.
16183
16210
  6. **Avatar** uses \`src\` for image URL, \`fallback\` for initials \u2014 NOT \`name\`, \`initials\`, \`label\`. Shape: \`'circle' | 'square'\`.
16184
16211
  7. **Link** requires a \`to\` prop (path string) \u2014 it's a navigation link, NOT pressable text.
@@ -16187,6 +16214,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16187
16214
  10. The component is **TextInput**, NOT \`Input\`.
16188
16215
  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"\`.
16189
16216
  12. **Switch** uses \`checked\` and \`onChange\` \u2014 NOT \`value\` and \`onValueChange\` (React Native convention). Also has \`label\`, \`labelPosition\`, \`disabled\`.
16217
+ 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.
16190
16218
 
16191
16219
  ### Navigation
16192
16220
  11. **NavigatorProvider** takes a \`route\` prop (SINGULAR) \u2014 NOT \`routes\`: \`<NavigatorProvider route={routeConfig} />\`. There is NO \`Router\` export.
@@ -16196,7 +16224,7 @@ These are mistakes agents make repeatedly. Each one causes TypeScript compilatio
16196
16224
  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;\`.
16197
16225
 
16198
16226
  ### Imports & Styling
16199
- 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.
16227
+ 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.).
16200
16228
  17. **Never** import from \`react-native-unistyles\` \u2014 use \`@idealyst/theme\` (\`configureThemes\`, \`ThemeSettings\`, \`useTheme\`).
16201
16229
  18. **useTheme()** returns the Theme object **directly** (NOT wrapped): \`const theme = useTheme();\`. Do NOT destructure: \`const { theme } = useTheme()\` \u2014 causes TS2339.
16202
16230
  19. **Spacing & Layout**: Use component shorthand props for spacing \u2014 NOT \`theme.spacing\` (which does NOT exist). The correct patterns:
@@ -23719,7 +23747,7 @@ import { fileURLToPath } from "url";
23719
23747
  // src/generated/types.json
23720
23748
  var types_default = {
23721
23749
  version: "1.0.93",
23722
- extractedAt: "2026-02-24T21:11:17.058Z",
23750
+ extractedAt: "2026-03-11T20:52:45.143Z",
23723
23751
  components: {
23724
23752
  Accordion: {
23725
23753
  name: "Accordion",
@@ -27990,6 +28018,12 @@ var types_default = {
27990
28018
  required: false,
27991
28019
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears."
27992
28020
  },
28021
+ {
28022
+ name: "keyboardAvoidingOffset",
28023
+ type: "number | undefined",
28024
+ required: false,
28025
+ 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."
28026
+ },
27993
28027
  {
27994
28028
  name: "onLayout",
27995
28029
  type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/hooks/useWebLayout/types").LayoutChangeEvent) => void) | undefined',
@@ -27997,7 +28031,7 @@ var types_default = {
27997
28031
  description: "Called when the layout of the screen changes.\nProvides the new width, height, x, and y coordinates."
27998
28032
  }
27999
28033
  ],
28000
- 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}",
28034
+ 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}",
28001
28035
  relatedTypes: {},
28002
28036
  registry: {
28003
28037
  name: "Screen",
@@ -28086,6 +28120,13 @@ var types_default = {
28086
28120
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears.",
28087
28121
  required: false
28088
28122
  },
28123
+ keyboardAvoidingOffset: {
28124
+ name: "keyboardAvoidingOffset",
28125
+ type: "number | undefined",
28126
+ default: 0,
28127
+ 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.",
28128
+ required: false
28129
+ },
28089
28130
  id: {
28090
28131
  name: "id",
28091
28132
  type: "string | undefined",
@@ -28148,6 +28189,384 @@ var types_default = {
28148
28189
  }
28149
28190
  }
28150
28191
  },
28192
+ ScrollView: {
28193
+ name: "ScrollView",
28194
+ propsInterface: "ScrollViewProps",
28195
+ props: [
28196
+ {
28197
+ name: "children",
28198
+ type: "React.ReactNode",
28199
+ required: false
28200
+ },
28201
+ {
28202
+ name: "direction",
28203
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollViewDirection | undefined',
28204
+ required: false,
28205
+ description: "Scroll direction. Defaults to 'vertical'."
28206
+ },
28207
+ {
28208
+ name: "background",
28209
+ type: "string | undefined",
28210
+ required: false,
28211
+ description: "Background variant"
28212
+ },
28213
+ {
28214
+ name: "radius",
28215
+ type: "string | undefined",
28216
+ required: false,
28217
+ description: "Border radius variant"
28218
+ },
28219
+ {
28220
+ name: "border",
28221
+ type: 'import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollViewBorderVariant | undefined',
28222
+ required: false,
28223
+ description: "Border variant"
28224
+ },
28225
+ {
28226
+ name: "backgroundColor",
28227
+ type: "string | undefined",
28228
+ required: false,
28229
+ description: "Custom background color (overrides background variant)"
28230
+ },
28231
+ {
28232
+ name: "borderRadius",
28233
+ type: "number | undefined",
28234
+ required: false,
28235
+ description: "Custom border radius (overrides radius variant)"
28236
+ },
28237
+ {
28238
+ name: "borderWidth",
28239
+ type: "number | undefined",
28240
+ required: false,
28241
+ description: "Custom border width (overrides border variant)"
28242
+ },
28243
+ {
28244
+ name: "borderColor",
28245
+ type: "string | undefined",
28246
+ required: false,
28247
+ description: "Custom border color"
28248
+ },
28249
+ {
28250
+ name: "style",
28251
+ 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>',
28252
+ required: false,
28253
+ description: "Additional styles"
28254
+ },
28255
+ {
28256
+ name: "contentContainerStyle",
28257
+ 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>',
28258
+ required: false,
28259
+ description: "Styles applied to the content container"
28260
+ },
28261
+ {
28262
+ name: "showsIndicator",
28263
+ type: "boolean | undefined",
28264
+ required: false,
28265
+ description: "Whether to show scroll indicators. Defaults to true."
28266
+ },
28267
+ {
28268
+ name: "pagingEnabled",
28269
+ type: "boolean | undefined",
28270
+ required: false,
28271
+ description: "Whether to enable paging behavior"
28272
+ },
28273
+ {
28274
+ name: "bounces",
28275
+ type: "boolean | undefined",
28276
+ required: false,
28277
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true."
28278
+ },
28279
+ {
28280
+ name: "onScroll",
28281
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28282
+ required: false,
28283
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency."
28284
+ },
28285
+ {
28286
+ name: "onScrollBegin",
28287
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28288
+ required: false,
28289
+ description: "Called when scrolling begins (user starts dragging)."
28290
+ },
28291
+ {
28292
+ name: "onScrollEnd",
28293
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/ScrollView/types").ScrollEvent) => void) | undefined',
28294
+ required: false,
28295
+ description: "Called when scrolling ends (momentum settles or user lifts finger)."
28296
+ },
28297
+ {
28298
+ name: "onEndReached",
28299
+ type: "(() => void) | undefined",
28300
+ required: false,
28301
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns."
28302
+ },
28303
+ {
28304
+ name: "onEndReachedThreshold",
28305
+ type: "number | undefined",
28306
+ required: false,
28307
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0."
28308
+ },
28309
+ {
28310
+ name: "scrollEventThrottle",
28311
+ type: "number | undefined",
28312
+ required: false,
28313
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps)."
28314
+ },
28315
+ {
28316
+ name: "scrollEnabled",
28317
+ type: "boolean | undefined",
28318
+ required: false,
28319
+ description: "Whether scrolling is enabled. Defaults to true."
28320
+ },
28321
+ {
28322
+ name: "keyboardDismissMode",
28323
+ type: '"none" | "on-drag" | "interactive" | undefined',
28324
+ required: false,
28325
+ description: "Whether the keyboard should dismiss on drag."
28326
+ },
28327
+ {
28328
+ name: "testID",
28329
+ type: "string | undefined",
28330
+ required: false,
28331
+ description: "Test ID for testing"
28332
+ },
28333
+ {
28334
+ name: "onLayout",
28335
+ type: '((event: import("/home/nicho/Development/idealyst-framework/packages/components/src/hooks/useWebLayout/types").LayoutChangeEvent) => void) | undefined',
28336
+ required: false,
28337
+ description: "Callback when layout changes"
28338
+ }
28339
+ ],
28340
+ 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}",
28341
+ relatedTypes: {
28342
+ ScrollViewBackgroundVariant: "export type ScrollViewBackgroundVariant = Surface | 'transparent';",
28343
+ ScrollViewRadiusVariant: "export type ScrollViewRadiusVariant = Size | 'none';",
28344
+ ScrollViewBorderVariant: "export type ScrollViewBorderVariant = 'none' | 'thin' | 'thick';",
28345
+ ScrollViewDirection: "export type ScrollViewDirection = 'vertical' | 'horizontal' | 'both';",
28346
+ ScrollPosition: "export interface ScrollPosition {\n x: number;\n y: number;\n}",
28347
+ ScrollContentSize: "export interface ScrollContentSize {\n width: number;\n height: number;\n}",
28348
+ ScrollLayoutSize: "export interface ScrollLayoutSize {\n width: number;\n height: number;\n}",
28349
+ 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}",
28350
+ ScrollToOptions: "export interface ScrollToOptions {\n x?: number;\n y?: number;\n animated?: boolean;\n}",
28351
+ 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}"
28352
+ },
28353
+ registry: {
28354
+ name: "ScrollView",
28355
+ description: "Scrollable container with scroll event abstractions and imperative scroll controls.",
28356
+ props: {
28357
+ direction: {
28358
+ name: "direction",
28359
+ type: "ScrollViewDirection | undefined",
28360
+ values: [
28361
+ "vertical",
28362
+ "horizontal",
28363
+ "both"
28364
+ ],
28365
+ description: "Scroll direction. Defaults to 'vertical'.",
28366
+ required: false
28367
+ },
28368
+ background: {
28369
+ name: "background",
28370
+ type: "any",
28371
+ description: "Background variant",
28372
+ required: false
28373
+ },
28374
+ radius: {
28375
+ name: "radius",
28376
+ type: "any",
28377
+ description: "Border radius variant",
28378
+ required: false
28379
+ },
28380
+ border: {
28381
+ name: "border",
28382
+ type: "ScrollViewBorderVariant | undefined",
28383
+ values: [
28384
+ "none",
28385
+ "thin",
28386
+ "thick"
28387
+ ],
28388
+ description: "Border variant",
28389
+ required: false
28390
+ },
28391
+ backgroundColor: {
28392
+ name: "backgroundColor",
28393
+ type: "string | undefined",
28394
+ description: "Custom background color (overrides background variant)",
28395
+ required: false
28396
+ },
28397
+ borderRadius: {
28398
+ name: "borderRadius",
28399
+ type: "number | undefined",
28400
+ description: "Custom border radius (overrides radius variant)",
28401
+ required: false
28402
+ },
28403
+ borderWidth: {
28404
+ name: "borderWidth",
28405
+ type: "number | undefined",
28406
+ description: "Custom border width (overrides border variant)",
28407
+ required: false
28408
+ },
28409
+ borderColor: {
28410
+ name: "borderColor",
28411
+ type: "string | undefined",
28412
+ description: "Custom border color",
28413
+ required: false
28414
+ },
28415
+ contentContainerStyle: {
28416
+ name: "contentContainerStyle",
28417
+ type: "any",
28418
+ description: "Styles applied to the content container",
28419
+ required: false
28420
+ },
28421
+ showsIndicator: {
28422
+ name: "showsIndicator",
28423
+ type: "boolean | undefined",
28424
+ values: [
28425
+ "false",
28426
+ "true"
28427
+ ],
28428
+ description: "Whether to show scroll indicators. Defaults to true.",
28429
+ required: false
28430
+ },
28431
+ pagingEnabled: {
28432
+ name: "pagingEnabled",
28433
+ type: "boolean | undefined",
28434
+ values: [
28435
+ "false",
28436
+ "true"
28437
+ ],
28438
+ description: "Whether to enable paging behavior",
28439
+ required: false
28440
+ },
28441
+ bounces: {
28442
+ name: "bounces",
28443
+ type: "boolean | undefined",
28444
+ values: [
28445
+ "false",
28446
+ "true"
28447
+ ],
28448
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true.",
28449
+ required: false
28450
+ },
28451
+ onScroll: {
28452
+ name: "onScroll",
28453
+ type: "((event: ScrollEvent) => void) | undefined",
28454
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency.",
28455
+ required: false
28456
+ },
28457
+ onScrollBegin: {
28458
+ name: "onScrollBegin",
28459
+ type: "((event: ScrollEvent) => void) | undefined",
28460
+ description: "Called when scrolling begins (user starts dragging).",
28461
+ required: false
28462
+ },
28463
+ onScrollEnd: {
28464
+ name: "onScrollEnd",
28465
+ type: "((event: ScrollEvent) => void) | undefined",
28466
+ description: "Called when scrolling ends (momentum settles or user lifts finger).",
28467
+ required: false
28468
+ },
28469
+ onEndReached: {
28470
+ name: "onEndReached",
28471
+ type: "(() => void) | undefined",
28472
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns.",
28473
+ required: false
28474
+ },
28475
+ onEndReachedThreshold: {
28476
+ name: "onEndReachedThreshold",
28477
+ type: "number | undefined",
28478
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0.",
28479
+ required: false
28480
+ },
28481
+ scrollEventThrottle: {
28482
+ name: "scrollEventThrottle",
28483
+ type: "number | undefined",
28484
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps).",
28485
+ required: false
28486
+ },
28487
+ scrollEnabled: {
28488
+ name: "scrollEnabled",
28489
+ type: "boolean | undefined",
28490
+ values: [
28491
+ "false",
28492
+ "true"
28493
+ ],
28494
+ description: "Whether scrolling is enabled. Defaults to true.",
28495
+ required: false
28496
+ },
28497
+ keyboardDismissMode: {
28498
+ name: "keyboardDismissMode",
28499
+ type: '"none" | "on-drag" | "interactive" | undefined',
28500
+ values: [
28501
+ "none",
28502
+ "on-drag",
28503
+ "interactive"
28504
+ ],
28505
+ description: "Whether the keyboard should dismiss on drag.",
28506
+ required: false
28507
+ },
28508
+ id: {
28509
+ name: "id",
28510
+ type: "string | undefined",
28511
+ description: "Unique identifier for the element (maps to id on web, nativeID on native)",
28512
+ required: false
28513
+ },
28514
+ gap: {
28515
+ name: "gap",
28516
+ type: "any",
28517
+ description: "Gap between children (uses theme.sizes.view[size].spacing)",
28518
+ required: false
28519
+ },
28520
+ spacing: {
28521
+ name: "spacing",
28522
+ type: "any",
28523
+ description: "Alias for gap - spacing between children",
28524
+ required: false
28525
+ },
28526
+ padding: {
28527
+ name: "padding",
28528
+ type: "any",
28529
+ description: "Padding on all sides (uses theme.sizes.view[size].padding)",
28530
+ required: false
28531
+ },
28532
+ paddingVertical: {
28533
+ name: "paddingVertical",
28534
+ type: "any",
28535
+ description: "Vertical padding (top + bottom)",
28536
+ required: false
28537
+ },
28538
+ paddingHorizontal: {
28539
+ name: "paddingHorizontal",
28540
+ type: "any",
28541
+ description: "Horizontal padding (left + right)",
28542
+ required: false
28543
+ },
28544
+ margin: {
28545
+ name: "margin",
28546
+ type: "any",
28547
+ description: "Margin on all sides (uses theme.sizes.view[size].spacing)",
28548
+ required: false
28549
+ },
28550
+ marginVertical: {
28551
+ name: "marginVertical",
28552
+ type: "any",
28553
+ description: "Vertical margin (top + bottom)",
28554
+ required: false
28555
+ },
28556
+ marginHorizontal: {
28557
+ name: "marginHorizontal",
28558
+ type: "any",
28559
+ description: "Horizontal margin (left + right)",
28560
+ required: false
28561
+ }
28562
+ },
28563
+ category: "display",
28564
+ filePath: "../components/src/ScrollView",
28565
+ sampleProps: {
28566
+ children: "'Scrollable content'"
28567
+ }
28568
+ }
28569
+ },
28151
28570
  Select: {
28152
28571
  name: "Select",
28153
28572
  propsInterface: "SelectProps",
@@ -29656,6 +30075,12 @@ var types_default = {
29656
30075
  type: "boolean | undefined",
29657
30076
  required: false
29658
30077
  },
30078
+ {
30079
+ name: "fill",
30080
+ type: "boolean | undefined",
30081
+ required: false,
30082
+ 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`."
30083
+ },
29659
30084
  {
29660
30085
  name: "maxLength",
29661
30086
  type: "number | undefined",
@@ -29718,7 +30143,7 @@ var types_default = {
29718
30143
  required: false
29719
30144
  }
29720
30145
  ],
29721
- 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}",
30146
+ 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}",
29722
30147
  relatedTypes: {
29723
30148
  TextAreaIntentVariant: "export type TextAreaIntentVariant = Intent;",
29724
30149
  TextAreaSizeVariant: "export type TextAreaSizeVariant = Size;",
@@ -29788,6 +30213,16 @@ var types_default = {
29788
30213
  ],
29789
30214
  required: false
29790
30215
  },
30216
+ fill: {
30217
+ name: "fill",
30218
+ type: "boolean | undefined",
30219
+ values: [
30220
+ "false",
30221
+ "true"
30222
+ ],
30223
+ 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`.",
30224
+ required: false
30225
+ },
29791
30226
  maxLength: {
29792
30227
  name: "maxLength",
29793
30228
  type: "number | undefined",
@@ -30862,7 +31297,7 @@ var types_default = {
30862
31297
  name: "scrollable",
30863
31298
  type: "boolean | undefined",
30864
31299
  required: false,
30865
- 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."
31300
+ description: ""
30866
31301
  },
30867
31302
  {
30868
31303
  name: "testID",
@@ -30877,7 +31312,7 @@ var types_default = {
30877
31312
  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."
30878
31313
  }
30879
31314
  ],
30880
- 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}",
31315
+ 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}",
30881
31316
  relatedTypes: {
30882
31317
  ViewStyleProp: "export type ViewStyleProp = StyleProp<ViewStyle> | ResponsiveStyle | React.CSSProperties;",
30883
31318
  ViewBackgroundVariant: "export type ViewBackgroundVariant = Surface | 'transparent';",
@@ -30942,7 +31377,6 @@ var types_default = {
30942
31377
  "false",
30943
31378
  "true"
30944
31379
  ],
30945
- 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.",
30946
31380
  required: false
30947
31381
  },
30948
31382
  id: {
@@ -63353,6 +63787,13 @@ var types_default = {
63353
63787
  description: "Whether to avoid the keyboard on native platforms (iOS/Android).\nWhen enabled, content will shift up when the keyboard appears.",
63354
63788
  required: false
63355
63789
  },
63790
+ keyboardAvoidingOffset: {
63791
+ name: "keyboardAvoidingOffset",
63792
+ type: "number | undefined",
63793
+ default: 0,
63794
+ 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.",
63795
+ required: false
63796
+ },
63356
63797
  id: {
63357
63798
  name: "id",
63358
63799
  type: "string | undefined",
@@ -63414,6 +63855,222 @@ var types_default = {
63414
63855
  children: "'Screen content'"
63415
63856
  }
63416
63857
  },
63858
+ ScrollView: {
63859
+ name: "ScrollView",
63860
+ description: "Scrollable container with scroll event abstractions and imperative scroll controls.",
63861
+ props: {
63862
+ direction: {
63863
+ name: "direction",
63864
+ type: "ScrollViewDirection | undefined",
63865
+ values: [
63866
+ "vertical",
63867
+ "horizontal",
63868
+ "both"
63869
+ ],
63870
+ description: "Scroll direction. Defaults to 'vertical'.",
63871
+ required: false
63872
+ },
63873
+ background: {
63874
+ name: "background",
63875
+ type: "any",
63876
+ description: "Background variant",
63877
+ required: false
63878
+ },
63879
+ radius: {
63880
+ name: "radius",
63881
+ type: "any",
63882
+ description: "Border radius variant",
63883
+ required: false
63884
+ },
63885
+ border: {
63886
+ name: "border",
63887
+ type: "ScrollViewBorderVariant | undefined",
63888
+ values: [
63889
+ "none",
63890
+ "thin",
63891
+ "thick"
63892
+ ],
63893
+ description: "Border variant",
63894
+ required: false
63895
+ },
63896
+ backgroundColor: {
63897
+ name: "backgroundColor",
63898
+ type: "string | undefined",
63899
+ description: "Custom background color (overrides background variant)",
63900
+ required: false
63901
+ },
63902
+ borderRadius: {
63903
+ name: "borderRadius",
63904
+ type: "number | undefined",
63905
+ description: "Custom border radius (overrides radius variant)",
63906
+ required: false
63907
+ },
63908
+ borderWidth: {
63909
+ name: "borderWidth",
63910
+ type: "number | undefined",
63911
+ description: "Custom border width (overrides border variant)",
63912
+ required: false
63913
+ },
63914
+ borderColor: {
63915
+ name: "borderColor",
63916
+ type: "string | undefined",
63917
+ description: "Custom border color",
63918
+ required: false
63919
+ },
63920
+ contentContainerStyle: {
63921
+ name: "contentContainerStyle",
63922
+ type: "any",
63923
+ description: "Styles applied to the content container",
63924
+ required: false
63925
+ },
63926
+ showsIndicator: {
63927
+ name: "showsIndicator",
63928
+ type: "boolean | undefined",
63929
+ values: [
63930
+ "false",
63931
+ "true"
63932
+ ],
63933
+ description: "Whether to show scroll indicators. Defaults to true.",
63934
+ required: false
63935
+ },
63936
+ pagingEnabled: {
63937
+ name: "pagingEnabled",
63938
+ type: "boolean | undefined",
63939
+ values: [
63940
+ "false",
63941
+ "true"
63942
+ ],
63943
+ description: "Whether to enable paging behavior",
63944
+ required: false
63945
+ },
63946
+ bounces: {
63947
+ name: "bounces",
63948
+ type: "boolean | undefined",
63949
+ values: [
63950
+ "false",
63951
+ "true"
63952
+ ],
63953
+ description: "Whether the scroll view bounces at the edges (iOS). Defaults to true.",
63954
+ required: false
63955
+ },
63956
+ onScroll: {
63957
+ name: "onScroll",
63958
+ type: "((event: ScrollEvent) => void) | undefined",
63959
+ description: "Called continuously as the user scrolls.\nUse `scrollEventThrottle` to control frequency.",
63960
+ required: false
63961
+ },
63962
+ onScrollBegin: {
63963
+ name: "onScrollBegin",
63964
+ type: "((event: ScrollEvent) => void) | undefined",
63965
+ description: "Called when scrolling begins (user starts dragging).",
63966
+ required: false
63967
+ },
63968
+ onScrollEnd: {
63969
+ name: "onScrollEnd",
63970
+ type: "((event: ScrollEvent) => void) | undefined",
63971
+ description: "Called when scrolling ends (momentum settles or user lifts finger).",
63972
+ required: false
63973
+ },
63974
+ onEndReached: {
63975
+ name: "onEndReached",
63976
+ type: "(() => void) | undefined",
63977
+ description: "Called when the scroll position reaches the end of the content.\nUseful for infinite scroll / load-more patterns.",
63978
+ required: false
63979
+ },
63980
+ onEndReachedThreshold: {
63981
+ name: "onEndReachedThreshold",
63982
+ type: "number | undefined",
63983
+ description: "Distance from the end (in pixels) at which onEndReached fires.\nDefaults to 0.",
63984
+ required: false
63985
+ },
63986
+ scrollEventThrottle: {
63987
+ name: "scrollEventThrottle",
63988
+ type: "number | undefined",
63989
+ description: "Throttle interval (ms) for onScroll events on native. Defaults to 16 (~60fps).",
63990
+ required: false
63991
+ },
63992
+ scrollEnabled: {
63993
+ name: "scrollEnabled",
63994
+ type: "boolean | undefined",
63995
+ values: [
63996
+ "false",
63997
+ "true"
63998
+ ],
63999
+ description: "Whether scrolling is enabled. Defaults to true.",
64000
+ required: false
64001
+ },
64002
+ keyboardDismissMode: {
64003
+ name: "keyboardDismissMode",
64004
+ type: '"none" | "on-drag" | "interactive" | undefined',
64005
+ values: [
64006
+ "none",
64007
+ "on-drag",
64008
+ "interactive"
64009
+ ],
64010
+ description: "Whether the keyboard should dismiss on drag.",
64011
+ required: false
64012
+ },
64013
+ id: {
64014
+ name: "id",
64015
+ type: "string | undefined",
64016
+ description: "Unique identifier for the element (maps to id on web, nativeID on native)",
64017
+ required: false
64018
+ },
64019
+ gap: {
64020
+ name: "gap",
64021
+ type: "any",
64022
+ description: "Gap between children (uses theme.sizes.view[size].spacing)",
64023
+ required: false
64024
+ },
64025
+ spacing: {
64026
+ name: "spacing",
64027
+ type: "any",
64028
+ description: "Alias for gap - spacing between children",
64029
+ required: false
64030
+ },
64031
+ padding: {
64032
+ name: "padding",
64033
+ type: "any",
64034
+ description: "Padding on all sides (uses theme.sizes.view[size].padding)",
64035
+ required: false
64036
+ },
64037
+ paddingVertical: {
64038
+ name: "paddingVertical",
64039
+ type: "any",
64040
+ description: "Vertical padding (top + bottom)",
64041
+ required: false
64042
+ },
64043
+ paddingHorizontal: {
64044
+ name: "paddingHorizontal",
64045
+ type: "any",
64046
+ description: "Horizontal padding (left + right)",
64047
+ required: false
64048
+ },
64049
+ margin: {
64050
+ name: "margin",
64051
+ type: "any",
64052
+ description: "Margin on all sides (uses theme.sizes.view[size].spacing)",
64053
+ required: false
64054
+ },
64055
+ marginVertical: {
64056
+ name: "marginVertical",
64057
+ type: "any",
64058
+ description: "Vertical margin (top + bottom)",
64059
+ required: false
64060
+ },
64061
+ marginHorizontal: {
64062
+ name: "marginHorizontal",
64063
+ type: "any",
64064
+ description: "Horizontal margin (left + right)",
64065
+ required: false
64066
+ }
64067
+ },
64068
+ category: "display",
64069
+ filePath: "../components/src/ScrollView",
64070
+ sampleProps: {
64071
+ children: "'Scrollable content'"
64072
+ }
64073
+ },
63417
64074
  Select: {
63418
64075
  name: "Select",
63419
64076
  description: "Dropdown selection component for choosing from a list of options.\nSupports searchable filtering on web and native presentation modes on iOS.",
@@ -64364,6 +65021,16 @@ var types_default = {
64364
65021
  ],
64365
65022
  required: false
64366
65023
  },
65024
+ fill: {
65025
+ name: "fill",
65026
+ type: "boolean | undefined",
65027
+ values: [
65028
+ "false",
65029
+ "true"
65030
+ ],
65031
+ 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`.",
65032
+ required: false
65033
+ },
64367
65034
  maxLength: {
64368
65035
  name: "maxLength",
64369
65036
  type: "number | undefined",
@@ -64961,7 +65628,6 @@ var types_default = {
64961
65628
  "false",
64962
65629
  "true"
64963
65630
  ],
64964
- 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.",
64965
65631
  required: false
64966
65632
  },
64967
65633
  id: {
@@ -65668,7 +66334,12 @@ function postProcessComponentTypes(componentName, result) {
65668
66334
  }
65669
66335
  if (componentName.toLowerCase() === "view") {
65670
66336
  if (typeof result === "object" && result !== null) {
65671
- 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.";
66337
+ 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).";
66338
+ }
66339
+ }
66340
+ if (componentName.toLowerCase() === "scrollview") {
66341
+ if (typeof result === "object" && result !== null) {
66342
+ 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>`";
65672
66343
  }
65673
66344
  }
65674
66345
  if (componentName.toLowerCase() === "textarea") {
@@ -65683,7 +66354,7 @@ function postProcessComponentTypes(componentName, result) {
65683
66354
  }
65684
66355
  if (componentName.toLowerCase() === "icon") {
65685
66356
  if (typeof result === "object" && result !== null) {
65686
- 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`.";
66357
+ 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.";
65687
66358
  }
65688
66359
  }
65689
66360
  if (componentName.toLowerCase() === "badge") {
@@ -66541,4 +67212,4 @@ export {
66541
67212
  toolHandlers,
66542
67213
  callTool
66543
67214
  };
66544
- //# sourceMappingURL=chunk-RVMPULO4.js.map
67215
+ //# sourceMappingURL=chunk-EALTHXKT.js.map