gsintegrations 0.0.487 → 0.0.488

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.
@@ -58373,6 +58373,14 @@ const LIST_CARD_CONTENT_ROOT_SX = {
58373
58373
  };
58374
58374
  /** Scroll clearance above FAB / fixed bottom actions on list pages. */
58375
58375
  const LIST_CONTENT_BOTTOM_PADDING = { xs: 11, sm: 10 };
58376
+ /** Fixed create button, clear of the home indicator. Hidden from `sm` up. */
58377
+ const LIST_FAB_BOTTOM = "calc(16px + env(safe-area-inset-bottom, 0px))";
58378
+ const LIST_FAB_POSITION_SX = {
58379
+ position: "fixed",
58380
+ display: { xs: "flex", sm: "none" },
58381
+ bottom: { xs: LIST_FAB_BOTTOM, sm: 24 },
58382
+ right: { xs: 16, sm: 24 },
58383
+ };
58376
58384
  /** Vertical gap between form fields / sections. */
58377
58385
  const SECTION_GAP = { xs: 2, sm: 3 };
58378
58386
  /** Grid gap for card grids and form layouts. */
@@ -59284,6 +59292,10 @@ var TrendingUp$1 = createSvgIcon( /*#__PURE__*/jsx$1("path", {
59284
59292
  d: "m16 6 2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"
59285
59293
  }), 'TrendingUp');
59286
59294
 
59295
+ var UndoIcon = createSvgIcon( /*#__PURE__*/jsx$1("path", {
59296
+ d: "M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8"
59297
+ }), 'Undo');
59298
+
59287
59299
  var UpgradeIcon = createSvgIcon( /*#__PURE__*/jsx$1("path", {
59288
59300
  d: "M16 18v2H8v-2zM11 7.99V16h2V7.99h3L12 4 8 7.99z"
59289
59301
  }), 'Upgrade');
@@ -90513,6 +90525,145 @@ const AttendanceCheckinCta = ({ contextLabel, isSubmitting = false, onOpen, }) =
90513
90525
  };
90514
90526
  var AttendanceCheckinCta$1 = React__default.memo(AttendanceCheckinCta);
90515
90527
 
90528
+ const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
90529
+ const UTC_MIDNIGHT_ISO_PATTERN = /^(\d{4}-\d{2}-\d{2})T00:00:00(?:\.\d{1,3})?Z$/;
90530
+ const isDateOnlyString = (value) => typeof value === "string" && DATE_ONLY_PATTERN.test(value);
90531
+ const parseDateOnlyToLocalDate = (dateOnly) => {
90532
+ if (!isDateOnlyString(dateOnly)) {
90533
+ throw new Error(`Invalid date-only value: "${dateOnly}". Expected format YYYY-MM-DD`);
90534
+ }
90535
+ const [year, month, day] = dateOnly.split("-").map(Number);
90536
+ return new Date(year, month - 1, day);
90537
+ };
90538
+ const parseUtcMidnightIsoToLocalDate = (value) => {
90539
+ const match = value.match(UTC_MIDNIGHT_ISO_PATTERN);
90540
+ if (!match) {
90541
+ return null;
90542
+ }
90543
+ return parseDateOnlyToLocalDate(match[1]);
90544
+ };
90545
+ const normalizeDateInputToLocalDate = (value) => {
90546
+ if (value instanceof Date) {
90547
+ return value;
90548
+ }
90549
+ if (isDateOnlyString(value)) {
90550
+ return parseDateOnlyToLocalDate(value);
90551
+ }
90552
+ const parsedUtcMidnight = parseUtcMidnightIsoToLocalDate(value);
90553
+ if (parsedUtcMidnight) {
90554
+ return parsedUtcMidnight;
90555
+ }
90556
+ const parsed = new Date(value);
90557
+ return parsed;
90558
+ };
90559
+ const toValidDateOrNull = (value) => {
90560
+ if (!value) {
90561
+ return null;
90562
+ }
90563
+ const parsed = normalizeDateInputToLocalDate(value);
90564
+ return Number.isNaN(parsed.getTime()) ? null : parsed;
90565
+ };
90566
+ const formatDateInputToDateOnly = (value) => {
90567
+ if (typeof value === "string" && isDateOnlyString(value)) {
90568
+ return value;
90569
+ }
90570
+ const date = normalizeDateInputToLocalDate(value);
90571
+ if (Number.isNaN(date.getTime())) {
90572
+ throw new Error(`Invalid date input: "${value}"`);
90573
+ }
90574
+ const year = date.getFullYear();
90575
+ const month = String(date.getMonth() + 1).padStart(2, "0");
90576
+ const day = String(date.getDate()).padStart(2, "0");
90577
+ return `${year}-${month}-${day}`;
90578
+ };
90579
+ const formatDateForDisplay = (value, locale = "pt-BR", options = {
90580
+ day: "2-digit",
90581
+ month: "long",
90582
+ year: "numeric",
90583
+ }) => {
90584
+ const date = value instanceof Date
90585
+ ? value
90586
+ : normalizeDateInputToLocalDate(value);
90587
+ if (isNaN(date.getTime())) {
90588
+ return String(value);
90589
+ }
90590
+ return date.toLocaleDateString(locale, options);
90591
+ };
90592
+
90593
+ const compactListDateParts = (value) => {
90594
+ const date = toValidDateOrNull(value);
90595
+ if (!date)
90596
+ return null;
90597
+ const month = date
90598
+ .toLocaleDateString("pt-BR", { month: "short" })
90599
+ .replace(".", "");
90600
+ return {
90601
+ day: String(date.getDate()).padStart(2, "0"),
90602
+ month,
90603
+ };
90604
+ };
90605
+ const CompactListDateBlock = ({ day, month, }) => (React__default.createElement(Box$1, { "aria-hidden": true, sx: {
90606
+ width: 44,
90607
+ flexShrink: 0,
90608
+ textAlign: "center",
90609
+ lineHeight: 1.1,
90610
+ } },
90611
+ React__default.createElement(Typography$1, { component: "span", sx: { display: "block", fontWeight: 700, fontSize: "1rem" } }, day),
90612
+ React__default.createElement(Typography$1, { component: "span", sx: {
90613
+ display: "block",
90614
+ fontSize: "0.7rem",
90615
+ textTransform: "lowercase",
90616
+ color: "text.secondary",
90617
+ } }, month)));
90618
+ const CompactListRow = ({ title, meta, leading, trailing, onClick, isLast = false, ariaLabel, testId, }) => {
90619
+ const interactive = Boolean(onClick);
90620
+ return (React__default.createElement(Box$1, { "data-testid": testId, role: interactive ? "button" : undefined, tabIndex: interactive ? 0 : undefined, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : (interactive ? title : undefined), onClick: onClick, onKeyDown: (event) => {
90621
+ if (!onClick)
90622
+ return;
90623
+ if (event.key === "Enter" || event.key === " ") {
90624
+ event.preventDefault();
90625
+ onClick();
90626
+ }
90627
+ }, sx: {
90628
+ display: "flex",
90629
+ alignItems: "center",
90630
+ gap: 1.5,
90631
+ width: "100%",
90632
+ textAlign: "left",
90633
+ py: 1.25,
90634
+ px: 1.5,
90635
+ minHeight: 64,
90636
+ cursor: interactive ? "pointer" : "default",
90637
+ border: 0,
90638
+ borderBottom: isLast ? "none" : 1,
90639
+ borderColor: "divider",
90640
+ bgcolor: "transparent",
90641
+ "&:focus-visible": {
90642
+ outline: (theme) => `2px solid ${theme.palette.primary.main}`,
90643
+ outlineOffset: -2,
90644
+ },
90645
+ } },
90646
+ leading,
90647
+ React__default.createElement(Box$1, { sx: { flex: 1, minWidth: 0 } },
90648
+ React__default.createElement(Typography$1, { component: "span", title: title, sx: {
90649
+ display: "-webkit-box",
90650
+ WebkitLineClamp: 2,
90651
+ WebkitBoxOrient: "vertical",
90652
+ overflow: "hidden",
90653
+ fontWeight: 600,
90654
+ fontSize: "0.95rem",
90655
+ lineHeight: 1.3,
90656
+ } }, title),
90657
+ meta ? (React__default.createElement(Typography$1, { component: "span", variant: "body2", color: "text.secondary", sx: {
90658
+ display: "block",
90659
+ mt: 0.25,
90660
+ overflow: "hidden",
90661
+ textOverflow: "ellipsis",
90662
+ whiteSpace: "nowrap",
90663
+ } }, meta)) : null),
90664
+ trailing ? (React__default.createElement(Box$1, { onClick: (event) => event.stopPropagation(), onKeyDown: (event) => event.stopPropagation(), sx: { flexShrink: 0, display: "flex", alignItems: "center" } }, trailing)) : null));
90665
+ };
90666
+
90516
90667
  /**
90517
90668
  * @module constants
90518
90669
  * @summary Useful constants
@@ -116392,6 +116543,210 @@ const FinanceMetricCard$1 = memo(({ title, value, month, year, periodLabel, colo
116392
116543
  });
116393
116544
  FinanceMetricCard$1.displayName = "FinanceMetricCard";
116394
116545
 
116546
+ const GenericDrawer = ({ open, onClose, onOpen, anchor = "bottom", zIndex, fullHeight = false, disableEnforceFocus = false, "aria-label": ariaLabel, children, }) => {
116547
+ const theme = useTheme$1();
116548
+ const isVerticalAnchor = anchor === "bottom" || anchor === "top";
116549
+ const isSideAnchor = anchor === "left" || anchor === "right";
116550
+ const showHandle = anchor === "bottom";
116551
+ const verticalMaxHeight = fullHeight ? "100dvh" : "70dvh";
116552
+ return (React__default.createElement(SwipeableDrawer$1, { anchor: anchor, open: open, onClose: onClose, onOpen: onOpen !== null && onOpen !== void 0 ? onOpen : (() => {
116553
+ /* no-op */
116554
+ }), disableEnforceFocus: disableEnforceFocus, "aria-label": ariaLabel, PaperProps: {
116555
+ role: ariaLabel ? "dialog" : undefined,
116556
+ "aria-label": ariaLabel,
116557
+ "aria-modal": ariaLabel ? true : undefined,
116558
+ sx: Object.assign(Object.assign({ display: "flex", flexDirection: "column", borderRadius: drawerSheetRadius(anchor, theme), backgroundColor: theme.palette.mode === "dark"
116559
+ ? "rgba(0,0,0,0.95)"
116560
+ : "rgba(255,255,255,0.95)", backdropFilter: "blur(20px)", border: `1px solid ${theme.palette.divider}`, width: "100%", maxWidth: `${theme.breakpoints.values.md}px`, marginX: "auto", left: isVerticalAnchor ? 0 : undefined, right: isVerticalAnchor ? 0 : undefined }, (isVerticalAnchor
116561
+ ? Object.assign({ maxHeight: verticalMaxHeight }, (fullHeight ? { height: "100dvh" } : {})) : { maxHeight: "100dvh" })), (isSideAnchor
116562
+ ? {
116563
+ top: 0,
116564
+ bottom: 0,
116565
+ ["@media (min-width:600px)"]: {
116566
+ top: 0,
116567
+ bottom: 0,
116568
+ height: "min(90dvh, 900px)",
116569
+ marginY: "auto",
116570
+ },
116571
+ }
116572
+ : {})),
116573
+ }, sx: Object.assign({}, (zIndex !== undefined ? { zIndex } : {})) },
116574
+ showHandle && (React__default.createElement(Box$1, { component: "button", type: "button", "aria-label": "Fechar", "data-testid": "generic-drawer-handle", onClick: onClose, sx: {
116575
+ display: "flex",
116576
+ alignItems: "center",
116577
+ justifyContent: "center",
116578
+ flexShrink: 0,
116579
+ width: "100%",
116580
+ minHeight: 44,
116581
+ pt: 1,
116582
+ pb: 0.5,
116583
+ px: 2,
116584
+ border: "none",
116585
+ background: "transparent",
116586
+ cursor: "pointer",
116587
+ WebkitTapHighlightColor: "transparent",
116588
+ "&:focus-visible": {
116589
+ outline: `2px solid ${theme.palette.primary.main}`,
116590
+ outlineOffset: -2,
116591
+ },
116592
+ } },
116593
+ React__default.createElement(Box$1, { "aria-hidden": true, sx: {
116594
+ width: 36,
116595
+ height: 4,
116596
+ borderRadius: RADIUS.pill,
116597
+ bgcolor: alpha(theme.palette.text.primary, 0.28),
116598
+ } }))),
116599
+ children));
116600
+ };
116601
+
116602
+ const COMPETENCE_MONTH_REGEX = /^(\d{4})-(0[1-9]|1[0-2])$/;
116603
+ const isValidCompetenceMonth = (value) => typeof value === "string" && COMPETENCE_MONTH_REGEX.test(value);
116604
+ const parseCompetenceMonth = (value) => {
116605
+ if (!isValidCompetenceMonth(value)) {
116606
+ return null;
116607
+ }
116608
+ const [yearText, monthText] = value.split("-");
116609
+ const year = Number(yearText);
116610
+ const month = Number(monthText);
116611
+ return new Date(year, month - 1, 1);
116612
+ };
116613
+ const toCompetenceMonth = (date) => {
116614
+ if (!date || Number.isNaN(date.getTime())) {
116615
+ return "";
116616
+ }
116617
+ const year = date.getFullYear();
116618
+ const month = `${date.getMonth() + 1}`.padStart(2, "0");
116619
+ return `${year}-${month}`;
116620
+ };
116621
+ const formatCompetenceMonthPtBr = (value, options) => {
116622
+ var _a, _b;
116623
+ if (!value)
116624
+ return "-";
116625
+ const date = parseCompetenceMonth(value);
116626
+ if (!date)
116627
+ return value;
116628
+ const monthFormat = (_a = options === null || options === void 0 ? void 0 : options.monthFormat) !== null && _a !== void 0 ? _a : "long";
116629
+ const capitalize = (_b = options === null || options === void 0 ? void 0 : options.capitalize) !== null && _b !== void 0 ? _b : true;
116630
+ const formatted = date.toLocaleDateString("pt-BR", {
116631
+ month: monthFormat,
116632
+ year: "numeric",
116633
+ });
116634
+ if (!capitalize || formatted.length === 0) {
116635
+ return formatted;
116636
+ }
116637
+ return formatted.charAt(0).toUpperCase() + formatted.slice(1);
116638
+ };
116639
+
116640
+ const useLabeledMonthPicker = (props) => {
116641
+ const { value, onChange, minMonth, maxMonth, disabled } = props;
116642
+ const parsedValue = useMemo(() => parseCompetenceMonth(value), [value]);
116643
+ const parsedMinMonth = useMemo(() => parseCompetenceMonth(minMonth), [minMonth]);
116644
+ const parsedMaxMonth = useMemo(() => parseCompetenceMonth(maxMonth), [maxMonth]);
116645
+ const isOutOfRange = useMemo(() => {
116646
+ if (!parsedValue)
116647
+ return false;
116648
+ if (parsedMinMonth && parsedValue < parsedMinMonth)
116649
+ return true;
116650
+ if (parsedMaxMonth && parsedValue > parsedMaxMonth)
116651
+ return true;
116652
+ return false;
116653
+ }, [parsedValue, parsedMinMonth, parsedMaxMonth]);
116654
+ const hasInvalidValue = useMemo(() => value.length > 0 && !isValidCompetenceMonth(value), [value]);
116655
+ const handleMonthChange = useCallback((nextDate) => {
116656
+ if (disabled)
116657
+ return;
116658
+ onChange(toCompetenceMonth(nextDate));
116659
+ }, [disabled, onChange]);
116660
+ const data = useMemo(() => ({
116661
+ parsedValue,
116662
+ parsedMinMonth,
116663
+ parsedMaxMonth,
116664
+ isOutOfRange,
116665
+ hasInvalidValue,
116666
+ }), [
116667
+ parsedValue,
116668
+ parsedMinMonth,
116669
+ parsedMaxMonth,
116670
+ isOutOfRange,
116671
+ hasInvalidValue,
116672
+ ]);
116673
+ const fns = useMemo(() => ({
116674
+ handleMonthChange,
116675
+ }), [handleMonthChange]);
116676
+ return { data, fns };
116677
+ };
116678
+
116679
+ const LabeledMonthPicker = (props) => {
116680
+ var _a, _b;
116681
+ const { label, error, helperText, disabled, required, "data-testid": dataTestId, } = props;
116682
+ const { data, fns } = useLabeledMonthPicker(props);
116683
+ return (React__default.createElement(LocalizationProvider, { dateAdapter: AdapterDateFns, adapterLocale: ptBR },
116684
+ React__default.createElement(Box$1, null,
116685
+ React__default.createElement(DatePicker, { value: data.parsedValue, onChange: fns.handleMonthChange, views: ["year", "month"], openTo: "month", minDate: (_a = data.parsedMinMonth) !== null && _a !== void 0 ? _a : undefined, maxDate: (_b = data.parsedMaxMonth) !== null && _b !== void 0 ? _b : undefined, disabled: disabled, format: "MMMM 'de' yyyy", slotProps: {
116686
+ textField: {
116687
+ label,
116688
+ required,
116689
+ fullWidth: true,
116690
+ error: !!error || data.isOutOfRange || data.hasInvalidValue,
116691
+ helperText: error ||
116692
+ (data.hasInvalidValue
116693
+ ? "Mês de referência inválido."
116694
+ : data.isOutOfRange
116695
+ ? "Mês de referência fora do intervalo permitido"
116696
+ : helperText),
116697
+ InputProps: {
116698
+ readOnly: true,
116699
+ },
116700
+ InputLabelProps: {
116701
+ shrink: true,
116702
+ },
116703
+ inputProps: {
116704
+ "data-testid": dataTestId,
116705
+ },
116706
+ },
116707
+ } }))));
116708
+ };
116709
+
116710
+ const LabeledMonthPickerPropsSchema = objectType({
116711
+ label: stringType(),
116712
+ value: stringType(),
116713
+ onChange: functionType(tupleType([stringType()]), voidType()),
116714
+ error: stringType().optional(),
116715
+ helperText: stringType().optional(),
116716
+ disabled: booleanType().optional(),
116717
+ required: booleanType().optional(),
116718
+ minMonth: stringType().optional(),
116719
+ maxMonth: stringType().optional(),
116720
+ "data-testid": stringType().optional(),
116721
+ });
116722
+
116723
+ const FinanceMobilePeriodBar = ({ periodLabel, amountLabel, periodInputValue, periodInputMin, periodInputMax, onPeriodInputChange, onResetToCurrentPeriod, testIdPrefix, }) => {
116724
+ const [open, setOpen] = useState(false);
116725
+ const summary = `${periodLabel || "-"} · ${amountLabel}`;
116726
+ return (React__default.createElement(React__default.Fragment, null,
116727
+ React__default.createElement(Button$1, { fullWidth: true, variant: "text", color: "inherit", onClick: () => setOpen(true), "aria-label": `Alterar competência, ${summary}`, "data-testid": `${testIdPrefix}-period-summary`, sx: {
116728
+ justifyContent: "flex-start",
116729
+ minHeight: 44,
116730
+ px: 1.5,
116731
+ py: 1,
116732
+ mb: 1,
116733
+ textTransform: "none",
116734
+ bgcolor: "background.paper",
116735
+ border: 1,
116736
+ borderColor: "divider",
116737
+ borderRadius: 1,
116738
+ } },
116739
+ React__default.createElement(Typography$1, { component: "span", fontWeight: 600, noWrap: true }, summary)),
116740
+ React__default.createElement(GenericDrawer, { anchor: "bottom", open: open, onClose: () => setOpen(false), "aria-label": "Compet\u00EAncia" },
116741
+ React__default.createElement(Stack$1, { spacing: 2, sx: { px: 2, pt: 1, pb: 3 } },
116742
+ React__default.createElement(Typography$1, { fontWeight: 700 }, "Compet\u00EAncia"),
116743
+ React__default.createElement(LabeledMonthPicker, { label: "Selecionar m\u00EAs", value: periodInputValue || "", onChange: (value) => onPeriodInputChange === null || onPeriodInputChange === void 0 ? void 0 : onPeriodInputChange(value), minMonth: periodInputMin || "2000-01", maxMonth: periodInputMax || "2100-12", "data-testid": `${testIdPrefix}-period-input` }),
116744
+ React__default.createElement(Button$1, { variant: "text", onClick: () => {
116745
+ onResetToCurrentPeriod === null || onResetToCurrentPeriod === void 0 ? void 0 : onResetToCurrentPeriod();
116746
+ setOpen(false);
116747
+ }, "data-testid": `${testIdPrefix}-period-current-month-button`, sx: { alignSelf: "flex-start", minHeight: 44 } }, "M\u00EAs atual")))));
116748
+ };
116749
+
116395
116750
  const DEFAULT_MIN = 0;
116396
116751
  const DEFAULT_MAX = 120;
116397
116752
  const formatMinuteValue = (value, fallbackValue) => String(value !== null && value !== void 0 ? value : fallbackValue);
@@ -116474,20 +116829,35 @@ const InfoSectionCard = ({ icon, title, count, action, children, }) => (React__d
116474
116829
 
116475
116830
  const PageHeaderStatusTabs = ({ tabs, selectedTab, onTabChange, }) => {
116476
116831
  const theme = useTheme$1();
116477
- return (React__default.createElement(Stack$1, { component: "div", role: "tablist", direction: "row", useFlexGap: true, flexWrap: "wrap", spacing: 0.75, sx: { width: "100%" } }, tabs.map((tab) => {
116832
+ const selectedRef = useRef(null);
116833
+ useEffect(() => {
116834
+ var _a, _b;
116835
+ (_b = (_a = selectedRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView) === null || _b === void 0 ? void 0 : _b.call(_a, {
116836
+ inline: "nearest",
116837
+ block: "nearest",
116838
+ });
116839
+ }, [selectedTab]);
116840
+ return (React__default.createElement(Box$1, { role: "tablist", sx: {
116841
+ display: "flex",
116842
+ flexWrap: "nowrap",
116843
+ gap: 0.75,
116844
+ width: "100%",
116845
+ overflowX: "auto",
116846
+ WebkitOverflowScrolling: "touch",
116847
+ scrollbarWidth: "none",
116848
+ "&::-webkit-scrollbar": { display: "none" },
116849
+ } }, tabs.map((tab) => {
116478
116850
  const isSelected = selectedTab === tab.value;
116479
- return (React__default.createElement(Chip$1, { key: tab.value, component: "button", type: "button", role: "tab", "aria-selected": isSelected, tabIndex: isSelected ? 0 : -1, "data-testid": tab.testId, label: tab.label, onClick: () => onTabChange(tab.value), color: isSelected ? "primary" : "default", variant: isSelected ? "filled" : "outlined", sx: Object.assign({ height: "auto", minHeight: { xs: 32, sm: 36 }, borderRadius: RADIUS.default, fontWeight: isSelected ? 600 : 500, fontSize: { xs: "0.8rem", sm: "0.875rem" }, px: { xs: 0.25, sm: 0.5 }, py: 0.25, maxWidth: "100%", "& .MuiChip-label": {
116480
- whiteSpace: "normal",
116481
- textAlign: "center",
116482
- lineHeight: 1.3,
116483
- px: { xs: 1, sm: 1.25 },
116484
- py: 0.5,
116485
- } }, (isSelected
116486
- ? {}
116487
- : {
116488
- borderColor: theme.palette.divider,
116489
- backgroundColor: theme.palette.background.paper,
116490
- })) }));
116851
+ return (React__default.createElement(Box$1, { key: tab.value, ref: isSelected ? selectedRef : undefined, sx: { flexShrink: 0 } },
116852
+ React__default.createElement(Chip$1, { component: "button", type: "button", role: "tab", "aria-selected": isSelected, tabIndex: isSelected ? 0 : -1, "data-testid": tab.testId, label: tab.label, onClick: () => onTabChange(tab.value), color: isSelected ? "primary" : "default", variant: isSelected ? "filled" : "outlined", sx: Object.assign({ height: 44, minHeight: 44, borderRadius: RADIUS.default, fontWeight: isSelected ? 600 : 500, fontSize: { xs: "0.8rem", sm: "0.875rem" }, "& .MuiChip-label": {
116853
+ whiteSpace: "nowrap",
116854
+ px: 1.25,
116855
+ } }, (isSelected
116856
+ ? {}
116857
+ : {
116858
+ borderColor: theme.palette.divider,
116859
+ backgroundColor: theme.palette.background.paper,
116860
+ })) })));
116491
116861
  })));
116492
116862
  };
116493
116863
  const PageHeader$2 = ({ title, onBack, onAdd, addLabel = "Adicionar", showAddButton = true, hideAddButtonOnMobile = false, tabs, selectedTab, onTabChange, startAdornment, endAction, }) => {
@@ -117662,62 +118032,6 @@ const overlayZIndex = {
117662
118032
  nestedMenu: (theme) => theme.zIndex.modal + 3,
117663
118033
  };
117664
118034
 
117665
- const GenericDrawer = ({ open, onClose, onOpen, anchor = "bottom", zIndex, fullHeight = false, disableEnforceFocus = false, "aria-label": ariaLabel, children, }) => {
117666
- const theme = useTheme$1();
117667
- const isVerticalAnchor = anchor === "bottom" || anchor === "top";
117668
- const isSideAnchor = anchor === "left" || anchor === "right";
117669
- const showHandle = anchor === "bottom";
117670
- const verticalMaxHeight = fullHeight ? "100dvh" : "70dvh";
117671
- return (React__default.createElement(SwipeableDrawer$1, { anchor: anchor, open: open, onClose: onClose, onOpen: onOpen !== null && onOpen !== void 0 ? onOpen : (() => {
117672
- /* no-op */
117673
- }), disableEnforceFocus: disableEnforceFocus, "aria-label": ariaLabel, PaperProps: {
117674
- role: ariaLabel ? "dialog" : undefined,
117675
- "aria-label": ariaLabel,
117676
- "aria-modal": ariaLabel ? true : undefined,
117677
- sx: Object.assign(Object.assign({ display: "flex", flexDirection: "column", borderRadius: drawerSheetRadius(anchor, theme), backgroundColor: theme.palette.mode === "dark"
117678
- ? "rgba(0,0,0,0.95)"
117679
- : "rgba(255,255,255,0.95)", backdropFilter: "blur(20px)", border: `1px solid ${theme.palette.divider}`, width: "100%", maxWidth: `${theme.breakpoints.values.md}px`, marginX: "auto", left: isVerticalAnchor ? 0 : undefined, right: isVerticalAnchor ? 0 : undefined }, (isVerticalAnchor
117680
- ? Object.assign({ maxHeight: verticalMaxHeight }, (fullHeight ? { height: "100dvh" } : {})) : { maxHeight: "100dvh" })), (isSideAnchor
117681
- ? {
117682
- top: 0,
117683
- bottom: 0,
117684
- ["@media (min-width:600px)"]: {
117685
- top: 0,
117686
- bottom: 0,
117687
- height: "min(90dvh, 900px)",
117688
- marginY: "auto",
117689
- },
117690
- }
117691
- : {})),
117692
- }, sx: Object.assign({}, (zIndex !== undefined ? { zIndex } : {})) },
117693
- showHandle && (React__default.createElement(Box$1, { component: "button", type: "button", "aria-label": "Fechar", "data-testid": "generic-drawer-handle", onClick: onClose, sx: {
117694
- display: "flex",
117695
- alignItems: "center",
117696
- justifyContent: "center",
117697
- flexShrink: 0,
117698
- width: "100%",
117699
- minHeight: 44,
117700
- pt: 1,
117701
- pb: 0.5,
117702
- px: 2,
117703
- border: "none",
117704
- background: "transparent",
117705
- cursor: "pointer",
117706
- WebkitTapHighlightColor: "transparent",
117707
- "&:focus-visible": {
117708
- outline: `2px solid ${theme.palette.primary.main}`,
117709
- outlineOffset: -2,
117710
- },
117711
- } },
117712
- React__default.createElement(Box$1, { "aria-hidden": true, sx: {
117713
- width: 36,
117714
- height: 4,
117715
- borderRadius: RADIUS.pill,
117716
- bgcolor: alpha(theme.palette.text.primary, 0.28),
117717
- } }))),
117718
- children));
117719
- };
117720
-
117721
118035
  const cloneFilters = (value) => {
117722
118036
  return JSON.parse(JSON.stringify(value));
117723
118037
  };
@@ -117946,127 +118260,6 @@ const LabeledBrazilianStateSelect = (props) => {
117946
118260
  React__default.createElement(FormHelperText$1, null, error || helperText)));
117947
118261
  };
117948
118262
 
117949
- const COMPETENCE_MONTH_REGEX = /^(\d{4})-(0[1-9]|1[0-2])$/;
117950
- const isValidCompetenceMonth = (value) => typeof value === "string" && COMPETENCE_MONTH_REGEX.test(value);
117951
- const parseCompetenceMonth = (value) => {
117952
- if (!isValidCompetenceMonth(value)) {
117953
- return null;
117954
- }
117955
- const [yearText, monthText] = value.split("-");
117956
- const year = Number(yearText);
117957
- const month = Number(monthText);
117958
- return new Date(year, month - 1, 1);
117959
- };
117960
- const toCompetenceMonth = (date) => {
117961
- if (!date || Number.isNaN(date.getTime())) {
117962
- return "";
117963
- }
117964
- const year = date.getFullYear();
117965
- const month = `${date.getMonth() + 1}`.padStart(2, "0");
117966
- return `${year}-${month}`;
117967
- };
117968
- const formatCompetenceMonthPtBr = (value, options) => {
117969
- var _a, _b;
117970
- if (!value)
117971
- return "-";
117972
- const date = parseCompetenceMonth(value);
117973
- if (!date)
117974
- return value;
117975
- const monthFormat = (_a = options === null || options === void 0 ? void 0 : options.monthFormat) !== null && _a !== void 0 ? _a : "long";
117976
- const capitalize = (_b = options === null || options === void 0 ? void 0 : options.capitalize) !== null && _b !== void 0 ? _b : true;
117977
- const formatted = date.toLocaleDateString("pt-BR", {
117978
- month: monthFormat,
117979
- year: "numeric",
117980
- });
117981
- if (!capitalize || formatted.length === 0) {
117982
- return formatted;
117983
- }
117984
- return formatted.charAt(0).toUpperCase() + formatted.slice(1);
117985
- };
117986
-
117987
- const useLabeledMonthPicker = (props) => {
117988
- const { value, onChange, minMonth, maxMonth, disabled } = props;
117989
- const parsedValue = useMemo(() => parseCompetenceMonth(value), [value]);
117990
- const parsedMinMonth = useMemo(() => parseCompetenceMonth(minMonth), [minMonth]);
117991
- const parsedMaxMonth = useMemo(() => parseCompetenceMonth(maxMonth), [maxMonth]);
117992
- const isOutOfRange = useMemo(() => {
117993
- if (!parsedValue)
117994
- return false;
117995
- if (parsedMinMonth && parsedValue < parsedMinMonth)
117996
- return true;
117997
- if (parsedMaxMonth && parsedValue > parsedMaxMonth)
117998
- return true;
117999
- return false;
118000
- }, [parsedValue, parsedMinMonth, parsedMaxMonth]);
118001
- const hasInvalidValue = useMemo(() => value.length > 0 && !isValidCompetenceMonth(value), [value]);
118002
- const handleMonthChange = useCallback((nextDate) => {
118003
- if (disabled)
118004
- return;
118005
- onChange(toCompetenceMonth(nextDate));
118006
- }, [disabled, onChange]);
118007
- const data = useMemo(() => ({
118008
- parsedValue,
118009
- parsedMinMonth,
118010
- parsedMaxMonth,
118011
- isOutOfRange,
118012
- hasInvalidValue,
118013
- }), [
118014
- parsedValue,
118015
- parsedMinMonth,
118016
- parsedMaxMonth,
118017
- isOutOfRange,
118018
- hasInvalidValue,
118019
- ]);
118020
- const fns = useMemo(() => ({
118021
- handleMonthChange,
118022
- }), [handleMonthChange]);
118023
- return { data, fns };
118024
- };
118025
-
118026
- const LabeledMonthPicker = (props) => {
118027
- var _a, _b;
118028
- const { label, error, helperText, disabled, required, "data-testid": dataTestId, } = props;
118029
- const { data, fns } = useLabeledMonthPicker(props);
118030
- return (React__default.createElement(LocalizationProvider, { dateAdapter: AdapterDateFns, adapterLocale: ptBR },
118031
- React__default.createElement(Box$1, null,
118032
- React__default.createElement(DatePicker, { value: data.parsedValue, onChange: fns.handleMonthChange, views: ["year", "month"], openTo: "month", minDate: (_a = data.parsedMinMonth) !== null && _a !== void 0 ? _a : undefined, maxDate: (_b = data.parsedMaxMonth) !== null && _b !== void 0 ? _b : undefined, disabled: disabled, format: "MMMM 'de' yyyy", slotProps: {
118033
- textField: {
118034
- label,
118035
- required,
118036
- fullWidth: true,
118037
- error: !!error || data.isOutOfRange || data.hasInvalidValue,
118038
- helperText: error ||
118039
- (data.hasInvalidValue
118040
- ? "Mês de referência inválido."
118041
- : data.isOutOfRange
118042
- ? "Mês de referência fora do intervalo permitido"
118043
- : helperText),
118044
- InputProps: {
118045
- readOnly: true,
118046
- },
118047
- InputLabelProps: {
118048
- shrink: true,
118049
- },
118050
- inputProps: {
118051
- "data-testid": dataTestId,
118052
- },
118053
- },
118054
- } }))));
118055
- };
118056
-
118057
- const LabeledMonthPickerPropsSchema = objectType({
118058
- label: stringType(),
118059
- value: stringType(),
118060
- onChange: functionType(tupleType([stringType()]), voidType()),
118061
- error: stringType().optional(),
118062
- helperText: stringType().optional(),
118063
- disabled: booleanType().optional(),
118064
- required: booleanType().optional(),
118065
- minMonth: stringType().optional(),
118066
- maxMonth: stringType().optional(),
118067
- "data-testid": stringType().optional(),
118068
- });
118069
-
118070
118263
  const LabeledFieldHeaderPropsSchema = objectType({
118071
118264
  label: stringType(),
118072
118265
  required: booleanType().optional(),
@@ -129809,71 +130002,6 @@ const QuestionAnswersSheet = ({ open, answers = [], answerCount, isLoading = fal
129809
130002
  onSubmitAnswer ? (React__default.createElement(SocialMessageComposer, { variant: "drawer", value: draft, onChange: setDraft, onSend: (message) => void handleSend(message), placeholder: "Escreva uma resposta\u2026", disabled: composerDisabled, isSending: isSubmitting })) : null)));
129810
130003
  };
129811
130004
 
129812
- const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
129813
- const UTC_MIDNIGHT_ISO_PATTERN = /^(\d{4}-\d{2}-\d{2})T00:00:00(?:\.\d{1,3})?Z$/;
129814
- const isDateOnlyString = (value) => typeof value === "string" && DATE_ONLY_PATTERN.test(value);
129815
- const parseDateOnlyToLocalDate = (dateOnly) => {
129816
- if (!isDateOnlyString(dateOnly)) {
129817
- throw new Error(`Invalid date-only value: "${dateOnly}". Expected format YYYY-MM-DD`);
129818
- }
129819
- const [year, month, day] = dateOnly.split("-").map(Number);
129820
- return new Date(year, month - 1, day);
129821
- };
129822
- const parseUtcMidnightIsoToLocalDate = (value) => {
129823
- const match = value.match(UTC_MIDNIGHT_ISO_PATTERN);
129824
- if (!match) {
129825
- return null;
129826
- }
129827
- return parseDateOnlyToLocalDate(match[1]);
129828
- };
129829
- const normalizeDateInputToLocalDate = (value) => {
129830
- if (value instanceof Date) {
129831
- return value;
129832
- }
129833
- if (isDateOnlyString(value)) {
129834
- return parseDateOnlyToLocalDate(value);
129835
- }
129836
- const parsedUtcMidnight = parseUtcMidnightIsoToLocalDate(value);
129837
- if (parsedUtcMidnight) {
129838
- return parsedUtcMidnight;
129839
- }
129840
- const parsed = new Date(value);
129841
- return parsed;
129842
- };
129843
- const toValidDateOrNull = (value) => {
129844
- if (!value) {
129845
- return null;
129846
- }
129847
- const parsed = normalizeDateInputToLocalDate(value);
129848
- return Number.isNaN(parsed.getTime()) ? null : parsed;
129849
- };
129850
- const formatDateInputToDateOnly = (value) => {
129851
- if (typeof value === "string" && isDateOnlyString(value)) {
129852
- return value;
129853
- }
129854
- const date = normalizeDateInputToLocalDate(value);
129855
- if (Number.isNaN(date.getTime())) {
129856
- throw new Error(`Invalid date input: "${value}"`);
129857
- }
129858
- const year = date.getFullYear();
129859
- const month = String(date.getMonth() + 1).padStart(2, "0");
129860
- const day = String(date.getDate()).padStart(2, "0");
129861
- return `${year}-${month}-${day}`;
129862
- };
129863
- const formatDateForDisplay = (value, locale = "pt-BR", options = {
129864
- day: "2-digit",
129865
- month: "long",
129866
- year: "numeric",
129867
- }) => {
129868
- const date = value instanceof Date
129869
- ? value
129870
- : normalizeDateInputToLocalDate(value);
129871
- if (isNaN(date.getTime())) {
129872
- return String(value);
129873
- }
129874
- return date.toLocaleDateString(locale, options);
129875
- };
129876
-
129877
130005
  const AVATAR_SIZE$1 = 84;
129878
130006
  const overlayIconSx = {
129879
130007
  color: "common.white",
@@ -135104,9 +135232,30 @@ const ActivityCard = ({ activity, isLast, isPersonalProfile = false, onSelect, o
135104
135232
  return (React__default.createElement(Avatar$1, { key: idx, src: (_a = item.imageUrl) !== null && _a !== void 0 ? _a : undefined, alt: item.name }, ((_c = (_b = item.name) === null || _b === void 0 ? void 0 : _b.charAt(0)) !== null && _c !== void 0 ? _c : "").toUpperCase()));
135105
135233
  })))))));
135106
135234
  };
135235
+ const ActivityCompactRow = ({ activity, isLast, isPersonalProfile = false, onSelect, onEdit }) => {
135236
+ var _a;
135237
+ const occurrence = (_a = activity.occurrences) === null || _a === void 0 ? void 0 : _a[0];
135238
+ const dateParts = compactListDateParts(occurrence === null || occurrence === void 0 ? void 0 : occurrence.date);
135239
+ const dateTime = formatActivityDateTime(activity);
135240
+ const configuredCheckinWindow = getConfiguredCheckinWindow$1(activity);
135241
+ const meta = [
135242
+ dateTime.time,
135243
+ configuredCheckinWindow && !isPersonalProfile
135244
+ ? `Check-in ${configuredCheckinWindow}`
135245
+ : null,
135246
+ activity.members && activity.members.count > 0
135247
+ ? `${activity.members.count} médiuns`
135248
+ : null,
135249
+ ]
135250
+ .filter(Boolean)
135251
+ .join(" · ");
135252
+ return (React__default.createElement(CompactListRow, { title: activity.title, meta: meta, isLast: isLast, onClick: () => onSelect(activity.id), leading: dateParts ? (React__default.createElement(CompactListDateBlock, { day: dateParts.day, month: dateParts.month })) : (React__default.createElement(CalendarToday, { fontSize: "small", color: "action" })), trailing: onEdit ? (React__default.createElement(IconButton$1, { "aria-label": `Editar ${activity.title}`, onClick: () => onEdit(activity.id), sx: { width: 44, height: 44 } },
135253
+ React__default.createElement(ArrowForwardIos, { sx: { width: 16 } }))) : undefined }));
135254
+ };
135107
135255
  const ActivityListPage = (props) => {
135108
135256
  var _a;
135109
135257
  const theme = useTheme$1();
135258
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
135110
135259
  const { data, fns } = useActivityListPage(props);
135111
135260
  const canCreate = props.canCreate || props.isAdmin;
135112
135261
  const periodInputValue = (_a = props.periodInputValue) !== null && _a !== void 0 ? _a : `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, "0")}`;
@@ -135155,7 +135304,9 @@ const ActivityListPage = (props) => {
135155
135304
  backgroundColor: theme.palette.background.default,
135156
135305
  position: "relative",
135157
135306
  } },
135158
- React__default.createElement(PageHeader$2, { title: "Atividades", onBack: fns.handleClose, onAdd: fns.handleActivityAdd, addLabel: "Adicionar", showAddButton: canCreate, tabs: tabs.map((status) => ({
135307
+ React__default.createElement(PageHeader$2, { title: "Atividades", onBack: fns.handleClose, onAdd: fns.handleActivityAdd, addLabel: "Adicionar", showAddButton: canCreate, hideAddButtonOnMobile: true, endAction: props.canExportParticipationReport &&
135308
+ props.onExportParticipationReport ? (React__default.createElement(IconButton$1, { "aria-label": "Exportar Participa\u00E7\u00E3o", onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "activities-export-participation-icon", sx: { display: { xs: "inline-flex", sm: "none" }, width: 44, height: 44 } },
135309
+ React__default.createElement(Download, null))) : undefined, tabs: tabs.map((status) => ({
135159
135310
  value: status,
135160
135311
  label: data.getStatusLabel(status),
135161
135312
  })), selectedTab: safeSelectedTab, onTabChange: (value) => fns.handleTabChange(value) }),
@@ -135171,7 +135322,7 @@ const ActivityListPage = (props) => {
135171
135322
  React__default.createElement(Box$1, { sx: { width: { xs: "100%", sm: 260 } } },
135172
135323
  React__default.createElement(LabeledMonthPicker, { label: "Per\u00EDodo", value: periodInputValue, onChange: (nextValue) => { var _a; return (_a = props.onPeriodInputChange) === null || _a === void 0 ? void 0 : _a.call(props, nextValue); }, "data-testid": "activities-period-input" })),
135173
135324
  props.canExportParticipationReport &&
135174
- props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "activities-export-participation-button" }, props.isExportingParticipationReport
135325
+ props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "activities-export-participation-button", sx: { display: { xs: "none", sm: "inline-flex" } } }, props.isExportingParticipationReport
135175
135326
  ? "Exportando..."
135176
135327
  : "Exportar Participação"))),
135177
135328
  React__default.createElement(Box$1, { sx: Object.assign({ flex: 1, pb: LIST_CONTENT_BOTTOM_PADDING }, LIST_CARD_CONTENT_ROOT_SX) }, data.activities.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -135188,18 +135339,19 @@ const ActivityListPage = (props) => {
135188
135339
  canCreate && (React__default.createElement(React__default.Fragment, null,
135189
135340
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: SECTION_GAP } }, "Toque no bot\u00E3o + para criar uma nova atividade"),
135190
135341
  React__default.createElement(QuotaGuard, { feature: "activities", behavior: "disable" },
135191
- React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleActivityAdd }, "Criar atividade")))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.activities.map((activity, index) => (React__default.createElement(ActivityCard, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: fns.handleActivityEdit, theme: theme, getStatusLabel: data.getStatusLabel })))))),
135342
+ React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleActivityAdd }, "Criar atividade")))))) : (isMobile ? (React__default.createElement(Box$1, { sx: {
135343
+ bgcolor: "background.paper",
135344
+ borderRadius: RADIUS.default,
135345
+ border: 1,
135346
+ borderColor: "divider",
135347
+ overflow: "hidden",
135348
+ } }, data.activities.map((activity, index) => (React__default.createElement(ActivityCompactRow, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: props.onActivityEdit ? fns.handleActivityEdit : undefined }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.activities.map((activity, index) => (React__default.createElement(ActivityCard, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: fns.handleActivityEdit, theme: theme, getStatusLabel: data.getStatusLabel }))))))),
135192
135349
  React__default.createElement(Menu$2, { anchorEl: filterAnchorEl, open: Boolean(filterAnchorEl), onClose: handleFilterClose },
135193
135350
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(null) }, "Todas as atividades"),
135194
135351
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(true) }, "Apenas modelos"),
135195
135352
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(false) }, "Apenas atividades")),
135196
- canCreate && !props.hideAddFab && (React__default.createElement(QuotaGuard, { feature: "activities", behavior: "hide" },
135197
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleActivityAdd, sx: {
135198
- position: "fixed",
135199
- bottom: { xs: 16, sm: 24 },
135200
- right: { xs: 16, sm: 24 },
135201
- zIndex: theme.zIndex.speedDial,
135202
- } },
135353
+ canCreate && !props.hideAddFab && data.activities.length > 0 && (React__default.createElement(QuotaGuard, { feature: "activities", behavior: "hide" },
135354
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleActivityAdd, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
135203
135355
  React__default.createElement(Add$1, null)))))));
135204
135356
  };
135205
135357
 
@@ -142252,6 +142404,8 @@ const TicketVoucherPage = ({ isLoading, errorMessage, code, eventTitle, terreiro
142252
142404
 
142253
142405
  const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, published = false, publicTitle = "", maxTicketsPerEmail = 2, batches = [], holders = [], isSaving, saveError, checkInMessage, onSave, onExportCsv, onCheckIn, useChat = false, chat, canCheckIn = false, isCheckingIn = false, parseTicketQr, }) => {
142254
142406
  var _a;
142407
+ const theme = useTheme$1();
142408
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
142255
142409
  const [title, setTitle] = useState(publicTitle);
142256
142410
  const [isPublished, setIsPublished] = useState(published);
142257
142411
  const [emailLimit, setEmailLimit] = useState(maxTicketsPerEmail);
@@ -142326,17 +142480,24 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142326
142480
  React__default.createElement(CardContent$1, null,
142327
142481
  React__default.createElement(Stack$1, { spacing: 2 },
142328
142482
  React__default.createElement(Typography$1, { variant: "h6" }, "Check-in na porta"),
142329
- React__default.createElement(Stack$1, { direction: "row", spacing: 1 },
142483
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", spacing: 1, alignItems: isMobile ? "stretch" : "center" },
142330
142484
  React__default.createElement(TextField$1, { label: "Codigo do ingresso", value: checkInCode, onChange: (event) => setCheckInCode(event.target.value), inputProps: { "data-testid": "ticketing-checkin-code" } }),
142331
142485
  React__default.createElement(Button$1, { variant: "contained", onClick: () => onCheckIn === null || onCheckIn === void 0 ? void 0 : onCheckIn(checkInCode), "data-testid": "ticketing-checkin-submit" }, "Validar"),
142332
142486
  canCheckIn ? (React__default.createElement(Button$1, { variant: "outlined", onClick: () => setIsScannerOpen(true), "data-testid": "ticketing-checkin-scan" }, "Escanear QR")) : null),
142333
142487
  checkInMessage ? React__default.createElement(Alert$1, { severity: "success" }, checkInMessage) : null))),
142334
142488
  React__default.createElement(Card$1, null,
142335
142489
  React__default.createElement(CardContent$1, null,
142336
- React__default.createElement(Stack$1, { direction: "row", justifyContent: "space-between", alignItems: "center", sx: { mb: 2 } },
142490
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", justifyContent: "space-between", alignItems: isMobile ? "flex-start" : "center", spacing: 1, sx: { mb: 2 } },
142337
142491
  React__default.createElement(Typography$1, { variant: "h6" }, "Titulares"),
142338
142492
  React__default.createElement(Button$1, { onClick: onExportCsv, "data-testid": "ticketing-export-csv" }, "Exportar CSV")),
142339
- React__default.createElement(Table$1, { size: "small" },
142493
+ isMobile ? (React__default.createElement(Stack$1, { divider: React__default.createElement(Box$1, { sx: { borderBottom: 1, borderColor: "divider" } }) }, holders.map((holder) => (React__default.createElement(Box$1, { key: holder.code, sx: { py: 1.25 } },
142494
+ React__default.createElement(Typography$1, { fontWeight: 600 }, holder.holderName),
142495
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
142496
+ holder.status,
142497
+ holder.holderEmail ? ` · ${holder.holderEmail}` : ""),
142498
+ React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" },
142499
+ holder.code,
142500
+ holder.batchName ? ` · ${holder.batchName}` : "")))))) : (React__default.createElement(Table$1, { size: "small" },
142340
142501
  React__default.createElement(TableHead$1, null,
142341
142502
  React__default.createElement(TableRow$1, null,
142342
142503
  React__default.createElement(TableCell$1, null, "Codigo"),
@@ -142349,7 +142510,7 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142349
142510
  React__default.createElement(TableCell$1, null, holder.holderName),
142350
142511
  React__default.createElement(TableCell$1, null, holder.holderEmail),
142351
142512
  React__default.createElement(TableCell$1, null, holder.batchName),
142352
- React__default.createElement(TableCell$1, null, holder.status)))))))),
142513
+ React__default.createElement(TableCell$1, null, holder.status))))))))),
142353
142514
  React__default.createElement(Dialog$1, { open: isScannerOpen, onClose: () => setIsScannerOpen(false), fullWidth: true, maxWidth: "sm" },
142354
142515
  React__default.createElement(DialogTitle$1, null, "Escanear ingresso"),
142355
142516
  React__default.createElement(DialogContent$1, { dividers: true },
@@ -143222,9 +143383,25 @@ const EventCard = ({ event, isLast, onSelect, onEdit, getEventTypeLabel, theme }
143222
143383
  event.insumos.count,
143223
143384
  ")"))))));
143224
143385
  };
143386
+ const EventCompactRow = ({ event, isLast, onSelect, onEdit, getEventTypeLabel }) => {
143387
+ var _a, _b;
143388
+ const occurrence = (_b = (_a = event.occurrences) === null || _a === void 0 ? void 0 : _a.list) === null || _b === void 0 ? void 0 : _b[0];
143389
+ const dateParts = compactListDateParts(occurrence === null || occurrence === void 0 ? void 0 : occurrence.date);
143390
+ const dateTime = formatEventDateTime(event);
143391
+ const rawTitle = event.title || event.name || "Sem título";
143392
+ const meta = [
143393
+ dateTime.time,
143394
+ event.type ? getEventTypeLabel(event.type) : null,
143395
+ ]
143396
+ .filter(Boolean)
143397
+ .join(" · ");
143398
+ return (React__default.createElement(CompactListRow, { title: rawTitle, meta: meta, isLast: isLast, onClick: () => onSelect(event.id), leading: dateParts ? (React__default.createElement(CompactListDateBlock, { day: dateParts.day, month: dateParts.month })) : (React__default.createElement(CalendarToday, { fontSize: "small", color: "action" })), trailing: onEdit ? (React__default.createElement(IconButton$1, { "aria-label": `Editar ${rawTitle}`, onClick: () => onEdit(event.id), sx: { width: 44, height: 44 } },
143399
+ React__default.createElement(ArrowForwardIos, { sx: { width: 16 } }))) : undefined }));
143400
+ };
143225
143401
  const EventsPage = (props) => {
143226
143402
  var _a;
143227
143403
  const theme = useTheme$1();
143404
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
143228
143405
  const { data, fns } = useEventsPage(props);
143229
143406
  const periodInputValue = (_a = props.periodInputValue) !== null && _a !== void 0 ? _a : `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, "0")}`;
143230
143407
  // Memoized tab list for maintainability
@@ -143273,7 +143450,13 @@ const EventsPage = (props) => {
143273
143450
  backgroundColor: theme.palette.background.default,
143274
143451
  position: "relative",
143275
143452
  } },
143276
- React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, tabs: tabs.map((status) => ({
143453
+ React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, hideAddButtonOnMobile: true, endAction: props.canExportParticipationReport &&
143454
+ props.onExportParticipationReport ? (React__default.createElement(IconButton$1, { "aria-label": "Exportar Participa\u00E7\u00E3o", onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-icon", sx: {
143455
+ display: { xs: "inline-flex", sm: "none" },
143456
+ width: 44,
143457
+ height: 44,
143458
+ } },
143459
+ React__default.createElement(Download, null))) : undefined, tabs: tabs.map((status) => ({
143277
143460
  value: status,
143278
143461
  label: data.getStatusLabel(status),
143279
143462
  })), selectedTab: safeSelectedTab, onTabChange: (value) => fns.handleTabChange(value) }),
@@ -143289,7 +143472,7 @@ const EventsPage = (props) => {
143289
143472
  React__default.createElement(Box$1, { sx: { width: { xs: "100%", sm: 260 } } },
143290
143473
  React__default.createElement(LabeledMonthPicker, { label: "Per\u00EDodo", value: periodInputValue, onChange: (nextValue) => { var _a; return (_a = props.onPeriodInputChange) === null || _a === void 0 ? void 0 : _a.call(props, nextValue); }, "data-testid": "events-period-input" })),
143291
143474
  props.canExportParticipationReport &&
143292
- props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-button" }, props.isExportingParticipationReport
143475
+ props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-button", sx: { display: { xs: "none", sm: "inline-flex" } } }, props.isExportingParticipationReport
143293
143476
  ? "Exportando..."
143294
143477
  : "Exportar Participação"))),
143295
143478
  React__default.createElement(Box$1, { sx: Object.assign({ flex: 1, pb: LIST_CONTENT_BOTTOM_PADDING }, LIST_CARD_CONTENT_ROOT_SX) }, data.events.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -143306,14 +143489,15 @@ const EventsPage = (props) => {
143306
143489
  props.isAdmin && (React__default.createElement(React__default.Fragment, null,
143307
143490
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: SECTION_GAP } }, "Toque no bot\u00E3o + para criar um novo evento"),
143308
143491
  React__default.createElement(QuotaGuard, { feature: "events", behavior: "disable" },
143309
- React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleAddEvent }, "Criar evento")))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.events.map((event, index) => (React__default.createElement(EventCard, { key: event.id, event: event, isLast: index === data.events.length - 1, onSelect: fns.handleEventSelect, onEdit: fns.handleEventEdit, getEventTypeLabel: data.getEventTypeLabel, getStatusLabel: data.getStatusLabel, theme: theme })))))),
143310
- props.isAdmin && !props.hideAddFab && (React__default.createElement(QuotaGuard, { feature: "events", behavior: "hide" },
143311
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar evento", onClick: fns.handleAddEvent, sx: {
143312
- position: "fixed",
143313
- bottom: { xs: 16, sm: 24 },
143314
- right: { xs: 16, sm: 24 },
143315
- zIndex: theme.zIndex.speedDial,
143316
- } },
143492
+ React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleAddEvent }, "Criar evento")))))) : (isMobile ? (React__default.createElement(Box$1, { sx: {
143493
+ bgcolor: "background.paper",
143494
+ borderRadius: RADIUS.default,
143495
+ border: 1,
143496
+ borderColor: "divider",
143497
+ overflow: "hidden",
143498
+ } }, data.events.map((event, index) => (React__default.createElement(EventCompactRow, { key: event.id, event: event, isLast: index === data.events.length - 1, onSelect: fns.handleEventSelect, onEdit: props.onEventEdit ? fns.handleEventEdit : undefined, getEventTypeLabel: data.getEventTypeLabel }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.events.map((event, index) => (React__default.createElement(EventCard, { key: event.id, event: event, isLast: index === data.events.length - 1, onSelect: fns.handleEventSelect, onEdit: fns.handleEventEdit, getEventTypeLabel: data.getEventTypeLabel, getStatusLabel: data.getStatusLabel, theme: theme }))))))),
143499
+ props.isAdmin && !props.hideAddFab && data.events.length > 0 && (React__default.createElement(QuotaGuard, { feature: "events", behavior: "hide" },
143500
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar evento", onClick: fns.handleAddEvent, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
143317
143501
  React__default.createElement(Add$1, null)))))));
143318
143502
  };
143319
143503
 
@@ -144362,9 +144546,9 @@ const FinancialAccountsList = (props) => {
144362
144546
  minHeight: "100vh",
144363
144547
  backgroundColor: theme.palette.background.default,
144364
144548
  position: "relative",
144365
- pb: isMobile ? 2 : 0, // Espaço para o FAB no mobile
144549
+ pb: 0,
144366
144550
  } },
144367
- React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true }),
144551
+ React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
144368
144552
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
144369
144553
  showPeriodFilter && (React__default.createElement(Stack$1, { direction: { xs: "column", sm: "row" }, spacing: SECTION_GAP, alignItems: { xs: "flex-start", sm: "center" }, justifyContent: "space-between", sx: { pb: LIST_CONTROLS_MARGIN_BOTTOM } },
144370
144554
  React__default.createElement(Stack$1, { spacing: 0.5 },
@@ -144406,12 +144590,7 @@ const FinancialAccountsList = (props) => {
144406
144590
  } },
144407
144591
  isEmpty && (React__default.createElement(EmptyState$2, { onAddAccount: props.onAddAccount, theme: theme })),
144408
144592
  !isEmpty && accountsList)),
144409
- isMobile && (React__default.createElement(Fab$1, { "data-testid": "financial-account-fab-add", color: "primary", "aria-label": "Adicionar Conta", onClick: props.onAddAccount, sx: {
144410
- position: "fixed",
144411
- bottom: 16,
144412
- right: 16,
144413
- zIndex: theme.zIndex.fab,
144414
- } },
144593
+ isMobile && !isEmpty && (React__default.createElement(Fab$1, { "data-testid": "financial-account-fab-add", color: "primary", "aria-label": "Adicionar Conta", onClick: props.onAddAccount, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
144415
144594
  React__default.createElement(Add$1, null))))));
144416
144595
  };
144417
144596
  var FinancialAccountsList$1 = React__default.memo(FinancialAccountsList);
@@ -146053,11 +146232,11 @@ const IncomeListItem = React__default.memo(function IncomeListItem({ item, idx,
146053
146232
  React__default.createElement(ListItemSecondaryAction$1, null,
146054
146233
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146055
146234
  React__default.createElement(Typography$1, { variant: "subtitle1", sx: { fontWeight: 600 } }, formattedAmount),
146056
- canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(Button$1, { size: "small", variant: "text", disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146235
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146057
146236
  event.stopPropagation();
146058
146237
  item.id &&
146059
146238
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146060
- } }, settlementActionLabel)) : null))),
146239
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146061
146240
  !isLastItem && React__default.createElement(Divider$1, { component: "li", variant: "inset" })));
146062
146241
  });
146063
146242
  const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146094,14 +146273,18 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146094
146273
  *
146095
146274
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146096
146275
  */
146097
- const headerHeight = isMobile ? 70 : 80;
146276
+ const headerHeight = 80;
146098
146277
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146099
146278
  periodInputValue ||
146100
146279
  onPeriodInputChange ||
146101
146280
  onResetToCurrentPeriod);
146102
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146103
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146104
- const contentOffset = filterHeight + cardHeight + 16;
146281
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146282
+ const cardHeight = 96;
146283
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146284
+ const amountLabel = totalAmountNumber.toLocaleString("pt-BR", {
146285
+ style: "currency",
146286
+ currency: "BRL",
146287
+ });
146105
146288
  const incomes = useMemo(() => (Array.isArray(dataSource.incomes) ? dataSource.incomes : []), [dataSource.incomes]);
146106
146289
  return (React__default.createElement(Box$1, { sx: {
146107
146290
  display: "flex",
@@ -146111,8 +146294,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146111
146294
  position: "relative",
146112
146295
  //pb: isMobile ? 2 : 0,
146113
146296
  } },
146114
- React__default.createElement(PageHeader$2, { title: "Entradas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true }),
146115
- React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146297
+ React__default.createElement(PageHeader$2, { title: "Entradas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146298
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146299
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || metricPeriodLabel, amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "income" }))) : null,
146300
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146116
146301
  position: "fixed",
146117
146302
  left: 0,
146118
146303
  right: 0,
@@ -146149,10 +146334,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146149
146334
  style: "currency",
146150
146335
  currency: "BRL",
146151
146336
  })
146152
- : `R$: ${amount}` })))),
146337
+ : `R$: ${amount}` }))))),
146153
146338
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146154
146339
  // push content below the fixed header + card
146155
- paddingTop: `${contentOffset}px`,
146340
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146156
146341
  // ensure content can scroll beneath fixed card
146157
146342
  position: "relative", zIndex: 0 }) },
146158
146343
  incomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146176,13 +146361,8 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146176
146361
  var _a, _b;
146177
146362
  return (React__default.createElement(IncomeListItem, { key: `${(_a = inc.date) !== null && _a !== void 0 ? _a : ""}-${idx}-${(_b = inc.amount) !== null && _b !== void 0 ? _b : ""}`, item: inc, idx: idx, isLastItem: idx === incomes.length - 1, formatCurrency: formatCurrency, formatDate: formatDate, getAccountName: getAccountName, onSelect: onSelect, canConfirmTransactions: canConfirmTransactions, isUpdatingSettlementStatus: isUpdatingSettlementStatus, onToggleSettlementStatus: onToggleSettlementStatus }));
146178
146363
  }))),
146179
- isMobile && (React__default.createElement(QuotaGuard, { feature: "incomes", behavior: "hide" },
146180
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Entrada", title: "Adicionar Entrada", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: {
146181
- position: "fixed",
146182
- bottom: 16,
146183
- right: 16,
146184
- zIndex: theme.zIndex.fab,
146185
- } },
146364
+ isMobile && incomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "incomes", behavior: "hide" },
146365
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Entrada", title: "Adicionar Entrada", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
146186
146366
  React__default.createElement(Add$1, null)))))));
146187
146367
  };
146188
146368
  var IncomeListPage$1 = React__default.memo(IncomeListPage);
@@ -146677,12 +146857,12 @@ const OutcomeListItem = React__default.memo(function OutcomeListItem({ item, idx
146677
146857
  React__default.createElement(ListItemSecondaryAction$1, null,
146678
146858
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146679
146859
  React__default.createElement(Typography$1, { variant: "subtitle1", sx: { fontWeight: 600 } }, formattedAmount),
146680
- canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(Button$1, { size: "small", variant: "text", disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146860
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146681
146861
  event.stopPropagation();
146682
146862
  if (!item.id)
146683
146863
  return;
146684
146864
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146685
- } }, settlementActionLabel)) : null))),
146865
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146686
146866
  !isLastItem && React__default.createElement(Divider$1, { component: "li" })));
146687
146867
  });
146688
146868
  const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146705,14 +146885,18 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146705
146885
  *
146706
146886
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146707
146887
  */
146708
- const headerHeight = isMobile ? 55 : 64;
146888
+ const headerHeight = 64;
146709
146889
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146710
146890
  periodInputValue ||
146711
146891
  onPeriodInputChange ||
146712
146892
  onResetToCurrentPeriod);
146713
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146714
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146715
- const contentOffset = filterHeight + cardHeight + 16;
146893
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146894
+ const cardHeight = 96;
146895
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146896
+ const amountLabel = totalAmount.toLocaleString("pt-BR", {
146897
+ style: "currency",
146898
+ currency: "BRL",
146899
+ });
146716
146900
  const outcomes = useMemo(() => (Array.isArray(dataSource.outcomes) ? dataSource.outcomes : []), [dataSource.outcomes]);
146717
146901
  return (React__default.createElement(Box$1, { sx: {
146718
146902
  display: "flex",
@@ -146720,10 +146904,12 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146720
146904
  minHeight: "100vh",
146721
146905
  backgroundColor: theme.palette.background.default,
146722
146906
  position: "relative",
146723
- pb: isMobile ? 2 : 0,
146907
+ pb: 0,
146724
146908
  } },
146725
- React__default.createElement(PageHeader$2, { title: "Sa\u00EDdas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true }),
146726
- React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146909
+ React__default.createElement(PageHeader$2, { title: "Sa\u00EDdas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146910
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146911
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || "-", amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "outcome" }))) : null,
146912
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146727
146913
  position: "fixed",
146728
146914
  left: 0,
146729
146915
  right: 0,
@@ -146759,10 +146945,10 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146759
146945
  style: "currency",
146760
146946
  currency: "BRL",
146761
146947
  })
146762
- : `R$: ${amount}` })))),
146948
+ : `R$: ${amount}` }))))),
146763
146949
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146764
146950
  // push content below the fixed header + card
146765
- paddingTop: `${contentOffset}px`,
146951
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146766
146952
  // ensure content can scroll beneath fixed card
146767
146953
  position: "relative", zIndex: 0 }) },
146768
146954
  outcomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146786,13 +146972,8 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146786
146972
  var _a, _b;
146787
146973
  return (React__default.createElement(OutcomeListItem, { key: `${(_a = out.date) !== null && _a !== void 0 ? _a : ""}-${idx}-${(_b = out.amount) !== null && _b !== void 0 ? _b : ""}`, item: out, idx: idx, isLastItem: idx === outcomes.length - 1, formatCurrency: formatCurrency, formatDate: formatDate, getAccountName: getAccountName, onSelect: onSelect, canConfirmTransactions: canConfirmTransactions, isUpdatingSettlementStatus: isUpdatingSettlementStatus, onToggleSettlementStatus: onToggleSettlementStatus }));
146788
146974
  }))),
146789
- isMobile && (React__default.createElement(QuotaGuard, { feature: "outcomes", behavior: "hide" },
146790
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Sa\u00EDda", title: "Adicionar Sa\u00EDda", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: {
146791
- position: "fixed",
146792
- bottom: 16,
146793
- right: 16,
146794
- zIndex: theme.zIndex.fab,
146795
- } },
146975
+ isMobile && outcomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "outcomes", behavior: "hide" },
146976
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Sa\u00EDda", title: "Adicionar Sa\u00EDda", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
146796
146977
  React__default.createElement(Add$1, null)))))));
146797
146978
  };
146798
146979
  var OutcomeListPage$1 = React__default.memo(OutcomeListPage);
@@ -156866,24 +157047,23 @@ const AttendanceInsightsMobileList = ({ mediums }) => {
156866
157047
  return (React__default.createElement(Stack$1, { spacing: LIST_GAP }, mediums.map((medium) => {
156867
157048
  var _a;
156868
157049
  return (React__default.createElement(Paper$1, { key: medium.mediumId, variant: "outlined", sx: LIST_CARD_CONTENT_SX },
156869
- React__default.createElement(Stack$1, { spacing: LIST_GAP },
156870
- React__default.createElement(Stack$1, { direction: "row", spacing: LIST_GAP, alignItems: "center" },
156871
- React__default.createElement(Avatar$1, { src: (_a = medium.mediumAvatarUrl) !== null && _a !== void 0 ? _a : undefined, alt: medium.mediumName, sx: { width: 32, height: 32 } }, medium.mediumName.charAt(0).toUpperCase()),
156872
- React__default.createElement(Typography$1, { fontWeight: 600, noWrap: true }, medium.mediumName)),
156873
- React__default.createElement(Stack$1, { direction: "row", spacing: 0.75, flexWrap: "wrap", useFlexGap: true },
156874
- React__default.createElement(Chip$1, { size: "small", label: `Convites: ${medium.invites}` }),
156875
- React__default.createElement(Chip$1, { size: "small", label: `Confirmados: ${medium.confirmed}` }),
156876
- React__default.createElement(Chip$1, { size: "small", label: `Presentes: ${medium.present}` }),
156877
- React__default.createElement(Chip$1, { size: "small", label: `Ausentes: ${medium.absent}` })),
156878
- React__default.createElement(Box$1, null,
156879
- React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" },
156880
- "Confirma\u00E7\u00E3o: ",
156881
- medium.confirmationRate,
156882
- "% | Presen\u00E7a:",
157050
+ React__default.createElement(Stack$1, { direction: "row", spacing: LIST_GAP, alignItems: "center" },
157051
+ React__default.createElement(Avatar$1, { src: (_a = medium.mediumAvatarUrl) !== null && _a !== void 0 ? _a : undefined, alt: medium.mediumName, sx: { width: 32, height: 32 } }, medium.mediumName.charAt(0).toUpperCase()),
157052
+ React__default.createElement(Stack$1, { sx: { minWidth: 0 } },
157053
+ React__default.createElement(Typography$1, { fontWeight: 600, noWrap: true }, medium.mediumName),
157054
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157055
+ medium.invites,
157056
+ " conv. \u00B7 ",
157057
+ medium.confirmed,
157058
+ " conf."),
157059
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157060
+ medium.present,
157061
+ " pres. \u00B7 ",
157062
+ medium.absent,
157063
+ " aus. \u00B7",
156883
157064
  " ",
156884
157065
  medium.presenceRate,
156885
- "% | Gap: ",
156886
- medium.absenceGap)))));
157066
+ "%")))));
156887
157067
  })));
156888
157068
  };
156889
157069
 
@@ -158437,9 +158617,19 @@ const sortOptions = [
158437
158617
  { value: "createdAt_desc", label: "Mais recentes" },
158438
158618
  { value: "createdAt_asc", label: "Mais antigos" },
158439
158619
  ];
158620
+ const InventoryCompactRow = ({ item, isLast, onSelect }) => {
158621
+ var _a, _b, _c, _d;
158622
+ const statusLabel = (_a = statusMap[item.status]) === null || _a === void 0 ? void 0 : _a.label;
158623
+ const meta = [item.location, statusLabel].filter(Boolean).join(" · ");
158624
+ return (React__default.createElement(CompactListRow, { title: item.name, meta: meta || undefined, isLast: isLast, testId: `inventory-item-${item.id}`, onClick: () => onSelect(item.id), leading: React__default.createElement(Avatar$1, { src: (_b = item.imageUrl) !== null && _b !== void 0 ? _b : undefined, alt: "", sx: { width: 40, height: 40 } }, ((_d = (_c = item.name) === null || _c === void 0 ? void 0 : _c.charAt(0)) !== null && _d !== void 0 ? _d : "").toUpperCase()), trailing: React__default.createElement(Typography$1, { variant: "body2", fontWeight: 600, sx: { whiteSpace: "nowrap" } },
158625
+ item.quantity,
158626
+ " ",
158627
+ item.unit) }));
158628
+ };
158440
158629
  // --- Main Inventory List Page ---
158441
158630
  const InventoryListPage = (props) => {
158442
158631
  const theme = useTheme$1();
158632
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
158443
158633
  const { data, fns } = useInventoryListPage(props);
158444
158634
  const drawerValue = {
158445
158635
  status: data.selectedStatus,
@@ -158463,7 +158653,7 @@ const InventoryListPage = (props) => {
158463
158653
  backgroundColor: theme.palette.background.default,
158464
158654
  position: "relative",
158465
158655
  }, "data-testid": "inventory-list-page", "data-cy": "inventory-list-page" },
158466
- React__default.createElement(PageHeader$2, { title: "Invent\u00E1rio", onBack: fns.handleBack, showAddButton: data.canAdd, onAdd: data.canAdd ? fns.handleAddItem : undefined, addLabel: "Adicionar" }),
158656
+ React__default.createElement(PageHeader$2, { title: "Invent\u00E1rio", onBack: fns.handleBack, showAddButton: data.canAdd, hideAddButtonOnMobile: true, onAdd: data.canAdd ? fns.handleAddItem : undefined, addLabel: "Adicionar" }),
158467
158657
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
158468
158658
  React__default.createElement(Box$1, { sx: {
158469
158659
  display: "flex",
@@ -158505,8 +158695,13 @@ const InventoryListPage = (props) => {
158505
158695
  pb: LIST_CONTENT_BOTTOM_PADDING,
158506
158696
  }, "data-testid": "inventory-list-content", "data-cy": "inventory-list-content" }, data.items.length === 0 ? (React__default.createElement(InventoryEmptyState, { hasActiveFilters: data.hasActiveFilters, onClearFilters: data.hasActiveFilters ? fns.handleClearFilters : undefined, onAdd: data.canAdd && !data.hasActiveFilters
158507
158697
  ? fns.handleAddItem
158508
- : undefined })) : (React__default.createElement(Fade$1, { in: true },
158509
- React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.items.map((item, index) => (React__default.createElement(InventoryItemCard, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect, onEdit: fns.handleItemEdit })))))))),
158698
+ : undefined })) : (React__default.createElement(Fade$1, { in: true }, isMobile ? (React__default.createElement(Box$1, { sx: {
158699
+ bgcolor: "background.paper",
158700
+ borderRadius: RADIUS.default,
158701
+ border: 1,
158702
+ borderColor: "divider",
158703
+ overflow: "hidden",
158704
+ } }, data.items.map((item, index) => (React__default.createElement(InventoryCompactRow, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.items.map((item, index) => (React__default.createElement(InventoryItemCard, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect, onEdit: fns.handleItemEdit }))))))))),
158510
158705
  React__default.createElement(FilterDrawer, { open: data.isFilterDrawerOpen, onClose: fns.handleCloseFilterDrawer, onOpen: fns.handleToggleFilterDrawer, value: drawerValue, emptyValue: {
158511
158706
  status: "all",
158512
158707
  createdAtSort: data.createdAtSort,
@@ -158520,7 +158715,9 @@ const InventoryListPage = (props) => {
158520
158715
  React__default.createElement(FormControl$1, { fullWidth: true, size: "small" },
158521
158716
  React__default.createElement(InputLabel$1, { id: "inventory-filter-sort-label" }, "Ordena\u00E7\u00E3o"),
158522
158717
  React__default.createElement(Select$1, { labelId: "inventory-filter-sort-label", value: draft.createdAtSort, label: "Ordena\u00E7\u00E3o", onChange: (event) => setDraft(Object.assign(Object.assign({}, draft), { createdAtSort: event.target
158523
- .value })), inputProps: { "data-testid": "inventory-created-at-sort" } }, sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, value: option.value }, option.label))))))))));
158718
+ .value })), inputProps: { "data-testid": "inventory-created-at-sort" } }, sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, value: option.value }, option.label)))))))),
158719
+ data.canAdd && data.items.length > 0 && (React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar item", onClick: fns.handleAddItem, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
158720
+ React__default.createElement(Add$1, null)))));
158524
158721
  };
158525
158722
 
158526
158723
  const DetailSectionCard = ({ icon, title, children, theme, }) => {
@@ -161998,7 +162195,7 @@ objectType({
161998
162195
  const STATUS_TAB_LABELS = {
161999
162196
  ALL: "Todos",
162000
162197
  ACTIVE: "Ativos",
162001
- WAITING_APPROVAL: "Aguardando",
162198
+ WAITING_APPROVAL: "Aguardando aprovação",
162002
162199
  INACTIVE: "Inativos",
162003
162200
  OTHER: "Outros",
162004
162201
  };
@@ -162338,7 +162535,6 @@ const MediumListItem = ({ medium, onSelect, theme }) => {
162338
162535
  const MediumListPage = (props) => {
162339
162536
  var _a;
162340
162537
  const theme = useTheme$1();
162341
- const isCompactScreen = useMediaQuery(theme.breakpoints.down("sm"));
162342
162538
  const { data, fns } = useMediumListPage(props);
162343
162539
  // Sort menu state
162344
162540
  const [sortAnchorEl, setSortAnchorEl] = useState(null);
@@ -162355,17 +162551,12 @@ const MediumListPage = (props) => {
162355
162551
  };
162356
162552
  // Status tabs for PageHeader
162357
162553
  const statusTabs = data.showStatusTabs
162358
- ? data.statusTabs.map((tab) => {
162359
- const compactLabel = isCompactScreen && tab.value === "WAITING_APPROVAL"
162360
- ? "Pend."
162361
- : tab.label;
162362
- return {
162363
- value: tab.value,
162364
- label: tab.value === "WAITING_APPROVAL" && tab.count > 0
162365
- ? `${compactLabel} (${tab.count})`
162366
- : compactLabel,
162367
- };
162368
- })
162554
+ ? data.statusTabs.map((tab) => ({
162555
+ value: tab.value,
162556
+ label: tab.value === "WAITING_APPROVAL" && tab.count > 0
162557
+ ? `${tab.label} (${tab.count})`
162558
+ : tab.label,
162559
+ }))
162369
162560
  : undefined;
162370
162561
  // Guard clause for loading state - show skeleton
162371
162562
  if (data.isLoading) {
@@ -162375,7 +162566,7 @@ const MediumListPage = (props) => {
162375
162566
  minHeight: "100vh",
162376
162567
  backgroundColor: theme.palette.background.default,
162377
162568
  } },
162378
- React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true }),
162569
+ React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
162379
162570
  React__default.createElement(MediumListSkeleton, { count: 6 })));
162380
162571
  }
162381
162572
  return (React__default.createElement(Box$1, { sx: {
@@ -162384,12 +162575,12 @@ const MediumListPage = (props) => {
162384
162575
  minHeight: "100vh",
162385
162576
  backgroundColor: theme.palette.background.default,
162386
162577
  } },
162387
- React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, tabs: statusTabs, selectedTab: data.selectedStatusTab, onTabChange: (value) => fns.handleStatusTabChange(value) }),
162578
+ React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true, tabs: statusTabs, selectedTab: data.selectedStatusTab, onTabChange: (value) => fns.handleStatusTabChange(value) }),
162388
162579
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
162389
162580
  data.showSearch && (React__default.createElement(Box$1, { sx: {
162390
162581
  display: "flex",
162391
- flexDirection: { xs: "column", sm: "row" },
162392
- alignItems: "stretch",
162582
+ flexDirection: "row",
162583
+ alignItems: "center",
162393
162584
  gap: 1,
162394
162585
  mb: 2,
162395
162586
  } },
@@ -162402,7 +162593,7 @@ const MediumListPage = (props) => {
162402
162593
  "aria-label": "Buscar médium",
162403
162594
  sx: {
162404
162595
  borderRadius: RADIUS.default,
162405
- minHeight: { xs: 40, sm: 44 },
162596
+ minHeight: 44,
162406
162597
  backgroundColor: theme.palette.background.paper,
162407
162598
  "& .MuiInputBase-input": {
162408
162599
  fontSize: { xs: "0.9rem", sm: "1rem" },
@@ -162413,9 +162604,9 @@ const MediumListPage = (props) => {
162413
162604
  },
162414
162605
  } }),
162415
162606
  data.showSort && (React__default.createElement(IconButton$1, { onClick: handleSortMenuOpen, sx: {
162416
- alignSelf: { xs: "flex-end", sm: "stretch" },
162417
- width: { xs: 40, sm: 44 },
162418
- height: { xs: 40, sm: "auto" },
162607
+ flexShrink: 0,
162608
+ width: 44,
162609
+ height: 44,
162419
162610
  backgroundColor: theme.palette.background.paper,
162420
162611
  borderRadius: RADIUS.default,
162421
162612
  border: `1px solid ${theme.palette.divider}`,
@@ -162490,19 +162681,9 @@ const MediumListPage = (props) => {
162490
162681
  vertical: "top",
162491
162682
  horizontal: "right",
162492
162683
  } }, data.sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, onClick: () => handleSortSelect(option.value), selected: option.value === data.sortOption }, option.label)))),
162493
- React__default.createElement(QuotaGuard, { feature: "mediums", behavior: "hide" },
162494
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleAddMedium, sx: {
162495
- display: { xs: "flex", sm: "none" },
162496
- position: "fixed",
162497
- bottom: {
162498
- xs: "calc(16px + env(safe-area-inset-bottom, 0px))",
162499
- sm: 24,
162500
- md: 32,
162501
- },
162502
- right: { xs: 16, sm: 24, md: 32 },
162503
- boxShadow: 6,
162504
- } },
162505
- React__default.createElement(BarcodeIcon, null))))));
162684
+ data.filteredMediums.length > 0 && (React__default.createElement(QuotaGuard, { feature: "mediums", behavior: "hide" },
162685
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleAddMedium, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
162686
+ React__default.createElement(BarcodeIcon, null)))))));
162506
162687
  };
162507
162688
 
162508
162689
  const sanitizeBirthDate = (date) => {
@@ -173784,9 +173965,19 @@ const transformToRitual = (bath, originLabel, statusLabel) => {
173784
173965
  scheduledCount: (_d = bath.scheduledCount) !== null && _d !== void 0 ? _d : 0,
173785
173966
  };
173786
173967
  };
173968
+ const RitualBathCompactRow = ({ bath, isLast, originLabel, statusLabel, onSelect, onSchedule }) => {
173969
+ var _a, _b;
173970
+ const meta = [(_a = bath.category) === null || _a === void 0 ? void 0 : _a.name, originLabel, statusLabel]
173971
+ .filter(Boolean)
173972
+ .join(" · ");
173973
+ return (React__default.createElement(CompactListRow, { title: bath.title, meta: meta, isLast: isLast, onClick: () => onSelect(bath.id), leading: React__default.createElement(Avatar$1, { src: (_b = bath.imageUrl) !== null && _b !== void 0 ? _b : undefined, alt: "", sx: { width: 40, height: 40 } },
173974
+ React__default.createElement(Spa, { fontSize: "small" })), trailing: onSchedule ? (React__default.createElement(IconButton$1, { "aria-label": `Agendar ${bath.title}`, onClick: () => onSchedule(bath.id), sx: { width: 44, height: 44 } },
173975
+ React__default.createElement(CalendarMonth$1, null))) : undefined }));
173976
+ };
173787
173977
  const RitualBathListPage = (props) => {
173788
173978
  var _a, _b, _c;
173789
173979
  const theme = useTheme$1();
173980
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
173790
173981
  const { data, fns } = useRitualBathListPage(props);
173791
173982
  const showOriginFilter = data.activeTab === "all" && !data.isTerreiro;
173792
173983
  const drawerValue = Object.assign(Object.assign({}, (data.filters.categoryId !== undefined
@@ -173816,7 +174007,7 @@ const RitualBathListPage = (props) => {
173816
174007
  backgroundColor: theme.palette.background.default,
173817
174008
  position: "relative",
173818
174009
  } },
173819
- React__default.createElement(PageHeader$2, { title: "Banhos Rituais", onBack: fns.handleBack, onAdd: fns.handleBathCreate, addLabel: "Adicionar", showAddButton: data.isAdmin, tabs: tabs, selectedTab: data.activeTab, onTabChange: (value) => fns.handleTabChange(value) }),
174010
+ React__default.createElement(PageHeader$2, { title: "Banhos Rituais", onBack: fns.handleBack, onAdd: fns.handleBathCreate, addLabel: "Adicionar", showAddButton: data.isAdmin, hideAddButtonOnMobile: true, tabs: tabs, selectedTab: data.activeTab, onTabChange: (value) => fns.handleTabChange(value) }),
173820
174011
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), { flex: 1 }) },
173821
174012
  React__default.createElement(Box$1, { sx: {
173822
174013
  display: "flex",
@@ -173885,8 +174076,14 @@ const RitualBathListPage = (props) => {
173885
174076
  data.hasActiveFilters ? (React__default.createElement(Button$1, { variant: "outlined", onClick: fns.handleClearFilters, startIcon: React__default.createElement(Clear$1, null) }, "Limpar filtros")) : (data.isAdmin && (React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleBathCreate }, "Criar banho ritual"))))),
173886
174077
  !data.isLoading && !data.error && data.ritualBaths.length > 0 && (React__default.createElement(Box$1, { sx: { pb: LIST_CONTENT_BOTTOM_PADDING } },
173887
174078
  React__default.createElement(InfiniteScroll, { hasNextPage: data.hasNextPage, isFetchingNextPage: data.isFetchingNextPage, onLoadMore: fns.handleLoadMore, threshold: 200 },
173888
- React__default.createElement(Grid$1, { container: true, spacing: LIST_GAP }, data.ritualBaths.map((bath) => (React__default.createElement(Grid$1, { item: true, xs: 12, key: bath.id },
173889
- React__default.createElement(RitualCard, { ritual: transformToRitual(bath, fns.getOriginLabel(bath.origin), fns.getStatusLabel(bath.status)), onClick: () => fns.handleBathSelect(bath.id), onSchedule: fns.handleScheduleBath }))))),
174079
+ isMobile ? (React__default.createElement(Box$1, { sx: {
174080
+ bgcolor: "background.paper",
174081
+ borderRadius: RADIUS.default,
174082
+ border: 1,
174083
+ borderColor: "divider",
174084
+ overflow: "hidden",
174085
+ } }, data.ritualBaths.map((bath, index) => (React__default.createElement(RitualBathCompactRow, { key: bath.id, bath: bath, isLast: index === data.ritualBaths.length - 1, originLabel: fns.getOriginLabel(bath.origin), statusLabel: fns.getStatusLabel(bath.status), onSelect: fns.handleBathSelect, onSchedule: fns.handleScheduleBath }))))) : (React__default.createElement(Grid$1, { container: true, spacing: LIST_GAP }, data.ritualBaths.map((bath) => (React__default.createElement(Grid$1, { item: true, xs: 12, key: bath.id },
174086
+ React__default.createElement(RitualCard, { ritual: transformToRitual(bath, fns.getOriginLabel(bath.origin), fns.getStatusLabel(bath.status)), onClick: () => fns.handleBathSelect(bath.id), onSchedule: fns.handleScheduleBath })))))),
173890
174087
  data.isFetchingNextPage && (React__default.createElement(Box$1, { sx: {
173891
174088
  display: "flex",
173892
174089
  justifyContent: "center",
@@ -173895,13 +174092,8 @@ const RitualBathListPage = (props) => {
173895
174092
  } },
173896
174093
  React__default.createElement(CircularProgress$1, { size: 28 }))),
173897
174094
  !data.hasNextPage && data.ritualBaths.length > 0 && (React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { textAlign: "center", py: 2 } }, "Todos os banhos foram carregados")))))),
173898
- data.isAdmin && (React__default.createElement(QuotaGuard, { feature: "baths", behavior: "hide" },
173899
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Criar banho ritual", onClick: fns.handleBathCreate, sx: {
173900
- position: "fixed",
173901
- bottom: { xs: 16, sm: 24 },
173902
- right: { xs: 16, sm: 24 },
173903
- zIndex: theme.zIndex.speedDial,
173904
- } },
174095
+ data.isAdmin && data.ritualBaths.length > 0 && (React__default.createElement(QuotaGuard, { feature: "baths", behavior: "hide" },
174096
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Criar banho ritual", onClick: fns.handleBathCreate, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
173905
174097
  React__default.createElement(Add$1, null)))),
173906
174098
  React__default.createElement(FilterDrawer, { open: data.isFilterDrawerOpen, onClose: fns.handleCloseFilterDrawer, onOpen: fns.handleToggleFilterDrawer, value: drawerValue, emptyValue: {}, countActiveFilters: countRitualBathDrawerFilters, "data-testid": "ritual-bath-filter-drawer", onFilter: (filters) => {
173907
174099
  fns.handleCategoryFilter(filters.categoryId);
@@ -195613,5 +195805,5 @@ var index_es = /*#__PURE__*/Object.freeze({
195613
195805
  vectorsRatio: vectorsRatio
195614
195806
  });
195615
195807
 
195616
- export { ACTIVITY_STEP_ORDER, ALSO_EXPERIENCED_LABEL, AVATAR_SIZE_CONFIG, AcademyCertificatePreview, AcademyModulePage, AcademyPage, AccessBlockedPage, AccountOptionSchema, BasicInfoSchema as ActivityBasicInfoSchema, ActivityChatInsumosPicker, ActivityChatMembersPicker, ActivityCheckinWindowSchema, ActivityDetailPage$1 as ActivityDetailPage, ActivityEditPage, ActivityFormChatSummaryCard, InsumosSelectionSchema$1 as ActivityInsumosSelectionSchema, ActivityListPage, MembersSelectionSchema as ActivityMembersSelectionSchema, ActivityOnboardingPage, TemplateSchema as ActivityTemplateSchema, TimeSelectionSchema as ActivityTimeSelectionSchema, AddMediumByQRCodePage, AddressInfoSchema, AddressPage, AffiliateProgramPage, AlsoExperiencedButton, AttendanceCheckinCta$1 as AttendanceCheckinCta, AttendanceCheckinDialog, AttendanceCheckinEntryPage, AttendanceInsightsPage, AvatarWithBadge, BADGE_SIZE_CONFIG, BADGE_TIER_COLORS, BADGE_TIER_CONFIG, BADGE_TIER_LABELS, BADGE_TYPE_LABELS, BANK_OPTIONS, BANNER_GRADIENT_KEYS, BANNER_GRADIENT_PRESETS, BRAZILIAN_STATES$1 as BRAZILIAN_STATES, BadgeProgressSchema, BadgeTierSchema$2 as BadgeTierSchema, BadgesPage, BadgeInfoSchema as BadgesPageBadgeInfoSchema, BadgeTierSchema as BadgesPageBadgeTierSchema, BadgeTypeSchema as BadgesPageBadgeTypeSchema, BadgesPagePropsSchema, BathCategorySchema$2 as BathCategorySchema, BlockDialog, BrazilianStateUFSchema, CARD_CONTENT_STYLES, CATEGORY_CONFIG, CATEGORY_LABELS, CREATE_EXPERIENCE_STEP_LABELS, CREATE_EXPERIENCE_STEP_ORDER, CREATE_QUESTION_STEP_LABELS, CREATE_QUESTION_STEP_ORDER, CellphoneInput, CellphoneInputPropsSchema, CompletenessCard, ConnectionButton, ContactArraySchema, ContactPage, ContactPagePropsSchema, ContactSchema, ContactSectionCardPropsSchema, ContributionImpactCard, CopyTargetSchema, CreateExperiencePage, CreateExperienceValuesSchema, CreateIngressoPage, CreateQuestionPage, CreateQuestionValuesSchema, CredentialsApiErrorSchema, CredentialsDataSchema, CredentialsFormStateSchema, CredentialsPage, CredentialsPagePropsSchema, CredentialsValidationErrorsSchema, CustomBannerGradientPresetSchema, DAILY_MESSAGE_POOL, DEFAULT_BANNER_GRADIENT_KEY, DEFAULT_HOME_WIDGET_ORDER, DEFAULT_HOME_WIDGET_VISIBILITY, DailyRitualCard, DescriptionBox$3 as DescriptionBox, DetailedPermissionSchema, EMPTY_ELEMENT_SIZE, EMPTY_ELEMENT_SIZE as EMPTY_SLOT_SIZE, EVENT_STEP_ORDER, EditEventPage, EditJourneyPage, EventAISuggestionsPage, EventBasicInfoSchema, EventChatActivitiesPicker, EventChatInsumosPicker, EventChatLocationPicker, EventChatMembersPicker, EventChatTypePicker, EventCheckinWindowSchema, EventDateTimeSchema, EventDetailPage$1 as EventDetailPage, EventFormChatSummaryCard, EventFormValuesSchema, InsumosSelectionSchema as EventInsumosSelectionSchema, EventLocationSchema, EventOnboardingPage, EventParticipantsSchema, EventProfileBlockedPage, EventPublicationFormChatSummaryCard, EventTicketingManagementPage, EventsPage, ExperienceCard, ExperienceCategoryBadge, ExperienceCategorySchema, ExperienceCommentRow, ExperienceCommentSchema, ExperienceCommentsSheet, ExperienceComposer, ExperienceDetailPage, ExperienceDetailView, ExperienceEngageMenu, ExperiencePostTypeBadge, ExperiencePostTypeSchema, ExperienceReactionBar, ExperienceReactionTypeSchema, ExperienceSchema, ExpiredLinkPage, FORM_CONFIG, FacebookAuthButton, FilterDrawerShellPropsSchema, FinanceMetricCard$1 as FinanceMetricCard, FinancialAccountPage, FinancialAccountsList$1 as FinancialAccountsList, FinancialOverviewCard, FinancialRegisterPage, FinancialTransparencyPage, ForbiddenPage, ForgotPasswordPage, FormChatAssistant, FormChatListSelect, FormChatPickerDrawer, FormChatSelectionBar, GLOW_EFFECT, GamificationBadgeSchema, GamificationBadgeTierEnum, GamificationBadgeTypeEnum, GamificationCard, GamificationCardPropsSchema, GamificationHelpPage, GamificationHelpPagePropsSchema, GamificationHelpTopicSchema, GamificationSummarySchema, GoogleAuthButton, HOME_BELL_NOTIFICATION_LIMIT, HOME_MEASURE_SLOTS, HOME_WIDGETS_CATALOG, HomePage, Image$1 as Image, ImageButton, IncomeListPage$1 as IncomeListPage, IncomingFinancialPage, InfiniteScroll, InfiniteScrollPropsSchema, InstallPrompt, InsumosAvatarGroup, InventoryItemDetail$1 as InventoryItemDetailPage, InventoryItemOnboardingPage, InventoryListItemPage, InventoryListPage, InviteCard$1 as InviteCard, InviteLandingPage, InviteLandingPagePropsSchema, InviteLandingViewStateSchema, InviteTerreiroInfoSchema, JoinTerreiroPage, JourneyProfile, JourneyProfilePage, LAYOUT, LabeledBrazilianStateSelect, LabeledBrazilianStateSelectPropsSchema, LabeledDatePickerPropsSchema, LabeledFieldHeaderPropsSchema, LabeledMinuteInput, LabeledMonthPickerPropsSchema, LabeledTextField$1 as LabeledTextField, LabeledTimePicker, LeaderboardPage, LeaderboardPagePropsSchema, LoadMoreResultSchema, Loading, LunarEclipseSchema, MeasuredLayoutProvider, MediumBadgeSchema, MediumFinancialTransparencyPage, MediumHubPage, MediumListPage, MediumPage, MediumPointsSchema, MediumProfilePage, MediumProfileViewPage$1 as MediumProfileViewPage, MediumStatus$1 as MediumStatus, MemberListItem$1 as MemberListItem, MonthlyFeeInfoSchema, MonthlyFeePage, MonthlyFeePaymentsManagementPage, MoonApiResponseSchema, MoonCard, MoonCardContent, MoonCardPropsSchema, MoonCardSkeleton, MoonDataSchema, MoonDetailedSchema, MoonEventsSchema, MoonPositionSchema, MoonZodiacSchema, MyPermissionsDetailedSchema, MyPermissionsPage, MyPermissionsPagePropsSchema, NearbyTerreiroSearchPage, NotFoundPage, NotificationSettingsPage, NotificationSettingsPagePropsSchema, NotificationsPage, ONBOARDING_TERREIRO_STEPS, ORIGIN_LABELS, OnboardingFormChatPanel, OnboardingFormChatSummaryCard, OnboardingIntroModal, OnboardingMediumPage, OnboardingPage, OnboardingTerreiroPage$1 as OnboardingTerreiroPage, OnboardingTerreiroPagePropsSchema, OutcomeListPage$1 as OutcomeListPage, OutgoingFinancialPage, PAYMENT_METHOD_OPTIONS$1 as PAYMENT_METHOD_OPTIONS, PIX_KEY_TYPE_OPTIONS, POST_TYPE_LABELS, PROFILE_SECTION_CONFIG, PROFILE_SECTION_WEIGHTS, PWAUpdatePromptUI, PageHeader$2 as PageHeader, PaginationInfoSchema, ParticipationResponseButtons$1 as ParticipationResponseButtons, ParticipationStatusBadge$1 as ParticipationStatusBadge, ParticipationStatusLabels, PasskeyCredentialSchema, PasskeyEnrollmentPrompt, PasskeyLoginDialog, PasswordInfoSchemaWithConfirmation, PasswordVisibilitySchema, PaymentStatusBanner, PeerMessageList, PendingApprovalBlockedPage, PermissionSelector, PermissionStatsSchema, PersonalInfoSchema, PhaseEventSchema, PlanChangePayloadSchema, PlanManagementPage, PlanManagementPagePropsSchema, PointsSummarySchema, PositionInfoSchema, PostGiraPrompt, PrivacySelector, ProfileCompletenessCard, ProfileDetailsPage, PublicEventTicketPage, PublicExperiencePreviewSchema, PublicProfilePreviewSchema, PublicQuestionPreviewSchema, PublicSocialPreviewDataSchema, PublicSocialPreviewPage, PublicTerreiroAgendaPage, QUESTION_SOURCE_LABELS, QUICK_ONBOARDING_TERREIRO_STEPS, QUICK_TERREIRO_ONBOARDING_FIELDS_BY_STEP, QrAnalyticsEventNameSchema, QrLandingPage, QrLandingPagePropsSchema, QrScannerSurface$1 as QrScannerSurface, QrTrackingEventSchema, QrTrackingPayloadSchema, QrVariantSchema, QuestionAnswerCard, QuestionAnswerSchema, QuestionAnswersSheet, QuestionCard, QuestionComposer, QuestionDetailPage, QuestionSchema, QuestionSourceBadge, QuestionSourceSchema, QuestionsPage, QuickActionSchema$1 as QuickActionSchema, QuickActions, QuickActionsPropsSchema, QuickMediumOnboardingFormStateSchema, QuickPersonalInfoSchema, QuickPersonalInfoStep, QuickTerreiroOnboardingFormStateSchema, QuickTerreiroPersonalInfoSchema, QuickTerreiroStepValidationSchemas, QuotaBehaviorSchema, QuotaGuard, QuotaGuardPropsSchema, QuotaStatusSchema, QuotaSummaryCard, QuotaSummaryCardPropsSchema, RADIUS, RANKING_PERIOD_LABELS, RANKING_SCOPE_LABELS, REACTION_LABELS, REPORT_REASON_LABELS, RankingEntrySchema, RankingPeriodEnum, RankingResultSchema, RankingScopeEnum, ReasonDialog$1 as ReasonDialog, ReasonDialogPropsSchema, ReligionSchema, ReportDialog, ResetPasswordPage, BasicInfoStepSchema as RitualBathBasicInfoStepSchema, RitualBathDetailPage$1 as RitualBathDetailPage, RitualBathDetailPagePropsSchema, RitualBathDetailSchema, RitualBathFilterSchema, RitualBathFormValuesSchema, RitualBathIngredientSchema$2 as RitualBathIngredientSchema, IngredientsStepSchema as RitualBathIngredientsStepSchema, RitualBathItemSchema, BathCategorySchema$1 as RitualBathListCategorySchema, RitualBathListPage, RitualBathOccurrenceSchema, RitualBathOnboardingPage, RitualBathOriginSchema, OriginStepSchema as RitualBathOriginStepSchema, RitualBathScheduleFormSchema, RitualBathSchedulePage, RitualBathSchedulePagePropsSchema, RitualBathScheduleSummarySchema, RitualBathStatusSchema, RitualBathStepSchema$2 as RitualBathStepSchema, RitualBathStepTypeSchema, StepsStepSchema as RitualBathStepsStepSchema, RitualCard, RoleFormPage, RoleFormValuesSchema, RoleInfoSchema, RoleManagementPage, RoleSchema, SKELETON_SIZES, SOCIAL_BIO_MAX_LENGTH, SOCIAL_DISPLAY_NAME_MAX_LENGTH, SOCIAL_HOME_BOTTOM_NAV_CLEARANCE, SOCIAL_HOME_BOTTOM_NAV_FLOAT_MB, SOCIAL_HOME_BOTTOM_NAV_HEIGHT, SOCIAL_HOME_HEADER_HEIGHT, SOCIAL_ONBOARDING_INTRO_STEPS, SOCIAL_ONBOARDING_STEP_LABELS, SOCIAL_ONBOARDING_STEP_ORDER, SOCIAL_TRADITION_MAX_LENGTH, SOCIAL_USERNAME_MAX_LENGTH, STATUS_COLORS, STATUS_LABELS, STEP_ORDER, STEP_TYPE_ICONS, STEP_TYPE_LABELS, ScheduleDateTimeFields$1 as ScheduleDateTimeFields, SelectField$2 as SelectField, ShareDrawerPropsSchema, SharePlatformSchema, ShareSheet, SharedExpensesCard, SigninPage, SignupPage, SimilarExperienceCard, SimilarPage, SimilarPeopleCard, SimilarPersonSchema, SingleContactSchema, SocialAccountDrawer, SocialAuthorSchema, SocialConnectionsPage, SocialConversationPage, SocialConversationPeerSchema, SocialConversationRow, SocialConversationSchema, SocialCreateActionsSheet, SocialDeleteConfirmDialog, SocialDiscoverPage, SocialEditTextDialog, SocialEmptyState, SocialErrorState, SocialFeedItemSchema, SocialHomeBottomNav, SocialHomeCurrentUserSchema, SocialHomeHeader, SocialHomePage, SocialInboxPage, SocialMessageBubble, SocialMessageComposer, SocialMessageDeliveryStatusSchema, SocialMessageSchema, SocialNotificationsPage, SocialOnboardingIntro, SocialOnboardingPage, SocialOnboardingValuesSchema, SocialPrivacySettingsPage, SocialProfileFieldsSchema, SocialProfileSchema, SocialReadOnlyNotice, SocialReportReasonSchema, SocialSavedPage, SocialSkeleton, SocialUnreadIndicator, SocialUsernameSchema, SocialVerificationEarnedCelebration, SocialVerificationProgressSheet, SocialVisibilitySchema, SpiritualFormChatSummaryCard, SpiritualProfilePage, StreakInfoSchema, SubscriptionGuard, SubscriptionProvider, SubscriptionRequiredForMediumPage, SuggestionsCarousel, SupplyPlanBlockerSchema, SupplyPlanCostsSchema, SupplyPlanItemSchema, SupplyPlanMissionSchema, SupplyPlanPage, SupplyPlanPagePropsSchema, SupplyPlanReadinessSchema, SupplyPlanSchema, SupplyPlanSourceActivitySchema, SupplyPlanSourceEventSchema, SupplyPlanSummarySchema, SystemSettingsPage, TERREIRO_COMPLETION_MESSAGES, TERREIRO_ONBOARDING_FIELDS_BY_STEP, TERREIRO_SECTION_CONFIG, TERREIRO_SECTION_WEIGHTS, TOP_BAR_HEIGHTS, TYPOGRAPHY_SCALE, TerreiroFinancialInfoSchema, TerreiroOnboardingApiErrorSchema, TerreiroOnboardingFormStateSchema, TerreiroOnboardingValidationErrorsSchema, TerreiroPersonalInfoSchema, TerreiroPolicyPage, TerreiroPolicyPagePropsSchema, TerreiroProfileDataPage$1 as TerreiroProfileDataPage, TerreiroProfilePage, TerreiroReadonlyProfilePage, TerreiroRegistrationSchema, TerreiroRegistrationWithoutPasswordSchema, TerreiroSchema$2 as TerreiroSchema, TerreiroSearchPage, TerreiroSectionCard, TerreiroSectionCardPropsSchema, TerreiroStatusSchema, TerreiroStepValidationSchemas, TerreiroSubscriptionInfoSchema, ThemeButton, ThemeProvider, TicketVoucherPage, TicketingClaimFormChatSummaryCard, TraditionBadge, UnitCostMetaSchema, UpcomingPhasesSchema, UpgradePrompt, UsageBar, UsageBarPropsSchema, UsageProvider, UsageQuotaPage, UsageQuotaPagePropsSchema, UseInfiniteScrollReturnSchema, VISIBILITY_HELPERS, VISIBILITY_LABELS, ValidationErrorsSchema, VerificationBadge, WhatsAppShareButton, WhatsNewModal, authorDisplayName, brand, buildAcademyCertificatePreviewNode, buildItemReasonText, buildMergedInsumos$1 as buildMergedInsumos, buildMergedMediums$1 as buildMergedMediums, defaultDisplayProps, defaultInputProps, drawerSheetRadius, filterSupplyPlanMissions, formatRelativeTime, formatScheduleDate, formatSecondsAsMinutesLabel, formatCurrency$1 as formatTerreiroCurrency, formatPhone as formatTerreiroPhone, generateAcademyCertificatePdf, getBannerGradient, getCardBaseStyles, getContentMarginTop, getContentPaddingTop, getCustomBannerGradient, getDateString, getDefaultHomeWidgetOrder, getHomeWidgetsForProfile, getReorderableHomeWidgetsForProfile, getSocialBannerSx, getSocialUsernameError, getTopBarExpandedHeight, getTopBarHeight, getTopBarStackHeight, installPromptPropsSchema, isDefaultHomeWidgetOrder, isPasskeySupported, isValidEmail, isValidPassword, mapPasskeyError, mapRawMemberToActivityChatOption, mediumStatusLabelsPtBr, mergeHomeWidgetOrder, mergeHomeWidgetVisibility, mockCalendarActivities, mockCalendarEvents, mockCalendarRitualBaths, mockHomePageProps, mockLoadingHomePageProps, mockMediumHomePageProps, mockMoonData, mockPendingMediumHomePageProps, mockQuickActions, mockRituals, mockSupplyPlanEmpty, mockSupplyPlanSufficientWithDemand, mockSupplyPlanWithCosts, mockSupplyPlanWithoutCosts, mockTerreiros, mockUpcomingEvents, mockUser, moveHomeWidgetInOrder, onboardingIntroModalPropsSchema, onboardingIntroModeSchema, onboardingIntroProfileContextSchema, overlayZIndex, parseScheduleDate, radiusPx, reorderHomeWidgetOrder, resolveExperiencePostType, secondsToRoundedMinutes, startPasskeyAuthentication, startPasskeyRegistration, useAcademyModulePage, useAcademyPage, useAccessBlockedPage, useActivityOnboarding, useAddressSectionCard, useAffiliateProgramPage, useAttendanceCheckinEntryPage, useAttendanceInsightsPage, useAvatarWithBadge, useBadgesPage, useCellphoneInput, useCompletenessCard, useContactPage, useContentClearance, useCredentialsPage, useElementSize, useEventAISuggestionsPage, useFilterDrawer, useFinancialRegister, useFinancialTransparencyPage, useFormChatAssistant, useGamificationCard, useGamificationHelpPage, useHideOnScroll, useHomePage, useInfiniteScroll, useInstallPrompt, useInventoryListItemPage, useInventoryListPage, useInviteLandingPage, useJoinTerreiroPage, useLabeledBrazilianStateSelect, useLeaderboardPage, useMeasureSlot, useMeasuredLayoutContext, useMeasuredSlot, useMediumFinancialTransparencyPage, useMediumHubPage, useMemberListItem, useMonthlyFeePaymentsManagementPage, useMoonCard, useMyPermissionsPage, useNotFoundPage, useNotificationSettingsPage, useOnboardingIntroModal, useOnboardingMedium, useOnboardingPage, useOnboardingTerreiro, useOptionalMeasuredLayoutContext, useOptionalUsageContext, usePWAUpdatePromptUI, usePermissionSelector, usePlanManagementPage, useProfileCompletenessCard, useQrLandingPage, useQuotaGuard, useRitualBathDetailPage, useRitualBathListPage, useRitualBathOnboarding, useRoleFormPage, useRoleManagementPage, useSelectMediumsPage, useSpiritualProfilePage, useSubscription, useSubscriptionContext, useSubscriptionGuard, useSupplyPlanPage, useTerreiroPolicyPage, useTerreiroProfileDataPage, useTerreiroProfilePage$1 as useTerreiroProfilePage, useTerreiroSectionCard, useThemeProvider, useUpgradePrompt, useUsageContext, useUsageQuota, useUsageQuotaPage, useVerificationBadge, useWhatsNewModal, validateEmail$1 as validateEmail, validatePassword$1 as validatePassword, validatePhoneNumber, validateCurrency as validateTerreiroCurrency, validateDueDay as validateTerreiroDueDay, validatePassword as validateTerreiroPassword, validatePasswordConfirmation as validateTerreiroPasswordConfirmation, validatePhone as validateTerreiroPhone, whatsNewAnnouncementSchema, whatsNewModalPropsSchema, whatsNewSlideSchema };
195808
+ export { ACTIVITY_STEP_ORDER, ALSO_EXPERIENCED_LABEL, AVATAR_SIZE_CONFIG, AcademyCertificatePreview, AcademyModulePage, AcademyPage, AccessBlockedPage, AccountOptionSchema, BasicInfoSchema as ActivityBasicInfoSchema, ActivityChatInsumosPicker, ActivityChatMembersPicker, ActivityCheckinWindowSchema, ActivityDetailPage$1 as ActivityDetailPage, ActivityEditPage, ActivityFormChatSummaryCard, InsumosSelectionSchema$1 as ActivityInsumosSelectionSchema, ActivityListPage, MembersSelectionSchema as ActivityMembersSelectionSchema, ActivityOnboardingPage, TemplateSchema as ActivityTemplateSchema, TimeSelectionSchema as ActivityTimeSelectionSchema, AddMediumByQRCodePage, AddressInfoSchema, AddressPage, AffiliateProgramPage, AlsoExperiencedButton, AttendanceCheckinCta$1 as AttendanceCheckinCta, AttendanceCheckinDialog, AttendanceCheckinEntryPage, AttendanceInsightsPage, AvatarWithBadge, BADGE_SIZE_CONFIG, BADGE_TIER_COLORS, BADGE_TIER_CONFIG, BADGE_TIER_LABELS, BADGE_TYPE_LABELS, BANK_OPTIONS, BANNER_GRADIENT_KEYS, BANNER_GRADIENT_PRESETS, BRAZILIAN_STATES$1 as BRAZILIAN_STATES, BadgeProgressSchema, BadgeTierSchema$2 as BadgeTierSchema, BadgesPage, BadgeInfoSchema as BadgesPageBadgeInfoSchema, BadgeTierSchema as BadgesPageBadgeTierSchema, BadgeTypeSchema as BadgesPageBadgeTypeSchema, BadgesPagePropsSchema, BathCategorySchema$2 as BathCategorySchema, BlockDialog, BrazilianStateUFSchema, CARD_CONTENT_STYLES, CATEGORY_CONFIG, CATEGORY_LABELS, CREATE_EXPERIENCE_STEP_LABELS, CREATE_EXPERIENCE_STEP_ORDER, CREATE_QUESTION_STEP_LABELS, CREATE_QUESTION_STEP_ORDER, CellphoneInput, CellphoneInputPropsSchema, CompactListDateBlock, CompactListRow, CompletenessCard, ConnectionButton, ContactArraySchema, ContactPage, ContactPagePropsSchema, ContactSchema, ContactSectionCardPropsSchema, ContributionImpactCard, CopyTargetSchema, CreateExperiencePage, CreateExperienceValuesSchema, CreateIngressoPage, CreateQuestionPage, CreateQuestionValuesSchema, CredentialsApiErrorSchema, CredentialsDataSchema, CredentialsFormStateSchema, CredentialsPage, CredentialsPagePropsSchema, CredentialsValidationErrorsSchema, CustomBannerGradientPresetSchema, DAILY_MESSAGE_POOL, DEFAULT_BANNER_GRADIENT_KEY, DEFAULT_HOME_WIDGET_ORDER, DEFAULT_HOME_WIDGET_VISIBILITY, DailyRitualCard, DescriptionBox$3 as DescriptionBox, DetailedPermissionSchema, EMPTY_ELEMENT_SIZE, EMPTY_ELEMENT_SIZE as EMPTY_SLOT_SIZE, EVENT_STEP_ORDER, EditEventPage, EditJourneyPage, EventAISuggestionsPage, EventBasicInfoSchema, EventChatActivitiesPicker, EventChatInsumosPicker, EventChatLocationPicker, EventChatMembersPicker, EventChatTypePicker, EventCheckinWindowSchema, EventDateTimeSchema, EventDetailPage$1 as EventDetailPage, EventFormChatSummaryCard, EventFormValuesSchema, InsumosSelectionSchema as EventInsumosSelectionSchema, EventLocationSchema, EventOnboardingPage, EventParticipantsSchema, EventProfileBlockedPage, EventPublicationFormChatSummaryCard, EventTicketingManagementPage, EventsPage, ExperienceCard, ExperienceCategoryBadge, ExperienceCategorySchema, ExperienceCommentRow, ExperienceCommentSchema, ExperienceCommentsSheet, ExperienceComposer, ExperienceDetailPage, ExperienceDetailView, ExperienceEngageMenu, ExperiencePostTypeBadge, ExperiencePostTypeSchema, ExperienceReactionBar, ExperienceReactionTypeSchema, ExperienceSchema, ExpiredLinkPage, FORM_CONFIG, FacebookAuthButton, FilterDrawerShellPropsSchema, FinanceMetricCard$1 as FinanceMetricCard, FinancialAccountPage, FinancialAccountsList$1 as FinancialAccountsList, FinancialOverviewCard, FinancialRegisterPage, FinancialTransparencyPage, ForbiddenPage, ForgotPasswordPage, FormChatAssistant, FormChatListSelect, FormChatPickerDrawer, FormChatSelectionBar, GLOW_EFFECT, GamificationBadgeSchema, GamificationBadgeTierEnum, GamificationBadgeTypeEnum, GamificationCard, GamificationCardPropsSchema, GamificationHelpPage, GamificationHelpPagePropsSchema, GamificationHelpTopicSchema, GamificationSummarySchema, GoogleAuthButton, HOME_BELL_NOTIFICATION_LIMIT, HOME_MEASURE_SLOTS, HOME_WIDGETS_CATALOG, HomePage, Image$1 as Image, ImageButton, IncomeListPage$1 as IncomeListPage, IncomingFinancialPage, InfiniteScroll, InfiniteScrollPropsSchema, InstallPrompt, InsumosAvatarGroup, InventoryItemDetail$1 as InventoryItemDetailPage, InventoryItemOnboardingPage, InventoryListItemPage, InventoryListPage, InviteCard$1 as InviteCard, InviteLandingPage, InviteLandingPagePropsSchema, InviteLandingViewStateSchema, InviteTerreiroInfoSchema, JoinTerreiroPage, JourneyProfile, JourneyProfilePage, LAYOUT, LabeledBrazilianStateSelect, LabeledBrazilianStateSelectPropsSchema, LabeledDatePickerPropsSchema, LabeledFieldHeaderPropsSchema, LabeledMinuteInput, LabeledMonthPickerPropsSchema, LabeledTextField$1 as LabeledTextField, LabeledTimePicker, LeaderboardPage, LeaderboardPagePropsSchema, LoadMoreResultSchema, Loading, LunarEclipseSchema, MeasuredLayoutProvider, MediumBadgeSchema, MediumFinancialTransparencyPage, MediumHubPage, MediumListPage, MediumPage, MediumPointsSchema, MediumProfilePage, MediumProfileViewPage$1 as MediumProfileViewPage, MediumStatus$1 as MediumStatus, MemberListItem$1 as MemberListItem, MonthlyFeeInfoSchema, MonthlyFeePage, MonthlyFeePaymentsManagementPage, MoonApiResponseSchema, MoonCard, MoonCardContent, MoonCardPropsSchema, MoonCardSkeleton, MoonDataSchema, MoonDetailedSchema, MoonEventsSchema, MoonPositionSchema, MoonZodiacSchema, MyPermissionsDetailedSchema, MyPermissionsPage, MyPermissionsPagePropsSchema, NearbyTerreiroSearchPage, NotFoundPage, NotificationSettingsPage, NotificationSettingsPagePropsSchema, NotificationsPage, ONBOARDING_TERREIRO_STEPS, ORIGIN_LABELS, OnboardingFormChatPanel, OnboardingFormChatSummaryCard, OnboardingIntroModal, OnboardingMediumPage, OnboardingPage, OnboardingTerreiroPage$1 as OnboardingTerreiroPage, OnboardingTerreiroPagePropsSchema, OutcomeListPage$1 as OutcomeListPage, OutgoingFinancialPage, PAYMENT_METHOD_OPTIONS$1 as PAYMENT_METHOD_OPTIONS, PIX_KEY_TYPE_OPTIONS, POST_TYPE_LABELS, PROFILE_SECTION_CONFIG, PROFILE_SECTION_WEIGHTS, PWAUpdatePromptUI, PageHeader$2 as PageHeader, PaginationInfoSchema, ParticipationResponseButtons$1 as ParticipationResponseButtons, ParticipationStatusBadge$1 as ParticipationStatusBadge, ParticipationStatusLabels, PasskeyCredentialSchema, PasskeyEnrollmentPrompt, PasskeyLoginDialog, PasswordInfoSchemaWithConfirmation, PasswordVisibilitySchema, PaymentStatusBanner, PeerMessageList, PendingApprovalBlockedPage, PermissionSelector, PermissionStatsSchema, PersonalInfoSchema, PhaseEventSchema, PlanChangePayloadSchema, PlanManagementPage, PlanManagementPagePropsSchema, PointsSummarySchema, PositionInfoSchema, PostGiraPrompt, PrivacySelector, ProfileCompletenessCard, ProfileDetailsPage, PublicEventTicketPage, PublicExperiencePreviewSchema, PublicProfilePreviewSchema, PublicQuestionPreviewSchema, PublicSocialPreviewDataSchema, PublicSocialPreviewPage, PublicTerreiroAgendaPage, QUESTION_SOURCE_LABELS, QUICK_ONBOARDING_TERREIRO_STEPS, QUICK_TERREIRO_ONBOARDING_FIELDS_BY_STEP, QrAnalyticsEventNameSchema, QrLandingPage, QrLandingPagePropsSchema, QrScannerSurface$1 as QrScannerSurface, QrTrackingEventSchema, QrTrackingPayloadSchema, QrVariantSchema, QuestionAnswerCard, QuestionAnswerSchema, QuestionAnswersSheet, QuestionCard, QuestionComposer, QuestionDetailPage, QuestionSchema, QuestionSourceBadge, QuestionSourceSchema, QuestionsPage, QuickActionSchema$1 as QuickActionSchema, QuickActions, QuickActionsPropsSchema, QuickMediumOnboardingFormStateSchema, QuickPersonalInfoSchema, QuickPersonalInfoStep, QuickTerreiroOnboardingFormStateSchema, QuickTerreiroPersonalInfoSchema, QuickTerreiroStepValidationSchemas, QuotaBehaviorSchema, QuotaGuard, QuotaGuardPropsSchema, QuotaStatusSchema, QuotaSummaryCard, QuotaSummaryCardPropsSchema, RADIUS, RANKING_PERIOD_LABELS, RANKING_SCOPE_LABELS, REACTION_LABELS, REPORT_REASON_LABELS, RankingEntrySchema, RankingPeriodEnum, RankingResultSchema, RankingScopeEnum, ReasonDialog$1 as ReasonDialog, ReasonDialogPropsSchema, ReligionSchema, ReportDialog, ResetPasswordPage, BasicInfoStepSchema as RitualBathBasicInfoStepSchema, RitualBathDetailPage$1 as RitualBathDetailPage, RitualBathDetailPagePropsSchema, RitualBathDetailSchema, RitualBathFilterSchema, RitualBathFormValuesSchema, RitualBathIngredientSchema$2 as RitualBathIngredientSchema, IngredientsStepSchema as RitualBathIngredientsStepSchema, RitualBathItemSchema, BathCategorySchema$1 as RitualBathListCategorySchema, RitualBathListPage, RitualBathOccurrenceSchema, RitualBathOnboardingPage, RitualBathOriginSchema, OriginStepSchema as RitualBathOriginStepSchema, RitualBathScheduleFormSchema, RitualBathSchedulePage, RitualBathSchedulePagePropsSchema, RitualBathScheduleSummarySchema, RitualBathStatusSchema, RitualBathStepSchema$2 as RitualBathStepSchema, RitualBathStepTypeSchema, StepsStepSchema as RitualBathStepsStepSchema, RitualCard, RoleFormPage, RoleFormValuesSchema, RoleInfoSchema, RoleManagementPage, RoleSchema, SKELETON_SIZES, SOCIAL_BIO_MAX_LENGTH, SOCIAL_DISPLAY_NAME_MAX_LENGTH, SOCIAL_HOME_BOTTOM_NAV_CLEARANCE, SOCIAL_HOME_BOTTOM_NAV_FLOAT_MB, SOCIAL_HOME_BOTTOM_NAV_HEIGHT, SOCIAL_HOME_HEADER_HEIGHT, SOCIAL_ONBOARDING_INTRO_STEPS, SOCIAL_ONBOARDING_STEP_LABELS, SOCIAL_ONBOARDING_STEP_ORDER, SOCIAL_TRADITION_MAX_LENGTH, SOCIAL_USERNAME_MAX_LENGTH, STATUS_COLORS, STATUS_LABELS, STEP_ORDER, STEP_TYPE_ICONS, STEP_TYPE_LABELS, ScheduleDateTimeFields$1 as ScheduleDateTimeFields, SelectField$2 as SelectField, ShareDrawerPropsSchema, SharePlatformSchema, ShareSheet, SharedExpensesCard, SigninPage, SignupPage, SimilarExperienceCard, SimilarPage, SimilarPeopleCard, SimilarPersonSchema, SingleContactSchema, SocialAccountDrawer, SocialAuthorSchema, SocialConnectionsPage, SocialConversationPage, SocialConversationPeerSchema, SocialConversationRow, SocialConversationSchema, SocialCreateActionsSheet, SocialDeleteConfirmDialog, SocialDiscoverPage, SocialEditTextDialog, SocialEmptyState, SocialErrorState, SocialFeedItemSchema, SocialHomeBottomNav, SocialHomeCurrentUserSchema, SocialHomeHeader, SocialHomePage, SocialInboxPage, SocialMessageBubble, SocialMessageComposer, SocialMessageDeliveryStatusSchema, SocialMessageSchema, SocialNotificationsPage, SocialOnboardingIntro, SocialOnboardingPage, SocialOnboardingValuesSchema, SocialPrivacySettingsPage, SocialProfileFieldsSchema, SocialProfileSchema, SocialReadOnlyNotice, SocialReportReasonSchema, SocialSavedPage, SocialSkeleton, SocialUnreadIndicator, SocialUsernameSchema, SocialVerificationEarnedCelebration, SocialVerificationProgressSheet, SocialVisibilitySchema, SpiritualFormChatSummaryCard, SpiritualProfilePage, StreakInfoSchema, SubscriptionGuard, SubscriptionProvider, SubscriptionRequiredForMediumPage, SuggestionsCarousel, SupplyPlanBlockerSchema, SupplyPlanCostsSchema, SupplyPlanItemSchema, SupplyPlanMissionSchema, SupplyPlanPage, SupplyPlanPagePropsSchema, SupplyPlanReadinessSchema, SupplyPlanSchema, SupplyPlanSourceActivitySchema, SupplyPlanSourceEventSchema, SupplyPlanSummarySchema, SystemSettingsPage, TERREIRO_COMPLETION_MESSAGES, TERREIRO_ONBOARDING_FIELDS_BY_STEP, TERREIRO_SECTION_CONFIG, TERREIRO_SECTION_WEIGHTS, TOP_BAR_HEIGHTS, TYPOGRAPHY_SCALE, TerreiroFinancialInfoSchema, TerreiroOnboardingApiErrorSchema, TerreiroOnboardingFormStateSchema, TerreiroOnboardingValidationErrorsSchema, TerreiroPersonalInfoSchema, TerreiroPolicyPage, TerreiroPolicyPagePropsSchema, TerreiroProfileDataPage$1 as TerreiroProfileDataPage, TerreiroProfilePage, TerreiroReadonlyProfilePage, TerreiroRegistrationSchema, TerreiroRegistrationWithoutPasswordSchema, TerreiroSchema$2 as TerreiroSchema, TerreiroSearchPage, TerreiroSectionCard, TerreiroSectionCardPropsSchema, TerreiroStatusSchema, TerreiroStepValidationSchemas, TerreiroSubscriptionInfoSchema, ThemeButton, ThemeProvider, TicketVoucherPage, TicketingClaimFormChatSummaryCard, TraditionBadge, UnitCostMetaSchema, UpcomingPhasesSchema, UpgradePrompt, UsageBar, UsageBarPropsSchema, UsageProvider, UsageQuotaPage, UsageQuotaPagePropsSchema, UseInfiniteScrollReturnSchema, VISIBILITY_HELPERS, VISIBILITY_LABELS, ValidationErrorsSchema, VerificationBadge, WhatsAppShareButton, WhatsNewModal, authorDisplayName, brand, buildAcademyCertificatePreviewNode, buildItemReasonText, buildMergedInsumos$1 as buildMergedInsumos, buildMergedMediums$1 as buildMergedMediums, compactListDateParts, defaultDisplayProps, defaultInputProps, drawerSheetRadius, filterSupplyPlanMissions, formatRelativeTime, formatScheduleDate, formatSecondsAsMinutesLabel, formatCurrency$1 as formatTerreiroCurrency, formatPhone as formatTerreiroPhone, generateAcademyCertificatePdf, getBannerGradient, getCardBaseStyles, getContentMarginTop, getContentPaddingTop, getCustomBannerGradient, getDateString, getDefaultHomeWidgetOrder, getHomeWidgetsForProfile, getReorderableHomeWidgetsForProfile, getSocialBannerSx, getSocialUsernameError, getTopBarExpandedHeight, getTopBarHeight, getTopBarStackHeight, installPromptPropsSchema, isDefaultHomeWidgetOrder, isPasskeySupported, isValidEmail, isValidPassword, mapPasskeyError, mapRawMemberToActivityChatOption, mediumStatusLabelsPtBr, mergeHomeWidgetOrder, mergeHomeWidgetVisibility, mockCalendarActivities, mockCalendarEvents, mockCalendarRitualBaths, mockHomePageProps, mockLoadingHomePageProps, mockMediumHomePageProps, mockMoonData, mockPendingMediumHomePageProps, mockQuickActions, mockRituals, mockSupplyPlanEmpty, mockSupplyPlanSufficientWithDemand, mockSupplyPlanWithCosts, mockSupplyPlanWithoutCosts, mockTerreiros, mockUpcomingEvents, mockUser, moveHomeWidgetInOrder, onboardingIntroModalPropsSchema, onboardingIntroModeSchema, onboardingIntroProfileContextSchema, overlayZIndex, parseScheduleDate, radiusPx, reorderHomeWidgetOrder, resolveExperiencePostType, secondsToRoundedMinutes, startPasskeyAuthentication, startPasskeyRegistration, useAcademyModulePage, useAcademyPage, useAccessBlockedPage, useActivityOnboarding, useAddressSectionCard, useAffiliateProgramPage, useAttendanceCheckinEntryPage, useAttendanceInsightsPage, useAvatarWithBadge, useBadgesPage, useCellphoneInput, useCompletenessCard, useContactPage, useContentClearance, useCredentialsPage, useElementSize, useEventAISuggestionsPage, useFilterDrawer, useFinancialRegister, useFinancialTransparencyPage, useFormChatAssistant, useGamificationCard, useGamificationHelpPage, useHideOnScroll, useHomePage, useInfiniteScroll, useInstallPrompt, useInventoryListItemPage, useInventoryListPage, useInviteLandingPage, useJoinTerreiroPage, useLabeledBrazilianStateSelect, useLeaderboardPage, useMeasureSlot, useMeasuredLayoutContext, useMeasuredSlot, useMediumFinancialTransparencyPage, useMediumHubPage, useMemberListItem, useMonthlyFeePaymentsManagementPage, useMoonCard, useMyPermissionsPage, useNotFoundPage, useNotificationSettingsPage, useOnboardingIntroModal, useOnboardingMedium, useOnboardingPage, useOnboardingTerreiro, useOptionalMeasuredLayoutContext, useOptionalUsageContext, usePWAUpdatePromptUI, usePermissionSelector, usePlanManagementPage, useProfileCompletenessCard, useQrLandingPage, useQuotaGuard, useRitualBathDetailPage, useRitualBathListPage, useRitualBathOnboarding, useRoleFormPage, useRoleManagementPage, useSelectMediumsPage, useSpiritualProfilePage, useSubscription, useSubscriptionContext, useSubscriptionGuard, useSupplyPlanPage, useTerreiroPolicyPage, useTerreiroProfileDataPage, useTerreiroProfilePage$1 as useTerreiroProfilePage, useTerreiroSectionCard, useThemeProvider, useUpgradePrompt, useUsageContext, useUsageQuota, useUsageQuotaPage, useVerificationBadge, useWhatsNewModal, validateEmail$1 as validateEmail, validatePassword$1 as validatePassword, validatePhoneNumber, validateCurrency as validateTerreiroCurrency, validateDueDay as validateTerreiroDueDay, validatePassword as validateTerreiroPassword, validatePasswordConfirmation as validateTerreiroPasswordConfirmation, validatePhone as validateTerreiroPhone, whatsNewAnnouncementSchema, whatsNewModalPropsSchema, whatsNewSlideSchema };
195617
195809
  //# sourceMappingURL=bundle.esm.js.map