@knocklabs/react 0.2.8 → 0.2.10

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 (174) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/index.css +1 -1
  3. package/dist/cjs/modules/core/components/Button/Button.js +1 -1
  4. package/dist/cjs/modules/core/components/Button/Button.js.map +1 -1
  5. package/dist/cjs/modules/core/components/Button/ButtonGroup.js +1 -1
  6. package/dist/cjs/modules/core/components/Button/ButtonGroup.js.map +1 -1
  7. package/dist/cjs/modules/core/components/Button/ButtonSpinner.js +1 -1
  8. package/dist/cjs/modules/core/components/Button/ButtonSpinner.js.map +1 -1
  9. package/dist/cjs/modules/core/components/Button/styles.css.js.map +1 -0
  10. package/dist/cjs/modules/core/components/Icons/Bell.js +1 -1
  11. package/dist/cjs/modules/core/components/Icons/Bell.js.map +1 -1
  12. package/dist/cjs/modules/core/components/Icons/CheckmarkCircle.js +1 -1
  13. package/dist/cjs/modules/core/components/Icons/CheckmarkCircle.js.map +1 -1
  14. package/dist/cjs/modules/core/components/Icons/ChevronDown.js +1 -1
  15. package/dist/cjs/modules/core/components/Icons/ChevronDown.js.map +1 -1
  16. package/dist/cjs/modules/core/components/Icons/CloseCircle.js +1 -1
  17. package/dist/cjs/modules/core/components/Icons/CloseCircle.js.map +1 -1
  18. package/dist/cjs/modules/core/components/Spinner/Spinner.js +2 -2
  19. package/dist/cjs/modules/core/components/Spinner/Spinner.js.map +1 -1
  20. package/dist/cjs/modules/core/hooks/useComponentVisible.js.map +1 -1
  21. package/dist/cjs/modules/core/hooks/useOnBottomScroll.js.map +1 -1
  22. package/dist/cjs/modules/core/hooks/useOutsideClick.js.map +1 -1
  23. package/dist/cjs/modules/feed/components/EmptyFeed/EmptyFeed.js +1 -1
  24. package/dist/cjs/modules/feed/components/EmptyFeed/EmptyFeed.js.map +1 -1
  25. package/dist/cjs/modules/feed/components/EmptyFeed/styles.css.js.map +1 -0
  26. package/dist/cjs/modules/feed/components/NotificationCell/ArchiveButton.js +1 -1
  27. package/dist/cjs/modules/feed/components/NotificationCell/ArchiveButton.js.map +1 -1
  28. package/dist/cjs/modules/feed/components/NotificationCell/Avatar.js +1 -1
  29. package/dist/cjs/modules/feed/components/NotificationCell/Avatar.js.map +1 -1
  30. package/dist/cjs/modules/feed/components/NotificationCell/NotificationCell.js +1 -1
  31. package/dist/cjs/modules/feed/components/NotificationCell/NotificationCell.js.map +1 -1
  32. package/dist/cjs/modules/feed/components/NotificationCell/styles.css.js.map +1 -0
  33. package/dist/cjs/modules/feed/components/NotificationFeed/Dropdown.js +1 -1
  34. package/dist/cjs/modules/feed/components/NotificationFeed/Dropdown.js.map +1 -1
  35. package/dist/cjs/modules/feed/components/NotificationFeed/MarkAsRead.js +1 -1
  36. package/dist/cjs/modules/feed/components/NotificationFeed/MarkAsRead.js.map +1 -1
  37. package/dist/cjs/modules/feed/components/NotificationFeed/NotificationFeed.js +1 -1
  38. package/dist/cjs/modules/feed/components/NotificationFeed/NotificationFeed.js.map +1 -1
  39. package/dist/cjs/modules/feed/components/NotificationFeed/NotificationFeedHeader.js +1 -1
  40. package/dist/cjs/modules/feed/components/NotificationFeed/NotificationFeedHeader.js.map +1 -1
  41. package/dist/cjs/modules/feed/components/NotificationFeed/styles.css.js.map +1 -0
  42. package/dist/cjs/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.js +1 -1
  43. package/dist/cjs/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.js.map +1 -1
  44. package/dist/cjs/modules/feed/components/NotificationFeedContainer/styles.css.js.map +1 -0
  45. package/dist/cjs/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.js +1 -1
  46. package/dist/cjs/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.js.map +1 -1
  47. package/dist/cjs/modules/feed/components/NotificationFeedPopover/styles.css.js.map +1 -0
  48. package/dist/cjs/modules/feed/components/NotificationIconButton/NotificationIconButton.js +1 -1
  49. package/dist/cjs/modules/feed/components/NotificationIconButton/NotificationIconButton.js.map +1 -1
  50. package/dist/cjs/modules/feed/components/NotificationIconButton/styles.css.js.map +1 -0
  51. package/dist/cjs/modules/feed/components/UnseenBadge/UnseenBadge.js +1 -1
  52. package/dist/cjs/modules/feed/components/UnseenBadge/UnseenBadge.js.map +1 -1
  53. package/dist/cjs/modules/feed/components/UnseenBadge/styles.css.js.map +1 -0
  54. package/dist/cjs/modules/slack/components/SlackAddChannelInput/SlackAddChannelInput.js +1 -1
  55. package/dist/cjs/modules/slack/components/SlackAddChannelInput/SlackAddChannelInput.js.map +1 -1
  56. package/dist/cjs/modules/slack/components/SlackAddChannelInput/styles.css.js.map +1 -0
  57. package/dist/cjs/modules/slack/components/SlackAuthButton/SlackAuthButton.js +1 -1
  58. package/dist/cjs/modules/slack/components/SlackAuthButton/SlackAuthButton.js.map +1 -1
  59. package/dist/cjs/modules/slack/components/SlackAuthButton/styles.css.js.map +1 -0
  60. package/dist/cjs/modules/slack/components/SlackAuthContainer/SlackAuthContainer.js +1 -1
  61. package/dist/cjs/modules/slack/components/SlackAuthContainer/SlackAuthContainer.js.map +1 -1
  62. package/dist/cjs/modules/slack/components/SlackAuthContainer/styles.css.js.map +1 -0
  63. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelCombobox.js +1 -1
  64. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelCombobox.js.map +1 -1
  65. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelListBox.js +1 -1
  66. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelListBox.js.map +1 -1
  67. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelOption.js +1 -1
  68. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackChannelOption.js.map +1 -1
  69. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTag.js +1 -1
  70. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTag.js.map +1 -1
  71. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTagList.js +1 -1
  72. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTagList.js.map +1 -1
  73. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectionError.js +1 -1
  74. package/dist/cjs/modules/slack/components/SlackChannelCombobox/SlackConnectionError.js.map +1 -1
  75. package/dist/cjs/modules/slack/components/SlackChannelCombobox/helpers.js.map +1 -1
  76. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/CheckmarkIcon.js +1 -1
  77. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/CheckmarkIcon.js.map +1 -1
  78. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/CloseIcon.js +1 -1
  79. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/CloseIcon.js.map +1 -1
  80. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/HashtagIcon.js +1 -1
  81. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/HashtagIcon.js.map +1 -1
  82. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/InfoIcon.js +1 -1
  83. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/InfoIcon.js.map +1 -1
  84. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/LockIcon.js +1 -1
  85. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/LockIcon.js.map +1 -1
  86. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/SearchIcon.js +1 -1
  87. package/dist/cjs/modules/slack/components/SlackChannelCombobox/icons/SearchIcon.js.map +1 -1
  88. package/dist/cjs/modules/slack/components/SlackChannelCombobox/styles.css.js.map +1 -0
  89. package/dist/cjs/modules/slack/components/SlackIcon/SlackIcon.js +1 -1
  90. package/dist/cjs/modules/slack/components/SlackIcon/SlackIcon.js.map +1 -1
  91. package/dist/cjs/modules/slack/theme.css.js.map +1 -0
  92. package/dist/cjs/theme.css.js.map +1 -0
  93. package/dist/esm/modules/core/components/Button/Button.mjs +14 -30
  94. package/dist/esm/modules/core/components/Button/Button.mjs.map +1 -1
  95. package/dist/esm/modules/core/components/Button/ButtonGroup.mjs +5 -3
  96. package/dist/esm/modules/core/components/Button/ButtonGroup.mjs.map +1 -1
  97. package/dist/esm/modules/core/components/Button/ButtonSpinner.mjs +6 -10
  98. package/dist/esm/modules/core/components/Button/ButtonSpinner.mjs.map +1 -1
  99. package/dist/esm/modules/core/components/Icons/Bell.mjs +7 -25
  100. package/dist/esm/modules/core/components/Icons/Bell.mjs.map +1 -1
  101. package/dist/esm/modules/core/components/Icons/CheckmarkCircle.mjs +3 -33
  102. package/dist/esm/modules/core/components/Icons/CheckmarkCircle.mjs.map +1 -1
  103. package/dist/esm/modules/core/components/Icons/ChevronDown.mjs +3 -22
  104. package/dist/esm/modules/core/components/Icons/ChevronDown.mjs.map +1 -1
  105. package/dist/esm/modules/core/components/Icons/CloseCircle.mjs +3 -19
  106. package/dist/esm/modules/core/components/Icons/CloseCircle.mjs.map +1 -1
  107. package/dist/esm/modules/core/components/Spinner/Spinner.mjs +13 -47
  108. package/dist/esm/modules/core/components/Spinner/Spinner.mjs.map +1 -1
  109. package/dist/esm/modules/core/hooks/useComponentVisible.mjs +3 -1
  110. package/dist/esm/modules/core/hooks/useComponentVisible.mjs.map +1 -1
  111. package/dist/esm/modules/core/hooks/useOnBottomScroll.mjs +1 -3
  112. package/dist/esm/modules/core/hooks/useOnBottomScroll.mjs.map +1 -1
  113. package/dist/esm/modules/core/hooks/useOutsideClick.mjs.map +1 -1
  114. package/dist/esm/modules/feed/components/EmptyFeed/EmptyFeed.mjs +10 -9
  115. package/dist/esm/modules/feed/components/EmptyFeed/EmptyFeed.mjs.map +1 -1
  116. package/dist/esm/modules/feed/components/NotificationCell/ArchiveButton.mjs +26 -36
  117. package/dist/esm/modules/feed/components/NotificationCell/ArchiveButton.mjs.map +1 -1
  118. package/dist/esm/modules/feed/components/NotificationCell/Avatar.mjs +10 -7
  119. package/dist/esm/modules/feed/components/NotificationCell/Avatar.mjs.map +1 -1
  120. package/dist/esm/modules/feed/components/NotificationCell/NotificationCell.mjs +39 -68
  121. package/dist/esm/modules/feed/components/NotificationCell/NotificationCell.mjs.map +1 -1
  122. package/dist/esm/modules/feed/components/NotificationFeed/Dropdown.mjs +12 -13
  123. package/dist/esm/modules/feed/components/NotificationFeed/Dropdown.mjs.map +1 -1
  124. package/dist/esm/modules/feed/components/NotificationFeed/MarkAsRead.mjs +17 -27
  125. package/dist/esm/modules/feed/components/NotificationFeed/MarkAsRead.mjs.map +1 -1
  126. package/dist/esm/modules/feed/components/NotificationFeed/NotificationFeed.mjs +48 -57
  127. package/dist/esm/modules/feed/components/NotificationFeed/NotificationFeed.mjs.map +1 -1
  128. package/dist/esm/modules/feed/components/NotificationFeed/NotificationFeedHeader.mjs +12 -27
  129. package/dist/esm/modules/feed/components/NotificationFeed/NotificationFeedHeader.mjs.map +1 -1
  130. package/dist/esm/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.mjs +5 -5
  131. package/dist/esm/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.mjs.map +1 -1
  132. package/dist/esm/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.mjs +45 -48
  133. package/dist/esm/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.mjs.map +1 -1
  134. package/dist/esm/modules/feed/components/NotificationIconButton/NotificationIconButton.mjs +13 -22
  135. package/dist/esm/modules/feed/components/NotificationIconButton/NotificationIconButton.mjs.map +1 -1
  136. package/dist/esm/modules/feed/components/UnseenBadge/UnseenBadge.mjs +9 -9
  137. package/dist/esm/modules/feed/components/UnseenBadge/UnseenBadge.mjs.map +1 -1
  138. package/dist/esm/modules/slack/components/SlackAddChannelInput/SlackAddChannelInput.mjs +21 -38
  139. package/dist/esm/modules/slack/components/SlackAddChannelInput/SlackAddChannelInput.mjs.map +1 -1
  140. package/dist/esm/modules/slack/components/SlackAuthButton/SlackAuthButton.mjs +26 -62
  141. package/dist/esm/modules/slack/components/SlackAuthButton/SlackAuthButton.mjs.map +1 -1
  142. package/dist/esm/modules/slack/components/SlackAuthContainer/SlackAuthContainer.mjs +9 -14
  143. package/dist/esm/modules/slack/components/SlackAuthContainer/SlackAuthContainer.mjs.map +1 -1
  144. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelCombobox.mjs +75 -163
  145. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelCombobox.mjs.map +1 -1
  146. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelListBox.mjs +11 -25
  147. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelListBox.mjs.map +1 -1
  148. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelOption.mjs +17 -35
  149. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackChannelOption.mjs.map +1 -1
  150. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTag.mjs +8 -19
  151. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTag.mjs.map +1 -1
  152. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTagList.mjs +8 -10
  153. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectedChannelTagList.mjs.map +1 -1
  154. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectionError.mjs +11 -10
  155. package/dist/esm/modules/slack/components/SlackChannelCombobox/SlackConnectionError.mjs.map +1 -1
  156. package/dist/esm/modules/slack/components/SlackChannelCombobox/helpers.mjs.map +1 -1
  157. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/CheckmarkIcon.mjs +7 -28
  158. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/CheckmarkIcon.mjs.map +1 -1
  159. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/CloseIcon.mjs +3 -21
  160. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/CloseIcon.mjs.map +1 -1
  161. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/HashtagIcon.mjs +3 -21
  162. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/HashtagIcon.mjs.map +1 -1
  163. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/InfoIcon.mjs +2 -46
  164. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/InfoIcon.mjs.map +1 -1
  165. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/LockIcon.mjs +3 -30
  166. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/LockIcon.mjs.map +1 -1
  167. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/SearchIcon.mjs +3 -18
  168. package/dist/esm/modules/slack/components/SlackChannelCombobox/icons/SearchIcon.mjs.map +1 -1
  169. package/dist/esm/modules/slack/components/SlackIcon/SlackIcon.mjs +9 -43
  170. package/dist/esm/modules/slack/components/SlackIcon/SlackIcon.mjs.map +1 -1
  171. package/dist/index.css +1 -1
  172. package/dist/types/modules/feed/components/NotificationFeed/NotificationFeed.d.ts +2 -2
  173. package/dist/types/modules/feed/components/NotificationFeed/NotificationFeed.d.ts.map +1 -1
  174. package/package.json +3 -2
@@ -1,32 +1,22 @@
1
- import { jsxs as c, jsx as i } from "react/jsx-runtime";
2
- import * as u from "react";
3
- import { useKnockFeed as f, useTranslations as k } from "@knocklabs/react-core";
4
- import { CheckmarkCircle as p } from "../../../core/components/Icons/CheckmarkCircle.mjs";
1
+ import * as t from "react";
2
+ import { useKnockFeed as u, useTranslations as i } from "@knocklabs/react-core";
3
+ import { CheckmarkCircle as k } from "../../../core/components/Icons/CheckmarkCircle.mjs";
5
4
 
6
- const x = ({ onClick: a }) => {
7
- const { useFeedStore: r, feedClient: t, colorMode: s } = f(), { t: n } = k(), o = r(
8
- (e) => e.items.filter((m) => !m.read_at)
9
- ), l = r((e) => e.metadata.unread_count), d = u.useCallback(
10
- (e) => {
11
- t.markAllAsRead(), a && a(e, o);
12
- },
13
- [t, o, a]
14
- );
15
- return /* @__PURE__ */ c(
16
- "button",
17
- {
18
- className: `rnf-mark-all-as-read rnf-mark-all-as-read--${s}`,
19
- disabled: l === 0,
20
- onClick: d,
21
- type: "button",
22
- children: [
23
- n("markAllAsRead"),
24
- /* @__PURE__ */ i(p, {})
25
- ]
26
- }
27
- );
5
+ const C = ({
6
+ onClick: a
7
+ }) => {
8
+ const {
9
+ useFeedStore: r,
10
+ feedClient: n,
11
+ colorMode: s
12
+ } = u(), {
13
+ t: l
14
+ } = i(), o = r((e) => e.items.filter((c) => !c.read_at)), m = r((e) => e.metadata.unread_count), d = t.useCallback((e) => {
15
+ n.markAllAsRead(), a && a(e, o);
16
+ }, [n, o, a]);
17
+ return /* @__PURE__ */ t.createElement("button", { className: `rnf-mark-all-as-read rnf-mark-all-as-read--${s}`, disabled: m === 0, onClick: d, type: "button" }, l("markAllAsRead"), /* @__PURE__ */ t.createElement(k, null));
28
18
  };
29
19
  export {
30
- x as MarkAsRead
20
+ C as MarkAsRead
31
21
  };
32
22
  //# sourceMappingURL=MarkAsRead.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkAsRead.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/MarkAsRead.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { FeedItem } from \"@knocklabs/client\";\nimport { useKnockFeed, useTranslations } from \"@knocklabs/react-core\";\nimport { CheckmarkCircle } from \"../../../core/components/Icons\";\n\nimport \"./styles.css\";\n\nexport type MarkAsReadProps = {\n onClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n};\n\nexport const MarkAsRead: React.FC<MarkAsReadProps> = ({ onClick }) => {\n const { useFeedStore, feedClient, colorMode } = useKnockFeed();\n const { t } = useTranslations();\n\n const unreadItems = useFeedStore((state) =>\n state.items.filter((item) => !item.read_at),\n );\n\n const unreadCount = useFeedStore((state) => state.metadata.unread_count);\n\n const onClickHandler = React.useCallback(\n (e: React.MouseEvent) => {\n feedClient.markAllAsRead();\n if (onClick) onClick(e, unreadItems);\n },\n [feedClient, unreadItems, onClick],\n );\n\n return (\n <button\n className={`rnf-mark-all-as-read rnf-mark-all-as-read--${colorMode}`}\n disabled={unreadCount === 0}\n onClick={onClickHandler}\n type=\"button\"\n >\n {t(\"markAllAsRead\")}\n <CheckmarkCircle />\n </button>\n );\n};\n"],"names":["MarkAsRead","onClick","useFeedStore","feedClient","colorMode","useKnockFeed","t","useTranslations","unreadItems","state","item","unreadCount","onClickHandler","React","jsxs","CheckmarkCircle"],"mappings":";;;;;AAWO,MAAMA,IAAwC,CAAC,EAAE,SAAAC,QAAc;AACpE,QAAM,EAAE,cAAAC,GAAc,YAAAC,GAAY,WAAAC,MAAcC,EAAa,GACvD,EAAE,GAAAC,MAAMC,KAERC,IAAcN;AAAA,IAAa,CAACO,MAChCA,EAAM,MAAM,OAAO,CAACC,MAAS,CAACA,EAAK,OAAO;AAAA,EAAA,GAGtCC,IAAcT,EAAa,CAACO,MAAUA,EAAM,SAAS,YAAY,GAEjEG,IAAiBC,EAAM;AAAA,IAC3B,CAAC,MAAwB;AACvB,MAAAV,EAAW,cAAc,GACrBF,KAASA,EAAQ,GAAGO,CAAW;AAAA,IACrC;AAAA,IACA,CAACL,GAAYK,GAAaP,CAAO;AAAA,EAAA;AAIjC,SAAA,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,8CAA8CV,CAAS;AAAA,MAClE,UAAUO,MAAgB;AAAA,MAC1B,SAASC;AAAA,MACT,MAAK;AAAA,MAEJ,UAAA;AAAA,QAAAN,EAAE,eAAe;AAAA,0BACjBS,GAAgB,EAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvB;"}
1
+ {"version":3,"file":"MarkAsRead.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/MarkAsRead.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { FeedItem } from \"@knocklabs/client\";\nimport { useKnockFeed, useTranslations } from \"@knocklabs/react-core\";\nimport { CheckmarkCircle } from \"../../../core/components/Icons\";\n\nimport \"./styles.css\";\n\nexport type MarkAsReadProps = {\n onClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n};\n\nexport const MarkAsRead: React.FC<MarkAsReadProps> = ({ onClick }) => {\n const { useFeedStore, feedClient, colorMode } = useKnockFeed();\n const { t } = useTranslations();\n\n const unreadItems = useFeedStore((state) =>\n state.items.filter((item) => !item.read_at),\n );\n\n const unreadCount = useFeedStore((state) => state.metadata.unread_count);\n\n const onClickHandler = React.useCallback(\n (e: React.MouseEvent) => {\n feedClient.markAllAsRead();\n if (onClick) onClick(e, unreadItems);\n },\n [feedClient, unreadItems, onClick],\n );\n\n return (\n <button\n className={`rnf-mark-all-as-read rnf-mark-all-as-read--${colorMode}`}\n disabled={unreadCount === 0}\n onClick={onClickHandler}\n type=\"button\"\n >\n {t(\"markAllAsRead\")}\n <CheckmarkCircle />\n </button>\n );\n};\n"],"names":["MarkAsRead","onClick","useFeedStore","feedClient","colorMode","useKnockFeed","t","useTranslations","unreadItems","state","items","filter","item","read_at","unreadCount","metadata","unread_count","onClickHandler","React","useCallback","e","markAllAsRead","CheckmarkCircle"],"mappings":";;;;AAWO,MAAMA,IAAwCA,CAAC;AAAA,EAAEC,SAAAA;AAAQ,MAAM;AAC9D,QAAA;AAAA,IAAEC,cAAAA;AAAAA,IAAcC,YAAAA;AAAAA,IAAYC,WAAAA;AAAAA,MAAcC,EAAa,GACvD;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB,GAExBC,IAAcN,EAAcO,CAAAA,MAChCA,EAAMC,MAAMC,OAAQC,CAASA,MAAA,CAACA,EAAKC,OAAO,CAC5C,GAEMC,IAAcZ,EAAcO,CAAUA,MAAAA,EAAMM,SAASC,YAAY,GAEjEC,IAAiBC,EAAMC,YAC3B,CAACC,MAAwB;AACvBjB,IAAAA,EAAWkB,cAAc,GACrBpB,KAASA,EAAQmB,GAAGZ,CAAW;AAAA,EAErC,GAAA,CAACL,GAAYK,GAAaP,CAAO,CACnC;AAEA,yCACG,UACC,EAAA,WAAY,8CAA6CG,CAAU,IACnE,UAAUU,MAAgB,GAC1B,SAASG,GACT,MAAK,SAEJX,GAAAA,EAAE,eAAe,GAClB,gBAAAY,EAAA,cAACI,OAAe,CAClB;AAEJ;"}
@@ -1,7 +1,6 @@
1
- import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
- import { isRequestInFlight as B, NetworkStatus as f } from "@knocklabs/client";
3
- import { useKnockFeed as R, useFeedSettings as y, useTranslations as q, FilterStatus as j } from "@knocklabs/react-core";
4
- import { useState as E, useRef as H, useEffect as k, useCallback as K } from "react";
1
+ import { isRequestInFlight as R, NetworkStatus as f } from "@knocklabs/client";
2
+ import { useKnockFeed as w, useFeedSettings as y, useTranslations as B, FilterStatus as q } from "@knocklabs/react-core";
3
+ import e, { useState as x, useRef as H, useEffect as p, useCallback as K } from "react";
5
4
  import { Spinner as M } from "../../../core/components/Spinner/Spinner.mjs";
6
5
  import z from "../../../core/hooks/useOnBottomScroll.mjs";
7
6
  import { EmptyFeed as A } from "../EmptyFeed/EmptyFeed.mjs";
@@ -9,64 +8,56 @@ import { NotificationCell as L } from "../NotificationCell/NotificationCell.mjs"
9
8
 
10
9
  import { NotificationFeedHeader as O } from "./NotificationFeedHeader.mjs";
11
10
 
12
- const P = (t) => /* @__PURE__ */ e(L, { ...t }, t.item.id), T = (t) => /* @__PURE__ */ e(O, { ...t }), h = ({ colorMode: t }) => /* @__PURE__ */ e("div", { className: "rnf-notification-feed__spinner-container", children: /* @__PURE__ */ e(
13
- M,
14
- {
15
- thickness: 3,
16
- size: "16px",
17
- color: t === "dark" ? "rgba(255, 255, 255, 0.65)" : void 0
18
- }
19
- ) }), U = "https://knock.app?utm_source=powered-by-knock&utm_medium=referral&utm_campaign=knock-branding-feed", te = ({
20
- EmptyComponent: t = /* @__PURE__ */ e(A, {}),
21
- renderItem: g = P,
22
- onNotificationClick: _,
23
- onNotificationButtonClick: N,
24
- onMarkAllAsReadClick: S,
25
- initialFilterStatus: r = j.All,
26
- header: b,
27
- renderHeader: F = T
11
+ const P = (t) => /* @__PURE__ */ e.createElement(L, { key: t.item.id, ...t }), T = (t) => /* @__PURE__ */ e.createElement(O, { ...t }), k = ({
12
+ colorMode: t
13
+ }) => /* @__PURE__ */ e.createElement("div", { className: "rnf-notification-feed__spinner-container" }, /* @__PURE__ */ e.createElement(M, { thickness: 3, size: "16px", color: t === "dark" ? "rgba(255, 255, 255, 0.65)" : void 0 })), U = "https://knock.app?utm_source=powered-by-knock&utm_medium=referral&utm_campaign=knock-branding-feed", Z = ({
14
+ EmptyComponent: t = /* @__PURE__ */ e.createElement(A, null),
15
+ renderItem: _ = P,
16
+ onNotificationClick: g,
17
+ onNotificationButtonClick: E,
18
+ onMarkAllAsReadClick: N,
19
+ initialFilterStatus: r = q.All,
20
+ header: S,
21
+ renderHeader: b = T
28
22
  }) => {
29
- const [i, d] = E(r), { feedClient: o, useFeedStore: v, colorMode: c } = R(), { settings: a } = y(o), { t: C } = q(), { pageInfo: m, items: l, networkStatus: n } = v(), u = H(null);
30
- k(() => {
31
- d(r);
32
- }, [r]), k(() => {
33
- o.fetch({ status: i });
34
- }, [o, i]);
35
- const I = l.length === 0, s = B(n), w = K(() => {
36
- !s && m.after && o.fetchNextPage();
37
- }, [s, m, o]);
23
+ const [a, m] = x(r), {
24
+ feedClient: n,
25
+ useFeedStore: h,
26
+ colorMode: i
27
+ } = w(), {
28
+ settings: c
29
+ } = y(n), {
30
+ t: F
31
+ } = B(), {
32
+ pageInfo: l,
33
+ items: d,
34
+ networkStatus: o
35
+ } = h(), u = H(null);
36
+ p(() => {
37
+ m(r);
38
+ }, [r]), p(() => {
39
+ n.fetch({
40
+ status: a
41
+ });
42
+ }, [n, a]);
43
+ const v = d.length === 0, s = R(o), C = K(() => {
44
+ !s && l.after && n.fetchNextPage();
45
+ }, [s, l, n]);
38
46
  return z({
39
47
  ref: u,
40
- callback: w,
48
+ callback: C,
41
49
  offset: 70
42
- }), /* @__PURE__ */ p(
43
- "div",
44
- {
45
- className: `rnf-notification-feed rnf-notification-feed--${c}`,
46
- children: [
47
- b || F({
48
- setFilterStatus: d,
49
- filterStatus: i,
50
- onMarkAllAsReadClick: S
51
- }),
52
- /* @__PURE__ */ p("div", { className: "rnf-notification-feed__container", ref: u, children: [
53
- n === f.loading && /* @__PURE__ */ e(h, { colorMode: c }),
54
- /* @__PURE__ */ e("div", { className: "rnf-notification-feed__feed-items-container", children: n !== f.loading && l.map(
55
- (x) => g({
56
- item: x,
57
- onItemClick: _,
58
- onButtonClick: N
59
- })
60
- ) }),
61
- n === f.fetchMore && /* @__PURE__ */ e(h, { colorMode: c }),
62
- !s && I && t
63
- ] }),
64
- (a == null ? void 0 : a.features.branding_required) && /* @__PURE__ */ e("div", { className: "rnf-notification-feed__knock-branding", children: /* @__PURE__ */ e("a", { href: U, target: "_blank", children: C("poweredBy") }) })
65
- ]
66
- }
67
- );
50
+ }), /* @__PURE__ */ e.createElement("div", { className: `rnf-notification-feed rnf-notification-feed--${i}` }, S || b({
51
+ setFilterStatus: m,
52
+ filterStatus: a,
53
+ onMarkAllAsReadClick: N
54
+ }), /* @__PURE__ */ e.createElement("div", { className: "rnf-notification-feed__container", ref: u }, o === f.loading && /* @__PURE__ */ e.createElement(k, { colorMode: i }), /* @__PURE__ */ e.createElement("div", { className: "rnf-notification-feed__feed-items-container" }, o !== f.loading && d.map((I) => _({
55
+ item: I,
56
+ onItemClick: g,
57
+ onButtonClick: E
58
+ }))), o === f.fetchMore && /* @__PURE__ */ e.createElement(k, { colorMode: i }), !s && v && t), (c == null ? void 0 : c.features.branding_required) && /* @__PURE__ */ e.createElement("div", { className: "rnf-notification-feed__knock-branding" }, /* @__PURE__ */ e.createElement("a", { href: U, target: "_blank" }, F("poweredBy"))));
68
59
  };
69
60
  export {
70
- te as NotificationFeed
61
+ Z as NotificationFeed
71
62
  };
72
63
  //# sourceMappingURL=NotificationFeed.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFeed.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/NotificationFeed.tsx"],"sourcesContent":["import { FeedItem, NetworkStatus, isRequestInFlight } from \"@knocklabs/client\";\nimport {\n ColorMode,\n FilterStatus,\n useFeedSettings,\n useKnockFeed,\n useTranslations,\n} from \"@knocklabs/react-core\";\nimport React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { Spinner } from \"../../../core/components/Spinner\";\nimport useOnBottomScroll from \"../../../core/hooks/useOnBottomScroll\";\nimport { EmptyFeed } from \"../EmptyFeed\";\nimport { NotificationCell, NotificationCellProps } from \"../NotificationCell\";\n\nimport {\n NotificationFeedHeader,\n NotificationFeedHeaderProps,\n} from \"./NotificationFeedHeader\";\nimport \"./styles.css\";\n\nexport type RenderItemProps = {\n item: FeedItem;\n onItemClick?: NotificationCellProps[\"onItemClick\"];\n onButtonClick?: NotificationCellProps[\"onButtonClick\"];\n};\n\nexport type RenderItem = (props: RenderItemProps) => ReactNode;\n\nexport interface NotificationFeedProps {\n EmptyComponent?: ReactNode;\n /**\n * @deprecated Use `renderHeader` instead to accept `NotificationFeedHeaderProps`\n */\n header?: ReactElement<any>;\n renderItem?: RenderItem;\n renderHeader?: (props: NotificationFeedHeaderProps) => ReactNode;\n onNotificationClick?: NotificationCellProps[\"onItemClick\"];\n onNotificationButtonClick?: NotificationCellProps[\"onButtonClick\"];\n onMarkAllAsReadClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n initialFilterStatus?: FilterStatus;\n}\n\nconst defaultRenderItem = (props: RenderItemProps) => (\n <NotificationCell key={props.item.id} {...props} />\n);\n\nconst defaultRenderHeader = (props: NotificationFeedHeaderProps) => (\n <NotificationFeedHeader {...props} />\n);\n\nconst LoadingSpinner = ({ colorMode }: { colorMode: ColorMode }) => (\n <div className=\"rnf-notification-feed__spinner-container\">\n <Spinner\n thickness={3}\n size=\"16px\"\n color={colorMode === \"dark\" ? \"rgba(255, 255, 255, 0.65)\" : undefined}\n />\n </div>\n);\n\nconst poweredByKnockUrl =\n \"https://knock.app?utm_source=powered-by-knock&utm_medium=referral&utm_campaign=knock-branding-feed\";\n\nexport const NotificationFeed: React.FC<NotificationFeedProps> = ({\n EmptyComponent = <EmptyFeed />,\n renderItem = defaultRenderItem,\n onNotificationClick,\n onNotificationButtonClick,\n onMarkAllAsReadClick,\n initialFilterStatus = FilterStatus.All,\n header,\n renderHeader = defaultRenderHeader,\n}) => {\n const [status, setStatus] = useState(initialFilterStatus);\n const { feedClient, useFeedStore, colorMode } = useKnockFeed();\n const { settings } = useFeedSettings(feedClient);\n const { t } = useTranslations();\n\n const { pageInfo, items, networkStatus } = useFeedStore();\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setStatus(initialFilterStatus);\n }, [initialFilterStatus]);\n\n useEffect(() => {\n // When the feed client changes, or the status changes issue a re-fetch\n feedClient.fetch({ status });\n }, [feedClient, status]);\n\n const noItems = items.length === 0;\n const requestInFlight = isRequestInFlight(networkStatus);\n\n // Handle fetching more once we reach the bottom of the list\n const onBottomCallback = useCallback(() => {\n if (!requestInFlight && pageInfo.after) {\n feedClient.fetchNextPage();\n }\n }, [requestInFlight, pageInfo, feedClient]);\n\n // Once we scroll to the bottom of the view we want to automatically fetch\n // more items for the feed and bring them into the list\n useOnBottomScroll({\n ref: containerRef,\n callback: onBottomCallback,\n offset: 70,\n });\n\n return (\n <div\n className={`rnf-notification-feed rnf-notification-feed--${colorMode}`}\n >\n {header ||\n renderHeader({\n setFilterStatus: setStatus,\n filterStatus: status,\n onMarkAllAsReadClick,\n })}\n\n <div className=\"rnf-notification-feed__container\" ref={containerRef}>\n {networkStatus === NetworkStatus.loading && (\n <LoadingSpinner colorMode={colorMode} />\n )}\n\n <div className=\"rnf-notification-feed__feed-items-container\">\n {networkStatus !== NetworkStatus.loading &&\n items.map((item: FeedItem) =>\n renderItem({\n item,\n onItemClick: onNotificationClick,\n onButtonClick: onNotificationButtonClick,\n }),\n )}\n </div>\n\n {networkStatus === NetworkStatus.fetchMore && (\n <LoadingSpinner colorMode={colorMode} />\n )}\n\n {!requestInFlight && noItems && EmptyComponent}\n </div>\n\n {settings?.features.branding_required && (\n <div className=\"rnf-notification-feed__knock-branding\">\n <a href={poweredByKnockUrl} target=\"_blank\">\n {t(\"poweredBy\")}\n </a>\n </div>\n )}\n </div>\n );\n};\n"],"names":["defaultRenderItem","props","jsx","NotificationCell","defaultRenderHeader","NotificationFeedHeader","LoadingSpinner","colorMode","Spinner","poweredByKnockUrl","NotificationFeed","EmptyComponent","EmptyFeed","renderItem","onNotificationClick","onNotificationButtonClick","onMarkAllAsReadClick","initialFilterStatus","FilterStatus","header","renderHeader","status","setStatus","useState","feedClient","useFeedStore","useKnockFeed","settings","useFeedSettings","t","useTranslations","pageInfo","items","networkStatus","containerRef","useRef","useEffect","noItems","requestInFlight","isRequestInFlight","onBottomCallback","useCallback","useOnBottomScroll","jsxs","NetworkStatus","item"],"mappings":"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"}
1
+ {"version":3,"file":"NotificationFeed.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/NotificationFeed.tsx"],"sourcesContent":["import { FeedItem, NetworkStatus, isRequestInFlight } from \"@knocklabs/client\";\nimport {\n ColorMode,\n FilterStatus,\n useFeedSettings,\n useKnockFeed,\n useTranslations,\n} from \"@knocklabs/react-core\";\nimport React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { Spinner } from \"../../../core/components/Spinner\";\nimport useOnBottomScroll from \"../../../core/hooks/useOnBottomScroll\";\nimport { EmptyFeed } from \"../EmptyFeed\";\nimport { NotificationCell, NotificationCellProps } from \"../NotificationCell\";\n\nimport {\n NotificationFeedHeader,\n NotificationFeedHeaderProps,\n} from \"./NotificationFeedHeader\";\nimport \"./styles.css\";\n\nexport type RenderItemProps<T = any> = {\n item: FeedItem<T>;\n onItemClick?: NotificationCellProps[\"onItemClick\"];\n onButtonClick?: NotificationCellProps[\"onButtonClick\"];\n};\n\nexport type RenderItem = (props: RenderItemProps) => ReactNode;\n\nexport interface NotificationFeedProps {\n EmptyComponent?: ReactNode;\n /**\n * @deprecated Use `renderHeader` instead to accept `NotificationFeedHeaderProps`\n */\n header?: ReactElement<any>;\n renderItem?: RenderItem;\n renderHeader?: (props: NotificationFeedHeaderProps) => ReactNode;\n onNotificationClick?: NotificationCellProps[\"onItemClick\"];\n onNotificationButtonClick?: NotificationCellProps[\"onButtonClick\"];\n onMarkAllAsReadClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n initialFilterStatus?: FilterStatus;\n}\n\nconst defaultRenderItem = (props: RenderItemProps) => (\n <NotificationCell key={props.item.id} {...props} />\n);\n\nconst defaultRenderHeader = (props: NotificationFeedHeaderProps) => (\n <NotificationFeedHeader {...props} />\n);\n\nconst LoadingSpinner = ({ colorMode }: { colorMode: ColorMode }) => (\n <div className=\"rnf-notification-feed__spinner-container\">\n <Spinner\n thickness={3}\n size=\"16px\"\n color={colorMode === \"dark\" ? \"rgba(255, 255, 255, 0.65)\" : undefined}\n />\n </div>\n);\n\nconst poweredByKnockUrl =\n \"https://knock.app?utm_source=powered-by-knock&utm_medium=referral&utm_campaign=knock-branding-feed\";\n\nexport const NotificationFeed: React.FC<NotificationFeedProps> = ({\n EmptyComponent = <EmptyFeed />,\n renderItem = defaultRenderItem,\n onNotificationClick,\n onNotificationButtonClick,\n onMarkAllAsReadClick,\n initialFilterStatus = FilterStatus.All,\n header,\n renderHeader = defaultRenderHeader,\n}) => {\n const [status, setStatus] = useState(initialFilterStatus);\n const { feedClient, useFeedStore, colorMode } = useKnockFeed();\n const { settings } = useFeedSettings(feedClient);\n const { t } = useTranslations();\n\n const { pageInfo, items, networkStatus } = useFeedStore();\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setStatus(initialFilterStatus);\n }, [initialFilterStatus]);\n\n useEffect(() => {\n // When the feed client changes, or the status changes issue a re-fetch\n feedClient.fetch({ status });\n }, [feedClient, status]);\n\n const noItems = items.length === 0;\n const requestInFlight = isRequestInFlight(networkStatus);\n\n // Handle fetching more once we reach the bottom of the list\n const onBottomCallback = useCallback(() => {\n if (!requestInFlight && pageInfo.after) {\n feedClient.fetchNextPage();\n }\n }, [requestInFlight, pageInfo, feedClient]);\n\n // Once we scroll to the bottom of the view we want to automatically fetch\n // more items for the feed and bring them into the list\n useOnBottomScroll({\n ref: containerRef,\n callback: onBottomCallback,\n offset: 70,\n });\n\n return (\n <div\n className={`rnf-notification-feed rnf-notification-feed--${colorMode}`}\n >\n {header ||\n renderHeader({\n setFilterStatus: setStatus,\n filterStatus: status,\n onMarkAllAsReadClick,\n })}\n\n <div className=\"rnf-notification-feed__container\" ref={containerRef}>\n {networkStatus === NetworkStatus.loading && (\n <LoadingSpinner colorMode={colorMode} />\n )}\n\n <div className=\"rnf-notification-feed__feed-items-container\">\n {networkStatus !== NetworkStatus.loading &&\n items.map((item: FeedItem) =>\n renderItem({\n item,\n onItemClick: onNotificationClick,\n onButtonClick: onNotificationButtonClick,\n }),\n )}\n </div>\n\n {networkStatus === NetworkStatus.fetchMore && (\n <LoadingSpinner colorMode={colorMode} />\n )}\n\n {!requestInFlight && noItems && EmptyComponent}\n </div>\n\n {settings?.features.branding_required && (\n <div className=\"rnf-notification-feed__knock-branding\">\n <a href={poweredByKnockUrl} target=\"_blank\">\n {t(\"poweredBy\")}\n </a>\n </div>\n )}\n </div>\n );\n};\n"],"names":["defaultRenderItem","props","React","NotificationCell","item","id","defaultRenderHeader","NotificationFeedHeader","LoadingSpinner","colorMode","Spinner","undefined","poweredByKnockUrl","NotificationFeed","EmptyComponent","EmptyFeed","renderItem","onNotificationClick","onNotificationButtonClick","onMarkAllAsReadClick","initialFilterStatus","FilterStatus","All","header","renderHeader","status","setStatus","useState","feedClient","useFeedStore","useKnockFeed","settings","useFeedSettings","t","useTranslations","pageInfo","items","networkStatus","containerRef","useRef","useEffect","fetch","noItems","length","requestInFlight","isRequestInFlight","onBottomCallback","useCallback","after","fetchNextPage","useOnBottomScroll","ref","callback","offset","setFilterStatus","filterStatus","NetworkStatus","loading","map","onItemClick","onButtonClick","fetchMore","features","branding_required"],"mappings":"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"}
@@ -1,31 +1,16 @@
1
- import { jsxs as i, jsx as n } from "react/jsx-runtime";
2
- import { FilterStatus as o, useTranslations as d } from "@knocklabs/react-core";
3
- import { Dropdown as c } from "./Dropdown.mjs";
4
- import { MarkAsRead as l } from "./MarkAsRead.mjs";
5
- const f = [
6
- o.All,
7
- o.Unread,
8
- o.Read
9
- ], u = ({
10
- onMarkAllAsReadClick: a,
11
- filterStatus: t,
12
- setFilterStatus: s
1
+ import e from "react";
2
+ import { FilterStatus as a, useTranslations as c } from "@knocklabs/react-core";
3
+ import { Dropdown as l } from "./Dropdown.mjs";
4
+ import { MarkAsRead as m } from "./MarkAsRead.mjs";
5
+ const s = [a.All, a.Unread, a.Read], u = ({
6
+ onMarkAllAsReadClick: r,
7
+ filterStatus: o,
8
+ setFilterStatus: i
13
9
  }) => {
14
- const { t: r } = d();
15
- return /* @__PURE__ */ i("header", { className: "rnf-notification-feed__header", children: [
16
- /* @__PURE__ */ i("div", { className: "rnf-notification-feed__selector", children: [
17
- /* @__PURE__ */ n("span", { className: "rnf-notification-feed__type", children: r("notifications") }),
18
- /* @__PURE__ */ n(
19
- c,
20
- {
21
- value: t,
22
- onChange: (e) => s(e.target.value),
23
- children: f.map((e) => /* @__PURE__ */ n("option", { value: e, children: r(e) }, e))
24
- }
25
- )
26
- ] }),
27
- /* @__PURE__ */ n(l, { onClick: a })
28
- ] });
10
+ const {
11
+ t: n
12
+ } = c();
13
+ return /* @__PURE__ */ e.createElement("header", { className: "rnf-notification-feed__header" }, /* @__PURE__ */ e.createElement("div", { className: "rnf-notification-feed__selector" }, /* @__PURE__ */ e.createElement("span", { className: "rnf-notification-feed__type" }, n("notifications")), /* @__PURE__ */ e.createElement(l, { value: o, onChange: (t) => i(t.target.value) }, s.map((t) => /* @__PURE__ */ e.createElement("option", { key: t, value: t }, n(t))))), /* @__PURE__ */ e.createElement(m, { onClick: r }));
29
14
  };
30
15
  export {
31
16
  u as NotificationFeedHeader
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFeedHeader.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/NotificationFeedHeader.tsx"],"sourcesContent":["import React, { SetStateAction } from \"react\";\nimport { FeedItem } from \"@knocklabs/client\";\n\nimport { FilterStatus, useTranslations } from \"@knocklabs/react-core\";\nimport { Dropdown } from \"./Dropdown\";\nimport { MarkAsRead } from \"./MarkAsRead\";\n\nexport type NotificationFeedHeaderProps = {\n filterStatus: FilterStatus;\n setFilterStatus: React.Dispatch<SetStateAction<FilterStatus>>;\n onMarkAllAsReadClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n};\n\nconst OrderedFilterStatuses = [\n FilterStatus.All,\n FilterStatus.Unread,\n FilterStatus.Read,\n];\n\nexport const NotificationFeedHeader: React.FC<NotificationFeedHeaderProps> = ({\n onMarkAllAsReadClick,\n filterStatus,\n setFilterStatus,\n}) => {\n const { t } = useTranslations();\n\n return (\n <header className=\"rnf-notification-feed__header\">\n <div className=\"rnf-notification-feed__selector\">\n <span className=\"rnf-notification-feed__type\">\n {t(\"notifications\")}\n </span>\n <Dropdown\n value={filterStatus}\n onChange={(e) => setFilterStatus(e.target.value)}\n >\n {OrderedFilterStatuses.map((filterStatus) => (\n <option key={filterStatus} value={filterStatus}>\n {t(filterStatus)}\n </option>\n ))}\n </Dropdown>\n </div>\n <MarkAsRead onClick={onMarkAllAsReadClick} />\n </header>\n );\n};\n"],"names":["OrderedFilterStatuses","FilterStatus","NotificationFeedHeader","onMarkAllAsReadClick","filterStatus","setFilterStatus","t","useTranslations","jsxs","jsx","Dropdown","MarkAsRead"],"mappings":";;;;AAaA,MAAMA,IAAwB;AAAA,EAC5BC,EAAa;AAAA,EACbA,EAAa;AAAA,EACbA,EAAa;AACf,GAEaC,IAAgE,CAAC;AAAA,EAC5E,sBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,MAAM;AACE,QAAA,EAAE,GAAAC,MAAMC;AAGZ,SAAA,gBAAAC,EAAC,UAAO,EAAA,WAAU,iCAChB,UAAA;AAAA,IAAC,gBAAAA,EAAA,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAK,EAAA,WAAU,+BACb,UAAAH,EAAE,eAAe,GACpB;AAAA,MACA,gBAAAG;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAON;AAAA,UACP,UAAU,CAAC,MAAMC,EAAgB,EAAE,OAAO,KAAK;AAAA,UAE9C,UAAsBL,EAAA,IAAI,CAACI,MACzB,gBAAAK,EAAA,UAAA,EAA0B,OAAOL,GAC/B,UAAEA,EAAAA,CAAY,EADJA,GAAAA,CAEb,CACD;AAAA,QAAA;AAAA,MACH;AAAA,IAAA,GACF;AAAA,IACA,gBAAAK,EAACE,GAAW,EAAA,SAASR,EAAsB,CAAA;AAAA,EAC7C,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"NotificationFeedHeader.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeed/NotificationFeedHeader.tsx"],"sourcesContent":["import React, { SetStateAction } from \"react\";\nimport { FeedItem } from \"@knocklabs/client\";\n\nimport { FilterStatus, useTranslations } from \"@knocklabs/react-core\";\nimport { Dropdown } from \"./Dropdown\";\nimport { MarkAsRead } from \"./MarkAsRead\";\n\nexport type NotificationFeedHeaderProps = {\n filterStatus: FilterStatus;\n setFilterStatus: React.Dispatch<SetStateAction<FilterStatus>>;\n onMarkAllAsReadClick?: (e: React.MouseEvent, unreadItems: FeedItem[]) => void;\n};\n\nconst OrderedFilterStatuses = [\n FilterStatus.All,\n FilterStatus.Unread,\n FilterStatus.Read,\n];\n\nexport const NotificationFeedHeader: React.FC<NotificationFeedHeaderProps> = ({\n onMarkAllAsReadClick,\n filterStatus,\n setFilterStatus,\n}) => {\n const { t } = useTranslations();\n\n return (\n <header className=\"rnf-notification-feed__header\">\n <div className=\"rnf-notification-feed__selector\">\n <span className=\"rnf-notification-feed__type\">\n {t(\"notifications\")}\n </span>\n <Dropdown\n value={filterStatus}\n onChange={(e) => setFilterStatus(e.target.value)}\n >\n {OrderedFilterStatuses.map((filterStatus) => (\n <option key={filterStatus} value={filterStatus}>\n {t(filterStatus)}\n </option>\n ))}\n </Dropdown>\n </div>\n <MarkAsRead onClick={onMarkAllAsReadClick} />\n </header>\n );\n};\n"],"names":["OrderedFilterStatuses","FilterStatus","All","Unread","Read","NotificationFeedHeader","onMarkAllAsReadClick","filterStatus","setFilterStatus","t","useTranslations","React","Dropdown","e","target","value","map","MarkAsRead"],"mappings":";;;;AAaA,MAAMA,IAAwB,CAC5BC,EAAaC,KACbD,EAAaE,QACbF,EAAaG,IAAI,GAGNC,IAAgEA,CAAC;AAAA,EAC5EC,sBAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,iBAAAA;AACF,MAAM;AACE,QAAA;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB;AAG5B,SAAAC,gBAAAA,EAAA,cAAC,YAAO,WAAU,gCAAA,mCACf,OAAI,EAAA,WAAU,kCACb,GAAAA,gBAAAA,EAAA,cAAC,QAAK,EAAA,WAAU,iCACbF,EAAE,eAAe,CACpB,GACAE,gBAAAA,EAAA,cAACC,KACC,OAAOL,GACP,UAAWM,CAAAA,MAAML,EAAgBK,EAAEC,OAAOC,KAAK,EAAA,GAE9Cf,EAAsBgB,IAAKT,CAAAA,MACzBI,gBAAAA,EAAA,cAAA,UAAA,EAAO,KAAKJ,GAAc,OAAOA,EAAAA,GAC/BE,EAAEF,CAAY,CACjB,CACD,CACH,CACF,GACCI,gBAAAA,EAAA,cAAAM,GAAA,EAAW,SAASX,EAAAA,CAAqB,CAC5C;AAEJ;"}
@@ -1,9 +1,9 @@
1
- import { jsx as e } from "react/jsx-runtime";
1
+ import t from "react";
2
2
 
3
- const t = ({
4
- children: r
5
- }) => /* @__PURE__ */ e("div", { className: "rnf-feed-provider", children: r });
3
+ const i = ({
4
+ children: e
5
+ }) => /* @__PURE__ */ t.createElement("div", { className: "rnf-feed-provider" }, e);
6
6
  export {
7
- t as NotificationFeedContainer
7
+ i as NotificationFeedContainer
8
8
  };
9
9
  //# sourceMappingURL=NotificationFeedContainer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFeedContainer.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.tsx"],"sourcesContent":["import { PropsWithChildren } from \"react\";\nimport \"./styles.css\";\n\nexport const NotificationFeedContainer: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n return <div className=\"rnf-feed-provider\">{children}</div>;\n};\n"],"names":["NotificationFeedContainer","children","jsx"],"mappings":";;AAGO,MAAMA,IAAyD,CAAC;AAAA,EACrE,UAAAC;AACF,MACU,gBAAAC,EAAA,OAAA,EAAI,WAAU,qBAAqB,UAAAD,EAAS,CAAA;"}
1
+ {"version":3,"file":"NotificationFeedContainer.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeedContainer/NotificationFeedContainer.tsx"],"sourcesContent":["import { PropsWithChildren } from \"react\";\nimport \"./styles.css\";\n\nexport const NotificationFeedContainer: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n return <div className=\"rnf-feed-provider\">{children}</div>;\n};\n"],"names":["NotificationFeedContainer","children","React"],"mappings":";;AAGO,MAAMA,IAAyDA,CAAC;AAAA,EACrEC,UAAAA;AACF,MACUC,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,oBAAA,GAAqBD,CAAS;"}
@@ -1,61 +1,58 @@
1
- import { jsx as t } from "react/jsx-runtime";
2
1
  import { useKnockFeed as v } from "@knocklabs/react-core";
3
- import { useEffect as y } from "react";
4
- import { usePopper as x } from "react-popper";
5
- import F from "../../../core/hooks/useComponentVisible.mjs";
6
- import { NotificationFeed as N } from "../NotificationFeed/NotificationFeed.mjs";
2
+ import o, { useEffect as y } from "react";
3
+ import { usePopper as _ } from "react-popper";
4
+ import E from "../../../core/hooks/useComponentVisible.mjs";
5
+ import { NotificationFeed as F } from "../NotificationFeed/NotificationFeed.mjs";
7
6
  import "../NotificationFeed/NotificationFeedHeader.mjs";
8
7
 
9
8
 
10
- const h = ({ store: e, feedClient: o }) => {
11
- e.metadata.unseen_count > 0 && o.markAllAsSeen();
12
- }, E = ({
9
+ const N = ({
10
+ store: e,
11
+ feedClient: t
12
+ }) => {
13
+ e.metadata.unseen_count > 0 && t.markAllAsSeen();
14
+ }, S = ({
13
15
  isVisible: e,
14
- onOpen: o = h,
16
+ onOpen: t = N,
15
17
  onClose: f,
16
18
  buttonRef: p,
17
- closeOnClickOutside: m = !0,
18
- placement: s = "bottom-end",
19
- ...c
19
+ closeOnClickOutside: a = !0,
20
+ placement: c = "bottom-end",
21
+ ...m
20
22
  }) => {
21
- const { colorMode: d, feedClient: r, useFeedStore: a } = v(), i = a(), { ref: n } = F(e, f, {
22
- closeOnClickOutside: m
23
- }), { styles: u, attributes: l } = x(
24
- p.current,
25
- n.current,
26
- {
27
- strategy: "fixed",
28
- placement: s,
29
- modifiers: [
30
- {
31
- name: "offset",
32
- options: {
33
- offset: [0, 8]
34
- }
35
- }
36
- ]
37
- }
38
- );
23
+ const {
24
+ colorMode: s,
25
+ feedClient: r,
26
+ useFeedStore: d
27
+ } = v(), n = d(), {
28
+ ref: i
29
+ } = E(e, f, {
30
+ closeOnClickOutside: a
31
+ }), {
32
+ styles: l,
33
+ attributes: u
34
+ } = _(p.current, i.current, {
35
+ strategy: "fixed",
36
+ placement: c,
37
+ modifiers: [{
38
+ name: "offset",
39
+ options: {
40
+ offset: [0, 8]
41
+ }
42
+ }]
43
+ });
39
44
  return y(() => {
40
- e && o && o({ store: i, feedClient: r });
41
- }, [e, o, i, r]), /* @__PURE__ */ t(
42
- "div",
43
- {
44
- className: `rnf-notification-feed-popover rnf-notification-feed-popover--${d}`,
45
- style: {
46
- ...u.popper,
47
- visibility: e ? "visible" : "hidden",
48
- opacity: e ? 1 : 0
49
- },
50
- ref: n,
51
- ...l.popper,
52
- role: "dialog",
53
- tabIndex: -1,
54
- children: /* @__PURE__ */ t("div", { className: "rnf-notification-feed-popover__inner", children: /* @__PURE__ */ t(N, { ...c }) })
55
- }
56
- );
45
+ e && t && t({
46
+ store: n,
47
+ feedClient: r
48
+ });
49
+ }, [e, t, n, r]), /* @__PURE__ */ o.createElement("div", { className: `rnf-notification-feed-popover rnf-notification-feed-popover--${s}`, style: {
50
+ ...l.popper,
51
+ visibility: e ? "visible" : "hidden",
52
+ opacity: e ? 1 : 0
53
+ }, ref: i, ...u.popper, role: "dialog", tabIndex: -1 }, /* @__PURE__ */ o.createElement("div", { className: "rnf-notification-feed-popover__inner" }, /* @__PURE__ */ o.createElement(F, { ...m })));
57
54
  };
58
55
  export {
59
- E as NotificationFeedPopover
56
+ S as NotificationFeedPopover
60
57
  };
61
58
  //# sourceMappingURL=NotificationFeedPopover.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFeedPopover.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.tsx"],"sourcesContent":["import { Feed, FeedStoreState } from \"@knocklabs/client\";\nimport { useKnockFeed } from \"@knocklabs/react-core\";\nimport { Placement } from \"@popperjs/core\";\nimport React, { RefObject, useEffect } from \"react\";\nimport { usePopper } from \"react-popper\";\n\nimport useComponentVisible from \"../../../core/hooks/useComponentVisible\";\nimport { NotificationFeed, NotificationFeedProps } from \"../NotificationFeed\";\n\nimport \"./styles.css\";\n\ntype OnOpenOptions = {\n store: FeedStoreState;\n feedClient: Feed;\n};\n\nconst defaultOnOpen = ({ store, feedClient }: OnOpenOptions) => {\n if (store.metadata.unseen_count > 0) {\n feedClient.markAllAsSeen();\n }\n};\n\nexport interface NotificationFeedPopoverProps extends NotificationFeedProps {\n isVisible: boolean;\n onOpen?: (arg: OnOpenOptions) => void;\n onClose: (e: Event) => void;\n buttonRef: RefObject<HTMLElement>;\n closeOnClickOutside?: boolean;\n placement?: Placement;\n}\n\nexport const NotificationFeedPopover: React.FC<\n NotificationFeedPopoverProps\n> = ({\n isVisible,\n onOpen = defaultOnOpen,\n onClose,\n buttonRef,\n closeOnClickOutside = true,\n placement = \"bottom-end\",\n ...feedProps\n}) => {\n const { colorMode, feedClient, useFeedStore } = useKnockFeed();\n const store = useFeedStore();\n\n const { ref: popperRef } = useComponentVisible(isVisible, onClose, {\n closeOnClickOutside,\n });\n\n const { styles, attributes } = usePopper(\n buttonRef.current,\n popperRef.current,\n {\n strategy: \"fixed\",\n placement,\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 8],\n },\n },\n ],\n },\n );\n\n useEffect(() => {\n // Whenever the feed is opened, we want to invoke the `onOpen` callback\n // function to handle any side effects.\n if (isVisible && onOpen) {\n onOpen({ store, feedClient });\n }\n }, [isVisible, onOpen, store, feedClient]);\n\n return (\n <div\n className={`rnf-notification-feed-popover rnf-notification-feed-popover--${colorMode}`}\n style={{\n ...styles.popper,\n visibility: isVisible ? \"visible\" : \"hidden\",\n opacity: isVisible ? 1 : 0,\n }}\n ref={popperRef}\n {...attributes.popper}\n role=\"dialog\"\n tabIndex={-1}\n >\n <div className=\"rnf-notification-feed-popover__inner\">\n <NotificationFeed {...feedProps} />\n </div>\n </div>\n );\n};\n"],"names":["defaultOnOpen","store","feedClient","NotificationFeedPopover","isVisible","onOpen","onClose","buttonRef","closeOnClickOutside","placement","feedProps","colorMode","useFeedStore","useKnockFeed","popperRef","useComponentVisible","styles","attributes","usePopper","useEffect","jsx","NotificationFeed"],"mappings":";;;;;;;;;AAgBA,MAAMA,IAAgB,CAAC,EAAE,OAAAC,GAAO,YAAAC,QAAgC;AAC1D,EAAAD,EAAM,SAAS,eAAe,KAChCC,EAAW,cAAc;AAE7B,GAWaC,IAET,CAAC;AAAA,EACH,WAAAC;AAAA,EACA,QAAAC,IAASL;AAAA,EACT,SAAAM;AAAA,EACA,WAAAC;AAAA,EACA,qBAAAC,IAAsB;AAAA,EACtB,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,WAAAC,GAAW,YAAAT,GAAY,cAAAU,MAAiBC,EAAa,GACvDZ,IAAQW,KAER,EAAE,KAAKE,EAAA,IAAcC,EAAoBX,GAAWE,GAAS;AAAA,IACjE,qBAAAE;AAAA,EAAA,CACD,GAEK,EAAE,QAAAQ,GAAQ,YAAAC,EAAA,IAAeC;AAAA,IAC7BX,EAAU;AAAA,IACVO,EAAU;AAAA,IACV;AAAA,MACE,UAAU;AAAA,MACV,WAAAL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,YACP,QAAQ,CAAC,GAAG,CAAC;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAGF,SAAAU,EAAU,MAAM;AAGd,IAAIf,KAAaC,KACRA,EAAA,EAAE,OAAAJ,GAAO,YAAAC,EAAA,CAAY;AAAA,KAE7B,CAACE,GAAWC,GAAQJ,GAAOC,CAAU,CAAC,GAGvC,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,gEAAgET,CAAS;AAAA,MACpF,OAAO;AAAA,QACL,GAAGK,EAAO;AAAA,QACV,YAAYZ,IAAY,YAAY;AAAA,QACpC,SAASA,IAAY,IAAI;AAAA,MAC3B;AAAA,MACA,KAAKU;AAAA,MACJ,GAAGG,EAAW;AAAA,MACf,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAA,gBAAAG,EAAC,SAAI,WAAU,wCACb,4BAACC,GAAkB,EAAA,GAAGX,GAAW,EACnC,CAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"NotificationFeedPopover.mjs","sources":["../../../../../../src/modules/feed/components/NotificationFeedPopover/NotificationFeedPopover.tsx"],"sourcesContent":["import { Feed, FeedStoreState } from \"@knocklabs/client\";\nimport { useKnockFeed } from \"@knocklabs/react-core\";\nimport { Placement } from \"@popperjs/core\";\nimport React, { RefObject, useEffect } from \"react\";\nimport { usePopper } from \"react-popper\";\n\nimport useComponentVisible from \"../../../core/hooks/useComponentVisible\";\nimport { NotificationFeed, NotificationFeedProps } from \"../NotificationFeed\";\n\nimport \"./styles.css\";\n\ntype OnOpenOptions = {\n store: FeedStoreState;\n feedClient: Feed;\n};\n\nconst defaultOnOpen = ({ store, feedClient }: OnOpenOptions) => {\n if (store.metadata.unseen_count > 0) {\n feedClient.markAllAsSeen();\n }\n};\n\nexport interface NotificationFeedPopoverProps extends NotificationFeedProps {\n isVisible: boolean;\n onOpen?: (arg: OnOpenOptions) => void;\n onClose: (e: Event) => void;\n buttonRef: RefObject<HTMLElement>;\n closeOnClickOutside?: boolean;\n placement?: Placement;\n}\n\nexport const NotificationFeedPopover: React.FC<\n NotificationFeedPopoverProps\n> = ({\n isVisible,\n onOpen = defaultOnOpen,\n onClose,\n buttonRef,\n closeOnClickOutside = true,\n placement = \"bottom-end\",\n ...feedProps\n}) => {\n const { colorMode, feedClient, useFeedStore } = useKnockFeed();\n const store = useFeedStore();\n\n const { ref: popperRef } = useComponentVisible(isVisible, onClose, {\n closeOnClickOutside,\n });\n\n const { styles, attributes } = usePopper(\n buttonRef.current,\n popperRef.current,\n {\n strategy: \"fixed\",\n placement,\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 8],\n },\n },\n ],\n },\n );\n\n useEffect(() => {\n // Whenever the feed is opened, we want to invoke the `onOpen` callback\n // function to handle any side effects.\n if (isVisible && onOpen) {\n onOpen({ store, feedClient });\n }\n }, [isVisible, onOpen, store, feedClient]);\n\n return (\n <div\n className={`rnf-notification-feed-popover rnf-notification-feed-popover--${colorMode}`}\n style={{\n ...styles.popper,\n visibility: isVisible ? \"visible\" : \"hidden\",\n opacity: isVisible ? 1 : 0,\n }}\n ref={popperRef}\n {...attributes.popper}\n role=\"dialog\"\n tabIndex={-1}\n >\n <div className=\"rnf-notification-feed-popover__inner\">\n <NotificationFeed {...feedProps} />\n </div>\n </div>\n );\n};\n"],"names":["defaultOnOpen","store","feedClient","metadata","unseen_count","markAllAsSeen","NotificationFeedPopover","isVisible","onOpen","onClose","buttonRef","closeOnClickOutside","placement","feedProps","colorMode","useFeedStore","useKnockFeed","ref","popperRef","useComponentVisible","styles","attributes","usePopper","current","strategy","modifiers","name","options","offset","useEffect","popper","visibility","opacity","React","NotificationFeed"],"mappings":";;;;;;;;AAgBA,MAAMA,IAAgBA,CAAC;AAAA,EAAEC,OAAAA;AAAAA,EAAOC,YAAAA;AAA0B,MAAM;AAC1DD,EAAAA,EAAME,SAASC,eAAe,KAChCF,EAAWG,cAAc;AAE7B,GAWaC,IAETA,CAAC;AAAA,EACHC,WAAAA;AAAAA,EACAC,QAAAA,IAASR;AAAAA,EACTS,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,qBAAAA,IAAsB;AAAA,EACtBC,WAAAA,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACE,QAAA;AAAA,IAAEC,WAAAA;AAAAA,IAAWZ,YAAAA;AAAAA,IAAYa,cAAAA;AAAAA,MAAiBC,EAAa,GACvDf,IAAQc,KAER;AAAA,IAAEE,KAAKC;AAAAA,EAAAA,IAAcC,EAAoBZ,GAAWE,GAAS;AAAA,IACjEE,qBAAAA;AAAAA,EAAAA,CACD,GAEK;AAAA,IAAES,QAAAA;AAAAA,IAAQC,YAAAA;AAAAA,EAAeC,IAAAA,EAC7BZ,EAAUa,SACVL,EAAUK,SACV;AAAA,IACEC,UAAU;AAAA,IACVZ,WAAAA;AAAAA,IACAa,WAAW,CACT;AAAA,MACEC,MAAM;AAAA,MACNC,SAAS;AAAA,QACPC,QAAQ,CAAC,GAAG,CAAC;AAAA,MACf;AAAA,IAAA,CACD;AAAA,EAAA,CAGP;AAEAC,SAAAA,EAAU,MAAM;AAGd,IAAItB,KAAaC,KACRA,EAAA;AAAA,MAAEP,OAAAA;AAAAA,MAAOC,YAAAA;AAAAA,IAAAA,CAAY;AAAA,KAE7B,CAACK,GAAWC,GAAQP,GAAOC,CAAU,CAAC,mCAGtC,OACC,EAAA,WAAY,gEAA+DY,CAAU,IACrF,OAAO;AAAA,IACL,GAAGM,EAAOU;AAAAA,IACVC,YAAYxB,IAAY,YAAY;AAAA,IACpCyB,SAASzB,IAAY,IAAI;AAAA,KAE3B,KAAKW,GACL,GAAIG,EAAWS,QACf,MAAK,UACL,UAAU,MAETG,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,uCACb,GAAAA,gBAAAA,EAAA,cAACC,KAAiB,GAAIrB,EAAU,CAAA,CAClC,CACF;AAEJ;"}
@@ -1,27 +1,18 @@
1
- import { jsxs as e, jsx as o } from "react/jsx-runtime";
2
- import c from "react";
3
- import { BellIcon as f } from "../../../core/components/Icons/Bell.mjs";
4
- import { useKnockFeed as a } from "@knocklabs/react-core";
5
- import { UnseenBadge as m } from "../UnseenBadge/UnseenBadge.mjs";
1
+ import o from "react";
2
+ import { BellIcon as i } from "../../../core/components/Icons/Bell.mjs";
3
+ import { useKnockFeed as c } from "@knocklabs/react-core";
4
+ import { UnseenBadge as a } from "../UnseenBadge/UnseenBadge.mjs";
6
5
 
7
- const x = c.forwardRef(({ onClick: t, badgeCountType: n }, i) => {
8
- const { colorMode: r } = a();
9
- return /* @__PURE__ */ e(
10
- "button",
11
- {
12
- className: `rnf-notification-icon-button rnf-notification-icon-button--${r}`,
13
- role: "button",
14
- "aria-label": "Open notification feed",
15
- ref: i,
16
- onClick: t,
17
- children: [
18
- /* @__PURE__ */ o(f, {}),
19
- /* @__PURE__ */ o(m, { badgeCountType: n })
20
- ]
21
- }
22
- );
6
+ const d = o.forwardRef(({
7
+ onClick: t,
8
+ badgeCountType: e
9
+ }, n) => {
10
+ const {
11
+ colorMode: r
12
+ } = c();
13
+ return /* @__PURE__ */ o.createElement("button", { className: `rnf-notification-icon-button rnf-notification-icon-button--${r}`, role: "button", "aria-label": "Open notification feed", ref: n, onClick: t }, /* @__PURE__ */ o.createElement(i, null), /* @__PURE__ */ o.createElement(a, { badgeCountType: e }));
23
14
  });
24
15
  export {
25
- x as NotificationIconButton
16
+ d as NotificationIconButton
26
17
  };
27
18
  //# sourceMappingURL=NotificationIconButton.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationIconButton.mjs","sources":["../../../../../../src/modules/feed/components/NotificationIconButton/NotificationIconButton.tsx"],"sourcesContent":["import React, { SyntheticEvent } from \"react\";\nimport { BellIcon } from \"../../../core/components/Icons\";\nimport { useKnockFeed } from \"@knocklabs/react-core\";\nimport { BadgeCountType, UnseenBadge } from \"../UnseenBadge\";\n\nimport \"./styles.css\";\n\nexport interface NotificationIconButtonProps {\n // What value should we use to drive the badge count?\n badgeCountType?: BadgeCountType;\n onClick: (e: SyntheticEvent) => void;\n}\n\nexport const NotificationIconButton = React.forwardRef<\n HTMLButtonElement,\n NotificationIconButtonProps\n>(({ onClick, badgeCountType }, ref) => {\n const { colorMode } = useKnockFeed();\n\n return (\n <button\n className={`rnf-notification-icon-button rnf-notification-icon-button--${colorMode}`}\n role=\"button\"\n aria-label=\"Open notification feed\"\n ref={ref}\n onClick={onClick}\n >\n <BellIcon />\n <UnseenBadge badgeCountType={badgeCountType} />\n </button>\n );\n});\n"],"names":["NotificationIconButton","React","onClick","badgeCountType","ref","colorMode","useKnockFeed","jsxs","jsx","BellIcon","UnseenBadge"],"mappings":";;;;;;AAaa,MAAAA,IAAyBC,EAAM,WAG1C,CAAC,EAAE,SAAAC,GAAS,gBAAAC,KAAkBC,MAAQ;AAChC,QAAA,EAAE,WAAAC,MAAcC;AAGpB,SAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,8DAA8DF,CAAS;AAAA,MAClF,MAAK;AAAA,MACL,cAAW;AAAA,MACX,KAAAD;AAAA,MACA,SAAAF;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAM,EAACC,GAAS,EAAA;AAAA,QACV,gBAAAD,EAACE,KAAY,gBAAAP,GAAgC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD,CAAC;"}
1
+ {"version":3,"file":"NotificationIconButton.mjs","sources":["../../../../../../src/modules/feed/components/NotificationIconButton/NotificationIconButton.tsx"],"sourcesContent":["import React, { SyntheticEvent } from \"react\";\nimport { BellIcon } from \"../../../core/components/Icons\";\nimport { useKnockFeed } from \"@knocklabs/react-core\";\nimport { BadgeCountType, UnseenBadge } from \"../UnseenBadge\";\n\nimport \"./styles.css\";\n\nexport interface NotificationIconButtonProps {\n // What value should we use to drive the badge count?\n badgeCountType?: BadgeCountType;\n onClick: (e: SyntheticEvent) => void;\n}\n\nexport const NotificationIconButton = React.forwardRef<\n HTMLButtonElement,\n NotificationIconButtonProps\n>(({ onClick, badgeCountType }, ref) => {\n const { colorMode } = useKnockFeed();\n\n return (\n <button\n className={`rnf-notification-icon-button rnf-notification-icon-button--${colorMode}`}\n role=\"button\"\n aria-label=\"Open notification feed\"\n ref={ref}\n onClick={onClick}\n >\n <BellIcon />\n <UnseenBadge badgeCountType={badgeCountType} />\n </button>\n );\n});\n"],"names":["NotificationIconButton","React","forwardRef","onClick","badgeCountType","ref","colorMode","useKnockFeed","BellIcon","UnseenBadge"],"mappings":";;;;;AAaaA,MAAAA,IAAyBC,EAAMC,WAG1C,CAAC;AAAA,EAAEC,SAAAA;AAAAA,EAASC,gBAAAA;AAAe,GAAGC,MAAQ;AAChC,QAAA;AAAA,IAAEC,WAAAA;AAAAA,MAAcC,EAAa;AAEnC,yCACG,UACC,EAAA,WAAY,8DAA6DD,CAAU,IACnF,MAAK,UACL,cAAW,0BACX,KAAAD,GACA,SAAAF,KAECF,gBAAAA,EAAA,cAAAO,GAAA,IAAQ,GACRP,gBAAAA,EAAA,cAAAQ,GAAA,EAAY,gBAAAL,GAA+B,CAC9C;AAEJ,CAAC;"}
@@ -1,7 +1,7 @@
1
- import { jsx as u } from "react/jsx-runtime";
2
- import { useKnockFeed as s, formatBadgeCount as o } from "@knocklabs/react-core";
1
+ import u from "react";
2
+ import { useKnockFeed as a, formatBadgeCount as o } from "@knocklabs/react-core";
3
3
 
4
- function c(n, e) {
4
+ function s(n, e) {
5
5
  switch (n) {
6
6
  case "all":
7
7
  return e.total_count;
@@ -11,15 +11,15 @@ function c(n, e) {
11
11
  return e.unseen_count;
12
12
  }
13
13
  }
14
- const i = ({
14
+ const m = ({
15
15
  badgeCountType: n = "unseen"
16
16
  }) => {
17
- const { useFeedStore: e } = s(), t = e(
18
- (r) => c(n, r.metadata)
19
- );
20
- return t !== 0 ? /* @__PURE__ */ u("div", { className: "rnf-unseen-badge", children: /* @__PURE__ */ u("span", { className: "rnf-unseen-badge__count", children: o(t) }) }) : null;
17
+ const {
18
+ useFeedStore: e
19
+ } = a(), t = e((r) => s(n, r.metadata));
20
+ return t !== 0 ? /* @__PURE__ */ u.createElement("div", { className: "rnf-unseen-badge" }, /* @__PURE__ */ u.createElement("span", { className: "rnf-unseen-badge__count" }, o(t))) : null;
21
21
  };
22
22
  export {
23
- i as UnseenBadge
23
+ m as UnseenBadge
24
24
  };
25
25
  //# sourceMappingURL=UnseenBadge.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UnseenBadge.mjs","sources":["../../../../../../src/modules/feed/components/UnseenBadge/UnseenBadge.tsx"],"sourcesContent":["import React from \"react\";\nimport { useKnockFeed, formatBadgeCount } from \"@knocklabs/react-core\";\n\nimport \"./styles.css\";\nimport { FeedMetadata } from \"@knocklabs/client\";\n\nexport type BadgeCountType = \"unseen\" | \"unread\" | \"all\";\n\nexport type UnseenBadgeProps = {\n badgeCountType?: BadgeCountType;\n};\n\nfunction selectBadgeCount(\n badgeCountType: BadgeCountType,\n metadata: FeedMetadata,\n) {\n switch (badgeCountType) {\n case \"all\":\n return metadata.total_count;\n case \"unread\":\n return metadata.unread_count;\n case \"unseen\":\n return metadata.unseen_count;\n }\n}\n\nexport const UnseenBadge: React.FC<UnseenBadgeProps> = ({\n badgeCountType = \"unseen\",\n}) => {\n const { useFeedStore } = useKnockFeed();\n const badgeCountValue = useFeedStore((state) =>\n selectBadgeCount(badgeCountType, state.metadata),\n );\n\n return badgeCountValue !== 0 ? (\n <div className=\"rnf-unseen-badge\">\n <span className=\"rnf-unseen-badge__count\">\n {formatBadgeCount(badgeCountValue)}\n </span>\n </div>\n ) : null;\n};\n"],"names":["selectBadgeCount","badgeCountType","metadata","UnseenBadge","useFeedStore","useKnockFeed","badgeCountValue","state","jsx","formatBadgeCount"],"mappings":";;;AAYA,SAASA,EACPC,GACAC,GACA;AACA,UAAQD,GAAgB;AAAA,IACtB,KAAK;AACH,aAAOC,EAAS;AAAA,IAClB,KAAK;AACH,aAAOA,EAAS;AAAA,IAClB,KAAK;AACH,aAAOA,EAAS;AAAA,EACpB;AACF;AAEO,MAAMC,IAA0C,CAAC;AAAA,EACtD,gBAAAF,IAAiB;AACnB,MAAM;AACE,QAAA,EAAE,cAAAG,MAAiBC,KACnBC,IAAkBF;AAAA,IAAa,CAACG,MACpCP,EAAiBC,GAAgBM,EAAM,QAAQ;AAAA,EAAA;AAGjD,SAAOD,MAAoB,IACxB,gBAAAE,EAAA,OAAA,EAAI,WAAU,oBACb,UAAA,gBAAAA,EAAC,QAAK,EAAA,WAAU,2BACb,UAAAC,EAAiBH,CAAe,EACnC,CAAA,GACF,IACE;AACN;"}
1
+ {"version":3,"file":"UnseenBadge.mjs","sources":["../../../../../../src/modules/feed/components/UnseenBadge/UnseenBadge.tsx"],"sourcesContent":["import React from \"react\";\nimport { useKnockFeed, formatBadgeCount } from \"@knocklabs/react-core\";\n\nimport \"./styles.css\";\nimport { FeedMetadata } from \"@knocklabs/client\";\n\nexport type BadgeCountType = \"unseen\" | \"unread\" | \"all\";\n\nexport type UnseenBadgeProps = {\n badgeCountType?: BadgeCountType;\n};\n\nfunction selectBadgeCount(\n badgeCountType: BadgeCountType,\n metadata: FeedMetadata,\n) {\n switch (badgeCountType) {\n case \"all\":\n return metadata.total_count;\n case \"unread\":\n return metadata.unread_count;\n case \"unseen\":\n return metadata.unseen_count;\n }\n}\n\nexport const UnseenBadge: React.FC<UnseenBadgeProps> = ({\n badgeCountType = \"unseen\",\n}) => {\n const { useFeedStore } = useKnockFeed();\n const badgeCountValue = useFeedStore((state) =>\n selectBadgeCount(badgeCountType, state.metadata),\n );\n\n return badgeCountValue !== 0 ? (\n <div className=\"rnf-unseen-badge\">\n <span className=\"rnf-unseen-badge__count\">\n {formatBadgeCount(badgeCountValue)}\n </span>\n </div>\n ) : null;\n};\n"],"names":["selectBadgeCount","badgeCountType","metadata","total_count","unread_count","unseen_count","UnseenBadge","useFeedStore","useKnockFeed","badgeCountValue","state","React","formatBadgeCount"],"mappings":";;;AAYA,SAASA,EACPC,GACAC,GACA;AACA,UAAQD,GAAc;AAAA,IACpB,KAAK;AACH,aAAOC,EAASC;AAAAA,IAClB,KAAK;AACH,aAAOD,EAASE;AAAAA,IAClB,KAAK;AACH,aAAOF,EAASG;AAAAA,EACpB;AACF;AAEO,MAAMC,IAA0CA,CAAC;AAAA,EACtDL,gBAAAA,IAAiB;AACnB,MAAM;AACE,QAAA;AAAA,IAAEM,cAAAA;AAAAA,MAAiBC,EAAa,GAChCC,IAAkBF,EAAcG,CAAAA,MACpCV,EAAiBC,GAAgBS,EAAMR,QAAQ,CACjD;AAEA,SAAOO,MAAoB,IACxBE,gBAAAA,EAAA,cAAA,OAAA,EAAI,WAAU,sBACbA,gBAAAA,EAAA,cAAC,QAAK,EAAA,WAAU,0BACbC,GAAAA,EAAiBH,CAAe,CACnC,CACF,IACE;AACN;"}