@orderly.network/ui-notification 2.8.11-alpha.0 → 2.8.11-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -140,12 +140,14 @@ var AnnouncementItem = (props) => {
140
140
  return t("notification.listing");
141
141
  case types.AnnouncementType.Maintenance:
142
142
  return t("notification.maintenance");
143
+ case types.AnnouncementType.Vote:
144
+ return t("notification.vote");
143
145
  default:
144
146
  return t("notification.general");
145
147
  }
146
148
  }, [props.type, t]);
147
149
  const action = react.useMemo(() => {
148
- if (props.type === types.AnnouncementType.Campaign && typeof props.url === "string" && props.url !== "" && typeof props.onItemClick === "function") {
150
+ if ((props.type === types.AnnouncementType.Campaign || props.type === types.AnnouncementType.Vote) && typeof props.url === "string" && props.url !== "" && typeof props.onItemClick === "function") {
149
151
  return /* @__PURE__ */ jsxRuntime.jsxs(
150
152
  ui.Flex,
151
153
  {
@@ -363,6 +365,31 @@ var ListingContentCard = ({ message, updateTime }) => {
363
365
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", weight: "bold", children: message })
364
366
  ] });
365
367
  };
368
+ var CommunityVoteContentCard = ({ message, url, onItemClick }) => {
369
+ const { t } = i18n.useTranslation();
370
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "oui-flex oui-flex-col oui-gap-2", children: [
371
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", weight: "bold", children: message }),
372
+ typeof url === "string" && url !== "" && typeof onItemClick === "function" && /* @__PURE__ */ jsxRuntime.jsxs(
373
+ "button",
374
+ {
375
+ className: "oui-flex oui-items-center oui-gap-1",
376
+ onClick: () => onItemClick(url),
377
+ children: [
378
+ /* @__PURE__ */ jsxRuntime.jsx(
379
+ ui.Text,
380
+ {
381
+ size: "xs",
382
+ color: "buy",
383
+ className: "oui-bg-clip-text oui-text-transparent oui-gradient-brand",
384
+ children: t("notification.joinNow")
385
+ }
386
+ ),
387
+ /* @__PURE__ */ jsxRuntime.jsx(ArrowRightShortIcon, { size: 18, color: "success" })
388
+ ]
389
+ }
390
+ )
391
+ ] });
392
+ };
366
393
  var NotificationHeader = (props) => {
367
394
  const { t } = i18n.useTranslation();
368
395
  const { expanded } = props;
@@ -384,6 +411,8 @@ var NotificationHeader = (props) => {
384
411
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", color: "buy", children: t("notification.listing") });
385
412
  case types.AnnouncementType.Maintenance:
386
413
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", color: "warning", children: t("notification.maintenanceTitle") });
414
+ case types.AnnouncementType.Vote:
415
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", color: "inherit", children: t("notification.vote") });
387
416
  default:
388
417
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "sm", color: "inherit", children: t("notification.generalTitle") });
389
418
  }
@@ -492,6 +521,15 @@ var NotificationContent = (props) => {
492
521
  updateTime: message.updated_time ?? 0
493
522
  }
494
523
  );
524
+ case types.AnnouncementType.Vote:
525
+ return /* @__PURE__ */ jsxRuntime.jsx(
526
+ CommunityVoteContentCard,
527
+ {
528
+ message: message.message,
529
+ url: message.url ?? "",
530
+ onItemClick: props.onItemClick
531
+ }
532
+ );
495
533
  default:
496
534
  return /* @__PURE__ */ jsxRuntime.jsx(
497
535
  ListingContentCard,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/announcementCenter/icons.tsx","../src/components/announcementCenter/announcementItem.tsx","../src/components/announcementCenter/announcementCenter.ui.tsx","../src/components/notification/contentCard.tsx","../src/components/notification/notification.ui.tsx","../src/hooks/useAnnouncement.ts","../src/pages/announcementCenter.script.tsx","../src/pages/announcementCenter.ui.tsx","../src/pages/announcementCenter.widget.tsx","../src/pages/announcementCenter.page.tsx"],"names":["Icon","jsx","jsxs","useTranslation","useMemo","AnnouncementType","Flex","Text","cn","ChevronDownIcon","ExtensionSlot","ExtensionPositionEnum","useState","Fragment","ScrollArea","ChevronLeftIcon","ChevronRightIcon","Divider","format","UTCDateMini","useWS","useOrderlyContext","useLocalStorage","useMaintenanceStatus","useQuery","brokerName","useEffect","MaintenanceStatus","useAppContext","AnnouncementCenterUI","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import { FC } from \"react\";\nimport type { BaseIconProps } from \"@orderly.network/ui\";\nimport { Icon } from \"@orderly.network/ui\";\n\nexport const BattleIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const CampaignIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const ArrowRightShortIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"M4.509 8.995a.75.75 0 0 1 .75-.75h5.666L8.7 5.998l1.054-1.054 3.535 3.512c.147.146.22.343.22.54a.76.76 0 0 1-.22.537l-3.535 3.512L8.7 11.992l2.225-2.248H5.258a.75.75 0 0 1-.749-.75\"\n />\n </Icon>\n );\n};\n\nexport const FundIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M15.694 7.087c-.788-.393-1.857-.618-2.925-.618-1.125 0-2.138.225-2.925.618-.056 0-.113.057-.113.057V3.769c0-.9-.731-1.575-1.462-1.913-.788-.394-1.857-.619-2.925-.619-1.069 0-2.25.225-3.038.62C1.575 2.193.844 2.868.844 3.768v10.519c0 .9.731 1.575 1.462 1.912.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.281-.169.563-.337.788-.562.225.225.506.393.787.562.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.732-.394 1.463-1.012 1.463-1.912V9c.112-.9-.619-1.519-1.35-1.913m-7.369 7.144c0 .113-.112.45-.731.732-.563.28-1.407.506-2.363.506s-1.8-.169-2.362-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.563.281-1.407.506-2.363.506s-1.8-.168-2.362-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.856.62 2.925.62s2.138-.226 2.925-.62c.056 0 .113-.056.113-.056v.788zm0-2.644c0 .112-.112.45-.731.731-.563.281-1.407.507-2.363.507s-1.8-.17-2.362-.507C2.25 9.45 2.138 9.112 2.138 9v-.788c.056 0 .112.057.112.057.788.393 1.856.618 2.925.618S7.313 8.662 8.1 8.27c.056 0 .113-.057.113-.057V9zm0-2.644c0 .113-.112.45-.731.731-.563.282-1.407.507-2.363.507s-1.8-.169-2.362-.507c-.619-.28-.731-.618-.731-.73v-.732c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zM7.594 4.5c-.563.281-1.407.506-2.363.506S3.488 4.781 2.925 4.5c-.619-.338-.731-.619-.731-.731 0-.113.112-.45.731-.732.563-.28 1.406-.506 2.363-.506.956 0 1.8.169 2.362.506.619.282.731.62.731.732-.056.112-.168.393-.787.731m8.212 9.731c0 .113-.112.45-.731.732-.562.28-1.406.506-2.362.506s-1.8-.169-2.363-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112.056.112.056.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.562.281-1.406.506-2.362.506s-1.8-.168-2.363-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.857.62 2.925.62 1.125 0 2.138-.226 2.925-.62.056 0 .113-.056.113-.056v.788zm-.675-1.913c-.562.281-1.406.507-2.362.507s-1.8-.17-2.363-.507c-.619-.281-.731-.619-.731-.731 0-.113.112-.45.731-.731.563-.282 1.406-.507 2.363-.507.956 0 1.8.17 2.362.507.619.281.732.618.732.731-.057.112-.17.45-.732.731\"\n />\n </Icon>\n );\n};\n\nexport const AnnouncementIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M11.53 2.255a.745.745 0 0 0-.82.165c-.525.524-1.188.959-1.947 1.284-.77.33-2.353.757-3.508.75-2.248-.015-3.756 1.259-3.756 3.726 0 2.163 1.228 3.42 2.994 3.703l.006 1.565a2.25 2.25 0 0 0 2.25 2.247c1.142 0 2.083-.883 2.228-1.988.007-.053.022-.26.022-1.01.674.315 1.232.812 1.711 1.29.473.472 1.29.13 1.29-.538 0-.678-.004-1.906-.004-3.13.884-.327 1.503-1.165 1.503-2.115s-.585-1.81-1.496-2.129c0-1.225-.004-2.439-.004-3.117a.76.76 0 0 0-.469-.703m1.805 1.335a.73.73 0 0 0-.445.351.75.75 0 0 0 .258 1.03 3.74 3.74 0 0 1 1.851 3.233 3.74 3.74 0 0 1-1.851 3.231.76.76 0 0 0-.282 1.03.754.754 0 0 0 1.032.258 5.24 5.24 0 0 0 2.601-4.52 5.24 5.24 0 0 0-2.601-4.519.74.74 0 0 0-.563-.094m-2.832.884c0 .694-.004 1.417-.004 2.231v2.997c0 .815.003 1.508.003 2.202-1.52-.896-3.085-1.294-4.501-1.421 0-1.144-.004-3.406-.004-4.584.147-.007.318-.026.565-.06a11.2 11.2 0 0 0 2.812-.773c.43-.184.75-.35 1.129-.592m-6.005 1.55-.001 4.34c-.976-.27-1.498-.959-1.498-2.184 0-1.21.47-1.928 1.499-2.155M6 11.998c.238.008 1.098.161 1.493.261l.007 1.19a.75.75 0 0 1-1.5 0z\"\n />\n </Icon>\n );\n};\n\nexport const SecurityIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n d=\"M6.563 7.678V6.603c0-1.153 1.09-2.088 2.437-2.088s2.438.935 2.438 2.088v1.075c.448 0 .812.311.812.696v3.479c0 .384-.364.696-.812.696H6.563c-.449 0-.813-.312-.813-.696v-3.48c0-.384.364-.695.813-.695m1.187-.006 1.431.006h1.07V6.564c0-.64-.504-1.104-1.25-1.104-.748 0-1.25.465-1.25 1.104zm1.956 2.14c0-.335-.317-.605-.706-.605-.39 0-.706.27-.706.604v.77c0 .335.316.605.706.605s.706-.27.706-.604z\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M2 3.607c.003 5.606.146 11.651 6.879 13.378.078.02.164.02.242 0C15.854 15.258 15.997 9.213 16 3.607c0-.217-.14-.41-.345-.477L9.31 1.05a1 1 0 0 0-.62 0L2.345 3.13A.5.5 0 0 0 2 3.607m2.326 7.63c-.707-1.954-.81-4.33-.824-6.902L9 2.532l5.498 1.803c-.014 2.573-.117 4.948-.824 6.901-.697 1.93-1.987 3.463-4.674 4.222-2.687-.759-3.977-2.293-4.674-4.222\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n </Icon>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType } from \"@orderly.network/types\";\nimport { Flex, Text, ChevronDownIcon, cn } from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n ArrowRightShortIcon,\n CampaignIcon,\n FundIcon,\n SecurityIcon,\n} from \"./icons\";\n\nexport const AnnouncementItem: FC<{\n // title: string;\n expanded: boolean;\n url?: string | null;\n onItemClick: (url: string) => void;\n onExpandToggle?: () => void;\n type: AnnouncementType | undefined | null;\n message: string;\n updatedTime: number;\n className?: string;\n showDivider?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const Icon = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return CampaignIcon;\n\n case AnnouncementType.Listing:\n return FundIcon;\n case AnnouncementType.Maintenance:\n return SecurityIcon;\n case AnnouncementType.Delisting:\n default:\n return AnnouncementIcon;\n }\n }, [props.type]);\n\n const title = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return t(\"notification.campaign\");\n case AnnouncementType.Delisting:\n return t(\"notification.delisting\");\n case AnnouncementType.Listing:\n return t(\"notification.listing\");\n case AnnouncementType.Maintenance:\n return t(\"notification.maintenance\");\n default:\n return t(\"notification.general\");\n }\n }, [props.type, t]);\n\n const action = useMemo(() => {\n if (\n props.type === AnnouncementType.Campaign &&\n typeof props.url === \"string\" &&\n props.url !== \"\" &&\n typeof props.onItemClick === \"function\"\n ) {\n return (\n <Flex\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation();\n props.onItemClick(props.url!);\n }}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} />\n </Flex>\n );\n }\n return null;\n }, [props.type, props.url, t]);\n\n const updateTime = useMemo(() => {\n if (props.type === AnnouncementType.Maintenance) {\n return (\n <Text size=\"2xs\" intensity={36}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n );\n }\n return (\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule=\"date\"\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.updatedTime}\n </Text.formatted>\n );\n }, [props.updatedTime, props.type, t]);\n\n return (\n <Flex\n gap={2}\n itemAlign=\"start\"\n className={cn(\n \"oui-px-2 oui-py-[6px] oui-text-base-contrast-80\",\n !props.showDivider && \"oui-rounded-md hover:oui-bg-base-6\",\n !props.showDivider && props.expanded && \"oui-bg-base-6\",\n props.className,\n )}\n onClick={() => {\n props.onExpandToggle?.();\n }}\n >\n <Icon color=\"white\" className=\"oui-mt-3 oui-shrink-0\" />\n\n <Flex direction=\"column\" itemAlign=\"start\" grow>\n <Text size=\"xs\" intensity={80} weight=\"bold\">\n {title}\n </Text>\n {updateTime}\n {/* Expandable content with animation */}\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: props.expanded ? \"1fr\" : \"0fr\",\n }}\n >\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-overflow-hidden\">\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-pt-2\">\n {props.message}\n </Text>\n {action}\n </div>\n </div>\n </Flex>\n <div className=\"oui-pt-3\">\n {/* Chevron icon with rotation animation */}\n <ChevronDownIcon\n color=\"white\"\n size={18}\n className={`oui-transition-transform oui-duration-300 oui-ease-in-out ${\n props.expanded ? \"oui-rotate-180\" : \"oui-rotate-0\"\n }`}\n />\n </div>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { type API } from \"@orderly.network/types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\nimport { AnnouncementItem } from \"./announcementItem\";\n\nexport const AnnouncementContent: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n onExpandToggle: (id: string | number | null) => void;\n onItemClick: (url: string) => void;\n showDivider?: boolean;\n}> = (props) => {\n const { dataSource, current, onExpandToggle, onItemClick } = props;\n const { t } = useTranslation();\n\n if (!Array.isArray(dataSource) || dataSource.length === 0) {\n return (\n <div className=\"oui-flex oui-h-[160px] oui-items-center oui-justify-center\">\n <ExtensionSlot\n position={ExtensionPositionEnum.EmptyDataIdentifier}\n title={t(\"notification.empty\")}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-col oui-space-y-1\",\n props.showDivider &&\n \"[&>*:not(:first-child)]:oui-border-t [&>*:not(:first-child)]:oui-border-line-12 [&>*:not(:first-child)]:oui-pt-1\",\n )}\n >\n {dataSource.map((item) => (\n <AnnouncementItem\n url={item.url}\n onItemClick={onItemClick}\n key={item.announcement_id}\n message={item.message}\n updatedTime={item.updated_time ?? 0}\n expanded={current === item.announcement_id}\n type={item.type}\n showDivider={props.showDivider}\n onExpandToggle={() => {\n if (current === item.announcement_id) {\n onExpandToggle(null);\n } else {\n onExpandToggle(item.announcement_id);\n }\n }}\n />\n ))}\n </div>\n );\n};\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState<string | number | null>(null);\n\n return (\n <>\n <div className=\"oui-px-5 oui-pt-4\">\n <Text intensity={80} weight=\"bold\">\n {t(\"notification.title\")}\n </Text>\n </div>\n\n <ScrollArea className=\"oui-flex oui-h-[300px] oui-flex-col oui-space-y-1 oui-p-3\">\n <AnnouncementContent\n dataSource={props.dataSource}\n current={expanded}\n onExpandToggle={setExpanded}\n onItemClick={props.onItemClick}\n />\n </ScrollArea>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text } from \"@orderly.network/ui\";\nimport { ArrowRightShortIcon } from \"../announcementCenter/icons\";\n\nexport const CampaignContentCard: FC<{\n message: string;\n coverImage: string;\n updateTime: number;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, coverImage, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-5\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n <div\n className=\"oui-rounded-xl oui-bg-base-9 oui-bg-cover oui-bg-center oui-bg-no-repeat\"\n style={{\n backgroundImage: `url(${coverImage})`,\n height: \"100px\",\n }}\n ></div>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const MaintenanceContentCard: FC<{\n message: string;\n startTime: number;\n endTime: number;\n}> = ({ message, startTime, endTime }) => {\n const { t } = useTranslation();\n // const formattedMessage = useMemo(() => {\n // // Calculate duration in hours\n // const hours = differenceInHours(endTime, startTime);\n\n // const minutes = differenceInMinutes(endTime, startTime) - hours * 60;\n\n // // Convert timestamps to UTC dates\n // const startUtc = new UTCDate(startTime);\n // const endUtc = new UTCDate(endTime);\n\n // // Format start time as HH:mm (24-hour format) in UTC\n // const startTimeFormatted = format(startUtc, \"HH:mm\");\n\n // // Format end time as hh:mm a (12-hour format with AM/PM) in UTC\n // const endTimeFormatted = format(endUtc, \"hh:mm a\");\n\n // if (hours > 0) {\n // return t(\"notification.maintenanceDuration.hours\", {\n // hours: minutes > 0 ? (hours + minutes / 60).toFixed(1) : hours,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }\n\n // return t(\"notification.maintenanceDuration.minutes\", {\n // minutes,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }, [startTime, endTime, t]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"xs\" intensity={54}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n {/* <Flex itemAlign={\"center\"}>\n <Text size=\"xs\" weight=\"bold\">\n {formattedMessage}\n </Text>\n </Flex> */}\n {message && (\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-mt-2\">\n {message}\n </Text>\n )}\n </div>\n );\n};\n\nexport const DelistingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const ListingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n","import { FC, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType, type API } from \"@orderly.network/types\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n Divider,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n BattleIcon,\n FundIcon,\n SecurityIcon,\n} from \"../announcementCenter/icons\";\nimport {\n CampaignContentCard,\n DelistingContentCard,\n ListingContentCard,\n MaintenanceContentCard,\n} from \"./contentCard\";\n\nexport interface NotificationProps {\n // Define your notification props here\n className?: string;\n // children?: React.ReactNode;\n dataSource: API.AnnouncementRow[];\n onClose?: () => void;\n}\n\nexport interface NotificationItemProps {\n id: string;\n type?: \"success\" | \"error\" | \"warning\" | \"info\";\n title?: string;\n message: string;\n onClose?: () => void;\n}\n\nexport interface NotificationListProps {\n notifications: NotificationItemProps[];\n onRemove?: (id: string) => void;\n}\n\nconst NotificationHeader: FC<{\n // type: AnnouncementType;\n dataSource: API.AnnouncementRow[];\n current: number;\n expanded?: boolean;\n onExpandToggle?: () => void;\n // onClose?: () => void;\n}> = (props) => {\n const { t } = useTranslation();\n const { expanded } = props;\n const { type } = props.dataSource[props.current];\n\n const title = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <Text\n size=\"sm\"\n className=\"oui-text-transparent oui-bg-clip-text oui-gradient-brand\"\n >\n {t(\"notification.campaign\")}\n </Text>\n );\n case AnnouncementType.Delisting:\n return <Text size=\"sm\">{t(\"notification.delistingTitle\")}</Text>;\n case AnnouncementType.Listing:\n return (\n <Text size=\"sm\" color=\"buy\">\n {t(\"notification.listing\")}\n </Text>\n );\n case AnnouncementType.Maintenance:\n return (\n <Text size=\"sm\" color=\"warning\">\n {t(\"notification.maintenanceTitle\")}\n </Text>\n );\n default:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.generalTitle\")}\n </Text>\n );\n }\n }, [type, t]);\n const icon = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return <BattleIcon color=\"white\" />;\n\n case AnnouncementType.Listing:\n return <FundIcon color=\"success\" />;\n case AnnouncementType.Maintenance:\n return <SecurityIcon color=\"warning\" />;\n case AnnouncementType.Delisting:\n default:\n return <AnnouncementIcon color=\"white\" />;\n }\n }, [type]);\n return (\n <Flex itemAlign=\"center\" justify=\"between\" className=\"oui-px-4 oui-py-3\">\n <div className=\"orderly-notification-header oui-flex oui-items-center oui-gap-2\">\n {icon}\n {title}\n </div>\n <button\n onClick={props.onExpandToggle}\n className=\"oui-transition-transform oui-duration-300\"\n style={{\n transform: !expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n }}\n >\n <ChevronDownIcon size={18} color=\"white\" />\n </button>\n </Flex>\n );\n};\n\nconst NotificationFooter: FC<{\n total: number;\n current: number;\n onCloseAll: () => void;\n onPrev: () => void;\n onNext: () => void;\n}> = (props) => {\n const { total, current, onCloseAll, onPrev, onNext } = props;\n const { t } = useTranslation();\n return (\n <Flex\n className=\"orderly-notification-footer oui-px-4 oui-py-2\"\n itemAlign=\"center\"\n justify=\"between\"\n >\n <Flex gap={2}>\n <button\n disabled={current - 1 < 0}\n onClick={onPrev}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronLeftIcon size={14} color=\"white\" />\n </button>\n <Text intensity={54} size=\"sm\">\n {current + 1}/{total}\n </Text>\n <button\n disabled={current + 1 >= total}\n onClick={onNext}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronRightIcon size={14} color=\"white\" />\n </button>\n </Flex>\n <button onClick={onCloseAll}>\n <Text size=\"xs\" color=\"primary\">\n {t(\"notification.closeAll\", { total })}\n </Text>\n </button>\n </Flex>\n );\n};\n\nconst NotificationContent: FC<{\n dataSource: (API.AnnouncementRow & {\n startTime?: number;\n endTime?: number;\n })[];\n current: number;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const elements = useMemo(() => {\n return props.dataSource.map((message) => {\n const { type } = message;\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <CampaignContentCard\n message={message.message}\n coverImage={message.coverImage ?? \"\"}\n updateTime={message.updated_time ?? 0}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n case AnnouncementType.Maintenance:\n return (\n <MaintenanceContentCard\n message={message.message}\n startTime={message.startTime ?? 0}\n endTime={message.endTime ?? 0}\n />\n );\n case AnnouncementType.Delisting:\n return (\n <DelistingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n default:\n return (\n <ListingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n }\n });\n }, [props.dataSource]);\n return <>{elements[props.current]}</>;\n};\n\nexport const NotificationUI: FC<\n NotificationProps & {\n maintenanceMessage?: string;\n onItemClick: (url: string) => void;\n }\n> = (props) => {\n const [expanded, setExpanded] = useState(true);\n\n const [current, setCurrent] = useState(0);\n const len = useMemo(() => props.dataSource?.length ?? 0, [props.dataSource]);\n\n if (len === 0) {\n return null;\n }\n\n return (\n <div className=\"orderly-notification oui-w-full \">\n <NotificationHeader\n dataSource={props.dataSource ?? []}\n current={current}\n expanded={expanded}\n onExpandToggle={() => {\n setExpanded(!expanded);\n }}\n />\n <Divider className=\"oui-mx-4\" />\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: expanded ? \"1fr\" : \"0fr\",\n }}\n >\n {/* Inner div needs overflow-hidden and min-height-0 for grid animation to work */}\n <div className=\"oui-min-h-0 oui-overflow-hidden \">\n <div className=\"oui-px-4 oui-py-3\">\n <NotificationContent\n dataSource={props.dataSource ?? []}\n current={current}\n onItemClick={props.onItemClick}\n />\n </div>\n </div>\n </div>\n\n <NotificationFooter\n total={len}\n current={current}\n onCloseAll={props.onClose ?? (() => {})}\n onPrev={() => {\n if (current - 1 < 0) {\n return;\n }\n setCurrent(current - 1);\n }}\n onNext={() => {\n if (current + 1 >= len) {\n return;\n }\n setCurrent(current + 1);\n }}\n />\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AnnouncementType, API, WSMessage } from \"@orderly.network/types\";\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (list: API.AnnouncementRow[]) => {\n return list.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n};\n\nconst filterDuplicateArrayById = (list: API.AnnouncementRow[]) => {\n const seenIds = new Set<string | number>();\n const newList: API.AnnouncementRow[] = [];\n\n list.forEach((item) => {\n if (!seenIds.has(item.announcement_id)) {\n // If the item's ID hasn't been seen before, add it and mark as seen\n seenIds.add(item.announcement_id);\n newList.push(item);\n }\n });\n\n return newList;\n};\n\nconst useAnnouncementData = () => {\n const { t } = useTranslation();\n const ws = useWS();\n const { dataAdapter } = useOrderlyContext();\n\n const [announcementStore, setAnnouncementStore] =\n useLocalStorage<AnnouncementStore>(ORDERLY_ANNOUNCEMENT_KEY, {});\n\n const [tips, setTips] = useState<API.AnnouncementRow[]>([]);\n const [maintenances, setMaintenances] = useState([] as API.AnnouncementRow[]);\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n\n const dialogContent =\n status === MaintenanceStatus.Maintenance\n ? getMaintentDialogContent(brokerName, endDate)\n : undefined;\n\n setMaintenanceDialogInfo(dialogContent);\n\n if (startTime && endTime) {\n setMaintenances([\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n startTime: startTime,\n endTime: endTime,\n updated_time: startTime,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ] as unknown as API.AnnouncementRow[]);\n } else {\n setMaintenances([]);\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n useEffect(() => {\n let list = [...(maintenances ?? []), ...(announcements?.rows ?? [])];\n\n if (typeof dataAdapter?.announcementList === \"function\") {\n list = dataAdapter.announcementList(list);\n }\n\n const removedDuplicateList = filterDuplicateArrayById(list);\n const sortedList = sortDataByUpdatedTime(removedDuplicateList);\n\n setTips(sortedList);\n }, [maintenances, announcements, dataAdapter?.announcementList]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const lastUpdateTime = announcements.last_updated_time ?? 0;\n const firstTipTime = tips[0]?.updated_time ?? 0;\n const updatedTime = Math.max(lastUpdateTime, firstTipTime);\n\n const closedTime = announcementStore.lastUpdateTime ?? 0;\n if (closedTime < updatedTime) {\n setAnnouncementStore({ show: true, lastUpdateTime: updatedTime });\n }\n }, [announcements, tips]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n const list = prev.filter(\n (item) => item.announcement_id !== message.announcement_id,\n );\n\n const newTip = {\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n };\n return [...list, newTip];\n });\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: true }));\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n return {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n };\n};\n\nexport type AnnouncementReturn = ReturnType<typeof useAnnouncement>;\n\nexport const useAnnouncement = (options?: AnnouncementOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n\n const {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n } = useAnnouncementData();\n\n const closeTips = () => {\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = tips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [tips, announcementStore.show, options?.hideTips, setShowAnnouncement]);\n\n return {\n maintenanceDialogInfo,\n tips,\n closeTips,\n showAnnouncement,\n };\n};\n","import { useState } from \"react\";\nimport { useAnnouncement } from \"../hooks/useAnnouncement\";\n\nexport const useAnnouncementCenterScript = () => {\n const { tips } = useAnnouncement();\n const [current, setCurrent] = useState<string | number | null>(null);\n\n return {\n dataSource: tips,\n current,\n setCurrent,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { AnnouncementContent } from \"../components/announcementCenter/announcementCenter.ui\";\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n setCurrent: (current: string | number | null) => void;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent, onItemClick } = props;\n return (\n <div className=\"oui-m-1 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <AnnouncementContent\n dataSource={dataSource}\n current={current}\n onExpandToggle={setCurrent}\n onItemClick={onItemClick}\n showDivider\n />\n </div>\n );\n};\n","import { FC, useCallback } from \"react\";\nimport { useAnnouncementCenterScript } from \"./announcementCenter.script\";\nimport { AnnouncementCenterUI } from \"./announcementCenter.ui\";\n\nexport const AnnouncementCenterWidget: FC<{\n onRouteChange: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent } = useAnnouncementCenterScript();\n const onItemClick = useCallback(\n (url: string) => {\n if (!url) return;\n props.onRouteChange(url);\n },\n [props.onRouteChange],\n );\n return (\n <AnnouncementCenterUI\n dataSource={dataSource}\n current={current}\n setCurrent={setCurrent}\n onItemClick={onItemClick}\n />\n );\n};\n","import { FC } from \"react\";\nimport { RouterAdapter } from \"@orderly.network/types\";\nimport { AnnouncementCenterWidget } from \"./announcementCenter.widget\";\n\nexport const AnnouncementCenterPage: FC<{ routerAdapter?: RouterAdapter }> = (\n props,\n) => {\n return (\n <AnnouncementCenterWidget\n onRouteChange={(url: string) => {\n if (!url) return;\n props.routerAdapter?.onRouteChange({\n href: url,\n name: url,\n target: \"_blank\",\n });\n }}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/announcementCenter/icons.tsx","../src/components/announcementCenter/announcementItem.tsx","../src/components/announcementCenter/announcementCenter.ui.tsx","../src/components/notification/contentCard.tsx","../src/components/notification/notification.ui.tsx","../src/hooks/useAnnouncement.ts","../src/pages/announcementCenter.script.tsx","../src/pages/announcementCenter.ui.tsx","../src/pages/announcementCenter.widget.tsx","../src/pages/announcementCenter.page.tsx"],"names":["Icon","jsx","jsxs","useTranslation","useMemo","AnnouncementType","Flex","Text","cn","ChevronDownIcon","ExtensionSlot","ExtensionPositionEnum","useState","Fragment","ScrollArea","ChevronLeftIcon","ChevronRightIcon","Divider","format","UTCDateMini","useWS","useOrderlyContext","useLocalStorage","useMaintenanceStatus","useQuery","brokerName","useEffect","MaintenanceStatus","useAppContext","AnnouncementCenterUI","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import { FC } from \"react\";\nimport type { BaseIconProps } from \"@orderly.network/ui\";\nimport { Icon } from \"@orderly.network/ui\";\n\nexport const BattleIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const CampaignIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const ArrowRightShortIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"M4.509 8.995a.75.75 0 0 1 .75-.75h5.666L8.7 5.998l1.054-1.054 3.535 3.512c.147.146.22.343.22.54a.76.76 0 0 1-.22.537l-3.535 3.512L8.7 11.992l2.225-2.248H5.258a.75.75 0 0 1-.749-.75\"\n />\n </Icon>\n );\n};\n\nexport const FundIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M15.694 7.087c-.788-.393-1.857-.618-2.925-.618-1.125 0-2.138.225-2.925.618-.056 0-.113.057-.113.057V3.769c0-.9-.731-1.575-1.462-1.913-.788-.394-1.857-.619-2.925-.619-1.069 0-2.25.225-3.038.62C1.575 2.193.844 2.868.844 3.768v10.519c0 .9.731 1.575 1.462 1.912.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.281-.169.563-.337.788-.562.225.225.506.393.787.562.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.732-.394 1.463-1.012 1.463-1.912V9c.112-.9-.619-1.519-1.35-1.913m-7.369 7.144c0 .113-.112.45-.731.732-.563.28-1.407.506-2.363.506s-1.8-.169-2.362-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.563.281-1.407.506-2.363.506s-1.8-.168-2.362-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.856.62 2.925.62s2.138-.226 2.925-.62c.056 0 .113-.056.113-.056v.788zm0-2.644c0 .112-.112.45-.731.731-.563.281-1.407.507-2.363.507s-1.8-.17-2.362-.507C2.25 9.45 2.138 9.112 2.138 9v-.788c.056 0 .112.057.112.057.788.393 1.856.618 2.925.618S7.313 8.662 8.1 8.27c.056 0 .113-.057.113-.057V9zm0-2.644c0 .113-.112.45-.731.731-.563.282-1.407.507-2.363.507s-1.8-.169-2.362-.507c-.619-.28-.731-.618-.731-.73v-.732c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zM7.594 4.5c-.563.281-1.407.506-2.363.506S3.488 4.781 2.925 4.5c-.619-.338-.731-.619-.731-.731 0-.113.112-.45.731-.732.563-.28 1.406-.506 2.363-.506.956 0 1.8.169 2.362.506.619.282.731.62.731.732-.056.112-.168.393-.787.731m8.212 9.731c0 .113-.112.45-.731.732-.562.28-1.406.506-2.362.506s-1.8-.169-2.363-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112.056.112.056.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.562.281-1.406.506-2.362.506s-1.8-.168-2.363-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.857.62 2.925.62 1.125 0 2.138-.226 2.925-.62.056 0 .113-.056.113-.056v.788zm-.675-1.913c-.562.281-1.406.507-2.362.507s-1.8-.17-2.363-.507c-.619-.281-.731-.619-.731-.731 0-.113.112-.45.731-.731.563-.282 1.406-.507 2.363-.507.956 0 1.8.17 2.362.507.619.281.732.618.732.731-.057.112-.17.45-.732.731\"\n />\n </Icon>\n );\n};\n\nexport const AnnouncementIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M11.53 2.255a.745.745 0 0 0-.82.165c-.525.524-1.188.959-1.947 1.284-.77.33-2.353.757-3.508.75-2.248-.015-3.756 1.259-3.756 3.726 0 2.163 1.228 3.42 2.994 3.703l.006 1.565a2.25 2.25 0 0 0 2.25 2.247c1.142 0 2.083-.883 2.228-1.988.007-.053.022-.26.022-1.01.674.315 1.232.812 1.711 1.29.473.472 1.29.13 1.29-.538 0-.678-.004-1.906-.004-3.13.884-.327 1.503-1.165 1.503-2.115s-.585-1.81-1.496-2.129c0-1.225-.004-2.439-.004-3.117a.76.76 0 0 0-.469-.703m1.805 1.335a.73.73 0 0 0-.445.351.75.75 0 0 0 .258 1.03 3.74 3.74 0 0 1 1.851 3.233 3.74 3.74 0 0 1-1.851 3.231.76.76 0 0 0-.282 1.03.754.754 0 0 0 1.032.258 5.24 5.24 0 0 0 2.601-4.52 5.24 5.24 0 0 0-2.601-4.519.74.74 0 0 0-.563-.094m-2.832.884c0 .694-.004 1.417-.004 2.231v2.997c0 .815.003 1.508.003 2.202-1.52-.896-3.085-1.294-4.501-1.421 0-1.144-.004-3.406-.004-4.584.147-.007.318-.026.565-.06a11.2 11.2 0 0 0 2.812-.773c.43-.184.75-.35 1.129-.592m-6.005 1.55-.001 4.34c-.976-.27-1.498-.959-1.498-2.184 0-1.21.47-1.928 1.499-2.155M6 11.998c.238.008 1.098.161 1.493.261l.007 1.19a.75.75 0 0 1-1.5 0z\"\n />\n </Icon>\n );\n};\n\nexport const SecurityIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n d=\"M6.563 7.678V6.603c0-1.153 1.09-2.088 2.437-2.088s2.438.935 2.438 2.088v1.075c.448 0 .812.311.812.696v3.479c0 .384-.364.696-.812.696H6.563c-.449 0-.813-.312-.813-.696v-3.48c0-.384.364-.695.813-.695m1.187-.006 1.431.006h1.07V6.564c0-.64-.504-1.104-1.25-1.104-.748 0-1.25.465-1.25 1.104zm1.956 2.14c0-.335-.317-.605-.706-.605-.39 0-.706.27-.706.604v.77c0 .335.316.605.706.605s.706-.27.706-.604z\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M2 3.607c.003 5.606.146 11.651 6.879 13.378.078.02.164.02.242 0C15.854 15.258 15.997 9.213 16 3.607c0-.217-.14-.41-.345-.477L9.31 1.05a1 1 0 0 0-.62 0L2.345 3.13A.5.5 0 0 0 2 3.607m2.326 7.63c-.707-1.954-.81-4.33-.824-6.902L9 2.532l5.498 1.803c-.014 2.573-.117 4.948-.824 6.901-.697 1.93-1.987 3.463-4.674 4.222-2.687-.759-3.977-2.293-4.674-4.222\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n </Icon>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType } from \"@orderly.network/types\";\nimport { Flex, Text, ChevronDownIcon, cn } from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n ArrowRightShortIcon,\n CampaignIcon,\n FundIcon,\n SecurityIcon,\n} from \"./icons\";\n\nexport const AnnouncementItem: FC<{\n // title: string;\n expanded: boolean;\n url?: string | null;\n onItemClick: (url: string) => void;\n onExpandToggle?: () => void;\n type: AnnouncementType | undefined | null;\n message: string;\n updatedTime: number;\n className?: string;\n showDivider?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const Icon = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return CampaignIcon;\n\n case AnnouncementType.Listing:\n return FundIcon;\n case AnnouncementType.Maintenance:\n return SecurityIcon;\n case AnnouncementType.Delisting:\n default:\n return AnnouncementIcon;\n }\n }, [props.type]);\n\n const title = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return t(\"notification.campaign\");\n case AnnouncementType.Delisting:\n return t(\"notification.delisting\");\n case AnnouncementType.Listing:\n return t(\"notification.listing\");\n case AnnouncementType.Maintenance:\n return t(\"notification.maintenance\");\n case AnnouncementType.Vote:\n return t(\"notification.vote\");\n default:\n return t(\"notification.general\");\n }\n }, [props.type, t]);\n\n const action = useMemo(() => {\n if (\n (props.type === AnnouncementType.Campaign ||\n props.type === AnnouncementType.Vote) &&\n typeof props.url === \"string\" &&\n props.url !== \"\" &&\n typeof props.onItemClick === \"function\"\n ) {\n return (\n <Flex\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation();\n props.onItemClick(props.url!);\n }}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} />\n </Flex>\n );\n }\n return null;\n }, [props.type, props.url, t]);\n\n const updateTime = useMemo(() => {\n if (props.type === AnnouncementType.Maintenance) {\n return (\n <Text size=\"2xs\" intensity={36}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n );\n }\n return (\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule=\"date\"\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.updatedTime}\n </Text.formatted>\n );\n }, [props.updatedTime, props.type, t]);\n\n return (\n <Flex\n gap={2}\n itemAlign=\"start\"\n className={cn(\n \"oui-px-2 oui-py-[6px] oui-text-base-contrast-80\",\n !props.showDivider && \"oui-rounded-md hover:oui-bg-base-6\",\n !props.showDivider && props.expanded && \"oui-bg-base-6\",\n props.className,\n )}\n onClick={() => {\n props.onExpandToggle?.();\n }}\n >\n <Icon color=\"white\" className=\"oui-mt-3 oui-shrink-0\" />\n\n <Flex direction=\"column\" itemAlign=\"start\" grow>\n <Text size=\"xs\" intensity={80} weight=\"bold\">\n {title}\n </Text>\n {updateTime}\n {/* Expandable content with animation */}\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: props.expanded ? \"1fr\" : \"0fr\",\n }}\n >\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-overflow-hidden\">\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-pt-2\">\n {props.message}\n </Text>\n {action}\n </div>\n </div>\n </Flex>\n <div className=\"oui-pt-3\">\n {/* Chevron icon with rotation animation */}\n <ChevronDownIcon\n color=\"white\"\n size={18}\n className={`oui-transition-transform oui-duration-300 oui-ease-in-out ${\n props.expanded ? \"oui-rotate-180\" : \"oui-rotate-0\"\n }`}\n />\n </div>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { type API } from \"@orderly.network/types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\nimport { AnnouncementItem } from \"./announcementItem\";\n\nexport const AnnouncementContent: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n onExpandToggle: (id: string | number | null) => void;\n onItemClick: (url: string) => void;\n showDivider?: boolean;\n}> = (props) => {\n const { dataSource, current, onExpandToggle, onItemClick } = props;\n const { t } = useTranslation();\n\n if (!Array.isArray(dataSource) || dataSource.length === 0) {\n return (\n <div className=\"oui-flex oui-h-[160px] oui-items-center oui-justify-center\">\n <ExtensionSlot\n position={ExtensionPositionEnum.EmptyDataIdentifier}\n title={t(\"notification.empty\")}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-col oui-space-y-1\",\n props.showDivider &&\n \"[&>*:not(:first-child)]:oui-border-t [&>*:not(:first-child)]:oui-border-line-12 [&>*:not(:first-child)]:oui-pt-1\",\n )}\n >\n {dataSource.map((item) => (\n <AnnouncementItem\n url={item.url}\n onItemClick={onItemClick}\n key={item.announcement_id}\n message={item.message}\n updatedTime={item.updated_time ?? 0}\n expanded={current === item.announcement_id}\n type={item.type}\n showDivider={props.showDivider}\n onExpandToggle={() => {\n if (current === item.announcement_id) {\n onExpandToggle(null);\n } else {\n onExpandToggle(item.announcement_id);\n }\n }}\n />\n ))}\n </div>\n );\n};\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState<string | number | null>(null);\n\n return (\n <>\n <div className=\"oui-px-5 oui-pt-4\">\n <Text intensity={80} weight=\"bold\">\n {t(\"notification.title\")}\n </Text>\n </div>\n\n <ScrollArea className=\"oui-flex oui-h-[300px] oui-flex-col oui-space-y-1 oui-p-3\">\n <AnnouncementContent\n dataSource={props.dataSource}\n current={expanded}\n onExpandToggle={setExpanded}\n onItemClick={props.onItemClick}\n />\n </ScrollArea>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text } from \"@orderly.network/ui\";\nimport { ArrowRightShortIcon } from \"../announcementCenter/icons\";\n\nexport const CampaignContentCard: FC<{\n message: string;\n coverImage: string;\n updateTime: number;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, coverImage, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-5\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n <div\n className=\"oui-rounded-xl oui-bg-base-9 oui-bg-cover oui-bg-center oui-bg-no-repeat\"\n style={{\n backgroundImage: `url(${coverImage})`,\n height: \"100px\",\n }}\n ></div>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const MaintenanceContentCard: FC<{\n message: string;\n startTime: number;\n endTime: number;\n}> = ({ message, startTime, endTime }) => {\n const { t } = useTranslation();\n // const formattedMessage = useMemo(() => {\n // // Calculate duration in hours\n // const hours = differenceInHours(endTime, startTime);\n\n // const minutes = differenceInMinutes(endTime, startTime) - hours * 60;\n\n // // Convert timestamps to UTC dates\n // const startUtc = new UTCDate(startTime);\n // const endUtc = new UTCDate(endTime);\n\n // // Format start time as HH:mm (24-hour format) in UTC\n // const startTimeFormatted = format(startUtc, \"HH:mm\");\n\n // // Format end time as hh:mm a (12-hour format with AM/PM) in UTC\n // const endTimeFormatted = format(endUtc, \"hh:mm a\");\n\n // if (hours > 0) {\n // return t(\"notification.maintenanceDuration.hours\", {\n // hours: minutes > 0 ? (hours + minutes / 60).toFixed(1) : hours,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }\n\n // return t(\"notification.maintenanceDuration.minutes\", {\n // minutes,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }, [startTime, endTime, t]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"xs\" intensity={54}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n {/* <Flex itemAlign={\"center\"}>\n <Text size=\"xs\" weight=\"bold\">\n {formattedMessage}\n </Text>\n </Flex> */}\n {message && (\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-mt-2\">\n {message}\n </Text>\n )}\n </div>\n );\n};\n\nexport const DelistingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const ListingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const CommunityVoteContentCard: FC<{\n message: string;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n","import { FC, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType, type API } from \"@orderly.network/types\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n Divider,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n BattleIcon,\n FundIcon,\n SecurityIcon,\n} from \"../announcementCenter/icons\";\nimport {\n CampaignContentCard,\n CommunityVoteContentCard,\n DelistingContentCard,\n ListingContentCard,\n MaintenanceContentCard,\n} from \"./contentCard\";\n\nexport interface NotificationProps {\n // Define your notification props here\n className?: string;\n // children?: React.ReactNode;\n dataSource: API.AnnouncementRow[];\n onClose?: () => void;\n}\n\nexport interface NotificationItemProps {\n id: string;\n type?: \"success\" | \"error\" | \"warning\" | \"info\";\n title?: string;\n message: string;\n onClose?: () => void;\n}\n\nexport interface NotificationListProps {\n notifications: NotificationItemProps[];\n onRemove?: (id: string) => void;\n}\n\nconst NotificationHeader: FC<{\n // type: AnnouncementType;\n dataSource: API.AnnouncementRow[];\n current: number;\n expanded?: boolean;\n onExpandToggle?: () => void;\n // onClose?: () => void;\n}> = (props) => {\n const { t } = useTranslation();\n const { expanded } = props;\n const { type } = props.dataSource[props.current];\n\n const title = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <Text\n size=\"sm\"\n className=\"oui-text-transparent oui-bg-clip-text oui-gradient-brand\"\n >\n {t(\"notification.campaign\")}\n </Text>\n );\n case AnnouncementType.Delisting:\n return <Text size=\"sm\">{t(\"notification.delistingTitle\")}</Text>;\n case AnnouncementType.Listing:\n return (\n <Text size=\"sm\" color=\"buy\">\n {t(\"notification.listing\")}\n </Text>\n );\n case AnnouncementType.Maintenance:\n return (\n <Text size=\"sm\" color=\"warning\">\n {t(\"notification.maintenanceTitle\")}\n </Text>\n );\n case AnnouncementType.Vote:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.vote\")}\n </Text>\n );\n default:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.generalTitle\")}\n </Text>\n );\n }\n }, [type, t]);\n const icon = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return <BattleIcon color=\"white\" />;\n\n case AnnouncementType.Listing:\n return <FundIcon color=\"success\" />;\n case AnnouncementType.Maintenance:\n return <SecurityIcon color=\"warning\" />;\n case AnnouncementType.Delisting:\n default:\n return <AnnouncementIcon color=\"white\" />;\n }\n }, [type]);\n return (\n <Flex itemAlign=\"center\" justify=\"between\" className=\"oui-px-4 oui-py-3\">\n <div className=\"orderly-notification-header oui-flex oui-items-center oui-gap-2\">\n {icon}\n {title}\n </div>\n <button\n onClick={props.onExpandToggle}\n className=\"oui-transition-transform oui-duration-300\"\n style={{\n transform: !expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n }}\n >\n <ChevronDownIcon size={18} color=\"white\" />\n </button>\n </Flex>\n );\n};\n\nconst NotificationFooter: FC<{\n total: number;\n current: number;\n onCloseAll: () => void;\n onPrev: () => void;\n onNext: () => void;\n}> = (props) => {\n const { total, current, onCloseAll, onPrev, onNext } = props;\n const { t } = useTranslation();\n return (\n <Flex\n className=\"orderly-notification-footer oui-px-4 oui-py-2\"\n itemAlign=\"center\"\n justify=\"between\"\n >\n <Flex gap={2}>\n <button\n disabled={current - 1 < 0}\n onClick={onPrev}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronLeftIcon size={14} color=\"white\" />\n </button>\n <Text intensity={54} size=\"sm\">\n {current + 1}/{total}\n </Text>\n <button\n disabled={current + 1 >= total}\n onClick={onNext}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronRightIcon size={14} color=\"white\" />\n </button>\n </Flex>\n <button onClick={onCloseAll}>\n <Text size=\"xs\" color=\"primary\">\n {t(\"notification.closeAll\", { total })}\n </Text>\n </button>\n </Flex>\n );\n};\n\nconst NotificationContent: FC<{\n dataSource: (API.AnnouncementRow & {\n startTime?: number;\n endTime?: number;\n })[];\n current: number;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const elements = useMemo(() => {\n return props.dataSource.map((message) => {\n const { type } = message;\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <CampaignContentCard\n message={message.message}\n coverImage={message.coverImage ?? \"\"}\n updateTime={message.updated_time ?? 0}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n case AnnouncementType.Maintenance:\n return (\n <MaintenanceContentCard\n message={message.message}\n startTime={message.startTime ?? 0}\n endTime={message.endTime ?? 0}\n />\n );\n case AnnouncementType.Delisting:\n return (\n <DelistingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n case AnnouncementType.Vote:\n return (\n <CommunityVoteContentCard\n message={message.message}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n default:\n return (\n <ListingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n }\n });\n }, [props.dataSource]);\n return <>{elements[props.current]}</>;\n};\n\nexport const NotificationUI: FC<\n NotificationProps & {\n maintenanceMessage?: string;\n onItemClick: (url: string) => void;\n }\n> = (props) => {\n const [expanded, setExpanded] = useState(true);\n\n const [current, setCurrent] = useState(0);\n const len = useMemo(() => props.dataSource?.length ?? 0, [props.dataSource]);\n\n if (len === 0) {\n return null;\n }\n\n return (\n <div className=\"orderly-notification oui-w-full \">\n <NotificationHeader\n dataSource={props.dataSource ?? []}\n current={current}\n expanded={expanded}\n onExpandToggle={() => {\n setExpanded(!expanded);\n }}\n />\n <Divider className=\"oui-mx-4\" />\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: expanded ? \"1fr\" : \"0fr\",\n }}\n >\n {/* Inner div needs overflow-hidden and min-height-0 for grid animation to work */}\n <div className=\"oui-min-h-0 oui-overflow-hidden \">\n <div className=\"oui-px-4 oui-py-3\">\n <NotificationContent\n dataSource={props.dataSource ?? []}\n current={current}\n onItemClick={props.onItemClick}\n />\n </div>\n </div>\n </div>\n\n <NotificationFooter\n total={len}\n current={current}\n onCloseAll={props.onClose ?? (() => {})}\n onPrev={() => {\n if (current - 1 < 0) {\n return;\n }\n setCurrent(current - 1);\n }}\n onNext={() => {\n if (current + 1 >= len) {\n return;\n }\n setCurrent(current + 1);\n }}\n />\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AnnouncementType, API, WSMessage } from \"@orderly.network/types\";\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (list: API.AnnouncementRow[]) => {\n return list.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n};\n\nconst filterDuplicateArrayById = (list: API.AnnouncementRow[]) => {\n const seenIds = new Set<string | number>();\n const newList: API.AnnouncementRow[] = [];\n\n list.forEach((item) => {\n if (!seenIds.has(item.announcement_id)) {\n // If the item's ID hasn't been seen before, add it and mark as seen\n seenIds.add(item.announcement_id);\n newList.push(item);\n }\n });\n\n return newList;\n};\n\nconst useAnnouncementData = () => {\n const { t } = useTranslation();\n const ws = useWS();\n const { dataAdapter } = useOrderlyContext();\n\n const [announcementStore, setAnnouncementStore] =\n useLocalStorage<AnnouncementStore>(ORDERLY_ANNOUNCEMENT_KEY, {});\n\n const [tips, setTips] = useState<API.AnnouncementRow[]>([]);\n const [maintenances, setMaintenances] = useState([] as API.AnnouncementRow[]);\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n\n const dialogContent =\n status === MaintenanceStatus.Maintenance\n ? getMaintentDialogContent(brokerName, endDate)\n : undefined;\n\n setMaintenanceDialogInfo(dialogContent);\n\n if (startTime && endTime) {\n setMaintenances([\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n startTime: startTime,\n endTime: endTime,\n updated_time: startTime,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ] as unknown as API.AnnouncementRow[]);\n } else {\n setMaintenances([]);\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n useEffect(() => {\n let list = [...(maintenances ?? []), ...(announcements?.rows ?? [])];\n\n if (typeof dataAdapter?.announcementList === \"function\") {\n list = dataAdapter.announcementList(list);\n }\n\n const removedDuplicateList = filterDuplicateArrayById(list);\n const sortedList = sortDataByUpdatedTime(removedDuplicateList);\n\n setTips(sortedList);\n }, [maintenances, announcements, dataAdapter?.announcementList]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const lastUpdateTime = announcements.last_updated_time ?? 0;\n const firstTipTime = tips[0]?.updated_time ?? 0;\n const updatedTime = Math.max(lastUpdateTime, firstTipTime);\n\n const closedTime = announcementStore.lastUpdateTime ?? 0;\n if (closedTime < updatedTime) {\n setAnnouncementStore({ show: true, lastUpdateTime: updatedTime });\n }\n }, [announcements, tips]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n const list = prev.filter(\n (item) => item.announcement_id !== message.announcement_id,\n );\n\n const newTip = {\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n };\n return [...list, newTip];\n });\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: true }));\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n return {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n };\n};\n\nexport type AnnouncementReturn = ReturnType<typeof useAnnouncement>;\n\nexport const useAnnouncement = (options?: AnnouncementOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n\n const {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n } = useAnnouncementData();\n\n const closeTips = () => {\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = tips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [tips, announcementStore.show, options?.hideTips, setShowAnnouncement]);\n\n return {\n maintenanceDialogInfo,\n tips,\n closeTips,\n showAnnouncement,\n };\n};\n","import { useState } from \"react\";\nimport { useAnnouncement } from \"../hooks/useAnnouncement\";\n\nexport const useAnnouncementCenterScript = () => {\n const { tips } = useAnnouncement();\n const [current, setCurrent] = useState<string | number | null>(null);\n\n return {\n dataSource: tips,\n current,\n setCurrent,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { AnnouncementContent } from \"../components/announcementCenter/announcementCenter.ui\";\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n setCurrent: (current: string | number | null) => void;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent, onItemClick } = props;\n return (\n <div className=\"oui-m-1 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <AnnouncementContent\n dataSource={dataSource}\n current={current}\n onExpandToggle={setCurrent}\n onItemClick={onItemClick}\n showDivider\n />\n </div>\n );\n};\n","import { FC, useCallback } from \"react\";\nimport { useAnnouncementCenterScript } from \"./announcementCenter.script\";\nimport { AnnouncementCenterUI } from \"./announcementCenter.ui\";\n\nexport const AnnouncementCenterWidget: FC<{\n onRouteChange: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent } = useAnnouncementCenterScript();\n const onItemClick = useCallback(\n (url: string) => {\n if (!url) return;\n props.onRouteChange(url);\n },\n [props.onRouteChange],\n );\n return (\n <AnnouncementCenterUI\n dataSource={dataSource}\n current={current}\n setCurrent={setCurrent}\n onItemClick={onItemClick}\n />\n );\n};\n","import { FC } from \"react\";\nimport { RouterAdapter } from \"@orderly.network/types\";\nimport { AnnouncementCenterWidget } from \"./announcementCenter.widget\";\n\nexport const AnnouncementCenterPage: FC<{ routerAdapter?: RouterAdapter }> = (\n props,\n) => {\n return (\n <AnnouncementCenterWidget\n onRouteChange={(url: string) => {\n if (!url) return;\n props.routerAdapter?.onRouteChange({\n href: url,\n name: url,\n target: \"_blank\",\n });\n }}\n />\n );\n};\n"]}
package/dist/index.mjs CHANGED
@@ -138,12 +138,14 @@ var AnnouncementItem = (props) => {
138
138
  return t("notification.listing");
139
139
  case AnnouncementType.Maintenance:
140
140
  return t("notification.maintenance");
141
+ case AnnouncementType.Vote:
142
+ return t("notification.vote");
141
143
  default:
142
144
  return t("notification.general");
143
145
  }
144
146
  }, [props.type, t]);
145
147
  const action = useMemo(() => {
146
- if (props.type === AnnouncementType.Campaign && typeof props.url === "string" && props.url !== "" && typeof props.onItemClick === "function") {
148
+ if ((props.type === AnnouncementType.Campaign || props.type === AnnouncementType.Vote) && typeof props.url === "string" && props.url !== "" && typeof props.onItemClick === "function") {
147
149
  return /* @__PURE__ */ jsxs(
148
150
  Flex,
149
151
  {
@@ -361,6 +363,31 @@ var ListingContentCard = ({ message, updateTime }) => {
361
363
  /* @__PURE__ */ jsx(Text, { size: "sm", weight: "bold", children: message })
362
364
  ] });
363
365
  };
366
+ var CommunityVoteContentCard = ({ message, url, onItemClick }) => {
367
+ const { t } = useTranslation();
368
+ return /* @__PURE__ */ jsxs("div", { className: "oui-flex oui-flex-col oui-gap-2", children: [
369
+ /* @__PURE__ */ jsx(Text, { size: "sm", weight: "bold", children: message }),
370
+ typeof url === "string" && url !== "" && typeof onItemClick === "function" && /* @__PURE__ */ jsxs(
371
+ "button",
372
+ {
373
+ className: "oui-flex oui-items-center oui-gap-1",
374
+ onClick: () => onItemClick(url),
375
+ children: [
376
+ /* @__PURE__ */ jsx(
377
+ Text,
378
+ {
379
+ size: "xs",
380
+ color: "buy",
381
+ className: "oui-bg-clip-text oui-text-transparent oui-gradient-brand",
382
+ children: t("notification.joinNow")
383
+ }
384
+ ),
385
+ /* @__PURE__ */ jsx(ArrowRightShortIcon, { size: 18, color: "success" })
386
+ ]
387
+ }
388
+ )
389
+ ] });
390
+ };
364
391
  var NotificationHeader = (props) => {
365
392
  const { t } = useTranslation();
366
393
  const { expanded } = props;
@@ -382,6 +409,8 @@ var NotificationHeader = (props) => {
382
409
  return /* @__PURE__ */ jsx(Text, { size: "sm", color: "buy", children: t("notification.listing") });
383
410
  case AnnouncementType.Maintenance:
384
411
  return /* @__PURE__ */ jsx(Text, { size: "sm", color: "warning", children: t("notification.maintenanceTitle") });
412
+ case AnnouncementType.Vote:
413
+ return /* @__PURE__ */ jsx(Text, { size: "sm", color: "inherit", children: t("notification.vote") });
385
414
  default:
386
415
  return /* @__PURE__ */ jsx(Text, { size: "sm", color: "inherit", children: t("notification.generalTitle") });
387
416
  }
@@ -490,6 +519,15 @@ var NotificationContent = (props) => {
490
519
  updateTime: message.updated_time ?? 0
491
520
  }
492
521
  );
522
+ case AnnouncementType.Vote:
523
+ return /* @__PURE__ */ jsx(
524
+ CommunityVoteContentCard,
525
+ {
526
+ message: message.message,
527
+ url: message.url ?? "",
528
+ onItemClick: props.onItemClick
529
+ }
530
+ );
493
531
  default:
494
532
  return /* @__PURE__ */ jsx(
495
533
  ListingContentCard,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/announcementCenter/icons.tsx","../src/components/announcementCenter/announcementItem.tsx","../src/components/announcementCenter/announcementCenter.ui.tsx","../src/components/notification/contentCard.tsx","../src/components/notification/notification.ui.tsx","../src/hooks/useAnnouncement.ts","../src/pages/announcementCenter.script.tsx","../src/pages/announcementCenter.ui.tsx","../src/pages/announcementCenter.widget.tsx","../src/pages/announcementCenter.page.tsx"],"names":["Icon","jsxs","jsx","useTranslation","cn","Text","useMemo","AnnouncementType","Flex","ChevronDownIcon","Fragment","useState","brokerName","AnnouncementCenterUI"],"mappings":"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","file":"index.mjs","sourcesContent":["import { FC } from \"react\";\nimport type { BaseIconProps } from \"@orderly.network/ui\";\nimport { Icon } from \"@orderly.network/ui\";\n\nexport const BattleIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const CampaignIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const ArrowRightShortIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"M4.509 8.995a.75.75 0 0 1 .75-.75h5.666L8.7 5.998l1.054-1.054 3.535 3.512c.147.146.22.343.22.54a.76.76 0 0 1-.22.537l-3.535 3.512L8.7 11.992l2.225-2.248H5.258a.75.75 0 0 1-.749-.75\"\n />\n </Icon>\n );\n};\n\nexport const FundIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M15.694 7.087c-.788-.393-1.857-.618-2.925-.618-1.125 0-2.138.225-2.925.618-.056 0-.113.057-.113.057V3.769c0-.9-.731-1.575-1.462-1.913-.788-.394-1.857-.619-2.925-.619-1.069 0-2.25.225-3.038.62C1.575 2.193.844 2.868.844 3.768v10.519c0 .9.731 1.575 1.462 1.912.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.281-.169.563-.337.788-.562.225.225.506.393.787.562.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.732-.394 1.463-1.012 1.463-1.912V9c.112-.9-.619-1.519-1.35-1.913m-7.369 7.144c0 .113-.112.45-.731.732-.563.28-1.407.506-2.363.506s-1.8-.169-2.362-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.563.281-1.407.506-2.363.506s-1.8-.168-2.362-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.856.62 2.925.62s2.138-.226 2.925-.62c.056 0 .113-.056.113-.056v.788zm0-2.644c0 .112-.112.45-.731.731-.563.281-1.407.507-2.363.507s-1.8-.17-2.362-.507C2.25 9.45 2.138 9.112 2.138 9v-.788c.056 0 .112.057.112.057.788.393 1.856.618 2.925.618S7.313 8.662 8.1 8.27c.056 0 .113-.057.113-.057V9zm0-2.644c0 .113-.112.45-.731.731-.563.282-1.407.507-2.363.507s-1.8-.169-2.362-.507c-.619-.28-.731-.618-.731-.73v-.732c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zM7.594 4.5c-.563.281-1.407.506-2.363.506S3.488 4.781 2.925 4.5c-.619-.338-.731-.619-.731-.731 0-.113.112-.45.731-.732.563-.28 1.406-.506 2.363-.506.956 0 1.8.169 2.362.506.619.282.731.62.731.732-.056.112-.168.393-.787.731m8.212 9.731c0 .113-.112.45-.731.732-.562.28-1.406.506-2.362.506s-1.8-.169-2.363-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112.056.112.056.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.562.281-1.406.506-2.362.506s-1.8-.168-2.363-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.857.62 2.925.62 1.125 0 2.138-.226 2.925-.62.056 0 .113-.056.113-.056v.788zm-.675-1.913c-.562.281-1.406.507-2.362.507s-1.8-.17-2.363-.507c-.619-.281-.731-.619-.731-.731 0-.113.112-.45.731-.731.563-.282 1.406-.507 2.363-.507.956 0 1.8.17 2.362.507.619.281.732.618.732.731-.057.112-.17.45-.732.731\"\n />\n </Icon>\n );\n};\n\nexport const AnnouncementIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M11.53 2.255a.745.745 0 0 0-.82.165c-.525.524-1.188.959-1.947 1.284-.77.33-2.353.757-3.508.75-2.248-.015-3.756 1.259-3.756 3.726 0 2.163 1.228 3.42 2.994 3.703l.006 1.565a2.25 2.25 0 0 0 2.25 2.247c1.142 0 2.083-.883 2.228-1.988.007-.053.022-.26.022-1.01.674.315 1.232.812 1.711 1.29.473.472 1.29.13 1.29-.538 0-.678-.004-1.906-.004-3.13.884-.327 1.503-1.165 1.503-2.115s-.585-1.81-1.496-2.129c0-1.225-.004-2.439-.004-3.117a.76.76 0 0 0-.469-.703m1.805 1.335a.73.73 0 0 0-.445.351.75.75 0 0 0 .258 1.03 3.74 3.74 0 0 1 1.851 3.233 3.74 3.74 0 0 1-1.851 3.231.76.76 0 0 0-.282 1.03.754.754 0 0 0 1.032.258 5.24 5.24 0 0 0 2.601-4.52 5.24 5.24 0 0 0-2.601-4.519.74.74 0 0 0-.563-.094m-2.832.884c0 .694-.004 1.417-.004 2.231v2.997c0 .815.003 1.508.003 2.202-1.52-.896-3.085-1.294-4.501-1.421 0-1.144-.004-3.406-.004-4.584.147-.007.318-.026.565-.06a11.2 11.2 0 0 0 2.812-.773c.43-.184.75-.35 1.129-.592m-6.005 1.55-.001 4.34c-.976-.27-1.498-.959-1.498-2.184 0-1.21.47-1.928 1.499-2.155M6 11.998c.238.008 1.098.161 1.493.261l.007 1.19a.75.75 0 0 1-1.5 0z\"\n />\n </Icon>\n );\n};\n\nexport const SecurityIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n d=\"M6.563 7.678V6.603c0-1.153 1.09-2.088 2.437-2.088s2.438.935 2.438 2.088v1.075c.448 0 .812.311.812.696v3.479c0 .384-.364.696-.812.696H6.563c-.449 0-.813-.312-.813-.696v-3.48c0-.384.364-.695.813-.695m1.187-.006 1.431.006h1.07V6.564c0-.64-.504-1.104-1.25-1.104-.748 0-1.25.465-1.25 1.104zm1.956 2.14c0-.335-.317-.605-.706-.605-.39 0-.706.27-.706.604v.77c0 .335.316.605.706.605s.706-.27.706-.604z\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M2 3.607c.003 5.606.146 11.651 6.879 13.378.078.02.164.02.242 0C15.854 15.258 15.997 9.213 16 3.607c0-.217-.14-.41-.345-.477L9.31 1.05a1 1 0 0 0-.62 0L2.345 3.13A.5.5 0 0 0 2 3.607m2.326 7.63c-.707-1.954-.81-4.33-.824-6.902L9 2.532l5.498 1.803c-.014 2.573-.117 4.948-.824 6.901-.697 1.93-1.987 3.463-4.674 4.222-2.687-.759-3.977-2.293-4.674-4.222\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n </Icon>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType } from \"@orderly.network/types\";\nimport { Flex, Text, ChevronDownIcon, cn } from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n ArrowRightShortIcon,\n CampaignIcon,\n FundIcon,\n SecurityIcon,\n} from \"./icons\";\n\nexport const AnnouncementItem: FC<{\n // title: string;\n expanded: boolean;\n url?: string | null;\n onItemClick: (url: string) => void;\n onExpandToggle?: () => void;\n type: AnnouncementType | undefined | null;\n message: string;\n updatedTime: number;\n className?: string;\n showDivider?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const Icon = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return CampaignIcon;\n\n case AnnouncementType.Listing:\n return FundIcon;\n case AnnouncementType.Maintenance:\n return SecurityIcon;\n case AnnouncementType.Delisting:\n default:\n return AnnouncementIcon;\n }\n }, [props.type]);\n\n const title = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return t(\"notification.campaign\");\n case AnnouncementType.Delisting:\n return t(\"notification.delisting\");\n case AnnouncementType.Listing:\n return t(\"notification.listing\");\n case AnnouncementType.Maintenance:\n return t(\"notification.maintenance\");\n default:\n return t(\"notification.general\");\n }\n }, [props.type, t]);\n\n const action = useMemo(() => {\n if (\n props.type === AnnouncementType.Campaign &&\n typeof props.url === \"string\" &&\n props.url !== \"\" &&\n typeof props.onItemClick === \"function\"\n ) {\n return (\n <Flex\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation();\n props.onItemClick(props.url!);\n }}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} />\n </Flex>\n );\n }\n return null;\n }, [props.type, props.url, t]);\n\n const updateTime = useMemo(() => {\n if (props.type === AnnouncementType.Maintenance) {\n return (\n <Text size=\"2xs\" intensity={36}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n );\n }\n return (\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule=\"date\"\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.updatedTime}\n </Text.formatted>\n );\n }, [props.updatedTime, props.type, t]);\n\n return (\n <Flex\n gap={2}\n itemAlign=\"start\"\n className={cn(\n \"oui-px-2 oui-py-[6px] oui-text-base-contrast-80\",\n !props.showDivider && \"oui-rounded-md hover:oui-bg-base-6\",\n !props.showDivider && props.expanded && \"oui-bg-base-6\",\n props.className,\n )}\n onClick={() => {\n props.onExpandToggle?.();\n }}\n >\n <Icon color=\"white\" className=\"oui-mt-3 oui-shrink-0\" />\n\n <Flex direction=\"column\" itemAlign=\"start\" grow>\n <Text size=\"xs\" intensity={80} weight=\"bold\">\n {title}\n </Text>\n {updateTime}\n {/* Expandable content with animation */}\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: props.expanded ? \"1fr\" : \"0fr\",\n }}\n >\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-overflow-hidden\">\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-pt-2\">\n {props.message}\n </Text>\n {action}\n </div>\n </div>\n </Flex>\n <div className=\"oui-pt-3\">\n {/* Chevron icon with rotation animation */}\n <ChevronDownIcon\n color=\"white\"\n size={18}\n className={`oui-transition-transform oui-duration-300 oui-ease-in-out ${\n props.expanded ? \"oui-rotate-180\" : \"oui-rotate-0\"\n }`}\n />\n </div>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { type API } from \"@orderly.network/types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\nimport { AnnouncementItem } from \"./announcementItem\";\n\nexport const AnnouncementContent: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n onExpandToggle: (id: string | number | null) => void;\n onItemClick: (url: string) => void;\n showDivider?: boolean;\n}> = (props) => {\n const { dataSource, current, onExpandToggle, onItemClick } = props;\n const { t } = useTranslation();\n\n if (!Array.isArray(dataSource) || dataSource.length === 0) {\n return (\n <div className=\"oui-flex oui-h-[160px] oui-items-center oui-justify-center\">\n <ExtensionSlot\n position={ExtensionPositionEnum.EmptyDataIdentifier}\n title={t(\"notification.empty\")}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-col oui-space-y-1\",\n props.showDivider &&\n \"[&>*:not(:first-child)]:oui-border-t [&>*:not(:first-child)]:oui-border-line-12 [&>*:not(:first-child)]:oui-pt-1\",\n )}\n >\n {dataSource.map((item) => (\n <AnnouncementItem\n url={item.url}\n onItemClick={onItemClick}\n key={item.announcement_id}\n message={item.message}\n updatedTime={item.updated_time ?? 0}\n expanded={current === item.announcement_id}\n type={item.type}\n showDivider={props.showDivider}\n onExpandToggle={() => {\n if (current === item.announcement_id) {\n onExpandToggle(null);\n } else {\n onExpandToggle(item.announcement_id);\n }\n }}\n />\n ))}\n </div>\n );\n};\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState<string | number | null>(null);\n\n return (\n <>\n <div className=\"oui-px-5 oui-pt-4\">\n <Text intensity={80} weight=\"bold\">\n {t(\"notification.title\")}\n </Text>\n </div>\n\n <ScrollArea className=\"oui-flex oui-h-[300px] oui-flex-col oui-space-y-1 oui-p-3\">\n <AnnouncementContent\n dataSource={props.dataSource}\n current={expanded}\n onExpandToggle={setExpanded}\n onItemClick={props.onItemClick}\n />\n </ScrollArea>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text } from \"@orderly.network/ui\";\nimport { ArrowRightShortIcon } from \"../announcementCenter/icons\";\n\nexport const CampaignContentCard: FC<{\n message: string;\n coverImage: string;\n updateTime: number;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, coverImage, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-5\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n <div\n className=\"oui-rounded-xl oui-bg-base-9 oui-bg-cover oui-bg-center oui-bg-no-repeat\"\n style={{\n backgroundImage: `url(${coverImage})`,\n height: \"100px\",\n }}\n ></div>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const MaintenanceContentCard: FC<{\n message: string;\n startTime: number;\n endTime: number;\n}> = ({ message, startTime, endTime }) => {\n const { t } = useTranslation();\n // const formattedMessage = useMemo(() => {\n // // Calculate duration in hours\n // const hours = differenceInHours(endTime, startTime);\n\n // const minutes = differenceInMinutes(endTime, startTime) - hours * 60;\n\n // // Convert timestamps to UTC dates\n // const startUtc = new UTCDate(startTime);\n // const endUtc = new UTCDate(endTime);\n\n // // Format start time as HH:mm (24-hour format) in UTC\n // const startTimeFormatted = format(startUtc, \"HH:mm\");\n\n // // Format end time as hh:mm a (12-hour format with AM/PM) in UTC\n // const endTimeFormatted = format(endUtc, \"hh:mm a\");\n\n // if (hours > 0) {\n // return t(\"notification.maintenanceDuration.hours\", {\n // hours: minutes > 0 ? (hours + minutes / 60).toFixed(1) : hours,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }\n\n // return t(\"notification.maintenanceDuration.minutes\", {\n // minutes,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }, [startTime, endTime, t]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"xs\" intensity={54}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n {/* <Flex itemAlign={\"center\"}>\n <Text size=\"xs\" weight=\"bold\">\n {formattedMessage}\n </Text>\n </Flex> */}\n {message && (\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-mt-2\">\n {message}\n </Text>\n )}\n </div>\n );\n};\n\nexport const DelistingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const ListingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n","import { FC, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType, type API } from \"@orderly.network/types\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n Divider,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n BattleIcon,\n FundIcon,\n SecurityIcon,\n} from \"../announcementCenter/icons\";\nimport {\n CampaignContentCard,\n DelistingContentCard,\n ListingContentCard,\n MaintenanceContentCard,\n} from \"./contentCard\";\n\nexport interface NotificationProps {\n // Define your notification props here\n className?: string;\n // children?: React.ReactNode;\n dataSource: API.AnnouncementRow[];\n onClose?: () => void;\n}\n\nexport interface NotificationItemProps {\n id: string;\n type?: \"success\" | \"error\" | \"warning\" | \"info\";\n title?: string;\n message: string;\n onClose?: () => void;\n}\n\nexport interface NotificationListProps {\n notifications: NotificationItemProps[];\n onRemove?: (id: string) => void;\n}\n\nconst NotificationHeader: FC<{\n // type: AnnouncementType;\n dataSource: API.AnnouncementRow[];\n current: number;\n expanded?: boolean;\n onExpandToggle?: () => void;\n // onClose?: () => void;\n}> = (props) => {\n const { t } = useTranslation();\n const { expanded } = props;\n const { type } = props.dataSource[props.current];\n\n const title = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <Text\n size=\"sm\"\n className=\"oui-text-transparent oui-bg-clip-text oui-gradient-brand\"\n >\n {t(\"notification.campaign\")}\n </Text>\n );\n case AnnouncementType.Delisting:\n return <Text size=\"sm\">{t(\"notification.delistingTitle\")}</Text>;\n case AnnouncementType.Listing:\n return (\n <Text size=\"sm\" color=\"buy\">\n {t(\"notification.listing\")}\n </Text>\n );\n case AnnouncementType.Maintenance:\n return (\n <Text size=\"sm\" color=\"warning\">\n {t(\"notification.maintenanceTitle\")}\n </Text>\n );\n default:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.generalTitle\")}\n </Text>\n );\n }\n }, [type, t]);\n const icon = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return <BattleIcon color=\"white\" />;\n\n case AnnouncementType.Listing:\n return <FundIcon color=\"success\" />;\n case AnnouncementType.Maintenance:\n return <SecurityIcon color=\"warning\" />;\n case AnnouncementType.Delisting:\n default:\n return <AnnouncementIcon color=\"white\" />;\n }\n }, [type]);\n return (\n <Flex itemAlign=\"center\" justify=\"between\" className=\"oui-px-4 oui-py-3\">\n <div className=\"orderly-notification-header oui-flex oui-items-center oui-gap-2\">\n {icon}\n {title}\n </div>\n <button\n onClick={props.onExpandToggle}\n className=\"oui-transition-transform oui-duration-300\"\n style={{\n transform: !expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n }}\n >\n <ChevronDownIcon size={18} color=\"white\" />\n </button>\n </Flex>\n );\n};\n\nconst NotificationFooter: FC<{\n total: number;\n current: number;\n onCloseAll: () => void;\n onPrev: () => void;\n onNext: () => void;\n}> = (props) => {\n const { total, current, onCloseAll, onPrev, onNext } = props;\n const { t } = useTranslation();\n return (\n <Flex\n className=\"orderly-notification-footer oui-px-4 oui-py-2\"\n itemAlign=\"center\"\n justify=\"between\"\n >\n <Flex gap={2}>\n <button\n disabled={current - 1 < 0}\n onClick={onPrev}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronLeftIcon size={14} color=\"white\" />\n </button>\n <Text intensity={54} size=\"sm\">\n {current + 1}/{total}\n </Text>\n <button\n disabled={current + 1 >= total}\n onClick={onNext}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronRightIcon size={14} color=\"white\" />\n </button>\n </Flex>\n <button onClick={onCloseAll}>\n <Text size=\"xs\" color=\"primary\">\n {t(\"notification.closeAll\", { total })}\n </Text>\n </button>\n </Flex>\n );\n};\n\nconst NotificationContent: FC<{\n dataSource: (API.AnnouncementRow & {\n startTime?: number;\n endTime?: number;\n })[];\n current: number;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const elements = useMemo(() => {\n return props.dataSource.map((message) => {\n const { type } = message;\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <CampaignContentCard\n message={message.message}\n coverImage={message.coverImage ?? \"\"}\n updateTime={message.updated_time ?? 0}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n case AnnouncementType.Maintenance:\n return (\n <MaintenanceContentCard\n message={message.message}\n startTime={message.startTime ?? 0}\n endTime={message.endTime ?? 0}\n />\n );\n case AnnouncementType.Delisting:\n return (\n <DelistingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n default:\n return (\n <ListingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n }\n });\n }, [props.dataSource]);\n return <>{elements[props.current]}</>;\n};\n\nexport const NotificationUI: FC<\n NotificationProps & {\n maintenanceMessage?: string;\n onItemClick: (url: string) => void;\n }\n> = (props) => {\n const [expanded, setExpanded] = useState(true);\n\n const [current, setCurrent] = useState(0);\n const len = useMemo(() => props.dataSource?.length ?? 0, [props.dataSource]);\n\n if (len === 0) {\n return null;\n }\n\n return (\n <div className=\"orderly-notification oui-w-full \">\n <NotificationHeader\n dataSource={props.dataSource ?? []}\n current={current}\n expanded={expanded}\n onExpandToggle={() => {\n setExpanded(!expanded);\n }}\n />\n <Divider className=\"oui-mx-4\" />\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: expanded ? \"1fr\" : \"0fr\",\n }}\n >\n {/* Inner div needs overflow-hidden and min-height-0 for grid animation to work */}\n <div className=\"oui-min-h-0 oui-overflow-hidden \">\n <div className=\"oui-px-4 oui-py-3\">\n <NotificationContent\n dataSource={props.dataSource ?? []}\n current={current}\n onItemClick={props.onItemClick}\n />\n </div>\n </div>\n </div>\n\n <NotificationFooter\n total={len}\n current={current}\n onCloseAll={props.onClose ?? (() => {})}\n onPrev={() => {\n if (current - 1 < 0) {\n return;\n }\n setCurrent(current - 1);\n }}\n onNext={() => {\n if (current + 1 >= len) {\n return;\n }\n setCurrent(current + 1);\n }}\n />\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AnnouncementType, API, WSMessage } from \"@orderly.network/types\";\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (list: API.AnnouncementRow[]) => {\n return list.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n};\n\nconst filterDuplicateArrayById = (list: API.AnnouncementRow[]) => {\n const seenIds = new Set<string | number>();\n const newList: API.AnnouncementRow[] = [];\n\n list.forEach((item) => {\n if (!seenIds.has(item.announcement_id)) {\n // If the item's ID hasn't been seen before, add it and mark as seen\n seenIds.add(item.announcement_id);\n newList.push(item);\n }\n });\n\n return newList;\n};\n\nconst useAnnouncementData = () => {\n const { t } = useTranslation();\n const ws = useWS();\n const { dataAdapter } = useOrderlyContext();\n\n const [announcementStore, setAnnouncementStore] =\n useLocalStorage<AnnouncementStore>(ORDERLY_ANNOUNCEMENT_KEY, {});\n\n const [tips, setTips] = useState<API.AnnouncementRow[]>([]);\n const [maintenances, setMaintenances] = useState([] as API.AnnouncementRow[]);\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n\n const dialogContent =\n status === MaintenanceStatus.Maintenance\n ? getMaintentDialogContent(brokerName, endDate)\n : undefined;\n\n setMaintenanceDialogInfo(dialogContent);\n\n if (startTime && endTime) {\n setMaintenances([\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n startTime: startTime,\n endTime: endTime,\n updated_time: startTime,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ] as unknown as API.AnnouncementRow[]);\n } else {\n setMaintenances([]);\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n useEffect(() => {\n let list = [...(maintenances ?? []), ...(announcements?.rows ?? [])];\n\n if (typeof dataAdapter?.announcementList === \"function\") {\n list = dataAdapter.announcementList(list);\n }\n\n const removedDuplicateList = filterDuplicateArrayById(list);\n const sortedList = sortDataByUpdatedTime(removedDuplicateList);\n\n setTips(sortedList);\n }, [maintenances, announcements, dataAdapter?.announcementList]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const lastUpdateTime = announcements.last_updated_time ?? 0;\n const firstTipTime = tips[0]?.updated_time ?? 0;\n const updatedTime = Math.max(lastUpdateTime, firstTipTime);\n\n const closedTime = announcementStore.lastUpdateTime ?? 0;\n if (closedTime < updatedTime) {\n setAnnouncementStore({ show: true, lastUpdateTime: updatedTime });\n }\n }, [announcements, tips]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n const list = prev.filter(\n (item) => item.announcement_id !== message.announcement_id,\n );\n\n const newTip = {\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n };\n return [...list, newTip];\n });\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: true }));\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n return {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n };\n};\n\nexport type AnnouncementReturn = ReturnType<typeof useAnnouncement>;\n\nexport const useAnnouncement = (options?: AnnouncementOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n\n const {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n } = useAnnouncementData();\n\n const closeTips = () => {\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = tips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [tips, announcementStore.show, options?.hideTips, setShowAnnouncement]);\n\n return {\n maintenanceDialogInfo,\n tips,\n closeTips,\n showAnnouncement,\n };\n};\n","import { useState } from \"react\";\nimport { useAnnouncement } from \"../hooks/useAnnouncement\";\n\nexport const useAnnouncementCenterScript = () => {\n const { tips } = useAnnouncement();\n const [current, setCurrent] = useState<string | number | null>(null);\n\n return {\n dataSource: tips,\n current,\n setCurrent,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { AnnouncementContent } from \"../components/announcementCenter/announcementCenter.ui\";\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n setCurrent: (current: string | number | null) => void;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent, onItemClick } = props;\n return (\n <div className=\"oui-m-1 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <AnnouncementContent\n dataSource={dataSource}\n current={current}\n onExpandToggle={setCurrent}\n onItemClick={onItemClick}\n showDivider\n />\n </div>\n );\n};\n","import { FC, useCallback } from \"react\";\nimport { useAnnouncementCenterScript } from \"./announcementCenter.script\";\nimport { AnnouncementCenterUI } from \"./announcementCenter.ui\";\n\nexport const AnnouncementCenterWidget: FC<{\n onRouteChange: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent } = useAnnouncementCenterScript();\n const onItemClick = useCallback(\n (url: string) => {\n if (!url) return;\n props.onRouteChange(url);\n },\n [props.onRouteChange],\n );\n return (\n <AnnouncementCenterUI\n dataSource={dataSource}\n current={current}\n setCurrent={setCurrent}\n onItemClick={onItemClick}\n />\n );\n};\n","import { FC } from \"react\";\nimport { RouterAdapter } from \"@orderly.network/types\";\nimport { AnnouncementCenterWidget } from \"./announcementCenter.widget\";\n\nexport const AnnouncementCenterPage: FC<{ routerAdapter?: RouterAdapter }> = (\n props,\n) => {\n return (\n <AnnouncementCenterWidget\n onRouteChange={(url: string) => {\n if (!url) return;\n props.routerAdapter?.onRouteChange({\n href: url,\n name: url,\n target: \"_blank\",\n });\n }}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/announcementCenter/icons.tsx","../src/components/announcementCenter/announcementItem.tsx","../src/components/announcementCenter/announcementCenter.ui.tsx","../src/components/notification/contentCard.tsx","../src/components/notification/notification.ui.tsx","../src/hooks/useAnnouncement.ts","../src/pages/announcementCenter.script.tsx","../src/pages/announcementCenter.ui.tsx","../src/pages/announcementCenter.widget.tsx","../src/pages/announcementCenter.page.tsx"],"names":["Icon","jsxs","jsx","useTranslation","cn","Text","useMemo","AnnouncementType","Flex","ChevronDownIcon","Fragment","useState","brokerName","AnnouncementCenterUI"],"mappings":"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","file":"index.mjs","sourcesContent":["import { FC } from \"react\";\nimport type { BaseIconProps } from \"@orderly.network/ui\";\nimport { Icon } from \"@orderly.network/ui\";\n\nexport const BattleIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const CampaignIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={1}\n d=\"m1.5 1.5.75 3 4.843 4.56-1.808 1.919-.63-.633-1.06 1.06.665.665-1.88 1.996-.35-.346-1.06 1.06 2.25 2.25 1.06-1.06-.348-.349 1.998-1.878.665.662 1.06-1.06-.63-.63L9 10.852l1.969 1.854-.639.639 1.06 1.06.672-.67 1.998 1.877-.358.358 1.064 1.06 2.25-2.25-1.06-1.06-.34.34-1.881-1.998.656-.657-1.06-1.06-.625.624-1.799-1.91.003-.003L9 7.03 4.5 2.25zm15 0-3 .75-3.636 3.861 2.022 2.025L15.75 4.5z\"\n />\n </Icon>\n );\n};\n\nexport const ArrowRightShortIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <defs>\n <linearGradient\n id=\"paint0_linear_555_7374\"\n x1=\"17.0157\"\n y1=\"9.26513\"\n x2=\"0.969849\"\n y2=\"9.26513\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"rgb(var(--oui-gradient-brand-end))\" />\n <stop offset=\"1\" stopColor=\"rgb(var(--oui-gradient-brand-start))\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#paint0_linear_555_7374)\"\n fillOpacity={1}\n d=\"M4.509 8.995a.75.75 0 0 1 .75-.75h5.666L8.7 5.998l1.054-1.054 3.535 3.512c.147.146.22.343.22.54a.76.76 0 0 1-.22.537l-3.535 3.512L8.7 11.992l2.225-2.248H5.258a.75.75 0 0 1-.749-.75\"\n />\n </Icon>\n );\n};\n\nexport const FundIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M15.694 7.087c-.788-.393-1.857-.618-2.925-.618-1.125 0-2.138.225-2.925.618-.056 0-.113.057-.113.057V3.769c0-.9-.731-1.575-1.462-1.913-.788-.394-1.857-.619-2.925-.619-1.069 0-2.25.225-3.038.62C1.575 2.193.844 2.868.844 3.768v10.519c0 .9.731 1.575 1.462 1.912.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.281-.169.563-.337.788-.562.225.225.506.393.787.562.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.732-.394 1.463-1.012 1.463-1.912V9c.112-.9-.619-1.519-1.35-1.913m-7.369 7.144c0 .113-.112.45-.731.732-.563.28-1.407.506-2.363.506s-1.8-.169-2.362-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.563.281-1.407.506-2.363.506s-1.8-.168-2.362-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.856.62 2.925.62s2.138-.226 2.925-.62c.056 0 .113-.056.113-.056v.788zm0-2.644c0 .112-.112.45-.731.731-.563.281-1.407.507-2.363.507s-1.8-.17-2.362-.507C2.25 9.45 2.138 9.112 2.138 9v-.788c.056 0 .112.057.112.057.788.393 1.856.618 2.925.618S7.313 8.662 8.1 8.27c.056 0 .113-.057.113-.057V9zm0-2.644c0 .113-.112.45-.731.731-.563.282-1.407.507-2.363.507s-1.8-.169-2.362-.507c-.619-.28-.731-.618-.731-.73v-.732c.056 0 .112 0 .168.056.788.394 1.856.619 2.925.619s2.138-.225 2.925-.619c.056 0 .113-.056.113-.056v.731zM7.594 4.5c-.563.281-1.407.506-2.363.506S3.488 4.781 2.925 4.5c-.619-.338-.731-.619-.731-.731 0-.113.112-.45.731-.732.563-.28 1.406-.506 2.363-.506.956 0 1.8.169 2.362.506.619.282.731.62.731.732-.056.112-.168.393-.787.731m8.212 9.731c0 .113-.112.45-.731.732-.562.28-1.406.506-2.362.506s-1.8-.169-2.363-.506c-.619-.282-.731-.62-.731-.732V13.5c.056 0 .112.056.112.056.788.394 1.857.619 2.925.619 1.125 0 2.138-.225 2.925-.619.056 0 .113-.056.113-.056v.731zm0-2.587c0 .112-.112.45-.731.731-.562.281-1.406.506-2.362.506s-1.8-.168-2.363-.506c-.619-.281-.731-.619-.731-.731v-.788c.056 0 .112.056.112.056.788.394 1.857.62 2.925.62 1.125 0 2.138-.226 2.925-.62.056 0 .113-.056.113-.056v.788zm-.675-1.913c-.562.281-1.406.507-2.362.507s-1.8-.17-2.363-.507c-.619-.281-.731-.619-.731-.731 0-.113.112-.45.731-.731.563-.282 1.406-.507 2.363-.507.956 0 1.8.17 2.362.507.619.281.732.618.732.731-.057.112-.17.45-.732.731\"\n />\n </Icon>\n );\n};\n\nexport const AnnouncementIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n fill=\"currentcolor\"\n fillOpacity={0.8}\n d=\"M11.53 2.255a.745.745 0 0 0-.82.165c-.525.524-1.188.959-1.947 1.284-.77.33-2.353.757-3.508.75-2.248-.015-3.756 1.259-3.756 3.726 0 2.163 1.228 3.42 2.994 3.703l.006 1.565a2.25 2.25 0 0 0 2.25 2.247c1.142 0 2.083-.883 2.228-1.988.007-.053.022-.26.022-1.01.674.315 1.232.812 1.711 1.29.473.472 1.29.13 1.29-.538 0-.678-.004-1.906-.004-3.13.884-.327 1.503-1.165 1.503-2.115s-.585-1.81-1.496-2.129c0-1.225-.004-2.439-.004-3.117a.76.76 0 0 0-.469-.703m1.805 1.335a.73.73 0 0 0-.445.351.75.75 0 0 0 .258 1.03 3.74 3.74 0 0 1 1.851 3.233 3.74 3.74 0 0 1-1.851 3.231.76.76 0 0 0-.282 1.03.754.754 0 0 0 1.032.258 5.24 5.24 0 0 0 2.601-4.52 5.24 5.24 0 0 0-2.601-4.519.74.74 0 0 0-.563-.094m-2.832.884c0 .694-.004 1.417-.004 2.231v2.997c0 .815.003 1.508.003 2.202-1.52-.896-3.085-1.294-4.501-1.421 0-1.144-.004-3.406-.004-4.584.147-.007.318-.026.565-.06a11.2 11.2 0 0 0 2.812-.773c.43-.184.75-.35 1.129-.592m-6.005 1.55-.001 4.34c-.976-.27-1.498-.959-1.498-2.184 0-1.21.47-1.928 1.499-2.155M6 11.998c.238.008 1.098.161 1.493.261l.007 1.19a.75.75 0 0 1-1.5 0z\"\n />\n </Icon>\n );\n};\n\nexport const SecurityIcon: FC<BaseIconProps> = (props) => {\n return (\n <Icon size={18} viewBox=\"0 0 18 18\" {...props}>\n <path\n d=\"M6.563 7.678V6.603c0-1.153 1.09-2.088 2.437-2.088s2.438.935 2.438 2.088v1.075c.448 0 .812.311.812.696v3.479c0 .384-.364.696-.812.696H6.563c-.449 0-.813-.312-.813-.696v-3.48c0-.384.364-.695.813-.695m1.187-.006 1.431.006h1.07V6.564c0-.64-.504-1.104-1.25-1.104-.748 0-1.25.465-1.25 1.104zm1.956 2.14c0-.335-.317-.605-.706-.605-.39 0-.706.27-.706.604v.77c0 .335.316.605.706.605s.706-.27.706-.604z\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n <path\n d=\"M2 3.607c.003 5.606.146 11.651 6.879 13.378.078.02.164.02.242 0C15.854 15.258 15.997 9.213 16 3.607c0-.217-.14-.41-.345-.477L9.31 1.05a1 1 0 0 0-.62 0L2.345 3.13A.5.5 0 0 0 2 3.607m2.326 7.63c-.707-1.954-.81-4.33-.824-6.902L9 2.532l5.498 1.803c-.014 2.573-.117 4.948-.824 6.901-.697 1.93-1.987 3.463-4.674 4.222-2.687-.759-3.977-2.293-4.674-4.222\"\n fill=\"currentcolor\"\n fillOpacity=\".8\"\n />\n </Icon>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType } from \"@orderly.network/types\";\nimport { Flex, Text, ChevronDownIcon, cn } from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n ArrowRightShortIcon,\n CampaignIcon,\n FundIcon,\n SecurityIcon,\n} from \"./icons\";\n\nexport const AnnouncementItem: FC<{\n // title: string;\n expanded: boolean;\n url?: string | null;\n onItemClick: (url: string) => void;\n onExpandToggle?: () => void;\n type: AnnouncementType | undefined | null;\n message: string;\n updatedTime: number;\n className?: string;\n showDivider?: boolean;\n}> = (props) => {\n const { t } = useTranslation();\n const Icon = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return CampaignIcon;\n\n case AnnouncementType.Listing:\n return FundIcon;\n case AnnouncementType.Maintenance:\n return SecurityIcon;\n case AnnouncementType.Delisting:\n default:\n return AnnouncementIcon;\n }\n }, [props.type]);\n\n const title = useMemo(() => {\n switch (props.type) {\n case AnnouncementType.Campaign:\n return t(\"notification.campaign\");\n case AnnouncementType.Delisting:\n return t(\"notification.delisting\");\n case AnnouncementType.Listing:\n return t(\"notification.listing\");\n case AnnouncementType.Maintenance:\n return t(\"notification.maintenance\");\n case AnnouncementType.Vote:\n return t(\"notification.vote\");\n default:\n return t(\"notification.general\");\n }\n }, [props.type, t]);\n\n const action = useMemo(() => {\n if (\n (props.type === AnnouncementType.Campaign ||\n props.type === AnnouncementType.Vote) &&\n typeof props.url === \"string\" &&\n props.url !== \"\" &&\n typeof props.onItemClick === \"function\"\n ) {\n return (\n <Flex\n gap={1}\n itemAlign=\"center\"\n className=\"oui-cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation();\n props.onItemClick(props.url!);\n }}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} />\n </Flex>\n );\n }\n return null;\n }, [props.type, props.url, t]);\n\n const updateTime = useMemo(() => {\n if (props.type === AnnouncementType.Maintenance) {\n return (\n <Text size=\"2xs\" intensity={36}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n );\n }\n return (\n <Text.formatted\n size=\"2xs\"\n intensity={36}\n rule=\"date\"\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n >\n {props.updatedTime}\n </Text.formatted>\n );\n }, [props.updatedTime, props.type, t]);\n\n return (\n <Flex\n gap={2}\n itemAlign=\"start\"\n className={cn(\n \"oui-px-2 oui-py-[6px] oui-text-base-contrast-80\",\n !props.showDivider && \"oui-rounded-md hover:oui-bg-base-6\",\n !props.showDivider && props.expanded && \"oui-bg-base-6\",\n props.className,\n )}\n onClick={() => {\n props.onExpandToggle?.();\n }}\n >\n <Icon color=\"white\" className=\"oui-mt-3 oui-shrink-0\" />\n\n <Flex direction=\"column\" itemAlign=\"start\" grow>\n <Text size=\"xs\" intensity={80} weight=\"bold\">\n {title}\n </Text>\n {updateTime}\n {/* Expandable content with animation */}\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: props.expanded ? \"1fr\" : \"0fr\",\n }}\n >\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-overflow-hidden\">\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-pt-2\">\n {props.message}\n </Text>\n {action}\n </div>\n </div>\n </Flex>\n <div className=\"oui-pt-3\">\n {/* Chevron icon with rotation animation */}\n <ChevronDownIcon\n color=\"white\"\n size={18}\n className={`oui-transition-transform oui-duration-300 oui-ease-in-out ${\n props.expanded ? \"oui-rotate-180\" : \"oui-rotate-0\"\n }`}\n />\n </div>\n </Flex>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { type API } from \"@orderly.network/types\";\nimport {\n ExtensionPositionEnum,\n ExtensionSlot,\n ScrollArea,\n Text,\n} from \"@orderly.network/ui\";\nimport { cn } from \"@orderly.network/ui\";\nimport { AnnouncementItem } from \"./announcementItem\";\n\nexport const AnnouncementContent: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n onExpandToggle: (id: string | number | null) => void;\n onItemClick: (url: string) => void;\n showDivider?: boolean;\n}> = (props) => {\n const { dataSource, current, onExpandToggle, onItemClick } = props;\n const { t } = useTranslation();\n\n if (!Array.isArray(dataSource) || dataSource.length === 0) {\n return (\n <div className=\"oui-flex oui-h-[160px] oui-items-center oui-justify-center\">\n <ExtensionSlot\n position={ExtensionPositionEnum.EmptyDataIdentifier}\n title={t(\"notification.empty\")}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-col oui-space-y-1\",\n props.showDivider &&\n \"[&>*:not(:first-child)]:oui-border-t [&>*:not(:first-child)]:oui-border-line-12 [&>*:not(:first-child)]:oui-pt-1\",\n )}\n >\n {dataSource.map((item) => (\n <AnnouncementItem\n url={item.url}\n onItemClick={onItemClick}\n key={item.announcement_id}\n message={item.message}\n updatedTime={item.updated_time ?? 0}\n expanded={current === item.announcement_id}\n type={item.type}\n showDivider={props.showDivider}\n onExpandToggle={() => {\n if (current === item.announcement_id) {\n onExpandToggle(null);\n } else {\n onExpandToggle(item.announcement_id);\n }\n }}\n />\n ))}\n </div>\n );\n};\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState<string | number | null>(null);\n\n return (\n <>\n <div className=\"oui-px-5 oui-pt-4\">\n <Text intensity={80} weight=\"bold\">\n {t(\"notification.title\")}\n </Text>\n </div>\n\n <ScrollArea className=\"oui-flex oui-h-[300px] oui-flex-col oui-space-y-1 oui-p-3\">\n <AnnouncementContent\n dataSource={props.dataSource}\n current={expanded}\n onExpandToggle={setExpanded}\n onItemClick={props.onItemClick}\n />\n </ScrollArea>\n </>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text } from \"@orderly.network/ui\";\nimport { ArrowRightShortIcon } from \"../announcementCenter/icons\";\n\nexport const CampaignContentCard: FC<{\n message: string;\n coverImage: string;\n updateTime: number;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, coverImage, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-5\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n <div\n className=\"oui-rounded-xl oui-bg-base-9 oui-bg-cover oui-bg-center oui-bg-no-repeat\"\n style={{\n backgroundImage: `url(${coverImage})`,\n height: \"100px\",\n }}\n ></div>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n\nexport const MaintenanceContentCard: FC<{\n message: string;\n startTime: number;\n endTime: number;\n}> = ({ message, startTime, endTime }) => {\n const { t } = useTranslation();\n // const formattedMessage = useMemo(() => {\n // // Calculate duration in hours\n // const hours = differenceInHours(endTime, startTime);\n\n // const minutes = differenceInMinutes(endTime, startTime) - hours * 60;\n\n // // Convert timestamps to UTC dates\n // const startUtc = new UTCDate(startTime);\n // const endUtc = new UTCDate(endTime);\n\n // // Format start time as HH:mm (24-hour format) in UTC\n // const startTimeFormatted = format(startUtc, \"HH:mm\");\n\n // // Format end time as hh:mm a (12-hour format with AM/PM) in UTC\n // const endTimeFormatted = format(endUtc, \"hh:mm a\");\n\n // if (hours > 0) {\n // return t(\"notification.maintenanceDuration.hours\", {\n // hours: minutes > 0 ? (hours + minutes / 60).toFixed(1) : hours,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }\n\n // return t(\"notification.maintenanceDuration.minutes\", {\n // minutes,\n // startTimeFormatted,\n // endTimeFormatted,\n // });\n // }, [startTime, endTime, t]);\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text size=\"xs\" intensity={54}>\n {t(\"notification.recentlyUpdated\")}\n </Text>\n {/* <Flex itemAlign={\"center\"}>\n <Text size=\"xs\" weight=\"bold\">\n {formattedMessage}\n </Text>\n </Flex> */}\n {message && (\n <Text size=\"2xs\" intensity={80} as=\"div\" className=\"oui-mt-2\">\n {message}\n </Text>\n )}\n </div>\n );\n};\n\nexport const DelistingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const ListingContentCard: FC<{\n message: string;\n updateTime: number;\n}> = ({ message, updateTime }) => {\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <Text.formatted\n rule=\"date\"\n intensity={54}\n formatString=\"yyyy-MM-dd HH:mm:ss\"\n size=\"xs\"\n >\n {updateTime}\n </Text.formatted>\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n </div>\n );\n};\n\nexport const CommunityVoteContentCard: FC<{\n message: string;\n url?: string | null;\n onItemClick: (url: string) => void;\n}> = ({ message, url, onItemClick }) => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n <Text size=\"sm\" weight=\"bold\">\n {message}\n </Text>\n {typeof url === \"string\" &&\n url !== \"\" &&\n typeof onItemClick === \"function\" && (\n <button\n className=\"oui-flex oui-items-center oui-gap-1\"\n onClick={() => onItemClick(url)}\n >\n <Text\n size=\"xs\"\n color=\"buy\"\n className=\"oui-bg-clip-text oui-text-transparent oui-gradient-brand\"\n >\n {t(\"notification.joinNow\")}\n </Text>\n <ArrowRightShortIcon size={18} color=\"success\" />\n </button>\n )}\n </div>\n );\n};\n","import { FC, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { AnnouncementType, type API } from \"@orderly.network/types\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n Divider,\n Flex,\n Text,\n} from \"@orderly.network/ui\";\nimport {\n AnnouncementIcon,\n BattleIcon,\n FundIcon,\n SecurityIcon,\n} from \"../announcementCenter/icons\";\nimport {\n CampaignContentCard,\n CommunityVoteContentCard,\n DelistingContentCard,\n ListingContentCard,\n MaintenanceContentCard,\n} from \"./contentCard\";\n\nexport interface NotificationProps {\n // Define your notification props here\n className?: string;\n // children?: React.ReactNode;\n dataSource: API.AnnouncementRow[];\n onClose?: () => void;\n}\n\nexport interface NotificationItemProps {\n id: string;\n type?: \"success\" | \"error\" | \"warning\" | \"info\";\n title?: string;\n message: string;\n onClose?: () => void;\n}\n\nexport interface NotificationListProps {\n notifications: NotificationItemProps[];\n onRemove?: (id: string) => void;\n}\n\nconst NotificationHeader: FC<{\n // type: AnnouncementType;\n dataSource: API.AnnouncementRow[];\n current: number;\n expanded?: boolean;\n onExpandToggle?: () => void;\n // onClose?: () => void;\n}> = (props) => {\n const { t } = useTranslation();\n const { expanded } = props;\n const { type } = props.dataSource[props.current];\n\n const title = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <Text\n size=\"sm\"\n className=\"oui-text-transparent oui-bg-clip-text oui-gradient-brand\"\n >\n {t(\"notification.campaign\")}\n </Text>\n );\n case AnnouncementType.Delisting:\n return <Text size=\"sm\">{t(\"notification.delistingTitle\")}</Text>;\n case AnnouncementType.Listing:\n return (\n <Text size=\"sm\" color=\"buy\">\n {t(\"notification.listing\")}\n </Text>\n );\n case AnnouncementType.Maintenance:\n return (\n <Text size=\"sm\" color=\"warning\">\n {t(\"notification.maintenanceTitle\")}\n </Text>\n );\n case AnnouncementType.Vote:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.vote\")}\n </Text>\n );\n default:\n return (\n <Text size=\"sm\" color=\"inherit\">\n {t(\"notification.generalTitle\")}\n </Text>\n );\n }\n }, [type, t]);\n const icon = useMemo(() => {\n switch (type) {\n case AnnouncementType.Campaign:\n return <BattleIcon color=\"white\" />;\n\n case AnnouncementType.Listing:\n return <FundIcon color=\"success\" />;\n case AnnouncementType.Maintenance:\n return <SecurityIcon color=\"warning\" />;\n case AnnouncementType.Delisting:\n default:\n return <AnnouncementIcon color=\"white\" />;\n }\n }, [type]);\n return (\n <Flex itemAlign=\"center\" justify=\"between\" className=\"oui-px-4 oui-py-3\">\n <div className=\"orderly-notification-header oui-flex oui-items-center oui-gap-2\">\n {icon}\n {title}\n </div>\n <button\n onClick={props.onExpandToggle}\n className=\"oui-transition-transform oui-duration-300\"\n style={{\n transform: !expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n }}\n >\n <ChevronDownIcon size={18} color=\"white\" />\n </button>\n </Flex>\n );\n};\n\nconst NotificationFooter: FC<{\n total: number;\n current: number;\n onCloseAll: () => void;\n onPrev: () => void;\n onNext: () => void;\n}> = (props) => {\n const { total, current, onCloseAll, onPrev, onNext } = props;\n const { t } = useTranslation();\n return (\n <Flex\n className=\"orderly-notification-footer oui-px-4 oui-py-2\"\n itemAlign=\"center\"\n justify=\"between\"\n >\n <Flex gap={2}>\n <button\n disabled={current - 1 < 0}\n onClick={onPrev}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronLeftIcon size={14} color=\"white\" />\n </button>\n <Text intensity={54} size=\"sm\">\n {current + 1}/{total}\n </Text>\n <button\n disabled={current + 1 >= total}\n onClick={onNext}\n className=\"oui-flex oui-size-[18px] oui-items-center oui-justify-center oui-rounded-full oui-bg-base-6 hover:oui-bg-base-5 disabled:oui-opacity-50\"\n >\n <ChevronRightIcon size={14} color=\"white\" />\n </button>\n </Flex>\n <button onClick={onCloseAll}>\n <Text size=\"xs\" color=\"primary\">\n {t(\"notification.closeAll\", { total })}\n </Text>\n </button>\n </Flex>\n );\n};\n\nconst NotificationContent: FC<{\n dataSource: (API.AnnouncementRow & {\n startTime?: number;\n endTime?: number;\n })[];\n current: number;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const elements = useMemo(() => {\n return props.dataSource.map((message) => {\n const { type } = message;\n switch (type) {\n case AnnouncementType.Campaign:\n return (\n <CampaignContentCard\n message={message.message}\n coverImage={message.coverImage ?? \"\"}\n updateTime={message.updated_time ?? 0}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n case AnnouncementType.Maintenance:\n return (\n <MaintenanceContentCard\n message={message.message}\n startTime={message.startTime ?? 0}\n endTime={message.endTime ?? 0}\n />\n );\n case AnnouncementType.Delisting:\n return (\n <DelistingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n case AnnouncementType.Vote:\n return (\n <CommunityVoteContentCard\n message={message.message}\n url={message.url ?? \"\"}\n onItemClick={props.onItemClick}\n />\n );\n default:\n return (\n <ListingContentCard\n message={message.message}\n updateTime={message.updated_time ?? 0}\n />\n );\n }\n });\n }, [props.dataSource]);\n return <>{elements[props.current]}</>;\n};\n\nexport const NotificationUI: FC<\n NotificationProps & {\n maintenanceMessage?: string;\n onItemClick: (url: string) => void;\n }\n> = (props) => {\n const [expanded, setExpanded] = useState(true);\n\n const [current, setCurrent] = useState(0);\n const len = useMemo(() => props.dataSource?.length ?? 0, [props.dataSource]);\n\n if (len === 0) {\n return null;\n }\n\n return (\n <div className=\"orderly-notification oui-w-full \">\n <NotificationHeader\n dataSource={props.dataSource ?? []}\n current={current}\n expanded={expanded}\n onExpandToggle={() => {\n setExpanded(!expanded);\n }}\n />\n <Divider className=\"oui-mx-4\" />\n <div\n className=\"oui-grid oui-transition-all oui-duration-300 oui-ease-in-out\"\n style={{\n gridTemplateRows: expanded ? \"1fr\" : \"0fr\",\n }}\n >\n {/* Inner div needs overflow-hidden and min-height-0 for grid animation to work */}\n <div className=\"oui-min-h-0 oui-overflow-hidden \">\n <div className=\"oui-px-4 oui-py-3\">\n <NotificationContent\n dataSource={props.dataSource ?? []}\n current={current}\n onItemClick={props.onItemClick}\n />\n </div>\n </div>\n </div>\n\n <NotificationFooter\n total={len}\n current={current}\n onCloseAll={props.onClose ?? (() => {})}\n onPrev={() => {\n if (current - 1 < 0) {\n return;\n }\n setCurrent(current - 1);\n }}\n onNext={() => {\n if (current + 1 >= len) {\n return;\n }\n setCurrent(current + 1);\n }}\n />\n </div>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { UTCDateMini } from \"@date-fns/utc\";\nimport { format } from \"date-fns\";\nimport {\n MaintenanceStatus,\n useLocalStorage,\n useMaintenanceStatus,\n useOrderlyContext,\n useQuery,\n useWS,\n} from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { useAppContext } from \"@orderly.network/react-app\";\nimport { AnnouncementType, API, WSMessage } from \"@orderly.network/types\";\n\nconst maintentanceId = \"-1\";\n\nexport type AnnouncementOptions = {\n hideTips?: boolean;\n};\n\ninterface AnnouncementStore {\n show?: boolean;\n lastUpdateTime?: number | null;\n}\n\nconst ORDERLY_ANNOUNCEMENT_KEY = \"orderly_announcement\";\n\nconst getTimeString = (timestamp: number) => {\n const date = format(new UTCDateMini(timestamp), \"MMM dd\");\n const time = format(new UTCDateMini(timestamp), \"h:mm aa\");\n return `${time} (UTC) on ${date}`;\n};\n\nconst sortDataByUpdatedTime = (list: API.AnnouncementRow[]) => {\n return list.sort((a, b) => {\n if (a.updated_time && b.updated_time) {\n return b.updated_time - a.updated_time;\n }\n return 0;\n });\n};\n\nconst filterDuplicateArrayById = (list: API.AnnouncementRow[]) => {\n const seenIds = new Set<string | number>();\n const newList: API.AnnouncementRow[] = [];\n\n list.forEach((item) => {\n if (!seenIds.has(item.announcement_id)) {\n // If the item's ID hasn't been seen before, add it and mark as seen\n seenIds.add(item.announcement_id);\n newList.push(item);\n }\n });\n\n return newList;\n};\n\nconst useAnnouncementData = () => {\n const { t } = useTranslation();\n const ws = useWS();\n const { dataAdapter } = useOrderlyContext();\n\n const [announcementStore, setAnnouncementStore] =\n useLocalStorage<AnnouncementStore>(ORDERLY_ANNOUNCEMENT_KEY, {});\n\n const [tips, setTips] = useState<API.AnnouncementRow[]>([]);\n const [maintenances, setMaintenances] = useState([] as API.AnnouncementRow[]);\n\n const [maintenanceDialogInfo, setMaintenanceDialogInfo] = useState<string>();\n\n const { startTime, endTime, status, brokerName } = useMaintenanceStatus();\n\n const { data: announcements } = useQuery<API.Announcement>(\n `/v2/public/announcement`,\n {\n revalidateOnFocus: false,\n refreshInterval: 60 * 60 * 1000, // refresh every 1 hour\n formatter: (data) => data,\n },\n );\n\n const getMaintentTipsContent = (\n brokerName: string,\n startDate: string,\n endDate: string,\n ) => t(\"maintenance.tips.description\", { brokerName, startDate, endDate });\n\n const getMaintentDialogContent = (brokerName: string, endDate: string) =>\n t(\"maintenance.dialog.description\", { brokerName, endDate });\n\n useEffect(() => {\n const startDate = startTime ? getTimeString(startTime) : \"-\";\n const endDate = endTime ? getTimeString(endTime) : \"-\";\n\n const dialogContent =\n status === MaintenanceStatus.Maintenance\n ? getMaintentDialogContent(brokerName, endDate)\n : undefined;\n\n setMaintenanceDialogInfo(dialogContent);\n\n if (startTime && endTime) {\n setMaintenances([\n {\n announcement_id: maintentanceId,\n type: AnnouncementType.Maintenance,\n startTime: startTime,\n endTime: endTime,\n updated_time: startTime,\n message: getMaintentTipsContent(brokerName, startDate, endDate),\n },\n ] as unknown as API.AnnouncementRow[]);\n } else {\n setMaintenances([]);\n }\n }, [startTime, endTime, status, brokerName, t]);\n\n useEffect(() => {\n let list = [...(maintenances ?? []), ...(announcements?.rows ?? [])];\n\n if (typeof dataAdapter?.announcementList === \"function\") {\n list = dataAdapter.announcementList(list);\n }\n\n const removedDuplicateList = filterDuplicateArrayById(list);\n const sortedList = sortDataByUpdatedTime(removedDuplicateList);\n\n setTips(sortedList);\n }, [maintenances, announcements, dataAdapter?.announcementList]);\n\n useEffect(() => {\n if (!announcements?.rows) {\n return;\n }\n const lastUpdateTime = announcements.last_updated_time ?? 0;\n const firstTipTime = tips[0]?.updated_time ?? 0;\n const updatedTime = Math.max(lastUpdateTime, firstTipTime);\n\n const closedTime = announcementStore.lastUpdateTime ?? 0;\n if (closedTime < updatedTime) {\n setAnnouncementStore({ show: true, lastUpdateTime: updatedTime });\n }\n }, [announcements, tips]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\"announcement\", {\n onMessage(message: WSMessage.Announcement) {\n if (message) {\n setTips((prev) => {\n const list = prev.filter(\n (item) => item.announcement_id !== message.announcement_id,\n );\n\n const newTip = {\n announcement_id: message.announcement_id,\n message: message.message,\n url: message.url,\n i18n: message.i18n,\n type: message.type,\n updated_time: message.updated_time,\n };\n return [...list, newTip];\n });\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: true }));\n }\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [ws]);\n\n return {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n };\n};\n\nexport type AnnouncementReturn = ReturnType<typeof useAnnouncement>;\n\nexport const useAnnouncement = (options?: AnnouncementOptions) => {\n const { showAnnouncement, setShowAnnouncement } = useAppContext();\n\n const {\n tips,\n maintenanceDialogInfo,\n announcementStore,\n setAnnouncementStore,\n } = useAnnouncementData();\n\n const closeTips = () => {\n // @ts-ignore\n setAnnouncementStore((prev) => ({ ...prev, show: false }));\n };\n\n useEffect(() => {\n const len = tips.length;\n setShowAnnouncement(\n Boolean(len) && announcementStore.show && !options?.hideTips,\n );\n }, [tips, announcementStore.show, options?.hideTips, setShowAnnouncement]);\n\n return {\n maintenanceDialogInfo,\n tips,\n closeTips,\n showAnnouncement,\n };\n};\n","import { useState } from \"react\";\nimport { useAnnouncement } from \"../hooks/useAnnouncement\";\n\nexport const useAnnouncementCenterScript = () => {\n const { tips } = useAnnouncement();\n const [current, setCurrent] = useState<string | number | null>(null);\n\n return {\n dataSource: tips,\n current,\n setCurrent,\n };\n};\n","import { FC } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { AnnouncementContent } from \"../components/announcementCenter/announcementCenter.ui\";\n\nexport const AnnouncementCenterUI: FC<{\n dataSource: API.AnnouncementRow[];\n current: string | number | null;\n setCurrent: (current: string | number | null) => void;\n onItemClick: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent, onItemClick } = props;\n return (\n <div className=\"oui-m-1 oui-rounded-xl oui-bg-base-9 oui-p-2\">\n <AnnouncementContent\n dataSource={dataSource}\n current={current}\n onExpandToggle={setCurrent}\n onItemClick={onItemClick}\n showDivider\n />\n </div>\n );\n};\n","import { FC, useCallback } from \"react\";\nimport { useAnnouncementCenterScript } from \"./announcementCenter.script\";\nimport { AnnouncementCenterUI } from \"./announcementCenter.ui\";\n\nexport const AnnouncementCenterWidget: FC<{\n onRouteChange: (url: string) => void;\n}> = (props) => {\n const { dataSource, current, setCurrent } = useAnnouncementCenterScript();\n const onItemClick = useCallback(\n (url: string) => {\n if (!url) return;\n props.onRouteChange(url);\n },\n [props.onRouteChange],\n );\n return (\n <AnnouncementCenterUI\n dataSource={dataSource}\n current={current}\n setCurrent={setCurrent}\n onItemClick={onItemClick}\n />\n );\n};\n","import { FC } from \"react\";\nimport { RouterAdapter } from \"@orderly.network/types\";\nimport { AnnouncementCenterWidget } from \"./announcementCenter.widget\";\n\nexport const AnnouncementCenterPage: FC<{ routerAdapter?: RouterAdapter }> = (\n props,\n) => {\n return (\n <AnnouncementCenterWidget\n onRouteChange={(url: string) => {\n if (!url) return;\n props.routerAdapter?.onRouteChange({\n href: url,\n name: url,\n target: \"_blank\",\n });\n }}\n />\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/ui-notification",
3
- "version": "2.8.11-alpha.0",
3
+ "version": "2.8.11-alpha.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -18,12 +18,12 @@
18
18
  "@date-fns/utc": "1.2.0",
19
19
  "date-fns": "^3.6.0",
20
20
  "immer": "^10.1.1",
21
- "@orderly.network/i18n": "2.8.11-alpha.0",
22
- "@orderly.network/types": "2.8.11-alpha.0",
23
- "@orderly.network/hooks": "2.8.11-alpha.0",
24
- "@orderly.network/ui": "2.8.11-alpha.0",
25
- "@orderly.network/react-app": "2.8.11-alpha.0",
26
- "@orderly.network/utils": "2.8.11-alpha.0"
21
+ "@orderly.network/hooks": "2.8.11-alpha.1",
22
+ "@orderly.network/types": "2.8.11-alpha.1",
23
+ "@orderly.network/ui": "2.8.11-alpha.1",
24
+ "@orderly.network/i18n": "2.8.11-alpha.1",
25
+ "@orderly.network/react-app": "2.8.11-alpha.1",
26
+ "@orderly.network/utils": "2.8.11-alpha.1"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@swc/cli": "^0.3.12",
@@ -34,7 +34,7 @@
34
34
  "react-dom": "^18.2.0",
35
35
  "tailwindcss": "^3.4.4",
36
36
  "tsup": "^8.5.1",
37
- "tsconfig": "0.11.11-alpha.0"
37
+ "tsconfig": "0.11.11-alpha.1"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "react": ">=18",