@homebound/beam 2.392.0 → 2.393.0

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