@crayonscodetech/cms-sdk 1.0.7 → 1.0.9

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.cjs CHANGED
@@ -1,29 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- //#region \0rolldown/runtime.js
3
- var __create = Object.create;
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getProtoOf = Object.getPrototypeOf;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
- get: ((k) => from[k]).bind(null, key),
14
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
- });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
- value: mod,
21
- enumerable: true
22
- }) : target, mod));
23
- //#endregion
24
- let react = require("react");
25
- react = __toESM(react);
26
- let lucide_react = require("lucide-react");
27
2
  //#region src/constants/pageTypes.ts
28
3
  const pageTypes = [
29
4
  "home",
@@ -103,9 +78,24 @@ const MEDIA = {
103
78
  ".webm",
104
79
  ".ogg"
105
80
  ],
106
- MAX_IMAGE_SIZE: 5 * 1024 * 1024
81
+ MAX_IMAGE_SIZE: 5242880
107
82
  };
108
83
  //#endregion
84
+ //#region src/types/contact.ts
85
+ /** Attachment caps enforced by the API; mirrored here to fail fast client-side. */
86
+ const MAX_CONTACT_ATTACHMENTS = 3;
87
+ const MAX_CONTACT_ATTACHMENTS_TOTAL_BYTES = 4194304;
88
+ const CONTACT_ATTACHMENT_MIME_ALLOWLIST = [
89
+ "application/pdf",
90
+ "image/png",
91
+ "image/jpeg",
92
+ "image/webp",
93
+ "image/gif",
94
+ "text/plain",
95
+ "application/msword",
96
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
97
+ ];
98
+ //#endregion
109
99
  //#region src/core/client.ts
110
100
  var CmsError = class extends Error {
111
101
  message;
@@ -122,9 +112,9 @@ var CmsError = class extends Error {
122
112
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
123
113
  function createCmsClient(config) {
124
114
  const { baseUrl, defaultOptions = {} } = config;
125
- async function cmsFetch(endpoint, options = {}, retries = 2) {
115
+ async function cmsFetch(endpoint, options = {}) {
126
116
  const url = `${baseUrl}${endpoint}`;
127
- const { revalidate = CACHE.NO_CACHE, tags, ...rest } = {
117
+ const { revalidate = CACHE.NO_CACHE, tags, retries = 1, ...rest } = {
128
118
  ...defaultOptions,
129
119
  ...options
130
120
  };
@@ -135,12 +125,9 @@ function createCmsClient(config) {
135
125
  ...tags && { tags }
136
126
  }
137
127
  };
138
- let lastError = null;
139
128
  for (let attempt = 0; attempt <= retries; attempt++) try {
140
129
  const response = await fetch(url, fetchConfig);
141
130
  if (!response.ok) {
142
- const errorMsg = `API request failed: ${response.status} ${url}`;
143
- console.error(errorMsg);
144
131
  if (attempt < retries && [
145
132
  502,
146
133
  503,
@@ -149,31 +136,29 @@ function createCmsClient(config) {
149
136
  await sleep(Math.pow(2, attempt) * 1e3);
150
137
  continue;
151
138
  }
152
- return null;
139
+ let errorMsg = `API request failed: ${response.status} ${url}`;
140
+ try {
141
+ const body = await response.json();
142
+ if (body?.message) errorMsg = body.message;
143
+ } catch {}
144
+ throw new CmsError(errorMsg, response.status, url);
153
145
  }
146
+ if (response.status === 204) return null;
154
147
  const result = await response.json();
155
148
  return result.data ?? result;
156
149
  } catch (error) {
157
- lastError = error instanceof Error ? error : new Error(String(error));
158
- console.error(`API request error (attempt ${attempt + 1}/${retries + 1}): ${url}`, lastError);
150
+ if (error instanceof CmsError) throw error;
159
151
  if (attempt < retries) {
160
152
  await sleep(Math.pow(2, attempt) * 1e3);
161
153
  continue;
162
154
  }
155
+ throw new CmsError(`Request failed: ${error instanceof Error ? error.message : String(error)}`, void 0, url);
163
156
  }
164
- return null;
165
- }
166
- async function cmsFetchPaginated(endpoint, options = {}, retries = 2) {
167
- const emptyResponse = {
168
- data: [],
169
- pagination: {
170
- page: 1,
171
- limit: PAGINATION.DEFAULT_LIMIT,
172
- total: 0
173
- }
174
- };
157
+ throw new CmsError(`Request failed after ${retries + 1} attempts`, void 0, url);
158
+ }
159
+ async function cmsFetchPaginated(endpoint, options = {}) {
175
160
  const url = `${baseUrl}${endpoint}`;
176
- const { revalidate = CACHE.NO_CACHE, tags, ...rest } = {
161
+ const { revalidate = CACHE.NO_CACHE, tags, retries = 1, ...rest } = {
177
162
  ...defaultOptions,
178
163
  ...options
179
164
  };
@@ -187,7 +172,6 @@ function createCmsClient(config) {
187
172
  for (let attempt = 0; attempt <= retries; attempt++) try {
188
173
  const response = await fetch(url, fetchConfig);
189
174
  if (!response.ok) {
190
- console.error(`API request failed: ${response.status} ${url}`);
191
175
  if (attempt < retries && [
192
176
  502,
193
177
  503,
@@ -196,23 +180,31 @@ function createCmsClient(config) {
196
180
  await sleep(Math.pow(2, attempt) * 1e3);
197
181
  continue;
198
182
  }
199
- return emptyResponse;
183
+ let errorMsg = `API request failed: ${response.status} ${url}`;
184
+ try {
185
+ const body = await response.json();
186
+ if (body?.message) errorMsg = body.message;
187
+ } catch {}
188
+ throw new CmsError(errorMsg, response.status, url);
200
189
  }
201
190
  return await response.json();
202
191
  } catch (error) {
203
- console.error(`API request error (attempt ${attempt + 1}/${retries + 1}): ${url}`, error);
192
+ if (error instanceof CmsError) throw error;
204
193
  if (attempt < retries) {
205
194
  await sleep(Math.pow(2, attempt) * 1e3);
206
195
  continue;
207
196
  }
197
+ throw new CmsError(`Request failed: ${error instanceof Error ? error.message : String(error)}`, void 0, url);
208
198
  }
209
- return emptyResponse;
199
+ throw new CmsError(`Request failed after ${retries + 1} attempts`, void 0, url);
210
200
  }
211
201
  function buildQueryString(params) {
212
202
  const query = new URLSearchParams();
213
203
  Object.entries(params).forEach(([key, value]) => {
214
- if (value !== void 0 && value !== null) if (Array.isArray(value)) value.forEach((v) => query.append(key, String(v)));
215
- else query.append(key, String(value));
204
+ if (value !== void 0 && value !== null) {
205
+ if (Array.isArray(value)) value.forEach((v) => query.append(key, String(v)));
206
+ else query.append(key, String(value));
207
+ }
216
208
  });
217
209
  return query.toString();
218
210
  }
@@ -246,17 +238,12 @@ function createCmsClient(config) {
246
238
  });
247
239
  }
248
240
  async function fetchPageByUrl(siteId, urlPath, options) {
249
- try {
250
- const targetUrl = urlPath === "/" || urlPath === "" ? "/" : `/${urlPath.replace(/^\/|\/$/g, "")}`;
251
- return await cmsFetch(`/api/public/cms/${siteId}/page/by-url/?url=${encodeURIComponent(targetUrl)}`, {
252
- revalidate: CACHE.SHORT,
253
- tags: ["pages", `page-${targetUrl || "root"}`],
254
- ...options
255
- });
256
- } catch (error) {
257
- console.error(`Error in fetchPageByUrl for ${urlPath}:`, error);
258
- return null;
259
- }
241
+ const targetUrl = urlPath === "/" || urlPath === "" ? "/" : `/${urlPath.replace(/^\/|\/$/g, "")}`;
242
+ return cmsFetch(`/api/public/cms/${siteId}/page/by-url/?url=${encodeURIComponent(targetUrl)}`, {
243
+ revalidate: CACHE.SHORT,
244
+ tags: ["pages", `page-${targetUrl || "root"}`],
245
+ ...options
246
+ });
260
247
  }
261
248
  function fetchAboutUs(siteId, options) {
262
249
  return cmsFetch(`/api/public/cms/${siteId}/about-us/`, {
@@ -382,14 +369,73 @@ function createCmsClient(config) {
382
369
  ...options
383
370
  });
384
371
  }
385
- async function submitContactForm(siteId, payload, options) {
386
- return cmsFetch(`/api/public/cms/${siteId}/contact/`, {
387
- method: "POST",
388
- headers: { "Content-Type": "application/json" },
389
- body: JSON.stringify(payload),
390
- revalidate: CACHE.NO_CACHE,
391
- ...options
392
- });
372
+ /**
373
+ * Public Turnstile settings for the site's contact form.
374
+ *
375
+ * Call this before rendering the form: when `turnstile.enabled` is true the
376
+ * widget must be rendered with `turnstile.site_key` and its token passed to
377
+ * `submitContactForm`, or every submission is rejected.
378
+ */
379
+ function fetchContactConfig(siteId, options) {
380
+ return cmsFetch(`/api/public/cms/${siteId}/contact-config/`, {
381
+ revalidate: CACHE.SHORT,
382
+ tags: ["contact-config"],
383
+ ...options
384
+ });
385
+ }
386
+ /**
387
+ * Submit the contact form.
388
+ *
389
+ * Unlike the read methods, this THROWS `CmsError` on a rejection rather than
390
+ * returning null — a form needs to tell "captcha failed, reset the widget"
391
+ * (403) apart from "rate limited" (429) and a network blip, and a single
392
+ * `null` cannot carry that. `error.status` holds the HTTP status.
393
+ *
394
+ * Pass `attachments` to send files; the request then goes out as multipart
395
+ * instead of JSON. Caps are enforced server-side and pre-checked here.
396
+ */
397
+ async function submitContactForm(siteId, payload, attachments, options) {
398
+ const url = `${baseUrl}/api/public/cms/${siteId}/contact/`;
399
+ if (attachments?.length) {
400
+ if (attachments.length > 3) throw new CmsError(`At most 3 attachments are allowed`, 400, url);
401
+ if (attachments.reduce((sum, f) => sum + f.size, 0) > 4194304) throw new CmsError("Attachments exceed the 4 MiB total size limit", 400, url);
402
+ for (const f of attachments) if (!CONTACT_ATTACHMENT_MIME_ALLOWLIST.includes(f.type)) throw new CmsError(`Attachment type not allowed: ${f.type || "unknown"}`, 400, url);
403
+ }
404
+ let body;
405
+ const headers = {};
406
+ if (attachments?.length) {
407
+ const form = new FormData();
408
+ for (const [key, value] of Object.entries(payload)) if (value !== void 0 && value !== null) form.append(key, String(value));
409
+ for (const file of attachments) form.append("attachments", file, file.name);
410
+ body = form;
411
+ } else {
412
+ headers["Content-Type"] = "application/json";
413
+ body = JSON.stringify(payload);
414
+ }
415
+ let response;
416
+ try {
417
+ response = await fetch(url, {
418
+ ...options,
419
+ method: "POST",
420
+ headers: {
421
+ ...headers,
422
+ ...options?.headers
423
+ },
424
+ body
425
+ });
426
+ } catch (error) {
427
+ throw new CmsError(error instanceof Error ? error.message : "Network request failed", void 0, url);
428
+ }
429
+ if (!response.ok) {
430
+ let message = `Request failed with status ${response.status}`;
431
+ try {
432
+ const parsed = await response.json();
433
+ if (parsed?.message) message = parsed.message;
434
+ } catch {}
435
+ throw new CmsError(message, response.status, url);
436
+ }
437
+ const result = await response.json();
438
+ return result.data ?? result;
393
439
  }
394
440
  function fetchFaqs(siteId, params, options) {
395
441
  return cmsFetchPaginated(`/api/public/cms/${siteId}/faqs/?${buildQueryString({
@@ -430,8 +476,9 @@ function createCmsClient(config) {
430
476
  referrer
431
477
  }),
432
478
  revalidate: CACHE.NO_CACHE,
433
- tags: ["redirects", "redirect-404-logs"]
434
- }, 0);
479
+ tags: ["redirects", "redirect-404-logs"],
480
+ retries: 0
481
+ });
435
482
  }
436
483
  function fetchStoreSettings(siteId, options) {
437
484
  return cmsFetch(`/api/public/store/${siteId}/settings/`, {
@@ -511,6 +558,7 @@ function createCmsClient(config) {
511
558
  headers: { "Content-Type": "application/json" },
512
559
  body: JSON.stringify(payload),
513
560
  revalidate: CACHE.NO_CACHE,
561
+ retries: 0,
514
562
  ...options
515
563
  });
516
564
  }
@@ -546,6 +594,70 @@ function createCmsClient(config) {
546
594
  ...options
547
595
  });
548
596
  }
597
+ const SITEMAP_ROUTES = {
598
+ blogs: {
599
+ segment: "blogs",
600
+ store: false
601
+ },
602
+ pages: {
603
+ segment: "pages",
604
+ store: false
605
+ },
606
+ services: {
607
+ segment: "services",
608
+ store: false
609
+ },
610
+ events: {
611
+ segment: "events",
612
+ store: false
613
+ },
614
+ albums: {
615
+ segment: "albums",
616
+ store: false
617
+ },
618
+ "team-members": {
619
+ segment: "team-members",
620
+ store: false
621
+ },
622
+ "team-categories": {
623
+ segment: "team-categories",
624
+ store: false
625
+ },
626
+ "brand-groups": {
627
+ segment: "brand-groups",
628
+ store: false
629
+ },
630
+ products: {
631
+ segment: "products",
632
+ store: true
633
+ },
634
+ collections: {
635
+ segment: "collections",
636
+ store: true
637
+ },
638
+ "product-categories": {
639
+ segment: "categories",
640
+ store: true
641
+ },
642
+ "product-brands": {
643
+ segment: "brands",
644
+ store: true
645
+ }
646
+ };
647
+ /**
648
+ * Fetch any sitemap resource. Returns slug/url, title/name, image (where
649
+ * the content type has one) and `updatedAt` for `lastModified`.
650
+ */
651
+ function fetchSitemap(siteId, resource, params = {}, options) {
652
+ const { segment, store } = SITEMAP_ROUTES[resource];
653
+ const namespace = store ? "store" : "cms";
654
+ const query = buildQueryString(params);
655
+ return cmsFetchPaginated(`/api/public/${namespace}/${siteId}/sitemap/${segment}/${query ? `?${query}` : ""}`, {
656
+ revalidate: CACHE.STATIC,
657
+ tags: ["sitemap", `sitemap-${resource}`],
658
+ ...options
659
+ });
660
+ }
549
661
  return {
550
662
  LIST_DEFAULT_LIMIT,
551
663
  fetchHeader,
@@ -575,6 +687,7 @@ function createCmsClient(config) {
575
687
  resolveRedirect,
576
688
  reportRedirect404,
577
689
  submitContactForm,
690
+ fetchContactConfig,
578
691
  fetchStoreSettings,
579
692
  fetchProductCategories,
580
693
  fetchProductBrands,
@@ -585,6 +698,7 @@ function createCmsClient(config) {
585
698
  fetchCollectionDetail,
586
699
  fetchCollectionDetailById,
587
700
  placeOrder,
701
+ fetchSitemap,
588
702
  fetchSitemapBlogs,
589
703
  fetchSitemapPages,
590
704
  fetchSitemapProducts,
@@ -595,134 +709,125 @@ function createCmsClient(config) {
595
709
  };
596
710
  }
597
711
  //#endregion
598
- //#region src/components/Icon.tsx
599
- /**
600
- * A exhaustive map of Lucide icons commonly used in the CMS.
601
- */
602
- const ICON_MAP = {
603
- Home: lucide_react.Home,
604
- User: lucide_react.User,
605
- Settings: lucide_react.Settings,
606
- Mail: lucide_react.Mail,
607
- Bell: lucide_react.Bell,
608
- Calendar: lucide_react.Calendar,
609
- Star: lucide_react.Star,
610
- Heart: lucide_react.Heart,
611
- Bookmark: lucide_react.Bookmark,
612
- Search: lucide_react.Search,
613
- Filter: lucide_react.Filter,
614
- Download: lucide_react.Download,
615
- Upload: lucide_react.Upload,
616
- Trash: lucide_react.Trash,
617
- Edit: lucide_react.Edit,
618
- Plus: lucide_react.Plus,
619
- Minus: lucide_react.Minus,
620
- Check: lucide_react.Check,
621
- X: lucide_react.X,
622
- ChevronRight: lucide_react.ChevronRight,
623
- ChevronLeft: lucide_react.ChevronLeft,
624
- ChevronUp: lucide_react.ChevronUp,
625
- ChevronDown: lucide_react.ChevronDown,
626
- ChevronsUpDown: lucide_react.ChevronsUpDown,
627
- ArrowRight: lucide_react.ArrowRight,
628
- ArrowLeft: lucide_react.ArrowLeft,
629
- ArrowUp: lucide_react.ArrowUp,
630
- ArrowDown: lucide_react.ArrowDown,
631
- File: lucide_react.File,
632
- Folder: lucide_react.Folder,
633
- Image: lucide_react.Image,
634
- Video: lucide_react.Video,
635
- Music: lucide_react.Music,
636
- Lock: lucide_react.Lock,
637
- Unlock: lucide_react.Unlock,
638
- Eye: lucide_react.Eye,
639
- EyeOff: lucide_react.EyeOff,
640
- Sun: lucide_react.Sun,
641
- Moon: lucide_react.Moon,
642
- Cloud: lucide_react.Cloud,
643
- Zap: lucide_react.Zap,
644
- Activity: lucide_react.Activity,
645
- TrendingUp: lucide_react.TrendingUp,
646
- TrendingDown: lucide_react.TrendingDown,
647
- BarChart: lucide_react.BarChart,
648
- PieChart: lucide_react.PieChart,
649
- Database: lucide_react.Database,
650
- Server: lucide_react.Server,
651
- Wifi: lucide_react.Wifi,
652
- Battery: lucide_react.Battery,
653
- Camera: lucide_react.Camera,
654
- Mic: lucide_react.Mic,
655
- Phone: lucide_react.Phone,
656
- MessageSquare: lucide_react.MessageSquare,
657
- Send: lucide_react.Send,
658
- Share: lucide_react.Share,
659
- Link: lucide_react.Link,
660
- ExternalLink: lucide_react.ExternalLink,
661
- Globe: lucide_react.Globe,
662
- MapPin: lucide_react.MapPin,
663
- Users: lucide_react.Users,
664
- ShoppingCart: lucide_react.ShoppingCart,
665
- CreditCard: lucide_react.CreditCard,
666
- Package: lucide_react.Package,
667
- Briefcase: lucide_react.Briefcase,
668
- Target: lucide_react.Target,
669
- Flag: lucide_react.Flag,
670
- Clipboard: lucide_react.Clipboard,
671
- List: lucide_react.List,
672
- Grid: lucide_react.Grid,
673
- Layout: lucide_react.Layout,
674
- Layers: lucide_react.Layers,
675
- Copy: lucide_react.Copy,
676
- Save: lucide_react.Save,
677
- RefreshCw: lucide_react.RefreshCw,
678
- Maximize: lucide_react.Maximize,
679
- Code: lucide_react.Code,
680
- AlertCircle: lucide_react.AlertCircle,
681
- Info: lucide_react.Info,
682
- HelpCircle: lucide_react.HelpCircle,
683
- CheckCircle: lucide_react.CheckCircle,
684
- XCircle: lucide_react.XCircle,
685
- Menu: lucide_react.Menu,
686
- MoreVertical: lucide_react.MoreVertical,
687
- MoreHorizontal: lucide_react.MoreHorizontal,
688
- PlayCircle: lucide_react.PlayCircle,
689
- PauseCircle: lucide_react.PauseCircle,
690
- LogIn: lucide_react.LogIn,
691
- LogOut: lucide_react.LogOut,
692
- UserPlus: lucide_react.UserPlus,
693
- UserMinus: lucide_react.UserMinus,
694
- Tag: lucide_react.Tag,
695
- Award: lucide_react.Award,
696
- Gift: lucide_react.Gift,
697
- Truck: lucide_react.Truck,
698
- Clock: lucide_react.Clock,
699
- Handshake: lucide_react.Handshake,
700
- Stethoscope: lucide_react.Stethoscope,
701
- Microscope: lucide_react.Microscope,
702
- GraduationCap: lucide_react.GraduationCap,
703
- BookOpen: lucide_react.BookOpen,
704
- Building2: lucide_react.Building2,
705
- Trees: lucide_react.Trees,
706
- HeartHandshake: lucide_react.HeartHandshake,
707
- Brain: lucide_react.Brain,
708
- Lightbulb: lucide_react.Lightbulb
709
- };
710
- /**
711
- * Dynamic Icon component that renders Lucide icons by name.
712
- * Useful for CMS-driven icons where names are stored as strings.
713
- */
714
- function Icon({ name, fallback = "HelpCircle", ...props }) {
715
- const IconComponent = ICON_MAP[name] ?? ICON_MAP[fallback] ?? lucide_react.HelpCircle;
716
- return react.default.createElement(IconComponent, props);
717
- }
712
+ //#region src/types/icon.ts
713
+ const ICON_NAMES = [
714
+ "Home",
715
+ "User",
716
+ "Settings",
717
+ "Mail",
718
+ "Bell",
719
+ "Calendar",
720
+ "Star",
721
+ "Heart",
722
+ "Bookmark",
723
+ "Search",
724
+ "Filter",
725
+ "Download",
726
+ "Upload",
727
+ "Trash",
728
+ "Edit",
729
+ "Plus",
730
+ "Minus",
731
+ "Check",
732
+ "X",
733
+ "ChevronRight",
734
+ "ChevronLeft",
735
+ "ChevronUp",
736
+ "ChevronDown",
737
+ "ChevronsUpDown",
738
+ "ArrowRight",
739
+ "ArrowLeft",
740
+ "ArrowUp",
741
+ "ArrowDown",
742
+ "File",
743
+ "Folder",
744
+ "Image",
745
+ "Video",
746
+ "Music",
747
+ "Lock",
748
+ "Unlock",
749
+ "Eye",
750
+ "EyeOff",
751
+ "Sun",
752
+ "Moon",
753
+ "Cloud",
754
+ "Zap",
755
+ "Activity",
756
+ "TrendingUp",
757
+ "TrendingDown",
758
+ "BarChart",
759
+ "PieChart",
760
+ "Database",
761
+ "Server",
762
+ "Wifi",
763
+ "Battery",
764
+ "Camera",
765
+ "Mic",
766
+ "Phone",
767
+ "MessageSquare",
768
+ "Send",
769
+ "Share",
770
+ "Link",
771
+ "ExternalLink",
772
+ "Globe",
773
+ "MapPin",
774
+ "Users",
775
+ "ShoppingCart",
776
+ "CreditCard",
777
+ "Package",
778
+ "Briefcase",
779
+ "Target",
780
+ "Flag",
781
+ "Clipboard",
782
+ "List",
783
+ "Grid",
784
+ "Layout",
785
+ "Layers",
786
+ "Copy",
787
+ "Save",
788
+ "RefreshCw",
789
+ "Maximize",
790
+ "Code",
791
+ "AlertCircle",
792
+ "Info",
793
+ "HelpCircle",
794
+ "CheckCircle",
795
+ "XCircle",
796
+ "Menu",
797
+ "MoreVertical",
798
+ "MoreHorizontal",
799
+ "PlayCircle",
800
+ "PauseCircle",
801
+ "LogIn",
802
+ "LogOut",
803
+ "UserPlus",
804
+ "UserMinus",
805
+ "Tag",
806
+ "Award",
807
+ "Gift",
808
+ "Truck",
809
+ "Clock",
810
+ "Handshake",
811
+ "Stethoscope",
812
+ "Microscope",
813
+ "GraduationCap",
814
+ "BookOpen",
815
+ "Building2",
816
+ "Trees",
817
+ "HeartHandshake",
818
+ "Brain",
819
+ "Lightbulb"
820
+ ];
718
821
  //#endregion
719
822
  exports.ANIMATION = ANIMATION;
720
823
  exports.CACHE = CACHE;
824
+ exports.CONTACT_ATTACHMENT_MIME_ALLOWLIST = CONTACT_ATTACHMENT_MIME_ALLOWLIST;
721
825
  exports.CONTACT_SUBJECTS = CONTACT_SUBJECTS;
722
826
  exports.CmsError = CmsError;
723
827
  exports.HTTP_STATUS = HTTP_STATUS;
724
- exports.ICON_MAP = ICON_MAP;
725
- exports.Icon = Icon;
828
+ exports.ICON_NAMES = ICON_NAMES;
829
+ exports.MAX_CONTACT_ATTACHMENTS = MAX_CONTACT_ATTACHMENTS;
830
+ exports.MAX_CONTACT_ATTACHMENTS_TOTAL_BYTES = MAX_CONTACT_ATTACHMENTS_TOTAL_BYTES;
726
831
  exports.MEDIA = MEDIA;
727
832
  exports.PAGINATION = PAGINATION;
728
833
  exports.SEARCH = SEARCH;