@c15t/react 0.0.1-rc.3

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 (230) hide show
  1. package/LICENSE.md +595 -0
  2. package/README.md +55 -0
  3. package/dist/common/components/consent-manager-provider.cjs +93 -0
  4. package/dist/common/components/consent-manager-provider.d.ts +16 -0
  5. package/dist/common/components/consent-manager-provider.d.ts.map +1 -0
  6. package/dist/common/components/consent-manager-provider.js +59 -0
  7. package/dist/common/context/consent-manager-context.cjs +38 -0
  8. package/dist/common/context/consent-manager-context.d.ts +13 -0
  9. package/dist/common/context/consent-manager-context.d.ts.map +1 -0
  10. package/dist/common/context/consent-manager-context.js +4 -0
  11. package/dist/common/hooks/use-consent-manager.cjs +45 -0
  12. package/dist/common/hooks/use-consent-manager.d.ts +20 -0
  13. package/dist/common/hooks/use-consent-manager.d.ts.map +1 -0
  14. package/dist/common/hooks/use-consent-manager.js +11 -0
  15. package/dist/common/index.cjs +42 -0
  16. package/dist/common/index.d.ts +7 -0
  17. package/dist/common/index.d.ts.map +1 -0
  18. package/dist/common/index.js +9 -0
  19. package/dist/common/store/use-consent-manager.cjs +47 -0
  20. package/dist/common/store/use-consent-manager.d.ts +136 -0
  21. package/dist/common/store/use-consent-manager.d.ts.map +1 -0
  22. package/dist/common/store/use-consent-manager.js +13 -0
  23. package/dist/common/store/use-translations.cjs +58 -0
  24. package/dist/common/store/use-translations.d.ts +29 -0
  25. package/dist/common/store/use-translations.d.ts.map +1 -0
  26. package/dist/common/store/use-translations.js +24 -0
  27. package/dist/common/types/consent-manager.cjs +19 -0
  28. package/dist/common/types/consent-manager.d.ts +82 -0
  29. package/dist/common/types/consent-manager.d.ts.map +1 -0
  30. package/dist/common/types/consent-manager.js +0 -0
  31. package/dist/common/utils/theme.cjs +47 -0
  32. package/dist/common/utils/theme.d.ts +8 -0
  33. package/dist/common/utils/theme.d.ts.map +1 -0
  34. package/dist/common/utils/theme.js +13 -0
  35. package/dist/common/utils/translations.cjs +86 -0
  36. package/dist/common/utils/translations.d.ts +14 -0
  37. package/dist/common/utils/translations.d.ts.map +1 -0
  38. package/dist/common/utils/translations.js +50 -0
  39. package/dist/consent-manager-dialog/__tests__/styles.spec.cjs +218 -0
  40. package/dist/consent-manager-dialog/__tests__/styles.spec.d.ts +2 -0
  41. package/dist/consent-manager-dialog/__tests__/styles.spec.d.ts.map +1 -0
  42. package/dist/consent-manager-dialog/__tests__/styles.spec.js +183 -0
  43. package/dist/consent-manager-dialog/__tests__/utils.cjs +68 -0
  44. package/dist/consent-manager-dialog/__tests__/utils.d.ts +13 -0
  45. package/dist/consent-manager-dialog/__tests__/utils.d.ts.map +1 -0
  46. package/dist/consent-manager-dialog/__tests__/utils.js +34 -0
  47. package/dist/consent-manager-dialog/atoms/dialog-card.cjs +139 -0
  48. package/dist/consent-manager-dialog/atoms/dialog-card.d.ts +90 -0
  49. package/dist/consent-manager-dialog/atoms/dialog-card.d.ts.map +1 -0
  50. package/dist/consent-manager-dialog/atoms/dialog-card.js +94 -0
  51. package/dist/consent-manager-dialog/atoms/overlay.cjs +67 -0
  52. package/dist/consent-manager-dialog/atoms/overlay.d.ts +71 -0
  53. package/dist/consent-manager-dialog/atoms/overlay.d.ts.map +1 -0
  54. package/dist/consent-manager-dialog/atoms/overlay.js +32 -0
  55. package/dist/consent-manager-dialog/consent-manager-dialog.cjs +129 -0
  56. package/dist/consent-manager-dialog/consent-manager-dialog.css +75 -0
  57. package/dist/consent-manager-dialog/consent-manager-dialog.d.ts +44 -0
  58. package/dist/consent-manager-dialog/consent-manager-dialog.d.ts.map +1 -0
  59. package/dist/consent-manager-dialog/consent-manager-dialog.js +95 -0
  60. package/dist/consent-manager-dialog/index.cjs +51 -0
  61. package/dist/consent-manager-dialog/index.d.ts +4 -0
  62. package/dist/consent-manager-dialog/index.d.ts.map +1 -0
  63. package/dist/consent-manager-dialog/index.js +18 -0
  64. package/dist/consent-manager-dialog/theme.cjs +19 -0
  65. package/dist/consent-manager-dialog/theme.d.ts +19 -0
  66. package/dist/consent-manager-dialog/theme.d.ts.map +1 -0
  67. package/dist/consent-manager-dialog/theme.js +0 -0
  68. package/dist/consent-manager-widget/__tests__/styles.spec.cjs +228 -0
  69. package/dist/consent-manager-widget/__tests__/styles.spec.d.ts +2 -0
  70. package/dist/consent-manager-widget/__tests__/styles.spec.d.ts.map +1 -0
  71. package/dist/consent-manager-widget/__tests__/styles.spec.js +193 -0
  72. package/dist/consent-manager-widget/__tests__/utils.cjs +68 -0
  73. package/dist/consent-manager-widget/__tests__/utils.d.ts +13 -0
  74. package/dist/consent-manager-widget/__tests__/utils.d.ts.map +1 -0
  75. package/dist/consent-manager-widget/__tests__/utils.js +34 -0
  76. package/dist/consent-manager-widget/atoms/accordion.cjs +147 -0
  77. package/dist/consent-manager-widget/atoms/accordion.d.ts +57 -0
  78. package/dist/consent-manager-widget/atoms/accordion.d.ts.map +1 -0
  79. package/dist/consent-manager-widget/atoms/accordion.js +98 -0
  80. package/dist/consent-manager-widget/atoms/button.cjs +77 -0
  81. package/dist/consent-manager-widget/atoms/button.d.ts +17 -0
  82. package/dist/consent-manager-widget/atoms/button.d.ts.map +1 -0
  83. package/dist/consent-manager-widget/atoms/button.js +38 -0
  84. package/dist/consent-manager-widget/atoms/footer.cjs +70 -0
  85. package/dist/consent-manager-widget/atoms/footer.d.ts +22 -0
  86. package/dist/consent-manager-widget/atoms/footer.d.ts.map +1 -0
  87. package/dist/consent-manager-widget/atoms/footer.js +34 -0
  88. package/dist/consent-manager-widget/atoms/logo.cjs +101 -0
  89. package/dist/consent-manager-widget/atoms/logo.d.ts +8 -0
  90. package/dist/consent-manager-widget/atoms/logo.d.ts.map +1 -0
  91. package/dist/consent-manager-widget/atoms/logo.js +67 -0
  92. package/dist/consent-manager-widget/atoms/root.cjs +64 -0
  93. package/dist/consent-manager-widget/atoms/root.d.ts +82 -0
  94. package/dist/consent-manager-widget/atoms/root.d.ts.map +1 -0
  95. package/dist/consent-manager-widget/atoms/root.js +29 -0
  96. package/dist/consent-manager-widget/consent-manager-widget.cjs +98 -0
  97. package/dist/consent-manager-widget/consent-manager-widget.css +79 -0
  98. package/dist/consent-manager-widget/consent-manager-widget.d.ts +51 -0
  99. package/dist/consent-manager-widget/consent-manager-widget.d.ts.map +1 -0
  100. package/dist/consent-manager-widget/consent-manager-widget.js +64 -0
  101. package/dist/consent-manager-widget/index.cjs +62 -0
  102. package/dist/consent-manager-widget/index.d.ts +10 -0
  103. package/dist/consent-manager-widget/index.d.ts.map +1 -0
  104. package/dist/consent-manager-widget/index.js +29 -0
  105. package/dist/consent-manager-widget/theme.cjs +19 -0
  106. package/dist/consent-manager-widget/theme.d.ts +48 -0
  107. package/dist/consent-manager-widget/theme.d.ts.map +1 -0
  108. package/dist/consent-manager-widget/theme.js +0 -0
  109. package/dist/consent-manager-widget/types.cjs +19 -0
  110. package/dist/consent-manager-widget/types.d.ts +18 -0
  111. package/dist/consent-manager-widget/types.d.ts.map +1 -0
  112. package/dist/consent-manager-widget/types.js +0 -0
  113. package/dist/cookie-banner/__tests__/styles.spec.cjs +234 -0
  114. package/dist/cookie-banner/__tests__/styles.spec.d.ts +2 -0
  115. package/dist/cookie-banner/__tests__/styles.spec.d.ts.map +1 -0
  116. package/dist/cookie-banner/__tests__/styles.spec.js +199 -0
  117. package/dist/cookie-banner/__tests__/utils.cjs +67 -0
  118. package/dist/cookie-banner/__tests__/utils.d.ts +13 -0
  119. package/dist/cookie-banner/__tests__/utils.d.ts.map +1 -0
  120. package/dist/cookie-banner/__tests__/utils.js +33 -0
  121. package/dist/cookie-banner/atoms/overlay.cjs +71 -0
  122. package/dist/cookie-banner/atoms/overlay.d.ts +46 -0
  123. package/dist/cookie-banner/atoms/overlay.d.ts.map +1 -0
  124. package/dist/cookie-banner/atoms/overlay.js +36 -0
  125. package/dist/cookie-banner/atoms/root.cjs +116 -0
  126. package/dist/cookie-banner/atoms/root.d.ts +79 -0
  127. package/dist/cookie-banner/atoms/root.d.ts.map +1 -0
  128. package/dist/cookie-banner/atoms/root.js +81 -0
  129. package/dist/cookie-banner/components.cjs +160 -0
  130. package/dist/cookie-banner/components.d.ts +136 -0
  131. package/dist/cookie-banner/components.d.ts.map +1 -0
  132. package/dist/cookie-banner/components.js +109 -0
  133. package/dist/cookie-banner/cookie-banner.cjs +99 -0
  134. package/dist/cookie-banner/cookie-banner.css +226 -0
  135. package/dist/cookie-banner/cookie-banner.d.ts +134 -0
  136. package/dist/cookie-banner/cookie-banner.d.ts.map +1 -0
  137. package/dist/cookie-banner/cookie-banner.js +65 -0
  138. package/dist/cookie-banner/error-boundary.cjs +68 -0
  139. package/dist/cookie-banner/error-boundary.d.ts +56 -0
  140. package/dist/cookie-banner/error-boundary.d.ts.map +1 -0
  141. package/dist/cookie-banner/error-boundary.js +34 -0
  142. package/dist/cookie-banner/index.cjs +59 -0
  143. package/dist/cookie-banner/index.d.ts +52 -0
  144. package/dist/cookie-banner/index.d.ts.map +1 -0
  145. package/dist/cookie-banner/index.js +26 -0
  146. package/dist/cookie-banner/theme.cjs +19 -0
  147. package/dist/cookie-banner/theme.d.ts +30 -0
  148. package/dist/cookie-banner/theme.d.ts.map +1 -0
  149. package/dist/cookie-banner/theme.js +0 -0
  150. package/dist/index.cjs +89 -0
  151. package/dist/index.d.ts +11 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +8 -0
  154. package/dist/primitives/box.cjs +54 -0
  155. package/dist/primitives/box.d.ts +47 -0
  156. package/dist/primitives/box.d.ts.map +1 -0
  157. package/dist/primitives/box.js +20 -0
  158. package/dist/primitives/button.cjs +93 -0
  159. package/dist/primitives/button.d.ts +207 -0
  160. package/dist/primitives/button.d.ts.map +1 -0
  161. package/dist/primitives/button.js +59 -0
  162. package/dist/primitives/button.types.cjs +19 -0
  163. package/dist/primitives/button.types.d.ts +34 -0
  164. package/dist/primitives/button.types.d.ts.map +1 -0
  165. package/dist/primitives/button.types.js +0 -0
  166. package/dist/theme/context.cjs +44 -0
  167. package/dist/theme/context.d.ts +96 -0
  168. package/dist/theme/context.d.ts.map +1 -0
  169. package/dist/theme/context.js +9 -0
  170. package/dist/theme/index.cjs +39 -0
  171. package/dist/theme/index.d.ts +6 -0
  172. package/dist/theme/index.d.ts.map +1 -0
  173. package/dist/theme/index.js +6 -0
  174. package/dist/theme/style-keys.cjs +39 -0
  175. package/dist/theme/style-keys.d.ts +77 -0
  176. package/dist/theme/style-keys.d.ts.map +1 -0
  177. package/dist/theme/style-keys.js +5 -0
  178. package/dist/theme/use-style.cjs +95 -0
  179. package/dist/theme/use-style.d.ts +32 -0
  180. package/dist/theme/use-style.d.ts.map +1 -0
  181. package/dist/theme/use-style.js +61 -0
  182. package/dist/theme/utils/merge-styles.cjs +62 -0
  183. package/dist/theme/utils/merge-styles.d.ts +3 -0
  184. package/dist/theme/utils/merge-styles.d.ts.map +1 -0
  185. package/dist/theme/utils/merge-styles.js +28 -0
  186. package/dist/ui/components/accordion.cjs +204 -0
  187. package/dist/ui/components/accordion.css +158 -0
  188. package/dist/ui/components/accordion.d.ts +45 -0
  189. package/dist/ui/components/accordion.d.ts.map +1 -0
  190. package/dist/ui/components/accordion.js +164 -0
  191. package/dist/ui/components/button.cjs +185 -0
  192. package/dist/ui/components/button.css +303 -0
  193. package/dist/ui/components/button.d.ts +445 -0
  194. package/dist/ui/components/button.d.ts.map +1 -0
  195. package/dist/ui/components/button.js +149 -0
  196. package/dist/ui/components/card.cjs +80 -0
  197. package/dist/ui/components/card.css +55 -0
  198. package/dist/ui/components/card.d.ts +10 -0
  199. package/dist/ui/components/card.d.ts.map +1 -0
  200. package/dist/ui/components/card.js +41 -0
  201. package/dist/ui/components/icon.cjs +57 -0
  202. package/dist/ui/components/icon.d.ts +8 -0
  203. package/dist/ui/components/icon.d.ts.map +1 -0
  204. package/dist/ui/components/icon.js +23 -0
  205. package/dist/ui/components/logo.cjs +101 -0
  206. package/dist/ui/components/logo.d.ts +8 -0
  207. package/dist/ui/components/logo.d.ts.map +1 -0
  208. package/dist/ui/components/logo.js +67 -0
  209. package/dist/ui/components/switch.cjs +81 -0
  210. package/dist/ui/components/switch.css +135 -0
  211. package/dist/ui/components/switch.d.ts +25 -0
  212. package/dist/ui/components/switch.d.ts.map +1 -0
  213. package/dist/ui/components/switch.js +47 -0
  214. package/dist/ui/libs/cn.cjs +55 -0
  215. package/dist/ui/libs/cn.d.ts +11 -0
  216. package/dist/ui/libs/cn.d.ts.map +1 -0
  217. package/dist/ui/libs/cn.js +6 -0
  218. package/dist/ui/libs/polymorphic.cjs +19 -0
  219. package/dist/ui/libs/polymorphic.d.ts +15 -0
  220. package/dist/ui/libs/polymorphic.d.ts.map +1 -0
  221. package/dist/ui/libs/polymorphic.js +0 -0
  222. package/dist/ui/libs/recursive-clone-children.cjs +49 -0
  223. package/dist/ui/libs/recursive-clone-children.d.ts +14 -0
  224. package/dist/ui/libs/recursive-clone-children.d.ts.map +1 -0
  225. package/dist/ui/libs/recursive-clone-children.js +15 -0
  226. package/dist/ui/theme/context.cjs +6 -0
  227. package/dist/ui/theme/context.d.ts +2 -0
  228. package/dist/ui/theme/context.d.ts.map +1 -0
  229. package/dist/ui/theme/context.js +0 -0
  230. package/package.json +71 -0
@@ -0,0 +1,226 @@
1
+ .c15t-cookie-banner {
2
+ isolation: isolate;
3
+ -webkit-text-size-adjust: 100%;
4
+ tab-size: 4;
5
+ --c15t-cookie-banner-radius-sm: .3125rem;
6
+ --c15t-cookie-banner-radius-lg: 1.25rem;
7
+ --c15t-cookie-banner-max-width: 440px;
8
+ --c15t-cookie-banner-duration: .15s;
9
+ --c15t-cookie-banner-ease: var(--c15t-ease-out);
10
+ --c15t-cookie-banner-border-width: 1px;
11
+ --c15t-cookie-banner-shadow: 0 16px 32px -12px #0e121b1a;
12
+ --c15t-cookie-banner-bg: #fff;
13
+ --c15t-cookie-banner-footer-bg: #f7f7f7;
14
+ --c15t-cookie-banner-text-color: hsl(0 0% 9.02);
15
+ --c15t-cookie-banner-border-color: #ebebeb;
16
+ --c15t-cookie-banner-title-color: hsl(0 0% 9.02);
17
+ --c15t-cookie-banner-description-color: #5c5c5c;
18
+ font-family: system-ui, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
19
+ line-height: 1.15;
20
+ }
21
+
22
+ .dark .c15t-cookie-banner {
23
+ --c15t-cookie-banner-bg: hsl(0 0% 9.02);
24
+ --c15t-cookie-banner-border-color: #333;
25
+ --c15t-cookie-banner-footer-bg: #1c1c1c;
26
+ --c15t-cookie-banner-title-color: #e6e6e6;
27
+ --c15t-cookie-banner-description-color: #999;
28
+ }
29
+
30
+ .c15t-cookie-banner-root {
31
+ z-index: 999999998;
32
+ flex-direction: column;
33
+ width: 100%;
34
+ padding: 1rem;
35
+ display: flex;
36
+ position: fixed;
37
+
38
+ @media (width >= 640px) {
39
+ & {
40
+ width: auto;
41
+ padding: 1.5rem;
42
+ }
43
+ }
44
+ }
45
+
46
+ .c15t-cookie-banner-root-bottom-left {
47
+ bottom: 0;
48
+ left: 0;
49
+ }
50
+
51
+ .c15t-cookie-banner-root-bottom-right {
52
+ bottom: 0;
53
+ right: 0;
54
+ }
55
+
56
+ .c15t-cookie-banner-root-top-left {
57
+ top: 0;
58
+ left: 0;
59
+ }
60
+
61
+ .c15t-cookie-banner-root-top-right {
62
+ top: 0;
63
+ right: 0;
64
+ }
65
+
66
+ .c15t-cookie-banner-card {
67
+ width: 100%;
68
+ max-width: var(--c15t-cookie-banner-max-width);
69
+ border-radius: var(--c15t-cookie-banner-radius-lg);
70
+ border-width: var(--c15t-cookie-banner-border-width);
71
+ border-color: var(--c15t-cookie-banner-border-color);
72
+ background-color: var(--c15t-cookie-banner-bg);
73
+ box-shadow: var(--c15t-cookie-banner-shadow);
74
+ position: relative;
75
+ overflow: hidden;
76
+
77
+ &[data-state="open"] {
78
+ animation: c15t-cookie-banner-enter var(--c15t-cookie-banner-duration) var(--c15t-cookie-banner-ease);
79
+ }
80
+
81
+ &[data-state="closed"] {
82
+ animation: c15t-cookie-banner-exit var(--c15t-cookie-banner-duration) var(--c15t-cookie-banner-ease);
83
+ }
84
+ }
85
+
86
+ .c15t-cookie-banner-card > :not([hidden]) ~ :not([hidden]) {
87
+ border-top-width: var(--c15t-cookie-banner-border-width);
88
+ border-color: var(--c15t-cookie-banner-border-color);
89
+ }
90
+
91
+ .c15t-cookie-banner-card:focus {
92
+ outline-offset: 2px;
93
+ outline: none;
94
+ }
95
+
96
+ @keyframes c15t-cookie-banner-enter {
97
+ from {
98
+ opacity: 0;
99
+ transform: scale(.95);
100
+ }
101
+
102
+ to {
103
+ opacity: 1;
104
+ transform: scale(1);
105
+ }
106
+ }
107
+
108
+ @keyframes c15t-cookie-banner-exit {
109
+ from {
110
+ opacity: 1;
111
+ transform: scale(1);
112
+ }
113
+
114
+ to {
115
+ opacity: 0;
116
+ transform: scale(.95);
117
+ }
118
+ }
119
+
120
+ .c15t-cookie-banner-reject-button {
121
+ width: 100%;
122
+
123
+ @media (width >= 640px) {
124
+ & {
125
+ width: auto;
126
+ }
127
+ }
128
+ }
129
+
130
+ .c15t-cookie-banner-accept-button {
131
+ width: 100%;
132
+
133
+ @media (width >= 640px) {
134
+ & {
135
+ width: auto;
136
+ }
137
+ }
138
+ }
139
+
140
+ .c15t-cookie-banner-customize-button {
141
+ width: 100%;
142
+
143
+ @media (width >= 640px) {
144
+ & {
145
+ width: auto;
146
+ }
147
+ }
148
+ }
149
+
150
+ .c15t-cookie-banner-header {
151
+ color: var(--c15t-cookie-banner-text-color);
152
+ flex-direction: column;
153
+ padding: 1rem;
154
+ display: flex;
155
+
156
+ @media (width >= 640px) {
157
+ & {
158
+ padding: 1.5rem;
159
+ }
160
+ }
161
+
162
+ & > :not([hidden]) ~ :not([hidden]) {
163
+ --c15t-space-y-reverse: 0;
164
+ margin-top: calc(.5rem * calc(1 - var(--c15t-space-y-reverse)));
165
+ margin-bottom: calc(.5rem * var(--c15t-space-y-reverse));
166
+ }
167
+ }
168
+
169
+ .c15t-cookie-banner-footer {
170
+ background-color: var(--c15t-cookie-banner-footer-bg);
171
+ flex-direction: column;
172
+ justify-content: space-between;
173
+ gap: .75rem;
174
+ padding: 1rem 1.25rem;
175
+ display: flex;
176
+
177
+ @media (width >= 640px) {
178
+ & {
179
+ flex-direction: row;
180
+ }
181
+ }
182
+ }
183
+
184
+ .c15t-cookie-banner-footer-sub-group {
185
+ flex-direction: row;
186
+ justify-content: space-between;
187
+ gap: 1rem;
188
+ display: flex;
189
+
190
+ @media (width <= 640px) {
191
+ & {
192
+ gap: .25rem;
193
+ }
194
+ }
195
+ }
196
+
197
+ @media (width <= 640px) {
198
+ .c15t-cookie-banner-reject-button, .c15t-cookie-banner-customize-button {
199
+ width: 100%;
200
+ }
201
+ }
202
+
203
+ .c15t-cookie-banner-description {
204
+ letter-spacing: -.006em;
205
+ color: var(--c15t-cookie-banner-description-color);
206
+ font-size: .875rem;
207
+ font-weight: 400;
208
+ line-height: 1.25rem;
209
+ }
210
+
211
+ .c15t-cookie-banner-title {
212
+ letter-spacing: -.011em;
213
+ color: var(--c15t-cookie-banner-title-color);
214
+ font-size: 1rem;
215
+ font-weight: 500;
216
+ line-height: 1.5rem;
217
+ }
218
+
219
+ .c15t-cookie-banner-overlay {
220
+ --c15t-cookie-banner-overlay-bg: #00000080;
221
+ background-color: var(--c15t-cookie-banner-overlay-bg);
222
+ z-index: 999999997;
223
+ position: fixed;
224
+ inset: 0;
225
+ }
226
+
@@ -0,0 +1,134 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Provides the main cookie banner component for privacy consent management.
4
+ * Implements an accessible, customizable banner following GDPR and CCPA requirements.
5
+ */
6
+ import type { FC, ReactNode } from 'react';
7
+ import type { CookieBannerTheme } from './theme';
8
+ import './cookie-banner.css';
9
+ /**
10
+ * Props for configuring and customizing the CookieBanner component.
11
+ *f
12
+ * @remarks
13
+ * Provides comprehensive customization options for the cookie banner's appearance
14
+ * and behavior while maintaining compliance with privacy regulations.
15
+ *
16
+ * @public
17
+ */
18
+ export interface CookieBannerProps {
19
+ /**
20
+ * Custom styles to apply to the banner and its child components
21
+ * @remarks Allows for deep customization of the banner's appearance while maintaining accessibility
22
+ * @type {Partial<CookieBannerTheme>}
23
+ * @default undefined
24
+ */
25
+ theme?: Partial<CookieBannerTheme>;
26
+ /**
27
+ * When true, removes all default styling from the component
28
+ * @remarks Useful for implementing completely custom designs
29
+ * @default false
30
+ */
31
+ noStyle?: boolean;
32
+ /**
33
+ * Content to display as the banner's title
34
+ * @remarks Supports string or ReactNode for rich content
35
+ * @default undefined
36
+ */
37
+ title?: ReactNode;
38
+ /**
39
+ * Content to display as the banner's description
40
+ * @remarks Supports string or ReactNode for rich content
41
+ * @default undefined
42
+ */
43
+ description?: ReactNode;
44
+ /**
45
+ * Content to display on the reject button
46
+ * @remarks Required by GDPR for explicit consent rejection
47
+ * @default undefined
48
+ */
49
+ rejectButtonText?: ReactNode;
50
+ /**
51
+ * Content to display on the customize button
52
+ * @remarks Opens detailed consent preferences
53
+ * @default undefined
54
+ */
55
+ customizeButtonText?: ReactNode;
56
+ /**
57
+ * Content to display on the accept button
58
+ * @remarks Primary action for accepting cookie preferences
59
+ * @default undefined
60
+ */
61
+ acceptButtonText?: ReactNode;
62
+ }
63
+ /**
64
+ * A customizable cookie consent banner component.
65
+ *
66
+ * @remarks
67
+ * This component serves as the main entry point for rendering a cookie consent banner.
68
+ * It provides a structured layout with customizable title, description, and action buttons
69
+ * for accepting, rejecting, or customizing cookie preferences.
70
+ *
71
+ * Key features:
72
+ * - Fully accessible by default
73
+ * - GDPR and CCPA compliant
74
+ * - Customizable appearance
75
+ * - Responsive design
76
+ * - Error boundary protection
77
+ * - Compound component pattern support
78
+ *
79
+ * @example
80
+ * Simple usage with default settings:
81
+ * ```tsx
82
+ * <CookieBanner />
83
+ * ```
84
+ *
85
+ * @example
86
+ * Customized usage with all props:
87
+ * ```tsx
88
+ * <CookieBanner
89
+ * theme={{
90
+ * root: "bg-white p-4",
91
+ * title: "text-xl font-bold",
92
+ * description: "text-gray-600",
93
+ * actions: "mt-4 flex gap-2"
94
+ * }}
95
+ * title="Cookie Settings"
96
+ * description="We use cookies to enhance your browsing experience"
97
+ * rejectButtonText="Decline"
98
+ * customizeButtonText="Preferences"
99
+ * acceptButtonText="Allow All"
100
+ * />
101
+ * ```
102
+ *
103
+ * @example
104
+ * Using compound components for custom layout:
105
+ * ```tsx
106
+ * <CookieBanner.Root>
107
+ * <CookieBanner.Content>
108
+ * <CookieBanner.Title>Cookie Settings</CookieBanner.Title>
109
+ * <CookieBanner.Description>
110
+ * Choose your cookie preferences
111
+ * </CookieBanner.Description>
112
+ * <CookieBanner.Actions>
113
+ * <CookieBanner.RejectButton>Decline</CookieBanner.RejectButton>
114
+ * <CookieBanner.CustomizeButton>Customize</CookieBanner.CustomizeButton>
115
+ * <CookieBanner.AcceptButton>Accept</CookieBanner.AcceptButton>
116
+ * </CookieBanner.Actions>
117
+ * </CookieBanner.Content>
118
+ * </CookieBanner.Root>
119
+ * ```
120
+ *
121
+ * @public
122
+ */
123
+ export declare const CookieBanner: FC<CookieBannerProps>;
124
+ /**
125
+ * Component type definition for the CookieBanner with its compound components.
126
+ *
127
+ * @remarks
128
+ * This interface extends the base CookieBanner component with additional sub-components
129
+ * that can be used to compose the banner's structure. Each component is designed to be
130
+ * fully accessible and customizable while maintaining compliance with privacy regulations.
131
+ *
132
+ * @public
133
+ */
134
+ //# sourceMappingURL=cookie-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-banner.d.ts","sourceRoot":"","sources":["../../src/cookie-banner/cookie-banner.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,qBAAqB,CAAC;AAe7B;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAE7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAwD9C,CAAC;AAEF;;;;;;;;;GASG"}
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+ import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
3
+ import * as __WEBPACK_EXTERNAL_MODULE__error_boundary_js_9edd64b3__ from "./error-boundary.js";
4
+ import "./cookie-banner.css";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__primitives_button_js_d48a4290__ from "../primitives/button.js";
6
+ import * as __WEBPACK_EXTERNAL_MODULE__atoms_root_js_8443a91f__ from "./atoms/root.js";
7
+ import * as __WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__ from "./components.js";
8
+ import * as __WEBPACK_EXTERNAL_MODULE__common_index_js_b6a017ad__ from "../common/index.js";
9
+ const CookieBanner = ({ theme, noStyle, title, description, rejectButtonText, customizeButtonText, acceptButtonText })=>{
10
+ const { cookieBanner } = (0, __WEBPACK_EXTERNAL_MODULE__common_index_js_b6a017ad__.useTranslations)();
11
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__error_boundary_js_9edd64b3__.ErrorBoundary, {
12
+ fallback: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
13
+ children: "Something went wrong with the Cookie Banner."
14
+ }),
15
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__atoms_root_js_8443a91f__.CookieBannerRoot, {
16
+ theme: theme,
17
+ noStyle: noStyle,
18
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerCard, {
19
+ children: [
20
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerHeader, {
21
+ children: [
22
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerTitle, {
23
+ children: title || cookieBanner.title
24
+ }),
25
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerDescription, {
26
+ children: description || cookieBanner.description
27
+ })
28
+ ]
29
+ }),
30
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerFooter, {
31
+ children: [
32
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__components_js_29fc1aed__.CookieBannerFooterSubGroup, {
33
+ children: [
34
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__primitives_button_js_d48a4290__.ConsentButton, {
35
+ action: "reject-consent",
36
+ closeCookieBanner: true,
37
+ themeKey: "cookie-banner.footer.reject-button",
38
+ "data-testid": "cookie-banner-reject-button",
39
+ children: rejectButtonText || cookieBanner.rejectAll
40
+ }),
41
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__primitives_button_js_d48a4290__.ConsentButton, {
42
+ action: "open-consent-dialog",
43
+ closeCookieBanner: true,
44
+ themeKey: "cookie-banner.footer.customize-button",
45
+ "data-testid": "cookie-banner-customize-button",
46
+ children: customizeButtonText || cookieBanner.customize
47
+ })
48
+ ]
49
+ }),
50
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__primitives_button_js_d48a4290__.ConsentButton, {
51
+ action: "accept-consent",
52
+ variant: "primary",
53
+ closeCookieBanner: true,
54
+ themeKey: "cookie-banner.footer.accept-button",
55
+ "data-testid": "cookie-banner-accept-button",
56
+ children: acceptButtonText || cookieBanner.acceptAll
57
+ })
58
+ ]
59
+ })
60
+ ]
61
+ })
62
+ })
63
+ });
64
+ };
65
+ export { CookieBanner };
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+ "use strict";
3
+ var __webpack_require__ = {};
4
+ (()=>{
5
+ __webpack_require__.d = function(exports1, definition) {
6
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ get: definition[key]
9
+ });
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.o = function(obj, prop) {
14
+ return Object.prototype.hasOwnProperty.call(obj, prop);
15
+ };
16
+ })();
17
+ (()=>{
18
+ __webpack_require__.r = function(exports1) {
19
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
20
+ value: 'Module'
21
+ });
22
+ Object.defineProperty(exports1, '__esModule', {
23
+ value: true
24
+ });
25
+ };
26
+ })();
27
+ var __webpack_exports__ = {};
28
+ __webpack_require__.r(__webpack_exports__);
29
+ __webpack_require__.d(__webpack_exports__, {
30
+ ErrorBoundary: ()=>ErrorBoundary
31
+ });
32
+ const external_react_namespaceObject = require("react");
33
+ class ErrorBoundary extends external_react_namespaceObject.Component {
34
+ constructor(props){
35
+ super(props);
36
+ this.state = {
37
+ hasError: false,
38
+ error: null,
39
+ errorInfo: null
40
+ };
41
+ }
42
+ static getDerivedStateFromError(error) {
43
+ return {
44
+ hasError: true,
45
+ error,
46
+ errorInfo: null
47
+ };
48
+ }
49
+ componentDidCatch(error, errorInfo) {
50
+ this.setState({
51
+ error,
52
+ errorInfo
53
+ });
54
+ console.error('Uncaught error:', error, errorInfo);
55
+ }
56
+ render() {
57
+ if (this.state.hasError) {
58
+ if ('function' == typeof this.props.fallback) return this.props.fallback(this.state.error, this.state.errorInfo);
59
+ return this.props.fallback;
60
+ }
61
+ return this.props.children;
62
+ }
63
+ }
64
+ var __webpack_export_target__ = exports;
65
+ for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
66
+ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
67
+ value: true
68
+ });
@@ -0,0 +1,56 @@
1
+ import { Component, type ErrorInfo, type ReactNode } from 'react';
2
+ /**
3
+ * Props for the ErrorBoundary component.
4
+ *
5
+ * @public
6
+ */
7
+ interface ErrorBoundaryProps {
8
+ /** @remarks React elements to be rendered within the boundary */
9
+ children: ReactNode;
10
+ /**
11
+ * UI to display when an error occurs.
12
+ *
13
+ * @remarks
14
+ * Can be either a React node or a function that receives error details and returns a React node.
15
+ * When provided as a function, it receives the error object and error info as arguments.
16
+ */
17
+ fallback: ReactNode | ((error: Error, errorInfo: ErrorInfo) => ReactNode);
18
+ }
19
+ /**
20
+ * Internal state for the ErrorBoundary component.
21
+ *
22
+ * @internal
23
+ */
24
+ interface ErrorBoundaryState {
25
+ /** @remarks Flag indicating if an error has been caught */
26
+ hasError: boolean;
27
+ /** @remarks The caught error object, if any */
28
+ error: Error | null;
29
+ /** @remarks Additional details about the error context */
30
+ errorInfo: ErrorInfo | null;
31
+ }
32
+ /**
33
+ * A React component that catches JavaScript errors in its child component tree.
34
+ *
35
+ * @remarks
36
+ * This boundary component provides error isolation and fallback UI rendering
37
+ * when errors occur in its child components. It prevents the entire app from
38
+ * crashing and allows graceful error handling.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * <ErrorBoundary fallback={<ErrorMessage />}>
43
+ * <ComponentThatMayError />
44
+ * </ErrorBoundary>
45
+ * ```
46
+ *
47
+ * @public
48
+ */
49
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
50
+ constructor(props: ErrorBoundaryProps);
51
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
52
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
53
+ render(): ReactNode;
54
+ }
55
+ export {};
56
+ //# sourceMappingURL=error-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/cookie-banner/error-boundary.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE;;;;GAIG;AACH,UAAU,kBAAkB;IAC3B,iEAAiE;IACjE,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC;CAC1E;AAED;;;;GAIG;AACH,UAAU,kBAAkB;IAC3B,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,0DAA0D;IAC1D,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAC3C,kBAAkB,EAClB,kBAAkB,CAClB;gBACY,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIjE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAOpD,MAAM;CAWN"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
3
+ class ErrorBoundary extends __WEBPACK_EXTERNAL_MODULE_react__.Component {
4
+ constructor(props){
5
+ super(props);
6
+ this.state = {
7
+ hasError: false,
8
+ error: null,
9
+ errorInfo: null
10
+ };
11
+ }
12
+ static getDerivedStateFromError(error) {
13
+ return {
14
+ hasError: true,
15
+ error,
16
+ errorInfo: null
17
+ };
18
+ }
19
+ componentDidCatch(error, errorInfo) {
20
+ this.setState({
21
+ error,
22
+ errorInfo
23
+ });
24
+ console.error('Uncaught error:', error, errorInfo);
25
+ }
26
+ render() {
27
+ if (this.state.hasError) {
28
+ if ('function' == typeof this.props.fallback) return this.props.fallback(this.state.error, this.state.errorInfo);
29
+ return this.props.fallback;
30
+ }
31
+ return this.props.children;
32
+ }
33
+ }
34
+ export { ErrorBoundary };
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = function(exports1, definition) {
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = function(obj, prop) {
13
+ return Object.prototype.hasOwnProperty.call(obj, prop);
14
+ };
15
+ })();
16
+ (()=>{
17
+ __webpack_require__.r = function(exports1) {
18
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
19
+ value: 'Module'
20
+ });
21
+ Object.defineProperty(exports1, '__esModule', {
22
+ value: true
23
+ });
24
+ };
25
+ })();
26
+ var __webpack_exports__ = {};
27
+ __webpack_require__.r(__webpack_exports__);
28
+ __webpack_require__.d(__webpack_exports__, {
29
+ CookieBannerFooterSubGroup: ()=>external_components_cjs_namespaceObject.CookieBannerFooterSubGroup,
30
+ CookieBannerRoot: ()=>root_cjs_namespaceObject.CookieBannerRoot,
31
+ CustomizeButton: ()=>external_components_cjs_namespaceObject.CustomizeButton,
32
+ CookieBannerRejectButton: ()=>external_components_cjs_namespaceObject.CookieBannerRejectButton,
33
+ CookieBannerCustomizeButton: ()=>external_components_cjs_namespaceObject.CookieBannerCustomizeButton,
34
+ Footer: ()=>external_components_cjs_namespaceObject.Footer,
35
+ Header: ()=>external_components_cjs_namespaceObject.Header,
36
+ Overlay: ()=>overlay_cjs_namespaceObject.Overlay,
37
+ CookieBannerFooter: ()=>external_components_cjs_namespaceObject.CookieBannerFooter,
38
+ CookieBannerHeader: ()=>external_components_cjs_namespaceObject.CookieBannerHeader,
39
+ CookieBannerDescription: ()=>external_components_cjs_namespaceObject.CookieBannerDescription,
40
+ RejectButton: ()=>external_components_cjs_namespaceObject.RejectButton,
41
+ FooterSubGroup: ()=>external_components_cjs_namespaceObject.FooterSubGroup,
42
+ Title: ()=>external_components_cjs_namespaceObject.Title,
43
+ CookieBannerAcceptButton: ()=>external_components_cjs_namespaceObject.CookieBannerAcceptButton,
44
+ CookieBannerOverlay: ()=>overlay_cjs_namespaceObject.CookieBannerOverlay,
45
+ Root: ()=>root_cjs_namespaceObject.Root,
46
+ Description: ()=>external_components_cjs_namespaceObject.Description,
47
+ Card: ()=>external_components_cjs_namespaceObject.Card,
48
+ AcceptButton: ()=>external_components_cjs_namespaceObject.AcceptButton,
49
+ CookieBannerCard: ()=>external_components_cjs_namespaceObject.CookieBannerCard,
50
+ CookieBannerTitle: ()=>external_components_cjs_namespaceObject.CookieBannerTitle
51
+ });
52
+ const overlay_cjs_namespaceObject = require("./atoms/overlay.cjs");
53
+ const root_cjs_namespaceObject = require("./atoms/root.cjs");
54
+ const external_components_cjs_namespaceObject = require("./components.cjs");
55
+ var __webpack_export_target__ = exports;
56
+ for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
57
+ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
58
+ value: true
59
+ });