bitsnap-react 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ __export(src_exports, {
34
34
  Bitsnap: () => Bitsnap,
35
35
  BitsnapCheckout: () => BitsnapCart_default,
36
36
  GooglePayButton: () => GooglePay_default,
37
+ NotificationsComponent: () => NotificationsComponentPublic_default,
37
38
  createCheckout: () => createCheckout,
38
39
  createPaymentURL: () => createPaymentURL,
39
40
  getReferenceIfPossible: () => getReferenceIfPossible,
@@ -107,6 +108,7 @@ var import_zod = __toESM(require("zod"));
107
108
  // src/components/checkout/constants.ts
108
109
  var HOST = "https://bitsnap.pl";
109
110
  function setCustomHost(host) {
111
+ console.log("setCustomHost", host);
110
112
  HOST = host;
111
113
  }
112
114
 
@@ -142,7 +144,7 @@ function formatCurrency(amount, currency) {
142
144
  var import_zustand = require("zustand");
143
145
  var useCheckoutStore = (0, import_zustand.create)((set) => ({
144
146
  isCartVisible: false,
145
- numberOfProductsInCart: 2,
147
+ numberOfProductsInCart: 0,
146
148
  showCart: () => set((state) => ({ ...state, isCartVisible: true })),
147
149
  hideCart: () => set((state) => ({ ...state, isCartVisible: false })),
148
150
  setNumberOfProductsInCart: (numberOfProductsInCart) => set((state) => ({ ...state, numberOfProductsInCart }))
@@ -386,6 +388,9 @@ function getNewHostIfExist() {
386
388
  }
387
389
  var CartProvider = ({ children }) => {
388
390
  const queryClient = new import_react_query.QueryClient();
391
+ (0, import_react.useEffect)(() => {
392
+ updateNumberOfProductsInCart();
393
+ }, []);
389
394
  const projectID = getProjectID();
390
395
  if (projectID == null) {
391
396
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {});
@@ -498,6 +503,7 @@ function addProducts(products) {
498
503
  metadata: el.metadata
499
504
  })));
500
505
  saveCheckout(checkout);
506
+ updateNumberOfProductsInCart();
501
507
  }
502
508
  function removeProductFromCheckout(ids) {
503
509
  var _a;
@@ -509,6 +515,7 @@ function removeProductFromCheckout(ids) {
509
515
  )
510
516
  };
511
517
  saveCheckout(newCheckout);
518
+ updateNumberOfProductsInCart();
512
519
  }
513
520
  function saveCheckout(model) {
514
521
  localStorage.setItem(checkoutKey, JSON.stringify(model));
@@ -616,6 +623,7 @@ var getCheckoutMethods = (projectID) => {
616
623
  const empty = structuredClone(emptyCheckout);
617
624
  empty.country = (_a = getCheckout()) == null ? void 0 : _a.country;
618
625
  saveCheckout(empty);
626
+ updateNumberOfProductsInCart();
619
627
  },
620
628
  async getAvailableCountries() {
621
629
  const result = await fetch(buildURL(projectID, "/countries"), {
@@ -697,6 +705,7 @@ var getCheckoutMethods = (projectID) => {
697
705
  return product;
698
706
  });
699
707
  saveCheckout(checkout);
708
+ updateNumberOfProductsInCart();
700
709
  },
701
710
  async redirectToNextStep() {
702
711
  const checkout = getCheckout();
@@ -1082,6 +1091,17 @@ function resolveProductDetailsFromSingleProduct(id, product) {
1082
1091
  images: (_d = variant.images) != null ? _d : product.images
1083
1092
  };
1084
1093
  }
1094
+ function updateNumberOfProductsInCart() {
1095
+ var _a, _b;
1096
+ const checkout = getCheckout();
1097
+ let numberOfProductsInCart = 0;
1098
+ if (checkout == null) {
1099
+ useCheckoutStore.setState((state) => ({ ...state, numberOfProductsInCart }));
1100
+ return;
1101
+ }
1102
+ numberOfProductsInCart = (_b = (_a = checkout.products) == null ? void 0 : _a.reduce((acc, product) => acc + product.quantity, 0)) != null ? _b : 0;
1103
+ useCheckoutStore.setState((state) => ({ ...state, numberOfProductsInCart }));
1104
+ }
1085
1105
 
1086
1106
  // src/components/checkout/ApplePay.tsx
1087
1107
  var import_react_query2 = require("@tanstack/react-query");
@@ -1393,20 +1413,20 @@ function Wrapper2(props) {
1393
1413
  var GooglePay_default = Wrapper2;
1394
1414
 
1395
1415
  // src/components/checkout/BitsnapCart.tsx
1396
- var import_react7 = require("react");
1416
+ var import_react8 = require("react");
1397
1417
  var import_zod2 = __toESM(require("zod"));
1398
1418
 
1399
1419
  // src/components/checkout/CartComponent.tsx
1400
- var import_react6 = require("@formkit/auto-animate/react");
1420
+ var import_react7 = require("@formkit/auto-animate/react");
1401
1421
  var import_react_dom = require("react-dom");
1402
1422
 
1403
1423
  // src/components/checkout/CartComponentContent.tsx
1404
- var import_react4 = require("@formkit/auto-animate/react");
1405
- var import_react5 = __toESM(require("react"));
1424
+ var import_react5 = require("@formkit/auto-animate/react");
1425
+ var import_react6 = __toESM(require("react"));
1406
1426
 
1407
1427
  // src/components/checkout/CountrySelector.tsx
1408
- var import_framer_motion = require("framer-motion");
1409
- var import_react2 = require("react");
1428
+ var import_react2 = require("motion/react");
1429
+ var import_react3 = require("react");
1410
1430
  var import_jsx_runtime5 = require("react/jsx-runtime");
1411
1431
  function CountrySelector({
1412
1432
  id,
@@ -1418,8 +1438,8 @@ function CountrySelector({
1418
1438
  countries
1419
1439
  }) {
1420
1440
  var _a;
1421
- const ref = (0, import_react2.useRef)(null);
1422
- (0, import_react2.useEffect)(() => {
1441
+ const ref = (0, import_react3.useRef)(null);
1442
+ (0, import_react3.useEffect)(() => {
1423
1443
  const mutableRef = ref;
1424
1444
  const handleClickOutside = (event) => {
1425
1445
  if (mutableRef.current && // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1434,12 +1454,12 @@ function CountrySelector({
1434
1454
  document.removeEventListener("mousedown", handleClickOutside);
1435
1455
  };
1436
1456
  }, [ref]);
1437
- (0, import_react2.useEffect)(() => {
1457
+ (0, import_react3.useEffect)(() => {
1438
1458
  if (selectedValue == null && countries.length > 0) {
1439
1459
  onChange(countries[0].code);
1440
1460
  }
1441
1461
  }, []);
1442
- const [query, setQuery] = (0, import_react2.useState)("");
1462
+ const [query, setQuery] = (0, import_react3.useState)("");
1443
1463
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { ref, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
1444
1464
  /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1445
1465
  "button",
@@ -1490,8 +1510,8 @@ function CountrySelector({
1490
1510
  ]
1491
1511
  }
1492
1512
  ),
1493
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_framer_motion.AnimatePresence, { children: open2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1494
- import_framer_motion.motion.ul,
1513
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react2.AnimatePresence, { children: open2 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1514
+ import_react2.motion.ul,
1495
1515
  {
1496
1516
  initial: { opacity: 0 },
1497
1517
  animate: { opacity: 1 },
@@ -1586,7 +1606,7 @@ function CountrySelector({
1586
1606
  var CountrySelector_default = CountrySelector;
1587
1607
 
1588
1608
  // src/components/checkout/SingleProduct.tsx
1589
- var import_react3 = require("react");
1609
+ var import_react4 = require("react");
1590
1610
  var import_jsx_runtime6 = require("react/jsx-runtime");
1591
1611
  var SingleProduct = ({ quantity, details, shouldUpdate }) => {
1592
1612
  var _a;
@@ -1608,9 +1628,9 @@ var QuantityComponent = ({
1608
1628
  shouldUpdate,
1609
1629
  className
1610
1630
  }) => {
1611
- const [quantityString, setQuantityString] = (0, import_react3.useState)(quantity.toString());
1612
- const [quantityValue, setQuantityValue] = (0, import_react3.useState)(quantity);
1613
- (0, import_react3.useEffect)(() => {
1631
+ const [quantityString, setQuantityString] = (0, import_react4.useState)(quantity.toString());
1632
+ const [quantityValue, setQuantityValue] = (0, import_react4.useState)(quantity);
1633
+ (0, import_react4.useEffect)(() => {
1614
1634
  shouldUpdate(quantityValue);
1615
1635
  }, [quantityValue]);
1616
1636
  function setNewQuantity(newQuantity) {
@@ -1693,8 +1713,8 @@ var CartComponentContent = ({ className }) => {
1693
1713
  const { mutateAsync: clearCart } = (0, import_react_query4.useMutation)({
1694
1714
  mutationFn: provider.clearCart
1695
1715
  });
1696
- const [errMsg, setErrMsg] = import_react5.default.useState("");
1697
- const [isCountryOpen, setIsCountryOpen] = import_react5.default.useState(false);
1716
+ const [errMsg, setErrMsg] = import_react6.default.useState("");
1717
+ const [isCountryOpen, setIsCountryOpen] = import_react6.default.useState(false);
1698
1718
  const {
1699
1719
  mutateAsync: continueToCheckoutAsync,
1700
1720
  isPending: isContinueToCheckoutLoading
@@ -1717,7 +1737,7 @@ var CartComponentContent = ({ className }) => {
1717
1737
  queryKey: ["cart-country"],
1718
1738
  queryFn: provider.getCountry
1719
1739
  });
1720
- const [productsParent] = (0, import_react4.useAutoAnimate)(
1740
+ const [productsParent] = (0, import_react5.useAutoAnimate)(
1721
1741
  /* optional config */
1722
1742
  );
1723
1743
  const products = isErr(data) ? void 0 : data;
@@ -1773,7 +1793,7 @@ var CartComponentContent = ({ className }) => {
1773
1793
  "div",
1774
1794
  {
1775
1795
  className: "max-h-[70vh] overflow-clip overflow-y-scroll",
1776
- children: products != null && products.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { className: "mt-5", children: products.map((product) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react5.default.Fragment, { children: product.details != null && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("li", { className: "mb-3", children: [
1796
+ children: products != null && products.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { className: "mt-5", children: products.map((product) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react6.default.Fragment, { children: product.details != null && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("li", { className: "mb-3", children: [
1777
1797
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1778
1798
  SingleProduct_default,
1779
1799
  {
@@ -1883,7 +1903,7 @@ var CartComponentContent_default = CartComponentContent;
1883
1903
  // src/components/checkout/CartComponent.tsx
1884
1904
  var import_jsx_runtime9 = require("react/jsx-runtime");
1885
1905
  function CartComponent({ isVisible, shouldHide }) {
1886
- const [parent] = (0, import_react6.useAutoAnimate)(
1906
+ const [parent] = (0, import_react7.useAutoAnimate)(
1887
1907
  /* optional config */
1888
1908
  );
1889
1909
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ref: parent, className: "bitsnap-checkout dark", style: { zIndex: 999999 }, children: isVisible && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
@@ -1963,9 +1983,10 @@ function BitsnapCart({
1963
1983
  projectID,
1964
1984
  children,
1965
1985
  onVisibleChange,
1966
- className
1986
+ className,
1987
+ numberOfProductsInCartOptions
1967
1988
  }) {
1968
- const { isCartVisible, showCart, hideCart } = useCheckoutStore();
1989
+ const { isCartVisible, showCart, hideCart, numberOfProductsInCart } = useCheckoutStore();
1969
1990
  function sentPostMessageToIframe(msg) {
1970
1991
  const iframes = document.querySelectorAll("iframe");
1971
1992
  iframes.forEach((iframe) => {
@@ -1973,13 +1994,13 @@ function BitsnapCart({
1973
1994
  (_a = iframe.contentWindow) == null ? void 0 : _a.postMessage(msg, "*");
1974
1995
  });
1975
1996
  }
1976
- (0, import_react7.useEffect)(() => {
1997
+ (0, import_react8.useEffect)(() => {
1977
1998
  onVisibleChange == null ? void 0 : onVisibleChange(isCartVisible);
1978
1999
  }, [isCartVisible]);
1979
- (0, import_react7.useEffect)(() => {
2000
+ (0, import_react8.useEffect)(() => {
1980
2001
  setProjectID(projectID);
1981
2002
  }, [projectID]);
1982
- (0, import_react7.useEffect)(() => {
2003
+ (0, import_react8.useEffect)(() => {
1983
2004
  if (!("cart" in window)) {
1984
2005
  const projectID2 = getProjectID();
1985
2006
  if (projectID2 == null) {
@@ -2064,7 +2085,7 @@ function BitsnapCart({
2064
2085
  }
2065
2086
  });
2066
2087
  }
2067
- (0, import_react7.useEffect)(() => {
2088
+ (0, import_react8.useEffect)(() => {
2068
2089
  var _a;
2069
2090
  setupEventListener();
2070
2091
  if (typeof window !== "undefined") {
@@ -2080,31 +2101,57 @@ function BitsnapCart({
2080
2101
  }
2081
2102
  }, []);
2082
2103
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
2083
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2104
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2084
2105
  "button",
2085
2106
  {
2086
2107
  onClick: () => isCartVisible ? hideCart() : showCart(),
2087
- className: ["bitsnap-checkout", className != null ? className : "relative rounded-full hover:bg-neutral-300 transition p-1"].join(" "),
2088
- children: children ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2089
- "svg",
2090
- {
2091
- xmlns: "http://www.w3.org/2000/svg",
2092
- width: "24",
2093
- height: "24",
2094
- viewBox: "0 0 24 24",
2095
- fill: "none",
2096
- stroke: "currentColor",
2097
- strokeWidth: "2",
2098
- strokeLinecap: "round",
2099
- strokeLinejoin: "round",
2100
- className: "lucide lucide-shopping-cart",
2101
- children: [
2102
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", { cx: "8", cy: "21", r: "1" }),
2103
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", { cx: "19", cy: "21", r: "1" }),
2104
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12" })
2105
- ]
2106
- }
2107
- )
2108
+ style: { position: "relative" },
2109
+ className: ["bitsnap-checkout", className != null ? className : "rounded-full hover:bg-neutral-300 transition p-1"].join(" "),
2110
+ children: [
2111
+ children ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2112
+ "svg",
2113
+ {
2114
+ xmlns: "http://www.w3.org/2000/svg",
2115
+ width: "24",
2116
+ height: "24",
2117
+ viewBox: "0 0 24 24",
2118
+ fill: "none",
2119
+ stroke: "currentColor",
2120
+ strokeWidth: "2",
2121
+ strokeLinecap: "round",
2122
+ strokeLinejoin: "round",
2123
+ className: "lucide lucide-shopping-cart",
2124
+ children: [
2125
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", { cx: "8", cy: "21", r: "1" }),
2126
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", { cx: "19", cy: "21", r: "1" }),
2127
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12" })
2128
+ ]
2129
+ }
2130
+ ),
2131
+ (numberOfProductsInCartOptions == null ? void 0 : numberOfProductsInCartOptions.isVisible) != false && numberOfProductsInCart > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2132
+ "div",
2133
+ {
2134
+ style: {
2135
+ position: "absolute",
2136
+ bottom: -5,
2137
+ right: -5,
2138
+ background: "black",
2139
+ color: "white",
2140
+ borderRadius: "50%",
2141
+ width: "22px",
2142
+ height: "22px",
2143
+ display: "flex",
2144
+ alignItems: "center",
2145
+ justifyContent: "center",
2146
+ fontSize: "13px",
2147
+ fontWeight: 600,
2148
+ boxShadow: "0 2px 8px rgba(0, 0, 0, 0.25)",
2149
+ ...numberOfProductsInCartOptions == null ? void 0 : numberOfProductsInCartOptions.style
2150
+ },
2151
+ children: numberOfProductsInCart
2152
+ }
2153
+ )
2154
+ ]
2108
2155
  }
2109
2156
  ),
2110
2157
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
@@ -2119,12 +2166,2242 @@ function BitsnapCart({
2119
2166
  ] });
2120
2167
  }
2121
2168
  var BitsnapCart_default = BitsnapCart;
2169
+
2170
+ // src/components/notifications/NotificationsComponentPublic.tsx
2171
+ var import_react19 = require("react");
2172
+
2173
+ // src/rpc-provider.tsx
2174
+ var import_connect_query = require("@connectrpc/connect-query");
2175
+ var import_connect_web2 = require("@connectrpc/connect-web");
2176
+ var import_react_query5 = require("@tanstack/react-query");
2177
+ var import_react9 = require("react");
2178
+
2179
+ // src/gen/proto/public/v1/public_api-PublicApiService_connectquery.ts
2180
+ var public_api_PublicApiService_connectquery_exports = {};
2181
+ __export(public_api_PublicApiService_connectquery_exports, {
2182
+ applePayValidateMerchant: () => applePayValidateMerchant,
2183
+ authorizeOneClickPayment: () => authorizeOneClickPayment,
2184
+ didBuyProduct: () => didBuyProduct,
2185
+ getAvailableCountForProduct: () => getAvailableCountForProduct,
2186
+ getNotificationSettings: () => getNotificationSettings,
2187
+ getNotificationSettingsDetails: () => getNotificationSettingsDetails,
2188
+ getOrder: () => getOrder,
2189
+ getOrderRetryUrl: () => getOrderRetryUrl,
2190
+ getPreOrderDetails: () => getPreOrderDetails,
2191
+ getShopProducts: () => getShopProducts,
2192
+ isOneClickPaymentAvailable: () => isOneClickPaymentAvailable,
2193
+ notifyUserAboutProductAvailability: () => notifyUserAboutProductAvailability,
2194
+ pushEvent: () => pushEvent,
2195
+ pushSendDeviceToken: () => pushSendDeviceToken,
2196
+ shouldShopProducts: () => shouldShopProducts,
2197
+ updateGlobalNotificationSettings: () => updateGlobalNotificationSettings,
2198
+ updateNotificationSettings: () => updateNotificationSettings,
2199
+ userPanelDeleteAccount: () => userPanelDeleteAccount,
2200
+ userPanelGetAudiobookDetails: () => userPanelGetAudiobookDetails,
2201
+ userPanelGetAudiobookDetailsDownloadURLs: () => userPanelGetAudiobookDetailsDownloadURLs,
2202
+ userPanelGetFileDetails: () => userPanelGetFileDetails,
2203
+ userPanelGetProducts: () => userPanelGetProducts,
2204
+ userPanelGetTicketDetails: () => userPanelGetTicketDetails,
2205
+ userPanelLogin: () => userPanelLogin,
2206
+ userPanelLoginWithCode: () => userPanelLoginWithCode,
2207
+ userPanelLogout: () => userPanelLogout
2208
+ });
2209
+ var getOrder = PublicApiService.method.getOrder;
2210
+ var getOrderRetryUrl = PublicApiService.method.getOrderRetryUrl;
2211
+ var userPanelLogin = PublicApiService.method.userPanelLogin;
2212
+ var userPanelLoginWithCode = PublicApiService.method.userPanelLoginWithCode;
2213
+ var userPanelLogout = PublicApiService.method.userPanelLogout;
2214
+ var userPanelDeleteAccount = PublicApiService.method.userPanelDeleteAccount;
2215
+ var userPanelGetProducts = PublicApiService.method.userPanelGetProducts;
2216
+ var userPanelGetAudiobookDetails = PublicApiService.method.userPanelGetAudiobookDetails;
2217
+ var userPanelGetAudiobookDetailsDownloadURLs = PublicApiService.method.userPanelGetAudiobookDetailsDownloadURLs;
2218
+ var userPanelGetFileDetails = PublicApiService.method.userPanelGetFileDetails;
2219
+ var userPanelGetTicketDetails = PublicApiService.method.userPanelGetTicketDetails;
2220
+ var pushSendDeviceToken = PublicApiService.method.pushSendDeviceToken;
2221
+ var pushEvent = PublicApiService.method.pushEvent;
2222
+ var shouldShopProducts = PublicApiService.method.shouldShopProducts;
2223
+ var getShopProducts = PublicApiService.method.getShopProducts;
2224
+ var didBuyProduct = PublicApiService.method.didBuyProduct;
2225
+ var getNotificationSettings = PublicApiService.method.getNotificationSettings;
2226
+ var getNotificationSettingsDetails = PublicApiService.method.getNotificationSettingsDetails;
2227
+ var updateGlobalNotificationSettings = PublicApiService.method.updateGlobalNotificationSettings;
2228
+ var updateNotificationSettings = PublicApiService.method.updateNotificationSettings;
2229
+ var getAvailableCountForProduct = PublicApiService.method.getAvailableCountForProduct;
2230
+ var isOneClickPaymentAvailable = PublicApiService.method.isOneClickPaymentAvailable;
2231
+ var getPreOrderDetails = PublicApiService.method.getPreOrderDetails;
2232
+ var applePayValidateMerchant = PublicApiService.method.applePayValidateMerchant;
2233
+ var authorizeOneClickPayment = PublicApiService.method.authorizeOneClickPayment;
2234
+ var notifyUserAboutProductAvailability = PublicApiService.method.notifyUserAboutProductAvailability;
2235
+
2236
+ // src/gen/proto/dashboard/v1/notifications-NotificationsService_connectquery.ts
2237
+ var notifications_NotificationsService_connectquery_exports = {};
2238
+ __export(notifications_NotificationsService_connectquery_exports, {
2239
+ createNotificationGroup: () => createNotificationGroup,
2240
+ createNotificationGroupUser: () => createNotificationGroupUser,
2241
+ createNotificationMessage: () => createNotificationMessage,
2242
+ createNotificationMessageJob: () => createNotificationMessageJob,
2243
+ createNotificationSetting: () => createNotificationSetting,
2244
+ createNotificationUser: () => createNotificationUser,
2245
+ deleteNotificationGroup: () => deleteNotificationGroup,
2246
+ deleteNotificationGroupUser: () => deleteNotificationGroupUser,
2247
+ deleteNotificationMessage: () => deleteNotificationMessage,
2248
+ deleteNotificationMessageJob: () => deleteNotificationMessageJob,
2249
+ deleteNotificationSetting: () => deleteNotificationSetting,
2250
+ deleteNotificationUser: () => deleteNotificationUser,
2251
+ getNotificationUserSettings: () => getNotificationUserSettings,
2252
+ getSentNotificationMessages: () => getSentNotificationMessages,
2253
+ getUserGroups: () => getUserGroups,
2254
+ readNotificationGroupUsers: () => readNotificationGroupUsers,
2255
+ readNotificationGroups: () => readNotificationGroups,
2256
+ readNotificationMessageJobs: () => readNotificationMessageJobs,
2257
+ readNotificationMessages: () => readNotificationMessages,
2258
+ readNotificationProducts: () => readNotificationProducts,
2259
+ readNotificationSetting: () => readNotificationSetting,
2260
+ readNotificationUsers: () => readNotificationUsers,
2261
+ updateNotificationGroup: () => updateNotificationGroup,
2262
+ updateNotificationGroupUser: () => updateNotificationGroupUser,
2263
+ updateNotificationMessage: () => updateNotificationMessage,
2264
+ updateNotificationMessageJob: () => updateNotificationMessageJob,
2265
+ updateNotificationSetting: () => updateNotificationSetting,
2266
+ updateNotificationUser: () => updateNotificationUser,
2267
+ updateUserGroups: () => updateUserGroups,
2268
+ verifyUserEmail: () => verifyUserEmail
2269
+ });
2270
+
2271
+ // src/gen/proto/dashboard/v1/notifications_pb.ts
2272
+ var import_codegenv27 = require("@bufbuild/protobuf/codegenv2");
2273
+ var import_wkt5 = require("@bufbuild/protobuf/wkt");
2274
+
2275
+ // src/gen/proto/dashboard/v1/product_pb.ts
2276
+ var import_codegenv26 = require("@bufbuild/protobuf/codegenv2");
2277
+ var import_wkt4 = require("@bufbuild/protobuf/wkt");
2278
+ var file_dashboard_v1_product = /* @__PURE__ */ (0, import_codegenv26.fileDesc)("ChpkYXNoYm9hcmQvdjEvcHJvZHVjdC5wcm90bxIUZGFzaGJvYXJkLnByb2R1Y3QudjEiNwogRXhjaGFuZ2VQcm9kdWN0SURzVG9OYW1lc1JlcXVlc3QSEwoLcHJvZHVjdF9pZHMYASADKAkiugEKIUV4Y2hhbmdlUHJvZHVjdElEc1RvTmFtZXNSZXNwb25zZRJgCg1wcm9kdWN0X25hbWVzGAEgAygLMkkuZGFzaGJvYXJkLnByb2R1Y3QudjEuRXhjaGFuZ2VQcm9kdWN0SURzVG9OYW1lc1Jlc3BvbnNlLlByb2R1Y3ROYW1lc0VudHJ5GjMKEVByb2R1Y3ROYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEieQobR2V0RmlsZUFjY2Vzc01lbWJlcnNSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSEwoGc2VhcmNoGAIgASgJSACIAQESFwoKdmFyaWFudF9pZBgDIAEoCUgBiAEBQgkKB19zZWFyY2hCDQoLX3ZhcmlhbnRfaWQi0QEKHEdldEZpbGVBY2Nlc3NNZW1iZXJzUmVzcG9uc2USSQoHbWVtYmVycxgBIAMoCzI4LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldEZpbGVBY2Nlc3NNZW1iZXJzUmVzcG9uc2UuVmFsdWUaZgoFVmFsdWUSCgoCaWQYASABKAkSDQoFZW1haWwYAiABKAkSMwoKY3JlYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfY3JlYXRlZF9hdCJkChdHaXZlQWNjZXNzVG9GaWxlUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJEhcKCnZhcmlhbnRfaWQYAiABKAlIAIgBARINCgVlbWFpbBgDIAEoCUINCgtfdmFyaWFudF9pZCIrChhHaXZlQWNjZXNzVG9GaWxlUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCInChlSZW1vdmVBY2Nlc3NUb0ZpbGVSZXF1ZXN0EgoKAmlkGAEgASgJIi0KGlJlbW92ZUFjY2Vzc1RvRmlsZVJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiZAofU2VuZFRlc3RFbWFpbFdpdGhNZXNzYWdlUmVxdWVzdBINCgVlbWFpbBgBIAEoCRIUCgxodG1sX21lc3NhZ2UYAiABKAkSEgoFdGl0bGUYAyABKAlIAIgBAUIICgZfdGl0bGUiLwoZR2V0UHJvZHVjdFZhcmlhbnRzUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJIpkBChpHZXRQcm9kdWN0VmFyaWFudHNSZXNwb25zZRJQCgh2YXJpYW50cxgBIAMoCzI+LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RWYXJpYW50c1Jlc3BvbnNlLlNpbmdsZVZhcmlhbnQaKQoNU2luZ2xlVmFyaWFudBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJIoMBCihVcGRhdGVQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIUCgxodG1sX21lc3NhZ2UYAyABKAkSEgoFdGl0bGUYBCABKAlIAIgBAUIICgZfdGl0bGUiOwolR2V0UHJvZHVjdEFmdGVyUHVyY2hhc2VNZXNzYWdlUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJIrsCCiZHZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXNwb25zZRJXCgdzdWNjZXNzGAEgASgLMkQuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEFmdGVyUHVyY2hhc2VNZXNzYWdlUmVzcG9uc2UuU3VjY2Vzc0gAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGnUKB1N1Y2Nlc3MSFAoHbWVzc2FnZRgBIAEoCUgAiAEBEhkKDGh0bWxfbWVzc2FnZRgCIAEoCUgBiAEBEhIKBXRpdGxlGAMgASgJSAKIAQFCCgoIX21lc3NhZ2VCDwoNX2h0bWxfbWVzc2FnZUIICgZfdGl0bGVCCAoGcmVzdWx0IjMKHVB1Ymxpc2hQcm9kdWN0SWZOZWVkZWRSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkiZQorVXBkYXRlUHJvZHVjdFNlbmRUaWNrZXRBZnRlclB1cmNoYXNlUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJEiIKGnNlbmRfdGlja2V0X2FmdGVyX3B1cmNoYXNlGAIgASgIIlYKKlVwZGF0ZVByb2R1Y3RBdWRpb2Jvb2tBZnRlclB1cmNoYXNlUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJEhQKDGF1ZGlvYm9va19pZBgCIAEoCSI+CihHZXRQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAki+QEKKUdldFByb2R1Y3RTZW5kVGlja2V0QWZ0ZXJQdXJjaGFzZVJlc3BvbnNlEloKB3N1Y2Nlc3MYASABKAsyRy5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXNwb25zZS5TdWNjZXNzSAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAaLQoHU3VjY2VzcxIiChpzZW5kX3RpY2tldF9hZnRlcl9wdXJjaGFzZRgBIAEoCEIICgZyZXN1bHQiPQonR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkinwIKKEdldFByb2R1Y3RBdWRpb2Jvb2tBZnRlclB1cmNoYXNlUmVzcG9uc2USWQoHc3VjY2VzcxgBIAEoCzJGLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RBdWRpb2Jvb2tBZnRlclB1cmNoYXNlUmVzcG9uc2UuU3VjY2Vzc0gAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGlUKB1N1Y2Nlc3MSFAoMYXVkaW9ib29rX2lkGAEgASgJEhcKD2F1ZGlvYm9va190aXRsZRgCIAEoCRIbChNhdWRpb2Jvb2tfaW1hZ2VfdXJsGAMgASgJQggKBnJlc3VsdCI3ChVTZWFyY2hQcm9kdWN0c1JlcXVlc3QSEwoGc2VhcmNoGAEgASgJSACIAQFCCQoHX3NlYXJjaCLMAgoWU2VhcmNoUHJvZHVjdHNSZXNwb25zZRJGCgdzdWNjZXNzGAEgASgLMjMuZGFzaGJvYXJkLnByb2R1Y3QudjEuU2VhcmNoUHJvZHVjdHNSZXNwb25zZS5SZXN1bHRIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIABpPCg1TaW5nbGVQcm9kdWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSFgoJaW1hZ2VfdXJsGAMgASgJSACIAQFCDAoKX2ltYWdlX3VybBpWCgZSZXN1bHQSTAoIcHJvZHVjdHMYASADKAsyOi5kYXNoYm9hcmQucHJvZHVjdC52MS5TZWFyY2hQcm9kdWN0c1Jlc3BvbnNlLlNpbmdsZVByb2R1Y3RCCAoGcmVzdWx0IjUKH0dldFByb2R1Y3RCb3VnaHRBcnRpY2xlc1JlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSJgCiBHZXRQcm9kdWN0Qm91Z2h0QXJ0aWNsZXNSZXNwb25zZRI8CghhcnRpY2xlcxgBIAMoCzIqLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RCb3VnaHRBcnRpY2xlIogBChRQcm9kdWN0Qm91Z2h0QXJ0aWNsZRIKCgJpZBgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEhQKB2NvbnRlbnQYAyABKAlIAIgBARIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfY29udGVudCJgCiFVcGRhdGVQcm9kdWN0Qm91Z2h0QXJ0aWNsZVJlcXVlc3QSOwoHYXJ0aWNsZRgBIAEoCzIqLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RCb3VnaHRBcnRpY2xlIicKEUdldFByb2R1Y3RSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkiiwEKEkdldFByb2R1Y3RSZXNwb25zZRIyCgdwcm9kdWN0GAEgASgLMh8uZGFzaGJvYXJkLnByb2R1Y3QudjEuUHJvZHVjdFYySAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0InIKHENyZWF0ZU9yVXBkYXRlUHJvZHVjdFJlcXVlc3QSMAoHcHJvZHVjdBgBIAEoCzIfLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RWMhIgChhpc19kZXNjcmlwdGlvbl9kaWZmZXJlbnQYAiABKAgiTQoeVXBkYXRlUHJvZHVjdFVuaXF1ZVNsdWdSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSFwoPbmV3X3VuaXF1ZV9zbHVnGAIgASgJIpkJCglQcm9kdWN0VjISDwoCaWQYASABKAlIAIgBARITCgt1bmlxdWVfc2x1ZxgCIAEoCRISCgpwcm9qZWN0X2lkGAMgASgJEjYKBnN0YXR1cxgEIAEoDjImLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RWMi5TdGF0dXMSGQoMaXNfcmVjdXJyaW5nGAUgASgISAGIAQESNwoJcmVjdXJyaW5nGAYgASgLMh8uZGFzaGJvYXJkLnByb2R1Y3QudjEuUmVjdXJyaW5nSAKIAQESDAoEbmFtZRgHIAEoCRIYCgtkZXNjcmlwdGlvbhgIIAEoCUgDiAEBEh0KEGh0bWxfZGVzY3JpcHRpb24YCSABKAlIBIgBARIeChFzaG9ydF9kZXNjcmlwdGlvbhgKIAEoCUgFiAEBEhkKDHByaWNlX2Ftb3VudBgLIAEoBUgGiAEBEhsKDnByaWNlX2N1cnJlbmN5GAwgASgJSAeIAQESEAoDdGF4GA0gASgCSAiIAQESHwoSYXZhaWxhYmxlX3F1YW50aXR5GA4gASgFSAmIAQESPwoIZmVhdHVyZXMYDyADKAsyLS5kYXNoYm9hcmQucHJvZHVjdC52MS5Qcm9kdWN0VjIuRmVhdHVyZXNFbnRyeRIOCgZpbWFnZXMYECADKAkSHAoPdGh1bWJuYWlsX2ltYWdlGBEgASgJSAqIAQESFwoKbWFpbl9pbWFnZRgSIAEoCUgLiAEBEi8KCHZhcmlhbnRzGBMgAygLMh0uZGFzaGJvYXJkLnByb2R1Y3QudjEuVmFyaWFudBInChpzZW5kX3RpY2tldF9hZnRlcl9wdXJjaGFzZRgUIAEoCEgMiAEBEicKGmlzX3Byb2R1Y3RfdmlzaWJsZV9vbl9saXN0GBUgASgISA2IAQESGwoOaXNfZGVsaXZlcmFibGUYGCABKAhIDogBARISCgpjcmVhdGVkX2F0GBkgASgDEhIKCnVwZGF0ZWRfYXQYGiABKAMSFwoKZGVsZXRlZF9hdBgbIAEoA0gPiAEBGi8KDUZlYXR1cmVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIzCgZTdGF0dXMSCQoFRFJBRlQQABIPCgtVTlBVQkxJU0hFRBABEg0KCVBVQkxJU0hFRBACQgUKA19pZEIPCg1faXNfcmVjdXJyaW5nQgwKCl9yZWN1cnJpbmdCDgoMX2Rlc2NyaXB0aW9uQhMKEV9odG1sX2Rlc2NyaXB0aW9uQhQKEl9zaG9ydF9kZXNjcmlwdGlvbkIPCg1fcHJpY2VfYW1vdW50QhEKD19wcmljZV9jdXJyZW5jeUIGCgRfdGF4QhUKE19hdmFpbGFibGVfcXVhbnRpdHlCEgoQX3RodW1ibmFpbF9pbWFnZUINCgtfbWFpbl9pbWFnZUIdChtfc2VuZF90aWNrZXRfYWZ0ZXJfcHVyY2hhc2VCHQobX2lzX3Byb2R1Y3RfdmlzaWJsZV9vbl9saXN0QhEKD19pc19kZWxpdmVyYWJsZUINCgtfZGVsZXRlZF9hdCK7AwoJUmVjdXJyaW5nEjoKDWJpbGxpbmdQZXJpb2QYASABKA4yIy5kYXNoYm9hcmQucHJvZHVjdC52MS5CaWxsaW5nUGVyaW9kEhcKCnRyaWFsX2RheXMYAiABKAVIAIgBARIfChJudW1iZXJfb2ZfcGF5bWVudHMYAyABKAVIAYgBARIxCiRjaGFuZ2VfYW1vdW50X2Zvcl9jdXJyZW50U3Vic2NyaWJlcnMYBCABKAhIAogBARI0CidyZW1vdmVfYWNjZXNzX2Zvcl9jYW5jZWxsZWRfc3Vic2NyaWJlcnMYBSABKAhIA4gBARIuCiFzaG91bGRfc2VuZF90cmlhbF9wZXJpb2RfcmVtaW5kZXIYBiABKAhIBIgBAUINCgtfdHJpYWxfZGF5c0IVChNfbnVtYmVyX29mX3BheW1lbnRzQicKJV9jaGFuZ2VfYW1vdW50X2Zvcl9jdXJyZW50U3Vic2NyaWJlcnNCKgooX3JlbW92ZV9hY2Nlc3NfZm9yX2NhbmNlbGxlZF9zdWJzY3JpYmVyc0IkCiJfc2hvdWxkX3NlbmRfdHJpYWxfcGVyaW9kX3JlbWluZGVyIr4BCg9WYXJpYW50RGlzY291bnQSOAoEdHlwZRgBIAEoDjIqLmRhc2hib2FyZC5wcm9kdWN0LnYxLlZhcmlhbnREaXNjb3VudC5UeXBlEg4KBmFtb3VudBgCIAEoBRIxCghlbmRfZGF0ZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBASIhCgRUeXBlEgkKBUZJWEVEEAASDgoKUEVSQ0VOVEFHRRABQgsKCV9lbmRfZGF0ZSLLBAoHVmFyaWFudBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESFgoJaW1hZ2VfdXJsGAQgASgJSAGIAQESFAoMcHJpY2VfYW1vdW50GAUgASgFEhYKDnByaWNlX2N1cnJlbmN5GAYgASgJEhAKA3RheBgHIAEoBUgCiAEBEh8KEmF2YWlsYWJsZV9xdWFudGl0eRgIIAEoBUgDiAEBEjcKCXJlY3VycmluZxgJIAEoCzIfLmRhc2hib2FyZC5wcm9kdWN0LnYxLlJlY3VycmluZ0gEiAEBEhsKDmlzX2RlbGl2ZXJhYmxlGAogASgISAWIAQESIQoUbG93ZXN0X3ByaWNlXzMwX2RheXMYCyABKAVIBogBARI8CghkaXNjb3VudBgMIAEoCzIlLmRhc2hib2FyZC5wcm9kdWN0LnYxLlZhcmlhbnREaXNjb3VudEgHiAEBEj4KFWVzdGltYXRlZF9kZWxpdmVyeV9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBICIgBAUIOCgxfZGVzY3JpcHRpb25CDAoKX2ltYWdlX3VybEIGCgRfdGF4QhUKE19hdmFpbGFibGVfcXVhbnRpdHlCDAoKX3JlY3VycmluZ0IRCg9faXNfZGVsaXZlcmFibGVCFwoVX2xvd2VzdF9wcmljZV8zMF9kYXlzQgsKCV9kaXNjb3VudEIYChZfZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0IngKHUNyZWF0ZU9yVXBkYXRlUHJvZHVjdFJlc3BvbnNlEhQKCnByb2R1Y3RfaWQYASABKAlIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQifAoMQm9vbFJlc3BvbnNlEikKB3N1Y2Nlc3MYASABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQqvQEKDUJpbGxpbmdQZXJpb2QSGAoUQklMTElOR19QRVJJT0RfREFJTFkQABIZChVCSUxMSU5HX1BFUklPRF9XRUVLTFkQARIaChZCSUxMSU5HX1BFUklPRF9NT05USExZEAISHAoYQklMTElOR19QRVJJT0RfUVVBUlRFUkxZEAMSIAocQklMTElOR19QRVJJT0RfU0VNSV9BTk5VQUxMWRAEEhsKF0JJTExJTkdfUEVSSU9EX0FOTlVBTExZEAUqlQIKDkZhaWx1cmVNZXNzYWdlEhsKF0ZBSUxVUkVfTUVTU0FHRV9VTktOT1dOEAASJQohRkFJTFVSRV9NRVNTQUdFX1BST0pFQ1RfTk9UX0ZPVU5EEAESJQohRkFJTFVSRV9NRVNTQUdFX1BST0RVQ1RfTk9UX0ZPVU5EEAISJgoiRkFJTFVSRV9NRVNTQUdFX0lOVkFMSURfUFJPRFVDVF9JRBADEiYKIkZBSUxVUkVfTUVTU0FHRV9TTFVHX0FMUkVBRFlfVEFLRU4QBBIpCiVGQUlMVVJFX01FU1NBR0VfQ0FOTk9UX0NSRUFURV9QUk9EVUNUEAUSHQoZRkFJTFVSRV9NRVNTQUdFX05PX0FDQ0VTUxAGMrUUCg1Qcm9kdWN0Um91dGVyEoABChVDcmVhdGVPclVwZGF0ZVByb2R1Y3QSMi5kYXNoYm9hcmQucHJvZHVjdC52MS5DcmVhdGVPclVwZGF0ZVByb2R1Y3RSZXF1ZXN0GjMuZGFzaGJvYXJkLnByb2R1Y3QudjEuQ3JlYXRlT3JVcGRhdGVQcm9kdWN0UmVzcG9uc2UScwoXVXBkYXRlUHJvZHVjdFVuaXF1ZVNsdWcSNC5kYXNoYm9hcmQucHJvZHVjdC52MS5VcGRhdGVQcm9kdWN0VW5pcXVlU2x1Z1JlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USXwoKR2V0UHJvZHVjdBInLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RSZXF1ZXN0GiguZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFJlc3BvbnNlEqQBCiFHZXRQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2USPi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXF1ZXN0Gj8uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFNlbmRUaWNrZXRBZnRlclB1cmNoYXNlUmVzcG9uc2USoQEKIEdldFByb2R1Y3RBdWRpb2Jvb2tBZnRlclB1cmNoYXNlEj0uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXF1ZXN0Gj4uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXNwb25zZRKNAQokVXBkYXRlUHJvZHVjdFNlbmRUaWNrZXRBZnRlclB1cmNoYXNlEkEuZGFzaGJvYXJkLnByb2R1Y3QudjEuVXBkYXRlUHJvZHVjdFNlbmRUaWNrZXRBZnRlclB1cmNoYXNlUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRKLAQojVXBkYXRlUHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2USQC5kYXNoYm9hcmQucHJvZHVjdC52MS5VcGRhdGVQcm9kdWN0QXVkaW9ib29rQWZ0ZXJQdXJjaGFzZVJlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2UScQoWUHVibGlzaFByb2R1Y3RJZk5lZWRlZBIzLmRhc2hib2FyZC5wcm9kdWN0LnYxLlB1Ymxpc2hQcm9kdWN0SWZOZWVkZWRSZXF1ZXN0GiIuZGFzaGJvYXJkLnByb2R1Y3QudjEuQm9vbFJlc3BvbnNlEpsBCh5HZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2USOy5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXF1ZXN0GjwuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEFmdGVyUHVyY2hhc2VNZXNzYWdlUmVzcG9uc2UShwEKIVVwZGF0ZVByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZRI+LmRhc2hib2FyZC5wcm9kdWN0LnYxLlVwZGF0ZVByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZVJlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USdwoSR2V0UHJvZHVjdFZhcmlhbnRzEi8uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFZhcmlhbnRzUmVxdWVzdBowLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RWYXJpYW50c1Jlc3BvbnNlEnUKGFNlbmRUZXN0RW1haWxXaXRoTWVzc2FnZRI1LmRhc2hib2FyZC5wcm9kdWN0LnYxLlNlbmRUZXN0RW1haWxXaXRoTWVzc2FnZVJlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USawoOU2VhcmNoUHJvZHVjdHMSKy5kYXNoYm9hcmQucHJvZHVjdC52MS5TZWFyY2hQcm9kdWN0c1JlcXVlc3QaLC5kYXNoYm9hcmQucHJvZHVjdC52MS5TZWFyY2hQcm9kdWN0c1Jlc3BvbnNlEowBChlFeGNoYW5nZVByb2R1Y3RJRHNUb05hbWVzEjYuZGFzaGJvYXJkLnByb2R1Y3QudjEuRXhjaGFuZ2VQcm9kdWN0SURzVG9OYW1lc1JlcXVlc3QaNy5kYXNoYm9hcmQucHJvZHVjdC52MS5FeGNoYW5nZVByb2R1Y3RJRHNUb05hbWVzUmVzcG9uc2USiQEKGEdldFByb2R1Y3RCb3VnaHRBcnRpY2xlcxI1LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RCb3VnaHRBcnRpY2xlc1JlcXVlc3QaNi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0Qm91Z2h0QXJ0aWNsZXNSZXNwb25zZRJ5ChpVcGRhdGVQcm9kdWN0Qm91Z2h0QXJ0aWNsZRI3LmRhc2hib2FyZC5wcm9kdWN0LnYxLlVwZGF0ZVByb2R1Y3RCb3VnaHRBcnRpY2xlUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJpChdBZGRQcm9kdWN0Qm91Z2h0QXJ0aWNsZRIqLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RCb3VnaHRBcnRpY2xlGiIuZGFzaGJvYXJkLnByb2R1Y3QudjEuQm9vbFJlc3BvbnNlEn0KFEdldEZpbGVBY2Nlc3NNZW1iZXJzEjEuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0RmlsZUFjY2Vzc01lbWJlcnNSZXF1ZXN0GjIuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0RmlsZUFjY2Vzc01lbWJlcnNSZXNwb25zZRJxChBHaXZlQWNjZXNzVG9GaWxlEi0uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2l2ZUFjY2Vzc1RvRmlsZVJlcXVlc3QaLi5kYXNoYm9hcmQucHJvZHVjdC52MS5HaXZlQWNjZXNzVG9GaWxlUmVzcG9uc2USdwoSUmVtb3ZlQWNjZXNzVG9GaWxlEi8uZGFzaGJvYXJkLnByb2R1Y3QudjEuUmVtb3ZlQWNjZXNzVG9GaWxlUmVxdWVzdBowLmRhc2hib2FyZC5wcm9kdWN0LnYxLlJlbW92ZUFjY2Vzc1RvRmlsZVJlc3BvbnNlYgZwcm90bzM", [import_wkt4.file_google_protobuf_empty, import_wkt4.file_google_protobuf_timestamp]);
2279
+
2280
+ // src/gen/proto/dashboard/v1/notifications_pb.ts
2281
+ var file_dashboard_v1_notifications = /* @__PURE__ */ (0, import_codegenv27.fileDesc)("CiBkYXNoYm9hcmQvdjEvbm90aWZpY2F0aW9ucy5wcm90bxIaZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEiYAoWVmVyaWZ5VXNlckVtYWlsUmVxdWVzdBISCgVlbWFpbBgBIAEoCUgAiAEBEhEKBGNvZGUYAiABKAlIAYgBARIMCgRzbHVnGAMgASgJQggKBl9lbWFpbEIHCgVfY29kZSJ/ChdWZXJpZnlVc2VyRW1haWxSZXNwb25zZRIPCgJvaxgBIAEoCEgAiAEBEhkKDGFjY2Vzc190b2tlbhgCIAEoCUgBiAEBEhQKB3VzZXJfaWQYAyABKAlIAogBAUIFCgNfb2tCDwoNX2FjY2Vzc190b2tlbkIKCghfdXNlcl9pZCJQChRHZXRVc2VyR3JvdXBzUmVxdWVzdBIMCgRzbHVnGAEgASgJEhkKDGFjY2Vzc190b2tlbhgCIAEoCUgAiAEBQg8KDV9hY2Nlc3NfdG9rZW4iiQIKFUdldFVzZXJHcm91cHNSZXNwb25zZRJHCgZncm91cHMYASADKAsyNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXRVc2VyR3JvdXBzUmVzcG9uc2UuR3JvdXAapgEKBUdyb3VwEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARINCgVpc19vbhgEIAEoCBI8Cglob3dfb2Z0ZW4YBSABKA4yJC5jb21tb24udjEuTm90aWZpY2F0aW9uR3JvdXBIb3dPZnRlbkgBiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfaG93X29mdGVuIncKF1VwZGF0ZVVzZXJHcm91cHNSZXF1ZXN0EgwKBHNsdWcYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIRCglncm91cF9pZHMYAyADKAkSGQoMYWNjZXNzX3Rva2VuGAQgASgJSACIAQFCDwoNX2FjY2Vzc190b2tlbiJvCiJHZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NSZXF1ZXN0EgwKBHNsdWcYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIZCgxhY2Nlc3NfdG9rZW4YAyABKAlIAIgBAUIPCg1fYWNjZXNzX3Rva2VuIowECiNHZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0Tm90aWZpY2F0aW9uVXNlclNldHRpbmdzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAawAIKBlJlc3VsdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCRIZChFzdWJzY3JpcHRpb25fc2x1ZxgCIAEoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYAyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYBCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiQKHGVtYWlsX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYBiABKAgSIgoac21zX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYByABKAgSJQodbW9iaWxlX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYCCABKAgSHgoWaGFzX3VzZXJfaW5zdGFsbGVkX2FwcBgJIAEoCEIICgZyZXN1bHQiIgogQ3JlYXRlTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QiIAoeUmVhZE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0IskBCiBVcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCRIZChFzdWJzY3JpcHRpb25fc2x1ZxgCIAEoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYAyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYBCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIIkMKIERlbGV0ZU5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0Eh8KF25vdGlmaWNhdGlvbl9zZXR0aW5nX2lkGAEgASgJIvMCCh9SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlElUKB3N1Y2Nlc3MYASABKAsyQi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGq8BCgZSZXN1bHQSHwoXbm90aWZpY2F0aW9uX3NldHRpbmdfaWQYASABKAkSGQoRc3Vic2NyaXB0aW9uX3NsdWcYAiABKAkSIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAMgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAQgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgFIAEoCEIICgZyZXN1bHQi5AEKG05vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZRJRCgdzdWNjZXNzGAEgASgLMj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGikKBlJlc3VsdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCUIICgZyZXN1bHQiygEKHkNyZWF0ZU5vdGlmaWNhdGlvbkdyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESPAoJaG93X29mdGVuGAMgASgOMiQuY29tbW9uLnYxLk5vdGlmaWNhdGlvbkdyb3VwSG93T2Z0ZW5IAYgBARIWCglpc19wdWJsaWMYBCABKAhIAogBAUIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbkIMCgpfaXNfcHVibGljIloKHVJlYWROb3RpZmljYXRpb25Hcm91cHNSZXF1ZXN0EhEKCWdyb3VwX2lkcxgBIAMoCRIXCgpncm91cF9uYW1lGAIgASgJSACIAQFCDQoLX2dyb3VwX25hbWUi6QEKHlVwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwUmVxdWVzdBIdChVub3RpZmljYXRpb25fZ3JvdXBfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjwKCWhvd19vZnRlbhgEIAEoDjIkLmNvbW1vbi52MS5Ob3RpZmljYXRpb25Hcm91cEhvd09mdGVuSAGIAQESFgoJaXNfcHVibGljGAUgASgISAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgwKCl9ob3dfb2Z0ZW5CDAoKX2lzX3B1YmxpYyI/Ch5EZWxldGVOb3RpZmljYXRpb25Hcm91cFJlcXVlc3QSHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJIuoDCh5SZWFkTm90aWZpY2F0aW9uR3JvdXBzUmVzcG9uc2USVAoHc3VjY2VzcxgBIAEoCzJBLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Hcm91cHNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABrMAQoFR3JvdXASHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARI8Cglob3dfb2Z0ZW4YBCABKA4yJC5jb21tb24udjEuTm90aWZpY2F0aW9uR3JvdXBIb3dPZnRlbkgBiAEBEg0KBXVzZXJzGAUgASgFEhEKCWlzX3B1YmxpYxgGIAEoCEIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbhpaCgZSZXN1bHQSUAoGZ3JvdXBzGAEgAygLMkAuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3Vwc1Jlc3BvbnNlLkdyb3VwQggKBnJlc3VsdCLeAQoZTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZRJPCgdzdWNjZXNzGAEgASgLMjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABonCgZSZXN1bHQSHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJQggKBnJlc3VsdCKjAgodQ3JlYXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDAoEc2x1ZxgBIAEoCRINCgVlbWFpbBgCIAEoCRIOCgZncm91cHMYAyADKAkSEgoFcGhvbmUYBCABKAlIAIgBARIXCgpmaXJzdF9uYW1lGAUgASgJSAGIAQESFgoJbGFzdF9uYW1lGAYgASgJSAKIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAcgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAggASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgJIAEoCEIICgZfcGhvbmVCDQoLX2ZpcnN0X25hbWVCDAoKX2xhc3RfbmFtZSJYChxSZWFkTm90aWZpY2F0aW9uVXNlcnNSZXF1ZXN0EhAKCHVzZXJfaWRzGAEgAygJEhcKCnVzZXJfZW1haWwYAiABKAlIAIgBAUINCgtfdXNlcl9lbWFpbCKwAgodVXBkYXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDAoEc2x1ZxgBIAEoCRIcChRub3RpZmljYXRpb25fdXNlcl9pZBgCIAEoCRIXCgpmaXJzdF9uYW1lGAMgASgJSACIAQESFgoJbGFzdF9uYW1lGAQgASgJSAGIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAYgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgHIAEoCBIZCgxhY2Nlc3NfdG9rZW4YCCABKAlIAogBAUINCgtfZmlyc3RfbmFtZUIMCgpfbGFzdF9uYW1lQg8KDV9hY2Nlc3NfdG9rZW4iagodRGVsZXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIMCgRzbHVnGAIgASgJEhkKDGFjY2Vzc190b2tlbhgDIAEoCUgAiAEBQg8KDV9hY2Nlc3NfdG9rZW4i+AEKHVJlYWROb3RpZmljYXRpb25Vc2Vyc1Jlc3BvbnNlElMKB3N1Y2Nlc3MYASABKAsyQC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uVXNlcnNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABo5CgZSZXN1bHQSLwoFdXNlcnMYASADKAsyIC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Vc2VyQggKBnJlc3VsdCKpAgoYTm90aWZpY2F0aW9uVXNlclJlc3BvbnNlEk4KB3N1Y2Nlc3MYASABKAsyOy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Vc2VyUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAASGQoMYWNjZXNzX3Rva2VuGAMgASgJSAGIAQESFAoHdXNlcl9pZBgEIAEoCUgCiAEBGiYKBlJlc3VsdBIcChRub3RpZmljYXRpb25fdXNlcl9pZBgBIAEoCUIICgZyZXN1bHRCDwoNX2FjY2Vzc190b2tlbkIKCghfdXNlcl9pZCJhCiJDcmVhdGVOb3RpZmljYXRpb25Hcm91cFVzZXJSZXF1ZXN0Eh0KFW5vdGlmaWNhdGlvbl9ncm91cF9pZBgBIAEoCRIcChRub3RpZmljYXRpb25fdXNlcl9pZBgCIAEoCSI3CiJSZWFkTm90aWZpY2F0aW9uR3JvdXBVc2Vyc1JlcXVlc3RzEhEKCWdyb3VwX2lkcxgBIAMoCSKFAQoiVXBkYXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCRIdChVub3RpZmljYXRpb25fZ3JvdXBfaWQYAiABKAkSHAoUbm90aWZpY2F0aW9uX3VzZXJfaWQYAyABKAkiSAoiRGVsZXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCSKCAgoiUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXNwb25zZRJYCgdzdWNjZXNzGAEgASgLMkUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABo5CgZSZXN1bHQSLwoFdXNlcnMYASADKAsyIC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Vc2VyQggKBnJlc3VsdCLrAQodTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVzcG9uc2USUwoHc3VjY2VzcxgBIAEoCzJALmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbkdyb3VwVXNlclJlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGiwKBlJlc3VsdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCUIICgZyZXN1bHQi7wMKE05vdGlmaWNhdGlvbk1lc3NhZ2USHwoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYASABKAkSRQoGc3RhdHVzGAIgASgOMjUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZVN0YXR1cxIrCgdzZW5kX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgV0aXRsZRgEIAEoCRIVCghzdWJ0aXRsZRgFIAEoCUgAiAEBEhQKB21lc3NhZ2UYBiABKAlIAYgBARIWCglpbWFnZV91cmwYByABKAlIAogBARIOCgZncm91cHMYCCADKAkSEAoIcHJvZHVjdHMYCSADKAkSDQoFdXNlcnMYCiADKAkSIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAsgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAwgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgNIAEoCBIaCg1lcnJvcl9tZXNzYWdlGA4gASgJSAOIAQFCCwoJX3N1YnRpdGxlQgoKCF9tZXNzYWdlQgwKCl9pbWFnZV91cmxCEAoOX2Vycm9yX21lc3NhZ2UirQMKIENyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VSZXF1ZXN0EkUKBnN0YXR1cxgBIAEoDjI1LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VTdGF0dXMSKwoHc2VuZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFdGl0bGUYAyABKAkSFQoIc3VidGl0bGUYBCABKAlIAIgBARIUCgdtZXNzYWdlGAUgASgJSAGIAQESFgoJaW1hZ2VfdXJsGAYgASgJSAKIAQESDgoGZ3JvdXBzGAcgAygJEhAKCHByb2R1Y3RzGAggAygJEg0KBXVzZXJzGAkgAygJEiMKG21vYmlsZV9ub3RpZmljYXRpb25fZW5hYmxlZBgKIAEoCBIiChplbWFpbF9ub3RpZmljYXRpb25fZW5hYmxlZBgLIAEoCBIgChhzbXNfbm90aWZpY2F0aW9uX2VuYWJsZWQYDCABKAhCCwoJX3N1YnRpdGxlQgoKCF9tZXNzYWdlQgwKCl9pbWFnZV91cmwipAIKIkdldFNlbnROb3RpZmljYXRpb25NZXNzYWdlc1JlcXVlc3QSJAoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYASABKAlIAIgBARIzCgpzdGFydF90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEjEKCGVuZF90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBEiAKE2luY2x1ZGVfZXhwb3J0X2RhdGEYBCABKAhIA4gBAUIaChhfbm90aWZpY2F0aW9uX21lc3NhZ2VfaWRCDQoLX3N0YXJ0X3RpbWVCCwoJX2VuZF90aW1lQhYKFF9pbmNsdWRlX2V4cG9ydF9kYXRhIuEDCiNHZXRTZW50Tm90aWZpY2F0aW9uTWVzc2FnZXNSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaKAoYTm90aWZpY2F0aW9uTWVzc2FnZVN0YXRzEgwKBHNlbnQYASABKAUa6wEKBlJlc3VsdBJOChVub3RpZmljYXRpb25fbWVzc2FnZXMYASADKAsyLy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlEmcKBXN0YXRzGAIgASgLMlguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UuTm90aWZpY2F0aW9uTWVzc2FnZVN0YXRzEhgKC2V4cG9ydF9kYXRhGAMgASgMSACIAQFCDgoMX2V4cG9ydF9kYXRhQggKBnJlc3VsdCJjCh9SZWFkTm90aWZpY2F0aW9uTWVzc2FnZXNSZXF1ZXN0EiQKF25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkGAEgASgJSACIAQFCGgoYX25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkIvwDCiBVcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgBIAEoCRJFCgZzdGF0dXMYAiABKA4yNS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlU3RhdHVzEisKB3NlbmRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRpdGxlGAQgASgJEhUKCHN1YnRpdGxlGAUgASgJSACIAQESFAoHbWVzc2FnZRgGIAEoCUgBiAEBEhYKCWltYWdlX3VybBgHIAEoCUgCiAEBEg4KBmdyb3VwcxgIIAMoCRIQCghwcm9kdWN0cxgJIAMoCRINCgV1c2VycxgKIAMoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYCyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYDCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGA0gASgIEhoKDWVycm9yX21lc3NhZ2UYDiABKAlIA4gBAUILCglfc3VidGl0bGVCCgoIX21lc3NhZ2VCDAoKX2ltYWdlX3VybEIQCg5fZXJyb3JfbWVzc2FnZSJDCiBEZWxldGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgBIAEoCSKdAgogUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2USVgoHc3VjY2VzcxgBIAEoCzJDLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlc1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGlgKBlJlc3VsdBJOChVub3RpZmljYXRpb25fbWVzc2FnZXMYASADKAsyLy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlQggKBnJlc3VsdCLkAQobTm90aWZpY2F0aW9uTWVzc2FnZVJlc3BvbnNlElEKB3N1Y2Nlc3MYASABKAsyPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaKQoGUmVzdWx0Eh8KF25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkGAEgASgJQggKBnJlc3VsdCKSAgojQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QSSAoGc3RhdHVzGAEgASgOMjguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlN0YXR1cxIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgtjdXN0b21lcl9pZBgDIAEoCRIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgEIAEoCRIQCghwcmlvcml0eRgFIAMoCRIaCg1lcnJvcl9tZXNzYWdlGAYgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UibgoiUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JzUmVxdWVzdBIoChtub3RpZmljYXRpb25fbWVzc2FnZV9qb2JfaWQYASABKAlIAIgBAUIeChxfbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkIu8BCiNVcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlSm9iUmVxdWVzdBIjChtub3RpZmljYXRpb25fbWVzc2FnZV9qb2JfaWQYASABKAkSSAoGc3RhdHVzGAIgASgOMjguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlN0YXR1cxIrCgdzZW50X2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaCg1lcnJvcl9tZXNzYWdlGAQgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UiSgojRGVsZXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QSIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJIvwECiNSZWFkTm90aWZpY2F0aW9uTWVzc2FnZUpvYnNSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaqgIKFk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2ISIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJEkgKBnN0YXR1cxgCIAEoDjI4LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JTdGF0dXMSKwoHc2VudF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLY3VzdG9tZXJfaWQYBCABKAkSHwoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYBSABKAkSEAoIcHJpb3JpdHkYBiADKAkSGgoNZXJyb3JfbWVzc2FnZRgHIAEoCUgAiAEBQhAKDl9lcnJvcl9tZXNzYWdlGoMBCgZSZXN1bHQSeQoZbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9icxgBIAMoCzJWLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlSm9ic1Jlc3BvbnNlLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JCCAoGcmVzdWx0Iu4BCh5Ob3RpZmljYXRpb25NZXNzYWdlSm9iUmVzcG9uc2USVAoHc3VjY2VzcxgBIAEoCzJBLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABotCgZSZXN1bHQSIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJQggKBnJlc3VsdCLQAgoEVXNlchIcChRub3RpZmljYXRpb25fdXNlcl9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIXCgpmaXJzdF9uYW1lGAMgASgJSACIAQESFgoJbGFzdF9uYW1lGAQgASgJSAGIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAYgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgHIAEoCBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIdChBpc19hcHBfaW5zdGFsbGVkGAkgASgISAKIAQFCDQoLX2ZpcnN0X25hbWVCDAoKX2xhc3RfbmFtZUITChFfaXNfYXBwX2luc3RhbGxlZCI2Ch9SZWFkTm90aWZpY2F0aW9uUHJvZHVjdHNSZXF1ZXN0EhMKC3Byb2R1Y3RfaWRzGAEgAygJKlkKGU5vdGlmaWNhdGlvbk1lc3NhZ2VTdGF0dXMSCQoFRFJBRlQQABILCgdQTEFOTkVEEAESDwoLSU5fUFJPR1JFU1MQAhIICgRTRU5UEAMSCQoFRVJST1IQBCrOAQocTm90aWZpY2F0aW9uTWVzc2FnZUpvYlN0YXR1cxIoCiROT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfU1RBVFVTX1RPRE8QABIvCitOT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfU1RBVFVTX0lOX1BST0dSRVNTEAESKAokTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX1NUQVRVU19TRU5UEAISKQolTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX1NUQVRVU19FUlJPUhADKrcOCg5GYWlsdXJlTWVzc2FnZRIbChdGQUlMVVJFX01FU1NBR0VfVU5LTk9XThAAEiUKIUZBSUxVUkVfTUVTU0FHRV9QUk9KRUNUX05PVF9GT1VORBABEjIKLkZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fU0VUVElOR19OT1RfRk9VTkQQAhI2CjJGQUlMVVJFX01FU1NBR0VfQ1JFQVRFX05PVElGSUNBVElPTl9TRVRUSU5HX0ZBSUxFRBADEjYKMkZBSUxVUkVfTUVTU0FHRV9VUERBVEVfTk9USUZJQ0FUSU9OX1NFVFRJTkdfRkFJTEVEEAQSNgoyRkFJTFVSRV9NRVNTQUdFX0RFTEVURV9OT1RJRklDQVRJT05fU0VUVElOR19GQUlMRUQQBRIwCixGQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX0dST1VQX05PVF9GT1VORBAGEjEKLUZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fR1JPVVBTX05PVF9GT1VORBAHEjQKMEZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX0dST1VQX0ZBSUxFRBAIEjQKMEZBSUxVUkVfTUVTU0FHRV9VUERBVEVfTk9USUZJQ0FUSU9OX0dST1VQX0ZBSUxFRBAJEjQKMEZBSUxVUkVfTUVTU0FHRV9ERUxFVEVfTk9USUZJQ0FUSU9OX0dST1VQX0ZBSUxFRBAKEi8KK0ZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fVVNFUl9OT1RfRk9VTkQQCxIwCixGQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX1VTRVJTX05PVF9GT1VORBAMEjMKL0ZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX1VTRVJfRkFJTEVEEA0SMwovRkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fVVNFUl9GQUlMRUQQDhIzCi9GQUlMVVJFX01FU1NBR0VfREVMRVRFX05PVElGSUNBVElPTl9VU0VSX0ZBSUxFRBAPEjUKMUZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fR1JPVVBfVVNFUl9OT1RfRk9VTkQQEBI5CjVGQUlMVVJFX01FU1NBR0VfQ1JFQVRFX05PVElGSUNBVElPTl9HUk9VUF9VU0VSX0ZBSUxFRBAREjkKNUZBSUxVUkVfTUVTU0FHRV9VUERBVEVfTk9USUZJQ0FUSU9OX0dST1VQX1VTRVJfRkFJTEVEEBISOQo1RkFJTFVSRV9NRVNTQUdFX0RFTEVURV9OT1RJRklDQVRJT05fR1JPVVBfVVNFUl9GQUlMRUQQExIyCi5GQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX01FU1NBR0VfTk9UX0ZPVU5EEBQSMwovRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9NRVNTQUdFU19OT1RfRk9VTkQQFRI2CjJGQUlMVVJFX01FU1NBR0VfQ1JFQVRFX05PVElGSUNBVElPTl9NRVNTQUdFX0ZBSUxFRBAWEjYKMkZBSUxVUkVfTUVTU0FHRV9VUERBVEVfTk9USUZJQ0FUSU9OX01FU1NBR0VfRkFJTEVEEBcSNgoyRkFJTFVSRV9NRVNTQUdFX0RFTEVURV9OT1RJRklDQVRJT05fTUVTU0FHRV9GQUlMRUQQGBI2CjJGQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX05PVF9GT1VORBAZEjcKM0ZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fTUVTU0FHRV9KT0JTX05PVF9GT1VORBAaEjoKNkZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX0ZBSUxFRBAbEjoKNkZBSUxVUkVfTUVTU0FHRV9VUERBVEVfTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX0ZBSUxFRBAcEjoKNkZBSUxVUkVfTUVTU0FHRV9ERUxFVEVfTk9USUZJQ0FUSU9OX01FU1NBR0VfSk9CX0ZBSUxFRBAdEjYKMkZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fU0VUVElOR19BTFJFQURZX0VYSVNUEB4SOwo3RkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9TRVRUSU5HX1NMVUdfQUxSRUFEWV9UQUtFThAfEjMKL0ZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fVVNFUl9BTFJFQURZX0VYSVNUECASNAowRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9HUk9VUF9BTFJFQURZX0VYSVNUECEyuyIKFE5vdGlmaWNhdGlvbnNTZXJ2aWNlEpIBChlDcmVhdGVOb3RpZmljYXRpb25TZXR0aW5nEjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuQ3JlYXRlTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QaNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2USkgEKF1JlYWROb3RpZmljYXRpb25TZXR0aW5nEjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0GjsuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZRKSAQoZVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZxI8LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0GjcuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlEpIBChlEZWxldGVOb3RpZmljYXRpb25TZXR0aW5nEjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QaNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2USjAEKF0NyZWF0ZU5vdGlmaWNhdGlvbkdyb3VwEjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuQ3JlYXRlTm90aWZpY2F0aW9uR3JvdXBSZXF1ZXN0GjUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZRKPAQoWUmVhZE5vdGlmaWNhdGlvbkdyb3VwcxI5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Hcm91cHNSZXF1ZXN0GjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3Vwc1Jlc3BvbnNlEowBChdVcGRhdGVOb3RpZmljYXRpb25Hcm91cBI6LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwUmVxdWVzdBo1LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbkdyb3VwUmVzcG9uc2USjAEKF0RlbGV0ZU5vdGlmaWNhdGlvbkdyb3VwEjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlTm90aWZpY2F0aW9uR3JvdXBSZXF1ZXN0GjUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZRKJAQoWQ3JlYXRlTm90aWZpY2F0aW9uVXNlchI5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkNyZWF0ZU5vdGlmaWNhdGlvblVzZXJSZXF1ZXN0GjQuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uVXNlclJlc3BvbnNlEowBChVSZWFkTm90aWZpY2F0aW9uVXNlcnMSOC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uVXNlcnNSZXF1ZXN0GjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvblVzZXJzUmVzcG9uc2USiQEKFlVwZGF0ZU5vdGlmaWNhdGlvblVzZXISOS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5VcGRhdGVOb3RpZmljYXRpb25Vc2VyUmVxdWVzdBo0LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblVzZXJSZXNwb25zZRKJAQoWRGVsZXRlTm90aWZpY2F0aW9uVXNlchI5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkRlbGV0ZU5vdGlmaWNhdGlvblVzZXJSZXF1ZXN0GjQuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uVXNlclJlc3BvbnNlEpgBChtDcmVhdGVOb3RpZmljYXRpb25Hcm91cFVzZXISPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5DcmVhdGVOb3RpZmljYXRpb25Hcm91cFVzZXJSZXF1ZXN0GjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVzcG9uc2USnAEKGlJlYWROb3RpZmljYXRpb25Hcm91cFVzZXJzEj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXF1ZXN0cxo+LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Hcm91cFVzZXJzUmVzcG9uc2USmAEKG1VwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwVXNlchI+LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwVXNlclJlcXVlc3QaOS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Hcm91cFVzZXJSZXNwb25zZRKYAQobRGVsZXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyEj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBo5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbkdyb3VwVXNlclJlc3BvbnNlEpIBChlDcmVhdGVOb3RpZmljYXRpb25NZXNzYWdlEjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZVJlcXVlc3QaNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlUmVzcG9uc2USlQEKGFJlYWROb3RpZmljYXRpb25NZXNzYWdlcxI7LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlc1JlcXVlc3QaPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uTWVzc2FnZXNSZXNwb25zZRKeAQobR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzEj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVxdWVzdBo/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldFNlbnROb3RpZmljYXRpb25NZXNzYWdlc1Jlc3BvbnNlEpIBChlVcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlEjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVXBkYXRlTm90aWZpY2F0aW9uTWVzc2FnZVJlcXVlc3QaNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlUmVzcG9uc2USkgEKGURlbGV0ZU5vdGlmaWNhdGlvbk1lc3NhZ2USPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBo3LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VSZXNwb25zZRKbAQocQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYhI/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkNyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXF1ZXN0GjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlc3BvbnNlEp4BChtSZWFkTm90aWZpY2F0aW9uTWVzc2FnZUpvYnMSPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uTWVzc2FnZUpvYnNSZXF1ZXN0Gj8uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JzUmVzcG9uc2USmwEKHFVwZGF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VKb2ISPy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5VcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlSm9iUmVxdWVzdBo6LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXNwb25zZRKbAQocRGVsZXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYhI/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkRlbGV0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXF1ZXN0GjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlc3BvbnNlEoUBChhSZWFkTm90aWZpY2F0aW9uUHJvZHVjdHMSOy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uUHJvZHVjdHNSZXF1ZXN0GiwuZGFzaGJvYXJkLnByb2R1Y3QudjEuU2VhcmNoUHJvZHVjdHNSZXNwb25zZRKeAQobR2V0Tm90aWZpY2F0aW9uVXNlclNldHRpbmdzEj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0Tm90aWZpY2F0aW9uVXNlclNldHRpbmdzUmVxdWVzdBo/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblVzZXJTZXR0aW5nc1Jlc3BvbnNlEnoKD1ZlcmlmeVVzZXJFbWFpbBIyLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlZlcmlmeVVzZXJFbWFpbFJlcXVlc3QaMy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5WZXJpZnlVc2VyRW1haWxSZXNwb25zZRJ0Cg1HZXRVc2VyR3JvdXBzEjAuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0VXNlckdyb3Vwc1JlcXVlc3QaMS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXRVc2VyR3JvdXBzUmVzcG9uc2USXwoQVXBkYXRlVXNlckdyb3VwcxIzLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZVVzZXJHcm91cHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5YgZwcm90bzM", [import_wkt5.file_google_protobuf_timestamp, import_wkt5.file_google_protobuf_empty, file_dashboard_v1_product, file_common_v1_push_notifications]);
2282
+ var FailureMessage = /* @__PURE__ */ ((FailureMessage2) => {
2283
+ FailureMessage2[FailureMessage2["UNKNOWN"] = 0] = "UNKNOWN";
2284
+ FailureMessage2[FailureMessage2["PROJECT_NOT_FOUND"] = 1] = "PROJECT_NOT_FOUND";
2285
+ FailureMessage2[FailureMessage2["NOTIFICATION_SETTING_NOT_FOUND"] = 2] = "NOTIFICATION_SETTING_NOT_FOUND";
2286
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_SETTING_FAILED"] = 3] = "CREATE_NOTIFICATION_SETTING_FAILED";
2287
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_SETTING_FAILED"] = 4] = "UPDATE_NOTIFICATION_SETTING_FAILED";
2288
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_SETTING_FAILED"] = 5] = "DELETE_NOTIFICATION_SETTING_FAILED";
2289
+ FailureMessage2[FailureMessage2["NOTIFICATION_GROUP_NOT_FOUND"] = 6] = "NOTIFICATION_GROUP_NOT_FOUND";
2290
+ FailureMessage2[FailureMessage2["NOTIFICATION_GROUPS_NOT_FOUND"] = 7] = "NOTIFICATION_GROUPS_NOT_FOUND";
2291
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_GROUP_FAILED"] = 8] = "CREATE_NOTIFICATION_GROUP_FAILED";
2292
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_GROUP_FAILED"] = 9] = "UPDATE_NOTIFICATION_GROUP_FAILED";
2293
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_GROUP_FAILED"] = 10] = "DELETE_NOTIFICATION_GROUP_FAILED";
2294
+ FailureMessage2[FailureMessage2["NOTIFICATION_USER_NOT_FOUND"] = 11] = "NOTIFICATION_USER_NOT_FOUND";
2295
+ FailureMessage2[FailureMessage2["NOTIFICATION_USERS_NOT_FOUND"] = 12] = "NOTIFICATION_USERS_NOT_FOUND";
2296
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_USER_FAILED"] = 13] = "CREATE_NOTIFICATION_USER_FAILED";
2297
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_USER_FAILED"] = 14] = "UPDATE_NOTIFICATION_USER_FAILED";
2298
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_USER_FAILED"] = 15] = "DELETE_NOTIFICATION_USER_FAILED";
2299
+ FailureMessage2[FailureMessage2["NOTIFICATION_GROUP_USER_NOT_FOUND"] = 16] = "NOTIFICATION_GROUP_USER_NOT_FOUND";
2300
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_GROUP_USER_FAILED"] = 17] = "CREATE_NOTIFICATION_GROUP_USER_FAILED";
2301
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_GROUP_USER_FAILED"] = 18] = "UPDATE_NOTIFICATION_GROUP_USER_FAILED";
2302
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_GROUP_USER_FAILED"] = 19] = "DELETE_NOTIFICATION_GROUP_USER_FAILED";
2303
+ FailureMessage2[FailureMessage2["NOTIFICATION_MESSAGE_NOT_FOUND"] = 20] = "NOTIFICATION_MESSAGE_NOT_FOUND";
2304
+ FailureMessage2[FailureMessage2["NOTIFICATION_MESSAGES_NOT_FOUND"] = 21] = "NOTIFICATION_MESSAGES_NOT_FOUND";
2305
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_MESSAGE_FAILED"] = 22] = "CREATE_NOTIFICATION_MESSAGE_FAILED";
2306
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_MESSAGE_FAILED"] = 23] = "UPDATE_NOTIFICATION_MESSAGE_FAILED";
2307
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_MESSAGE_FAILED"] = 24] = "DELETE_NOTIFICATION_MESSAGE_FAILED";
2308
+ FailureMessage2[FailureMessage2["NOTIFICATION_MESSAGE_JOB_NOT_FOUND"] = 25] = "NOTIFICATION_MESSAGE_JOB_NOT_FOUND";
2309
+ FailureMessage2[FailureMessage2["NOTIFICATION_MESSAGE_JOBS_NOT_FOUND"] = 26] = "NOTIFICATION_MESSAGE_JOBS_NOT_FOUND";
2310
+ FailureMessage2[FailureMessage2["CREATE_NOTIFICATION_MESSAGE_JOB_FAILED"] = 27] = "CREATE_NOTIFICATION_MESSAGE_JOB_FAILED";
2311
+ FailureMessage2[FailureMessage2["UPDATE_NOTIFICATION_MESSAGE_JOB_FAILED"] = 28] = "UPDATE_NOTIFICATION_MESSAGE_JOB_FAILED";
2312
+ FailureMessage2[FailureMessage2["DELETE_NOTIFICATION_MESSAGE_JOB_FAILED"] = 29] = "DELETE_NOTIFICATION_MESSAGE_JOB_FAILED";
2313
+ FailureMessage2[FailureMessage2["NOTIFICATION_SETTING_ALREADY_EXIST"] = 30] = "NOTIFICATION_SETTING_ALREADY_EXIST";
2314
+ FailureMessage2[FailureMessage2["NOTIFICATION_SETTING_SLUG_ALREADY_TAKEN"] = 31] = "NOTIFICATION_SETTING_SLUG_ALREADY_TAKEN";
2315
+ FailureMessage2[FailureMessage2["NOTIFICATION_USER_ALREADY_EXIST"] = 32] = "NOTIFICATION_USER_ALREADY_EXIST";
2316
+ FailureMessage2[FailureMessage2["NOTIFICATION_GROUP_ALREADY_EXIST"] = 33] = "NOTIFICATION_GROUP_ALREADY_EXIST";
2317
+ return FailureMessage2;
2318
+ })(FailureMessage || {});
2319
+ var NotificationsService = /* @__PURE__ */ (0, import_codegenv27.serviceDesc)(file_dashboard_v1_notifications, 0);
2320
+
2321
+ // src/gen/proto/dashboard/v1/notifications-NotificationsService_connectquery.ts
2322
+ var createNotificationSetting = NotificationsService.method.createNotificationSetting;
2323
+ var readNotificationSetting = NotificationsService.method.readNotificationSetting;
2324
+ var updateNotificationSetting = NotificationsService.method.updateNotificationSetting;
2325
+ var deleteNotificationSetting = NotificationsService.method.deleteNotificationSetting;
2326
+ var createNotificationGroup = NotificationsService.method.createNotificationGroup;
2327
+ var readNotificationGroups = NotificationsService.method.readNotificationGroups;
2328
+ var updateNotificationGroup = NotificationsService.method.updateNotificationGroup;
2329
+ var deleteNotificationGroup = NotificationsService.method.deleteNotificationGroup;
2330
+ var createNotificationUser = NotificationsService.method.createNotificationUser;
2331
+ var readNotificationUsers = NotificationsService.method.readNotificationUsers;
2332
+ var updateNotificationUser = NotificationsService.method.updateNotificationUser;
2333
+ var deleteNotificationUser = NotificationsService.method.deleteNotificationUser;
2334
+ var createNotificationGroupUser = NotificationsService.method.createNotificationGroupUser;
2335
+ var readNotificationGroupUsers = NotificationsService.method.readNotificationGroupUsers;
2336
+ var updateNotificationGroupUser = NotificationsService.method.updateNotificationGroupUser;
2337
+ var deleteNotificationGroupUser = NotificationsService.method.deleteNotificationGroupUser;
2338
+ var createNotificationMessage = NotificationsService.method.createNotificationMessage;
2339
+ var readNotificationMessages = NotificationsService.method.readNotificationMessages;
2340
+ var getSentNotificationMessages = NotificationsService.method.getSentNotificationMessages;
2341
+ var updateNotificationMessage = NotificationsService.method.updateNotificationMessage;
2342
+ var deleteNotificationMessage = NotificationsService.method.deleteNotificationMessage;
2343
+ var createNotificationMessageJob = NotificationsService.method.createNotificationMessageJob;
2344
+ var readNotificationMessageJobs = NotificationsService.method.readNotificationMessageJobs;
2345
+ var updateNotificationMessageJob = NotificationsService.method.updateNotificationMessageJob;
2346
+ var deleteNotificationMessageJob = NotificationsService.method.deleteNotificationMessageJob;
2347
+ var readNotificationProducts = NotificationsService.method.readNotificationProducts;
2348
+ var getNotificationUserSettings = NotificationsService.method.getNotificationUserSettings;
2349
+ var verifyUserEmail = NotificationsService.method.verifyUserEmail;
2350
+ var getUserGroups = NotificationsService.method.getUserGroups;
2351
+ var updateUserGroups = NotificationsService.method.updateUserGroups;
2352
+
2353
+ // src/rpc-provider.tsx
2354
+ var import_jsx_runtime11 = require("react/jsx-runtime");
2355
+ console.log("HOST", HOST);
2356
+ var currentFinalTransportHost;
2357
+ var finalTransport;
2358
+ BigInt.prototype.toJSON = function() {
2359
+ return this.toString();
2360
+ };
2361
+ var rpcProvider = {
2362
+ publicApi: public_api_PublicApiService_connectquery_exports,
2363
+ notifications: notifications_NotificationsService_connectquery_exports
2364
+ };
2365
+ var useQuery4 = import_connect_query.useQuery;
2366
+ var useMutation3 = import_connect_query.useMutation;
2367
+ var RpcProvider = ({ children }) => {
2368
+ if (finalTransport == null || currentFinalTransportHost !== HOST) {
2369
+ currentFinalTransportHost = HOST;
2370
+ finalTransport = (0, import_connect_web2.createConnectTransport)({
2371
+ baseUrl: HOST + "/api/rpc",
2372
+ useBinaryFormat: true,
2373
+ // @ts-ignore
2374
+ fetch: async (input, init) => {
2375
+ return fetch(input, {
2376
+ ...init,
2377
+ keepalive: false,
2378
+ credentials: "include"
2379
+ });
2380
+ }
2381
+ });
2382
+ }
2383
+ const [queryClient] = (0, import_react9.useState)(
2384
+ () => new import_react_query5.QueryClient({
2385
+ defaultOptions: { queries: { staleTime: 5e3 } }
2386
+ })
2387
+ );
2388
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_connect_query.TransportProvider, { transport: finalTransport, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_query5.QueryClientProvider, { client: queryClient, children }) });
2389
+ };
2390
+
2391
+ // src/components/notifications/NotificationsComponentPublic.tsx
2392
+ var import_react_query6 = require("@tanstack/react-query");
2393
+ var import_lucide_react11 = require("lucide-react");
2394
+
2395
+ // src/components/notifications/constants.tsx
2396
+ var import_jsx_runtime12 = require("react/jsx-runtime");
2397
+ var DEFAULT_TEXTS = {
2398
+ title: null,
2399
+ description: null,
2400
+ managingDescription: "Zarz\u0105dzaj rodzajami powiadomie\u0144 i sposobem dostarczania.",
2401
+ formTitle: "Podaj Email aby zapisa\u0107 si\u0119\xA0do powiadomie\u0144",
2402
+ formEmailLabel: "Email",
2403
+ formPhoneLabel: "Numer telefonu",
2404
+ formPhoneOptional: "(opcjonalnie)",
2405
+ formEmailPlaceholder: "np. mail@gmail...",
2406
+ formPhonePlaceholder: "np. 663...",
2407
+ formSubmitButton: "Zapisz si\u0119",
2408
+ formSuccessMessage: "Zapisa\u0142e\u015B si\u0119 do powiadomie\u0144.",
2409
+ agreementText: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
2410
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { style: { color: "red" }, children: "*" }),
2411
+ "Wyra\u017Cam zgod\u0119 na przetwarzanie moich danych w celach marketingowych zgodnie z",
2412
+ " ",
2413
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2414
+ "a",
2415
+ {
2416
+ href: "/regulations/polityka-prywatnosci",
2417
+ target: "_blank",
2418
+ className: "cursor-alias font-bold hover:font-medium",
2419
+ children: "regulaminem"
2420
+ }
2421
+ ),
2422
+ " ",
2423
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-xs font-light", children: "(zgod\u0119 mo\u017Cna w ka\u017Cdej chwili wycofa\u0107)" })
2424
+ ] }),
2425
+ qrCodeTitle: "lub zainstaluj aplikacj\u0119 mobiln\u0105",
2426
+ qrCodeSubtitle: "Aplikacja mobilna",
2427
+ qrCodeScanText: "zeskanuj kod QR",
2428
+ groupsNoSelectionWarning: "Je\u015Bli \u017Cadna z grup nie jest zaznaczona, nie otrzymasz \u017Cadnych powiadomie\u0144.",
2429
+ groupsSelectAllButton: "Zaznacz wszystkie",
2430
+ groupsUpdateButton: "Aktualizuj",
2431
+ groupsUpdateSuccess: "Zaktualizowano pomy\u015Blnie.",
2432
+ groupsTitle: "Zarz\u0105dzaj grupami z kt\xF3rych chcesz otrzymywa\u0107 powiadomienia",
2433
+ manageDataTitle: "Ustawienia powiadomie\u0144",
2434
+ manageDataDescription: "W jaki spos\xF3b chcesz otrzymywa\u0107 powiadomienia?",
2435
+ manageDataUnsubscribeButton: "Odsubskrybuj",
2436
+ manageDataUpdatedMessage: "Zaktualizowano",
2437
+ manageDataUnsubscribeDescription: "Wypisz mnie z wszystkich powiadomie\u0144 i grup.",
2438
+ loginEmailLabel: "Email",
2439
+ loginEmailPlaceholder: "Wprowad\u017A sw\xF3j email",
2440
+ loginSendCodeButton: "Wy\u015Blij kod weryfikacyjny",
2441
+ loginSendingButton: "Wysy\u0142anie...",
2442
+ loginCodeLabel: "Wprowad\u017A kod weryfikacyjny",
2443
+ loginCodeSentMessage: "Wys\u0142ali\u015Bmy kod weryfikacyjny na adres",
2444
+ loginChangeEmailButton: "Popraw email",
2445
+ loginResendCodeButton: "Wy\u015Blij kod ponownie",
2446
+ loginInvalidEmailError: "Wprowad\u017A prawid\u0142owy adres email",
2447
+ loginSlugRequiredError: "Wymagany jest identyfikator projektu",
2448
+ loginInvalidCodeError: "Nieprawid\u0142owy kod weryfikacyjny",
2449
+ loginVerificationFailedError: "Weryfikacja nie powiod\u0142a si\u0119. Sprawd\u017A sw\xF3j kod.",
2450
+ loginSendEmailError: "Nie uda\u0142o si\u0119 wys\u0142a\u0107 kodu weryfikacyjnego",
2451
+ loginVerifyCodeError: "Nie uda\u0142o si\u0119 zweryfikowa\u0107 kodu",
2452
+ loginResendEmailError: "Nie uda\u0142o si\u0119 ponownie wys\u0142a\u0107 kodu weryfikacyjnego",
2453
+ loginTitle: "Wpisz email aby zarz\u0105dza\u0107 powiadomieniami",
2454
+ loginDescription: "Dostaniesz kod weryfikacyjny na email.",
2455
+ loginIHaveCode: "Mam ju\u017C kod"
2456
+ };
2457
+
2458
+ // src/ui/button.tsx
2459
+ var import_react_slot = require("@radix-ui/react-slot");
2460
+ var import_class_variance_authority = require("class-variance-authority");
2461
+ var import_jsx_runtime13 = require("react/jsx-runtime");
2462
+ var buttonVariants = (0, import_class_variance_authority.cva)(
2463
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
2464
+ {
2465
+ variants: {
2466
+ variant: {
2467
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
2468
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
2469
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
2470
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
2471
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
2472
+ link: "text-primary underline-offset-4 hover:underline"
2473
+ },
2474
+ size: {
2475
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
2476
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
2477
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
2478
+ icon: "size-9",
2479
+ "icon-sm": "size-8",
2480
+ "icon-lg": "size-10"
2481
+ }
2482
+ },
2483
+ defaultVariants: {
2484
+ variant: "default",
2485
+ size: "default"
2486
+ }
2487
+ }
2488
+ );
2489
+ function Button({
2490
+ className,
2491
+ variant,
2492
+ size,
2493
+ asChild = false,
2494
+ ...props
2495
+ }) {
2496
+ const Comp = asChild ? import_react_slot.Slot : "button";
2497
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2498
+ Comp,
2499
+ {
2500
+ "data-slot": "button",
2501
+ className: cn(buttonVariants({ variant, size, className })),
2502
+ ...props
2503
+ }
2504
+ );
2505
+ }
2506
+
2507
+ // src/components/notifications/NotificationHeader.tsx
2508
+ var import_lucide_react2 = require("lucide-react");
2509
+ var import_jsx_runtime14 = require("react/jsx-runtime");
2510
+ function NotificationHeader({
2511
+ projectName,
2512
+ projectLogo,
2513
+ projectLogoDark,
2514
+ description,
2515
+ className,
2516
+ onLogout
2517
+ }) {
2518
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
2519
+ projectLogo != null || projectName != null && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
2520
+ "h2",
2521
+ {
2522
+ className: cn(
2523
+ "flex max-w-44 items-center gap-3 text-lg font-medium text-black sm:max-w-none md:text-xl lg:text-2xl xl:text-3xl dark:text-neutral-100",
2524
+ className == null ? void 0 : className.headerTitle
2525
+ ),
2526
+ children: [
2527
+ projectLogo != null && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
2528
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2529
+ "img",
2530
+ {
2531
+ src: projectLogo,
2532
+ alt: "",
2533
+ className: cn(
2534
+ "h-12 w-auto dark:hidden",
2535
+ className == null ? void 0 : className.headerLogo
2536
+ )
2537
+ }
2538
+ ),
2539
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2540
+ "img",
2541
+ {
2542
+ src: projectLogoDark != null ? projectLogoDark : projectLogo,
2543
+ alt: "",
2544
+ className: cn(
2545
+ "hidden h-12 w-auto dark:inline",
2546
+ className == null ? void 0 : className.headerLogo
2547
+ )
2548
+ }
2549
+ )
2550
+ ] }),
2551
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: projectName })
2552
+ ]
2553
+ }
2554
+ ),
2555
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2", children: [
2556
+ description && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2557
+ "p",
2558
+ {
2559
+ className: cn(
2560
+ "mt-4 font-medium text-left",
2561
+ className == null ? void 0 : className.headerDescription
2562
+ ),
2563
+ children: description
2564
+ }
2565
+ ),
2566
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "grow" }),
2567
+ onLogout && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Button, { variant: "ghost", size: "icon-sm", onClick: onLogout, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react2.LogOutIcon, { className: "h-5 w-5" }) })
2568
+ ] })
2569
+ ] });
2570
+ }
2571
+
2572
+ // src/ui/switch.tsx
2573
+ var SwitchPrimitive = __toESM(require("@radix-ui/react-switch"));
2574
+ var import_jsx_runtime15 = require("react/jsx-runtime");
2575
+ function Switch({
2576
+ className,
2577
+ ...props
2578
+ }) {
2579
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2580
+ SwitchPrimitive.Root,
2581
+ {
2582
+ "data-slot": "switch",
2583
+ className: cn(
2584
+ "peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
2585
+ className
2586
+ ),
2587
+ ...props,
2588
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2589
+ SwitchPrimitive.Thumb,
2590
+ {
2591
+ "data-slot": "switch-thumb",
2592
+ className: cn(
2593
+ "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
2594
+ )
2595
+ }
2596
+ )
2597
+ }
2598
+ );
2599
+ }
2600
+
2601
+ // src/components/notifications/NotificationGroupsList.tsx
2602
+ var import_react10 = require("@formkit/auto-animate/react");
2603
+ var import_lucide_react4 = require("lucide-react");
2604
+
2605
+ // src/ui/popover.tsx
2606
+ var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"));
2607
+ var import_jsx_runtime16 = require("react/jsx-runtime");
2608
+ function Popover({
2609
+ ...props
2610
+ }) {
2611
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
2612
+ }
2613
+ function PopoverTrigger({
2614
+ ...props
2615
+ }) {
2616
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
2617
+ }
2618
+ function PopoverContent({
2619
+ className,
2620
+ align = "center",
2621
+ sideOffset = 4,
2622
+ ...props
2623
+ }) {
2624
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2625
+ PopoverPrimitive.Content,
2626
+ {
2627
+ "data-slot": "popover-content",
2628
+ align,
2629
+ sideOffset,
2630
+ className: cn(
2631
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
2632
+ className
2633
+ ),
2634
+ ...props
2635
+ }
2636
+ ) });
2637
+ }
2638
+
2639
+ // src/components/notifications/HowOftenComponent.tsx
2640
+ var import_lucide_react3 = require("lucide-react");
2641
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2642
+ function HowOftenComponent({ regularity }) {
2643
+ let text = "";
2644
+ switch (regularity) {
2645
+ case "rarely":
2646
+ text = "rzadko";
2647
+ break;
2648
+ case "often":
2649
+ text = "cz\u0119sto";
2650
+ break;
2651
+ case "very_often":
2652
+ text = "codzienne";
2653
+ break;
2654
+ }
2655
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Popover, { children: [
2656
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2657
+ PopoverTrigger,
2658
+ {
2659
+ onClick: (e) => {
2660
+ e.stopPropagation();
2661
+ },
2662
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2663
+ "button",
2664
+ {
2665
+ type: "button",
2666
+ className: "flex w-[30%] cursor-help flex-col items-center justify-center text-xs md:w-[25%] xl:w-[20%]",
2667
+ children: [
2668
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react3.ClockIcon, { size: 12 }),
2669
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: text })
2670
+ ]
2671
+ }
2672
+ )
2673
+ }
2674
+ ),
2675
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PopoverContent, { className: "w-80", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "grid gap-4", children: [
2676
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-2", children: [
2677
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h4", { className: "leading-none font-medium", children: "Co to oznacza?" }),
2678
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("ul", { className: "list-inside list-disc text-sm", children: [
2679
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("li", { children: [
2680
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: "Rzadko" }),
2681
+ " \u2013 powiadomienia b\u0119d\u0105 wysy\u0142ane maksymalnie kilka razy w miesi\u0105cu."
2682
+ ] }),
2683
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("li", { children: [
2684
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: "Cz\u0119sto" }),
2685
+ " \u2013 powiadomienia mog\u0119 by\u0107 wysy\u0142ane kilka razy w tygodniu."
2686
+ ] }),
2687
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("li", { children: [
2688
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: "Codzienne" }),
2689
+ " \u2013 powiadomienia b\u0119d\u0105 wysy\u0142ane nawet codziennie."
2690
+ ] })
2691
+ ] })
2692
+ ] }),
2693
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "grid gap-2" })
2694
+ ] }) })
2695
+ ] });
2696
+ }
2697
+
2698
+ // src/ui/card.tsx
2699
+ var import_jsx_runtime18 = require("react/jsx-runtime");
2700
+ function Card({ className, ...props }) {
2701
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2702
+ "div",
2703
+ {
2704
+ "data-slot": "card",
2705
+ className: cn(
2706
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
2707
+ className
2708
+ ),
2709
+ ...props
2710
+ }
2711
+ );
2712
+ }
2713
+ function CardHeader({ className, ...props }) {
2714
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2715
+ "div",
2716
+ {
2717
+ "data-slot": "card-header",
2718
+ className: cn(
2719
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
2720
+ className
2721
+ ),
2722
+ ...props
2723
+ }
2724
+ );
2725
+ }
2726
+ function CardTitle({ className, ...props }) {
2727
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2728
+ "div",
2729
+ {
2730
+ "data-slot": "card-title",
2731
+ className: cn("leading-none font-semibold", className),
2732
+ ...props
2733
+ }
2734
+ );
2735
+ }
2736
+ function CardDescription({ className, ...props }) {
2737
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2738
+ "div",
2739
+ {
2740
+ "data-slot": "card-description",
2741
+ className: cn("text-muted-foreground text-sm", className),
2742
+ ...props
2743
+ }
2744
+ );
2745
+ }
2746
+ function CardContent({ className, ...props }) {
2747
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2748
+ "div",
2749
+ {
2750
+ "data-slot": "card-content",
2751
+ className: cn("px-6", className),
2752
+ ...props
2753
+ }
2754
+ );
2755
+ }
2756
+
2757
+ // src/components/notifications/NotificationGroupsList.tsx
2758
+ var import_jsx_runtime19 = require("react/jsx-runtime");
2759
+ function NotificationGroupsList({
2760
+ groups = [],
2761
+ isManaging,
2762
+ onToggle,
2763
+ onCheckAll,
2764
+ onUpdate,
2765
+ isUpdating,
2766
+ wasChanged,
2767
+ isUserGroupsUpdated,
2768
+ className,
2769
+ texts
2770
+ }) {
2771
+ var _a, _b, _c, _d, _e;
2772
+ const [groupsParent] = (0, import_react10.useAutoAnimate)();
2773
+ const [updateGroupsParent] = (0, import_react10.useAutoAnimate)();
2774
+ const hasNoSelection = groups.filter((group) => group.isOn === false).length > 0;
2775
+ const hasUnchecked = groups.filter((group) => group.isOn === false).length > 0;
2776
+ if (groups.length <= 1 && isManaging != true) {
2777
+ return null;
2778
+ }
2779
+ const content = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2780
+ "div",
2781
+ {
2782
+ ref: groupsParent,
2783
+ className: cn("my-5 flex flex-col gap-3", className == null ? void 0 : className.groupsList),
2784
+ children: [
2785
+ groups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2786
+ "div",
2787
+ {
2788
+ id: group.id,
2789
+ role: "button",
2790
+ className: cn(
2791
+ group.isOn ? "bg-neutral-50 hover:bg-transparent shadow-sm border-transparent dark:bg-neutral-800" : "border-neutral-200 hover:bg-neutral-50 dark:hover:border-neutral-800 shadow-sm dark:border-neutral-800",
2792
+ "active:bg-beige-300 flex w-full cursor-pointer items-center gap-3 rounded-xl border px-3 py-2 transition active:dark:bg-neutral-900",
2793
+ className == null ? void 0 : className.groupItem
2794
+ ),
2795
+ onClick: (e) => {
2796
+ if (e.target instanceof HTMLButtonElement) {
2797
+ return;
2798
+ }
2799
+ onToggle(group.id);
2800
+ },
2801
+ children: [
2802
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2803
+ Switch,
2804
+ {
2805
+ checked: group.isOn,
2806
+ className: "data-[state=checked]:bg-blue-500 dark:data-[state=unchecked]:bg-neutral-700",
2807
+ onCheckedChange: () => {
2808
+ onToggle(group.id);
2809
+ }
2810
+ }
2811
+ ),
2812
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col items-start justify-start", children: [
2813
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "font-medium text-sm", children: group.name }),
2814
+ group.description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs font-light", children: group.description })
2815
+ ] }),
2816
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "grow" }),
2817
+ group.howOften && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(HowOftenComponent, { regularity: group.howOften })
2818
+ ]
2819
+ },
2820
+ group.id
2821
+ )),
2822
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex gap-2", children: [
2823
+ isManaging === true && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
2824
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2825
+ "div",
2826
+ {
2827
+ ref: updateGroupsParent,
2828
+ className: "flex flex-col items-start justify-start",
2829
+ children: [
2830
+ wasChanged && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2831
+ Button,
2832
+ {
2833
+ variant: "default",
2834
+ size: "sm",
2835
+ className: "relative",
2836
+ disabled: isUpdating,
2837
+ onClick: onUpdate,
2838
+ children: [
2839
+ (_a = texts == null ? void 0 : texts.groupsUpdateButton) != null ? _a : DEFAULT_TEXTS.groupsUpdateButton,
2840
+ isUpdating && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Spinner, {}) })
2841
+ ]
2842
+ }
2843
+ ),
2844
+ isUserGroupsUpdated && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("p", { className: "mt-3 flex items-center gap-2 text-sm text-green-500", children: [
2845
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react4.CheckCircleIcon, { color: "var(--color-green-500", size: 16 }),
2846
+ " ",
2847
+ (_b = texts == null ? void 0 : texts.groupsUpdateSuccess) != null ? _b : DEFAULT_TEXTS.groupsUpdateSuccess
2848
+ ] })
2849
+ ]
2850
+ }
2851
+ ),
2852
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "grow" })
2853
+ ] }),
2854
+ hasUnchecked && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2855
+ Button,
2856
+ {
2857
+ className: "cursor-pointer dark:bg-neutral-700",
2858
+ onClick: onCheckAll,
2859
+ size: "sm",
2860
+ variant: "secondary",
2861
+ type: "button",
2862
+ children: (_c = texts == null ? void 0 : texts.groupsSelectAllButton) != null ? _c : DEFAULT_TEXTS.groupsSelectAllButton
2863
+ }
2864
+ ) })
2865
+ ] }),
2866
+ hasNoSelection && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex text-left gap-2 text-xs text-yellow-500", children: [
2867
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react4.TriangleAlertIcon, { color: "orange", size: 16 }),
2868
+ (_d = texts == null ? void 0 : texts.groupsNoSelectionWarning) != null ? _d : DEFAULT_TEXTS.groupsNoSelectionWarning
2869
+ ] })
2870
+ ]
2871
+ }
2872
+ );
2873
+ if (isManaging == true) {
2874
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Card, { className: "mt-5 text-left", children: [
2875
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardTitle, { children: (_e = texts == null ? void 0 : texts.groupsTitle) != null ? _e : DEFAULT_TEXTS.groupsTitle }) }),
2876
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardContent, { children: content })
2877
+ ] });
2878
+ }
2879
+ return content;
2880
+ }
2881
+
2882
+ // src/components/notifications/QRCodeSection.tsx
2883
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2884
+ function QRCodeSection({
2885
+ showQRCode = true,
2886
+ isManaging,
2887
+ className,
2888
+ texts
2889
+ }) {
2890
+ var _a, _b, _c, _d;
2891
+ const isBrowser = typeof window !== "undefined";
2892
+ const darkMode = isBrowser ? ((_a = window.matchMedia) == null ? void 0 : _a.call(window, "(prefers-color-scheme: dark)").matches) ? true : false : false;
2893
+ function getURL(isBrowser2) {
2894
+ if (isBrowser2) {
2895
+ return window.location.href;
2896
+ }
2897
+ return "";
2898
+ }
2899
+ if (!showQRCode) {
2900
+ return null;
2901
+ }
2902
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2903
+ Card,
2904
+ {
2905
+ className: cn(
2906
+ "bg-beige-100 rounded-xl p-4 dark:bg-neutral-700",
2907
+ className == null ? void 0 : className.qrCodeSection
2908
+ ),
2909
+ children: [
2910
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CardHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2911
+ CardTitle,
2912
+ {
2913
+ className: cn(
2914
+ "mb-3 text-base font-medium lg:text-lg",
2915
+ className == null ? void 0 : className.qrCodeTitle
2916
+ ),
2917
+ children: [
2918
+ (_b = texts == null ? void 0 : texts.qrCodeSubtitle) != null ? _b : DEFAULT_TEXTS.qrCodeSubtitle,
2919
+ " " + ((_c = texts == null ? void 0 : texts.qrCodeTitle) != null ? _c : DEFAULT_TEXTS.qrCodeTitle)
2920
+ ]
2921
+ }
2922
+ ) }),
2923
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(CardContent, { className: "flex flex-col items-center gap-2", children: [
2924
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "mt-1.5 mb-3 flex items-center gap-x-2", children: [
2925
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2926
+ "a",
2927
+ {
2928
+ href: "https://apps.apple.com/us/app/bitsnap/id6741902807",
2929
+ target: "_blank",
2930
+ className: "max-w-28 flex-1 basis-1/2 lg:max-w-36",
2931
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2932
+ "img",
2933
+ {
2934
+ className: "h-auto w-full",
2935
+ src: HOST + "/app-store-logo.png",
2936
+ alt: "Download on App Store"
2937
+ }
2938
+ )
2939
+ }
2940
+ ),
2941
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2942
+ "a",
2943
+ {
2944
+ href: "https://play.google.com/store/apps/details?id=com.bitsnap.Bitsnap&pli=1",
2945
+ target: "_blank",
2946
+ className: "max-w-28 flex-1 basis-1/2 lg:max-w-36",
2947
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2948
+ "img",
2949
+ {
2950
+ className: "h-auto w-full",
2951
+ src: HOST + "/google-play-logo.png",
2952
+ alt: "Get in on Google Play"
2953
+ }
2954
+ )
2955
+ }
2956
+ )
2957
+ ] }),
2958
+ isBrowser && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2959
+ "div",
2960
+ {
2961
+ className: cn(
2962
+ "flex min-w-[40%] flex-col items-center gap-2 rounded-xl bg-white p-2 dark:bg-neutral-900",
2963
+ className == null ? void 0 : className.qrCodeContainer
2964
+ ),
2965
+ children: [
2966
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2967
+ "img",
2968
+ {
2969
+ className: "mt-3 w-[80%] p-1 pt-3",
2970
+ src: HOST + `/api/qr-gen?url=${getURL(isBrowser)}&bgColor=${!darkMode ? "F6F4F0" : "171717"}&textColor=${!darkMode ? "000000" : "ffffff"}&margin=0`
2971
+ }
2972
+ ),
2973
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs md:text-sm", children: (_d = texts == null ? void 0 : texts.qrCodeScanText) != null ? _d : DEFAULT_TEXTS.qrCodeScanText })
2974
+ ]
2975
+ }
2976
+ ) })
2977
+ ] })
2978
+ ]
2979
+ }
2980
+ );
2981
+ }
2982
+
2983
+ // src/components/notifications/AddUserToGroups.tsx
2984
+ var import_react13 = require("react");
2985
+ var import_react_phone_number_input = require("react-phone-number-input");
2986
+
2987
+ // src/ui/input.tsx
2988
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2989
+ function Input({ className, type, ...props }) {
2990
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2991
+ "input",
2992
+ {
2993
+ type,
2994
+ "data-slot": "input",
2995
+ className: cn(
2996
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
2997
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
2998
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
2999
+ className
3000
+ ),
3001
+ ...props
3002
+ }
3003
+ );
3004
+ }
3005
+
3006
+ // src/components/notifications/FormInput.tsx
3007
+ var import_react11 = require("@formkit/auto-animate/react");
3008
+ var import_react_label = require("@radix-ui/react-label");
3009
+ var import_lucide_react5 = require("lucide-react");
3010
+ var import_react12 = require("react");
3011
+ var import_jsx_runtime22 = require("react/jsx-runtime");
3012
+ function FormInput({
3013
+ submit,
3014
+ isLoading,
3015
+ errMsg,
3016
+ emailLack,
3017
+ warnMsg,
3018
+ isSubmited,
3019
+ agreementLack,
3020
+ showPhoneInput = false,
3021
+ agreementText,
3022
+ className,
3023
+ texts
3024
+ }) {
3025
+ var _a, _b, _c, _d, _e, _f, _g;
3026
+ const [email, setEmail] = (0, import_react12.useState)("");
3027
+ const [phone, setPhone] = (0, import_react12.useState)("");
3028
+ const [isChecked, setIsChecked] = (0, import_react12.useState)(false);
3029
+ const [parent] = (0, import_react11.useAutoAnimate)();
3030
+ function submitForm(e) {
3031
+ e.preventDefault();
3032
+ submit(email, phone, isChecked);
3033
+ }
3034
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3035
+ "form",
3036
+ {
3037
+ ref: parent,
3038
+ onSubmit: submitForm,
3039
+ className: cn("flex flex-col gap-3 text-left", className == null ? void 0 : className.formContainer),
3040
+ children: [
3041
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex flex-col gap-1 text-left", children: [
3042
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_label.Label, { className: "text-sm", htmlFor: "bts-notifications-form-email", children: (_a = texts == null ? void 0 : texts.formEmailLabel) != null ? _a : DEFAULT_TEXTS.formEmailLabel }),
3043
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3044
+ Input,
3045
+ {
3046
+ value: email,
3047
+ onChange: (newVal) => {
3048
+ setEmail(newVal.currentTarget.value);
3049
+ },
3050
+ id: "bts-notifications-form-email",
3051
+ className: cn(emailLack === true ? "border-red-400" : ""),
3052
+ type: "email",
3053
+ placeholder: (_b = texts == null ? void 0 : texts.formEmailPlaceholder) != null ? _b : DEFAULT_TEXTS.formEmailPlaceholder
3054
+ }
3055
+ )
3056
+ ] }),
3057
+ showPhoneInput && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex flex-col gap-1 text-left", children: [
3058
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_label.Label, { className: "text-sm", htmlFor: "bts-notifications-form-phone", children: [
3059
+ (_c = texts == null ? void 0 : texts.formPhoneLabel) != null ? _c : DEFAULT_TEXTS.formPhoneLabel,
3060
+ " ",
3061
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "text-neutral-500 dark:text-neutral-500", children: (_d = texts == null ? void 0 : texts.formPhoneOptional) != null ? _d : DEFAULT_TEXTS.formPhoneOptional })
3062
+ ] }),
3063
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3064
+ Input,
3065
+ {
3066
+ value: phone,
3067
+ onChange: (newVal) => {
3068
+ setPhone(newVal.currentTarget.value);
3069
+ },
3070
+ id: "bts-notifications-form-phone",
3071
+ className: "",
3072
+ type: "tel",
3073
+ autoComplete: "tel",
3074
+ autoCorrect: "off",
3075
+ placeholder: (_e = texts == null ? void 0 : texts.formPhonePlaceholder) != null ? _e : DEFAULT_TEXTS.formPhonePlaceholder
3076
+ }
3077
+ )
3078
+ ] }),
3079
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-start gap-x-1.5", children: [
3080
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3081
+ "input",
3082
+ {
3083
+ className: "cursor-pointer",
3084
+ id: "bts-notifications-form-marketing-consent",
3085
+ type: "checkbox",
3086
+ checked: isChecked,
3087
+ onChange: () => {
3088
+ setIsChecked(!isChecked);
3089
+ }
3090
+ }
3091
+ ),
3092
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3093
+ "label",
3094
+ {
3095
+ htmlFor: "bts-notifications-form-marketing-consent",
3096
+ className: cn(
3097
+ "cursor-pointer text-xs leading-4 transition-colors md:text-sm md:leading-4",
3098
+ agreementLack === true ? "text-yellow-700" : ""
3099
+ ),
3100
+ children: agreementText
3101
+ }
3102
+ )
3103
+ ] }),
3104
+ errMsg.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("p", { className: "mb-3 flex items-center gap-1 text-sm text-red-400", children: [
3105
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react5.TriangleAlertIcon, { color: "#ff6467", size: 16 }),
3106
+ " ",
3107
+ errMsg
3108
+ ] }),
3109
+ warnMsg.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("p", { className: "mb-3 flex items-center gap-1 text-sm text-amber-400", children: [
3110
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react5.CircleAlertIcon, { color: "var(--color-amber-400)", size: 16 }),
3111
+ " ",
3112
+ warnMsg
3113
+ ] }),
3114
+ isSubmited == false && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3115
+ Button,
3116
+ {
3117
+ variant: "default",
3118
+ disabled: isLoading,
3119
+ className: cn(
3120
+ isLoading ? "cursor-not-allowed text-transparent" : "",
3121
+ "relative"
3122
+ ),
3123
+ children: [
3124
+ (_f = texts == null ? void 0 : texts.formSubmitButton) != null ? _f : DEFAULT_TEXTS.formSubmitButton,
3125
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Spinner, {}) })
3126
+ ]
3127
+ }
3128
+ ) }),
3129
+ isSubmited && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-3 text-sm text-green-400", children: [
3130
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react5.CheckCircleIcon, { size: 16 }),
3131
+ " ",
3132
+ (_g = texts == null ? void 0 : texts.formSuccessMessage) != null ? _g : DEFAULT_TEXTS.formSuccessMessage
3133
+ ] })
3134
+ ]
3135
+ }
3136
+ );
3137
+ }
3138
+
3139
+ // src/components/notifications/AddUserToGroups.tsx
3140
+ var import_jsx_runtime23 = require("react/jsx-runtime");
3141
+ var emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3142
+ function AddUserToGroups({
3143
+ groups,
3144
+ onToggle,
3145
+ onCheckAll,
3146
+ slug,
3147
+ showPhoneInput = false,
3148
+ agreementText,
3149
+ className,
3150
+ texts,
3151
+ isUpdating,
3152
+ wasChanged,
3153
+ onSuccess
3154
+ }) {
3155
+ var _a, _b;
3156
+ const [errMsg, setErrMsg] = (0, import_react13.useState)("");
3157
+ const [warnMsg, setWarnMsg] = (0, import_react13.useState)("");
3158
+ const [isSubmited, setIsSubmited] = (0, import_react13.useState)(false);
3159
+ const [agreementLack, setAgreementLack] = (0, import_react13.useState)(false);
3160
+ const [emailLack, setEmailLack] = (0, import_react13.useState)(false);
3161
+ const {
3162
+ mutateAsync: createNotificationUserMutation,
3163
+ isPending: isCreateNotificationUserPending
3164
+ } = useMutation3(rpcProvider.notifications.createNotificationUser);
3165
+ function validatePhoneNumber(phone) {
3166
+ if (phone == null) {
3167
+ return false;
3168
+ }
3169
+ return (0, import_react_phone_number_input.isValidPhoneNumber)(phone, "PL");
3170
+ }
3171
+ async function save(email, phone, agreement) {
3172
+ setErrMsg("");
3173
+ setWarnMsg("");
3174
+ setEmailLack(false);
3175
+ setIsSubmited(false);
3176
+ setAgreementLack(false);
3177
+ if (!agreement) {
3178
+ setAgreementLack(true);
3179
+ const msg = "Zgoda w tym przypadku jest wymagana.";
3180
+ setErrMsg(msg);
3181
+ return;
3182
+ }
3183
+ if (emailRegex.test(email) === false) {
3184
+ setErrMsg("Email jest nieprawid\u0142owy.");
3185
+ setEmailLack(true);
3186
+ return;
3187
+ }
3188
+ if (phone.length > 0) {
3189
+ if (validatePhoneNumber(phone) === false) {
3190
+ const msg = "Numer telefonu mo\u017Ce by\u0107 nieprawid\u0142owy. Zapisali\u015Bmy go ale je\u015Bli jest nieprawid\u0142owy to wpisz jeszcze raz i kliknij przycisk.";
3191
+ setWarnMsg(msg);
3192
+ }
3193
+ }
3194
+ try {
3195
+ const newNotificationUser = await createNotificationUserMutation({
3196
+ slug,
3197
+ email,
3198
+ phone,
3199
+ groups: groups.filter((el) => el.isOn == true).map((el) => el.id),
3200
+ mobileNotificationEnabled: true,
3201
+ emailNotificationEnabled: true,
3202
+ smsNotificationEnabled: true
3203
+ });
3204
+ if (newNotificationUser.result.case === "success") {
3205
+ setIsSubmited(true);
3206
+ setTimeout(() => {
3207
+ onSuccess == null ? void 0 : onSuccess(
3208
+ false,
3209
+ newNotificationUser.userId,
3210
+ newNotificationUser.accessToken
3211
+ );
3212
+ }, 1e3);
3213
+ return;
3214
+ } else {
3215
+ setIsSubmited(true);
3216
+ const failureMessage = newNotificationUser.result.value;
3217
+ if (failureMessage != null) {
3218
+ if (failureMessage == 32 /* NOTIFICATION_USER_ALREADY_EXIST */) {
3219
+ onSuccess == null ? void 0 : onSuccess(true, void 0, void 0);
3220
+ return;
3221
+ }
3222
+ console.log(`Code error: ${FailureMessage[failureMessage]}`);
3223
+ setErrMsg("Wyst\u0105pi\u0142 b\u0142\u0105d: " + FailureMessage[failureMessage]);
3224
+ return;
3225
+ }
3226
+ return;
3227
+ }
3228
+ } catch (e) {
3229
+ setErrMsg("Wyst\u0105pi\u0142 b\u0142\u0105d podczas zapisywania. Spr\xF3buj ponownie.");
3230
+ console.log(`Error: ${e}`);
3231
+ }
3232
+ }
3233
+ const text = (_a = texts == null ? void 0 : texts.formTitle) != null ? _a : DEFAULT_TEXTS.formTitle;
3234
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
3235
+ "div",
3236
+ {
3237
+ className: cn(
3238
+ "bg-beige-100 rounded-xl p-4 dark:bg-neutral-700",
3239
+ className == null ? void 0 : className.formSection
3240
+ ),
3241
+ children: [
3242
+ text.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3243
+ "h3",
3244
+ {
3245
+ className: cn(
3246
+ "mb-3 text-base font-medium lg:text-lg",
3247
+ className == null ? void 0 : className.formTitle
3248
+ ),
3249
+ children: text
3250
+ }
3251
+ ),
3252
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3253
+ NotificationGroupsList,
3254
+ {
3255
+ groups,
3256
+ isManaging: false,
3257
+ onToggle: onToggle != null ? onToggle : () => {
3258
+ },
3259
+ onCheckAll: onCheckAll != null ? onCheckAll : () => {
3260
+ },
3261
+ isUpdating: isUpdating != null ? isUpdating : false,
3262
+ wasChanged: wasChanged != null ? wasChanged : false,
3263
+ isUserGroupsUpdated: false,
3264
+ className,
3265
+ texts
3266
+ }
3267
+ ),
3268
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3269
+ FormInput,
3270
+ {
3271
+ errMsg,
3272
+ emailLack,
3273
+ warnMsg,
3274
+ submit: save,
3275
+ isLoading: isCreateNotificationUserPending,
3276
+ isSubmited,
3277
+ agreementLack,
3278
+ showPhoneInput,
3279
+ agreementText: (_b = agreementText != null ? agreementText : texts == null ? void 0 : texts.agreementText) != null ? _b : DEFAULT_TEXTS.agreementText,
3280
+ className,
3281
+ texts
3282
+ }
3283
+ )
3284
+ ]
3285
+ }
3286
+ );
3287
+ }
3288
+
3289
+ // src/components/notifications/ManageMyData.tsx
3290
+ var import_react15 = require("react");
3291
+
3292
+ // src/ui/skeleton.tsx
3293
+ var import_jsx_runtime24 = require("react/jsx-runtime");
3294
+ function Skeleton2({ className, ...props }) {
3295
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3296
+ "div",
3297
+ {
3298
+ "data-slot": "skeleton",
3299
+ className: cn("bg-accent animate-pulse rounded-md", className),
3300
+ ...props
3301
+ }
3302
+ );
3303
+ }
3304
+
3305
+ // src/components/notifications/ManageMyData.tsx
3306
+ var import_react_label2 = require("@radix-ui/react-label");
3307
+ var import_lucide_react7 = require("lucide-react");
3308
+ var import_use_debounce = require("use-debounce");
3309
+
3310
+ // src/components/notifications/UnsubscribeDialog.tsx
3311
+ var import_lucide_react6 = require("lucide-react");
3312
+ var import_react_dom2 = require("react-dom");
3313
+ var import_react14 = require("react");
3314
+ var import_jsx_runtime25 = require("react/jsx-runtime");
3315
+ function UnsubscribeDialog({
3316
+ open: open2,
3317
+ onOpenChange,
3318
+ onConfirm,
3319
+ isDeleting = false
3320
+ }) {
3321
+ const [mounted, setMounted] = (0, import_react14.useState)(false);
3322
+ (0, import_react14.useEffect)(() => {
3323
+ setMounted(true);
3324
+ return () => setMounted(false);
3325
+ }, []);
3326
+ (0, import_react14.useEffect)(() => {
3327
+ if (open2) {
3328
+ document.body.style.overflow = "hidden";
3329
+ } else {
3330
+ document.body.style.overflow = "";
3331
+ }
3332
+ return () => {
3333
+ document.body.style.overflow = "";
3334
+ };
3335
+ }, [open2]);
3336
+ if (!mounted || !open2) {
3337
+ return null;
3338
+ }
3339
+ const handleBackdropClick = (e) => {
3340
+ if (e.target === e.currentTarget) {
3341
+ onOpenChange(false);
3342
+ }
3343
+ };
3344
+ const handleConfirm = () => {
3345
+ onConfirm();
3346
+ };
3347
+ return (0, import_react_dom2.createPortal)(
3348
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3349
+ "div",
3350
+ {
3351
+ className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/50 p-4",
3352
+ onClick: handleBackdropClick,
3353
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3354
+ "div",
3355
+ {
3356
+ className: cn(
3357
+ "relative w-full max-w-md rounded-2xl bg-white p-6 shadow-lg",
3358
+ "dark:bg-neutral-800",
3359
+ "animate-in fade-in-0 zoom-in-95 duration-200"
3360
+ ),
3361
+ onClick: (e) => e.stopPropagation(),
3362
+ children: [
3363
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3364
+ "button",
3365
+ {
3366
+ onClick: () => onOpenChange(false),
3367
+ className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-neutral-950 focus:ring-offset-2 disabled:pointer-events-none dark:ring-offset-neutral-950 dark:focus:ring-neutral-300",
3368
+ disabled: isDeleting,
3369
+ children: [
3370
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react6.XIcon, { className: "h-4 w-4" }),
3371
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "sr-only", children: "Zamknij" })
3372
+ ]
3373
+ }
3374
+ ),
3375
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col gap-4", children: [
3376
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-start gap-3", children: [
3377
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3378
+ import_lucide_react6.TriangleAlertIcon,
3379
+ {
3380
+ className: "h-6 w-6 text-amber-500",
3381
+ "aria-hidden": "true"
3382
+ }
3383
+ ) }),
3384
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "text-lg font-semibold text-black dark:text-neutral-100", children: "Czy na pewno chcesz si\u0119 wypisa\u0107?" }) })
3385
+ ] }),
3386
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-sm text-neutral-600 dark:text-neutral-400", children: "Klikni\u0119cie tego przycisku spowoduje wypisanie z wszelkich powiadomie\u0144 i grup, kt\xF3re zapisa\u0142e\u015B." }),
3387
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
3388
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3389
+ Button,
3390
+ {
3391
+ type: "button",
3392
+ variant: "ghost",
3393
+ onClick: () => onOpenChange(false),
3394
+ disabled: isDeleting,
3395
+ className: "sm:min-w-[100px]",
3396
+ children: "Anuluj"
3397
+ }
3398
+ ),
3399
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
3400
+ Button,
3401
+ {
3402
+ type: "button",
3403
+ variant: "destructive",
3404
+ onClick: handleConfirm,
3405
+ disabled: isDeleting,
3406
+ className: cn(
3407
+ isDeleting && "cursor-not-allowed text-transparent",
3408
+ "relative sm:min-w-[100px]"
3409
+ ),
3410
+ children: [
3411
+ "Usu\u0144",
3412
+ isDeleting && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent" }) })
3413
+ ]
3414
+ }
3415
+ )
3416
+ ] })
3417
+ ] })
3418
+ ]
3419
+ }
3420
+ )
3421
+ }
3422
+ ),
3423
+ document.body
3424
+ );
3425
+ }
3426
+
3427
+ // src/components/notifications/ManageMyData.tsx
3428
+ var import_react16 = require("@formkit/auto-animate/react");
3429
+ var import_jsx_runtime26 = require("react/jsx-runtime");
3430
+ function ManageMyData({
3431
+ accessToken,
3432
+ slug,
3433
+ userID,
3434
+ className,
3435
+ texts
3436
+ }) {
3437
+ var _a, _b, _c, _d, _e;
3438
+ const [parent] = (0, import_react16.useAutoAnimate)();
3439
+ const [parentCard] = (0, import_react16.useAutoAnimate)();
3440
+ const { mutateAsync: deleteMyData, isPending: isDeleting } = useMutation3(
3441
+ rpcProvider.notifications.deleteNotificationUser
3442
+ );
3443
+ const { mutateAsync: updateNotificationUser2, isPending: isUpdating } = useMutation3(rpcProvider.notifications.updateNotificationUser);
3444
+ const { data: userSettings, isFetching: isLoading } = useQuery4(
3445
+ rpcProvider.notifications.getNotificationUserSettings,
3446
+ {
3447
+ userId: userID,
3448
+ slug,
3449
+ accessToken
3450
+ }
3451
+ );
3452
+ const [email, setEmail] = (0, import_react15.useState)(false);
3453
+ const [phone, setPhone] = (0, import_react15.useState)(false);
3454
+ const [isDataUpdated, setIsDataUpdated] = (0, import_react15.useState)(false);
3455
+ const [push, setPush] = (0, import_react15.useState)(false);
3456
+ const [isDialogOpen, setIsDialogOpen] = (0, import_react15.useState)(false);
3457
+ const details = (userSettings == null ? void 0 : userSettings.result.case) === "success" ? (_a = userSettings == null ? void 0 : userSettings.result) == null ? void 0 : _a.value : void 0;
3458
+ function deleteData() {
3459
+ setIsDialogOpen(true);
3460
+ }
3461
+ async function handleConfirmDelete() {
3462
+ await deleteMyData({
3463
+ accessToken,
3464
+ slug,
3465
+ userId: userID
3466
+ });
3467
+ setIsDialogOpen(false);
3468
+ }
3469
+ async function updateData() {
3470
+ await updateNotificationUser2({
3471
+ accessToken,
3472
+ slug,
3473
+ notificationUserId: userID,
3474
+ mobileNotificationEnabled: push,
3475
+ emailNotificationEnabled: email,
3476
+ smsNotificationEnabled: phone
3477
+ });
3478
+ setIsDataUpdated(true);
3479
+ setTimeout(() => {
3480
+ setIsDataUpdated(false);
3481
+ }, 3e3);
3482
+ }
3483
+ const debouncedUpdateData = (0, import_use_debounce.useDebouncedCallback)((_) => {
3484
+ updateData();
3485
+ }, 300);
3486
+ (0, import_react15.useEffect)(() => {
3487
+ var _a2, _b2, _c2, _d2;
3488
+ const details2 = (userSettings == null ? void 0 : userSettings.result.case) === "success" ? (_a2 = userSettings == null ? void 0 : userSettings.result) == null ? void 0 : _a2.value : void 0;
3489
+ setEmail((_b2 = details2 == null ? void 0 : details2.emailNotificationEnabled) != null ? _b2 : false);
3490
+ setPhone((_c2 = details2 == null ? void 0 : details2.smsNotificationEnabled) != null ? _c2 : false);
3491
+ setPush((_d2 = details2 == null ? void 0 : details2.mobileNotificationEnabled) != null ? _d2 : false);
3492
+ }, [userSettings]);
3493
+ function setData(key, value) {
3494
+ if (key === "email") {
3495
+ setEmail(value);
3496
+ }
3497
+ if (key === "phone") {
3498
+ setPhone(value);
3499
+ }
3500
+ if (key === "push") {
3501
+ setPush(value);
3502
+ }
3503
+ debouncedUpdateData(true);
3504
+ }
3505
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
3506
+ "div",
3507
+ {
3508
+ className: cn(
3509
+ "bg-beige-100 rounded-xl p-4 dark:bg-neutral-700",
3510
+ className == null ? void 0 : className.manageDataSection
3511
+ ),
3512
+ children: [
3513
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3514
+ "h3",
3515
+ {
3516
+ className: cn(
3517
+ "mb-3 text-base font-medium lg:text-lg",
3518
+ className == null ? void 0 : className.manageDataTitle
3519
+ ),
3520
+ children: (_b = texts == null ? void 0 : texts.manageDataTitle) != null ? _b : DEFAULT_TEXTS.manageDataTitle
3521
+ }
3522
+ ) }),
3523
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Skeleton2, { className: "h-64 w-full" }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Card, { ref: parentCard, className: cn(isUpdating && "relative"), children: [
3524
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CardHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CardTitle, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-sm text-left", children: (_c = texts == null ? void 0 : texts.manageDataDescription) != null ? _c : DEFAULT_TEXTS.manageDataDescription }) }) }),
3525
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(CardContent, { ref: parent, children: [
3526
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3527
+ "div",
3528
+ {
3529
+ className: cn(
3530
+ isUpdating && "opacity-50 pointer-events-none",
3531
+ "flex flex-col gap-2"
3532
+ ),
3533
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col items-start gap-5 gap-x-2", children: [
3534
+ (details == null ? void 0 : details.emailNotificationAvailable) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3", children: [
3535
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3536
+ Switch,
3537
+ {
3538
+ id: "email-enabled",
3539
+ className: "data-[state=checked]:bg-blue-500 dark:data-[state=unchecked]:bg-neutral-600",
3540
+ checked: email,
3541
+ onCheckedChange: () => {
3542
+ setData("email", !email);
3543
+ }
3544
+ }
3545
+ ),
3546
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_label2.Label, { htmlFor: "email-enabled", className: "text-sm", children: "Email" })
3547
+ ] }),
3548
+ (details == null ? void 0 : details.smsNotificationAvailable) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3", children: [
3549
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3550
+ Switch,
3551
+ {
3552
+ id: "sms-enabled",
3553
+ className: "data-[state=checked]:bg-blue-500 dark:data-[state=unchecked]:bg-neutral-600",
3554
+ checked: phone,
3555
+ onCheckedChange: () => {
3556
+ setData("phone", !phone);
3557
+ }
3558
+ }
3559
+ ),
3560
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_label2.Label, { htmlFor: "sms-enabled", className: "text-sm", children: "SMS" })
3561
+ ] }),
3562
+ (details == null ? void 0 : details.mobileNotificationAvailable) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
3563
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3", children: [
3564
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3565
+ Switch,
3566
+ {
3567
+ id: "push-enabled",
3568
+ className: "data-[state=checked]:bg-blue-500 dark:data-[state=unchecked]:bg-neutral-600",
3569
+ checked: push,
3570
+ onCheckedChange: () => {
3571
+ setData("push", !push);
3572
+ }
3573
+ }
3574
+ ),
3575
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_label2.Label, { htmlFor: "push-enabled", className: "text-sm", children: "Powiadomienia na telefon" })
3576
+ ] }),
3577
+ (details == null ? void 0 : details.hasUserInstalledApp) === false && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3", children: [
3578
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3579
+ import_lucide_react7.MessageCircleWarningIcon,
3580
+ {
3581
+ color: "var(--color-amber-500)",
3582
+ size: 26
3583
+ }
3584
+ ),
3585
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-xs text-amber-500", children: "Wygl\u0105da na to, \u017Ce nie masz zainstalowanej aplikacji mobilnej. Zainstaluj i wyra\u017A zgod\u0119 na otrzymywanie powiadomie\u0144 na telefon." })
3586
+ ] })
3587
+ ] })
3588
+ ] })
3589
+ }
3590
+ ),
3591
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "mt-5 flex flex-col gap-2 text-left", children: [
3592
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("hr", {}),
3593
+ isDataUpdated && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-xs text-green-500", children: (_d = texts == null ? void 0 : texts.manageDataUpdatedMessage) != null ? _d : DEFAULT_TEXTS.manageDataUpdatedMessage }),
3594
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex items-center gap-x-2", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
3595
+ Button,
3596
+ {
3597
+ size: "sm",
3598
+ variant: "link",
3599
+ className: cn(
3600
+ "pl-0 ml-0",
3601
+ isDeleting && "cursor-not-allowed"
3602
+ ),
3603
+ onClick: deleteData,
3604
+ children: [
3605
+ (_e = texts == null ? void 0 : texts.manageDataUnsubscribeButton) != null ? _e : DEFAULT_TEXTS.manageDataUnsubscribeButton,
3606
+ isDeleting && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Spinner, {}) })
3607
+ ]
3608
+ }
3609
+ ) })
3610
+ ] })
3611
+ ] }),
3612
+ isUpdating && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "bg-black/30 absolute inset-0 rounded-xl", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Spinner, {}) }) })
3613
+ ] }),
3614
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3615
+ UnsubscribeDialog,
3616
+ {
3617
+ open: isDialogOpen,
3618
+ onOpenChange: setIsDialogOpen,
3619
+ onConfirm: handleConfirmDelete,
3620
+ isDeleting
3621
+ }
3622
+ )
3623
+ ]
3624
+ }
3625
+ );
3626
+ }
3627
+
3628
+ // src/components/notifications/LoginScreen.tsx
3629
+ var import_react17 = require("react");
3630
+
3631
+ // src/ui/label.tsx
3632
+ var LabelPrimitive = __toESM(require("@radix-ui/react-label"));
3633
+ var import_jsx_runtime27 = require("react/jsx-runtime");
3634
+ function Label3({
3635
+ className,
3636
+ ...props
3637
+ }) {
3638
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3639
+ LabelPrimitive.Root,
3640
+ {
3641
+ "data-slot": "label",
3642
+ className: cn(
3643
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
3644
+ className
3645
+ ),
3646
+ ...props
3647
+ }
3648
+ );
3649
+ }
3650
+
3651
+ // src/ui/input-otp.tsx
3652
+ var React3 = __toESM(require("react"));
3653
+ var import_input_otp = require("input-otp");
3654
+ var import_lucide_react8 = require("lucide-react");
3655
+ var import_jsx_runtime28 = require("react/jsx-runtime");
3656
+ function InputOTP({
3657
+ className,
3658
+ containerClassName,
3659
+ ...props
3660
+ }) {
3661
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3662
+ import_input_otp.OTPInput,
3663
+ {
3664
+ "data-slot": "input-otp",
3665
+ containerClassName: cn(
3666
+ "flex items-center gap-2 has-disabled:opacity-50",
3667
+ containerClassName
3668
+ ),
3669
+ className: cn("disabled:cursor-not-allowed", className),
3670
+ ...props
3671
+ }
3672
+ );
3673
+ }
3674
+ function InputOTPGroup({ className, ...props }) {
3675
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3676
+ "div",
3677
+ {
3678
+ "data-slot": "input-otp-group",
3679
+ className: cn("flex items-center", className),
3680
+ ...props
3681
+ }
3682
+ );
3683
+ }
3684
+ function InputOTPSlot({
3685
+ index,
3686
+ className,
3687
+ ...props
3688
+ }) {
3689
+ var _a;
3690
+ const inputOTPContext = React3.useContext(import_input_otp.OTPInputContext);
3691
+ const { char, hasFakeCaret, isActive } = (_a = inputOTPContext == null ? void 0 : inputOTPContext.slots[index]) != null ? _a : {};
3692
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
3693
+ "div",
3694
+ {
3695
+ "data-slot": "input-otp-slot",
3696
+ "data-active": isActive,
3697
+ className: cn(
3698
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
3699
+ className
3700
+ ),
3701
+ ...props,
3702
+ children: [
3703
+ char,
3704
+ hasFakeCaret && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
3705
+ ]
3706
+ }
3707
+ );
3708
+ }
3709
+
3710
+ // src/components/notifications/LoginScreen.tsx
3711
+ var import_lucide_react10 = require("lucide-react");
3712
+ var import_react18 = require("@formkit/auto-animate/react");
3713
+
3714
+ // src/ui/dialog.tsx
3715
+ var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"));
3716
+ var import_lucide_react9 = require("lucide-react");
3717
+ var import_jsx_runtime29 = require("react/jsx-runtime");
3718
+ function Dialog({
3719
+ ...props
3720
+ }) {
3721
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
3722
+ }
3723
+ function DialogPortal({
3724
+ ...props
3725
+ }) {
3726
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
3727
+ }
3728
+ function DialogOverlay({
3729
+ className,
3730
+ ...props
3731
+ }) {
3732
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3733
+ DialogPrimitive.Overlay,
3734
+ {
3735
+ "data-slot": "dialog-overlay",
3736
+ className: cn(
3737
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
3738
+ className
3739
+ ),
3740
+ ...props
3741
+ }
3742
+ );
3743
+ }
3744
+ function DialogContent({
3745
+ className,
3746
+ children,
3747
+ showCloseButton = true,
3748
+ ...props
3749
+ }) {
3750
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPortal, { "data-slot": "dialog-portal", children: [
3751
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogOverlay, {}),
3752
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3753
+ DialogPrimitive.Content,
3754
+ {
3755
+ "data-slot": "dialog-content",
3756
+ className: cn(
3757
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
3758
+ className
3759
+ ),
3760
+ ...props,
3761
+ children: [
3762
+ children,
3763
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3764
+ DialogPrimitive.Close,
3765
+ {
3766
+ "data-slot": "dialog-close",
3767
+ className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3768
+ children: [
3769
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react9.XIcon, {}),
3770
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "sr-only", children: "Close" })
3771
+ ]
3772
+ }
3773
+ )
3774
+ ]
3775
+ }
3776
+ )
3777
+ ] });
3778
+ }
3779
+
3780
+ // src/components/notifications/LoginScreen.tsx
3781
+ var import_jsx_runtime30 = require("react/jsx-runtime");
3782
+ function LoginScreen({
3783
+ slug,
3784
+ onSuccess,
3785
+ onError,
3786
+ className,
3787
+ isOpen,
3788
+ onClose,
3789
+ texts
3790
+ }) {
3791
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
3792
+ const [parentContent] = (0, import_react18.useAutoAnimate)();
3793
+ const [parentHeader] = (0, import_react18.useAutoAnimate)();
3794
+ const [email, setEmail] = (0, import_react17.useState)("");
3795
+ const [code, setCode] = (0, import_react17.useState)("");
3796
+ const [isEmailSent, setIsEmailSent] = (0, import_react17.useState)(false);
3797
+ const [error, setError] = (0, import_react17.useState)(null);
3798
+ const { mutateAsync: verifyUserEmail2, isPending: isVerifying } = useMutation3(
3799
+ rpcProvider.notifications.verifyUserEmail
3800
+ );
3801
+ const handleSendEmail = async (e) => {
3802
+ var _a2;
3803
+ e.preventDefault();
3804
+ setError(null);
3805
+ if (!email || !email.includes("@")) {
3806
+ setError((_a2 = texts.loginInvalidEmailError) != null ? _a2 : "");
3807
+ return;
3808
+ }
3809
+ try {
3810
+ await verifyUserEmail2({
3811
+ email,
3812
+ slug
3813
+ });
3814
+ setIsEmailSent(true);
3815
+ } catch (err) {
3816
+ const error2 = err instanceof Error ? err : new Error(texts.loginSendEmailError);
3817
+ setError(error2.message);
3818
+ onError == null ? void 0 : onError(error2);
3819
+ }
3820
+ };
3821
+ const handleVerifyCode = async (value) => {
3822
+ var _a2, _b2;
3823
+ setCode(value);
3824
+ setError(null);
3825
+ if (value.length === 6) {
3826
+ try {
3827
+ const response = await verifyUserEmail2({
3828
+ email: void 0,
3829
+ code: value,
3830
+ slug
3831
+ });
3832
+ if (response.ok && response.accessToken) {
3833
+ onSuccess == null ? void 0 : onSuccess(response.userId, response.accessToken);
3834
+ } else {
3835
+ setError((_a2 = texts.loginVerificationFailedError) != null ? _a2 : "");
3836
+ onError == null ? void 0 : onError(new Error(texts.loginVerificationFailedError));
3837
+ }
3838
+ } catch (err) {
3839
+ const error2 = err instanceof Error ? err : new Error(texts.loginVerifyCodeError);
3840
+ if (error2.message.includes("Invalid code")) {
3841
+ setError((_b2 = texts.loginInvalidCodeError) != null ? _b2 : error2.message);
3842
+ setCode("");
3843
+ return;
3844
+ }
3845
+ setError(error2.message);
3846
+ onError == null ? void 0 : onError(error2);
3847
+ setCode("");
3848
+ }
3849
+ }
3850
+ };
3851
+ const handleResendEmail = async () => {
3852
+ var _a2;
3853
+ setCode("");
3854
+ setError(null);
3855
+ if (!email || !slug) {
3856
+ setError((_a2 = texts.loginSlugRequiredError) != null ? _a2 : "");
3857
+ return;
3858
+ }
3859
+ try {
3860
+ await verifyUserEmail2({
3861
+ email,
3862
+ slug
3863
+ });
3864
+ } catch (err) {
3865
+ const error2 = err instanceof Error ? err : new Error(texts.loginResendEmailError);
3866
+ setError(error2.message);
3867
+ onError == null ? void 0 : onError(error2);
3868
+ }
3869
+ };
3870
+ const handleChangeEmail = () => {
3871
+ setIsEmailSent(false);
3872
+ setCode("");
3873
+ setError(null);
3874
+ };
3875
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Dialog, { open: isOpen, onOpenChange: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogContent, { className: "sm:max-w-[425px] min-h-[250px]", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col min-h-[250px] h-full", children: [
3876
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { ref: parentHeader, className: "flex items-start gap-2 mb-2", children: [
3877
+ isEmailSent && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3878
+ Button,
3879
+ {
3880
+ variant: "ghost",
3881
+ size: "icon-sm",
3882
+ onClick: () => {
3883
+ setIsEmailSent(false);
3884
+ },
3885
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react10.ArrowLeft, { className: "h-5 w-5" })
3886
+ }
3887
+ ),
3888
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CardTitle, { children: isEmailSent ? (_a = texts.loginCodeLabel) != null ? _a : "" : (_b = texts.loginTitle) != null ? _b : "" }) })
3889
+ ] }),
3890
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CardDescription, { className: "mb-4", children: isEmailSent ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
3891
+ (_c = texts.loginCodeSentMessage) != null ? _c : "",
3892
+ " ",
3893
+ email
3894
+ ] }) : (_d = texts.loginDescription) != null ? _d : "" }),
3895
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex-1 flex flex-col", children: !isEmailSent ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("form", { onSubmit: handleSendEmail, className: "flex flex-col flex-1", children: [
3896
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
3897
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label3, { htmlFor: "email", children: (_e = texts.loginEmailLabel) != null ? _e : "" }),
3898
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3899
+ Input,
3900
+ {
3901
+ id: "email",
3902
+ type: "email",
3903
+ placeholder: (_f = texts.loginEmailPlaceholder) != null ? _f : "",
3904
+ value: email,
3905
+ onChange: (e) => setEmail(e.target.value),
3906
+ required: true,
3907
+ disabled: isVerifying,
3908
+ "aria-invalid": error ? "true" : "false"
3909
+ }
3910
+ )
3911
+ ] }),
3912
+ error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3913
+ "div",
3914
+ {
3915
+ className: "text-sm text-destructive mt-2 mb-1",
3916
+ role: "alert",
3917
+ children: error
3918
+ }
3919
+ ),
3920
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "grow" }),
3921
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col items-start gap-0 pt-2", children: [
3922
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { type: "submit", size: "sm", disabled: isVerifying, children: isVerifying ? (_g = texts.loginSendingButton) != null ? _g : "" : (_h = texts.loginSendCodeButton) != null ? _h : "" }),
3923
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3924
+ Button,
3925
+ {
3926
+ type: "button",
3927
+ variant: "link",
3928
+ className: "ml-0 pl-0",
3929
+ size: "sm",
3930
+ onClick: () => {
3931
+ setIsEmailSent(true);
3932
+ },
3933
+ children: (_i = texts.loginIHaveCode) != null ? _i : ""
3934
+ }
3935
+ )
3936
+ ] })
3937
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3938
+ "form",
3939
+ {
3940
+ onSubmit: (e) => e.preventDefault(),
3941
+ className: "flex flex-col flex-1",
3942
+ children: [
3943
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
3944
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Label3, { children: (_j = texts.loginCodeLabel) != null ? _j : "" }),
3945
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3946
+ InputOTP,
3947
+ {
3948
+ maxLength: 6,
3949
+ value: code,
3950
+ onChange: handleVerifyCode,
3951
+ disabled: isVerifying,
3952
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(InputOTPGroup, { children: [
3953
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 0 }),
3954
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 1 }),
3955
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 2 }),
3956
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 3 }),
3957
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 4 }),
3958
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InputOTPSlot, { index: 5 })
3959
+ ] })
3960
+ }
3961
+ ),
3962
+ isVerifying && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Spinner, {})
3963
+ ] }),
3964
+ error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3965
+ "div",
3966
+ {
3967
+ className: "text-sm text-destructive mt-2 mb-1",
3968
+ role: "alert",
3969
+ children: error
3970
+ }
3971
+ ),
3972
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "grow" }),
3973
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col items-start gap-2 pt-2", children: [
3974
+ email.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3975
+ Button,
3976
+ {
3977
+ variant: "link",
3978
+ size: "sm",
3979
+ onClick: handleResendEmail,
3980
+ disabled: isVerifying,
3981
+ className: "flex-1 ml-0 pl-0",
3982
+ children: (_k = texts.loginResendCodeButton) != null ? _k : ""
3983
+ }
3984
+ ),
3985
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3986
+ Button,
3987
+ {
3988
+ variant: "link",
3989
+ size: "sm",
3990
+ onClick: handleChangeEmail,
3991
+ disabled: isVerifying,
3992
+ className: "flex-1 ml-0 pl-0",
3993
+ children: (_l = texts.loginChangeEmailButton) != null ? _l : ""
3994
+ }
3995
+ )
3996
+ ] })
3997
+ ]
3998
+ }
3999
+ ) })
4000
+ ] }) }) });
4001
+ }
4002
+
4003
+ // src/components/notifications/NotificationsComponentPublic.tsx
4004
+ var import_react20 = require("@formkit/auto-animate/react");
4005
+ var import_jsx_runtime31 = require("react/jsx-runtime");
4006
+ function reducer(state, action) {
4007
+ switch (action.type) {
4008
+ case "SET_IS_LOGGED_IN": {
4009
+ return {
4010
+ ...state,
4011
+ isLoggedIn: action.value
4012
+ };
4013
+ }
4014
+ case "SET_USER_ID": {
4015
+ return {
4016
+ ...state,
4017
+ userID: action.value
4018
+ };
4019
+ }
4020
+ case "SET_LOADING": {
4021
+ return {
4022
+ ...state,
4023
+ isLoading: action.value
4024
+ };
4025
+ }
4026
+ case "SET_PUBLIC_GROUPS": {
4027
+ return {
4028
+ ...state,
4029
+ groupsProvided: action.value,
4030
+ groups: state.groups.filter(
4031
+ (group) => {
4032
+ var _a;
4033
+ return ((_a = action.value) == null ? void 0 : _a.find((g) => g.id === group.id)) != null;
4034
+ }
4035
+ )
4036
+ };
4037
+ }
4038
+ case "SET_GROUPS": {
4039
+ const isDefaultOn = state.isLoggedIn == false || state.groupsProvided != null;
4040
+ const newGroupsWithIsOn = action.value.map((group) => {
4041
+ var _a, _b, _c;
4042
+ if (state.isLoggedIn == true) {
4043
+ return group;
4044
+ }
4045
+ return {
4046
+ ...group,
4047
+ isOn: (_c = (_b = (_a = state.groupsProvided) == null ? void 0 : _a.find((g) => g.id === group.id)) == null ? void 0 : _b.isOn) != null ? _c : isDefaultOn
4048
+ };
4049
+ });
4050
+ return {
4051
+ ...state,
4052
+ groups: newGroupsWithIsOn
4053
+ };
4054
+ }
4055
+ case "TOGGLE_GROUP": {
4056
+ const updatedGroups = state.groups.map((group) => {
4057
+ if (group.id === action.groupID) {
4058
+ return {
4059
+ ...group,
4060
+ isOn: !group.isOn
4061
+ };
4062
+ }
4063
+ return group;
4064
+ });
4065
+ return {
4066
+ ...state,
4067
+ wasChanged: true,
4068
+ groups: updatedGroups
4069
+ };
4070
+ }
4071
+ case "CHECK_ALL_GROUPS": {
4072
+ const updated = state.groups.map((group) => {
4073
+ return {
4074
+ ...group,
4075
+ isOn: true
4076
+ };
4077
+ });
4078
+ return {
4079
+ ...state,
4080
+ groups: updated,
4081
+ wasChanged: true
4082
+ };
4083
+ }
4084
+ case "SET_WAS_CHANGED":
4085
+ return {
4086
+ ...state,
4087
+ wasChanged: action.value
4088
+ };
4089
+ case "SET_IS_USER_GROUPS_UPDATED":
4090
+ return {
4091
+ ...state,
4092
+ isUserGroupsUpdated: action.value
4093
+ };
4094
+ case "RESET_UPDATE_STATE":
4095
+ return {
4096
+ ...state,
4097
+ wasChanged: false,
4098
+ isUserGroupsUpdated: true
4099
+ };
4100
+ case "SHOW_SETTINGS":
4101
+ return {
4102
+ ...state,
4103
+ showSettings: true
4104
+ };
4105
+ case "HIDE_SETTINGS":
4106
+ return {
4107
+ ...state,
4108
+ showSettings: false
4109
+ };
4110
+ default:
4111
+ return state;
4112
+ }
4113
+ }
4114
+ function NotificationsComponentPublic(props) {
4115
+ var _a, _b, _c, _d;
4116
+ const [parent] = (0, import_react20.useAutoAnimate)();
4117
+ let slug = (_b = (_a = props.slug) != null ? _a : getProjectID()) != null ? _b : typeof window !== "undefined" ? window.location.hostname : "";
4118
+ const { mutateAsync: updateUserGroups2, isPending: isUpdating } = useMutation3(
4119
+ rpcProvider.notifications.updateUserGroups
4120
+ );
4121
+ const { data: userInfo, refetch: refetchAccessToken } = (0, import_react_query6.useQuery)({
4122
+ queryKey: ["notifications_accessToken"],
4123
+ queryFn: () => {
4124
+ var _a2, _b2;
4125
+ if (typeof window !== "undefined") {
4126
+ return {
4127
+ accessToken: (_a2 = localStorage.getItem("notifications_accessToken")) != null ? _a2 : void 0,
4128
+ userID: (_b2 = localStorage.getItem("notifications_userID")) != null ? _b2 : void 0
4129
+ };
4130
+ }
4131
+ return void 0;
4132
+ }
4133
+ });
4134
+ const {
4135
+ data: groupsDownloaded,
4136
+ isPending: isGroupsDownloading,
4137
+ refetch: refetchGroups
4138
+ } = useQuery4(rpcProvider.notifications.getUserGroups, {
4139
+ slug,
4140
+ accessToken: userInfo == null ? void 0 : userInfo.accessToken
4141
+ });
4142
+ const [state, dispatch] = (0, import_react19.useReducer)(reducer, {
4143
+ isLoading: isGroupsDownloading,
4144
+ isUserGroupsUpdated: false,
4145
+ wasChanged: false,
4146
+ groupsProvided: props.groups,
4147
+ groups: [],
4148
+ showSettings: userInfo != null && props.isManaging == true,
4149
+ isLoggedIn: userInfo != null,
4150
+ userID: void 0
4151
+ });
4152
+ (0, import_react19.useEffect)(() => {
4153
+ dispatch({ type: "SET_LOADING", value: isUpdating || isGroupsDownloading });
4154
+ }, [isUpdating, isGroupsDownloading]);
4155
+ (0, import_react19.useEffect)(() => {
4156
+ dispatch({
4157
+ type: "SET_IS_LOGGED_IN",
4158
+ value: (userInfo == null ? void 0 : userInfo.accessToken) != null
4159
+ });
4160
+ dispatch({ type: "SET_USER_ID", value: userInfo == null ? void 0 : userInfo.userID });
4161
+ if ((userInfo == null ? void 0 : userInfo.accessToken) != null && props.isManaging == true) {
4162
+ dispatch({ type: "SHOW_SETTINGS" });
4163
+ }
4164
+ }, [userInfo, props.isManaging]);
4165
+ (0, import_react19.useEffect)(() => {
4166
+ if (groupsDownloaded == null) {
4167
+ return;
4168
+ }
4169
+ let newGroups = groupsDownloaded.groups.map((group) => {
4170
+ var _a2;
4171
+ let howOften = "rarely";
4172
+ switch (group.howOften) {
4173
+ case 0 /* RARELY */:
4174
+ howOften = "rarely";
4175
+ break;
4176
+ case 1 /* OFTEN */:
4177
+ howOften = "often";
4178
+ break;
4179
+ case 2 /* VERY_OFTEN */:
4180
+ howOften = "veryOften";
4181
+ break;
4182
+ }
4183
+ return {
4184
+ id: group.id,
4185
+ name: group.name,
4186
+ description: group.description,
4187
+ howOften,
4188
+ isOn: (_a2 = group.isOn) != null ? _a2 : void 0
4189
+ };
4190
+ });
4191
+ dispatch({ type: "SET_GROUPS", value: newGroups });
4192
+ }, [groupsDownloaded, isGroupsDownloading, props.groups]);
4193
+ const timeoutRef = (0, import_react19.useRef)(null);
4194
+ (0, import_react19.useEffect)(() => {
4195
+ dispatch({ type: "SET_PUBLIC_GROUPS", value: props.groups });
4196
+ }, [props.groups]);
4197
+ const {
4198
+ texts,
4199
+ showQRCode = false,
4200
+ showPhoneInput = false,
4201
+ hiddenGroupIds = [],
4202
+ className
4203
+ } = props;
4204
+ const mergedTexts = { ...DEFAULT_TEXTS, ...texts };
4205
+ async function updateGroups() {
4206
+ await updateUserGroups2({
4207
+ accessToken: userInfo == null ? void 0 : userInfo.accessToken,
4208
+ slug,
4209
+ userId: props.userID,
4210
+ groupIds: state.groups.filter((el) => el.isOn === true).map((el) => el.id)
4211
+ });
4212
+ dispatch({ type: "RESET_UPDATE_STATE" });
4213
+ if (timeoutRef.current) {
4214
+ clearTimeout(timeoutRef.current);
4215
+ }
4216
+ timeoutRef.current = setTimeout(() => {
4217
+ dispatch({ type: "SET_IS_USER_GROUPS_UPDATED", value: false });
4218
+ }, 2e3);
4219
+ }
4220
+ function toggleGroup(groupID) {
4221
+ dispatch({ type: "TOGGLE_GROUP", groupID });
4222
+ }
4223
+ function checkAllGroups() {
4224
+ dispatch({ type: "CHECK_ALL_GROUPS" });
4225
+ }
4226
+ function handleSettingsClick() {
4227
+ dispatch({ type: "SHOW_SETTINGS" });
4228
+ }
4229
+ function handleCloseSettings() {
4230
+ dispatch({ type: "HIDE_SETTINGS" });
4231
+ }
4232
+ function handleLogout() {
4233
+ localStorage.removeItem("notifications_accessToken");
4234
+ localStorage.removeItem("notifications_userID");
4235
+ refetchAccessToken();
4236
+ dispatch({ type: "SET_USER_ID", value: void 0 });
4237
+ dispatch({ type: "SET_IS_LOGGED_IN", value: false });
4238
+ dispatch({ type: "HIDE_SETTINGS" });
4239
+ }
4240
+ async function handleLoginSuccess(userID, accessToken) {
4241
+ if (typeof window !== "undefined") {
4242
+ localStorage.setItem("notifications_accessToken", accessToken);
4243
+ if (userID != null) {
4244
+ localStorage.setItem("notifications_userID", userID);
4245
+ }
4246
+ }
4247
+ dispatch({ type: "SET_USER_ID", value: userID });
4248
+ try {
4249
+ await refetchAccessToken();
4250
+ refetchGroups().then().catch().finally(() => {
4251
+ if (props.isManaging == true) {
4252
+ dispatch({ type: "SHOW_SETTINGS" });
4253
+ }
4254
+ });
4255
+ } catch (e) {
4256
+ console.log(`Error: ${e}`);
4257
+ }
4258
+ }
4259
+ (0, import_react19.useEffect)(() => {
4260
+ return () => {
4261
+ if (timeoutRef.current) {
4262
+ clearTimeout(timeoutRef.current);
4263
+ }
4264
+ };
4265
+ }, []);
4266
+ const isManagingEnabled = props.isManaging == true && state.userID != null && (userInfo == null ? void 0 : userInfo.accessToken) != null;
4267
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("main", { className: cn("bitsnap-checkout relative", className == null ? void 0 : className.container), children: [
4268
+ mergedTexts.title != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h1", { className: "text-2xl font-semibold text-black md:text-3xl lg:text-4xl xl:text-5xl dark:text-neutral-100", children: mergedTexts.title }),
4269
+ !state.showSettings && props.isManaging && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4270
+ Button,
4271
+ {
4272
+ onClick: handleSettingsClick,
4273
+ variant: "outline",
4274
+ size: "icon",
4275
+ className: "absolute bottom-6 right-6 z-50 h-12 w-12 rounded-full shadow-lg hover:shadow-xl md:bottom-8 md:right-8",
4276
+ "aria-label": "Settings",
4277
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react11.Settings, { className: "h-5 w-5" })
4278
+ }
4279
+ ),
4280
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4281
+ "div",
4282
+ {
4283
+ className: cn(
4284
+ "md:pt8 relative z-0 mt-6 overflow-hidden rounded-2xl bg-white px-3 pt-6 pb-3 md:px-5 md:pb-5 dark:bg-neutral-800",
4285
+ className == null ? void 0 : className.header
4286
+ ),
4287
+ children: state.showSettings ? (
4288
+ // Settings View
4289
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "space-y-6", children: state.isLoggedIn && // Managing Groups View (logged in)
4290
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4291
+ "div",
4292
+ {
4293
+ className: cn(
4294
+ "grid grid-cols-1 gap-3 lg:gap-6",
4295
+ isManagingEnabled ? "md:grid-cols-2" : ""
4296
+ ),
4297
+ children: [
4298
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: className == null ? void 0 : className.groupsContainer, children: [
4299
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4300
+ NotificationHeader,
4301
+ {
4302
+ projectName: props.projectName,
4303
+ projectLogo: props.projectLogo,
4304
+ projectLogoDark: props.projectLogoDark,
4305
+ description: mergedTexts.managingDescription,
4306
+ className,
4307
+ onLogout: handleLogout
4308
+ }
4309
+ ),
4310
+ isGroupsDownloading && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "flex justify-center items-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Spinner, {}) }),
4311
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4312
+ NotificationGroupsList,
4313
+ {
4314
+ groups: state.groups,
4315
+ hiddenGroupIds,
4316
+ isManaging: props.isManaging,
4317
+ onToggle: toggleGroup,
4318
+ onCheckAll: checkAllGroups,
4319
+ onUpdate: updateGroups,
4320
+ isUpdating,
4321
+ wasChanged: state.wasChanged,
4322
+ isUserGroupsUpdated: state.isUserGroupsUpdated,
4323
+ className,
4324
+ texts: mergedTexts
4325
+ }
4326
+ )
4327
+ ] }),
4328
+ isManagingEnabled && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4329
+ ManageMyData,
4330
+ {
4331
+ accessToken: (_c = userInfo.accessToken) != null ? _c : "",
4332
+ slug,
4333
+ userID: (_d = state.userID) != null ? _d : "",
4334
+ className,
4335
+ texts: mergedTexts
4336
+ }
4337
+ ),
4338
+ showQRCode != false && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4339
+ QRCodeSection,
4340
+ {
4341
+ showQRCode,
4342
+ isManaging: true,
4343
+ className,
4344
+ texts: mergedTexts
4345
+ }
4346
+ )
4347
+ ]
4348
+ }
4349
+ ) })
4350
+ ) : (
4351
+ // Default View (Form only)
4352
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: cn("grid grid-cols-1 gap-3 lg:gap-6"), children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4353
+ AddUserToGroups,
4354
+ {
4355
+ slug,
4356
+ onToggle: (id) => {
4357
+ dispatch({ type: "TOGGLE_GROUP", groupID: id });
4358
+ },
4359
+ onCheckAll: () => {
4360
+ dispatch({ type: "CHECK_ALL_GROUPS" });
4361
+ },
4362
+ onSuccess: (userAlreadyExists, userID, accessToken) => {
4363
+ if (accessToken != null) {
4364
+ handleLoginSuccess(userID, accessToken);
4365
+ }
4366
+ if (userAlreadyExists) {
4367
+ dispatch({ type: "SHOW_SETTINGS" });
4368
+ }
4369
+ },
4370
+ groups: state.groups,
4371
+ showPhoneInput,
4372
+ agreementText: mergedTexts.agreementText,
4373
+ className,
4374
+ texts: mergedTexts,
4375
+ wasChanged: state.wasChanged,
4376
+ isUpdating
4377
+ }
4378
+ ) })
4379
+ )
4380
+ }
4381
+ ),
4382
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4383
+ LoginScreen,
4384
+ {
4385
+ isOpen: state.showSettings && !state.isLoggedIn,
4386
+ slug,
4387
+ onSuccess: handleLoginSuccess,
4388
+ texts: mergedTexts,
4389
+ onClose: handleCloseSettings
4390
+ }
4391
+ )
4392
+ ] });
4393
+ }
4394
+ function Wrapper3(props) {
4395
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RpcProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(NotificationsComponentPublic, { ...props }) });
4396
+ }
4397
+ var NotificationsComponentPublic_default = Wrapper3;
2122
4398
  // Annotate the CommonJS export names for ESM import in node:
2123
4399
  0 && (module.exports = {
2124
4400
  ApplePayButton,
2125
4401
  Bitsnap,
2126
4402
  BitsnapCheckout,
2127
4403
  GooglePayButton,
4404
+ NotificationsComponent,
2128
4405
  createCheckout,
2129
4406
  createPaymentURL,
2130
4407
  getReferenceIfPossible,