@homebound/beam 2.392.0 → 2.393.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -13707,7 +13707,7 @@ var variantStyles2 = {
13707
13707
  };
13708
13708
 
13709
13709
  // src/components/BeamContext.tsx
13710
- import { createContext as createContext6, useContext as useContext15, useMemo as useMemo33, useReducer, useRef as useRef43 } from "react";
13710
+ import { createContext as createContext6, useContext as useContext15, useMemo as useMemo35, useReducer, useRef as useRef43 } from "react";
13711
13711
  import { OverlayProvider } from "react-aria";
13712
13712
 
13713
13713
  // src/components/Modal/Modal.tsx
@@ -15584,1336 +15584,1514 @@ function FullBleed({ children, omitPadding = false }) {
15584
15584
  });
15585
15585
  }
15586
15586
 
15587
- // src/components/Layout/PreventBrowserScroll.tsx
15588
- import { jsx as jsx123 } from "@emotion/react/jsx-runtime";
15589
- function PreventBrowserScroll({ children }) {
15590
- return (
15591
- // Take over the full viewport and hide any overflown content.
15592
- // Using `-webkit-fill-available`, otherwise `height: 100vh` includes the app bars in mobile Safari. See https://allthingssmitty.com/2020/05/11/css-fix-for-100vh-in-mobile-webkit/
15593
- // Setting the multiple "(min|max-)height" properties is necessary, as Truss will turn this into an object and there can only be one `height` property.
15594
- /* @__PURE__ */ jsx123("div", { css: Css.oh.vh100.mh("-webkit-fill-available").maxh("-webkit-fill-available").$, children: /* @__PURE__ */ jsx123("div", { css: Css.h100.df.fdc.mh0.oa.$, children }) })
15595
- );
15596
- }
15587
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
15588
+ import React14, { useEffect as useEffect25, useState as useState35 } from "react";
15597
15589
 
15598
- // src/components/Layout/RightPaneLayout/RightPaneContext.tsx
15599
- import React14, { useCallback as useCallback18, useContext as useContext13, useMemo as useMemo31, useState as useState34 } from "react";
15600
- import { jsx as jsx124 } from "@emotion/react/jsx-runtime";
15601
- var RightPaneContext = React14.createContext({
15602
- openInPane: () => {
15603
- },
15604
- closePane: () => {
15605
- },
15606
- clearPane: () => {
15607
- },
15608
- isRightPaneOpen: false,
15609
- rightPaneContent: null
15610
- });
15611
- function RightPaneProvider({ children }) {
15612
- const [rightPaneContent, setRightPaneContent] = useState34(void 0);
15613
- const [isRightPaneOpen, setIsRightPaneOpen] = useState34(false);
15614
- const openInPane = useCallback18(
15615
- (opts) => {
15616
- setRightPaneContent(opts?.content);
15617
- setIsRightPaneOpen(true);
15618
- },
15619
- [setRightPaneContent]
15620
- );
15621
- const closePane = useCallback18(() => setIsRightPaneOpen(false), []);
15622
- const clearPane = useCallback18(() => setRightPaneContent(void 0), [setRightPaneContent]);
15623
- const context = useMemo31(
15624
- () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),
15625
- [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen]
15626
- );
15627
- return /* @__PURE__ */ jsx124(RightPaneContext.Provider, { value: context, children });
15628
- }
15629
- function useRightPaneContext() {
15630
- return useContext13(RightPaneContext);
15590
+ // src/components/Filters/Filters.tsx
15591
+ import { memo, useMemo as useMemo31 } from "react";
15592
+
15593
+ // src/components/Filters/BaseFilter.ts
15594
+ var BaseFilter = class {
15595
+ constructor(key, props) {
15596
+ this.key = key;
15597
+ this.props = props;
15598
+ }
15599
+ get label() {
15600
+ return this.props.label || defaultLabel(this.key);
15601
+ }
15602
+ get defaultValue() {
15603
+ return this.props.defaultValue;
15604
+ }
15605
+ testId(tid) {
15606
+ return tid[defaultTestId(this.label)];
15607
+ }
15608
+ };
15609
+
15610
+ // src/components/Filters/DateFilter.tsx
15611
+ import { Fragment as Fragment23, jsx as jsx123, jsxs as jsxs61 } from "@emotion/react/jsx-runtime";
15612
+ function dateFilter(props) {
15613
+ return (key) => new DateFilter(key, props);
15631
15614
  }
15615
+ var anyOption = {};
15616
+ var DateFilter = class extends BaseFilter {
15617
+ render(value, setValue, tid, inModal, vertical) {
15618
+ const { label, operations, getOperationValue, getOperationLabel } = this.props;
15619
+ return /* @__PURE__ */ jsxs61(Fragment23, { children: [
15620
+ vertical && /* @__PURE__ */ jsx123(Label, { label }),
15621
+ /* @__PURE__ */ jsxs61(CompoundField, { children: [
15622
+ /* @__PURE__ */ jsx123(
15623
+ SelectField,
15624
+ {
15625
+ compact: true,
15626
+ sizeToContent: true,
15627
+ options: [
15628
+ // Always show the 'Any' option
15629
+ anyOption,
15630
+ ...operations
15631
+ ],
15632
+ getOptionValue: (o) => o === anyOption ? void 0 : getOperationValue(o),
15633
+ getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
15634
+ value: value?.op,
15635
+ onSelect: (op) => (
15636
+ // default the selected date to today if it doesn't exist in the filter's value
15637
+ setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
15638
+ ),
15639
+ label: inModal ? `${label} date filter operation` : label,
15640
+ labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
15641
+ nothingSelectedText: "Any",
15642
+ ...tid[`${defaultTestId(this.label)}_dateOperation`]
15643
+ }
15644
+ ),
15645
+ /* @__PURE__ */ jsx123(
15646
+ DateField,
15647
+ {
15648
+ compact: true,
15649
+ labelStyle: "inline",
15650
+ value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
15651
+ label: "Date",
15652
+ onChange: (d) => setValue({ ...value, value: d }),
15653
+ disabled: !value,
15654
+ ...tid[`${defaultTestId(this.label)}_dateField`]
15655
+ }
15656
+ )
15657
+ ] })
15658
+ ] });
15659
+ }
15660
+ };
15632
15661
 
15633
- // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
15634
- import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
15635
- import { useEffect as useEffect23 } from "react";
15636
- import { Fragment as Fragment23, jsx as jsx125, jsxs as jsxs61 } from "@emotion/react/jsx-runtime";
15637
- function RightPaneLayout(props) {
15638
- const { children, paneBgColor = "rgba(255,255,255,1)" /* White */, paneWidth = 450, defaultPaneContent } = props;
15639
- const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();
15640
- useEffect23(() => closePane, [closePane]);
15641
- return /* @__PURE__ */ jsx125("div", { css: Css.h100.df.oxh.$, children: /* @__PURE__ */ jsxs61(Fragment23, { children: [
15642
- /* @__PURE__ */ jsx125(
15643
- "div",
15644
- {
15645
- css: {
15646
- ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.oxa.$,
15647
- ...Css.if(!isRightPaneOpen).w100.mr0.$,
15648
- ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$
15649
- },
15650
- children
15651
- }
15652
- ),
15653
- /* @__PURE__ */ jsxs61("div", { css: Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$, children: [
15654
- defaultPaneContent && /* @__PURE__ */ jsx125(
15655
- "div",
15662
+ // src/components/Filters/DateRangeFilter.tsx
15663
+ import { Fragment as Fragment24, jsx as jsx124, jsxs as jsxs62 } from "@emotion/react/jsx-runtime";
15664
+ function dateRangeFilter(props) {
15665
+ return (key) => new DateRangeFilter(key, props);
15666
+ }
15667
+ var DateRangeFilter = class extends BaseFilter {
15668
+ render(value, setValue, tid, inModal, vertical) {
15669
+ const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
15670
+ return /* @__PURE__ */ jsxs62(Fragment24, { children: [
15671
+ vertical && /* @__PURE__ */ jsx124(Label, { label }),
15672
+ /* @__PURE__ */ jsx124(
15673
+ DateRangeField,
15656
15674
  {
15657
- css: Css.h100.wPx(paneWidth).left(0).absolute.add("transition", "all .3s ease-in-out").if(isRightPaneOpen).add("opacity", 0).left(100).$,
15658
- children: defaultPaneContent
15675
+ compact: true,
15676
+ labelStyle: "inline",
15677
+ isRangeFilterField: true,
15678
+ placeholder: placeholderText,
15679
+ label: testFieldLabel ?? "Date",
15680
+ value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
15681
+ onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
15682
+ disabledDays,
15683
+ ...tid[`${defaultTestId(this.label)}_dateField`]
15659
15684
  }
15660
- ),
15661
- /* @__PURE__ */ jsx125(AnimatePresence3, { children: isRightPaneOpen && /* @__PURE__ */ jsx125(
15662
- motion3.div,
15663
- {
15664
- layout: "position",
15665
- "data-testid": "rightPaneContent",
15666
- css: Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
15667
- initial: { x: paneWidth + 24, position: "absolute" },
15668
- animate: { x: 0 },
15669
- transition: { ease: "linear", duration: 0.2 },
15670
- exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
15671
- onAnimationComplete: (definition) => definition.x !== 0 && clearPane(),
15672
- children: rightPaneContent
15673
- },
15674
- "rightPane"
15675
- ) })
15676
- ] })
15677
- ] }) });
15678
- }
15685
+ )
15686
+ ] });
15687
+ }
15688
+ };
15679
15689
 
15680
- // src/components/Layout/RightPaneLayout/useRightPane.tsx
15681
- function useRightPane() {
15682
- const { openInPane, closePane } = useRightPaneContext();
15683
- return {
15684
- openRightPane: openInPane,
15685
- closeRightPane: closePane
15686
- };
15690
+ // src/components/Filters/MultiFilter.tsx
15691
+ import { jsx as jsx125 } from "@emotion/react/jsx-runtime";
15692
+ function multiFilter(props) {
15693
+ return (key) => new MultiFilter(key, props);
15687
15694
  }
15688
-
15689
- // src/components/Layout/ScrollableContent.tsx
15690
- import { useEffect as useEffect24 } from "react";
15691
- import { createPortal as createPortal4 } from "react-dom";
15692
- import { Fragment as Fragment24, jsx as jsx126 } from "@emotion/react/jsx-runtime";
15693
- function ScrollableContent(props) {
15694
- const { children, virtualized = false, omitBottomPadding, bgColor } = props;
15695
- const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();
15696
- useEffect24(() => {
15697
- setPortalTick((prev) => prev + 1);
15698
- return () => setPortalTick((prev) => prev + 1);
15699
- }, [setPortalTick]);
15700
- if (!scrollableEl) {
15701
- return /* @__PURE__ */ jsx126(Fragment24, { children });
15702
- }
15703
- return createPortal4(
15704
- /* @__PURE__ */ jsx126(
15705
- "div",
15695
+ var MultiFilter = class extends BaseFilter {
15696
+ render(value, setValue, tid, inModal, vertical) {
15697
+ if (inModal && Array.isArray(this.props.options) && this.props.options.length > 0 && this.props.options.length <= 8) {
15698
+ const { disabledOptions } = this.props;
15699
+ const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
15700
+ const disabledKeys = Object.keys(disabledOptionsWithReasons);
15701
+ return /* @__PURE__ */ jsx125(
15702
+ ToggleChipGroup,
15703
+ {
15704
+ label: this.label,
15705
+ options: this.props.options.map((o) => {
15706
+ const value2 = this.props.getOptionValue(o);
15707
+ const disabled = value2 && disabledKeys.includes(value2.toString());
15708
+ const disabledReason = disabled ? disabledOptionsWithReasons[value2.toString()] : void 0;
15709
+ return {
15710
+ label: this.props.getOptionLabel(o),
15711
+ value: value2,
15712
+ disabled: disabledReason ?? disabled
15713
+ };
15714
+ }),
15715
+ onChange: (values) => {
15716
+ setValue(values.length === 0 ? void 0 : values);
15717
+ },
15718
+ values: value || [],
15719
+ labelStyle: "hidden",
15720
+ ...tid[defaultTestId(this.label)]
15721
+ }
15722
+ );
15723
+ }
15724
+ const { defaultValue, nothingSelectedText, ...props } = this.props;
15725
+ return /* @__PURE__ */ jsx125(
15726
+ MultiSelectField,
15706
15727
  {
15707
- css: {
15708
- ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,
15709
- ...bgColor && Css.bgColor(bgColor).$,
15710
- ...!omitBottomPadding && !virtualized && scrollContainerBottomPadding
15728
+ ...props,
15729
+ compact: !vertical,
15730
+ label: this.label,
15731
+ values: value || [],
15732
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
15733
+ sizeToContent: !inModal && !vertical,
15734
+ onSelect: (values) => {
15735
+ setValue(values.length === 0 ? void 0 : values);
15711
15736
  },
15712
- children
15737
+ nothingSelectedText: nothingSelectedText ?? "All",
15738
+ ...this.testId(tid)
15713
15739
  }
15714
- ),
15715
- scrollableEl
15716
- );
15717
- }
15740
+ );
15741
+ }
15742
+ };
15718
15743
 
15719
- // src/components/Toast/ToastContext.tsx
15720
- import { createContext as createContext5, useCallback as useCallback19, useContext as useContext14, useMemo as useMemo32, useState as useState35 } from "react";
15721
- import { jsx as jsx127 } from "@emotion/react/jsx-runtime";
15722
- var ToastContext = createContext5({
15723
- setNotice: () => {
15724
- throw new Error("Missing ToastProvider");
15725
- },
15726
- clear: () => {
15727
- },
15728
- notice: void 0
15729
- });
15730
- function ToastProvider(props) {
15731
- const [notice, setNotice] = useState35();
15732
- const clear = useCallback19(() => setNotice(void 0), [setNotice]);
15733
- const contextValue = useMemo32(() => ({ setNotice, notice, clear }), [notice, clear]);
15734
- return /* @__PURE__ */ jsx127(ToastContext.Provider, { value: contextValue, children: props.children });
15735
- }
15736
- function useToastContext() {
15737
- return useContext14(ToastContext);
15744
+ // src/components/Filters/NumberRangeFilter.tsx
15745
+ import { Fragment as Fragment25, jsx as jsx126, jsxs as jsxs63 } from "@emotion/react/jsx-runtime";
15746
+ function numberRangeFilter(props) {
15747
+ return (key) => new NumberRangeFilter(key, props);
15738
15748
  }
15739
-
15740
- // src/components/BeamContext.tsx
15741
- import { jsx as jsx128, jsxs as jsxs62 } from "@emotion/react/jsx-runtime";
15742
- var BeamContext = createContext6({
15743
- modalState: new EmptyRef(),
15744
- modalCanCloseChecks: new EmptyRef(),
15745
- modalHeaderDiv: void 0,
15746
- modalBodyDiv: void 0,
15747
- modalFooterDiv: void 0,
15748
- drawerContentStack: new EmptyRef(),
15749
- drawerCanCloseChecks: new EmptyRef(),
15750
- drawerCanCloseDetailsChecks: new EmptyRef(),
15751
- sdHeaderDiv: void 0
15752
- });
15753
- function BeamProvider({ children, ...presentationProps }) {
15754
- const [, tick] = useReducer((prev) => prev + 1, 0);
15755
- const modalRef = useRef43();
15756
- const modalHeaderDiv = useMemo33(() => document.createElement("div"), []);
15757
- const modalBodyDiv = useMemo33(() => {
15758
- const el = document.createElement("div");
15759
- el.style.height = "100%";
15760
- return el;
15761
- }, []);
15762
- const modalCanCloseChecksRef = useRef43([]);
15763
- const modalFooterDiv = useMemo33(() => document.createElement("div"), []);
15764
- const drawerContentStackRef = useRef43([]);
15765
- const drawerCanCloseChecks = useRef43([]);
15766
- const drawerCanCloseDetailsChecks = useRef43([]);
15767
- const sdHeaderDiv = useMemo33(() => document.createElement("div"), []);
15768
- const context = useMemo33(() => {
15769
- return {
15770
- // These two keys need to trigger re-renders on change
15771
- modalState: new PretendRefThatTicks(modalRef, tick),
15772
- drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),
15773
- // The rest we don't need to re-render when these are mutated, so just expose as-is
15774
- modalCanCloseChecks: modalCanCloseChecksRef,
15775
- modalHeaderDiv,
15776
- modalBodyDiv,
15777
- modalFooterDiv,
15778
- drawerCanCloseChecks,
15779
- drawerCanCloseDetailsChecks,
15780
- sdHeaderDiv
15781
- };
15782
- }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);
15783
- return /* @__PURE__ */ jsx128(BeamContext.Provider, { value: { ...context }, children: /* @__PURE__ */ jsx128(PresentationProvider, { ...presentationProps, children: /* @__PURE__ */ jsx128(RightPaneProvider, { children: /* @__PURE__ */ jsx128(AutoSaveStatusProvider, { children: /* @__PURE__ */ jsx128(SnackbarProvider, { children: /* @__PURE__ */ jsxs62(ToastProvider, { children: [
15784
- /* @__PURE__ */ jsxs62(OverlayProvider, { children: [
15785
- children,
15786
- modalRef.current && /* @__PURE__ */ jsx128(Modal, { ...modalRef.current })
15787
- ] }),
15788
- /* @__PURE__ */ jsx128(SuperDrawer, {})
15789
- ] }) }) }) }) }) });
15790
- }
15791
- var PretendRefThatTicks = class {
15792
- constructor(ref, tick) {
15793
- this.ref = ref;
15794
- this.tick = tick;
15795
- }
15796
- get current() {
15797
- return this.ref.current;
15798
- }
15799
- set current(value) {
15800
- this.ref.current = value;
15801
- this.tick();
15749
+ var NumberRangeFilter = class extends BaseFilter {
15750
+ render(value, setValue, tid, inModal, vertical) {
15751
+ const { label, numberFieldType, numberFormatOptions } = this.props;
15752
+ const min = value?.min ?? void 0;
15753
+ const max = value?.max ?? void 0;
15754
+ return /* @__PURE__ */ jsxs63(Fragment25, { children: [
15755
+ vertical && /* @__PURE__ */ jsxs63("div", { ...tid, children: [
15756
+ /* @__PURE__ */ jsx126(Label, { label }),
15757
+ /* @__PURE__ */ jsx126("div", { css: Css.pb1.$, children: /* @__PURE__ */ jsx126(
15758
+ NumberField,
15759
+ {
15760
+ labelStyle: "inline",
15761
+ clearable: true,
15762
+ label: "Min",
15763
+ value: min,
15764
+ type: numberFieldType,
15765
+ numberFormatOptions,
15766
+ onChange: (minVal) => {
15767
+ const maxValue = max ? { max } : {};
15768
+ setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
15769
+ },
15770
+ ...tid[`${defaultTestId(label)}_min_vertical`]
15771
+ }
15772
+ ) }),
15773
+ /* @__PURE__ */ jsx126(
15774
+ NumberField,
15775
+ {
15776
+ labelStyle: "inline",
15777
+ clearable: true,
15778
+ label: "Max",
15779
+ value: max,
15780
+ type: numberFieldType,
15781
+ numberFormatOptions,
15782
+ onChange: (maxVal) => {
15783
+ const minValue = min ? { min } : {};
15784
+ setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
15785
+ },
15786
+ ...tid[`${defaultTestId(label)}_max_vertical`]
15787
+ }
15788
+ )
15789
+ ] }),
15790
+ !vertical && /* @__PURE__ */ jsxs63(CompoundField, { ...tid, children: [
15791
+ /* @__PURE__ */ jsx126(
15792
+ NumberField,
15793
+ {
15794
+ compact: true,
15795
+ sizeToContent: !inModal,
15796
+ labelStyle: "inline",
15797
+ clearable: true,
15798
+ label: !inModal ? `${label} Min` : "Min",
15799
+ value: min,
15800
+ type: numberFieldType,
15801
+ numberFormatOptions,
15802
+ onChange: (minVal) => {
15803
+ const maxValue = max ? { max } : {};
15804
+ setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
15805
+ },
15806
+ ...tid[`${defaultTestId(label)}_min`]
15807
+ }
15808
+ ),
15809
+ /* @__PURE__ */ jsx126(
15810
+ NumberField,
15811
+ {
15812
+ compact: true,
15813
+ sizeToContent: !inModal,
15814
+ labelStyle: "inline",
15815
+ clearable: true,
15816
+ label: !inModal ? `${label} Max` : "Max",
15817
+ value: max,
15818
+ type: numberFieldType,
15819
+ numberFormatOptions,
15820
+ onChange: (maxVal) => {
15821
+ const minValue = min ? { min } : {};
15822
+ setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
15823
+ },
15824
+ ...tid[`${defaultTestId(label)}_max`]
15825
+ }
15826
+ )
15827
+ ] })
15828
+ ] });
15802
15829
  }
15803
15830
  };
15804
- function useBeamContext() {
15805
- return useContext15(BeamContext);
15806
- }
15807
15831
 
15808
- // src/components/ButtonDatePicker.tsx
15809
- import { useRef as useRef44 } from "react";
15810
- import { useMenuTrigger as useMenuTrigger3 } from "react-aria";
15811
- import { useMenuTriggerState as useMenuTriggerState3 } from "react-stately";
15812
- import { jsx as jsx129 } from "@emotion/react/jsx-runtime";
15813
- function ButtonDatePicker(props) {
15814
- const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;
15815
- const state = useMenuTriggerState3({ isOpen: defaultOpen });
15816
- const buttonRef = useRef44(null);
15817
- const { menuTriggerProps, menuProps } = useMenuTrigger3({ isDisabled: !!disabled }, state, buttonRef);
15818
- const tid = useTestIds(
15819
- props,
15820
- isTextButton(trigger) ? defaultTestId(labelOr(trigger, "buttonDatePicker")) : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
15821
- );
15822
- return /* @__PURE__ */ jsx129(OverlayTrigger, { ...props, menuTriggerProps, state, buttonRef, ...tid, children: /* @__PURE__ */ jsx129(DatePickerOverlay, { overlayProps: menuProps, children: /* @__PURE__ */ jsx129(
15823
- DatePicker,
15824
- {
15825
- ...datePickerProps,
15826
- onSelect: (d) => {
15827
- onSelect(d);
15828
- state.close();
15829
- },
15830
- ...tid.datePicker
15831
- }
15832
- ) }) });
15832
+ // src/components/Filters/SingleFilter.tsx
15833
+ import { jsx as jsx127 } from "@emotion/react/jsx-runtime";
15834
+ function singleFilter(props) {
15835
+ return (key) => new SingleFilter(key, props);
15833
15836
  }
15837
+ var allOption = {};
15838
+ var SingleFilter = class extends BaseFilter {
15839
+ render(value, setValue, tid, inModal, vertical) {
15840
+ const {
15841
+ label,
15842
+ defaultValue,
15843
+ options: maybeOptions,
15844
+ getOptionLabel,
15845
+ getOptionValue,
15846
+ nothingSelectedText,
15847
+ ...props
15848
+ } = this.props;
15849
+ const options = Array.isArray(maybeOptions) ? [allOption, ...maybeOptions] : { ...maybeOptions, current: maybeOptions.current };
15850
+ return /* @__PURE__ */ jsx127(
15851
+ SelectField,
15852
+ {
15853
+ ...props,
15854
+ options,
15855
+ getOptionValue: (o) => o === allOption ? void 0 : getOptionValue(o),
15856
+ getOptionLabel: (o) => o === allOption ? nothingSelectedText ?? "All" : getOptionLabel(o),
15857
+ compact: !vertical,
15858
+ value,
15859
+ label: this.label,
15860
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
15861
+ sizeToContent: !inModal && !vertical,
15862
+ nothingSelectedText: nothingSelectedText ?? "All",
15863
+ onSelect: (value2) => setValue(value2 || void 0),
15864
+ ...this.testId(tid)
15865
+ }
15866
+ );
15867
+ }
15868
+ };
15834
15869
 
15835
- // src/components/ButtonGroup.tsx
15836
- import { useRef as useRef45 } from "react";
15837
- import { useButton as useButton10, useFocusRing as useFocusRing12, useHover as useHover15 } from "react-aria";
15838
- import { jsx as jsx130, jsxs as jsxs63 } from "@emotion/react/jsx-runtime";
15839
- function ButtonGroup(props) {
15840
- const { buttons, disabled = false, size = "sm" } = props;
15841
- const tid = useTestIds(props, "buttonGroup");
15842
- return (
15843
- // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.
15844
- /* @__PURE__ */ jsx130("div", { ...tid, css: Css.df.lh(0).add({ ...sizeStyles2[size] }).$, children: buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => (
15845
- // Disable the button if the ButtonGroup is disabled or if the current button is disabled.
15846
- /* @__PURE__ */ jsx130(GroupButton, { ...buttonProps, disabled: disabled || buttonDisabled, size, ...tid }, i)
15847
- )) })
15848
- );
15870
+ // src/components/Filters/TreeFilter.tsx
15871
+ import { jsx as jsx128 } from "@emotion/react/jsx-runtime";
15872
+ function treeFilter(props) {
15873
+ return (key) => new TreeFilter(key, props);
15849
15874
  }
15850
- function GroupButton(props) {
15851
- const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;
15852
- const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };
15853
- const ref = useRef45(null);
15854
- const { buttonProps, isPressed } = useButton10(ariaProps, ref);
15855
- const { isFocusVisible, focusProps } = useFocusRing12();
15856
- const { hoverProps, isHovered } = useHover15(ariaProps);
15857
- const tid = useTestIds(props);
15858
- return /* @__PURE__ */ jsx130("span", { css: getButtonStyles2(), children: maybeTooltip({
15859
- title: resolveTooltip(disabled, tooltip),
15860
- placement: "top",
15861
- children: /* @__PURE__ */ jsxs63(
15862
- "button",
15875
+ var TreeFilter = class extends BaseFilter {
15876
+ render(value, setValue, tid, inModal, vertical) {
15877
+ const { defaultValue, nothingSelectedText, filterBy = "root", ...props } = this.props;
15878
+ return /* @__PURE__ */ jsx128(
15879
+ TreeSelectField,
15863
15880
  {
15864
- ref,
15865
- ...buttonProps,
15866
- ...focusProps,
15867
- ...hoverProps,
15868
- css: {
15869
- ...Css.buttonBase.px2.br0.h100.$,
15870
- "&:disabled": Css.gray400.cursorNotAllowed.bcGray300.$,
15871
- ...isFocusVisible ? defaultFocusRingStyles2 : {},
15872
- ...active ? activeStyles3 : {},
15873
- ...isPressed ? pressedStyles2 : isHovered ? hoverStyles3 : {},
15874
- ...icon ? iconStyles2[size] : {}
15881
+ ...props,
15882
+ label: this.label,
15883
+ values: value,
15884
+ compact: !vertical,
15885
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
15886
+ sizeToContent: !inModal && !vertical,
15887
+ onSelect: (options) => {
15888
+ const values = options[filterBy].values;
15889
+ setValue(values.length === 0 ? void 0 : values);
15875
15890
  },
15876
- ...tid[defaultTestId(typeof text === "string" && text || icon || "button")],
15877
- children: [
15878
- icon && /* @__PURE__ */ jsx130(Icon, { xss: Css.if(!!text).mrPx(4).$, icon, color: disabled ? void 0 : iconColor, inc: iconInc }),
15879
- text
15880
- ]
15891
+ nothingSelectedText: nothingSelectedText ?? "All",
15892
+ ...this.testId(tid)
15881
15893
  }
15882
- )
15883
- }) });
15894
+ );
15895
+ }
15896
+ };
15897
+
15898
+ // src/components/Filters/BooleanFilter.tsx
15899
+ import { jsx as jsx129 } from "@emotion/react/jsx-runtime";
15900
+ function booleanFilter(props) {
15901
+ return (key) => new BooleanFilter(key, props);
15884
15902
  }
15885
- var pressedStyles2 = Css.bgGray200.$;
15886
- var activeStyles3 = Css.bgGray300.$;
15887
- var hoverStyles3 = Css.bgGray100.$;
15888
- var defaultFocusRingStyles2 = Css.relative.z2.bshFocus.$;
15889
- function getButtonStyles2() {
15890
- return {
15891
- ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,
15892
- // Our first button should have a rounded left border
15893
- "&:first-of-type": Css.add("borderRadius", "4px 0 0 4px").$,
15894
- // Our last button should have a rounded right border
15895
- "&:last-of-type": Css.add("borderRadius", "0 4px 4px 0").$,
15896
- // Nudge buttons one pixel to the left so they visually share a border
15897
- "&:not(:first-of-type)": Css.mlPx(-1).$
15898
- };
15899
- }
15900
- var sizeStyles2 = {
15901
- xs: Css.hPx(28).$,
15902
- sm: Css.hPx(32).$,
15903
- md: Css.hPx(40).$
15903
+ var BooleanFilter = class extends BaseFilter {
15904
+ render(value, setValue, tid, inModal, vertical) {
15905
+ const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;
15906
+ return /* @__PURE__ */ jsx129(
15907
+ SelectField,
15908
+ {
15909
+ ...props,
15910
+ compact: !vertical,
15911
+ label: this.label,
15912
+ value: String(value),
15913
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
15914
+ sizeToContent: !inModal && !vertical,
15915
+ options,
15916
+ getOptionValue: (o) => String(o[0]),
15917
+ getOptionLabel: (o) => o[1],
15918
+ onSelect: (value2) => {
15919
+ const parsedValue = value2 === "undefined" ? void 0 : value2 === "true";
15920
+ setValue(parsedValue);
15921
+ },
15922
+ ...this.testId(tid)
15923
+ }
15924
+ );
15925
+ }
15904
15926
  };
15905
- var iconStyles2 = {
15906
- xs: Css.pxPx(2).$,
15907
- sm: Css.pxPx(4).$,
15908
- md: Css.px1.$
15927
+ var defaultBooleanOptions = [
15928
+ [void 0, "Any"],
15929
+ [true, "Yes"],
15930
+ [false, "No"]
15931
+ ];
15932
+
15933
+ // src/components/Filters/CheckboxFilter.tsx
15934
+ import { jsx as jsx130 } from "@emotion/react/jsx-runtime";
15935
+ function checkboxFilter(props) {
15936
+ return (key) => new CheckboxFilter(key, {
15937
+ // If the user has set the offValue, that should be the default b/c we're only a two-state
15938
+ defaultValue: props.offValue,
15939
+ ...props
15940
+ });
15941
+ }
15942
+ var CheckboxFilter = class extends BaseFilter {
15943
+ render(value, setValue, tid, inModal, vertical) {
15944
+ const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
15945
+ return /* @__PURE__ */ jsx130(
15946
+ Checkbox,
15947
+ {
15948
+ ...props,
15949
+ selected: value === void 0 ? false : value === onValue,
15950
+ label: this.label,
15951
+ onChange: (on) => {
15952
+ setValue(on ? onValue : offValue);
15953
+ },
15954
+ ...this.testId(tid)
15955
+ }
15956
+ );
15957
+ }
15958
+ get hideLabelInModal() {
15959
+ return true;
15960
+ }
15909
15961
  };
15910
15962
 
15911
- // src/components/ButtonMenu.tsx
15912
- import { useRef as useRef46 } from "react";
15913
- import { useMenuTrigger as useMenuTrigger4 } from "react-aria";
15914
- import { useMenuTriggerState as useMenuTriggerState4 } from "react-stately";
15963
+ // src/components/Filters/FilterModal.tsx
15964
+ import { useState as useState34 } from "react";
15965
+
15966
+ // src/components/Modal/OpenModal.tsx
15967
+ import { useEffect as useEffect23 } from "react";
15915
15968
  import { jsx as jsx131 } from "@emotion/react/jsx-runtime";
15916
- function ButtonMenu(props) {
15917
- const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
15918
- let selectedItem, onChange;
15919
- if (isSelectionButtonMenuProps(props)) {
15920
- selectedItem = props.selectedItem;
15921
- onChange = props.onChange;
15969
+ function OpenModal(props) {
15970
+ const { openModal } = useModal();
15971
+ const { size, children, keepOpen } = props;
15972
+ useEffect23(() => {
15973
+ if (!keepOpen) {
15974
+ openModal({ size, content: children });
15975
+ }
15976
+ }, [keepOpen, openModal, size, children]);
15977
+ if (keepOpen) {
15978
+ return /* @__PURE__ */ jsx131(Modal, { size, content: children });
15979
+ } else {
15980
+ return /* @__PURE__ */ jsx131("div", { children: "dummy content" });
15922
15981
  }
15923
- const state = useMenuTriggerState4({ isOpen: defaultOpen });
15924
- const buttonRef = useRef46(null);
15925
- const { menuTriggerProps, menuProps } = useMenuTrigger4({ isDisabled: !!disabled }, state, buttonRef);
15926
- const tid = useTestIds(
15927
- props,
15928
- isTextButton(trigger) ? labelOr(trigger, "buttonMenu") : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
15929
- );
15930
- return /* @__PURE__ */ jsx131(
15931
- OverlayTrigger,
15932
- {
15933
- ...props,
15934
- menuTriggerProps,
15935
- state,
15936
- buttonRef,
15937
- ...tid,
15938
- contrast,
15939
- children: /* @__PURE__ */ jsx131(
15940
- Menu,
15982
+ }
15983
+
15984
+ // src/components/Filters/FilterModal.tsx
15985
+ import { Fragment as Fragment26, jsx as jsx132, jsxs as jsxs64 } from "@emotion/react/jsx-runtime";
15986
+ function FilterModal(props) {
15987
+ const { filter, filters, onApply } = props;
15988
+ const testId = useTestIds(props, filterTestIdPrefix);
15989
+ const { closeModal } = useModal();
15990
+ const [modalFilter, setModalFilter] = useState34(filter);
15991
+ return /* @__PURE__ */ jsxs64(Fragment26, { children: [
15992
+ /* @__PURE__ */ jsx132(ModalHeader, { children: "More Filters" }),
15993
+ /* @__PURE__ */ jsx132(ModalBody, { children: /* @__PURE__ */ jsx132("div", { css: Css.df.fdc.$, children: safeEntries(filters).map(([key, f]) => /* @__PURE__ */ jsx132(ModalFilterItem, { label: f.hideLabelInModal ? void 0 : f.label, children: f.render(
15994
+ modalFilter[key],
15995
+ (value) => setModalFilter(updateFilter(modalFilter, key, value)),
15996
+ testId,
15997
+ true,
15998
+ false
15999
+ ) }, key)) }) }),
16000
+ /* @__PURE__ */ jsxs64(ModalFooter, { xss: Css.jcsb.$, children: [
16001
+ /* @__PURE__ */ jsx132(
16002
+ Button,
15941
16003
  {
15942
- ariaMenuProps: menuProps,
15943
- onClose: () => state.close(),
15944
- items,
15945
- persistentItems,
15946
- searchable,
15947
- contrast,
15948
- selectedItem,
15949
- onChange,
15950
- ...tid
16004
+ label: "Clear",
16005
+ variant: "tertiary",
16006
+ disabled: safeKeys(filters).filter((fk) => modalFilter[fk] !== void 0).length === 0,
16007
+ onClick: () => (
16008
+ // Only remove the filters keys that exist in the modal.
16009
+ setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))
16010
+ ),
16011
+ ...testId.modalClear
15951
16012
  }
15952
- )
15953
- }
15954
- );
16013
+ ),
16014
+ /* @__PURE__ */ jsxs64("div", { css: Css.df.gap1.$, children: [
16015
+ /* @__PURE__ */ jsx132(Button, { label: "Cancel", variant: "tertiary", onClick: closeModal, ...testId.modalClose }),
16016
+ /* @__PURE__ */ jsx132(
16017
+ Button,
16018
+ {
16019
+ label: "Apply",
16020
+ onClick: () => {
16021
+ onApply(modalFilter);
16022
+ closeModal();
16023
+ },
16024
+ ...testId.modalApply
16025
+ }
16026
+ )
16027
+ ] })
16028
+ ] })
16029
+ ] });
15955
16030
  }
15956
- function isSelectionButtonMenuProps(props) {
15957
- return typeof props === "object" && "selectedItem" in props && "onChange" in props;
16031
+ function ModalFilterItem({ label, children }) {
16032
+ return /* @__PURE__ */ jsxs64("div", { css: Css.mb4.if(!label).bt.bcGray200.$, children: [
16033
+ label && /* @__PURE__ */ jsx132("h2", { css: Css.baseMd.mb2.$, children: label }),
16034
+ /* @__PURE__ */ jsx132("div", { css: Css.if(!label).pt3.$, children })
16035
+ ] });
15958
16036
  }
15959
16037
 
15960
- // src/components/Card.tsx
15961
- import { useMemo as useMemo34 } from "react";
15962
- import { useHover as useHover16 } from "react-aria";
15963
-
15964
- // src/components/Tag.tsx
15965
- import { useResizeObserver as useResizeObserver4 } from "@react-aria/utils";
15966
- import { useRef as useRef47, useState as useState36 } from "react";
15967
- import { jsx as jsx132, jsxs as jsxs64 } from "@emotion/react/jsx-runtime";
15968
- function Tag(props) {
15969
- const { text, type, xss, preventTooltip = false, ...otherProps } = props;
15970
- const typeStyles2 = getStyles(type);
15971
- const tid = useTestIds(otherProps);
15972
- const [showTooltip, setShowTooltip] = useState36(false);
15973
- const ref = useRef47(null);
15974
- useResizeObserver4({
15975
- ref,
15976
- onResize: () => {
15977
- if (ref.current) {
15978
- setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);
15979
- }
15980
- }
15981
- });
15982
- return maybeTooltip({
15983
- title: !preventTooltip && showTooltip ? text : void 0,
15984
- children: /* @__PURE__ */ jsxs64("span", { ...tid, css: { ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles2, ...xss }, children: [
15985
- otherProps.icon && /* @__PURE__ */ jsx132("span", { css: Css.fs0.$, children: /* @__PURE__ */ jsx132(Icon, { icon: otherProps.icon, inc: 1.5 }) }),
15986
- /* @__PURE__ */ jsx132("span", { ref, css: Css.lineClamp1.wbba.$, children: text })
15987
- ] })
16038
+ // src/components/Filters/ToggleFilter.tsx
16039
+ import { jsx as jsx133 } from "@emotion/react/jsx-runtime";
16040
+ function toggleFilter(props) {
16041
+ return (key) => new ToggleFilter(key, {
16042
+ // If the user has set the offValue, that should be the default b/c we're only a two-state
16043
+ defaultValue: props.offValue,
16044
+ ...props
15988
16045
  });
15989
16046
  }
15990
- function getStyles(type) {
15991
- switch (type) {
15992
- case "info":
15993
- return Css.bgBlue100.$;
15994
- case "caution":
15995
- return Css.bgYellow200.$;
15996
- case "warning":
15997
- return Css.bgRed200.$;
15998
- case "success":
15999
- return Css.bgGreen200.$;
16000
- default:
16001
- return Css.bgGray200.$;
16002
- }
16003
- }
16004
-
16005
- // src/components/Card.tsx
16006
- import { jsx as jsx133, jsxs as jsxs65 } from "@emotion/react/jsx-runtime";
16007
- function Card(props) {
16008
- const {
16009
- title,
16010
- subtitle,
16011
- detailContent,
16012
- imgSrc,
16013
- imageFit = "contain",
16014
- type = "card",
16015
- bordered = false,
16016
- disabled: isDisabled = false,
16017
- buttonMenuItems,
16018
- tag
16019
- } = props;
16020
- const tid = useTestIds(props, "card");
16021
- const { hoverProps, isHovered } = useHover16({ isDisabled });
16022
- const isList = type === "list";
16023
- const imgHeight = isList ? 96 : bordered ? 224 : 256;
16024
- const styles = useMemo34(
16025
- () => ({
16026
- ...baseStyles4(type),
16027
- ...isList && listStyles,
16028
- ...bordered && borderedStyles,
16029
- ...isHovered && cardHoverStyles,
16030
- ...isDisabled && disabledStyles3
16031
- }),
16032
- [isDisabled, isHovered, bordered, type, isList]
16033
- );
16034
- return /* @__PURE__ */ jsxs65("div", { css: styles, ...hoverProps, ...tid, children: [
16035
- /* @__PURE__ */ jsx133(
16036
- "div",
16047
+ var ToggleFilter = class extends BaseFilter {
16048
+ render(value, setValue, tid, inModal, vertical) {
16049
+ const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16050
+ return /* @__PURE__ */ jsx133(
16051
+ Switch,
16037
16052
  {
16038
- css: {
16039
- ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add("filter", "brightness(1)").$,
16040
- ...isHovered && !isList && imageHoverStyles
16053
+ ...props,
16054
+ selected: value === void 0 ? false : value === onValue,
16055
+ label: this.label,
16056
+ labelStyle: inModal || vertical ? "filter" : "inline",
16057
+ onChange: (on) => {
16058
+ setValue(on ? onValue : offValue);
16041
16059
  },
16042
- children: /* @__PURE__ */ jsx133("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
16043
- }
16044
- ),
16045
- isHovered && buttonMenuItems && /* @__PURE__ */ jsx133("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ jsx133(
16046
- ButtonMenu,
16047
- {
16048
- trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
16049
- items: buttonMenuItems
16060
+ ...this.testId(tid)
16050
16061
  }
16051
- ) }),
16052
- tag && /* @__PURE__ */ jsx133("div", { css: Css.absolute.left1.topPx(4).$, children: /* @__PURE__ */ jsx133(Tag, { type: tag?.type, text: tag?.text, ...tid.tag }) }),
16053
- /* @__PURE__ */ jsxs65("div", { css: Css.df.fdc.aifs.gap1.$, children: [
16054
- /* @__PURE__ */ jsxs65("div", { children: [
16055
- /* @__PURE__ */ jsx133("div", { css: Css.xsMd.gray700.$, ...tid.subtitle, children: subtitle }),
16056
- /* @__PURE__ */ jsx133("div", { css: Css.smMd.gray900.if(isHovered).blue700.$, ...tid.title, children: title })
16057
- ] }),
16058
- /* @__PURE__ */ jsx133("div", { ...tid.details, children: detailContent })
16059
- ] })
16060
- ] });
16061
- }
16062
- var width = { card: 256, list: 520 };
16063
- var baseStyles4 = (type) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;
16064
- var listStyles = Css.df.fdr.gap2.$;
16065
- var borderedStyles = Css.ba.br8.bcGray300.p2.$;
16066
- var disabledStyles3 = Css.add("opacity", 0.5).add("transition", "opacity 0.3s ease").$;
16067
- var cardHoverStyles = Css.bcGray400.cursorPointer.$;
16068
- var imageHoverStyles = Css.bgWhite.add("filter", "brightness(0.3)").add("transition", "filter 0.3s ease").$;
16062
+ );
16063
+ }
16064
+ get hideLabelInModal() {
16065
+ return true;
16066
+ }
16067
+ };
16069
16068
 
16070
- // src/components/Copy.tsx
16071
- import { jsx as jsx134 } from "@emotion/react/jsx-runtime";
16072
- function Copy(props) {
16073
- return /* @__PURE__ */ jsx134(
16069
+ // src/components/Filters/utils.tsx
16070
+ function updateFilter(currentFilter, key, value) {
16071
+ if (value === void 0) {
16072
+ return omitKey(key, currentFilter);
16073
+ } else {
16074
+ return { ...currentFilter, [key]: value };
16075
+ }
16076
+ }
16077
+ var filterTestIdPrefix = "filter";
16078
+
16079
+ // src/components/Filters/Filters.tsx
16080
+ import { jsx as jsx134, jsxs as jsxs65 } from "@emotion/react/jsx-runtime";
16081
+ function Filters(props) {
16082
+ const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;
16083
+ const testId = useTestIds(props, filterTestIdPrefix);
16084
+ const { openModal } = useModal();
16085
+ const [pageFilters, modalFilters] = useMemo31(() => {
16086
+ const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key)]);
16087
+ if (!vertical && impls.length > numberOfInlineFilters) {
16088
+ return [
16089
+ Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)),
16090
+ Object.fromEntries(impls.slice(numberOfInlineFilters - 1))
16091
+ ];
16092
+ }
16093
+ return [Object.fromEntries(impls), {}];
16094
+ }, [numberOfInlineFilters, vertical, filterDefs]);
16095
+ const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== void 0).length;
16096
+ const maybeGroupByField = groupBy ? /* @__PURE__ */ jsx134("div", { children: /* @__PURE__ */ jsx134(
16097
+ SelectField,
16098
+ {
16099
+ label: "Group by",
16100
+ compact: !vertical,
16101
+ labelStyle: !vertical ? "inline" : "above",
16102
+ sizeToContent: !vertical,
16103
+ options: groupBy.options,
16104
+ getOptionValue: (o) => o.id,
16105
+ getOptionLabel: (o) => o.name,
16106
+ value: groupBy.value,
16107
+ onSelect: (g) => g && groupBy.setValue(g)
16108
+ }
16109
+ ) }) : null;
16110
+ return /* @__PURE__ */ jsxs65(
16074
16111
  "div",
16075
16112
  {
16076
16113
  css: {
16077
- ...Css.sm.gray700.mt2.mb3.wPx(480).$,
16078
- "& > p": Css.my2.$
16114
+ ...vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$
16079
16115
  },
16080
- children: props.children
16116
+ ...testId,
16117
+ children: [
16118
+ maybeGroupByField,
16119
+ safeEntries(pageFilters).map(([key, f]) => /* @__PURE__ */ jsx134("div", { children: f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical) }, key)),
16120
+ Object.keys(modalFilters).length > 0 && /* @__PURE__ */ jsx134(
16121
+ Button,
16122
+ {
16123
+ label: "More Filters",
16124
+ endAdornment: numModalFilters > 0 && /* @__PURE__ */ jsx134("span", { css: Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$, children: numModalFilters }),
16125
+ variant: "secondary",
16126
+ onClick: () => openModal({
16127
+ // Spreading `props` to pass along `data-testid`
16128
+ content: /* @__PURE__ */ jsx134(FilterModal, { ...props, filter, onApply: onChange, filters: modalFilters })
16129
+ }),
16130
+ ...testId.moreFiltersBtn
16131
+ }
16132
+ ),
16133
+ Object.keys(filter).length > 0 && /* @__PURE__ */ jsx134("div", { children: /* @__PURE__ */ jsx134(Button, { label: "Clear", variant: "tertiary", onClick: () => onChange({}), ...testId.clearBtn }) })
16134
+ ]
16081
16135
  }
16082
16136
  );
16083
16137
  }
16138
+ var _Filters = memo(Filters);
16084
16139
 
16085
- // src/components/DnDGrid/DnDGrid.tsx
16086
- import equal2 from "fast-deep-equal";
16087
- import { useCallback as useCallback20, useRef as useRef48 } from "react";
16140
+ // src/components/Table/TableActions.tsx
16141
+ import { jsx as jsx135 } from "@emotion/react/jsx-runtime";
16142
+ function TableActions(props) {
16143
+ const { xss, children, onlyLeft, onlyRight } = props;
16144
+ const alignmentStyles = onlyLeft ? Css.jcfs.$ : onlyRight ? Css.jcfe.$ : Css.jcsb.$;
16145
+ return /* @__PURE__ */ jsx135("div", { css: { ...Css.df.aic.pb2.gap1.$, ...xss, ...alignmentStyles }, children });
16146
+ }
16088
16147
 
16089
- // src/components/DnDGrid/DnDGridContext.tsx
16090
- import { createContext as createContext7, useContext as useContext16 } from "react";
16091
- var DnDGridContext = createContext7({
16092
- dragEl: { current: void 0 },
16093
- onDragHandleKeyDown: () => {
16148
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
16149
+ import { useDebounce as useDebounce2 } from "use-debounce";
16150
+ import { StringParam as StringParam2, useQueryParams as useQueryParams3 } from "use-query-params";
16151
+
16152
+ // src/components/Layout/ScrollableContent.tsx
16153
+ import { useEffect as useEffect24 } from "react";
16154
+ import { createPortal as createPortal4 } from "react-dom";
16155
+ import { Fragment as Fragment27, jsx as jsx136 } from "@emotion/react/jsx-runtime";
16156
+ function ScrollableContent(props) {
16157
+ const { children, virtualized = false, omitBottomPadding, bgColor } = props;
16158
+ const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();
16159
+ useEffect24(() => {
16160
+ setPortalTick((prev) => prev + 1);
16161
+ return () => setPortalTick((prev) => prev + 1);
16162
+ }, [setPortalTick]);
16163
+ if (!scrollableEl) {
16164
+ return /* @__PURE__ */ jsx136(Fragment27, { children });
16094
16165
  }
16095
- });
16096
- function useDnDGridContext() {
16097
- return useContext16(DnDGridContext);
16166
+ return createPortal4(
16167
+ /* @__PURE__ */ jsx136(
16168
+ "div",
16169
+ {
16170
+ css: {
16171
+ ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,
16172
+ ...bgColor && Css.bgColor(bgColor).$,
16173
+ ...!omitBottomPadding && !virtualized && scrollContainerBottomPadding
16174
+ },
16175
+ children
16176
+ }
16177
+ ),
16178
+ scrollableEl
16179
+ );
16098
16180
  }
16099
16181
 
16100
- // src/components/DnDGrid/DnDGrid.tsx
16101
- import { jsx as jsx135 } from "@emotion/react/jsx-runtime";
16102
- function DnDGrid(props) {
16103
- const { children, gridStyles, onReorder, activeItemStyles } = props;
16104
- const gridEl = useRef48(null);
16105
- const dragEl = useRef48();
16106
- const cloneEl = useRef48();
16107
- const initialOrder = useRef48();
16108
- const reorderViaKeyboard = useRef48(false);
16109
- const transformFrom = useRef48({ x: 0, y: 0 });
16110
- const tid = useTestIds(props, "dndGrid");
16111
- const getGridItems = useCallback20(() => {
16112
- return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];
16113
- }, []);
16114
- const getGridItemIdOrder = useCallback20(() => {
16115
- return getGridItems().map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined);
16116
- }, [getGridItems]);
16117
- const initReorder = useCallback20(() => {
16118
- if (gridEl.current && dragEl.current) {
16119
- initialOrder.current = getGridItemIdOrder();
16120
- dragEl.current.classList.add(activeGridItemClass);
16121
- }
16122
- }, [getGridItemIdOrder]);
16123
- const commitReorder = useCallback20(() => {
16124
- if (gridEl.current && dragEl.current) {
16125
- const currentOrder = getGridItemIdOrder();
16126
- if (!equal2(currentOrder, initialOrder.current)) onReorder(currentOrder);
16127
- dragEl.current.classList.remove(activeGridItemClass);
16128
- dragEl.current = void 0;
16129
- reorderViaKeyboard.current = false;
16130
- initialOrder.current = currentOrder;
16131
- }
16132
- }, [onReorder, getGridItemIdOrder]);
16133
- const cancelReorder = useCallback20(() => {
16134
- if (gridEl.current && dragEl.current && initialOrder.current) {
16135
- const currentOrder = getGridItemIdOrder();
16136
- if (!equal2(currentOrder, initialOrder.current)) {
16137
- const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? "");
16138
- if (initialIndex === initialOrder.current.length - 1) {
16139
- const gridItems = getGridItems();
16140
- const lastGridItem = gridItems[gridItems.length - 1];
16141
- gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);
16142
- } else {
16143
- const nextSiblingIndex = initialOrder.current[initialIndex + 1];
16144
- const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}="${nextSiblingIndex}"]`);
16145
- if (nextSibling) {
16146
- gridEl.current.insertBefore(dragEl.current, nextSibling);
16147
- }
16148
- }
16182
+ // src/components/Layout/GridTableLayout/QueryTable.tsx
16183
+ import { useMemo as useMemo32 } from "react";
16184
+
16185
+ // src/components/LoadingSkeleton.tsx
16186
+ import { jsx as jsx137 } from "@emotion/react/jsx-runtime";
16187
+ function LoadingSkeleton({
16188
+ rows = 1,
16189
+ columns = 1,
16190
+ size = "md",
16191
+ randomizeWidths = false,
16192
+ contrast = false
16193
+ }) {
16194
+ const cellArray = [...Array(columns)];
16195
+ const rowArray = [...Array(rows)];
16196
+ const rowHeight = sizeToPixels2[size];
16197
+ const rowCells = (rowNumber) => {
16198
+ const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;
16199
+ return cellArray.map((_, i) => /* @__PURE__ */ jsx137(
16200
+ "div",
16201
+ {
16202
+ css: Css.br4.add("animation", "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite").add("flexGrow", flexGrowForCell).bgGray300.if(contrast).bgGray700.$
16203
+ },
16204
+ `row-${rowNumber}-cell-${i}`
16205
+ ));
16206
+ };
16207
+ return /* @__PURE__ */ jsx137("div", { "aria-label": "Loading", children: rowArray.map((_, i) => /* @__PURE__ */ jsx137("div", { css: Css.df.gap1.mb1.hPx(rowHeight).$, children: rowCells(i) }, `row-${i}`)) });
16208
+ }
16209
+ function getRandomizedFlexBasisByRowIndex(rowIndex) {
16210
+ const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];
16211
+ const valueIndex = rowIndex % randomizedFlexBasisValues.length;
16212
+ return randomizedFlexBasisValues[valueIndex];
16213
+ }
16214
+ var sizeToPixels2 = {
16215
+ sm: 16,
16216
+ md: 24,
16217
+ lg: 32
16218
+ };
16219
+
16220
+ // src/components/Layout/GridTableLayout/QueryTable.tsx
16221
+ import { Fragment as Fragment28, jsx as jsx138, jsxs as jsxs66 } from "@emotion/react/jsx-runtime";
16222
+ function QueryTable(props) {
16223
+ const { emptyFallback, query, createRows, getPageInfo, columns, keepHeaderWhenLoading, ...others } = props;
16224
+ const data = query.loading || query.error ? void 0 : query.data;
16225
+ const rows = useMemo32(() => createRows(data), [createRows, data]);
16226
+ const hasNextPage = data && getPageInfo && getPageInfo(data).hasNextPage;
16227
+ const infoMessage = hasNextPage ? "Too many rows" : void 0;
16228
+ const fallbackMessage = query.loading ? "Loading\u2026" : query.error ? `Error: ${query.error.message}` : emptyFallback;
16229
+ const headers = rows.filter((row) => row.kind === "header");
16230
+ return query.loading ? /* @__PURE__ */ jsx138("div", { children: keepHeaderWhenLoading ? /* @__PURE__ */ jsx138(GridTable, { ...{ columns, ...others }, rows: headers, fallbackMessage }) : /* @__PURE__ */ jsx138(LoadingTable, { columns: columns.length }) }) : /* @__PURE__ */ jsx138(GridTable, { ...{ rows, columns, fallbackMessage, infoMessage, ...others } });
16231
+ }
16232
+ function LoadingTable(props) {
16233
+ const { columns } = props;
16234
+ return /* @__PURE__ */ jsxs66(Fragment28, { children: [
16235
+ /* @__PURE__ */ jsx138(LoadingSkeleton, { rows: 1, columns: 1 }),
16236
+ /* @__PURE__ */ jsx138(LoadingSkeleton, { rows: 5, columns: columns ?? 5 })
16237
+ ] });
16238
+ }
16239
+
16240
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
16241
+ import { Fragment as Fragment29, jsx as jsx139, jsxs as jsxs67 } from "@emotion/react/jsx-runtime";
16242
+ function isGridTableProps(props) {
16243
+ return "rows" in props;
16244
+ }
16245
+ function GridTableLayoutComponent(props) {
16246
+ const { pageTitle, breadcrumb, tableProps, layoutState, primaryAction, secondaryAction, tertiaryAction } = props;
16247
+ const clientSearch = layoutState?.search === "client" ? layoutState.searchString : void 0;
16248
+ const showTableActions = layoutState?.filterDefs || layoutState?.search;
16249
+ const isVirtualized = tableProps.as === "virtual";
16250
+ const breakpoints = useBreakpoint();
16251
+ return /* @__PURE__ */ jsxs67(Fragment29, { children: [
16252
+ /* @__PURE__ */ jsx139(
16253
+ Header2,
16254
+ {
16255
+ pageTitle,
16256
+ breadcrumb,
16257
+ primaryAction,
16258
+ secondaryAction,
16259
+ tertiaryAction
16149
16260
  }
16150
- dragEl.current.classList.remove(activeGridItemClass);
16151
- dragEl.current = void 0;
16152
- reorderViaKeyboard.current = false;
16153
- }
16154
- }, [getGridItemIdOrder, getGridItems]);
16155
- const onMove = useCallback20((e) => {
16156
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16157
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16158
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16159
- const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
16160
- const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
16161
- const x = clientX - transformFrom.current.x - left;
16162
- const y = clientY - transformFrom.current.y - top;
16163
- dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
16164
- const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
16165
- const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
16166
- if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
16167
- const targetPos = target.getBoundingClientRect();
16168
- const isHalfwayPassedTarget = (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 || (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
16169
- const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
16170
- if (shouldInsert) {
16171
- gridEl.current.insertBefore(cloneEl.current, isHalfwayPassedTarget ? target.nextSibling : target);
16261
+ ),
16262
+ showTableActions && /* @__PURE__ */ jsxs67(TableActions, { onlyRight: !layoutState?.search, children: [
16263
+ layoutState?.search && /* @__PURE__ */ jsx139(SearchBox, { onSearch: layoutState.setSearchString }),
16264
+ layoutState?.filterDefs && /* @__PURE__ */ jsx139(
16265
+ _Filters,
16266
+ {
16267
+ filterDefs: layoutState.filterDefs,
16268
+ filter: layoutState.filter,
16269
+ onChange: layoutState.setFilter,
16270
+ groupBy: layoutState.groupBy,
16271
+ numberOfInlineFilters: breakpoints.mdAndDown ? 2 : void 0
16172
16272
  }
16273
+ )
16274
+ ] }),
16275
+ /* @__PURE__ */ jsx139(ScrollableContent, { virtualized: isVirtualized, children: isGridTableProps(tableProps) ? /* @__PURE__ */ jsx139(GridTable, { ...tableProps, filter: clientSearch, style: { allWhite: true }, stickyHeader: true }) : /* @__PURE__ */ jsx139(
16276
+ QueryTable,
16277
+ {
16278
+ ...tableProps,
16279
+ filter: clientSearch,
16280
+ style: { allWhite: true },
16281
+ stickyHeader: true
16173
16282
  }
16283
+ ) })
16284
+ ] });
16285
+ }
16286
+ var GridTableLayout = React14.memo(GridTableLayoutComponent);
16287
+ function useGridTableLayoutState({
16288
+ persistedFilter,
16289
+ search,
16290
+ groupBy: maybeGroupBy
16291
+ }) {
16292
+ const filterFallback = { filterDefs: {}, storageKey: "unset-filter" };
16293
+ const { filter, setFilter } = usePersistedFilter(persistedFilter ?? filterFallback);
16294
+ const groupBy = useGroupBy(maybeGroupBy ?? { none: "none" });
16295
+ const [searchString, setSearchString] = useState35("");
16296
+ return {
16297
+ filter,
16298
+ setFilter,
16299
+ filterDefs: persistedFilter?.filterDefs,
16300
+ searchString,
16301
+ setSearchString,
16302
+ search,
16303
+ groupBy: maybeGroupBy ? groupBy : void 0
16304
+ };
16305
+ }
16306
+ function Header2(props) {
16307
+ const { pageTitle, breadcrumb, primaryAction, secondaryAction, tertiaryAction } = props;
16308
+ const tids = useTestIds(props);
16309
+ return /* @__PURE__ */ jsx139(FullBleed, { children: /* @__PURE__ */ jsxs67("header", { css: { ...Css.p3.mb3.mhPx(50).bgWhite.df.jcsb.aic.$ }, ...tids.header, children: [
16310
+ /* @__PURE__ */ jsxs67("div", { children: [
16311
+ breadcrumb && /* @__PURE__ */ jsx139(PageHeaderBreadcrumbs, { breadcrumb }),
16312
+ /* @__PURE__ */ jsx139("h1", { css: Css.xl2Sb.mt1.$, ...tids.pageTitle, children: pageTitle })
16313
+ ] }),
16314
+ /* @__PURE__ */ jsxs67("div", { css: Css.df.fwr.jcfe.gap1.$, children: [
16315
+ tertiaryAction && /* @__PURE__ */ jsx139(Button, { ...tertiaryAction, variant: "tertiary" }),
16316
+ secondaryAction && /* @__PURE__ */ jsx139(Button, { ...secondaryAction, variant: "secondary" }),
16317
+ primaryAction && /* @__PURE__ */ jsx139(Button, { ...primaryAction })
16318
+ ] })
16319
+ ] }) });
16320
+ }
16321
+ function SearchBox({ onSearch }) {
16322
+ const [{ search: initialValue }, setQueryParams] = useQueryParams3({ search: StringParam2 });
16323
+ const [value, setValue] = useState35(initialValue || "");
16324
+ const [debouncedSearch] = useDebounce2(value, 300);
16325
+ useEffect25(() => {
16326
+ onSearch(debouncedSearch);
16327
+ setQueryParams({ search: debouncedSearch || void 0 }, "replaceIn");
16328
+ }, [debouncedSearch, onSearch, setQueryParams]);
16329
+ return /* @__PURE__ */ jsx139("div", { css: Css.wPx(244).$, children: /* @__PURE__ */ jsx139(
16330
+ TextField,
16331
+ {
16332
+ label: "Search",
16333
+ labelStyle: "hidden",
16334
+ value,
16335
+ onChange: (v) => setValue(v ?? ""),
16336
+ placeholder: "Search",
16337
+ clearable: true,
16338
+ startAdornment: /* @__PURE__ */ jsx139(Icon, { icon: "search", color: "rgba(100, 100, 100, 1)" /* Gray700 */ })
16174
16339
  }
16175
- }, []);
16176
- const onDragStart = useCallback20(
16177
- (e) => {
16178
- if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
16179
- initReorder();
16180
- const gridRect = gridEl.current.getBoundingClientRect();
16181
- const rect = dragEl.current.getBoundingClientRect();
16182
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16183
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16184
- const top = rect.top - gridRect.top;
16185
- const left = rect.left - gridRect.left;
16186
- transformFrom.current = { x: clientX - left, y: clientY - top };
16187
- cloneEl.current = dragEl.current.cloneNode();
16188
- cloneEl.current?.setAttribute(
16189
- "style",
16190
- `border-width: 2px; border-color: ${"rgba(201, 201, 201, 1)" /* Gray400 */}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`
16191
- );
16192
- cloneEl.current?.setAttribute(gridCloneKey, "true");
16193
- cloneEl.current.removeAttribute("id");
16194
- cloneEl.current?.classList.remove(activeGridItemClass);
16195
- gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);
16196
- dragEl.current.setAttribute(
16197
- "style",
16198
- `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`
16199
- );
16200
- gridEl.current.style.cursor = "grabbing";
16201
- gridEl.current.addEventListener("mousemove", onMove);
16202
- gridEl.current.addEventListener("touchmove", onMove);
16203
- }
16204
- },
16205
- [initReorder, onMove]
16340
+ ) });
16341
+ }
16342
+
16343
+ // src/components/Layout/PreventBrowserScroll.tsx
16344
+ import { jsx as jsx140 } from "@emotion/react/jsx-runtime";
16345
+ function PreventBrowserScroll({ children }) {
16346
+ return (
16347
+ // Take over the full viewport and hide any overflown content.
16348
+ // Using `-webkit-fill-available`, otherwise `height: 100vh` includes the app bars in mobile Safari. See https://allthingssmitty.com/2020/05/11/css-fix-for-100vh-in-mobile-webkit/
16349
+ // Setting the multiple "(min|max-)height" properties is necessary, as Truss will turn this into an object and there can only be one `height` property.
16350
+ /* @__PURE__ */ jsx140("div", { css: Css.oh.vh100.mh("-webkit-fill-available").maxh("-webkit-fill-available").$, children: /* @__PURE__ */ jsx140("div", { css: Css.h100.df.fdc.mh0.oa.$, children }) })
16206
16351
  );
16207
- const onDragEnd = useCallback20(
16208
- (e) => {
16209
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16210
- e.preventDefault();
16211
- cloneEl.current.replaceWith(dragEl.current);
16212
- gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
16213
- dragEl.current.removeAttribute("style");
16214
- gridEl.current.style.cursor = "auto";
16215
- cloneEl.current = void 0;
16216
- commitReorder();
16217
- gridEl.current.removeEventListener("mousemove", onMove);
16218
- gridEl.current.removeEventListener("touchmove", onMove);
16219
- }
16352
+ }
16353
+
16354
+ // src/components/Layout/RightPaneLayout/RightPaneContext.tsx
16355
+ import React15, { useCallback as useCallback18, useContext as useContext13, useMemo as useMemo33, useState as useState36 } from "react";
16356
+ import { jsx as jsx141 } from "@emotion/react/jsx-runtime";
16357
+ var RightPaneContext = React15.createContext({
16358
+ openInPane: () => {
16359
+ },
16360
+ closePane: () => {
16361
+ },
16362
+ clearPane: () => {
16363
+ },
16364
+ isRightPaneOpen: false,
16365
+ rightPaneContent: null
16366
+ });
16367
+ function RightPaneProvider({ children }) {
16368
+ const [rightPaneContent, setRightPaneContent] = useState36(void 0);
16369
+ const [isRightPaneOpen, setIsRightPaneOpen] = useState36(false);
16370
+ const openInPane = useCallback18(
16371
+ (opts) => {
16372
+ setRightPaneContent(opts?.content);
16373
+ setIsRightPaneOpen(true);
16220
16374
  },
16221
- [commitReorder, onMove]
16375
+ [setRightPaneContent]
16222
16376
  );
16223
- const onDragHandleKeyDown = useCallback20(
16224
- (e) => {
16225
- const moveHandle = e.target;
16226
- if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
16227
- const isSpaceKey = e.key === " ";
16228
- if (isSpaceKey && !reorderViaKeyboard.current) {
16229
- e.preventDefault();
16230
- reorderViaKeyboard.current = true;
16231
- document.addEventListener("pointerdown", cancelReorder);
16232
- initReorder();
16233
- return;
16234
- }
16235
- if (!reorderViaKeyboard.current) {
16236
- return;
16237
- }
16238
- const isEnterKey = e.key === "Enter";
16239
- const isTabKey = e.key === "Tab";
16240
- if (isEnterKey || isSpaceKey || isTabKey) {
16241
- if (!isTabKey) {
16242
- e.preventDefault();
16243
- }
16244
- commitReorder();
16245
- if (isEnterKey) {
16246
- moveHandle.blur();
16247
- }
16248
- document.removeEventListener("pointerdown", cancelReorder);
16249
- return;
16250
- }
16251
- if (e.key === "Escape") {
16252
- e.preventDefault();
16253
- cancelReorder();
16254
- document.removeEventListener("pointerdown", cancelReorder);
16255
- return;
16256
- }
16257
- const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
16258
- const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
16259
- if (movingLeft || movingRight) {
16260
- e.preventDefault();
16261
- const gridItems = getGridItems();
16262
- const currentIndex = gridItems.map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined).indexOf(dragEl.current.getAttribute(gridItemIdKey));
16263
- const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;
16264
- const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;
16265
- if (movingLeft && currentIndex > 0 || movingRight && currentIndex < gridItems.length - 1) {
16266
- gridEl.current.insertBefore(dragEl.current, insertBeforeElement);
16267
- }
16268
- moveHandle.focus();
16269
- }
16270
- }
16271
- },
16272
- [cancelReorder, commitReorder, initReorder, getGridItems]
16377
+ const closePane = useCallback18(() => setIsRightPaneOpen(false), []);
16378
+ const clearPane = useCallback18(() => setRightPaneContent(void 0), [setRightPaneContent]);
16379
+ const context = useMemo33(
16380
+ () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),
16381
+ [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen]
16273
16382
  );
16274
- return /* @__PURE__ */ jsx135(DnDGridContext.Provider, { value: { dragEl, onDragHandleKeyDown }, children: /* @__PURE__ */ jsx135(
16275
- "div",
16276
- {
16277
- ref: gridEl,
16278
- css: {
16279
- ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,
16280
- ...gridStyles
16281
- },
16282
- onTouchStart: onDragStart,
16283
- onMouseDown: onDragStart,
16284
- onTouchEnd: onDragEnd,
16285
- onMouseUp: onDragEnd,
16286
- ...tid,
16287
- children
16288
- }
16289
- ) });
16383
+ return /* @__PURE__ */ jsx141(RightPaneContext.Provider, { value: context, children });
16290
16384
  }
16291
- var gridItemIdKey = "dndgrid-itemid";
16292
- var gridCloneKey = "dndgrid-clone";
16293
- var activeGridItemClass = "dndgrid-active";
16294
-
16295
- // src/components/DnDGrid/DnDGridItemHandle.tsx
16296
- import { mergeProps as mergeProps12, useFocusRing as useFocusRing13, useHover as useHover17 } from "react-aria";
16297
- import { jsx as jsx136 } from "@emotion/react/jsx-runtime";
16298
- function DnDGridItemHandle(props) {
16299
- const { dragHandleProps, icon = "move", compact = false, color } = props;
16300
- const { focusProps, isFocusVisible } = useFocusRing13();
16301
- const { hoverProps, isHovered } = useHover17({});
16302
- const tid = useTestIds(props, "dragHandle");
16303
- const iconButtonNormal2 = Css.hPx(28).wPx(28).br8.bw2.$;
16304
- const iconButtonCompact2 = Css.hPx(18).wPx(18).br4.bw1.$;
16305
- return /* @__PURE__ */ jsx136(
16306
- "button",
16307
- {
16308
- css: {
16309
- ...compact ? iconButtonCompact2 : iconButtonNormal2,
16310
- ...Css.cursor("grab").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible).bcBlue700.$,
16311
- ...isHovered && Css.bgGray200.$
16312
- },
16313
- ...mergeProps12(dragHandleProps, focusProps, hoverProps),
16314
- ...tid,
16315
- children: /* @__PURE__ */ jsx136(Icon, { icon, inc: compact ? 2 : void 0, color })
16316
- }
16317
- );
16385
+ function useRightPaneContext() {
16386
+ return useContext13(RightPaneContext);
16318
16387
  }
16319
16388
 
16320
- // src/components/DnDGrid/useDnDGridItem.tsx
16321
- import { useMemo as useMemo35 } from "react";
16322
- function useDnDGridItem(props) {
16323
- const { id, itemRef } = props;
16324
- const { dragEl, onDragHandleKeyDown } = useDnDGridContext();
16325
- const { dragItemProps, dragHandleProps } = useMemo35(
16326
- () => {
16327
- function initDraggable() {
16328
- if (itemRef.current) {
16329
- dragEl.current = itemRef.current;
16330
- }
16389
+ // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
16390
+ import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
16391
+ import { useEffect as useEffect26 } from "react";
16392
+ import { Fragment as Fragment30, jsx as jsx142, jsxs as jsxs68 } from "@emotion/react/jsx-runtime";
16393
+ function RightPaneLayout(props) {
16394
+ const { children, paneBgColor = "rgba(255,255,255,1)" /* White */, paneWidth = 450, defaultPaneContent } = props;
16395
+ const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();
16396
+ useEffect26(() => closePane, [closePane]);
16397
+ return /* @__PURE__ */ jsx142("div", { css: Css.h100.df.oxh.$, children: /* @__PURE__ */ jsxs68(Fragment30, { children: [
16398
+ /* @__PURE__ */ jsx142(
16399
+ "div",
16400
+ {
16401
+ css: {
16402
+ ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.oxa.$,
16403
+ ...Css.if(!isRightPaneOpen).w100.mr0.$,
16404
+ ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$
16405
+ },
16406
+ children
16331
16407
  }
16332
- return {
16333
- dragItemProps: { [gridItemIdKey]: id },
16334
- dragHandleProps: {
16335
- onMouseDown: initDraggable,
16336
- onTouchStart: initDraggable,
16337
- onKeyDown: (e) => {
16338
- initDraggable();
16339
- onDragHandleKeyDown(e);
16340
- }
16408
+ ),
16409
+ /* @__PURE__ */ jsxs68("div", { css: Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$, children: [
16410
+ defaultPaneContent && /* @__PURE__ */ jsx142(
16411
+ "div",
16412
+ {
16413
+ css: Css.h100.wPx(paneWidth).left(0).absolute.add("transition", "all .3s ease-in-out").if(isRightPaneOpen).add("opacity", 0).left(100).$,
16414
+ children: defaultPaneContent
16341
16415
  }
16342
- };
16343
- },
16344
- // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects
16345
- // eslint-disable-next-line react-hooks/exhaustive-deps
16346
- [dragEl, id, itemRef]
16347
- );
16348
- return { dragHandleProps, dragItemProps };
16416
+ ),
16417
+ /* @__PURE__ */ jsx142(AnimatePresence3, { children: isRightPaneOpen && /* @__PURE__ */ jsx142(
16418
+ motion3.div,
16419
+ {
16420
+ layout: "position",
16421
+ "data-testid": "rightPaneContent",
16422
+ css: Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
16423
+ initial: { x: paneWidth + 24, position: "absolute" },
16424
+ animate: { x: 0 },
16425
+ transition: { ease: "linear", duration: 0.2 },
16426
+ exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
16427
+ onAnimationComplete: (definition) => definition.x !== 0 && clearPane(),
16428
+ children: rightPaneContent
16429
+ },
16430
+ "rightPane"
16431
+ ) })
16432
+ ] })
16433
+ ] }) });
16349
16434
  }
16350
16435
 
16351
- // src/components/Filters/BaseFilter.ts
16352
- var BaseFilter = class {
16353
- constructor(key, props) {
16354
- this.key = key;
16355
- this.props = props;
16356
- }
16357
- get label() {
16358
- return this.props.label || defaultLabel(this.key);
16359
- }
16360
- get defaultValue() {
16361
- return this.props.defaultValue;
16362
- }
16363
- testId(tid) {
16364
- return tid[defaultTestId(this.label)];
16365
- }
16366
- };
16436
+ // src/components/Layout/RightPaneLayout/useRightPane.tsx
16437
+ function useRightPane() {
16438
+ const { openInPane, closePane } = useRightPaneContext();
16439
+ return {
16440
+ openRightPane: openInPane,
16441
+ closeRightPane: closePane
16442
+ };
16443
+ }
16367
16444
 
16368
- // src/components/Filters/DateFilter.tsx
16369
- import { Fragment as Fragment25, jsx as jsx137, jsxs as jsxs66 } from "@emotion/react/jsx-runtime";
16370
- function dateFilter(props) {
16371
- return (key) => new DateFilter(key, props);
16445
+ // src/components/Toast/ToastContext.tsx
16446
+ import { createContext as createContext5, useCallback as useCallback19, useContext as useContext14, useMemo as useMemo34, useState as useState37 } from "react";
16447
+ import { jsx as jsx143 } from "@emotion/react/jsx-runtime";
16448
+ var ToastContext = createContext5({
16449
+ setNotice: () => {
16450
+ throw new Error("Missing ToastProvider");
16451
+ },
16452
+ clear: () => {
16453
+ },
16454
+ notice: void 0
16455
+ });
16456
+ function ToastProvider(props) {
16457
+ const [notice, setNotice] = useState37();
16458
+ const clear = useCallback19(() => setNotice(void 0), [setNotice]);
16459
+ const contextValue = useMemo34(() => ({ setNotice, notice, clear }), [notice, clear]);
16460
+ return /* @__PURE__ */ jsx143(ToastContext.Provider, { value: contextValue, children: props.children });
16461
+ }
16462
+ function useToastContext() {
16463
+ return useContext14(ToastContext);
16372
16464
  }
16373
- var anyOption = {};
16374
- var DateFilter = class extends BaseFilter {
16375
- render(value, setValue, tid, inModal, vertical) {
16376
- const { label, operations, getOperationValue, getOperationLabel } = this.props;
16377
- return /* @__PURE__ */ jsxs66(Fragment25, { children: [
16378
- vertical && /* @__PURE__ */ jsx137(Label, { label }),
16379
- /* @__PURE__ */ jsxs66(CompoundField, { children: [
16380
- /* @__PURE__ */ jsx137(
16381
- SelectField,
16382
- {
16383
- compact: true,
16384
- sizeToContent: true,
16385
- options: [
16386
- // Always show the 'Any' option
16387
- anyOption,
16388
- ...operations
16389
- ],
16390
- getOptionValue: (o) => o === anyOption ? void 0 : getOperationValue(o),
16391
- getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
16392
- value: value?.op,
16393
- onSelect: (op) => (
16394
- // default the selected date to today if it doesn't exist in the filter's value
16395
- setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
16396
- ),
16397
- label: inModal ? `${label} date filter operation` : label,
16398
- labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
16399
- nothingSelectedText: "Any",
16400
- ...tid[`${defaultTestId(this.label)}_dateOperation`]
16401
- }
16402
- ),
16403
- /* @__PURE__ */ jsx137(
16404
- DateField,
16405
- {
16406
- compact: true,
16407
- labelStyle: "inline",
16408
- value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
16409
- label: "Date",
16410
- onChange: (d) => setValue({ ...value, value: d }),
16411
- disabled: !value,
16412
- ...tid[`${defaultTestId(this.label)}_dateField`]
16413
- }
16414
- )
16415
- ] })
16416
- ] });
16417
- }
16418
- };
16419
16465
 
16420
- // src/components/Filters/DateRangeFilter.tsx
16421
- import { Fragment as Fragment26, jsx as jsx138, jsxs as jsxs67 } from "@emotion/react/jsx-runtime";
16422
- function dateRangeFilter(props) {
16423
- return (key) => new DateRangeFilter(key, props);
16466
+ // src/components/BeamContext.tsx
16467
+ import { jsx as jsx144, jsxs as jsxs69 } from "@emotion/react/jsx-runtime";
16468
+ var BeamContext = createContext6({
16469
+ modalState: new EmptyRef(),
16470
+ modalCanCloseChecks: new EmptyRef(),
16471
+ modalHeaderDiv: void 0,
16472
+ modalBodyDiv: void 0,
16473
+ modalFooterDiv: void 0,
16474
+ drawerContentStack: new EmptyRef(),
16475
+ drawerCanCloseChecks: new EmptyRef(),
16476
+ drawerCanCloseDetailsChecks: new EmptyRef(),
16477
+ sdHeaderDiv: void 0
16478
+ });
16479
+ function BeamProvider({ children, ...presentationProps }) {
16480
+ const [, tick] = useReducer((prev) => prev + 1, 0);
16481
+ const modalRef = useRef43();
16482
+ const modalHeaderDiv = useMemo35(() => document.createElement("div"), []);
16483
+ const modalBodyDiv = useMemo35(() => {
16484
+ const el = document.createElement("div");
16485
+ el.style.height = "100%";
16486
+ return el;
16487
+ }, []);
16488
+ const modalCanCloseChecksRef = useRef43([]);
16489
+ const modalFooterDiv = useMemo35(() => document.createElement("div"), []);
16490
+ const drawerContentStackRef = useRef43([]);
16491
+ const drawerCanCloseChecks = useRef43([]);
16492
+ const drawerCanCloseDetailsChecks = useRef43([]);
16493
+ const sdHeaderDiv = useMemo35(() => document.createElement("div"), []);
16494
+ const context = useMemo35(() => {
16495
+ return {
16496
+ // These two keys need to trigger re-renders on change
16497
+ modalState: new PretendRefThatTicks(modalRef, tick),
16498
+ drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),
16499
+ // The rest we don't need to re-render when these are mutated, so just expose as-is
16500
+ modalCanCloseChecks: modalCanCloseChecksRef,
16501
+ modalHeaderDiv,
16502
+ modalBodyDiv,
16503
+ modalFooterDiv,
16504
+ drawerCanCloseChecks,
16505
+ drawerCanCloseDetailsChecks,
16506
+ sdHeaderDiv
16507
+ };
16508
+ }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);
16509
+ return /* @__PURE__ */ jsx144(BeamContext.Provider, { value: { ...context }, children: /* @__PURE__ */ jsx144(PresentationProvider, { ...presentationProps, children: /* @__PURE__ */ jsx144(RightPaneProvider, { children: /* @__PURE__ */ jsx144(AutoSaveStatusProvider, { children: /* @__PURE__ */ jsx144(SnackbarProvider, { children: /* @__PURE__ */ jsxs69(ToastProvider, { children: [
16510
+ /* @__PURE__ */ jsxs69(OverlayProvider, { children: [
16511
+ children,
16512
+ modalRef.current && /* @__PURE__ */ jsx144(Modal, { ...modalRef.current })
16513
+ ] }),
16514
+ /* @__PURE__ */ jsx144(SuperDrawer, {})
16515
+ ] }) }) }) }) }) });
16424
16516
  }
16425
- var DateRangeFilter = class extends BaseFilter {
16426
- render(value, setValue, tid, inModal, vertical) {
16427
- const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
16428
- return /* @__PURE__ */ jsxs67(Fragment26, { children: [
16429
- vertical && /* @__PURE__ */ jsx138(Label, { label }),
16430
- /* @__PURE__ */ jsx138(
16431
- DateRangeField,
16432
- {
16433
- compact: true,
16434
- labelStyle: "inline",
16435
- isRangeFilterField: true,
16436
- placeholder: placeholderText,
16437
- label: testFieldLabel ?? "Date",
16438
- value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
16439
- onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
16440
- disabledDays,
16441
- ...tid[`${defaultTestId(this.label)}_dateField`]
16442
- }
16443
- )
16444
- ] });
16517
+ var PretendRefThatTicks = class {
16518
+ constructor(ref, tick) {
16519
+ this.ref = ref;
16520
+ this.tick = tick;
16521
+ }
16522
+ get current() {
16523
+ return this.ref.current;
16524
+ }
16525
+ set current(value) {
16526
+ this.ref.current = value;
16527
+ this.tick();
16445
16528
  }
16446
16529
  };
16447
-
16448
- // src/components/Filters/MultiFilter.tsx
16449
- import { jsx as jsx139 } from "@emotion/react/jsx-runtime";
16450
- function multiFilter(props) {
16451
- return (key) => new MultiFilter(key, props);
16530
+ function useBeamContext() {
16531
+ return useContext15(BeamContext);
16452
16532
  }
16453
- var MultiFilter = class extends BaseFilter {
16454
- render(value, setValue, tid, inModal, vertical) {
16455
- if (inModal && Array.isArray(this.props.options) && this.props.options.length > 0 && this.props.options.length <= 8) {
16456
- const { disabledOptions } = this.props;
16457
- const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
16458
- const disabledKeys = Object.keys(disabledOptionsWithReasons);
16459
- return /* @__PURE__ */ jsx139(
16460
- ToggleChipGroup,
16461
- {
16462
- label: this.label,
16463
- options: this.props.options.map((o) => {
16464
- const value2 = this.props.getOptionValue(o);
16465
- const disabled = value2 && disabledKeys.includes(value2.toString());
16466
- const disabledReason = disabled ? disabledOptionsWithReasons[value2.toString()] : void 0;
16467
- return {
16468
- label: this.props.getOptionLabel(o),
16469
- value: value2,
16470
- disabled: disabledReason ?? disabled
16471
- };
16472
- }),
16473
- onChange: (values) => {
16474
- setValue(values.length === 0 ? void 0 : values);
16475
- },
16476
- values: value || [],
16477
- labelStyle: "hidden",
16478
- ...tid[defaultTestId(this.label)]
16479
- }
16480
- );
16533
+
16534
+ // src/components/ButtonDatePicker.tsx
16535
+ import { useRef as useRef44 } from "react";
16536
+ import { useMenuTrigger as useMenuTrigger3 } from "react-aria";
16537
+ import { useMenuTriggerState as useMenuTriggerState3 } from "react-stately";
16538
+ import { jsx as jsx145 } from "@emotion/react/jsx-runtime";
16539
+ function ButtonDatePicker(props) {
16540
+ const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;
16541
+ const state = useMenuTriggerState3({ isOpen: defaultOpen });
16542
+ const buttonRef = useRef44(null);
16543
+ const { menuTriggerProps, menuProps } = useMenuTrigger3({ isDisabled: !!disabled }, state, buttonRef);
16544
+ const tid = useTestIds(
16545
+ props,
16546
+ isTextButton(trigger) ? defaultTestId(labelOr(trigger, "buttonDatePicker")) : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
16547
+ );
16548
+ return /* @__PURE__ */ jsx145(OverlayTrigger, { ...props, menuTriggerProps, state, buttonRef, ...tid, children: /* @__PURE__ */ jsx145(DatePickerOverlay, { overlayProps: menuProps, children: /* @__PURE__ */ jsx145(
16549
+ DatePicker,
16550
+ {
16551
+ ...datePickerProps,
16552
+ onSelect: (d) => {
16553
+ onSelect(d);
16554
+ state.close();
16555
+ },
16556
+ ...tid.datePicker
16481
16557
  }
16482
- const { defaultValue, nothingSelectedText, ...props } = this.props;
16483
- return /* @__PURE__ */ jsx139(
16484
- MultiSelectField,
16558
+ ) }) });
16559
+ }
16560
+
16561
+ // src/components/ButtonGroup.tsx
16562
+ import { useRef as useRef45 } from "react";
16563
+ import { useButton as useButton10, useFocusRing as useFocusRing12, useHover as useHover15 } from "react-aria";
16564
+ import { jsx as jsx146, jsxs as jsxs70 } from "@emotion/react/jsx-runtime";
16565
+ function ButtonGroup(props) {
16566
+ const { buttons, disabled = false, size = "sm" } = props;
16567
+ const tid = useTestIds(props, "buttonGroup");
16568
+ return (
16569
+ // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.
16570
+ /* @__PURE__ */ jsx146("div", { ...tid, css: Css.df.lh(0).add({ ...sizeStyles2[size] }).$, children: buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => (
16571
+ // Disable the button if the ButtonGroup is disabled or if the current button is disabled.
16572
+ /* @__PURE__ */ jsx146(GroupButton, { ...buttonProps, disabled: disabled || buttonDisabled, size, ...tid }, i)
16573
+ )) })
16574
+ );
16575
+ }
16576
+ function GroupButton(props) {
16577
+ const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;
16578
+ const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };
16579
+ const ref = useRef45(null);
16580
+ const { buttonProps, isPressed } = useButton10(ariaProps, ref);
16581
+ const { isFocusVisible, focusProps } = useFocusRing12();
16582
+ const { hoverProps, isHovered } = useHover15(ariaProps);
16583
+ const tid = useTestIds(props);
16584
+ return /* @__PURE__ */ jsx146("span", { css: getButtonStyles2(), children: maybeTooltip({
16585
+ title: resolveTooltip(disabled, tooltip),
16586
+ placement: "top",
16587
+ children: /* @__PURE__ */ jsxs70(
16588
+ "button",
16485
16589
  {
16486
- ...props,
16487
- compact: !vertical,
16488
- label: this.label,
16489
- values: value || [],
16490
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16491
- sizeToContent: !inModal && !vertical,
16492
- onSelect: (values) => {
16493
- setValue(values.length === 0 ? void 0 : values);
16590
+ ref,
16591
+ ...buttonProps,
16592
+ ...focusProps,
16593
+ ...hoverProps,
16594
+ css: {
16595
+ ...Css.buttonBase.px2.br0.h100.$,
16596
+ "&:disabled": Css.gray400.cursorNotAllowed.bcGray300.$,
16597
+ ...isFocusVisible ? defaultFocusRingStyles2 : {},
16598
+ ...active ? activeStyles3 : {},
16599
+ ...isPressed ? pressedStyles2 : isHovered ? hoverStyles3 : {},
16600
+ ...icon ? iconStyles2[size] : {}
16494
16601
  },
16495
- nothingSelectedText: nothingSelectedText ?? "All",
16496
- ...this.testId(tid)
16602
+ ...tid[defaultTestId(typeof text === "string" && text || icon || "button")],
16603
+ children: [
16604
+ icon && /* @__PURE__ */ jsx146(Icon, { xss: Css.if(!!text).mrPx(4).$, icon, color: disabled ? void 0 : iconColor, inc: iconInc }),
16605
+ text
16606
+ ]
16497
16607
  }
16498
- );
16499
- }
16500
- };
16501
-
16502
- // src/components/Filters/NumberRangeFilter.tsx
16503
- import { Fragment as Fragment27, jsx as jsx140, jsxs as jsxs68 } from "@emotion/react/jsx-runtime";
16504
- function numberRangeFilter(props) {
16505
- return (key) => new NumberRangeFilter(key, props);
16608
+ )
16609
+ }) });
16506
16610
  }
16507
- var NumberRangeFilter = class extends BaseFilter {
16508
- render(value, setValue, tid, inModal, vertical) {
16509
- const { label, numberFieldType, numberFormatOptions } = this.props;
16510
- const min = value?.min ?? void 0;
16511
- const max = value?.max ?? void 0;
16512
- return /* @__PURE__ */ jsxs68(Fragment27, { children: [
16513
- vertical && /* @__PURE__ */ jsxs68("div", { ...tid, children: [
16514
- /* @__PURE__ */ jsx140(Label, { label }),
16515
- /* @__PURE__ */ jsx140("div", { css: Css.pb1.$, children: /* @__PURE__ */ jsx140(
16516
- NumberField,
16517
- {
16518
- labelStyle: "inline",
16519
- clearable: true,
16520
- label: "Min",
16521
- value: min,
16522
- type: numberFieldType,
16523
- numberFormatOptions,
16524
- onChange: (minVal) => {
16525
- const maxValue = max ? { max } : {};
16526
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16527
- },
16528
- ...tid[`${defaultTestId(label)}_min_vertical`]
16529
- }
16530
- ) }),
16531
- /* @__PURE__ */ jsx140(
16532
- NumberField,
16533
- {
16534
- labelStyle: "inline",
16535
- clearable: true,
16536
- label: "Max",
16537
- value: max,
16538
- type: numberFieldType,
16539
- numberFormatOptions,
16540
- onChange: (maxVal) => {
16541
- const minValue = min ? { min } : {};
16542
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16543
- },
16544
- ...tid[`${defaultTestId(label)}_max_vertical`]
16545
- }
16546
- )
16547
- ] }),
16548
- !vertical && /* @__PURE__ */ jsxs68(CompoundField, { ...tid, children: [
16549
- /* @__PURE__ */ jsx140(
16550
- NumberField,
16551
- {
16552
- compact: true,
16553
- sizeToContent: !inModal,
16554
- labelStyle: "inline",
16555
- clearable: true,
16556
- label: !inModal ? `${label} Min` : "Min",
16557
- value: min,
16558
- type: numberFieldType,
16559
- numberFormatOptions,
16560
- onChange: (minVal) => {
16561
- const maxValue = max ? { max } : {};
16562
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16563
- },
16564
- ...tid[`${defaultTestId(label)}_min`]
16565
- }
16566
- ),
16567
- /* @__PURE__ */ jsx140(
16568
- NumberField,
16569
- {
16570
- compact: true,
16571
- sizeToContent: !inModal,
16572
- labelStyle: "inline",
16573
- clearable: true,
16574
- label: !inModal ? `${label} Max` : "Max",
16575
- value: max,
16576
- type: numberFieldType,
16577
- numberFormatOptions,
16578
- onChange: (maxVal) => {
16579
- const minValue = min ? { min } : {};
16580
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16581
- },
16582
- ...tid[`${defaultTestId(label)}_max`]
16583
- }
16584
- )
16585
- ] })
16586
- ] });
16587
- }
16611
+ var pressedStyles2 = Css.bgGray200.$;
16612
+ var activeStyles3 = Css.bgGray300.$;
16613
+ var hoverStyles3 = Css.bgGray100.$;
16614
+ var defaultFocusRingStyles2 = Css.relative.z2.bshFocus.$;
16615
+ function getButtonStyles2() {
16616
+ return {
16617
+ ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,
16618
+ // Our first button should have a rounded left border
16619
+ "&:first-of-type": Css.add("borderRadius", "4px 0 0 4px").$,
16620
+ // Our last button should have a rounded right border
16621
+ "&:last-of-type": Css.add("borderRadius", "0 4px 4px 0").$,
16622
+ // Nudge buttons one pixel to the left so they visually share a border
16623
+ "&:not(:first-of-type)": Css.mlPx(-1).$
16624
+ };
16625
+ }
16626
+ var sizeStyles2 = {
16627
+ xs: Css.hPx(28).$,
16628
+ sm: Css.hPx(32).$,
16629
+ md: Css.hPx(40).$
16630
+ };
16631
+ var iconStyles2 = {
16632
+ xs: Css.pxPx(2).$,
16633
+ sm: Css.pxPx(4).$,
16634
+ md: Css.px1.$
16588
16635
  };
16589
16636
 
16590
- // src/components/Filters/SingleFilter.tsx
16591
- import { jsx as jsx141 } from "@emotion/react/jsx-runtime";
16592
- function singleFilter(props) {
16593
- return (key) => new SingleFilter(key, props);
16637
+ // src/components/ButtonMenu.tsx
16638
+ import { useRef as useRef46 } from "react";
16639
+ import { useMenuTrigger as useMenuTrigger4 } from "react-aria";
16640
+ import { useMenuTriggerState as useMenuTriggerState4 } from "react-stately";
16641
+ import { jsx as jsx147 } from "@emotion/react/jsx-runtime";
16642
+ function ButtonMenu(props) {
16643
+ const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
16644
+ let selectedItem, onChange;
16645
+ if (isSelectionButtonMenuProps(props)) {
16646
+ selectedItem = props.selectedItem;
16647
+ onChange = props.onChange;
16648
+ }
16649
+ const state = useMenuTriggerState4({ isOpen: defaultOpen });
16650
+ const buttonRef = useRef46(null);
16651
+ const { menuTriggerProps, menuProps } = useMenuTrigger4({ isDisabled: !!disabled }, state, buttonRef);
16652
+ const tid = useTestIds(
16653
+ props,
16654
+ isTextButton(trigger) ? labelOr(trigger, "buttonMenu") : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
16655
+ );
16656
+ return /* @__PURE__ */ jsx147(
16657
+ OverlayTrigger,
16658
+ {
16659
+ ...props,
16660
+ menuTriggerProps,
16661
+ state,
16662
+ buttonRef,
16663
+ ...tid,
16664
+ contrast,
16665
+ children: /* @__PURE__ */ jsx147(
16666
+ Menu,
16667
+ {
16668
+ ariaMenuProps: menuProps,
16669
+ onClose: () => state.close(),
16670
+ items,
16671
+ persistentItems,
16672
+ searchable,
16673
+ contrast,
16674
+ selectedItem,
16675
+ onChange,
16676
+ ...tid
16677
+ }
16678
+ )
16679
+ }
16680
+ );
16594
16681
  }
16595
- var allOption = {};
16596
- var SingleFilter = class extends BaseFilter {
16597
- render(value, setValue, tid, inModal, vertical) {
16598
- const {
16599
- label,
16600
- defaultValue,
16601
- options: maybeOptions,
16602
- getOptionLabel,
16603
- getOptionValue,
16604
- nothingSelectedText,
16605
- ...props
16606
- } = this.props;
16607
- const options = Array.isArray(maybeOptions) ? [allOption, ...maybeOptions] : { ...maybeOptions, current: maybeOptions.current };
16608
- return /* @__PURE__ */ jsx141(
16609
- SelectField,
16610
- {
16611
- ...props,
16612
- options,
16613
- getOptionValue: (o) => o === allOption ? void 0 : getOptionValue(o),
16614
- getOptionLabel: (o) => o === allOption ? nothingSelectedText ?? "All" : getOptionLabel(o),
16615
- compact: !vertical,
16616
- value,
16617
- label: this.label,
16618
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16619
- sizeToContent: !inModal && !vertical,
16620
- nothingSelectedText: nothingSelectedText ?? "All",
16621
- onSelect: (value2) => setValue(value2 || void 0),
16622
- ...this.testId(tid)
16682
+ function isSelectionButtonMenuProps(props) {
16683
+ return typeof props === "object" && "selectedItem" in props && "onChange" in props;
16684
+ }
16685
+
16686
+ // src/components/Card.tsx
16687
+ import { useMemo as useMemo36 } from "react";
16688
+ import { useHover as useHover16 } from "react-aria";
16689
+
16690
+ // src/components/Tag.tsx
16691
+ import { useResizeObserver as useResizeObserver4 } from "@react-aria/utils";
16692
+ import { useRef as useRef47, useState as useState38 } from "react";
16693
+ import { jsx as jsx148, jsxs as jsxs71 } from "@emotion/react/jsx-runtime";
16694
+ function Tag(props) {
16695
+ const { text, type, xss, preventTooltip = false, ...otherProps } = props;
16696
+ const typeStyles2 = getStyles(type);
16697
+ const tid = useTestIds(otherProps);
16698
+ const [showTooltip, setShowTooltip] = useState38(false);
16699
+ const ref = useRef47(null);
16700
+ useResizeObserver4({
16701
+ ref,
16702
+ onResize: () => {
16703
+ if (ref.current) {
16704
+ setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);
16623
16705
  }
16624
- );
16706
+ }
16707
+ });
16708
+ return maybeTooltip({
16709
+ title: !preventTooltip && showTooltip ? text : void 0,
16710
+ children: /* @__PURE__ */ jsxs71("span", { ...tid, css: { ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles2, ...xss }, children: [
16711
+ otherProps.icon && /* @__PURE__ */ jsx148("span", { css: Css.fs0.$, children: /* @__PURE__ */ jsx148(Icon, { icon: otherProps.icon, inc: 1.5 }) }),
16712
+ /* @__PURE__ */ jsx148("span", { ref, css: Css.lineClamp1.wbba.$, children: text })
16713
+ ] })
16714
+ });
16715
+ }
16716
+ function getStyles(type) {
16717
+ switch (type) {
16718
+ case "info":
16719
+ return Css.bgBlue100.$;
16720
+ case "caution":
16721
+ return Css.bgYellow200.$;
16722
+ case "warning":
16723
+ return Css.bgRed200.$;
16724
+ case "success":
16725
+ return Css.bgGreen200.$;
16726
+ default:
16727
+ return Css.bgGray200.$;
16625
16728
  }
16626
- };
16627
-
16628
- // src/components/Filters/TreeFilter.tsx
16629
- import { jsx as jsx142 } from "@emotion/react/jsx-runtime";
16630
- function treeFilter(props) {
16631
- return (key) => new TreeFilter(key, props);
16632
16729
  }
16633
- var TreeFilter = class extends BaseFilter {
16634
- render(value, setValue, tid, inModal, vertical) {
16635
- const { defaultValue, nothingSelectedText, filterBy = "root", ...props } = this.props;
16636
- return /* @__PURE__ */ jsx142(
16637
- TreeSelectField,
16638
- {
16639
- ...props,
16640
- label: this.label,
16641
- values: value,
16642
- compact: !vertical,
16643
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16644
- sizeToContent: !inModal && !vertical,
16645
- onSelect: (options) => {
16646
- const values = options[filterBy].values;
16647
- setValue(values.length === 0 ? void 0 : values);
16730
+
16731
+ // src/components/Card.tsx
16732
+ import { jsx as jsx149, jsxs as jsxs72 } from "@emotion/react/jsx-runtime";
16733
+ function Card(props) {
16734
+ const {
16735
+ title,
16736
+ subtitle,
16737
+ detailContent,
16738
+ imgSrc,
16739
+ imageFit = "contain",
16740
+ type = "card",
16741
+ bordered = false,
16742
+ disabled: isDisabled = false,
16743
+ buttonMenuItems,
16744
+ tag
16745
+ } = props;
16746
+ const tid = useTestIds(props, "card");
16747
+ const { hoverProps, isHovered } = useHover16({ isDisabled });
16748
+ const isList = type === "list";
16749
+ const imgHeight = isList ? 96 : bordered ? 224 : 256;
16750
+ const styles = useMemo36(
16751
+ () => ({
16752
+ ...baseStyles4(type),
16753
+ ...isList && listStyles,
16754
+ ...bordered && borderedStyles,
16755
+ ...isHovered && cardHoverStyles,
16756
+ ...isDisabled && disabledStyles3
16757
+ }),
16758
+ [isDisabled, isHovered, bordered, type, isList]
16759
+ );
16760
+ return /* @__PURE__ */ jsxs72("div", { css: styles, ...hoverProps, ...tid, children: [
16761
+ /* @__PURE__ */ jsx149(
16762
+ "div",
16763
+ {
16764
+ css: {
16765
+ ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add("filter", "brightness(1)").$,
16766
+ ...isHovered && !isList && imageHoverStyles
16648
16767
  },
16649
- nothingSelectedText: nothingSelectedText ?? "All",
16650
- ...this.testId(tid)
16768
+ children: /* @__PURE__ */ jsx149("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
16651
16769
  }
16652
- );
16653
- }
16654
- };
16655
-
16656
- // src/components/Filters/BooleanFilter.tsx
16657
- import { jsx as jsx143 } from "@emotion/react/jsx-runtime";
16658
- function booleanFilter(props) {
16659
- return (key) => new BooleanFilter(key, props);
16660
- }
16661
- var BooleanFilter = class extends BaseFilter {
16662
- render(value, setValue, tid, inModal, vertical) {
16663
- const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;
16664
- return /* @__PURE__ */ jsx143(
16665
- SelectField,
16770
+ ),
16771
+ isHovered && buttonMenuItems && /* @__PURE__ */ jsx149("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ jsx149(
16772
+ ButtonMenu,
16666
16773
  {
16667
- ...props,
16668
- compact: !vertical,
16669
- label: this.label,
16670
- value: String(value),
16671
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16672
- sizeToContent: !inModal && !vertical,
16673
- options,
16674
- getOptionValue: (o) => String(o[0]),
16675
- getOptionLabel: (o) => o[1],
16676
- onSelect: (value2) => {
16677
- const parsedValue = value2 === "undefined" ? void 0 : value2 === "true";
16678
- setValue(parsedValue);
16679
- },
16680
- ...this.testId(tid)
16774
+ trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
16775
+ items: buttonMenuItems
16681
16776
  }
16682
- );
16683
- }
16684
- };
16685
- var defaultBooleanOptions = [
16686
- [void 0, "Any"],
16687
- [true, "Yes"],
16688
- [false, "No"]
16689
- ];
16777
+ ) }),
16778
+ tag && /* @__PURE__ */ jsx149("div", { css: Css.absolute.left1.topPx(4).$, children: /* @__PURE__ */ jsx149(Tag, { type: tag?.type, text: tag?.text, ...tid.tag }) }),
16779
+ /* @__PURE__ */ jsxs72("div", { css: Css.df.fdc.aifs.gap1.$, children: [
16780
+ /* @__PURE__ */ jsxs72("div", { children: [
16781
+ /* @__PURE__ */ jsx149("div", { css: Css.xsMd.gray700.$, ...tid.subtitle, children: subtitle }),
16782
+ /* @__PURE__ */ jsx149("div", { css: Css.smMd.gray900.if(isHovered).blue700.$, ...tid.title, children: title })
16783
+ ] }),
16784
+ /* @__PURE__ */ jsx149("div", { ...tid.details, children: detailContent })
16785
+ ] })
16786
+ ] });
16787
+ }
16788
+ var width = { card: 256, list: 520 };
16789
+ var baseStyles4 = (type) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;
16790
+ var listStyles = Css.df.fdr.gap2.$;
16791
+ var borderedStyles = Css.ba.br8.bcGray300.p2.$;
16792
+ var disabledStyles3 = Css.add("opacity", 0.5).add("transition", "opacity 0.3s ease").$;
16793
+ var cardHoverStyles = Css.bcGray400.cursorPointer.$;
16794
+ var imageHoverStyles = Css.bgWhite.add("filter", "brightness(0.3)").add("transition", "filter 0.3s ease").$;
16690
16795
 
16691
- // src/components/Filters/CheckboxFilter.tsx
16692
- import { jsx as jsx144 } from "@emotion/react/jsx-runtime";
16693
- function checkboxFilter(props) {
16694
- return (key) => new CheckboxFilter(key, {
16695
- // If the user has set the offValue, that should be the default b/c we're only a two-state
16696
- defaultValue: props.offValue,
16697
- ...props
16698
- });
16796
+ // src/components/Copy.tsx
16797
+ import { jsx as jsx150 } from "@emotion/react/jsx-runtime";
16798
+ function Copy(props) {
16799
+ return /* @__PURE__ */ jsx150(
16800
+ "div",
16801
+ {
16802
+ css: {
16803
+ ...Css.sm.gray700.mt2.mb3.wPx(480).$,
16804
+ "& > p": Css.my2.$
16805
+ },
16806
+ children: props.children
16807
+ }
16808
+ );
16699
16809
  }
16700
- var CheckboxFilter = class extends BaseFilter {
16701
- render(value, setValue, tid, inModal, vertical) {
16702
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16703
- return /* @__PURE__ */ jsx144(
16704
- Checkbox,
16705
- {
16706
- ...props,
16707
- selected: value === void 0 ? false : value === onValue,
16708
- label: this.label,
16709
- onChange: (on) => {
16710
- setValue(on ? onValue : offValue);
16711
- },
16712
- ...this.testId(tid)
16713
- }
16714
- );
16715
- }
16716
- get hideLabelInModal() {
16717
- return true;
16718
- }
16719
- };
16720
16810
 
16721
- // src/components/Filters/FilterModal.tsx
16722
- import { useState as useState37 } from "react";
16811
+ // src/components/DnDGrid/DnDGrid.tsx
16812
+ import equal2 from "fast-deep-equal";
16813
+ import { useCallback as useCallback20, useRef as useRef48 } from "react";
16723
16814
 
16724
- // src/components/Modal/OpenModal.tsx
16725
- import { useEffect as useEffect25 } from "react";
16726
- import { jsx as jsx145 } from "@emotion/react/jsx-runtime";
16727
- function OpenModal(props) {
16728
- const { openModal } = useModal();
16729
- const { size, children, keepOpen } = props;
16730
- useEffect25(() => {
16731
- if (!keepOpen) {
16732
- openModal({ size, content: children });
16733
- }
16734
- }, [keepOpen, openModal, size, children]);
16735
- if (keepOpen) {
16736
- return /* @__PURE__ */ jsx145(Modal, { size, content: children });
16737
- } else {
16738
- return /* @__PURE__ */ jsx145("div", { children: "dummy content" });
16815
+ // src/components/DnDGrid/DnDGridContext.tsx
16816
+ import { createContext as createContext7, useContext as useContext16 } from "react";
16817
+ var DnDGridContext = createContext7({
16818
+ dragEl: { current: void 0 },
16819
+ onDragHandleKeyDown: () => {
16739
16820
  }
16821
+ });
16822
+ function useDnDGridContext() {
16823
+ return useContext16(DnDGridContext);
16740
16824
  }
16741
16825
 
16742
- // src/components/Filters/FilterModal.tsx
16743
- import { Fragment as Fragment28, jsx as jsx146, jsxs as jsxs69 } from "@emotion/react/jsx-runtime";
16744
- function FilterModal(props) {
16745
- const { filter, filters, onApply } = props;
16746
- const testId = useTestIds(props, filterTestIdPrefix);
16747
- const { closeModal } = useModal();
16748
- const [modalFilter, setModalFilter] = useState37(filter);
16749
- return /* @__PURE__ */ jsxs69(Fragment28, { children: [
16750
- /* @__PURE__ */ jsx146(ModalHeader, { children: "More Filters" }),
16751
- /* @__PURE__ */ jsx146(ModalBody, { children: /* @__PURE__ */ jsx146("div", { css: Css.df.fdc.$, children: safeEntries(filters).map(([key, f]) => /* @__PURE__ */ jsx146(ModalFilterItem, { label: f.hideLabelInModal ? void 0 : f.label, children: f.render(
16752
- modalFilter[key],
16753
- (value) => setModalFilter(updateFilter(modalFilter, key, value)),
16754
- testId,
16755
- true,
16756
- false
16757
- ) }, key)) }) }),
16758
- /* @__PURE__ */ jsxs69(ModalFooter, { xss: Css.jcsb.$, children: [
16759
- /* @__PURE__ */ jsx146(
16760
- Button,
16761
- {
16762
- label: "Clear",
16763
- variant: "tertiary",
16764
- disabled: safeKeys(filters).filter((fk) => modalFilter[fk] !== void 0).length === 0,
16765
- onClick: () => (
16766
- // Only remove the filters keys that exist in the modal.
16767
- setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))
16768
- ),
16769
- ...testId.modalClear
16826
+ // src/components/DnDGrid/DnDGrid.tsx
16827
+ import { jsx as jsx151 } from "@emotion/react/jsx-runtime";
16828
+ function DnDGrid(props) {
16829
+ const { children, gridStyles, onReorder, activeItemStyles } = props;
16830
+ const gridEl = useRef48(null);
16831
+ const dragEl = useRef48();
16832
+ const cloneEl = useRef48();
16833
+ const initialOrder = useRef48();
16834
+ const reorderViaKeyboard = useRef48(false);
16835
+ const transformFrom = useRef48({ x: 0, y: 0 });
16836
+ const tid = useTestIds(props, "dndGrid");
16837
+ const getGridItems = useCallback20(() => {
16838
+ return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];
16839
+ }, []);
16840
+ const getGridItemIdOrder = useCallback20(() => {
16841
+ return getGridItems().map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined);
16842
+ }, [getGridItems]);
16843
+ const initReorder = useCallback20(() => {
16844
+ if (gridEl.current && dragEl.current) {
16845
+ initialOrder.current = getGridItemIdOrder();
16846
+ dragEl.current.classList.add(activeGridItemClass);
16847
+ }
16848
+ }, [getGridItemIdOrder]);
16849
+ const commitReorder = useCallback20(() => {
16850
+ if (gridEl.current && dragEl.current) {
16851
+ const currentOrder = getGridItemIdOrder();
16852
+ if (!equal2(currentOrder, initialOrder.current)) onReorder(currentOrder);
16853
+ dragEl.current.classList.remove(activeGridItemClass);
16854
+ dragEl.current = void 0;
16855
+ reorderViaKeyboard.current = false;
16856
+ initialOrder.current = currentOrder;
16857
+ }
16858
+ }, [onReorder, getGridItemIdOrder]);
16859
+ const cancelReorder = useCallback20(() => {
16860
+ if (gridEl.current && dragEl.current && initialOrder.current) {
16861
+ const currentOrder = getGridItemIdOrder();
16862
+ if (!equal2(currentOrder, initialOrder.current)) {
16863
+ const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? "");
16864
+ if (initialIndex === initialOrder.current.length - 1) {
16865
+ const gridItems = getGridItems();
16866
+ const lastGridItem = gridItems[gridItems.length - 1];
16867
+ gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);
16868
+ } else {
16869
+ const nextSiblingIndex = initialOrder.current[initialIndex + 1];
16870
+ const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}="${nextSiblingIndex}"]`);
16871
+ if (nextSibling) {
16872
+ gridEl.current.insertBefore(dragEl.current, nextSibling);
16873
+ }
16874
+ }
16875
+ }
16876
+ dragEl.current.classList.remove(activeGridItemClass);
16877
+ dragEl.current = void 0;
16878
+ reorderViaKeyboard.current = false;
16879
+ }
16880
+ }, [getGridItemIdOrder, getGridItems]);
16881
+ const onMove = useCallback20((e) => {
16882
+ if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16883
+ const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16884
+ const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16885
+ const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
16886
+ const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
16887
+ const x = clientX - transformFrom.current.x - left;
16888
+ const y = clientY - transformFrom.current.y - top;
16889
+ dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
16890
+ const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
16891
+ const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
16892
+ if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
16893
+ const targetPos = target.getBoundingClientRect();
16894
+ const isHalfwayPassedTarget = (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 || (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
16895
+ const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
16896
+ if (shouldInsert) {
16897
+ gridEl.current.insertBefore(cloneEl.current, isHalfwayPassedTarget ? target.nextSibling : target);
16898
+ }
16899
+ }
16900
+ }
16901
+ }, []);
16902
+ const onDragStart = useCallback20(
16903
+ (e) => {
16904
+ if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
16905
+ initReorder();
16906
+ const gridRect = gridEl.current.getBoundingClientRect();
16907
+ const rect = dragEl.current.getBoundingClientRect();
16908
+ const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16909
+ const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16910
+ const top = rect.top - gridRect.top;
16911
+ const left = rect.left - gridRect.left;
16912
+ transformFrom.current = { x: clientX - left, y: clientY - top };
16913
+ cloneEl.current = dragEl.current.cloneNode();
16914
+ cloneEl.current?.setAttribute(
16915
+ "style",
16916
+ `border-width: 2px; border-color: ${"rgba(201, 201, 201, 1)" /* Gray400 */}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`
16917
+ );
16918
+ cloneEl.current?.setAttribute(gridCloneKey, "true");
16919
+ cloneEl.current.removeAttribute("id");
16920
+ cloneEl.current?.classList.remove(activeGridItemClass);
16921
+ gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);
16922
+ dragEl.current.setAttribute(
16923
+ "style",
16924
+ `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`
16925
+ );
16926
+ gridEl.current.style.cursor = "grabbing";
16927
+ gridEl.current.addEventListener("mousemove", onMove);
16928
+ gridEl.current.addEventListener("touchmove", onMove);
16929
+ }
16930
+ },
16931
+ [initReorder, onMove]
16932
+ );
16933
+ const onDragEnd = useCallback20(
16934
+ (e) => {
16935
+ if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16936
+ e.preventDefault();
16937
+ cloneEl.current.replaceWith(dragEl.current);
16938
+ gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
16939
+ dragEl.current.removeAttribute("style");
16940
+ gridEl.current.style.cursor = "auto";
16941
+ cloneEl.current = void 0;
16942
+ commitReorder();
16943
+ gridEl.current.removeEventListener("mousemove", onMove);
16944
+ gridEl.current.removeEventListener("touchmove", onMove);
16945
+ }
16946
+ },
16947
+ [commitReorder, onMove]
16948
+ );
16949
+ const onDragHandleKeyDown = useCallback20(
16950
+ (e) => {
16951
+ const moveHandle = e.target;
16952
+ if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
16953
+ const isSpaceKey = e.key === " ";
16954
+ if (isSpaceKey && !reorderViaKeyboard.current) {
16955
+ e.preventDefault();
16956
+ reorderViaKeyboard.current = true;
16957
+ document.addEventListener("pointerdown", cancelReorder);
16958
+ initReorder();
16959
+ return;
16770
16960
  }
16771
- ),
16772
- /* @__PURE__ */ jsxs69("div", { css: Css.df.gap1.$, children: [
16773
- /* @__PURE__ */ jsx146(Button, { label: "Cancel", variant: "tertiary", onClick: closeModal, ...testId.modalClose }),
16774
- /* @__PURE__ */ jsx146(
16775
- Button,
16776
- {
16777
- label: "Apply",
16778
- onClick: () => {
16779
- onApply(modalFilter);
16780
- closeModal();
16781
- },
16782
- ...testId.modalApply
16961
+ if (!reorderViaKeyboard.current) {
16962
+ return;
16963
+ }
16964
+ const isEnterKey = e.key === "Enter";
16965
+ const isTabKey = e.key === "Tab";
16966
+ if (isEnterKey || isSpaceKey || isTabKey) {
16967
+ if (!isTabKey) {
16968
+ e.preventDefault();
16783
16969
  }
16784
- )
16785
- ] })
16786
- ] })
16787
- ] });
16788
- }
16789
- function ModalFilterItem({ label, children }) {
16790
- return /* @__PURE__ */ jsxs69("div", { css: Css.mb4.if(!label).bt.bcGray200.$, children: [
16791
- label && /* @__PURE__ */ jsx146("h2", { css: Css.baseMd.mb2.$, children: label }),
16792
- /* @__PURE__ */ jsx146("div", { css: Css.if(!label).pt3.$, children })
16793
- ] });
16794
- }
16795
-
16796
- // src/components/Filters/Filters.tsx
16797
- import { memo, useMemo as useMemo36 } from "react";
16798
- import { jsx as jsx147, jsxs as jsxs70 } from "@emotion/react/jsx-runtime";
16799
- function Filters(props) {
16800
- const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;
16801
- const testId = useTestIds(props, filterTestIdPrefix);
16802
- const { openModal } = useModal();
16803
- const [pageFilters, modalFilters] = useMemo36(() => {
16804
- const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key)]);
16805
- if (!vertical && impls.length > numberOfInlineFilters) {
16806
- return [
16807
- Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)),
16808
- Object.fromEntries(impls.slice(numberOfInlineFilters - 1))
16809
- ];
16810
- }
16811
- return [Object.fromEntries(impls), {}];
16812
- }, [numberOfInlineFilters, vertical, filterDefs]);
16813
- const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== void 0).length;
16814
- const maybeGroupByField = groupBy ? /* @__PURE__ */ jsx147("div", { children: /* @__PURE__ */ jsx147(
16815
- SelectField,
16970
+ commitReorder();
16971
+ if (isEnterKey) {
16972
+ moveHandle.blur();
16973
+ }
16974
+ document.removeEventListener("pointerdown", cancelReorder);
16975
+ return;
16976
+ }
16977
+ if (e.key === "Escape") {
16978
+ e.preventDefault();
16979
+ cancelReorder();
16980
+ document.removeEventListener("pointerdown", cancelReorder);
16981
+ return;
16982
+ }
16983
+ const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
16984
+ const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
16985
+ if (movingLeft || movingRight) {
16986
+ e.preventDefault();
16987
+ const gridItems = getGridItems();
16988
+ const currentIndex = gridItems.map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined).indexOf(dragEl.current.getAttribute(gridItemIdKey));
16989
+ const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;
16990
+ const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;
16991
+ if (movingLeft && currentIndex > 0 || movingRight && currentIndex < gridItems.length - 1) {
16992
+ gridEl.current.insertBefore(dragEl.current, insertBeforeElement);
16993
+ }
16994
+ moveHandle.focus();
16995
+ }
16996
+ }
16997
+ },
16998
+ [cancelReorder, commitReorder, initReorder, getGridItems]
16999
+ );
17000
+ return /* @__PURE__ */ jsx151(DnDGridContext.Provider, { value: { dragEl, onDragHandleKeyDown }, children: /* @__PURE__ */ jsx151(
17001
+ "div",
16816
17002
  {
16817
- label: "Group by",
16818
- compact: !vertical,
16819
- labelStyle: !vertical ? "inline" : "above",
16820
- sizeToContent: !vertical,
16821
- options: groupBy.options,
16822
- getOptionValue: (o) => o.id,
16823
- getOptionLabel: (o) => o.name,
16824
- value: groupBy.value,
16825
- onSelect: (g) => g && groupBy.setValue(g)
17003
+ ref: gridEl,
17004
+ css: {
17005
+ ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,
17006
+ ...gridStyles
17007
+ },
17008
+ onTouchStart: onDragStart,
17009
+ onMouseDown: onDragStart,
17010
+ onTouchEnd: onDragEnd,
17011
+ onMouseUp: onDragEnd,
17012
+ ...tid,
17013
+ children
16826
17014
  }
16827
- ) }) : null;
16828
- return /* @__PURE__ */ jsxs70(
16829
- "div",
17015
+ ) });
17016
+ }
17017
+ var gridItemIdKey = "dndgrid-itemid";
17018
+ var gridCloneKey = "dndgrid-clone";
17019
+ var activeGridItemClass = "dndgrid-active";
17020
+
17021
+ // src/components/DnDGrid/DnDGridItemHandle.tsx
17022
+ import { mergeProps as mergeProps12, useFocusRing as useFocusRing13, useHover as useHover17 } from "react-aria";
17023
+ import { jsx as jsx152 } from "@emotion/react/jsx-runtime";
17024
+ function DnDGridItemHandle(props) {
17025
+ const { dragHandleProps, icon = "move", compact = false, color } = props;
17026
+ const { focusProps, isFocusVisible } = useFocusRing13();
17027
+ const { hoverProps, isHovered } = useHover17({});
17028
+ const tid = useTestIds(props, "dragHandle");
17029
+ const iconButtonNormal2 = Css.hPx(28).wPx(28).br8.bw2.$;
17030
+ const iconButtonCompact2 = Css.hPx(18).wPx(18).br4.bw1.$;
17031
+ return /* @__PURE__ */ jsx152(
17032
+ "button",
16830
17033
  {
16831
17034
  css: {
16832
- ...vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$
17035
+ ...compact ? iconButtonCompact2 : iconButtonNormal2,
17036
+ ...Css.cursor("grab").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible).bcBlue700.$,
17037
+ ...isHovered && Css.bgGray200.$
16833
17038
  },
16834
- ...testId,
16835
- children: [
16836
- maybeGroupByField,
16837
- safeEntries(pageFilters).map(([key, f]) => /* @__PURE__ */ jsx147("div", { children: f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical) }, key)),
16838
- Object.keys(modalFilters).length > 0 && /* @__PURE__ */ jsx147(
16839
- Button,
16840
- {
16841
- label: "More Filters",
16842
- endAdornment: numModalFilters > 0 && /* @__PURE__ */ jsx147("span", { css: Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$, children: numModalFilters }),
16843
- variant: "secondary",
16844
- onClick: () => openModal({
16845
- // Spreading `props` to pass along `data-testid`
16846
- content: /* @__PURE__ */ jsx147(FilterModal, { ...props, filter, onApply: onChange, filters: modalFilters })
16847
- }),
16848
- ...testId.moreFiltersBtn
16849
- }
16850
- ),
16851
- Object.keys(filter).length > 0 && /* @__PURE__ */ jsx147("div", { children: /* @__PURE__ */ jsx147(Button, { label: "Clear", variant: "tertiary", onClick: () => onChange({}), ...testId.clearBtn }) })
16852
- ]
17039
+ ...mergeProps12(dragHandleProps, focusProps, hoverProps),
17040
+ ...tid,
17041
+ children: /* @__PURE__ */ jsx152(Icon, { icon, inc: compact ? 2 : void 0, color })
16853
17042
  }
16854
17043
  );
16855
17044
  }
16856
- var _Filters = memo(Filters);
16857
17045
 
16858
- // src/components/Filters/ToggleFilter.tsx
16859
- import { jsx as jsx148 } from "@emotion/react/jsx-runtime";
16860
- function toggleFilter(props) {
16861
- return (key) => new ToggleFilter(key, {
16862
- // If the user has set the offValue, that should be the default b/c we're only a two-state
16863
- defaultValue: props.offValue,
16864
- ...props
16865
- });
16866
- }
16867
- var ToggleFilter = class extends BaseFilter {
16868
- render(value, setValue, tid, inModal, vertical) {
16869
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16870
- return /* @__PURE__ */ jsx148(
16871
- Switch,
16872
- {
16873
- ...props,
16874
- selected: value === void 0 ? false : value === onValue,
16875
- label: this.label,
16876
- labelStyle: inModal || vertical ? "filter" : "inline",
16877
- onChange: (on) => {
16878
- setValue(on ? onValue : offValue);
16879
- },
16880
- ...this.testId(tid)
17046
+ // src/components/DnDGrid/useDnDGridItem.tsx
17047
+ import { useMemo as useMemo37 } from "react";
17048
+ function useDnDGridItem(props) {
17049
+ const { id, itemRef } = props;
17050
+ const { dragEl, onDragHandleKeyDown } = useDnDGridContext();
17051
+ const { dragItemProps, dragHandleProps } = useMemo37(
17052
+ () => {
17053
+ function initDraggable() {
17054
+ if (itemRef.current) {
17055
+ dragEl.current = itemRef.current;
17056
+ }
16881
17057
  }
16882
- );
16883
- }
16884
- get hideLabelInModal() {
16885
- return true;
16886
- }
16887
- };
16888
-
16889
- // src/components/Filters/utils.tsx
16890
- function updateFilter(currentFilter, key, value) {
16891
- if (value === void 0) {
16892
- return omitKey(key, currentFilter);
16893
- } else {
16894
- return { ...currentFilter, [key]: value };
16895
- }
17058
+ return {
17059
+ dragItemProps: { [gridItemIdKey]: id },
17060
+ dragHandleProps: {
17061
+ onMouseDown: initDraggable,
17062
+ onTouchStart: initDraggable,
17063
+ onKeyDown: (e) => {
17064
+ initDraggable();
17065
+ onDragHandleKeyDown(e);
17066
+ }
17067
+ }
17068
+ };
17069
+ },
17070
+ // TODO: validate this eslint-disable. It was automatically ignored as part of https://app.shortcut.com/homebound-team/story/40033/enable-react-hooks-exhaustive-deps-for-react-projects
17071
+ // eslint-disable-next-line react-hooks/exhaustive-deps
17072
+ [dragEl, id, itemRef]
17073
+ );
17074
+ return { dragHandleProps, dragItemProps };
16896
17075
  }
16897
- var filterTestIdPrefix = "filter";
16898
17076
 
16899
17077
  // src/components/Grid/ResponsiveGrid.tsx
16900
- import { jsx as jsx149 } from "@emotion/react/jsx-runtime";
17078
+ import { jsx as jsx153 } from "@emotion/react/jsx-runtime";
16901
17079
  function ResponsiveGrid(props) {
16902
17080
  const { children, ...hookProps } = props;
16903
17081
  const { gridStyles } = useResponsiveGrid(hookProps);
16904
- return /* @__PURE__ */ jsx149("div", { css: { ...gridStyles }, children });
17082
+ return /* @__PURE__ */ jsx153("div", { css: { ...gridStyles }, children });
16905
17083
  }
16906
17084
 
16907
17085
  // src/components/Grid/ResponsiveGridItem.tsx
16908
- import { jsx as jsx150 } from "@emotion/react/jsx-runtime";
17086
+ import { jsx as jsx154 } from "@emotion/react/jsx-runtime";
16909
17087
  function ResponsiveGridItem(props) {
16910
17088
  const { colSpan, children } = props;
16911
17089
  const { gridItemProps } = useResponsiveGridItem({ colSpan });
16912
- return /* @__PURE__ */ jsx150("div", { ...gridItemProps, children });
17090
+ return /* @__PURE__ */ jsx154("div", { ...gridItemProps, children });
16913
17091
  }
16914
17092
 
16915
17093
  // src/components/Grid/useResponsiveGrid.ts
16916
- import { useMemo as useMemo37 } from "react";
17094
+ import { useMemo as useMemo38 } from "react";
16917
17095
 
16918
17096
  // src/components/Grid/utils.ts
16919
17097
  var gridItemDataAttribute = "data-grid-item-span";
@@ -16921,7 +17099,7 @@ var gridItemDataAttribute = "data-grid-item-span";
16921
17099
  // src/components/Grid/useResponsiveGrid.ts
16922
17100
  function useResponsiveGrid(props) {
16923
17101
  const { minColumnWidth, gap, columns } = props;
16924
- const gridStyles = useMemo37(() => {
17102
+ const gridStyles = useMemo38(() => {
16925
17103
  const gapCount = columns - 1;
16926
17104
  const totalGapWidth = gap * gapCount;
16927
17105
  const maxColumnWidth = `calc((100% - ${totalGapWidth}px) / ${columns})`;
@@ -16962,24 +17140,24 @@ function useResponsiveGridItem({ colSpan = 1 }) {
16962
17140
  }
16963
17141
 
16964
17142
  // src/components/HbLoadingSpinner.tsx
16965
- import React19, { useContext as useContext17, useMemo as useMemo38 } from "react";
17143
+ import React20, { useContext as useContext17, useMemo as useMemo39 } from "react";
16966
17144
 
16967
17145
  // src/components/HbLoadingSpinner.base64.ts
16968
17146
  var HbLoadingSpinner_base64_default = "data:image/gif,GIF89a%80%00%80%00%E7%00%00%00%00%00%0D%0D%0D%16%16%16%1C%1C%1C%22%22%22%26%26%26%2A%2A%2A...222555888%3B%3B%3B%3D%3D%3D%40%40%40BBBEEEGGGIIIKKKMMMOOOQQQSSSUUUVVVXXXZZZ%5C%5C%5C%5D%5D%5D___%60%60%60bbbccceeefffhhhiiijjjlllmmmnnnpppqqqrrrsssuuuvvvwwwxxxyyyzzz%7C%7C%7C%7D%7D%7D~~~%7F%7F%7F%80%80%80%81%81%81%82%82%82%83%83%83%84%84%84%85%85%85%86%86%86%87%87%87%88%88%88%89%89%89%8A%8A%8A%8B%8B%8B%8C%8C%8C%8D%8D%8D%8E%8E%8E%8F%8F%8F%90%90%90%91%91%91%92%92%92%93%93%93%94%94%94%95%95%95%96%96%96%97%97%97%98%98%98%99%99%99%9A%9A%9A%9B%9B%9B%9C%9C%9C%9D%9D%9D%9E%9E%9E%9F%9F%9F%A0%A0%A0%A1%A1%A1%A2%A2%A2%A3%A3%A3%A4%A4%A4%A5%A5%A5%A6%A6%A6%A7%A7%A7%A8%A8%A8%A9%A9%A9%AA%AA%AA%AB%AB%AB%AC%AC%AC%AD%AD%AD%AE%AE%AE%AF%AF%AF%B0%B0%B0%B1%B1%B1%B2%B2%B2%B3%B3%B3%B4%B4%B4%B5%B5%B5%B6%B6%B6%B7%B7%B7%B8%B8%B8%B9%B9%B9%BA%BA%BA%BB%BB%BB%BC%BC%BC%BD%BD%BD%BE%BE%BE%BF%BF%BF%C0%C0%C0%C1%C1%C1%C2%C2%C2%C3%C3%C3%C4%C4%C4%C5%C5%C5%C6%C6%C6%C7%C7%C7%C8%C8%C8%C9%C9%C9%CA%CA%CA%CB%CB%CB%CC%CC%CC%CD%CD%CD%CE%CE%CE%CF%CF%CF%D0%D0%D0%D1%D1%D1%D2%D2%D2%D3%D3%D3%D4%D4%D4%D5%D5%D5%D6%D6%D6%D7%D7%D7%D8%D8%D8%D9%D9%D9%DA%DA%DA%DB%DB%DB%DC%DC%DC%DD%DD%DD%DE%DE%DE%DF%DF%DF%E0%E0%E0%E1%E1%E1%E2%E2%E2%E3%E3%E3%E4%E4%E4%E5%E5%E5%E6%E6%E6%E7%E7%E7%E8%E8%E8%E9%E9%E9%EA%EA%EA%EB%EB%EB%EC%EC%EC%ED%ED%ED%EE%EE%EE%EF%EF%EF%F0%F0%F0%F1%F1%F1%F2%F2%F2%F3%F3%F3%F4%F4%F4%F5%F5%F5%F6%F6%F6%F7%F7%F7%F8%F8%F8%F9%F9%F9%FA%FA%FA%FB%FB%FB%FC%FC%FC%FD%FD%FD%FE%FE%FE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%21%FF%0BNETSCAPE2.0%03%01%00%00%00%21%FE%11Created%20with%20GIMP%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%DD%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%EC7%80%80%C7%02%02%EC%0D%40%99%F2%E4%CA%92%2F%5B%E6%5B%99%B1%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%BB%B6%ED%DB%B8s%EB%DE%CD%BB%B7%EF%DF%C0%83%D7%0E%08%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FC%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF7%03%88%1E-Z%80%E9%01%04%0A%188p%00A%82%05%0D%1EH%A8%C0%964i%D3%02P%ABn%FD%9A%01%5C%DB%A3O%EB%5EM%17x%00%DC%A8%EF%1A%3F%0E%BA%B9%F3%E7%D0%A3K%9FN%BD%BA%F5%EB%D8%B3k%DF%CE%BD%3B%CA%80%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%20%03%88%160%80%40%81%03%09%16%40%B0%D0%A1%04%8C%1EK%B0%90%89%B3%87%D0%A2H%966y%0A5%AAT%29S%A7P%A5J%A5J%D5%AA%E3%C8Y%B1Z%15U%F4h%D2%04%0C%20X%F0%80B%06%11%2Cp%14%A1%22%06%0E%9FB%8D%2A%B7m%02E%EAT%AAU%AD%5C%BD%82%05%2B%96%AC%F7%B2f%C9%9FO%D5y%00%E8%A8%19%3C%60%5D%C2%05%8F%25Y%981%87%1F%88DrI%27%A2%94%82%8A%2A%E9%AD%D7%1E%7C%F1%CD7KU%F6A%27%9D%02%0EH%80%C1%07%29%D0%10%84%13%5D%ACq%C7%20%8CL%A2%09y%A7%A8%C2J%2B%EB%C5%E2%DE%7B%12NhU%85%A5I%B7%80%03%13l%20%C2%0A7%18AE%18o%ECQ%88%23%96p%12%8A%82%E8%B5%F8b%84%F2%7D%E5%9C%00%D0%15p%A1~%11P%60%01%06%1Al%D0A%07%1E%7C%00%C2%97%21%84%29f%08%A0%95i%E6%99h%A6%A9%E6%9Al%B6%E9%E6%9Bp%C6%29%E7%9Ctf%15%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%14%03%88%160%80%80%01%04%0D%26p%40%81C%89%965w%02%25z4%C9R%A6M%9D%3C%7D%FA%04%2AT%28Q%A3F%91%22U%AAxqS%A6N%9DB%C5%1CU%AA%E7%AA%A2%ABZE%FD%E8%E8%D2%06%124%A8%00%82%05%8F%27a%E4%D6%FCI%14%E9%12%A7O%A1%88%27_%0E%9D%3A%2BV%AD%E2%BB%9A%FF%EA%15%AC%FB%B0b%E9%8F%25%AB%BF%7F%A4%A2%05%20%80i%0A%3C%60%01%08-%F8%10%05%19t%00%B2%C8%24%99t%02%CA%28%A5%24%E7%5C%2A%D3%AD%F2%5E%7C%F2%D5g%1F~%FB%F1%E7%DF%7F%00%8A%86%5D%81%07%BA%F0%83%14%0C%06%C2%08%25%9Ax%22%0A%29%16b%E8%1E%7C%1C%D2W%1F%88%FB%8D%D8%DF%2C%B2%285%DA%80%D99%60A%08.%001E%19u%0C%D2H%25%9BLX%0A%7B%D3m%98%A3%2B%3B%F2%28%A2%8F%B3%00%F9T%80%A4%99%96%00%03%0FHP%C1%05%19l%C0A%07%1Dx%E0%C1%07p%C6%F9%01%08t%D6i%27%08%21%E4%A9%E7%9E%21%80%E6%E7%9F%80%06%2A%E8%A0%84%16j%E8%A1%88%26%AA%E8%A2%8C6%9AU%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%0E%03%88%1EP%E0%00%83%0A%20%60%0C%C1%82%A6%CE%9FC%8C%1EE%9AD%A9%92%25K%970e%CA%A4I%D3%A6M%9C8u%F2D%FC%D3%27P%A0B%29%17%25j%94sR%A4JI%9F%5E%CA%94%F5S%D8%7F%8A%0E0%80%80%01%05%116%EF%A4%E0%21%A5L%1DA%8B%22U%CA%04%7C%B8%F1%E4%A1%98%3F%9F~%1D%3B%2AT%A9R%A9%DA%BF%AA%3F%AB%FF%AD%04%18%A0%2B%04%BE%F2%8A%2BA%05%20%00i%08%9C%16%02%0CFl%E1%06%1F%88%3C%B2%1Ep%9E%1C%97%9C%7C%A3%40%27%5D%7D%F7%DD%A7%1F%7F%FE%01%28%60%2B%04%BAb%E0%2B%B0%BC%92%A0%82%DE%29%00%81%06%27%E8%10E%19v%0C%D2%C8%24%98l%D2%89%86%F1%3D%17%DD%87%D8%9D%22b~%24%AE%F2%1F%2B%27%A6X%E0%8A-%0A%25%9A%00%04%98FAjFh%E1%86%1F%89Dr%89%8F%C7q%E8au%A6%D8w%E4~%AA%94%C8%E4%89%28%3E%C9%22%2Cp%C2b%D4%94%0C.%E0%80%04%15%5C%90%81%06%1Bp%E0g%07%80%06%DA%81%07%84%16Z%E8%07%88%26%AA%28%A2%204%EA%E8%A3%8E%82%26%E9%A4%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%9AU%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%08%03%88%1EP%00%C1%03%0C%26t%40%19%23%87%8F%A0C%8A%185r%F4%A86%A4H%B8%25%E9%9E4%89%92%EFJ%C0%2BY%1An%E9%92qL%982e%D2%C4%5C%D3%A6%E7%9C6q%9A%DE%A9%BA%A7%EB%D8u%8E.%DD%E0B%89%1CQ%CC%F2%D4%09%94%C8%91%24J%C2%8D_J%BE%9C9t%EA%D5%3Ba%FFD%FF%13%28P%A1%F2%87%12%C5%7F%94%FFQ%A4%04X%CA%80%03%9Ab%E0%29%A6h%17%C0%00%04%1C%C0%40%05%22%D4%B0D%18s%FC%91%C8%23%93Tb%9Cr%ED9%27%1D%7C%D8yR%DF%7D%F8%E9%C7_%7F%FE%05%28%20%81%06%1Ex%CA%8B%A7%28%28%00%01%06%28%20%C1%070%18%D1%05%1C~%20%82aq%ED%3D%F7a%7C%F2%898%E2%7D%26%A2%F8%9F%8A%04%B2%E8%E2%8B%A8D%89%CAN%DB%25%00%C1%06%2A%00%81%05%1B%7C%F8H%89%25%CB%7D%C8I%7C%F3%D9%87d%89%FB%9D%B8%E4%8AN%3E%09%A5%94R%FA%24%9A%00%A4%21%B0%C0%03%12TpA%06%19h%A0%C1%06%80%06%1A%28%07%84%16j%28%A1%1D%24%AA%E8%A2%8Bz%E0%E8%A3%90F%EA%01h%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%2A%EA%A8Y%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%03%03%04%18P%E0%40%83%0B%25r%3C%11%03gO%A0B%87%10%25%9A%AD%A86%ED%DA%B8%15%CDN%A4%BB7%EE%DD%BAy%E7%BE%1D%5C%B8%EF%E0%BF%13%D1%0C%20%80t%82%07%1AR%F8%B0%92%06%8F%A0D%8D%1EE%92%C4%BD%BB%F7%EF%E0%C3%A7%8B%1FO%DE%FB%F2%D1%05%9EkX%01%C4%CA%9A%3C%83%149%8A4i%12%A5%FB%F8%F3%EB%DF%CF%1F%BF%FD%FE%00%F27%C9y%A4%21%F0%C0%06%ECa%B1%C6%1E%850%02%89%7D%95D%18%A1%25%14JXI%85%17Z%22%21%86%16%5E8%A1%86%19n%D8%21%85%20~%18%E1y%02%10%A0%9E%0A%40d%D1%06%1F%874%22%09%25%17%5Eb%E3%8D8%E6%A8%E3%8E%3C%F6%E8%E3%8D8%89%D6%1C%01%06%400%81%05%17%60%90A%06%1A4%E9%E4%93PF%29%E5%94TV%F9%24hXf%A9%E5%96%5Cv%E9%E5%97%60%86%29%E6%98d%96i%E6%99Y%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CD%01%02%08%20%60%40A%84%0E%2C~P13%87O%A0B%87b%CB%8Em%A8P%21B%84%06%09%DA%1D%A8%F7%9F%DF%7F%FC%F4%E9%C3%87%CF%9E%3Dz%F2%E0%C1s%E7%8E%9D%E7u%EA%D0%A13G%8E%9C8p%E0%BCq%D3%A6%3B%9B5%E0%D3%FE%88Gs%C6%8C%992%2CC%8B%1Ep%80%81%85%115%96%80%81%C3%A7%90%A2F%8F%20Az%C4%FF%91%23G%8D%04%C8%08%23%8B%2C%A2%88%22%89%24%82%C8%82%87%D4f%5Bn%BC%05%02%08%20%C1%F9a%21q%C7%21%97%87r%CDE7%1Du%D6e%97%DD%1B%DD%B5%14%DA%00%05%24%E0%00%06%27%EC%20%85%19u%00%82%08~%91Hbc%248%EE%E7%DF%7F%0062%20%81%08%2A%88%88l%0E%E2F%C8n%82%F4Fa%85%C3%19%A7%21%87%CEy%08%A2u%D8%C1a%A2%00%03%94%26%01%07%2C%04%91%C5%1Az%10%B2%C8%23%92L2%09%25fNrc%8E%FD%FD%17%A0%8F%05%1A%98%A0%82%B4%15%09%21oK%06G%9C%93%7Bl%98Gs%D0IG%5Du%E9%89F%40%7B%15%880%83%12_%C4%F1%07%22%8EHB%09%25%95T%3A%29%9Aj%AE%19%89%8En%0A8%A0%9C%092H%DB%83%10%2A%B9%E4%85%C5e%98%1Cs%80z%08ShNX%12P%C0%01%09%28%B0%00%03%0C4%D0%40%06%BC%F6%EA%2B%06%C0%06%8B%C1%05%C4%16k%EC%05%16%24%ABl%B2%154%EBl%B3%14D%2Bm%B4%13Tkm%B5%12d%AB%EDg%DCv%EB%ED%B7%E0%86%2B%EE%B8%E4%96k%EE%B9%E8%A6%AB%EE%BAj%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%C9%01%02%08%20%60%40%01%84%0C%25j%24%D1%92%A6N%1FA%87%10%25%9A%8D%08%D1%A1C%85%0A%0D%12%14%28%D0%9F%3F~%F8%F0%D9%93%07%CF%1D%3Bu%E8%CC%91%03%E7%8D%9B6m%D6%A8I%83%C6L%192c%C2%84%F9%E2e%8B%96%2CX%AC%FET%A1%22%25%0A%94%27M%98%2CY%92%C4H%91%21A%80%FC%F8%D1c%87%8E%1C7j%94%14%3D%A0%00%02%07%16%8C0%83%11Z%A8q%87%20%894%F2H%24%92H%12I%24%90%3C%E2H%23%8C0%B2%08m%B8%11B%08o%80%00%D7%C7py%E4q%5Crr0%F7%06t%D2Qg%1D%19bl%E7%05%17%DEeq%85%15TLQ%1E%14N%A8%97%04%12%EE%11%21%84%7C%3E%F00Rh%A2%11p%C0%02%12p%B0%82%0FR%94A%C7%1F%884%12%C9%24TR%E9%60%24%12Nh%E1%85%B6e%B8%5B%20%1D%06%07%A2q%C9-%17Gsm%B0%91%E2%19%2B%8A%01%06w%5Ch%F1%DD%8C5Jq%5Ez%EC%F1H%C4%10%3F%FE%20Rh%02%08%D0_%02%A7%95p%C3%12%5E%C0%D1%C7%21RRR%C9%A3%95Pb%25%84YR%B8%88%22%89%D8fH%21%84%7C%19%A6pz%14wG%99r%9C%F9%9C%9A%D3%B1%89%5D%18%60x%F1%E2w%B4%E1%D1xc%8EK%28%91%C4%11F%EC%19%C4%90%82%1A%C9%40%05%20%C0%40%04%16j%E4A%08%23%91Pb%C9%25%CC%5EbI%A4%92%3A%18%A1%23Z%5E%9A%E9%21%9Bn%D8%1Bp%C1%ED%11%EA%88%CA%99x%EA%1A%2A%5E%97%5D%AB%5D%C4%18%5E%156F%F1%04%AD%EC%E1J%C4I%80%0E%40%40%01%07%24%A0%C0%02%0C0%D0%C0%BF%00%03%DC%2F%06%04%13%7C%C1%C1%07%5B%A0%B0%05%154%5C%01%05%10S0%C1%C4%13K%60q%04%18G%00%C1%C6%1B%3F%E0%F1%03%0E%84%EC%40%C0%FD%96%BC%C0%C9%27%2B%A0%B2%02%09%7C%E6%F2%CB0%C7%2C%F3%CC4%D7l%F3%CD8%E7%AC%F3%CE%3C%F7%ACV%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%C3%01%02%0C%20%60%00A%83%09%1AH%C8%10%22%25L%9B%3B%7F%0A%25b%E4%E8%91mG%8E%1A1R%94%08%D1%A1B%84%06%05%02%F4%C7%0F%9F%3Dy%EE%D8%A13%27%CE%9B6m%D6%A49c%86%8C%980%5E%BAh%C1r%A5%CA%94%28P%9A%FE0Y%92%C4%08%91%20%40%7C%F0%D0%81%C3%06%0D%191%5E%B8%60%A1%02%C5%89%12%25F%8C%00%01%C2C%87%0D%1Ah%90%C1%05%16T%80Qh%02%90%A6%80%03%14t%90%C2%0DH%60qF%1D%7F%20%E2%88%24%95Xr%C9%86%97XR%09%25%93H%12%C9%23%B91%B2Ho%86%00%27%08q%7D%EC%A1Gru%D0%21%87s%D1MW%9D%18%60x%C1%C5vVP%21E%14O4%B1%04%12F%14%21Dz%EB%B5%F7%5E%7C-%AC%A0B%0A%27%98%40%C2%08%21%F4%E7%1F%07%01bPQh%01%080%9A%01%098PA%07%28%DC%90%84%16h%D4%11H%22%8FPrI%26%9A%C4%99I%26%1D~%18%E2%88%25%9E%E8%5B%21%83%08%12%C8%1F-%EA%81%C7%1D1%CA%01%C7s%D2%A1qc%8E%3Bb%D1%E3%8FN%8CW%1E%11G%AA%C7%9E%7B3%C47%DF%93QN%29%02%08%1F%5C%B9A%06%5B%22HZ%98%15x%90%02%0Eg%AAq%87%20%EB%8BDR%09%26%9Al%C2%C9%26%9B%C8%B9%A1%87w%92%A8%9B%9E%BF%11%B2%22%A0%7C%08J%A8%8C%87F%A7%86%A2%D61%CA%A3%8FPD%3A%A4y%95%26%89i%0C04%C9%A9%94T%82%EA%1F%80%14%21%F8%E5%82%A9%AA%80%83%12%5B%AC%91%07%21%8CHr%89%26%9Ct%22o%27%9C%DC%AAI%26%98%D4y%27%24y%F6%16%EC%B0%C6%BDx%AC%A1%88%DA%D8%AC%8E%CF%FE%18%E4%90G%18%89%E4%A54d%FA%82%B6Pr%FBi%A8%1Dp%90%11%97%5E%12P%40i%09%28%B0%00%03%0D%94%EC%C0%C9%27%97%AC%F2%CA%0C%B4%EC%F2%02%16%C4%5C%60%05%15P%60%F3%048K%A0s%04%3CC%E0%F3%03%40%A7%5C%F2%CB%0B%14%AD%C0%D1%09%24%9D%00%02L%1F%E0%B4%D3%06Dm%40%01TWM%C0%D5%04%7C%A6%F5%D6%5Cw%ED%F5%D7%60%87-%F6%D8d%97m%F6%D9h%A7%ADV%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9s%C4%00%01%F6%82%0E%20%20%B4%5E%D2%A4%09%188%80%80%01%84%0A%1AD%A8%A0%01%84%09%961m%EE%FC1%B4%E8%D1%24K%972i%D2%B4i%93%A6L%99.Y%B2T%89%D2%24I%90%1E9b%B4%28%11%A2C%85%06%05%FA%E3%87%CF%9E%3Cw%EA%FE%CC%89%F3%A6%CD%9A4f%C8%8C%09%E3%85K%96%2BU%A4%40q%C2D%C9%11%22B~%F4%D8%91%C3%06%8D%180%B8%C0%82%0A%28%98%40%C2%08%21%7C%E0A%07%1Ch%90%01%06%16T%40%C1%04%12D%00%C1%03%0F4%D0%C0%02%0B%28%E0a%02%08%20%20P%00%03%0CP%C0%01%09%B8F%81%06%21%AC%60%C3%10Pla%86%1C%7B%10%B2%88%24%97h%D2%09%28%A2%8C2%0A%29%3E%8E%22%8A%28%A0%80%F2I%27%9Cpr%1C%26%974%27I%24%D2Q%97%08v%84l%D7%9D%1Ex%D8A%87%1Cp%98%97%C6%19e%88%01%86%17%5BdaE%7CP4%B1D%12F%0C%01%84%0F%3C%E4p%03%0D3%048%60%81%07%86%00%C2%82%0DfpA%84%13Vx%A1%03%1A2%D0%E1%87%00%90%A8%1A%02%0B%3C%40A%06%20%A4%20%C3%0FKdA%06%1Cz%0C%B2H%24%96l%F2I%28%A2%90R%CA%A8%A3%92%02%A4%28%A1%18%E9%09%92%C6%25g%89s%FE%D09%D2%08%23%D6%19B%88%20%DBy%07%9Ex%E4y%99%5E%18_t%A1%05%16VL%21%05%7D%F6%E1%A7%9F%0E8%D80C%0C%2F%B4%B0B%0Ax%22%A8%60%07%1B%3C%F8g%A0%12%400h%03%86r%E8a%A2%27%26%D0%40%04%17x%60B%0C%3D%24aE%18m%E0%11H%22%9Cn%E2I%A8%A3%9Ar%8A%29%FC%9AR%AA%90%A9~%B2%AA%92%99%60%C2%1C%25OJ%D7Hu%88%14r%2B%20Wf%B9%25%1Cn%B0%A1%06%98c%8C%B9%85%16%F0%C9%E7%C4%9Am%02%D1%03%0F%CC%D6%20%83%9D%2A%A4pB%09%23%88%00%C2%07%0C%3A%08%A1%84%14Z%08%01%A1%E0%8A%AB%00%00%02%A4%F8%DA%06%23%B4%90%83%11S%7C%A1F%1D%7F%20%F2H%25%9E%E2%7B%CA%29%A8D%8D%CA%D3%FC%96r%2A%AAF%B2%BA%E4%AB%CFE%B7%B0%22%D7e%B7%5D%1F%DF%857%B1%AFd%00%DBE%99%C5J%F1D%13%C9%06%A1%DF%0E%CD%D2p%B2%B4%04%9AP%82w%08%09.%B8%81%06%18l%3BA%CD%DF%86%DB%E1%88%A4%090%00%01%04%14%B0Z%02%0A%2C%C0%00%03%0D8%E0%00%86%98g%AE9%86%96wn%B9%86%A0%83%3B%F9%E8%1C%96%EE%E1%E0%83KPa%046c%FE%B9%E8%86%7F%98%00%88%21%1E%60%FB%01%06%E4%5E%C0%EE%BB3%CEx%89%C0%03%2F%C0%F0%C4%97%06%9Ag%C8%27%AF%FC%F2%CC7%EF%FC%F3%D0G%2F%FD%F4%D4Wo%FD%F5%7B%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1c%AD%01%FAF%0E%40yo%00%01%98%23%E7%0D0%A03%01%02z%03%140p%E0%80%01%BD%02%12%28%60%E0%80%81%5E%02%0F%24P%B80A%EF%81%0C%1CB%94%F0%A0w%01%8A%163t%B8%D0%1B%C1%07%91%25R%84%E8%D5p%C5%0B%994V%F4%8ExC%27%8F%1F4z%5B%0CB%B4%E8Q%1D%BD6%26%FEY%CA%B4%E9%8F%5E%1F%9EB%89%22eH%AF%10S%A7R%A9Z%A4%D7%08%2BV%ADZ5%D2%9B%C4%D5%AB%FF%8E%E8%A5D%2C%04%C6%F2%88%80%B2%24%28%CB%2B%AA%A8%92%CA%83%A8%A0r%CA%84%A6%94ba%29%A4%8C2%8A%28%A1%80%02%8A%27%9Et%C2%89%26%99%60r%89%25%95L%22I%24%8F8%C2%C8%22%89%1Cb%08%21%82%FC%E1%07%1Fz%DCa%07%1Dr%C0%D1%C6%1Ai%98A%86%18_p%A1%05%16UH%F1%04%13K%20a%C4%10%40%F4%A0%03%0E5%CC%10%83%0B%2C%A4%80B%09%24%8C%10%C2%07%1Dp%A0A%06%17TP%01%05%13D%00%C1%03%0E%B4%C6%C0%02%0A%24%90%00%02%08%94V%9A%01%05%E4%F9%D9g%00%2C%A1%E0%9F%05%C2%02%CB%7F%AE%E4%97%1F%2B%AB4%98J%84%A7T%98%21%87%A0%7C%22%E2%26%99%9CH%C9%24%91%40%E2%22%8C%87%14%22H%207%EA%81%87%1Ds%C4%F1%06%1Bj%9C%21d%18%5E%1C%99%24%14%FEM4Y%84%10%3F%F0%A0%C3%0D4%C8%00C%0B%2B%A4p%82%09%24%7C%E9A%07%1Bh%80%81%05%15L%20%81%9A%0F%B0%D9%C0%9B%0AD%3Bg%9D%A6%E5Y%C0%9E%A0-1%CB%2C%7F%CA%12%A8%A0%AF%B8Rh%2B%F7%AD%92%28%84%8Db%B8a%87%9Fx%C2%C9%26%24%A2%A8%22%8B%8DpZ%08%21%81%FC%C1%C7%1E%A3%F2%E8%23%90%AB%B6%8A%85%15SD%E1%C4%12I%3C%19%E5%94U%C6%F0%02%0B%2A%FCJ%82%08%20%80%B9A%06%18%94%89%A6%9Ak%3A%F0%2C%B4q%D2Y%27%9Ez%EE%D9%E7%B6%DC%2A%F8%ED%A0%E1%8E%5B%AE%83%8B%A6%FB%28%BB%21%8EX%A9%25%94%AC%F8H%23%8C%28%82%C8%8C%F9%F6%B1G%1Ew%D4%D1%A3%1B%00%93%C1%2A%17YXA%85%92%08%1BAD%10%3E%EC%80%83%0D3%C8%F0B%0B%2A%A0%00%AC%08_%86i%EC%05%C8%A6%19A%04%CE2%00%B2%02t%DAi%ED%B5%7Cj%8B2%A0%04%82%DB%B2%A1%88%2A%2Aa%A0%85%18%8A%02i%CD%94Z%8Ai%8B%2F%C6%E8%29%207%12%5D%07%1D%A6%A2z%C6%90_t%A1%C5%15%AF2%A1%C4%11%B3%D6%9A%83%0D4%C4%00%83%0B%BD%9EP%82%97%1F%0C%7B1%D9%C9.%DBq%03%CF.%00%27%DBmW%5B2h%05%9C%CD1%04%B8%E7%AE%FB%EE%CD%F6%EE%3B%9Bm%06%EF1%EB%AC%ABm%BC%EB%AEG%AB%BC%9Cr%E6%DEl%9B%C4%AB%9D%BC%B4%D3Rk%9A%01%D8%BF%8Dmg%DC%0F%80%D9%F7%99Q%26%FE%F8%E4k%F6%D8%F9%E8%A7%AF%FE%FA%EC%B7%EF%FE%FB%F0%C7%2F%FF%FC%F4%D7o%FF%FD%F8%DF%14%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%85%06%000xo%80%C3%87%F5%06%18%C0X%40a%BC%02%0AH.%40%40%EF%80%04%98%13%18%D0%5B%00%82g%08%0C%F4%22%D0%B0%A1%F4%04%BD%0DV%B0%60%B1%E2%83%5E%0AB%86%C8%86%A1%D7%03%97%DB%5C%8A%E8EAg%8E%EF%2Czg%1C%1A~%28%8D%5E%1E%95%2AY%B2tG%AF%10P%D0A%01%D2k%E4%94%F5S%86%F4%26a%C5%9D%95%22%BDK%5E%FE%B9%1A%DF%08%3C%2CX%AF%5E9%D2%CB%24%96%7BX%EB%F32%91%25%CB%FD%23%F6%F4%EB%DF%97%9F%3F%D6~%BC%F3%D5%E7%1F~%F4%0D%C8_%81%FF%DD%15%A0~%04%DAG%20%83%07B%08%60%7F%09%DA%B5%04%85%E0a%98%D7%85%08f%D8%E1%86%05%C6%E2J%2A%A9%A0%82%8Au%A6%94%A2b%29%A4%8C%22J%28%A1%80%F2%89%27%9Dp%B2I%26%98%5CbI%25%94H%12%C9%23%8D0%A2%08%22%87%14BH%20%7F%F8%B1G%1Ev%D4%21%07%1Cm%AC%91%86%19d%88%01F%17Z%60Q%85%14O0%B1D%12E%08%F1C%0F%3A%D8%40C%0C0%B8%B0B%0A%26%900B%08%1Ft%C0%81%06%19%5C%60A%05%14H%10%81g%0E4%C0%C0%02%0B%28%A0%40%02%08%1C%60%E8%01%06%18%20%19%01%8C%12%C0%D8%A3%02D%0A%00%87%EE%BD%87%9Ex%ADd%CA%CA%2A%AB%A8R%E2%89%29%B6%F8%E2%8C5%DE%A8c%8F%3F%069%A4%21G%FE%D1%C7%1E%FEx%D8AG%1Co%B0%A1%C6%19f%8Cq%A5%16WP%21%05%14M%28q%04%11A%F4%B0%03%0E6%CC%10%83%9A%29%9CP%C2%08%22%80%E0%01%07%1Bh%80%C1%9D%13%E8%19%C1%03%0E%FC%09%A8%A0%98%15%8A%E8d%8D%3A%FA%E8%00%91%0A0i%7F%96%A6%E7J%A6%ADl%DA%E9%A7%A7%84%EAb%8C4r%A2I%26%A7%FA%08%24%23%89%20b%24%92%AF%C6J%87%1Co%B4%A1%06%1Ae%E8%8Ae%AF%5C2%21%2C%11%40%90%89C%0D%CA2%7B%82%09oJ%DB%C1%06%19%60pA%05%D9J%00%01%B7%0Cx%0B.%02%E2%2A%BAh%B9%E7%A6%BBn%88%B1%9C%E7.%BC%DC%CDkb%BD%2C%DEK%AA%BE%FCZ%82%EA%BFC%0E%EC%2A%AC%B2%3E%A90%C3b%7C%C1%85%16V%F8%DA%E5%C4%15%EBp%F1%0Ci%AE%E9%2C%B4%1E%83%7C-%C9z%9E%DC%A7%9F%81%0E%CA%B2%A1.S%D6h%CC2s%28%E0y%97%8E%A7%29%A7%9E%96%C8%B3%A8%A1%7C%F2I%87%A9A%0F%DD%C8%22%01%1B%5Dp%1D%07C%B9%C6%19e4%8De%D4%11%0B%3BD%C5%C7%26%9Bu%0A%28%3C%1BB%D7%21%8F%9C%ED%9E%DC%F6%A92%A1-%93%BB6%DB%EAv%F6%D9%E9%A8%7B%F6%C0%EA%AC%B3%EE%C0%EB%B07%20%FB%EC%29%A7%0C%E8%ED%82%82%9B%19%CBg%1B%2A%BB%ED%DF%0E%1A%AE%B8%88%26%3A%99%DA%A3C%9An%BA%885%EF%BC%F3%81E%2F%FD%F4%D4Wo%FD%F5%D8g%AF%FD%F6%DCw%EF%FD%F7%E0%87%2F%FE%F8%E4%8B%14%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%9F%06%0007nB%01%02%02%E8%B5k0%C0%00%02%80%07%E0%D5%5B7n%80%03%0A%10%208%60%A0%00%81%01%03%0A%C7%3DPA%C2%03%07%0C%16%24%40%60%40r%DC%05%23%3Ch%B8P%B9A%01%BE%04%25%D8%80%A1%A2%04%08%07%9E%F9jx%82%04%88%0E%13%A8%0D%8E0%03%26%8B%14%1C%B9%0B%B6%D8S%07N%9A%25%C1%09%D6%60%84h%90%1F%2F%C9%07%F2%D0tI%92%237%D1%05%0A%19%15%AA%D3%26%3D%D9%01%FE%14Iu%AA%D4%28A%E1%91%B4b%B5%2A%15%A2%F0J%5E%B9j%D5j%11%7CX%B0%E47%0A%BF%24V%2C%FC%8E%F0%27%8B%2C%FF%05%98%DD%12%03%FA%F7HxL%24%18%CB%82%07%3A%08at%08%12%F8%A0%80%16N%98%5C%83%192h%21%2C%1A%06%D7%A0%7F%17f7%A2%82%1E%92%18bnL%F8%07%20%83.%C2b%60t-%FE%27%23%8C.%CE%98%5C%7F6%EA%28b%8C%3E%B2%08%24%7FC%1Eh%E3%2B%FB%1D%88_~IR%B8%24%92%FC%3D%D9%E4%8E%F8%BD%02%A5%92%F9%5D%E9d%96S%06%B7D%96%AEt%99%5B%7CV%BA%C2%08%7CV%CAwfvd%BA%12%26%9A%F2%99%19%5E%12e%B6%B2J%29x%922%8A%28%A2%84%02%CA%27%9Ex%D2%09%27%9Bh%82%C9%25%96TB%89%24%91%3C%D2%08%23%8A%24r%88%21%84%04%F2%87%1F%7C%E8%81%87%1Dt%C8%01G%1Bk%A4a%06%19b%80%E1%85%16XT%21%C5%13L%2C%91%84%11%FEC%FC%D0%83%0E7%D4%20C%0C%2F%B0%A0%C2%09%25%8C%20B%08%1Ft%C0%81%06%19%90V%01%05%12D%00%C1e%0Dd%A6%80%02%9B%29%B6%18c%05T%EB%18%60%8FA%06%19%5E%DC%E2%05%40%9B%F4%AD%C7%9E%2A%A9%A0%82%CA%29%A6%E4%D9%E7%9F%82%16%9A%C9%25%95L%C2%A8%A3%8C%24%82H%21%84%08r%E9%1Ey%DC%D1%29%1Cn%84%3Aj%18_p%91%85%15SH%01E%13J%1CA%04%10%B3%E2P%C3%0C%B8%EA%8A%82%09%24%88%00B%B0%C3bp%81%05%15L%90%EC%B2%0E4%BB%C0%02%D0J%CBXc%D6b%9B%AD%B6%DDr%FBm%9C%E1%B22n%B9%A7%A0%5B%8A%9E%EB%02%EA%9D%A1%89%CA%0B%89%A3%8BH%8A%AF%A5%7D%F0%CB%A9%A7%A0%A2a%C6%18ax%B1%05%16%08G%C1%EA%ABC%40%AC%83%C42%C0%E0%C2%0A%29%F0%3AB%08%1Bw%B0%81%06%18X%60%01%05%22%2B%CB%AC%C9%29%2Bv%00%B5%D5b%AB%ED%DD%82%C5%0C%00%FE%9D%F3%D1g%F3%2A%AB%90%7B%AE%CE%3C%FB%F9%C9%A0%85b%12t%24%908%C2H%D1%87%14%22H%20%98jZG%A7o%80zF%19%A5v%A1%C5%15%AA.%BC%04%12E%08%F1%03%0F%B4%D2%D0%F5%D7a%F7J%F6%07%1Cl%90A%DA%21%27%ABl%C9%26%A3%1C%F7%DC%2C%D7m%F7%DD1%7B%CBw%CD%E3%0A%AE%F3%CE%3D%0BJ%E8%BB%96%2C%DA%A8%E3%8A%20rH%BE%80%60%DAo%1Ds%C4%E1%06%1B%A2%92A%B0%E7VP%B1%2A%13J%90%1E%84%0F%3B%E4p%83%EA%2F%B4%B0%C2%C5%19%03%EB%81%D9%C5%AE%DD%F6%B2%0F4%D0%C0%C9%28G%3B-%CB.%7B%D9%B6%82%27%00%00%14%00%02%08L%E0%03%16%C8%40%06%3A%E0%81%10%C4%9D%FE%F4%C7%80%0Af%86%7F%BA%7BV%026%E8%3F%B9%CDme%06%60%99%067%E8A%DE%85%D0Z%D7%0A%0C%DE%F2%D6-%C2%B8%F0%850%0C%8F%0CgH%C3%1A%DA%F0%868%CC%A1%0Ew%C8%C3%1E%FA%F0%87%0D%40%0C%A2%10%87H%C4%22%1Aq%25%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%ACY%89%01%02%9C%AD%18%40%40Z%B5%00%E0%AE%5D%18%A0%80%01%02%04%06%08p%9Bv%AE%C2%00%0B%228Pp%E0%EE%00%BDr%FD%16%0CP%21%C5%08%0E%15%200Hp%20%AFb%84%1D%964%09RC%05%88%0C%13%1E%28%18p%D9%A0%860x%DA%88%B1%B2%A4G%8C%13%1E%1A%24.%0D%21%8D%25H%88%FC%D0Q%F3EJ%11%12%05J%13%2C%E0%25%14%29P%9A%285%2A%C4G%0E%94%08%C2%07%06x%02%AA%D5%AAT%A5Du%C2%24i%8F%8C%E8%03k%FEX%82%05%EBU%2BV%AAN%91%CAD%854%F8%0E%85d%C9%8AE%FE%95%ABV%A8%E64%00%0F%E0A%1EX%F2%C9G_y%84t%C0%9F%40J%CC2K%80%F3%C5rI%0E%07%0E%94%C4%82%0C%8A%22%C5l%FC%25%C1%20%2Bi%1C%10aAJ0%08%C9%87%06%85%18%E0%88%24%12%B4%84%88%29%AA%18%60%2C%8F%B48%D0%8A%02%C6%28%23%00%26%CEg%A3%8C%26%C6%02%E3%8D%00%AC%E8%23%2C%8E%00%29%24%7DE%DE%B8%84%8F%F4%ED%D8%E2%92C%3A%99%22%94%E4%25%29%23%95D%1A9d%96J%0E%08K%23F%D6%F7%0A%98J%8AI%E6%95f%86%F9%8A%7Dg%3E%B9%A6%2B%AE0b%E4%9Bq%CE%09g%2Br%2Ay%27%9EF%DE%D7%0A%9Fz%FE%D9%CA%22%7D%0AJ%E8%8DJ%08%CA%CA%A1%3C%FE%C9%CA%A2%40%26z%1E%2B%8AD%EA%E8%2A%95%DE%88%C4%A3%AC%AC%92%08%90%9Bv%EA%29%A8%8F%AE%A2%CA%A7%9A%AEb%AA%2A%88%80%AA%AA%2A%FE%A9%B4%9A%AA%2A%B0%CA%2A%23%12%A6%A6%12%2B%90G%D0%9A%0A%2A%87%00i%84%AE%A8%00%2B%EC%AF%A8%9Cb%C8%B1%C5%2A%0Bd%11%BF%9EbJ%21%CF6k%0A%29%9Dp%B2%C9%26%9Adr%89%25%95P2%89%24%91%3C%E2H%23%8B%24%82%C8%21%86%10%22%08%20%7F%F4%B1G%1Ew%D8A%87%1Cp%B4%C1%86%1Ah%981F%18_p%A1%05%16VL%11%85%13L%2C%91%84%11C%00%E1%C3%0E9%DCP%83%0C1%BC%C0%82%0A%28%98P%C2%08%22%80%F0A%07%1Ch%90%01%06%17TP%C1%04%12D%00%C1%03%0E8%D0%C0%02%0A%24%90%00%02%07%14V%00%5Ez%F1%F5%16DE%24kJ%29%A5%902%8A%28%A1%80%F2%89%27%D9n%92%09%26%E0RB.%24%8E0%92.%22%ED%0A%F2%87%1F%7C%CCk%2F%BEn%EC%7BF%19%FFz%C1E%16VP%21%05%14O0%91%C4%11D8%0C%F1%0D4%C8%00%83%0B%17g%BCq%08%20x%00%B2%FE%C8%24W%40%01%CA%2A%B3%DC%00%030%2B%10%B3%CD7%E7%95%B3%CE%0F%15q%8A%B4%40%93Bt%D1%9F%24%DD%ED%B7%95%8C%5B.%BA%EA%1ER%88%20%81%F8%21%2F%BDu%CC%01%C7%1Bm%AC%91%86%19d%00%DC%85%16WTa0%C2J%1CQ%84%10%3F%F0%A0%03%0E5%C4%FDB%0B%2B%A4pB%09%24t%AC7%07%1Bh%40%B2%05%7F%A7%1C%B8%CB%2F%1B~%B8%01%D4%27%9E%D7%5E%D8c%88%90%E3%3F%07%3D4%E5Hk%AB%09%D3%E1%92k.%23%8A%24%E29%21%81%5C%CD%87%1Exl%0DG%D7i%A0%016%18%5DlA%B6%D9O4%A10%C3n%8BX%DC%E6%C6%82%14d%8C%04%23%08%C1%07%3C%80%BC%E4a%C0%02~s%DE%CAZ68%98%CD%8Cf53%40%016%A88%EC%F1%A5%21D%80%9C%D0D%21%0A%A3UN%7C%DE%0A%D7%24%CAu%AE%A9%19%E2s%A1%CB%1A%E9%E6%10%07%D4%A9%8Eu%00%13X%ECf%C7%04%25%20%A1%08%84A%C8%DD%EEj0%83%8A%01Ox%1B%EB%D8%02%917%B2%0B0%0Fp%13t%19%E1%2Cx%C1%0Cn%F0f%87Y%DC%CE%16B%80%07%B0%ACe%60%A4%60%03%C68F%06%98%D1%8C%0BHc%1A%A5g8%99%B9%11%01p%84c%CD%E6H%BD%3A%5E%91%83x%21%C0%1C%0BS%BD%3B%E6%11gY%CC%A2%07%B3%F7%96B%1A%B2%2F%40J%A4%22%17%C9%C8F%3A%F2%91%90%8C%A4%24%27I%C9JZ%F2%92%98%CC%A4%267%C9%C9N%C6%24%20%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%2B%C4%00%5E%3F%0A%18%1B%A0l%D8%8C%04%0E%14%180%40%80%D9%B3%15%0FP%90%C0%00%C1Z%B2p%27%2AX%21%A3%84%86%08u%0B%10%18%006%EF%C3%03A%C6P%19%22%83D%06%BA%07%06%18~8%60%C9%A0%40t%C8P%11%12%83%84%06%07%92%277%1C%22%89S%25F%81%E6%90%91%12D%C5%02%D1%0DO%28JeJ%94iF%7F%E4x9%21%00%F6%C2%0C%7DZ%B5Z%95%AA%94mJ%89%AC%28%F0%AD0%01%1AU%AF%5C%B5b%B5%0AU%29Py40O%28%C0J%29X%AF%A2%FE%0Bg%A5%2AR%8D%ED%09%81h%82%05%3E%BC%F4V%A0%B2%F4Fo%B0%04%22%F6%EC%DD%BBJ%15%E75%FD%82%12%E8%F1J%2C%F8%85%F7J%2B%81%5C%F0_A%06%90%A1J%2C%10%E6%17%DD%23%2B%2CHP%00Q%88B%20~%EDu%E2%84%85%04%D5%60%09%84%1B%B6w%8A%18%04%80%28P%07%84%90%18%21%7B%AD%E0%E1%80%8A%008%80%C7%2B%B2%90X%60%21%1E%D0%28P%12%B2%E4%A8%23%2C%97%E0%E0%E3%40H%08I%A2%28Q%14v%24%00H%E8%B8%0A%1A%07%3CIP%12%2F%3AbeAQn%A8%E5%96%03%25%C1%E1%97%60%02%20f~%8D%94%F9%A3%84i%AA%29%A6%81m%96%89%84~q%82%99Dt%D21%A2%A6%99%AE%BC%A7%A7%9B%7D%0A%F7%A7%9C%EF%B5%B2%C8%9EH%087%DD%A1n%8E%C7%0A%A3e%26%E1%A8%22%88%B2b%E9%2A%89T%BA%CA%A6%99%AA%89%04u%AB%A8%D2%A9%9C%A1%AA%A2%0A%22%88%86%9AJ%2A%A8z%AA%CA%AA%FE%A8%B4%2A%27%AC%A8%1C%B2%E7%11%A9%A0%82%CA%29%86%DC%AA%EB%29%A6%F4%AA%E6%11%BB%9AbJ%21%7B%1A%01%AC%29%A5%20%AB%A6%11%C6%96B%0A%21%7B%16%C1%2C%29%A4%0CR%AD%B4%A4%8C%22%C8%B6%DD%8A%F2%AD%9AD%84%1BJ%20%7B%0E1%CA%28%A1%9C%BB%A7%10%A2%88%12%0A%28%80%EC%19D%BB%A0%7C%F2%87%BD%F9~%E2%89%1F%7B%02%91%AF%27%9D%00%AC%26%10%FEz%C2%09%1F%01%7BB%F0%26%0C%AB%F9C%27%9Dp%B2%C9%1E%7B%F6%C0%89%C5%9A%E8%91%F1%26%9Bh%82I%1E%1Fk%92%C9%25x%EC%C9%83%C9%97Xr%C7%9E%3B%9ClI%25%920%B2H%22%88%1CbH%21%84%08%12%C8%1F~%F0%B1%87%1Ex%D8Q%C7%1Cr%C0%E1F%1Bk%A8%91%86%19d%8C%11%06%18%5El%A1%05%16VP%21%05%14N0%B1D%12G%14%21D%10%3F%F0%A0%03%0E7%D40C%0C0%BC%D0%C2%0A%29%9C%60B%09%24%8C%10%02%08%1Et%C0%81%FE%06%19%60%60A%05%15L%00A%03%0A%24p%80%01%83%B55%D2%0E-WB%C9%24%92%40%F2H%236%E3%7C%08%CF%3E%03%DD%C7%1Ey%DCQ%07%1DI%C3%D1%06%1BN%9F%11u%18%5ET%9D%C5%15UL%21%C5%13M%2C%A1%04%12E%0C%11%84%0Ff%A3M%C3%DA%2F%B8%C0%02%DC%28%CCM%82%08%20%7C%90%F7%06%7C%FB%1Dx%04%0F4%B0%80%E1%82%B5%E5%E4G%3A%CC%FCx%24%91%3C%E2%88%CD%8A%E4%8C%F9%CFAs%EE9%E8q%BC1%BA%D3f%94%21%F5%17%5Dh%B1z%EB%AF%7B%3D%BB%11%B6%E3%AEC%0Ei%F3%EE%BB%0A%29%04_%C2%08%22%08%C1%07%F4%B6%B7%BE%5D%A0%02%14%98%80%04%20%E0%00%06%28%00%01%06%88%9E%5BB%A2%03%C7ANr%8Eh%C4%CD%BC%D73%F0%09%ADs%9F%93C%1CDG%3A4%40m%7D%ED%C3%9A%15%A6%10%85%27x%0DlF%18%9B%FD%F0%A76%B6%ED%2Fns%03%A0%00%F3%C6%01%E4a%E0%02%B5%7FK%E0%02%1F%C0%80%E7A0q%13%FCH%0E%28%21%89HH%AE%11%1A%B4%DC%F7%80%264%3D%8CO%84%24%5C%C3%D3N%E7%85%14Z%A1u-%8C%1D%D8jw%3B%B3%D1pm0%B8%A1%DC%FEG%3C%E3%E9%0Dy%7D%0B%E2%04%26%10%01%066%80%01%09%40%C0%E1%06%E3%96%B7p%84%00%0C%08d%20%17%40%C8B%2A%E0%90%88L%80%22%15%89%80F%3A%F2%00%90%8C%A4%01%26I%C9%08%16%E0%92%98%24%80%267%998%B6%0C%C0%92%98%14%0C%27%3B%E9I%B6%8C%E5%94%7D%2C%CB%F4%F6%C4%CAV%BA%F2%95%B0%8C%A5%2CgI%CBZ%DA%F2%96%B8%CC%A5.w%C9%CB%5E%FA%F2%97%C0%E4I%40%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%95g%80%00UO%0E%18%20%00kV%91%01%10%280%40%80%EB%D5%AF%1F%1Dt%B8%E0%20A%01%B3%5E%D1j%BC%10%E4%07%8B%0E%12%16%1C%20%20%40%80%5C%8D%14%BA%C8%F9%B2%C4%06%09%0C%0F%DC%FA%FD%7B%D1A%99I%8A%F6%A4%B1%12%C4%C5%07%0A%08%E22%9EX%00%0B%A7P%9A%20%0D%A2%13%86%09%0E%0F%066W%0C%D0%A4%93%AAS%A3%3AUR%C4gM%93%0A%AA%2B%C6%90%D4%8A%D5%2AT%A5%40G%F2%E3c%40%EE%89%1B%02%B5Z%EE%3B%95%A9Q%9B%C8%2C8.qA%1BU%CB%7B77%D5g%03%F5%88%04%B6%FE%90%CA%CE%7C%95%2AH3%BEGD%D2%C9%15y%ED%9A%8E%A8%87x%82%91%2B%F7%E4Y%91%2A%93z~C%0C%7C%B4%82_v%AC%A4%A2%C7%04%FE5%94%C0%19%A8%BC%C7%CA%83%88%84%90%20C%02X1%CA%80%CC%B1BI%0E%132%F4C%26%18j%07J%16%8Bu%88%10%09%86%DC%97%1F%2B%A7%C01%9D%89%08Ip%87%80%2B%AE%F2%C7%050%22d%80%18%A7%84%F8%20%23%2B%E4xP%00N%7C%F2%9Ev%9B0%21%E4A3L%A2%22%81%FA%81A%C0%92%05q%A0%1C%86%0F%A6R%87%03T%12%E4%80%1D%AB%F8%B8%8A%20%1DtY%D0%11%3Ejh%83%99%06%19q%A4%27Nh%C6%A6%40Edh%0A%19%FD%CDY%90%9B%0F%B2%B2%88%9E%08%15%D1%E7%2A%8A%00z%90%11%AB%24%BAJ%22%86%B6i%9E%2A%AA0%DA%28AE%3C%9A%0A%22%93R%AAJ%2A%A9%A0%82i%A6tr%8A%8A%A7%A0%D29%2A%2A%A7%18R%2A%00E%A0z%8A%29%FE%AA%96J%C4%AB%A6%94R%C8%AAD%D4ZJ%29%84%AC%3A%C4%AE%A4%902%08%AE%A5%902%CA%28%82%F8j%AC%28%A2%24%5B%AA%10%A3%88%12J%28%81%AC%2A%84%B4%A1%80%02%C8%AAAd%0B%CA%27%7Fp%FB%C9%B8%9E%F8%21%AE%27%9Et%D2%C7%AA%40%A4%DB%09%27%7C%B0%FB%EE%26%9B%EC%B1%EA%0F%9Cl%A2%89%26z%AC%EA%83%BE%99%60%92%C7%AA%3D%04%7C%89%25w%10%7C%B0%25%95%D8%B1%2A%0F%0CSBI%1D%AB%EEP%09%25%93HB%C7%AA%3AL%92q%24s%AC%9A%83%24%91%40%F2%88%1C%AB%E2%10%C9%23%8F8%02%C7%AA7%B4%DC%08%23n%ACjC%233%2F%D2%C6%AA50%B2%88%22%89%AC%B1%2A%0D%40%23r%88%1A%AB%CE%60%F4%21%85%A4%B1%AA%0CL%13B%88%19%AB%C6P%08%21%82%08R%C6%AA0%0C%22H%20%80%90%B1%EA%0B%60%FF%E1%87%18%AB%BA%60%B6%1F%7C%80%B1j%0Bl%EF%A1%87%17%AB%B2%B0%C7%1Ey%E0%D1%C5%FE%AA%2A%E4%91%C7%1Dv%CC%D1F%1Bl%AC%91%06%1Af%94A%06%19c%84%01%86%17%5El%A1E%16X%5Ca%05%15RD%01%85%13M0%B1%84%12H%1CQ%C4%10A%00%F1%83%0F%3C%EC%90%03%0E6%D4%40%C3%0C1%C0%00%83%0B-%B0%B0%82%0A%28%A0p%82%09%24%8C0%82%08%20%7C%E0%01%07%1A%60P%81%04%0F%2C%80%C0%5E%5D%C9y%92%0A%80%D7A%C7%1Cr%C4%01%C7%1Bm%ACa8%E2f0%EE%B8%17%5Dp%219%16VT%81%B9%14P%3C%D1%C4%12K%24%81D%11D%90%0E%04%EA%3B%E8%80%C3%0D6%BC.%03%0C%2F%D0n%7B%0A%29%D0%9D%09J%F0%BB%10%80%C0%03%1D%D8%80%06.%40%81%084%40yo%B9%CAYR%92%02%E9Q%CFzopC%F6%D4%90%863t%8F%0Cbx%5C%F8%B4%A0%85%CA%5DN%0A%E8S%9F%E7%92p%04%23%10A%08B%A8%0B%0Fx%60%3F%FC%D5%60%062%88%DD%0Bjw%BB%00%EE%AE%04%F1%BD%03%9E%F0%3A%C0%81%0Dd%80%81%11p%80%F2%C82%80%09%A6%04%05t%A8%DE%F5%06%B7%06%0E%22nqb%08%C3%17%C0GB%13Va%0A%29%EC%DC%E7%90%60%84%D1%09%C1t%A8%D3%C1%EAn%E0%3A%1C%F2%CF%05%B6S%81%0F%07%18D%03%0E%B1%88%19%C0%00%12%1F%C0%00%04%18%E0-%5DY%C9%09%E4p%3D%0Dj%EFp%89%03%E1%F7%BA%20%B9%2CX%EE%8B%99%7B%82%13%3C%07%3A%D1%0D%21%86%F3%EBA%FDX%D7%3A%1C%C6%A0%7F-X%C1%0A%E6%08%C4%DF%89%20%04C%24%A2%02%8Fh%01%0A%20%8F%01%098%00%20%9DW%12%01%20%E0%96%B8%5C%DE%01v%C9%CB%03%18%E0%97%C0%FCe%01%86I%CCb%12%E0%98%C8L%E6V%96%C9Lf%F6%A5%2F%C9Tf3%B9%D2%17%09%D2rU%D8%CC%A66%B7%C9%CDnz%F3%9B%E0%0C%A78%C7I%CEr%9A%F3%9C%E8L%A7%3A%D7%C9%CE%A1%04%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5Dj1%80S%A6%2F%05%14%280%20%00T%96%02%1CDP%40%D5%EAU%94%02%3C%B8%F8%40%81%C1%01%02%02%9E~%25Y%E2%0A%14%1C%24.8%40%405%EDZ%91%27%E4%F8Yc%C5G%0A%0D%10%12%14%10p7%24%869%9A%22%09%82%B3%85%88%0B%0F%12%0Ex-%DCq%81%1AR%A4%3AQ2D%07%8C%92%19%18%08P%F6X%E0%0B%A9U%A8Hy%AA%94%28O%99%1E%0CF%7B%FC%A1%A9%15%2B%D4%A5%40%5Db%04%C7%84%EC%8E1%22%B5%B2%7D%3BU%A9P%93%A2%88%FE%ADqC%A0%E1%C3o%ABB5%AAMl%E6%19%21%C4Q%05%9D%D5%EDU%A9%02%FEu%C0%9E%B1%80%96Q%D1%BD%7F%8FT%83%3C%C6%00M%3A%A9%9F%BFJ%13%12%F7%18a%40R%BF%AA%7F%FFQd%18%80%9FE%1A%FC%E1%DF%81%A8%D1%E1%C0%80%15-%B0%06%2A%07%AA%22a%2A%82x%C0%20E%04d%11%8A%7F%12N%08%C9%0C%17RTD%26%1DN%98J%2A%98%18%11%E2D%26%20R%E2%89%27%862%86%80%2BBtA%1E%A8%A8%92%8A%89%A8%98r%87%045B%94%00%19%A4%C0%08%23%2A%A8%14%F2A%90%0F%09%20%C5%27G%22%89d%2470%F9%10%0F%93H%29%E5%29%A7pb%05aV24B%20Hri%E6%29%A2%B0%A1%40%98%0CE0%87%29eri%8A%29%A5%ECQ%01%9B%0B%15%E0E%28g%CE9%E7%21%28%E0%A9P%00Jd%22%A7%9FtR%92%84%A0%0A%C1%D0%08%A2t%96RJ%27Z%0C%C0%28B%1A%EC%E1%A7%A4%9C%8A%02G%03%97%1E%D4%00%1C%A4pZ%0Af%A4%8C%B2%C7%06%A1%22%14%84%A9%FE%98%8D2%0A%232%B4%9A%10%10%A8%A6%3A%0A%25HLf%ABA%3F%C8%2Ak%27%5E%D0%F8%2BB%3F%88%12J%28%A2%08r%ECB%3F%84%02%CA%B4%80%3C%AB%D0%0F%D3~%F2%C9%1F%D6%26%E4%83%B6%9Ex%E2G%B7%08%F9%10n%27%9D%8CK%AEA%3Dp%E2%EE%26%7C%ACk%10%0F%9B%D4%AB%C9%1E%F2%16%C4%83%26%9Ad%92%89%1E%F9%12%B4C%26%98%5Cr%09%1E%01%0F%A4%C3%25%96XR%C9%1D%09%0B%A4C%25%95PBI%1D%11%03%90%03%25%93L%22%09%1D%19%E3%20%89%24%91D2G%C67D%02%C9%23%8F%C8%91%B1%0D%8F8%E2H%23pd%5CC%23%8D0%B2%88%1B%19%D3%B0%C8%22%8A%24%D2F%CF%89%24%82%08%22kd%3C%C3%21L%1B%92F%C62%14R%08%21%84%A0%91q%0C%83%0C%22%88%20fd%0CC%20%81%00%F2%07%19%19%BF%F0%C7%1F~%F8%21F%C6.%F8%C1%07%1F%7B%80%91q%0B%7B%E8%A1G%1E%5Ed%BCB%FE%1Ex%DCq%07%17%19%AB%60G%1D%84k%91q%0At%D01%87%1CXd%8C%82%1Cr%C4%01%87%15%19%9F%00%C7%1Bo%B8QE%C6%25%B4%D1%06%1BlH%911%09k%AC%A1F%1AQd%3CB%1Ai%9Ca%86%13%19%8B%60F%19d%90%B1D%C6%21%901%86%18a%2C%1A1%08a%80%F1%85%17Gd%FC%81%17%5Et%C1E%11%19%7B%C0%C5%16Zh%21D%C6%1Cd%81%C5%15W%FC%40%BD%15VTAE%0F%19k0%85%14%E4%EF%90q%06Q%40%F1%C4%139d%8C%81%13M4%C1%C4%12F%14Q%C4%10C%08%11D%10%3F%F4%EFC%0F%3C%E0%C1%0Ev%A0%83%1C%E4%00%077%B0A%0Dh%C0%C0%19%C8%20%06%10%84%C1%0B%5E%E0%02%17%B4%80%05%2CX%81%0AT%90%02%14x%F0%04%26%08a%09H0%82%12%8A%20%04%1F%E8%00%070P%81%084%00%01%06%40%8BZb%82%81%25%D8P%09I%40%C2%11%EAW%04%22%E4O%7F%FE%40%F8%C1%FF%00%28%40%02%1E%F0%06%09%B4A%03g%E0%40%09R%D0%82%17%5C%81%069%D8A%14%9C%E0%8A%22%24%E1%09A%E0%01%0Eh%C0%02%13p%80%02b%98%16_%BD%E4%02I%C8%E1%0E%7B%F8%C3%20%00%21%88%3F%00%E0%00uP%40%1C%20P%81%0Bd%A2%0C%1E%18%03%09B%11%83R%A4%A2%15%B1h%82%12%8C%90%84%238a%08%40%90B%0Ed%C0%02%12%10%E3Y%CA8%13%0B%F0%D0%87%40%F4%DF%FF%04X%40%03%DE%11%8F5p%60%04%9DH%C1%28n0%05%A8%FC%60%21%0F%89%C8D%86%60%91%1F%F0%80%07T%B8%81GFR%01t%29%A3%19%5BR%816%BEq%88%014b%0E%90%98%C0%1A%2C%90%06%7B%7C%A0%13%2B%D8%82%28j0%95W%04%A1%21%5B%29%02E%C22%96%B3%E4%00%076%A0%01%16Fr%010%AC%CA%0C_%12%00%02%98%F3%9C%E8L%27%01%06%C0%CEv%BA%F3%9D%F0%7C%A7%00%E6I%CFz%DA%93%9E%E8%27t%E7%3C%9D%B2%CB%8C%F9%F3%9F%00%0D%A8%40%07J%D0%82%1A%F4%A0%08M%A8B%17%CA%D0%86%3A%F4%A1%10%8D%A8D%A1%12%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05%28%29%94%85%01R%99A%24u%8A%24h%8D%0B%01O%5B%9EH%94%8A%D4TAo%B2%E8%80%905e%06%3E%ACX%A1%1A%C5%89%EA%1B-AVP%18P%96%24%038%AB%5C%B5Z%B5v%13%A4%40o%E3j%80P%A0.H%02%5EJ%B9Z%BC%B7o%A2%3Fn%B2%C4%DD%00%21A%81%00%869%FE%D0%B4Xo%2BV%AANy%22%B3%C0%82%15%C9%2B%28%5B%1E%809%F3%C5%17%90Z%B5%F2%2C%5B%AD%1D%0A%04%3D%E8P%A1%BA%C0%00%01%AD%5DK%D4%C0G%B6q%E3%AB%06%7D8H%00C%EF%DF%C1%85%3B%5C%B0%26%D5%F1%E3%8CV%2C%2C%C0%605p%E9%0E%0B%FE%7C%21%95%B6%7CyH2%1E%12%F0%1D%20%3Ax%84%3E0%ADZ%C5j%3E%7DV%9B%98%B8o%18%E0%FB%7B%8408b%DF%80%AB%8CB%86%01%16%ED%F7%9F%06~%A8%E2%E0%83%0E%A2B%87%03%FFu%F4%C0%1B%A6%A4%A2%E1%86%1A%06%E2A%85%1C%11p%05%28%1A%A2%82%0A%87%8F%D0%00%E2F%01%2C%91%89%89%26%9E%02%E3%25F%AC%B8%91%0B%8C%9C%A2%E3%8E%3A%82%22%06%826b%94%C1%1E%A5%98b%E4%91%A6%90%22%07%85A%5E%A4%80%19%A2%94%22%E5%94R%FA%C1A%93%17%0D%40%C5%26%A4t%E9e%97%8C%C4%80%E5E%40H2%CA%99h%8EB%CA%24B%8Ci%D1%08%81%88%22%E7%9Crn%E2%05%90nJT%81%1C%A0%84%E2%E7%9F%A1%7C%22G%04yN%84%40%17%9B%80%A2%E8%A2%8A%FA%D1A%A1%12%09%B0%04%25%9FTji%A5%89%CC%00%A9D5%24%D2%C9%A7%9E%84%1A%AA%24P%60%B5%E9C%1F%D8%C1%C9%AA%AC%AE%8A%09%19%FE%09%9C%FA%D0%03hd%B2%C9%AD%B8n%A2%89%1C%13%C8%1A%DE%14%94h%22l%26%C4%0A%CB%07%09%BE%F2%07%C4%22%97%5C%82%89%B3%CF%5E%82%08%10%C96%94%82%1F%96d%ABm%B6%8EDAW%B5%0AY%C0%06%25%95%94K%C9%B9%94LB%1A%B8%0A-%00F%24%93%C4%2B%EF%24%92%B4q%01%BB%0B%D5%10%C9%BE%91H%C2%2F%1F%2A%E0%CB%10%0D%8F%14l%B0%20%3C%28%28pA34%E2%C8%C3%89%3CQ%D8%C2%0C%C9%C0%C8%C5%8C%C0A%B1C1%28%E2%B1%22ml%DCP%0C%88%94%8C%08%1B%223%04%83%21%85%18b%88%1A%29%2F%F4%02%214%13%82F%CC%0A%B9%20%C8%CE%82%98%81sB-%00%22%F4%1Fd%FC%8C%10%0B~%24%ED%C7%18F%1F%B4%02%1F%7BD%1DF%D3%06%A9%90%C7%D5yxAuA%29%D8%E1%F5%1D%5DlM%10%0At%94M%87%16b%0Ft%82%1Cl%CB%81E%DA%02%99%00%C7%DCpX%017%00%25%B4%A1w%FE%1BU%DCM%C2%1A%80%AF%21%C5%DD%23%A4ax%1AQ%DC-%82%19e%98a%86%13w%870%C6%18b%88%B1%C4%DD%20%80%A1%F9%17I%DC%FD%81%17%5Et%D1%C5%11w%7B%B0%85%16%A8%13qw%07X%5C%81%05%16m%C2%BD%81%15UTa%C5%0Fwk%20%C5%EER%F4pw%06P%04%0F%85%0Ewc%D0D%13L4%81C%F1K%28%A1%C4%125%DC%7D%C1%11%D4%1F%A1%29%DC%16%10%A1%3D%11b%C2MA%10%E0%07%F1%C2%DD%13%FC%E0%C3%F9-%DC-%01%0F%3B%B4%AF%1D%DC%12%E4%80C%0E9%A4pw%046%E4o%C3%09wC0%C3%FF30%C1%DD%1E%10%83%02%C6%60%04ws%80%0B%5C%F0%02%17%84%E0n%0D%60%81%04Y%00%02%08%AA%E0%82%29%F8%10%DC%18%80%82%0E%9E%E0Q%1B%2C%81%09LP%82%0D%DCm%01%24%18%81%0AE%C0B%16%86%E0%85%2F%14A%0C%5B%28%C3%19%CE%D0%854%8C%21%0CuH%C3%1A%86%00%04%F5%1F%E8%00%070P%81%084%20%01%07%20%00p%14%16%13%05%C8%B0%87-%84%A1%0BC%20%82%11D%91%8AP%CC%21%14m%B8%C5%17%02%D1%03%1C%C8%80%05%24pD%03%10%805L%84%89%02%40%C0%C6%1F%FE%90%8D%40%04%E2%07%E0%E8E8%CE%11%8Ex%CC%23%08%DE%18G6%DE%B1%8F%1F%08%E4%07%3C%D0%81%0D%10%D1%88%080%E3%12s%92%80Az%C0%91%81%F4%80%24%1F9IAF%B2%92%8E%AC%24%26%059IIv%A0%93%93%EC%80%289%B0%01%0D%5C%60%02%10%60%00%02%7C%B3H%9C%24%60%94B%14%A5%2Cg%09KZ%8A%92%90%1C%C8%E5%2C9%60KX%E6%92%97%B5%24%25%295%20F%09%3C%60%01%ABD%A3N%FA%23%80f%3A%F3%99%D0%8C%A64%A7I%CDj%3E%F37KL%E3%DD%B6%C9%CDnz%F3%9B%E0%0C%A78%C7I%CEr%9A%F3%9C%E8L%A7%3A%D7%C9%CEv%BA%F3%9D%C2%09%08%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05X%19%E5%07%03R%99E8%C1%9A%CA%AAM%82%A7-O0z%C5%F5%D5TX%A4%AC%04%C0%8A2%03%9FV%AE%5Cu%5D%FBJ%D2%0A%B2%24%19%BCI%856%AD%5D%B5k%5B%E1y%00%F7%23%01.%A3Z%09%1E%9C%D6%14%AB%BBi%5B%8D%922%B6%AFF%1F%97XIf5%B8U%2A9%0FF8r%85v%F0%AAT%89H8%BE%E8%A2%D1%AAU%93%27%AB%DAc%81%A0%13R%83Y%A9%3A5JS%18%04%A3%25f%C8%93J%95%AA%D3%C0U%11%02q%F0%81%1D%D4%9FK%85%CA%E4%A8%0E%8B%DC%0E%17%A4%29%95%AA%BA%EF%EB%8CT%2Cl1i6%29O%95%14%FE%E99%F3%E3%2At%84%04%B6%7CB%C5%BE%BA%7BG1%1C%0E%E8%02J%14%27I%85%E8%84YBCB%E3%F3%03%ED%40%89%29%A7%14%C8%DE%29%A8%60%B2%C4%7F%0EQ%60G%26%8F%04%F2%86%16E%C0%F0%01%04%03%00%08%40%0B%89%94%E2%A1%29%04%16%F8%89%18%06T%E4%C2%1E%7C%A4A%85%0F%2Ah%00A%02%04%40%87A%1E%A3%90B%8A%87%1F%92%22%87%03%18%0D%B0C%18O%E0P%C2%05%0E%20P%C0%00%0C%3E%E5%40%1A%9F%8C%E2d%8D6%92%E2G%07%1C5%40%C3%0C%22T%C0%C0%01%04%08%10%40%92E%11%20%C5%25%A1%84%22%CA%99%A28%B9%88%0C%209%90%81%04%0B%180%80%97O%05%40%04%24%9F%7C%02%CA%9Ee%86%12%89%10%23%05%90%40%02G%D2y%94%0A%83x%A2%A8%27y%E6%89I%17%25%96%14%C0%9C_%1Ae%81%1C%9Bp%A2i%27%9Cz%B2%C9%1A%0D%A8T%29Q%09ta%89%26%9Al%A2j%A6%9C%D8%A1%81%86%FE%1D%0D%B0%84%23%97%60%92%C9%AD%99%A0%3AH%0B%B0v%84%03%21%95Tb%C9%B0%97%D4%8A%08%0F%BDr%D4%C1%1C%92L2%09%25%D0%0A%FB%88%15%05%24%AB%91%04d%3C%12%C9%B6%92t%3B%89%24g%F0e-F%07%3C%81%88%23%8E%3C%A2.%24%90D%22%C7%AB%E3%5E%14%40%0F%81%2C%C2%08%23%8D%E4%8B%EE%1Eo%C5%7B%91%0Au%20%82H%22%8A%2Cb0%23%82%10%01%A6%BF%10a0F%21%86%18r%C8%21%02%27R%88%15%B81L%D1%02T%04%22%C8%20%84%10R%08%C4%86%84%01%81%C6%14%0D%00D%1E%7F%00%12%88%C7%82%7C%9C%06%95%28K%14%C0%0Bp%F0%D1%87%1F%3C%FF%D1%B2%1Cl%D6%2CQ%07c%E4%91%87%1E%7B%A0%C8%07%1Fv%FC%20%80%D0%11%3D%20E%1Du%D8q%C7%1Dx%18%8D%C7%13%19C%ED%D0%01F%C0%21%C7%1Ct%D0A%B5%1DuX%11%81%D7%11%91%F0%06%1Cp%C71%F6%1Ca%7C%C0%B6D%22%B0%D1%86%FE%1Bo%BC%5DF%BFwG%24B%1Ak%AC%C1F%1A8d%18%B8D%21%9C%81F%1AjH%B18E%20%94a%86%19g%401%F9D%1F%8CA%C6%E7Ml.%91%07%60%84%11%86%18K%88%1EQ%07%5E%B4%FEE%12%AAC%C4%C1%16%5Cp%D1%85%11%B1%3F%B4%01%16Yh%A1%05%11%B9%3B%B4A%15VXq%05%A0%C13%94%81%14SPQ%C5%0F%C93%84%01%14QH%21E%0F%D1%2F%84A%13N%3C%01%C5%0E%D9%2Bt%C1%12%E47%91C%F8%09Y%80%04%12I%2Ca%03%FA%08UP%84%11F%1CA%03%FC%07Q%20%C4%10C%10%114%FE%04%A1%C0%0F%80%10%84%20%C0%00%80%05%99%00%0Fz%E0%03%1F%F0%0A%81%03%91%80%0Et%B0%03%1E%3C%07%82%02%89%C0%0Dp%90%03%1Dh%07%83%00%80%00%0Dj%60%83%1B%A0%00%84%00x%80%0Cf0B%13%A0%F0%010%80A%0Cd%20%1A%10%3A%A0%05.p%01%0CF%80%C2%06%AC%80%05%FE%2ChA%08z%98%02%15%A8%60%05%C4%01%21%03N%80%02%14%A4%C0%03%28%5C%00%09L%60%82%13p%20%8A%23%20A%09J%B0%01%14%2A%40%04%22%18%C1%082%E0E%10%84%E0%8Cd%04a%02%3C%F0%816%5E%00%85%09%E8%40%07%3C%E0%81%D6%80%10%01%1B%E0%80%1E%2B%80B%04h%E0%8F%1B%98%00%0A%0F%80%01%0Cd%20%03%82%04%E1%01%2Cp%81%0B%60%40%02%83%AC%40%05%18%B96%10%1A%80%02%98%AC%80%B80h%80%09L%80%02%13%E0%11%08%0B%10%01%09x2T%A3%84%40%04V%89J%0C%16%E0%01%0F%80%00%04%18%80%C2%028%00%96%B8%C4%A5%2Ce%B9%CAR%9A%D2%93%99%94%A4%24-%40LF%16%B2%90%87%CC%00%207%90G%3Dr%40%8E%1C%D8%40%06.P%81%084%20%01%07%28%D4%C2pB%00%07x%D3%9B%B9%DC%A5%2A%7B%29%81r~2%98%C3ld%23%91y%C8e6S%8E%F0%EC%80%1E5p%01%0A%CC%12%01%06%B1%E8%D2%A8zB%00%064%E0%9F%0D%F8f.c%B9Kr%9A%F3%93%C0%1Cf1%D7%89%CC%3Fj%80%99%10%8D%E6%064%80%81%0AH%C0%01%0A%C8%26%A5%B6y%93%01%2C%80%01%FE%04%E87Gz%CB%82%1A%B4%9C%BF%3Cg%26%17zLej%C0%A5%7F%3C%A4%05%260%CB%04%E4%13I%1C%ED%E8GA%CA%D3%90%8A%14%9C%B0%14g%2FW%89RO%26T%A1%EA%3C%A6R%2F%60%01%0AD%C0%01%0B0%D2F%83%F2%A5%AAZ%F5%AAX%CD%AAV%B7%EA%A5%00%08%A0%ABXE%A1X%C7J%D6%B2%9A%F5%AChM%ABZ%D7%CA%D6%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%95m%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05T%01%C5%E7%02R%99C2%B5%9A%9A%8A%0D%82%A7-M%20Z%C5%8A%D5%D4%A9%A1%AA%04%C0%8A%12C%9ET%AB%D2v%F5%FA%15%D2%0A%B2%24%17%AC%29%95J%95%DD%B4%5C%BB~eu%E7%01%DC%8F%03%B0%7CB%85%2A%95%E1%BB%A4R%AD%FD%DA%AA%94%D8%BF%1BuH2u%EA%14%E1%C2%AAJ%BDq%20%82%D1Z%B6S%25%A9%80%7Cq%C5%A1R%A8MQ%B6l%0AO%05%82LD%E5%05%CD%B7%01i%89%17%E4%88%1AE%8A%14%EAR%A6J%01%FAp%D0A%1DU%8B%BF%8A%AAr%DB%A1%021%9DB%89%DA%CD%DB%F7%A1%14%0B%5BH%9A%CD%F8%91%89%E6%09%09%FET%B1%F4%09%14%28%E9%D4%11%BDp8%C0%0B%A9%BC%8CU%B5%B9%0A%9E%60%8DE%9D%3Ay%F2T%FE%BC%A4%23cAd%81%1Fj%81%D6J%27D%D4%07%00%0A%7Fh%B2%09%27%9C%E8%C7%DF%25%5D%18PQ%0E%99%7C%B6%D6%2A%86pp%5B%05m%5C%92I%26%9A8%08%A1%26j%D8v%11%01_%98%82%D7%2A%AA%A4r%0A%28a%14%00%17%03%5EDR%89%25%97%88H%A2%26ul%C0%D1%07%88%D8%15%E3%29%A5%84%B2%09%21%2C%3C5%C0%11%89H2%C9%24%94X%C2%E3%25%81%B4%00R%11%9C%C8X%8A%28%9DT%B2%88%1FS%2CPT%009%00%F2%C8%23%90D%22%25%25%95%14%B2%C3H%0B%BCA%CA%28%9Fd%02%09%21u%90%C1%84%06%01%02%25%82%1C%8C0%D2%88%23l%BA%C9%C8%146%96%04%82%20%9AL%92%08%1Fk%60Q%84%0C%1C4%DA%93%04a%1C%92%88%22%8B%18%8Ah%23%60%98%89R%00E%10%12%88%1Ca4%91%03%0A%FE%1AD%60%E1N%070%11H%21%86%1C%82%C8%A7%8B%2C%92%86%05-%29%C0%C4%19V%08%F1%02%08%144%80%40%01%81%D6%24%C0%0Ew%04%22%C8%20%84%14r%88%AEt%7C%07%D3%04%3A%D8%60%82%06%10%28%60%00%01%034%2B%93%0Am%F8%E1%C7%1F%80H%5B%ED%1D2%D0%14%C0%04%1BL%C0%C0%01%E4%0A%60%EEK%16p%91%87%1E%7B%F0%D1%C7%BA%81%EC%81%04%017%09%A0%40%02%05%0C%A0%EF%BE%2C5%C0%C4%1Cu%DC%81%C7%BF%01%F3a%05%03%3B%090%80%C3%10%ABT%40%0Ek%C4%21%07%1Du%D8aq%1E%5EP%00T%C8%A7%AE%40F%1Bn%C0%01%87%1C%27%F7%19%82%82%1Eup%05%1Ai%A8%B1%06%CD6%A71%03%CC%3CO%F4%00%11c%90a%C6%19i%A4%B1%06%1Bi%041k%D2%19%1Dp%03%17_%84%21%06%19e%98%01t%12%A6b%8D%91%00%27T%A1%C5%16%5Dx%D1%F5%D7O%B8lvF%1C%2CQ%85%15Xd%A1%05%FE%17%5ExA%C5%08sg%14A%0FPH1%05%15V%5C%81%85%16V%A8%20%40%E0%17%21%F0%C2%12L4%F1D%14%86SA%C5%0C%9AB%3E%11%01%26%10%81D%12KP%EE%04%14Q%D8P%B6%E7%14M%10%C4%10E%18q%04%12J0%E1%C3%04%ACc%24%C1%0F%40%BC%1E%BB%0F%19%E4.8%0F%3E%F0%FE%C3%07%8F%0B%8FQ%04%3A%EC%D0%83%0FZ%2A%9F%11%048%E4%D0%7C%93%D2c%04A%0D6T%3FZ%F6%17%3D0%03%0D5%DC%80%1D%F8%169%10%83%0C%E3%9F%80~%FA.%C0%10%C3%0C%DA%BE%3FQ%03-%B8%F0%02%0C%24%D8OQ%03%2B%60A%FE%00%E7%3F%890%00%05%2A%08%20%08%0Ah%C0%13%A0%20%05%2AX%20%03%21%B2%00%12%98%C0%81%1E%98%20D%140%82%12%5C%D0C%1At%8E%08F%40%82%12%08%29%84%0DQ%40%08F8%02%0D%A0%B0%21%09%F8%00%08V%18%BC%17.%24%01%1E%F8%80%0C1%60%C3%85%20%80%03%FE%1D%F0%80%07%80%D5%C3%84%20%60%03%1B%00%22%11%8Bx%10%04d%40%03H%94%1B%13%0Dr%00%0C%3CQ%03%B8%9B%22%15%2F%60%C5%0CdQ%8B%041%80%05.%C0%C5%08%80%B1%20%06%A0%40%05%2C%60%013%9Eq%20%06%98%00%05%D4%08%817%C2Q%02%12%90%A3_%EC%08%80%02D%00%8F%13p%00%1F%FB%08%81%08%18REv%24%C0%03%20PH%8E%F1%91%00%0Ex%C0%22%1D%99%C8%068%20%92%AB%3B%23%01%1A%60I%07d%12%8C%04%60%00%03%2C%A9%80A%0E%60%01%0B%18e%02L%89%CAT%AE%92%8F%03P%80%02RI%1F%3B%0E%20%01%09%40e-%DFxKY.%60%97g%BC%25.%15p%80A%0A%00%01%B8L%401%F9xLd%26%E0jo%14%C0%01%0E%80%00%04%40%F3%8C%D2%9C%A65%8Di%00m%22%60%9A%DEL%E60%5B%99%CAQF2%92%8C%8C%40%21%F3%28%C7%0A%B8s%8Dc%24%A3%05%2A0%01%084%40%99%E3%C3%12%80%BE%8A%22%00%03t%13%9C%D4%AC%A63e9Kr%8A%B2%93%E8d%24%04%F0%98G5%BA3%9E%F2%A4g%04%3Ci%CD%7C%05%00i%1D%2B%40%01%FC%F9%CF%80%3A3%99%045%28%27-%29%C9E%1A%F2%8F%13H%E9%1A%DFY%01%0A%D4%D3%01%0Cx%A6E%2F%CAO%8D%DA%D4%9F%00%15%E8%40%7D%D9%CAQr%F2%92%095%24%20%E7%D8R%97J%00%020Uf%C3%1Ev%94%00%D8T%A3%1C%ED%A8GA%8A%CA%82%A2%D2%A7%24%5Dd%21%85%9A%D2%09H%40%9D0U%805AFS%05%5D%F4%AChM%ABZ%D7%CAV%8C%0E%F2%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%0D%AC%60%07%AB%BC%80%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05D%D1t%C7%02R%99%3E%26%99%3Auj%14%1A%04O%5B%8E%08D%AA%94%A9%A9%A7Pq%92%12%20%2BJ%0BqB%89%1A%D5%D5%EBTT%A8%18%A50KR%01%99M%A0%D4%AEm%FB5%2C%AASt%1C%D0%FD8%20%0A%25O%9F%40%E5%5D%3B%AA%D3%28%AFT%E1%A6%02Ev%F0F%1A%876q%EA%84Xq%A8Ni%1A%800%04%D9o%2AU%8E%E6Z%B6Xb%0F%A6L%9A4s%FE%E4%29%0E%05%82H8%81E%95%EA4%AA%3A%0DVK%A4%60%86R%25K%AFcs%E2t%87%C3A%07qJ%99%3E%AD%0A%D4%14%E1%0E%11Xi%24i%92%F1K%C9%FB%FE%94X%B8%C2Q%E4%DE%AAT%ADj4%1E%3B%C2%01I%0C9z%14%A9%3B%25K%97%FC%A8p8%60K%28%D3%E9%AD%82%CA%1AX%B9G%D0%0Ax%2C%C2H%23%F3%D57%89%21%3E%94%05Q%05%7B%98%C2%1Bz%AB%AC%D2%09%11%06%02%00%02%1B%86%20%92%88%82%0CB%A2%88%14%05TtC%25%17%06%98a%22%1D%08%17%C1%16%81%0CR%C8%21%22%2A%C2%C8%22%5E%2C%80%11%01%5D%8C%82%5E%80%AC%9C%B2%86%01t%25%B0%84%1E~%00%22%08%217%22%82%C8%19%17p%E4%81%21C%AA%B7%0A%2B%9C%04%F1%D4%006%C0%A1%C7%1E%7D%FC%11%C8%93%85%C0%D1%9EGDl%82%E1%96%AC%B4%92%C8%06F%A9%60F%1Dw%E0%A1%07%1F~%98IG%0C%23-%00%C7%29%E9%A9%C7J%9C%A6%7C1%80P%19d%01%87%1Ct%E0%99%C7%1E%7C%DCQ%04%01%26%89%B0%88%8B%87%1Ez%C9%0C%3F5%80%C4%1Al%B8%F1%E8%1Ct%D8q%87%13%09%A4%14%80%14%FE%A0h%09%27%2B%AB%FC%11%C1N%05%D4%40%C6%19i%90j%AA%1CrTq%2BK%0E%D0qZ%86%19%AA%92%8A%27P%E0%24%C0%09Y%84A%86%19%BC%AE%D1%86%1B%5C%C4%08S%0B%91%14%9A%CA_%A5%88%12%C8%075m%D0%04%17%5E%80%21-%B5ix%B1fL%04x%21%24%2A%A6%90%12%0A%27%960%D2%04%A609%D0%83%15Xh%81%EE%17%D2~A%C3%A26Y%B0G%29%A3%80%C2I%25%8E%10%92%07%18t%B6%84%00%0CPHA%05%C0Yl%E1%85%17%3E%B4%AAS%0D%8DlRI%23%83%DC%A1%06%17L%A4%90bJ%03%88pD%13Od%BC%F1%15Z%0C%21XO%04%3C%91H%CAih%B1%04%0F-%7C%A0%00J%18%F4%60D%12K0%E1D%14%1A%1B%E1TP%14p%11%F4%12%3B%B4%10%C2%05%10%24%20%00I%10%C8%00%84%10D%1C%C1%B4%D3H%84%20%E1P%1C%08%A1%03%0B%20p%BD%C0%01%05%7C%0D%12%02%26%E8%C0%83%FE%0Fc%97%9D%04%12%29%F0k%94%00%16%7C%60%C1%03%0A%D0%3D%80%00koD%40%074%DC%80%83%DE%7C%0B%21%04%0B%07%D0E%00%03s%17%B0x%E3%19%05%40%01%0B1%CC%40%83%0D%93%F3%D0%83%0B%0C%087%40%01%040%DEQ%03%25%B0%D0%C2%0B1%C8p%3A%0E1%DCf%A0%00%B2k%84%00%07%27%A0%A0%82%ED%B8%CB%00%C3%05%A0w%F8%A3%05%22%8CPB%F1%C7%BB%E0%02%07%08%3B%AF%91%00%11x%00B%08%D2%9BP%7C%0A%1C%20%A9%3DG%08t%E0%C1%07%20DO%82%09%1F%88%7C%3E%FA%1C%A8%FFA%08%22x%D0%FA%FC%1E%1D%B0A%FD%1E%E8%C0%03%9A%C7%BF%8C%1C%40%03%1B%D8%40%07%A6V%C0%FEe%00%81%1C%A8%40%03%3Fr%80%0B%60%E0%81%13%98%A0G%0C%60%01%0Bf%20%83%1A%E4%88%01%2A%D0%C1%0F%86P%84%14%A8%80%05%25p%C2%8D%14%80%02%29%B4%C0%B0Z%88%11%03L%60%02%29%84%00%0D3R%00%09H%00%87%FE%0F%D8%21F%0A%00%01%1FN%60gB%AC%08%11%23%E0C%24%26q%22%04x%00%04%22%10%81%E0%3C%91%22%04p%80%14%23%B0%BF%2BJ%24%8BZ%84%40%17%BD%08%11%024%C0%01Z%1C%23%19%1D%B2%B93%3E%C0Gk%84%C8%00%16pF%07%1C-%8E%0F%99%23%03%1A%D0%00%F9%E1%91%21zd%00%03%FC%F8G%85%E8q%01%0B%20d%21%DF%83HD%2Ar%91%06%19%80%02%1AY%20H%26d%00%09%98%E4%02%2Ai%C9%83%60R%01%A0%CC%5C%27%DF%83%80%04dR%94%A3%8C%24%02J%99%00T%A6%92%20%03X%E5%2A%CD%F7J%82%08%40%96%08%A0e-%05%22%80%03%F82%97%BB%B4%A5%01~%A9%CB%5D%0A%C0%00%C3%3C%401kyLd%D2-%98%03%11%40%01%0A%80%CC%97AS%9A%D4%7C%264%01%80Md%0A.%98%01%20%00%01%A8%F9%CD%5D%86s%9C%B0%DB%26%00%CE9%CEr%D6%92%9D%E2T%27%3C%B3%07Nq%8A%93%9E%E6%BF%24%C0%00%EE%29%CF%01%EC%D3%9E%E8%9C%A63%7DI%D0%03%AC%D2%94%A0D%E4%1E%D1%A8%C5%07%A0%B1%01%9CS%40%02%10%407%7D2.%00%185K%00%FC%09Pq%C2n%9A%D94%E8AM%99IM%EE%B1%8E%0DEcD%27j%00%CF%5D%94%80G%D9%A8%3F%FF%09P%90%86%D4%A0%24E%E8%24%05%29H%3E%F2q%A5%14m%E9%E70%0AS%A3%C8%94%A3%1D%0D%285%939%D2%92%26T%A1%9C%5B%80Dg%09%BB%A1%165%A63EjRm%9AL%91%96T%A7%9A%9C%AA2%ABj%D5%ABj%90%A8hM%ABY%D5%C9%D6%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%5Dd%40%00%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%05%20i%D4%86%02R%996%0Aa%CA%B4%E9%12%98%03O%5Bz%98S%C9%D2%A5L%9A6q%92%B4%24%40V%94%12%C8%3C%92D%A9%2B%A6%B0%9C%3Ay%22d%E2%2CI%04U%129%82%14i%12%25%AF%60%C5z%FA%E4%A9M%03%BB%1F%05%08%09%B4%88%91%A3G%91%D8Vzd%09%AE%DCO%A0.51%8BXc%8A9%87%10%25Z%D4ho%24G%5E%18p%E0c%193%A8P%87%EAv%B6%D8%C1L%A0A%85B7v%D4%88L%04%82A%24%C5%1D%FCZT%A87%0CfK%7C%20%85%CF%1F%40%82%08%15%12%BD%28%0D%86%83%0C%D2l%BA%5C%7CT%A6%27%CA%1D%FE%1A%10B%27%0F%9F%3E%7Fn%E7n%F3a%E1%89B%C4C%89%1AE%8A%14%A2%11%E1%13%0A%A8%B1%86%8E%1D%3Cz%F0%E1%07tm%88%E0%90%00U%60%82%99%7C%F4%952%0A%1A%08%E4W%D0%07%5E%BC%11%C7%1Cu%DC%91%C7%1E~%C8%21%03g%0FM%40%C7%27%0C6h%0A%26BH%08%80%05R%A4%B1F%1Bp%C8AG%1Dx%D01%04%01%15%CD%E0%08%83%A4%94R%8A%29%A7%14%C2%81r%0B%04A%86%19h%A8%C1%86%85r%C8%B1D%02%18%11%80%05%27%F3%F5%08%E4%29%A4%A4a%80%5D%06%CC%B0%05%18b%94q%86%8Bm%BC%21%C5o%1Bq%10H%83%3F%9E%82%0A%2A%99%FC%F0%94%00%23D%91%05%17%5E%84AF%19If1%E4G%40Xb%E5%29n%A6%92%CA%21%1A%18%B5%01%12TX%81%85%16%5D%7C%A1%A7%16%24%8C%A4%C0%1A%A3%B4Yh%2A%A4x1%80P%0F%E8%D0%04%14RTq%85%16xj%11%C3%A7%25%81pH%9B%FE%A8%18%AA%CA%2A%96%CC%F0%13%02%2B%1C%A1%04%13ND1%85%A3Z%DC%B0%25J%01%3C%D1%09%A1%B1%AA2%AB%2A%7F%A0%99%D3%00%1F%F80%84%11I%2C%C1%C4%13RP%B1Cr%2C9%20G%29o%A6%A2%EC%2A%AB%88B%05N%01XP%03%0F%3F%08A%84%AEK8%01%C4%041%B1%F0H%AC%E2%CE%CA%0A%2B%8F%C86%D3%03%2C%DC%90%C3%0E%3D%001m%12%40%5C7%D3%00%5D%8C%22%2B%B9%AC%B4%A2%0A%1BX%C1t%80%080%CCP%03%0E%3A%B0%1B%C4%0F%21%08p%93%05%7C%88%0Bq%2B%28%7B%92bK%04d%A0B%0B%2F%C4%40%83%0D%03%F3%60B%01%3B%E5p%89%BE%11%A3%EC%CA%22%89%A6%14%40%04%24%A0%A0%02%0B.%C0%20C%0D7%A4%10aO%04xa%CA%2A%FB%A2%8C%F2%29b%B0Z%12%03%1F%90P%C2%09%29%AC%D0%82%0B1%A8%E0%80P%1F%20Bu%CF%3E_%22%C3%5D%18%80%00%82%08%24%98%604%0B%29%D0%5BT%FE%11%9E%EC%CBv%2B%AB%E8q%D8G%04D%C0%81%07%1F%80%10%C2%08_%9Fp%81%C8G%25%A0F%2AT%93%BBJ%2A%A8l%E2DG%028%90%81%06%1Bt%80x%08tc%80%E3Y%230%A2%8A%A1%A7%982%0A%28%9D%F0%F1%27F%09P%60%01%06%19l%C0%81%E8%20%600%2Cb%01H%D1I%29%A4%84%D2I%26%948B%88%12%A7Sd%00%04%13T%60%C1%05%B8%87%9E%81%02%12%3A%C0F%27%9A%24%8FH%20x%BC%91E%D0%11%0D%C0%40%04%12L%40%81%F4%17d%80%01%B7%2A%02P%C2%1E%89%08%A2G%1Cgp%21%C5%11%274%CF%90%00%09p%C0%03%20%20%81%F4%D9%CE%02%0E%00Q%FC%00%20%00%1F%B8%21%0D_%A8B%12x0%83%14%7C%00~%09%09%C0%01%1A%D0%00%01B%20%02%E8%A3%80%03%B4%B6%40%82%2C%60%07K%00%82%0DV0%02%0E%5C%E0%01%0C1%1F%03%3A%E8%C1%088%C0%7F%254%88%03LP%02%0F%60%40%02%FE%23%8C%E1%02fHC%07%FC.%87%19d%C0%04%1E%C0%80%23%26d%00Cd%80%14%9D%88D%85%08%C0%00TD%C8%00%14%B0%80%21B%A9%8A%1F%D9%22%17%17%F0E0vD%8C%5D%2C%A3%1972%80%04%24%C0%8Bk%3Cc%02%B8%C8%80%A7%C5Q%23m%7C%E3%02%ECxG%8C%00p%8E%7B%EC%A3F%FE%C8E%3E%0A%B2%22%02%40%00%02%14%A0%80%8A%1D%D2%22%89D%80%1B%1D%F9H%8ADR%92%94%AC%A4D.%89%80%2Cj%F2%40%078%80%22%3D%F9%C9%FF%85R%94%A4%2C%A5%15%0D%10%CAN%AAr%93XD%E5%2B%23%22%80%02%B0%F2%008%9B%E5Cj%19%CB%5C%EA%B2%21W%BC%A5%2F%7F%B9%90%00%D8%12%8B%C3%24f%06%8Fi%00%1C%2A%F3%20%C6%2C%80-%9D%F9%CC%82%04%80%00%D2%2C%005%AB9%90kfs%9B%DC%04%C05%B1%A9%CDp%22d%9C%D2%04%277%C7%89MuV%93%9D%E54%A7A%E0%E9%CEg%B2%93%00%24%C1%94%A7%40%EE%99O%7D%F2S%9F%D6%1C%00%01%06%DAOy%06%60%00%02%C5%27%40%09r%D0%84%16%D4%9C%0D%15%E8C%C3%19Q%85.t%9F%08%CD%E8E1%9AQ%C8%5D4%A2%03%F0%E8B%03%20%80%8EnT%9C%25E%A8H%01J%D2%8C%BAt%A0%03%CD%A64%B1h%80c%CA%14%9F%2A%15%40%00v%AA%C0%05%924%A5%2F%85%299e%AAM%98%22%14%9F%02H%2AO%C5%C9%D4%1C%FE4%A9.M%A8P%C9i%D4%A4ZU%A7%3B%ED%E3S%A3%9AQ%82J%15%A9%21U%AAY%B2%AA%D5%ABv%94%ABQ%D5%A9Z%B1z%D2%B6%BA%F5%ADp%8D%AB%5C%E7J%D7%BA%DA%F5%AEx%CD%AB%5E%F7%CA%D7%BE%FA%F5%AF%80%0D%AC%60%B9%19%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%03%DC%B8%A3%05%02R%99%28%DA%FC%11D%28%10%14%03O%5BZ%E0%B2%87%8F%9F%40%82%0A%1D%F2%E3%23%40V%94%0D%98%D0%B9%93%C7%2BXB%86%10%29%92%F3%E1%2CI%03%3F%DA%C8%A9%C3v%8F%1F%40T%E3%2Ab%C4%E8%CB%02%BB%1F%05%BC%20%D3%06%8E%9C%B5y%F6%F4%C9%F3g%90%D8D%8B%1A%3DB%24%C4%2Cb%8D%1C%AE%A0Q%D3%E6%CDc%3Bx%EC0I%60%01%8DXD%99%1DA%8A%A4%27%C4%E7%8B%13%96%88%21s%26%CD%1A7%8E%E7%40i%40%90%86%1F%D8%8C%1C%3D%8A4i%12%19%05%B7%25%2A%C0%B1%C5K%182f%7C%97%9E%22%E1%A0%82%2C%88%18%FEi%8E%24%89R%A5FG%A2%3B%24%B0b%0A%96%EAa%C6%98%19%5D%E5%C2B%10u%1A%C9%964%A9%D2%A5L~%80%A0%5EB%01%84%B0%C4%14U%5C%A1E%17%60%88Q%C6%14%198%24%40%12%88%2C7%09%25%96%60%A2%09%26%60%1C0%60A%13%F8%C0%C4%13R%24%A8%05%17%5EXA%82D%10%A0%C1%1C%86%FFm%C2%C9%23%3C%7C%08%40%032%1C%A1%C4%12NDA%85%15YX%E1%C2%00%15%B1%10%88y%FFi%22%A3%27%7Dh%10%DD%01%26%001D%11I%2C%D1%04%14RPA%03V%17%11%F0%04%24%19%2A%C9I%27%9Fp2%06%97Y%0D%D0%01%0E%3C%FC%20D%11HX%09%05%0E%0Cp%94%81%1D%97%88%D9%89%27%A0%84%22%89%0EO%05%40%C1%0B6%E4%C0%83%0FA%10%A1%23%0F%13%80%A4%03%23%9Bl%B2%E7%27%A0%882J%20%11%16%F5%00%0A0%CC%60%03%0E%3B%F8%20%E5%0E%F6%89%94%00%19%99p%E2%09%A5%A1X%EA%89%16%FED%06%85%C0%07%2B%B8%D0%E9%A7%3A%F4%B0%C3%07%02%98%E4%C1%1F%7B%F6i%29%29%A5D%12%C3O%04%5CpB%0A%B5%C2%20C%0D7%E0%20%02%01%29%05%A0D%25%AC%8EBl%29%A5%F0%11%C1N%01%40%10%02%09%26%A0%B0B%0B%2F%C40%03%09%1E%B2%D4%C0%1A%9F%B4%3A%0A%B7%A6%9C%E2%89%1491%C0A%08%22%90%8B%82%0A%2C%B8%60B%9D0%A5%A0%C8%B0%A5%D4%7B%0A%2A%8C%94P%13%02%17p%F0%01%BF%23%94p%82%0A%258%40%D3%00YtB%AC%C2%A8%A4b%8A%1Ah%BAD%40%04%19l%D0%81%07%20%88P1%09%13xVS%05x%24%7C%CA%C2%A9%A8%A2%0A%27A%B8%24%40%03%17%5C%80%81%06%1C%B0%CC%AF%05%B1%E6d%03%25%F5%86%9C%F3%2A%AC%24%E2d%B5%08H%40A%05Bk%A0%F2%07%16%14%E0%13%01%5C%88%E2%B4%2A%AB%40%5DJ%18I%DF%E5%40%04V%5B%20t%06%1AX%D0.P%1E%1426%D4%AC%B4r%89%FE%0C%24%0D%B0%C0%03%10%B0%7D%B5%D0%16%40W%14%11%9C%E8%8Cw%2B%8C%F3A%5Cb%070%D0%80%03%10%40%20%C1%04%15T%C0%80%CCE%25%90%06%2Ae%B3%92w%2B%AE%90bEG%01%18%B0%C0%02%92%3B%008%DB%0D%F4z%D6%08%8C%2CN%BA%2B%AFD%E2pF%04%28%B0%BA%E4%93%BB%DE%40%DAg%050%85%28%A3%BB%82%FB%2B%AC%B81%F7D%03%1C%A0%80%EF%AC%B7%DE%80%D7%03%3EPG%DE%CA%BF%F2%0A%2C%B0%80%22%C4D%02%18%80%00%02%09L%EF%3B%03%0C%94%FC%E1%0B%95%90%EE%FD%F7%B0%C4%82H%05%0F%05%40%C0%01%E7%A3%9F%BE%EF%07%E0%9C%8D%00%40%800%A0by%E0%8BE%2CTA%06%E2%1Dd%00%050%80%01%F8w%BE%F4%05p%80%08%C9%40%21%BC%07%BE%FA%C5%02%14%CF%3BH%00%0A%40%C2%09R%F0%00%B2%C3%60Bz%D0%09%FA%D5%0F%08%0C%19a%09%0Fp%00%038P%85%079%40%1BX%01%3E%404D%86%FE%12%B4%21%0E%21%22%82F%84%E2q%0B%91%21%09%A95%C4%88P%C0%21J%2C%00%13%9B%E8%11%FD%95p%8AT%E4%88%FE%08%10A%ECeQ%8B%04%E0%A2%01%B0%F8%C5%8Cl1%82d%2C%E3E%CE%28E5n%84%8Dit%23E%B6%C8%C58%CAQ%22tl%E3%1D%D7%18%C6%3A%EE%91%8Fa%D4%E3%1F%E7%D8GA%0E%12%8F%85%B4%E3%21c%D8G%02%DCp%91%8Cl%24%24%11%D9%C7GN%92%40%8D%B4%E4%25E%98%C9M%E6o%00%95%F4%24%14A%19FM%8Ar%20%01%20%A5%23O%19%C3%01%90%D2%94%ACL%E5%2BY%99DW%82%12%96%A7%94%A5-i%A9%10%5D%BA%92%97%04%B2%E5%2F%81%29Ba%E2R%94%BE%3C%A6%27%7D%99Bb%12D%96%02%18%403%9D%29%90%00%08%E0%9A%D2%A4fA%ACyM%01%08%90%9A%DC%BC%E67%9D%19Noj%F3%99%DD4%E79%AB%E9%CD%00%B8s%9D%A8t%E78%C1YMx%DA%F3%9E%F8%27%CC%A7%3E%F7%C9%CF~%FA%F3%9F%00%0D%A8%40%07J%D0%82%1A%F4%A0%08M%A8B%17%CA%D0%86%3A%F4%A1%10%8D%A8D5%12%10%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%3F%03%8C%A8%D2C%01R%99%19%96p%F1%12%06%CC%0D%02O%5B%3A%E0a%25%CB%16%AAd%CC%80Y%915%25%02%18Q%A6t%FD%1A%86%CC%994k%B0X%28K%92%80%89%24N%D2%AE%05%FBv%8D%9B7I%10%D0%FD%18%60%C3%8F%24K%F2%AA%CD%C2%25%0B%98%B0p%DB%C0%91%D3FF%80%C1%1B%21%CC%10R%04Ib%BDVf%18x%D0%C4%0C%5C7p%E6%D4%B9C%26%03%E6%8B%0BV%F0%F8%C1%D9s%5E%295%12%10%2C%11f%8Dd9%AB%F3%EC%91%22%F8u%C4%02%1Fn%E8%98-%C4%08b%267%18%1C%3C%20%E4wp%3E~%EE%E00%EEP%00%86%174%94%FE%CF%1ER%24%C9%0D%07%0B1x%01~%27%0Fv%40%82%D6h%E0%9E0%80%84%14%2Fb%84%D7%D1%83v%0D%08%0E%05p%C3%1Bw%E8%81%5D%20%82%14B%88%14%06%D0W%90%02%22%AC%D0%C2%0B2%D4%A0%5C%0F6%CC%15%11%03T%B8%F7G%20%83%14rH%22~%C8%E0%20%00%07l%60%02%0A%2B%B8%00C%858%D8%C0%81%00%15%89%D0%C6%87%21%8E%B8H%23oh%88%19%01%15%8CP%C2%09%29HH%E1%0C%1F%60u%D1%00%40%F0%91%23%22%3B%3A%C2%C8%15%05%D0%25%00%04%1F%880%02%09%26%14%D9%02%0C%21%1C%C0%11%05f%88%88%88%22%8C8%02%89%24%84%CC%90%95%02%1Ax%00B%08B%9E%80%82%0A%23%2C%00%D2%0B%7B%40%D9%88%9A%92LR%89%1D%3E%0E%85%40%05%1Al%D0%C1%07tr%29B%03%23%21%60E%22%7F%AEII%25%97L%22%05%8DA%11%10%C1%05%19%24%BA%28%08%23%84%20%C1e%25e%20%07%A0%97%5E%92%89%26%FE%87%B0%F0%93%00%0BP%60%01%A8%1Ap%D0%81%07%1FL%C0%E9I%01%00%81H%A0%98%BE%BA%C9%26t%3C%B0S%00%08%400%81%AD%B8%EAZ%81%92%2B-%10%86%24%95Xb%2C%27%9ET%C2DN%A3E%20%C1%B3%15%E0j%81%980%91%F0%87%AB%9Al%D2%89%27%9F%80R%88%085%11%B0%C0%03%10D%10%C1%B3%B7VP%9CL%03H1I%BB%EF%C6%1B%CA%27d4%08%93%00%094%E0%80%03%10%E4%FB%2C%05%0B%A0Z%D3%04pl%C2m%BC%A2%8CBJ%25%3D%B8%14%C0%01%0B0%C0%80%03%F8%8A%3B%01%03%BF%E2%24%03%23%F0%82%D21%29%A5%94B%08%06%2B%11%90%C0%02%25%9F%9Cr%03%03%F8D%80%15%9A%80%12%8A%C75%9B%12%8A%17A%9B4%00%02%09%28%C0%B3%C9%0D%3C%C0%00%B5%3Fm%F0G%28%A2%D0%5C%8A%29%A7%A02%09%0C%24%09%60%40%02h%2B%205%03%0D0%A00Q%3FT%E25%D8%A8%A4%82J%1E%90%12F%C0%FE%01%07%40%1D5%CF%0B%1C%60qQ%08%90%21%CA%D7a%A7%A2%8A%2A%A0P%E1%D1%00%06%18%C07%02P%AB-8%5D%21%1CB%B7%E2%AA%AC%C2%8A%23%24h%24%40%01%05D.9%E5%09%1C%D0rY%01%40%E1I%DD%8B%7B%CEJ%2Al%A0KQ%00%03%10%40%BA%E4%7DS%DE4w%0F%C8%81J%E7%B2%B7%D2%8A%27%40L%84%3B%01%CC%93%5E%3A%DF%BF%9F%D8%82%24%AB%14%DF%8A%2B%AE%1CR%01D%020%EF%BD%F3%06%60%7D%A2%40%04%7CQ%0A%2B%AC%18%EF%CA%2B%AF%A42F%F4%08%090%40%EE%DF%93N%C0%E0%E3%13%84%C1%20%E9%AB%FF%0A%2C%9F%B0%1DBp7%3F%EF%E9%EE~%F9%5B%08%0F6%E1%BFW%FC%80%21%04%A4%1F%01%06%B0%BA%04%22%E4%00kX%C5%FA%00%D1%10%02z%AF%82%16TH%08%1A%11%8A%BC-%24%82%13%0C%A1D%B6%D7%C1%F9%E5%0E~%2A%DC%08%0Aa%18%C3%8C%CC%B0%86%1E%B9%21%0E9%A2%C3%1Dj%A4%87%A7%3E%C4%08%10%83h%91%21%12%F1v.%9C%DF%11%85%98D%10.%11%22%11T%E2%13%2B%12E%1AN1%40I%B4%E2%15%21%98%C5-%2A%AF%8B%5E%8CH%00%04%20%3F%0A%86Q%8Cd%9C%9F%13%CF8%402%CAo%8Dl4%C8%18%DD%88%BF8%D6%C7%8D%02%A8%A3%1D%DBHF%3D%EEQ%8E%01%18%A3%1F%FFH%90%CB%04r%90%84%2CH%20%13%C9%C8F%3A%F2%91%90%8C%A4%24%27I%C9JZ%F2%92%98%CC%A4%267%C9%C9Nz%F2%93%A0%0C%A5%28GI%CAR%9A%F2%94%A8L%A5%2AW%C9%CAV%BA%F2%95%B0%8C%A5%2CgI%CBZ%DA%B2%86%01%01%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%40%27%BC%10a%00%A9%CC%06%29f%D8%C8%81%E3%83%00%A7-%0F%80x%11%83%C6%0D%1D%3C%7C%E8%C8%805%25%81%0C%2A%5C%C0%90Q%E3%2B%8F%1FB%8A%DCpP%96%A4%80%09%25R%B0P%3B%A3%06%0E%1D%3D%80%0C1%A2dI%8B%02u%3F%06p%10%C2%04%0A%15-%B8J%AD%01%18%08%91%23J%98%3CY%02%221G%04%1BF%940%91bE%E4%182%3A%10H%E0%22%C8%E5%25M%A0H%A9B%24%82%E7%8B%06.%84%08%21%FA%F1%0A%17%2F%3C%20%1Eh%01H%92%25N%A2L%B1%82E%0B%8E%A6%B7%23%0E%88%E0%01D%08%11%24L%9C%80%FC%E1%C0A%02%2A%90%FEK%A1%C2%7C%8B%97%2C%27%A2%3B%0C%D0%20%03%87%EA%22D%9FH%01%02%C1%C2%07%3E%C6%5B%C9%C2%E5K%182QH%A0%9EB%0AX%90%C1%06%EF%81%80%5D%09%1E%24%B0%1E%09Q4%D7%C5%17b%94q%C6%19%3B%100%60A%05HpA%06%1A%20%08%DF%07%0DH%84%80%0E%E6%811%86%19h%A8%C1%06%19%25l%08%00%01%0EP%60%C1%87%1Ap%D0%C1%07%1E%40%10%40E%18H%F1%9F%19i%AC%D1%06%1Cr%60a%DBm%02%2C%20%C1%04%15X%80%C1%81%1Cp%20%C1U%17%09%D0%02%18D%B2%E1%06%92u%D0Q%84%86e%05%90%C0%03%11L%40A%05%17%60%10%E2%04dj%E4%80%13F%BE%11%C7%1Cu%E0%A1%C7%1B%28%60e%80%03%10D%F0%A4%8D%1FR%E0%DDG%23%8C%81%24%1Dv%E4%B1G%1F%7F%90%21%60Q%04%2C%E0%C0%03%81%0EZ%C1%04%F6%89d%C0%10p0%9A%07%1F~%00%22%C8%1FD%60%09%94%00%094%D0%C0%A5%FE%99R%40%81%02%3F%964A%17w%E8Aj%20%83%14rH%1D%24%FC%14%80%01%0B0%F0%EA%03%98%A6%C9%40%AD%27%05%20%C3%1C%90%F2%EAk%22%8A%98Q%E2N%05%28%B0%40%B1%C7%06%CA%C0%00-%25%10%85%1F%82%102%ED%22%8D%18%12DN%04%20%A0-%B7%C72%10%A7K%1D%B4A%88%21%88%24%82%EE%23%91%E0%E1AM%02%1C%80%40%02%0Ahk%AC%03%0D%0C%27%93%00D%04%82%88%22%8C8%C2%EF%24%91h%A1%B0K%01%14%80%C0%C6%04%1B%CC%C0%A16A%20%06%BA%8E%40%22%C9%24%95X%A2%88%0D%18%13%20%F0%C0%04o%BB%C0%01%CC%E2%A4B%1F%FCJBI%25%97d%A2%89%1E%16%AC%24%80%01%06%1C%20p%021%23%A0%EAN%030%C1%C8%24%94X%D2%F3%26%9CXb%C5%D2%23eL%B4%D1G%2B%80%00%B8Aa%40G%CA%98hBu%27%9F%2C%C2%02I%01%0CP%C0%DBE%BF%8C%C0%BCB%E1%A0%88%CFT%7B%F2%09%FE%28%A0%C8%C1%00Hm%13%40%C0%DB%05p%3D%B7S%07tqI%DE%7B%87%22J%26Ox%24%80%E0%82%C3m4%015%23%E5%C1%1F%9D%E8%0D%8A%E3%A3%94%82%88%08%1A%05%40y%E5p%17%909V%01%28Q%C9%E7%A2%8CBJ%29%A6%8C%82%06t%14%B5%3D%C0%E9%84%13%80%B5g%0E%B0%01J%EC%B3%9Br%0A%2A%98%F40Q%00%02%0C%E0%3C%EF%05%FC%AE%9E%0A%8C%CCN%FB%F1%A8%A4%22%08%05%10%E9%EE%FC%F3%82%83-%23A%03h%F1%C9%F5%D9%AB%A2J%29%60%88%9F%10%F3%DF%C7O%C0%00%AB%8F%2F%D0%05~%18%9F%7D%2A%AA%AC%B2%09%EE%08a%5E%F3%E2%E7%BC%FA%D9%8F%209%B0D%FAV%B1%0A%E5-D%80%03%2C%E0%01%1Br%804%98%A2%7F%7Ch%88%00%BFg%C0%09%22%04%04%89%E8%C4%B5%1E%28%80%12%96%D0%83%12%E1%9E%06M%28%80%0E%A2%F0%22%10l%E1%0B%15%C3B%17%CE0w5%BC%A1G%02%C0C%19%EA%90%23i%3Cd%9E%0D%7F%28%91%20%0E%91%88E%3C%22%12%23%A2%C4%25%3A%F1%89P%8C%A2%14%A7H%C5%2AZ%F1%8AX%CC%A2%16%B7%C8%C5.z%F1%8B%60%0C%A3%18%C7H%C62%9A%F1%8ChL%A3%1A%D7%C8%C66%BA%F1%8Dp%8C%A3%1C%E7H%C7%3A%DA%F1%8Ex%CC%A3%1E%F7%C8%C7%3E%FA%F1%8F%80%0C%A4%20%07I%C8B%1A%F2%90%88L%E4%15%03%02%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3%40%3Bdy%02%01%A9%CC%05%2F%9A%8C%B9CH%CB%01%A7-%07H0%81C%EA%1DD%95%28E%09%80%15e%00%03%102p%F5%0A%16%D4%A9G%2C%CA%96%14%60%40A%DA%B5S%DB%9Ej%E5jOS%B9%1F%03%0C%20P%F7nW%2Fu%F4%B6%82%25K%95%16%B2%807%06%100%B8%B0Z%1B%2A%0EPhS%C9%EDbY%B4jaj%11%19c%80%D3%94%09%DB%CDp%A1%00A%1F%97%F62%0E%5D%8BV%1F%07%A5%2B%9E%9E%5CY%C1%82%01%07%1B%C8Y5%BBV-%5B%B6%1C%E7%9E%B8%3B5%01%01%0B%5D%5C%02m%1C9%F2K%29%96Cl.%002%C3%01dZ%FEU%B7nk%16%9D%04%DA%1B%EE%F6%FE%10%C3%A1%E3%E4%91%9BZ%92~%21%FB%89%3FD%C5%B7%1E%09D%FD%90%05%9C%01%CB~%B6%C82%C7U%FF%7D%24%82%24%04%DAR%8A%11%09%82%C4%04%2A%0DF%D2A%84%1E1%A0%07-%04%BEb%06p%18rd%82%25%0D%82%82C%88%1C%05%A0%05%2B%04%D6%82%C8%04%28n%04%81%1F%F0%C5%B7%8A%161n%24C%27%0Db%97cF%04%08H%A0%2Cr%20%F8%A3E%19%20%D2%A0%29G%1C%89%11%10%A3T%C8%81%93%16%05%18K%87g%80H%E5D%0B6%F8%89%0D%5BV4a%8B%82%E0%16%A6D%0A%CC1%0B%817%9E9%D1%09%24%12h%C9%09nF%A4%22%8B%FB%19hd%9D%0DE%40%23%81%A5%14%C1%27D3%F0H%20%23%16%0C%EAP%90%03%EE%F7J%96%8A6%B4%01%23%04%92%B2g%A4%0A%05%11%25yC%60%FA%10%02r%C8%82%5C%21%9EFD%02%25%A8%98Y%2AD%89%AE%EA%EA%ABN%B0%C6%2A%EB%AC%B4%D6j%EB%AD%B8%E6%AA%EB%AE%BC%F6%EA%EB%AF%C0%06%2B%EC%B0%C4%16k%EC%B1%C8%26%AB%EC%B2%CC6%EB%EC%B3%D0F%2B%ED%B4%D4Vk%ED%B5%D8f%AB%ED%B6%DCv%EB%ED%B7%E0%86%2B%EE%B8%E4%96k%EE%B9%E8%A6%AB%EE%BA%D9%06%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9D%CA2%00%D5%95%01%AC%5E%3D%99%B5%EB%D6%92%5D%05%0C%200%E0k%C8%B0b%09%18%40%40%C0%EC%C7%ACi%0B%20%60%20AB%01%B7%1D%03%0C%18P%E0%80%82%07%17B%B0%00%21%00%2F%C7%01%06%124%98%C0%01%C5%0D%25RB%18%DE%28%40%01%04%0C%22b%08%A9r%06%0F%9A%0A%933%06X%D0A%85%0E%26_%E2%04r4%E9J%D9%D0%17%0B%98%28rE%8D%1ED%94%3C%95%AAD%036F%0F%5B%E8%08z%A4I%14%AAV%AF%08M%F0m%F1%00%94D%96%3E%99Z%E5%2A%D6%ACTZ%98%5B%1CQhT%AAV%B0d%FE%CD%A2U%EBR%0A%ED%14%07t%29%F5J%3C%F9Z%B6d%C99%80~%E2%85A%B2%DE%C3%B7e%CB%D4%91%FA%13%F9%20J-%FB%F1%C7_%24%1C%00%18Q%01f%C4b%E0%83%AF%9C%F1%9A%82%0E%89%20%C9%83%0F~b%03%85%101%81%0A%86%FC%D5%22%88%03%1C%3A%A4%C0%1C%B3%80h%CB%2A%D9%95%D8%D0%09%96%A8h%8B%25%27%B8%C8P%00Z%B0%A2%A2%2Cs%D0g%A3B%11%F8Q%E0%83%A5%14%F1%E3B3t%22%23%23%16%1C%99%10%01g%C0%A2b%84%13%3AY%D0%06%8C%A8H%8A%8FV%1E%14%C4%28%18%0E%D1%A5B%08%C8%21%0B%7F%85%8C%C9%10%09%94%A0B%A2%9A%0C5%09%E7%9Ct%D6i%E7%9Dx%E6%A9%E7%9E%7C%F6%E9%E7%9F%80%06%2A%E8%A0%84%16j%E8%A1%88%26%AA%E8%A2%8C6%EA%E8%A3%90F%2A%E9%A4%94Vj%E9%A5%98f%AA%E9%A6%9Cv%EA%E9%A7%A0%86%2A%EA%A8%A4%96j%EA%A9%A8%A6%AA%EA%AA%AC%B6%EA%EA%AB%03%0E%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%FE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%ACY%AD%01%02%9C%B5%98%B6%AD%DA%B5%0F%DD%A6%15%40%17n%DC%B9%02%06%0C%20P%60%80%DD%86%01%F2%EA%E5%7B%00A%02%BF%7F%15%06%D8%5B%C0%00%02%05%0D%20Pp%20%20%B1%C2%01%07%120x0%01C%07%12%28%28XN%28%40%81%04%0B%1CD%A8%90%C1%E3%88%8F%07%A3%11%2A%E8p%02F%0E%22O%B2%90YC%84%40l%83%03%3E%00Yb%25%CC%9A%3A~%0C%FD%91%F1%DB%60%84%26i%E4%EC%21%C4H%12%26O%7B%264%27%28%80G%9FD%91%2C%84q%0AU%0A%15%A90%88%B7%03%90%00g%13%28R%A7T%B1r%F5%E9%80z%826%28%A5%9A%0F%2BV%90%FB%05%1D%C0%06%2B%B1%C82%08%80%07%8D%10I%29%0E%20%88%90%05%0EF%28%E1%84%14Vh%E1%85%18f%A8%E1%86%1Cv%E8%E1%87%20%86%28%E2%88%24%96h%E2%89%28%A6%A8%E2%8A%2C%B6%E8%E2%8B0%C6%28%E3%8C4%D6h%E3%8D8%E6%A8%E3%8E%3C%F6%E8%E3%8F%40%06%29%E4%90D%16i%E4%91H%26%A9%E4%92%40%05%04%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%21%F9%04%01%04%00%FF%00%2C%00%00%00%00%80%00%80%00%00%08%CE%00%01%08%1CH%B0%A0%C1%83%08%13%2A%5C%C8%B0%A1%C3%87%10%23J%9CH%B1%A2%C5%8B%183j%DC%C8%B1%A3%C7%8F%20C%8A%1CI%B2%A4%C9%93%28S%AA%5C%C9%B2%A5%CB%970c%CA%9CI%B3%A6%CD%9B8s%EA%DC%C9%B3%A7%CF%9F%40%83%0A%1DJ%B4%A8%D1%A3H%93%2A%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%8A%1DK%B6%AC%D9%B3h%D3%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3%EA%DD%CB%B7%AF%DF%BF%80%03%0B%1EL%B8%B0%E1%C3%88%13%2B%5E%CC%B8%B1%E3%C7%90%23K%9EL%B9%B2%E5%CB%983k%DE%CC%B9%B3%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%5E%CD%BA%B5%EB%D7%B0c%CB%9EM%DBk%40%00%3B";
16969
17147
 
16970
17148
  // src/components/HbLoadingSpinner.tsx
16971
- import { jsx as jsx151, jsxs as jsxs71 } from "@emotion/react/jsx-runtime";
17149
+ import { jsx as jsx155, jsxs as jsxs73 } from "@emotion/react/jsx-runtime";
16972
17150
  function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }) {
16973
17151
  const ctx = useContext17(HbLoadingSpinnerContext);
16974
17152
  const tid = useTestIds({}, "hbSpinner");
16975
- const quip = useMemo38(() => {
17153
+ const quip = useMemo39(() => {
16976
17154
  const allQuips = extraQuipsOnly && extraQuips.length !== 0 ? extraQuips : [...ctx.quips, ...extraQuips];
16977
17155
  const forceQuips = extraQuips.length !== 0 || noQuips === false;
16978
17156
  if (ctx.noQuips && !forceQuips || noQuips || allQuips.length === 0) return "Loading...";
16979
17157
  return allQuips[Math.floor(Math.random() * allQuips.length)];
16980
17158
  }, [ctx.noQuips, ctx.quips, extraQuips, extraQuipsOnly, noQuips]);
16981
- return /* @__PURE__ */ jsxs71("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
16982
- /* @__PURE__ */ jsx151(
17159
+ return /* @__PURE__ */ jsxs73("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
17160
+ /* @__PURE__ */ jsx155(
16983
17161
  "img",
16984
17162
  {
16985
17163
  src: HbLoadingSpinner_base64_default,
@@ -16992,7 +17170,7 @@ function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }
16992
17170
  ...tid.gif
16993
17171
  }
16994
17172
  ),
16995
- !iconOnly && /* @__PURE__ */ jsx151(
17173
+ !iconOnly && /* @__PURE__ */ jsx155(
16996
17174
  "div",
16997
17175
  {
16998
17176
  "data-chromatic": "ignore",
@@ -17012,63 +17190,28 @@ var HB_QUIPS_MISSION = [
17012
17190
  "In Service of Our Customers"
17013
17191
  ].map(dotDotDot);
17014
17192
  var HB_QUIPS_FLAVOR = ["HOM is HOW", "Scaling Massively", "#LoveIt"].map(dotDotDot);
17015
- var HbLoadingSpinnerContext = React19.createContext({
17193
+ var HbLoadingSpinnerContext = React20.createContext({
17016
17194
  quips: ["Loading..."],
17017
17195
  noQuips: false
17018
17196
  });
17019
17197
  function HbSpinnerProvider({ quips = [], children }) {
17020
- const state = useMemo38(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17021
- return /* @__PURE__ */ jsx151(HbLoadingSpinnerContext.Provider, { value: state, children });
17022
- }
17023
-
17024
- // src/components/LoadingSkeleton.tsx
17025
- import { jsx as jsx152 } from "@emotion/react/jsx-runtime";
17026
- function LoadingSkeleton({
17027
- rows = 1,
17028
- columns = 1,
17029
- size = "md",
17030
- randomizeWidths = false,
17031
- contrast = false
17032
- }) {
17033
- const cellArray = [...Array(columns)];
17034
- const rowArray = [...Array(rows)];
17035
- const rowHeight = sizeToPixels2[size];
17036
- const rowCells = (rowNumber) => {
17037
- const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;
17038
- return cellArray.map((_, i) => /* @__PURE__ */ jsx152(
17039
- "div",
17040
- {
17041
- css: Css.br4.add("animation", "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite").add("flexGrow", flexGrowForCell).bgGray300.if(contrast).bgGray700.$
17042
- },
17043
- `row-${rowNumber}-cell-${i}`
17044
- ));
17045
- };
17046
- return /* @__PURE__ */ jsx152("div", { "aria-label": "Loading", children: rowArray.map((_, i) => /* @__PURE__ */ jsx152("div", { css: Css.df.gap1.mb1.hPx(rowHeight).$, children: rowCells(i) }, `row-${i}`)) });
17047
- }
17048
- function getRandomizedFlexBasisByRowIndex(rowIndex) {
17049
- const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];
17050
- const valueIndex = rowIndex % randomizedFlexBasisValues.length;
17051
- return randomizedFlexBasisValues[valueIndex];
17198
+ const state = useMemo39(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17199
+ return /* @__PURE__ */ jsx155(HbLoadingSpinnerContext.Provider, { value: state, children });
17052
17200
  }
17053
- var sizeToPixels2 = {
17054
- sm: 16,
17055
- md: 24,
17056
- lg: 32
17057
- };
17058
17201
 
17059
17202
  // src/components/MaxLines.tsx
17060
17203
  import { useLayoutEffect as useLayoutEffect2, useResizeObserver as useResizeObserver5 } from "@react-aria/utils";
17061
- import { useCallback as useCallback21, useEffect as useEffect26, useRef as useRef49, useState as useState38 } from "react";
17062
- import { jsx as jsx153, jsxs as jsxs72 } from "@emotion/react/jsx-runtime";
17204
+ import { useCallback as useCallback21, useEffect as useEffect27, useRef as useRef49, useState as useState39 } from "react";
17205
+ import { jsx as jsx156, jsxs as jsxs74 } from "@emotion/react/jsx-runtime";
17063
17206
  function MaxLines({ maxLines, children }) {
17064
17207
  const elRef = useRef49(null);
17065
- const [hasMore, setHasMore] = useState38(false);
17066
- const [expanded, setExpanded] = useState38(false);
17208
+ const [hasMore, setHasMore] = useState39(false);
17209
+ const [expanded, setExpanded] = useState39(false);
17067
17210
  useLayoutEffect2(() => {
17068
17211
  if (!elRef.current) return;
17069
17212
  setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17070
17213
  }, []);
17071
- useEffect26(() => {
17214
+ useEffect27(() => {
17072
17215
  setExpanded(false);
17073
17216
  }, [children]);
17074
17217
  const onResize = useCallback21(() => {
@@ -17076,14 +17219,14 @@ function MaxLines({ maxLines, children }) {
17076
17219
  !expanded && setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17077
17220
  }, [expanded]);
17078
17221
  useResizeObserver5({ ref: elRef, onResize });
17079
- return /* @__PURE__ */ jsxs72("div", { children: [
17080
- /* @__PURE__ */ jsx153("div", { ref: elRef, css: Css.if(!expanded).lineClamp(maxLines).$, children }),
17081
- hasMore && /* @__PURE__ */ jsx153("button", { css: Css.db.smMd.$, onClick: () => setExpanded((prev) => !prev), children: expanded ? "Show Less" : "Show More" })
17222
+ return /* @__PURE__ */ jsxs74("div", { children: [
17223
+ /* @__PURE__ */ jsx156("div", { ref: elRef, css: Css.if(!expanded).lineClamp(maxLines).$, children }),
17224
+ hasMore && /* @__PURE__ */ jsx156("button", { css: Css.db.smMd.$, onClick: () => setExpanded((prev) => !prev), children: expanded ? "Show Less" : "Show More" })
17082
17225
  ] });
17083
17226
  }
17084
17227
 
17085
17228
  // src/components/Pagination.tsx
17086
- import { jsx as jsx154, jsxs as jsxs73 } from "@emotion/react/jsx-runtime";
17229
+ import { jsx as jsx157, jsxs as jsxs75 } from "@emotion/react/jsx-runtime";
17087
17230
  var defaultPage = { offset: 0, limit: 100 };
17088
17231
  function Pagination(props) {
17089
17232
  const { totalCount, pageSizes = [100, 500, 1e3] } = props;
@@ -17103,9 +17246,9 @@ function Pagination(props) {
17103
17246
  }
17104
17247
  }
17105
17248
  const tid = useTestIds(props, "pagination");
17106
- return /* @__PURE__ */ jsxs73("div", { css: Css.df.bcGray200.bt.xs.gray500.px2.pt2.$, ...tid, children: [
17107
- /* @__PURE__ */ jsx154("div", { css: Css.df.mya.mr2.$, ...tid.pageSizeLabel, children: "Page size:" }),
17108
- /* @__PURE__ */ jsx154("div", { css: Css.wPx(78).$, children: /* @__PURE__ */ jsx154(
17249
+ return /* @__PURE__ */ jsxs75("div", { css: Css.df.bcGray200.bt.xs.gray500.px2.pt2.$, ...tid, children: [
17250
+ /* @__PURE__ */ jsx157("div", { css: Css.df.mya.mr2.$, ...tid.pageSizeLabel, children: "Page size:" }),
17251
+ /* @__PURE__ */ jsx157("div", { css: Css.wPx(78).$, children: /* @__PURE__ */ jsx157(
17109
17252
  SelectField,
17110
17253
  {
17111
17254
  compact: true,
@@ -17117,15 +17260,15 @@ function Pagination(props) {
17117
17260
  ...tid.pageSize
17118
17261
  }
17119
17262
  ) }),
17120
- /* @__PURE__ */ jsxs73("div", { css: Css.mla.mya.df.$, children: [
17121
- /* @__PURE__ */ jsxs73("div", { css: Css.df.mya.mr2.$, ...tid.pageInfoLabel, children: [
17263
+ /* @__PURE__ */ jsxs75("div", { css: Css.mla.mya.df.$, children: [
17264
+ /* @__PURE__ */ jsxs75("div", { css: Css.df.mya.mr2.$, ...tid.pageInfoLabel, children: [
17122
17265
  first,
17123
17266
  " ",
17124
17267
  showLast ? `- ${last}` : "",
17125
17268
  " of ",
17126
17269
  totalCount
17127
17270
  ] }),
17128
- /* @__PURE__ */ jsx154(
17271
+ /* @__PURE__ */ jsx157(
17129
17272
  IconButton,
17130
17273
  {
17131
17274
  icon: "chevronLeft",
@@ -17135,7 +17278,7 @@ function Pagination(props) {
17135
17278
  ...tid.previousIcon
17136
17279
  }
17137
17280
  ),
17138
- /* @__PURE__ */ jsx154(
17281
+ /* @__PURE__ */ jsx157(
17139
17282
  IconButton,
17140
17283
  {
17141
17284
  icon: "chevronRight",
@@ -17164,8 +17307,8 @@ function toPageNumberSize(page) {
17164
17307
 
17165
17308
  // src/components/ScrollShadows.tsx
17166
17309
  import { useResizeObserver as useResizeObserver6 } from "@react-aria/utils";
17167
- import { useCallback as useCallback22, useMemo as useMemo39, useRef as useRef50, useState as useState39 } from "react";
17168
- import { jsx as jsx155, jsxs as jsxs74 } from "@emotion/react/jsx-runtime";
17310
+ import { useCallback as useCallback22, useMemo as useMemo40, useRef as useRef50, useState as useState40 } from "react";
17311
+ import { jsx as jsx158, jsxs as jsxs76 } from "@emotion/react/jsx-runtime";
17169
17312
  function ScrollShadows(props) {
17170
17313
  const { children, xss, horizontal = false, bgColor = "rgba(255,255,255,1)" /* White */ } = props;
17171
17314
  const { height = "auto", width: width2 = "auto" } = xss ?? {};
@@ -17173,10 +17316,10 @@ function ScrollShadows(props) {
17173
17316
  if (!bgColor.includes("rgba")) {
17174
17317
  throw new Error("ScrollShadows: bgColor prop must be in the format 'rgba(255, 255, 255, 1)'");
17175
17318
  }
17176
- const [showStartShadow, setShowStartShadow] = useState39(false);
17177
- const [showEndShadow, setShowEndShadow] = useState39(false);
17319
+ const [showStartShadow, setShowStartShadow] = useState40(false);
17320
+ const [showEndShadow, setShowEndShadow] = useState40(false);
17178
17321
  const scrollRef = useRef50(null);
17179
- const [startShadowStyles, endShadowStyles] = useMemo39(() => {
17322
+ const [startShadowStyles, endShadowStyles] = useMemo40(() => {
17180
17323
  const transparentBgColor = bgColor.replace(/,1\)$/, ",0)");
17181
17324
  const commonStyles = Css.absolute.z3.add({ pointerEvents: "none" }).$;
17182
17325
  const startShadowStyles2 = !horizontal ? Css.top0.left0.right0.hPx(40).$ : Css.left0.top0.bottom0.wPx(25).$;
@@ -17201,15 +17344,15 @@ function ScrollShadows(props) {
17201
17344
  );
17202
17345
  const onResize = useCallback22(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
17203
17346
  useResizeObserver6({ ref: scrollRef, onResize });
17204
- return /* @__PURE__ */ jsxs74(
17347
+ return /* @__PURE__ */ jsxs76(
17205
17348
  "div",
17206
17349
  {
17207
17350
  css: Css.relative.oh.h(height).w(width2).df.fd(!horizontal ? "column" : "row").$,
17208
17351
  ...tid,
17209
17352
  children: [
17210
- /* @__PURE__ */ jsx155("div", { css: { ...startShadowStyles, opacity: showStartShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17211
- /* @__PURE__ */ jsx155("div", { css: { ...endShadowStyles, opacity: showEndShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17212
- /* @__PURE__ */ jsx155(
17353
+ /* @__PURE__ */ jsx158("div", { css: { ...startShadowStyles, opacity: showStartShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17354
+ /* @__PURE__ */ jsx158("div", { css: { ...endShadowStyles, opacity: showEndShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17355
+ /* @__PURE__ */ jsx158(
17213
17356
  "div",
17214
17357
  {
17215
17358
  css: {
@@ -17227,7 +17370,7 @@ function ScrollShadows(props) {
17227
17370
  }
17228
17371
 
17229
17372
  // src/components/Snackbar/useSnackbar.tsx
17230
- import { useCallback as useCallback23, useEffect as useEffect27 } from "react";
17373
+ import { useCallback as useCallback23, useEffect as useEffect28 } from "react";
17231
17374
  function useSnackbar() {
17232
17375
  const { setNotices, setOffset } = useSnackbarContext();
17233
17376
  const onClose = useCallback23(
@@ -17277,7 +17420,7 @@ function useSnackbar() {
17277
17420
  [onClose, setNotices]
17278
17421
  );
17279
17422
  const closeNotice = useCallback23((id) => onClose(id), [onClose]);
17280
- const useSnackbarOffset = ({ bottom }) => useEffect27(() => {
17423
+ const useSnackbarOffset = ({ bottom }) => useEffect28(() => {
17281
17424
  setOffset({ bottom });
17282
17425
  return () => setOffset({});
17283
17426
  }, [bottom]);
@@ -17288,7 +17431,7 @@ var snackbarId = 1;
17288
17431
  // src/components/Stepper.tsx
17289
17432
  import { useRef as useRef51 } from "react";
17290
17433
  import { useButton as useButton11, useFocusRing as useFocusRing14, useHover as useHover18 } from "react-aria";
17291
- import { jsx as jsx156, jsxs as jsxs75 } from "@emotion/react/jsx-runtime";
17434
+ import { jsx as jsx159, jsxs as jsxs77 } from "@emotion/react/jsx-runtime";
17292
17435
  function Stepper(props) {
17293
17436
  const { steps, currentStep, onChange } = props;
17294
17437
  if (steps.length === 0) {
@@ -17299,25 +17442,25 @@ function Stepper(props) {
17299
17442
  const maxStepWidth = 200;
17300
17443
  const minStepWidth = 100;
17301
17444
  const gap = 8;
17302
- return /* @__PURE__ */ jsxs75("nav", { "aria-label": "steps", css: Css.df.fdc.w100.$, ...tid, children: [
17303
- /* @__PURE__ */ jsx156("ol", { css: Css.listReset.df.gapPx(gap).$, children: steps.map((step) => {
17445
+ return /* @__PURE__ */ jsxs77("nav", { "aria-label": "steps", css: Css.df.fdc.w100.$, ...tid, children: [
17446
+ /* @__PURE__ */ jsx159("ol", { css: Css.listReset.df.gapPx(gap).$, children: steps.map((step) => {
17304
17447
  const isCurrent = currentStep === step.value;
17305
- return /* @__PURE__ */ jsx156(
17448
+ return /* @__PURE__ */ jsx159(
17306
17449
  "li",
17307
17450
  {
17308
17451
  css: Css.df.fg1.fdc.maxwPx(maxStepWidth).mwPx(minStepWidth).$,
17309
17452
  "aria-current": isCurrent,
17310
17453
  ...tid.step,
17311
- children: /* @__PURE__ */ jsx156(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton })
17454
+ children: /* @__PURE__ */ jsx159(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton })
17312
17455
  },
17313
17456
  step.label
17314
17457
  );
17315
17458
  }) }),
17316
- /* @__PURE__ */ jsx156(
17459
+ /* @__PURE__ */ jsx159(
17317
17460
  "div",
17318
17461
  {
17319
17462
  css: Css.mt1.bgGray300.hPx(4).maxwPx(steps.length * maxStepWidth + (steps.length - 1) * gap).mwPx(steps.length * minStepWidth + (steps.length - 1) * gap).w100.$,
17320
- children: /* @__PURE__ */ jsx156(
17463
+ children: /* @__PURE__ */ jsx159(
17321
17464
  "div",
17322
17465
  {
17323
17466
  css: Css.bgBlue600.add("transition", "width 200ms").h100.w(`${(lastCompletedStep + 1) / steps.length * 100}%`).$
@@ -17336,7 +17479,7 @@ function StepButton(props) {
17336
17479
  const { hoverProps, isHovered } = useHover18(ariaProps);
17337
17480
  const focusRingStyles2 = state === "error" ? Css.bshDanger.$ : Css.bshFocus.$;
17338
17481
  const tid = useTestIds(props, "stepButton");
17339
- return /* @__PURE__ */ jsxs75(
17482
+ return /* @__PURE__ */ jsxs77(
17340
17483
  "button",
17341
17484
  {
17342
17485
  ref,
@@ -17354,7 +17497,7 @@ function StepButton(props) {
17354
17497
  },
17355
17498
  ...tid[defaultTestId(label)],
17356
17499
  children: [
17357
- /* @__PURE__ */ jsx156("span", { css: Css.fs0.mrPx(4).$, children: /* @__PURE__ */ jsx156(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
17500
+ /* @__PURE__ */ jsx159("span", { css: Css.fs0.mrPx(4).$, children: /* @__PURE__ */ jsx159(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
17358
17501
  label
17359
17502
  ]
17360
17503
  }
@@ -17362,12 +17505,12 @@ function StepButton(props) {
17362
17505
  }
17363
17506
  function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = false }) {
17364
17507
  if (state === "error") {
17365
- return /* @__PURE__ */ jsx156(Icon, { icon: "errorCircle" });
17508
+ return /* @__PURE__ */ jsx159(Icon, { icon: "errorCircle" });
17366
17509
  }
17367
17510
  if (state === "complete") {
17368
- return /* @__PURE__ */ jsx156(Icon, { icon: "check" });
17511
+ return /* @__PURE__ */ jsx159(Icon, { icon: "check" });
17369
17512
  }
17370
- return /* @__PURE__ */ jsx156("div", { css: Css.wPx(24).hPx(24).df.aic.jcc.$, children: /* @__PURE__ */ jsx156(
17513
+ return /* @__PURE__ */ jsx159("div", { css: Css.wPx(24).hPx(24).df.aic.jcc.$, children: /* @__PURE__ */ jsx159(
17371
17514
  "div",
17372
17515
  {
17373
17516
  css: Css.wPx(10).hPx(10).ba.bw2.br100.add("color", "currentColor").if(isHovered || isPressed || isCurrent).add("backgroundColor", "currentColor").$
@@ -17377,7 +17520,7 @@ function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = fal
17377
17520
 
17378
17521
  // src/components/SuperDrawer/components/SuperDrawerHeader.tsx
17379
17522
  import { createPortal as createPortal5 } from "react-dom";
17380
- import { jsx as jsx157, jsxs as jsxs76 } from "@emotion/react/jsx-runtime";
17523
+ import { jsx as jsx160, jsxs as jsxs78 } from "@emotion/react/jsx-runtime";
17381
17524
  function SuperDrawerHeader(props) {
17382
17525
  const { hideControls } = props;
17383
17526
  const { sdHeaderDiv, drawerContentStack: contentStack } = useBeamContext();
@@ -17387,15 +17530,15 @@ function SuperDrawerHeader(props) {
17387
17530
  const isDetail = currentContent !== firstContent;
17388
17531
  const tid = useTestIds({}, "superDrawerHeader");
17389
17532
  return createPortal5(
17390
- /* @__PURE__ */ jsxs76("div", { css: Css.df.aic.jcsb.gap3.$, ...tid, children: [
17391
- isStructuredProps(props) ? /* @__PURE__ */ jsxs76("div", { css: Css.df.jcsb.aic.gap2.fg1.$, children: [
17392
- /* @__PURE__ */ jsxs76("div", { css: Css.fg1.df.aic.gap2.$, children: [
17393
- typeof props.title === "string" ? /* @__PURE__ */ jsx157("h1", { children: props.title }) : props.title,
17533
+ /* @__PURE__ */ jsxs78("div", { css: Css.df.aic.jcsb.gap3.$, ...tid, children: [
17534
+ isStructuredProps(props) ? /* @__PURE__ */ jsxs78("div", { css: Css.df.jcsb.aic.gap2.fg1.$, children: [
17535
+ /* @__PURE__ */ jsxs78("div", { css: Css.fg1.df.aic.gap2.$, children: [
17536
+ typeof props.title === "string" ? /* @__PURE__ */ jsx160("h1", { children: props.title }) : props.title,
17394
17537
  props.left
17395
17538
  ] }),
17396
- props.right && /* @__PURE__ */ jsx157("div", { css: Css.fs0.$, children: props.right })
17397
- ] }) : /* @__PURE__ */ jsx157("div", { css: Css.fg1.$, children: props.children }),
17398
- !hideControls && /* @__PURE__ */ jsx157("div", { css: Css.fs0.if(isDetail).vh.$, children: /* @__PURE__ */ jsx157(
17539
+ props.right && /* @__PURE__ */ jsx160("div", { css: Css.fs0.$, children: props.right })
17540
+ ] }) : /* @__PURE__ */ jsx160("div", { css: Css.fg1.$, children: props.children }),
17541
+ !hideControls && /* @__PURE__ */ jsx160("div", { css: Css.fs0.if(isDetail).vh.$, children: /* @__PURE__ */ jsx160(
17399
17542
  ButtonGroup,
17400
17543
  {
17401
17544
  buttons: [
@@ -17414,18 +17557,18 @@ function isStructuredProps(props) {
17414
17557
  }
17415
17558
 
17416
17559
  // src/components/SuperDrawer/ConfirmCloseModal.tsx
17417
- import { Fragment as Fragment29, jsx as jsx158, jsxs as jsxs77 } from "@emotion/react/jsx-runtime";
17560
+ import { Fragment as Fragment31, jsx as jsx161, jsxs as jsxs79 } from "@emotion/react/jsx-runtime";
17418
17561
  function ConfirmCloseModal(props) {
17419
17562
  const { onClose, discardText = "Discard Changes", continueText = "Continue Editing" } = props;
17420
17563
  const { modalState } = useBeamContext();
17421
17564
  function closeModal() {
17422
17565
  modalState.current = void 0;
17423
17566
  }
17424
- return /* @__PURE__ */ jsxs77(Fragment29, { children: [
17425
- /* @__PURE__ */ jsx158(ModalHeader, { children: "Are you sure you want to cancel?" }),
17426
- /* @__PURE__ */ jsx158(ModalBody, { children: /* @__PURE__ */ jsx158("p", { children: "Any changes you've made so far will be lost." }) }),
17427
- /* @__PURE__ */ jsxs77(ModalFooter, { children: [
17428
- /* @__PURE__ */ jsx158(
17567
+ return /* @__PURE__ */ jsxs79(Fragment31, { children: [
17568
+ /* @__PURE__ */ jsx161(ModalHeader, { children: "Are you sure you want to cancel?" }),
17569
+ /* @__PURE__ */ jsx161(ModalBody, { children: /* @__PURE__ */ jsx161("p", { children: "Any changes you've made so far will be lost." }) }),
17570
+ /* @__PURE__ */ jsxs79(ModalFooter, { children: [
17571
+ /* @__PURE__ */ jsx161(
17429
17572
  Button,
17430
17573
  {
17431
17574
  variant: "tertiary",
@@ -17436,7 +17579,7 @@ function ConfirmCloseModal(props) {
17436
17579
  }
17437
17580
  }
17438
17581
  ),
17439
- /* @__PURE__ */ jsx158(Button, { label: continueText, onClick: closeModal })
17582
+ /* @__PURE__ */ jsx161(Button, { label: continueText, onClick: closeModal })
17440
17583
  ] })
17441
17584
  ] });
17442
17585
  }
@@ -17445,8 +17588,8 @@ function ConfirmCloseModal(props) {
17445
17588
  import { motion as motion4 } from "framer-motion";
17446
17589
 
17447
17590
  // src/components/SuperDrawer/useSuperDrawer.tsx
17448
- import { useMemo as useMemo40 } from "react";
17449
- import { jsx as jsx159 } from "@emotion/react/jsx-runtime";
17591
+ import { useMemo as useMemo41 } from "react";
17592
+ import { jsx as jsx162 } from "@emotion/react/jsx-runtime";
17450
17593
  function useSuperDrawer() {
17451
17594
  const {
17452
17595
  drawerContentStack: contentStack,
@@ -17458,7 +17601,7 @@ function useSuperDrawer() {
17458
17601
  function canCloseDrawerDetails(i, doChange) {
17459
17602
  for (const canCloseDrawerDetail of canCloseDetailsChecks.current[i] ?? []) {
17460
17603
  if (!canClose(canCloseDrawerDetail)) {
17461
- openModal({ content: /* @__PURE__ */ jsx159(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17604
+ openModal({ content: /* @__PURE__ */ jsx162(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17462
17605
  return false;
17463
17606
  }
17464
17607
  }
@@ -17478,14 +17621,14 @@ function useSuperDrawer() {
17478
17621
  for (const canCloseDrawer of canCloseChecks.current) {
17479
17622
  if (!canClose(canCloseDrawer)) {
17480
17623
  openModal({
17481
- content: /* @__PURE__ */ jsx159(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17624
+ content: /* @__PURE__ */ jsx162(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17482
17625
  });
17483
17626
  return;
17484
17627
  }
17485
17628
  }
17486
17629
  doChange();
17487
17630
  }
17488
- const closeActions = useMemo40(
17631
+ const closeActions = useMemo41(
17489
17632
  () => {
17490
17633
  return {
17491
17634
  /** Attempts to close the drawer. If any checks fail, a confirmation modal will appear */
@@ -17520,7 +17663,7 @@ function useSuperDrawer() {
17520
17663
  // eslint-disable-next-line react-hooks/exhaustive-deps
17521
17664
  [canCloseChecks, canCloseDetailsChecks, contentStack, modalState, openModal]
17522
17665
  );
17523
- const actions = useMemo40(
17666
+ const actions = useMemo41(
17524
17667
  () => {
17525
17668
  return {
17526
17669
  // TODO: Maybe we should rename to openDrawer as a breaking change (to match openDrawerDetail)
@@ -17573,7 +17716,7 @@ function canClose(canCloseCheck) {
17573
17716
  }
17574
17717
 
17575
17718
  // src/components/SuperDrawer/SuperDrawerContent.tsx
17576
- import { Fragment as Fragment30, jsx as jsx160, jsxs as jsxs78 } from "@emotion/react/jsx-runtime";
17719
+ import { Fragment as Fragment32, jsx as jsx163, jsxs as jsxs80 } from "@emotion/react/jsx-runtime";
17577
17720
  var SuperDrawerContent = ({ children, actions }) => {
17578
17721
  const { closeDrawerDetail } = useSuperDrawer();
17579
17722
  const { drawerContentStack: contentStack } = useBeamContext();
@@ -17582,17 +17725,17 @@ var SuperDrawerContent = ({ children, actions }) => {
17582
17725
  const { width: width2 = 1040 /* Normal */ } = firstContent ?? {};
17583
17726
  function wrapWithMotionAndMaybeBack(children2) {
17584
17727
  if (kind === "open") {
17585
- return /* @__PURE__ */ jsx160(motion4.div, { css: Css.p3.fg1.oa.$, children: children2 }, "content");
17728
+ return /* @__PURE__ */ jsx163(motion4.div, { css: Css.p3.fg1.oa.$, children: children2 }, "content");
17586
17729
  } else if (kind === "detail") {
17587
- return /* @__PURE__ */ jsxs78(
17730
+ return /* @__PURE__ */ jsxs80(
17588
17731
  motion4.div,
17589
17732
  {
17590
17733
  css: Css.px3.pt2.pb3.fg1.$,
17591
17734
  animate: { overflow: "auto" },
17592
17735
  transition: { overflow: { delay: 0.3 } },
17593
17736
  children: [
17594
- /* @__PURE__ */ jsx160(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
17595
- /* @__PURE__ */ jsx160(
17737
+ /* @__PURE__ */ jsx163(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
17738
+ /* @__PURE__ */ jsx163(
17596
17739
  motion4.div,
17597
17740
  {
17598
17741
  initial: { x: width2, opacity: 0 },
@@ -17608,27 +17751,27 @@ var SuperDrawerContent = ({ children, actions }) => {
17608
17751
  "content"
17609
17752
  );
17610
17753
  } else {
17611
- return /* @__PURE__ */ jsx160(motion4.div, { css: Css.p3.fg1.$, style: { overflow: "auto" } }, "content");
17754
+ return /* @__PURE__ */ jsx163(motion4.div, { css: Css.p3.fg1.$, style: { overflow: "auto" } }, "content");
17612
17755
  }
17613
17756
  }
17614
- return /* @__PURE__ */ jsxs78(Fragment30, { children: [
17757
+ return /* @__PURE__ */ jsxs80(Fragment32, { children: [
17615
17758
  wrapWithMotionAndMaybeBack(children),
17616
- actions && /* @__PURE__ */ jsx160("footer", { css: Css.bt.bcGray200.p3.df.aic.jcfe.$, children: /* @__PURE__ */ jsx160("div", { css: Css.df.gap1.$, children: actions.map((buttonProps, i) => /* @__PURE__ */ jsx160(Button, { ...buttonProps }, i)) }) })
17759
+ actions && /* @__PURE__ */ jsx163("footer", { css: Css.bt.bcGray200.p3.df.aic.jcfe.$, children: /* @__PURE__ */ jsx163("div", { css: Css.df.gap1.$, children: actions.map((buttonProps, i) => /* @__PURE__ */ jsx163(Button, { ...buttonProps }, i)) }) })
17617
17760
  ] });
17618
17761
  };
17619
17762
 
17620
17763
  // src/components/Tabs.tsx
17621
17764
  import { camelCase as camelCase5 } from "change-case";
17622
- import { useEffect as useEffect28, useMemo as useMemo41, useRef as useRef52, useState as useState40 } from "react";
17765
+ import { useEffect as useEffect29, useMemo as useMemo42, useRef as useRef52, useState as useState41 } from "react";
17623
17766
  import { mergeProps as mergeProps13, useFocusRing as useFocusRing15, useHover as useHover19 } from "react-aria";
17624
17767
  import { matchPath, Route } from "react-router";
17625
17768
  import { Link as Link5, useLocation } from "react-router-dom";
17626
- import { Fragment as Fragment31, jsx as jsx161, jsxs as jsxs79 } from "@emotion/react/jsx-runtime";
17769
+ import { Fragment as Fragment33, jsx as jsx164, jsxs as jsxs81 } from "@emotion/react/jsx-runtime";
17627
17770
  function TabsWithContent(props) {
17628
17771
  const styles = hideTabs(props) ? {} : Css.pt3.$;
17629
- return /* @__PURE__ */ jsxs79(Fragment31, { children: [
17630
- /* @__PURE__ */ jsx161(Tabs, { ...props }),
17631
- /* @__PURE__ */ jsx161(TabContent, { ...props, contentXss: { ...styles, ...props.contentXss } })
17772
+ return /* @__PURE__ */ jsxs81(Fragment33, { children: [
17773
+ /* @__PURE__ */ jsx164(Tabs, { ...props }),
17774
+ /* @__PURE__ */ jsx164(TabContent, { ...props, contentXss: { ...styles, ...props.contentXss } })
17632
17775
  ] });
17633
17776
  }
17634
17777
  function TabContent(props) {
@@ -17643,7 +17786,7 @@ function TabContent(props) {
17643
17786
  return (
17644
17787
  // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.
17645
17788
  // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.
17646
- /* @__PURE__ */ jsx161(FullBleed, { omitPadding: "paddingLeft" in contentXss || "paddingRight" in contentXss, children: /* @__PURE__ */ jsx161(
17789
+ /* @__PURE__ */ jsx164(FullBleed, { omitPadding: "paddingLeft" in contentXss || "paddingRight" in contentXss, children: /* @__PURE__ */ jsx164(
17647
17790
  "div",
17648
17791
  {
17649
17792
  "aria-labelledby": `${uniqueValue}-tab`,
@@ -17652,7 +17795,7 @@ function TabContent(props) {
17652
17795
  tabIndex: 0,
17653
17796
  ...tid.panel,
17654
17797
  css: contentXss,
17655
- children: isRouteTab(selectedTab) ? /* @__PURE__ */ jsx161(Route, { path: selectedTab.path, render: selectedTab.render }) : selectedTab.render()
17798
+ children: isRouteTab(selectedTab) ? /* @__PURE__ */ jsx164(Route, { path: selectedTab.path, render: selectedTab.render }) : selectedTab.render()
17656
17799
  }
17657
17800
  ) })
17658
17801
  );
@@ -17665,9 +17808,9 @@ function Tabs(props) {
17665
17808
  ) : props.selected;
17666
17809
  const { isFocusVisible, focusProps } = useFocusRing15();
17667
17810
  const tid = useTestIds(others, "tabs");
17668
- const [active, setActive] = useState40(selected);
17811
+ const [active, setActive] = useState41(selected);
17669
17812
  const ref = useRef52(null);
17670
- useEffect28(() => setActive(selected), [selected]);
17813
+ useEffect29(() => setActive(selected), [selected]);
17671
17814
  function onKeyUp(e) {
17672
17815
  if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
17673
17816
  const nextTabValue = getNextTabValue(active, e.key, tabs);
@@ -17683,10 +17826,10 @@ function Tabs(props) {
17683
17826
  setActive(selected);
17684
17827
  }
17685
17828
  }
17686
- return /* @__PURE__ */ jsxs79("div", { css: { ...Css.df.aic.oa.wsnw.gap1.$, ...includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {} }, children: [
17687
- !hideTabs(props) && /* @__PURE__ */ jsx161("div", { ref, css: Css.dif.gap1.asfe.$, "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
17829
+ return /* @__PURE__ */ jsxs81("div", { css: { ...Css.df.aic.oa.wsnw.gap1.$, ...includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {} }, children: [
17830
+ !hideTabs(props) && /* @__PURE__ */ jsx164("div", { ref, css: Css.dif.gap1.asfe.$, "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
17688
17831
  const uniqueValue = uniqueTabValue(tab);
17689
- return /* @__PURE__ */ jsx161(
17832
+ return /* @__PURE__ */ jsx164(
17690
17833
  TabImpl,
17691
17834
  {
17692
17835
  active: active === uniqueValue,
@@ -17701,7 +17844,7 @@ function Tabs(props) {
17701
17844
  uniqueValue
17702
17845
  );
17703
17846
  }) }),
17704
- right && /* @__PURE__ */ jsx161("div", { css: Css.mla.df.aic.gap1.pb1.$, children: right })
17847
+ right && /* @__PURE__ */ jsx164("div", { css: Css.mla.df.aic.gap1.pb1.$, children: right })
17705
17848
  ] });
17706
17849
  }
17707
17850
  function TabImpl(props) {
@@ -17709,7 +17852,7 @@ function TabImpl(props) {
17709
17852
  const { disabled = false, name: label, icon, endAdornment } = tab;
17710
17853
  const isDisabled = !!disabled;
17711
17854
  const { hoverProps, isHovered } = useHover19({ isDisabled });
17712
- const { baseStyles: baseStyles5, activeStyles: activeStyles4, focusRingStyles: focusRingStyles2, hoverStyles: hoverStyles4, disabledStyles: disabledStyles4, activeHoverStyles } = useMemo41(
17855
+ const { baseStyles: baseStyles5, activeStyles: activeStyles4, focusRingStyles: focusRingStyles2, hoverStyles: hoverStyles4, disabledStyles: disabledStyles4, activeHoverStyles } = useMemo42(
17713
17856
  () => getTabStyles(),
17714
17857
  []
17715
17858
  );
@@ -17736,15 +17879,15 @@ function TabImpl(props) {
17736
17879
  onBlur,
17737
17880
  ...isRouteTab(tab) ? {} : { onClick: () => onClick(tab.value) }
17738
17881
  });
17739
- const tabLabel = /* @__PURE__ */ jsxs79(Fragment31, { children: [
17882
+ const tabLabel = /* @__PURE__ */ jsxs81(Fragment33, { children: [
17740
17883
  label,
17741
- (icon || endAdornment) && /* @__PURE__ */ jsx161("span", { css: Css.ml1.$, children: icon ? /* @__PURE__ */ jsx161(Icon, { icon }) : endAdornment })
17884
+ (icon || endAdornment) && /* @__PURE__ */ jsx164("span", { css: Css.ml1.$, children: icon ? /* @__PURE__ */ jsx164(Icon, { icon }) : endAdornment })
17742
17885
  ] });
17743
17886
  return isDisabled ? maybeTooltip({
17744
17887
  title: resolveTooltip(disabled),
17745
17888
  placement: "top",
17746
- children: /* @__PURE__ */ jsx161("div", { ...tabProps, children: tabLabel })
17747
- }) : isRouteTab(tab) ? /* @__PURE__ */ jsx161(Link5, { ...{ ...tabProps, ...interactiveProps }, className: "navLink", to: tab.href, children: tabLabel }) : /* @__PURE__ */ jsx161("button", { ...{ ...tabProps, ...interactiveProps }, children: tabLabel });
17889
+ children: /* @__PURE__ */ jsx164("div", { ...tabProps, children: tabLabel })
17890
+ }) : isRouteTab(tab) ? /* @__PURE__ */ jsx164(Link5, { ...{ ...tabProps, ...interactiveProps }, className: "navLink", to: tab.href, children: tabLabel }) : /* @__PURE__ */ jsx164("button", { ...{ ...tabProps, ...interactiveProps }, children: tabLabel });
17748
17891
  }
17749
17892
  function getTabStyles() {
17750
17893
  const borderBottomWidthPx = 4;
@@ -17781,11 +17924,11 @@ function hideTabs(props) {
17781
17924
  }
17782
17925
 
17783
17926
  // src/components/Toast/Toast.tsx
17784
- import { Fragment as Fragment32, jsx as jsx162 } from "@emotion/react/jsx-runtime";
17927
+ import { Fragment as Fragment34, jsx as jsx165 } from "@emotion/react/jsx-runtime";
17785
17928
  function Toast() {
17786
17929
  const { setNotice, notice } = useToastContext();
17787
17930
  const tid = useTestIds({}, "toast");
17788
- return /* @__PURE__ */ jsx162(Fragment32, { children: notice && /* @__PURE__ */ jsx162(Banner, { ...notice, ...tid, onClose: () => setNotice(void 0) }) });
17931
+ return /* @__PURE__ */ jsx165(Fragment34, { children: notice && /* @__PURE__ */ jsx165(Banner, { ...notice, ...tid, onClose: () => setNotice(void 0) }) });
17789
17932
  }
17790
17933
 
17791
17934
  // src/components/Toast/useToast.tsx
@@ -17868,6 +18011,7 @@ export {
17868
18011
  FormRow,
17869
18012
  FullBleed,
17870
18013
  GridTable,
18014
+ GridTableLayout,
17871
18015
  HB_QUIPS_FLAVOR,
17872
18016
  HB_QUIPS_MISSION,
17873
18017
  HEADER,
@@ -18055,6 +18199,7 @@ export {
18055
18199
  useDnDGridItem,
18056
18200
  useFilter,
18057
18201
  useGridTableApi,
18202
+ useGridTableLayoutState,
18058
18203
  useGroupBy,
18059
18204
  useHover,
18060
18205
  useModal,