willba-component-library 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -129,6 +129,6 @@ interface FilterCalendarTypes extends Partial<CalendarTypes> {
129
129
  setToggleCalendar: (val: boolean) => void;
130
130
  }
131
131
 
132
- declare function FilterCalendar(props: FilterCalendarTypes): React.JSX.Element;
132
+ declare const FilterCalendar: (props: FilterCalendarTypes) => React.JSX.Element;
133
133
 
134
134
  export { Button, FilterBar, FilterBarTypes, FilterCalendar, FilterCalendarTypes };
package/lib/index.esm.js CHANGED
@@ -512,8 +512,13 @@ var useCloseFilterSection = function (_a) {
512
512
  var filterSectionRef = useRef(null);
513
513
  useEffect(function () {
514
514
  var handleClickOutside = function (event) {
515
- if (filterSectionRef.current &&
516
- !filterSectionRef.current.contains(event.target)) {
515
+ if (!filterSectionRef.current)
516
+ return;
517
+ // composedPath() walks through Shadow DOM boundaries; event.target is
518
+ // retargeted to the shadow host when crossing them, which would falsely
519
+ // report clicks inside the panel as "outside".
520
+ var path = event.composedPath();
521
+ if (!path.includes(filterSectionRef.current)) {
517
522
  handleSelectedFilter(false);
518
523
  }
519
524
  };
@@ -3068,21 +3073,17 @@ var fiCommon = {
3068
3073
  errors: errors
3069
3074
  };
3070
3075
 
3076
+ var DEFAULT_LANGUAGE = 'fi';
3071
3077
  var resources = {
3072
3078
  en: { filterBar: enFilterBar, common: enCommon },
3073
3079
  fi: { filterBar: fiFilterBar, common: fiCommon },
3074
3080
  };
3075
- var readLocaleFromUrl = function () {
3076
- if (typeof window === 'undefined')
3077
- return null;
3078
- return new URLSearchParams(window.location.search).get('locale');
3079
- };
3080
3081
  var createI18nInstance = function (language) {
3081
3082
  var instance$1 = instance.createInstance();
3082
3083
  instance$1.use(initReactI18next).init({
3083
3084
  resources: resources,
3084
- lng: language || readLocaleFromUrl() || 'fi',
3085
- fallbackLng: 'fi',
3085
+ lng: language || DEFAULT_LANGUAGE,
3086
+ fallbackLng: DEFAULT_LANGUAGE,
3086
3087
  interpolation: { escapeValue: false },
3087
3088
  });
3088
3089
  return instance$1;
@@ -3090,7 +3091,7 @@ var createI18nInstance = function (language) {
3090
3091
 
3091
3092
  var I18nProvider = function (_a) {
3092
3093
  var language = _a.language, children = _a.children;
3093
- var i18n = useMemo(function () { return createI18nInstance(language); }, []);
3094
+ var i18n = useMemo(function () { return createI18nInstance(language); }, [language]);
3094
3095
  return React__default.createElement(I18nextProvider, { i18n: i18n }, children);
3095
3096
  };
3096
3097
 
@@ -11877,25 +11878,38 @@ var checkForContinuousSelection = function (_a) {
11877
11878
  });
11878
11879
  };
11879
11880
 
11881
+ // Returns the nearest queryable root for an element. Inside a Shadow DOM this
11882
+ // returns the ShadowRoot (so `querySelector` searches inside the shadow tree);
11883
+ // otherwise returns `document`. Both support `querySelector`/`querySelectorAll`.
11884
+ var getQueryRoot = function (el) {
11885
+ var root = el === null || el === void 0 ? void 0 : el.getRootNode();
11886
+ if (root instanceof ShadowRoot)
11887
+ return root;
11888
+ return document;
11889
+ };
11890
+
11880
11891
  var useCalendarTooltips = function (_a) {
11881
- var showFeedback = _a.showFeedback;
11892
+ var showFeedback = _a.showFeedback, rootRef = _a.rootRef;
11882
11893
  return useEffect(function () {
11883
11894
  if (typeof document === 'undefined' || !showFeedback)
11884
11895
  return;
11896
+ // Use the calendar's own DOM root (ShadowRoot or Document) so queries
11897
+ // resolve correctly when the component is mounted inside Shadow DOM.
11898
+ var root = getQueryRoot(rootRef === null || rootRef === void 0 ? void 0 : rootRef.current);
11885
11899
  // Children
11886
- var calendarTooltip = document.querySelector('.will-calendar-tooltip');
11887
- var calendarTooltipCheckOut = document.querySelector('.will-calendar-tooltip-check-out');
11888
- var calendarTooltipOverlappingDate = document.querySelector('.will-calendar-tooltip-overlapping-date');
11889
- var loadingSpinner = document.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
11890
- var calendarTooltipCheckInOnly = document.querySelector('.will-calendar-tooltip-check-in-only');
11891
- var calendarTooltipCheckOutOnly = document.querySelector('.will-calendar-tooltip-check-out-only');
11900
+ var calendarTooltip = root.querySelector('.will-calendar-tooltip');
11901
+ var calendarTooltipCheckOut = root.querySelector('.will-calendar-tooltip-check-out');
11902
+ var calendarTooltipOverlappingDate = root.querySelector('.will-calendar-tooltip-overlapping-date');
11903
+ var loadingSpinner = root.querySelector('.will-filter-bar-calendar .will-calendar-spinner');
11904
+ var calendarTooltipCheckInOnly = root.querySelector('.will-calendar-tooltip-check-in-only');
11905
+ var calendarTooltipCheckOutOnly = root.querySelector('.will-calendar-tooltip-check-out-only');
11892
11906
  // Parents
11893
- var calendarButtons = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
11894
- var calendarButtonsCheckOut = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
11895
- var calendarMonthContainer = document.querySelector('.will-filter-bar-calendar .rdp-months');
11896
- var calendarOverlappingDate = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
11897
- var calendarCheckInOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-in-only)');
11898
- var calendarCheckOutOnly = document.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-out-only)');
11907
+ var calendarButtons = root.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked):not(:has(.disabled-after-check-in))');
11908
+ var calendarButtonsCheckOut = root.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.booked.disabled-after-check-in)');
11909
+ var calendarMonthContainer = root.querySelector('.will-filter-bar-calendar .rdp-months');
11910
+ var calendarOverlappingDate = root.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.overlapping-date)');
11911
+ var calendarCheckInOnly = root.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-in-only)');
11912
+ var calendarCheckOutOnly = root.querySelectorAll('.will-filter-bar-calendar .rdp-cell:has(.check-out-only)');
11899
11913
  // Append children to parents
11900
11914
  var tooltipClonesCheckIn = [];
11901
11915
  var tooltipClonesCheckOut = [];
@@ -11955,11 +11969,12 @@ var useCalendarTooltips = function (_a) {
11955
11969
  };
11956
11970
 
11957
11971
  var useCalendarLoadingSpinner = function (_a) {
11958
- var loadingData = _a.loadingData;
11972
+ var loadingData = _a.loadingData, rootRef = _a.rootRef;
11959
11973
  return useEffect(function () {
11960
11974
  if (typeof document === 'undefined')
11961
11975
  return;
11962
- var loadingSpinner = document.querySelector('.will-filter-bar-calendar .rdp-months .will-calendar-spinner');
11976
+ var root = getQueryRoot(rootRef === null || rootRef === void 0 ? void 0 : rootRef.current);
11977
+ var loadingSpinner = root.querySelector('.will-filter-bar-calendar .rdp-months .will-calendar-spinner');
11963
11978
  if (loadingData) {
11964
11979
  if (loadingSpinner)
11965
11980
  loadingSpinner.style.display = 'flex';
@@ -12058,10 +12073,12 @@ var Calendar = forwardRef(function (_a, ref) {
12058
12073
  // Handle tooltip
12059
12074
  useCalendarTooltips({
12060
12075
  showFeedback: showFeedback,
12076
+ rootRef: calendarContainerRef,
12061
12077
  });
12062
12078
  // Handle loading spinner
12063
12079
  useCalendarLoadingSpinner({
12064
12080
  loadingData: loadingData,
12081
+ rootRef: calendarContainerRef,
12065
12082
  });
12066
12083
  // Handle the date selection and availability for selection logic.
12067
12084
  var handleOnSelect = function (range) {
@@ -12606,11 +12623,9 @@ var renderCalendarErrorMessage = function (_a) {
12606
12623
  var css_248z = ".will-root .will-calendar-wrapper {\n box-shadow: var(--will-box-shadow-dark);\n border-radius: 20px;\n background-color: var(--will-white);\n position: absolute;\n top: 0;\n left: 0;\n \n}\n\n.will-root .will-calendar-wrapper .will-calendar-header,\n.will-root .will-calendar-wrapper .will-calendar-main,\n.will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px;\n}\n\n/* Header */\n\n.will-root .will-calendar-wrapper .will-calendar-header {\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid var(--will-grey);\n align-items: center;\n}\n\n/* Footer */\n\n.will-root .will-calendar-wrapper .will-calendar-footer {\n border-top: 1px solid var(--will-grey);\n}\n\n/* Footer actions */\n\n.will-root .will-calendar-wrapper .will-calendar-footer-actions-wrapper {\n display: flex;\n justify-content: space-between;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates > div {\n margin-bottom: 5px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates-separator {\n margin: 0 15px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n display: flex;\n min-height: 20.5px;\n margin-top: 10px;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-error {\n display: flex;\n max-width: 80%;\n}\n\n.will-root .will-calendar-wrapper .will-calendar-footer-error span {\n display: inline-block;\n margin-left: 10px;\n}\n\n@media (max-width: 960px) {\n .will-root .will-calendar-wrapper {\n width: -webkit-fill-available;\n margin: 0 -6%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-header,\n .will-root .will-calendar-wrapper .will-calendar-main,\n .will-root .will-calendar-wrapper .will-calendar-footer {\n padding: 20px 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions-wrapper {\n flex-direction: column;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates {\n text-align: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-dates .will-calendar-footer-booked {\n justify-content: center;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions {\n flex-direction: column;\n width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-actions button{\n width: 100%;\n margin-top: 10px;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-error {\n max-width: 100%;\n }\n\n .will-root .will-calendar-wrapper .will-calendar-footer-error span {\n text-align: center;\n margin-left: 5px;\n }\n }\n\n.will-root .will-calendar-wrapper .will-calendar-header .will-filter-bar-close-button {\n position: initial;\n}";
12607
12624
  styleInject(css_248z);
12608
12625
 
12609
- function FilterCalendar(props) {
12610
- return (React__default.createElement(I18nProvider, { language: props.language },
12611
- React__default.createElement(FilterCalendarInner, __assign$2({}, props))));
12612
- }
12613
- function FilterCalendarInner(_a) {
12626
+ var FilterCalendar = function (props) { return (React__default.createElement(I18nProvider, { language: props.language },
12627
+ React__default.createElement(FilterCalendarInner, __assign$2({}, props)))); };
12628
+ var FilterCalendarInner = function (_a) {
12614
12629
  var calendarOffset = _a.calendarOffset, language = _a.language, palette = _a.palette, onSubmit = _a.onSubmit, outerDisableCalendarDates = _a.disableCalendarDates, toggleCalendar = _a.toggleCalendar, loadingData = _a.loadingData, setToggleCalendar = _a.setToggleCalendar, requestDates = _a.requestDates, showFeedback = _a.showFeedback, noActiveSelection = _a.noActiveSelection, outerRangeContext = _a.rangeContext;
12615
12630
  var themePalette = useTheme({ palette: palette });
12616
12631
  // Translations
@@ -12638,7 +12653,7 @@ function FilterCalendarInner(_a) {
12638
12653
  React__default.createElement(Calendar, { calendarRange: calendarRange, setCalendarRange: setCalendarRange, calendarOffset: calendarOffset, selectedPath: '/rooms', language: language, disableCalendarDates: disableCalendarDates, requestDates: requestDates, disabledDates: disabledDates, updateCalendarMonthNavigation: updateCalendarMonthNavigation, setUpdateCalendarMonthNavigation: setUpdateCalendarMonthNavigation, updateCalendarDefaultMonth: updateCalendarDefaultMonth, loadingData: loadingData, showFeedback: showFeedback, noActiveSelection: noActiveSelection, palette: palette, setCalendarHasError: setCalendarHasError, setUpdatedForSubmit: setUpdatedForSubmit, rangeContext: rangeContext, calendarHasError: calendarHasError })),
12639
12654
  React__default.createElement("div", { className: "will-calendar-footer" },
12640
12655
  React__default.createElement(Footer, { calendarHasError: calendarHasError, calendarRange: calendarRange, handleClearDates: handleClearDates, language: language, palette: palette }))))));
12641
- }
12656
+ };
12642
12657
 
12643
12658
  export { Button$1 as Button, FilterBar, FilterCalendar };
12644
12659
  //# sourceMappingURL=index.esm.js.map