@homebound/beam 2.391.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
@@ -4654,6 +4654,10 @@ var Icons = {
4654
4654
  /* @__PURE__ */ jsx3("rect", { x: "12", y: "10", width: "10", height: "2" })
4655
4655
  ] }),
4656
4656
  cube: /* @__PURE__ */ jsx3("path", { d: "M19.406 4.08601L10.406 0.0860059C10.146 -0.0289941 9.853 -0.0289941 9.593 0.0860059L0.593 4.08601C0.573 4.09501 0.559 4.11001 0.539 4.12101C0.511 4.13501 0.481 4.14401 0.455 4.16101C0.433 4.17601 0.416 4.19501 0.395 4.21101C0.367 4.23201 0.34 4.25501 0.315 4.27901C0.274 4.31801 0.238 4.36001 0.205 4.40501C0.185 4.43301 0.164 4.45801 0.146 4.48601C0.115 4.53901 0.0919999 4.59401 0.0699999 4.65101C0.0609999 4.67801 0.047 4.70301 0.039 4.73001C0.015 4.81701 0 4.90701 0 5.00001V15C0 15.396 0.232 15.753 0.594 15.914L9.594 19.914C9.724 19.972 9.862 20 10 20C10.139 20 10.273 19.961 10.402 19.904L10.406 19.914L19.406 15.914C19.768 15.753 20 15.396 20 15V5.00001C20 4.60401 19.768 4.24701 19.406 4.08601ZM10 2.09501L16.538 5.00001L10 7.90501L8.692 7.32401L3.463 5.00001L10 2.09501ZM2 14.351V6.53901L9 9.65001V17.461L2 14.351ZM11 17.461V9.65001L18 6.53901V14.351L11 17.461Z" }),
4657
+ history: /* @__PURE__ */ jsxs2(Fragment2, { children: [
4658
+ /* @__PURE__ */ jsx3("path", { d: "M12 8V13H17V11H14V8H12Z" }),
4659
+ /* @__PURE__ */ jsx3("path", { d: "M21.292 8.49699C21.066 7.96199 20.787 7.44699 20.463 6.96799C20.141 6.48999 19.772 6.04199 19.364 5.63499C18.956 5.22799 18.51 4.85999 18.032 4.53699C17.55 4.21099 17.035 3.93299 16.504 3.70799C15.959 3.47799 15.39 3.30099 14.814 3.18299C13.633 2.93999 12.37 2.93899 11.188 3.18299C10.609 3.30099 10.041 3.47799 9.498 3.70699C8.967 3.93199 8.453 4.20999 7.969 4.53699C7.492 4.85899 7.043 5.22899 6.636 5.63599C6.229 6.04299 5.859 6.49199 5.537 6.96799C5.211 7.45199 4.932 7.96599 4.708 8.49599C4.478 9.03999 4.301 9.60899 4.183 10.186C4.062 10.778 4 11.388 4 12C4 12.008 4.001 12.017 4.001 12.025H2L5 16L8 12.025H6.001C6.001 12.017 6 12.008 6 12C6 11.523 6.048 11.048 6.142 10.588C6.234 10.139 6.371 9.69799 6.55 9.27499C6.724 8.86299 6.941 8.46199 7.195 8.08699C7.445 7.71599 7.733 7.36799 8.05 7.04999C8.367 6.73199 8.716 6.44499 9.086 6.19499C9.462 5.94099 9.863 5.72399 10.276 5.54899C10.697 5.36999 11.139 5.23299 11.589 5.14099C12.508 4.95199 13.493 4.95299 14.412 5.14099C14.859 5.23299 15.302 5.36999 15.725 5.54899C16.138 5.72299 16.538 5.94099 16.913 6.19299C17.283 6.44399 17.633 6.73199 17.95 7.04899C18.267 7.36499 18.554 7.71399 18.805 8.08599C19.057 8.45799 19.274 8.85799 19.45 9.27499C19.628 9.69199 19.764 10.133 19.858 10.586C19.952 11.049 20 11.524 20 12C20 12.476 19.952 12.951 19.858 13.41C19.764 13.865 19.628 14.306 19.45 14.724C19.274 15.14 19.057 15.539 18.804 15.913C18.554 16.284 18.267 16.633 17.95 16.949C17.633 17.266 17.283 17.554 16.914 17.804C16.538 18.057 16.139 18.275 15.725 18.45C15.302 18.629 14.86 18.766 14.412 18.858C13.494 19.046 12.51 19.047 11.589 18.858C11.14 18.766 10.699 18.629 10.276 18.45C9.864 18.276 9.463 18.059 9.088 17.805C8.717 17.555 8.369 17.267 8.051 16.95L6.637 18.364C7.044 18.772 7.492 19.141 7.969 19.463C8.452 19.789 8.967 20.068 9.497 20.292C10.041 20.522 10.61 20.699 11.187 20.817C11.778 20.938 12.388 21 13 21C13.612 21 14.223 20.938 14.813 20.817C15.39 20.699 15.959 20.523 16.503 20.293C17.035 20.068 17.55 19.789 18.034 19.462C18.51 19.14 18.957 18.771 19.364 18.364C19.771 17.957 20.14 17.509 20.462 17.033C20.787 16.553 21.066 16.038 21.292 15.504C21.52 14.966 21.697 14.398 21.817 13.812C21.938 13.22 22 12.61 22 12C22 11.39 21.938 10.78 21.817 10.186C21.697 9.60199 21.52 9.03399 21.292 8.49699Z" })
4660
+ ] }),
4657
4661
  // Navigation
4658
4662
  projects: /* @__PURE__ */ jsx3("path", { d: "M4 6H6V8H4V6ZM4 11H6V13H4V11ZM4 16H6V18H4V16ZM20 8V6H18.8H9.2H8.023V8H9.2H18.8H20ZM8 11H20V13H8V11ZM8 16H20V18H8V16Z" }),
4659
4663
  tasks: /* @__PURE__ */ jsxs2(Fragment2, { children: [
@@ -13703,7 +13707,7 @@ var variantStyles2 = {
13703
13707
  };
13704
13708
 
13705
13709
  // src/components/BeamContext.tsx
13706
- 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";
13707
13711
  import { OverlayProvider } from "react-aria";
13708
13712
 
13709
13713
  // src/components/Modal/Modal.tsx
@@ -15580,1336 +15584,1514 @@ function FullBleed({ children, omitPadding = false }) {
15580
15584
  });
15581
15585
  }
15582
15586
 
15583
- // src/components/Layout/PreventBrowserScroll.tsx
15584
- import { jsx as jsx123 } from "@emotion/react/jsx-runtime";
15585
- function PreventBrowserScroll({ children }) {
15586
- return (
15587
- // Take over the full viewport and hide any overflown content.
15588
- // 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/
15589
- // 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.
15590
- /* @__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 }) })
15591
- );
15592
- }
15587
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
15588
+ import React14, { useEffect as useEffect25, useState as useState35 } from "react";
15593
15589
 
15594
- // src/components/Layout/RightPaneLayout/RightPaneContext.tsx
15595
- import React14, { useCallback as useCallback18, useContext as useContext13, useMemo as useMemo31, useState as useState34 } from "react";
15596
- import { jsx as jsx124 } from "@emotion/react/jsx-runtime";
15597
- var RightPaneContext = React14.createContext({
15598
- openInPane: () => {
15599
- },
15600
- closePane: () => {
15601
- },
15602
- clearPane: () => {
15603
- },
15604
- isRightPaneOpen: false,
15605
- rightPaneContent: null
15606
- });
15607
- function RightPaneProvider({ children }) {
15608
- const [rightPaneContent, setRightPaneContent] = useState34(void 0);
15609
- const [isRightPaneOpen, setIsRightPaneOpen] = useState34(false);
15610
- const openInPane = useCallback18(
15611
- (opts) => {
15612
- setRightPaneContent(opts?.content);
15613
- setIsRightPaneOpen(true);
15614
- },
15615
- [setRightPaneContent]
15616
- );
15617
- const closePane = useCallback18(() => setIsRightPaneOpen(false), []);
15618
- const clearPane = useCallback18(() => setRightPaneContent(void 0), [setRightPaneContent]);
15619
- const context = useMemo31(
15620
- () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),
15621
- [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen]
15622
- );
15623
- return /* @__PURE__ */ jsx124(RightPaneContext.Provider, { value: context, children });
15624
- }
15625
- function useRightPaneContext() {
15626
- 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);
15627
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
+ };
15628
15661
 
15629
- // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
15630
- import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
15631
- import { useEffect as useEffect23 } from "react";
15632
- import { Fragment as Fragment23, jsx as jsx125, jsxs as jsxs61 } from "@emotion/react/jsx-runtime";
15633
- function RightPaneLayout(props) {
15634
- const { children, paneBgColor = "rgba(255,255,255,1)" /* White */, paneWidth = 450, defaultPaneContent } = props;
15635
- const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();
15636
- useEffect23(() => closePane, [closePane]);
15637
- return /* @__PURE__ */ jsx125("div", { css: Css.h100.df.oxh.$, children: /* @__PURE__ */ jsxs61(Fragment23, { children: [
15638
- /* @__PURE__ */ jsx125(
15639
- "div",
15640
- {
15641
- css: {
15642
- ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.oxa.$,
15643
- ...Css.if(!isRightPaneOpen).w100.mr0.$,
15644
- ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$
15645
- },
15646
- children
15647
- }
15648
- ),
15649
- /* @__PURE__ */ jsxs61("div", { css: Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$, children: [
15650
- defaultPaneContent && /* @__PURE__ */ jsx125(
15651
- "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,
15652
15674
  {
15653
- css: Css.h100.wPx(paneWidth).left(0).absolute.add("transition", "all .3s ease-in-out").if(isRightPaneOpen).add("opacity", 0).left(100).$,
15654
- 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`]
15655
15684
  }
15656
- ),
15657
- /* @__PURE__ */ jsx125(AnimatePresence3, { children: isRightPaneOpen && /* @__PURE__ */ jsx125(
15658
- motion3.div,
15659
- {
15660
- layout: "position",
15661
- "data-testid": "rightPaneContent",
15662
- css: Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
15663
- initial: { x: paneWidth + 24, position: "absolute" },
15664
- animate: { x: 0 },
15665
- transition: { ease: "linear", duration: 0.2 },
15666
- exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
15667
- onAnimationComplete: (definition) => definition.x !== 0 && clearPane(),
15668
- children: rightPaneContent
15669
- },
15670
- "rightPane"
15671
- ) })
15672
- ] })
15673
- ] }) });
15674
- }
15685
+ )
15686
+ ] });
15687
+ }
15688
+ };
15675
15689
 
15676
- // src/components/Layout/RightPaneLayout/useRightPane.tsx
15677
- function useRightPane() {
15678
- const { openInPane, closePane } = useRightPaneContext();
15679
- return {
15680
- openRightPane: openInPane,
15681
- closeRightPane: closePane
15682
- };
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);
15683
15694
  }
15684
-
15685
- // src/components/Layout/ScrollableContent.tsx
15686
- import { useEffect as useEffect24 } from "react";
15687
- import { createPortal as createPortal4 } from "react-dom";
15688
- import { Fragment as Fragment24, jsx as jsx126 } from "@emotion/react/jsx-runtime";
15689
- function ScrollableContent(props) {
15690
- const { children, virtualized = false, omitBottomPadding, bgColor } = props;
15691
- const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();
15692
- useEffect24(() => {
15693
- setPortalTick((prev) => prev + 1);
15694
- return () => setPortalTick((prev) => prev + 1);
15695
- }, [setPortalTick]);
15696
- if (!scrollableEl) {
15697
- return /* @__PURE__ */ jsx126(Fragment24, { children });
15698
- }
15699
- return createPortal4(
15700
- /* @__PURE__ */ jsx126(
15701
- "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,
15702
15727
  {
15703
- css: {
15704
- ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,
15705
- ...bgColor && Css.bgColor(bgColor).$,
15706
- ...!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);
15707
15736
  },
15708
- children
15737
+ nothingSelectedText: nothingSelectedText ?? "All",
15738
+ ...this.testId(tid)
15709
15739
  }
15710
- ),
15711
- scrollableEl
15712
- );
15713
- }
15740
+ );
15741
+ }
15742
+ };
15714
15743
 
15715
- // src/components/Toast/ToastContext.tsx
15716
- import { createContext as createContext5, useCallback as useCallback19, useContext as useContext14, useMemo as useMemo32, useState as useState35 } from "react";
15717
- import { jsx as jsx127 } from "@emotion/react/jsx-runtime";
15718
- var ToastContext = createContext5({
15719
- setNotice: () => {
15720
- throw new Error("Missing ToastProvider");
15721
- },
15722
- clear: () => {
15723
- },
15724
- notice: void 0
15725
- });
15726
- function ToastProvider(props) {
15727
- const [notice, setNotice] = useState35();
15728
- const clear = useCallback19(() => setNotice(void 0), [setNotice]);
15729
- const contextValue = useMemo32(() => ({ setNotice, notice, clear }), [notice, clear]);
15730
- return /* @__PURE__ */ jsx127(ToastContext.Provider, { value: contextValue, children: props.children });
15731
- }
15732
- function useToastContext() {
15733
- 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);
15734
15748
  }
15735
-
15736
- // src/components/BeamContext.tsx
15737
- import { jsx as jsx128, jsxs as jsxs62 } from "@emotion/react/jsx-runtime";
15738
- var BeamContext = createContext6({
15739
- modalState: new EmptyRef(),
15740
- modalCanCloseChecks: new EmptyRef(),
15741
- modalHeaderDiv: void 0,
15742
- modalBodyDiv: void 0,
15743
- modalFooterDiv: void 0,
15744
- drawerContentStack: new EmptyRef(),
15745
- drawerCanCloseChecks: new EmptyRef(),
15746
- drawerCanCloseDetailsChecks: new EmptyRef(),
15747
- sdHeaderDiv: void 0
15748
- });
15749
- function BeamProvider({ children, ...presentationProps }) {
15750
- const [, tick] = useReducer((prev) => prev + 1, 0);
15751
- const modalRef = useRef43();
15752
- const modalHeaderDiv = useMemo33(() => document.createElement("div"), []);
15753
- const modalBodyDiv = useMemo33(() => {
15754
- const el = document.createElement("div");
15755
- el.style.height = "100%";
15756
- return el;
15757
- }, []);
15758
- const modalCanCloseChecksRef = useRef43([]);
15759
- const modalFooterDiv = useMemo33(() => document.createElement("div"), []);
15760
- const drawerContentStackRef = useRef43([]);
15761
- const drawerCanCloseChecks = useRef43([]);
15762
- const drawerCanCloseDetailsChecks = useRef43([]);
15763
- const sdHeaderDiv = useMemo33(() => document.createElement("div"), []);
15764
- const context = useMemo33(() => {
15765
- return {
15766
- // These two keys need to trigger re-renders on change
15767
- modalState: new PretendRefThatTicks(modalRef, tick),
15768
- drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),
15769
- // The rest we don't need to re-render when these are mutated, so just expose as-is
15770
- modalCanCloseChecks: modalCanCloseChecksRef,
15771
- modalHeaderDiv,
15772
- modalBodyDiv,
15773
- modalFooterDiv,
15774
- drawerCanCloseChecks,
15775
- drawerCanCloseDetailsChecks,
15776
- sdHeaderDiv
15777
- };
15778
- }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);
15779
- 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: [
15780
- /* @__PURE__ */ jsxs62(OverlayProvider, { children: [
15781
- children,
15782
- modalRef.current && /* @__PURE__ */ jsx128(Modal, { ...modalRef.current })
15783
- ] }),
15784
- /* @__PURE__ */ jsx128(SuperDrawer, {})
15785
- ] }) }) }) }) }) });
15786
- }
15787
- var PretendRefThatTicks = class {
15788
- constructor(ref, tick) {
15789
- this.ref = ref;
15790
- this.tick = tick;
15791
- }
15792
- get current() {
15793
- return this.ref.current;
15794
- }
15795
- set current(value) {
15796
- this.ref.current = value;
15797
- 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
+ ] });
15798
15829
  }
15799
15830
  };
15800
- function useBeamContext() {
15801
- return useContext15(BeamContext);
15802
- }
15803
15831
 
15804
- // src/components/ButtonDatePicker.tsx
15805
- import { useRef as useRef44 } from "react";
15806
- import { useMenuTrigger as useMenuTrigger3 } from "react-aria";
15807
- import { useMenuTriggerState as useMenuTriggerState3 } from "react-stately";
15808
- import { jsx as jsx129 } from "@emotion/react/jsx-runtime";
15809
- function ButtonDatePicker(props) {
15810
- const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;
15811
- const state = useMenuTriggerState3({ isOpen: defaultOpen });
15812
- const buttonRef = useRef44(null);
15813
- const { menuTriggerProps, menuProps } = useMenuTrigger3({ isDisabled: !!disabled }, state, buttonRef);
15814
- const tid = useTestIds(
15815
- props,
15816
- isTextButton(trigger) ? defaultTestId(labelOr(trigger, "buttonDatePicker")) : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
15817
- );
15818
- return /* @__PURE__ */ jsx129(OverlayTrigger, { ...props, menuTriggerProps, state, buttonRef, ...tid, children: /* @__PURE__ */ jsx129(DatePickerOverlay, { overlayProps: menuProps, children: /* @__PURE__ */ jsx129(
15819
- DatePicker,
15820
- {
15821
- ...datePickerProps,
15822
- onSelect: (d) => {
15823
- onSelect(d);
15824
- state.close();
15825
- },
15826
- ...tid.datePicker
15827
- }
15828
- ) }) });
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);
15829
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
+ };
15830
15869
 
15831
- // src/components/ButtonGroup.tsx
15832
- import { useRef as useRef45 } from "react";
15833
- import { useButton as useButton10, useFocusRing as useFocusRing12, useHover as useHover15 } from "react-aria";
15834
- import { jsx as jsx130, jsxs as jsxs63 } from "@emotion/react/jsx-runtime";
15835
- function ButtonGroup(props) {
15836
- const { buttons, disabled = false, size = "sm" } = props;
15837
- const tid = useTestIds(props, "buttonGroup");
15838
- return (
15839
- // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.
15840
- /* @__PURE__ */ jsx130("div", { ...tid, css: Css.df.lh(0).add({ ...sizeStyles2[size] }).$, children: buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => (
15841
- // Disable the button if the ButtonGroup is disabled or if the current button is disabled.
15842
- /* @__PURE__ */ jsx130(GroupButton, { ...buttonProps, disabled: disabled || buttonDisabled, size, ...tid }, i)
15843
- )) })
15844
- );
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);
15845
15874
  }
15846
- function GroupButton(props) {
15847
- const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;
15848
- const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };
15849
- const ref = useRef45(null);
15850
- const { buttonProps, isPressed } = useButton10(ariaProps, ref);
15851
- const { isFocusVisible, focusProps } = useFocusRing12();
15852
- const { hoverProps, isHovered } = useHover15(ariaProps);
15853
- const tid = useTestIds(props);
15854
- return /* @__PURE__ */ jsx130("span", { css: getButtonStyles2(), children: maybeTooltip({
15855
- title: resolveTooltip(disabled, tooltip),
15856
- placement: "top",
15857
- children: /* @__PURE__ */ jsxs63(
15858
- "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,
15859
15880
  {
15860
- ref,
15861
- ...buttonProps,
15862
- ...focusProps,
15863
- ...hoverProps,
15864
- css: {
15865
- ...Css.buttonBase.px2.br0.h100.$,
15866
- "&:disabled": Css.gray400.cursorNotAllowed.bcGray300.$,
15867
- ...isFocusVisible ? defaultFocusRingStyles2 : {},
15868
- ...active ? activeStyles3 : {},
15869
- ...isPressed ? pressedStyles2 : isHovered ? hoverStyles3 : {},
15870
- ...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);
15871
15890
  },
15872
- ...tid[defaultTestId(typeof text === "string" && text || icon || "button")],
15873
- children: [
15874
- icon && /* @__PURE__ */ jsx130(Icon, { xss: Css.if(!!text).mrPx(4).$, icon, color: disabled ? void 0 : iconColor, inc: iconInc }),
15875
- text
15876
- ]
15891
+ nothingSelectedText: nothingSelectedText ?? "All",
15892
+ ...this.testId(tid)
15877
15893
  }
15878
- )
15879
- }) });
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);
15880
15902
  }
15881
- var pressedStyles2 = Css.bgGray200.$;
15882
- var activeStyles3 = Css.bgGray300.$;
15883
- var hoverStyles3 = Css.bgGray100.$;
15884
- var defaultFocusRingStyles2 = Css.relative.z2.bshFocus.$;
15885
- function getButtonStyles2() {
15886
- return {
15887
- ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,
15888
- // Our first button should have a rounded left border
15889
- "&:first-of-type": Css.add("borderRadius", "4px 0 0 4px").$,
15890
- // Our last button should have a rounded right border
15891
- "&:last-of-type": Css.add("borderRadius", "0 4px 4px 0").$,
15892
- // Nudge buttons one pixel to the left so they visually share a border
15893
- "&:not(:first-of-type)": Css.mlPx(-1).$
15894
- };
15895
- }
15896
- var sizeStyles2 = {
15897
- xs: Css.hPx(28).$,
15898
- sm: Css.hPx(32).$,
15899
- 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
+ }
15900
15926
  };
15901
- var iconStyles2 = {
15902
- xs: Css.pxPx(2).$,
15903
- sm: Css.pxPx(4).$,
15904
- 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
+ }
15905
15961
  };
15906
15962
 
15907
- // src/components/ButtonMenu.tsx
15908
- import { useRef as useRef46 } from "react";
15909
- import { useMenuTrigger as useMenuTrigger4 } from "react-aria";
15910
- 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";
15911
15968
  import { jsx as jsx131 } from "@emotion/react/jsx-runtime";
15912
- function ButtonMenu(props) {
15913
- const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
15914
- let selectedItem, onChange;
15915
- if (isSelectionButtonMenuProps(props)) {
15916
- selectedItem = props.selectedItem;
15917
- 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" });
15918
15981
  }
15919
- const state = useMenuTriggerState4({ isOpen: defaultOpen });
15920
- const buttonRef = useRef46(null);
15921
- const { menuTriggerProps, menuProps } = useMenuTrigger4({ isDisabled: !!disabled }, state, buttonRef);
15922
- const tid = useTestIds(
15923
- props,
15924
- isTextButton(trigger) ? labelOr(trigger, "buttonMenu") : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
15925
- );
15926
- return /* @__PURE__ */ jsx131(
15927
- OverlayTrigger,
15928
- {
15929
- ...props,
15930
- menuTriggerProps,
15931
- state,
15932
- buttonRef,
15933
- ...tid,
15934
- contrast,
15935
- children: /* @__PURE__ */ jsx131(
15936
- 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,
15937
16003
  {
15938
- ariaMenuProps: menuProps,
15939
- onClose: () => state.close(),
15940
- items,
15941
- persistentItems,
15942
- searchable,
15943
- contrast,
15944
- selectedItem,
15945
- onChange,
15946
- ...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
15947
16012
  }
15948
- )
15949
- }
15950
- );
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
+ ] });
15951
16030
  }
15952
- function isSelectionButtonMenuProps(props) {
15953
- 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
+ ] });
15954
16036
  }
15955
16037
 
15956
- // src/components/Card.tsx
15957
- import { useMemo as useMemo34 } from "react";
15958
- import { useHover as useHover16 } from "react-aria";
15959
-
15960
- // src/components/Tag.tsx
15961
- import { useResizeObserver as useResizeObserver4 } from "@react-aria/utils";
15962
- import { useRef as useRef47, useState as useState36 } from "react";
15963
- import { jsx as jsx132, jsxs as jsxs64 } from "@emotion/react/jsx-runtime";
15964
- function Tag(props) {
15965
- const { text, type, xss, preventTooltip = false, ...otherProps } = props;
15966
- const typeStyles2 = getStyles(type);
15967
- const tid = useTestIds(otherProps);
15968
- const [showTooltip, setShowTooltip] = useState36(false);
15969
- const ref = useRef47(null);
15970
- useResizeObserver4({
15971
- ref,
15972
- onResize: () => {
15973
- if (ref.current) {
15974
- setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);
15975
- }
15976
- }
15977
- });
15978
- return maybeTooltip({
15979
- title: !preventTooltip && showTooltip ? text : void 0,
15980
- children: /* @__PURE__ */ jsxs64("span", { ...tid, css: { ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles2, ...xss }, children: [
15981
- otherProps.icon && /* @__PURE__ */ jsx132("span", { css: Css.fs0.$, children: /* @__PURE__ */ jsx132(Icon, { icon: otherProps.icon, inc: 1.5 }) }),
15982
- /* @__PURE__ */ jsx132("span", { ref, css: Css.lineClamp1.wbba.$, children: text })
15983
- ] })
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
15984
16045
  });
15985
16046
  }
15986
- function getStyles(type) {
15987
- switch (type) {
15988
- case "info":
15989
- return Css.bgBlue100.$;
15990
- case "caution":
15991
- return Css.bgYellow200.$;
15992
- case "warning":
15993
- return Css.bgRed200.$;
15994
- case "success":
15995
- return Css.bgGreen200.$;
15996
- default:
15997
- return Css.bgGray200.$;
15998
- }
15999
- }
16000
-
16001
- // src/components/Card.tsx
16002
- import { jsx as jsx133, jsxs as jsxs65 } from "@emotion/react/jsx-runtime";
16003
- function Card(props) {
16004
- const {
16005
- title,
16006
- subtitle,
16007
- detailContent,
16008
- imgSrc,
16009
- imageFit = "contain",
16010
- type = "card",
16011
- bordered = false,
16012
- disabled: isDisabled = false,
16013
- buttonMenuItems,
16014
- tag
16015
- } = props;
16016
- const tid = useTestIds(props, "card");
16017
- const { hoverProps, isHovered } = useHover16({ isDisabled });
16018
- const isList = type === "list";
16019
- const imgHeight = isList ? 96 : bordered ? 224 : 256;
16020
- const styles = useMemo34(
16021
- () => ({
16022
- ...baseStyles4(type),
16023
- ...isList && listStyles,
16024
- ...bordered && borderedStyles,
16025
- ...isHovered && cardHoverStyles,
16026
- ...isDisabled && disabledStyles3
16027
- }),
16028
- [isDisabled, isHovered, bordered, type, isList]
16029
- );
16030
- return /* @__PURE__ */ jsxs65("div", { css: styles, ...hoverProps, ...tid, children: [
16031
- /* @__PURE__ */ jsx133(
16032
- "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,
16033
16052
  {
16034
- css: {
16035
- ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add("filter", "brightness(1)").$,
16036
- ...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);
16037
16059
  },
16038
- children: /* @__PURE__ */ jsx133("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
16039
- }
16040
- ),
16041
- isHovered && buttonMenuItems && /* @__PURE__ */ jsx133("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ jsx133(
16042
- ButtonMenu,
16043
- {
16044
- trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
16045
- items: buttonMenuItems
16060
+ ...this.testId(tid)
16046
16061
  }
16047
- ) }),
16048
- tag && /* @__PURE__ */ jsx133("div", { css: Css.absolute.left1.topPx(4).$, children: /* @__PURE__ */ jsx133(Tag, { type: tag?.type, text: tag?.text, ...tid.tag }) }),
16049
- /* @__PURE__ */ jsxs65("div", { css: Css.df.fdc.aifs.gap1.$, children: [
16050
- /* @__PURE__ */ jsxs65("div", { children: [
16051
- /* @__PURE__ */ jsx133("div", { css: Css.xsMd.gray700.$, ...tid.subtitle, children: subtitle }),
16052
- /* @__PURE__ */ jsx133("div", { css: Css.smMd.gray900.if(isHovered).blue700.$, ...tid.title, children: title })
16053
- ] }),
16054
- /* @__PURE__ */ jsx133("div", { ...tid.details, children: detailContent })
16055
- ] })
16056
- ] });
16057
- }
16058
- var width = { card: 256, list: 520 };
16059
- var baseStyles4 = (type) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;
16060
- var listStyles = Css.df.fdr.gap2.$;
16061
- var borderedStyles = Css.ba.br8.bcGray300.p2.$;
16062
- var disabledStyles3 = Css.add("opacity", 0.5).add("transition", "opacity 0.3s ease").$;
16063
- var cardHoverStyles = Css.bcGray400.cursorPointer.$;
16064
- 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
+ };
16065
16068
 
16066
- // src/components/Copy.tsx
16067
- import { jsx as jsx134 } from "@emotion/react/jsx-runtime";
16068
- function Copy(props) {
16069
- 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(
16070
16111
  "div",
16071
16112
  {
16072
16113
  css: {
16073
- ...Css.sm.gray700.mt2.mb3.wPx(480).$,
16074
- "& > p": Css.my2.$
16114
+ ...vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$
16075
16115
  },
16076
- 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
+ ]
16077
16135
  }
16078
16136
  );
16079
16137
  }
16138
+ var _Filters = memo(Filters);
16080
16139
 
16081
- // src/components/DnDGrid/DnDGrid.tsx
16082
- import equal2 from "fast-deep-equal";
16083
- 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
+ }
16084
16147
 
16085
- // src/components/DnDGrid/DnDGridContext.tsx
16086
- import { createContext as createContext7, useContext as useContext16 } from "react";
16087
- var DnDGridContext = createContext7({
16088
- dragEl: { current: void 0 },
16089
- 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 });
16090
16165
  }
16091
- });
16092
- function useDnDGridContext() {
16093
- 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
+ );
16094
16180
  }
16095
16181
 
16096
- // src/components/DnDGrid/DnDGrid.tsx
16097
- import { jsx as jsx135 } from "@emotion/react/jsx-runtime";
16098
- function DnDGrid(props) {
16099
- const { children, gridStyles, onReorder, activeItemStyles } = props;
16100
- const gridEl = useRef48(null);
16101
- const dragEl = useRef48();
16102
- const cloneEl = useRef48();
16103
- const initialOrder = useRef48();
16104
- const reorderViaKeyboard = useRef48(false);
16105
- const transformFrom = useRef48({ x: 0, y: 0 });
16106
- const tid = useTestIds(props, "dndGrid");
16107
- const getGridItems = useCallback20(() => {
16108
- return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];
16109
- }, []);
16110
- const getGridItemIdOrder = useCallback20(() => {
16111
- return getGridItems().map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined);
16112
- }, [getGridItems]);
16113
- const initReorder = useCallback20(() => {
16114
- if (gridEl.current && dragEl.current) {
16115
- initialOrder.current = getGridItemIdOrder();
16116
- dragEl.current.classList.add(activeGridItemClass);
16117
- }
16118
- }, [getGridItemIdOrder]);
16119
- const commitReorder = useCallback20(() => {
16120
- if (gridEl.current && dragEl.current) {
16121
- const currentOrder = getGridItemIdOrder();
16122
- if (!equal2(currentOrder, initialOrder.current)) onReorder(currentOrder);
16123
- dragEl.current.classList.remove(activeGridItemClass);
16124
- dragEl.current = void 0;
16125
- reorderViaKeyboard.current = false;
16126
- initialOrder.current = currentOrder;
16127
- }
16128
- }, [onReorder, getGridItemIdOrder]);
16129
- const cancelReorder = useCallback20(() => {
16130
- if (gridEl.current && dragEl.current && initialOrder.current) {
16131
- const currentOrder = getGridItemIdOrder();
16132
- if (!equal2(currentOrder, initialOrder.current)) {
16133
- const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? "");
16134
- if (initialIndex === initialOrder.current.length - 1) {
16135
- const gridItems = getGridItems();
16136
- const lastGridItem = gridItems[gridItems.length - 1];
16137
- gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);
16138
- } else {
16139
- const nextSiblingIndex = initialOrder.current[initialIndex + 1];
16140
- const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}="${nextSiblingIndex}"]`);
16141
- if (nextSibling) {
16142
- gridEl.current.insertBefore(dragEl.current, nextSibling);
16143
- }
16144
- }
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
16145
16260
  }
16146
- dragEl.current.classList.remove(activeGridItemClass);
16147
- dragEl.current = void 0;
16148
- reorderViaKeyboard.current = false;
16149
- }
16150
- }, [getGridItemIdOrder, getGridItems]);
16151
- const onMove = useCallback20((e) => {
16152
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16153
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16154
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16155
- const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
16156
- const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
16157
- const x = clientX - transformFrom.current.x - left;
16158
- const y = clientY - transformFrom.current.y - top;
16159
- dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
16160
- const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
16161
- const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
16162
- if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
16163
- const targetPos = target.getBoundingClientRect();
16164
- const isHalfwayPassedTarget = (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 || (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
16165
- const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
16166
- if (shouldInsert) {
16167
- 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
16168
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
16169
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 */ })
16170
16339
  }
16171
- }, []);
16172
- const onDragStart = useCallback20(
16173
- (e) => {
16174
- if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
16175
- initReorder();
16176
- const gridRect = gridEl.current.getBoundingClientRect();
16177
- const rect = dragEl.current.getBoundingClientRect();
16178
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16179
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16180
- const top = rect.top - gridRect.top;
16181
- const left = rect.left - gridRect.left;
16182
- transformFrom.current = { x: clientX - left, y: clientY - top };
16183
- cloneEl.current = dragEl.current.cloneNode();
16184
- cloneEl.current?.setAttribute(
16185
- "style",
16186
- `border-width: 2px; border-color: ${"rgba(201, 201, 201, 1)" /* Gray400 */}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`
16187
- );
16188
- cloneEl.current?.setAttribute(gridCloneKey, "true");
16189
- cloneEl.current.removeAttribute("id");
16190
- cloneEl.current?.classList.remove(activeGridItemClass);
16191
- gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);
16192
- dragEl.current.setAttribute(
16193
- "style",
16194
- `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`
16195
- );
16196
- gridEl.current.style.cursor = "grabbing";
16197
- gridEl.current.addEventListener("mousemove", onMove);
16198
- gridEl.current.addEventListener("touchmove", onMove);
16199
- }
16200
- },
16201
- [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 }) })
16202
16351
  );
16203
- const onDragEnd = useCallback20(
16204
- (e) => {
16205
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16206
- e.preventDefault();
16207
- cloneEl.current.replaceWith(dragEl.current);
16208
- gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
16209
- dragEl.current.removeAttribute("style");
16210
- gridEl.current.style.cursor = "auto";
16211
- cloneEl.current = void 0;
16212
- commitReorder();
16213
- gridEl.current.removeEventListener("mousemove", onMove);
16214
- gridEl.current.removeEventListener("touchmove", onMove);
16215
- }
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);
16216
16374
  },
16217
- [commitReorder, onMove]
16375
+ [setRightPaneContent]
16218
16376
  );
16219
- const onDragHandleKeyDown = useCallback20(
16220
- (e) => {
16221
- const moveHandle = e.target;
16222
- if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
16223
- const isSpaceKey = e.key === " ";
16224
- if (isSpaceKey && !reorderViaKeyboard.current) {
16225
- e.preventDefault();
16226
- reorderViaKeyboard.current = true;
16227
- document.addEventListener("pointerdown", cancelReorder);
16228
- initReorder();
16229
- return;
16230
- }
16231
- if (!reorderViaKeyboard.current) {
16232
- return;
16233
- }
16234
- const isEnterKey = e.key === "Enter";
16235
- const isTabKey = e.key === "Tab";
16236
- if (isEnterKey || isSpaceKey || isTabKey) {
16237
- if (!isTabKey) {
16238
- e.preventDefault();
16239
- }
16240
- commitReorder();
16241
- if (isEnterKey) {
16242
- moveHandle.blur();
16243
- }
16244
- document.removeEventListener("pointerdown", cancelReorder);
16245
- return;
16246
- }
16247
- if (e.key === "Escape") {
16248
- e.preventDefault();
16249
- cancelReorder();
16250
- document.removeEventListener("pointerdown", cancelReorder);
16251
- return;
16252
- }
16253
- const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
16254
- const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
16255
- if (movingLeft || movingRight) {
16256
- e.preventDefault();
16257
- const gridItems = getGridItems();
16258
- const currentIndex = gridItems.map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined).indexOf(dragEl.current.getAttribute(gridItemIdKey));
16259
- const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;
16260
- const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;
16261
- if (movingLeft && currentIndex > 0 || movingRight && currentIndex < gridItems.length - 1) {
16262
- gridEl.current.insertBefore(dragEl.current, insertBeforeElement);
16263
- }
16264
- moveHandle.focus();
16265
- }
16266
- }
16267
- },
16268
- [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]
16269
16382
  );
16270
- return /* @__PURE__ */ jsx135(DnDGridContext.Provider, { value: { dragEl, onDragHandleKeyDown }, children: /* @__PURE__ */ jsx135(
16271
- "div",
16272
- {
16273
- ref: gridEl,
16274
- css: {
16275
- ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,
16276
- ...gridStyles
16277
- },
16278
- onTouchStart: onDragStart,
16279
- onMouseDown: onDragStart,
16280
- onTouchEnd: onDragEnd,
16281
- onMouseUp: onDragEnd,
16282
- ...tid,
16283
- children
16284
- }
16285
- ) });
16383
+ return /* @__PURE__ */ jsx141(RightPaneContext.Provider, { value: context, children });
16286
16384
  }
16287
- var gridItemIdKey = "dndgrid-itemid";
16288
- var gridCloneKey = "dndgrid-clone";
16289
- var activeGridItemClass = "dndgrid-active";
16290
-
16291
- // src/components/DnDGrid/DnDGridItemHandle.tsx
16292
- import { mergeProps as mergeProps12, useFocusRing as useFocusRing13, useHover as useHover17 } from "react-aria";
16293
- import { jsx as jsx136 } from "@emotion/react/jsx-runtime";
16294
- function DnDGridItemHandle(props) {
16295
- const { dragHandleProps, icon = "move", compact = false, color } = props;
16296
- const { focusProps, isFocusVisible } = useFocusRing13();
16297
- const { hoverProps, isHovered } = useHover17({});
16298
- const tid = useTestIds(props, "dragHandle");
16299
- const iconButtonNormal2 = Css.hPx(28).wPx(28).br8.bw2.$;
16300
- const iconButtonCompact2 = Css.hPx(18).wPx(18).br4.bw1.$;
16301
- return /* @__PURE__ */ jsx136(
16302
- "button",
16303
- {
16304
- css: {
16305
- ...compact ? iconButtonCompact2 : iconButtonNormal2,
16306
- ...Css.cursor("grab").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible).bcBlue700.$,
16307
- ...isHovered && Css.bgGray200.$
16308
- },
16309
- ...mergeProps12(dragHandleProps, focusProps, hoverProps),
16310
- ...tid,
16311
- children: /* @__PURE__ */ jsx136(Icon, { icon, inc: compact ? 2 : void 0, color })
16312
- }
16313
- );
16385
+ function useRightPaneContext() {
16386
+ return useContext13(RightPaneContext);
16314
16387
  }
16315
16388
 
16316
- // src/components/DnDGrid/useDnDGridItem.tsx
16317
- import { useMemo as useMemo35 } from "react";
16318
- function useDnDGridItem(props) {
16319
- const { id, itemRef } = props;
16320
- const { dragEl, onDragHandleKeyDown } = useDnDGridContext();
16321
- const { dragItemProps, dragHandleProps } = useMemo35(
16322
- () => {
16323
- function initDraggable() {
16324
- if (itemRef.current) {
16325
- dragEl.current = itemRef.current;
16326
- }
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
16327
16407
  }
16328
- return {
16329
- dragItemProps: { [gridItemIdKey]: id },
16330
- dragHandleProps: {
16331
- onMouseDown: initDraggable,
16332
- onTouchStart: initDraggable,
16333
- onKeyDown: (e) => {
16334
- initDraggable();
16335
- onDragHandleKeyDown(e);
16336
- }
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
16337
16415
  }
16338
- };
16339
- },
16340
- // 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
16341
- // eslint-disable-next-line react-hooks/exhaustive-deps
16342
- [dragEl, id, itemRef]
16343
- );
16344
- 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
+ ] }) });
16345
16434
  }
16346
16435
 
16347
- // src/components/Filters/BaseFilter.ts
16348
- var BaseFilter = class {
16349
- constructor(key, props) {
16350
- this.key = key;
16351
- this.props = props;
16352
- }
16353
- get label() {
16354
- return this.props.label || defaultLabel(this.key);
16355
- }
16356
- get defaultValue() {
16357
- return this.props.defaultValue;
16358
- }
16359
- testId(tid) {
16360
- return tid[defaultTestId(this.label)];
16361
- }
16362
- };
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
+ }
16363
16444
 
16364
- // src/components/Filters/DateFilter.tsx
16365
- import { Fragment as Fragment25, jsx as jsx137, jsxs as jsxs66 } from "@emotion/react/jsx-runtime";
16366
- function dateFilter(props) {
16367
- 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);
16368
16464
  }
16369
- var anyOption = {};
16370
- var DateFilter = class extends BaseFilter {
16371
- render(value, setValue, tid, inModal, vertical) {
16372
- const { label, operations, getOperationValue, getOperationLabel } = this.props;
16373
- return /* @__PURE__ */ jsxs66(Fragment25, { children: [
16374
- vertical && /* @__PURE__ */ jsx137(Label, { label }),
16375
- /* @__PURE__ */ jsxs66(CompoundField, { children: [
16376
- /* @__PURE__ */ jsx137(
16377
- SelectField,
16378
- {
16379
- compact: true,
16380
- sizeToContent: true,
16381
- options: [
16382
- // Always show the 'Any' option
16383
- anyOption,
16384
- ...operations
16385
- ],
16386
- getOptionValue: (o) => o === anyOption ? void 0 : getOperationValue(o),
16387
- getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
16388
- value: value?.op,
16389
- onSelect: (op) => (
16390
- // default the selected date to today if it doesn't exist in the filter's value
16391
- setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
16392
- ),
16393
- label: inModal ? `${label} date filter operation` : label,
16394
- labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
16395
- nothingSelectedText: "Any",
16396
- ...tid[`${defaultTestId(this.label)}_dateOperation`]
16397
- }
16398
- ),
16399
- /* @__PURE__ */ jsx137(
16400
- DateField,
16401
- {
16402
- compact: true,
16403
- labelStyle: "inline",
16404
- value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
16405
- label: "Date",
16406
- onChange: (d) => setValue({ ...value, value: d }),
16407
- disabled: !value,
16408
- ...tid[`${defaultTestId(this.label)}_dateField`]
16409
- }
16410
- )
16411
- ] })
16412
- ] });
16413
- }
16414
- };
16415
16465
 
16416
- // src/components/Filters/DateRangeFilter.tsx
16417
- import { Fragment as Fragment26, jsx as jsx138, jsxs as jsxs67 } from "@emotion/react/jsx-runtime";
16418
- function dateRangeFilter(props) {
16419
- 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
+ ] }) }) }) }) }) });
16420
16516
  }
16421
- var DateRangeFilter = class extends BaseFilter {
16422
- render(value, setValue, tid, inModal, vertical) {
16423
- const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
16424
- return /* @__PURE__ */ jsxs67(Fragment26, { children: [
16425
- vertical && /* @__PURE__ */ jsx138(Label, { label }),
16426
- /* @__PURE__ */ jsx138(
16427
- DateRangeField,
16428
- {
16429
- compact: true,
16430
- labelStyle: "inline",
16431
- isRangeFilterField: true,
16432
- placeholder: placeholderText,
16433
- label: testFieldLabel ?? "Date",
16434
- value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
16435
- onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
16436
- disabledDays,
16437
- ...tid[`${defaultTestId(this.label)}_dateField`]
16438
- }
16439
- )
16440
- ] });
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();
16441
16528
  }
16442
16529
  };
16443
-
16444
- // src/components/Filters/MultiFilter.tsx
16445
- import { jsx as jsx139 } from "@emotion/react/jsx-runtime";
16446
- function multiFilter(props) {
16447
- return (key) => new MultiFilter(key, props);
16530
+ function useBeamContext() {
16531
+ return useContext15(BeamContext);
16448
16532
  }
16449
- var MultiFilter = class extends BaseFilter {
16450
- render(value, setValue, tid, inModal, vertical) {
16451
- if (inModal && Array.isArray(this.props.options) && this.props.options.length > 0 && this.props.options.length <= 8) {
16452
- const { disabledOptions } = this.props;
16453
- const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
16454
- const disabledKeys = Object.keys(disabledOptionsWithReasons);
16455
- return /* @__PURE__ */ jsx139(
16456
- ToggleChipGroup,
16457
- {
16458
- label: this.label,
16459
- options: this.props.options.map((o) => {
16460
- const value2 = this.props.getOptionValue(o);
16461
- const disabled = value2 && disabledKeys.includes(value2.toString());
16462
- const disabledReason = disabled ? disabledOptionsWithReasons[value2.toString()] : void 0;
16463
- return {
16464
- label: this.props.getOptionLabel(o),
16465
- value: value2,
16466
- disabled: disabledReason ?? disabled
16467
- };
16468
- }),
16469
- onChange: (values) => {
16470
- setValue(values.length === 0 ? void 0 : values);
16471
- },
16472
- values: value || [],
16473
- labelStyle: "hidden",
16474
- ...tid[defaultTestId(this.label)]
16475
- }
16476
- );
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
16477
16557
  }
16478
- const { defaultValue, nothingSelectedText, ...props } = this.props;
16479
- return /* @__PURE__ */ jsx139(
16480
- 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",
16481
16589
  {
16482
- ...props,
16483
- compact: !vertical,
16484
- label: this.label,
16485
- values: value || [],
16486
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16487
- sizeToContent: !inModal && !vertical,
16488
- onSelect: (values) => {
16489
- 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] : {}
16490
16601
  },
16491
- nothingSelectedText: nothingSelectedText ?? "All",
16492
- ...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
+ ]
16493
16607
  }
16494
- );
16495
- }
16496
- };
16497
-
16498
- // src/components/Filters/NumberRangeFilter.tsx
16499
- import { Fragment as Fragment27, jsx as jsx140, jsxs as jsxs68 } from "@emotion/react/jsx-runtime";
16500
- function numberRangeFilter(props) {
16501
- return (key) => new NumberRangeFilter(key, props);
16608
+ )
16609
+ }) });
16502
16610
  }
16503
- var NumberRangeFilter = class extends BaseFilter {
16504
- render(value, setValue, tid, inModal, vertical) {
16505
- const { label, numberFieldType, numberFormatOptions } = this.props;
16506
- const min = value?.min ?? void 0;
16507
- const max = value?.max ?? void 0;
16508
- return /* @__PURE__ */ jsxs68(Fragment27, { children: [
16509
- vertical && /* @__PURE__ */ jsxs68("div", { ...tid, children: [
16510
- /* @__PURE__ */ jsx140(Label, { label }),
16511
- /* @__PURE__ */ jsx140("div", { css: Css.pb1.$, children: /* @__PURE__ */ jsx140(
16512
- NumberField,
16513
- {
16514
- labelStyle: "inline",
16515
- clearable: true,
16516
- label: "Min",
16517
- value: min,
16518
- type: numberFieldType,
16519
- numberFormatOptions,
16520
- onChange: (minVal) => {
16521
- const maxValue = max ? { max } : {};
16522
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16523
- },
16524
- ...tid[`${defaultTestId(label)}_min_vertical`]
16525
- }
16526
- ) }),
16527
- /* @__PURE__ */ jsx140(
16528
- NumberField,
16529
- {
16530
- labelStyle: "inline",
16531
- clearable: true,
16532
- label: "Max",
16533
- value: max,
16534
- type: numberFieldType,
16535
- numberFormatOptions,
16536
- onChange: (maxVal) => {
16537
- const minValue = min ? { min } : {};
16538
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16539
- },
16540
- ...tid[`${defaultTestId(label)}_max_vertical`]
16541
- }
16542
- )
16543
- ] }),
16544
- !vertical && /* @__PURE__ */ jsxs68(CompoundField, { ...tid, children: [
16545
- /* @__PURE__ */ jsx140(
16546
- NumberField,
16547
- {
16548
- compact: true,
16549
- sizeToContent: !inModal,
16550
- labelStyle: "inline",
16551
- clearable: true,
16552
- label: !inModal ? `${label} Min` : "Min",
16553
- value: min,
16554
- type: numberFieldType,
16555
- numberFormatOptions,
16556
- onChange: (minVal) => {
16557
- const maxValue = max ? { max } : {};
16558
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16559
- },
16560
- ...tid[`${defaultTestId(label)}_min`]
16561
- }
16562
- ),
16563
- /* @__PURE__ */ jsx140(
16564
- NumberField,
16565
- {
16566
- compact: true,
16567
- sizeToContent: !inModal,
16568
- labelStyle: "inline",
16569
- clearable: true,
16570
- label: !inModal ? `${label} Max` : "Max",
16571
- value: max,
16572
- type: numberFieldType,
16573
- numberFormatOptions,
16574
- onChange: (maxVal) => {
16575
- const minValue = min ? { min } : {};
16576
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16577
- },
16578
- ...tid[`${defaultTestId(label)}_max`]
16579
- }
16580
- )
16581
- ] })
16582
- ] });
16583
- }
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.$
16584
16635
  };
16585
16636
 
16586
- // src/components/Filters/SingleFilter.tsx
16587
- import { jsx as jsx141 } from "@emotion/react/jsx-runtime";
16588
- function singleFilter(props) {
16589
- 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
+ );
16590
16681
  }
16591
- var allOption = {};
16592
- var SingleFilter = class extends BaseFilter {
16593
- render(value, setValue, tid, inModal, vertical) {
16594
- const {
16595
- label,
16596
- defaultValue,
16597
- options: maybeOptions,
16598
- getOptionLabel,
16599
- getOptionValue,
16600
- nothingSelectedText,
16601
- ...props
16602
- } = this.props;
16603
- const options = Array.isArray(maybeOptions) ? [allOption, ...maybeOptions] : { ...maybeOptions, current: maybeOptions.current };
16604
- return /* @__PURE__ */ jsx141(
16605
- SelectField,
16606
- {
16607
- ...props,
16608
- options,
16609
- getOptionValue: (o) => o === allOption ? void 0 : getOptionValue(o),
16610
- getOptionLabel: (o) => o === allOption ? nothingSelectedText ?? "All" : getOptionLabel(o),
16611
- compact: !vertical,
16612
- value,
16613
- label: this.label,
16614
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16615
- sizeToContent: !inModal && !vertical,
16616
- nothingSelectedText: nothingSelectedText ?? "All",
16617
- onSelect: (value2) => setValue(value2 || void 0),
16618
- ...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);
16619
16705
  }
16620
- );
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.$;
16621
16728
  }
16622
- };
16623
-
16624
- // src/components/Filters/TreeFilter.tsx
16625
- import { jsx as jsx142 } from "@emotion/react/jsx-runtime";
16626
- function treeFilter(props) {
16627
- return (key) => new TreeFilter(key, props);
16628
16729
  }
16629
- var TreeFilter = class extends BaseFilter {
16630
- render(value, setValue, tid, inModal, vertical) {
16631
- const { defaultValue, nothingSelectedText, filterBy = "root", ...props } = this.props;
16632
- return /* @__PURE__ */ jsx142(
16633
- TreeSelectField,
16634
- {
16635
- ...props,
16636
- label: this.label,
16637
- values: value,
16638
- compact: !vertical,
16639
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16640
- sizeToContent: !inModal && !vertical,
16641
- onSelect: (options) => {
16642
- const values = options[filterBy].values;
16643
- 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
16644
16767
  },
16645
- nothingSelectedText: nothingSelectedText ?? "All",
16646
- ...this.testId(tid)
16768
+ children: /* @__PURE__ */ jsx149("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
16647
16769
  }
16648
- );
16649
- }
16650
- };
16651
-
16652
- // src/components/Filters/BooleanFilter.tsx
16653
- import { jsx as jsx143 } from "@emotion/react/jsx-runtime";
16654
- function booleanFilter(props) {
16655
- return (key) => new BooleanFilter(key, props);
16656
- }
16657
- var BooleanFilter = class extends BaseFilter {
16658
- render(value, setValue, tid, inModal, vertical) {
16659
- const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;
16660
- return /* @__PURE__ */ jsx143(
16661
- SelectField,
16770
+ ),
16771
+ isHovered && buttonMenuItems && /* @__PURE__ */ jsx149("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ jsx149(
16772
+ ButtonMenu,
16662
16773
  {
16663
- ...props,
16664
- compact: !vertical,
16665
- label: this.label,
16666
- value: String(value),
16667
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16668
- sizeToContent: !inModal && !vertical,
16669
- options,
16670
- getOptionValue: (o) => String(o[0]),
16671
- getOptionLabel: (o) => o[1],
16672
- onSelect: (value2) => {
16673
- const parsedValue = value2 === "undefined" ? void 0 : value2 === "true";
16674
- setValue(parsedValue);
16675
- },
16676
- ...this.testId(tid)
16774
+ trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
16775
+ items: buttonMenuItems
16677
16776
  }
16678
- );
16679
- }
16680
- };
16681
- var defaultBooleanOptions = [
16682
- [void 0, "Any"],
16683
- [true, "Yes"],
16684
- [false, "No"]
16685
- ];
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").$;
16686
16795
 
16687
- // src/components/Filters/CheckboxFilter.tsx
16688
- import { jsx as jsx144 } from "@emotion/react/jsx-runtime";
16689
- function checkboxFilter(props) {
16690
- return (key) => new CheckboxFilter(key, {
16691
- // If the user has set the offValue, that should be the default b/c we're only a two-state
16692
- defaultValue: props.offValue,
16693
- ...props
16694
- });
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
+ );
16695
16809
  }
16696
- var CheckboxFilter = class extends BaseFilter {
16697
- render(value, setValue, tid, inModal, vertical) {
16698
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16699
- return /* @__PURE__ */ jsx144(
16700
- Checkbox,
16701
- {
16702
- ...props,
16703
- selected: value === void 0 ? false : value === onValue,
16704
- label: this.label,
16705
- onChange: (on) => {
16706
- setValue(on ? onValue : offValue);
16707
- },
16708
- ...this.testId(tid)
16709
- }
16710
- );
16711
- }
16712
- get hideLabelInModal() {
16713
- return true;
16714
- }
16715
- };
16716
16810
 
16717
- // src/components/Filters/FilterModal.tsx
16718
- 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";
16719
16814
 
16720
- // src/components/Modal/OpenModal.tsx
16721
- import { useEffect as useEffect25 } from "react";
16722
- import { jsx as jsx145 } from "@emotion/react/jsx-runtime";
16723
- function OpenModal(props) {
16724
- const { openModal } = useModal();
16725
- const { size, children, keepOpen } = props;
16726
- useEffect25(() => {
16727
- if (!keepOpen) {
16728
- openModal({ size, content: children });
16729
- }
16730
- }, [keepOpen, openModal, size, children]);
16731
- if (keepOpen) {
16732
- return /* @__PURE__ */ jsx145(Modal, { size, content: children });
16733
- } else {
16734
- 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: () => {
16735
16820
  }
16821
+ });
16822
+ function useDnDGridContext() {
16823
+ return useContext16(DnDGridContext);
16736
16824
  }
16737
16825
 
16738
- // src/components/Filters/FilterModal.tsx
16739
- import { Fragment as Fragment28, jsx as jsx146, jsxs as jsxs69 } from "@emotion/react/jsx-runtime";
16740
- function FilterModal(props) {
16741
- const { filter, filters, onApply } = props;
16742
- const testId = useTestIds(props, filterTestIdPrefix);
16743
- const { closeModal } = useModal();
16744
- const [modalFilter, setModalFilter] = useState37(filter);
16745
- return /* @__PURE__ */ jsxs69(Fragment28, { children: [
16746
- /* @__PURE__ */ jsx146(ModalHeader, { children: "More Filters" }),
16747
- /* @__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(
16748
- modalFilter[key],
16749
- (value) => setModalFilter(updateFilter(modalFilter, key, value)),
16750
- testId,
16751
- true,
16752
- false
16753
- ) }, key)) }) }),
16754
- /* @__PURE__ */ jsxs69(ModalFooter, { xss: Css.jcsb.$, children: [
16755
- /* @__PURE__ */ jsx146(
16756
- Button,
16757
- {
16758
- label: "Clear",
16759
- variant: "tertiary",
16760
- disabled: safeKeys(filters).filter((fk) => modalFilter[fk] !== void 0).length === 0,
16761
- onClick: () => (
16762
- // Only remove the filters keys that exist in the modal.
16763
- setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))
16764
- ),
16765
- ...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;
16766
16960
  }
16767
- ),
16768
- /* @__PURE__ */ jsxs69("div", { css: Css.df.gap1.$, children: [
16769
- /* @__PURE__ */ jsx146(Button, { label: "Cancel", variant: "tertiary", onClick: closeModal, ...testId.modalClose }),
16770
- /* @__PURE__ */ jsx146(
16771
- Button,
16772
- {
16773
- label: "Apply",
16774
- onClick: () => {
16775
- onApply(modalFilter);
16776
- closeModal();
16777
- },
16778
- ...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();
16779
16969
  }
16780
- )
16781
- ] })
16782
- ] })
16783
- ] });
16784
- }
16785
- function ModalFilterItem({ label, children }) {
16786
- return /* @__PURE__ */ jsxs69("div", { css: Css.mb4.if(!label).bt.bcGray200.$, children: [
16787
- label && /* @__PURE__ */ jsx146("h2", { css: Css.baseMd.mb2.$, children: label }),
16788
- /* @__PURE__ */ jsx146("div", { css: Css.if(!label).pt3.$, children })
16789
- ] });
16790
- }
16791
-
16792
- // src/components/Filters/Filters.tsx
16793
- import { memo, useMemo as useMemo36 } from "react";
16794
- import { jsx as jsx147, jsxs as jsxs70 } from "@emotion/react/jsx-runtime";
16795
- function Filters(props) {
16796
- const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;
16797
- const testId = useTestIds(props, filterTestIdPrefix);
16798
- const { openModal } = useModal();
16799
- const [pageFilters, modalFilters] = useMemo36(() => {
16800
- const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key)]);
16801
- if (!vertical && impls.length > numberOfInlineFilters) {
16802
- return [
16803
- Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)),
16804
- Object.fromEntries(impls.slice(numberOfInlineFilters - 1))
16805
- ];
16806
- }
16807
- return [Object.fromEntries(impls), {}];
16808
- }, [numberOfInlineFilters, vertical, filterDefs]);
16809
- const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== void 0).length;
16810
- const maybeGroupByField = groupBy ? /* @__PURE__ */ jsx147("div", { children: /* @__PURE__ */ jsx147(
16811
- 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",
16812
17002
  {
16813
- label: "Group by",
16814
- compact: !vertical,
16815
- labelStyle: !vertical ? "inline" : "above",
16816
- sizeToContent: !vertical,
16817
- options: groupBy.options,
16818
- getOptionValue: (o) => o.id,
16819
- getOptionLabel: (o) => o.name,
16820
- value: groupBy.value,
16821
- 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
16822
17014
  }
16823
- ) }) : null;
16824
- return /* @__PURE__ */ jsxs70(
16825
- "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",
16826
17033
  {
16827
17034
  css: {
16828
- ...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.$
16829
17038
  },
16830
- ...testId,
16831
- children: [
16832
- maybeGroupByField,
16833
- safeEntries(pageFilters).map(([key, f]) => /* @__PURE__ */ jsx147("div", { children: f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical) }, key)),
16834
- Object.keys(modalFilters).length > 0 && /* @__PURE__ */ jsx147(
16835
- Button,
16836
- {
16837
- label: "More Filters",
16838
- endAdornment: numModalFilters > 0 && /* @__PURE__ */ jsx147("span", { css: Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$, children: numModalFilters }),
16839
- variant: "secondary",
16840
- onClick: () => openModal({
16841
- // Spreading `props` to pass along `data-testid`
16842
- content: /* @__PURE__ */ jsx147(FilterModal, { ...props, filter, onApply: onChange, filters: modalFilters })
16843
- }),
16844
- ...testId.moreFiltersBtn
16845
- }
16846
- ),
16847
- Object.keys(filter).length > 0 && /* @__PURE__ */ jsx147("div", { children: /* @__PURE__ */ jsx147(Button, { label: "Clear", variant: "tertiary", onClick: () => onChange({}), ...testId.clearBtn }) })
16848
- ]
17039
+ ...mergeProps12(dragHandleProps, focusProps, hoverProps),
17040
+ ...tid,
17041
+ children: /* @__PURE__ */ jsx152(Icon, { icon, inc: compact ? 2 : void 0, color })
16849
17042
  }
16850
17043
  );
16851
17044
  }
16852
- var _Filters = memo(Filters);
16853
17045
 
16854
- // src/components/Filters/ToggleFilter.tsx
16855
- import { jsx as jsx148 } from "@emotion/react/jsx-runtime";
16856
- function toggleFilter(props) {
16857
- return (key) => new ToggleFilter(key, {
16858
- // If the user has set the offValue, that should be the default b/c we're only a two-state
16859
- defaultValue: props.offValue,
16860
- ...props
16861
- });
16862
- }
16863
- var ToggleFilter = class extends BaseFilter {
16864
- render(value, setValue, tid, inModal, vertical) {
16865
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16866
- return /* @__PURE__ */ jsx148(
16867
- Switch,
16868
- {
16869
- ...props,
16870
- selected: value === void 0 ? false : value === onValue,
16871
- label: this.label,
16872
- labelStyle: inModal || vertical ? "filter" : "inline",
16873
- onChange: (on) => {
16874
- setValue(on ? onValue : offValue);
16875
- },
16876
- ...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
+ }
16877
17057
  }
16878
- );
16879
- }
16880
- get hideLabelInModal() {
16881
- return true;
16882
- }
16883
- };
16884
-
16885
- // src/components/Filters/utils.tsx
16886
- function updateFilter(currentFilter, key, value) {
16887
- if (value === void 0) {
16888
- return omitKey(key, currentFilter);
16889
- } else {
16890
- return { ...currentFilter, [key]: value };
16891
- }
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 };
16892
17075
  }
16893
- var filterTestIdPrefix = "filter";
16894
17076
 
16895
17077
  // src/components/Grid/ResponsiveGrid.tsx
16896
- import { jsx as jsx149 } from "@emotion/react/jsx-runtime";
17078
+ import { jsx as jsx153 } from "@emotion/react/jsx-runtime";
16897
17079
  function ResponsiveGrid(props) {
16898
17080
  const { children, ...hookProps } = props;
16899
17081
  const { gridStyles } = useResponsiveGrid(hookProps);
16900
- return /* @__PURE__ */ jsx149("div", { css: { ...gridStyles }, children });
17082
+ return /* @__PURE__ */ jsx153("div", { css: { ...gridStyles }, children });
16901
17083
  }
16902
17084
 
16903
17085
  // src/components/Grid/ResponsiveGridItem.tsx
16904
- import { jsx as jsx150 } from "@emotion/react/jsx-runtime";
17086
+ import { jsx as jsx154 } from "@emotion/react/jsx-runtime";
16905
17087
  function ResponsiveGridItem(props) {
16906
17088
  const { colSpan, children } = props;
16907
17089
  const { gridItemProps } = useResponsiveGridItem({ colSpan });
16908
- return /* @__PURE__ */ jsx150("div", { ...gridItemProps, children });
17090
+ return /* @__PURE__ */ jsx154("div", { ...gridItemProps, children });
16909
17091
  }
16910
17092
 
16911
17093
  // src/components/Grid/useResponsiveGrid.ts
16912
- import { useMemo as useMemo37 } from "react";
17094
+ import { useMemo as useMemo38 } from "react";
16913
17095
 
16914
17096
  // src/components/Grid/utils.ts
16915
17097
  var gridItemDataAttribute = "data-grid-item-span";
@@ -16917,7 +17099,7 @@ var gridItemDataAttribute = "data-grid-item-span";
16917
17099
  // src/components/Grid/useResponsiveGrid.ts
16918
17100
  function useResponsiveGrid(props) {
16919
17101
  const { minColumnWidth, gap, columns } = props;
16920
- const gridStyles = useMemo37(() => {
17102
+ const gridStyles = useMemo38(() => {
16921
17103
  const gapCount = columns - 1;
16922
17104
  const totalGapWidth = gap * gapCount;
16923
17105
  const maxColumnWidth = `calc((100% - ${totalGapWidth}px) / ${columns})`;
@@ -16958,24 +17140,24 @@ function useResponsiveGridItem({ colSpan = 1 }) {
16958
17140
  }
16959
17141
 
16960
17142
  // src/components/HbLoadingSpinner.tsx
16961
- import React19, { useContext as useContext17, useMemo as useMemo38 } from "react";
17143
+ import React20, { useContext as useContext17, useMemo as useMemo39 } from "react";
16962
17144
 
16963
17145
  // src/components/HbLoadingSpinner.base64.ts
16964
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";
16965
17147
 
16966
17148
  // src/components/HbLoadingSpinner.tsx
16967
- 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";
16968
17150
  function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }) {
16969
17151
  const ctx = useContext17(HbLoadingSpinnerContext);
16970
17152
  const tid = useTestIds({}, "hbSpinner");
16971
- const quip = useMemo38(() => {
17153
+ const quip = useMemo39(() => {
16972
17154
  const allQuips = extraQuipsOnly && extraQuips.length !== 0 ? extraQuips : [...ctx.quips, ...extraQuips];
16973
17155
  const forceQuips = extraQuips.length !== 0 || noQuips === false;
16974
17156
  if (ctx.noQuips && !forceQuips || noQuips || allQuips.length === 0) return "Loading...";
16975
17157
  return allQuips[Math.floor(Math.random() * allQuips.length)];
16976
17158
  }, [ctx.noQuips, ctx.quips, extraQuips, extraQuipsOnly, noQuips]);
16977
- return /* @__PURE__ */ jsxs71("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
16978
- /* @__PURE__ */ jsx151(
17159
+ return /* @__PURE__ */ jsxs73("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
17160
+ /* @__PURE__ */ jsx155(
16979
17161
  "img",
16980
17162
  {
16981
17163
  src: HbLoadingSpinner_base64_default,
@@ -16988,7 +17170,7 @@ function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }
16988
17170
  ...tid.gif
16989
17171
  }
16990
17172
  ),
16991
- !iconOnly && /* @__PURE__ */ jsx151(
17173
+ !iconOnly && /* @__PURE__ */ jsx155(
16992
17174
  "div",
16993
17175
  {
16994
17176
  "data-chromatic": "ignore",
@@ -17008,63 +17190,28 @@ var HB_QUIPS_MISSION = [
17008
17190
  "In Service of Our Customers"
17009
17191
  ].map(dotDotDot);
17010
17192
  var HB_QUIPS_FLAVOR = ["HOM is HOW", "Scaling Massively", "#LoveIt"].map(dotDotDot);
17011
- var HbLoadingSpinnerContext = React19.createContext({
17193
+ var HbLoadingSpinnerContext = React20.createContext({
17012
17194
  quips: ["Loading..."],
17013
17195
  noQuips: false
17014
17196
  });
17015
17197
  function HbSpinnerProvider({ quips = [], children }) {
17016
- const state = useMemo38(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17017
- return /* @__PURE__ */ jsx151(HbLoadingSpinnerContext.Provider, { value: state, children });
17018
- }
17019
-
17020
- // src/components/LoadingSkeleton.tsx
17021
- import { jsx as jsx152 } from "@emotion/react/jsx-runtime";
17022
- function LoadingSkeleton({
17023
- rows = 1,
17024
- columns = 1,
17025
- size = "md",
17026
- randomizeWidths = false,
17027
- contrast = false
17028
- }) {
17029
- const cellArray = [...Array(columns)];
17030
- const rowArray = [...Array(rows)];
17031
- const rowHeight = sizeToPixels2[size];
17032
- const rowCells = (rowNumber) => {
17033
- const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;
17034
- return cellArray.map((_, i) => /* @__PURE__ */ jsx152(
17035
- "div",
17036
- {
17037
- css: Css.br4.add("animation", "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite").add("flexGrow", flexGrowForCell).bgGray300.if(contrast).bgGray700.$
17038
- },
17039
- `row-${rowNumber}-cell-${i}`
17040
- ));
17041
- };
17042
- 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}`)) });
17043
- }
17044
- function getRandomizedFlexBasisByRowIndex(rowIndex) {
17045
- const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];
17046
- const valueIndex = rowIndex % randomizedFlexBasisValues.length;
17047
- return randomizedFlexBasisValues[valueIndex];
17198
+ const state = useMemo39(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17199
+ return /* @__PURE__ */ jsx155(HbLoadingSpinnerContext.Provider, { value: state, children });
17048
17200
  }
17049
- var sizeToPixels2 = {
17050
- sm: 16,
17051
- md: 24,
17052
- lg: 32
17053
- };
17054
17201
 
17055
17202
  // src/components/MaxLines.tsx
17056
17203
  import { useLayoutEffect as useLayoutEffect2, useResizeObserver as useResizeObserver5 } from "@react-aria/utils";
17057
- import { useCallback as useCallback21, useEffect as useEffect26, useRef as useRef49, useState as useState38 } from "react";
17058
- 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";
17059
17206
  function MaxLines({ maxLines, children }) {
17060
17207
  const elRef = useRef49(null);
17061
- const [hasMore, setHasMore] = useState38(false);
17062
- const [expanded, setExpanded] = useState38(false);
17208
+ const [hasMore, setHasMore] = useState39(false);
17209
+ const [expanded, setExpanded] = useState39(false);
17063
17210
  useLayoutEffect2(() => {
17064
17211
  if (!elRef.current) return;
17065
17212
  setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17066
17213
  }, []);
17067
- useEffect26(() => {
17214
+ useEffect27(() => {
17068
17215
  setExpanded(false);
17069
17216
  }, [children]);
17070
17217
  const onResize = useCallback21(() => {
@@ -17072,14 +17219,14 @@ function MaxLines({ maxLines, children }) {
17072
17219
  !expanded && setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17073
17220
  }, [expanded]);
17074
17221
  useResizeObserver5({ ref: elRef, onResize });
17075
- return /* @__PURE__ */ jsxs72("div", { children: [
17076
- /* @__PURE__ */ jsx153("div", { ref: elRef, css: Css.if(!expanded).lineClamp(maxLines).$, children }),
17077
- 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" })
17078
17225
  ] });
17079
17226
  }
17080
17227
 
17081
17228
  // src/components/Pagination.tsx
17082
- 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";
17083
17230
  var defaultPage = { offset: 0, limit: 100 };
17084
17231
  function Pagination(props) {
17085
17232
  const { totalCount, pageSizes = [100, 500, 1e3] } = props;
@@ -17099,9 +17246,9 @@ function Pagination(props) {
17099
17246
  }
17100
17247
  }
17101
17248
  const tid = useTestIds(props, "pagination");
17102
- return /* @__PURE__ */ jsxs73("div", { css: Css.df.bcGray200.bt.xs.gray500.px2.pt2.$, ...tid, children: [
17103
- /* @__PURE__ */ jsx154("div", { css: Css.df.mya.mr2.$, ...tid.pageSizeLabel, children: "Page size:" }),
17104
- /* @__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(
17105
17252
  SelectField,
17106
17253
  {
17107
17254
  compact: true,
@@ -17113,15 +17260,15 @@ function Pagination(props) {
17113
17260
  ...tid.pageSize
17114
17261
  }
17115
17262
  ) }),
17116
- /* @__PURE__ */ jsxs73("div", { css: Css.mla.mya.df.$, children: [
17117
- /* @__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: [
17118
17265
  first,
17119
17266
  " ",
17120
17267
  showLast ? `- ${last}` : "",
17121
17268
  " of ",
17122
17269
  totalCount
17123
17270
  ] }),
17124
- /* @__PURE__ */ jsx154(
17271
+ /* @__PURE__ */ jsx157(
17125
17272
  IconButton,
17126
17273
  {
17127
17274
  icon: "chevronLeft",
@@ -17131,7 +17278,7 @@ function Pagination(props) {
17131
17278
  ...tid.previousIcon
17132
17279
  }
17133
17280
  ),
17134
- /* @__PURE__ */ jsx154(
17281
+ /* @__PURE__ */ jsx157(
17135
17282
  IconButton,
17136
17283
  {
17137
17284
  icon: "chevronRight",
@@ -17160,8 +17307,8 @@ function toPageNumberSize(page) {
17160
17307
 
17161
17308
  // src/components/ScrollShadows.tsx
17162
17309
  import { useResizeObserver as useResizeObserver6 } from "@react-aria/utils";
17163
- import { useCallback as useCallback22, useMemo as useMemo39, useRef as useRef50, useState as useState39 } from "react";
17164
- 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";
17165
17312
  function ScrollShadows(props) {
17166
17313
  const { children, xss, horizontal = false, bgColor = "rgba(255,255,255,1)" /* White */ } = props;
17167
17314
  const { height = "auto", width: width2 = "auto" } = xss ?? {};
@@ -17169,10 +17316,10 @@ function ScrollShadows(props) {
17169
17316
  if (!bgColor.includes("rgba")) {
17170
17317
  throw new Error("ScrollShadows: bgColor prop must be in the format 'rgba(255, 255, 255, 1)'");
17171
17318
  }
17172
- const [showStartShadow, setShowStartShadow] = useState39(false);
17173
- const [showEndShadow, setShowEndShadow] = useState39(false);
17319
+ const [showStartShadow, setShowStartShadow] = useState40(false);
17320
+ const [showEndShadow, setShowEndShadow] = useState40(false);
17174
17321
  const scrollRef = useRef50(null);
17175
- const [startShadowStyles, endShadowStyles] = useMemo39(() => {
17322
+ const [startShadowStyles, endShadowStyles] = useMemo40(() => {
17176
17323
  const transparentBgColor = bgColor.replace(/,1\)$/, ",0)");
17177
17324
  const commonStyles = Css.absolute.z3.add({ pointerEvents: "none" }).$;
17178
17325
  const startShadowStyles2 = !horizontal ? Css.top0.left0.right0.hPx(40).$ : Css.left0.top0.bottom0.wPx(25).$;
@@ -17197,15 +17344,15 @@ function ScrollShadows(props) {
17197
17344
  );
17198
17345
  const onResize = useCallback22(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
17199
17346
  useResizeObserver6({ ref: scrollRef, onResize });
17200
- return /* @__PURE__ */ jsxs74(
17347
+ return /* @__PURE__ */ jsxs76(
17201
17348
  "div",
17202
17349
  {
17203
17350
  css: Css.relative.oh.h(height).w(width2).df.fd(!horizontal ? "column" : "row").$,
17204
17351
  ...tid,
17205
17352
  children: [
17206
- /* @__PURE__ */ jsx155("div", { css: { ...startShadowStyles, opacity: showStartShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17207
- /* @__PURE__ */ jsx155("div", { css: { ...endShadowStyles, opacity: showEndShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17208
- /* @__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(
17209
17356
  "div",
17210
17357
  {
17211
17358
  css: {
@@ -17223,7 +17370,7 @@ function ScrollShadows(props) {
17223
17370
  }
17224
17371
 
17225
17372
  // src/components/Snackbar/useSnackbar.tsx
17226
- import { useCallback as useCallback23, useEffect as useEffect27 } from "react";
17373
+ import { useCallback as useCallback23, useEffect as useEffect28 } from "react";
17227
17374
  function useSnackbar() {
17228
17375
  const { setNotices, setOffset } = useSnackbarContext();
17229
17376
  const onClose = useCallback23(
@@ -17273,7 +17420,7 @@ function useSnackbar() {
17273
17420
  [onClose, setNotices]
17274
17421
  );
17275
17422
  const closeNotice = useCallback23((id) => onClose(id), [onClose]);
17276
- const useSnackbarOffset = ({ bottom }) => useEffect27(() => {
17423
+ const useSnackbarOffset = ({ bottom }) => useEffect28(() => {
17277
17424
  setOffset({ bottom });
17278
17425
  return () => setOffset({});
17279
17426
  }, [bottom]);
@@ -17284,7 +17431,7 @@ var snackbarId = 1;
17284
17431
  // src/components/Stepper.tsx
17285
17432
  import { useRef as useRef51 } from "react";
17286
17433
  import { useButton as useButton11, useFocusRing as useFocusRing14, useHover as useHover18 } from "react-aria";
17287
- 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";
17288
17435
  function Stepper(props) {
17289
17436
  const { steps, currentStep, onChange } = props;
17290
17437
  if (steps.length === 0) {
@@ -17295,25 +17442,25 @@ function Stepper(props) {
17295
17442
  const maxStepWidth = 200;
17296
17443
  const minStepWidth = 100;
17297
17444
  const gap = 8;
17298
- return /* @__PURE__ */ jsxs75("nav", { "aria-label": "steps", css: Css.df.fdc.w100.$, ...tid, children: [
17299
- /* @__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) => {
17300
17447
  const isCurrent = currentStep === step.value;
17301
- return /* @__PURE__ */ jsx156(
17448
+ return /* @__PURE__ */ jsx159(
17302
17449
  "li",
17303
17450
  {
17304
17451
  css: Css.df.fg1.fdc.maxwPx(maxStepWidth).mwPx(minStepWidth).$,
17305
17452
  "aria-current": isCurrent,
17306
17453
  ...tid.step,
17307
- 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 })
17308
17455
  },
17309
17456
  step.label
17310
17457
  );
17311
17458
  }) }),
17312
- /* @__PURE__ */ jsx156(
17459
+ /* @__PURE__ */ jsx159(
17313
17460
  "div",
17314
17461
  {
17315
17462
  css: Css.mt1.bgGray300.hPx(4).maxwPx(steps.length * maxStepWidth + (steps.length - 1) * gap).mwPx(steps.length * minStepWidth + (steps.length - 1) * gap).w100.$,
17316
- children: /* @__PURE__ */ jsx156(
17463
+ children: /* @__PURE__ */ jsx159(
17317
17464
  "div",
17318
17465
  {
17319
17466
  css: Css.bgBlue600.add("transition", "width 200ms").h100.w(`${(lastCompletedStep + 1) / steps.length * 100}%`).$
@@ -17332,7 +17479,7 @@ function StepButton(props) {
17332
17479
  const { hoverProps, isHovered } = useHover18(ariaProps);
17333
17480
  const focusRingStyles2 = state === "error" ? Css.bshDanger.$ : Css.bshFocus.$;
17334
17481
  const tid = useTestIds(props, "stepButton");
17335
- return /* @__PURE__ */ jsxs75(
17482
+ return /* @__PURE__ */ jsxs77(
17336
17483
  "button",
17337
17484
  {
17338
17485
  ref,
@@ -17350,7 +17497,7 @@ function StepButton(props) {
17350
17497
  },
17351
17498
  ...tid[defaultTestId(label)],
17352
17499
  children: [
17353
- /* @__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 }) }),
17354
17501
  label
17355
17502
  ]
17356
17503
  }
@@ -17358,12 +17505,12 @@ function StepButton(props) {
17358
17505
  }
17359
17506
  function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = false }) {
17360
17507
  if (state === "error") {
17361
- return /* @__PURE__ */ jsx156(Icon, { icon: "errorCircle" });
17508
+ return /* @__PURE__ */ jsx159(Icon, { icon: "errorCircle" });
17362
17509
  }
17363
17510
  if (state === "complete") {
17364
- return /* @__PURE__ */ jsx156(Icon, { icon: "check" });
17511
+ return /* @__PURE__ */ jsx159(Icon, { icon: "check" });
17365
17512
  }
17366
- 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(
17367
17514
  "div",
17368
17515
  {
17369
17516
  css: Css.wPx(10).hPx(10).ba.bw2.br100.add("color", "currentColor").if(isHovered || isPressed || isCurrent).add("backgroundColor", "currentColor").$
@@ -17373,7 +17520,7 @@ function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = fal
17373
17520
 
17374
17521
  // src/components/SuperDrawer/components/SuperDrawerHeader.tsx
17375
17522
  import { createPortal as createPortal5 } from "react-dom";
17376
- 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";
17377
17524
  function SuperDrawerHeader(props) {
17378
17525
  const { hideControls } = props;
17379
17526
  const { sdHeaderDiv, drawerContentStack: contentStack } = useBeamContext();
@@ -17383,15 +17530,15 @@ function SuperDrawerHeader(props) {
17383
17530
  const isDetail = currentContent !== firstContent;
17384
17531
  const tid = useTestIds({}, "superDrawerHeader");
17385
17532
  return createPortal5(
17386
- /* @__PURE__ */ jsxs76("div", { css: Css.df.aic.jcsb.gap3.$, ...tid, children: [
17387
- isStructuredProps(props) ? /* @__PURE__ */ jsxs76("div", { css: Css.df.jcsb.aic.gap2.fg1.$, children: [
17388
- /* @__PURE__ */ jsxs76("div", { css: Css.fg1.df.aic.gap2.$, children: [
17389
- 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,
17390
17537
  props.left
17391
17538
  ] }),
17392
- props.right && /* @__PURE__ */ jsx157("div", { css: Css.fs0.$, children: props.right })
17393
- ] }) : /* @__PURE__ */ jsx157("div", { css: Css.fg1.$, children: props.children }),
17394
- !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(
17395
17542
  ButtonGroup,
17396
17543
  {
17397
17544
  buttons: [
@@ -17410,18 +17557,18 @@ function isStructuredProps(props) {
17410
17557
  }
17411
17558
 
17412
17559
  // src/components/SuperDrawer/ConfirmCloseModal.tsx
17413
- 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";
17414
17561
  function ConfirmCloseModal(props) {
17415
17562
  const { onClose, discardText = "Discard Changes", continueText = "Continue Editing" } = props;
17416
17563
  const { modalState } = useBeamContext();
17417
17564
  function closeModal() {
17418
17565
  modalState.current = void 0;
17419
17566
  }
17420
- return /* @__PURE__ */ jsxs77(Fragment29, { children: [
17421
- /* @__PURE__ */ jsx158(ModalHeader, { children: "Are you sure you want to cancel?" }),
17422
- /* @__PURE__ */ jsx158(ModalBody, { children: /* @__PURE__ */ jsx158("p", { children: "Any changes you've made so far will be lost." }) }),
17423
- /* @__PURE__ */ jsxs77(ModalFooter, { children: [
17424
- /* @__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(
17425
17572
  Button,
17426
17573
  {
17427
17574
  variant: "tertiary",
@@ -17432,7 +17579,7 @@ function ConfirmCloseModal(props) {
17432
17579
  }
17433
17580
  }
17434
17581
  ),
17435
- /* @__PURE__ */ jsx158(Button, { label: continueText, onClick: closeModal })
17582
+ /* @__PURE__ */ jsx161(Button, { label: continueText, onClick: closeModal })
17436
17583
  ] })
17437
17584
  ] });
17438
17585
  }
@@ -17441,8 +17588,8 @@ function ConfirmCloseModal(props) {
17441
17588
  import { motion as motion4 } from "framer-motion";
17442
17589
 
17443
17590
  // src/components/SuperDrawer/useSuperDrawer.tsx
17444
- import { useMemo as useMemo40 } from "react";
17445
- 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";
17446
17593
  function useSuperDrawer() {
17447
17594
  const {
17448
17595
  drawerContentStack: contentStack,
@@ -17454,7 +17601,7 @@ function useSuperDrawer() {
17454
17601
  function canCloseDrawerDetails(i, doChange) {
17455
17602
  for (const canCloseDrawerDetail of canCloseDetailsChecks.current[i] ?? []) {
17456
17603
  if (!canClose(canCloseDrawerDetail)) {
17457
- openModal({ content: /* @__PURE__ */ jsx159(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17604
+ openModal({ content: /* @__PURE__ */ jsx162(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17458
17605
  return false;
17459
17606
  }
17460
17607
  }
@@ -17474,14 +17621,14 @@ function useSuperDrawer() {
17474
17621
  for (const canCloseDrawer of canCloseChecks.current) {
17475
17622
  if (!canClose(canCloseDrawer)) {
17476
17623
  openModal({
17477
- content: /* @__PURE__ */ jsx159(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17624
+ content: /* @__PURE__ */ jsx162(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17478
17625
  });
17479
17626
  return;
17480
17627
  }
17481
17628
  }
17482
17629
  doChange();
17483
17630
  }
17484
- const closeActions = useMemo40(
17631
+ const closeActions = useMemo41(
17485
17632
  () => {
17486
17633
  return {
17487
17634
  /** Attempts to close the drawer. If any checks fail, a confirmation modal will appear */
@@ -17516,7 +17663,7 @@ function useSuperDrawer() {
17516
17663
  // eslint-disable-next-line react-hooks/exhaustive-deps
17517
17664
  [canCloseChecks, canCloseDetailsChecks, contentStack, modalState, openModal]
17518
17665
  );
17519
- const actions = useMemo40(
17666
+ const actions = useMemo41(
17520
17667
  () => {
17521
17668
  return {
17522
17669
  // TODO: Maybe we should rename to openDrawer as a breaking change (to match openDrawerDetail)
@@ -17569,7 +17716,7 @@ function canClose(canCloseCheck) {
17569
17716
  }
17570
17717
 
17571
17718
  // src/components/SuperDrawer/SuperDrawerContent.tsx
17572
- 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";
17573
17720
  var SuperDrawerContent = ({ children, actions }) => {
17574
17721
  const { closeDrawerDetail } = useSuperDrawer();
17575
17722
  const { drawerContentStack: contentStack } = useBeamContext();
@@ -17578,17 +17725,17 @@ var SuperDrawerContent = ({ children, actions }) => {
17578
17725
  const { width: width2 = 1040 /* Normal */ } = firstContent ?? {};
17579
17726
  function wrapWithMotionAndMaybeBack(children2) {
17580
17727
  if (kind === "open") {
17581
- 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");
17582
17729
  } else if (kind === "detail") {
17583
- return /* @__PURE__ */ jsxs78(
17730
+ return /* @__PURE__ */ jsxs80(
17584
17731
  motion4.div,
17585
17732
  {
17586
17733
  css: Css.px3.pt2.pb3.fg1.$,
17587
17734
  animate: { overflow: "auto" },
17588
17735
  transition: { overflow: { delay: 0.3 } },
17589
17736
  children: [
17590
- /* @__PURE__ */ jsx160(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
17591
- /* @__PURE__ */ jsx160(
17737
+ /* @__PURE__ */ jsx163(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
17738
+ /* @__PURE__ */ jsx163(
17592
17739
  motion4.div,
17593
17740
  {
17594
17741
  initial: { x: width2, opacity: 0 },
@@ -17604,27 +17751,27 @@ var SuperDrawerContent = ({ children, actions }) => {
17604
17751
  "content"
17605
17752
  );
17606
17753
  } else {
17607
- 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");
17608
17755
  }
17609
17756
  }
17610
- return /* @__PURE__ */ jsxs78(Fragment30, { children: [
17757
+ return /* @__PURE__ */ jsxs80(Fragment32, { children: [
17611
17758
  wrapWithMotionAndMaybeBack(children),
17612
- 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)) }) })
17613
17760
  ] });
17614
17761
  };
17615
17762
 
17616
17763
  // src/components/Tabs.tsx
17617
17764
  import { camelCase as camelCase5 } from "change-case";
17618
- 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";
17619
17766
  import { mergeProps as mergeProps13, useFocusRing as useFocusRing15, useHover as useHover19 } from "react-aria";
17620
17767
  import { matchPath, Route } from "react-router";
17621
17768
  import { Link as Link5, useLocation } from "react-router-dom";
17622
- 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";
17623
17770
  function TabsWithContent(props) {
17624
17771
  const styles = hideTabs(props) ? {} : Css.pt3.$;
17625
- return /* @__PURE__ */ jsxs79(Fragment31, { children: [
17626
- /* @__PURE__ */ jsx161(Tabs, { ...props }),
17627
- /* @__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 } })
17628
17775
  ] });
17629
17776
  }
17630
17777
  function TabContent(props) {
@@ -17639,7 +17786,7 @@ function TabContent(props) {
17639
17786
  return (
17640
17787
  // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.
17641
17788
  // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.
17642
- /* @__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(
17643
17790
  "div",
17644
17791
  {
17645
17792
  "aria-labelledby": `${uniqueValue}-tab`,
@@ -17648,7 +17795,7 @@ function TabContent(props) {
17648
17795
  tabIndex: 0,
17649
17796
  ...tid.panel,
17650
17797
  css: contentXss,
17651
- 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()
17652
17799
  }
17653
17800
  ) })
17654
17801
  );
@@ -17661,9 +17808,9 @@ function Tabs(props) {
17661
17808
  ) : props.selected;
17662
17809
  const { isFocusVisible, focusProps } = useFocusRing15();
17663
17810
  const tid = useTestIds(others, "tabs");
17664
- const [active, setActive] = useState40(selected);
17811
+ const [active, setActive] = useState41(selected);
17665
17812
  const ref = useRef52(null);
17666
- useEffect28(() => setActive(selected), [selected]);
17813
+ useEffect29(() => setActive(selected), [selected]);
17667
17814
  function onKeyUp(e) {
17668
17815
  if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
17669
17816
  const nextTabValue = getNextTabValue(active, e.key, tabs);
@@ -17679,10 +17826,10 @@ function Tabs(props) {
17679
17826
  setActive(selected);
17680
17827
  }
17681
17828
  }
17682
- return /* @__PURE__ */ jsxs79("div", { css: { ...Css.df.aic.oa.wsnw.gap1.$, ...includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {} }, children: [
17683
- !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) => {
17684
17831
  const uniqueValue = uniqueTabValue(tab);
17685
- return /* @__PURE__ */ jsx161(
17832
+ return /* @__PURE__ */ jsx164(
17686
17833
  TabImpl,
17687
17834
  {
17688
17835
  active: active === uniqueValue,
@@ -17697,7 +17844,7 @@ function Tabs(props) {
17697
17844
  uniqueValue
17698
17845
  );
17699
17846
  }) }),
17700
- 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 })
17701
17848
  ] });
17702
17849
  }
17703
17850
  function TabImpl(props) {
@@ -17705,7 +17852,7 @@ function TabImpl(props) {
17705
17852
  const { disabled = false, name: label, icon, endAdornment } = tab;
17706
17853
  const isDisabled = !!disabled;
17707
17854
  const { hoverProps, isHovered } = useHover19({ isDisabled });
17708
- 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(
17709
17856
  () => getTabStyles(),
17710
17857
  []
17711
17858
  );
@@ -17732,15 +17879,15 @@ function TabImpl(props) {
17732
17879
  onBlur,
17733
17880
  ...isRouteTab(tab) ? {} : { onClick: () => onClick(tab.value) }
17734
17881
  });
17735
- const tabLabel = /* @__PURE__ */ jsxs79(Fragment31, { children: [
17882
+ const tabLabel = /* @__PURE__ */ jsxs81(Fragment33, { children: [
17736
17883
  label,
17737
- (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 })
17738
17885
  ] });
17739
17886
  return isDisabled ? maybeTooltip({
17740
17887
  title: resolveTooltip(disabled),
17741
17888
  placement: "top",
17742
- children: /* @__PURE__ */ jsx161("div", { ...tabProps, children: tabLabel })
17743
- }) : 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 });
17744
17891
  }
17745
17892
  function getTabStyles() {
17746
17893
  const borderBottomWidthPx = 4;
@@ -17777,11 +17924,11 @@ function hideTabs(props) {
17777
17924
  }
17778
17925
 
17779
17926
  // src/components/Toast/Toast.tsx
17780
- 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";
17781
17928
  function Toast() {
17782
17929
  const { setNotice, notice } = useToastContext();
17783
17930
  const tid = useTestIds({}, "toast");
17784
- 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) }) });
17785
17932
  }
17786
17933
 
17787
17934
  // src/components/Toast/useToast.tsx
@@ -17864,6 +18011,7 @@ export {
17864
18011
  FormRow,
17865
18012
  FullBleed,
17866
18013
  GridTable,
18014
+ GridTableLayout,
17867
18015
  HB_QUIPS_FLAVOR,
17868
18016
  HB_QUIPS_MISSION,
17869
18017
  HEADER,
@@ -18051,6 +18199,7 @@ export {
18051
18199
  useDnDGridItem,
18052
18200
  useFilter,
18053
18201
  useGridTableApi,
18202
+ useGridTableLayoutState,
18054
18203
  useGroupBy,
18055
18204
  useHover,
18056
18205
  useModal,