gsintegrations 0.0.487 → 0.0.489

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,17 @@ 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
+ overflow: "hidden",
135346
+ } }, 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
135347
  React__default.createElement(Menu$2, { anchorEl: filterAnchorEl, open: Boolean(filterAnchorEl), onClose: handleFilterClose },
135193
135348
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(null) }, "Todas as atividades"),
135194
135349
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(true) }, "Apenas modelos"),
135195
135350
  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
- } },
135351
+ canCreate && !props.hideAddFab && data.activities.length > 0 && (React__default.createElement(QuotaGuard, { feature: "activities", behavior: "hide" },
135352
+ 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
135353
  React__default.createElement(Add$1, null)))))));
135204
135354
  };
135205
135355
 
@@ -142252,6 +142402,8 @@ const TicketVoucherPage = ({ isLoading, errorMessage, code, eventTitle, terreiro
142252
142402
 
142253
142403
  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
142404
  var _a;
142405
+ const theme = useTheme$1();
142406
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
142255
142407
  const [title, setTitle] = useState(publicTitle);
142256
142408
  const [isPublished, setIsPublished] = useState(published);
142257
142409
  const [emailLimit, setEmailLimit] = useState(maxTicketsPerEmail);
@@ -142326,17 +142478,24 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142326
142478
  React__default.createElement(CardContent$1, null,
142327
142479
  React__default.createElement(Stack$1, { spacing: 2 },
142328
142480
  React__default.createElement(Typography$1, { variant: "h6" }, "Check-in na porta"),
142329
- React__default.createElement(Stack$1, { direction: "row", spacing: 1 },
142481
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", spacing: 1, alignItems: isMobile ? "stretch" : "center" },
142330
142482
  React__default.createElement(TextField$1, { label: "Codigo do ingresso", value: checkInCode, onChange: (event) => setCheckInCode(event.target.value), inputProps: { "data-testid": "ticketing-checkin-code" } }),
142331
142483
  React__default.createElement(Button$1, { variant: "contained", onClick: () => onCheckIn === null || onCheckIn === void 0 ? void 0 : onCheckIn(checkInCode), "data-testid": "ticketing-checkin-submit" }, "Validar"),
142332
142484
  canCheckIn ? (React__default.createElement(Button$1, { variant: "outlined", onClick: () => setIsScannerOpen(true), "data-testid": "ticketing-checkin-scan" }, "Escanear QR")) : null),
142333
142485
  checkInMessage ? React__default.createElement(Alert$1, { severity: "success" }, checkInMessage) : null))),
142334
142486
  React__default.createElement(Card$1, null,
142335
142487
  React__default.createElement(CardContent$1, null,
142336
- React__default.createElement(Stack$1, { direction: "row", justifyContent: "space-between", alignItems: "center", sx: { mb: 2 } },
142488
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", justifyContent: "space-between", alignItems: isMobile ? "flex-start" : "center", spacing: 1, sx: { mb: 2 } },
142337
142489
  React__default.createElement(Typography$1, { variant: "h6" }, "Titulares"),
142338
142490
  React__default.createElement(Button$1, { onClick: onExportCsv, "data-testid": "ticketing-export-csv" }, "Exportar CSV")),
142339
- React__default.createElement(Table$1, { size: "small" },
142491
+ 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 } },
142492
+ React__default.createElement(Typography$1, { fontWeight: 600 }, holder.holderName),
142493
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
142494
+ holder.status,
142495
+ holder.holderEmail ? ` · ${holder.holderEmail}` : ""),
142496
+ React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" },
142497
+ holder.code,
142498
+ holder.batchName ? ` · ${holder.batchName}` : "")))))) : (React__default.createElement(Table$1, { size: "small" },
142340
142499
  React__default.createElement(TableHead$1, null,
142341
142500
  React__default.createElement(TableRow$1, null,
142342
142501
  React__default.createElement(TableCell$1, null, "Codigo"),
@@ -142349,7 +142508,7 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142349
142508
  React__default.createElement(TableCell$1, null, holder.holderName),
142350
142509
  React__default.createElement(TableCell$1, null, holder.holderEmail),
142351
142510
  React__default.createElement(TableCell$1, null, holder.batchName),
142352
- React__default.createElement(TableCell$1, null, holder.status)))))))),
142511
+ React__default.createElement(TableCell$1, null, holder.status))))))))),
142353
142512
  React__default.createElement(Dialog$1, { open: isScannerOpen, onClose: () => setIsScannerOpen(false), fullWidth: true, maxWidth: "sm" },
142354
142513
  React__default.createElement(DialogTitle$1, null, "Escanear ingresso"),
142355
142514
  React__default.createElement(DialogContent$1, { dividers: true },
@@ -143222,9 +143381,25 @@ const EventCard = ({ event, isLast, onSelect, onEdit, getEventTypeLabel, theme }
143222
143381
  event.insumos.count,
143223
143382
  ")"))))));
143224
143383
  };
143384
+ const EventCompactRow = ({ event, isLast, onSelect, onEdit, getEventTypeLabel }) => {
143385
+ var _a, _b;
143386
+ const occurrence = (_b = (_a = event.occurrences) === null || _a === void 0 ? void 0 : _a.list) === null || _b === void 0 ? void 0 : _b[0];
143387
+ const dateParts = compactListDateParts(occurrence === null || occurrence === void 0 ? void 0 : occurrence.date);
143388
+ const dateTime = formatEventDateTime(event);
143389
+ const rawTitle = event.title || event.name || "Sem título";
143390
+ const meta = [
143391
+ dateTime.time,
143392
+ event.type ? getEventTypeLabel(event.type) : null,
143393
+ ]
143394
+ .filter(Boolean)
143395
+ .join(" · ");
143396
+ 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 } },
143397
+ React__default.createElement(ArrowForwardIos, { sx: { width: 16 } }))) : undefined }));
143398
+ };
143225
143399
  const EventsPage = (props) => {
143226
143400
  var _a;
143227
143401
  const theme = useTheme$1();
143402
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
143228
143403
  const { data, fns } = useEventsPage(props);
143229
143404
  const periodInputValue = (_a = props.periodInputValue) !== null && _a !== void 0 ? _a : `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, "0")}`;
143230
143405
  // Memoized tab list for maintainability
@@ -143273,7 +143448,13 @@ const EventsPage = (props) => {
143273
143448
  backgroundColor: theme.palette.background.default,
143274
143449
  position: "relative",
143275
143450
  } },
143276
- React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, tabs: tabs.map((status) => ({
143451
+ React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, hideAddButtonOnMobile: true, endAction: props.canExportParticipationReport &&
143452
+ 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: {
143453
+ display: { xs: "inline-flex", sm: "none" },
143454
+ width: 44,
143455
+ height: 44,
143456
+ } },
143457
+ React__default.createElement(Download, null))) : undefined, tabs: tabs.map((status) => ({
143277
143458
  value: status,
143278
143459
  label: data.getStatusLabel(status),
143279
143460
  })), selectedTab: safeSelectedTab, onTabChange: (value) => fns.handleTabChange(value) }),
@@ -143289,7 +143470,7 @@ const EventsPage = (props) => {
143289
143470
  React__default.createElement(Box$1, { sx: { width: { xs: "100%", sm: 260 } } },
143290
143471
  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
143472
  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
143473
+ 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
143474
  ? "Exportando..."
143294
143475
  : "Exportar Participação"))),
143295
143476
  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 +143487,13 @@ const EventsPage = (props) => {
143306
143487
  props.isAdmin && (React__default.createElement(React__default.Fragment, null,
143307
143488
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: SECTION_GAP } }, "Toque no bot\u00E3o + para criar um novo evento"),
143308
143489
  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
- } },
143490
+ 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: {
143491
+ bgcolor: "background.paper",
143492
+ borderRadius: RADIUS.default,
143493
+ overflow: "hidden",
143494
+ } }, 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 }))))))),
143495
+ props.isAdmin && !props.hideAddFab && data.events.length > 0 && (React__default.createElement(QuotaGuard, { feature: "events", behavior: "hide" },
143496
+ 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
143497
  React__default.createElement(Add$1, null)))))));
143318
143498
  };
143319
143499
 
@@ -144362,9 +144542,9 @@ const FinancialAccountsList = (props) => {
144362
144542
  minHeight: "100vh",
144363
144543
  backgroundColor: theme.palette.background.default,
144364
144544
  position: "relative",
144365
- pb: isMobile ? 2 : 0, // Espaço para o FAB no mobile
144545
+ pb: 0,
144366
144546
  } },
144367
- React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true }),
144547
+ React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
144368
144548
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
144369
144549
  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
144550
  React__default.createElement(Stack$1, { spacing: 0.5 },
@@ -144406,12 +144586,7 @@ const FinancialAccountsList = (props) => {
144406
144586
  } },
144407
144587
  isEmpty && (React__default.createElement(EmptyState$2, { onAddAccount: props.onAddAccount, theme: theme })),
144408
144588
  !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
- } },
144589
+ 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
144590
  React__default.createElement(Add$1, null))))));
144416
144591
  };
144417
144592
  var FinancialAccountsList$1 = React__default.memo(FinancialAccountsList);
@@ -146053,11 +146228,11 @@ const IncomeListItem = React__default.memo(function IncomeListItem({ item, idx,
146053
146228
  React__default.createElement(ListItemSecondaryAction$1, null,
146054
146229
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146055
146230
  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) => {
146231
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146057
146232
  event.stopPropagation();
146058
146233
  item.id &&
146059
146234
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146060
- } }, settlementActionLabel)) : null))),
146235
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146061
146236
  !isLastItem && React__default.createElement(Divider$1, { component: "li", variant: "inset" })));
146062
146237
  });
146063
146238
  const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146094,14 +146269,18 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146094
146269
  *
146095
146270
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146096
146271
  */
146097
- const headerHeight = isMobile ? 70 : 80;
146272
+ const headerHeight = 80;
146098
146273
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146099
146274
  periodInputValue ||
146100
146275
  onPeriodInputChange ||
146101
146276
  onResetToCurrentPeriod);
146102
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146103
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146104
- const contentOffset = filterHeight + cardHeight + 16;
146277
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146278
+ const cardHeight = 96;
146279
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146280
+ const amountLabel = totalAmountNumber.toLocaleString("pt-BR", {
146281
+ style: "currency",
146282
+ currency: "BRL",
146283
+ });
146105
146284
  const incomes = useMemo(() => (Array.isArray(dataSource.incomes) ? dataSource.incomes : []), [dataSource.incomes]);
146106
146285
  return (React__default.createElement(Box$1, { sx: {
146107
146286
  display: "flex",
@@ -146111,8 +146290,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146111
146290
  position: "relative",
146112
146291
  //pb: isMobile ? 2 : 0,
146113
146292
  } },
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: {
146293
+ React__default.createElement(PageHeader$2, { title: "Entradas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146294
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146295
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || metricPeriodLabel, amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "income" }))) : null,
146296
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146116
146297
  position: "fixed",
146117
146298
  left: 0,
146118
146299
  right: 0,
@@ -146149,10 +146330,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146149
146330
  style: "currency",
146150
146331
  currency: "BRL",
146151
146332
  })
146152
- : `R$: ${amount}` })))),
146333
+ : `R$: ${amount}` }))))),
146153
146334
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146154
146335
  // push content below the fixed header + card
146155
- paddingTop: `${contentOffset}px`,
146336
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146156
146337
  // ensure content can scroll beneath fixed card
146157
146338
  position: "relative", zIndex: 0 }) },
146158
146339
  incomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146176,13 +146357,8 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146176
146357
  var _a, _b;
146177
146358
  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
146359
  }))),
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
- } },
146360
+ isMobile && incomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "incomes", behavior: "hide" },
146361
+ 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
146362
  React__default.createElement(Add$1, null)))))));
146187
146363
  };
146188
146364
  var IncomeListPage$1 = React__default.memo(IncomeListPage);
@@ -146677,12 +146853,12 @@ const OutcomeListItem = React__default.memo(function OutcomeListItem({ item, idx
146677
146853
  React__default.createElement(ListItemSecondaryAction$1, null,
146678
146854
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146679
146855
  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) => {
146856
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146681
146857
  event.stopPropagation();
146682
146858
  if (!item.id)
146683
146859
  return;
146684
146860
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146685
- } }, settlementActionLabel)) : null))),
146861
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146686
146862
  !isLastItem && React__default.createElement(Divider$1, { component: "li" })));
146687
146863
  });
146688
146864
  const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146705,14 +146881,18 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146705
146881
  *
146706
146882
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146707
146883
  */
146708
- const headerHeight = isMobile ? 55 : 64;
146884
+ const headerHeight = 64;
146709
146885
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146710
146886
  periodInputValue ||
146711
146887
  onPeriodInputChange ||
146712
146888
  onResetToCurrentPeriod);
146713
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146714
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146715
- const contentOffset = filterHeight + cardHeight + 16;
146889
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146890
+ const cardHeight = 96;
146891
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146892
+ const amountLabel = totalAmount.toLocaleString("pt-BR", {
146893
+ style: "currency",
146894
+ currency: "BRL",
146895
+ });
146716
146896
  const outcomes = useMemo(() => (Array.isArray(dataSource.outcomes) ? dataSource.outcomes : []), [dataSource.outcomes]);
146717
146897
  return (React__default.createElement(Box$1, { sx: {
146718
146898
  display: "flex",
@@ -146720,10 +146900,12 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146720
146900
  minHeight: "100vh",
146721
146901
  backgroundColor: theme.palette.background.default,
146722
146902
  position: "relative",
146723
- pb: isMobile ? 2 : 0,
146903
+ pb: 0,
146724
146904
  } },
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: {
146905
+ React__default.createElement(PageHeader$2, { title: "Sa\u00EDdas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146906
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146907
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || "-", amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "outcome" }))) : null,
146908
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146727
146909
  position: "fixed",
146728
146910
  left: 0,
146729
146911
  right: 0,
@@ -146759,10 +146941,10 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146759
146941
  style: "currency",
146760
146942
  currency: "BRL",
146761
146943
  })
146762
- : `R$: ${amount}` })))),
146944
+ : `R$: ${amount}` }))))),
146763
146945
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146764
146946
  // push content below the fixed header + card
146765
- paddingTop: `${contentOffset}px`,
146947
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146766
146948
  // ensure content can scroll beneath fixed card
146767
146949
  position: "relative", zIndex: 0 }) },
146768
146950
  outcomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146786,13 +146968,8 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146786
146968
  var _a, _b;
146787
146969
  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
146970
  }))),
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
- } },
146971
+ isMobile && outcomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "outcomes", behavior: "hide" },
146972
+ 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
146973
  React__default.createElement(Add$1, null)))))));
146797
146974
  };
146798
146975
  var OutcomeListPage$1 = React__default.memo(OutcomeListPage);
@@ -156866,24 +157043,23 @@ const AttendanceInsightsMobileList = ({ mediums }) => {
156866
157043
  return (React__default.createElement(Stack$1, { spacing: LIST_GAP }, mediums.map((medium) => {
156867
157044
  var _a;
156868
157045
  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:",
157046
+ React__default.createElement(Stack$1, { direction: "row", spacing: LIST_GAP, alignItems: "center" },
157047
+ 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()),
157048
+ React__default.createElement(Stack$1, { sx: { minWidth: 0 } },
157049
+ React__default.createElement(Typography$1, { fontWeight: 600, noWrap: true }, medium.mediumName),
157050
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157051
+ medium.invites,
157052
+ " conv. \u00B7 ",
157053
+ medium.confirmed,
157054
+ " conf."),
157055
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157056
+ medium.present,
157057
+ " pres. \u00B7 ",
157058
+ medium.absent,
157059
+ " aus. \u00B7",
156883
157060
  " ",
156884
157061
  medium.presenceRate,
156885
- "% | Gap: ",
156886
- medium.absenceGap)))));
157062
+ "%")))));
156887
157063
  })));
156888
157064
  };
156889
157065
 
@@ -158437,9 +158613,19 @@ const sortOptions = [
158437
158613
  { value: "createdAt_desc", label: "Mais recentes" },
158438
158614
  { value: "createdAt_asc", label: "Mais antigos" },
158439
158615
  ];
158616
+ const InventoryCompactRow = ({ item, isLast, onSelect }) => {
158617
+ var _a, _b, _c, _d;
158618
+ const statusLabel = (_a = statusMap[item.status]) === null || _a === void 0 ? void 0 : _a.label;
158619
+ const meta = [item.location, statusLabel].filter(Boolean).join(" · ");
158620
+ 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" } },
158621
+ item.quantity,
158622
+ " ",
158623
+ item.unit) }));
158624
+ };
158440
158625
  // --- Main Inventory List Page ---
158441
158626
  const InventoryListPage = (props) => {
158442
158627
  const theme = useTheme$1();
158628
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
158443
158629
  const { data, fns } = useInventoryListPage(props);
158444
158630
  const drawerValue = {
158445
158631
  status: data.selectedStatus,
@@ -158463,7 +158649,7 @@ const InventoryListPage = (props) => {
158463
158649
  backgroundColor: theme.palette.background.default,
158464
158650
  position: "relative",
158465
158651
  }, "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" }),
158652
+ 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
158653
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
158468
158654
  React__default.createElement(Box$1, { sx: {
158469
158655
  display: "flex",
@@ -158505,8 +158691,11 @@ const InventoryListPage = (props) => {
158505
158691
  pb: LIST_CONTENT_BOTTOM_PADDING,
158506
158692
  }, "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
158693
  ? 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 })))))))),
158694
+ : undefined })) : (React__default.createElement(Fade$1, { in: true }, isMobile ? (React__default.createElement(Box$1, { sx: {
158695
+ bgcolor: "background.paper",
158696
+ borderRadius: RADIUS.default,
158697
+ overflow: "hidden",
158698
+ } }, 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
158699
  React__default.createElement(FilterDrawer, { open: data.isFilterDrawerOpen, onClose: fns.handleCloseFilterDrawer, onOpen: fns.handleToggleFilterDrawer, value: drawerValue, emptyValue: {
158511
158700
  status: "all",
158512
158701
  createdAtSort: data.createdAtSort,
@@ -158520,7 +158709,9 @@ const InventoryListPage = (props) => {
158520
158709
  React__default.createElement(FormControl$1, { fullWidth: true, size: "small" },
158521
158710
  React__default.createElement(InputLabel$1, { id: "inventory-filter-sort-label" }, "Ordena\u00E7\u00E3o"),
158522
158711
  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))))))))));
158712
+ .value })), inputProps: { "data-testid": "inventory-created-at-sort" } }, sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, value: option.value }, option.label)))))))),
158713
+ 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 }) },
158714
+ React__default.createElement(Add$1, null)))));
158524
158715
  };
158525
158716
 
158526
158717
  const DetailSectionCard = ({ icon, title, children, theme, }) => {
@@ -161998,7 +162189,7 @@ objectType({
161998
162189
  const STATUS_TAB_LABELS = {
161999
162190
  ALL: "Todos",
162000
162191
  ACTIVE: "Ativos",
162001
- WAITING_APPROVAL: "Aguardando",
162192
+ WAITING_APPROVAL: "Aguardando aprovação",
162002
162193
  INACTIVE: "Inativos",
162003
162194
  OTHER: "Outros",
162004
162195
  };
@@ -162338,7 +162529,6 @@ const MediumListItem = ({ medium, onSelect, theme }) => {
162338
162529
  const MediumListPage = (props) => {
162339
162530
  var _a;
162340
162531
  const theme = useTheme$1();
162341
- const isCompactScreen = useMediaQuery(theme.breakpoints.down("sm"));
162342
162532
  const { data, fns } = useMediumListPage(props);
162343
162533
  // Sort menu state
162344
162534
  const [sortAnchorEl, setSortAnchorEl] = useState(null);
@@ -162355,17 +162545,12 @@ const MediumListPage = (props) => {
162355
162545
  };
162356
162546
  // Status tabs for PageHeader
162357
162547
  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
- })
162548
+ ? data.statusTabs.map((tab) => ({
162549
+ value: tab.value,
162550
+ label: tab.value === "WAITING_APPROVAL" && tab.count > 0
162551
+ ? `${tab.label} (${tab.count})`
162552
+ : tab.label,
162553
+ }))
162369
162554
  : undefined;
162370
162555
  // Guard clause for loading state - show skeleton
162371
162556
  if (data.isLoading) {
@@ -162375,7 +162560,7 @@ const MediumListPage = (props) => {
162375
162560
  minHeight: "100vh",
162376
162561
  backgroundColor: theme.palette.background.default,
162377
162562
  } },
162378
- React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true }),
162563
+ React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
162379
162564
  React__default.createElement(MediumListSkeleton, { count: 6 })));
162380
162565
  }
162381
162566
  return (React__default.createElement(Box$1, { sx: {
@@ -162384,12 +162569,12 @@ const MediumListPage = (props) => {
162384
162569
  minHeight: "100vh",
162385
162570
  backgroundColor: theme.palette.background.default,
162386
162571
  } },
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) }),
162572
+ 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
162573
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
162389
162574
  data.showSearch && (React__default.createElement(Box$1, { sx: {
162390
162575
  display: "flex",
162391
- flexDirection: { xs: "column", sm: "row" },
162392
- alignItems: "stretch",
162576
+ flexDirection: "row",
162577
+ alignItems: "center",
162393
162578
  gap: 1,
162394
162579
  mb: 2,
162395
162580
  } },
@@ -162402,7 +162587,7 @@ const MediumListPage = (props) => {
162402
162587
  "aria-label": "Buscar médium",
162403
162588
  sx: {
162404
162589
  borderRadius: RADIUS.default,
162405
- minHeight: { xs: 40, sm: 44 },
162590
+ minHeight: 44,
162406
162591
  backgroundColor: theme.palette.background.paper,
162407
162592
  "& .MuiInputBase-input": {
162408
162593
  fontSize: { xs: "0.9rem", sm: "1rem" },
@@ -162413,9 +162598,9 @@ const MediumListPage = (props) => {
162413
162598
  },
162414
162599
  } }),
162415
162600
  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" },
162601
+ flexShrink: 0,
162602
+ width: 44,
162603
+ height: 44,
162419
162604
  backgroundColor: theme.palette.background.paper,
162420
162605
  borderRadius: RADIUS.default,
162421
162606
  border: `1px solid ${theme.palette.divider}`,
@@ -162490,19 +162675,9 @@ const MediumListPage = (props) => {
162490
162675
  vertical: "top",
162491
162676
  horizontal: "right",
162492
162677
  } }, 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))))));
162678
+ data.filteredMediums.length > 0 && (React__default.createElement(QuotaGuard, { feature: "mediums", behavior: "hide" },
162679
+ 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 }) },
162680
+ React__default.createElement(BarcodeIcon, null)))))));
162506
162681
  };
162507
162682
 
162508
162683
  const sanitizeBirthDate = (date) => {
@@ -173784,9 +173959,19 @@ const transformToRitual = (bath, originLabel, statusLabel) => {
173784
173959
  scheduledCount: (_d = bath.scheduledCount) !== null && _d !== void 0 ? _d : 0,
173785
173960
  };
173786
173961
  };
173962
+ const RitualBathCompactRow = ({ bath, isLast, originLabel, statusLabel, onSelect, onSchedule }) => {
173963
+ var _a, _b;
173964
+ const meta = [(_a = bath.category) === null || _a === void 0 ? void 0 : _a.name, originLabel, statusLabel]
173965
+ .filter(Boolean)
173966
+ .join(" · ");
173967
+ 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 } },
173968
+ 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 } },
173969
+ React__default.createElement(CalendarMonth$1, null))) : undefined }));
173970
+ };
173787
173971
  const RitualBathListPage = (props) => {
173788
173972
  var _a, _b, _c;
173789
173973
  const theme = useTheme$1();
173974
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
173790
173975
  const { data, fns } = useRitualBathListPage(props);
173791
173976
  const showOriginFilter = data.activeTab === "all" && !data.isTerreiro;
173792
173977
  const drawerValue = Object.assign(Object.assign({}, (data.filters.categoryId !== undefined
@@ -173816,7 +174001,7 @@ const RitualBathListPage = (props) => {
173816
174001
  backgroundColor: theme.palette.background.default,
173817
174002
  position: "relative",
173818
174003
  } },
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) }),
174004
+ 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
174005
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), { flex: 1 }) },
173821
174006
  React__default.createElement(Box$1, { sx: {
173822
174007
  display: "flex",
@@ -173885,8 +174070,12 @@ const RitualBathListPage = (props) => {
173885
174070
  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
174071
  !data.isLoading && !data.error && data.ritualBaths.length > 0 && (React__default.createElement(Box$1, { sx: { pb: LIST_CONTENT_BOTTOM_PADDING } },
173887
174072
  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 }))))),
174073
+ isMobile ? (React__default.createElement(Box$1, { sx: {
174074
+ bgcolor: "background.paper",
174075
+ borderRadius: RADIUS.default,
174076
+ overflow: "hidden",
174077
+ } }, 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 },
174078
+ React__default.createElement(RitualCard, { ritual: transformToRitual(bath, fns.getOriginLabel(bath.origin), fns.getStatusLabel(bath.status)), onClick: () => fns.handleBathSelect(bath.id), onSchedule: fns.handleScheduleBath })))))),
173890
174079
  data.isFetchingNextPage && (React__default.createElement(Box$1, { sx: {
173891
174080
  display: "flex",
173892
174081
  justifyContent: "center",
@@ -173895,13 +174084,8 @@ const RitualBathListPage = (props) => {
173895
174084
  } },
173896
174085
  React__default.createElement(CircularProgress$1, { size: 28 }))),
173897
174086
  !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
- } },
174087
+ data.isAdmin && data.ritualBaths.length > 0 && (React__default.createElement(QuotaGuard, { feature: "baths", behavior: "hide" },
174088
+ 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
174089
  React__default.createElement(Add$1, null)))),
173906
174090
  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
174091
  fns.handleCategoryFilter(filters.categoryId);
@@ -195613,5 +195797,5 @@ var index_es = /*#__PURE__*/Object.freeze({
195613
195797
  vectorsRatio: vectorsRatio
195614
195798
  });
195615
195799
 
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 };
195800
+ 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
195801
  //# sourceMappingURL=bundle.esm.js.map