@homebound/beam 2.392.0 → 2.394.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.cjs CHANGED
@@ -102,6 +102,7 @@ __export(index_exports, {
102
102
  FormRow: () => FormRow,
103
103
  FullBleed: () => FullBleed,
104
104
  GridTable: () => GridTable,
105
+ GridTableLayout: () => GridTableLayout,
105
106
  HB_QUIPS_FLAVOR: () => HB_QUIPS_FLAVOR,
106
107
  HB_QUIPS_MISSION: () => HB_QUIPS_MISSION,
107
108
  HEADER: () => HEADER,
@@ -289,6 +290,7 @@ __export(index_exports, {
289
290
  useDnDGridItem: () => useDnDGridItem,
290
291
  useFilter: () => useFilter,
291
292
  useGridTableApi: () => useGridTableApi,
293
+ useGridTableLayoutState: () => useGridTableLayoutState,
292
294
  useGroupBy: () => useGroupBy,
293
295
  useHover: () => useHover,
294
296
  useModal: () => useModal,
@@ -14068,7 +14070,7 @@ var variantStyles2 = {
14068
14070
  };
14069
14071
 
14070
14072
  // src/components/BeamContext.tsx
14071
- var import_react93 = require("react");
14073
+ var import_react98 = require("react");
14072
14074
  var import_react_aria44 = require("react-aria");
14073
14075
 
14074
14076
  // src/components/Modal/Modal.tsx
@@ -15618,7 +15620,7 @@ var import_framer_motion2 = require("framer-motion");
15618
15620
  var import_react84 = require("react");
15619
15621
  var import_jsx_runtime119 = require("@emotion/react/jsx-runtime");
15620
15622
  var RIGHT_SIDEBAR_MIN_WIDTH = "250px";
15621
- function RightSidebar({ content }) {
15623
+ function RightSidebar({ content, headerHeightPx: headerHeightPx2 }) {
15622
15624
  const [selectedIcon, setSelectedIcon] = (0, import_react84.useState)(void 0);
15623
15625
  const tid = useTestIds({}, "rightSidebar");
15624
15626
  return /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(import_jsx_runtime119.Fragment, { children: [
@@ -15640,23 +15642,25 @@ function RightSidebar({ content }) {
15640
15642
  animate: { x: 0, opacity: 1 },
15641
15643
  transition: { delay: 0.2, ease: [0.51, 0.92, 0.24, 1], duration: 0.3 },
15642
15644
  exit: { transition: { ease: "linear", duration: 0.2 }, x: "100%" },
15643
- css: Css.w100.mw(RIGHT_SIDEBAR_MIN_WIDTH).z0.$,
15644
- children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { css: Css.relative.z0.px3.$, children: [
15645
- /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { css: Css.absolute.leftPx(-24).top0.$, children: [
15646
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
15647
- IconButton,
15648
- {
15649
- bgColor: "rgba(255,255,255,1)" /* White */,
15650
- circle: true,
15651
- onClick: () => setSelectedIcon(void 0),
15652
- icon: "x",
15653
- inc: 3.5
15654
- }
15655
- ),
15656
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { css: Css.absolute.topPx(48).leftPx(23).h("calc(100vh - 168px)").wPx(1).bgGray300.$ })
15645
+ css: Css.w100.mw(RIGHT_SIDEBAR_MIN_WIDTH).z0.maxh(`calc(100vh - ${headerHeightPx2}px)`).oya.pl4.pr3.$,
15646
+ children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(import_jsx_runtime119.Fragment, { children: [
15647
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { css: Css.sticky.top0.bgWhite.$, children: [
15648
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("div", { css: Css.absolute.leftPx(-24).top0.df.fdc.aic.$, children: [
15649
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
15650
+ IconButton,
15651
+ {
15652
+ bgColor: "rgba(255,255,255,1)" /* White */,
15653
+ circle: true,
15654
+ onClick: () => setSelectedIcon(void 0),
15655
+ icon: "x",
15656
+ inc: 3.5
15657
+ }
15658
+ ),
15659
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { css: Css.absolute.topPx(48).h("calc(100vh - 168px)").wPx(1).bgGray300.$ })
15660
+ ] }),
15661
+ /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { css: Css.df.aic.jcfe.gap2.mb3.$, children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(IconButtonList, { content, selectedIcon, onIconClick: setSelectedIcon }) })
15657
15662
  ] }),
15658
- /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { css: Css.df.aic.jcfe.gap2.mb3.$, children: /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(IconButtonList, { content, selectedIcon, onIconClick: setSelectedIcon }) }),
15659
- selectedIcon && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { ...tid.content, children: content.find((sidebar) => sidebar.icon === selectedIcon)?.render() })
15663
+ selectedIcon && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("div", { ...tid.content, css: Css.pl3.$, children: content.find((sidebar) => sidebar.icon === selectedIcon)?.render() })
15660
15664
  ] })
15661
15665
  },
15662
15666
  "rightSidebar"
@@ -15716,7 +15720,7 @@ function FormPageLayoutComponent(props) {
15716
15720
  /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(PageHeader, { ...props, ...tids.pageHeader }),
15717
15721
  /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(LeftNav, { sectionsWithRefs, ...tids }),
15718
15722
  /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(FormSections, { sectionsWithRefs, formState, ...tids }),
15719
- rightSideBar && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("aside", { css: Css.gr(2).gc("3 / 4").sticky.topPx(headerHeightPx).$, children: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(RightSidebar, { content: rightSideBar }) })
15723
+ rightSideBar && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("aside", { css: Css.gr(2).gc("3 / 4").sticky.topPx(headerHeightPx).$, children: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(RightSidebar, { content: rightSideBar, headerHeightPx }) })
15720
15724
  ] }) })
15721
15725
  );
15722
15726
  }
@@ -15938,1336 +15942,1514 @@ function FullBleed({ children, omitPadding = false }) {
15938
15942
  });
15939
15943
  }
15940
15944
 
15941
- // src/components/Layout/PreventBrowserScroll.tsx
15945
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
15946
+ var import_react94 = __toESM(require("react"), 1);
15947
+
15948
+ // src/components/Filters/Filters.tsx
15949
+ var import_react91 = require("react");
15950
+
15951
+ // src/components/Filters/BaseFilter.ts
15952
+ var BaseFilter = class {
15953
+ constructor(key, props) {
15954
+ this.key = key;
15955
+ this.props = props;
15956
+ }
15957
+ get label() {
15958
+ return this.props.label || defaultLabel(this.key);
15959
+ }
15960
+ get defaultValue() {
15961
+ return this.props.defaultValue;
15962
+ }
15963
+ testId(tid) {
15964
+ return tid[defaultTestId(this.label)];
15965
+ }
15966
+ };
15967
+
15968
+ // src/components/Filters/DateFilter.tsx
15942
15969
  var import_jsx_runtime123 = require("@emotion/react/jsx-runtime");
15943
- function PreventBrowserScroll({ children }) {
15944
- return (
15945
- // Take over the full viewport and hide any overflown content.
15946
- // 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/
15947
- // 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.
15948
- /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("div", { css: Css.oh.vh100.mh("-webkit-fill-available").maxh("-webkit-fill-available").$, children: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("div", { css: Css.h100.df.fdc.mh0.oa.$, children }) })
15949
- );
15970
+ function dateFilter(props) {
15971
+ return (key) => new DateFilter(key, props);
15950
15972
  }
15973
+ var anyOption = {};
15974
+ var DateFilter = class extends BaseFilter {
15975
+ render(value, setValue, tid, inModal, vertical) {
15976
+ const { label, operations, getOperationValue, getOperationLabel } = this.props;
15977
+ return /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(import_jsx_runtime123.Fragment, { children: [
15978
+ vertical && /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(Label, { label }),
15979
+ /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(CompoundField, { children: [
15980
+ /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
15981
+ SelectField,
15982
+ {
15983
+ compact: true,
15984
+ sizeToContent: true,
15985
+ options: [
15986
+ // Always show the 'Any' option
15987
+ anyOption,
15988
+ ...operations
15989
+ ],
15990
+ getOptionValue: (o) => o === anyOption ? void 0 : getOperationValue(o),
15991
+ getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
15992
+ value: value?.op,
15993
+ onSelect: (op) => (
15994
+ // default the selected date to today if it doesn't exist in the filter's value
15995
+ setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
15996
+ ),
15997
+ label: inModal ? `${label} date filter operation` : label,
15998
+ labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
15999
+ nothingSelectedText: "Any",
16000
+ ...tid[`${defaultTestId(this.label)}_dateOperation`]
16001
+ }
16002
+ ),
16003
+ /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
16004
+ DateField,
16005
+ {
16006
+ compact: true,
16007
+ labelStyle: "inline",
16008
+ value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
16009
+ label: "Date",
16010
+ onChange: (d) => setValue({ ...value, value: d }),
16011
+ disabled: !value,
16012
+ ...tid[`${defaultTestId(this.label)}_dateField`]
16013
+ }
16014
+ )
16015
+ ] })
16016
+ ] });
16017
+ }
16018
+ };
15951
16019
 
15952
- // src/components/Layout/RightPaneLayout/RightPaneContext.tsx
15953
- var import_react89 = __toESM(require("react"), 1);
16020
+ // src/components/Filters/DateRangeFilter.tsx
15954
16021
  var import_jsx_runtime124 = require("@emotion/react/jsx-runtime");
15955
- var RightPaneContext = import_react89.default.createContext({
15956
- openInPane: () => {
15957
- },
15958
- closePane: () => {
15959
- },
15960
- clearPane: () => {
15961
- },
15962
- isRightPaneOpen: false,
15963
- rightPaneContent: null
15964
- });
15965
- function RightPaneProvider({ children }) {
15966
- const [rightPaneContent, setRightPaneContent] = (0, import_react89.useState)(void 0);
15967
- const [isRightPaneOpen, setIsRightPaneOpen] = (0, import_react89.useState)(false);
15968
- const openInPane = (0, import_react89.useCallback)(
15969
- (opts) => {
15970
- setRightPaneContent(opts?.content);
15971
- setIsRightPaneOpen(true);
15972
- },
15973
- [setRightPaneContent]
15974
- );
15975
- const closePane = (0, import_react89.useCallback)(() => setIsRightPaneOpen(false), []);
15976
- const clearPane = (0, import_react89.useCallback)(() => setRightPaneContent(void 0), [setRightPaneContent]);
15977
- const context = (0, import_react89.useMemo)(
15978
- () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),
15979
- [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen]
15980
- );
15981
- return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(RightPaneContext.Provider, { value: context, children });
15982
- }
15983
- function useRightPaneContext() {
15984
- return (0, import_react89.useContext)(RightPaneContext);
16022
+ function dateRangeFilter(props) {
16023
+ return (key) => new DateRangeFilter(key, props);
15985
16024
  }
15986
-
15987
- // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
15988
- var import_framer_motion3 = require("framer-motion");
15989
- var import_react90 = require("react");
15990
- var import_jsx_runtime125 = require("@emotion/react/jsx-runtime");
15991
- function RightPaneLayout(props) {
15992
- const { children, paneBgColor = "rgba(255,255,255,1)" /* White */, paneWidth = 450, defaultPaneContent } = props;
15993
- const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();
15994
- (0, import_react90.useEffect)(() => closePane, [closePane]);
15995
- return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("div", { css: Css.h100.df.oxh.$, children: /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment, { children: [
15996
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
15997
- "div",
15998
- {
15999
- css: {
16000
- ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.oxa.$,
16001
- ...Css.if(!isRightPaneOpen).w100.mr0.$,
16002
- ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$
16003
- },
16004
- children
16005
- }
16006
- ),
16007
- /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)("div", { css: Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$, children: [
16008
- defaultPaneContent && /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
16009
- "div",
16025
+ var DateRangeFilter = class extends BaseFilter {
16026
+ render(value, setValue, tid, inModal, vertical) {
16027
+ const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
16028
+ return /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment, { children: [
16029
+ vertical && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(Label, { label }),
16030
+ /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
16031
+ DateRangeField,
16010
16032
  {
16011
- css: Css.h100.wPx(paneWidth).left(0).absolute.add("transition", "all .3s ease-in-out").if(isRightPaneOpen).add("opacity", 0).left(100).$,
16012
- children: defaultPaneContent
16033
+ compact: true,
16034
+ labelStyle: "inline",
16035
+ isRangeFilterField: true,
16036
+ placeholder: placeholderText,
16037
+ label: testFieldLabel ?? "Date",
16038
+ value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
16039
+ onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
16040
+ disabledDays,
16041
+ ...tid[`${defaultTestId(this.label)}_dateField`]
16013
16042
  }
16014
- ),
16015
- /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_framer_motion3.AnimatePresence, { children: isRightPaneOpen && /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
16016
- import_framer_motion3.motion.div,
16017
- {
16018
- layout: "position",
16019
- "data-testid": "rightPaneContent",
16020
- css: Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
16021
- initial: { x: paneWidth + 24, position: "absolute" },
16022
- animate: { x: 0 },
16023
- transition: { ease: "linear", duration: 0.2 },
16024
- exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
16025
- onAnimationComplete: (definition) => definition.x !== 0 && clearPane(),
16026
- children: rightPaneContent
16027
- },
16028
- "rightPane"
16029
- ) })
16030
- ] })
16031
- ] }) });
16032
- }
16043
+ )
16044
+ ] });
16045
+ }
16046
+ };
16033
16047
 
16034
- // src/components/Layout/RightPaneLayout/useRightPane.tsx
16035
- function useRightPane() {
16036
- const { openInPane, closePane } = useRightPaneContext();
16037
- return {
16038
- openRightPane: openInPane,
16039
- closeRightPane: closePane
16040
- };
16048
+ // src/components/Filters/MultiFilter.tsx
16049
+ var import_jsx_runtime125 = require("@emotion/react/jsx-runtime");
16050
+ function multiFilter(props) {
16051
+ return (key) => new MultiFilter(key, props);
16041
16052
  }
16042
-
16043
- // src/components/Layout/ScrollableContent.tsx
16044
- var import_react91 = require("react");
16045
- var import_react_dom4 = require("react-dom");
16046
- var import_jsx_runtime126 = require("@emotion/react/jsx-runtime");
16047
- function ScrollableContent(props) {
16048
- const { children, virtualized = false, omitBottomPadding, bgColor } = props;
16049
- const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();
16050
- (0, import_react91.useEffect)(() => {
16051
- setPortalTick((prev) => prev + 1);
16052
- return () => setPortalTick((prev) => prev + 1);
16053
- }, [setPortalTick]);
16054
- if (!scrollableEl) {
16055
- return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(import_jsx_runtime126.Fragment, { children });
16056
- }
16057
- return (0, import_react_dom4.createPortal)(
16058
- /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
16059
- "div",
16053
+ var MultiFilter = class extends BaseFilter {
16054
+ render(value, setValue, tid, inModal, vertical) {
16055
+ if (inModal && Array.isArray(this.props.options) && this.props.options.length > 0 && this.props.options.length <= 8) {
16056
+ const { disabledOptions } = this.props;
16057
+ const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
16058
+ const disabledKeys = Object.keys(disabledOptionsWithReasons);
16059
+ return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
16060
+ ToggleChipGroup,
16061
+ {
16062
+ label: this.label,
16063
+ options: this.props.options.map((o) => {
16064
+ const value2 = this.props.getOptionValue(o);
16065
+ const disabled = value2 && disabledKeys.includes(value2.toString());
16066
+ const disabledReason = disabled ? disabledOptionsWithReasons[value2.toString()] : void 0;
16067
+ return {
16068
+ label: this.props.getOptionLabel(o),
16069
+ value: value2,
16070
+ disabled: disabledReason ?? disabled
16071
+ };
16072
+ }),
16073
+ onChange: (values) => {
16074
+ setValue(values.length === 0 ? void 0 : values);
16075
+ },
16076
+ values: value || [],
16077
+ labelStyle: "hidden",
16078
+ ...tid[defaultTestId(this.label)]
16079
+ }
16080
+ );
16081
+ }
16082
+ const { defaultValue, nothingSelectedText, ...props } = this.props;
16083
+ return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
16084
+ MultiSelectField,
16060
16085
  {
16061
- css: {
16062
- ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,
16063
- ...bgColor && Css.bgColor(bgColor).$,
16064
- ...!omitBottomPadding && !virtualized && scrollContainerBottomPadding
16086
+ ...props,
16087
+ compact: !vertical,
16088
+ label: this.label,
16089
+ values: value || [],
16090
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16091
+ sizeToContent: !inModal && !vertical,
16092
+ onSelect: (values) => {
16093
+ setValue(values.length === 0 ? void 0 : values);
16065
16094
  },
16066
- children
16095
+ nothingSelectedText: nothingSelectedText ?? "All",
16096
+ ...this.testId(tid)
16067
16097
  }
16068
- ),
16069
- scrollableEl
16070
- );
16071
- }
16098
+ );
16099
+ }
16100
+ };
16072
16101
 
16073
- // src/components/Toast/ToastContext.tsx
16074
- var import_react92 = require("react");
16075
- var import_jsx_runtime127 = require("@emotion/react/jsx-runtime");
16076
- var ToastContext = (0, import_react92.createContext)({
16077
- setNotice: () => {
16078
- throw new Error("Missing ToastProvider");
16079
- },
16080
- clear: () => {
16081
- },
16082
- notice: void 0
16083
- });
16084
- function ToastProvider(props) {
16085
- const [notice, setNotice] = (0, import_react92.useState)();
16086
- const clear = (0, import_react92.useCallback)(() => setNotice(void 0), [setNotice]);
16087
- const contextValue = (0, import_react92.useMemo)(() => ({ setNotice, notice, clear }), [notice, clear]);
16088
- return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(ToastContext.Provider, { value: contextValue, children: props.children });
16102
+ // src/components/Filters/NumberRangeFilter.tsx
16103
+ var import_jsx_runtime126 = require("@emotion/react/jsx-runtime");
16104
+ function numberRangeFilter(props) {
16105
+ return (key) => new NumberRangeFilter(key, props);
16089
16106
  }
16090
- function useToastContext() {
16091
- return (0, import_react92.useContext)(ToastContext);
16107
+ var NumberRangeFilter = class extends BaseFilter {
16108
+ render(value, setValue, tid, inModal, vertical) {
16109
+ const { label, numberFieldType, numberFormatOptions } = this.props;
16110
+ const min = value?.min ?? void 0;
16111
+ const max = value?.max ?? void 0;
16112
+ return /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment, { children: [
16113
+ vertical && /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { ...tid, children: [
16114
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(Label, { label }),
16115
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { css: Css.pb1.$, children: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
16116
+ NumberField,
16117
+ {
16118
+ labelStyle: "inline",
16119
+ clearable: true,
16120
+ label: "Min",
16121
+ value: min,
16122
+ type: numberFieldType,
16123
+ numberFormatOptions,
16124
+ onChange: (minVal) => {
16125
+ const maxValue = max ? { max } : {};
16126
+ setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16127
+ },
16128
+ ...tid[`${defaultTestId(label)}_min_vertical`]
16129
+ }
16130
+ ) }),
16131
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
16132
+ NumberField,
16133
+ {
16134
+ labelStyle: "inline",
16135
+ clearable: true,
16136
+ label: "Max",
16137
+ value: max,
16138
+ type: numberFieldType,
16139
+ numberFormatOptions,
16140
+ onChange: (maxVal) => {
16141
+ const minValue = min ? { min } : {};
16142
+ setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16143
+ },
16144
+ ...tid[`${defaultTestId(label)}_max_vertical`]
16145
+ }
16146
+ )
16147
+ ] }),
16148
+ !vertical && /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)(CompoundField, { ...tid, children: [
16149
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
16150
+ NumberField,
16151
+ {
16152
+ compact: true,
16153
+ sizeToContent: !inModal,
16154
+ labelStyle: "inline",
16155
+ clearable: true,
16156
+ label: !inModal ? `${label} Min` : "Min",
16157
+ value: min,
16158
+ type: numberFieldType,
16159
+ numberFormatOptions,
16160
+ onChange: (minVal) => {
16161
+ const maxValue = max ? { max } : {};
16162
+ setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16163
+ },
16164
+ ...tid[`${defaultTestId(label)}_min`]
16165
+ }
16166
+ ),
16167
+ /* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
16168
+ NumberField,
16169
+ {
16170
+ compact: true,
16171
+ sizeToContent: !inModal,
16172
+ labelStyle: "inline",
16173
+ clearable: true,
16174
+ label: !inModal ? `${label} Max` : "Max",
16175
+ value: max,
16176
+ type: numberFieldType,
16177
+ numberFormatOptions,
16178
+ onChange: (maxVal) => {
16179
+ const minValue = min ? { min } : {};
16180
+ setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16181
+ },
16182
+ ...tid[`${defaultTestId(label)}_max`]
16183
+ }
16184
+ )
16185
+ ] })
16186
+ ] });
16187
+ }
16188
+ };
16189
+
16190
+ // src/components/Filters/SingleFilter.tsx
16191
+ var import_jsx_runtime127 = require("@emotion/react/jsx-runtime");
16192
+ function singleFilter(props) {
16193
+ return (key) => new SingleFilter(key, props);
16092
16194
  }
16195
+ var allOption = {};
16196
+ var SingleFilter = class extends BaseFilter {
16197
+ render(value, setValue, tid, inModal, vertical) {
16198
+ const {
16199
+ label,
16200
+ defaultValue,
16201
+ options: maybeOptions,
16202
+ getOptionLabel,
16203
+ getOptionValue,
16204
+ nothingSelectedText,
16205
+ ...props
16206
+ } = this.props;
16207
+ const options = Array.isArray(maybeOptions) ? [allOption, ...maybeOptions] : { ...maybeOptions, current: maybeOptions.current };
16208
+ return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
16209
+ SelectField,
16210
+ {
16211
+ ...props,
16212
+ options,
16213
+ getOptionValue: (o) => o === allOption ? void 0 : getOptionValue(o),
16214
+ getOptionLabel: (o) => o === allOption ? nothingSelectedText ?? "All" : getOptionLabel(o),
16215
+ compact: !vertical,
16216
+ value,
16217
+ label: this.label,
16218
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16219
+ sizeToContent: !inModal && !vertical,
16220
+ nothingSelectedText: nothingSelectedText ?? "All",
16221
+ onSelect: (value2) => setValue(value2 || void 0),
16222
+ ...this.testId(tid)
16223
+ }
16224
+ );
16225
+ }
16226
+ };
16093
16227
 
16094
- // src/components/BeamContext.tsx
16228
+ // src/components/Filters/TreeFilter.tsx
16095
16229
  var import_jsx_runtime128 = require("@emotion/react/jsx-runtime");
16096
- var BeamContext = (0, import_react93.createContext)({
16097
- modalState: new EmptyRef(),
16098
- modalCanCloseChecks: new EmptyRef(),
16099
- modalHeaderDiv: void 0,
16100
- modalBodyDiv: void 0,
16101
- modalFooterDiv: void 0,
16102
- drawerContentStack: new EmptyRef(),
16103
- drawerCanCloseChecks: new EmptyRef(),
16104
- drawerCanCloseDetailsChecks: new EmptyRef(),
16105
- sdHeaderDiv: void 0
16106
- });
16107
- function BeamProvider({ children, ...presentationProps }) {
16108
- const [, tick] = (0, import_react93.useReducer)((prev) => prev + 1, 0);
16109
- const modalRef = (0, import_react93.useRef)();
16110
- const modalHeaderDiv = (0, import_react93.useMemo)(() => document.createElement("div"), []);
16111
- const modalBodyDiv = (0, import_react93.useMemo)(() => {
16112
- const el = document.createElement("div");
16113
- el.style.height = "100%";
16114
- return el;
16115
- }, []);
16116
- const modalCanCloseChecksRef = (0, import_react93.useRef)([]);
16117
- const modalFooterDiv = (0, import_react93.useMemo)(() => document.createElement("div"), []);
16118
- const drawerContentStackRef = (0, import_react93.useRef)([]);
16119
- const drawerCanCloseChecks = (0, import_react93.useRef)([]);
16120
- const drawerCanCloseDetailsChecks = (0, import_react93.useRef)([]);
16121
- const sdHeaderDiv = (0, import_react93.useMemo)(() => document.createElement("div"), []);
16122
- const context = (0, import_react93.useMemo)(() => {
16123
- return {
16124
- // These two keys need to trigger re-renders on change
16125
- modalState: new PretendRefThatTicks(modalRef, tick),
16126
- drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),
16127
- // The rest we don't need to re-render when these are mutated, so just expose as-is
16128
- modalCanCloseChecks: modalCanCloseChecksRef,
16129
- modalHeaderDiv,
16130
- modalBodyDiv,
16131
- modalFooterDiv,
16132
- drawerCanCloseChecks,
16133
- drawerCanCloseDetailsChecks,
16134
- sdHeaderDiv
16135
- };
16136
- }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);
16137
- return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(BeamContext.Provider, { value: { ...context }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(PresentationProvider, { ...presentationProps, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(RightPaneProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(AutoSaveStatusProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(SnackbarProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(ToastProvider, { children: [
16138
- /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_react_aria44.OverlayProvider, { children: [
16139
- children,
16140
- modalRef.current && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(Modal, { ...modalRef.current })
16141
- ] }),
16142
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(SuperDrawer, {})
16143
- ] }) }) }) }) }) });
16230
+ function treeFilter(props) {
16231
+ return (key) => new TreeFilter(key, props);
16144
16232
  }
16145
- var PretendRefThatTicks = class {
16146
- constructor(ref, tick) {
16147
- this.ref = ref;
16148
- this.tick = tick;
16149
- }
16150
- get current() {
16151
- return this.ref.current;
16152
- }
16153
- set current(value) {
16154
- this.ref.current = value;
16155
- this.tick();
16233
+ var TreeFilter = class extends BaseFilter {
16234
+ render(value, setValue, tid, inModal, vertical) {
16235
+ const { defaultValue, nothingSelectedText, filterBy = "root", ...props } = this.props;
16236
+ return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16237
+ TreeSelectField,
16238
+ {
16239
+ ...props,
16240
+ label: this.label,
16241
+ values: value,
16242
+ compact: !vertical,
16243
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16244
+ sizeToContent: !inModal && !vertical,
16245
+ onSelect: (options) => {
16246
+ const values = options[filterBy].values;
16247
+ setValue(values.length === 0 ? void 0 : values);
16248
+ },
16249
+ nothingSelectedText: nothingSelectedText ?? "All",
16250
+ ...this.testId(tid)
16251
+ }
16252
+ );
16156
16253
  }
16157
16254
  };
16158
- function useBeamContext() {
16159
- return (0, import_react93.useContext)(BeamContext);
16160
- }
16161
16255
 
16162
- // src/components/ButtonDatePicker.tsx
16163
- var import_react94 = require("react");
16164
- var import_react_aria45 = require("react-aria");
16165
- var import_react_stately17 = require("react-stately");
16256
+ // src/components/Filters/BooleanFilter.tsx
16166
16257
  var import_jsx_runtime129 = require("@emotion/react/jsx-runtime");
16167
- function ButtonDatePicker(props) {
16168
- const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;
16169
- const state = (0, import_react_stately17.useMenuTriggerState)({ isOpen: defaultOpen });
16170
- const buttonRef = (0, import_react94.useRef)(null);
16171
- const { menuTriggerProps, menuProps } = (0, import_react_aria45.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
16172
- const tid = useTestIds(
16173
- props,
16174
- isTextButton(trigger) ? defaultTestId(labelOr(trigger, "buttonDatePicker")) : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
16175
- );
16176
- return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(OverlayTrigger, { ...props, menuTriggerProps, state, buttonRef, ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(DatePickerOverlay, { overlayProps: menuProps, children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
16177
- DatePicker,
16178
- {
16179
- ...datePickerProps,
16180
- onSelect: (d) => {
16181
- onSelect(d);
16182
- state.close();
16183
- },
16184
- ...tid.datePicker
16185
- }
16186
- ) }) });
16187
- }
16188
-
16189
- // src/components/ButtonGroup.tsx
16190
- var import_react95 = require("react");
16191
- var import_react_aria46 = require("react-aria");
16192
- var import_jsx_runtime130 = (
16193
- // Disable the button if the ButtonGroup is disabled or if the current button is disabled.
16194
- require("@emotion/react/jsx-runtime")
16195
- );
16196
- function ButtonGroup(props) {
16197
- const { buttons, disabled = false, size = "sm" } = props;
16198
- const tid = useTestIds(props, "buttonGroup");
16199
- return (
16200
- // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.
16201
- /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { ...tid, css: Css.df.lh(0).add({ ...sizeStyles2[size] }).$, children: buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(GroupButton, { ...buttonProps, disabled: disabled || buttonDisabled, size, ...tid }, i)) })
16202
- );
16258
+ function booleanFilter(props) {
16259
+ return (key) => new BooleanFilter(key, props);
16203
16260
  }
16204
- function GroupButton(props) {
16205
- const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;
16206
- const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };
16207
- const ref = (0, import_react95.useRef)(null);
16208
- const { buttonProps, isPressed } = (0, import_react_aria46.useButton)(ariaProps, ref);
16209
- const { isFocusVisible, focusProps } = (0, import_react_aria46.useFocusRing)();
16210
- const { hoverProps, isHovered } = (0, import_react_aria46.useHover)(ariaProps);
16211
- const tid = useTestIds(props);
16212
- return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { css: getButtonStyles2(), children: maybeTooltip({
16213
- title: resolveTooltip(disabled, tooltip),
16214
- placement: "top",
16215
- children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
16216
- "button",
16261
+ var BooleanFilter = class extends BaseFilter {
16262
+ render(value, setValue, tid, inModal, vertical) {
16263
+ const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;
16264
+ return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
16265
+ SelectField,
16217
16266
  {
16218
- ref,
16219
- ...buttonProps,
16220
- ...focusProps,
16221
- ...hoverProps,
16222
- css: {
16223
- ...Css.buttonBase.px2.br0.h100.$,
16224
- "&:disabled": Css.gray400.cursorNotAllowed.bcGray300.$,
16225
- ...isFocusVisible ? defaultFocusRingStyles2 : {},
16226
- ...active ? activeStyles3 : {},
16227
- ...isPressed ? pressedStyles2 : isHovered ? hoverStyles3 : {},
16228
- ...icon ? iconStyles2[size] : {}
16267
+ ...props,
16268
+ compact: !vertical,
16269
+ label: this.label,
16270
+ value: String(value),
16271
+ labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16272
+ sizeToContent: !inModal && !vertical,
16273
+ options,
16274
+ getOptionValue: (o) => String(o[0]),
16275
+ getOptionLabel: (o) => o[1],
16276
+ onSelect: (value2) => {
16277
+ const parsedValue = value2 === "undefined" ? void 0 : value2 === "true";
16278
+ setValue(parsedValue);
16229
16279
  },
16230
- ...tid[defaultTestId(typeof text === "string" && text || icon || "button")],
16231
- children: [
16232
- icon && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Icon, { xss: Css.if(!!text).mrPx(4).$, icon, color: disabled ? void 0 : iconColor, inc: iconInc }),
16233
- text
16234
- ]
16280
+ ...this.testId(tid)
16235
16281
  }
16236
- )
16237
- }) });
16238
- }
16239
- var pressedStyles2 = Css.bgGray200.$;
16240
- var activeStyles3 = Css.bgGray300.$;
16241
- var hoverStyles3 = Css.bgGray100.$;
16242
- var defaultFocusRingStyles2 = Css.relative.z2.bshFocus.$;
16243
- function getButtonStyles2() {
16244
- return {
16245
- ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,
16246
- // Our first button should have a rounded left border
16247
- "&:first-of-type": Css.add("borderRadius", "4px 0 0 4px").$,
16248
- // Our last button should have a rounded right border
16249
- "&:last-of-type": Css.add("borderRadius", "0 4px 4px 0").$,
16250
- // Nudge buttons one pixel to the left so they visually share a border
16251
- "&:not(:first-of-type)": Css.mlPx(-1).$
16252
- };
16253
- }
16254
- var sizeStyles2 = {
16255
- xs: Css.hPx(28).$,
16256
- sm: Css.hPx(32).$,
16257
- md: Css.hPx(40).$
16282
+ );
16283
+ }
16258
16284
  };
16259
- var iconStyles2 = {
16260
- xs: Css.pxPx(2).$,
16261
- sm: Css.pxPx(4).$,
16262
- md: Css.px1.$
16285
+ var defaultBooleanOptions = [
16286
+ [void 0, "Any"],
16287
+ [true, "Yes"],
16288
+ [false, "No"]
16289
+ ];
16290
+
16291
+ // src/components/Filters/CheckboxFilter.tsx
16292
+ var import_jsx_runtime130 = require("@emotion/react/jsx-runtime");
16293
+ function checkboxFilter(props) {
16294
+ return (key) => new CheckboxFilter(key, {
16295
+ // If the user has set the offValue, that should be the default b/c we're only a two-state
16296
+ defaultValue: props.offValue,
16297
+ ...props
16298
+ });
16299
+ }
16300
+ var CheckboxFilter = class extends BaseFilter {
16301
+ render(value, setValue, tid, inModal, vertical) {
16302
+ const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16303
+ return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
16304
+ Checkbox,
16305
+ {
16306
+ ...props,
16307
+ selected: value === void 0 ? false : value === onValue,
16308
+ label: this.label,
16309
+ onChange: (on) => {
16310
+ setValue(on ? onValue : offValue);
16311
+ },
16312
+ ...this.testId(tid)
16313
+ }
16314
+ );
16315
+ }
16316
+ get hideLabelInModal() {
16317
+ return true;
16318
+ }
16263
16319
  };
16264
16320
 
16265
- // src/components/ButtonMenu.tsx
16266
- var import_react96 = require("react");
16267
- var import_react_aria47 = require("react-aria");
16268
- var import_react_stately18 = require("react-stately");
16321
+ // src/components/Filters/FilterModal.tsx
16322
+ var import_react90 = require("react");
16323
+
16324
+ // src/components/Modal/OpenModal.tsx
16325
+ var import_react89 = require("react");
16269
16326
  var import_jsx_runtime131 = require("@emotion/react/jsx-runtime");
16270
- function ButtonMenu(props) {
16271
- const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
16272
- let selectedItem, onChange;
16273
- if (isSelectionButtonMenuProps(props)) {
16274
- selectedItem = props.selectedItem;
16275
- onChange = props.onChange;
16276
- }
16277
- const state = (0, import_react_stately18.useMenuTriggerState)({ isOpen: defaultOpen });
16278
- const buttonRef = (0, import_react96.useRef)(null);
16279
- const { menuTriggerProps, menuProps } = (0, import_react_aria47.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
16280
- const tid = useTestIds(
16281
- props,
16282
- isTextButton(trigger) ? labelOr(trigger, "buttonMenu") : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
16283
- );
16284
- return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
16285
- OverlayTrigger,
16286
- {
16287
- ...props,
16288
- menuTriggerProps,
16289
- state,
16290
- buttonRef,
16291
- ...tid,
16292
- contrast,
16293
- children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
16294
- Menu,
16295
- {
16296
- ariaMenuProps: menuProps,
16297
- onClose: () => state.close(),
16298
- items,
16299
- persistentItems,
16300
- searchable,
16301
- contrast,
16302
- selectedItem,
16303
- onChange,
16304
- ...tid
16305
- }
16306
- )
16327
+ function OpenModal(props) {
16328
+ const { openModal } = useModal();
16329
+ const { size, children, keepOpen } = props;
16330
+ (0, import_react89.useEffect)(() => {
16331
+ if (!keepOpen) {
16332
+ openModal({ size, content: children });
16307
16333
  }
16308
- );
16309
- }
16310
- function isSelectionButtonMenuProps(props) {
16311
- return typeof props === "object" && "selectedItem" in props && "onChange" in props;
16334
+ }, [keepOpen, openModal, size, children]);
16335
+ if (keepOpen) {
16336
+ return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(Modal, { size, content: children });
16337
+ } else {
16338
+ return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { children: "dummy content" });
16339
+ }
16312
16340
  }
16313
16341
 
16314
- // src/components/Card.tsx
16315
- var import_react98 = require("react");
16316
- var import_react_aria48 = require("react-aria");
16317
-
16318
- // src/components/Tag.tsx
16319
- var import_utils107 = require("@react-aria/utils");
16320
- var import_react97 = require("react");
16342
+ // src/components/Filters/FilterModal.tsx
16321
16343
  var import_jsx_runtime132 = require("@emotion/react/jsx-runtime");
16322
- function Tag(props) {
16323
- const { text, type, xss, preventTooltip = false, ...otherProps } = props;
16324
- const typeStyles2 = getStyles(type);
16325
- const tid = useTestIds(otherProps);
16326
- const [showTooltip, setShowTooltip] = (0, import_react97.useState)(false);
16327
- const ref = (0, import_react97.useRef)(null);
16328
- (0, import_utils107.useResizeObserver)({
16329
- ref,
16330
- onResize: () => {
16331
- if (ref.current) {
16332
- setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);
16333
- }
16334
- }
16335
- });
16336
- return maybeTooltip({
16337
- title: !preventTooltip && showTooltip ? text : void 0,
16338
- children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("span", { ...tid, css: { ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles2, ...xss }, children: [
16339
- otherProps.icon && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("span", { css: Css.fs0.$, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(Icon, { icon: otherProps.icon, inc: 1.5 }) }),
16340
- /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("span", { ref, css: Css.lineClamp1.wbba.$, children: text })
16344
+ function FilterModal(props) {
16345
+ const { filter, filters, onApply } = props;
16346
+ const testId = useTestIds(props, filterTestIdPrefix);
16347
+ const { closeModal } = useModal();
16348
+ const [modalFilter, setModalFilter] = (0, import_react90.useState)(filter);
16349
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
16350
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(ModalHeader, { children: "More Filters" }),
16351
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { css: Css.df.fdc.$, children: safeEntries(filters).map(([key, f]) => /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(ModalFilterItem, { label: f.hideLabelInModal ? void 0 : f.label, children: f.render(
16352
+ modalFilter[key],
16353
+ (value) => setModalFilter(updateFilter(modalFilter, key, value)),
16354
+ testId,
16355
+ true,
16356
+ false
16357
+ ) }, key)) }) }),
16358
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(ModalFooter, { xss: Css.jcsb.$, children: [
16359
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
16360
+ Button,
16361
+ {
16362
+ label: "Clear",
16363
+ variant: "tertiary",
16364
+ disabled: safeKeys(filters).filter((fk) => modalFilter[fk] !== void 0).length === 0,
16365
+ onClick: () => (
16366
+ // Only remove the filters keys that exist in the modal.
16367
+ setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))
16368
+ ),
16369
+ ...testId.modalClear
16370
+ }
16371
+ ),
16372
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { css: Css.df.gap1.$, children: [
16373
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(Button, { label: "Cancel", variant: "tertiary", onClick: closeModal, ...testId.modalClose }),
16374
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
16375
+ Button,
16376
+ {
16377
+ label: "Apply",
16378
+ onClick: () => {
16379
+ onApply(modalFilter);
16380
+ closeModal();
16381
+ },
16382
+ ...testId.modalApply
16383
+ }
16384
+ )
16385
+ ] })
16341
16386
  ] })
16342
- });
16387
+ ] });
16343
16388
  }
16344
- function getStyles(type) {
16345
- switch (type) {
16346
- case "info":
16347
- return Css.bgBlue100.$;
16348
- case "caution":
16349
- return Css.bgYellow200.$;
16350
- case "warning":
16351
- return Css.bgRed200.$;
16352
- case "success":
16353
- return Css.bgGreen200.$;
16354
- default:
16355
- return Css.bgGray200.$;
16356
- }
16389
+ function ModalFilterItem({ label, children }) {
16390
+ return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("div", { css: Css.mb4.if(!label).bt.bcGray200.$, children: [
16391
+ label && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("h2", { css: Css.baseMd.mb2.$, children: label }),
16392
+ /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("div", { css: Css.if(!label).pt3.$, children })
16393
+ ] });
16357
16394
  }
16358
16395
 
16359
- // src/components/Card.tsx
16396
+ // src/components/Filters/ToggleFilter.tsx
16360
16397
  var import_jsx_runtime133 = require("@emotion/react/jsx-runtime");
16361
- function Card(props) {
16362
- const {
16363
- title,
16364
- subtitle,
16365
- detailContent,
16366
- imgSrc,
16367
- imageFit = "contain",
16368
- type = "card",
16369
- bordered = false,
16370
- disabled: isDisabled = false,
16371
- buttonMenuItems,
16372
- tag
16373
- } = props;
16374
- const tid = useTestIds(props, "card");
16375
- const { hoverProps, isHovered } = (0, import_react_aria48.useHover)({ isDisabled });
16376
- const isList = type === "list";
16377
- const imgHeight = isList ? 96 : bordered ? 224 : 256;
16378
- const styles = (0, import_react98.useMemo)(
16379
- () => ({
16380
- ...baseStyles4(type),
16381
- ...isList && listStyles,
16382
- ...bordered && borderedStyles,
16383
- ...isHovered && cardHoverStyles,
16384
- ...isDisabled && disabledStyles3
16385
- }),
16386
- [isDisabled, isHovered, bordered, type, isList]
16387
- );
16388
- return /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { css: styles, ...hoverProps, ...tid, children: [
16389
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
16390
- "div",
16398
+ function toggleFilter(props) {
16399
+ return (key) => new ToggleFilter(key, {
16400
+ // If the user has set the offValue, that should be the default b/c we're only a two-state
16401
+ defaultValue: props.offValue,
16402
+ ...props
16403
+ });
16404
+ }
16405
+ var ToggleFilter = class extends BaseFilter {
16406
+ render(value, setValue, tid, inModal, vertical) {
16407
+ const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
16408
+ return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
16409
+ Switch,
16391
16410
  {
16392
- css: {
16393
- ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add("filter", "brightness(1)").$,
16394
- ...isHovered && !isList && imageHoverStyles
16411
+ ...props,
16412
+ selected: value === void 0 ? false : value === onValue,
16413
+ label: this.label,
16414
+ labelStyle: inModal || vertical ? "filter" : "inline",
16415
+ onChange: (on) => {
16416
+ setValue(on ? onValue : offValue);
16395
16417
  },
16396
- children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
16397
- }
16398
- ),
16399
- isHovered && buttonMenuItems && /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
16400
- ButtonMenu,
16401
- {
16402
- trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
16403
- items: buttonMenuItems
16418
+ ...this.testId(tid)
16404
16419
  }
16405
- ) }),
16406
- tag && /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { css: Css.absolute.left1.topPx(4).$, children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Tag, { type: tag?.type, text: tag?.text, ...tid.tag }) }),
16407
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { css: Css.df.fdc.aifs.gap1.$, children: [
16408
- /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { children: [
16409
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { css: Css.xsMd.gray700.$, ...tid.subtitle, children: subtitle }),
16410
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { css: Css.smMd.gray900.if(isHovered).blue700.$, ...tid.title, children: title })
16411
- ] }),
16412
- /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { ...tid.details, children: detailContent })
16413
- ] })
16414
- ] });
16415
- }
16416
- var width = { card: 256, list: 520 };
16417
- var baseStyles4 = (type) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;
16418
- var listStyles = Css.df.fdr.gap2.$;
16419
- var borderedStyles = Css.ba.br8.bcGray300.p2.$;
16420
- var disabledStyles3 = Css.add("opacity", 0.5).add("transition", "opacity 0.3s ease").$;
16421
- var cardHoverStyles = Css.bcGray400.cursorPointer.$;
16422
- var imageHoverStyles = Css.bgWhite.add("filter", "brightness(0.3)").add("transition", "filter 0.3s ease").$;
16423
-
16424
- // src/components/Copy.tsx
16420
+ );
16421
+ }
16422
+ get hideLabelInModal() {
16423
+ return true;
16424
+ }
16425
+ };
16426
+
16427
+ // src/components/Filters/utils.tsx
16428
+ function updateFilter(currentFilter, key, value) {
16429
+ if (value === void 0) {
16430
+ return omitKey(key, currentFilter);
16431
+ } else {
16432
+ return { ...currentFilter, [key]: value };
16433
+ }
16434
+ }
16435
+ var filterTestIdPrefix = "filter";
16436
+
16437
+ // src/components/Filters/Filters.tsx
16425
16438
  var import_jsx_runtime134 = require("@emotion/react/jsx-runtime");
16426
- function Copy(props) {
16427
- return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
16439
+ function Filters(props) {
16440
+ const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;
16441
+ const testId = useTestIds(props, filterTestIdPrefix);
16442
+ const { openModal } = useModal();
16443
+ const [pageFilters, modalFilters] = (0, import_react91.useMemo)(() => {
16444
+ const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key)]);
16445
+ if (!vertical && impls.length > numberOfInlineFilters) {
16446
+ return [
16447
+ Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)),
16448
+ Object.fromEntries(impls.slice(numberOfInlineFilters - 1))
16449
+ ];
16450
+ }
16451
+ return [Object.fromEntries(impls), {}];
16452
+ }, [numberOfInlineFilters, vertical, filterDefs]);
16453
+ const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== void 0).length;
16454
+ const maybeGroupByField = groupBy ? /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
16455
+ SelectField,
16456
+ {
16457
+ label: "Group by",
16458
+ compact: !vertical,
16459
+ labelStyle: !vertical ? "inline" : "above",
16460
+ sizeToContent: !vertical,
16461
+ options: groupBy.options,
16462
+ getOptionValue: (o) => o.id,
16463
+ getOptionLabel: (o) => o.name,
16464
+ value: groupBy.value,
16465
+ onSelect: (g) => g && groupBy.setValue(g)
16466
+ }
16467
+ ) }) : null;
16468
+ return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(
16428
16469
  "div",
16429
16470
  {
16430
16471
  css: {
16431
- ...Css.sm.gray700.mt2.mb3.wPx(480).$,
16432
- "& > p": Css.my2.$
16472
+ ...vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$
16433
16473
  },
16434
- children: props.children
16474
+ ...testId,
16475
+ children: [
16476
+ maybeGroupByField,
16477
+ safeEntries(pageFilters).map(([key, f]) => /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { children: f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical) }, key)),
16478
+ Object.keys(modalFilters).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
16479
+ Button,
16480
+ {
16481
+ label: "More Filters",
16482
+ endAdornment: numModalFilters > 0 && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { css: Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$, children: numModalFilters }),
16483
+ variant: "secondary",
16484
+ onClick: () => openModal({
16485
+ // Spreading `props` to pass along `data-testid`
16486
+ content: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(FilterModal, { ...props, filter, onApply: onChange, filters: modalFilters })
16487
+ }),
16488
+ ...testId.moreFiltersBtn
16489
+ }
16490
+ ),
16491
+ Object.keys(filter).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(Button, { label: "Clear", variant: "tertiary", onClick: () => onChange({}), ...testId.clearBtn }) })
16492
+ ]
16435
16493
  }
16436
16494
  );
16437
16495
  }
16496
+ var _Filters = (0, import_react91.memo)(Filters);
16438
16497
 
16439
- // src/components/DnDGrid/DnDGrid.tsx
16440
- var import_fast_deep_equal2 = __toESM(require("fast-deep-equal"), 1);
16441
- var import_react100 = require("react");
16498
+ // src/components/Table/TableActions.tsx
16499
+ var import_jsx_runtime135 = require("@emotion/react/jsx-runtime");
16500
+ function TableActions(props) {
16501
+ const { xss, children, onlyLeft, onlyRight } = props;
16502
+ const alignmentStyles = onlyLeft ? Css.jcfs.$ : onlyRight ? Css.jcfe.$ : Css.jcsb.$;
16503
+ return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { css: { ...Css.df.aic.pb2.gap1.$, ...xss, ...alignmentStyles }, children });
16504
+ }
16442
16505
 
16443
- // src/components/DnDGrid/DnDGridContext.tsx
16444
- var import_react99 = require("react");
16445
- var DnDGridContext = (0, import_react99.createContext)({
16446
- dragEl: { current: void 0 },
16447
- onDragHandleKeyDown: () => {
16506
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
16507
+ var import_use_debounce6 = require("use-debounce");
16508
+ var import_use_query_params3 = require("use-query-params");
16509
+
16510
+ // src/components/Layout/ScrollableContent.tsx
16511
+ var import_react92 = require("react");
16512
+ var import_react_dom4 = require("react-dom");
16513
+ var import_jsx_runtime136 = require("@emotion/react/jsx-runtime");
16514
+ function ScrollableContent(props) {
16515
+ const { children, virtualized = false, omitBottomPadding, bgColor } = props;
16516
+ const { scrollableEl, setPortalTick, pl, pr } = useScrollableParent();
16517
+ (0, import_react92.useEffect)(() => {
16518
+ setPortalTick((prev) => prev + 1);
16519
+ return () => setPortalTick((prev) => prev + 1);
16520
+ }, [setPortalTick]);
16521
+ if (!scrollableEl) {
16522
+ return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(import_jsx_runtime136.Fragment, { children });
16448
16523
  }
16449
- });
16450
- function useDnDGridContext() {
16451
- return (0, import_react99.useContext)(DnDGridContext);
16524
+ return (0, import_react_dom4.createPortal)(
16525
+ /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
16526
+ "div",
16527
+ {
16528
+ css: {
16529
+ ...Css.h100.pr(pr).pl(pl).if(virtualized).pr0.$,
16530
+ ...bgColor && Css.bgColor(bgColor).$,
16531
+ ...!omitBottomPadding && !virtualized && scrollContainerBottomPadding
16532
+ },
16533
+ children
16534
+ }
16535
+ ),
16536
+ scrollableEl
16537
+ );
16452
16538
  }
16453
16539
 
16454
- // src/components/DnDGrid/DnDGrid.tsx
16455
- var import_jsx_runtime135 = require("@emotion/react/jsx-runtime");
16456
- function DnDGrid(props) {
16457
- const { children, gridStyles, onReorder, activeItemStyles } = props;
16458
- const gridEl = (0, import_react100.useRef)(null);
16459
- const dragEl = (0, import_react100.useRef)();
16460
- const cloneEl = (0, import_react100.useRef)();
16461
- const initialOrder = (0, import_react100.useRef)();
16462
- const reorderViaKeyboard = (0, import_react100.useRef)(false);
16463
- const transformFrom = (0, import_react100.useRef)({ x: 0, y: 0 });
16464
- const tid = useTestIds(props, "dndGrid");
16465
- const getGridItems = (0, import_react100.useCallback)(() => {
16466
- return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];
16467
- }, []);
16468
- const getGridItemIdOrder = (0, import_react100.useCallback)(() => {
16469
- return getGridItems().map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined);
16470
- }, [getGridItems]);
16471
- const initReorder = (0, import_react100.useCallback)(() => {
16472
- if (gridEl.current && dragEl.current) {
16473
- initialOrder.current = getGridItemIdOrder();
16474
- dragEl.current.classList.add(activeGridItemClass);
16475
- }
16476
- }, [getGridItemIdOrder]);
16477
- const commitReorder = (0, import_react100.useCallback)(() => {
16478
- if (gridEl.current && dragEl.current) {
16479
- const currentOrder = getGridItemIdOrder();
16480
- if (!(0, import_fast_deep_equal2.default)(currentOrder, initialOrder.current)) onReorder(currentOrder);
16481
- dragEl.current.classList.remove(activeGridItemClass);
16482
- dragEl.current = void 0;
16483
- reorderViaKeyboard.current = false;
16484
- initialOrder.current = currentOrder;
16485
- }
16486
- }, [onReorder, getGridItemIdOrder]);
16487
- const cancelReorder = (0, import_react100.useCallback)(() => {
16488
- if (gridEl.current && dragEl.current && initialOrder.current) {
16489
- const currentOrder = getGridItemIdOrder();
16490
- if (!(0, import_fast_deep_equal2.default)(currentOrder, initialOrder.current)) {
16491
- const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? "");
16492
- if (initialIndex === initialOrder.current.length - 1) {
16493
- const gridItems = getGridItems();
16494
- const lastGridItem = gridItems[gridItems.length - 1];
16495
- gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);
16496
- } else {
16497
- const nextSiblingIndex = initialOrder.current[initialIndex + 1];
16498
- const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}="${nextSiblingIndex}"]`);
16499
- if (nextSibling) {
16500
- gridEl.current.insertBefore(dragEl.current, nextSibling);
16501
- }
16502
- }
16540
+ // src/components/Layout/GridTableLayout/QueryTable.tsx
16541
+ var import_react93 = require("react");
16542
+
16543
+ // src/components/LoadingSkeleton.tsx
16544
+ var import_jsx_runtime137 = require("@emotion/react/jsx-runtime");
16545
+ function LoadingSkeleton({
16546
+ rows = 1,
16547
+ columns = 1,
16548
+ size = "md",
16549
+ randomizeWidths = false,
16550
+ contrast = false
16551
+ }) {
16552
+ const cellArray = [...Array(columns)];
16553
+ const rowArray = [...Array(rows)];
16554
+ const rowHeight = sizeToPixels2[size];
16555
+ const rowCells = (rowNumber) => {
16556
+ const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;
16557
+ return cellArray.map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
16558
+ "div",
16559
+ {
16560
+ css: Css.br4.add("animation", "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite").add("flexGrow", flexGrowForCell).bgGray300.if(contrast).bgGray700.$
16561
+ },
16562
+ `row-${rowNumber}-cell-${i}`
16563
+ ));
16564
+ };
16565
+ return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { "aria-label": "Loading", children: rowArray.map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { css: Css.df.gap1.mb1.hPx(rowHeight).$, children: rowCells(i) }, `row-${i}`)) });
16566
+ }
16567
+ function getRandomizedFlexBasisByRowIndex(rowIndex) {
16568
+ const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];
16569
+ const valueIndex = rowIndex % randomizedFlexBasisValues.length;
16570
+ return randomizedFlexBasisValues[valueIndex];
16571
+ }
16572
+ var sizeToPixels2 = {
16573
+ sm: 16,
16574
+ md: 24,
16575
+ lg: 32
16576
+ };
16577
+
16578
+ // src/components/Layout/GridTableLayout/QueryTable.tsx
16579
+ var import_jsx_runtime138 = require("@emotion/react/jsx-runtime");
16580
+ function QueryTable(props) {
16581
+ const { emptyFallback, query, createRows, getPageInfo, columns, keepHeaderWhenLoading, ...others } = props;
16582
+ const data = query.loading || query.error ? void 0 : query.data;
16583
+ const rows = (0, import_react93.useMemo)(() => createRows(data), [createRows, data]);
16584
+ const hasNextPage = data && getPageInfo && getPageInfo(data).hasNextPage;
16585
+ const infoMessage = hasNextPage ? "Too many rows" : void 0;
16586
+ const fallbackMessage = query.loading ? "Loading\u2026" : query.error ? `Error: ${query.error.message}` : emptyFallback;
16587
+ const headers = rows.filter((row) => row.kind === "header");
16588
+ return query.loading ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { children: keepHeaderWhenLoading ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(GridTable, { ...{ columns, ...others }, rows: headers, fallbackMessage }) : /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(LoadingTable, { columns: columns.length }) }) : /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(GridTable, { ...{ rows, columns, fallbackMessage, infoMessage, ...others } });
16589
+ }
16590
+ function LoadingTable(props) {
16591
+ const { columns } = props;
16592
+ return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(import_jsx_runtime138.Fragment, { children: [
16593
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(LoadingSkeleton, { rows: 1, columns: 1 }),
16594
+ /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(LoadingSkeleton, { rows: 5, columns: columns ?? 5 })
16595
+ ] });
16596
+ }
16597
+
16598
+ // src/components/Layout/GridTableLayout/GridTableLayout.tsx
16599
+ var import_jsx_runtime139 = require("@emotion/react/jsx-runtime");
16600
+ function isGridTableProps(props) {
16601
+ return "rows" in props;
16602
+ }
16603
+ function GridTableLayoutComponent(props) {
16604
+ const { pageTitle, breadcrumb, tableProps, layoutState, primaryAction, secondaryAction, tertiaryAction } = props;
16605
+ const clientSearch = layoutState?.search === "client" ? layoutState.searchString : void 0;
16606
+ const showTableActions = layoutState?.filterDefs || layoutState?.search;
16607
+ const isVirtualized = tableProps.as === "virtual";
16608
+ const breakpoints = useBreakpoint();
16609
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)(import_jsx_runtime139.Fragment, { children: [
16610
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16611
+ Header2,
16612
+ {
16613
+ pageTitle,
16614
+ breadcrumb,
16615
+ primaryAction,
16616
+ secondaryAction,
16617
+ tertiaryAction
16503
16618
  }
16504
- dragEl.current.classList.remove(activeGridItemClass);
16505
- dragEl.current = void 0;
16506
- reorderViaKeyboard.current = false;
16507
- }
16508
- }, [getGridItemIdOrder, getGridItems]);
16509
- const onMove = (0, import_react100.useCallback)((e) => {
16510
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16511
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16512
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16513
- const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
16514
- const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
16515
- const x = clientX - transformFrom.current.x - left;
16516
- const y = clientY - transformFrom.current.y - top;
16517
- dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
16518
- const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
16519
- const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
16520
- if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
16521
- const targetPos = target.getBoundingClientRect();
16522
- const isHalfwayPassedTarget = (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 || (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
16523
- const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
16524
- if (shouldInsert) {
16525
- gridEl.current.insertBefore(cloneEl.current, isHalfwayPassedTarget ? target.nextSibling : target);
16619
+ ),
16620
+ showTableActions && /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)(TableActions, { onlyRight: !layoutState?.search, children: [
16621
+ layoutState?.search && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(SearchBox, { onSearch: layoutState.setSearchString }),
16622
+ layoutState?.filterDefs && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16623
+ _Filters,
16624
+ {
16625
+ filterDefs: layoutState.filterDefs,
16626
+ filter: layoutState.filter,
16627
+ onChange: layoutState.setFilter,
16628
+ groupBy: layoutState.groupBy,
16629
+ numberOfInlineFilters: breakpoints.mdAndDown ? 2 : void 0
16526
16630
  }
16631
+ )
16632
+ ] }),
16633
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(ScrollableContent, { virtualized: isVirtualized, children: isGridTableProps(tableProps) ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(GridTable, { ...tableProps, filter: clientSearch, style: { allWhite: true }, stickyHeader: true }) : /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16634
+ QueryTable,
16635
+ {
16636
+ ...tableProps,
16637
+ filter: clientSearch,
16638
+ style: { allWhite: true },
16639
+ stickyHeader: true
16527
16640
  }
16528
- }
16529
- }, []);
16530
- const onDragStart = (0, import_react100.useCallback)(
16531
- (e) => {
16532
- if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
16533
- initReorder();
16534
- const gridRect = gridEl.current.getBoundingClientRect();
16535
- const rect = dragEl.current.getBoundingClientRect();
16536
- const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
16537
- const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
16538
- const top = rect.top - gridRect.top;
16539
- const left = rect.left - gridRect.left;
16540
- transformFrom.current = { x: clientX - left, y: clientY - top };
16541
- cloneEl.current = dragEl.current.cloneNode();
16542
- cloneEl.current?.setAttribute(
16543
- "style",
16544
- `border-width: 2px; border-color: ${"rgba(201, 201, 201, 1)" /* Gray400 */}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`
16545
- );
16546
- cloneEl.current?.setAttribute(gridCloneKey, "true");
16547
- cloneEl.current.removeAttribute("id");
16548
- cloneEl.current?.classList.remove(activeGridItemClass);
16549
- gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);
16550
- dragEl.current.setAttribute(
16551
- "style",
16552
- `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`
16553
- );
16554
- gridEl.current.style.cursor = "grabbing";
16555
- gridEl.current.addEventListener("mousemove", onMove);
16556
- gridEl.current.addEventListener("touchmove", onMove);
16557
- }
16558
- },
16559
- [initReorder, onMove]
16560
- );
16561
- const onDragEnd = (0, import_react100.useCallback)(
16562
- (e) => {
16563
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
16564
- e.preventDefault();
16565
- cloneEl.current.replaceWith(dragEl.current);
16566
- gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
16567
- dragEl.current.removeAttribute("style");
16568
- gridEl.current.style.cursor = "auto";
16569
- cloneEl.current = void 0;
16570
- commitReorder();
16571
- gridEl.current.removeEventListener("mousemove", onMove);
16572
- gridEl.current.removeEventListener("touchmove", onMove);
16573
- }
16574
- },
16575
- [commitReorder, onMove]
16576
- );
16577
- const onDragHandleKeyDown = (0, import_react100.useCallback)(
16578
- (e) => {
16579
- const moveHandle = e.target;
16580
- if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
16581
- const isSpaceKey = e.key === " ";
16582
- if (isSpaceKey && !reorderViaKeyboard.current) {
16583
- e.preventDefault();
16584
- reorderViaKeyboard.current = true;
16585
- document.addEventListener("pointerdown", cancelReorder);
16586
- initReorder();
16587
- return;
16588
- }
16589
- if (!reorderViaKeyboard.current) {
16590
- return;
16591
- }
16592
- const isEnterKey = e.key === "Enter";
16593
- const isTabKey = e.key === "Tab";
16594
- if (isEnterKey || isSpaceKey || isTabKey) {
16595
- if (!isTabKey) {
16596
- e.preventDefault();
16597
- }
16598
- commitReorder();
16599
- if (isEnterKey) {
16600
- moveHandle.blur();
16601
- }
16602
- document.removeEventListener("pointerdown", cancelReorder);
16603
- return;
16604
- }
16605
- if (e.key === "Escape") {
16606
- e.preventDefault();
16607
- cancelReorder();
16608
- document.removeEventListener("pointerdown", cancelReorder);
16609
- return;
16610
- }
16611
- const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
16612
- const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
16613
- if (movingLeft || movingRight) {
16614
- e.preventDefault();
16615
- const gridItems = getGridItems();
16616
- const currentIndex = gridItems.map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined).indexOf(dragEl.current.getAttribute(gridItemIdKey));
16617
- const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;
16618
- const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;
16619
- if (movingLeft && currentIndex > 0 || movingRight && currentIndex < gridItems.length - 1) {
16620
- gridEl.current.insertBefore(dragEl.current, insertBeforeElement);
16621
- }
16622
- moveHandle.focus();
16623
- }
16624
- }
16625
- },
16626
- [cancelReorder, commitReorder, initReorder, getGridItems]
16627
- );
16628
- return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(DnDGridContext.Provider, { value: { dragEl, onDragHandleKeyDown }, children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
16629
- "div",
16630
- {
16631
- ref: gridEl,
16632
- css: {
16633
- ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,
16634
- ...gridStyles
16635
- },
16636
- onTouchStart: onDragStart,
16637
- onMouseDown: onDragStart,
16638
- onTouchEnd: onDragEnd,
16639
- onMouseUp: onDragEnd,
16640
- ...tid,
16641
- children
16641
+ ) })
16642
+ ] });
16643
+ }
16644
+ var GridTableLayout = import_react94.default.memo(GridTableLayoutComponent);
16645
+ function useGridTableLayoutState({
16646
+ persistedFilter,
16647
+ search,
16648
+ groupBy: maybeGroupBy
16649
+ }) {
16650
+ const filterFallback = { filterDefs: {}, storageKey: "unset-filter" };
16651
+ const { filter, setFilter } = usePersistedFilter(persistedFilter ?? filterFallback);
16652
+ const groupBy = useGroupBy(maybeGroupBy ?? { none: "none" });
16653
+ const [searchString, setSearchString] = (0, import_react94.useState)("");
16654
+ return {
16655
+ filter,
16656
+ setFilter,
16657
+ filterDefs: persistedFilter?.filterDefs,
16658
+ searchString,
16659
+ setSearchString,
16660
+ search,
16661
+ groupBy: maybeGroupBy ? groupBy : void 0
16662
+ };
16663
+ }
16664
+ function Header2(props) {
16665
+ const { pageTitle, breadcrumb, primaryAction, secondaryAction, tertiaryAction } = props;
16666
+ const tids = useTestIds(props);
16667
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(FullBleed, { children: /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("header", { css: { ...Css.p3.mb3.mhPx(50).bgWhite.df.jcsb.aic.$ }, ...tids.header, children: [
16668
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
16669
+ breadcrumb && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(PageHeaderBreadcrumbs, { breadcrumb }),
16670
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("h1", { css: Css.xl2Sb.mt1.$, ...tids.pageTitle, children: pageTitle })
16671
+ ] }),
16672
+ /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { css: Css.df.fwr.jcfe.gap1.$, children: [
16673
+ tertiaryAction && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(Button, { ...tertiaryAction, variant: "tertiary" }),
16674
+ secondaryAction && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(Button, { ...secondaryAction, variant: "secondary" }),
16675
+ primaryAction && /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(Button, { ...primaryAction })
16676
+ ] })
16677
+ ] }) });
16678
+ }
16679
+ function SearchBox({ onSearch }) {
16680
+ const [{ search: initialValue }, setQueryParams] = (0, import_use_query_params3.useQueryParams)({ search: import_use_query_params3.StringParam });
16681
+ const [value, setValue] = (0, import_react94.useState)(initialValue || "");
16682
+ const [debouncedSearch] = (0, import_use_debounce6.useDebounce)(value, 300);
16683
+ (0, import_react94.useEffect)(() => {
16684
+ onSearch(debouncedSearch);
16685
+ setQueryParams({ search: debouncedSearch || void 0 }, "replaceIn");
16686
+ }, [debouncedSearch, onSearch, setQueryParams]);
16687
+ return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { css: Css.wPx(244).$, children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16688
+ TextField,
16689
+ {
16690
+ label: "Search",
16691
+ labelStyle: "hidden",
16692
+ value,
16693
+ onChange: (v) => setValue(v ?? ""),
16694
+ placeholder: "Search",
16695
+ clearable: true,
16696
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(Icon, { icon: "search", color: "rgba(100, 100, 100, 1)" /* Gray700 */ })
16642
16697
  }
16643
16698
  ) });
16644
16699
  }
16645
- var gridItemIdKey = "dndgrid-itemid";
16646
- var gridCloneKey = "dndgrid-clone";
16647
- var activeGridItemClass = "dndgrid-active";
16648
16700
 
16649
- // src/components/DnDGrid/DnDGridItemHandle.tsx
16650
- var import_react_aria49 = require("react-aria");
16651
- var import_jsx_runtime136 = require("@emotion/react/jsx-runtime");
16652
- function DnDGridItemHandle(props) {
16653
- const { dragHandleProps, icon = "move", compact = false, color } = props;
16654
- const { focusProps, isFocusVisible } = (0, import_react_aria49.useFocusRing)();
16655
- const { hoverProps, isHovered } = (0, import_react_aria49.useHover)({});
16656
- const tid = useTestIds(props, "dragHandle");
16657
- const iconButtonNormal2 = Css.hPx(28).wPx(28).br8.bw2.$;
16658
- const iconButtonCompact2 = Css.hPx(18).wPx(18).br4.bw1.$;
16659
- return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
16660
- "button",
16661
- {
16662
- css: {
16663
- ...compact ? iconButtonCompact2 : iconButtonNormal2,
16664
- ...Css.cursor("grab").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible).bcBlue700.$,
16665
- ...isHovered && Css.bgGray200.$
16666
- },
16667
- ...(0, import_react_aria49.mergeProps)(dragHandleProps, focusProps, hoverProps),
16668
- ...tid,
16669
- children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Icon, { icon, inc: compact ? 2 : void 0, color })
16670
- }
16701
+ // src/components/Layout/PreventBrowserScroll.tsx
16702
+ var import_jsx_runtime140 = require("@emotion/react/jsx-runtime");
16703
+ function PreventBrowserScroll({ children }) {
16704
+ return (
16705
+ // Take over the full viewport and hide any overflown content.
16706
+ // 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/
16707
+ // 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.
16708
+ /* @__PURE__ */ (0, import_jsx_runtime140.jsx)("div", { css: Css.oh.vh100.mh("-webkit-fill-available").maxh("-webkit-fill-available").$, children: /* @__PURE__ */ (0, import_jsx_runtime140.jsx)("div", { css: Css.h100.df.fdc.mh0.oa.$, children }) })
16671
16709
  );
16672
16710
  }
16673
16711
 
16674
- // src/components/DnDGrid/useDnDGridItem.tsx
16675
- var import_react101 = require("react");
16676
- function useDnDGridItem(props) {
16677
- const { id, itemRef } = props;
16678
- const { dragEl, onDragHandleKeyDown } = useDnDGridContext();
16679
- const { dragItemProps, dragHandleProps } = (0, import_react101.useMemo)(
16680
- () => {
16681
- function initDraggable() {
16682
- if (itemRef.current) {
16683
- dragEl.current = itemRef.current;
16684
- }
16685
- }
16686
- return {
16687
- dragItemProps: { [gridItemIdKey]: id },
16688
- dragHandleProps: {
16689
- onMouseDown: initDraggable,
16690
- onTouchStart: initDraggable,
16691
- onKeyDown: (e) => {
16692
- initDraggable();
16693
- onDragHandleKeyDown(e);
16694
- }
16695
- }
16696
- };
16712
+ // src/components/Layout/RightPaneLayout/RightPaneContext.tsx
16713
+ var import_react95 = __toESM(require("react"), 1);
16714
+ var import_jsx_runtime141 = require("@emotion/react/jsx-runtime");
16715
+ var RightPaneContext = import_react95.default.createContext({
16716
+ openInPane: () => {
16717
+ },
16718
+ closePane: () => {
16719
+ },
16720
+ clearPane: () => {
16721
+ },
16722
+ isRightPaneOpen: false,
16723
+ rightPaneContent: null
16724
+ });
16725
+ function RightPaneProvider({ children }) {
16726
+ const [rightPaneContent, setRightPaneContent] = (0, import_react95.useState)(void 0);
16727
+ const [isRightPaneOpen, setIsRightPaneOpen] = (0, import_react95.useState)(false);
16728
+ const openInPane = (0, import_react95.useCallback)(
16729
+ (opts) => {
16730
+ setRightPaneContent(opts?.content);
16731
+ setIsRightPaneOpen(true);
16697
16732
  },
16698
- // 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
16699
- // eslint-disable-next-line react-hooks/exhaustive-deps
16700
- [dragEl, id, itemRef]
16733
+ [setRightPaneContent]
16701
16734
  );
16702
- return { dragHandleProps, dragItemProps };
16735
+ const closePane = (0, import_react95.useCallback)(() => setIsRightPaneOpen(false), []);
16736
+ const clearPane = (0, import_react95.useCallback)(() => setRightPaneContent(void 0), [setRightPaneContent]);
16737
+ const context = (0, import_react95.useMemo)(
16738
+ () => ({ openInPane, closePane, clearPane, rightPaneContent, isRightPaneOpen }),
16739
+ [openInPane, closePane, rightPaneContent, clearPane, isRightPaneOpen]
16740
+ );
16741
+ return /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(RightPaneContext.Provider, { value: context, children });
16703
16742
  }
16704
-
16705
- // src/components/Filters/BaseFilter.ts
16706
- var BaseFilter = class {
16707
- constructor(key, props) {
16708
- this.key = key;
16709
- this.props = props;
16710
- }
16711
- get label() {
16712
- return this.props.label || defaultLabel(this.key);
16713
- }
16714
- get defaultValue() {
16715
- return this.props.defaultValue;
16716
- }
16717
- testId(tid) {
16718
- return tid[defaultTestId(this.label)];
16719
- }
16720
- };
16721
-
16722
- // src/components/Filters/DateFilter.tsx
16723
- var import_jsx_runtime137 = require("@emotion/react/jsx-runtime");
16724
- function dateFilter(props) {
16725
- return (key) => new DateFilter(key, props);
16743
+ function useRightPaneContext() {
16744
+ return (0, import_react95.useContext)(RightPaneContext);
16726
16745
  }
16727
- var anyOption = {};
16728
- var DateFilter = class extends BaseFilter {
16729
- render(value, setValue, tid, inModal, vertical) {
16730
- const { label, operations, getOperationValue, getOperationLabel } = this.props;
16731
- return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment, { children: [
16732
- vertical && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Label, { label }),
16733
- /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(CompoundField, { children: [
16734
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
16735
- SelectField,
16736
- {
16737
- compact: true,
16738
- sizeToContent: true,
16739
- options: [
16740
- // Always show the 'Any' option
16741
- anyOption,
16742
- ...operations
16743
- ],
16744
- getOptionValue: (o) => o === anyOption ? void 0 : getOperationValue(o),
16745
- getOptionLabel: (o) => o === anyOption ? "Any" : getOperationLabel(o),
16746
- value: value?.op,
16747
- onSelect: (op) => (
16748
- // default the selected date to today if it doesn't exist in the filter's value
16749
- setValue(op ? { op, value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date() } : void 0)
16750
- ),
16751
- label: inModal ? `${label} date filter operation` : label,
16752
- labelStyle: !inModal && !vertical ? "inline" : inModal || vertical ? "hidden" : "above",
16753
- nothingSelectedText: "Any",
16754
- ...tid[`${defaultTestId(this.label)}_dateOperation`]
16755
- }
16756
- ),
16757
- /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
16758
- DateField,
16759
- {
16760
- compact: true,
16761
- labelStyle: "inline",
16762
- value: value?.value ? new Date(value.value) : /* @__PURE__ */ new Date(),
16763
- label: "Date",
16764
- onChange: (d) => setValue({ ...value, value: d }),
16765
- disabled: !value,
16766
- ...tid[`${defaultTestId(this.label)}_dateField`]
16767
- }
16768
- )
16769
- ] })
16770
- ] });
16771
- }
16772
- };
16773
16746
 
16774
- // src/components/Filters/DateRangeFilter.tsx
16775
- var import_jsx_runtime138 = require("@emotion/react/jsx-runtime");
16776
- function dateRangeFilter(props) {
16777
- return (key) => new DateRangeFilter(key, props);
16778
- }
16779
- var DateRangeFilter = class extends BaseFilter {
16780
- render(value, setValue, tid, inModal, vertical) {
16781
- const { label, placeholderText, disabledDays, testFieldLabel, defaultValue } = this.props;
16782
- return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(import_jsx_runtime138.Fragment, { children: [
16783
- vertical && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(Label, { label }),
16784
- /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
16785
- DateRangeField,
16747
+ // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
16748
+ var import_framer_motion3 = require("framer-motion");
16749
+ var import_react96 = require("react");
16750
+ var import_jsx_runtime142 = require("@emotion/react/jsx-runtime");
16751
+ function RightPaneLayout(props) {
16752
+ const { children, paneBgColor = "rgba(255,255,255,1)" /* White */, paneWidth = 450, defaultPaneContent } = props;
16753
+ const { isRightPaneOpen, rightPaneContent, clearPane, closePane } = useRightPaneContext();
16754
+ (0, import_react96.useEffect)(() => closePane, [closePane]);
16755
+ return /* @__PURE__ */ (0, import_jsx_runtime142.jsx)("div", { css: Css.h100.df.oxh.$, children: /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)(import_jsx_runtime142.Fragment, { children: [
16756
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
16757
+ "div",
16758
+ {
16759
+ css: {
16760
+ ...Css.w(`calc(100% - ${paneWidth + 24}px)`).add("transition", "width .2s linear").h100.mr3.oxa.$,
16761
+ ...Css.if(!isRightPaneOpen).w100.mr0.$,
16762
+ ...Css.if(!!defaultPaneContent).w(`calc(100% - ${paneWidth + 24}px)`).mr3.$
16763
+ },
16764
+ children
16765
+ }
16766
+ ),
16767
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)("div", { css: Css.relative.if(!!defaultPaneContent).wPx(paneWidth).$, children: [
16768
+ defaultPaneContent && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
16769
+ "div",
16786
16770
  {
16787
- compact: true,
16788
- labelStyle: "inline",
16789
- isRangeFilterField: true,
16790
- placeholder: placeholderText,
16791
- label: testFieldLabel ?? "Date",
16792
- value: value?.value ? { from: new Date(value.value.from), to: new Date(value.value.to) } : void 0,
16793
- onChange: (d) => d ? setValue({ op: defaultValue?.op, value: d }) : setValue(void 0),
16794
- disabledDays,
16795
- ...tid[`${defaultTestId(this.label)}_dateField`]
16771
+ css: Css.h100.wPx(paneWidth).left(0).absolute.add("transition", "all .3s ease-in-out").if(isRightPaneOpen).add("opacity", 0).left(100).$,
16772
+ children: defaultPaneContent
16796
16773
  }
16797
- )
16798
- ] });
16799
- }
16800
- };
16801
-
16802
- // src/components/Filters/MultiFilter.tsx
16803
- var import_jsx_runtime139 = require("@emotion/react/jsx-runtime");
16804
- function multiFilter(props) {
16805
- return (key) => new MultiFilter(key, props);
16806
- }
16807
- var MultiFilter = class extends BaseFilter {
16808
- render(value, setValue, tid, inModal, vertical) {
16809
- if (inModal && Array.isArray(this.props.options) && this.props.options.length > 0 && this.props.options.length <= 8) {
16810
- const { disabledOptions } = this.props;
16811
- const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
16812
- const disabledKeys = Object.keys(disabledOptionsWithReasons);
16813
- return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16814
- ToggleChipGroup,
16774
+ ),
16775
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_framer_motion3.AnimatePresence, { children: isRightPaneOpen && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
16776
+ import_framer_motion3.motion.div,
16815
16777
  {
16816
- label: this.label,
16817
- options: this.props.options.map((o) => {
16818
- const value2 = this.props.getOptionValue(o);
16819
- const disabled = value2 && disabledKeys.includes(value2.toString());
16820
- const disabledReason = disabled ? disabledOptionsWithReasons[value2.toString()] : void 0;
16821
- return {
16822
- label: this.props.getOptionLabel(o),
16823
- value: value2,
16824
- disabled: disabledReason ?? disabled
16825
- };
16826
- }),
16827
- onChange: (values) => {
16828
- setValue(values.length === 0 ? void 0 : values);
16829
- },
16830
- values: value || [],
16831
- labelStyle: "hidden",
16832
- ...tid[defaultTestId(this.label)]
16833
- }
16834
- );
16835
- }
16836
- const { defaultValue, nothingSelectedText, ...props } = this.props;
16837
- return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
16838
- MultiSelectField,
16839
- {
16840
- ...props,
16841
- compact: !vertical,
16842
- label: this.label,
16843
- values: value || [],
16844
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16845
- sizeToContent: !inModal && !vertical,
16846
- onSelect: (values) => {
16847
- setValue(values.length === 0 ? void 0 : values);
16778
+ layout: "position",
16779
+ "data-testid": "rightPaneContent",
16780
+ css: Css.bgColor(paneBgColor).h100.wPx(paneWidth).$,
16781
+ initial: { x: paneWidth + 24, position: "absolute" },
16782
+ animate: { x: 0 },
16783
+ transition: { ease: "linear", duration: 0.2 },
16784
+ exit: { transition: { ease: "linear", duration: 0.2 }, x: paneWidth },
16785
+ onAnimationComplete: (definition) => definition.x !== 0 && clearPane(),
16786
+ children: rightPaneContent
16848
16787
  },
16849
- nothingSelectedText: nothingSelectedText ?? "All",
16850
- ...this.testId(tid)
16851
- }
16852
- );
16853
- }
16854
- };
16788
+ "rightPane"
16789
+ ) })
16790
+ ] })
16791
+ ] }) });
16792
+ }
16855
16793
 
16856
- // src/components/Filters/NumberRangeFilter.tsx
16857
- var import_jsx_runtime140 = require("@emotion/react/jsx-runtime");
16858
- function numberRangeFilter(props) {
16859
- return (key) => new NumberRangeFilter(key, props);
16794
+ // src/components/Layout/RightPaneLayout/useRightPane.tsx
16795
+ function useRightPane() {
16796
+ const { openInPane, closePane } = useRightPaneContext();
16797
+ return {
16798
+ openRightPane: openInPane,
16799
+ closeRightPane: closePane
16800
+ };
16860
16801
  }
16861
- var NumberRangeFilter = class extends BaseFilter {
16862
- render(value, setValue, tid, inModal, vertical) {
16863
- const { label, numberFieldType, numberFormatOptions } = this.props;
16864
- const min = value?.min ?? void 0;
16865
- const max = value?.max ?? void 0;
16866
- return /* @__PURE__ */ (0, import_jsx_runtime140.jsxs)(import_jsx_runtime140.Fragment, { children: [
16867
- vertical && /* @__PURE__ */ (0, import_jsx_runtime140.jsxs)("div", { ...tid, children: [
16868
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(Label, { label }),
16869
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)("div", { css: Css.pb1.$, children: /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(
16870
- NumberField,
16871
- {
16872
- labelStyle: "inline",
16873
- clearable: true,
16874
- label: "Min",
16875
- value: min,
16876
- type: numberFieldType,
16877
- numberFormatOptions,
16878
- onChange: (minVal) => {
16879
- const maxValue = max ? { max } : {};
16880
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16881
- },
16882
- ...tid[`${defaultTestId(label)}_min_vertical`]
16883
- }
16884
- ) }),
16885
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(
16886
- NumberField,
16887
- {
16888
- labelStyle: "inline",
16889
- clearable: true,
16890
- label: "Max",
16891
- value: max,
16892
- type: numberFieldType,
16893
- numberFormatOptions,
16894
- onChange: (maxVal) => {
16895
- const minValue = min ? { min } : {};
16896
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16897
- },
16898
- ...tid[`${defaultTestId(label)}_max_vertical`]
16899
- }
16900
- )
16901
- ] }),
16902
- !vertical && /* @__PURE__ */ (0, import_jsx_runtime140.jsxs)(CompoundField, { ...tid, children: [
16903
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(
16904
- NumberField,
16905
- {
16906
- compact: true,
16907
- sizeToContent: !inModal,
16908
- labelStyle: "inline",
16909
- clearable: true,
16910
- label: !inModal ? `${label} Min` : "Min",
16911
- value: min,
16912
- type: numberFieldType,
16913
- numberFormatOptions,
16914
- onChange: (minVal) => {
16915
- const maxValue = max ? { max } : {};
16916
- setValue(minVal || max ? { min: minVal, ...maxValue } : void 0);
16917
- },
16918
- ...tid[`${defaultTestId(label)}_min`]
16919
- }
16920
- ),
16921
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(
16922
- NumberField,
16923
- {
16924
- compact: true,
16925
- sizeToContent: !inModal,
16926
- labelStyle: "inline",
16927
- clearable: true,
16928
- label: !inModal ? `${label} Max` : "Max",
16929
- value: max,
16930
- type: numberFieldType,
16931
- numberFormatOptions,
16932
- onChange: (maxVal) => {
16933
- const minValue = min ? { min } : {};
16934
- setValue(maxVal || min ? { max: maxVal, ...minValue } : void 0);
16935
- },
16936
- ...tid[`${defaultTestId(label)}_max`]
16937
- }
16938
- )
16939
- ] })
16940
- ] });
16941
- }
16942
- };
16943
16802
 
16944
- // src/components/Filters/SingleFilter.tsx
16945
- var import_jsx_runtime141 = require("@emotion/react/jsx-runtime");
16946
- function singleFilter(props) {
16947
- return (key) => new SingleFilter(key, props);
16803
+ // src/components/Toast/ToastContext.tsx
16804
+ var import_react97 = require("react");
16805
+ var import_jsx_runtime143 = require("@emotion/react/jsx-runtime");
16806
+ var ToastContext = (0, import_react97.createContext)({
16807
+ setNotice: () => {
16808
+ throw new Error("Missing ToastProvider");
16809
+ },
16810
+ clear: () => {
16811
+ },
16812
+ notice: void 0
16813
+ });
16814
+ function ToastProvider(props) {
16815
+ const [notice, setNotice] = (0, import_react97.useState)();
16816
+ const clear = (0, import_react97.useCallback)(() => setNotice(void 0), [setNotice]);
16817
+ const contextValue = (0, import_react97.useMemo)(() => ({ setNotice, notice, clear }), [notice, clear]);
16818
+ return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(ToastContext.Provider, { value: contextValue, children: props.children });
16948
16819
  }
16949
- var allOption = {};
16950
- var SingleFilter = class extends BaseFilter {
16951
- render(value, setValue, tid, inModal, vertical) {
16952
- const {
16953
- label,
16954
- defaultValue,
16955
- options: maybeOptions,
16956
- getOptionLabel,
16957
- getOptionValue,
16958
- nothingSelectedText,
16959
- ...props
16960
- } = this.props;
16961
- const options = Array.isArray(maybeOptions) ? [allOption, ...maybeOptions] : { ...maybeOptions, current: maybeOptions.current };
16962
- return /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(
16963
- SelectField,
16964
- {
16965
- ...props,
16966
- options,
16967
- getOptionValue: (o) => o === allOption ? void 0 : getOptionValue(o),
16968
- getOptionLabel: (o) => o === allOption ? nothingSelectedText ?? "All" : getOptionLabel(o),
16969
- compact: !vertical,
16970
- value,
16971
- label: this.label,
16972
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16973
- sizeToContent: !inModal && !vertical,
16974
- nothingSelectedText: nothingSelectedText ?? "All",
16975
- onSelect: (value2) => setValue(value2 || void 0),
16976
- ...this.testId(tid)
16977
- }
16978
- );
16820
+ function useToastContext() {
16821
+ return (0, import_react97.useContext)(ToastContext);
16822
+ }
16823
+
16824
+ // src/components/BeamContext.tsx
16825
+ var import_jsx_runtime144 = require("@emotion/react/jsx-runtime");
16826
+ var BeamContext = (0, import_react98.createContext)({
16827
+ modalState: new EmptyRef(),
16828
+ modalCanCloseChecks: new EmptyRef(),
16829
+ modalHeaderDiv: void 0,
16830
+ modalBodyDiv: void 0,
16831
+ modalFooterDiv: void 0,
16832
+ drawerContentStack: new EmptyRef(),
16833
+ drawerCanCloseChecks: new EmptyRef(),
16834
+ drawerCanCloseDetailsChecks: new EmptyRef(),
16835
+ sdHeaderDiv: void 0
16836
+ });
16837
+ function BeamProvider({ children, ...presentationProps }) {
16838
+ const [, tick] = (0, import_react98.useReducer)((prev) => prev + 1, 0);
16839
+ const modalRef = (0, import_react98.useRef)();
16840
+ const modalHeaderDiv = (0, import_react98.useMemo)(() => document.createElement("div"), []);
16841
+ const modalBodyDiv = (0, import_react98.useMemo)(() => {
16842
+ const el = document.createElement("div");
16843
+ el.style.height = "100%";
16844
+ return el;
16845
+ }, []);
16846
+ const modalCanCloseChecksRef = (0, import_react98.useRef)([]);
16847
+ const modalFooterDiv = (0, import_react98.useMemo)(() => document.createElement("div"), []);
16848
+ const drawerContentStackRef = (0, import_react98.useRef)([]);
16849
+ const drawerCanCloseChecks = (0, import_react98.useRef)([]);
16850
+ const drawerCanCloseDetailsChecks = (0, import_react98.useRef)([]);
16851
+ const sdHeaderDiv = (0, import_react98.useMemo)(() => document.createElement("div"), []);
16852
+ const context = (0, import_react98.useMemo)(() => {
16853
+ return {
16854
+ // These two keys need to trigger re-renders on change
16855
+ modalState: new PretendRefThatTicks(modalRef, tick),
16856
+ drawerContentStack: new PretendRefThatTicks(drawerContentStackRef, tick),
16857
+ // The rest we don't need to re-render when these are mutated, so just expose as-is
16858
+ modalCanCloseChecks: modalCanCloseChecksRef,
16859
+ modalHeaderDiv,
16860
+ modalBodyDiv,
16861
+ modalFooterDiv,
16862
+ drawerCanCloseChecks,
16863
+ drawerCanCloseDetailsChecks,
16864
+ sdHeaderDiv
16865
+ };
16866
+ }, [modalBodyDiv, modalFooterDiv, modalHeaderDiv, sdHeaderDiv]);
16867
+ return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(BeamContext.Provider, { value: { ...context }, children: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(PresentationProvider, { ...presentationProps, children: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(RightPaneProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(AutoSaveStatusProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SnackbarProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(ToastProvider, { children: [
16868
+ /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(import_react_aria44.OverlayProvider, { children: [
16869
+ children,
16870
+ modalRef.current && /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(Modal, { ...modalRef.current })
16871
+ ] }),
16872
+ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SuperDrawer, {})
16873
+ ] }) }) }) }) }) });
16874
+ }
16875
+ var PretendRefThatTicks = class {
16876
+ constructor(ref, tick) {
16877
+ this.ref = ref;
16878
+ this.tick = tick;
16879
+ }
16880
+ get current() {
16881
+ return this.ref.current;
16882
+ }
16883
+ set current(value) {
16884
+ this.ref.current = value;
16885
+ this.tick();
16979
16886
  }
16980
16887
  };
16888
+ function useBeamContext() {
16889
+ return (0, import_react98.useContext)(BeamContext);
16890
+ }
16981
16891
 
16982
- // src/components/Filters/TreeFilter.tsx
16983
- var import_jsx_runtime142 = require("@emotion/react/jsx-runtime");
16984
- function treeFilter(props) {
16985
- return (key) => new TreeFilter(key, props);
16892
+ // src/components/ButtonDatePicker.tsx
16893
+ var import_react99 = require("react");
16894
+ var import_react_aria45 = require("react-aria");
16895
+ var import_react_stately17 = require("react-stately");
16896
+ var import_jsx_runtime145 = require("@emotion/react/jsx-runtime");
16897
+ function ButtonDatePicker(props) {
16898
+ const { defaultOpen, disabled, trigger, onSelect, ...datePickerProps } = props;
16899
+ const state = (0, import_react_stately17.useMenuTriggerState)({ isOpen: defaultOpen });
16900
+ const buttonRef = (0, import_react99.useRef)(null);
16901
+ const { menuTriggerProps, menuProps } = (0, import_react_aria45.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
16902
+ const tid = useTestIds(
16903
+ props,
16904
+ isTextButton(trigger) ? defaultTestId(labelOr(trigger, "buttonDatePicker")) : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
16905
+ );
16906
+ return /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(OverlayTrigger, { ...props, menuTriggerProps, state, buttonRef, ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(DatePickerOverlay, { overlayProps: menuProps, children: /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(
16907
+ DatePicker,
16908
+ {
16909
+ ...datePickerProps,
16910
+ onSelect: (d) => {
16911
+ onSelect(d);
16912
+ state.close();
16913
+ },
16914
+ ...tid.datePicker
16915
+ }
16916
+ ) }) });
16986
16917
  }
16987
- var TreeFilter = class extends BaseFilter {
16988
- render(value, setValue, tid, inModal, vertical) {
16989
- const { defaultValue, nothingSelectedText, filterBy = "root", ...props } = this.props;
16990
- return /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
16991
- TreeSelectField,
16918
+
16919
+ // src/components/ButtonGroup.tsx
16920
+ var import_react100 = require("react");
16921
+ var import_react_aria46 = require("react-aria");
16922
+ var import_jsx_runtime146 = (
16923
+ // Disable the button if the ButtonGroup is disabled or if the current button is disabled.
16924
+ require("@emotion/react/jsx-runtime")
16925
+ );
16926
+ function ButtonGroup(props) {
16927
+ const { buttons, disabled = false, size = "sm" } = props;
16928
+ const tid = useTestIds(props, "buttonGroup");
16929
+ return (
16930
+ // Adding `line-height: 0` prevent inheriting line-heights that might throw off sizing within the button group.
16931
+ /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("div", { ...tid, css: Css.df.lh(0).add({ ...sizeStyles2[size] }).$, children: buttons.map(({ disabled: buttonDisabled, ...buttonProps }, i) => /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(GroupButton, { ...buttonProps, disabled: disabled || buttonDisabled, size, ...tid }, i)) })
16932
+ );
16933
+ }
16934
+ function GroupButton(props) {
16935
+ const { icon, iconInc, iconColor, text, active, onClick: onPress, disabled, size, tooltip, ...otherProps } = props;
16936
+ const ariaProps = { onPress, isDisabled: !!disabled, ...otherProps };
16937
+ const ref = (0, import_react100.useRef)(null);
16938
+ const { buttonProps, isPressed } = (0, import_react_aria46.useButton)(ariaProps, ref);
16939
+ const { isFocusVisible, focusProps } = (0, import_react_aria46.useFocusRing)();
16940
+ const { hoverProps, isHovered } = (0, import_react_aria46.useHover)(ariaProps);
16941
+ const tid = useTestIds(props);
16942
+ return /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("span", { css: getButtonStyles2(), children: maybeTooltip({
16943
+ title: resolveTooltip(disabled, tooltip),
16944
+ placement: "top",
16945
+ children: /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)(
16946
+ "button",
16992
16947
  {
16993
- ...props,
16994
- label: this.label,
16995
- values: value,
16996
- compact: !vertical,
16997
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
16998
- sizeToContent: !inModal && !vertical,
16999
- onSelect: (options) => {
17000
- const values = options[filterBy].values;
17001
- setValue(values.length === 0 ? void 0 : values);
16948
+ ref,
16949
+ ...buttonProps,
16950
+ ...focusProps,
16951
+ ...hoverProps,
16952
+ css: {
16953
+ ...Css.buttonBase.px2.br0.h100.$,
16954
+ "&:disabled": Css.gray400.cursorNotAllowed.bcGray300.$,
16955
+ ...isFocusVisible ? defaultFocusRingStyles2 : {},
16956
+ ...active ? activeStyles3 : {},
16957
+ ...isPressed ? pressedStyles2 : isHovered ? hoverStyles3 : {},
16958
+ ...icon ? iconStyles2[size] : {}
17002
16959
  },
17003
- nothingSelectedText: nothingSelectedText ?? "All",
17004
- ...this.testId(tid)
16960
+ ...tid[defaultTestId(typeof text === "string" && text || icon || "button")],
16961
+ children: [
16962
+ icon && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Icon, { xss: Css.if(!!text).mrPx(4).$, icon, color: disabled ? void 0 : iconColor, inc: iconInc }),
16963
+ text
16964
+ ]
17005
16965
  }
17006
- );
17007
- }
16966
+ )
16967
+ }) });
16968
+ }
16969
+ var pressedStyles2 = Css.bgGray200.$;
16970
+ var activeStyles3 = Css.bgGray300.$;
16971
+ var hoverStyles3 = Css.bgGray100.$;
16972
+ var defaultFocusRingStyles2 = Css.relative.z2.bshFocus.$;
16973
+ function getButtonStyles2() {
16974
+ return {
16975
+ ...Css.z1.bgWhite.bcGray300.bw1.ba.gray900.br0.oh.$,
16976
+ // Our first button should have a rounded left border
16977
+ "&:first-of-type": Css.add("borderRadius", "4px 0 0 4px").$,
16978
+ // Our last button should have a rounded right border
16979
+ "&:last-of-type": Css.add("borderRadius", "0 4px 4px 0").$,
16980
+ // Nudge buttons one pixel to the left so they visually share a border
16981
+ "&:not(:first-of-type)": Css.mlPx(-1).$
16982
+ };
16983
+ }
16984
+ var sizeStyles2 = {
16985
+ xs: Css.hPx(28).$,
16986
+ sm: Css.hPx(32).$,
16987
+ md: Css.hPx(40).$
16988
+ };
16989
+ var iconStyles2 = {
16990
+ xs: Css.pxPx(2).$,
16991
+ sm: Css.pxPx(4).$,
16992
+ md: Css.px1.$
17008
16993
  };
17009
16994
 
17010
- // src/components/Filters/BooleanFilter.tsx
17011
- var import_jsx_runtime143 = require("@emotion/react/jsx-runtime");
17012
- function booleanFilter(props) {
17013
- return (key) => new BooleanFilter(key, props);
16995
+ // src/components/ButtonMenu.tsx
16996
+ var import_react101 = require("react");
16997
+ var import_react_aria47 = require("react-aria");
16998
+ var import_react_stately18 = require("react-stately");
16999
+ var import_jsx_runtime147 = require("@emotion/react/jsx-runtime");
17000
+ function ButtonMenu(props) {
17001
+ const { defaultOpen, disabled, items, persistentItems, trigger, searchable, contrast = false } = props;
17002
+ let selectedItem, onChange;
17003
+ if (isSelectionButtonMenuProps(props)) {
17004
+ selectedItem = props.selectedItem;
17005
+ onChange = props.onChange;
17006
+ }
17007
+ const state = (0, import_react_stately18.useMenuTriggerState)({ isOpen: defaultOpen });
17008
+ const buttonRef = (0, import_react101.useRef)(null);
17009
+ const { menuTriggerProps, menuProps } = (0, import_react_aria47.useMenuTrigger)({ isDisabled: !!disabled }, state, buttonRef);
17010
+ const tid = useTestIds(
17011
+ props,
17012
+ isTextButton(trigger) ? labelOr(trigger, "buttonMenu") : isNavLinkButton(trigger) ? defaultTestId(trigger.navLabel) : isIconButton(trigger) ? trigger.icon : trigger.name
17013
+ );
17014
+ return /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(
17015
+ OverlayTrigger,
17016
+ {
17017
+ ...props,
17018
+ menuTriggerProps,
17019
+ state,
17020
+ buttonRef,
17021
+ ...tid,
17022
+ contrast,
17023
+ children: /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(
17024
+ Menu,
17025
+ {
17026
+ ariaMenuProps: menuProps,
17027
+ onClose: () => state.close(),
17028
+ items,
17029
+ persistentItems,
17030
+ searchable,
17031
+ contrast,
17032
+ selectedItem,
17033
+ onChange,
17034
+ ...tid
17035
+ }
17036
+ )
17037
+ }
17038
+ );
17014
17039
  }
17015
- var BooleanFilter = class extends BaseFilter {
17016
- render(value, setValue, tid, inModal, vertical) {
17017
- const { options = defaultBooleanOptions, label, defaultValue, ...props } = this.props;
17018
- return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
17019
- SelectField,
17020
- {
17021
- ...props,
17022
- compact: !vertical,
17023
- label: this.label,
17024
- value: String(value),
17025
- labelStyle: inModal ? "hidden" : !inModal && !vertical ? "inline" : "above",
17026
- sizeToContent: !inModal && !vertical,
17027
- options,
17028
- getOptionValue: (o) => String(o[0]),
17029
- getOptionLabel: (o) => o[1],
17030
- onSelect: (value2) => {
17031
- const parsedValue = value2 === "undefined" ? void 0 : value2 === "true";
17032
- setValue(parsedValue);
17040
+ function isSelectionButtonMenuProps(props) {
17041
+ return typeof props === "object" && "selectedItem" in props && "onChange" in props;
17042
+ }
17043
+
17044
+ // src/components/Card.tsx
17045
+ var import_react103 = require("react");
17046
+ var import_react_aria48 = require("react-aria");
17047
+
17048
+ // src/components/Tag.tsx
17049
+ var import_utils111 = require("@react-aria/utils");
17050
+ var import_react102 = require("react");
17051
+ var import_jsx_runtime148 = require("@emotion/react/jsx-runtime");
17052
+ function Tag(props) {
17053
+ const { text, type, xss, preventTooltip = false, ...otherProps } = props;
17054
+ const typeStyles2 = getStyles(type);
17055
+ const tid = useTestIds(otherProps);
17056
+ const [showTooltip, setShowTooltip] = (0, import_react102.useState)(false);
17057
+ const ref = (0, import_react102.useRef)(null);
17058
+ (0, import_utils111.useResizeObserver)({
17059
+ ref,
17060
+ onResize: () => {
17061
+ if (ref.current) {
17062
+ setShowTooltip(ref.current.offsetHeight < ref.current.scrollHeight);
17063
+ }
17064
+ }
17065
+ });
17066
+ return maybeTooltip({
17067
+ title: !preventTooltip && showTooltip ? text : void 0,
17068
+ children: /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)("span", { ...tid, css: { ...Css.dif.tinySb.ttu.aic.gapPx(4).pxPx(6).pyPx(2).gray900.br4.$, ...typeStyles2, ...xss }, children: [
17069
+ otherProps.icon && /* @__PURE__ */ (0, import_jsx_runtime148.jsx)("span", { css: Css.fs0.$, children: /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(Icon, { icon: otherProps.icon, inc: 1.5 }) }),
17070
+ /* @__PURE__ */ (0, import_jsx_runtime148.jsx)("span", { ref, css: Css.lineClamp1.wbba.$, children: text })
17071
+ ] })
17072
+ });
17073
+ }
17074
+ function getStyles(type) {
17075
+ switch (type) {
17076
+ case "info":
17077
+ return Css.bgBlue100.$;
17078
+ case "caution":
17079
+ return Css.bgYellow200.$;
17080
+ case "warning":
17081
+ return Css.bgRed200.$;
17082
+ case "success":
17083
+ return Css.bgGreen200.$;
17084
+ default:
17085
+ return Css.bgGray200.$;
17086
+ }
17087
+ }
17088
+
17089
+ // src/components/Card.tsx
17090
+ var import_jsx_runtime149 = require("@emotion/react/jsx-runtime");
17091
+ function Card(props) {
17092
+ const {
17093
+ title,
17094
+ subtitle,
17095
+ detailContent,
17096
+ imgSrc,
17097
+ imageFit = "contain",
17098
+ type = "card",
17099
+ bordered = false,
17100
+ disabled: isDisabled = false,
17101
+ buttonMenuItems,
17102
+ tag
17103
+ } = props;
17104
+ const tid = useTestIds(props, "card");
17105
+ const { hoverProps, isHovered } = (0, import_react_aria48.useHover)({ isDisabled });
17106
+ const isList = type === "list";
17107
+ const imgHeight = isList ? 96 : bordered ? 224 : 256;
17108
+ const styles = (0, import_react103.useMemo)(
17109
+ () => ({
17110
+ ...baseStyles4(type),
17111
+ ...isList && listStyles,
17112
+ ...bordered && borderedStyles,
17113
+ ...isHovered && cardHoverStyles,
17114
+ ...isDisabled && disabledStyles3
17115
+ }),
17116
+ [isDisabled, isHovered, bordered, type, isList]
17117
+ );
17118
+ return /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)("div", { css: styles, ...hoverProps, ...tid, children: [
17119
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(
17120
+ "div",
17121
+ {
17122
+ css: {
17123
+ ...Css.hPx(imgHeight).ba.br8.bcGray300.oh.df.asc.jsc.relative.add("filter", "brightness(1)").$,
17124
+ ...isHovered && !isList && imageHoverStyles
17033
17125
  },
17034
- ...this.testId(tid)
17126
+ children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("img", { css: Css.w100.h100.objectFit(imageFit).$, src: imgSrc, alt: title, ...tid.img })
17035
17127
  }
17036
- );
17037
- }
17038
- };
17039
- var defaultBooleanOptions = [
17040
- [void 0, "Any"],
17041
- [true, "Yes"],
17042
- [false, "No"]
17043
- ];
17044
-
17045
- // src/components/Filters/CheckboxFilter.tsx
17046
- var import_jsx_runtime144 = require("@emotion/react/jsx-runtime");
17047
- function checkboxFilter(props) {
17048
- return (key) => new CheckboxFilter(key, {
17049
- // If the user has set the offValue, that should be the default b/c we're only a two-state
17050
- defaultValue: props.offValue,
17051
- ...props
17052
- });
17053
- }
17054
- var CheckboxFilter = class extends BaseFilter {
17055
- render(value, setValue, tid, inModal, vertical) {
17056
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
17057
- return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(
17058
- Checkbox,
17128
+ ),
17129
+ isHovered && buttonMenuItems && /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { css: Css.absolute.right1.top1.if(bordered && !isList).right3.top3.$, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(
17130
+ ButtonMenu,
17059
17131
  {
17060
- ...props,
17061
- selected: value === void 0 ? false : value === onValue,
17062
- label: this.label,
17063
- onChange: (on) => {
17064
- setValue(on ? onValue : offValue);
17065
- },
17066
- ...this.testId(tid)
17132
+ trigger: { icon: "verticalDots", color: isList ? "rgba(100, 100, 100, 1)" /* Gray700 */ : "rgba(255,255,255,1)" /* White */ },
17133
+ items: buttonMenuItems
17067
17134
  }
17068
- );
17069
- }
17070
- get hideLabelInModal() {
17071
- return true;
17072
- }
17073
- };
17074
-
17075
- // src/components/Filters/FilterModal.tsx
17076
- var import_react103 = require("react");
17135
+ ) }),
17136
+ tag && /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { css: Css.absolute.left1.topPx(4).$, children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(Tag, { type: tag?.type, text: tag?.text, ...tid.tag }) }),
17137
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)("div", { css: Css.df.fdc.aifs.gap1.$, children: [
17138
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsxs)("div", { children: [
17139
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { css: Css.xsMd.gray700.$, ...tid.subtitle, children: subtitle }),
17140
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { css: Css.smMd.gray900.if(isHovered).blue700.$, ...tid.title, children: title })
17141
+ ] }),
17142
+ /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { ...tid.details, children: detailContent })
17143
+ ] })
17144
+ ] });
17145
+ }
17146
+ var width = { card: 256, list: 520 };
17147
+ var baseStyles4 = (type) => Css.wPx(width[type]).bgWhite.df.fdc.gap1.relative.$;
17148
+ var listStyles = Css.df.fdr.gap2.$;
17149
+ var borderedStyles = Css.ba.br8.bcGray300.p2.$;
17150
+ var disabledStyles3 = Css.add("opacity", 0.5).add("transition", "opacity 0.3s ease").$;
17151
+ var cardHoverStyles = Css.bcGray400.cursorPointer.$;
17152
+ var imageHoverStyles = Css.bgWhite.add("filter", "brightness(0.3)").add("transition", "filter 0.3s ease").$;
17077
17153
 
17078
- // src/components/Modal/OpenModal.tsx
17079
- var import_react102 = require("react");
17080
- var import_jsx_runtime145 = require("@emotion/react/jsx-runtime");
17081
- function OpenModal(props) {
17082
- const { openModal } = useModal();
17083
- const { size, children, keepOpen } = props;
17084
- (0, import_react102.useEffect)(() => {
17085
- if (!keepOpen) {
17086
- openModal({ size, content: children });
17154
+ // src/components/Copy.tsx
17155
+ var import_jsx_runtime150 = require("@emotion/react/jsx-runtime");
17156
+ function Copy(props) {
17157
+ return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(
17158
+ "div",
17159
+ {
17160
+ css: {
17161
+ ...Css.sm.gray700.mt2.mb3.wPx(480).$,
17162
+ "& > p": Css.my2.$
17163
+ },
17164
+ children: props.children
17087
17165
  }
17088
- }, [keepOpen, openModal, size, children]);
17089
- if (keepOpen) {
17090
- return /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(Modal, { size, content: children });
17091
- } else {
17092
- return /* @__PURE__ */ (0, import_jsx_runtime145.jsx)("div", { children: "dummy content" });
17166
+ );
17167
+ }
17168
+
17169
+ // src/components/DnDGrid/DnDGrid.tsx
17170
+ var import_fast_deep_equal2 = __toESM(require("fast-deep-equal"), 1);
17171
+ var import_react105 = require("react");
17172
+
17173
+ // src/components/DnDGrid/DnDGridContext.tsx
17174
+ var import_react104 = require("react");
17175
+ var DnDGridContext = (0, import_react104.createContext)({
17176
+ dragEl: { current: void 0 },
17177
+ onDragHandleKeyDown: () => {
17093
17178
  }
17179
+ });
17180
+ function useDnDGridContext() {
17181
+ return (0, import_react104.useContext)(DnDGridContext);
17094
17182
  }
17095
17183
 
17096
- // src/components/Filters/FilterModal.tsx
17097
- var import_jsx_runtime146 = require("@emotion/react/jsx-runtime");
17098
- function FilterModal(props) {
17099
- const { filter, filters, onApply } = props;
17100
- const testId = useTestIds(props, filterTestIdPrefix);
17101
- const { closeModal } = useModal();
17102
- const [modalFilter, setModalFilter] = (0, import_react103.useState)(filter);
17103
- return /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)(import_jsx_runtime146.Fragment, { children: [
17104
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(ModalHeader, { children: "More Filters" }),
17105
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("div", { css: Css.df.fdc.$, children: safeEntries(filters).map(([key, f]) => /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(ModalFilterItem, { label: f.hideLabelInModal ? void 0 : f.label, children: f.render(
17106
- modalFilter[key],
17107
- (value) => setModalFilter(updateFilter(modalFilter, key, value)),
17108
- testId,
17109
- true,
17110
- false
17111
- ) }, key)) }) }),
17112
- /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)(ModalFooter, { xss: Css.jcsb.$, children: [
17113
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(
17114
- Button,
17115
- {
17116
- label: "Clear",
17117
- variant: "tertiary",
17118
- disabled: safeKeys(filters).filter((fk) => modalFilter[fk] !== void 0).length === 0,
17119
- onClick: () => (
17120
- // Only remove the filters keys that exist in the modal.
17121
- setModalFilter(safeKeys(filters).reduce((acc, fk) => omitKey(fk, acc), modalFilter))
17122
- ),
17123
- ...testId.modalClear
17184
+ // src/components/DnDGrid/DnDGrid.tsx
17185
+ var import_jsx_runtime151 = require("@emotion/react/jsx-runtime");
17186
+ function DnDGrid(props) {
17187
+ const { children, gridStyles, onReorder, activeItemStyles } = props;
17188
+ const gridEl = (0, import_react105.useRef)(null);
17189
+ const dragEl = (0, import_react105.useRef)();
17190
+ const cloneEl = (0, import_react105.useRef)();
17191
+ const initialOrder = (0, import_react105.useRef)();
17192
+ const reorderViaKeyboard = (0, import_react105.useRef)(false);
17193
+ const transformFrom = (0, import_react105.useRef)({ x: 0, y: 0 });
17194
+ const tid = useTestIds(props, "dndGrid");
17195
+ const getGridItems = (0, import_react105.useCallback)(() => {
17196
+ return gridEl.current ? Array.from(gridEl.current.querySelectorAll(`[${gridItemIdKey}]`)) : [];
17197
+ }, []);
17198
+ const getGridItemIdOrder = (0, import_react105.useCallback)(() => {
17199
+ return getGridItems().map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined);
17200
+ }, [getGridItems]);
17201
+ const initReorder = (0, import_react105.useCallback)(() => {
17202
+ if (gridEl.current && dragEl.current) {
17203
+ initialOrder.current = getGridItemIdOrder();
17204
+ dragEl.current.classList.add(activeGridItemClass);
17205
+ }
17206
+ }, [getGridItemIdOrder]);
17207
+ const commitReorder = (0, import_react105.useCallback)(() => {
17208
+ if (gridEl.current && dragEl.current) {
17209
+ const currentOrder = getGridItemIdOrder();
17210
+ if (!(0, import_fast_deep_equal2.default)(currentOrder, initialOrder.current)) onReorder(currentOrder);
17211
+ dragEl.current.classList.remove(activeGridItemClass);
17212
+ dragEl.current = void 0;
17213
+ reorderViaKeyboard.current = false;
17214
+ initialOrder.current = currentOrder;
17215
+ }
17216
+ }, [onReorder, getGridItemIdOrder]);
17217
+ const cancelReorder = (0, import_react105.useCallback)(() => {
17218
+ if (gridEl.current && dragEl.current && initialOrder.current) {
17219
+ const currentOrder = getGridItemIdOrder();
17220
+ if (!(0, import_fast_deep_equal2.default)(currentOrder, initialOrder.current)) {
17221
+ const initialIndex = initialOrder.current.indexOf(dragEl.current.getAttribute(gridItemIdKey) ?? "");
17222
+ if (initialIndex === initialOrder.current.length - 1) {
17223
+ const gridItems = getGridItems();
17224
+ const lastGridItem = gridItems[gridItems.length - 1];
17225
+ gridEl.current.insertBefore(dragEl.current, lastGridItem.nextSibling);
17226
+ } else {
17227
+ const nextSiblingIndex = initialOrder.current[initialIndex + 1];
17228
+ const nextSibling = gridEl.current.querySelector(`[${gridItemIdKey}="${nextSiblingIndex}"]`);
17229
+ if (nextSibling) {
17230
+ gridEl.current.insertBefore(dragEl.current, nextSibling);
17231
+ }
17232
+ }
17233
+ }
17234
+ dragEl.current.classList.remove(activeGridItemClass);
17235
+ dragEl.current = void 0;
17236
+ reorderViaKeyboard.current = false;
17237
+ }
17238
+ }, [getGridItemIdOrder, getGridItems]);
17239
+ const onMove = (0, import_react105.useCallback)((e) => {
17240
+ if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
17241
+ const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
17242
+ const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
17243
+ const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
17244
+ const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
17245
+ const x = clientX - transformFrom.current.x - left;
17246
+ const y = clientY - transformFrom.current.y - top;
17247
+ dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
17248
+ const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
17249
+ const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
17250
+ if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
17251
+ const targetPos = target.getBoundingClientRect();
17252
+ const isHalfwayPassedTarget = (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 || (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
17253
+ const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
17254
+ if (shouldInsert) {
17255
+ gridEl.current.insertBefore(cloneEl.current, isHalfwayPassedTarget ? target.nextSibling : target);
17256
+ }
17257
+ }
17258
+ }
17259
+ }, []);
17260
+ const onDragStart = (0, import_react105.useCallback)(
17261
+ (e) => {
17262
+ if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
17263
+ initReorder();
17264
+ const gridRect = gridEl.current.getBoundingClientRect();
17265
+ const rect = dragEl.current.getBoundingClientRect();
17266
+ const clientX = "clientX" in e ? e.clientX : e.touches[0].clientX;
17267
+ const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
17268
+ const top = rect.top - gridRect.top;
17269
+ const left = rect.left - gridRect.left;
17270
+ transformFrom.current = { x: clientX - left, y: clientY - top };
17271
+ cloneEl.current = dragEl.current.cloneNode();
17272
+ cloneEl.current?.setAttribute(
17273
+ "style",
17274
+ `border-width: 2px; border-color: ${"rgba(201, 201, 201, 1)" /* Gray400 */}; border-style: dashed; width:${rect.width}px; height:${rect.height}px;`
17275
+ );
17276
+ cloneEl.current?.setAttribute(gridCloneKey, "true");
17277
+ cloneEl.current.removeAttribute("id");
17278
+ cloneEl.current?.classList.remove(activeGridItemClass);
17279
+ gridEl.current.insertBefore(cloneEl.current, dragEl.current.nextSibling);
17280
+ dragEl.current.setAttribute(
17281
+ "style",
17282
+ `pointer-events: none; position:fixed; z-index: 9999; top:${top}px; left:${left}px; width:${rect.width}px; height:${rect.height}px;`
17283
+ );
17284
+ gridEl.current.style.cursor = "grabbing";
17285
+ gridEl.current.addEventListener("mousemove", onMove);
17286
+ gridEl.current.addEventListener("touchmove", onMove);
17287
+ }
17288
+ },
17289
+ [initReorder, onMove]
17290
+ );
17291
+ const onDragEnd = (0, import_react105.useCallback)(
17292
+ (e) => {
17293
+ if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
17294
+ e.preventDefault();
17295
+ cloneEl.current.replaceWith(dragEl.current);
17296
+ gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
17297
+ dragEl.current.removeAttribute("style");
17298
+ gridEl.current.style.cursor = "auto";
17299
+ cloneEl.current = void 0;
17300
+ commitReorder();
17301
+ gridEl.current.removeEventListener("mousemove", onMove);
17302
+ gridEl.current.removeEventListener("touchmove", onMove);
17303
+ }
17304
+ },
17305
+ [commitReorder, onMove]
17306
+ );
17307
+ const onDragHandleKeyDown = (0, import_react105.useCallback)(
17308
+ (e) => {
17309
+ const moveHandle = e.target;
17310
+ if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
17311
+ const isSpaceKey = e.key === " ";
17312
+ if (isSpaceKey && !reorderViaKeyboard.current) {
17313
+ e.preventDefault();
17314
+ reorderViaKeyboard.current = true;
17315
+ document.addEventListener("pointerdown", cancelReorder);
17316
+ initReorder();
17317
+ return;
17318
+ }
17319
+ if (!reorderViaKeyboard.current) {
17320
+ return;
17321
+ }
17322
+ const isEnterKey = e.key === "Enter";
17323
+ const isTabKey = e.key === "Tab";
17324
+ if (isEnterKey || isSpaceKey || isTabKey) {
17325
+ if (!isTabKey) {
17326
+ e.preventDefault();
17327
+ }
17328
+ commitReorder();
17329
+ if (isEnterKey) {
17330
+ moveHandle.blur();
17331
+ }
17332
+ document.removeEventListener("pointerdown", cancelReorder);
17333
+ return;
17124
17334
  }
17125
- ),
17126
- /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { css: Css.df.gap1.$, children: [
17127
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Button, { label: "Cancel", variant: "tertiary", onClick: closeModal, ...testId.modalClose }),
17128
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(
17129
- Button,
17130
- {
17131
- label: "Apply",
17132
- onClick: () => {
17133
- onApply(modalFilter);
17134
- closeModal();
17135
- },
17136
- ...testId.modalApply
17335
+ if (e.key === "Escape") {
17336
+ e.preventDefault();
17337
+ cancelReorder();
17338
+ document.removeEventListener("pointerdown", cancelReorder);
17339
+ return;
17340
+ }
17341
+ const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
17342
+ const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
17343
+ if (movingLeft || movingRight) {
17344
+ e.preventDefault();
17345
+ const gridItems = getGridItems();
17346
+ const currentIndex = gridItems.map((child) => child.getAttribute(gridItemIdKey)).filter(isDefined).indexOf(dragEl.current.getAttribute(gridItemIdKey));
17347
+ const newIndex = movingLeft ? currentIndex - 1 : currentIndex + 2;
17348
+ const insertBeforeElement = gridItems[newIndex] ?? gridItems[gridItems.length - 1].nextSibling;
17349
+ if (movingLeft && currentIndex > 0 || movingRight && currentIndex < gridItems.length - 1) {
17350
+ gridEl.current.insertBefore(dragEl.current, insertBeforeElement);
17137
17351
  }
17138
- )
17139
- ] })
17140
- ] })
17141
- ] });
17142
- }
17143
- function ModalFilterItem({ label, children }) {
17144
- return /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { css: Css.mb4.if(!label).bt.bcGray200.$, children: [
17145
- label && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("h2", { css: Css.baseMd.mb2.$, children: label }),
17146
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("div", { css: Css.if(!label).pt3.$, children })
17147
- ] });
17148
- }
17149
-
17150
- // src/components/Filters/Filters.tsx
17151
- var import_react104 = require("react");
17152
- var import_jsx_runtime147 = require("@emotion/react/jsx-runtime");
17153
- function Filters(props) {
17154
- const { filter, onChange, filterDefs, groupBy, vertical = false, numberOfInlineFilters = groupBy ? 3 : 4 } = props;
17155
- const testId = useTestIds(props, filterTestIdPrefix);
17156
- const { openModal } = useModal();
17157
- const [pageFilters, modalFilters] = (0, import_react104.useMemo)(() => {
17158
- const impls = safeEntries(filterDefs).map(([key, fn]) => [key, fn(key)]);
17159
- if (!vertical && impls.length > numberOfInlineFilters) {
17160
- return [
17161
- Object.fromEntries(impls.slice(0, numberOfInlineFilters - 1)),
17162
- Object.fromEntries(impls.slice(numberOfInlineFilters - 1))
17163
- ];
17164
- }
17165
- return [Object.fromEntries(impls), {}];
17166
- }, [numberOfInlineFilters, vertical, filterDefs]);
17167
- const numModalFilters = safeKeys(modalFilters).filter((fk) => filter[fk] !== void 0).length;
17168
- const maybeGroupByField = groupBy ? /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(
17169
- SelectField,
17352
+ moveHandle.focus();
17353
+ }
17354
+ }
17355
+ },
17356
+ [cancelReorder, commitReorder, initReorder, getGridItems]
17357
+ );
17358
+ return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(DnDGridContext.Provider, { value: { dragEl, onDragHandleKeyDown }, children: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(
17359
+ "div",
17170
17360
  {
17171
- label: "Group by",
17172
- compact: !vertical,
17173
- labelStyle: !vertical ? "inline" : "above",
17174
- sizeToContent: !vertical,
17175
- options: groupBy.options,
17176
- getOptionValue: (o) => o.id,
17177
- getOptionLabel: (o) => o.name,
17178
- value: groupBy.value,
17179
- onSelect: (g) => g && groupBy.setValue(g)
17361
+ ref: gridEl,
17362
+ css: {
17363
+ ...Css.ctis.dg.addIn(`& .${activeGridItemClass}`, activeItemStyles ?? Css.bshModal.$).$,
17364
+ ...gridStyles
17365
+ },
17366
+ onTouchStart: onDragStart,
17367
+ onMouseDown: onDragStart,
17368
+ onTouchEnd: onDragEnd,
17369
+ onMouseUp: onDragEnd,
17370
+ ...tid,
17371
+ children
17180
17372
  }
17181
- ) }) : null;
17182
- return /* @__PURE__ */ (0, import_jsx_runtime147.jsxs)(
17183
- "div",
17373
+ ) });
17374
+ }
17375
+ var gridItemIdKey = "dndgrid-itemid";
17376
+ var gridCloneKey = "dndgrid-clone";
17377
+ var activeGridItemClass = "dndgrid-active";
17378
+
17379
+ // src/components/DnDGrid/DnDGridItemHandle.tsx
17380
+ var import_react_aria49 = require("react-aria");
17381
+ var import_jsx_runtime152 = require("@emotion/react/jsx-runtime");
17382
+ function DnDGridItemHandle(props) {
17383
+ const { dragHandleProps, icon = "move", compact = false, color } = props;
17384
+ const { focusProps, isFocusVisible } = (0, import_react_aria49.useFocusRing)();
17385
+ const { hoverProps, isHovered } = (0, import_react_aria49.useHover)({});
17386
+ const tid = useTestIds(props, "dragHandle");
17387
+ const iconButtonNormal2 = Css.hPx(28).wPx(28).br8.bw2.$;
17388
+ const iconButtonCompact2 = Css.hPx(18).wPx(18).br4.bw1.$;
17389
+ return /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(
17390
+ "button",
17184
17391
  {
17185
17392
  css: {
17186
- ...vertical ? Css.df.fdc.gap2.$ : Css.df.aic.gap1.$
17393
+ ...compact ? iconButtonCompact2 : iconButtonNormal2,
17394
+ ...Css.cursor("grab").bcTransparent.bss.bgTransparent.outline0.dif.aic.jcc.transition.if(isFocusVisible).bcBlue700.$,
17395
+ ...isHovered && Css.bgGray200.$
17187
17396
  },
17188
- ...testId,
17189
- children: [
17190
- maybeGroupByField,
17191
- safeEntries(pageFilters).map(([key, f]) => /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("div", { children: f.render(filter[key], (value) => onChange(updateFilter(filter, key, value)), testId, false, vertical) }, key)),
17192
- Object.keys(modalFilters).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(
17193
- Button,
17194
- {
17195
- label: "More Filters",
17196
- endAdornment: numModalFilters > 0 && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("span", { css: Css.wPx(16).hPx(16).fs0.br100.bgBlue700.white.tinySb.df.aic.jcc.$, children: numModalFilters }),
17197
- variant: "secondary",
17198
- onClick: () => openModal({
17199
- // Spreading `props` to pass along `data-testid`
17200
- content: /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(FilterModal, { ...props, filter, onApply: onChange, filters: modalFilters })
17201
- }),
17202
- ...testId.moreFiltersBtn
17203
- }
17204
- ),
17205
- Object.keys(filter).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime147.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(Button, { label: "Clear", variant: "tertiary", onClick: () => onChange({}), ...testId.clearBtn }) })
17206
- ]
17397
+ ...(0, import_react_aria49.mergeProps)(dragHandleProps, focusProps, hoverProps),
17398
+ ...tid,
17399
+ children: /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(Icon, { icon, inc: compact ? 2 : void 0, color })
17207
17400
  }
17208
17401
  );
17209
17402
  }
17210
- var _Filters = (0, import_react104.memo)(Filters);
17211
17403
 
17212
- // src/components/Filters/ToggleFilter.tsx
17213
- var import_jsx_runtime148 = require("@emotion/react/jsx-runtime");
17214
- function toggleFilter(props) {
17215
- return (key) => new ToggleFilter(key, {
17216
- // If the user has set the offValue, that should be the default b/c we're only a two-state
17217
- defaultValue: props.offValue,
17218
- ...props
17219
- });
17220
- }
17221
- var ToggleFilter = class extends BaseFilter {
17222
- render(value, setValue, tid, inModal, vertical) {
17223
- const { defaultValue, onValue = true, offValue = void 0, ...props } = this.props;
17224
- return /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(
17225
- Switch,
17226
- {
17227
- ...props,
17228
- selected: value === void 0 ? false : value === onValue,
17229
- label: this.label,
17230
- labelStyle: inModal || vertical ? "filter" : "inline",
17231
- onChange: (on) => {
17232
- setValue(on ? onValue : offValue);
17233
- },
17234
- ...this.testId(tid)
17404
+ // src/components/DnDGrid/useDnDGridItem.tsx
17405
+ var import_react106 = require("react");
17406
+ function useDnDGridItem(props) {
17407
+ const { id, itemRef } = props;
17408
+ const { dragEl, onDragHandleKeyDown } = useDnDGridContext();
17409
+ const { dragItemProps, dragHandleProps } = (0, import_react106.useMemo)(
17410
+ () => {
17411
+ function initDraggable() {
17412
+ if (itemRef.current) {
17413
+ dragEl.current = itemRef.current;
17414
+ }
17235
17415
  }
17236
- );
17237
- }
17238
- get hideLabelInModal() {
17239
- return true;
17240
- }
17241
- };
17242
-
17243
- // src/components/Filters/utils.tsx
17244
- function updateFilter(currentFilter, key, value) {
17245
- if (value === void 0) {
17246
- return omitKey(key, currentFilter);
17247
- } else {
17248
- return { ...currentFilter, [key]: value };
17249
- }
17416
+ return {
17417
+ dragItemProps: { [gridItemIdKey]: id },
17418
+ dragHandleProps: {
17419
+ onMouseDown: initDraggable,
17420
+ onTouchStart: initDraggable,
17421
+ onKeyDown: (e) => {
17422
+ initDraggable();
17423
+ onDragHandleKeyDown(e);
17424
+ }
17425
+ }
17426
+ };
17427
+ },
17428
+ // 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
17429
+ // eslint-disable-next-line react-hooks/exhaustive-deps
17430
+ [dragEl, id, itemRef]
17431
+ );
17432
+ return { dragHandleProps, dragItemProps };
17250
17433
  }
17251
- var filterTestIdPrefix = "filter";
17252
17434
 
17253
17435
  // src/components/Grid/ResponsiveGrid.tsx
17254
- var import_jsx_runtime149 = require("@emotion/react/jsx-runtime");
17436
+ var import_jsx_runtime153 = require("@emotion/react/jsx-runtime");
17255
17437
  function ResponsiveGrid(props) {
17256
17438
  const { children, ...hookProps } = props;
17257
17439
  const { gridStyles } = useResponsiveGrid(hookProps);
17258
- return /* @__PURE__ */ (0, import_jsx_runtime149.jsx)("div", { css: { ...gridStyles }, children });
17440
+ return /* @__PURE__ */ (0, import_jsx_runtime153.jsx)("div", { css: { ...gridStyles }, children });
17259
17441
  }
17260
17442
 
17261
17443
  // src/components/Grid/ResponsiveGridItem.tsx
17262
- var import_jsx_runtime150 = require("@emotion/react/jsx-runtime");
17444
+ var import_jsx_runtime154 = require("@emotion/react/jsx-runtime");
17263
17445
  function ResponsiveGridItem(props) {
17264
17446
  const { colSpan, children } = props;
17265
17447
  const { gridItemProps } = useResponsiveGridItem({ colSpan });
17266
- return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)("div", { ...gridItemProps, children });
17448
+ return /* @__PURE__ */ (0, import_jsx_runtime154.jsx)("div", { ...gridItemProps, children });
17267
17449
  }
17268
17450
 
17269
17451
  // src/components/Grid/useResponsiveGrid.ts
17270
- var import_react105 = require("react");
17452
+ var import_react107 = require("react");
17271
17453
 
17272
17454
  // src/components/Grid/utils.ts
17273
17455
  var gridItemDataAttribute = "data-grid-item-span";
@@ -17275,7 +17457,7 @@ var gridItemDataAttribute = "data-grid-item-span";
17275
17457
  // src/components/Grid/useResponsiveGrid.ts
17276
17458
  function useResponsiveGrid(props) {
17277
17459
  const { minColumnWidth, gap, columns } = props;
17278
- const gridStyles = (0, import_react105.useMemo)(() => {
17460
+ const gridStyles = (0, import_react107.useMemo)(() => {
17279
17461
  const gapCount = columns - 1;
17280
17462
  const totalGapWidth = gap * gapCount;
17281
17463
  const maxColumnWidth = `calc((100% - ${totalGapWidth}px) / ${columns})`;
@@ -17316,24 +17498,24 @@ function useResponsiveGridItem({ colSpan = 1 }) {
17316
17498
  }
17317
17499
 
17318
17500
  // src/components/HbLoadingSpinner.tsx
17319
- var import_react106 = __toESM(require("react"), 1);
17501
+ var import_react108 = __toESM(require("react"), 1);
17320
17502
 
17321
17503
  // src/components/HbLoadingSpinner.base64.ts
17322
17504
  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";
17323
17505
 
17324
17506
  // src/components/HbLoadingSpinner.tsx
17325
- var import_jsx_runtime151 = require("@emotion/react/jsx-runtime");
17507
+ var import_jsx_runtime155 = require("@emotion/react/jsx-runtime");
17326
17508
  function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }) {
17327
- const ctx = (0, import_react106.useContext)(HbLoadingSpinnerContext);
17509
+ const ctx = (0, import_react108.useContext)(HbLoadingSpinnerContext);
17328
17510
  const tid = useTestIds({}, "hbSpinner");
17329
- const quip = (0, import_react106.useMemo)(() => {
17511
+ const quip = (0, import_react108.useMemo)(() => {
17330
17512
  const allQuips = extraQuipsOnly && extraQuips.length !== 0 ? extraQuips : [...ctx.quips, ...extraQuips];
17331
17513
  const forceQuips = extraQuips.length !== 0 || noQuips === false;
17332
17514
  if (ctx.noQuips && !forceQuips || noQuips || allQuips.length === 0) return "Loading...";
17333
17515
  return allQuips[Math.floor(Math.random() * allQuips.length)];
17334
17516
  }, [ctx.noQuips, ctx.quips, extraQuips, extraQuipsOnly, noQuips]);
17335
- return /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
17336
- /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(
17517
+ return /* @__PURE__ */ (0, import_jsx_runtime155.jsxs)("div", { css: Css.df.fdc.jcc.aic.$, ...tid, children: [
17518
+ /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(
17337
17519
  "img",
17338
17520
  {
17339
17521
  src: HbLoadingSpinner_base64_default,
@@ -17346,7 +17528,7 @@ function HbLoadingSpinner({ noQuips, extraQuips = [], extraQuipsOnly, iconOnly }
17346
17528
  ...tid.gif
17347
17529
  }
17348
17530
  ),
17349
- !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(
17531
+ !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(
17350
17532
  "div",
17351
17533
  {
17352
17534
  "data-chromatic": "ignore",
@@ -17366,78 +17548,43 @@ var HB_QUIPS_MISSION = [
17366
17548
  "In Service of Our Customers"
17367
17549
  ].map(dotDotDot);
17368
17550
  var HB_QUIPS_FLAVOR = ["HOM is HOW", "Scaling Massively", "#LoveIt"].map(dotDotDot);
17369
- var HbLoadingSpinnerContext = import_react106.default.createContext({
17551
+ var HbLoadingSpinnerContext = import_react108.default.createContext({
17370
17552
  quips: ["Loading..."],
17371
17553
  noQuips: false
17372
17554
  });
17373
17555
  function HbSpinnerProvider({ quips = [], children }) {
17374
- const state = (0, import_react106.useMemo)(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17375
- return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(HbLoadingSpinnerContext.Provider, { value: state, children });
17376
- }
17377
-
17378
- // src/components/LoadingSkeleton.tsx
17379
- var import_jsx_runtime152 = require("@emotion/react/jsx-runtime");
17380
- function LoadingSkeleton({
17381
- rows = 1,
17382
- columns = 1,
17383
- size = "md",
17384
- randomizeWidths = false,
17385
- contrast = false
17386
- }) {
17387
- const cellArray = [...Array(columns)];
17388
- const rowArray = [...Array(rows)];
17389
- const rowHeight = sizeToPixels2[size];
17390
- const rowCells = (rowNumber) => {
17391
- const flexGrowForCell = randomizeWidths ? getRandomizedFlexBasisByRowIndex(rowNumber) : 1;
17392
- return cellArray.map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime152.jsx)(
17393
- "div",
17394
- {
17395
- css: Css.br4.add("animation", "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite").add("flexGrow", flexGrowForCell).bgGray300.if(contrast).bgGray700.$
17396
- },
17397
- `row-${rowNumber}-cell-${i}`
17398
- ));
17399
- };
17400
- return /* @__PURE__ */ (0, import_jsx_runtime152.jsx)("div", { "aria-label": "Loading", children: rowArray.map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime152.jsx)("div", { css: Css.df.gap1.mb1.hPx(rowHeight).$, children: rowCells(i) }, `row-${i}`)) });
17401
- }
17402
- function getRandomizedFlexBasisByRowIndex(rowIndex) {
17403
- const randomizedFlexBasisValues = [0.65, 0.8, 0.75, 0.9, 0.8, 0.85, 0.8, 0.95];
17404
- const valueIndex = rowIndex % randomizedFlexBasisValues.length;
17405
- return randomizedFlexBasisValues[valueIndex];
17556
+ const state = (0, import_react108.useMemo)(() => ({ quips, noQuips: quips.length === 0 }), [quips]);
17557
+ return /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(HbLoadingSpinnerContext.Provider, { value: state, children });
17406
17558
  }
17407
- var sizeToPixels2 = {
17408
- sm: 16,
17409
- md: 24,
17410
- lg: 32
17411
- };
17412
17559
 
17413
17560
  // src/components/MaxLines.tsx
17414
- var import_utils117 = require("@react-aria/utils");
17415
- var import_react107 = require("react");
17416
- var import_jsx_runtime153 = require("@emotion/react/jsx-runtime");
17561
+ var import_utils118 = require("@react-aria/utils");
17562
+ var import_react109 = require("react");
17563
+ var import_jsx_runtime156 = require("@emotion/react/jsx-runtime");
17417
17564
  function MaxLines({ maxLines, children }) {
17418
- const elRef = (0, import_react107.useRef)(null);
17419
- const [hasMore, setHasMore] = (0, import_react107.useState)(false);
17420
- const [expanded, setExpanded] = (0, import_react107.useState)(false);
17421
- (0, import_utils117.useLayoutEffect)(() => {
17565
+ const elRef = (0, import_react109.useRef)(null);
17566
+ const [hasMore, setHasMore] = (0, import_react109.useState)(false);
17567
+ const [expanded, setExpanded] = (0, import_react109.useState)(false);
17568
+ (0, import_utils118.useLayoutEffect)(() => {
17422
17569
  if (!elRef.current) return;
17423
17570
  setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17424
17571
  }, []);
17425
- (0, import_react107.useEffect)(() => {
17572
+ (0, import_react109.useEffect)(() => {
17426
17573
  setExpanded(false);
17427
17574
  }, [children]);
17428
- const onResize = (0, import_react107.useCallback)(() => {
17575
+ const onResize = (0, import_react109.useCallback)(() => {
17429
17576
  if (!elRef.current) return;
17430
17577
  !expanded && setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
17431
17578
  }, [expanded]);
17432
- (0, import_utils117.useResizeObserver)({ ref: elRef, onResize });
17433
- return /* @__PURE__ */ (0, import_jsx_runtime153.jsxs)("div", { children: [
17434
- /* @__PURE__ */ (0, import_jsx_runtime153.jsx)("div", { ref: elRef, css: Css.if(!expanded).lineClamp(maxLines).$, children }),
17435
- hasMore && /* @__PURE__ */ (0, import_jsx_runtime153.jsx)("button", { css: Css.db.smMd.$, onClick: () => setExpanded((prev) => !prev), children: expanded ? "Show Less" : "Show More" })
17579
+ (0, import_utils118.useResizeObserver)({ ref: elRef, onResize });
17580
+ return /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)("div", { children: [
17581
+ /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("div", { ref: elRef, css: Css.if(!expanded).lineClamp(maxLines).$, children }),
17582
+ hasMore && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("button", { css: Css.db.smMd.$, onClick: () => setExpanded((prev) => !prev), children: expanded ? "Show Less" : "Show More" })
17436
17583
  ] });
17437
17584
  }
17438
17585
 
17439
17586
  // src/components/Pagination.tsx
17440
- var import_jsx_runtime154 = require("@emotion/react/jsx-runtime");
17587
+ var import_jsx_runtime157 = require("@emotion/react/jsx-runtime");
17441
17588
  var defaultPage = { offset: 0, limit: 100 };
17442
17589
  function Pagination(props) {
17443
17590
  const { totalCount, pageSizes = [100, 500, 1e3] } = props;
@@ -17457,9 +17604,9 @@ function Pagination(props) {
17457
17604
  }
17458
17605
  }
17459
17606
  const tid = useTestIds(props, "pagination");
17460
- return /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)("div", { css: Css.df.bcGray200.bt.xs.gray500.px2.pt2.$, ...tid, children: [
17461
- /* @__PURE__ */ (0, import_jsx_runtime154.jsx)("div", { css: Css.df.mya.mr2.$, ...tid.pageSizeLabel, children: "Page size:" }),
17462
- /* @__PURE__ */ (0, import_jsx_runtime154.jsx)("div", { css: Css.wPx(78).$, children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(
17607
+ return /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.df.bcGray200.bt.xs.gray500.px2.pt2.$, ...tid, children: [
17608
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { css: Css.df.mya.mr2.$, ...tid.pageSizeLabel, children: "Page size:" }),
17609
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { css: Css.wPx(78).$, children: /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(
17463
17610
  SelectField,
17464
17611
  {
17465
17612
  compact: true,
@@ -17471,15 +17618,15 @@ function Pagination(props) {
17471
17618
  ...tid.pageSize
17472
17619
  }
17473
17620
  ) }),
17474
- /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)("div", { css: Css.mla.mya.df.$, children: [
17475
- /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)("div", { css: Css.df.mya.mr2.$, ...tid.pageInfoLabel, children: [
17621
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.mla.mya.df.$, children: [
17622
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.df.mya.mr2.$, ...tid.pageInfoLabel, children: [
17476
17623
  first,
17477
17624
  " ",
17478
17625
  showLast ? `- ${last}` : "",
17479
17626
  " of ",
17480
17627
  totalCount
17481
17628
  ] }),
17482
- /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(
17629
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(
17483
17630
  IconButton,
17484
17631
  {
17485
17632
  icon: "chevronLeft",
@@ -17489,7 +17636,7 @@ function Pagination(props) {
17489
17636
  ...tid.previousIcon
17490
17637
  }
17491
17638
  ),
17492
- /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(
17639
+ /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(
17493
17640
  IconButton,
17494
17641
  {
17495
17642
  icon: "chevronRight",
@@ -17517,9 +17664,9 @@ function toPageNumberSize(page) {
17517
17664
  }
17518
17665
 
17519
17666
  // src/components/ScrollShadows.tsx
17520
- var import_utils119 = require("@react-aria/utils");
17521
- var import_react108 = require("react");
17522
- var import_jsx_runtime155 = require("@emotion/react/jsx-runtime");
17667
+ var import_utils120 = require("@react-aria/utils");
17668
+ var import_react110 = require("react");
17669
+ var import_jsx_runtime158 = require("@emotion/react/jsx-runtime");
17523
17670
  function ScrollShadows(props) {
17524
17671
  const { children, xss, horizontal = false, bgColor = "rgba(255,255,255,1)" /* White */ } = props;
17525
17672
  const { height = "auto", width: width2 = "auto" } = xss ?? {};
@@ -17527,10 +17674,10 @@ function ScrollShadows(props) {
17527
17674
  if (!bgColor.includes("rgba")) {
17528
17675
  throw new Error("ScrollShadows: bgColor prop must be in the format 'rgba(255, 255, 255, 1)'");
17529
17676
  }
17530
- const [showStartShadow, setShowStartShadow] = (0, import_react108.useState)(false);
17531
- const [showEndShadow, setShowEndShadow] = (0, import_react108.useState)(false);
17532
- const scrollRef = (0, import_react108.useRef)(null);
17533
- const [startShadowStyles, endShadowStyles] = (0, import_react108.useMemo)(() => {
17677
+ const [showStartShadow, setShowStartShadow] = (0, import_react110.useState)(false);
17678
+ const [showEndShadow, setShowEndShadow] = (0, import_react110.useState)(false);
17679
+ const scrollRef = (0, import_react110.useRef)(null);
17680
+ const [startShadowStyles, endShadowStyles] = (0, import_react110.useMemo)(() => {
17534
17681
  const transparentBgColor = bgColor.replace(/,1\)$/, ",0)");
17535
17682
  const commonStyles = Css.absolute.z3.add({ pointerEvents: "none" }).$;
17536
17683
  const startShadowStyles2 = !horizontal ? Css.top0.left0.right0.hPx(40).$ : Css.left0.top0.bottom0.wPx(25).$;
@@ -17542,7 +17689,7 @@ function ScrollShadows(props) {
17542
17689
  { ...commonStyles, ...endShadowStyles2, ...Css.add("background", endGradient).$ }
17543
17690
  ];
17544
17691
  }, [horizontal, bgColor]);
17545
- const updateScrollProps = (0, import_react108.useCallback)(
17692
+ const updateScrollProps = (0, import_react110.useCallback)(
17546
17693
  (el) => {
17547
17694
  const { scrollTop, scrollHeight, clientHeight, scrollWidth, scrollLeft, clientWidth } = el;
17548
17695
  const start = horizontal ? scrollLeft : scrollTop;
@@ -17553,17 +17700,17 @@ function ScrollShadows(props) {
17553
17700
  },
17554
17701
  [horizontal]
17555
17702
  );
17556
- const onResize = (0, import_react108.useCallback)(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
17557
- (0, import_utils119.useResizeObserver)({ ref: scrollRef, onResize });
17558
- return /* @__PURE__ */ (0, import_jsx_runtime155.jsxs)(
17703
+ const onResize = (0, import_react110.useCallback)(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
17704
+ (0, import_utils120.useResizeObserver)({ ref: scrollRef, onResize });
17705
+ return /* @__PURE__ */ (0, import_jsx_runtime158.jsxs)(
17559
17706
  "div",
17560
17707
  {
17561
17708
  css: Css.relative.oh.h(height).w(width2).df.fd(!horizontal ? "column" : "row").$,
17562
17709
  ...tid,
17563
17710
  children: [
17564
- /* @__PURE__ */ (0, import_jsx_runtime155.jsx)("div", { css: { ...startShadowStyles, opacity: showStartShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17565
- /* @__PURE__ */ (0, import_jsx_runtime155.jsx)("div", { css: { ...endShadowStyles, opacity: showEndShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17566
- /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(
17711
+ /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("div", { css: { ...startShadowStyles, opacity: showStartShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17712
+ /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("div", { css: { ...endShadowStyles, opacity: showEndShadow ? 1 : 0 }, "data-chromatic": "ignore" }),
17713
+ /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(
17567
17714
  "div",
17568
17715
  {
17569
17716
  css: {
@@ -17581,10 +17728,10 @@ function ScrollShadows(props) {
17581
17728
  }
17582
17729
 
17583
17730
  // src/components/Snackbar/useSnackbar.tsx
17584
- var import_react109 = require("react");
17731
+ var import_react111 = require("react");
17585
17732
  function useSnackbar() {
17586
17733
  const { setNotices, setOffset } = useSnackbarContext();
17587
- const onClose = (0, import_react109.useCallback)(
17734
+ const onClose = (0, import_react111.useCallback)(
17588
17735
  (noticeId) => {
17589
17736
  setNotices((prev) => {
17590
17737
  let returnValue = prev;
@@ -17601,7 +17748,7 @@ function useSnackbar() {
17601
17748
  // eslint-disable-next-line react-hooks/exhaustive-deps
17602
17749
  []
17603
17750
  );
17604
- const triggerNotice = (0, import_react109.useCallback)(
17751
+ const triggerNotice = (0, import_react111.useCallback)(
17605
17752
  (props) => {
17606
17753
  const noticeId = props.id ?? `beamSnackbar:${snackbarId++}`;
17607
17754
  let maybeTimeout;
@@ -17630,8 +17777,8 @@ function useSnackbar() {
17630
17777
  },
17631
17778
  [onClose, setNotices]
17632
17779
  );
17633
- const closeNotice = (0, import_react109.useCallback)((id) => onClose(id), [onClose]);
17634
- const useSnackbarOffset = ({ bottom }) => (0, import_react109.useEffect)(() => {
17780
+ const closeNotice = (0, import_react111.useCallback)((id) => onClose(id), [onClose]);
17781
+ const useSnackbarOffset = ({ bottom }) => (0, import_react111.useEffect)(() => {
17635
17782
  setOffset({ bottom });
17636
17783
  return () => setOffset({});
17637
17784
  }, [bottom]);
@@ -17640,9 +17787,9 @@ function useSnackbar() {
17640
17787
  var snackbarId = 1;
17641
17788
 
17642
17789
  // src/components/Stepper.tsx
17643
- var import_react110 = require("react");
17790
+ var import_react112 = require("react");
17644
17791
  var import_react_aria50 = require("react-aria");
17645
- var import_jsx_runtime156 = require("@emotion/react/jsx-runtime");
17792
+ var import_jsx_runtime159 = require("@emotion/react/jsx-runtime");
17646
17793
  function Stepper(props) {
17647
17794
  const { steps, currentStep, onChange } = props;
17648
17795
  if (steps.length === 0) {
@@ -17653,25 +17800,25 @@ function Stepper(props) {
17653
17800
  const maxStepWidth = 200;
17654
17801
  const minStepWidth = 100;
17655
17802
  const gap = 8;
17656
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)("nav", { "aria-label": "steps", css: Css.df.fdc.w100.$, ...tid, children: [
17657
- /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("ol", { css: Css.listReset.df.gapPx(gap).$, children: steps.map((step) => {
17803
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)("nav", { "aria-label": "steps", css: Css.df.fdc.w100.$, ...tid, children: [
17804
+ /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("ol", { css: Css.listReset.df.gapPx(gap).$, children: steps.map((step) => {
17658
17805
  const isCurrent = currentStep === step.value;
17659
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(
17806
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
17660
17807
  "li",
17661
17808
  {
17662
17809
  css: Css.df.fg1.fdc.maxwPx(maxStepWidth).mwPx(minStepWidth).$,
17663
17810
  "aria-current": isCurrent,
17664
17811
  ...tid.step,
17665
- children: /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton })
17812
+ children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton })
17666
17813
  },
17667
17814
  step.label
17668
17815
  );
17669
17816
  }) }),
17670
- /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(
17817
+ /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
17671
17818
  "div",
17672
17819
  {
17673
17820
  css: Css.mt1.bgGray300.hPx(4).maxwPx(steps.length * maxStepWidth + (steps.length - 1) * gap).mwPx(steps.length * minStepWidth + (steps.length - 1) * gap).w100.$,
17674
- children: /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(
17821
+ children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
17675
17822
  "div",
17676
17823
  {
17677
17824
  css: Css.bgBlue600.add("transition", "width 200ms").h100.w(`${(lastCompletedStep + 1) / steps.length * 100}%`).$
@@ -17684,13 +17831,13 @@ function Stepper(props) {
17684
17831
  function StepButton(props) {
17685
17832
  const { label, disabled, state, isCurrent, onClick } = props;
17686
17833
  const ariaProps = { onPress: onClick, isDisabled: disabled };
17687
- const ref = (0, import_react110.useRef)(null);
17834
+ const ref = (0, import_react112.useRef)(null);
17688
17835
  const { buttonProps, isPressed } = (0, import_react_aria50.useButton)(ariaProps, ref);
17689
17836
  const { isFocusVisible, focusProps } = (0, import_react_aria50.useFocusRing)();
17690
17837
  const { hoverProps, isHovered } = (0, import_react_aria50.useHover)(ariaProps);
17691
17838
  const focusRingStyles2 = state === "error" ? Css.bshDanger.$ : Css.bshFocus.$;
17692
17839
  const tid = useTestIds(props, "stepButton");
17693
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)(
17840
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)(
17694
17841
  "button",
17695
17842
  {
17696
17843
  ref,
@@ -17708,7 +17855,7 @@ function StepButton(props) {
17708
17855
  },
17709
17856
  ...tid[defaultTestId(label)],
17710
17857
  children: [
17711
- /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("span", { css: Css.fs0.mrPx(4).$, children: /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
17858
+ /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("span", { css: Css.fs0.mrPx(4).$, children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
17712
17859
  label
17713
17860
  ]
17714
17861
  }
@@ -17716,12 +17863,12 @@ function StepButton(props) {
17716
17863
  }
17717
17864
  function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = false }) {
17718
17865
  if (state === "error") {
17719
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(Icon, { icon: "errorCircle" });
17866
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Icon, { icon: "errorCircle" });
17720
17867
  }
17721
17868
  if (state === "complete") {
17722
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(Icon, { icon: "check" });
17869
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Icon, { icon: "check" });
17723
17870
  }
17724
- return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("div", { css: Css.wPx(24).hPx(24).df.aic.jcc.$, children: /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(
17871
+ return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("div", { css: Css.wPx(24).hPx(24).df.aic.jcc.$, children: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(
17725
17872
  "div",
17726
17873
  {
17727
17874
  css: Css.wPx(10).hPx(10).ba.bw2.br100.add("color", "currentColor").if(isHovered || isPressed || isCurrent).add("backgroundColor", "currentColor").$
@@ -17731,7 +17878,7 @@ function StepIcon({ state, isHovered = false, isPressed = false, isCurrent = fal
17731
17878
 
17732
17879
  // src/components/SuperDrawer/components/SuperDrawerHeader.tsx
17733
17880
  var import_react_dom5 = require("react-dom");
17734
- var import_jsx_runtime157 = require("@emotion/react/jsx-runtime");
17881
+ var import_jsx_runtime160 = require("@emotion/react/jsx-runtime");
17735
17882
  function SuperDrawerHeader(props) {
17736
17883
  const { hideControls } = props;
17737
17884
  const { sdHeaderDiv, drawerContentStack: contentStack } = useBeamContext();
@@ -17741,15 +17888,15 @@ function SuperDrawerHeader(props) {
17741
17888
  const isDetail = currentContent !== firstContent;
17742
17889
  const tid = useTestIds({}, "superDrawerHeader");
17743
17890
  return (0, import_react_dom5.createPortal)(
17744
- /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.df.aic.jcsb.gap3.$, ...tid, children: [
17745
- isStructuredProps(props) ? /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.df.jcsb.aic.gap2.fg1.$, children: [
17746
- /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { css: Css.fg1.df.aic.gap2.$, children: [
17747
- typeof props.title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("h1", { children: props.title }) : props.title,
17891
+ /* @__PURE__ */ (0, import_jsx_runtime160.jsxs)("div", { css: Css.df.aic.jcsb.gap3.$, ...tid, children: [
17892
+ isStructuredProps(props) ? /* @__PURE__ */ (0, import_jsx_runtime160.jsxs)("div", { css: Css.df.jcsb.aic.gap2.fg1.$, children: [
17893
+ /* @__PURE__ */ (0, import_jsx_runtime160.jsxs)("div", { css: Css.fg1.df.aic.gap2.$, children: [
17894
+ typeof props.title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("h1", { children: props.title }) : props.title,
17748
17895
  props.left
17749
17896
  ] }),
17750
- props.right && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { css: Css.fs0.$, children: props.right })
17751
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { css: Css.fg1.$, children: props.children }),
17752
- !hideControls && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { css: Css.fs0.if(isDetail).vh.$, children: /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(
17897
+ props.right && /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { css: Css.fs0.$, children: props.right })
17898
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { css: Css.fg1.$, children: props.children }),
17899
+ !hideControls && /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { css: Css.fs0.if(isDetail).vh.$, children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(
17753
17900
  ButtonGroup,
17754
17901
  {
17755
17902
  buttons: [
@@ -17768,18 +17915,18 @@ function isStructuredProps(props) {
17768
17915
  }
17769
17916
 
17770
17917
  // src/components/SuperDrawer/ConfirmCloseModal.tsx
17771
- var import_jsx_runtime158 = require("@emotion/react/jsx-runtime");
17918
+ var import_jsx_runtime161 = require("@emotion/react/jsx-runtime");
17772
17919
  function ConfirmCloseModal(props) {
17773
17920
  const { onClose, discardText = "Discard Changes", continueText = "Continue Editing" } = props;
17774
17921
  const { modalState } = useBeamContext();
17775
17922
  function closeModal() {
17776
17923
  modalState.current = void 0;
17777
17924
  }
17778
- return /* @__PURE__ */ (0, import_jsx_runtime158.jsxs)(import_jsx_runtime158.Fragment, { children: [
17779
- /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(ModalHeader, { children: "Are you sure you want to cancel?" }),
17780
- /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("p", { children: "Any changes you've made so far will be lost." }) }),
17781
- /* @__PURE__ */ (0, import_jsx_runtime158.jsxs)(ModalFooter, { children: [
17782
- /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(
17925
+ return /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment, { children: [
17926
+ /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(ModalHeader, { children: "Are you sure you want to cancel?" }),
17927
+ /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("p", { children: "Any changes you've made so far will be lost." }) }),
17928
+ /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)(ModalFooter, { children: [
17929
+ /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(
17783
17930
  Button,
17784
17931
  {
17785
17932
  variant: "tertiary",
@@ -17790,7 +17937,7 @@ function ConfirmCloseModal(props) {
17790
17937
  }
17791
17938
  }
17792
17939
  ),
17793
- /* @__PURE__ */ (0, import_jsx_runtime158.jsx)(Button, { label: continueText, onClick: closeModal })
17940
+ /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(Button, { label: continueText, onClick: closeModal })
17794
17941
  ] })
17795
17942
  ] });
17796
17943
  }
@@ -17799,8 +17946,8 @@ function ConfirmCloseModal(props) {
17799
17946
  var import_framer_motion4 = require("framer-motion");
17800
17947
 
17801
17948
  // src/components/SuperDrawer/useSuperDrawer.tsx
17802
- var import_react111 = require("react");
17803
- var import_jsx_runtime159 = require("@emotion/react/jsx-runtime");
17949
+ var import_react113 = require("react");
17950
+ var import_jsx_runtime162 = require("@emotion/react/jsx-runtime");
17804
17951
  function useSuperDrawer() {
17805
17952
  const {
17806
17953
  drawerContentStack: contentStack,
@@ -17812,7 +17959,7 @@ function useSuperDrawer() {
17812
17959
  function canCloseDrawerDetails(i, doChange) {
17813
17960
  for (const canCloseDrawerDetail of canCloseDetailsChecks.current[i] ?? []) {
17814
17961
  if (!canClose(canCloseDrawerDetail)) {
17815
- openModal({ content: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17962
+ openModal({ content: /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
17816
17963
  return false;
17817
17964
  }
17818
17965
  }
@@ -17832,14 +17979,14 @@ function useSuperDrawer() {
17832
17979
  for (const canCloseDrawer of canCloseChecks.current) {
17833
17980
  if (!canClose(canCloseDrawer)) {
17834
17981
  openModal({
17835
- content: /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17982
+ content: /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
17836
17983
  });
17837
17984
  return;
17838
17985
  }
17839
17986
  }
17840
17987
  doChange();
17841
17988
  }
17842
- const closeActions = (0, import_react111.useMemo)(
17989
+ const closeActions = (0, import_react113.useMemo)(
17843
17990
  () => {
17844
17991
  return {
17845
17992
  /** Attempts to close the drawer. If any checks fail, a confirmation modal will appear */
@@ -17874,7 +18021,7 @@ function useSuperDrawer() {
17874
18021
  // eslint-disable-next-line react-hooks/exhaustive-deps
17875
18022
  [canCloseChecks, canCloseDetailsChecks, contentStack, modalState, openModal]
17876
18023
  );
17877
- const actions = (0, import_react111.useMemo)(
18024
+ const actions = (0, import_react113.useMemo)(
17878
18025
  () => {
17879
18026
  return {
17880
18027
  // TODO: Maybe we should rename to openDrawer as a breaking change (to match openDrawerDetail)
@@ -17927,7 +18074,7 @@ function canClose(canCloseCheck) {
17927
18074
  }
17928
18075
 
17929
18076
  // src/components/SuperDrawer/SuperDrawerContent.tsx
17930
- var import_jsx_runtime160 = require("@emotion/react/jsx-runtime");
18077
+ var import_jsx_runtime163 = require("@emotion/react/jsx-runtime");
17931
18078
  var SuperDrawerContent = ({ children, actions }) => {
17932
18079
  const { closeDrawerDetail } = useSuperDrawer();
17933
18080
  const { drawerContentStack: contentStack } = useBeamContext();
@@ -17936,17 +18083,17 @@ var SuperDrawerContent = ({ children, actions }) => {
17936
18083
  const { width: width2 = 1040 /* Normal */ } = firstContent ?? {};
17937
18084
  function wrapWithMotionAndMaybeBack(children2) {
17938
18085
  if (kind === "open") {
17939
- return /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(import_framer_motion4.motion.div, { css: Css.p3.fg1.oa.$, children: children2 }, "content");
18086
+ return /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(import_framer_motion4.motion.div, { css: Css.p3.fg1.oa.$, children: children2 }, "content");
17940
18087
  } else if (kind === "detail") {
17941
- return /* @__PURE__ */ (0, import_jsx_runtime160.jsxs)(
18088
+ return /* @__PURE__ */ (0, import_jsx_runtime163.jsxs)(
17942
18089
  import_framer_motion4.motion.div,
17943
18090
  {
17944
18091
  css: Css.px3.pt2.pb3.fg1.$,
17945
18092
  animate: { overflow: "auto" },
17946
18093
  transition: { overflow: { delay: 0.3 } },
17947
18094
  children: [
17948
- /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
17949
- /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(
18095
+ /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
18096
+ /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(
17950
18097
  import_framer_motion4.motion.div,
17951
18098
  {
17952
18099
  initial: { x: width2, opacity: 0 },
@@ -17962,27 +18109,27 @@ var SuperDrawerContent = ({ children, actions }) => {
17962
18109
  "content"
17963
18110
  );
17964
18111
  } else {
17965
- return /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(import_framer_motion4.motion.div, { css: Css.p3.fg1.$, style: { overflow: "auto" } }, "content");
18112
+ return /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(import_framer_motion4.motion.div, { css: Css.p3.fg1.$, style: { overflow: "auto" } }, "content");
17966
18113
  }
17967
18114
  }
17968
- return /* @__PURE__ */ (0, import_jsx_runtime160.jsxs)(import_jsx_runtime160.Fragment, { children: [
18115
+ return /* @__PURE__ */ (0, import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment, { children: [
17969
18116
  wrapWithMotionAndMaybeBack(children),
17970
- actions && /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("footer", { css: Css.bt.bcGray200.p3.df.aic.jcfe.$, children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { css: Css.df.gap1.$, children: actions.map((buttonProps, i) => /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(Button, { ...buttonProps }, i)) }) })
18117
+ actions && /* @__PURE__ */ (0, import_jsx_runtime163.jsx)("footer", { css: Css.bt.bcGray200.p3.df.aic.jcfe.$, children: /* @__PURE__ */ (0, import_jsx_runtime163.jsx)("div", { css: Css.df.gap1.$, children: actions.map((buttonProps, i) => /* @__PURE__ */ (0, import_jsx_runtime163.jsx)(Button, { ...buttonProps }, i)) }) })
17971
18118
  ] });
17972
18119
  };
17973
18120
 
17974
18121
  // src/components/Tabs.tsx
17975
18122
  var import_change_case7 = require("change-case");
17976
- var import_react112 = require("react");
18123
+ var import_react114 = require("react");
17977
18124
  var import_react_aria51 = require("react-aria");
17978
18125
  var import_react_router2 = require("react-router");
17979
18126
  var import_react_router_dom5 = require("react-router-dom");
17980
- var import_jsx_runtime161 = require("@emotion/react/jsx-runtime");
18127
+ var import_jsx_runtime164 = require("@emotion/react/jsx-runtime");
17981
18128
  function TabsWithContent(props) {
17982
18129
  const styles = hideTabs(props) ? {} : Css.pt3.$;
17983
- return /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment, { children: [
17984
- /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(Tabs, { ...props }),
17985
- /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(TabContent, { ...props, contentXss: { ...styles, ...props.contentXss } })
18130
+ return /* @__PURE__ */ (0, import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment, { children: [
18131
+ /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(Tabs, { ...props }),
18132
+ /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(TabContent, { ...props, contentXss: { ...styles, ...props.contentXss } })
17986
18133
  ] });
17987
18134
  }
17988
18135
  function TabContent(props) {
@@ -17997,7 +18144,7 @@ function TabContent(props) {
17997
18144
  return (
17998
18145
  // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.
17999
18146
  // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.
18000
- /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(FullBleed, { omitPadding: "paddingLeft" in contentXss || "paddingRight" in contentXss, children: /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(
18147
+ /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(FullBleed, { omitPadding: "paddingLeft" in contentXss || "paddingRight" in contentXss, children: /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(
18001
18148
  "div",
18002
18149
  {
18003
18150
  "aria-labelledby": `${uniqueValue}-tab`,
@@ -18006,7 +18153,7 @@ function TabContent(props) {
18006
18153
  tabIndex: 0,
18007
18154
  ...tid.panel,
18008
18155
  css: contentXss,
18009
- children: isRouteTab(selectedTab) ? /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(import_react_router2.Route, { path: selectedTab.path, render: selectedTab.render }) : selectedTab.render()
18156
+ children: isRouteTab(selectedTab) ? /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(import_react_router2.Route, { path: selectedTab.path, render: selectedTab.render }) : selectedTab.render()
18010
18157
  }
18011
18158
  ) })
18012
18159
  );
@@ -18019,9 +18166,9 @@ function Tabs(props) {
18019
18166
  ) : props.selected;
18020
18167
  const { isFocusVisible, focusProps } = (0, import_react_aria51.useFocusRing)();
18021
18168
  const tid = useTestIds(others, "tabs");
18022
- const [active, setActive] = (0, import_react112.useState)(selected);
18023
- const ref = (0, import_react112.useRef)(null);
18024
- (0, import_react112.useEffect)(() => setActive(selected), [selected]);
18169
+ const [active, setActive] = (0, import_react114.useState)(selected);
18170
+ const ref = (0, import_react114.useRef)(null);
18171
+ (0, import_react114.useEffect)(() => setActive(selected), [selected]);
18025
18172
  function onKeyUp(e) {
18026
18173
  if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
18027
18174
  const nextTabValue = getNextTabValue(active, e.key, tabs);
@@ -18037,10 +18184,10 @@ function Tabs(props) {
18037
18184
  setActive(selected);
18038
18185
  }
18039
18186
  }
18040
- return /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)("div", { css: { ...Css.df.aic.oa.wsnw.gap1.$, ...includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {} }, children: [
18041
- !hideTabs(props) && /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("div", { ref, css: Css.dif.gap1.asfe.$, "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
18187
+ return /* @__PURE__ */ (0, import_jsx_runtime164.jsxs)("div", { css: { ...Css.df.aic.oa.wsnw.gap1.$, ...includeBottomBorder ? { ...Css.bb.bcGray200.$ } : {} }, children: [
18188
+ !hideTabs(props) && /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("div", { ref, css: Css.dif.gap1.asfe.$, "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
18042
18189
  const uniqueValue = uniqueTabValue(tab);
18043
- return /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(
18190
+ return /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(
18044
18191
  TabImpl,
18045
18192
  {
18046
18193
  active: active === uniqueValue,
@@ -18055,7 +18202,7 @@ function Tabs(props) {
18055
18202
  uniqueValue
18056
18203
  );
18057
18204
  }) }),
18058
- right && /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("div", { css: Css.mla.df.aic.gap1.pb1.$, children: right })
18205
+ right && /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("div", { css: Css.mla.df.aic.gap1.pb1.$, children: right })
18059
18206
  ] });
18060
18207
  }
18061
18208
  function TabImpl(props) {
@@ -18063,7 +18210,7 @@ function TabImpl(props) {
18063
18210
  const { disabled = false, name: label, icon, endAdornment } = tab;
18064
18211
  const isDisabled = !!disabled;
18065
18212
  const { hoverProps, isHovered } = (0, import_react_aria51.useHover)({ isDisabled });
18066
- const { baseStyles: baseStyles5, activeStyles: activeStyles4, focusRingStyles: focusRingStyles2, hoverStyles: hoverStyles4, disabledStyles: disabledStyles4, activeHoverStyles } = (0, import_react112.useMemo)(
18213
+ const { baseStyles: baseStyles5, activeStyles: activeStyles4, focusRingStyles: focusRingStyles2, hoverStyles: hoverStyles4, disabledStyles: disabledStyles4, activeHoverStyles } = (0, import_react114.useMemo)(
18067
18214
  () => getTabStyles(),
18068
18215
  []
18069
18216
  );
@@ -18090,15 +18237,15 @@ function TabImpl(props) {
18090
18237
  onBlur,
18091
18238
  ...isRouteTab(tab) ? {} : { onClick: () => onClick(tab.value) }
18092
18239
  });
18093
- const tabLabel = /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment, { children: [
18240
+ const tabLabel = /* @__PURE__ */ (0, import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment, { children: [
18094
18241
  label,
18095
- (icon || endAdornment) && /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("span", { css: Css.ml1.$, children: icon ? /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(Icon, { icon }) : endAdornment })
18242
+ (icon || endAdornment) && /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("span", { css: Css.ml1.$, children: icon ? /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(Icon, { icon }) : endAdornment })
18096
18243
  ] });
18097
18244
  return isDisabled ? maybeTooltip({
18098
18245
  title: resolveTooltip(disabled),
18099
18246
  placement: "top",
18100
- children: /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("div", { ...tabProps, children: tabLabel })
18101
- }) : isRouteTab(tab) ? /* @__PURE__ */ (0, import_jsx_runtime161.jsx)(import_react_router_dom5.Link, { ...{ ...tabProps, ...interactiveProps }, className: "navLink", to: tab.href, children: tabLabel }) : /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("button", { ...{ ...tabProps, ...interactiveProps }, children: tabLabel });
18247
+ children: /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("div", { ...tabProps, children: tabLabel })
18248
+ }) : isRouteTab(tab) ? /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(import_react_router_dom5.Link, { ...{ ...tabProps, ...interactiveProps }, className: "navLink", to: tab.href, children: tabLabel }) : /* @__PURE__ */ (0, import_jsx_runtime164.jsx)("button", { ...{ ...tabProps, ...interactiveProps }, children: tabLabel });
18102
18249
  }
18103
18250
  function getTabStyles() {
18104
18251
  const borderBottomWidthPx = 4;
@@ -18135,18 +18282,18 @@ function hideTabs(props) {
18135
18282
  }
18136
18283
 
18137
18284
  // src/components/Toast/Toast.tsx
18138
- var import_jsx_runtime162 = require("@emotion/react/jsx-runtime");
18285
+ var import_jsx_runtime165 = require("@emotion/react/jsx-runtime");
18139
18286
  function Toast() {
18140
18287
  const { setNotice, notice } = useToastContext();
18141
18288
  const tid = useTestIds({}, "toast");
18142
- return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(import_jsx_runtime162.Fragment, { children: notice && /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(Banner, { ...notice, ...tid, onClose: () => setNotice(void 0) }) });
18289
+ return /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(import_jsx_runtime165.Fragment, { children: notice && /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(Banner, { ...notice, ...tid, onClose: () => setNotice(void 0) }) });
18143
18290
  }
18144
18291
 
18145
18292
  // src/components/Toast/useToast.tsx
18146
- var import_react113 = require("react");
18293
+ var import_react115 = require("react");
18147
18294
  function useToast() {
18148
18295
  const { setNotice, clear } = useToastContext();
18149
- const showToast = (0, import_react113.useCallback)((props) => setNotice(props), [setNotice]);
18296
+ const showToast = (0, import_react115.useCallback)((props) => setNotice(props), [setNotice]);
18150
18297
  return { showToast, clear };
18151
18298
  }
18152
18299
  // Annotate the CommonJS export names for ESM import in node:
@@ -18223,6 +18370,7 @@ function useToast() {
18223
18370
  FormRow,
18224
18371
  FullBleed,
18225
18372
  GridTable,
18373
+ GridTableLayout,
18226
18374
  HB_QUIPS_FLAVOR,
18227
18375
  HB_QUIPS_MISSION,
18228
18376
  HEADER,
@@ -18410,6 +18558,7 @@ function useToast() {
18410
18558
  useDnDGridItem,
18411
18559
  useFilter,
18412
18560
  useGridTableApi,
18561
+ useGridTableLayoutState,
18413
18562
  useGroupBy,
18414
18563
  useHover,
18415
18564
  useModal,