@homebound/beam 2.391.0 → 2.393.0

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