@idealyst/components 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/package.json +8 -3
  2. package/src/Accordion/Accordion.native.tsx +15 -9
  3. package/src/Accordion/Accordion.styles.tsx +193 -168
  4. package/src/Accordion/Accordion.web.tsx +12 -7
  5. package/src/ActivityIndicator/ActivityIndicator.native.tsx +3 -2
  6. package/src/ActivityIndicator/ActivityIndicator.styles.tsx +22 -11
  7. package/src/ActivityIndicator/ActivityIndicator.web.tsx +2 -2
  8. package/src/Alert/Alert.native.tsx +11 -10
  9. package/src/Alert/Alert.styles.tsx +162 -253
  10. package/src/Alert/Alert.web.tsx +6 -10
  11. package/src/Avatar/Avatar.native.tsx +5 -2
  12. package/src/Avatar/Avatar.styles.tsx +48 -18
  13. package/src/Avatar/Avatar.web.tsx +2 -2
  14. package/src/Badge/Badge.native.tsx +2 -2
  15. package/src/Badge/Badge.styles.tsx +37 -16
  16. package/src/Badge/Badge.web.tsx +6 -6
  17. package/src/Breadcrumb/Breadcrumb.native.tsx +12 -5
  18. package/src/Breadcrumb/Breadcrumb.styles.tsx +59 -58
  19. package/src/Breadcrumb/Breadcrumb.web.tsx +13 -6
  20. package/src/Button/Button.native.tsx +39 -14
  21. package/src/Button/Button.styles.tsx +106 -208
  22. package/src/Button/Button.web.tsx +10 -8
  23. package/src/Card/Card.native.tsx +14 -6
  24. package/src/Card/Card.styles.tsx +64 -62
  25. package/src/Card/Card.web.tsx +5 -4
  26. package/src/Checkbox/Checkbox.native.tsx +7 -3
  27. package/src/Checkbox/Checkbox.styles.tsx +49 -25
  28. package/src/Checkbox/Checkbox.web.tsx +3 -3
  29. package/src/Chip/Chip.native.tsx +5 -5
  30. package/src/Chip/Chip.styles.tsx +71 -21
  31. package/src/Chip/Chip.web.tsx +5 -5
  32. package/src/Dialog/Dialog.native.tsx +10 -4
  33. package/src/Dialog/Dialog.styles.tsx +130 -90
  34. package/src/Dialog/Dialog.web.tsx +4 -4
  35. package/src/Divider/Divider.native.tsx +29 -42
  36. package/src/Divider/Divider.styles.tsx +138 -242
  37. package/src/Divider/Divider.web.tsx +17 -14
  38. package/src/Icon/Icon.native.tsx +11 -3
  39. package/src/Icon/Icon.styles.tsx +10 -4
  40. package/src/Image/Image.styles.tsx +53 -37
  41. package/src/Input/Input.native.tsx +6 -7
  42. package/src/Input/Input.styles.tsx +194 -174
  43. package/src/Input/Input.web.tsx +5 -8
  44. package/src/Link/Link.native.tsx +4 -1
  45. package/src/List/List.styles.tsx +79 -105
  46. package/src/List/ListItem.native.tsx +5 -3
  47. package/src/List/ListItem.web.tsx +4 -3
  48. package/src/Menu/Menu.native.tsx +1 -1
  49. package/src/Menu/Menu.styles.tsx +53 -37
  50. package/src/Menu/Menu.web.tsx +2 -2
  51. package/src/Menu/MenuItem.native.tsx +5 -3
  52. package/src/Menu/MenuItem.styles.tsx +68 -69
  53. package/src/Menu/MenuItem.web.tsx +16 -3
  54. package/src/Popover/Popover.native.tsx +1 -1
  55. package/src/Popover/Popover.styles.tsx +40 -29
  56. package/src/Popover/Popover.web.tsx +1 -1
  57. package/src/Pressable/Pressable.native.tsx +3 -1
  58. package/src/Pressable/Pressable.styles.tsx +20 -13
  59. package/src/Pressable/Pressable.web.tsx +1 -1
  60. package/src/Progress/Progress.native.tsx +15 -6
  61. package/src/Progress/Progress.styles.tsx +125 -85
  62. package/src/Progress/Progress.web.tsx +10 -9
  63. package/src/RadioButton/RadioButton.native.tsx +8 -3
  64. package/src/RadioButton/RadioButton.styles.tsx +44 -37
  65. package/src/RadioButton/RadioButton.web.tsx +3 -3
  66. package/src/SVGImage/SVGImage.styles.tsx +28 -16
  67. package/src/Screen/Screen.native.tsx +23 -13
  68. package/src/Screen/Screen.styles.tsx +57 -46
  69. package/src/Screen/Screen.web.tsx +1 -1
  70. package/src/Select/Select.native.tsx +11 -5
  71. package/src/Select/Select.styles.tsx +72 -52
  72. package/src/Select/Select.web.tsx +5 -5
  73. package/src/Skeleton/Skeleton.styles.tsx +26 -14
  74. package/src/Slider/Slider.native.tsx +9 -5
  75. package/src/Slider/Slider.styles.tsx +59 -48
  76. package/src/Slider/Slider.web.tsx +5 -5
  77. package/src/Switch/Switch.native.tsx +6 -2
  78. package/src/Switch/Switch.styles.tsx +46 -19
  79. package/src/Switch/Switch.web.tsx +4 -4
  80. package/src/TabBar/TabBar.native.tsx +23 -31
  81. package/src/TabBar/TabBar.styles.tsx +215 -371
  82. package/src/TabBar/TabBar.web.tsx +21 -33
  83. package/src/Table/Table.native.tsx +1 -1
  84. package/src/Table/Table.styles.tsx +11 -4
  85. package/src/Table/Table.web.tsx +1 -1
  86. package/src/Text/Text.native.tsx +3 -4
  87. package/src/Text/Text.styles.tsx +7 -1
  88. package/src/Text/Text.web.tsx +1 -1
  89. package/src/TextArea/TextArea.styles.tsx +90 -58
  90. package/src/Tooltip/Tooltip.native.tsx +2 -2
  91. package/src/Tooltip/Tooltip.styles.tsx +21 -12
  92. package/src/Tooltip/Tooltip.web.tsx +2 -2
  93. package/src/Video/Video.styles.tsx +39 -23
  94. package/src/View/View.native.tsx +4 -2
  95. package/src/View/View.styles.tsx +33 -22
  96. package/src/View/View.web.tsx +13 -2
  97. package/src/extensions/applyExtension.ts +210 -0
  98. package/src/extensions/extendComponent.ts +377 -0
  99. package/src/extensions/index.ts +102 -0
  100. package/src/extensions/types.ts +497 -0
  101. package/src/globals.ts +16 -0
  102. package/src/index.native.ts +4 -0
  103. package/src/index.ts +28 -0
  104. package/src/utils/deepMerge.ts +54 -2
@@ -14,9 +14,31 @@ function isPlainObject(value: unknown): value is Record<string, any> {
14
14
  * Deep merge two objects together, with the second object taking priority.
15
15
  * Arrays and non-plain objects are replaced rather than merged.
16
16
  *
17
+ * Special handling:
18
+ * - Setting a value to `undefined` removes that key from the result
19
+ * - Nested objects (like `_web`, `variants`) are recursively merged
20
+ *
17
21
  * @param target - The base object
18
22
  * @param source - The object to merge in (takes priority)
19
23
  * @returns A new merged object
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // Basic merge
28
+ * deepMerge({ a: 1, b: 2 }, { b: 3, c: 4 })
29
+ * // => { a: 1, b: 3, c: 4 }
30
+ *
31
+ * // Nested _web merge
32
+ * deepMerge(
33
+ * { padding: 10, _web: { cursor: 'pointer', display: 'flex' } },
34
+ * { _web: { cursor: 'default' } }
35
+ * )
36
+ * // => { padding: 10, _web: { cursor: 'default', display: 'flex' } }
37
+ *
38
+ * // Remove property with undefined
39
+ * deepMerge({ a: 1, b: 2 }, { b: undefined })
40
+ * // => { a: 1 }
41
+ * ```
20
42
  */
21
43
  export function deepMerge<T extends Record<string, any>, S extends Record<string, any>>(
22
44
  target: T,
@@ -29,11 +51,15 @@ export function deepMerge<T extends Record<string, any>, S extends Record<string
29
51
  const sourceValue = source[key]
30
52
  const targetValue = result[key]
31
53
 
54
+ // If source value is undefined, remove the key entirely
55
+ if (sourceValue === undefined) {
56
+ delete result[key]
57
+ }
32
58
  // If both values are plain objects, merge them recursively
33
- if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {
59
+ else if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {
34
60
  result[key] = deepMerge(targetValue, sourceValue)
35
61
  } else {
36
- // Otherwise, source value takes priority (including arrays, primitives, null, undefined)
62
+ // Otherwise, source value takes priority (including arrays, primitives, null)
37
63
  result[key] = sourceValue
38
64
  }
39
65
  }
@@ -41,3 +67,29 @@ export function deepMerge<T extends Record<string, any>, S extends Record<string
41
67
 
42
68
  return result as T & S
43
69
  }
70
+
71
+ /**
72
+ * Deep merge multiple objects together, with later objects taking priority.
73
+ * This is useful for merging multiple extensions in order.
74
+ *
75
+ * @param objects - Objects to merge (later ones have higher precedence)
76
+ * @returns A new merged object
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * deepMergeAll(
81
+ * { a: 1, b: 2 }, // base
82
+ * { b: 3, c: 4 }, // first extension
83
+ * { c: 5, d: 6 } // second extension (highest precedence)
84
+ * )
85
+ * // => { a: 1, b: 3, c: 5, d: 6 }
86
+ * ```
87
+ */
88
+ export function deepMergeAll<T extends Record<string, any>>(
89
+ ...objects: (T | undefined | null)[]
90
+ ): T {
91
+ return objects.reduce<T>((acc, obj) => {
92
+ if (obj == null) return acc
93
+ return deepMerge(acc, obj) as T
94
+ }, {} as T)
95
+ }