@coopdigital/react 1.4.1 → 1.5.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.
Files changed (205) hide show
  1. package/dist/components/AlertBanner/AlertBanner.d.ts +12 -2
  2. package/dist/components/AlertBanner/AlertBanner.js +3 -2
  3. package/dist/components/Author/Author.d.ts +7 -1
  4. package/dist/components/Author/Author.js +1 -0
  5. package/dist/components/Button/Button.d.ts +7 -1
  6. package/dist/components/Button/Button.js +1 -1
  7. package/dist/components/Card/Card.d.ts +41 -7
  8. package/dist/components/Card/Card.js +7 -6
  9. package/dist/components/Checkbox/Checkbox.d.ts +6 -4
  10. package/dist/components/Checkbox/Checkbox.js +8 -6
  11. package/dist/components/DatePicker/DatePicker.d.ts +8 -3
  12. package/dist/components/DatePicker/DatePicker.js +11 -12
  13. package/dist/components/Expandable/Expandable.d.ts +21 -5
  14. package/dist/components/Expandable/Expandable.js +4 -3
  15. package/dist/components/Field/Field.context.d.ts +14 -0
  16. package/dist/components/Field/Field.context.js +13 -0
  17. package/dist/components/Field/Field.d.ts +30 -8
  18. package/dist/components/Field/Field.js +32 -34
  19. package/dist/components/Field/index.js +1 -0
  20. package/dist/components/FieldMarkers/Label.d.ts +1 -1
  21. package/dist/components/FieldMarkers/Label.js +4 -0
  22. package/dist/components/FieldMarkers/Legend.d.ts +1 -1
  23. package/dist/components/Fieldset/Fieldset.d.ts +36 -8
  24. package/dist/components/Fieldset/Fieldset.js +6 -5
  25. package/dist/components/Flourish/Flourish.d.ts +7 -1
  26. package/dist/components/Flourish/Flourish.js +1 -0
  27. package/dist/components/Form/Form.d.ts +7 -1
  28. package/dist/components/Form/Form.js +1 -0
  29. package/dist/components/Image/Image.d.ts +7 -1
  30. package/dist/components/Image/Image.js +1 -0
  31. package/dist/components/Pill/Pill.d.ts +13 -3
  32. package/dist/components/Pill/Pill.js +3 -2
  33. package/dist/components/Popover/Popover.d.ts +33 -5
  34. package/dist/components/Popover/Popover.js +6 -5
  35. package/dist/components/Popover/index.js +1 -0
  36. package/dist/components/Radio/Radio.d.ts +6 -4
  37. package/dist/components/Radio/Radio.js +8 -6
  38. package/dist/components/RootSVG/RootSVG.d.ts +7 -1
  39. package/dist/components/RootSVG/RootSVG.js +1 -0
  40. package/dist/components/Searchbox/Searchbox.context.d.ts +13 -0
  41. package/dist/components/Searchbox/Searchbox.context.js +11 -0
  42. package/dist/components/Searchbox/Searchbox.d.ts +16 -12
  43. package/dist/components/Searchbox/Searchbox.js +25 -29
  44. package/dist/components/Select/Select.d.ts +18 -5
  45. package/dist/components/Select/Select.js +8 -9
  46. package/dist/components/Signpost/Signpost.d.ts +7 -1
  47. package/dist/components/Signpost/Signpost.js +1 -0
  48. package/dist/components/SkipNav/SkipNav.d.ts +7 -1
  49. package/dist/components/SkipNav/SkipNav.js +1 -0
  50. package/dist/components/Squircle/Squircle.d.ts +7 -1
  51. package/dist/components/Squircle/Squircle.js +1 -0
  52. package/dist/components/Tag/Tag.d.ts +7 -1
  53. package/dist/components/Tag/Tag.js +1 -0
  54. package/dist/components/TextInput/TextInput.d.ts +4 -3
  55. package/dist/components/TextInput/TextInput.js +5 -6
  56. package/dist/components/Textarea/Textarea.d.ts +4 -3
  57. package/dist/components/Textarea/Textarea.js +4 -7
  58. package/dist/components/ValidationSummary/ValidationSummary.d.ts +26 -4
  59. package/dist/components/ValidationSummary/ValidationSummary.js +7 -6
  60. package/dist/components/icons/AccountCircleFilledIcon.d.ts +1 -1
  61. package/dist/components/icons/AccountCircleIcon.d.ts +1 -1
  62. package/dist/components/icons/AccountFilledIcon.d.ts +1 -1
  63. package/dist/components/icons/AccountIcon.d.ts +1 -1
  64. package/dist/components/icons/AddIcon.d.ts +1 -1
  65. package/dist/components/icons/AppsFilledIcon.d.ts +1 -1
  66. package/dist/components/icons/AppsIcon.d.ts +1 -1
  67. package/dist/components/icons/ArrowDownIcon.d.ts +1 -1
  68. package/dist/components/icons/ArrowLeftIcon.d.ts +1 -1
  69. package/dist/components/icons/ArrowRightIcon.d.ts +1 -1
  70. package/dist/components/icons/ArrowUpIcon.d.ts +1 -1
  71. package/dist/components/icons/BackspaceFilledIcon.d.ts +1 -1
  72. package/dist/components/icons/BackspaceIcon.d.ts +1 -1
  73. package/dist/components/icons/BasketFilledIcon.d.ts +1 -1
  74. package/dist/components/icons/BasketIcon.d.ts +1 -1
  75. package/dist/components/icons/BellFilledIcon.d.ts +1 -1
  76. package/dist/components/icons/BellIcon.d.ts +1 -1
  77. package/dist/components/icons/BroomIcon.d.ts +1 -1
  78. package/dist/components/icons/CalendarFilledIcon.d.ts +1 -1
  79. package/dist/components/icons/CalendarIcon.d.ts +1 -1
  80. package/dist/components/icons/CashFilledIcon.d.ts +1 -1
  81. package/dist/components/icons/CashIcon.d.ts +1 -1
  82. package/dist/components/icons/ChevronDownIcon.d.ts +1 -1
  83. package/dist/components/icons/ChevronLeftIcon.d.ts +1 -1
  84. package/dist/components/icons/ChevronRightIcon.d.ts +1 -1
  85. package/dist/components/icons/ChevronUpIcon.d.ts +1 -1
  86. package/dist/components/icons/CircleBurgerFilledIcon.d.ts +1 -1
  87. package/dist/components/icons/CircleBurgerIcon.d.ts +1 -1
  88. package/dist/components/icons/ClipboardFilledIcon.d.ts +1 -1
  89. package/dist/components/icons/ClipboardIcon.d.ts +1 -1
  90. package/dist/components/icons/ClockFilledIcon.d.ts +1 -1
  91. package/dist/components/icons/ClockIcon.d.ts +1 -1
  92. package/dist/components/icons/CloseAltFilledIcon.d.ts +1 -1
  93. package/dist/components/icons/CloseAltIcon.d.ts +1 -1
  94. package/dist/components/icons/CogIcon.d.ts +1 -1
  95. package/dist/components/icons/CommunityFilledIcon.d.ts +1 -1
  96. package/dist/components/icons/CommunityIcon.d.ts +1 -1
  97. package/dist/components/icons/ComputerIcon.d.ts +1 -1
  98. package/dist/components/icons/ContactFilledIcon.d.ts +1 -1
  99. package/dist/components/icons/ContactIcon.d.ts +1 -1
  100. package/dist/components/icons/ContactlessFilledIcon.d.ts +1 -1
  101. package/dist/components/icons/ContactlessIcon.d.ts +1 -1
  102. package/dist/components/icons/CoopLiveIcon.d.ts +1 -1
  103. package/dist/components/icons/CoopLocationFilledIcon.d.ts +1 -1
  104. package/dist/components/icons/CoopLogoIcon.d.ts +1 -1
  105. package/dist/components/icons/CoopMembershipCardFilledIcon.d.ts +1 -1
  106. package/dist/components/icons/CreditCardFilledIcon.d.ts +1 -1
  107. package/dist/components/icons/CreditCardIcon.d.ts +1 -1
  108. package/dist/components/icons/CrossIcon.d.ts +1 -1
  109. package/dist/components/icons/DocumentIcon.d.ts +1 -1
  110. package/dist/components/icons/DownloadIcon.d.ts +1 -1
  111. package/dist/components/icons/EnterStoreIcon.d.ts +1 -1
  112. package/dist/components/icons/ExitStoreIcon.d.ts +1 -1
  113. package/dist/components/icons/EyeFilledIcon.d.ts +1 -1
  114. package/dist/components/icons/EyeIcon.d.ts +1 -1
  115. package/dist/components/icons/EyeStrikeFilledIcon.d.ts +1 -1
  116. package/dist/components/icons/EyeStrikeIcon.d.ts +1 -1
  117. package/dist/components/icons/FeedbackFilledIcon.d.ts +1 -1
  118. package/dist/components/icons/FeedbackIcon.d.ts +1 -1
  119. package/dist/components/icons/FilterIcon.d.ts +1 -1
  120. package/dist/components/icons/GiftCardFilledIcon.d.ts +1 -1
  121. package/dist/components/icons/GiftCardIcon.d.ts +1 -1
  122. package/dist/components/icons/GiftFilledIcon.d.ts +1 -1
  123. package/dist/components/icons/GiftIcon.d.ts +1 -1
  124. package/dist/components/icons/HelpFilledIcon.d.ts +1 -1
  125. package/dist/components/icons/HelpIcon.d.ts +1 -1
  126. package/dist/components/icons/HomeFilledIcon.d.ts +1 -1
  127. package/dist/components/icons/HomeIcon.d.ts +1 -1
  128. package/dist/components/icons/HowDoIAssistantIcon.d.ts +1 -1
  129. package/dist/components/icons/InfoIcon.d.ts +1 -1
  130. package/dist/components/icons/KebabIcon.d.ts +1 -1
  131. package/dist/components/icons/LoadingIcon.d.ts +1 -1
  132. package/dist/components/icons/LocationFilledIcon.d.ts +1 -1
  133. package/dist/components/icons/LocationIcon.d.ts +1 -1
  134. package/dist/components/icons/LogoutIcon.d.ts +1 -1
  135. package/dist/components/icons/MailIcon.d.ts +1 -1
  136. package/dist/components/icons/MenuIcon.d.ts +1 -1
  137. package/dist/components/icons/MessageIcon.d.ts +1 -1
  138. package/dist/components/icons/MinusIcon.d.ts +1 -1
  139. package/dist/components/icons/NotesFilledIcon.d.ts +1 -1
  140. package/dist/components/icons/NotesIcon.d.ts +1 -1
  141. package/dist/components/icons/OpenNewIcon.d.ts +1 -1
  142. package/dist/components/icons/OwnBagIcon.d.ts +1 -1
  143. package/dist/components/icons/PadlockIcon.d.ts +1 -1
  144. package/dist/components/icons/PencilIcon.d.ts +1 -1
  145. package/dist/components/icons/PhoneIcon.d.ts +1 -1
  146. package/dist/components/icons/PowerIcon.d.ts +1 -1
  147. package/dist/components/icons/SaveFilledIcon.d.ts +1 -1
  148. package/dist/components/icons/SaveIcon.d.ts +1 -1
  149. package/dist/components/icons/ScooterIcon.d.ts +1 -1
  150. package/dist/components/icons/SearchFilledIcon.d.ts +1 -1
  151. package/dist/components/icons/SearchIcon.d.ts +1 -1
  152. package/dist/components/icons/SendIcon.d.ts +1 -1
  153. package/dist/components/icons/SpannerIcon.d.ts +1 -1
  154. package/dist/components/icons/StarFilledIcon.d.ts +1 -1
  155. package/dist/components/icons/StarIcon.d.ts +1 -1
  156. package/dist/components/icons/TickAltFilledIcon.d.ts +1 -1
  157. package/dist/components/icons/TickAltIcon.d.ts +1 -1
  158. package/dist/components/icons/TickIcon.d.ts +1 -1
  159. package/dist/components/icons/TruckIcon.d.ts +1 -1
  160. package/dist/components/icons/UserWipeIcon.d.ts +1 -1
  161. package/dist/components/icons/VoucherFilledIcon.d.ts +1 -1
  162. package/dist/components/icons/VoucherIcon.d.ts +1 -1
  163. package/dist/components/icons/WarningFilledIcon.d.ts +1 -1
  164. package/dist/components/icons/WarningIcon.d.ts +1 -1
  165. package/dist/components/icons/WifiIcon.d.ts +1 -1
  166. package/dist/components/icons/WriteIcon.d.ts +1 -1
  167. package/dist/hooks/useSlots.d.ts +4 -2
  168. package/dist/hooks/useSlots.js +33 -7
  169. package/dist/index.js +10 -10
  170. package/dist/types/index.d.ts +14 -14
  171. package/dist/utils/index.d.ts +1 -0
  172. package/dist/utils/index.js +9 -7
  173. package/package.json +12 -11
  174. package/src/components/AlertBanner/AlertBanner.tsx +5 -2
  175. package/src/components/Author/Author.tsx +4 -1
  176. package/src/components/Button/Button.tsx +5 -1
  177. package/src/components/Card/Card.tsx +8 -6
  178. package/src/components/Checkbox/Checkbox.tsx +13 -9
  179. package/src/components/DatePicker/DatePicker.tsx +15 -15
  180. package/src/components/Expandable/Expandable.tsx +5 -8
  181. package/src/components/Field/Field.context.ts +29 -0
  182. package/src/components/Field/Field.tsx +61 -56
  183. package/src/components/FieldMarkers/Label.tsx +4 -0
  184. package/src/components/Fieldset/Fieldset.tsx +7 -5
  185. package/src/components/Flourish/Flourish.tsx +4 -1
  186. package/src/components/Form/Form.tsx +4 -1
  187. package/src/components/Image/Image.tsx +4 -1
  188. package/src/components/Pill/Pill.tsx +4 -2
  189. package/src/components/Popover/Popover.tsx +7 -5
  190. package/src/components/Radio/Radio.tsx +12 -9
  191. package/src/components/RootSVG/RootSVG.tsx +4 -1
  192. package/src/components/Searchbox/Searchbox.context.tsx +20 -0
  193. package/src/components/Searchbox/Searchbox.tsx +55 -44
  194. package/src/components/Select/Select.tsx +11 -11
  195. package/src/components/Signpost/Signpost.tsx +4 -1
  196. package/src/components/SkipNav/SkipNav.tsx +4 -1
  197. package/src/components/Squircle/Squircle.tsx +4 -1
  198. package/src/components/Tag/Tag.tsx +4 -1
  199. package/src/components/TextInput/TextInput.tsx +8 -8
  200. package/src/components/Textarea/Textarea.tsx +7 -8
  201. package/src/components/ValidationSummary/ValidationSummary.tsx +12 -5
  202. package/src/hooks/useSlots.ts +37 -9
  203. package/src/types/index.ts +18 -14
  204. package/src/utils/index.ts +8 -6
  205. package/dist/node_modules/merge-refs/dist/index.js +0 -36
@@ -1,6 +1,6 @@
1
1
  import React from "react"
2
2
 
3
- import { ReactNodeWithConfig } from "../types"
3
+ import { LazyComponent, SlotConfig } from "../types"
4
4
 
5
5
  type Slots<T> = Record<keyof T, React.ReactNode>
6
6
 
@@ -8,22 +8,50 @@ export function isKey<T extends object>(x: T, k: PropertyKey): k is keyof T {
8
8
  return k in x
9
9
  }
10
10
 
11
- export function getSlotName(node: ReactNodeWithConfig): string | false {
12
- if (
13
- React.isValidElement(node) &&
14
- node.type &&
15
- typeof node.type !== "string" &&
16
- typeof node.type !== "symbol"
17
- ) {
18
- return node.type?.config?.name ?? node.type.name
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ export function isLazy<T extends React.ComponentType<any>>(
13
+ type: unknown
14
+ ): type is LazyComponent<T> {
15
+ return typeof type === "object" && type !== null && "_payload" in type && "_init" in type
16
+ }
17
+
18
+ export function resolveComponentName(child: React.ReactNode): string | null {
19
+ if (child && typeof child === "object" && "type" in child) {
20
+ const type = child.type
21
+
22
+ if (isLazy(type)) {
23
+ try {
24
+ const resolved = type._init(type._payload)
25
+ if ("slot" in resolved) return (resolved.slot as SlotConfig).name
26
+ return resolved.displayName ?? resolved.name ?? null
27
+ } catch {
28
+ // _init throws a Promise if the payload is still pending
29
+ return null
30
+ }
31
+ }
32
+
33
+ if (typeof type === "function") {
34
+ if ("slot" in type) return (type.slot as SlotConfig).name
35
+ return (type as React.FC).displayName ?? (type as React.FC).name ?? null
36
+ }
19
37
  }
38
+ return null
39
+ }
40
+
41
+ export function getSlotName(node: React.ReactNode): string | false {
42
+ const slotName = resolveComponentName(node)
20
43
 
44
+ if (slotName) {
45
+ return slotName.replaceAll(".", "")
46
+ // return root && !safeName.startsWith(root) ? root + safeName : safeName
47
+ }
21
48
  return false
22
49
  }
23
50
 
24
51
  export function useSlots<T>(
25
52
  componentSlots: Slots<T>,
26
53
  children: React.ReactNode,
54
+
27
55
  options?: { collect?: string[] }
28
56
  ): Slots<T> {
29
57
  return React.Children.toArray(children).reduce(
@@ -1,19 +1,23 @@
1
1
  export type StandardSizes = "sm" | "md" | "lg"
2
2
 
3
- export type FormFieldError = { message?: string; type?: string } | boolean | null | undefined
3
+ // export type FormFieldError = { message?: string; type?: string } | boolean | null | undefined
4
4
 
5
- export type ReactNodeWithConfig =
6
- | (React.ReactNode & {
7
- type?: {
8
- config?: ComponentConfig
9
- }
10
- })
11
- | undefined
12
- | null
5
+ export interface SlotConfig {
6
+ field?: boolean
7
+ inline?: boolean
8
+ name: string
9
+ suffix?: string
10
+ }
11
+
12
+ export interface LazyPayload<T> {
13
+ default: T
14
+ }
13
15
 
14
- export interface ComponentConfig {
15
- fieldSuffix?: string
16
- isField?: boolean
17
- isInline?: boolean
18
- name?: string
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ export interface LazyComponent<T extends React.ComponentType<any>> {
18
+ _init: (payload: unknown) => T
19
+ _payload: Promise<LazyPayload<T>> | LazyPayload<T>
20
+ $$typeof: typeof REACT_LAZY_TYPE
19
21
  }
22
+
23
+ export const REACT_LAZY_TYPE = Symbol.for("react.lazy")
@@ -1,3 +1,5 @@
1
+ import { isValidElement } from "react"
2
+
1
3
  export const bgPropToClass = (color: string, userClasses?: string) =>
2
4
  userClasses?.includes("bg-") ? "" : `bg-${color}`
3
5
 
@@ -11,11 +13,11 @@ export const hasUserBorder = (userClasses?: string) => {
11
13
 
12
14
  export const bgClassToColor = (userClasses: string) => {
13
15
  return /bg-([^\s]+)/.exec(userClasses)?.[1] ?? null
16
+ }
14
17
 
15
- // return (
16
- // userClasses
17
- // .split(" ")
18
- // .find((c) => c.startsWith("bg"))
19
- // ?.replace("bg-", "") ?? ""
20
- // )
18
+ export function getSlotProp<R = unknown>(slot: React.ReactNode, prop: string): R | undefined {
19
+ if (isValidElement(slot) && prop in (slot.props as object)) {
20
+ return (slot.props as Record<string, unknown>)[prop] as R
21
+ }
22
+ return undefined
21
23
  }
@@ -1,36 +0,0 @@
1
- /**
2
- * A function that merges React refs into one.
3
- * Supports both functions and ref objects created using createRef() and useRef().
4
- *
5
- * Usage:
6
- * ```tsx
7
- * <div ref={mergeRefs(ref1, ref2, ref3)} />
8
- * ```
9
- *
10
- * @param {(React.Ref<T> | undefined)[]} inputRefs Array of refs
11
- * @returns {React.Ref<T> | React.RefCallback<T>} Merged refs
12
- */
13
- function mergeRefs() {
14
- var inputRefs = [];
15
- for (var _i = 0; _i < arguments.length; _i++) {
16
- inputRefs[_i] = arguments[_i];
17
- }
18
- var filteredInputRefs = inputRefs.filter(Boolean);
19
- if (filteredInputRefs.length <= 1) {
20
- var firstRef = filteredInputRefs[0];
21
- return firstRef || null;
22
- }
23
- return function mergedRefs(ref) {
24
- for (var _i = 0, filteredInputRefs_1 = filteredInputRefs; _i < filteredInputRefs_1.length; _i++) {
25
- var inputRef = filteredInputRefs_1[_i];
26
- if (typeof inputRef === 'function') {
27
- inputRef(ref);
28
- }
29
- else if (inputRef) {
30
- inputRef.current = ref;
31
- }
32
- }
33
- };
34
- }
35
-
36
- export { mergeRefs as default };