summit-registration-lite 7.0.3 → 7.0.5

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 (28) hide show
  1. package/.claude/rules/summit-registration-lite-component-props.md +95 -0
  2. package/.claude/rules/summit-registration-lite-i18n.md +62 -0
  3. package/.claude/rules/summit-registration-lite-payment-providers.md +69 -0
  4. package/.claude/rules/summit-registration-lite-project.md +80 -0
  5. package/.claude/rules/summit-registration-lite-redux-actions.md +65 -0
  6. package/.claude/rules/summit-registration-lite-step-flow.md +77 -0
  7. package/.claude/rules/summit-registration-lite-testing.md +97 -0
  8. package/.claude/rules/summit-registration-lite-utils.md +71 -0
  9. package/.claude/skills/summit-registration-lite-add-provider/SKILL.md +155 -0
  10. package/.claude/skills/summit-registration-lite-dev-setup/SKILL.md +67 -0
  11. package/.claude/skills/summit-registration-lite-publish/SKILL.md +64 -0
  12. package/.claude/skills/summit-registration-lite-scaffold-component/SKILL.md +152 -0
  13. package/.codegraph/config.json +141 -0
  14. package/.codegraph/daemon.pid +6 -0
  15. package/dist/components/index.css +1 -2
  16. package/dist/components/index.js +78 -113
  17. package/dist/components/index.js.map +1 -1
  18. package/dist/components/registration-form.css +1 -2
  19. package/dist/components/registration-form.js +71 -105
  20. package/dist/components/registration-form.js.map +1 -1
  21. package/dist/components/registration-modal.css +1 -2
  22. package/dist/components/registration-modal.js +77 -112
  23. package/dist/components/registration-modal.js.map +1 -1
  24. package/dist/index.css +1 -2
  25. package/dist/index.js +77 -112
  26. package/dist/index.js.map +1 -1
  27. package/e2e/promo-code-discovery.spec.js +4 -2
  28. package/package.json +5 -3
@@ -40,7 +40,6 @@ __webpack_require__.d(__webpack_exports__, {
40
40
  "Nh": () => (/* binding */ SET_PASSWORDLESS_SETTINGS),
41
41
  "Vx": () => (/* binding */ START_WIDGET_LOADING),
42
42
  "sC": () => (/* binding */ STOP_WIDGET_LOADING),
43
- "VH": () => (/* binding */ UPDATE_CLOCK),
44
43
  "j6": () => (/* binding */ VALIDATE_PROMO_CODE),
45
44
  "o5": () => (/* binding */ VALIDATE_PROMO_CODE_ERROR),
46
45
  "Tk": () => (/* binding */ VALIDATE_PROMO_CODE_RATE_LIMITED),
@@ -63,7 +62,6 @@ __webpack_require__.d(__webpack_exports__, {
63
62
  "cL": () => (/* binding */ reserveTicket),
64
63
  "Bq": () => (/* binding */ startWidgetLoading),
65
64
  "Rs": () => (/* binding */ stopWidgetLoading),
66
- "ry": () => (/* binding */ updateClock),
67
65
  "jn": () => (/* binding */ validatePromoCode)
68
66
  });
69
67
 
@@ -398,7 +396,6 @@ const GO_TO_LOGIN = 'GO_TO_LOGIN';
398
396
  const GET_MY_INVITATION = 'GET_MY_INVITATION';
399
397
  const CLEAR_MY_INVITATION = 'CLEAR_MY_INVITATION';
400
398
  const CLEAR_WIDGET_STATE = 'CLEAR_WIDGET_STATE';
401
- const UPDATE_CLOCK = 'UPDATE_CLOCK';
402
399
  const LOAD_PROFILE_DATA = 'LOAD_PROFILE_DATA';
403
400
  const SET_CURRENT_PROMO_CODE = 'SET_CURRENT_PROMO_CODE';
404
401
  const CLEAR_CURRENT_PROMO_CODE = 'CLEAR_CURRENT_PROMO_CODE';
@@ -899,11 +896,6 @@ const getMyInvitation = summitId => async (dispatch, getState, {
899
896
  return Promise.reject(e);
900
897
  }
901
898
  };
902
- const updateClock = timestamp => dispatch => {
903
- dispatch((0,actions_namespaceObject.createAction)(UPDATE_CLOCK)({
904
- timestamp
905
- }));
906
- };
907
899
 
908
900
  /***/ }),
909
901
 
@@ -1344,7 +1336,7 @@ LoginComponent.defaultProps = {
1344
1336
 
1345
1337
  /***/ }),
1346
1338
 
1347
- /***/ 95:
1339
+ /***/ 485:
1348
1340
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1349
1341
 
1350
1342
  "use strict";
@@ -1363,8 +1355,10 @@ var external_react_redux_ = __webpack_require__(22);
1363
1355
  // EXTERNAL MODULE: external "prop-types"
1364
1356
  var external_prop_types_ = __webpack_require__(580);
1365
1357
  var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
1366
- // EXTERNAL MODULE: ./src/utils/withReduxProvider.js + 9 modules
1367
- var withReduxProvider = __webpack_require__(974);
1358
+ // EXTERNAL MODULE: ./src/utils/withWidgetProviders.js + 8 modules
1359
+ var withWidgetProviders = __webpack_require__(336);
1360
+ // EXTERNAL MODULE: external "openstack-uicore-foundation/lib/components/clock-context"
1361
+ var clock_context_ = __webpack_require__(959);
1368
1362
  ;// CONCATENATED MODULE: external "react-spring"
1369
1363
  const external_react_spring_namespaceObject = require("react-spring");
1370
1364
  ;// CONCATENATED MODULE: external "react-use"
@@ -1626,9 +1620,6 @@ const usePromoCode = ({
1626
1620
  ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components/ajaxloader"
1627
1621
  const ajaxloader_namespaceObject = require("openstack-uicore-foundation/lib/components/ajaxloader");
1628
1622
  var ajaxloader_default = /*#__PURE__*/__webpack_require__.n(ajaxloader_namespaceObject);
1629
- ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/components/clock"
1630
- const clock_namespaceObject = require("openstack-uicore-foundation/lib/components/clock");
1631
- var clock_default = /*#__PURE__*/__webpack_require__.n(clock_namespaceObject);
1632
1623
  // EXTERNAL MODULE: ./src/components/login/index.js + 2 modules
1633
1624
  var login = __webpack_require__(462);
1634
1625
  ;// CONCATENATED MODULE: ./src/components/payment/index.module.scss
@@ -3000,17 +2991,19 @@ const PromoCodeInput = ({
3000
2991
  /* harmony default export */ const promocode_input = (PromoCodeInput);
3001
2992
  ;// CONCATENATED MODULE: ./src/components/ticket-notice/index.module.scss
3002
2993
  // extracted by mini-css-extract-plugin
3003
- /* harmony default export */ const ticket_notice_index_module = ({"notice":"notice____Pa2z","error":"error___WzZms","info":"info___WFfzs","icon":"icon___YWZms"});
2994
+ /* harmony default export */ const ticket_notice_index_module = ({"notice":"notice____Pa2z","content":"content___sR1Ps","error":"error___WzZms","info":"info___WFfzs","icon":"icon___YWZms"});
3004
2995
  ;// CONCATENATED MODULE: ./src/components/ticket-notice/index.js
3005
2996
 
3006
2997
  // `message` is either a single string or an array of strings. Arrays render
3007
2998
  // stacked consecutively inside the same notice box. Returns null when the
3008
2999
  // message is empty/unset so callers can pass conditional arrays without an
3009
- // outer guard.
3000
+ // outer guard. Pass `html` when the message is admin-authored HTML (e.g.
3001
+ // marketing settings) that needs link rendering.
3010
3002
 
3011
3003
  const TicketNotice = ({
3012
3004
  message,
3013
- variant = 'info'
3005
+ variant = 'info',
3006
+ html = false
3014
3007
  }) => {
3015
3008
  const items = Array.isArray(message) ? message : message ? [message] : [];
3016
3009
  if (items.length === 0) return null;
@@ -3018,9 +3011,16 @@ const TicketNotice = ({
3018
3011
  className: `${ticket_notice_index_module.notice} ${ticket_notice_index_module[variant]}`
3019
3012
  }, variant === 'error' && /*#__PURE__*/external_react_default().createElement("span", {
3020
3013
  className: ticket_notice_index_module.icon
3021
- }, "\u26A0"), items.map((m, i) => /*#__PURE__*/external_react_default().createElement("div", {
3014
+ }, "\u26A0"), /*#__PURE__*/external_react_default().createElement("div", {
3015
+ className: ticket_notice_index_module.content
3016
+ }, items.map((m, i) => html ? /*#__PURE__*/external_react_default().createElement("div", {
3017
+ key: i,
3018
+ dangerouslySetInnerHTML: {
3019
+ __html: m
3020
+ }
3021
+ }) : /*#__PURE__*/external_react_default().createElement("div", {
3022
3022
  key: i
3023
- }, m)));
3023
+ }, m))));
3024
3024
  };
3025
3025
 
3026
3026
  /* harmony default export */ const ticket_notice = (TicketNotice);
@@ -3075,7 +3075,7 @@ const TicketTypeComponent = ({
3075
3075
  promoCode,
3076
3076
  promoCodeAllowsReassign = true,
3077
3077
  trackViewItem,
3078
- noTicketsAvailableMessage
3078
+ noAllowedTicketsMessage
3079
3079
  }) => {
3080
3080
  const {
3081
3081
  state: promoState = {},
@@ -3295,8 +3295,9 @@ const TicketTypeComponent = ({
3295
3295
  }, /*#__PURE__*/external_react_default().createElement("i", {
3296
3296
  className: "fa fa-plus"
3297
3297
  }))))))), !showTicketSelector && /*#__PURE__*/external_react_default().createElement(ticket_notice, {
3298
- message: noTicketsAvailableMessage || external_i18n_react_default().translate("ticket_type.no_tickets_available"),
3299
- variant: "info"
3298
+ message: noAllowedTicketsMessage || external_i18n_react_default().translate("ticket_type.no_tickets_available"),
3299
+ variant: "info",
3300
+ html: !!noAllowedTicketsMessage
3300
3301
  }), /*#__PURE__*/external_react_default().createElement((external_react_tooltip_default()), {
3301
3302
  id: "ticket-quantity-info",
3302
3303
  place: "bottom",
@@ -3411,7 +3412,7 @@ const external_react_content_loader_namespaceObject = require("react-content-loa
3411
3412
  var external_react_content_loader_default = /*#__PURE__*/__webpack_require__.n(external_react_content_loader_namespaceObject);
3412
3413
  ;// CONCATENATED MODULE: ./src/components/purchase-complete/index.js
3413
3414
  const _excluded = ["cta", "clear", "close"],
3414
- _excluded2 = ["checkout", "user", "onPurchaseComplete", "goToExtraQuestions", "goToEvent", "goToMyOrders", "completedExtraQuestions", "summit", "nowUtc", "clearWidgetState", "closeWidget", "supportEmail", "hasVirtualAccessLevel"];
3415
+ _excluded2 = ["checkout", "user", "onPurchaseComplete", "goToExtraQuestions", "goToEvent", "goToMyOrders", "completedExtraQuestions", "summit", "clearWidgetState", "closeWidget", "supportEmail", "hasVirtualAccessLevel"];
3415
3416
 
3416
3417
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
3417
3418
 
@@ -3438,6 +3439,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
3438
3439
 
3439
3440
 
3440
3441
 
3442
+
3441
3443
  const CTAButton = _ref => {
3442
3444
  let {
3443
3445
  cta,
@@ -3466,7 +3468,6 @@ const PurchaseComplete = _ref2 => {
3466
3468
  goToMyOrders,
3467
3469
  completedExtraQuestions,
3468
3470
  summit,
3469
- nowUtc,
3470
3471
  clearWidgetState,
3471
3472
  closeWidget,
3472
3473
  supportEmail,
@@ -3479,8 +3480,10 @@ const PurchaseComplete = _ref2 => {
3479
3480
  }, []);
3480
3481
  const [requireExtraQuestions, setRequireExtraQuestions] = (0,external_react_.useState)(null);
3481
3482
  const [extraQuestionsLoaded, setExtraQuestonsLoaded] = (0,external_react_.useState)(false);
3482
- const isMultiOrder = (0,external_react_.useMemo)(() => checkout?.tickets.length > 1, [checkout]);
3483
- const isActive = (0,external_react_.useMemo)(() => summit.start_date <= nowUtc && summit.end_date >= nowUtc, [summit, nowUtc]);
3483
+ const isMultiOrder = (0,external_react_.useMemo)(() => checkout?.tickets.length > 1, [checkout]); // Re-runs every clock tick but the boolean only changes on summit
3484
+ // active/inactive transitions (typically zero times per session).
3485
+
3486
+ const isActive = (0,clock_context_.useClockSelector)((0,external_react_.useCallback)(nowUtc => summit.start_date <= nowUtc && summit.end_date >= nowUtc, [summit.start_date, summit.end_date]));
3484
3487
  const currentTicket = (0,external_react_.useMemo)(() => isMultiOrder ? checkout?.tickets.find(t => t?.owner?.email === user?.email) : checkout?.tickets.find(t => t?.owner), [user]);
3485
3488
  (0,external_react_.useEffect)(() => {
3486
3489
  completedExtraQuestions(currentTicket?.owner || null).then(res => {
@@ -3629,40 +3632,6 @@ const TicketOwnedComponent = ({
3629
3632
  };
3630
3633
 
3631
3634
  /* harmony default export */ const ticket_owned = (TicketOwnedComponent);
3632
- ;// CONCATENATED MODULE: ./src/components/no-allowed-tickets/index.module.scss
3633
- // extracted by mini-css-extract-plugin
3634
- /* harmony default export */ const no_allowed_tickets_index_module = ({"noAllowedWrapper":"noAllowedWrapper___k52of","alert":"alert___McKm0"});
3635
- ;// CONCATENATED MODULE: ./src/components/no-allowed-tickets/index.js
3636
- /**
3637
- * Copyright 2020 OpenStack Foundation
3638
- * Licensed under the Apache License, Version 2.0 (the "License");
3639
- * you may not use this file except in compliance with the License.
3640
- * You may obtain a copy of the License at
3641
- * http://www.apache.org/licenses/LICENSE-2.0
3642
- * Unless required by applicable law or agreed to in writing, software
3643
- * distributed under the License is distributed on an "AS IS" BASIS,
3644
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3645
- * See the License for the specific language governing permissions and
3646
- * limitations under the License.
3647
- **/
3648
-
3649
-
3650
-
3651
- const NoAllowedTickets = ({
3652
- noAllowedTicketsMessage
3653
- }) => {
3654
- return /*#__PURE__*/React.createElement("div", {
3655
- className: styles.noAllowedWrapper
3656
- }, /*#__PURE__*/React.createElement("div", {
3657
- className: `${styles.alert} alert alert-warning`,
3658
- role: "alert",
3659
- dangerouslySetInnerHTML: {
3660
- __html: noAllowedTicketsMessage
3661
- }
3662
- }));
3663
- };
3664
-
3665
- /* harmony default export */ const no_allowed_tickets = ((/* unused pure expression or super */ null && (NoAllowedTickets)));
3666
3635
  ;// CONCATENATED MODULE: ./src/components/ticket-taxes-error/index.module.scss
3667
3636
  // extracted by mini-css-extract-plugin
3668
3637
  /* harmony default export */ const ticket_taxes_error_index_module = ({"ticketTaxesErrorWrapper":"ticketTaxesErrorWrapper___ldztd","alert":"alert___AM17V"});
@@ -3702,7 +3671,7 @@ const TicketTaxesError = ({
3702
3671
 
3703
3672
  /* harmony default export */ const ticket_taxes_error = (TicketTaxesError);
3704
3673
  ;// CONCATENATED MODULE: ./src/components/registration-form/index.js
3705
- const registration_form_excluded = ["loadSession", "setMarketingSettings", "changeStep", "removeReservedTicket", "reserveTicket", "payTicketWithProvider", "trackEvent", "onPurchaseComplete", "getTicketTypesAndTaxes", "getLoginCode", "passwordlessLogin", "goToLogin", "loginOptions", "allowsNativeAuth", "allowsOtpAuth", "reservation", "checkout", "ticketTypes", "taxTypes", "step", "passwordlessCodeSent", "passwordlessEmail", "passwordlessCode", "passwordlessCodeLifeTime", "getPasswordlessCode", "passwordlessCodeError", "loginWithCode", "goToExtraQuestions", "goToMyOrders", "goToEvent", "profileData", "summitData", "supportEmail", "ticketOwned", "ownedTickets", "widgetLoading", "loading", "inPersonDisclaimer", "userProfile", "handleCompanyError", "providerOptions", "invitation", "loginInitialEmailInputValue", "getMyInvitation", "showMultipleTicketTexts", "noAllowedTicketsMessage", "noTicketsAvailableMessage", "ticketTaxesErrorMessage", "authErrorCallback", "clearWidgetState", "allowPromoCodes", "showCompanyInput", "companyDDLPlaceholder", "nowUtc", "updateClock", "completedExtraQuestions", "loadProfileData", "closeWidget", "hasVirtualAccessLevel", "hidePostalCode", "onError", "successfulPaymentReturnUrl", "idpLogoLight", "idpLogoDark", "idpLogoAlt", "showCompanyInputDefaultOptions", "companyDDLOptions2Show", "promoCode", "promoCodeVerified", "promoCodeValidating", "promoCodeAllowsReassign", "discoveredPromoCodes", "hasDiscount", "getTicketDiscount", "removePromoCode", "applyPromoCode", "validatePromoCode", "discoverPromoCodes", "startWidgetLoading", "stopWidgetLoading", "closeHandlerRef"];
3674
+ const registration_form_excluded = ["loadSession", "setMarketingSettings", "changeStep", "removeReservedTicket", "reserveTicket", "payTicketWithProvider", "trackEvent", "onPurchaseComplete", "getTicketTypesAndTaxes", "getLoginCode", "passwordlessLogin", "goToLogin", "loginOptions", "allowsNativeAuth", "allowsOtpAuth", "reservation", "checkout", "ticketTypes", "taxTypes", "step", "passwordlessCodeSent", "passwordlessEmail", "passwordlessCode", "passwordlessCodeLifeTime", "getPasswordlessCode", "passwordlessCodeError", "loginWithCode", "goToExtraQuestions", "goToMyOrders", "goToEvent", "profileData", "summitData", "supportEmail", "ticketOwned", "ownedTickets", "widgetLoading", "loading", "inPersonDisclaimer", "userProfile", "handleCompanyError", "providerOptions", "invitation", "loginInitialEmailInputValue", "getMyInvitation", "showMultipleTicketTexts", "noAllowedTicketsMessage", "ticketTaxesErrorMessage", "authErrorCallback", "clearWidgetState", "allowPromoCodes", "showCompanyInput", "companyDDLPlaceholder", "completedExtraQuestions", "loadProfileData", "closeWidget", "hasVirtualAccessLevel", "hidePostalCode", "onError", "successfulPaymentReturnUrl", "idpLogoLight", "idpLogoDark", "idpLogoAlt", "showCompanyInputDefaultOptions", "companyDDLOptions2Show", "promoCode", "promoCodeVerified", "promoCodeValidating", "promoCodeAllowsReassign", "discoveredPromoCodes", "hasDiscount", "getTicketDiscount", "removePromoCode", "applyPromoCode", "validatePromoCode", "discoverPromoCodes", "startWidgetLoading", "stopWidgetLoading", "closeHandlerRef"];
3706
3675
 
3707
3676
  function registration_form_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3708
3677
 
@@ -3751,7 +3720,6 @@ function registration_form_objectWithoutPropertiesLoose(source, excluded) { if (
3751
3720
 
3752
3721
 
3753
3722
 
3754
-
3755
3723
 
3756
3724
 
3757
3725
  let language = (0,utils/* getCurrentUserLanguage */.AS)();
@@ -3767,6 +3735,11 @@ try {
3767
3735
  external_i18n_react_default().setTexts(__webpack_require__(443));
3768
3736
  }
3769
3737
 
3738
+ const isTicketCurrentlyAvailable = (tt, nowUtc) => // prepaid tickets are always available (sales windows don't apply)
3739
+ tt.sub_type === constants.TICKET_TYPE_SUBTYPE_PREPAID || // no sales window configured → ticket is open-ended, always available
3740
+ tt.sales_start_date === null && tt.sales_end_date === null || // ticket is within its configured sales window
3741
+ nowUtc >= tt.sales_start_date && nowUtc <= tt.sales_end_date;
3742
+
3770
3743
  const RegistrationFormContent = _ref => {
3771
3744
  let {
3772
3745
  loadSession,
@@ -3815,15 +3788,12 @@ const RegistrationFormContent = _ref => {
3815
3788
  getMyInvitation,
3816
3789
  showMultipleTicketTexts,
3817
3790
  noAllowedTicketsMessage,
3818
- noTicketsAvailableMessage,
3819
3791
  ticketTaxesErrorMessage,
3820
3792
  authErrorCallback,
3821
3793
  clearWidgetState,
3822
3794
  allowPromoCodes,
3823
3795
  showCompanyInput,
3824
3796
  companyDDLPlaceholder,
3825
- nowUtc,
3826
- updateClock,
3827
3797
  completedExtraQuestions,
3828
3798
  loadProfileData,
3829
3799
  closeWidget,
@@ -3882,9 +3852,11 @@ const RegistrationFormContent = _ref => {
3882
3852
  const {
3883
3853
  publicKey,
3884
3854
  provider
3885
- } = (0,utils/* getCurrentProvider */.U5)(summitData);
3886
- const allowedTicketTypes = (0,external_react_.useMemo)(() => hasTicketData ? ticketTypes.filter(tt => tt.sub_type === constants.TICKET_TYPE_SUBTYPE_PREPAID || tt.sales_start_date === null && tt.sales_end_date === null || nowUtc >= tt.sales_start_date && nowUtc <= tt.sales_end_date) : [], [hasTicketData, ticketTypes, nowUtc]);
3887
- const noAvailableTickets = (0,external_react_.useMemo)(() => isAuthenticated && hasTicketData && !ticketDataError && allowedTicketTypes.length === 0 && step !== constants.STEP_COMPLETE, [isAuthenticated, hasTicketData, ticketDataError, allowedTicketTypes, step]);
3855
+ } = (0,utils/* getCurrentProvider */.U5)(summitData); // Re-runs every clock tick but only commits a new array when the filtered
3856
+ // contents shift (a sale window opens/closes), so the form tree stops
3857
+ // re-rendering once per second.
3858
+
3859
+ const allowedTicketTypes = (0,clock_context_.useClockSelector)((0,external_react_.useCallback)(nowUtc => hasTicketData ? ticketTypes.filter(tt => isTicketCurrentlyAvailable(tt, nowUtc)) : [], [hasTicketData, ticketTypes]), external_react_redux_.shallowEqual);
3888
3860
  const alreadyOwnedTickets = (0,external_react_.useMemo)(() => isAuthenticated && hasTicketData && !ticketDataError && allowedTicketTypes.length > 0 && ownedTickets.length > 0, [isAuthenticated, hasTicketData, ticketDataError, allowedTicketTypes, ownedTickets]);
3889
3861
  (0,external_react_.useEffect)(() => {
3890
3862
  if (profileData) loadProfileData(profileData);
@@ -4063,9 +4035,6 @@ const RegistrationFormContent = _ref => {
4063
4035
  color: '#ffffff',
4064
4036
  show: widgetLoading || loading,
4065
4037
  size: 80
4066
- }), /*#__PURE__*/external_react_default().createElement((clock_default()), {
4067
- onTick: timestamp => updateClock(timestamp),
4068
- timezone: summitData.time_zone_id
4069
4038
  }), profileData && ticketDataError && /*#__PURE__*/external_react_default().createElement(ticket_taxes_error, {
4070
4039
  ticketTaxesErrorMessage: ticketTaxesErrorMessage,
4071
4040
  retryTicketTaxes: () => handleGetTicketTypesAndTaxes(summitData?.id)
@@ -4108,7 +4077,7 @@ const RegistrationFormContent = _ref => {
4108
4077
  changeForm: mergeFormValues,
4109
4078
  trackViewItem: trackViewItem,
4110
4079
  showMultipleTicketTexts: showMultipleTicketTexts,
4111
- noTicketsAvailableMessage: noTicketsAvailableMessage
4080
+ noAllowedTicketsMessage: noAllowedTicketsMessage
4112
4081
  }), /*#__PURE__*/external_react_default().createElement(personal_information, {
4113
4082
  isActive: step === constants.STEP_PERSONAL_INFO,
4114
4083
  reservation: reservation,
@@ -4181,7 +4150,6 @@ const RegistrationFormContent = _ref => {
4181
4150
  goToMyOrders: goToMyOrders,
4182
4151
  goToExtraQuestions: goToExtraQuestions,
4183
4152
  completedExtraQuestions: completedExtraQuestions,
4184
- nowUtc: nowUtc,
4185
4153
  clearWidgetState: clearWidgetState,
4186
4154
  closeWidget: closeWidget,
4187
4155
  hasVirtualAccessLevel: hasVirtualAccessLevel,
@@ -4212,7 +4180,6 @@ const mapStateToProps = ({
4212
4180
  passwordlessCodeLifeTime: registrationLiteState.passwordless.otp_lifetime,
4213
4181
  passwordlessCodeSent: registrationLiteState.passwordless.code_sent,
4214
4182
  passwordlessCodeError: registrationLiteState.passwordless.error,
4215
- nowUtc: registrationLiteState.nowUtc,
4216
4183
  promoCode: registrationLiteState.promoCode,
4217
4184
  promoCodeVerified: registrationLiteState.promoCodeVerified,
4218
4185
  promoCodeValidating: registrationLiteState.promoCodeValidating,
@@ -4232,7 +4199,6 @@ const RegistrationForm = (0,external_react_redux_.connect)(mapStateToProps, {
4232
4199
  goToLogin: actions/* goToLogin */.hh,
4233
4200
  getMyInvitation: actions/* getMyInvitation */.q1,
4234
4201
  clearWidgetState: actions/* clearWidgetState */.YS,
4235
- updateClock: actions/* updateClock */.ry,
4236
4202
  loadProfileData: actions/* loadProfileData */.Bi,
4237
4203
  applyPromoCode: actions/* applyPromoCode */.gs,
4238
4204
  removePromoCode: actions/* removePromoCode */.$r,
@@ -4292,7 +4258,7 @@ RegistrationForm.propTypes = {
4292
4258
  companyDDLOptions2Show: (external_prop_types_default()).number
4293
4259
  };
4294
4260
 
4295
- /* harmony default export */ const registration_form = ((0,withReduxProvider/* withReduxProvider */.y)(RegistrationForm));
4261
+ /* harmony default export */ const registration_form = ((0,withWidgetProviders/* withWidgetProviders */.F)(RegistrationForm));
4296
4262
 
4297
4263
  /***/ }),
4298
4264
 
@@ -4312,10 +4278,10 @@ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_)
4312
4278
  // EXTERNAL MODULE: external "prop-types"
4313
4279
  var external_prop_types_ = __webpack_require__(580);
4314
4280
  var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
4315
- // EXTERNAL MODULE: ./src/components/registration-form/index.js + 46 modules
4316
- var registration_form = __webpack_require__(95);
4317
- // EXTERNAL MODULE: ./src/utils/withReduxProvider.js + 9 modules
4318
- var withReduxProvider = __webpack_require__(974);
4281
+ // EXTERNAL MODULE: ./src/components/registration-form/index.js + 43 modules
4282
+ var registration_form = __webpack_require__(485);
4283
+ // EXTERNAL MODULE: ./src/utils/withWidgetProviders.js + 8 modules
4284
+ var withWidgetProviders = __webpack_require__(336);
4319
4285
  ;// CONCATENATED MODULE: ./src/styles/general.module.scss
4320
4286
  // extracted by mini-css-extract-plugin
4321
4287
  /* harmony default export */ const general_module = ({"modal":"modal___G3Cmq","modalContent":"modalContent___lIaqw","outerWrapper":"outerWrapper___OWXyi","innerWrapper":"innerWrapper___mIrBF","title":"title___Tbvkl"});
@@ -4428,7 +4394,6 @@ RegistrationModal.propTypes = {
4428
4394
  initialOrderComplete1stParagraph: (external_prop_types_default()).string,
4429
4395
  initialOrderComplete2ndParagraph: (external_prop_types_default()).string,
4430
4396
  initialOrderCompleteButton: (external_prop_types_default()).string,
4431
- noTicketsAvailableMessage: (external_prop_types_default()).string,
4432
4397
  orderCompleteTitle: (external_prop_types_default()).string,
4433
4398
  orderComplete1stParagraph: (external_prop_types_default()).string,
4434
4399
  orderComplete2ndParagraph: (external_prop_types_default()).string,
@@ -4436,7 +4401,7 @@ RegistrationModal.propTypes = {
4436
4401
  showCompanyInputDefaultOptions: (external_prop_types_default()).bool,
4437
4402
  companyDDLOptions2Show: (external_prop_types_default()).number
4438
4403
  };
4439
- /* harmony default export */ const registration_modal = ((0,withReduxProvider/* withReduxProvider */.y)(RegistrationModal));
4404
+ /* harmony default export */ const registration_modal = ((0,withWidgetProviders/* withWidgetProviders */.F)(RegistrationModal));
4440
4405
 
4441
4406
  /***/ }),
4442
4407
 
@@ -4799,14 +4764,14 @@ const avoidTooltipOverflow = ({
4799
4764
 
4800
4765
  /***/ }),
4801
4766
 
4802
- /***/ 974:
4767
+ /***/ 336:
4803
4768
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4804
4769
 
4805
4770
  "use strict";
4806
4771
 
4807
4772
  // EXPORTS
4808
4773
  __webpack_require__.d(__webpack_exports__, {
4809
- "y": () => (/* binding */ withReduxProvider)
4774
+ "F": () => (/* binding */ withWidgetProviders)
4810
4775
  });
4811
4776
 
4812
4777
  // UNUSED EXPORTS: default
@@ -4818,6 +4783,8 @@ var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_)
4818
4783
  var external_react_redux_ = __webpack_require__(22);
4819
4784
  ;// CONCATENATED MODULE: external "redux-persist/integration/react"
4820
4785
  const react_namespaceObject = require("redux-persist/integration/react");
4786
+ // EXTERNAL MODULE: external "openstack-uicore-foundation/lib/components/clock-context"
4787
+ var clock_context_ = __webpack_require__(959);
4821
4788
  ;// CONCATENATED MODULE: external "redux"
4822
4789
  const external_redux_namespaceObject = require("redux");
4823
4790
  ;// CONCATENATED MODULE: external "redux-thunk"
@@ -4832,9 +4799,6 @@ var storage_default = /*#__PURE__*/__webpack_require__.n(storage_namespaceObject
4832
4799
  var actions = __webpack_require__(595);
4833
4800
  ;// CONCATENATED MODULE: external "openstack-uicore-foundation/lib/security/actions"
4834
4801
  const actions_namespaceObject = require("openstack-uicore-foundation/lib/security/actions");
4835
- ;// CONCATENATED MODULE: external "moment"
4836
- const external_moment_namespaceObject = require("moment");
4837
- var external_moment_default = /*#__PURE__*/__webpack_require__.n(external_moment_namespaceObject);
4838
4802
  // EXTERNAL MODULE: ./src/utils/constants.js
4839
4803
  var constants = __webpack_require__(243);
4840
4804
  ;// CONCATENATED MODULE: ./src/reducer.js
@@ -4859,8 +4823,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
4859
4823
 
4860
4824
 
4861
4825
 
4862
-
4863
- const localNowUtc = external_moment_default()().unix();
4864
4826
  const DEFAULT_STATE = {
4865
4827
  reservation: null,
4866
4828
  checkout: null,
@@ -4884,7 +4846,6 @@ const DEFAULT_STATE = {
4884
4846
  summitId: null,
4885
4847
  userProfile: null
4886
4848
  },
4887
- nowUtc: localNowUtc,
4888
4849
  promoCode: '',
4889
4850
  promoCodeVerified: null,
4890
4851
  promoCodeValidating: false,
@@ -5084,16 +5045,6 @@ const RegistrationLiteReducer = (state = DEFAULT_STATE, action) => {
5084
5045
  });
5085
5046
  }
5086
5047
 
5087
- case actions/* UPDATE_CLOCK */.VH:
5088
- {
5089
- const {
5090
- timestamp
5091
- } = payload;
5092
- return _objectSpread(_objectSpread({}, state), {}, {
5093
- nowUtc: timestamp
5094
- });
5095
- }
5096
-
5097
5048
  case actions/* CLEAR_CURRENT_PROMO_CODE */.ZD:
5098
5049
  {
5099
5050
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -5213,7 +5164,7 @@ const getPersistor = () => {
5213
5164
  persistor = (0,external_redux_persist_namespaceObject.persistStore)(store, null, onRehydrateComplete);
5214
5165
  return persistor;
5215
5166
  };
5216
- ;// CONCATENATED MODULE: ./src/utils/withReduxProvider.js
5167
+ ;// CONCATENATED MODULE: ./src/utils/withWidgetProviders.js
5217
5168
  /**
5218
5169
  * Copyright 2026 OpenStack Foundation
5219
5170
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -5226,36 +5177,42 @@ const getPersistor = () => {
5226
5177
  * See the License for the specific language governing permissions and
5227
5178
  * limitations under the License.
5228
5179
  *
5229
- * HOC to wrap a component with Redux Provider and PersistGate.
5180
+ * HOC to wrap a widget root with Redux, PersistGate, and ClockProvider.
5230
5181
  **/
5231
5182
 
5232
5183
 
5233
5184
 
5234
5185
 
5235
- const withReduxProvider = WrappedComponent => {
5236
- class WithReduxProvider extends (external_react_default()).PureComponent {
5186
+
5187
+ const withWidgetProviders = WrappedComponent => {
5188
+ class WithWidgetProviders extends (external_react_default()).PureComponent {
5237
5189
  constructor(props) {
5238
5190
  super(props);
5239
5191
  this.store = getStore(props.clientId, props.apiBaseUrl, props.getAccessToken);
5240
5192
  }
5241
5193
 
5242
5194
  render() {
5195
+ const {
5196
+ summitData
5197
+ } = this.props;
5243
5198
  return /*#__PURE__*/external_react_default().createElement(external_react_redux_.Provider, {
5244
5199
  store: this.store
5245
5200
  }, /*#__PURE__*/external_react_default().createElement(react_namespaceObject.PersistGate, {
5246
5201
  persistor: getPersistor()
5247
- }, /*#__PURE__*/external_react_default().createElement(WrappedComponent, this.props)));
5202
+ }, /*#__PURE__*/external_react_default().createElement(clock_context_.ClockProvider, {
5203
+ timezone: summitData?.time_zone_id || 'UTC',
5204
+ now: Math.floor(Date.now() / 1000)
5205
+ }, /*#__PURE__*/external_react_default().createElement(WrappedComponent, this.props))));
5248
5206
  }
5249
5207
 
5250
- } // Copy propTypes and defaultProps from wrapped component
5251
-
5208
+ }
5252
5209
 
5253
- WithReduxProvider.propTypes = WrappedComponent.propTypes;
5254
- WithReduxProvider.defaultProps = WrappedComponent.defaultProps;
5255
- WithReduxProvider.displayName = `WithReduxProvider(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
5256
- return WithReduxProvider;
5210
+ WithWidgetProviders.propTypes = WrappedComponent.propTypes;
5211
+ WithWidgetProviders.defaultProps = WrappedComponent.defaultProps;
5212
+ WithWidgetProviders.displayName = `WithWidgetProviders(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
5213
+ return WithWidgetProviders;
5257
5214
  };
5258
- /* harmony default export */ const utils_withReduxProvider = ((/* unused pure expression or super */ null && (withReduxProvider)));
5215
+ /* harmony default export */ const utils_withWidgetProviders = ((/* unused pure expression or super */ null && (withWidgetProviders)));
5259
5216
 
5260
5217
  /***/ }),
5261
5218
 
@@ -5302,6 +5259,14 @@ webpackContext.id = 267;
5302
5259
 
5303
5260
  /***/ }),
5304
5261
 
5262
+ /***/ 959:
5263
+ /***/ ((module) => {
5264
+
5265
+ "use strict";
5266
+ module.exports = require("openstack-uicore-foundation/lib/components/clock-context");
5267
+
5268
+ /***/ }),
5269
+
5305
5270
  /***/ 580:
5306
5271
  /***/ ((module) => {
5307
5272
 
@@ -5425,7 +5390,7 @@ __webpack_require__.r(__webpack_exports__);
5425
5390
  /* harmony import */ var _login__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(462);
5426
5391
  /* harmony import */ var _login_passwordless__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(590);
5427
5392
  /* harmony import */ var _registration_modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(889);
5428
- /* harmony import */ var _registration_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(95);
5393
+ /* harmony import */ var _registration_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(485);
5429
5394
  /**
5430
5395
  * Copyright 2026 OpenStack Foundation
5431
5396
  * Licensed under the Apache License, Version 2.0 (the "License");