@windstream/react-shared-components 0.1.86 → 0.1.88

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 (198) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.esm.js +2 -2
  3. package/dist/contentful/index.esm.js.map +1 -1
  4. package/dist/contentful/index.js +1 -1
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/index.d.ts +4 -4
  7. package/dist/index.js.map +1 -1
  8. package/package.json +185 -185
  9. package/src/components/accordion/Accordion.stories.tsx +230 -230
  10. package/src/components/accordion/index.tsx +70 -70
  11. package/src/components/accordion/types.ts +12 -12
  12. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  13. package/src/components/alert-card/index.tsx +41 -41
  14. package/src/components/alert-card/types.ts +13 -13
  15. package/src/components/animation-wrapper/index.tsx +129 -129
  16. package/src/components/animation-wrapper/types.ts +11 -11
  17. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  18. package/src/components/brand-button/helpers.ts +35 -35
  19. package/src/components/brand-button/index.tsx +120 -120
  20. package/src/components/brand-button/types.ts +38 -38
  21. package/src/components/button/Button.stories.tsx +108 -108
  22. package/src/components/button/index.tsx +27 -27
  23. package/src/components/button/types.ts +14 -14
  24. package/src/components/call-button/CallButton.stories.tsx +324 -324
  25. package/src/components/call-button/index.tsx +106 -106
  26. package/src/components/call-button/types.ts +16 -16
  27. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  28. package/src/components/checkbox/index.tsx +197 -197
  29. package/src/components/checkbox/types.ts +27 -27
  30. package/src/components/checklist/Checklist.stories.tsx +150 -150
  31. package/src/components/checklist/index.tsx +61 -61
  32. package/src/components/checklist/types.ts +17 -17
  33. package/src/components/collapse/Collapse.stories.tsx +255 -255
  34. package/src/components/collapse/index.tsx +46 -46
  35. package/src/components/collapse/types.ts +6 -6
  36. package/src/components/divider/Divider.stories.tsx +205 -205
  37. package/src/components/divider/index.tsx +22 -22
  38. package/src/components/divider/type.ts +3 -3
  39. package/src/components/image/Image.stories.tsx +113 -113
  40. package/src/components/image/index.tsx +25 -25
  41. package/src/components/image/types.ts +40 -40
  42. package/src/components/input/Input.stories.tsx +325 -325
  43. package/src/components/input/index.tsx +177 -177
  44. package/src/components/input/types.ts +37 -37
  45. package/src/components/link/Link.stories.tsx +163 -163
  46. package/src/components/link/index.tsx +116 -116
  47. package/src/components/link/types.ts +25 -25
  48. package/src/components/list/List.stories.tsx +272 -272
  49. package/src/components/list/index.tsx +88 -88
  50. package/src/components/list/list-item/index.tsx +38 -38
  51. package/src/components/list/list-item/types.ts +13 -13
  52. package/src/components/list/types.ts +29 -29
  53. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  54. package/src/components/material-icon/constants.ts +99 -99
  55. package/src/components/material-icon/index.tsx +47 -47
  56. package/src/components/material-icon/types.ts +31 -31
  57. package/src/components/modal/Modal.stories.tsx +171 -171
  58. package/src/components/modal/index.tsx +164 -164
  59. package/src/components/modal/types.ts +24 -24
  60. package/src/components/next-image/index.tsx +74 -74
  61. package/src/components/next-image/types.ts +1 -1
  62. package/src/components/pagination/index.tsx +91 -91
  63. package/src/components/pagination/types.ts +6 -6
  64. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  65. package/src/components/radio-button/index.tsx +75 -75
  66. package/src/components/radio-button/types.ts +21 -21
  67. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  68. package/src/components/see-more/index.tsx +44 -44
  69. package/src/components/see-more/types.ts +4 -4
  70. package/src/components/select/Select.stories.tsx +411 -411
  71. package/src/components/select/index.tsx +155 -155
  72. package/src/components/select/types.ts +36 -36
  73. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  74. package/src/components/select-plan-button/index.tsx +63 -63
  75. package/src/components/select-plan-button/types.ts +17 -17
  76. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  77. package/src/components/skeleton/index.tsx +61 -61
  78. package/src/components/skeleton/types.ts +4 -4
  79. package/src/components/spinner/Spinner.stories.tsx +335 -335
  80. package/src/components/spinner/index.tsx +44 -44
  81. package/src/components/spinner/types.ts +5 -5
  82. package/src/components/text/Text.stories.tsx +321 -321
  83. package/src/components/text/index.tsx +25 -25
  84. package/src/components/text/types.ts +45 -45
  85. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  86. package/src/components/tooltip/index.tsx +74 -74
  87. package/src/components/tooltip/types.ts +7 -7
  88. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  89. package/src/components/view-cart-button/index.tsx +42 -42
  90. package/src/components/view-cart-button/types.ts +5 -5
  91. package/src/contentful/blocks/accordion/Accordion.stories.mocks.tsx +128 -128
  92. package/src/contentful/blocks/accordion/Accordion.stories.tsx +98 -98
  93. package/src/contentful/blocks/accordion/index.tsx +112 -112
  94. package/src/contentful/blocks/accordion/types.ts +34 -34
  95. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  96. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  97. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +181 -181
  98. package/src/contentful/blocks/anchored-bottom-banner/types.ts +13 -13
  99. package/src/contentful/blocks/blogs-grid/BlogGrid.stories.mocks.tsx +144 -144
  100. package/src/contentful/blocks/blogs-grid/BlogGrid.stories.tsx +156 -156
  101. package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
  102. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  103. package/src/contentful/blocks/blogs-grid-base/index.tsx +119 -119
  104. package/src/contentful/blocks/blogs-grid-base/types.ts +36 -36
  105. package/src/contentful/blocks/breadcrumbs/BreadcrumbNavigation.stories.tsx +147 -147
  106. package/src/contentful/blocks/breadcrumbs/index.tsx +95 -95
  107. package/src/contentful/blocks/breadcrumbs/types.ts +8 -8
  108. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  109. package/src/contentful/blocks/button/index.tsx +131 -131
  110. package/src/contentful/blocks/button/types.ts +39 -39
  111. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  112. package/src/contentful/blocks/callout/index.tsx +279 -279
  113. package/src/contentful/blocks/callout/types.ts +78 -78
  114. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  115. package/src/contentful/blocks/cards/blog-card/index.tsx +129 -129
  116. package/src/contentful/blocks/cards/blog-card/types.ts +34 -34
  117. package/src/contentful/blocks/cards/floating-image-card/index.tsx +119 -119
  118. package/src/contentful/blocks/cards/floating-image-card/types.ts +30 -30
  119. package/src/contentful/blocks/cards/full-image-card/index.tsx +130 -130
  120. package/src/contentful/blocks/cards/full-image-card/types.ts +29 -29
  121. package/src/contentful/blocks/cards/index.tsx +13 -13
  122. package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
  123. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  124. package/src/contentful/blocks/cards/simple-card/index.tsx +325 -325
  125. package/src/contentful/blocks/cards/simple-card/types.ts +71 -71
  126. package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
  127. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  128. package/src/contentful/blocks/cards/types.ts +1 -1
  129. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  130. package/src/contentful/blocks/carousel/helper.tsx +494 -494
  131. package/src/contentful/blocks/carousel/index.tsx +87 -87
  132. package/src/contentful/blocks/carousel/types.ts +145 -145
  133. package/src/contentful/blocks/cart-retention-banner/index.tsx +109 -105
  134. package/src/contentful/blocks/cart-retention-banner/types.ts +11 -11
  135. package/src/contentful/blocks/comparison-table/index.tsx +29 -29
  136. package/src/contentful/blocks/comparison-table/types.ts +6 -6
  137. package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
  138. package/src/contentful/blocks/cookiebanner/type.ts +7 -7
  139. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  140. package/src/contentful/blocks/cta-callout/index.tsx +71 -71
  141. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  142. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  143. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  144. package/src/contentful/blocks/email-input-block/index.tsx +116 -116
  145. package/src/contentful/blocks/email-input-block/types.ts +16 -16
  146. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  147. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  148. package/src/contentful/blocks/find-kinetic/types.ts +19 -19
  149. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  150. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  151. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  152. package/src/contentful/blocks/footer/Footer.stories.tsx +317 -317
  153. package/src/contentful/blocks/footer/index.tsx +91 -91
  154. package/src/contentful/blocks/footer/types.ts +13 -13
  155. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  156. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  157. package/src/contentful/blocks/image-promo-bar/index.tsx +246 -246
  158. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  159. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  160. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  161. package/src/contentful/blocks/modal/constants.ts +53 -53
  162. package/src/contentful/blocks/modal/index.tsx +107 -107
  163. package/src/contentful/blocks/modal/types.ts +12 -12
  164. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +139 -139
  165. package/src/contentful/blocks/navigation/index.tsx +568 -568
  166. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  167. package/src/contentful/blocks/navigation/types.ts +71 -71
  168. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  169. package/src/contentful/blocks/primary-hero/index.tsx +236 -236
  170. package/src/contentful/blocks/primary-hero/types.ts +37 -37
  171. package/src/contentful/blocks/search-block/index.tsx +90 -90
  172. package/src/contentful/blocks/search-block/types.ts +15 -15
  173. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  174. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  175. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  176. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  177. package/src/contentful/blocks/text/index.tsx +12 -12
  178. package/src/contentful/blocks/text/types.ts +1 -1
  179. package/src/contentful/index.ts +105 -105
  180. package/src/hooks/contentful/use-contentful-rich-text.tsx +309 -309
  181. package/src/hooks/contentful/use-processed-check-list.ts +63 -63
  182. package/src/hooks/use-body-scroll-lock.ts +34 -34
  183. package/src/hooks/use-carousel-swipe.ts +264 -264
  184. package/src/hooks/use-outside-click.ts +17 -17
  185. package/src/index.ts +107 -107
  186. package/src/next/index.ts +5 -5
  187. package/src/setupTests.ts +46 -46
  188. package/src/stories/DocsTemplate.tsx +24 -24
  189. package/src/styles/globals.css +343 -343
  190. package/src/types/global.d.ts +9 -9
  191. package/src/types/micro-components.ts +99 -99
  192. package/src/types/utm.ts +49 -49
  193. package/src/utils/contentful/to-document.ts +24 -24
  194. package/src/utils/cookie.ts +84 -84
  195. package/src/utils/cx.ts +49 -49
  196. package/src/utils/index.ts +41 -41
  197. package/src/utils/speed-card-bg.ts +24 -24
  198. package/src/utils/utm.ts +221 -221
@@ -1,9 +1,9 @@
1
- declare module "*.module.css" {
2
- const classes: { [key: string]: string };
3
- export default classes;
4
- }
5
-
6
- declare module "*.css" {
7
- const content: string;
8
- export default content;
9
- }
1
+ declare module "*.module.css" {
2
+ const classes: { [key: string]: string };
3
+ export default classes;
4
+ }
5
+
6
+ declare module "*.css" {
7
+ const content: string;
8
+ export default content;
9
+ }
@@ -1,99 +1,99 @@
1
- import { ButtonProps } from "@shared/contentful";
2
-
3
- export interface Asset {
4
- url?: string | null;
5
- title?: string | null;
6
- description?: string | null;
7
- contentType?: string | null;
8
- width?: number | null;
9
- height?: number | null;
10
- }
11
- export interface Button {
12
- anchorId?: string | null;
13
- showButtonAs?: "solid" | "text" | null;
14
- buttonLabel: string; // required in your model
15
- buttonPrefix?: string | null;
16
- href?: string | null;
17
- target?: "_blank" | "_self" | null;
18
- badge?: string | null;
19
- preserveQueryParameters: boolean; // non-null in your model
20
- badgeIcon?: Asset | null;
21
- buttonVariant?: "primary_brand" | "primary_inverse" | "secondary" | null;
22
- buttonIcon?: Asset | null;
23
- buttonIconPosition?: boolean | null; // matches EntryFieldTypes.Boolean in your model
24
- clickToOpen?: "accordion" | "modal" | "tab" | null;
25
- tabmodalNameToOpen?: string | null;
26
- preDefinedFunctionExecution?: "check availability" | null;
27
- }
28
-
29
- export interface ButtonGroup {
30
- __typename: "ComponentButtonGroup";
31
- anchorId?: string | null;
32
- title?: string | null;
33
- itemsCollection?: {
34
- items: Button[];
35
- };
36
- }
37
- export interface Card {
38
- anchorId?: string;
39
- title?: string;
40
- body?: {
41
- json: any; // Contentful Rich Text
42
- };
43
- image?: Asset;
44
- imageLink?: string;
45
- imageAlignment?: "Left" | "Right" | "Center" | string;
46
- imageView?: "Full" | "Inset" | string;
47
- cta?: Button;
48
- ctaAlignment?: "Left" | "Right" | "Center" | string;
49
- textColor?: string;
50
- backgroundColor?: string;
51
- showBackgroundImage?: boolean;
52
- pinwheelColor?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
53
- iconToRichTextAlignment?: string;
54
- phoneNumber?: string;
55
- workingHours?: string;
56
- titleLocation?: "Top" | "Bottom" | string;
57
- ctaBottom?: Button;
58
- ctaAlignmentBottom?: "Left" | "Right" | "Center" | string;
59
- imageFloatingType?: boolean;
60
- }
61
-
62
- export interface VideoLink {
63
- image?: Asset;
64
- videoPopup?: boolean;
65
- link?: string;
66
- }
67
-
68
- export interface Checklist {
69
- list?: {
70
- items: {
71
- checkListTitle?: { json: any };
72
- icon?: Asset;
73
- anchorId?: string;
74
- }[];
75
- };
76
- }
77
-
78
- export interface RichTextItem {
79
- title?: string;
80
- isTargetBlank?: boolean;
81
- richText?: { json: any };
82
- }
83
-
84
- export type CheckPlansProps = {
85
- className?: string;
86
- title?: string;
87
- ctaAlignment?: "new-row" | "same-row";
88
- ctaText?: string;
89
- buttonVariant?: "primary_brand" | "secondary" | "primary_inverse";
90
- showButtonAs?: "solid" | "unstyled" | "text" | undefined;
91
- cta?: ButtonProps;
92
- speedCardConfig?: {
93
- isModalOpen?: boolean;
94
- setModalOpen?: () => void;
95
- speed?: string;
96
- techType?: string;
97
- isMax?: boolean;
98
- };
99
- };
1
+ import { ButtonProps } from "@shared/contentful";
2
+
3
+ export interface Asset {
4
+ url?: string | null;
5
+ title?: string | null;
6
+ description?: string | null;
7
+ contentType?: string | null;
8
+ width?: number | null;
9
+ height?: number | null;
10
+ }
11
+ export interface Button {
12
+ anchorId?: string | null;
13
+ showButtonAs?: "solid" | "text" | null;
14
+ buttonLabel: string; // required in your model
15
+ buttonPrefix?: string | null;
16
+ href?: string | null;
17
+ target?: "_blank" | "_self" | null;
18
+ badge?: string | null;
19
+ preserveQueryParameters: boolean; // non-null in your model
20
+ badgeIcon?: Asset | null;
21
+ buttonVariant?: "primary_brand" | "primary_inverse" | "secondary" | null;
22
+ buttonIcon?: Asset | null;
23
+ buttonIconPosition?: boolean | null; // matches EntryFieldTypes.Boolean in your model
24
+ clickToOpen?: "accordion" | "modal" | "tab" | null;
25
+ tabmodalNameToOpen?: string | null;
26
+ preDefinedFunctionExecution?: "check availability" | null;
27
+ }
28
+
29
+ export interface ButtonGroup {
30
+ __typename: "ComponentButtonGroup";
31
+ anchorId?: string | null;
32
+ title?: string | null;
33
+ itemsCollection?: {
34
+ items: Button[];
35
+ };
36
+ }
37
+ export interface Card {
38
+ anchorId?: string;
39
+ title?: string;
40
+ body?: {
41
+ json: any; // Contentful Rich Text
42
+ };
43
+ image?: Asset;
44
+ imageLink?: string;
45
+ imageAlignment?: "Left" | "Right" | "Center" | string;
46
+ imageView?: "Full" | "Inset" | string;
47
+ cta?: Button;
48
+ ctaAlignment?: "Left" | "Right" | "Center" | string;
49
+ textColor?: string;
50
+ backgroundColor?: string;
51
+ showBackgroundImage?: boolean;
52
+ pinwheelColor?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
53
+ iconToRichTextAlignment?: string;
54
+ phoneNumber?: string;
55
+ workingHours?: string;
56
+ titleLocation?: "Top" | "Bottom" | string;
57
+ ctaBottom?: Button;
58
+ ctaAlignmentBottom?: "Left" | "Right" | "Center" | string;
59
+ imageFloatingType?: boolean;
60
+ }
61
+
62
+ export interface VideoLink {
63
+ image?: Asset;
64
+ videoPopup?: boolean;
65
+ link?: string;
66
+ }
67
+
68
+ export interface Checklist {
69
+ list?: {
70
+ items: {
71
+ checkListTitle?: { json: any };
72
+ icon?: Asset;
73
+ anchorId?: string;
74
+ }[];
75
+ };
76
+ }
77
+
78
+ export interface RichTextItem {
79
+ title?: string;
80
+ isTargetBlank?: boolean;
81
+ richText?: { json: any };
82
+ }
83
+
84
+ export type CheckPlansProps = {
85
+ className?: string;
86
+ title?: string;
87
+ ctaAlignment?: "new-row" | "same-row";
88
+ ctaText?: string;
89
+ buttonVariant?: "primary_brand" | "secondary" | "primary_inverse";
90
+ showButtonAs?: "solid" | "unstyled" | "text" | undefined;
91
+ cta?: ButtonProps;
92
+ speedCardConfig?: {
93
+ isModalOpen?: boolean;
94
+ setModalOpen?: () => void;
95
+ speed?: string;
96
+ techType?: string;
97
+ isMax?: boolean;
98
+ };
99
+ };
package/src/types/utm.ts CHANGED
@@ -1,49 +1,49 @@
1
- /**
2
- * UTM Parameter Types
3
- *
4
- * Type definitions for UTM tracking parameters used across Kinetic applications.
5
- */
6
-
7
- /** All tracked UTM and click-ID parameter names */
8
- export type UTMProperty =
9
- | "utm_content"
10
- | "utm_medium"
11
- | "utm_campaign"
12
- | "utm_source"
13
- | "utm_term"
14
- | "utm_campaign_id"
15
- | "utm_adgroup_id"
16
- | "fbclid"
17
- | "gclid"
18
- | "msclkid";
19
-
20
- /** Partial record of UTM parameter values */
21
- export type UTMProperties = Partial<Record<UTMProperty, string>>;
22
-
23
- /** Segment campaign context schema */
24
- export interface CampaignProperties {
25
- name?: string;
26
- source?: string;
27
- medium?: string;
28
- term?: string;
29
- content?: string;
30
- campaign_id?: string;
31
- adgroup_id?: string;
32
- gclid?: string;
33
- fbclid?: string;
34
- msclkid?: string;
35
- }
36
-
37
- /** List of all UTM parameter names for filtering */
38
- export const UTM_PARAM_NAMES: UTMProperty[] = [
39
- "utm_content",
40
- "utm_medium",
41
- "utm_campaign",
42
- "utm_source",
43
- "utm_term",
44
- "utm_campaign_id",
45
- "utm_adgroup_id",
46
- "fbclid",
47
- "gclid",
48
- "msclkid",
49
- ];
1
+ /**
2
+ * UTM Parameter Types
3
+ *
4
+ * Type definitions for UTM tracking parameters used across Kinetic applications.
5
+ */
6
+
7
+ /** All tracked UTM and click-ID parameter names */
8
+ export type UTMProperty =
9
+ | "utm_content"
10
+ | "utm_medium"
11
+ | "utm_campaign"
12
+ | "utm_source"
13
+ | "utm_term"
14
+ | "utm_campaign_id"
15
+ | "utm_adgroup_id"
16
+ | "fbclid"
17
+ | "gclid"
18
+ | "msclkid";
19
+
20
+ /** Partial record of UTM parameter values */
21
+ export type UTMProperties = Partial<Record<UTMProperty, string>>;
22
+
23
+ /** Segment campaign context schema */
24
+ export interface CampaignProperties {
25
+ name?: string;
26
+ source?: string;
27
+ medium?: string;
28
+ term?: string;
29
+ content?: string;
30
+ campaign_id?: string;
31
+ adgroup_id?: string;
32
+ gclid?: string;
33
+ fbclid?: string;
34
+ msclkid?: string;
35
+ }
36
+
37
+ /** List of all UTM parameter names for filtering */
38
+ export const UTM_PARAM_NAMES: UTMProperty[] = [
39
+ "utm_content",
40
+ "utm_medium",
41
+ "utm_campaign",
42
+ "utm_source",
43
+ "utm_term",
44
+ "utm_campaign_id",
45
+ "utm_adgroup_id",
46
+ "fbclid",
47
+ "gclid",
48
+ "msclkid",
49
+ ];
@@ -1,24 +1,24 @@
1
- import type { Document } from "@contentful/rich-text-types";
2
-
3
- type GraphqlRichText = { json: Document; links?: unknown };
4
-
5
- const isDocument = (v: unknown): v is Document =>
6
- !!v &&
7
- typeof v === "object" &&
8
- "nodeType" in (v as any) &&
9
- "content" in (v as any);
10
-
11
- export const toDocument = (v: unknown | null | undefined): Document | null => {
12
- if (!v) return null;
13
-
14
- // REST/CDA Document
15
- if (isDocument(v)) return v;
16
-
17
- // GraphQL RichText { json: Document, links? }
18
- if (typeof v === "object" && v !== null && "json" in (v as any)) {
19
- const json = (v as GraphqlRichText).json;
20
- return isDocument(json) ? json : null;
21
- }
22
-
23
- return null;
24
- };
1
+ import type { Document } from "@contentful/rich-text-types";
2
+
3
+ type GraphqlRichText = { json: Document; links?: unknown };
4
+
5
+ const isDocument = (v: unknown): v is Document =>
6
+ !!v &&
7
+ typeof v === "object" &&
8
+ "nodeType" in (v as any) &&
9
+ "content" in (v as any);
10
+
11
+ export const toDocument = (v: unknown | null | undefined): Document | null => {
12
+ if (!v) return null;
13
+
14
+ // REST/CDA Document
15
+ if (isDocument(v)) return v;
16
+
17
+ // GraphQL RichText { json: Document, links? }
18
+ if (typeof v === "object" && v !== null && "json" in (v as any)) {
19
+ const json = (v as GraphqlRichText).json;
20
+ return isDocument(json) ? json : null;
21
+ }
22
+
23
+ return null;
24
+ };
@@ -1,84 +1,84 @@
1
- /**
2
- * Cookie Helpers for UTM Parameter Storage
3
- *
4
- * Provides Base64-encoded JSON cookie storage for UTM parameters.
5
- */
6
- import type { UTMProperties } from "../types/utm";
7
- import { Base64 } from "js-base64";
8
- import Cookies from "js-cookie";
9
-
10
- const UTM_COOKIE_KEY = "utm_parameters";
11
- const DEFAULT_DOMAIN = ".gokinetic.com";
12
-
13
- /**
14
- * Reads UTM parameters from the Base64-encoded cookie.
15
- * @returns Parsed UTMProperties or null if cookie doesn't exist / is invalid.
16
- */
17
- export function getUTMs(): UTMProperties | null {
18
- if (typeof window === "undefined") return null;
19
-
20
- const raw = Cookies.get(UTM_COOKIE_KEY);
21
- if (!raw) return null;
22
-
23
- try {
24
- const decoded = Base64.decode(raw);
25
- return JSON.parse(decoded) as UTMProperties;
26
- } catch {
27
- return null;
28
- }
29
- }
30
-
31
- /**
32
- * Stores UTM parameters as a Base64-encoded JSON cookie.
33
- * @param utms - The UTM properties to store.
34
- * @param domain - Cookie domain (defaults to `.gokinetic.com`).
35
- */
36
- export function setUTMs(
37
- utms: UTMProperties,
38
- domain: string = DEFAULT_DOMAIN
39
- ): void {
40
- if (typeof window === "undefined") return;
41
-
42
- const json = JSON.stringify(utms);
43
- const encoded = Base64.encode(json);
44
-
45
- Cookies.set(UTM_COOKIE_KEY, encoded, {
46
- domain,
47
- path: "/",
48
- sameSite: "Lax",
49
- });
50
- }
51
-
52
- /**
53
- * Removes the UTM cookie.
54
- * @param domain - Cookie domain (defaults to `.gokinetic.com`).
55
- */
56
- export function removeUTMs(domain: string = DEFAULT_DOMAIN): void {
57
- Cookies.remove(UTM_COOKIE_KEY, { domain, path: "/" });
58
- }
59
- export function getCookie(key: string): string | null {
60
- if (typeof window === "undefined") return "";
61
- const encryptedValue = Cookies.get(key);
62
-
63
- if (encryptedValue) return Base64.decode(encryptedValue);
64
-
65
- return null;
66
- }
67
- export const getParsedCookie = (key: string) => {
68
- try {
69
- return JSON.parse(getCookie(key) || "");
70
- } catch {
71
- return null;
72
- }
73
- };
74
- export const setCookie = (
75
- key: string,
76
- value: any,
77
- options: Cookies.CookieAttributes
78
- ) => {
79
- if (typeof window === "undefined") return;
80
- const stringValue = JSON.stringify(value);
81
- const encryptedValue = Base64.encode(stringValue);
82
-
83
- Cookies.set(key, encryptedValue, options);
84
- };
1
+ /**
2
+ * Cookie Helpers for UTM Parameter Storage
3
+ *
4
+ * Provides Base64-encoded JSON cookie storage for UTM parameters.
5
+ */
6
+ import type { UTMProperties } from "../types/utm";
7
+ import { Base64 } from "js-base64";
8
+ import Cookies from "js-cookie";
9
+
10
+ const UTM_COOKIE_KEY = "utm_parameters";
11
+ const DEFAULT_DOMAIN = ".gokinetic.com";
12
+
13
+ /**
14
+ * Reads UTM parameters from the Base64-encoded cookie.
15
+ * @returns Parsed UTMProperties or null if cookie doesn't exist / is invalid.
16
+ */
17
+ export function getUTMs(): UTMProperties | null {
18
+ if (typeof window === "undefined") return null;
19
+
20
+ const raw = Cookies.get(UTM_COOKIE_KEY);
21
+ if (!raw) return null;
22
+
23
+ try {
24
+ const decoded = Base64.decode(raw);
25
+ return JSON.parse(decoded) as UTMProperties;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Stores UTM parameters as a Base64-encoded JSON cookie.
33
+ * @param utms - The UTM properties to store.
34
+ * @param domain - Cookie domain (defaults to `.gokinetic.com`).
35
+ */
36
+ export function setUTMs(
37
+ utms: UTMProperties,
38
+ domain: string = DEFAULT_DOMAIN
39
+ ): void {
40
+ if (typeof window === "undefined") return;
41
+
42
+ const json = JSON.stringify(utms);
43
+ const encoded = Base64.encode(json);
44
+
45
+ Cookies.set(UTM_COOKIE_KEY, encoded, {
46
+ domain,
47
+ path: "/",
48
+ sameSite: "Lax",
49
+ });
50
+ }
51
+
52
+ /**
53
+ * Removes the UTM cookie.
54
+ * @param domain - Cookie domain (defaults to `.gokinetic.com`).
55
+ */
56
+ export function removeUTMs(domain: string = DEFAULT_DOMAIN): void {
57
+ Cookies.remove(UTM_COOKIE_KEY, { domain, path: "/" });
58
+ }
59
+ export function getCookie(key: string): string | null {
60
+ if (typeof window === "undefined") return "";
61
+ const encryptedValue = Cookies.get(key);
62
+
63
+ if (encryptedValue) return Base64.decode(encryptedValue);
64
+
65
+ return null;
66
+ }
67
+ export const getParsedCookie = (key: string) => {
68
+ try {
69
+ return JSON.parse(getCookie(key) || "");
70
+ } catch {
71
+ return null;
72
+ }
73
+ };
74
+ export const setCookie = (
75
+ key: string,
76
+ value: any,
77
+ options: Cookies.CookieAttributes
78
+ ) => {
79
+ if (typeof window === "undefined") return;
80
+ const stringValue = JSON.stringify(value);
81
+ const encryptedValue = Base64.encode(stringValue);
82
+
83
+ Cookies.set(key, encryptedValue, options);
84
+ };
package/src/utils/cx.ts CHANGED
@@ -1,49 +1,49 @@
1
- import { clsx, type ClassValue } from "clsx";
2
- import { extendTailwindMerge } from "tailwind-merge";
3
-
4
- const twMerge = extendTailwindMerge({
5
- // Define class groups so twMerge knows which classes override each other
6
- extend: {
7
- classGroups: {
8
- ["font-variants" as any]: [
9
- "heading1",
10
- "heading2",
11
- "heading3",
12
- "heading4",
13
- "heading5",
14
- "heading6",
15
- "subheading1",
16
- "subheading2",
17
- "subheading3",
18
- "subheading4",
19
- "subheading5",
20
- "subheading6",
21
- "body1",
22
- "body2",
23
- "body3",
24
- "footnote",
25
- "micro",
26
- "label1",
27
- "label2",
28
- "label3",
29
- "label4",
30
- ],
31
- ["button-sizes" as any]: [
32
- "btn-small",
33
- "btn-medium",
34
- "btn-large",
35
- "btn-x-large",
36
- ],
37
- },
38
- },
39
- });
40
-
41
- /**
42
- * Utility function to combine class names using clsx
43
- * @param inputs - Class values to combine
44
- * @returns Combined class string
45
- */
46
- export const cx = (...val: ClassValue[]) => twMerge(clsx(...val));
47
-
48
- export { clsx };
49
- export type { ClassValue };
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+
4
+ const twMerge = extendTailwindMerge({
5
+ // Define class groups so twMerge knows which classes override each other
6
+ extend: {
7
+ classGroups: {
8
+ ["font-variants" as any]: [
9
+ "heading1",
10
+ "heading2",
11
+ "heading3",
12
+ "heading4",
13
+ "heading5",
14
+ "heading6",
15
+ "subheading1",
16
+ "subheading2",
17
+ "subheading3",
18
+ "subheading4",
19
+ "subheading5",
20
+ "subheading6",
21
+ "body1",
22
+ "body2",
23
+ "body3",
24
+ "footnote",
25
+ "micro",
26
+ "label1",
27
+ "label2",
28
+ "label3",
29
+ "label4",
30
+ ],
31
+ ["button-sizes" as any]: [
32
+ "btn-small",
33
+ "btn-medium",
34
+ "btn-large",
35
+ "btn-x-large",
36
+ ],
37
+ },
38
+ },
39
+ });
40
+
41
+ /**
42
+ * Utility function to combine class names using clsx
43
+ * @param inputs - Class values to combine
44
+ * @returns Combined class string
45
+ */
46
+ export const cx = (...val: ClassValue[]) => twMerge(clsx(...val));
47
+
48
+ export { clsx };
49
+ export type { ClassValue };