@openeventkit/event-site 2.1.40 → 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.
Files changed (40) hide show
  1. package/README.md +8 -0
  2. package/gatsby-browser.js +15 -0
  3. package/package.json +10 -4
  4. package/src/actions/event-actions.js +1 -8
  5. package/src/components/AuthComponent.js +11 -3
  6. package/src/components/Certificates/generatePDF.js +14 -121
  7. package/src/components/MyOrdersTicketsComponent.js +29 -0
  8. package/src/content/site-settings/index.json +1 -1
  9. package/src/content/sponsors.json +1 -1
  10. package/src/styles/colors.scss +11 -11
  11. package/src/utils/pdfFonts.js +177 -0
  12. package/src/utils/useMarketingSettings.js +11 -0
  13. package/static/fonts/fonts.css +8 -150
  14. package/static/fonts/nunito-sans/NunitoSans-Italic-Variable.ttf +0 -0
  15. package/static/fonts/nunito-sans/NunitoSans-Variable.ttf +0 -0
  16. package/static/fonts/nunito-sans/nunito-sans-v18-latin-200.woff2 +0 -0
  17. package/static/fonts/nunito-sans/nunito-sans-v18-latin-200italic.ttf +0 -0
  18. package/static/fonts/nunito-sans/nunito-sans-v18-latin-200italic.woff2 +0 -0
  19. package/static/fonts/nunito-sans/nunito-sans-v18-latin-300.woff2 +0 -0
  20. package/static/fonts/nunito-sans/nunito-sans-v18-latin-300italic.ttf +0 -0
  21. package/static/fonts/nunito-sans/nunito-sans-v18-latin-300italic.woff2 +0 -0
  22. package/static/fonts/nunito-sans/nunito-sans-v18-latin-400.ttf +0 -0
  23. package/static/fonts/nunito-sans/nunito-sans-v18-latin-400.woff2 +0 -0
  24. package/static/fonts/nunito-sans/nunito-sans-v18-latin-400italic.ttf +0 -0
  25. package/static/fonts/nunito-sans/nunito-sans-v18-latin-400italic.woff2 +0 -0
  26. package/static/fonts/nunito-sans/nunito-sans-v18-latin-500.ttf +0 -0
  27. package/static/fonts/nunito-sans/nunito-sans-v18-latin-500.woff2 +0 -0
  28. package/static/fonts/nunito-sans/nunito-sans-v18-latin-500italic.ttf +0 -0
  29. package/static/fonts/nunito-sans/nunito-sans-v18-latin-500italic.woff2 +0 -0
  30. package/static/fonts/nunito-sans/nunito-sans-v18-latin-600.woff2 +0 -0
  31. package/static/fonts/nunito-sans/nunito-sans-v18-latin-600italic.woff2 +0 -0
  32. package/static/fonts/nunito-sans/nunito-sans-v18-latin-700.ttf +0 -0
  33. package/static/fonts/nunito-sans/nunito-sans-v18-latin-700.woff2 +0 -0
  34. package/static/fonts/nunito-sans/nunito-sans-v18-latin-700italic.woff2 +0 -0
  35. package/static/fonts/nunito-sans/nunito-sans-v18-latin-800.ttf +0 -0
  36. package/static/fonts/nunito-sans/nunito-sans-v18-latin-800.woff2 +0 -0
  37. package/static/fonts/nunito-sans/nunito-sans-v18-latin-800italic.woff2 +0 -0
  38. package/static/fonts/nunito-sans/nunito-sans-v18-latin-900.ttf +0 -0
  39. package/static/fonts/nunito-sans/nunito-sans-v18-latin-900.woff2 +0 -0
  40. package/static/fonts/nunito-sans/nunito-sans-v18-latin-900italic.woff2 +0 -0
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.40",
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
  /**
@@ -194,16 +194,24 @@ const AuthComponent = ({
194
194
  </Link>
195
195
  );
196
196
 
197
+ // Determine if we should show any button
198
+ const showLoginButton = !isLoggedUser;
199
+ const showEnterButton = isLoggedUser && summitPhase >= PHASES.DURING && hasVirtualBadge;
200
+
201
+ // Don't render wrapper if no button to show and modal not active
202
+ if (!showLoginButton && !showEnterButton && !isActive) {
203
+ return null;
204
+ }
205
+
197
206
  return (
198
207
  <div style={style} className={styles.authComponent}>
199
- {!isLoggedUser ?
208
+ {showLoginButton ?
200
209
  renderLoginButton ? renderLoginButton(handleOpenPopup) : defaultLoginButton()
201
210
  :
202
- (summitPhase >= PHASES.DURING && hasVirtualBadge ?
211
+ showEnterButton ?
203
212
  renderEnterButton ? renderEnterButton(handleEnterEvent) : defaultEnterButton()
204
213
  :
205
214
  null
206
- )
207
215
  }
208
216
  {isActive &&
209
217
  <div id={`${styles.modal}`} className="modal is-active">
@@ -1,95 +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 fontRegular from "../../../static/fonts/nunito-sans/nunito-sans-v18-latin-400.ttf";
5
- import fontBold from "../../../static/fonts/nunito-sans/nunito-sans-v18-latin-700.ttf";
4
+ import {
5
+ getRegisteredFontFamily,
6
+ registerCustomFont
7
+ } from "../../utils/pdfFonts";
6
8
  import { USER_ROLES } from './constants';
7
9
 
8
- const registerDefaultFont = () => {
9
- try {
10
- Font.register({
11
- family: "Nunito Sans",
12
- fonts: [
13
- {
14
- src: fontRegular,
15
- fontWeight: "normal"
16
- },
17
- {
18
- src: fontBold,
19
- fontWeight: "bold"
20
- },
21
- ]
22
- });
23
- return true;
24
- } catch (error) {
25
- console.error("Failed to register default font:", error);
26
- return false;
27
- }
28
- };
29
-
30
- // helper to convert relative font paths to absolute URLs
31
- const getFontUrl = (fontPath) => {
32
- if (!fontPath) return null;
33
-
34
- if (fontPath.startsWith("http://") || fontPath.startsWith("https://")) {
35
- return fontPath;
36
- }
37
-
38
- // For relative paths, prepend the origin
39
- // Site settings fonts are served from /fonts/ (not /static/fonts/)
40
- if (typeof window !== "undefined") {
41
- // Remove /static prefix if present since fonts are served at root /fonts/
42
- const cleanPath = fontPath.replace("/static/fonts/", "/fonts/");
43
- return `${window.location.origin}${cleanPath}`;
44
- }
45
-
46
- return fontPath;
47
- };
48
-
49
- // register custom font from site settings if available
50
- const registerCustomFont = (siteFont) => {
51
- if (!siteFont || !siteFont.fontFamily || !siteFont.regularFont || !siteFont.boldFont) {
52
- return false;
53
- }
54
-
55
- const fonts = [];
56
-
57
- if (siteFont.regularFont.fontFile && siteFont.regularFont.fontFormat === "ttf") {
58
- const fontUrl = getFontUrl(siteFont.regularFont.fontFile);
59
- if (fontUrl) {
60
- fonts.push({
61
- src: fontUrl,
62
- fontWeight: "normal"
63
- });
64
- }
65
- }
66
-
67
- if (siteFont.boldFont.fontFile && siteFont.boldFont.fontFormat === "ttf") {
68
- const fontUrl = getFontUrl(siteFont.boldFont.fontFile);
69
- if (fontUrl) {
70
- fonts.push({
71
- src: fontUrl,
72
- fontWeight: "bold"
73
- });
74
- }
75
- }
76
-
77
- if (fonts.length > 0) {
78
- try {
79
- Font.register({
80
- family: siteFont.fontFamily,
81
- fonts: fonts
82
- });
83
- return true;
84
- } catch (error) {
85
- console.warn("Failed to register custom font:", error);
86
- return false;
87
- }
88
- }
89
-
90
- return false;
91
- };
92
-
93
10
 
94
11
  const calculateOptimalFontSize = (text, maxWidth = 650, initialFontSize = 48, minFontSize = 24) => {
95
12
  // estimate average character width based on font size
@@ -120,26 +37,6 @@ const calculateOptimalFontSize = (text, maxWidth = 650, initialFontSize = 48, mi
120
37
  return finalSize;
121
38
  };
122
39
 
123
- // Validate image URL before PDF generation
124
- const validateImageUrl = async (url) => {
125
- if (!url) return null;
126
-
127
- try {
128
- const response = await fetch(url, {
129
- method: 'GET',
130
- mode: 'cors'
131
- });
132
-
133
- if (response.ok) {
134
- return url;
135
- }
136
- return null;
137
- } catch (error) {
138
- console.warn("Image validation failed:", error);
139
- return null;
140
- }
141
- };
142
-
143
40
  const CertificatePDF = ({
144
41
  attendee,
145
42
  summit,
@@ -157,17 +54,15 @@ const CertificatePDF = ({
157
54
  const nameFontSize = calculateOptimalFontSize(fullName);
158
55
 
159
56
 
160
- let fontFamily = "Nunito Sans";
57
+ // Use fonts registered at app init, or try custom font from site settings
58
+ let fontFamily = getRegisteredFontFamily();
161
59
 
60
+ // If site settings has a custom font, try to register it (may already be registered at init)
162
61
  if (settings?.siteFont && settings.siteFont.fontFamily) {
163
62
  const customFontRegistered = registerCustomFont(settings.siteFont);
164
63
  if (customFontRegistered) {
165
64
  fontFamily = settings.siteFont.fontFamily;
166
- } else {
167
- registerDefaultFont();
168
65
  }
169
- } else {
170
- registerDefaultFont();
171
66
  }
172
67
 
173
68
  const styles = StyleSheet.create({
@@ -337,15 +232,13 @@ const CertificatePDF = ({
337
232
  // helper function to generate and download the certificate
338
233
  export const generatePDF = async (attendee, summit, settings) => {
339
234
  try {
340
- // Validate logo URL before generating PDF
341
- const logoUrlToValidate = settings.logo || summit.logo;
342
- const validatedLogoUrl = await validateImageUrl(logoUrlToValidate);
343
-
344
- const doc = <CertificatePDF
345
- attendee={attendee}
346
- summit={summit}
235
+ const logoUrl = settings.logo || summit.logo || null;
236
+
237
+ const doc = <CertificatePDF
238
+ attendee={attendee}
239
+ summit={summit}
347
240
  settings={settings}
348
- logoUrl={validatedLogoUrl}
241
+ logoUrl={logoUrl}
349
242
  />;
350
243
  const blob = await pdf(doc).toBlob();
351
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,165 +1,23 @@
1
1
  /**
2
- * Nunito Sans Font Family - Version 18
3
- * Weights: 200, 300, 400, 500, 600, 700, 800, 900
2
+ * Nunito Sans Variable Font Family
3
+ * Weights: 200-1000 (variable)
4
4
  * Styles: normal, italic
5
5
  */
6
6
 
7
- /* nunito-sans-200 - latin */
7
+ /* Nunito Sans Variable - Normal */
8
8
  @font-face {
9
9
  font-family: "Nunito Sans";
10
10
  font-style: normal;
11
- font-weight: 200;
11
+ font-weight: 200 1000;
12
12
  font-display: swap;
13
- src: local(""),
14
- url("nunito-sans/nunito-sans-v18-latin-200.woff2") format("woff2");
13
+ src: url("nunito-sans/NunitoSans-Variable.ttf") format("truetype");
15
14
  }
16
15
 
17
- /* nunito-sans-200italic - latin */
16
+ /* Nunito Sans Variable - Italic */
18
17
  @font-face {
19
18
  font-family: "Nunito Sans";
20
19
  font-style: italic;
21
- font-weight: 200;
20
+ font-weight: 200 1000;
22
21
  font-display: swap;
23
- src: local(""),
24
- url("nunito-sans/nunito-sans-v18-latin-200italic.woff2") format("woff2");
22
+ src: url("nunito-sans/NunitoSans-Italic-Variable.ttf") format("truetype");
25
23
  }
26
-
27
- /* nunito-sans-300 - latin */
28
- @font-face {
29
- font-family: "Nunito Sans";
30
- font-style: normal;
31
- font-weight: 300;
32
- font-display: swap;
33
- src: local(""),
34
- url("nunito-sans/nunito-sans-v18-latin-300.woff2") format("woff2");
35
- }
36
-
37
- /* nunito-sans-300italic - latin */
38
- @font-face {
39
- font-family: "Nunito Sans";
40
- font-style: italic;
41
- font-weight: 300;
42
- font-display: swap;
43
- src: local(""),
44
- url("nunito-sans/nunito-sans-v18-latin-300italic.woff2") format("woff2");
45
- }
46
-
47
- /* nunito-sans-400 - latin */
48
- @font-face {
49
- font-family: "Nunito Sans";
50
- font-style: normal;
51
- font-weight: 400;
52
- font-display: swap;
53
- src: local(""),
54
- url("nunito-sans/nunito-sans-v18-latin-400.woff2") format("woff2");
55
- }
56
-
57
- /* nunito-sans-400italic - latin */
58
- @font-face {
59
- font-family: "Nunito Sans";
60
- font-style: italic;
61
- font-weight: 400;
62
- font-display: swap;
63
- src: local(""),
64
- url("nunito-sans/nunito-sans-v18-latin-400italic.woff2") format("woff2");
65
- }
66
-
67
- /* nunito-sans-500 - latin */
68
- @font-face {
69
- font-family: "Nunito Sans";
70
- font-style: normal;
71
- font-weight: 500;
72
- font-display: swap;
73
- src: local(""),
74
- url("nunito-sans/nunito-sans-v18-latin-500.woff2") format("woff2");
75
- }
76
-
77
- /* nunito-sans-500italic - latin */
78
- @font-face {
79
- font-family: "Nunito Sans";
80
- font-style: italic;
81
- font-weight: 500;
82
- font-display: swap;
83
- src: local(""),
84
- url("nunito-sans/nunito-sans-v18-latin-500italic.woff2") format("woff2");
85
- }
86
-
87
- /* nunito-sans-600 - latin */
88
- @font-face {
89
- font-family: "Nunito Sans";
90
- font-style: normal;
91
- font-weight: 600;
92
- font-display: swap;
93
- src: local(""),
94
- url("nunito-sans/nunito-sans-v18-latin-600.woff2") format("woff2");
95
- }
96
-
97
- /* nunito-sans-600italic - latin */
98
- @font-face {
99
- font-family: "Nunito Sans";
100
- font-style: italic;
101
- font-weight: 600;
102
- font-display: swap;
103
- src: local(""),
104
- url("nunito-sans/nunito-sans-v18-latin-600italic.woff2") format("woff2");
105
- }
106
-
107
- /* nunito-sans-700 - latin */
108
- @font-face {
109
- font-family: "Nunito Sans";
110
- font-style: normal;
111
- font-weight: 700;
112
- font-display: swap;
113
- src: local(""),
114
- url("nunito-sans/nunito-sans-v18-latin-700.woff2") format("woff2");
115
- }
116
-
117
- /* nunito-sans-700italic - latin */
118
- @font-face {
119
- font-family: "Nunito Sans";
120
- font-style: italic;
121
- font-weight: 700;
122
- font-display: swap;
123
- src: local(""),
124
- url("nunito-sans/nunito-sans-v18-latin-700italic.woff2") format("woff2");
125
- }
126
-
127
- /* nunito-sans-800 - latin */
128
- @font-face {
129
- font-family: "Nunito Sans";
130
- font-style: normal;
131
- font-weight: 800;
132
- font-display: swap;
133
- src: local(""),
134
- url("nunito-sans/nunito-sans-v18-latin-800.woff2") format("woff2");
135
- }
136
-
137
- /* nunito-sans-800italic - latin */
138
- @font-face {
139
- font-family: "Nunito Sans";
140
- font-style: italic;
141
- font-weight: 800;
142
- font-display: swap;
143
- src: local(""),
144
- url("nunito-sans/nunito-sans-v18-latin-800italic.woff2") format("woff2");
145
- }
146
-
147
- /* nunito-sans-900 - latin */
148
- @font-face {
149
- font-family: "Nunito Sans";
150
- font-style: normal;
151
- font-weight: 900;
152
- font-display: swap;
153
- src: local(""),
154
- url("nunito-sans/nunito-sans-v18-latin-900.woff2") format("woff2");
155
- }
156
-
157
- /* nunito-sans-900italic - latin */
158
- @font-face {
159
- font-family: "Nunito Sans";
160
- font-style: italic;
161
- font-weight: 900;
162
- font-display: swap;
163
- src: local(""),
164
- url("nunito-sans/nunito-sans-v18-latin-900italic.woff2") format("woff2");
165
- }