@vellira-ui/react-native 2.117.2 → 2.118.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -31,6 +31,8 @@ export type { RadioProps } from './primitives/Radio';
31
31
  export { Radio } from './primitives/Radio';
32
32
  export type { SwitchProps } from './primitives/Switch';
33
33
  export { Switch } from './primitives/Switch';
34
+ export type { TextareaProps } from './primitives/Textarea';
35
+ export { Textarea } from './primitives/Textarea';
34
36
  export type { NativeThemeName, ThemeProviderProps } from './theme';
35
37
  export { nativeThemes, ThemeProvider, useTheme } from './theme';
36
38
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -799,7 +799,7 @@ function useThemeStyles(createStyles) {
799
799
  }
800
800
  //#endregion
801
801
  //#region src/components/Accordion/Accordion.styles.ts
802
- const createStyles$23 = (theme) => {
802
+ const createStyles$24 = (theme) => {
803
803
  const accordion = theme.components.accordion;
804
804
  return StyleSheet.create({
805
805
  root: {
@@ -857,7 +857,7 @@ const createStyles$23 = (theme) => {
857
857
  //#region src/components/Accordion/Content/AccordionContent.tsx
858
858
  function AccordionContent({ children, forceMount = false, hidden = false }) {
859
859
  const { theme } = useTheme();
860
- const styles = createStyles$23(theme);
860
+ const styles = createStyles$24(theme);
861
861
  if (hidden && !forceMount) return null;
862
862
  return /* @__PURE__ */ jsx(View, {
863
863
  style: [styles.content, hidden && styles.contentHidden],
@@ -868,7 +868,7 @@ function AccordionContent({ children, forceMount = false, hidden = false }) {
868
868
  //#region src/components/Accordion/Item/AccordionItem.tsx
869
869
  function AccordionItem({ children }) {
870
870
  const { theme } = useTheme();
871
- const styles = createStyles$23(theme);
871
+ const styles = createStyles$24(theme);
872
872
  return /* @__PURE__ */ jsx(View, {
873
873
  style: styles.item,
874
874
  children
@@ -878,7 +878,7 @@ function AccordionItem({ children }) {
878
878
  //#region src/components/Accordion/Trigger/AccordionTrigger.tsx
879
879
  function AccordionTrigger({ children, disabled = false, expanded = false, onActivate }) {
880
880
  const { theme } = useTheme();
881
- const styles = createStyles$23(theme);
881
+ const styles = createStyles$24(theme);
882
882
  const accordionTokens = theme.components.accordion;
883
883
  return /* @__PURE__ */ jsx(Pressable, {
884
884
  disabled,
@@ -920,7 +920,7 @@ function AccordionRoot(props) {
920
920
  const type = props.type ?? "single";
921
921
  const collapsible = props.type === "multiple" ? false : props.collapsible ?? false;
922
922
  const { theme } = useTheme();
923
- const styles = createStyles$23(theme);
923
+ const styles = createStyles$24(theme);
924
924
  const isControlled = value !== void 0;
925
925
  const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? (type === "multiple" ? [] : ""));
926
926
  const expandedValues = useMemo(() => {
@@ -995,7 +995,7 @@ DropdownContext.displayName = "DropdownContext";
995
995
  //#endregion
996
996
  //#region src/components/Dropdown/Content/DropdownContent.styles.ts
997
997
  const getDropdownBackdropBackgroundColor = (theme, presentation) => presentation === "popover" ? "transparent" : theme.semantic.overlay.backdrop;
998
- const createStyles$22 = (theme) => {
998
+ const createStyles$23 = (theme) => {
999
999
  const canonical = theme.components.dropdown.content;
1000
1000
  const output = resolveComponentTokenPlatformOutputs(theme, canonical);
1001
1001
  const nativeShadow = output.reactNative.shadow;
@@ -1084,7 +1084,7 @@ const webPointerEventsBoxNone$1 = Platform.OS === "web" ? { pointerEvents: "box-
1084
1084
  function DropdownContent({ children, contentStyle, accessibilityLabel }) {
1085
1085
  const { open, color, presentation, positionReady, zIndex, position, searchable, searchValue, searchPlaceholder, searchAccessibilityLabel, requestClose, getOutsidePressProps, onSearchChange, onFloatingLayout } = useDropdownContext();
1086
1086
  const { theme } = useTheme();
1087
- const styles = useThemeStyles(createStyles$22);
1087
+ const styles = useThemeStyles(createStyles$23);
1088
1088
  const colorPalette = theme.components.dropdown[color];
1089
1089
  const isSheet = presentation === "sheet";
1090
1090
  const isPopover = presentation === "popover";
@@ -1590,7 +1590,7 @@ function useNativeFloatingPosition(placement = "top", offset = 8) {
1590
1590
  }
1591
1591
  //#endregion
1592
1592
  //#region src/components/Dropdown/Dropdown.styles.ts
1593
- const createStyles$21 = (theme) => StyleSheet.create({
1593
+ const createStyles$22 = (theme) => StyleSheet.create({
1594
1594
  root: { alignSelf: Platform.select({
1595
1595
  web: "auto",
1596
1596
  default: "flex-start"
@@ -1607,7 +1607,7 @@ const createStyles$21 = (theme) => StyleSheet.create({
1607
1607
  });
1608
1608
  //#endregion
1609
1609
  //#region src/components/Dropdown/Group/DropdownGroup.styles.ts
1610
- const createStyles$20 = (theme) => StyleSheet.create({ groupLabel: {
1610
+ const createStyles$21 = (theme) => StyleSheet.create({ groupLabel: {
1611
1611
  paddingHorizontal: theme.tokens.spacing[4],
1612
1612
  paddingVertical: theme.tokens.spacing[2],
1613
1613
  color: theme.components.dropdown.groupLabel.fg,
@@ -1619,7 +1619,7 @@ const createStyles$20 = (theme) => StyleSheet.create({ groupLabel: {
1619
1619
  //#endregion
1620
1620
  //#region src/components/Dropdown/Group/DropdownGroup.tsx
1621
1621
  function DropdownGroup({ label }) {
1622
- const styles = useThemeStyles(createStyles$20);
1622
+ const styles = useThemeStyles(createStyles$21);
1623
1623
  return /* @__PURE__ */ jsx(Text, {
1624
1624
  accessibilityRole: "header",
1625
1625
  style: styles.groupLabel,
@@ -1634,7 +1634,7 @@ const devWarning = (condition, message) => {
1634
1634
  };
1635
1635
  //#endregion
1636
1636
  //#region src/components/Dropdown/Item/DropdownItem.styles.ts
1637
- const createStyles$19 = (theme) => StyleSheet.create({
1637
+ const createStyles$20 = (theme) => StyleSheet.create({
1638
1638
  item: {
1639
1639
  minWidth: 0,
1640
1640
  minHeight: 44,
@@ -1660,7 +1660,7 @@ const createStyles$19 = (theme) => StyleSheet.create({
1660
1660
  function DropdownItem({ label, value, asChild = false, children, color = "default", icon, disabled = false, textWrap = "truncate", onSelect }) {
1661
1661
  const { color: rootColor, itemStyle, textStyle } = useDropdownContext();
1662
1662
  const { theme } = useTheme();
1663
- const styles = useThemeStyles(createStyles$19);
1663
+ const styles = useThemeStyles(createStyles$20);
1664
1664
  const rootColorPalette = theme.components.dropdown[rootColor];
1665
1665
  const itemColorPalette = color === "default" ? void 0 : theme.components.dropdown[color];
1666
1666
  const renderColoredNode = (node, color) => {
@@ -1728,20 +1728,20 @@ function DropdownItem({ label, value, asChild = false, children, color = "defaul
1728
1728
  DropdownItem.displayName = "DropdownItem";
1729
1729
  //#endregion
1730
1730
  //#region src/components/Dropdown/Separator/DropdownSeparator.styles.ts
1731
- const createStyles$18 = (theme) => StyleSheet.create({ separator: {
1731
+ const createStyles$19 = (theme) => StyleSheet.create({ separator: {
1732
1732
  height: 1,
1733
1733
  backgroundColor: theme.components.dropdown.separator.bg
1734
1734
  } });
1735
1735
  //#endregion
1736
1736
  //#region src/components/Dropdown/Separator/DropdownSeparator.tsx
1737
1737
  function DropdownSeparator() {
1738
- const styles = useThemeStyles(createStyles$18);
1738
+ const styles = useThemeStyles(createStyles$19);
1739
1739
  return /* @__PURE__ */ jsx(View, { style: styles.separator });
1740
1740
  }
1741
1741
  DropdownSeparator.displayName = "DropdownSeparator";
1742
1742
  //#endregion
1743
1743
  //#region src/components/Dropdown/Trigger/DropdownTrigger.styles.ts
1744
- const createStyles$17 = (theme) => StyleSheet.create({
1744
+ const createStyles$18 = (theme) => StyleSheet.create({
1745
1745
  trigger: {
1746
1746
  alignItems: "center",
1747
1747
  justifyContent: "center",
@@ -1830,7 +1830,7 @@ const createStyles$17 = (theme) => StyleSheet.create({
1830
1830
  function DropdownTrigger({ asChild = false, label, trigger, children, icon, arrowIcon, showArrow = true, triggerStyle, triggerRef, accessibilityLabel, accessibilityHint }) {
1831
1831
  const { open, color, disabled, size, toggle } = useDropdownContext();
1832
1832
  const { theme } = useTheme();
1833
- const styles = useThemeStyles(createStyles$17);
1833
+ const styles = useThemeStyles(createStyles$18);
1834
1834
  const colorPalette = theme.components.dropdown[color];
1835
1835
  const textSizeStyle = {
1836
1836
  sm: styles.textSm,
@@ -1952,7 +1952,7 @@ DropdownTrigger.displayName = "DropdownTrigger";
1952
1952
  //#endregion
1953
1953
  //#region src/components/Dropdown/Root/DropdownRoot.tsx
1954
1954
  function DropdownRoot({ children, label = "Menu", trigger, icon, arrowIcon, showArrow = true, open, defaultOpen = false, onOpenChange, presentation = "auto", placement = "bottom-start", offset = 8, closeOnSelect = true, color = "primary", disabled = false, loading = false, loadingText = "Loading actions...", searchable = false, command = false, searchValue, defaultSearchValue = "", searchPlaceholder, onSearch, empty, size = "md", style, triggerStyle, contentStyle, itemStyle, textStyle, accessibilityLabel, accessibilityHint }) {
1955
- const styles = useThemeStyles(createStyles$21);
1955
+ const styles = useThemeStyles(createStyles$22);
1956
1956
  const overlayId = useId();
1957
1957
  const triggerRef = useRef(null);
1958
1958
  const setTriggerRef = useCallback((node) => {
@@ -2154,7 +2154,7 @@ const Dropdown = Object.assign(DropdownRoot, {
2154
2154
  });
2155
2155
  //#endregion
2156
2156
  //#region src/components/Modal/Body/ModalBody.styles.ts
2157
- const createStyles$16 = (theme) => StyleSheet.create({
2157
+ const createStyles$17 = (theme) => StyleSheet.create({
2158
2158
  body: { paddingBottom: theme.components.modal.body.paddingBottom },
2159
2159
  text: {
2160
2160
  color: theme.components.modal.content.fg,
@@ -2181,7 +2181,7 @@ const renderBodyChildren = (children, textStyle) => Children.map(children, (chil
2181
2181
  return cloneElement(child, { style: [textStyle, child.props.style] });
2182
2182
  });
2183
2183
  const ModalBody = ({ children, style }) => {
2184
- const styles = useThemeStyles(createStyles$16);
2184
+ const styles = useThemeStyles(createStyles$17);
2185
2185
  return /* @__PURE__ */ jsx(View, {
2186
2186
  style: [styles.body, style],
2187
2187
  children: renderBodyChildren(children, styles.text)
@@ -2190,7 +2190,7 @@ const ModalBody = ({ children, style }) => {
2190
2190
  ModalBody.displayName = "ModalBody";
2191
2191
  //#endregion
2192
2192
  //#region src/components/Modal/Header/ModalHeader.styles.ts
2193
- const createStyles$15 = (theme) => StyleSheet.create({
2193
+ const createStyles$16 = (theme) => StyleSheet.create({
2194
2194
  header: {
2195
2195
  alignItems: "center",
2196
2196
  flexDirection: "row",
@@ -2240,7 +2240,7 @@ ModalContext.displayName = "ModalContext";
2240
2240
  //#region src/components/Modal/Close/ModalClose.tsx
2241
2241
  const ModalClose = ({ asChild = false, children, accessibilityLabel, style }) => {
2242
2242
  const { theme } = useTheme();
2243
- const styles = useThemeStyles(createStyles$15);
2243
+ const styles = useThemeStyles(createStyles$16);
2244
2244
  const { onClose } = useModalContext();
2245
2245
  if ((asChild || children !== void 0) && isValidElement(children)) return cloneElement(children, {
2246
2246
  accessibilityLabel: children.props.accessibilityLabel ?? accessibilityLabel,
@@ -2266,7 +2266,7 @@ const ModalClose = ({ asChild = false, children, accessibilityLabel, style }) =>
2266
2266
  ModalClose.displayName = "Modal.Close";
2267
2267
  //#endregion
2268
2268
  //#region src/components/Modal/Content/ModalContent.styles.ts
2269
- const createStyles$14 = (theme) => {
2269
+ const createStyles$15 = (theme) => {
2270
2270
  const canonical = theme.components.modal.content;
2271
2271
  const output = resolveComponentTokenPlatformOutputs(theme, canonical);
2272
2272
  const nativeShadow = output.reactNative.shadow;
@@ -2301,7 +2301,7 @@ const createStyles$14 = (theme) => {
2301
2301
  //#endregion
2302
2302
  //#region src/components/Modal/Content/ModalContent.tsx
2303
2303
  const ModalContent = ({ children, style }) => {
2304
- const styles = useThemeStyles(createStyles$14);
2304
+ const styles = useThemeStyles(createStyles$15);
2305
2305
  const { animation, animationProgress, open } = useModalContext();
2306
2306
  const closedTranslateY = open ? animation === "slide" ? 16 : 8 : 4;
2307
2307
  const closedScale = open ? .96 : .98;
@@ -2327,7 +2327,7 @@ const ModalContent = ({ children, style }) => {
2327
2327
  ModalContent.displayName = "ModalContent";
2328
2328
  //#endregion
2329
2329
  //#region src/components/Modal/Footer/ModalFooter.styles.ts
2330
- const createStyles$13 = (theme) => StyleSheet.create({ footer: {
2330
+ const createStyles$14 = (theme) => StyleSheet.create({ footer: {
2331
2331
  flexDirection: "row",
2332
2332
  gap: theme.components.modal.footer.gap,
2333
2333
  justifyContent: "flex-end",
@@ -2336,7 +2336,7 @@ const createStyles$13 = (theme) => StyleSheet.create({ footer: {
2336
2336
  //#endregion
2337
2337
  //#region src/components/Modal/Footer/ModalFooter.tsx
2338
2338
  const ModalFooter = ({ children, style }) => {
2339
- const styles = useThemeStyles(createStyles$13);
2339
+ const styles = useThemeStyles(createStyles$14);
2340
2340
  return /* @__PURE__ */ jsx(View, {
2341
2341
  style: [styles.footer, style],
2342
2342
  children
@@ -2346,7 +2346,7 @@ ModalFooter.displayName = "ModalFooter";
2346
2346
  //#endregion
2347
2347
  //#region src/components/Modal/Header/ModalDescription.tsx
2348
2348
  const ModalDescription = ({ children, style }) => {
2349
- const styles = useThemeStyles(createStyles$15);
2349
+ const styles = useThemeStyles(createStyles$16);
2350
2350
  return /* @__PURE__ */ jsx(Text, {
2351
2351
  style: [styles.description, style],
2352
2352
  children
@@ -2356,7 +2356,7 @@ ModalDescription.displayName = "Modal.Description";
2356
2356
  //#endregion
2357
2357
  //#region src/components/Modal/Header/ModalHeader.tsx
2358
2358
  const ModalHeader = ({ children, style, textStyle }) => {
2359
- const styles = useThemeStyles(createStyles$15);
2359
+ const styles = useThemeStyles(createStyles$16);
2360
2360
  const isPlainTitle = typeof children === "string" || typeof children === "number";
2361
2361
  return /* @__PURE__ */ jsxs(View, {
2362
2362
  style: [styles.header, style],
@@ -2377,7 +2377,7 @@ ModalHeader.displayName = "ModalHeader";
2377
2377
  //#endregion
2378
2378
  //#region src/components/Modal/Header/ModalTitle.tsx
2379
2379
  const ModalTitle = ({ children, style }) => {
2380
- const styles = useThemeStyles(createStyles$15);
2380
+ const styles = useThemeStyles(createStyles$16);
2381
2381
  return /* @__PURE__ */ jsx(Text, {
2382
2382
  accessibilityRole: "header",
2383
2383
  style: [styles.title, style],
@@ -2387,7 +2387,7 @@ const ModalTitle = ({ children, style }) => {
2387
2387
  ModalTitle.displayName = "Modal.Title";
2388
2388
  //#endregion
2389
2389
  //#region src/components/Modal/Modal.styles.ts
2390
- const createStyles$12 = (theme) => StyleSheet.create({
2390
+ const createStyles$13 = (theme) => StyleSheet.create({
2391
2391
  overlay: {
2392
2392
  alignItems: "center",
2393
2393
  flex: 1,
@@ -2402,7 +2402,7 @@ const createStyles$12 = (theme) => StyleSheet.create({
2402
2402
  //#endregion
2403
2403
  //#region src/components/Modal/Overlay/ModalOverlay.tsx
2404
2404
  const ModalOverlay = ({ children, overlayStyle }) => {
2405
- const styles = useThemeStyles(createStyles$12);
2405
+ const styles = useThemeStyles(createStyles$13);
2406
2406
  const { animation, animationProgress, zIndex, onClose, getOutsidePressProps, shouldRender } = useModalContext();
2407
2407
  const backdropStyle = animation === "none" ? void 0 : { opacity: animationProgress };
2408
2408
  return /* @__PURE__ */ jsx(Modal$1, {
@@ -2984,7 +2984,7 @@ function useRadioGroupContext() {
2984
2984
  }
2985
2985
  //#endregion
2986
2986
  //#region src/primitives/Radio/Radio.styles.ts
2987
- const createStyles$11 = (theme) => StyleSheet.create({
2987
+ const createStyles$12 = (theme) => StyleSheet.create({
2988
2988
  root: { alignSelf: Platform.select({
2989
2989
  web: "auto",
2990
2990
  default: "flex-start"
@@ -3043,7 +3043,7 @@ const nativePointerEventsNone$3 = Platform.OS === "web" ? void 0 : { pointerEven
3043
3043
  const webPointerEventsNone$3 = Platform.OS === "web" ? { pointerEvents: "none" } : void 0;
3044
3044
  const Radio = forwardRef(({ value, checked, defaultChecked = false, disabled: disabledProp = false, required: requiredProp = false, size: sizeProp, color: colorProp, onCheckedChange, label, description, icon, error, accessibilityLabel, accessibilityHint, containerStyle, labelStyle, descriptionStyle, errorStyle, style, ...rest }, ref) => {
3045
3045
  const { theme } = useTheme();
3046
- const styles = createStyles$11(theme);
3046
+ const styles = createStyles$12(theme);
3047
3047
  const group = useRadioGroupContext();
3048
3048
  const isInsideGroup = group !== null;
3049
3049
  const [standaloneChecked, setStandaloneChecked] = useControllableState({
@@ -3189,7 +3189,7 @@ RadioGroupItem.displayName = "RadioGroup.Item";
3189
3189
  //#endregion
3190
3190
  //#region src/patterns/FormField/FormField.styles.ts
3191
3191
  const fontWeight$2 = (value) => value;
3192
- const createStyles$10 = (theme) => StyleSheet.create({
3192
+ const createStyles$11 = (theme) => StyleSheet.create({
3193
3193
  root: {
3194
3194
  width: "100%",
3195
3195
  minWidth: 0,
@@ -3312,7 +3312,7 @@ function FormFieldRoot({ id, label, description, error, message, messageTone, me
3312
3312
  const resolvedOptionalText = optionalText ?? parsedChildren.label?.optionalText;
3313
3313
  const resolvedChildren = parsedChildren.hasSlots ? parsedChildren.control?.children ?? parsedChildren.fallbackChildren : children;
3314
3314
  const { theme } = useTheme();
3315
- const styles = useThemeStyles(createStyles$10);
3315
+ const styles = useThemeStyles(createStyles$11);
3316
3316
  const sizeTokens = theme.components.formField.size[size];
3317
3317
  const generatedId = useId();
3318
3318
  const controlId = id ?? generatedId;
@@ -3471,7 +3471,7 @@ const FormField = Object.assign(FormFieldRoot, {
3471
3471
  });
3472
3472
  //#endregion
3473
3473
  //#region src/components/RadioGroup/RadioGroup.styles.ts
3474
- const createStyles$9 = (_theme) => StyleSheet.create({
3474
+ const createStyles$10 = (_theme) => StyleSheet.create({
3475
3475
  items: {
3476
3476
  width: "100%",
3477
3477
  minWidth: 0,
@@ -3487,7 +3487,7 @@ const createStyles$9 = (_theme) => StyleSheet.create({
3487
3487
  //#region src/components/RadioGroup/Root/RadioGroupRoot.tsx
3488
3488
  const RadioGroupRoot = forwardRef(({ value, defaultValue = "", onValueChange, disabled = false, required = false, invalid = false, size = "md", color = "primary", orientation = "vertical", label, description, error, children, style, itemsStyle, labelStyle, descriptionStyle, errorStyle, accessibilityLabel, accessibilityHint, ...rest }, ref) => {
3489
3489
  const { theme } = useTheme();
3490
- const styles = useThemeStyles(createStyles$9);
3490
+ const styles = useThemeStyles(createStyles$10);
3491
3491
  const radioGroupSizeTokens = theme.components.radioGroup.size[size];
3492
3492
  const [selectedValue, setSelectedValue] = useControllableState({
3493
3493
  value,
@@ -5314,7 +5314,7 @@ const useTabs = () => {
5314
5314
  TabsContext.displayName = "TabsContext";
5315
5315
  //#endregion
5316
5316
  //#region src/components/Tabs/Content/TabsContent.styles.ts
5317
- const createStyles$8 = (theme) => StyleSheet.create({
5317
+ const createStyles$9 = (theme) => StyleSheet.create({
5318
5318
  panel: {
5319
5319
  width: "100%",
5320
5320
  minWidth: 0,
@@ -5333,7 +5333,7 @@ const createStyles$8 = (theme) => StyleSheet.create({
5333
5333
  //#endregion
5334
5334
  //#region src/components/Tabs/Content/TabsContent.tsx
5335
5335
  const TabsContent = ({ value, children, forceMount = false, style }) => {
5336
- const styles = useThemeStyles(createStyles$8);
5336
+ const styles = useThemeStyles(createStyles$9);
5337
5337
  const { value: selectedValue, orientation, keepMounted, lazyMount } = useTabs();
5338
5338
  const isActive = selectedValue === value;
5339
5339
  const [hasMounted, setHasMounted] = useState(isActive);
@@ -5571,7 +5571,7 @@ const TabsIndicator = ({ children, style }) => {
5571
5571
  TabsIndicator.displayName = "Tabs.Indicator";
5572
5572
  //#endregion
5573
5573
  //#region src/components/Tabs/List/TabsList.styles.ts
5574
- const createStyles$7 = (theme) => StyleSheet.create({
5574
+ const createStyles$8 = (theme) => StyleSheet.create({
5575
5575
  list: {
5576
5576
  position: "relative",
5577
5577
  flexDirection: "row",
@@ -5625,7 +5625,7 @@ const createStyles$7 = (theme) => StyleSheet.create({
5625
5625
  //#endregion
5626
5626
  //#region src/components/Tabs/List/TabsList.tsx
5627
5627
  const TabsList = ({ children, scrollable: scrollableProp, style }) => {
5628
- const styles = useThemeStyles(createStyles$7);
5628
+ const styles = useThemeStyles(createStyles$8);
5629
5629
  const { mode, orientation, variant } = useTabs();
5630
5630
  const scrollable = scrollableProp ?? false;
5631
5631
  const listStyle = [
@@ -5655,7 +5655,7 @@ TabsList.displayName = "TabsList";
5655
5655
  //#endregion
5656
5656
  //#region src/components/Tabs/Trigger/TabsTrigger.styles.ts
5657
5657
  const fontWeight$1 = (value) => value;
5658
- const createStyles$6 = (theme) => StyleSheet.create({
5658
+ const createStyles$7 = (theme) => StyleSheet.create({
5659
5659
  tab: {
5660
5660
  minHeight: 36,
5661
5661
  minWidth: 44,
@@ -5840,7 +5840,7 @@ const getTriggerStyle = ({ styles, isSm, isLg, isOnlyIcon, isVertical, isPills,
5840
5840
  //#endregion
5841
5841
  //#region src/components/Tabs/Trigger/TabsBadge.tsx
5842
5842
  const TabsBadge = ({ children, style }) => {
5843
- const styles = useThemeStyles(createStyles$6);
5843
+ const styles = useThemeStyles(createStyles$7);
5844
5844
  const { color } = useTabs();
5845
5845
  const { theme } = useTheme();
5846
5846
  const palette = theme.components.tabs[color];
@@ -5860,7 +5860,7 @@ TabsBadge.displayName = "Tabs.Badge";
5860
5860
  //#endregion
5861
5861
  //#region src/components/Tabs/Trigger/TabsIcon.tsx
5862
5862
  const TabsIcon = ({ children, style }) => {
5863
- const styles = useThemeStyles(createStyles$6);
5863
+ const styles = useThemeStyles(createStyles$7);
5864
5864
  return /* @__PURE__ */ jsx(View, {
5865
5865
  style: [styles.tabIcon, style],
5866
5866
  children
@@ -5871,7 +5871,7 @@ TabsIcon.displayName = "Tabs.Icon";
5871
5871
  //#region src/components/Tabs/Trigger/TabsTrigger.tsx
5872
5872
  const TabsTrigger = ({ value, children, asChild = false, icon, badge, description, disabled, style, textStyle }) => {
5873
5873
  const { theme } = useTheme();
5874
- const styles = useThemeStyles(createStyles$6);
5874
+ const styles = useThemeStyles(createStyles$7);
5875
5875
  const { value: selectedValue, variant, color, size, mode, orientation, disabled: rootDisabled, setValue, registerTrigger, registerTriggerLayout } = useTabs();
5876
5876
  const isDisabled = rootDisabled || Boolean(disabled);
5877
5877
  const isActive = selectedValue === value;
@@ -6037,7 +6037,7 @@ const TabsTrigger = ({ value, children, asChild = false, icon, badge, descriptio
6037
6037
  TabsTrigger.displayName = "Tabs.Trigger";
6038
6038
  //#endregion
6039
6039
  //#region src/components/Tabs/Tabs.styles.ts
6040
- const createStyles$5 = (theme) => StyleSheet.create({
6040
+ const createStyles$6 = (theme) => StyleSheet.create({
6041
6041
  root: {
6042
6042
  width: "100%",
6043
6043
  minWidth: 0
@@ -6053,7 +6053,7 @@ const createStyles$5 = (theme) => StyleSheet.create({
6053
6053
  //#endregion
6054
6054
  //#region src/components/Tabs/Root/TabsRoot.tsx
6055
6055
  const TabsRoot = ({ children, value: controlledValue, defaultValue, onValueChange, orientation = "horizontal", mode = "tabs", variant = "line", color = "primary", size = "md", keepMounted = false, lazyMount = false, disabled = false, style }) => {
6056
- const styles = useThemeStyles(createStyles$5);
6056
+ const styles = useThemeStyles(createStyles$6);
6057
6057
  const isControlled = controlledValue !== void 0;
6058
6058
  const [version, setVersion] = useState(0);
6059
6059
  const [indicatorVersion, setIndicatorVersion] = useState(0);
@@ -6214,7 +6214,7 @@ function TooltipArrow() {
6214
6214
  }
6215
6215
  //#endregion
6216
6216
  //#region src/components/Tooltip/Tooltip.styles.ts
6217
- const createStyles$4 = (theme) => {
6217
+ const createStyles$5 = (theme) => {
6218
6218
  const canonical = theme.components.tooltip.content;
6219
6219
  const output = resolveComponentTokenPlatformOutputs(theme, canonical);
6220
6220
  const nativeShadow = output.reactNative.shadow;
@@ -6260,7 +6260,7 @@ const createStyles$4 = (theme) => {
6260
6260
  //#endregion
6261
6261
  //#region src/components/Tooltip/Content/TooltipContent.tsx
6262
6262
  const TooltipContent = ({ children, forceMount = false, withArrow = false, style, textStyle }) => {
6263
- const styles = useThemeStyles(createStyles$4);
6263
+ const styles = useThemeStyles(createStyles$5);
6264
6264
  const tooltip = useTooltipContext();
6265
6265
  const visible = tooltip.open && !tooltip.disabled;
6266
6266
  if (!forceMount && !visible) return null;
@@ -6529,7 +6529,7 @@ Tooltip.displayName = "Tooltip";
6529
6529
  //#endregion
6530
6530
  //#region src/primitives/Button/Button.styles.ts
6531
6531
  const fontWeight = (value) => value;
6532
- const createStyles$3 = (theme) => StyleSheet.create({
6532
+ const createStyles$4 = (theme) => StyleSheet.create({
6533
6533
  button: {
6534
6534
  flexDirection: "row",
6535
6535
  alignItems: "center",
@@ -6597,7 +6597,7 @@ const buttonSizeMap = {
6597
6597
  };
6598
6598
  function Button({ children, color = "primary", appearance = "solid", shape = "pill", disabled = false, loading = false, loadingText, onPress, onFocus, onBlur, onHoverIn, onHoverOut, size = "md", iconStart, iconEnd, badge, shortcut, fullWidth = false, iconOnly: iconOnlyProp = false, style, textStyle, accessibilityLabel, iconSize, testID, ...props }) {
6599
6599
  const { theme } = useTheme();
6600
- const styles = useThemeStyles(createStyles$3);
6600
+ const styles = useThemeStyles(createStyles$4);
6601
6601
  const controlSize = controlSizes[size];
6602
6602
  const buttonSize = buttonSizeMap[size];
6603
6603
  const radius = shape === "square" ? theme.tokens.radius.sm : shape === "rounded" ? theme.tokens.radius.md : theme.tokens.radius.full;
@@ -6731,7 +6731,7 @@ function Button({ children, color = "primary", appearance = "solid", shape = "pi
6731
6731
  }
6732
6732
  //#endregion
6733
6733
  //#region src/primitives/Checkbox/Checkbox.styles.ts
6734
- const createStyles$2 = (theme) => StyleSheet.create({
6734
+ const createStyles$3 = (theme) => StyleSheet.create({
6735
6735
  container: { gap: theme.tokens.spacing[2] },
6736
6736
  wrapper: {
6737
6737
  flexDirection: "row",
@@ -6845,7 +6845,7 @@ const iconSizeBySize = {
6845
6845
  };
6846
6846
  const Checkbox = forwardRef(({ label, description, icon, indeterminateIcon, checked, defaultChecked = false, disabled = false, required = false, indeterminate = false, size = "md", color = "primary", labelPosition = "end", onCheckedChange, error, style, accessibilityLabel, accessibilityHint, ...PressableProps }, ref) => {
6847
6847
  const { theme } = useTheme();
6848
- const styles = useThemeStyles(createStyles$2);
6848
+ const styles = useThemeStyles(createStyles$3);
6849
6849
  const checkboxColor = theme.components.checkbox[color];
6850
6850
  const boxSizeStyle = {
6851
6851
  sm: styles.boxSm,
@@ -6963,7 +6963,7 @@ Checkbox.displayName = "Checkbox";
6963
6963
  //#region src/primitives/Input/Input.styles.ts
6964
6964
  const getDisabledPlaceholderTextColor = (theme) => theme.components.input.disabled.placeholder;
6965
6965
  const resolveRingColor = (ring) => typeof ring === "string" ? ring : ring.color;
6966
- const createStyles$1 = (theme) => StyleSheet.create({
6966
+ const createStyles$2 = (theme) => StyleSheet.create({
6967
6967
  inputWrapper: {
6968
6968
  position: "relative",
6969
6969
  width: "100%",
@@ -7154,7 +7154,7 @@ const nativePointerEventsNone = Platform.OS === "web" ? void 0 : { pointerEvents
7154
7154
  const webPointerEventsNone = Platform.OS === "web" ? { pointerEvents: "none" } : void 0;
7155
7155
  const Input = forwardRef(({ label, description, value, defaultValue, onValueChange, placeholder, size, error, invalid = false, disabled = false, required = false, loading = false, readOnly = false, type = "text", startIcon, endIcon, startIconTone = "default", endIconTone = "default", clearIcon, clearIconTone = "danger", iconSize, containerStyle, inputStyle, keyboardType, secureTextEntry, autoCapitalize, autoCorrect, onBlur, onFocus, accessibilityLabel, accessibilityHint, testID, autoFocus, maxLength, clearable, onClear, color = "primary", variant = "outline", revealPassword = false, showCounter: _showCounter, mask, format, parse, ...props }, ref) => {
7156
7156
  const { theme } = useTheme();
7157
- const styles = useThemeStyles(createStyles$1);
7157
+ const styles = useThemeStyles(createStyles$2);
7158
7158
  const field = useFormFieldContext();
7159
7159
  const hasOwnField = Boolean(label || description || error);
7160
7160
  const [isFocused, setIsFocused] = useState(false);
@@ -7344,7 +7344,7 @@ const Input = forwardRef(({ label, description, value, defaultValue, onValueChan
7344
7344
  Input.displayName = "Input";
7345
7345
  //#endregion
7346
7346
  //#region src/primitives/Switch/Switch.styles.ts
7347
- const createStyles = (theme) => StyleSheet.create({
7347
+ const createStyles$1 = (theme) => StyleSheet.create({
7348
7348
  root: {
7349
7349
  width: theme.components.switch.geometry.trackWidth,
7350
7350
  height: theme.components.switch.geometry.trackHeight,
@@ -7386,7 +7386,7 @@ const createStyles = (theme) => StyleSheet.create({
7386
7386
  //#endregion
7387
7387
  //#region src/primitives/Switch/Switch.tsx
7388
7388
  function Switch({ accessibilityLabel = "Switch", checked, defaultChecked = false, disabled = false, required = false, invalid = false, onCheckedChange }) {
7389
- const styles = useThemeStyles(createStyles);
7389
+ const styles = useThemeStyles(createStyles$1);
7390
7390
  const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked);
7391
7391
  const isControlled = checked !== void 0;
7392
7392
  const resolvedChecked = isControlled ? checked : uncontrolledChecked;
@@ -7422,4 +7422,152 @@ function Switch({ accessibilityLabel = "Switch", checked, defaultChecked = false
7422
7422
  });
7423
7423
  }
7424
7424
  //#endregion
7425
- export { Accordion, Button, Checkbox, Dropdown, FormField, Input, Modal, Popover, Portal, PortalProvider, Radio, RadioGroup, Select, Switch, Tabs, ThemeProvider, Tooltip, nativeThemes, useTheme };
7425
+ //#region src/primitives/Textarea/Textarea.styles.ts
7426
+ const createStyles = (theme) => StyleSheet.create({
7427
+ textarea: {
7428
+ width: "100%",
7429
+ minWidth: 0,
7430
+ alignSelf: "stretch",
7431
+ color: theme.components.textarea.default.fg,
7432
+ fontFamily: theme.tokens.typography.family.regular,
7433
+ backgroundColor: theme.components.textarea.default.bg,
7434
+ borderColor: theme.components.textarea.default.border,
7435
+ borderRadius: theme.tokens.radius.md,
7436
+ borderWidth: 1,
7437
+ textAlignVertical: "top"
7438
+ },
7439
+ sm: {
7440
+ paddingHorizontal: theme.tokens.spacing[3],
7441
+ paddingVertical: theme.tokens.spacing[2]
7442
+ },
7443
+ md: {
7444
+ paddingHorizontal: theme.tokens.spacing[4],
7445
+ paddingVertical: theme.tokens.spacing[3]
7446
+ },
7447
+ lg: {
7448
+ paddingHorizontal: theme.tokens.spacing[5],
7449
+ paddingVertical: theme.tokens.spacing[4]
7450
+ },
7451
+ focused: {
7452
+ color: theme.components.textarea.hover.fg,
7453
+ backgroundColor: theme.components.textarea.hover.bg,
7454
+ borderColor: theme.components.textarea.hover.border,
7455
+ ...Platform.select({
7456
+ web: { boxShadow: `0 0 0 3px ${theme.components.textarea.focusRing}` },
7457
+ default: {
7458
+ shadowColor: theme.components.textarea.focusRing,
7459
+ shadowOffset: {
7460
+ width: 0,
7461
+ height: 0
7462
+ },
7463
+ shadowOpacity: .18,
7464
+ shadowRadius: 6,
7465
+ elevation: 1
7466
+ }
7467
+ })
7468
+ },
7469
+ invalid: { borderColor: theme.components.textarea.error.border },
7470
+ invalidFocused: {
7471
+ borderColor: theme.components.textarea.error.border,
7472
+ ...Platform.select({
7473
+ web: { boxShadow: `0 0 0 3px ${theme.components.textarea.error.ring}` },
7474
+ default: {
7475
+ shadowColor: theme.components.textarea.error.ring,
7476
+ shadowOffset: {
7477
+ width: 0,
7478
+ height: 0
7479
+ },
7480
+ shadowOpacity: .2,
7481
+ shadowRadius: 6,
7482
+ elevation: 1
7483
+ }
7484
+ })
7485
+ },
7486
+ disabled: {
7487
+ color: theme.components.textarea.disabled.fg,
7488
+ backgroundColor: theme.components.textarea.disabled.bg,
7489
+ borderColor: theme.components.textarea.disabled.border
7490
+ }
7491
+ });
7492
+ //#endregion
7493
+ //#region src/primitives/Textarea/Textarea.tsx
7494
+ const Textarea = forwardRef(({ label, description, error, placeholder, value, defaultValue, size, disabled = false, required = false, invalid = false, containerStyle, inputStyle, numberOfLines = 3, onValueChange, onFocus, onBlur, accessibilityLabel, accessibilityHint, accessibilityState, ...props }, ref) => {
7495
+ const { theme } = useTheme();
7496
+ const styles = useThemeStyles(createStyles);
7497
+ const field = useFormFieldContext();
7498
+ const hasOwnField = Boolean(label || description || error);
7499
+ const [isFocused, setIsFocused] = useState(false);
7500
+ const resolvedSize = size ?? field?.size ?? "md";
7501
+ const controlSize = controlSizes[resolvedSize];
7502
+ const isInvalid = invalid || Boolean(error) || !hasOwnField && Boolean(field?.invalid);
7503
+ const isDisabled = disabled || !hasOwnField && Boolean(field?.disabled);
7504
+ const isRequired = required || !hasOwnField && Boolean(field?.required);
7505
+ const resolvedNumberOfLines = Math.max(1, numberOfLines);
7506
+ const resolvedAccessibilityHint = [
7507
+ accessibilityHint,
7508
+ hasOwnField && typeof description === "string" ? description : void 0,
7509
+ isRequired ? "Required." : void 0,
7510
+ isInvalid ? "Invalid." : void 0,
7511
+ hasOwnField && typeof error === "string" ? error : void 0
7512
+ ].filter((item) => Boolean(item)).join(" ");
7513
+ const handleFocus = (event) => {
7514
+ setIsFocused(true);
7515
+ onFocus?.(event);
7516
+ };
7517
+ const handleBlur = (event) => {
7518
+ setIsFocused(false);
7519
+ onBlur?.(event);
7520
+ };
7521
+ const control = /* @__PURE__ */ jsx(TextInput, {
7522
+ ...props,
7523
+ ref,
7524
+ nativeID: props.nativeID ?? (!hasOwnField ? field?.controlId : void 0),
7525
+ value,
7526
+ defaultValue,
7527
+ editable: !isDisabled,
7528
+ multiline: true,
7529
+ numberOfLines: resolvedNumberOfLines,
7530
+ placeholder,
7531
+ placeholderTextColor: isDisabled ? theme.components.textarea.disabled.fg : theme.semantic.text.secondary,
7532
+ accessibilityLabel: accessibilityLabel ?? label,
7533
+ accessibilityHint: resolvedAccessibilityHint || void 0,
7534
+ accessibilityState: {
7535
+ ...accessibilityState,
7536
+ disabled: isDisabled
7537
+ },
7538
+ accessibilityLabelledBy: !hasOwnField ? field?.labelId : void 0,
7539
+ "aria-describedby": !hasOwnField ? field?.ariaDescribedBy : void 0,
7540
+ onChangeText: onValueChange,
7541
+ onFocus: handleFocus,
7542
+ onBlur: handleBlur,
7543
+ style: [
7544
+ styles.textarea,
7545
+ styles[resolvedSize],
7546
+ {
7547
+ minHeight: controlSize.lineHeight * resolvedNumberOfLines + theme.tokens.spacing[6],
7548
+ fontSize: controlSize.fontSize,
7549
+ lineHeight: controlSize.lineHeight
7550
+ },
7551
+ inputStyle,
7552
+ isFocused && !isDisabled && styles.focused,
7553
+ isInvalid && styles.invalid,
7554
+ isFocused && isInvalid && !isDisabled && styles.invalidFocused,
7555
+ isDisabled && styles.disabled
7556
+ ]
7557
+ });
7558
+ if (!hasOwnField && field) return control;
7559
+ return /* @__PURE__ */ jsx(FormField, {
7560
+ label,
7561
+ description,
7562
+ error,
7563
+ required: isRequired,
7564
+ disabled: isDisabled,
7565
+ invalid: isInvalid,
7566
+ size: resolvedSize,
7567
+ style: containerStyle,
7568
+ children: control
7569
+ });
7570
+ });
7571
+ Textarea.displayName = "Textarea";
7572
+ //#endregion
7573
+ export { Accordion, Button, Checkbox, Dropdown, FormField, Input, Modal, Popover, Portal, PortalProvider, Radio, RadioGroup, Select, Switch, Tabs, Textarea, ThemeProvider, Tooltip, nativeThemes, useTheme };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellira-ui/react-native",
3
- "version": "2.117.2",
3
+ "version": "2.118.1",
4
4
  "description": "React Native components for Vellira Design System",
5
5
  "keywords": [
6
6
  "vellira",