@bikdotai/bik-component-library 0.0.725 → 0.0.726-beta.0

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 (147) hide show
  1. package/dist/cjs/assets/icons/searchIcon.svg.js +1 -0
  2. package/dist/cjs/assets/icons/whatsNew.svg.js +1 -0
  3. package/dist/cjs/components/QueryBuilder/Triggers/EVENTS/components/EventsTrigger.d.ts +1 -1
  4. package/dist/cjs/components/QueryBuilder/Triggers/EVENTS/selectors/useIGTriggerNameCacheSelector.d.ts +1 -1
  5. package/dist/cjs/components/QueryBuilder/Triggers/IG/components/IGTrigger.d.ts +1 -1
  6. package/dist/cjs/components/QueryBuilder/Triggers/IG/selectors/useIGTriggerNameCacheSelector.d.ts +1 -1
  7. package/dist/cjs/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.d.ts +2 -2
  8. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  9. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +2 -0
  10. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +2 -2
  11. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +1 -0
  12. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
  13. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.d.ts +4 -0
  14. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js +1 -0
  15. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.d.ts +4 -0
  16. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js +1 -0
  17. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.d.ts +4 -0
  18. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js +1 -0
  19. package/dist/cjs/components/feature-announcements/VideoModal.d.ts +3 -0
  20. package/dist/cjs/components/feature-announcements/VideoModal.js +1 -0
  21. package/dist/cjs/components/feature-announcements/constants/animations.d.ts +27 -0
  22. package/dist/cjs/components/feature-announcements/constants/animations.js +1 -0
  23. package/dist/cjs/components/feature-announcements/constants/dimensions.d.ts +56 -0
  24. package/dist/cjs/components/feature-announcements/constants/dimensions.js +1 -0
  25. package/dist/cjs/components/feature-announcements/constants/index.d.ts +19 -0
  26. package/dist/cjs/components/feature-announcements/constants/index.js +1 -0
  27. package/dist/cjs/components/feature-announcements/constants/localStorageKeys.d.ts +18 -0
  28. package/dist/cjs/components/feature-announcements/constants/localStorageKeys.js +1 -0
  29. package/dist/cjs/components/feature-announcements/constants/selectors.d.ts +21 -0
  30. package/dist/cjs/components/feature-announcements/constants/selectors.js +1 -0
  31. package/dist/cjs/components/feature-announcements/constants/zIndex.d.ts +10 -0
  32. package/dist/cjs/components/feature-announcements/constants/zIndex.js +1 -0
  33. package/dist/cjs/components/feature-announcements/hooks/index.d.ts +1 -0
  34. package/dist/cjs/components/feature-announcements/hooks/useFeatureAnnouncements.d.ts +13 -0
  35. package/dist/cjs/components/feature-announcements/hooks/useFeatureAnnouncements.js +1 -0
  36. package/dist/cjs/components/feature-announcements/index.d.ts +7 -0
  37. package/dist/cjs/components/feature-announcements/styles/index.d.ts +4 -0
  38. package/dist/cjs/components/feature-announcements/styles/joyride.styles.d.ts +125 -0
  39. package/dist/cjs/components/feature-announcements/styles/majorPopup.styles.d.ts +23 -0
  40. package/dist/cjs/components/feature-announcements/styles/majorPopup.styles.js +1 -0
  41. package/dist/cjs/components/feature-announcements/styles/minorPopup.styles.d.ts +16 -0
  42. package/dist/cjs/components/feature-announcements/styles/minorPopup.styles.js +1 -0
  43. package/dist/cjs/components/feature-announcements/styles/videoModal.styles.d.ts +13 -0
  44. package/dist/cjs/components/feature-announcements/styles/videoModal.styles.js +1 -0
  45. package/dist/cjs/components/feature-announcements/types/feature.types.d.ts +41 -0
  46. package/dist/cjs/components/feature-announcements/types/index.d.ts +4 -0
  47. package/dist/cjs/components/feature-announcements/types/props.types.d.ts +43 -0
  48. package/dist/cjs/components/feature-announcements/types/repository.types.d.ts +11 -0
  49. package/dist/cjs/components/feature-announcements/types/router.types.d.ts +7 -0
  50. package/dist/cjs/components/feature-announcements/useFeatureAnnouncements.d.ts +13 -0
  51. package/dist/cjs/components/feature-announcements/utils/animationHelpers.d.ts +18 -0
  52. package/dist/cjs/components/feature-announcements/utils/animationHelpers.js +1 -0
  53. package/dist/cjs/components/feature-announcements/utils/elementHelpers.d.ts +30 -0
  54. package/dist/cjs/components/feature-announcements/utils/elementHelpers.js +1 -0
  55. package/dist/cjs/components/feature-announcements/utils/htmlHelpers.d.ts +18 -0
  56. package/dist/cjs/components/feature-announcements/utils/htmlHelpers.js +1 -0
  57. package/dist/cjs/components/feature-announcements/utils/index.d.ts +3 -0
  58. package/dist/cjs/components/whats-new/WhatsNew.d.ts +23 -0
  59. package/dist/cjs/components/whats-new/WhatsNew.js +1 -0
  60. package/dist/cjs/components/whats-new/WhatsNew.styles.d.ts +11 -0
  61. package/dist/cjs/components/whats-new/WhatsNew.styles.js +185 -0
  62. package/dist/cjs/components/whats-new/WhatsNew.types.d.ts +58 -0
  63. package/dist/cjs/components/whats-new/WhatsNewButton.d.ts +3 -0
  64. package/dist/cjs/components/whats-new/WhatsNewButton.js +1 -0
  65. package/dist/cjs/components/whats-new/WhatsNewPanel.d.ts +3 -0
  66. package/dist/cjs/components/whats-new/WhatsNewPanel.js +1 -0
  67. package/dist/cjs/components/whats-new/WhatsNewProvider.d.ts +4 -0
  68. package/dist/cjs/components/whats-new/WhatsNewProvider.js +1 -0
  69. package/dist/cjs/components/whats-new/index.d.ts +7 -0
  70. package/dist/cjs/components/whats-new/useWhatsNew.d.ts +9 -0
  71. package/dist/cjs/components/whats-new/useWhatsNew.js +1 -0
  72. package/dist/cjs/index.d.ts +2 -0
  73. package/dist/cjs/index.js +1 -1
  74. package/dist/esm/assets/icons/searchIcon.svg.js +1 -0
  75. package/dist/esm/assets/icons/whatsNew.svg.js +1 -0
  76. package/dist/esm/components/QueryBuilder/Triggers/EVENTS/components/EventsTrigger.d.ts +1 -1
  77. package/dist/esm/components/QueryBuilder/Triggers/EVENTS/selectors/useIGTriggerNameCacheSelector.d.ts +1 -1
  78. package/dist/esm/components/QueryBuilder/Triggers/IG/components/IGTrigger.d.ts +1 -1
  79. package/dist/esm/components/QueryBuilder/Triggers/IG/selectors/useIGTriggerNameCacheSelector.d.ts +1 -1
  80. package/dist/esm/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.d.ts +2 -2
  81. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  82. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +2 -0
  83. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +2 -2
  84. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +1 -0
  85. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
  86. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.d.ts +4 -0
  87. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js +1 -0
  88. package/dist/esm/components/feature-announcements/MajorUpdatePopup.d.ts +4 -0
  89. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js +1 -0
  90. package/dist/esm/components/feature-announcements/MinorUpdatePopup.d.ts +4 -0
  91. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js +1 -0
  92. package/dist/esm/components/feature-announcements/VideoModal.d.ts +3 -0
  93. package/dist/esm/components/feature-announcements/VideoModal.js +1 -0
  94. package/dist/esm/components/feature-announcements/constants/animations.d.ts +27 -0
  95. package/dist/esm/components/feature-announcements/constants/animations.js +1 -0
  96. package/dist/esm/components/feature-announcements/constants/dimensions.d.ts +56 -0
  97. package/dist/esm/components/feature-announcements/constants/dimensions.js +1 -0
  98. package/dist/esm/components/feature-announcements/constants/index.d.ts +19 -0
  99. package/dist/esm/components/feature-announcements/constants/index.js +1 -0
  100. package/dist/esm/components/feature-announcements/constants/localStorageKeys.d.ts +18 -0
  101. package/dist/esm/components/feature-announcements/constants/localStorageKeys.js +1 -0
  102. package/dist/esm/components/feature-announcements/constants/selectors.d.ts +21 -0
  103. package/dist/esm/components/feature-announcements/constants/selectors.js +1 -0
  104. package/dist/esm/components/feature-announcements/constants/zIndex.d.ts +10 -0
  105. package/dist/esm/components/feature-announcements/constants/zIndex.js +1 -0
  106. package/dist/esm/components/feature-announcements/hooks/index.d.ts +1 -0
  107. package/dist/esm/components/feature-announcements/hooks/useFeatureAnnouncements.d.ts +13 -0
  108. package/dist/esm/components/feature-announcements/hooks/useFeatureAnnouncements.js +1 -0
  109. package/dist/esm/components/feature-announcements/index.d.ts +7 -0
  110. package/dist/esm/components/feature-announcements/styles/index.d.ts +4 -0
  111. package/dist/esm/components/feature-announcements/styles/joyride.styles.d.ts +125 -0
  112. package/dist/esm/components/feature-announcements/styles/majorPopup.styles.d.ts +23 -0
  113. package/dist/esm/components/feature-announcements/styles/majorPopup.styles.js +1 -0
  114. package/dist/esm/components/feature-announcements/styles/minorPopup.styles.d.ts +16 -0
  115. package/dist/esm/components/feature-announcements/styles/minorPopup.styles.js +1 -0
  116. package/dist/esm/components/feature-announcements/styles/videoModal.styles.d.ts +13 -0
  117. package/dist/esm/components/feature-announcements/styles/videoModal.styles.js +1 -0
  118. package/dist/esm/components/feature-announcements/types/feature.types.d.ts +41 -0
  119. package/dist/esm/components/feature-announcements/types/index.d.ts +4 -0
  120. package/dist/esm/components/feature-announcements/types/props.types.d.ts +43 -0
  121. package/dist/esm/components/feature-announcements/types/repository.types.d.ts +11 -0
  122. package/dist/esm/components/feature-announcements/types/router.types.d.ts +7 -0
  123. package/dist/esm/components/feature-announcements/useFeatureAnnouncements.d.ts +13 -0
  124. package/dist/esm/components/feature-announcements/utils/animationHelpers.d.ts +18 -0
  125. package/dist/esm/components/feature-announcements/utils/animationHelpers.js +1 -0
  126. package/dist/esm/components/feature-announcements/utils/elementHelpers.d.ts +30 -0
  127. package/dist/esm/components/feature-announcements/utils/elementHelpers.js +1 -0
  128. package/dist/esm/components/feature-announcements/utils/htmlHelpers.d.ts +18 -0
  129. package/dist/esm/components/feature-announcements/utils/htmlHelpers.js +1 -0
  130. package/dist/esm/components/feature-announcements/utils/index.d.ts +3 -0
  131. package/dist/esm/components/whats-new/WhatsNew.d.ts +23 -0
  132. package/dist/esm/components/whats-new/WhatsNew.js +1 -0
  133. package/dist/esm/components/whats-new/WhatsNew.styles.d.ts +11 -0
  134. package/dist/esm/components/whats-new/WhatsNew.styles.js +185 -0
  135. package/dist/esm/components/whats-new/WhatsNew.types.d.ts +58 -0
  136. package/dist/esm/components/whats-new/WhatsNewButton.d.ts +3 -0
  137. package/dist/esm/components/whats-new/WhatsNewButton.js +1 -0
  138. package/dist/esm/components/whats-new/WhatsNewPanel.d.ts +3 -0
  139. package/dist/esm/components/whats-new/WhatsNewPanel.js +1 -0
  140. package/dist/esm/components/whats-new/WhatsNewProvider.d.ts +4 -0
  141. package/dist/esm/components/whats-new/WhatsNewProvider.js +1 -0
  142. package/dist/esm/components/whats-new/index.d.ts +7 -0
  143. package/dist/esm/components/whats-new/useWhatsNew.d.ts +9 -0
  144. package/dist/esm/components/whats-new/useWhatsNew.js +1 -0
  145. package/dist/esm/index.d.ts +2 -0
  146. package/dist/esm/index.js +1 -1
  147. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ import{__awaiter as e}from"../../../_virtual/_tslib.js";import{useState as t,useCallback as r,useEffect as o}from"react";import{ANIMATION_TIMING as i}from"../constants/animations.js";import{QUERY_PARAMS as a,LOCAL_STORAGE_KEYS as n}from"../constants/localStorageKeys.js";const l=l=>{let{fetchVisibleFeatures:d,getStoreFeatureProgress:u,fetchFeatureById:s,markFeatureAsViewedForStore:c,isFeatureApplicableToCurrentPage:f,module:p,router:g}=l;var v;const y=(()=>{const[e,r]=t(null);return o((()=>{if("undefined"!=typeof window){let e=null;try{if(e=localStorage.getItem(n.STORE_ID)||localStorage.getItem(n.BIK_STORE_ID)||localStorage.getItem(n.CURRENT_STORE)||localStorage.getItem(n.STORE),!e){const t=localStorage.getItem(n.CURRENT_USER);t&&(e=JSON.parse(t).storeId)}e||(e=new URLSearchParams(window.location.search).get(n.QUERY_PARAM))}catch(e){}r(e)}}),[]),e})(),[m,D]=t([]),[U,w]=t([]),[h,R]=t([]),[I,S]=t(!1),[T,x]=t(null),E=r((()=>e(void 0,void 0,void 0,(function*(){if(y){S(!0),x(null);try{const[e,t]=yield d(p);if(e||!t)return void x("Failed to fetch features");const[r,o]=yield u(y),a=new Date,n="undefined"!=typeof window?window.location.pathname:"",l=e=>{if(!e.expirationDate)return!0;let t;return"object"==typeof e.expirationDate&&null!==e.expirationDate&&("seconds"in e.expirationDate||"nanoseconds"in e.expirationDate)?t=new Date(1e3*e.expirationDate.seconds):"string"==typeof e.expirationDate?t=new Date(e.expirationDate):e.expirationDate instanceof Date&&(t=e.expirationDate),!(!t||isNaN(t.getTime()))&&a<t},s=e=>{if("Major"===e.featureUpdateType){let t=[];return Array.isArray(e.pageUrls)?t=e.pageUrls:"object"==typeof e.pageUrls&&null!==e.pageUrls&&"length"in e.pageUrls&&(t=Array.from(e.pageUrls)),t.some((e=>{if(e===n)return!0;const t=e.replace(/\[([^\]]+)\]/g,"[^/]+").replace(/\//g,"\\/");return new RegExp(`^${t}$`).test(n)}))}return!0},c=t.filter((e=>{var t;const r=(null===(t=null==o?void 0:o.viewedFeatures)||void 0===t?void 0:t[e.id])||!1,i=e.archived||!1,a=f(e),n=l(e),d=s(e);return!r&&!i&&a&&n&&d})),g=c.filter((e=>"Major"===e.featureUpdateType)),v=c.filter((e=>"Minor"===e.featureUpdateType));D(c),w(g),setTimeout((()=>{R(v)}),i.MINOR_POPUP_DELAY)}catch(e){x("An unexpected error occurred")}finally{S(!1)}}}))),[y,d,u,f,p]),F=r((t=>e(void 0,void 0,void 0,(function*(){S(!0),x(null);try{const[e,r]=yield s(t);if(e||!r)return void x("Failed to fetch feature by ID");"Major"===r.featureUpdateType?w([r]):R([r]),D([r])}catch(e){x("An unexpected error occurred while fetching by ID")}finally{S(!1)}}))),[s]),A=r((t=>e(void 0,void 0,void 0,(function*(){if(!y)return;const[e]=yield c(y,t);D((e=>e.filter((e=>e.id!==t)))),w((e=>e.filter((e=>e.id!==t)))),R((e=>e.filter((e=>e.id!==t))))}))),[y,c]);return o((()=>{var e;const t=null===(e=null==g?void 0:g.query)||void 0===e?void 0:e[a.FEATURE_ID];t&&g?F(t):E()}),[null==g?void 0:g.pathname,null===(v=null==g?void 0:g.query)||void 0===v?void 0:v[a.FEATURE_ID],y,E,F,g]),{features:m,majorUpdateFeatures:U,minorUpdateFeatures:h,isLoading:I,error:T,markFeatureAsViewed:A,refetch:E}};export{l as useFeatureAnnouncements};
@@ -0,0 +1,7 @@
1
+ export { default as FeatureAnnouncementProvider } from './FeatureAnnouncementProvider';
2
+ export { default as MajorUpdatePopup } from './MajorUpdatePopup';
3
+ export { default as MinorUpdatePopup } from './MinorUpdatePopup';
4
+ export { VideoModal } from './VideoModal';
5
+ export { useFeatureAnnouncements } from './hooks/useFeatureAnnouncements';
6
+ export * from './types';
7
+ export { TEXT, ANIMATION_TIMING, POPUP_DIMENSIONS } from './constants';
@@ -0,0 +1,4 @@
1
+ export * from './majorPopup.styles';
2
+ export * from './minorPopup.styles';
3
+ export * from './videoModal.styles';
4
+ export * from './joyride.styles';
@@ -0,0 +1,125 @@
1
+ export declare const majorStepStyles: {
2
+ tooltip: {
3
+ padding: number;
4
+ backgroundColor: string;
5
+ borderRadius: string;
6
+ border: string;
7
+ filter: string;
8
+ boxShadow: string;
9
+ };
10
+ tooltipContent: {
11
+ padding: number;
12
+ };
13
+ buttonNext: {
14
+ display: string;
15
+ };
16
+ buttonBack: {
17
+ display: string;
18
+ };
19
+ buttonClose: {
20
+ display: string;
21
+ };
22
+ buttonSkip: {
23
+ display: string;
24
+ };
25
+ };
26
+ export declare const minorStepStyles: {
27
+ tooltip: {
28
+ padding: number;
29
+ backgroundColor: string;
30
+ borderRadius: "4px";
31
+ border: string;
32
+ filter: string;
33
+ boxShadow: string;
34
+ };
35
+ tooltipContent: {
36
+ padding: number;
37
+ };
38
+ buttonNext: {
39
+ display: string;
40
+ };
41
+ buttonBack: {
42
+ display: string;
43
+ };
44
+ buttonClose: {
45
+ display: string;
46
+ };
47
+ buttonSkip: {
48
+ display: string;
49
+ };
50
+ };
51
+ export declare const getMajorJoyrideStyles: (isClosing: boolean) => {
52
+ options: {
53
+ arrowColor: string;
54
+ backgroundColor: string;
55
+ overlayColor: string;
56
+ primaryColor: string;
57
+ textColor: string;
58
+ zIndex: 10000;
59
+ };
60
+ tooltip: {
61
+ padding: number;
62
+ backgroundColor: string;
63
+ borderRadius: string;
64
+ border: string;
65
+ filter: string;
66
+ boxShadow: string;
67
+ position: "fixed";
68
+ top: string;
69
+ left: string;
70
+ transform: string;
71
+ };
72
+ tooltipContent: {
73
+ padding: number;
74
+ };
75
+ buttonNext: {
76
+ display: string;
77
+ };
78
+ buttonBack: {
79
+ display: string;
80
+ };
81
+ buttonClose: {
82
+ display: string;
83
+ };
84
+ buttonSkip: {
85
+ display: string;
86
+ };
87
+ };
88
+ export declare const getMinorJoyrideStyles: (isClosing: boolean) => {
89
+ options: {
90
+ arrowColor: string;
91
+ backgroundColor: string;
92
+ overlayColor: string;
93
+ primaryColor: string;
94
+ textColor: string;
95
+ zIndex: 10000;
96
+ };
97
+ spotlight: {
98
+ boxShadow: string;
99
+ borderRadius: "8px";
100
+ };
101
+ tooltip: {
102
+ padding: number;
103
+ backgroundColor: string;
104
+ borderRadius: "4px";
105
+ border: string;
106
+ filter: string;
107
+ boxShadow: string;
108
+ maxWidth: string;
109
+ };
110
+ tooltipContent: {
111
+ padding: number;
112
+ };
113
+ buttonNext: {
114
+ display: string;
115
+ };
116
+ buttonBack: {
117
+ display: string;
118
+ };
119
+ buttonClose: {
120
+ display: string;
121
+ };
122
+ buttonSkip: {
123
+ display: string;
124
+ };
125
+ };
@@ -0,0 +1,23 @@
1
+ import { CSSProperties } from 'react';
2
+ export declare const getMajorPopupStyles: (startAnimation: boolean, transform: string) => {
3
+ container: CSSProperties;
4
+ skipButton: {
5
+ base: CSSProperties;
6
+ hover: CSSProperties;
7
+ };
8
+ imageContainer: CSSProperties;
9
+ image: CSSProperties;
10
+ imagePlaceholder: CSSProperties;
11
+ contentContainer: CSSProperties;
12
+ title: CSSProperties;
13
+ content: CSSProperties;
14
+ exploreButton: {
15
+ base: CSSProperties;
16
+ hover: CSSProperties;
17
+ };
18
+ navigationContainer: CSSProperties;
19
+ navigationButton: (disabled: boolean) => {
20
+ base: CSSProperties;
21
+ hover: CSSProperties;
22
+ };
23
+ };
@@ -0,0 +1 @@
1
+ import{BASE_COLORS as t}from"../../../constants/Theme.js";import{POPUP_TRANSITION as e}from"../constants/animations.js";import{POPUP_DIMENSIONS as n,BORDER_RADIUS as i,SPACING as o}from"../constants/dimensions.js";import{Z_INDEX as a}from"../constants/zIndex.js";const r=(r,l)=>({container:{width:`${n.MAJOR.width}px`,height:`${n.MAJOR.height}px`,display:"flex",backgroundColor:t.grayscale[900],borderRadius:i.POPUP,overflow:"hidden",position:"relative",transform:r?l:"scale(1)",opacity:r?0:1,transition:e},skipButton:{base:{position:"absolute",top:o.MAJOR.skipButtonTop,right:o.MAJOR.skipButtonRight,background:"transparent",border:"none",color:t.grayscale[400],fontSize:"14px",fontWeight:"500",cursor:"pointer",zIndex:a.SKIP_BUTTON,transition:"all 0.2s"},hover:{backgroundColor:t.grayscale[100],color:t.grayscale[700]}},imageContainer:{backgroundColor:t.grayscale[900],width:`${n.MAJOR.imageWidth}px`,height:`${n.MAJOR.imageHeight}px`,position:"relative",display:"flex",alignItems:"center",justifyContent:"center",padding:o.MAJOR.imagePadding},image:{width:`${n.MAJOR.imageInnerWidth}px`,height:`${n.MAJOR.imageInnerHeight}px`,objectFit:"cover"},imagePlaceholder:{color:t.grayscale[500],fontSize:"14px",textAlign:"center",width:`${n.MAJOR.imagePlaceholderWidth}px`,height:`${n.MAJOR.imagePlaceholderHeight}px`,display:"flex",alignItems:"center",justifyContent:"center"},contentContainer:{flex:1,display:"flex",margin:o.MAJOR.contentMargin,flexDirection:"column",justifyContent:"space-between",background:"transparent"},title:{fontSize:"16px",fontWeight:"600",padding:o.MAJOR.titlePadding,color:t.grayscale.white,lineHeight:"1.25",textAlign:"left"},content:{fontSize:"14px",lineHeight:"1.5",color:"rgba(255, 255, 255, 0.8)",textAlign:"left"},exploreButton:{base:{backgroundColor:"transparent",border:`1px solid ${t.warning[500]}`,color:t.warning[500],borderRadius:i.BUTTON,fontSize:"14px",fontWeight:"600",cursor:"pointer",width:"154px",height:"32px",transition:"all 0.2s",textAlign:"center",display:"flex",alignItems:"center",justifyContent:"center",marginTop:o.MAJOR.buttonMarginTop},hover:{backgroundColor:"rgba(254, 192, 45, 0.1)"}},navigationContainer:{position:"absolute",bottom:o.MAJOR.navigationBottom,right:o.MAJOR.navigationRight,display:"flex",gap:o.MAJOR.navigationGap,alignItems:"center"},navigationButton:e=>({base:{width:"24px",height:"24px",backgroundColor:"transparent",border:"none",color:e?t.grayscale[700]:t.grayscale.white,fontSize:"20px",cursor:e?"not-allowed":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.2s"},hover:{color:t.warning[500]}})});export{r as getMajorPopupStyles};
@@ -0,0 +1,16 @@
1
+ import { CSSProperties } from 'react';
2
+ export declare const getMinorPopupStyles: (startAnimation: boolean, transform: string) => {
3
+ container: CSSProperties;
4
+ imageContainer: CSSProperties;
5
+ imageWrapper: CSSProperties;
6
+ image: CSSProperties;
7
+ badge: CSSProperties;
8
+ badgeText: CSSProperties;
9
+ imagePlaceholder: CSSProperties;
10
+ contentContainer: CSSProperties;
11
+ title: CSSProperties;
12
+ content: CSSProperties;
13
+ actionsContainer: CSSProperties;
14
+ understoodText: CSSProperties;
15
+ exploreButton: CSSProperties;
16
+ };
@@ -0,0 +1 @@
1
+ import{BASE_COLORS as t}from"../../../constants/Theme.js";import{POPUP_TRANSITION as e}from"../constants/animations.js";import{POPUP_DIMENSIONS as i,BORDER_RADIUS as o,SPACING as n}from"../constants/dimensions.js";import{Z_INDEX as a}from"../constants/zIndex.js";const r=(r,s)=>({container:{width:`${i.MINOR.width}px`,height:`${i.MINOR.height}px`,display:"flex",backgroundColor:t.grayscale.white,borderRadius:o.POPUP,overflow:"hidden",position:"relative",boxShadow:"0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04)",transform:r?s:"scale(1)",opacity:r?0:1,transition:e},imageContainer:{backgroundColor:t.grayscale[50],borderRadius:o.IMAGE,position:"relative",display:"flex",alignItems:"center",justifyContent:"center",margin:n.MINOR.imageMargin,width:`${i.MINOR.imageWidth}px`,minWidth:`${i.MINOR.imageWidth}px`,maxWidth:`${i.MINOR.imageWidth}px`,height:`${i.MINOR.imageHeight}px`},imageWrapper:{position:"relative",width:`${i.MINOR.imageWidth}px`,height:`${i.MINOR.imageHeight}px`},image:{width:`${i.MINOR.imageWidth}px`,height:`${i.MINOR.imageHeight}px`,objectFit:"cover",borderRadius:o.IMAGE,display:"block"},badge:{position:"absolute",top:"0px",left:"0px",right:"0px",height:`${i.MINOR.badgeHeight}px`,backgroundColor:"rgba(0, 0, 0, 0.26)",borderRadius:`${o.IMAGE} ${o.IMAGE} ${o.IMAGE} ${o.IMAGE}`,display:"flex",alignItems:"center",justifyContent:"center",zIndex:a.IMAGE_BADGE},badgeText:{color:t.grayscale.white,fontWeight:"600",fontSize:"14px"},imagePlaceholder:{color:t.grayscale[500],fontSize:"14px",textAlign:"center",width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:t.grayscale[100],borderRadius:o.IMAGE},contentContainer:{flex:1,display:"flex",margin:n.MINOR.contentMargin,flexDirection:"column",justifyContent:"space-between",background:"transparent"},title:{fontSize:"16px",fontWeight:"600",padding:"0 0 0 0",color:t.grayscale[900],lineHeight:"1.25",textAlign:"left"},content:{fontSize:"12px",fontWeight:"400",lineHeight:"1.2",color:t.grayscale[700],textAlign:"left",maxHeight:"48px",overflow:"hidden",display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical"},actionsContainer:{position:"absolute",bottom:n.MINOR.actionsBottom,right:n.MINOR.actionsRight,display:"flex",gap:n.MINOR.actionsGap,alignItems:"center"},understoodText:{color:t.brand[800],fontSize:"14px",fontWeight:"500",cursor:"pointer",transition:"all 0.2s"},exploreButton:{backgroundColor:t.brand[800],border:"none",color:t.grayscale.white,borderRadius:o.BUTTON,fontSize:"14px",fontWeight:"600",cursor:"pointer",width:"154px",height:"32px",transition:"all 0.2s",textAlign:"center",display:"flex",alignItems:"center",justifyContent:"center"}});export{r as getMinorPopupStyles};
@@ -0,0 +1,13 @@
1
+ import { CSSProperties } from 'react';
2
+ export declare const videoModalStyles: {
3
+ backdrop: CSSProperties;
4
+ container: CSSProperties;
5
+ closeButton: {
6
+ base: CSSProperties;
7
+ hover: CSSProperties;
8
+ };
9
+ videoWrapper: CSSProperties;
10
+ iframe: CSSProperties;
11
+ video: CSSProperties;
12
+ noVideoMessage: CSSProperties;
13
+ };
@@ -0,0 +1 @@
1
+ import"../constants/animations.js";import{BORDER_RADIUS as o}from"../constants/dimensions.js";import{Z_INDEX as t}from"../constants/zIndex.js";const e={backdrop:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.9)",zIndex:t.VIDEO_MODAL,display:"flex",justifyContent:"center",alignItems:"center",padding:"20px"},container:{position:"relative",width:"90vw",height:"90vh",maxWidth:"1200px",maxHeight:"800px",backgroundColor:"black",borderRadius:o.VIDEO_MODAL,overflow:"hidden",boxShadow:"0 25px 50px rgba(0, 0, 0, 0.8)"},closeButton:{base:{position:"absolute",top:"20px",right:"20px",background:"rgba(0, 0, 0, 0.7)",border:"none",color:"white",fontSize:"24px",width:"40px",height:"40px",borderRadius:o.CLOSE_BUTTON,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",zIndex:t.CLOSE_BUTTON,transition:"background-color 0.2s"},hover:{backgroundColor:"rgba(0, 0, 0, 0.9)"}},videoWrapper:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},iframe:{borderRadius:o.VIDEO_MODAL},video:{width:"100%",height:"100%",objectFit:"contain",borderRadius:o.VIDEO_MODAL},noVideoMessage:{color:"white",fontSize:"18px",textAlign:"center"}};export{e as videoModalStyles};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Firestore Timestamp type
3
+ */
4
+ export interface FirestoreTimestamp {
5
+ seconds: number;
6
+ nanoseconds?: number;
7
+ }
8
+ /**
9
+ * Feature announcement data model
10
+ */
11
+ export interface FeatureAnnouncement {
12
+ id: string;
13
+ title: string;
14
+ body: string;
15
+ content: string;
16
+ buttonText: string;
17
+ displayImage: string;
18
+ featureTag: string;
19
+ featureUpdateType: 'Major' | 'Minor';
20
+ image: string;
21
+ module: string[];
22
+ pageUrls: string[];
23
+ productVideo: string;
24
+ redirectUrl: string;
25
+ updates: string;
26
+ visibility: boolean;
27
+ archived?: boolean;
28
+ createdAt: FirestoreTimestamp;
29
+ expirationDate?: FirestoreTimestamp | string | Date;
30
+ }
31
+ /**
32
+ * Store feature progress tracking
33
+ */
34
+ export interface StoreFeatureProgress {
35
+ storeId: string;
36
+ viewedFeatures: Record<string, boolean>;
37
+ }
38
+ /**
39
+ * Feature update types
40
+ */
41
+ export type FeatureUpdateType = 'Major' | 'Minor';
@@ -0,0 +1,4 @@
1
+ export * from './feature.types';
2
+ export * from './props.types';
3
+ export * from './repository.types';
4
+ export * from './router.types';
@@ -0,0 +1,43 @@
1
+ /// <reference types="react" />
2
+ import { FeatureAnnouncement } from './feature.types';
3
+ import { FeatureAnnouncementRepository } from './repository.types';
4
+ import { RouterProps } from './router.types';
5
+ /**
6
+ * Base popup component props
7
+ */
8
+ export interface PopupBaseProps {
9
+ feature: FeatureAnnouncement;
10
+ currentIndex: number;
11
+ totalFeatures: number;
12
+ onSkip: () => void;
13
+ onExplore: () => void;
14
+ onPrevious: () => void;
15
+ onNext: () => void;
16
+ setIsClosing?: (isClosing: boolean) => void;
17
+ }
18
+ /**
19
+ * Major update popup props
20
+ */
21
+ export interface MajorUpdatePopupProps extends PopupBaseProps {
22
+ }
23
+ /**
24
+ * Minor update popup props
25
+ */
26
+ export interface MinorUpdatePopupProps extends PopupBaseProps {
27
+ }
28
+ /**
29
+ * Video modal props
30
+ */
31
+ export interface VideoModalProps {
32
+ isOpen: boolean;
33
+ videoUrl: string;
34
+ onClose: () => void;
35
+ }
36
+ /**
37
+ * Feature announcement provider props
38
+ */
39
+ export interface FeatureAnnouncementProviderProps extends FeatureAnnouncementRepository {
40
+ children: React.ReactNode;
41
+ module?: string;
42
+ router?: RouterProps;
43
+ }
@@ -0,0 +1,11 @@
1
+ import { FeatureAnnouncement, StoreFeatureProgress } from './feature.types';
2
+ /**
3
+ * Repository function types for dependency injection
4
+ */
5
+ export interface FeatureAnnouncementRepository {
6
+ fetchVisibleFeatures: (module?: string) => Promise<[Error | null, FeatureAnnouncement[] | null]>;
7
+ getStoreFeatureProgress: (storeId: string) => Promise<[Error | null, StoreFeatureProgress | null]>;
8
+ fetchFeatureById: (featureId: string) => Promise<[Error | null, FeatureAnnouncement | null]>;
9
+ markFeatureAsViewedForStore: (storeId: string, featureId: string) => Promise<[Error | null]>;
10
+ isFeatureApplicableToCurrentPage: (feature: FeatureAnnouncement) => boolean;
11
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Router properties
3
+ */
4
+ export interface RouterProps {
5
+ pathname: string;
6
+ query: Record<string, string | string[] | undefined>;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { FeatureAnnouncement, FeatureAnnouncementRepository, RouterProps } from './types';
2
+ export declare const useFeatureAnnouncements: ({ fetchVisibleFeatures, getStoreFeatureProgress, fetchFeatureById, markFeatureAsViewedForStore, isFeatureApplicableToCurrentPage, module, router, }: FeatureAnnouncementRepository & {
3
+ module?: string | undefined;
4
+ router?: RouterProps | undefined;
5
+ }) => {
6
+ features: FeatureAnnouncement[];
7
+ majorUpdateFeatures: FeatureAnnouncement[];
8
+ minorUpdateFeatures: FeatureAnnouncement[];
9
+ isLoading: boolean;
10
+ error: string | null;
11
+ markFeatureAsViewed: (featureId: string) => Promise<void>;
12
+ refetch: () => Promise<void>;
13
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Calculate transform for closing animation
3
+ * @param popupElement - Popup element reference
4
+ * @param targetElement - Target element to animate towards
5
+ * @returns Transform CSS string
6
+ */
7
+ export declare const calculateCloseTransform: (popupElement: HTMLElement, targetElement: Element) => string;
8
+ /**
9
+ * Hide Joyride arrow element
10
+ * @param popupRef - Reference to popup element
11
+ */
12
+ export declare const hideJoyrideArrow: (popupRef: HTMLElement | null) => void;
13
+ /**
14
+ * Execute callback after animation completes
15
+ * @param callback - Function to execute
16
+ * @param delay - Optional delay override
17
+ */
18
+ export declare const executeAfterAnimation: (callback: () => void, delay?: number) => void;
@@ -0,0 +1 @@
1
+ import{ANIMATION_TIMING as t}from"../constants/animations.js";const e=(t,e)=>{const i=t.getBoundingClientRect(),o=e.getBoundingClientRect();return`translate(${o.left+o.width/2-(i.left+i.width/2)}px, ${o.top+o.height/2-(i.top+i.height/2)}px) scale(0)`},i=t=>{if(!t)return;const e=t.closest('[class*="react-joyride__tooltip"]');if(!e)return;const i=e.querySelector('[class*="react-joyride__arrow"]');i&&(i.style.display="none",i.style.visibility="hidden",i.style.opacity="0")},o=function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.CLOSE_DURATION;setTimeout(e,i)};export{e as calculateCloseTransform,o as executeAfterAnimation,i as hideJoyrideArrow};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Find What's New button using multiple strategies
3
+ * @returns Element or null
4
+ */
5
+ export declare const findWhatsNewButton: () => Element | null;
6
+ /**
7
+ * Find target element for minor update
8
+ * @param featureTag - Feature tag selector
9
+ * @returns Element or null
10
+ */
11
+ export declare const findFeatureTagElement: (featureTag: string) => Element | null;
12
+ /**
13
+ * Normalize selector string
14
+ * @param selector - Selector string
15
+ * @returns Normalized selector
16
+ */
17
+ export declare const normalizeSelector: (selector: string) => string;
18
+ /**
19
+ * Check if element is fully visible in viewport
20
+ * @param element - Element to check
21
+ * @returns True if element is fully visible
22
+ */
23
+ export declare const isElementInViewport: (element: Element) => boolean;
24
+ /**
25
+ * Scroll to element smoothly with offset
26
+ * @param element - Element to scroll to
27
+ * @param offset - Offset from top (default 120px for popup space)
28
+ * @returns Promise that resolves when scroll completes
29
+ */
30
+ export declare const scrollToElementSmooth: (element: Element, offset?: number) => Promise<void>;
@@ -0,0 +1 @@
1
+ import"../constants/animations.js";import{SELECTORS as t}from"../constants/selectors.js";const e=()=>{let e=document.querySelector(t.WHATS_NEW_BUTTON);if(e)return e;if(e=document.querySelector(t.MAIN_ICON_CLASS),e)return e;const n=document.querySelector(t.SVG_VIEWBOX);if(n){if(n.querySelector(t.CLIPPATH_PATTERN))return n.closest(t.WHATS_NEW_BUTTON)||n.parentElement}return null},n=t=>{const e=t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`;return document.querySelector(e)},o=t=>t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`,r=t=>{const e=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,o=window.innerWidth||document.documentElement.clientWidth,r=e.top>=120&&e.bottom<=n,i=e.left>=0&&e.right<=o;return r&&i},i=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:120;return new Promise((n=>{if(r(t))return void n();const o=t.getBoundingClientRect().top+window.pageYOffset-e;let i;window.scrollTo({top:o,behavior:"smooth"});const s=()=>{clearTimeout(i),i=setTimeout((()=>{window.removeEventListener("scroll",s),setTimeout((()=>n()),100)}),100)};window.addEventListener("scroll",s,{passive:!0}),setTimeout((()=>{window.removeEventListener("scroll",s),n()}),1e3)}))};export{n as findFeatureTagElement,e as findWhatsNewButton,r as isElementInViewport,o as normalizeSelector,i as scrollToElementSmooth};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Decode HTML entities in text
3
+ * @param text - Text containing HTML entities
4
+ * @returns Decoded text
5
+ */
6
+ export declare const decodeHTMLEntities: (text: string) => string;
7
+ /**
8
+ * Format video URL for embedding
9
+ * @param videoUrl - Original video URL
10
+ * @returns Formatted video URL
11
+ */
12
+ export declare const formatVideoUrl: (videoUrl: string) => string;
13
+ /**
14
+ * Check if URL is a YouTube video
15
+ * @param videoUrl - Video URL to check
16
+ * @returns True if YouTube video
17
+ */
18
+ export declare const isYouTubeVideo: (videoUrl: string) => boolean;
@@ -0,0 +1 @@
1
+ const e=e=>{if(!e)return"";const t=document.createElement("textarea");return t.innerHTML=e,t.value},t=e=>e.replace("watch?v=","embed/").replace("youtu.be/","youtube.com/embed/"),u=e=>e.includes("youtube.com")||e.includes("youtu.be");export{e as decodeHTMLEntities,t as formatVideoUrl,u as isYouTubeVideo};
@@ -0,0 +1,3 @@
1
+ export * from './htmlHelpers';
2
+ export * from './animationHelpers';
3
+ export * from './elementHelpers';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { WhatsNewContent } from './WhatsNew.types';
3
+ interface WhatsNewProps {
4
+ title?: string;
5
+ tooltip?: string;
6
+ searchPlaceholder?: string;
7
+ emptyStateTitle?: string;
8
+ emptyStateDescription?: string;
9
+ noResultsText?: string;
10
+ width?: string;
11
+ onContentClick?: (content: WhatsNewContent) => void;
12
+ renderCustomContent?: (content: WhatsNewContent) => React.ReactNode;
13
+ buttonTestId?: string;
14
+ iconWidth?: number;
15
+ iconHeight?: number;
16
+ customIcon?: React.ComponentType<{
17
+ width?: number;
18
+ height?: number;
19
+ color?: string;
20
+ }>;
21
+ }
22
+ export declare const WhatsNew: React.FC<WhatsNewProps>;
23
+ export {};
@@ -0,0 +1 @@
1
+ import{j as t}from"../../node_modules/react/jsx-runtime.js";import{useState as e}from"react";import{WhatsNewButton as o}from"./WhatsNewButton.js";import{WhatsNewPanel as n}from"./WhatsNewPanel.js";import{useWhatsNewContext as s}from"./WhatsNewProvider.js";const i=i=>{let{title:r="What's new",tooltip:a="What's new",searchPlaceholder:c="Search posts",emptyStateTitle:h="Nothing new!",emptyStateDescription:m="There are no new updates or features at the moment. Check back soon!",noResultsText:l="Sorry, no results found.",width:d="480px",onContentClick:p,renderCustomContent:u,buttonTestId:C="whats-new-button",iconWidth:w=32,iconHeight:j=32,customIcon:x}=i;const[f,g]=e(!1),{whatsNewContent:W,isLoading:S,newContentCount:T}=s();return t.jsxs(t.Fragment,{children:[t.jsx(o,{onClick:()=>g(!0),newContentCount:T,isOpen:f,isLoading:S,tooltip:a,testId:C,iconWidth:w,iconHeight:j,customIcon:x}),t.jsx(n,{isOpen:f,onClose:()=>g(!1),content:W,isLoading:S,title:r,searchPlaceholder:c,emptyStateTitle:h,emptyStateDescription:m,noResultsText:l,width:d,onContentClick:t=>{p&&p(t)},renderCustomContent:u})]})};export{i as WhatsNew};
@@ -0,0 +1,11 @@
1
+ export declare const WhatsNewIconContainer: import("styled-components").StyledComponent<"div", any, {
2
+ count?: number | undefined;
3
+ }, never>;
4
+ export declare const WhatsNewWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
5
+ export declare const MainContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
6
+ export declare const MainCardContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
7
+ export declare const BackgroundImageContainer: import("styled-components").StyledComponent<"div", any, {
8
+ imageUrl: string;
9
+ height?: string | undefined;
10
+ width?: string | undefined;
11
+ }, never>;
@@ -0,0 +1,185 @@
1
+ import e from"styled-components";import{COLORS as t}from"../../constants/Theme.js";const i=e.div`
2
+ cursor: pointer;
3
+ position: relative;
4
+
5
+ .main-icon-class {
6
+ padding: 6px;
7
+ border-radius: 32px;
8
+ display: flex;
9
+ justify-content: center;
10
+ align-items: center;
11
+ transition: background-color 0.2s ease;
12
+ }
13
+
14
+ .icon-active {
15
+ background: ${t.background.brandLight};
16
+ }
17
+
18
+ .main-icon-class:hover {
19
+ background: ${t.background.base};
20
+ }
21
+
22
+ .notification--count {
23
+ box-sizing: border-box;
24
+ position: absolute;
25
+ right: 6px;
26
+ top: 4px;
27
+ border-radius: 50%;
28
+ width: 14px;
29
+ height: 14px;
30
+ background: ${t.background.negative.vibrant};
31
+ border: 1.25px solid ${t.surface.standard};
32
+ display: flex;
33
+ justify-content: center;
34
+ align-items: center;
35
+ }
36
+
37
+ .count--text {
38
+ font-size: 8px;
39
+ line-height: 7.2px;
40
+ font-weight: 400;
41
+ color: ${t.surface.standard};
42
+ }
43
+ `,n=e.div`
44
+ overflow-y: auto;
45
+ display: flex;
46
+ flex-direction: column;
47
+ height: 100%;
48
+ max-height: calc(100vh - 60px);
49
+
50
+ &::-webkit-scrollbar {
51
+ display: block;
52
+ width: 6px;
53
+ }
54
+
55
+ ::-webkit-scrollbar-thumb {
56
+ background: ${t.content.inactive};
57
+ border-radius: 3px;
58
+ min-height: 30px;
59
+ }
60
+
61
+ .icon--wrapper {
62
+ display: flex;
63
+ justify-content: center;
64
+ align-items: center;
65
+ width: 64px;
66
+ height: 64px;
67
+ border-radius: 50%;
68
+ background: ${t.background.base};
69
+ margin-bottom: 16px;
70
+ }
71
+
72
+ .no--data--found {
73
+ display: flex;
74
+ flex-direction: column;
75
+ justify-content: center;
76
+ align-items: center;
77
+ height: 300px;
78
+ text-align: center;
79
+ padding: 24px;
80
+ }
81
+
82
+ .text--align {
83
+ text-align: center;
84
+ }
85
+
86
+ .scroller {
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: 16px;
90
+ padding: 16px 0;
91
+ }
92
+
93
+ .full--width {
94
+ width: 100%;
95
+ }
96
+
97
+ .flex {
98
+ display: flex;
99
+ }
100
+
101
+ .flex--row {
102
+ flex-direction: row;
103
+ }
104
+
105
+ .flex--column {
106
+ flex-direction: column;
107
+ }
108
+
109
+ .mt-8 {
110
+ margin-top: 8px;
111
+ }
112
+
113
+ .mt-20 {
114
+ margin-top: 20px;
115
+ }
116
+
117
+ .mt--8 {
118
+ margin-top: 8px;
119
+ }
120
+
121
+ .mt--12 {
122
+ margin-top: 12px;
123
+ }
124
+
125
+ .mb-mt-8 {
126
+ margin-bottom: 8px;
127
+ margin-top: 8px;
128
+ }
129
+
130
+ .padding--16 {
131
+ padding: 16px;
132
+ }
133
+
134
+ .card--desc {
135
+ max-height: 200px;
136
+ overflow-y: auto;
137
+ font-size: 12px;
138
+ color: ${t.content.secondary};
139
+
140
+ p {
141
+ margin-bottom: 0px;
142
+ }
143
+ }
144
+
145
+ .created--at {
146
+ align-items: center;
147
+ gap: 4px;
148
+ }
149
+
150
+ .new--content--tag {
151
+ padding: 2px 6px;
152
+ gap: 4px;
153
+ border-radius: 14px;
154
+ background: ${t.background.warning.vibrant};
155
+ display: flex;
156
+ justify-content: center;
157
+ align-items: center;
158
+ margin-right: 8px;
159
+ }
160
+ `,r=e.div`
161
+ display: flex;
162
+ flex-direction: column;
163
+ height: 100%;
164
+ `,o=e.div`
165
+ background: ${t.surface.standard};
166
+ border-radius: 8px;
167
+ border: 1px solid ${t.stroke.primary};
168
+ padding: 16px;
169
+ display: flex;
170
+ flex-direction: column;
171
+ gap: 8px;
172
+ transition: all 0.2s ease;
173
+
174
+ &:hover {
175
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
176
+ }
177
+ `,a=e.div`
178
+ background-image: url(${e=>e.imageUrl});
179
+ background-size: cover;
180
+ background-position: center;
181
+ background-repeat: no-repeat;
182
+ height: ${e=>e.height||"200px"};
183
+ width: ${e=>e.width||"100%"};
184
+ border-radius: 4px;
185
+ `;export{a as BackgroundImageContainer,o as MainCardContainer,r as MainContainer,i as WhatsNewIconContainer,n as WhatsNewWrapper};