@openeventkit/event-site 2.1.41 → 2.1.42

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/README.md CHANGED
@@ -120,6 +120,14 @@ MacOS users might also encounter some errors, for more info check [node-gyp](htt
120
120
 
121
121
  This plugin uses [gatsby-plugin-purgecss](https://www.gatsbyjs.org/packages/gatsby-plugin-purgecss/) and [bulma](https://bulma.io/). The bulma builds are usually ~170K but reduced 90% by purgecss.
122
122
 
123
+ ## Dependency Notes
124
+
125
+ ### cross-fetch Resolution
126
+
127
+ The `cross-fetch` package is pinned to version 3.1.8 via `resolutions`/`overrides` in package.json to fix a "Failed to execute 'fetch' on 'Window': Illegal invocation" error that occurs with `@react-pdf/renderer` when loading custom fonts.
128
+
129
+ See: https://github.com/diegomura/react-pdf/issues/3034
130
+
123
131
  # CONTRIBUTING
124
132
 
125
133
  Contributions are always welcome, no matter how large or small. Before contributing,
package/gatsby-browser.js CHANGED
@@ -17,6 +17,9 @@ import "./src/styles/bulma.scss";
17
17
  import "./src/styles/style.scss";
18
18
  // import global fontawesome
19
19
  import "./src/utils/fontAwesome";
20
+ // PDF font registration
21
+ import { initializePdfFonts } from "./src/utils/pdfFonts";
22
+ import fontVariable from "./static/fonts/nunito-sans/NunitoSans-Variable.ttf";
20
23
 
21
24
  import colors from "data/colors.json";
22
25
  import marketingSettings from "data/marketing-settings.json";
@@ -29,6 +32,18 @@ export const onClientEntry = () => {
29
32
  // smooth scroll polyfill needed for Safari
30
33
  smoothscroll.polyfill();
31
34
 
35
+ // Initialize PDF fonts for certificate and receipt generation
36
+ // Import site settings to check for custom fonts
37
+ import("./src/content/site-settings/index.json").then((siteSettings) => {
38
+ initializePdfFonts({
39
+ defaultFontFile: fontVariable,
40
+ siteFont: siteSettings.siteFont
41
+ });
42
+ }).catch(() => {
43
+ // Fall back to default font if site settings can't be loaded
44
+ initializePdfFonts({ defaultFontFile: fontVariable });
45
+ });
46
+
32
47
  // show cookie consent only if google tag manager was deferred loaded
33
48
  // see gatsby-google-tag-manager-plugin in gatsby-config
34
49
  if (getEnvVariable(GOOGLE_TAGMANAGER_ID)) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openeventkit/event-site",
3
3
  "description": "Event Site",
4
- "version": "2.1.41",
4
+ "version": "2.1.42",
5
5
  "author": "Tipit LLC",
6
6
  "dependencies": {
7
7
  "@emotion/server": "^11.11.0",
@@ -87,7 +87,7 @@
87
87
  "markdown-it": "^12.0.0",
88
88
  "moment": "^2.27.0",
89
89
  "moment-timezone": "^0.5.31",
90
- "my-orders-tickets-widget": "1.0.6",
90
+ "my-orders-tickets-widget": "1.0.8",
91
91
  "object.assign": "^4.1.5",
92
92
  "openstack-uicore-foundation": "4.2.16",
93
93
  "path-browserify": "^1.0.1",
@@ -135,7 +135,7 @@
135
135
  "stream-browserify": "^3.0.0",
136
136
  "stream-chat": "^2.7.2",
137
137
  "stream-chat-react": "3.1.7",
138
- "summit-registration-lite": "6.0.5",
138
+ "summit-registration-lite": "6.0.6",
139
139
  "superagent": "8.0.9",
140
140
  "sweetalert2": "^11.11.1",
141
141
  "upcoming-events-widget": "3.0.7",
@@ -161,7 +161,7 @@
161
161
  "gatsby-clean": "gatsby clean",
162
162
  "start": "npm run develop",
163
163
  "build": "NODE_ENV=production NODE_OPTIONS=--max-old-space-size=10240 cross-env node --trace-warnings node_modules/.bin/gatsby build --log-pages",
164
- "develop": "NODE_OPTIONS=--max-old-space-size=8192 npm run gatsby-clean && node --trace-warnings node_modules/.bin/gatsby develop --S -H 0.0.0.0",
164
+ "develop": "NODE_OPTIONS=--max-old-space-size=8192 npm run gatsby-clean && NODE_OPTIONS=--max-old-space-size=8192 node --trace-warnings node_modules/.bin/gatsby develop --S -H 0.0.0.0",
165
165
  "format": "prettier --trailing-comma es5 --no-semi --single-quote --write \"{gatsby-*.js,src/**/*.js}\"",
166
166
  "test": "jest",
167
167
  "update-libs": "yarn upgrade live-event-widget openstack-uicore-foundation schedule-lite simple-chat-widget speakers-widget attendee-to-attendee-widget"
@@ -225,5 +225,11 @@
225
225
  "setupFilesAfterEnv": [
226
226
  "<rootDir>/jest.setup.js"
227
227
  ]
228
+ },
229
+ "resolutions": {
230
+ "cross-fetch": "3.1.8"
231
+ },
232
+ "overrides": {
233
+ "cross-fetch": "3.1.8"
228
234
  }
229
235
  }
@@ -103,14 +103,7 @@ export const getEventStreamingInfoById = (
103
103
  customErrorHandler,
104
104
  {},
105
105
  true)
106
- (params)(dispatch).then((payload) => {
107
- return payload
108
- }).catch(e => {
109
- dispatch(createAction(GET_EVENT_DATA_ERROR)(e));
110
- console.log('ERROR: ', e);
111
- clearAccessToken();
112
- return (e);
113
- });
106
+ (params)(dispatch);
114
107
  };
115
108
 
116
109
  /**
@@ -1,94 +1,12 @@
1
1
  import React from "react";
2
- import { Document, Page, Text, View, Image, StyleSheet, Font, pdf } from "@react-pdf/renderer";
2
+ import { Document, Page, Text, View, Image, StyleSheet, pdf } from "@react-pdf/renderer";
3
3
 
4
- import fontVariable from "../../../static/fonts/nunito-sans/NunitoSans-Variable.ttf";
4
+ import {
5
+ getRegisteredFontFamily,
6
+ registerCustomFont
7
+ } from "../../utils/pdfFonts";
5
8
  import { USER_ROLES } from './constants';
6
9
 
7
- const registerDefaultFont = () => {
8
- try {
9
- Font.register({
10
- family: "Nunito Sans",
11
- fonts: [
12
- {
13
- src: fontVariable,
14
- fontWeight: "normal"
15
- },
16
- {
17
- src: fontVariable,
18
- fontWeight: "bold"
19
- },
20
- ]
21
- });
22
- return true;
23
- } catch (error) {
24
- console.error("Failed to register default font:", error);
25
- return false;
26
- }
27
- };
28
-
29
- // helper to convert relative font paths to absolute URLs
30
- const getFontUrl = (fontPath) => {
31
- if (!fontPath) return null;
32
-
33
- if (fontPath.startsWith("http://") || fontPath.startsWith("https://")) {
34
- return fontPath;
35
- }
36
-
37
- // For relative paths, prepend the origin
38
- // Site settings fonts are served from /fonts/ (not /static/fonts/)
39
- if (typeof window !== "undefined") {
40
- // Remove /static prefix if present since fonts are served at root /fonts/
41
- const cleanPath = fontPath.replace("/static/fonts/", "/fonts/");
42
- return `${window.location.origin}${cleanPath}`;
43
- }
44
-
45
- return fontPath;
46
- };
47
-
48
- // register custom font from site settings if available
49
- const registerCustomFont = (siteFont) => {
50
- if (!siteFont || !siteFont.fontFamily || !siteFont.regularFont || !siteFont.boldFont) {
51
- return false;
52
- }
53
-
54
- const fonts = [];
55
-
56
- if (siteFont.regularFont.fontFile && siteFont.regularFont.fontFormat === "ttf") {
57
- const fontUrl = getFontUrl(siteFont.regularFont.fontFile);
58
- if (fontUrl) {
59
- fonts.push({
60
- src: fontUrl,
61
- fontWeight: "normal"
62
- });
63
- }
64
- }
65
-
66
- if (siteFont.boldFont.fontFile && siteFont.boldFont.fontFormat === "ttf") {
67
- const fontUrl = getFontUrl(siteFont.boldFont.fontFile);
68
- if (fontUrl) {
69
- fonts.push({
70
- src: fontUrl,
71
- fontWeight: "bold"
72
- });
73
- }
74
- }
75
-
76
- if (fonts.length > 0) {
77
- try {
78
- Font.register({
79
- family: siteFont.fontFamily,
80
- fonts: fonts
81
- });
82
- return true;
83
- } catch (error) {
84
- console.warn("Failed to register custom font:", error);
85
- return false;
86
- }
87
- }
88
-
89
- return false;
90
- };
91
-
92
10
 
93
11
  const calculateOptimalFontSize = (text, maxWidth = 650, initialFontSize = 48, minFontSize = 24) => {
94
12
  // estimate average character width based on font size
@@ -119,26 +37,6 @@ const calculateOptimalFontSize = (text, maxWidth = 650, initialFontSize = 48, mi
119
37
  return finalSize;
120
38
  };
121
39
 
122
- // Validate image URL before PDF generation
123
- const validateImageUrl = async (url) => {
124
- if (!url) return null;
125
-
126
- try {
127
- const response = await fetch(url, {
128
- method: 'GET',
129
- mode: 'cors'
130
- });
131
-
132
- if (response.ok) {
133
- return url;
134
- }
135
- return null;
136
- } catch (error) {
137
- console.warn("Image validation failed:", error);
138
- return null;
139
- }
140
- };
141
-
142
40
  const CertificatePDF = ({
143
41
  attendee,
144
42
  summit,
@@ -156,17 +54,15 @@ const CertificatePDF = ({
156
54
  const nameFontSize = calculateOptimalFontSize(fullName);
157
55
 
158
56
 
159
- let fontFamily = "Nunito Sans";
57
+ // Use fonts registered at app init, or try custom font from site settings
58
+ let fontFamily = getRegisteredFontFamily();
160
59
 
60
+ // If site settings has a custom font, try to register it (may already be registered at init)
161
61
  if (settings?.siteFont && settings.siteFont.fontFamily) {
162
62
  const customFontRegistered = registerCustomFont(settings.siteFont);
163
63
  if (customFontRegistered) {
164
64
  fontFamily = settings.siteFont.fontFamily;
165
- } else {
166
- registerDefaultFont();
167
65
  }
168
- } else {
169
- registerDefaultFont();
170
66
  }
171
67
 
172
68
  const styles = StyleSheet.create({
@@ -336,15 +232,13 @@ const CertificatePDF = ({
336
232
  // helper function to generate and download the certificate
337
233
  export const generatePDF = async (attendee, summit, settings) => {
338
234
  try {
339
- // Validate logo URL before generating PDF
340
- const logoUrlToValidate = settings.logo || summit.logo;
341
- const validatedLogoUrl = await validateImageUrl(logoUrlToValidate);
342
-
343
- const doc = <CertificatePDF
344
- attendee={attendee}
345
- summit={summit}
235
+ const logoUrl = settings.logo || summit.logo || null;
236
+
237
+ const doc = <CertificatePDF
238
+ attendee={attendee}
239
+ summit={summit}
346
240
  settings={settings}
347
- logoUrl={validatedLogoUrl}
241
+ logoUrl={logoUrl}
348
242
  />;
349
243
  const blob = await pdf(doc).toBlob();
350
244
 
@@ -8,6 +8,9 @@ import loadable from "@loadable/component";
8
8
  import 'my-orders-tickets-widget/dist/index.css';
9
9
  import 'my-orders-tickets-widget/dist/i18n';
10
10
  import { SentryFallbackFunction } from "./SentryErrorComponent";
11
+ import useMarketingSettings, { MARKETING_SETTINGS_KEYS } from '../utils/useMarketingSettings';
12
+ import useSiteSettings from '../utils/useSiteSettings';
13
+ import { DEFAULT_FONT_FAMILY, DEFAULT_FONT_PATH, getFontUrl } from '../utils/pdfFonts';
11
14
  const MyOrdersMyTicketsWidget = loadable(() => import("my-orders-tickets-widget/dist/index"), {
12
15
  ssr: false,
13
16
  fallback: null,
@@ -17,9 +20,34 @@ export const MyOrdersTicketsComponent = () => {
17
20
  const dispatch = useDispatch();
18
21
  const user = useSelector(state => state.userState);
19
22
  const summit = useSelector(state => state.summitState.summit);
23
+ const { getSettingByKey } = useMarketingSettings();
24
+ const siteSettings = useSiteSettings();
20
25
 
21
26
  if (!summit) return null;
22
27
 
28
+ // Get font info from site settings, defaulting to Nunito Sans
29
+ const siteFont = siteSettings?.siteFont;
30
+ const fontFamily = siteFont?.fontFamily || DEFAULT_FONT_FAMILY;
31
+ const fontUrl = getFontUrl(siteFont?.regularFont?.fontFile || DEFAULT_FONT_PATH, window.location.origin);
32
+
33
+ // Build receipt settings from marketing settings
34
+ const receiptSettings = {
35
+ primaryColor: getSettingByKey(MARKETING_SETTINGS_KEYS.colorPrimary),
36
+ fontFamily,
37
+ fontUrl,
38
+ printLogo: getSettingByKey(MARKETING_SETTINGS_KEYS.printLogo),
39
+ organizerLegalName: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerLegalName),
40
+ organizerAddressLine1: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerAddressLine1),
41
+ organizerAddressLine2: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerAddressLine2),
42
+ organizerCity: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerCity),
43
+ organizerState: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerState),
44
+ organizerPostalCode: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerPostalCode),
45
+ organizerCountry: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerCountry),
46
+ organizerTaxId: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerTaxId),
47
+ organizerTaxIdLabel: getSettingByKey(MARKETING_SETTINGS_KEYS.receiptOrganizerTaxIdLabel),
48
+ supportEmail: summit.support_email || getEnvVariable(SUPPORT_EMAIL),
49
+ };
50
+
23
51
  const widgetProps = {
24
52
  apiBaseUrl: getEnvVariable(SUMMIT_API_BASE_URL),
25
53
  clientId: getEnvVariable(OAUTH2_CLIENT_ID),
@@ -30,6 +58,7 @@ export const MyOrdersTicketsComponent = () => {
30
58
  updateProfile: (profile) => dispatch(updateProfile(profile)),
31
59
  summit,
32
60
  user,
61
+ receiptSettings,
33
62
  onTicketAssigned: (ticket) => dispatch(ticketOwnerChange(ticket))
34
63
  };
35
64
 
@@ -1 +1 @@
1
- {"favicon":{"asset":"icon.png"},"widgets":{"chat":{"enabled":true,"showQA":false,"showHelp":false,"defaultScope":"page"},"schedule":{"allowClick":true}},"identityProviderButtons":[{"buttonColor":"#082238","providerLabel":"Continue with FNid","providerLogo":"logo_fn.svg","providerLogoSize":27},{"buttonColor":"#0A66C2","providerLabel":"Sign in with LinkedIn","providerParam":"linkedin","providerLogo":"logo_linkedin.svg","providerLogoSize":18},{"buttonColor":"#000000","providerLabel":"Sign in with Apple","providerParam":"apple","providerLogoSize":17,"providerLogo":"logo_apple.svg"},{"buttonColor":"#1877F2","providerLabel":"Login with Facebook","providerParam":"facebook","providerLogo":"logo_facebook.svg","providerLogoSize":20}],"maintenanceMode":{"enabled":false,"title":"Site under maintenance","subtitle":"Please reload page shortly"},"staticJsonFilesBuildTime":[{"file":"src/data/summit.json","build_time":1757078904637},{"file":"src/data/events.json","build_time":1757078906503},{"file":"src/data/events.idx.json","build_time":1757078906506},{"file":"src/data/speakers.json","build_time":1757078907177},{"file":"src/data/speakers.idx.json","build_time":1757078907177},{"file":"src/content/sponsors.json","build_time":1757078912121},{"file":"src/data/voteable-presentations.json","build_time":1757078912473}],"lastBuild":1757078912473}
1
+ {"favicon":{"asset":"icon.png"},"widgets":{"chat":{"enabled":true,"showQA":false,"showHelp":false,"defaultScope":"page"},"schedule":{"allowClick":true}},"identityProviderButtons":[{"buttonColor":"#082238","providerLabel":"Continue with FNid","providerLogo":"logo_fn.svg","providerLogoSize":27},{"buttonColor":"#0A66C2","providerLabel":"Sign in with LinkedIn","providerParam":"linkedin","providerLogo":"logo_linkedin.svg","providerLogoSize":18},{"buttonColor":"#000000","providerLabel":"Sign in with Apple","providerParam":"apple","providerLogoSize":17,"providerLogo":"logo_apple.svg"},{"buttonColor":"#1877F2","providerLabel":"Login with Facebook","providerParam":"facebook","providerLogo":"logo_facebook.svg","providerLogoSize":20}],"maintenanceMode":{"enabled":false,"title":"Site under maintenance","subtitle":"Please reload page shortly"},"staticJsonFilesBuildTime":[{"file":"src/data/summit.json","build_time":1769530063616},{"file":"src/data/events.json","build_time":1769530065075},{"file":"src/data/events.idx.json","build_time":1769530065077},{"file":"src/data/speakers.json","build_time":1769530065728},{"file":"src/data/speakers.idx.json","build_time":1769530065728},{"file":"src/content/sponsors.json","build_time":1769530068156},{"file":"src/data/voteable-presentations.json","build_time":1769530068650}],"lastBuild":1769530068651}
@@ -1 +1 @@
1
- [{"id":533,"created":1754503947,"last_edited":1755716348,"order":1,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":6,"company":{"id":1,"created":1579886208,"last_edited":1579886208,"name":"Intel Corporation","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/1/logos/OCP21GLO-SessionBrandingBar-Sponsor-Intel2.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/1/logos/OCP21GLO-SessionBrandingBar-Sponsor-Intel3.png","color":"#f0f0ee"},"extra_questions":[763],"members":[],"sponsorship":{"id":2072,"widget_title":"","lobby_template":null,"expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":false,"sponsor_page_use_live_event_widget":false,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":3,"should_display_on_expo_hall_page":false,"should_display_on_lobby_page":false,"type":{"id":9,"created":1605551482,"last_edited":1605551482,"name":"Silver","label":"Silver","order":9,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":543,"created":1754667572,"last_edited":1754667572,"order":2,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":3,"created":1580138376,"last_edited":1580138376,"name":"Tipit , LLC","url":null,"url_segment":null,"city":null,"state":null,"country":null,"description":null,"industry":null,"contributions":null,"member_level":"None","overview":null,"products":null,"commitment":null,"commitment_author":null,"logo":null,"big_logo":null,"color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":564,"created":1755645526,"last_edited":1755645526,"order":3,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4,"created":1582745992,"last_edited":1582745992,"name":"FNTECH","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/4/logos/FNTECH-BLK-logo-rgb-1-color-white-720px2.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/4/logos/FNTECH-BLK-logo-rgb-1-color-white-720px3.png","color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":565,"created":1755716372,"last_edited":1755716401,"order":4,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":5,"created":1594672447,"last_edited":1594672447,"name":"Meta","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/5/logos/OCP21GLO-SessionBrandingBar-Sponsor-Meta1.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/5/logos/OCP21GLO-SessionBrandingBar-Sponsor-Meta.png","color":"#f0f0ee"},"extra_questions":[],"members":[36416],"sponsorship":{"id":2073,"widget_title":"","lobby_template":null,"expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":false,"sponsor_page_use_live_event_widget":false,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":1,"should_display_on_expo_hall_page":false,"should_display_on_lobby_page":false,"type":{"id":2,"created":1579287407,"last_edited":1579287407,"name":"Diamond","label":"20 x 20 booth","order":2,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":566,"created":1755717072,"last_edited":1755717072,"order":5,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":11,"created":1603222606,"last_edited":1603222606,"name":"FakeCo","url":null,"url_segment":null,"city":null,"state":null,"country":null,"description":null,"industry":null,"contributions":null,"member_level":null,"overview":null,"products":null,"commitment":null,"commitment_author":null,"logo":null,"big_logo":null,"color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":567,"created":1755717143,"last_edited":1755717143,"order":6,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":12,"created":1603223078,"last_edited":1603223078,"name":"Phase Two","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/12/logos/IF2020-Phasetwo-Presentedby-Logo.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/12/logos/IF2020-Phasetwo-Presentedby-Logo1.png","color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":568,"created":1755717768,"last_edited":1755717768,"order":7,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":6,"created":1600118396,"last_edited":1600118396,"name":"FNtest","url":null,"url_segment":null,"city":null,"state":null,"country":null,"description":null,"industry":null,"contributions":null,"member_level":"None","overview":null,"products":null,"commitment":null,"commitment_author":null,"logo":null,"big_logo":null,"color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2076,"widget_title":"test2","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":false,"sponsor_page_use_live_event_widget":false,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":7,"should_display_on_expo_hall_page":false,"should_display_on_lobby_page":false,"type":{"id":8,"created":1603223268,"last_edited":1603223268,"name":"Featured","label":"Featured","order":8,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":569,"created":1755717799,"last_edited":1755717799,"order":8,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":13,"created":1603223094,"last_edited":1603223094,"name":"Essentia Water","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/13/logos/IF2020-Essentia-Presentedby-Logo-V2.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/13/logos/IF2020-Essentia-Presentedby-Logo-V21.png","color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":570,"created":1755717951,"last_edited":1755717951,"order":9,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":8,"created":1603222234,"last_edited":1603222234,"name":"Z by HP","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/8/logos/IF2020-ZbyHP-Presentedby-Logo.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/8/logos/IF2020-ZbyHP-Presentedby-Logo1.png","color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":571,"created":1755717973,"last_edited":1755717973,"order":10,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":24,"created":1605551226,"last_edited":1605551226,"name":"Bronze - Lower Tier","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":null,"big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":572,"created":1755717993,"last_edited":1755717993,"order":11,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":47,"created":1629851431,"last_edited":1629851431,"name":"BizLink Technology, Inc.","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/47/logos/OCP21GLO-SessionBrandingBar-Sponsor-Bizlink.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":573,"created":1755718518,"last_edited":1755718518,"order":12,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":79,"created":1630351802,"last_edited":1630351802,"name":"Test and Validation","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":null,"big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":2083,"widget_title":"test8","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":false,"sponsor_page_use_live_event_widget":false,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":13,"should_display_on_expo_hall_page":false,"should_display_on_lobby_page":false,"type":{"id":19,"created":1630352146,"last_edited":1630352146,"name":"Experience Center","label":"Experience Center","order":19,"size":"Small"}},"ads":[],"materials":[],"social_networks":[]},{"id":574,"created":1755718559,"last_edited":1755718559,"order":13,"summit_id":69,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":10,"created":1603222343,"last_edited":1603222343,"name":"Microsoft","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/10/logos/OCP21GLO-SessionBrandingBar-Sponsor-Microsoft1.png","big_logo":"https://summit-api-dev-assets.nyc3.digitaloceanspaces.com/companies/10/logos/OCP21GLO-SessionBrandingBar-Sponsor-Microsoft.png","color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":2071,"widget_title":"test","lobby_template":"small-images","expo_hall_template":"big-images","sponsor_page_template":"big-header","event_page_template":"big-images","sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":false,"sponsor_page_use_banner_widget":false,"badge_image":null,"badge_image_alt_text":"","summit_id":69,"order":2,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":3,"created":1579890943,"last_edited":1579890943,"name":"Gold","label":"not sure??","order":3,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]}]
1
+ [{"id":7,"created":1598305743,"last_edited":1761081660,"order":1,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":"https://summit-api-assets.sfo2.digitaloceanspaces.com/summits/13/sponsors/7/logo-middle-tier-fntech.png","marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"fntech","show_logo_in_event_page":true,"lead_report_setting_id":1,"company":{"id":4,"created":1582745992,"last_edited":1582745992,"name":"FNTECH","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4/logos/FNTECH-BLK-logo-rgb-1-color-white-720px2.png","big_logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4/logos/FNTECH-BLK-logo-rgb-1-color-white-720px3.png","color":"#f0f0ee"},"extra_questions":[457,459,460,462,468],"members":[26396,28171,111106],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":27,"created":1610063550,"last_edited":1757964873,"order":4,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":25,"created":1610060787,"last_edited":1610060787,"name":"Wherehol","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/25/logos/Logo-Middle-Tier-Wherehol.png","big_logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/25/logos/Logo-Middle-Tier-Wherehol1.png","color":"#DADADA"},"extra_questions":[],"members":[36416],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":28,"created":1610063866,"last_edited":1761585874,"order":9,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":26,"created":1610063779,"last_edited":1610063779,"name":"Mobility","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/26/logos/Logo-Top-Tier-Mobility.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":529,"widget_title":"Middle-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":13,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":13,"created":1610061803,"last_edited":1610061803,"name":"Middle-Tier","label":"Middle-Tier","order":13,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":29,"created":1610063887,"last_edited":1610063887,"order":12,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":27,"created":1610063790,"last_edited":1610063790,"name":"Treva","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/27/logos/logo-lower-tier-treva.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":572,"widget_title":"Lower-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":14,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":14,"created":1610061840,"last_edited":1610061840,"name":"Lower-Tier","label":"Lower-Tier","order":14,"size":"Small"}},"ads":[],"materials":[],"social_networks":[]},{"id":30,"created":1610646759,"last_edited":1761585874,"order":8,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":28,"created":1610646606,"last_edited":1610646606,"name":"DVC","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/28/logos/DVC-LOGO-968X968.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":31,"created":1610649182,"last_edited":1610649182,"order":3,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":29,"created":1610649003,"last_edited":1610649003,"name":"Seeing Eye Lighting Design","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/29/logos/logo-middle-tier-seeingeye.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":32,"created":1610649204,"last_edited":1610649204,"order":2,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":30,"created":1610649028,"last_edited":1610649028,"name":"Hughston Engineering","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/30/logos/logo-middle-tier-hughston.png","big_logo":null,"color":"#DADADA"},"extra_questions":[463,464],"members":[],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":33,"created":1610649224,"last_edited":1761585874,"order":7,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":31,"created":1610649044,"last_edited":1610649044,"name":"Curtin Convention Services","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/31/logos/logo-middle-tier-curtin.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":37,"created":1617308510,"last_edited":1617308510,"order":5,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":null,"intro":null,"external_link":null,"video_link":null,"chat_link":null,"featured_event_id":0,"header_image_alt_text":null,"side_image_alt_text":null,"header_image_mobile_alt_text":null,"carousel_advertise_image_alt_text":null,"show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":35,"created":1617308469,"last_edited":1617308469,"name":"Anthony Drake & Associates","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/35/logos/YOCO-ADA-Sponsor-Ad-Home.jpg","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":486,"widget_title":"Top-Tier Sponsors","lobby_template":"carousel","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":12,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":12,"created":1610061360,"last_edited":1610061360,"name":"Top-Tier","label":"Top-Tier","order":12,"size":"Large"}},"ads":[],"materials":[],"social_networks":[]},{"id":246,"created":1694795645,"last_edited":1761585874,"order":6,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4238,"created":1694795086,"last_edited":1694795086,"name":"GameHub","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4238/logos/logo-middle-tier-gamehub.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":529,"widget_title":"Middle-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":13,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":13,"created":1610061803,"last_edited":1610061803,"name":"Middle-Tier","label":"Middle-Tier","order":13,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":247,"created":1694795681,"last_edited":1694795681,"order":10,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4239,"created":1694795131,"last_edited":1694795131,"name":"Hyved","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4239/logos/logo-middle-tier-hyved.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":529,"widget_title":"Middle-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":13,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":13,"created":1610061803,"last_edited":1610061803,"name":"Middle-Tier","label":"Middle-Tier","order":13,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":248,"created":1694795712,"last_edited":1694795712,"order":11,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4240,"created":1694795194,"last_edited":1694795194,"name":"FlightPath","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4240/logos/Logo-Top-Tier-Flightpath.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":529,"widget_title":"Middle-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":13,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":13,"created":1610061803,"last_edited":1610061803,"name":"Middle-Tier","label":"Middle-Tier","order":13,"size":"Medium"}},"ads":[],"materials":[],"social_networks":[]},{"id":249,"created":1694795831,"last_edited":1694795831,"order":13,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4241,"created":1694795289,"last_edited":1694795289,"name":"Topographic Tech","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4241/logos/logo-lower-tier-topographic.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":572,"widget_title":"Lower-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":14,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":14,"created":1610061840,"last_edited":1610061840,"name":"Lower-Tier","label":"Lower-Tier","order":14,"size":"Small"}},"ads":[],"materials":[],"social_networks":[]},{"id":250,"created":1694795937,"last_edited":1694795937,"order":14,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":2569,"created":1654774524,"last_edited":1654774524,"name":"Open Technologies","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/2569/logos/logo-top-tier-opentech.png","big_logo":null,"color":"#f0f0ee"},"extra_questions":[],"members":[],"sponsorship":{"id":572,"widget_title":"Lower-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":14,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":14,"created":1610061840,"last_edited":1610061840,"name":"Lower-Tier","label":"Lower-Tier","order":14,"size":"Small"}},"ads":[],"materials":[],"social_networks":[]},{"id":251,"created":1694795962,"last_edited":1694795962,"order":15,"summit_id":13,"is_published":true,"side_image":null,"header_image":null,"header_image_mobile":null,"carousel_advertise_image":null,"marquee":"","intro":"","external_link":"","video_link":"","chat_link":"","featured_event_id":0,"header_image_alt_text":"","side_image_alt_text":"","header_image_mobile_alt_text":"","carousel_advertise_image_alt_text":"","show_logo_in_event_page":true,"lead_report_setting_id":0,"company":{"id":4242,"created":1694795398,"last_edited":1694795398,"name":"Tilted","url":"","url_segment":null,"city":"","state":"","country":"","description":"","industry":"","contributions":"","member_level":"None","overview":"","products":"","commitment":"","commitment_author":"","logo":"https://summit-api-assets.sfo2.digitaloceanspaces.com/companies/4242/logos/logo-lower-tier-tilted.png","big_logo":null,"color":"#DADADA"},"extra_questions":[],"members":[],"sponsorship":{"id":572,"widget_title":"Lower-Tier Sponsors","lobby_template":"small-images","expo_hall_template":null,"sponsor_page_template":null,"event_page_template":null,"sponsor_page_use_disqus_widget":true,"sponsor_page_use_live_event_widget":true,"sponsor_page_use_schedule_widget":true,"sponsor_page_use_banner_widget":true,"badge_image":null,"badge_image_alt_text":"","summit_id":13,"order":14,"should_display_on_expo_hall_page":true,"should_display_on_lobby_page":true,"type":{"id":14,"created":1610061840,"last_edited":1610061840,"name":"Lower-Tier","label":"Lower-Tier","order":14,"size":"Small"}},"ads":[],"materials":[],"social_networks":[]}]
@@ -1,13 +1,13 @@
1
- $color_accent: #8ac82d;
1
+ $color_accent: #ff5e32;
2
2
  $color_alerts: #ff0000;
3
3
  $color_background_light: #ffffff;
4
4
  $color_background_dark: #000000;
5
- $color_button_background_color: #ffffff;
6
- $color_button_color: #000000;
7
- $color_gray_lighter: #f2f2f2;
8
- $color_gray_light: #dfdfdf;
5
+ $color_button_background_color: #FC5200;
6
+ $color_button_color: #FFFFFF;
7
+ $color_gray_lighter: #F2F2F2;
8
+ $color_gray_light: #DFDFDF;
9
9
  $color_gray_dark: #999999;
10
- $color_gray_darker: #4a4a4a;
10
+ $color_gray_darker: #4A4A4A;
11
11
  $color_horizontal_rule_light: #e5e5e5;
12
12
  $color_horizontal_rule_dark: #7b7b7b;
13
13
  $color_icon_light: #ffffff;
@@ -19,13 +19,13 @@ $color_input_text_color_light: #363636;
19
19
  $color_input_text_color_dark: #ffffff;
20
20
  $color_input_text_color_disabled_light: #ffffff;
21
21
  $color_input_text_color_disabled_dark: #ffffff;
22
- $color_primary: #8DC63F;
23
- $color_primary_contrast: #FFFFFF;
24
- $color_secondary: #26387f;
25
- $color_secondary_contrast: #005870;
22
+ $color_primary: #6d6e71;
23
+ $color_primary_contrast: #f1f2f2;
24
+ $color_secondary: #00CEC4;
25
+ $color_secondary_contrast: #ff5e32;
26
26
  $color_text_light: #ffffff;
27
27
  $color_text_med: #828282;
28
- $color_text_dark: #5e5f62;
28
+ $color_text_dark: #333333;
29
29
  $color_text_input_hints_light: #7b7b7b;
30
30
  $color_text_input_hints_dark: #7b7b7b;
31
31
  $color_text_input_hints: #c4c4c4;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Shared PDF font registration utility
3
+ * Used by certificate and receipt PDF generation
4
+ *
5
+ * Font.register() is a global static method in @react-pdf/renderer
6
+ * Once registered, fonts are available to all PDFs in the application
7
+ */
8
+ import { Font } from "@react-pdf/renderer";
9
+
10
+ // Default font family name
11
+ export const DEFAULT_FONT_FAMILY = "Nunito Sans";
12
+
13
+ // Default font file path (relative to static folder, served at /fonts/)
14
+ export const DEFAULT_FONT_PATH = "/fonts/nunito-sans/NunitoSans-Variable.ttf";
15
+
16
+ // Track if fonts have been registered
17
+ let fontsRegistered = false;
18
+ let registeredFontFamily = DEFAULT_FONT_FAMILY;
19
+
20
+ /**
21
+ * Register the default Nunito Sans font
22
+ * @param {string} fontFile - Path to the font file
23
+ * @returns {boolean} - Whether registration was successful
24
+ */
25
+ export const registerDefaultFont = (fontFile) => {
26
+ if (!fontFile) {
27
+ console.warn("No font file provided for default font registration");
28
+ return false;
29
+ }
30
+
31
+ try {
32
+ Font.register({
33
+ family: DEFAULT_FONT_FAMILY,
34
+ fonts: [
35
+ {
36
+ src: fontFile,
37
+ fontWeight: "normal"
38
+ },
39
+ {
40
+ src: fontFile,
41
+ fontWeight: "bold"
42
+ },
43
+ ]
44
+ });
45
+ registeredFontFamily = DEFAULT_FONT_FAMILY;
46
+ return true;
47
+ } catch (error) {
48
+ console.error("Failed to register default font:", error);
49
+ return false;
50
+ }
51
+ };
52
+
53
+ /**
54
+ * Convert font paths to absolute URLs
55
+ * @param {string} fontPath - The font path (relative or absolute)
56
+ * @param {string} origin - The origin to use for absolute URL (e.g., window.location.origin)
57
+ * @returns {string|null} - The absolute URL or null
58
+ */
59
+ export const getFontUrl = (fontPath, origin) => {
60
+ if (!fontPath) return null;
61
+
62
+ // Already an absolute URL - return as-is
63
+ if (fontPath.startsWith("http://") || fontPath.startsWith("https://")) {
64
+ return fontPath;
65
+ }
66
+
67
+ // Clean up the path - remove /static prefix since fonts are served at root /fonts/
68
+ const cleanPath = fontPath.replace("/static/fonts/", "/fonts/");
69
+
70
+ // Convert to absolute URL
71
+ return new URL(cleanPath, origin).href;
72
+ };
73
+
74
+ /**
75
+ * Register custom font from site settings
76
+ * @param {Object} siteFont - Site font configuration
77
+ * @param {string} siteFont.fontFamily - Font family name
78
+ * @param {Object} siteFont.regularFont - Regular font config
79
+ * @param {Object} siteFont.boldFont - Bold font config
80
+ * @returns {boolean} - Whether registration was successful
81
+ */
82
+ export const registerCustomFont = (siteFont) => {
83
+ if (!siteFont || !siteFont.fontFamily || !siteFont.regularFont || !siteFont.boldFont) {
84
+ return false;
85
+ }
86
+
87
+ const fonts = [];
88
+ const origin = window.location.origin;
89
+
90
+ if (siteFont.regularFont.fontFile && siteFont.regularFont.fontFormat === "ttf") {
91
+ const fontUrl = getFontUrl(siteFont.regularFont.fontFile, origin);
92
+ if (fontUrl) {
93
+ fonts.push({
94
+ src: fontUrl,
95
+ fontWeight: "normal"
96
+ });
97
+ }
98
+ }
99
+
100
+ if (siteFont.boldFont.fontFile && siteFont.boldFont.fontFormat === "ttf") {
101
+ const fontUrl = getFontUrl(siteFont.boldFont.fontFile, origin);
102
+ if (fontUrl) {
103
+ fonts.push({
104
+ src: fontUrl,
105
+ fontWeight: "bold"
106
+ });
107
+ }
108
+ }
109
+
110
+ if (fonts.length > 0) {
111
+ try {
112
+ Font.register({
113
+ family: siteFont.fontFamily,
114
+ fonts: fonts
115
+ });
116
+ registeredFontFamily = siteFont.fontFamily;
117
+ return true;
118
+ } catch (error) {
119
+ console.warn("Failed to register custom font:", error);
120
+ return false;
121
+ }
122
+ }
123
+
124
+ return false;
125
+ };
126
+
127
+ /**
128
+ * Initialize PDF fonts - call this at app startup
129
+ * @param {Object} options - Font options
130
+ * @param {string} options.defaultFontFile - Path to default font file
131
+ * @param {Object} options.siteFont - Custom site font config (optional)
132
+ * @returns {string} - The registered font family name
133
+ */
134
+ export const initializePdfFonts = ({ defaultFontFile, siteFont = null }) => {
135
+ if (fontsRegistered) {
136
+ return registeredFontFamily;
137
+ }
138
+
139
+ // Try custom font first if available
140
+ if (siteFont) {
141
+ const customFontRegistered = registerCustomFont(siteFont);
142
+ if (customFontRegistered) {
143
+ fontsRegistered = true;
144
+ return registeredFontFamily;
145
+ }
146
+ }
147
+
148
+ // Fall back to default font
149
+ if (defaultFontFile) {
150
+ const defaultRegistered = registerDefaultFont(defaultFontFile);
151
+ if (defaultRegistered) {
152
+ fontsRegistered = true;
153
+ return registeredFontFamily;
154
+ }
155
+ }
156
+
157
+ // If all else fails, return Helvetica (built-in)
158
+ registeredFontFamily = "Helvetica";
159
+ fontsRegistered = true;
160
+ return registeredFontFamily;
161
+ };
162
+
163
+ /**
164
+ * Get the currently registered font family
165
+ * @returns {string} - The registered font family name
166
+ */
167
+ export const getRegisteredFontFamily = () => {
168
+ return registeredFontFamily;
169
+ };
170
+
171
+ /**
172
+ * Check if fonts have been registered
173
+ * @returns {boolean}
174
+ */
175
+ export const areFontsRegistered = () => {
176
+ return fontsRegistered;
177
+ };
@@ -72,6 +72,17 @@ export const MARKETING_SETTINGS_KEYS = {
72
72
  certificateSpeakerTitleText: "CERTIFICATE_SPEAKER_TITLE_TEXT",
73
73
  certificateSummitName: "CERTIFICATE_SUMMIT_NAME",
74
74
  certificateShowRole: "CERTIFICATE_SHOW_ROLE",
75
+ // Receipt settings
76
+ printLogo: "PRINT_LOGO",
77
+ receiptOrganizerLegalName: "RECEIPT_ORGANIZER_LEGAL_NAME",
78
+ receiptOrganizerAddressLine1: "RECEIPT_ORGANIZER_ADDRESS_LINE_1",
79
+ receiptOrganizerAddressLine2: "RECEIPT_ORGANIZER_ADDRESS_LINE_2",
80
+ receiptOrganizerCity: "RECEIPT_ORGANIZER_CITY",
81
+ receiptOrganizerState: "RECEIPT_ORGANIZER_STATE",
82
+ receiptOrganizerPostalCode: "RECEIPT_ORGANIZER_POSTAL_CODE",
83
+ receiptOrganizerCountry: "RECEIPT_ORGANIZER_COUNTRY",
84
+ receiptOrganizerTaxId: "RECEIPT_ORGANIZER_TAX_ID",
85
+ receiptOrganizerTaxIdLabel: "RECEIPT_ORGANIZER_TAX_ID_LABEL",
75
86
  }
76
87
 
77
88
  const marketingSettingsQuery = graphql`
@@ -1,11 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(source ~/.nvm/nvm.sh)",
5
- "Bash(nvm use v20.19.5)",
6
- "Bash(npm run develop:*)"
7
- ],
8
- "deny": [],
9
- "ask": []
10
- }
11
- }