gsintegrations 0.0.486 → 0.0.488

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/bundle.cjs.js +719 -482
  2. package/dist/bundle.cjs.js.map +2 -2
  3. package/dist/bundle.esm.js +717 -483
  4. package/dist/bundle.esm.js.map +2 -2
  5. package/dist/index.d.ts +106 -26
  6. package/dist/types/components/FormChatAssistant/FormChatAssistant.types.d.ts +2 -0
  7. package/dist/types/components/molecules/FinanceMobilePeriodBar/FinanceMobilePeriodBar.d.ts +13 -0
  8. package/dist/types/components/molecules/FinanceMobilePeriodBar/index.d.ts +2 -0
  9. package/dist/types/components/molecules/index.d.ts +1 -0
  10. package/dist/types/components/shared/CompactListRow/CompactListRow.d.ts +19 -0
  11. package/dist/types/components/shared/CompactListRow/index.d.ts +3 -0
  12. package/dist/types/components/shared/index.d.ts +2 -0
  13. package/dist/types/pages/ActivityDetailPage/ActivityDetailPage.d.ts +1 -0
  14. package/dist/types/pages/ActivityDetailPage/ActivityDetailPage.types.d.ts +8 -0
  15. package/dist/types/pages/ActivityDetailPage/useActivityDetailPage.d.ts +1 -0
  16. package/dist/types/pages/ActivityListPage/ActivityListPage.types.d.ts +11 -3
  17. package/dist/types/pages/ActivityListPage/useActivityListPage.d.ts +1 -0
  18. package/dist/types/pages/ActivityOnboardingPage/ActivityOnboarding.types.d.ts +8 -0
  19. package/dist/types/pages/EventDetailPage/EventDetailPage.d.ts +2 -0
  20. package/dist/types/pages/EventDetailPage/EventDetailPage.types.d.ts +27 -0
  21. package/dist/types/pages/EventDetailPage/useEventDetailPage.d.ts +2 -0
  22. package/dist/types/pages/EventOnboardingPage/EventOnboarding.types.d.ts +22 -0
  23. package/dist/types/pages/EventOnboardingPage/components/EventActivitySelectionStep.d.ts +1 -0
  24. package/dist/types/pages/EventsPage/EventsPage.types.d.ts +12 -4
  25. package/dist/types/pages/EventsPage/useEventsPage.d.ts +1 -0
  26. package/dist/types/pages/FinancialAccountsList/FinancialAccountsList.d.ts +3 -3
  27. package/dist/types/pages/FinancialAccountsList/FinancialAccountsList.types.d.ts +6 -6
  28. package/dist/types/pages/HomePage/HomePage.types.d.ts +12 -0
  29. package/dist/types/pages/IncomeListPage/IncomeListPage.d.ts +4 -4
  30. package/dist/types/pages/IncomeListPage/IncomeListPage.types.d.ts +8 -8
  31. package/dist/types/pages/OutcomeListPage/OutcomeListPage.d.ts +4 -4
  32. package/dist/types/pages/OutcomeListPage/OutcomeListPage.types.d.ts +8 -8
  33. package/dist/types/theme/spacing.d.ts +17 -0
  34. package/package.json +1 -1
@@ -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(),
@@ -126868,7 +127061,7 @@ const ActivityFormChatSummaryCard = ({ summary, confirmLabel = "Criar atividade"
126868
127061
  React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Hor\u00E1rio", value: summary.isAllDay
126869
127062
  ? "Dia inteiro"
126870
127063
  : `${formatTime$2(summary.startTime)} – ${formatTime$2(summary.endTime)}` }))) : null,
126871
- summary.checkinStartWindowMinutes !== undefined ? (React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: `${summary.checkinStartWindowMinutes} min antes / ${(_e = summary.checkinEndWindowMinutes) !== null && _e !== void 0 ? _e : 15} min depois` })) : null,
127064
+ summary.qrCheckinEnabled === false ? (React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: "Desativado" })) : summary.checkinStartWindowMinutes !== undefined ? (React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: `${summary.checkinStartWindowMinutes} min antes / ${(_e = summary.checkinEndWindowMinutes) !== null && _e !== void 0 ? _e : 15} min depois` })) : null,
126872
127065
  React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$Z, { fontSize: "small" }), label: "Participantes", value: members }),
126873
127066
  summary.minConfirmedMembers !== undefined ? (React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$Z, { fontSize: "small" }), label: "Qu\u00F3rum m\u00EDnimo", value: String(summary.minConfirmedMembers) })) : null,
126874
127067
  React__default.createElement(SummaryRow$4, { icon: React__default.createElement(default_1$Y, { fontSize: "small" }), label: "Materiais", value: insumos })),
@@ -127016,7 +127209,7 @@ const EventFormChatSummaryCard = ({ summary, confirmLabel = "Criar evento", edit
127016
127209
  React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Hor\u00E1rio", value: summary.isAllDay
127017
127210
  ? "Dia inteiro"
127018
127211
  : `${formatTime$1(summary.startTime)} – ${formatTime$1(summary.endTime)}` }))) : null,
127019
- summary.checkinStartWindowMinutes !== undefined ? (React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: `${summary.checkinStartWindowMinutes} min antes / ${(_g = summary.checkinEndWindowMinutes) !== null && _g !== void 0 ? _g : 15} min depois` })) : null,
127212
+ summary.qrCheckinEnabled === false ? (React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: "Desativado" })) : summary.checkinStartWindowMinutes !== undefined ? (React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$X, { fontSize: "small" }), label: "Check-in", value: `${summary.checkinStartWindowMinutes} min antes / ${(_g = summary.checkinEndWindowMinutes) !== null && _g !== void 0 ? _g : 15} min depois` })) : null,
127020
127213
  React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$14, { fontSize: "small" }), label: "Local", value: formatLocation(summary) }),
127021
127214
  React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$W, { fontSize: "small" }), label: "Atividades", value: activities }),
127022
127215
  React__default.createElement(SummaryRow$3, { icon: React__default.createElement(default_1$Z, { fontSize: "small" }), label: "Participantes", value: members }),
@@ -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",
@@ -133232,27 +133360,31 @@ const ActivityCheckinWindowStep = ({ formState, validationErrors, onChange, setF
133232
133360
  });
133233
133361
  }
133234
133362
  }, [setFieldValue, onChange]);
133363
+ const checkinEnabled = formState.qrCheckinEnabled !== false;
133235
133364
  return (React__default.createElement(Box$1, { sx: { p: { xs: 0.5, sm: 1 } } },
133236
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: { xs: 2, sm: 3 } } },
133237
- "Configure o intervalo de tempo permitido para check-in. O check-in estar\u00E1 dispon\u00EDvel a partir de X minutos ",
133238
- React__default.createElement("strong", null, "antes"),
133239
- " da atividade at\u00E9 Y minutos",
133240
- React__default.createElement("strong", null, " ap\u00F3s"),
133241
- " o in\u00EDcio."),
133242
- React__default.createElement(Alert$1, { severity: "info", icon: React__default.createElement(Info$1, null), sx: { mb: { xs: 2, sm: 3 } } },
133243
- React__default.createElement(Typography$1, { variant: "body2" },
133244
- React__default.createElement("strong", null, "Exemplo:"),
133245
- " Com os valores padr\u00E3o (10 e 15), se a atividade come\u00E7a \u00E0s 19h, o check-in abrir\u00E1 \u00E0s 18h50 e fechar\u00E1 \u00E0s 19h15.")),
133246
- React__default.createElement(Box$1, { sx: { mb: { xs: 2, sm: 3 } } },
133247
- React__default.createElement(LabeledMinuteInput, { name: "checkinStartWindowMinutes", label: "Abrir check-in (minutos antes)", value: formState.checkinStartWindowMinutes, onChange: (value) => updateField("checkinStartWindowMinutes", value), error: validationErrors.checkinStartWindowMinutes, helperText: validationErrors.checkinStartWindowMinutes ||
133248
- "Quantos minutos antes da atividade checar entrada (0-120)", fallbackValue: 10, presets: [10, 20, 30], min: 0, max: 120, "data-testid": "activity-checkin-start-window-input" })),
133249
- React__default.createElement(Box$1, { sx: { mb: { xs: 2, sm: 3 } } },
133250
- React__default.createElement(LabeledMinuteInput, { name: "checkinEndWindowMinutes", label: "Fechar check-in (minutos ap\u00F3s)", value: formState.checkinEndWindowMinutes, onChange: (value) => updateField("checkinEndWindowMinutes", value), error: validationErrors.checkinEndWindowMinutes, helperText: validationErrors.checkinEndWindowMinutes ||
133251
- "Quantos minutos após o início da atividade checar entrada (0-120)", fallbackValue: 15, presets: [10, 20, 30], min: 0, max: 120, "data-testid": "activity-checkin-end-window-input" })),
133252
- React__default.createElement(Box$1, { sx: { p: { xs: 1.5, sm: 2 }, bgcolor: "action.hover", borderRadius: RADIUS.default } },
133253
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
133254
- React__default.createElement("strong", null, "Dica:"),
133255
- " Para atividades ritualisticas, manter a precis\u00E3o \u00E9 importante. Use 10 minutos de abertura e 15 minutos de fechamento como padr\u00E3o para manter a disciplina energ\u00E9tica."))));
133365
+ React__default.createElement(FormControlLabel$1, { control: React__default.createElement(Switch$1, { checked: checkinEnabled, onChange: (_, checked) => updateField("qrCheckinEnabled", checked), inputProps: { "aria-label": "Habilitar check-in" }, "data-testid": "activity-checkin-enabled-switch" }), label: "Habilitar check-in", sx: { mb: 2, ml: 0 } }),
133366
+ !checkinEnabled ? (React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" }, "Esta atividade n\u00E3o ter\u00E1 check-in na porta. A janela e o QR ficam ocultos.")) : null,
133367
+ checkinEnabled ? (React__default.createElement(React__default.Fragment, null,
133368
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: { xs: 2, sm: 3 } } },
133369
+ "Configure o intervalo de tempo permitido para check-in. O check-in estar\u00E1 dispon\u00EDvel a partir de X minutos ",
133370
+ React__default.createElement("strong", null, "antes"),
133371
+ " da atividade at\u00E9 Y minutos",
133372
+ React__default.createElement("strong", null, " ap\u00F3s"),
133373
+ " o in\u00EDcio."),
133374
+ React__default.createElement(Alert$1, { severity: "info", icon: React__default.createElement(Info$1, null), sx: { mb: { xs: 2, sm: 3 } } },
133375
+ React__default.createElement(Typography$1, { variant: "body2" },
133376
+ React__default.createElement("strong", null, "Exemplo:"),
133377
+ " Com os valores padr\u00E3o (10 e 15), se a atividade come\u00E7a \u00E0s 19h, o check-in abrir\u00E1 \u00E0s 18h50 e fechar\u00E1 \u00E0s 19h15.")),
133378
+ React__default.createElement(Box$1, { sx: { mb: { xs: 2, sm: 3 } } },
133379
+ React__default.createElement(LabeledMinuteInput, { name: "checkinStartWindowMinutes", label: "Abrir check-in (minutos antes)", value: formState.checkinStartWindowMinutes, onChange: (value) => updateField("checkinStartWindowMinutes", value), error: validationErrors.checkinStartWindowMinutes, helperText: validationErrors.checkinStartWindowMinutes ||
133380
+ "Quantos minutos antes da atividade checar entrada (0-120)", fallbackValue: 10, presets: [10, 20, 30], min: 0, max: 120, "data-testid": "activity-checkin-start-window-input" })),
133381
+ React__default.createElement(Box$1, { sx: { mb: { xs: 2, sm: 3 } } },
133382
+ React__default.createElement(LabeledMinuteInput, { name: "checkinEndWindowMinutes", label: "Fechar check-in (minutos ap\u00F3s)", value: formState.checkinEndWindowMinutes, onChange: (value) => updateField("checkinEndWindowMinutes", value), error: validationErrors.checkinEndWindowMinutes, helperText: validationErrors.checkinEndWindowMinutes ||
133383
+ "Quantos minutos após o início da atividade checar entrada (0-120)", fallbackValue: 15, presets: [10, 20, 30], min: 0, max: 120, "data-testid": "activity-checkin-end-window-input" })),
133384
+ React__default.createElement(Box$1, { sx: { p: { xs: 1.5, sm: 2 }, bgcolor: "action.hover", borderRadius: RADIUS.default } },
133385
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
133386
+ React__default.createElement("strong", null, "Dica:"),
133387
+ " Para atividades ritualisticas, manter a precis\u00E3o \u00E9 importante. Use 10 minutos de abertura e 15 minutos de fechamento como padr\u00E3o para manter a disciplina energ\u00E9tica.")))) : null));
133256
133388
  };
133257
133389
 
133258
133390
  const MembersSelectionStep = ({ formState, validationErrors, onChange, availableMembers = [], }) => {
@@ -134054,6 +134186,7 @@ const TemplateSchema = objectType({
134054
134186
  isTemplate: booleanType(),
134055
134187
  });
134056
134188
  const ActivityCheckinWindowSchema = objectType({
134189
+ qrCheckinEnabled: booleanType().optional(),
134057
134190
  checkinStartWindowMinutes: numberType()
134058
134191
  .int()
134059
134192
  .min(0, "Deve ser 0 ou maior")
@@ -134081,6 +134214,7 @@ objectType({
134081
134214
  .int("Quórum mínimo deve ser um número inteiro")
134082
134215
  .min(1, "Quórum mínimo deve ser pelo menos 1")
134083
134216
  .optional(),
134217
+ qrCheckinEnabled: booleanType().optional(),
134084
134218
  checkinStartWindowMinutes: numberType()
134085
134219
  .int()
134086
134220
  .min(0)
@@ -134173,13 +134307,18 @@ const DEFAULT_FORM_STATE$4 = {
134173
134307
  insumos: [],
134174
134308
  isTemplate: false,
134175
134309
  minConfirmedMembers: undefined,
134310
+ qrCheckinEnabled: true,
134176
134311
  };
134177
134312
  const useActivityOnboarding = (props) => {
134178
134313
  const [isLoading, setIsLoading] = useState(false);
134179
134314
  const [error, setError] = useState();
134180
134315
  const formState = useMemo(() => {
134181
- return props.initialData || DEFAULT_FORM_STATE$4;
134182
- }, [props.initialData]);
134316
+ const base = props.initialData || DEFAULT_FORM_STATE$4;
134317
+ if (props.isPersonalProfile) {
134318
+ return Object.assign(Object.assign({}, base), { qrCheckinEnabled: false });
134319
+ }
134320
+ return base;
134321
+ }, [props.initialData, props.isPersonalProfile]);
134183
134322
  const steps = useMemo(() => {
134184
134323
  return [
134185
134324
  {
@@ -134212,7 +134351,7 @@ const useActivityOnboarding = (props) => {
134212
134351
  id: "checkin-window",
134213
134352
  label: "Check-in",
134214
134353
  title: "Configurar Check-in",
134215
- description: "Defina o período permitido para que os participantes façam check-in",
134354
+ description: "Escolha se haverá check-in e, se houver, o período permitido",
134216
134355
  component: ActivityCheckinWindowStep,
134217
134356
  },
134218
134357
  ]),
@@ -134953,6 +135092,8 @@ const formatMinutesToHHMM$3 = (totalMinutes) => {
134953
135092
  };
134954
135093
  const getConfiguredCheckinWindow$1 = (activity) => {
134955
135094
  var _a, _b, _c, _d;
135095
+ if (activity.qrCheckinEnabled === false)
135096
+ return null;
134956
135097
  const startTime = (_b = (_a = activity.occurrences) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.startTime;
134957
135098
  const startMinutes = parseTimeToMinutes$3(startTime);
134958
135099
  if (startMinutes === null)
@@ -135091,9 +135232,30 @@ const ActivityCard = ({ activity, isLast, isPersonalProfile = false, onSelect, o
135091
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()));
135092
135233
  })))))));
135093
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
+ };
135094
135255
  const ActivityListPage = (props) => {
135095
135256
  var _a;
135096
135257
  const theme = useTheme$1();
135258
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
135097
135259
  const { data, fns } = useActivityListPage(props);
135098
135260
  const canCreate = props.canCreate || props.isAdmin;
135099
135261
  const periodInputValue = (_a = props.periodInputValue) !== null && _a !== void 0 ? _a : `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, "0")}`;
@@ -135142,7 +135304,9 @@ const ActivityListPage = (props) => {
135142
135304
  backgroundColor: theme.palette.background.default,
135143
135305
  position: "relative",
135144
135306
  } },
135145
- 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) => ({
135146
135310
  value: status,
135147
135311
  label: data.getStatusLabel(status),
135148
135312
  })), selectedTab: safeSelectedTab, onTabChange: (value) => fns.handleTabChange(value) }),
@@ -135158,7 +135322,7 @@ const ActivityListPage = (props) => {
135158
135322
  React__default.createElement(Box$1, { sx: { width: { xs: "100%", sm: 260 } } },
135159
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" })),
135160
135324
  props.canExportParticipationReport &&
135161
- 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
135162
135326
  ? "Exportando..."
135163
135327
  : "Exportar Participação"))),
135164
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: {
@@ -135175,18 +135339,19 @@ const ActivityListPage = (props) => {
135175
135339
  canCreate && (React__default.createElement(React__default.Fragment, null,
135176
135340
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: SECTION_GAP } }, "Toque no bot\u00E3o + para criar uma nova atividade"),
135177
135341
  React__default.createElement(QuotaGuard, { feature: "activities", behavior: "disable" },
135178
- React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleActivityAdd }, "Criar atividade")))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.activities.map((activity, index) => (React__default.createElement(ActivityCard, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: fns.handleActivityEdit, theme: theme, getStatusLabel: data.getStatusLabel })))))),
135342
+ React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleActivityAdd }, "Criar atividade")))))) : (isMobile ? (React__default.createElement(Box$1, { sx: {
135343
+ bgcolor: "background.paper",
135344
+ borderRadius: RADIUS.default,
135345
+ border: 1,
135346
+ borderColor: "divider",
135347
+ overflow: "hidden",
135348
+ } }, data.activities.map((activity, index) => (React__default.createElement(ActivityCompactRow, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: props.onActivityEdit ? fns.handleActivityEdit : undefined }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.activities.map((activity, index) => (React__default.createElement(ActivityCard, { key: activity.id, activity: activity, isLast: index === data.activities.length - 1, isPersonalProfile: props.isPersonalProfile, onSelect: fns.handleActivitySelect, onEdit: fns.handleActivityEdit, theme: theme, getStatusLabel: data.getStatusLabel }))))))),
135179
135349
  React__default.createElement(Menu$2, { anchorEl: filterAnchorEl, open: Boolean(filterAnchorEl), onClose: handleFilterClose },
135180
135350
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(null) }, "Todas as atividades"),
135181
135351
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(true) }, "Apenas modelos"),
135182
135352
  React__default.createElement(MenuItem$1, { onClick: () => handleTemplateFilter(false) }, "Apenas atividades")),
135183
- canCreate && !props.hideAddFab && (React__default.createElement(QuotaGuard, { feature: "activities", behavior: "hide" },
135184
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleActivityAdd, sx: {
135185
- position: "fixed",
135186
- bottom: { xs: 16, sm: 24 },
135187
- right: { xs: 16, sm: 24 },
135188
- zIndex: theme.zIndex.speedDial,
135189
- } },
135353
+ canCreate && !props.hideAddFab && data.activities.length > 0 && (React__default.createElement(QuotaGuard, { feature: "activities", behavior: "hide" },
135354
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleActivityAdd, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
135190
135355
  React__default.createElement(Add$1, null)))))));
135191
135356
  };
135192
135357
 
@@ -135257,26 +135422,27 @@ const ActivityDateTime = ({ activity, checkinWindow, formatDate, formatTime, the
135257
135422
  ? formatTime(occurrence.endTime)
135258
135423
  : "Não definido"))))))) : (React__default.createElement(Box$1, { sx: { textAlign: "center", py: 2 } },
135259
135424
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" }, "Nenhuma data definida"))),
135260
- React__default.createElement(Box$1, { sx: { display: "flex", alignItems: "center", mt: 1 } },
135261
- React__default.createElement(AccessTime, { sx: { mr: 1.5, color: "text.secondary" } }),
135262
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mr: 1 } },
135263
- "Check-in v\u00E1lido: ",
135264
- getCheckinSummary()),
135265
- checkinWindow ? (React__default.createElement(Box$1, { component: "span" },
135266
- React__default.createElement(Typography$1, { component: "span", variant: "caption", sx: {
135267
- px: 1,
135268
- py: 0.25,
135269
- borderRadius: RADIUS.default,
135270
- border: `1px solid ${theme.palette.divider}`,
135271
- color: checkinWindow.state === "active"
135272
- ? theme.palette.success.main
135273
- : checkinWindow.state === "scheduled"
135274
- ? theme.palette.warning.main
135275
- : checkinWindow.state === "closed"
135276
- ? theme.palette.error.main
135277
- : theme.palette.text.secondary,
135278
- } }, stateLabel[checkinWindow.state]))) : null),
135279
- getCheckinExplanation() ? (React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary", sx: { mt: 0.5 } }, getCheckinExplanation())) : null)));
135425
+ activity.qrCheckinEnabled !== false ? (React__default.createElement(React__default.Fragment, null,
135426
+ React__default.createElement(Box$1, { sx: { display: "flex", alignItems: "center", mt: 1 } },
135427
+ React__default.createElement(AccessTime, { sx: { mr: 1.5, color: "text.secondary" } }),
135428
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mr: 1 } },
135429
+ "Check-in v\u00E1lido: ",
135430
+ getCheckinSummary()),
135431
+ checkinWindow ? (React__default.createElement(Box$1, { component: "span" },
135432
+ React__default.createElement(Typography$1, { component: "span", variant: "caption", sx: {
135433
+ px: 1,
135434
+ py: 0.25,
135435
+ borderRadius: RADIUS.default,
135436
+ border: `1px solid ${theme.palette.divider}`,
135437
+ color: checkinWindow.state === "active"
135438
+ ? theme.palette.success.main
135439
+ : checkinWindow.state === "scheduled"
135440
+ ? theme.palette.warning.main
135441
+ : checkinWindow.state === "closed"
135442
+ ? theme.palette.error.main
135443
+ : theme.palette.text.secondary,
135444
+ } }, stateLabel[checkinWindow.state]))) : null),
135445
+ getCheckinExplanation() ? (React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary", sx: { mt: 0.5 } }, getCheckinExplanation())) : null)) : null)));
135280
135446
  };
135281
135447
  var ActivityDateTime$1 = React__default.memo(ActivityDateTime);
135282
135448
 
@@ -135862,6 +136028,7 @@ const ActivitySchema$3 = objectType({
135862
136028
  title: stringType(),
135863
136029
  description: stringType(),
135864
136030
  isTemplate: booleanType(),
136031
+ qrCheckinEnabled: booleanType().optional(),
135865
136032
  qrReleaseOffsetMinutes: numberType().nullable().optional(),
135866
136033
  qrCheckinGraceMinutes: numberType().nullable().optional(),
135867
136034
  checkinStartWindowMinutes: numberType().nullable().optional(),
@@ -135977,6 +136144,7 @@ const ActivityDetailSchema = objectType({
135977
136144
  title: stringType(),
135978
136145
  description: stringType(),
135979
136146
  isTemplate: booleanType(),
136147
+ qrCheckinEnabled: booleanType().optional(),
135980
136148
  qrReleaseOffsetMinutes: numberType().nullable().optional(),
135981
136149
  qrCheckinGraceMinutes: numberType().nullable().optional(),
135982
136150
  checkinStartWindowMinutes: numberType().nullable().optional(),
@@ -136385,7 +136553,9 @@ const ActivityDetailPage = (props) => {
136385
136553
  const bTime = b.confirmedAt ? new Date(b.confirmedAt).getTime() : 0;
136386
136554
  return bTime - aTime;
136387
136555
  });
136388
- const canShowCheckinCta = props.canScanCheckin &&
136556
+ const checkinEnabled = data.activity.qrCheckinEnabled !== false;
136557
+ const canShowCheckinCta = checkinEnabled &&
136558
+ props.canScanCheckin &&
136389
136559
  ((_a = props.checkinWindow) === null || _a === void 0 ? void 0 : _a.state) === "active" &&
136390
136560
  !(currentMember === null || currentMember === void 0 ? void 0 : currentMember.confirmedAt) &&
136391
136561
  !props.isPersonalProfile;
@@ -136410,7 +136580,7 @@ const ActivityDetailPage = (props) => {
136410
136580
  React__default.createElement(Stack$1, { spacing: LIST_GAP },
136411
136581
  React__default.createElement(ActivityInfo$1, { activity: data.activity, canChangeStatus: props.canChangeStatus || false, canUseModel: props.canUseModel || false, statusOptions: statusOptions, onStatusChange: fns.handleChangeStatus, onUseModel: fns.handleUseModel, theme: theme }),
136412
136582
  React__default.createElement(ActivityDateTime$1, { activity: data.activity, checkinWindow: props.checkinWindow, formatDate: data.formatDate, formatTime: data.formatTime, theme: theme }),
136413
- props.canManageQr && !props.isPersonalProfile && (React__default.createElement(ActivityAttendanceQr, { attendanceQr: props.attendanceQr, onRefreshQrState: props.onRefreshQrState })),
136583
+ checkinEnabled && props.canManageQr && !props.isPersonalProfile && (React__default.createElement(ActivityAttendanceQr, { attendanceQr: props.attendanceQr, onRefreshQrState: props.onRefreshQrState })),
136414
136584
  React__default.createElement(ActivityMediums$1, { activity: data.activity, onAddMedium: fns.handleAddMedium, isAdmin: data.isAdmin, theme: theme, currentMemberId: data.currentMemberId, onConfirmParticipation: fns.handleConfirmParticipation, onDeclineParticipation: fns.handleDeclineParticipation }),
136415
136585
  attendanceMembers.length > 0 && (React__default.createElement(ConfirmedAttendanceCard$3, { attendanceMembers: attendanceMembers, theme: theme, formatConfirmedAt: formatConfirmedAt })),
136416
136586
  React__default.createElement(ActivitySupplies$1, { activity: data.activity, onAddSupply: fns.handleAddSupply, theme: theme })))),
@@ -137259,6 +137429,7 @@ const EventSchema = objectType({
137259
137429
  name: stringType().optional(),
137260
137430
  description: stringType().optional(),
137261
137431
  isTemplate: booleanType().optional(),
137432
+ qrCheckinEnabled: booleanType().optional(),
137262
137433
  qrReleaseOffsetMinutes: numberType().nullable().optional(),
137263
137434
  qrCheckinGraceMinutes: numberType().nullable().optional(),
137264
137435
  checkinStartWindowMinutes: numberType().nullable().optional(),
@@ -137507,27 +137678,31 @@ const EventCheckinWindowStep = ({ formState, validationErrors, onChange, setFiel
137507
137678
  onChange(createFieldEvent(name, value));
137508
137679
  }
137509
137680
  }, [setFieldValue, onChange]);
137681
+ const checkinEnabled = formState.qrCheckinEnabled !== false;
137510
137682
  return (React__default.createElement(Box$1, { sx: { p: { xs: 0.5, sm: 1 } } },
137511
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: 2.5 } },
137512
- "Configure o intervalo de tempo permitido para check-in. O check-in estar\u00E1 dispon\u00EDvel a partir de X minutos ",
137513
- React__default.createElement("strong", null, "antes"),
137514
- " do evento at\u00E9 Y minutos",
137515
- React__default.createElement("strong", null, " ap\u00F3s"),
137516
- " o in\u00EDcio."),
137517
- React__default.createElement(Alert$1, { severity: "info", icon: React__default.createElement(Info$1, null), sx: { mb: 2.5 } },
137518
- React__default.createElement(Typography$1, { variant: "body2" },
137519
- React__default.createElement("strong", null, "Exemplo:"),
137520
- " Com os valores padr\u00E3o (10 e 15), se o evento come\u00E7a \u00E0s 19h, o check-in abrir\u00E1 \u00E0s 18h50 e fechar\u00E1 \u00E0s 19h15.")),
137521
- React__default.createElement(Box$1, { sx: { mb: 2.5 } },
137522
- React__default.createElement(LabeledMinuteInput, { name: "checkinStartWindowMinutes", label: "Abrir check-in (minutos antes)", value: formState.checkinStartWindowMinutes, onChange: (value) => updateField("checkinStartWindowMinutes", value), error: validationErrors.checkinStartWindowMinutes, helperText: validationErrors.checkinStartWindowMinutes ||
137523
- "Quantos minutos antes do evento checar entrada (0-120)", fallbackValue: 10, min: 0, max: 120, "data-testid": "event-checkin-start-window-input" })),
137524
- React__default.createElement(Box$1, { sx: { mb: 2.5 } },
137525
- React__default.createElement(LabeledMinuteInput, { name: "checkinEndWindowMinutes", label: "Fechar check-in (minutos ap\u00F3s)", value: formState.checkinEndWindowMinutes, onChange: (value) => updateField("checkinEndWindowMinutes", value), error: validationErrors.checkinEndWindowMinutes, helperText: validationErrors.checkinEndWindowMinutes ||
137526
- "Quantos minutos após o início do evento checar entrada (0-120)", fallbackValue: 15, min: 0, max: 120, "data-testid": "event-checkin-end-window-input" })),
137527
- React__default.createElement(Box$1, { sx: { p: { xs: 1.5, sm: 2 }, bgcolor: "action.hover", borderRadius: RADIUS.default } },
137528
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
137529
- React__default.createElement("strong", null, "Dica:"),
137530
- " Para eventos grandes, aumentar o intervalo de abertura (e.g. 20 minutos antes) permite que mais pessoas cheguem a tempo. Para eventos pequenos, 10 e 15 minutos geralmente \u00E9 o ideal."))));
137683
+ React__default.createElement(FormControlLabel$1, { control: React__default.createElement(Switch$1, { checked: checkinEnabled, onChange: (_, checked) => updateField("qrCheckinEnabled", checked), inputProps: { "aria-label": "Habilitar check-in" }, "data-testid": "event-checkin-enabled-switch" }), label: "Habilitar check-in", sx: { mb: 2, ml: 0 } }),
137684
+ !checkinEnabled ? (React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" }, "Este evento n\u00E3o ter\u00E1 check-in na porta. A janela e o QR ficam ocultos.")) : null,
137685
+ checkinEnabled ? (React__default.createElement(React__default.Fragment, null,
137686
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: 2.5 } },
137687
+ "Configure o intervalo de tempo permitido para check-in. O check-in estar\u00E1 dispon\u00EDvel a partir de X minutos ",
137688
+ React__default.createElement("strong", null, "antes"),
137689
+ " do evento at\u00E9 Y minutos",
137690
+ React__default.createElement("strong", null, " ap\u00F3s"),
137691
+ " o in\u00EDcio."),
137692
+ React__default.createElement(Alert$1, { severity: "info", icon: React__default.createElement(Info$1, null), sx: { mb: 2.5 } },
137693
+ React__default.createElement(Typography$1, { variant: "body2" },
137694
+ React__default.createElement("strong", null, "Exemplo:"),
137695
+ " Com os valores padr\u00E3o (10 e 15), se o evento come\u00E7a \u00E0s 19h, o check-in abrir\u00E1 \u00E0s 18h50 e fechar\u00E1 \u00E0s 19h15.")),
137696
+ React__default.createElement(Box$1, { sx: { mb: 2.5 } },
137697
+ React__default.createElement(LabeledMinuteInput, { name: "checkinStartWindowMinutes", label: "Abrir check-in (minutos antes)", value: formState.checkinStartWindowMinutes, onChange: (value) => updateField("checkinStartWindowMinutes", value), error: validationErrors.checkinStartWindowMinutes, helperText: validationErrors.checkinStartWindowMinutes ||
137698
+ "Quantos minutos antes do evento checar entrada (0-120)", fallbackValue: 10, min: 0, max: 120, "data-testid": "event-checkin-start-window-input" })),
137699
+ React__default.createElement(Box$1, { sx: { mb: 2.5 } },
137700
+ React__default.createElement(LabeledMinuteInput, { name: "checkinEndWindowMinutes", label: "Fechar check-in (minutos ap\u00F3s)", value: formState.checkinEndWindowMinutes, onChange: (value) => updateField("checkinEndWindowMinutes", value), error: validationErrors.checkinEndWindowMinutes, helperText: validationErrors.checkinEndWindowMinutes ||
137701
+ "Quantos minutos após o início do evento checar entrada (0-120)", fallbackValue: 15, min: 0, max: 120, "data-testid": "event-checkin-end-window-input" })),
137702
+ React__default.createElement(Box$1, { sx: { p: { xs: 1.5, sm: 2 }, bgcolor: "action.hover", borderRadius: RADIUS.default } },
137703
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
137704
+ React__default.createElement("strong", null, "Dica:"),
137705
+ " Para eventos grandes, aumentar o intervalo de abertura (e.g. 20 minutos antes) permite que mais pessoas cheguem a tempo. Para eventos pequenos, 10 e 15 minutos geralmente \u00E9 o ideal.")))) : null));
137531
137706
  };
137532
137707
 
137533
137708
  let googleMapsScriptPromise = null;
@@ -138572,7 +138747,7 @@ const EventReviewStep = ({ formState, availableActivities, }) => {
138572
138747
  React__default.createElement(Typography$1, { variant: "h6", sx: { mb: 2, display: "flex", alignItems: "center" } },
138573
138748
  React__default.createElement(AccessTime, { sx: { mr: 1 } }),
138574
138749
  " Janela de Check-in"),
138575
- !formState.isAllDay ? (React__default.createElement(React__default.Fragment, null,
138750
+ formState.qrCheckinEnabled === false ? (React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" }, "Check-in desativado para este evento.")) : !formState.isAllDay ? (React__default.createElement(React__default.Fragment, null,
138576
138751
  React__default.createElement(Typography$1, { variant: "body2", sx: { mb: 1 } },
138577
138752
  React__default.createElement("strong", null, "Evento:"),
138578
138753
  " ",
@@ -139431,7 +139606,7 @@ const EventActivitySelectionStep = ({ formState, validationErrors, onChange, ava
139431
139606
  "):"),
139432
139607
  React__default.createElement(Button$1, { variant: "text", size: "small", startIcon: React__default.createElement(Clear$1, null), onClick: handleClear, sx: { alignSelf: { xs: "stretch", sm: "flex-start" } } }, "Limpar todas")),
139433
139608
  selectedActivities.map((activity) => {
139434
- var _a, _b, _c, _d, _e, _f;
139609
+ var _a, _b, _c, _d, _e, _f, _g;
139435
139610
  return (React__default.createElement(Box$1, { key: activity.id, sx: {
139436
139611
  mb: 1.5,
139437
139612
  p: { xs: 1.25, sm: 1.5 },
@@ -139475,8 +139650,9 @@ const EventActivitySelectionStep = ({ formState, validationErrors, onChange, ava
139475
139650
  } },
139476
139651
  React__default.createElement(LabeledTimePicker, { label: "In\u00EDcio", value: activity.startTime || "", error: (_a = activityTimeValidation.errorsByActivityId[String(activity.id)]) === null || _a === void 0 ? void 0 : _a.startTime, helperText: ((_b = activityTimeValidation.errorsByActivityId[String(activity.id)]) === null || _b === void 0 ? void 0 : _b.startTime) || " ", onChange: (value) => handleActivityTimeChange(activity.id, "startTime", value), "data-testid": `event-activity-start-time-${activity.id}` }),
139477
139652
  React__default.createElement(LabeledTimePicker, { label: "T\u00E9rmino", value: activity.endTime || "", error: (_c = activityTimeValidation.errorsByActivityId[String(activity.id)]) === null || _c === void 0 ? void 0 : _c.endTime, helperText: ((_d = activityTimeValidation.errorsByActivityId[String(activity.id)]) === null || _d === void 0 ? void 0 : _d.endTime) || " ", onChange: (value) => handleActivityTimeChange(activity.id, "endTime", value), "data-testid": `event-activity-end-time-${activity.id}` }),
139478
- React__default.createElement(TextField$1, { fullWidth: true, label: checkinOpenLabel, type: "number", size: "small", value: (_e = activity.checkinStartWindowMinutes) !== null && _e !== void 0 ? _e : 10, onChange: (e) => handleActivityCheckinWindowChange(activity.id, "checkinStartWindowMinutes", e.target.value), InputLabelProps: { shrink: true }, inputProps: { min: 0, max: 120 }, helperText: isMobile ? "Antes do início" : "Minutos antes do início" }),
139479
- React__default.createElement(TextField$1, { fullWidth: true, label: checkinCloseLabel, type: "number", size: "small", value: (_f = activity.checkinEndWindowMinutes) !== null && _f !== void 0 ? _f : 15, onChange: (e) => handleActivityCheckinWindowChange(activity.id, "checkinEndWindowMinutes", e.target.value), InputLabelProps: { shrink: true }, inputProps: { min: 0, max: 120 }, helperText: isMobile ? "Após o início" : "Minutos após o início" })),
139653
+ ((_e = availableActivities.find((item) => String(item.id) === String(activity.id))) === null || _e === void 0 ? void 0 : _e.qrCheckinEnabled) !== false ? (React__default.createElement(React__default.Fragment, null,
139654
+ React__default.createElement(TextField$1, { fullWidth: true, label: checkinOpenLabel, type: "number", size: "small", value: (_f = activity.checkinStartWindowMinutes) !== null && _f !== void 0 ? _f : 10, onChange: (e) => handleActivityCheckinWindowChange(activity.id, "checkinStartWindowMinutes", e.target.value), InputLabelProps: { shrink: true }, inputProps: { min: 0, max: 120 }, helperText: isMobile ? "Antes do início" : "Minutos antes do início" }),
139655
+ React__default.createElement(TextField$1, { fullWidth: true, label: checkinCloseLabel, type: "number", size: "small", value: (_g = activity.checkinEndWindowMinutes) !== null && _g !== void 0 ? _g : 15, onChange: (e) => handleActivityCheckinWindowChange(activity.id, "checkinEndWindowMinutes", e.target.value), InputLabelProps: { shrink: true }, inputProps: { min: 0, max: 120 }, helperText: isMobile ? "Após o início" : "Minutos após o início" }))) : null),
139480
139656
  React__default.createElement(Box$1, { sx: {
139481
139657
  display: "flex",
139482
139658
  alignItems: { xs: "flex-start", sm: "center" },
@@ -139716,6 +139892,7 @@ const EventLocationSchema = objectType({
139716
139892
  }
139717
139893
  });
139718
139894
  const EventCheckinWindowSchema = objectType({
139895
+ qrCheckinEnabled: booleanType().optional(),
139719
139896
  checkinStartWindowMinutes: numberType()
139720
139897
  .int()
139721
139898
  .min(0, "Deve ser 0 ou maior")
@@ -139768,6 +139945,7 @@ const ActivitySchema$1 = objectType({
139768
139945
  durationMinutes: numberType().optional(),
139769
139946
  startTime: stringType().optional(), // HH:MM — per-activity start time for the event
139770
139947
  endTime: stringType().optional(), // HH:MM — per-activity end time for the event
139948
+ qrCheckinEnabled: booleanType().optional(),
139771
139949
  checkinStartWindowMinutes: numberType().int().min(0).max(120).optional(),
139772
139950
  checkinEndWindowMinutes: numberType().int().min(0).max(120).optional(),
139773
139951
  qrReleaseOffsetMinutes: numberType().int().min(0).max(180).optional(),
@@ -139827,6 +140005,7 @@ const EventFormValuesSchema = objectType({
139827
140005
  insumos: arrayType(anyType()).optional(),
139828
140006
  activities: arrayType(ActivitySchema$1).optional(), // Changed from activity to activities
139829
140007
  requiredActivityIds: arrayType(stringType()).optional(),
140008
+ qrCheckinEnabled: booleanType().optional(),
139830
140009
  checkinStartWindowMinutes: numberType()
139831
140010
  .int()
139832
140011
  .min(0)
@@ -139944,6 +140123,7 @@ const DEFAULT_FORM_STATE$3 = {
139944
140123
  isAllDay: false,
139945
140124
  startTime: "",
139946
140125
  endTime: "",
140126
+ qrCheckinEnabled: true,
139947
140127
  checkinStartWindowMinutes: 10,
139948
140128
  checkinEndWindowMinutes: 15,
139949
140129
  location: {
@@ -139984,24 +140164,26 @@ const EMPTY_SCHEMA = objectType({});
139984
140164
  * Computes the initial form state from props, applying terreiro address
139985
140165
  * defaults when the location type is "in terreiro".
139986
140166
  */
139987
- const buildInitialFormState = (initialData, isTerreiroAddressEmpty, knownLocations) => {
140167
+ const buildInitialFormState = (initialData, isTerreiroAddressEmpty, knownLocations, isPersonalProfile = false) => {
139988
140168
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
139989
140169
  const baseState = initialData !== null && initialData !== void 0 ? initialData : DEFAULT_FORM_STATE$3;
139990
- const isCreateFlow = !baseState.id;
140170
+ const withCheckin = isPersonalProfile
140171
+ ? Object.assign(Object.assign({}, baseState), { qrCheckinEnabled: false }) : baseState;
140172
+ const isCreateFlow = !withCheckin.id;
139991
140173
  if (isCreateFlow) {
139992
140174
  const fallback = (knownLocations && knownLocations[0]) || "Endereço do Terreiro";
139993
- const existingKnownLocation = ((_c = (_b = (_a = baseState.location) === null || _a === void 0 ? void 0 : _a.knownLocation) === null || _b === void 0 ? void 0 : _b.trim) === null || _c === void 0 ? void 0 : _c.call(_b)) || "";
139994
- return Object.assign(Object.assign({}, baseState), { location: Object.assign(Object.assign({}, baseState.location), { isInTerreiro: !isTerreiroAddressEmpty, knownLocation: !isTerreiroAddressEmpty
140175
+ const existingKnownLocation = ((_c = (_b = (_a = withCheckin.location) === null || _a === void 0 ? void 0 : _a.knownLocation) === null || _b === void 0 ? void 0 : _b.trim) === null || _c === void 0 ? void 0 : _c.call(_b)) || "";
140176
+ return Object.assign(Object.assign({}, withCheckin), { location: Object.assign(Object.assign({}, withCheckin.location), { isInTerreiro: !isTerreiroAddressEmpty, knownLocation: !isTerreiroAddressEmpty
139995
140177
  ? existingKnownLocation || fallback
139996
- : (_e = (_d = baseState.location) === null || _d === void 0 ? void 0 : _d.knownLocation) !== null && _e !== void 0 ? _e : "" }) });
140178
+ : (_e = (_d = withCheckin.location) === null || _d === void 0 ? void 0 : _d.knownLocation) !== null && _e !== void 0 ? _e : "" }) });
139997
140179
  }
139998
- const shouldDefaultToTerreiro = (_g = (_f = baseState.location) === null || _f === void 0 ? void 0 : _f.isInTerreiro) !== null && _g !== void 0 ? _g : true;
140180
+ const shouldDefaultToTerreiro = (_g = (_f = withCheckin.location) === null || _f === void 0 ? void 0 : _f.isInTerreiro) !== null && _g !== void 0 ? _g : true;
139999
140181
  if (shouldDefaultToTerreiro && !isTerreiroAddressEmpty) {
140000
- const existing = ((_k = (_j = (_h = baseState.location) === null || _h === void 0 ? void 0 : _h.knownLocation) === null || _j === void 0 ? void 0 : _j.trim) === null || _k === void 0 ? void 0 : _k.call(_j)) || "";
140182
+ const existing = ((_k = (_j = (_h = withCheckin.location) === null || _h === void 0 ? void 0 : _h.knownLocation) === null || _j === void 0 ? void 0 : _j.trim) === null || _k === void 0 ? void 0 : _k.call(_j)) || "";
140001
140183
  const fallback = (knownLocations && knownLocations[0]) || "Endereço do Terreiro";
140002
- return Object.assign(Object.assign({}, baseState), { location: Object.assign(Object.assign({}, baseState.location), { isInTerreiro: true, knownLocation: existing || fallback }) });
140184
+ return Object.assign(Object.assign({}, withCheckin), { location: Object.assign(Object.assign({}, withCheckin.location), { isInTerreiro: true, knownLocation: existing || fallback }) });
140003
140185
  }
140004
- return baseState;
140186
+ return withCheckin;
140005
140187
  };
140006
140188
  // ---------------------------------------------------------------------------
140007
140189
  // Hook
@@ -140011,7 +140193,7 @@ const useEventOnboarding = (props) => {
140011
140193
  const { initialData, isTerreiroAddressEmpty, knownLocations, createFromModel, availableActivities, canAddActivities = true, activityQuotaMessage, canCreateTemplates = true, templateQuotaMessage, availableMembers, availableInsumos, onComplete, onCancel, onStepChange: onStepChangeProp, onRequestAISuggestions, isAISuggestionsLoading = false, isPersonalProfile = false, enableGoogleAddress = false, googleMapsApiKey, googleCountryCode = "br", googleLanguage = "pt-BR", } = props;
140012
140194
  const [isLoading, setIsLoading] = useState(false);
140013
140195
  const [error, setError] = useState();
140014
- const initialFormState = useMemo(() => buildInitialFormState(initialData, isTerreiroAddressEmpty, knownLocations), [initialData, isTerreiroAddressEmpty, knownLocations]);
140196
+ const initialFormState = useMemo(() => buildInitialFormState(initialData, isTerreiroAddressEmpty, knownLocations, isPersonalProfile), [initialData, isTerreiroAddressEmpty, knownLocations, isPersonalProfile]);
140015
140197
  // -----------------------------------------------------------------------
140016
140198
  // Step definitions — pure data, no inline wrapper components
140017
140199
  // -----------------------------------------------------------------------
@@ -140054,7 +140236,7 @@ const useEventOnboarding = (props) => {
140054
140236
  id: "checkin-window",
140055
140237
  label: "Check-in",
140056
140238
  title: "Configurar Check-in",
140057
- description: "Defina o período permitido para que os participantes façam check-in",
140239
+ description: "Escolha se haverá check-in e, se houver, o período permitido",
140058
140240
  component: EventCheckinWindowStep,
140059
140241
  },
140060
140242
  ]),
@@ -140371,17 +140553,18 @@ const EventDateTime = ({ event, checkinWindow, formatDate, formatTime, theme, })
140371
140553
  ? formatTime(firstOccurrence.endTime)
140372
140554
  : "Não definido"))),
140373
140555
  isAllDay && (React__default.createElement(Chip$1, { label: "Dia inteiro", size: "small", color: "primary", variant: "outlined", sx: { mb: 1.5 } })),
140374
- React__default.createElement(Box$1, { sx: { display: "flex", alignItems: "center", mb: 0.75 } },
140375
- React__default.createElement(AccessTime, { sx: {
140376
- mr: 1.5,
140377
- color: "text.secondary",
140378
- fontSize: { xs: 18, sm: 20 },
140379
- } }),
140380
- React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mr: 1 } },
140381
- "Check-in v\u00E1lido: ",
140382
- getCheckinSummary()),
140383
- checkinWindow ? (React__default.createElement(Chip$1, { label: stateLabel[checkinWindow.state], size: "small", color: stateColor[checkinWindow.state], variant: "outlined" })) : null),
140384
- getCheckinExplanation() ? (React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" }, getCheckinExplanation())) : null)));
140556
+ event.qrCheckinEnabled !== false ? (React__default.createElement(React__default.Fragment, null,
140557
+ React__default.createElement(Box$1, { sx: { display: "flex", alignItems: "center", mb: 0.75 } },
140558
+ React__default.createElement(AccessTime, { sx: {
140559
+ mr: 1.5,
140560
+ color: "text.secondary",
140561
+ fontSize: { xs: 18, sm: 20 },
140562
+ } }),
140563
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mr: 1 } },
140564
+ "Check-in v\u00E1lido: ",
140565
+ getCheckinSummary()),
140566
+ checkinWindow ? (React__default.createElement(Chip$1, { label: stateLabel[checkinWindow.state], size: "small", color: stateColor[checkinWindow.state], variant: "outlined" })) : null),
140567
+ getCheckinExplanation() ? (React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" }, getCheckinExplanation())) : null)) : null)));
140385
140568
  };
140386
140569
  var EventDateTime$1 = React__default.memo(EventDateTime);
140387
140570
 
@@ -140912,7 +141095,9 @@ const EventActivities = ({ event, theme, formatDate, formatTime, canChangeActivi
140912
141095
  } },
140913
141096
  React__default.createElement(Typography$1, { variant: "h6", fontWeight: "medium" }, activity.title),
140914
141097
  React__default.createElement(Box$1, { sx: { display: "flex", gap: 1, alignItems: "flex-start" } },
140915
- !isModelEvent && onActivityQrOpen && (React__default.createElement(Box$1, { sx: {
141098
+ !isModelEvent &&
141099
+ onActivityQrOpen &&
141100
+ activity.qrCheckinEnabled !== false && (React__default.createElement(Box$1, { sx: {
140916
141101
  display: "flex",
140917
141102
  flexDirection: "column",
140918
141103
  alignItems: "flex-end",
@@ -140969,6 +141154,7 @@ const EventActivities = ({ event, theme, formatDate, formatTime, canChangeActivi
140969
141154
  ? formatTime(activity.occurrences[0].endTime)
140970
141155
  : "Não definido")))),
140971
141156
  !isModelEvent &&
141157
+ activity.qrCheckinEnabled !== false &&
140972
141158
  (() => {
140973
141159
  var _a, _b, _c, _d;
140974
141160
  const startMinutes = parseTimeToMinutes$2((_b = (_a = activity.occurrences) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.startTime);
@@ -141445,6 +141631,7 @@ const TerreiroSchema = objectType({
141445
141631
  const ActivitySchema = objectType({
141446
141632
  id: stringType(),
141447
141633
  requiredForConfirmation: booleanType().optional(),
141634
+ qrCheckinEnabled: booleanType().optional(),
141448
141635
  qrReleaseOffsetMinutes: numberType().nullable().optional(),
141449
141636
  qrCheckinGraceMinutes: numberType().nullable().optional(),
141450
141637
  checkinStartWindowMinutes: numberType().nullable().optional(),
@@ -141471,6 +141658,7 @@ const EventDetailSchema = objectType({
141471
141658
  name: stringType().optional(),
141472
141659
  description: stringType().optional(),
141473
141660
  isTemplate: booleanType().optional(),
141661
+ qrCheckinEnabled: booleanType().optional(),
141474
141662
  qrReleaseOffsetMinutes: numberType().nullable().optional(),
141475
141663
  qrCheckinGraceMinutes: numberType().nullable().optional(),
141476
141664
  checkinStartWindowMinutes: numberType().nullable().optional(),
@@ -141998,7 +142186,9 @@ const EventDetailPage = (props) => {
141998
142186
  }
141999
142187
  const statusOptions = data.getStatusMenuOptions(data.event);
142000
142188
  const currentMember = (_c = data.event.members) === null || _c === void 0 ? void 0 : _c.list.find((m) => m.id === data.currentMemberId);
142001
- const canShowCheckinCta = props.canScanCheckin &&
142189
+ const checkinEnabled = data.event.qrCheckinEnabled !== false;
142190
+ const canShowCheckinCta = checkinEnabled &&
142191
+ props.canScanCheckin &&
142002
142192
  ((_d = props.checkinWindow) === null || _d === void 0 ? void 0 : _d.state) === "active" &&
142003
142193
  !(currentMember === null || currentMember === void 0 ? void 0 : currentMember.confirmedAt) &&
142004
142194
  !props.isPersonalProfile;
@@ -142033,7 +142223,7 @@ const EventDetailPage = (props) => {
142033
142223
  React__default.createElement(Stack$1, { spacing: LIST_GAP },
142034
142224
  React__default.createElement(EventInfo$1, { event: data.event, canChangeStatus: props.canChangeStatus || false, canUseModel: props.canUseModel || false, statusOptions: statusOptions, onStatusChange: (status) => fns.handleChangeStatus(status), onUseModel: fns.handleUseModel, theme: theme }),
142035
142225
  React__default.createElement(EventDateTime$1, { event: data.event, checkinWindow: props.checkinWindow, formatDate: data.formatDate, formatTime: data.formatTime, theme: theme }),
142036
- props.canManageQr && (React__default.createElement(EventAttendanceQr, { attendanceQr: props.attendanceQr, onRefreshQrState: props.onRefreshQrState, onCopyCode: fns.handleCopyCode })),
142226
+ props.canManageQr && checkinEnabled && (React__default.createElement(EventAttendanceQr, { attendanceQr: props.attendanceQr, onRefreshQrState: props.onRefreshQrState, onCopyCode: fns.handleCopyCode })),
142037
142227
  props.canManageTickets && (React__default.createElement(EventPublicTickets$1, { onManageTickets: props.onManageTickets, theme: theme })),
142038
142228
  data.event.address && (React__default.createElement(EventAddress$1, { event: data.event, theme: theme })),
142039
142229
  data.event.activities && data.event.activities.count > 0 && (React__default.createElement(EventActivities$1, { event: data.event, theme: theme, formatDate: data.formatDate, formatTime: data.formatTime, activityAttendanceQrById: props.activityAttendanceQrById, canChangeActivityStatus: props.canChangeActivityStatus || false, getStatusMenuOptions: data.getActivityStatusMenuOptions, onChangeActivityStatus: fns.handleChangeActivityStatus, onBulkChangeActivityStatus: fns.handleBulkChangeActivityStatus, onActivityQrOpen: props.canManageQr ? setSelectedActivityQrId : undefined })),
@@ -142214,6 +142404,8 @@ const TicketVoucherPage = ({ isLoading, errorMessage, code, eventTitle, terreiro
142214
142404
 
142215
142405
  const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, published = false, publicTitle = "", maxTicketsPerEmail = 2, batches = [], holders = [], isSaving, saveError, checkInMessage, onSave, onExportCsv, onCheckIn, useChat = false, chat, canCheckIn = false, isCheckingIn = false, parseTicketQr, }) => {
142216
142406
  var _a;
142407
+ const theme = useTheme$1();
142408
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
142217
142409
  const [title, setTitle] = useState(publicTitle);
142218
142410
  const [isPublished, setIsPublished] = useState(published);
142219
142411
  const [emailLimit, setEmailLimit] = useState(maxTicketsPerEmail);
@@ -142288,17 +142480,24 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142288
142480
  React__default.createElement(CardContent$1, null,
142289
142481
  React__default.createElement(Stack$1, { spacing: 2 },
142290
142482
  React__default.createElement(Typography$1, { variant: "h6" }, "Check-in na porta"),
142291
- React__default.createElement(Stack$1, { direction: "row", spacing: 1 },
142483
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", spacing: 1, alignItems: isMobile ? "stretch" : "center" },
142292
142484
  React__default.createElement(TextField$1, { label: "Codigo do ingresso", value: checkInCode, onChange: (event) => setCheckInCode(event.target.value), inputProps: { "data-testid": "ticketing-checkin-code" } }),
142293
142485
  React__default.createElement(Button$1, { variant: "contained", onClick: () => onCheckIn === null || onCheckIn === void 0 ? void 0 : onCheckIn(checkInCode), "data-testid": "ticketing-checkin-submit" }, "Validar"),
142294
142486
  canCheckIn ? (React__default.createElement(Button$1, { variant: "outlined", onClick: () => setIsScannerOpen(true), "data-testid": "ticketing-checkin-scan" }, "Escanear QR")) : null),
142295
142487
  checkInMessage ? React__default.createElement(Alert$1, { severity: "success" }, checkInMessage) : null))),
142296
142488
  React__default.createElement(Card$1, null,
142297
142489
  React__default.createElement(CardContent$1, null,
142298
- React__default.createElement(Stack$1, { direction: "row", justifyContent: "space-between", alignItems: "center", sx: { mb: 2 } },
142490
+ React__default.createElement(Stack$1, { direction: isMobile ? "column" : "row", justifyContent: "space-between", alignItems: isMobile ? "flex-start" : "center", spacing: 1, sx: { mb: 2 } },
142299
142491
  React__default.createElement(Typography$1, { variant: "h6" }, "Titulares"),
142300
142492
  React__default.createElement(Button$1, { onClick: onExportCsv, "data-testid": "ticketing-export-csv" }, "Exportar CSV")),
142301
- React__default.createElement(Table$1, { size: "small" },
142493
+ isMobile ? (React__default.createElement(Stack$1, { divider: React__default.createElement(Box$1, { sx: { borderBottom: 1, borderColor: "divider" } }) }, holders.map((holder) => (React__default.createElement(Box$1, { key: holder.code, sx: { py: 1.25 } },
142494
+ React__default.createElement(Typography$1, { fontWeight: 600 }, holder.holderName),
142495
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
142496
+ holder.status,
142497
+ holder.holderEmail ? ` · ${holder.holderEmail}` : ""),
142498
+ React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" },
142499
+ holder.code,
142500
+ holder.batchName ? ` · ${holder.batchName}` : "")))))) : (React__default.createElement(Table$1, { size: "small" },
142302
142501
  React__default.createElement(TableHead$1, null,
142303
142502
  React__default.createElement(TableRow$1, null,
142304
142503
  React__default.createElement(TableCell$1, null, "Codigo"),
@@ -142311,7 +142510,7 @@ const EventTicketingManagementPage = ({ eventName, shareUrl, terreiroShareUrl, p
142311
142510
  React__default.createElement(TableCell$1, null, holder.holderName),
142312
142511
  React__default.createElement(TableCell$1, null, holder.holderEmail),
142313
142512
  React__default.createElement(TableCell$1, null, holder.batchName),
142314
- React__default.createElement(TableCell$1, null, holder.status)))))))),
142513
+ React__default.createElement(TableCell$1, null, holder.status))))))))),
142315
142514
  React__default.createElement(Dialog$1, { open: isScannerOpen, onClose: () => setIsScannerOpen(false), fullWidth: true, maxWidth: "sm" },
142316
142515
  React__default.createElement(DialogTitle$1, null, "Escanear ingresso"),
142317
142516
  React__default.createElement(DialogContent$1, { dividers: true },
@@ -143053,6 +143252,8 @@ const formatMinutesToHHMM$1 = (totalMinutes) => {
143053
143252
  };
143054
143253
  const getConfiguredCheckinWindow = (event) => {
143055
143254
  var _a, _b, _c, _d, _e;
143255
+ if (event.qrCheckinEnabled === false)
143256
+ return null;
143056
143257
  const startTime = (_c = (_b = (_a = event.occurrences) === null || _a === void 0 ? void 0 : _a.list) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.startTime;
143057
143258
  const startMinutes = parseTimeToMinutes$1(startTime);
143058
143259
  if (startMinutes === null)
@@ -143182,9 +143383,25 @@ const EventCard = ({ event, isLast, onSelect, onEdit, getEventTypeLabel, theme }
143182
143383
  event.insumos.count,
143183
143384
  ")"))))));
143184
143385
  };
143386
+ const EventCompactRow = ({ event, isLast, onSelect, onEdit, getEventTypeLabel }) => {
143387
+ var _a, _b;
143388
+ const occurrence = (_b = (_a = event.occurrences) === null || _a === void 0 ? void 0 : _a.list) === null || _b === void 0 ? void 0 : _b[0];
143389
+ const dateParts = compactListDateParts(occurrence === null || occurrence === void 0 ? void 0 : occurrence.date);
143390
+ const dateTime = formatEventDateTime(event);
143391
+ const rawTitle = event.title || event.name || "Sem título";
143392
+ const meta = [
143393
+ dateTime.time,
143394
+ event.type ? getEventTypeLabel(event.type) : null,
143395
+ ]
143396
+ .filter(Boolean)
143397
+ .join(" · ");
143398
+ return (React__default.createElement(CompactListRow, { title: rawTitle, meta: meta, isLast: isLast, onClick: () => onSelect(event.id), leading: dateParts ? (React__default.createElement(CompactListDateBlock, { day: dateParts.day, month: dateParts.month })) : (React__default.createElement(CalendarToday, { fontSize: "small", color: "action" })), trailing: onEdit ? (React__default.createElement(IconButton$1, { "aria-label": `Editar ${rawTitle}`, onClick: () => onEdit(event.id), sx: { width: 44, height: 44 } },
143399
+ React__default.createElement(ArrowForwardIos, { sx: { width: 16 } }))) : undefined }));
143400
+ };
143185
143401
  const EventsPage = (props) => {
143186
143402
  var _a;
143187
143403
  const theme = useTheme$1();
143404
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
143188
143405
  const { data, fns } = useEventsPage(props);
143189
143406
  const periodInputValue = (_a = props.periodInputValue) !== null && _a !== void 0 ? _a : `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, "0")}`;
143190
143407
  // Memoized tab list for maintainability
@@ -143233,7 +143450,13 @@ const EventsPage = (props) => {
143233
143450
  backgroundColor: theme.palette.background.default,
143234
143451
  position: "relative",
143235
143452
  } },
143236
- React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, tabs: tabs.map((status) => ({
143453
+ React__default.createElement(PageHeader$2, { title: "Eventos", onBack: fns.handleBack, onAdd: fns.handleAddEvent, addLabel: "Adicionar", showAddButton: props.isAdmin, hideAddButtonOnMobile: true, endAction: props.canExportParticipationReport &&
143454
+ props.onExportParticipationReport ? (React__default.createElement(IconButton$1, { "aria-label": "Exportar Participa\u00E7\u00E3o", onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-icon", sx: {
143455
+ display: { xs: "inline-flex", sm: "none" },
143456
+ width: 44,
143457
+ height: 44,
143458
+ } },
143459
+ React__default.createElement(Download, null))) : undefined, tabs: tabs.map((status) => ({
143237
143460
  value: status,
143238
143461
  label: data.getStatusLabel(status),
143239
143462
  })), selectedTab: safeSelectedTab, onTabChange: (value) => fns.handleTabChange(value) }),
@@ -143249,7 +143472,7 @@ const EventsPage = (props) => {
143249
143472
  React__default.createElement(Box$1, { sx: { width: { xs: "100%", sm: 260 } } },
143250
143473
  React__default.createElement(LabeledMonthPicker, { label: "Per\u00EDodo", value: periodInputValue, onChange: (nextValue) => { var _a; return (_a = props.onPeriodInputChange) === null || _a === void 0 ? void 0 : _a.call(props, nextValue); }, "data-testid": "events-period-input" })),
143251
143474
  props.canExportParticipationReport &&
143252
- props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-button" }, props.isExportingParticipationReport
143475
+ props.onExportParticipationReport && (React__default.createElement(Button$1, { variant: "outlined", startIcon: React__default.createElement(Download, null), onClick: props.onExportParticipationReport, disabled: props.isExportingParticipationReport, "data-testid": "events-export-participation-button", sx: { display: { xs: "none", sm: "inline-flex" } } }, props.isExportingParticipationReport
143253
143476
  ? "Exportando..."
143254
143477
  : "Exportar Participação"))),
143255
143478
  React__default.createElement(Box$1, { sx: Object.assign({ flex: 1, pb: LIST_CONTENT_BOTTOM_PADDING }, LIST_CARD_CONTENT_ROOT_SX) }, data.events.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -143266,14 +143489,15 @@ const EventsPage = (props) => {
143266
143489
  props.isAdmin && (React__default.createElement(React__default.Fragment, null,
143267
143490
  React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { mb: SECTION_GAP } }, "Toque no bot\u00E3o + para criar um novo evento"),
143268
143491
  React__default.createElement(QuotaGuard, { feature: "events", behavior: "disable" },
143269
- 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 })))))),
143270
- props.isAdmin && !props.hideAddFab && (React__default.createElement(QuotaGuard, { feature: "events", behavior: "hide" },
143271
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar evento", onClick: fns.handleAddEvent, sx: {
143272
- position: "fixed",
143273
- bottom: { xs: 16, sm: 24 },
143274
- right: { xs: 16, sm: 24 },
143275
- zIndex: theme.zIndex.speedDial,
143276
- } },
143492
+ React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleAddEvent }, "Criar evento")))))) : (isMobile ? (React__default.createElement(Box$1, { sx: {
143493
+ bgcolor: "background.paper",
143494
+ borderRadius: RADIUS.default,
143495
+ border: 1,
143496
+ borderColor: "divider",
143497
+ overflow: "hidden",
143498
+ } }, data.events.map((event, index) => (React__default.createElement(EventCompactRow, { key: event.id, event: event, isLast: index === data.events.length - 1, onSelect: fns.handleEventSelect, onEdit: props.onEventEdit ? fns.handleEventEdit : undefined, getEventTypeLabel: data.getEventTypeLabel }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.events.map((event, index) => (React__default.createElement(EventCard, { key: event.id, event: event, isLast: index === data.events.length - 1, onSelect: fns.handleEventSelect, onEdit: fns.handleEventEdit, getEventTypeLabel: data.getEventTypeLabel, getStatusLabel: data.getStatusLabel, theme: theme }))))))),
143499
+ props.isAdmin && !props.hideAddFab && data.events.length > 0 && (React__default.createElement(QuotaGuard, { feature: "events", behavior: "hide" },
143500
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar evento", onClick: fns.handleAddEvent, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
143277
143501
  React__default.createElement(Add$1, null)))))));
143278
143502
  };
143279
143503
 
@@ -144322,9 +144546,9 @@ const FinancialAccountsList = (props) => {
144322
144546
  minHeight: "100vh",
144323
144547
  backgroundColor: theme.palette.background.default,
144324
144548
  position: "relative",
144325
- pb: isMobile ? 2 : 0, // Espaço para o FAB no mobile
144549
+ pb: 0,
144326
144550
  } },
144327
- React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true }),
144551
+ React__default.createElement(PageHeader$2, { title: "Financeiro", onBack: props.onBack, onAdd: props.onAddAccount, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
144328
144552
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
144329
144553
  showPeriodFilter && (React__default.createElement(Stack$1, { direction: { xs: "column", sm: "row" }, spacing: SECTION_GAP, alignItems: { xs: "flex-start", sm: "center" }, justifyContent: "space-between", sx: { pb: LIST_CONTROLS_MARGIN_BOTTOM } },
144330
144554
  React__default.createElement(Stack$1, { spacing: 0.5 },
@@ -144366,12 +144590,7 @@ const FinancialAccountsList = (props) => {
144366
144590
  } },
144367
144591
  isEmpty && (React__default.createElement(EmptyState$2, { onAddAccount: props.onAddAccount, theme: theme })),
144368
144592
  !isEmpty && accountsList)),
144369
- isMobile && (React__default.createElement(Fab$1, { "data-testid": "financial-account-fab-add", color: "primary", "aria-label": "Adicionar Conta", onClick: props.onAddAccount, sx: {
144370
- position: "fixed",
144371
- bottom: 16,
144372
- right: 16,
144373
- zIndex: theme.zIndex.fab,
144374
- } },
144593
+ isMobile && !isEmpty && (React__default.createElement(Fab$1, { "data-testid": "financial-account-fab-add", color: "primary", "aria-label": "Adicionar Conta", onClick: props.onAddAccount, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
144375
144594
  React__default.createElement(Add$1, null))))));
144376
144595
  };
144377
144596
  var FinancialAccountsList$1 = React__default.memo(FinancialAccountsList);
@@ -146013,11 +146232,11 @@ const IncomeListItem = React__default.memo(function IncomeListItem({ item, idx,
146013
146232
  React__default.createElement(ListItemSecondaryAction$1, null,
146014
146233
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146015
146234
  React__default.createElement(Typography$1, { variant: "subtitle1", sx: { fontWeight: 600 } }, formattedAmount),
146016
- canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(Button$1, { size: "small", variant: "text", disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146235
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146017
146236
  event.stopPropagation();
146018
146237
  item.id &&
146019
146238
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146020
- } }, settlementActionLabel)) : null))),
146239
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146021
146240
  !isLastItem && React__default.createElement(Divider$1, { component: "li", variant: "inset" })));
146022
146241
  });
146023
146242
  const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146054,14 +146273,18 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146054
146273
  *
146055
146274
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146056
146275
  */
146057
- const headerHeight = isMobile ? 70 : 80;
146276
+ const headerHeight = 80;
146058
146277
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146059
146278
  periodInputValue ||
146060
146279
  onPeriodInputChange ||
146061
146280
  onResetToCurrentPeriod);
146062
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146063
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146064
- const contentOffset = filterHeight + cardHeight + 16;
146281
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146282
+ const cardHeight = 96;
146283
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146284
+ const amountLabel = totalAmountNumber.toLocaleString("pt-BR", {
146285
+ style: "currency",
146286
+ currency: "BRL",
146287
+ });
146065
146288
  const incomes = useMemo(() => (Array.isArray(dataSource.incomes) ? dataSource.incomes : []), [dataSource.incomes]);
146066
146289
  return (React__default.createElement(Box$1, { sx: {
146067
146290
  display: "flex",
@@ -146071,8 +146294,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146071
146294
  position: "relative",
146072
146295
  //pb: isMobile ? 2 : 0,
146073
146296
  } },
146074
- React__default.createElement(PageHeader$2, { title: "Entradas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true }),
146075
- React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146297
+ React__default.createElement(PageHeader$2, { title: "Entradas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146298
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146299
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || metricPeriodLabel, amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "income" }))) : null,
146300
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146076
146301
  position: "fixed",
146077
146302
  left: 0,
146078
146303
  right: 0,
@@ -146109,10 +146334,10 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146109
146334
  style: "currency",
146110
146335
  currency: "BRL",
146111
146336
  })
146112
- : `R$: ${amount}` })))),
146337
+ : `R$: ${amount}` }))))),
146113
146338
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146114
146339
  // push content below the fixed header + card
146115
- paddingTop: `${contentOffset}px`,
146340
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146116
146341
  // ensure content can scroll beneath fixed card
146117
146342
  position: "relative", zIndex: 0 }) },
146118
146343
  incomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146136,13 +146361,8 @@ const IncomeListPage = ({ onBack, onAdd, onSelect, periodLabel, periodInputValue
146136
146361
  var _a, _b;
146137
146362
  return (React__default.createElement(IncomeListItem, { key: `${(_a = inc.date) !== null && _a !== void 0 ? _a : ""}-${idx}-${(_b = inc.amount) !== null && _b !== void 0 ? _b : ""}`, item: inc, idx: idx, isLastItem: idx === incomes.length - 1, formatCurrency: formatCurrency, formatDate: formatDate, getAccountName: getAccountName, onSelect: onSelect, canConfirmTransactions: canConfirmTransactions, isUpdatingSettlementStatus: isUpdatingSettlementStatus, onToggleSettlementStatus: onToggleSettlementStatus }));
146138
146363
  }))),
146139
- isMobile && (React__default.createElement(QuotaGuard, { feature: "incomes", behavior: "hide" },
146140
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Entrada", title: "Adicionar Entrada", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: {
146141
- position: "fixed",
146142
- bottom: 16,
146143
- right: 16,
146144
- zIndex: theme.zIndex.fab,
146145
- } },
146364
+ isMobile && incomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "incomes", behavior: "hide" },
146365
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Entrada", title: "Adicionar Entrada", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
146146
146366
  React__default.createElement(Add$1, null)))))));
146147
146367
  };
146148
146368
  var IncomeListPage$1 = React__default.memo(IncomeListPage);
@@ -146637,12 +146857,12 @@ const OutcomeListItem = React__default.memo(function OutcomeListItem({ item, idx
146637
146857
  React__default.createElement(ListItemSecondaryAction$1, null,
146638
146858
  React__default.createElement(Stack$1, { spacing: 1, alignItems: "flex-end" },
146639
146859
  React__default.createElement(Typography$1, { variant: "subtitle1", sx: { fontWeight: 600 } }, formattedAmount),
146640
- canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(Button$1, { size: "small", variant: "text", disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146860
+ canConfirmTransactions && item.id && onToggleSettlementStatus ? (React__default.createElement(IconButton$1, { "aria-label": settlementActionLabel, disabled: Boolean(isUpdatingSettlementStatus), onClick: (event) => {
146641
146861
  event.stopPropagation();
146642
146862
  if (!item.id)
146643
146863
  return;
146644
146864
  onToggleSettlementStatus(item.id, nextSettlementStatus);
146645
- } }, settlementActionLabel)) : null))),
146865
+ }, sx: { width: 44, height: 44 } }, settlementStatus === "PROJECTED" ? React__default.createElement(Check$1, null) : React__default.createElement(UndoIcon, null))) : null))),
146646
146866
  !isLastItem && React__default.createElement(Divider$1, { component: "li" })));
146647
146867
  });
146648
146868
  const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValue, periodInputMin, periodInputMax, showPeriodFilter, onPeriodInputChange, onResetToCurrentPeriod, canConfirmTransactions, isUpdatingSettlementStatus, onToggleSettlementStatus, data, }) => {
@@ -146665,14 +146885,18 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146665
146885
  *
146666
146886
  * These numbers are numeric pixel values used for paddingTop on the scrollable container.
146667
146887
  */
146668
- const headerHeight = isMobile ? 55 : 64;
146888
+ const headerHeight = 64;
146669
146889
  const shouldShowPeriodFilter = showPeriodFilter !== null && showPeriodFilter !== void 0 ? showPeriodFilter : Boolean(periodLabel ||
146670
146890
  periodInputValue ||
146671
146891
  onPeriodInputChange ||
146672
146892
  onResetToCurrentPeriod);
146673
- const filterHeight = shouldShowPeriodFilter ? (isMobile ? 112 : 72) : 0;
146674
- const cardHeight = isMobile ? 120 : 96; // approximate FinanceMetricCard height
146675
- const contentOffset = filterHeight + cardHeight + 16;
146893
+ const filterHeight = shouldShowPeriodFilter ? 72 : 0;
146894
+ const cardHeight = 96;
146895
+ const contentOffset = isMobile ? 0 : filterHeight + cardHeight + 16;
146896
+ const amountLabel = totalAmount.toLocaleString("pt-BR", {
146897
+ style: "currency",
146898
+ currency: "BRL",
146899
+ });
146676
146900
  const outcomes = useMemo(() => (Array.isArray(dataSource.outcomes) ? dataSource.outcomes : []), [dataSource.outcomes]);
146677
146901
  return (React__default.createElement(Box$1, { sx: {
146678
146902
  display: "flex",
@@ -146680,10 +146904,12 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146680
146904
  minHeight: "100vh",
146681
146905
  backgroundColor: theme.palette.background.default,
146682
146906
  position: "relative",
146683
- pb: isMobile ? 2 : 0,
146907
+ pb: 0,
146684
146908
  } },
146685
- React__default.createElement(PageHeader$2, { title: "Sa\u00EDdas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true }),
146686
- React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146909
+ React__default.createElement(PageHeader$2, { title: "Sa\u00EDdas", onBack: onBack, onAdd: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
146910
+ isMobile && shouldShowPeriodFilter ? (React__default.createElement(Container$1, { maxWidth: "md", sx: { px: PAGE_LIST_CONTAINER_SPACING.px, pt: 1 } },
146911
+ React__default.createElement(FinanceMobilePeriodBar, { periodLabel: periodLabel || "-", amountLabel: amountLabel, periodInputValue: periodInputValue, periodInputMin: periodInputMin, periodInputMax: periodInputMax, onPeriodInputChange: onPeriodInputChange, onResetToCurrentPeriod: onResetToCurrentPeriod, testIdPrefix: "outcome" }))) : null,
146912
+ !isMobile && (React__default.createElement(Box$1, { component: "section", "aria-hidden": true, sx: {
146687
146913
  position: "fixed",
146688
146914
  left: 0,
146689
146915
  right: 0,
@@ -146719,10 +146945,10 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146719
146945
  style: "currency",
146720
146946
  currency: "BRL",
146721
146947
  })
146722
- : `R$: ${amount}` })))),
146948
+ : `R$: ${amount}` }))))),
146723
146949
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), {
146724
146950
  // push content below the fixed header + card
146725
- paddingTop: `${contentOffset}px`,
146951
+ paddingTop: isMobile ? undefined : `${contentOffset}px`, pb: LIST_CONTENT_BOTTOM_PADDING,
146726
146952
  // ensure content can scroll beneath fixed card
146727
146953
  position: "relative", zIndex: 0 }) },
146728
146954
  outcomes.length === 0 ? (React__default.createElement(Box$1, { sx: {
@@ -146746,13 +146972,8 @@ const OutcomeListPage = ({ onSelect, onBack, onAdd, periodLabel, periodInputValu
146746
146972
  var _a, _b;
146747
146973
  return (React__default.createElement(OutcomeListItem, { key: `${(_a = out.date) !== null && _a !== void 0 ? _a : ""}-${idx}-${(_b = out.amount) !== null && _b !== void 0 ? _b : ""}`, item: out, idx: idx, isLastItem: idx === outcomes.length - 1, formatCurrency: formatCurrency, formatDate: formatDate, getAccountName: getAccountName, onSelect: onSelect, canConfirmTransactions: canConfirmTransactions, isUpdatingSettlementStatus: isUpdatingSettlementStatus, onToggleSettlementStatus: onToggleSettlementStatus }));
146748
146974
  }))),
146749
- isMobile && (React__default.createElement(QuotaGuard, { feature: "outcomes", behavior: "hide" },
146750
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Sa\u00EDda", title: "Adicionar Sa\u00EDda", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: {
146751
- position: "fixed",
146752
- bottom: 16,
146753
- right: 16,
146754
- zIndex: theme.zIndex.fab,
146755
- } },
146975
+ isMobile && outcomes.length > 0 && (React__default.createElement(QuotaGuard, { feature: "outcomes", behavior: "hide" },
146976
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar Sa\u00EDda", title: "Adicionar Sa\u00EDda", onClick: onAdd !== null && onAdd !== void 0 ? onAdd : (() => { }), sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.fab }) },
146756
146977
  React__default.createElement(Add$1, null)))))));
146757
146978
  };
146758
146979
  var OutcomeListPage$1 = React__default.memo(OutcomeListPage);
@@ -153249,6 +153470,8 @@ const formatMinutesToHHMM = (totalMinutes) => {
153249
153470
  };
153250
153471
  const getCheckinWindowRange = (event) => {
153251
153472
  var _a, _b;
153473
+ if (event.qrCheckinEnabled === false)
153474
+ return null;
153252
153475
  const startMinutes = parseTimeToMinutes(event.time);
153253
153476
  if (startMinutes === null)
153254
153477
  return null;
@@ -156824,24 +157047,23 @@ const AttendanceInsightsMobileList = ({ mediums }) => {
156824
157047
  return (React__default.createElement(Stack$1, { spacing: LIST_GAP }, mediums.map((medium) => {
156825
157048
  var _a;
156826
157049
  return (React__default.createElement(Paper$1, { key: medium.mediumId, variant: "outlined", sx: LIST_CARD_CONTENT_SX },
156827
- React__default.createElement(Stack$1, { spacing: LIST_GAP },
156828
- React__default.createElement(Stack$1, { direction: "row", spacing: LIST_GAP, alignItems: "center" },
156829
- 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()),
156830
- React__default.createElement(Typography$1, { fontWeight: 600, noWrap: true }, medium.mediumName)),
156831
- React__default.createElement(Stack$1, { direction: "row", spacing: 0.75, flexWrap: "wrap", useFlexGap: true },
156832
- React__default.createElement(Chip$1, { size: "small", label: `Convites: ${medium.invites}` }),
156833
- React__default.createElement(Chip$1, { size: "small", label: `Confirmados: ${medium.confirmed}` }),
156834
- React__default.createElement(Chip$1, { size: "small", label: `Presentes: ${medium.present}` }),
156835
- React__default.createElement(Chip$1, { size: "small", label: `Ausentes: ${medium.absent}` })),
156836
- React__default.createElement(Box$1, null,
156837
- React__default.createElement(Typography$1, { variant: "caption", color: "text.secondary" },
156838
- "Confirma\u00E7\u00E3o: ",
156839
- medium.confirmationRate,
156840
- "% | Presen\u00E7a:",
157050
+ React__default.createElement(Stack$1, { direction: "row", spacing: LIST_GAP, alignItems: "center" },
157051
+ React__default.createElement(Avatar$1, { src: (_a = medium.mediumAvatarUrl) !== null && _a !== void 0 ? _a : undefined, alt: medium.mediumName, sx: { width: 32, height: 32 } }, medium.mediumName.charAt(0).toUpperCase()),
157052
+ React__default.createElement(Stack$1, { sx: { minWidth: 0 } },
157053
+ React__default.createElement(Typography$1, { fontWeight: 600, noWrap: true }, medium.mediumName),
157054
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157055
+ medium.invites,
157056
+ " conv. \u00B7 ",
157057
+ medium.confirmed,
157058
+ " conf."),
157059
+ React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary" },
157060
+ medium.present,
157061
+ " pres. \u00B7 ",
157062
+ medium.absent,
157063
+ " aus. \u00B7",
156841
157064
  " ",
156842
157065
  medium.presenceRate,
156843
- "% | Gap: ",
156844
- medium.absenceGap)))));
157066
+ "%")))));
156845
157067
  })));
156846
157068
  };
156847
157069
 
@@ -158395,9 +158617,19 @@ const sortOptions = [
158395
158617
  { value: "createdAt_desc", label: "Mais recentes" },
158396
158618
  { value: "createdAt_asc", label: "Mais antigos" },
158397
158619
  ];
158620
+ const InventoryCompactRow = ({ item, isLast, onSelect }) => {
158621
+ var _a, _b, _c, _d;
158622
+ const statusLabel = (_a = statusMap[item.status]) === null || _a === void 0 ? void 0 : _a.label;
158623
+ const meta = [item.location, statusLabel].filter(Boolean).join(" · ");
158624
+ return (React__default.createElement(CompactListRow, { title: item.name, meta: meta || undefined, isLast: isLast, testId: `inventory-item-${item.id}`, onClick: () => onSelect(item.id), leading: React__default.createElement(Avatar$1, { src: (_b = item.imageUrl) !== null && _b !== void 0 ? _b : undefined, alt: "", sx: { width: 40, height: 40 } }, ((_d = (_c = item.name) === null || _c === void 0 ? void 0 : _c.charAt(0)) !== null && _d !== void 0 ? _d : "").toUpperCase()), trailing: React__default.createElement(Typography$1, { variant: "body2", fontWeight: 600, sx: { whiteSpace: "nowrap" } },
158625
+ item.quantity,
158626
+ " ",
158627
+ item.unit) }));
158628
+ };
158398
158629
  // --- Main Inventory List Page ---
158399
158630
  const InventoryListPage = (props) => {
158400
158631
  const theme = useTheme$1();
158632
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
158401
158633
  const { data, fns } = useInventoryListPage(props);
158402
158634
  const drawerValue = {
158403
158635
  status: data.selectedStatus,
@@ -158421,7 +158653,7 @@ const InventoryListPage = (props) => {
158421
158653
  backgroundColor: theme.palette.background.default,
158422
158654
  position: "relative",
158423
158655
  }, "data-testid": "inventory-list-page", "data-cy": "inventory-list-page" },
158424
- React__default.createElement(PageHeader$2, { title: "Invent\u00E1rio", onBack: fns.handleBack, showAddButton: data.canAdd, onAdd: data.canAdd ? fns.handleAddItem : undefined, addLabel: "Adicionar" }),
158656
+ React__default.createElement(PageHeader$2, { title: "Invent\u00E1rio", onBack: fns.handleBack, showAddButton: data.canAdd, hideAddButtonOnMobile: true, onAdd: data.canAdd ? fns.handleAddItem : undefined, addLabel: "Adicionar" }),
158425
158657
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
158426
158658
  React__default.createElement(Box$1, { sx: {
158427
158659
  display: "flex",
@@ -158463,8 +158695,13 @@ const InventoryListPage = (props) => {
158463
158695
  pb: LIST_CONTENT_BOTTOM_PADDING,
158464
158696
  }, "data-testid": "inventory-list-content", "data-cy": "inventory-list-content" }, data.items.length === 0 ? (React__default.createElement(InventoryEmptyState, { hasActiveFilters: data.hasActiveFilters, onClearFilters: data.hasActiveFilters ? fns.handleClearFilters : undefined, onAdd: data.canAdd && !data.hasActiveFilters
158465
158697
  ? fns.handleAddItem
158466
- : undefined })) : (React__default.createElement(Fade$1, { in: true },
158467
- React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.items.map((item, index) => (React__default.createElement(InventoryItemCard, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect, onEdit: fns.handleItemEdit })))))))),
158698
+ : undefined })) : (React__default.createElement(Fade$1, { in: true }, isMobile ? (React__default.createElement(Box$1, { sx: {
158699
+ bgcolor: "background.paper",
158700
+ borderRadius: RADIUS.default,
158701
+ border: 1,
158702
+ borderColor: "divider",
158703
+ overflow: "hidden",
158704
+ } }, data.items.map((item, index) => (React__default.createElement(InventoryCompactRow, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect }))))) : (React__default.createElement(Stack$1, { spacing: LIST_GAP }, data.items.map((item, index) => (React__default.createElement(InventoryItemCard, { key: item.id, item: item, isLast: index === data.items.length - 1, onSelect: fns.handleItemSelect, onEdit: fns.handleItemEdit }))))))))),
158468
158705
  React__default.createElement(FilterDrawer, { open: data.isFilterDrawerOpen, onClose: fns.handleCloseFilterDrawer, onOpen: fns.handleToggleFilterDrawer, value: drawerValue, emptyValue: {
158469
158706
  status: "all",
158470
158707
  createdAtSort: data.createdAtSort,
@@ -158478,7 +158715,9 @@ const InventoryListPage = (props) => {
158478
158715
  React__default.createElement(FormControl$1, { fullWidth: true, size: "small" },
158479
158716
  React__default.createElement(InputLabel$1, { id: "inventory-filter-sort-label" }, "Ordena\u00E7\u00E3o"),
158480
158717
  React__default.createElement(Select$1, { labelId: "inventory-filter-sort-label", value: draft.createdAtSort, label: "Ordena\u00E7\u00E3o", onChange: (event) => setDraft(Object.assign(Object.assign({}, draft), { createdAtSort: event.target
158481
- .value })), inputProps: { "data-testid": "inventory-created-at-sort" } }, sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, value: option.value }, option.label))))))))));
158718
+ .value })), inputProps: { "data-testid": "inventory-created-at-sort" } }, sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, value: option.value }, option.label)))))))),
158719
+ data.canAdd && data.items.length > 0 && (React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar item", onClick: fns.handleAddItem, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
158720
+ React__default.createElement(Add$1, null)))));
158482
158721
  };
158483
158722
 
158484
158723
  const DetailSectionCard = ({ icon, title, children, theme, }) => {
@@ -161956,7 +162195,7 @@ objectType({
161956
162195
  const STATUS_TAB_LABELS = {
161957
162196
  ALL: "Todos",
161958
162197
  ACTIVE: "Ativos",
161959
- WAITING_APPROVAL: "Aguardando",
162198
+ WAITING_APPROVAL: "Aguardando aprovação",
161960
162199
  INACTIVE: "Inativos",
161961
162200
  OTHER: "Outros",
161962
162201
  };
@@ -162296,7 +162535,6 @@ const MediumListItem = ({ medium, onSelect, theme }) => {
162296
162535
  const MediumListPage = (props) => {
162297
162536
  var _a;
162298
162537
  const theme = useTheme$1();
162299
- const isCompactScreen = useMediaQuery(theme.breakpoints.down("sm"));
162300
162538
  const { data, fns } = useMediumListPage(props);
162301
162539
  // Sort menu state
162302
162540
  const [sortAnchorEl, setSortAnchorEl] = useState(null);
@@ -162313,17 +162551,12 @@ const MediumListPage = (props) => {
162313
162551
  };
162314
162552
  // Status tabs for PageHeader
162315
162553
  const statusTabs = data.showStatusTabs
162316
- ? data.statusTabs.map((tab) => {
162317
- const compactLabel = isCompactScreen && tab.value === "WAITING_APPROVAL"
162318
- ? "Pend."
162319
- : tab.label;
162320
- return {
162321
- value: tab.value,
162322
- label: tab.value === "WAITING_APPROVAL" && tab.count > 0
162323
- ? `${compactLabel} (${tab.count})`
162324
- : compactLabel,
162325
- };
162326
- })
162554
+ ? data.statusTabs.map((tab) => ({
162555
+ value: tab.value,
162556
+ label: tab.value === "WAITING_APPROVAL" && tab.count > 0
162557
+ ? `${tab.label} (${tab.count})`
162558
+ : tab.label,
162559
+ }))
162327
162560
  : undefined;
162328
162561
  // Guard clause for loading state - show skeleton
162329
162562
  if (data.isLoading) {
@@ -162333,7 +162566,7 @@ const MediumListPage = (props) => {
162333
162566
  minHeight: "100vh",
162334
162567
  backgroundColor: theme.palette.background.default,
162335
162568
  } },
162336
- React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true }),
162569
+ React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true }),
162337
162570
  React__default.createElement(MediumListSkeleton, { count: 6 })));
162338
162571
  }
162339
162572
  return (React__default.createElement(Box$1, { sx: {
@@ -162342,12 +162575,12 @@ const MediumListPage = (props) => {
162342
162575
  minHeight: "100vh",
162343
162576
  backgroundColor: theme.palette.background.default,
162344
162577
  } },
162345
- React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, tabs: statusTabs, selectedTab: data.selectedStatusTab, onTabChange: (value) => fns.handleStatusTabChange(value) }),
162578
+ React__default.createElement(PageHeader$2, { title: "M\u00E9diuns", onBack: fns.handleBack, onAdd: fns.handleAddMedium, addLabel: "Adicionar", showAddButton: true, hideAddButtonOnMobile: true, tabs: statusTabs, selectedTab: data.selectedStatusTab, onTabChange: (value) => fns.handleStatusTabChange(value) }),
162346
162579
  React__default.createElement(Container$1, { maxWidth: "md", sx: PAGE_LIST_CONTAINER_SPACING },
162347
162580
  data.showSearch && (React__default.createElement(Box$1, { sx: {
162348
162581
  display: "flex",
162349
- flexDirection: { xs: "column", sm: "row" },
162350
- alignItems: "stretch",
162582
+ flexDirection: "row",
162583
+ alignItems: "center",
162351
162584
  gap: 1,
162352
162585
  mb: 2,
162353
162586
  } },
@@ -162360,7 +162593,7 @@ const MediumListPage = (props) => {
162360
162593
  "aria-label": "Buscar médium",
162361
162594
  sx: {
162362
162595
  borderRadius: RADIUS.default,
162363
- minHeight: { xs: 40, sm: 44 },
162596
+ minHeight: 44,
162364
162597
  backgroundColor: theme.palette.background.paper,
162365
162598
  "& .MuiInputBase-input": {
162366
162599
  fontSize: { xs: "0.9rem", sm: "1rem" },
@@ -162371,9 +162604,9 @@ const MediumListPage = (props) => {
162371
162604
  },
162372
162605
  } }),
162373
162606
  data.showSort && (React__default.createElement(IconButton$1, { onClick: handleSortMenuOpen, sx: {
162374
- alignSelf: { xs: "flex-end", sm: "stretch" },
162375
- width: { xs: 40, sm: 44 },
162376
- height: { xs: 40, sm: "auto" },
162607
+ flexShrink: 0,
162608
+ width: 44,
162609
+ height: 44,
162377
162610
  backgroundColor: theme.palette.background.paper,
162378
162611
  borderRadius: RADIUS.default,
162379
162612
  border: `1px solid ${theme.palette.divider}`,
@@ -162448,19 +162681,9 @@ const MediumListPage = (props) => {
162448
162681
  vertical: "top",
162449
162682
  horizontal: "right",
162450
162683
  } }, data.sortOptions.map((option) => (React__default.createElement(MenuItem$1, { key: option.value, onClick: () => handleSortSelect(option.value), selected: option.value === data.sortOption }, option.label)))),
162451
- React__default.createElement(QuotaGuard, { feature: "mediums", behavior: "hide" },
162452
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleAddMedium, sx: {
162453
- display: { xs: "flex", sm: "none" },
162454
- position: "fixed",
162455
- bottom: {
162456
- xs: "calc(16px + env(safe-area-inset-bottom, 0px))",
162457
- sm: 24,
162458
- md: 32,
162459
- },
162460
- right: { xs: 16, sm: 24, md: 32 },
162461
- boxShadow: 6,
162462
- } },
162463
- React__default.createElement(BarcodeIcon, null))))));
162684
+ data.filteredMediums.length > 0 && (React__default.createElement(QuotaGuard, { feature: "mediums", behavior: "hide" },
162685
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Adicionar", onClick: fns.handleAddMedium, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
162686
+ React__default.createElement(BarcodeIcon, null)))))));
162464
162687
  };
162465
162688
 
162466
162689
  const sanitizeBirthDate = (date) => {
@@ -173742,9 +173965,19 @@ const transformToRitual = (bath, originLabel, statusLabel) => {
173742
173965
  scheduledCount: (_d = bath.scheduledCount) !== null && _d !== void 0 ? _d : 0,
173743
173966
  };
173744
173967
  };
173968
+ const RitualBathCompactRow = ({ bath, isLast, originLabel, statusLabel, onSelect, onSchedule }) => {
173969
+ var _a, _b;
173970
+ const meta = [(_a = bath.category) === null || _a === void 0 ? void 0 : _a.name, originLabel, statusLabel]
173971
+ .filter(Boolean)
173972
+ .join(" · ");
173973
+ return (React__default.createElement(CompactListRow, { title: bath.title, meta: meta, isLast: isLast, onClick: () => onSelect(bath.id), leading: React__default.createElement(Avatar$1, { src: (_b = bath.imageUrl) !== null && _b !== void 0 ? _b : undefined, alt: "", sx: { width: 40, height: 40 } },
173974
+ React__default.createElement(Spa, { fontSize: "small" })), trailing: onSchedule ? (React__default.createElement(IconButton$1, { "aria-label": `Agendar ${bath.title}`, onClick: () => onSchedule(bath.id), sx: { width: 44, height: 44 } },
173975
+ React__default.createElement(CalendarMonth$1, null))) : undefined }));
173976
+ };
173745
173977
  const RitualBathListPage = (props) => {
173746
173978
  var _a, _b, _c;
173747
173979
  const theme = useTheme$1();
173980
+ const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
173748
173981
  const { data, fns } = useRitualBathListPage(props);
173749
173982
  const showOriginFilter = data.activeTab === "all" && !data.isTerreiro;
173750
173983
  const drawerValue = Object.assign(Object.assign({}, (data.filters.categoryId !== undefined
@@ -173774,7 +174007,7 @@ const RitualBathListPage = (props) => {
173774
174007
  backgroundColor: theme.palette.background.default,
173775
174008
  position: "relative",
173776
174009
  } },
173777
- React__default.createElement(PageHeader$2, { title: "Banhos Rituais", onBack: fns.handleBack, onAdd: fns.handleBathCreate, addLabel: "Adicionar", showAddButton: data.isAdmin, tabs: tabs, selectedTab: data.activeTab, onTabChange: (value) => fns.handleTabChange(value) }),
174010
+ React__default.createElement(PageHeader$2, { title: "Banhos Rituais", onBack: fns.handleBack, onAdd: fns.handleBathCreate, addLabel: "Adicionar", showAddButton: data.isAdmin, hideAddButtonOnMobile: true, tabs: tabs, selectedTab: data.activeTab, onTabChange: (value) => fns.handleTabChange(value) }),
173778
174011
  React__default.createElement(Container$1, { maxWidth: "md", sx: Object.assign(Object.assign({}, PAGE_LIST_CONTAINER_SPACING), { flex: 1 }) },
173779
174012
  React__default.createElement(Box$1, { sx: {
173780
174013
  display: "flex",
@@ -173843,8 +174076,14 @@ const RitualBathListPage = (props) => {
173843
174076
  data.hasActiveFilters ? (React__default.createElement(Button$1, { variant: "outlined", onClick: fns.handleClearFilters, startIcon: React__default.createElement(Clear$1, null) }, "Limpar filtros")) : (data.isAdmin && (React__default.createElement(Button$1, { variant: "contained", startIcon: React__default.createElement(Add$1, null), onClick: fns.handleBathCreate }, "Criar banho ritual"))))),
173844
174077
  !data.isLoading && !data.error && data.ritualBaths.length > 0 && (React__default.createElement(Box$1, { sx: { pb: LIST_CONTENT_BOTTOM_PADDING } },
173845
174078
  React__default.createElement(InfiniteScroll, { hasNextPage: data.hasNextPage, isFetchingNextPage: data.isFetchingNextPage, onLoadMore: fns.handleLoadMore, threshold: 200 },
173846
- 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 },
173847
- React__default.createElement(RitualCard, { ritual: transformToRitual(bath, fns.getOriginLabel(bath.origin), fns.getStatusLabel(bath.status)), onClick: () => fns.handleBathSelect(bath.id), onSchedule: fns.handleScheduleBath }))))),
174079
+ isMobile ? (React__default.createElement(Box$1, { sx: {
174080
+ bgcolor: "background.paper",
174081
+ borderRadius: RADIUS.default,
174082
+ border: 1,
174083
+ borderColor: "divider",
174084
+ overflow: "hidden",
174085
+ } }, data.ritualBaths.map((bath, index) => (React__default.createElement(RitualBathCompactRow, { key: bath.id, bath: bath, isLast: index === data.ritualBaths.length - 1, originLabel: fns.getOriginLabel(bath.origin), statusLabel: fns.getStatusLabel(bath.status), onSelect: fns.handleBathSelect, onSchedule: fns.handleScheduleBath }))))) : (React__default.createElement(Grid$1, { container: true, spacing: LIST_GAP }, data.ritualBaths.map((bath) => (React__default.createElement(Grid$1, { item: true, xs: 12, key: bath.id },
174086
+ React__default.createElement(RitualCard, { ritual: transformToRitual(bath, fns.getOriginLabel(bath.origin), fns.getStatusLabel(bath.status)), onClick: () => fns.handleBathSelect(bath.id), onSchedule: fns.handleScheduleBath })))))),
173848
174087
  data.isFetchingNextPage && (React__default.createElement(Box$1, { sx: {
173849
174088
  display: "flex",
173850
174089
  justifyContent: "center",
@@ -173853,13 +174092,8 @@ const RitualBathListPage = (props) => {
173853
174092
  } },
173854
174093
  React__default.createElement(CircularProgress$1, { size: 28 }))),
173855
174094
  !data.hasNextPage && data.ritualBaths.length > 0 && (React__default.createElement(Typography$1, { variant: "body2", color: "text.secondary", sx: { textAlign: "center", py: 2 } }, "Todos os banhos foram carregados")))))),
173856
- data.isAdmin && (React__default.createElement(QuotaGuard, { feature: "baths", behavior: "hide" },
173857
- React__default.createElement(Fab$1, { color: "primary", "aria-label": "Criar banho ritual", onClick: fns.handleBathCreate, sx: {
173858
- position: "fixed",
173859
- bottom: { xs: 16, sm: 24 },
173860
- right: { xs: 16, sm: 24 },
173861
- zIndex: theme.zIndex.speedDial,
173862
- } },
174095
+ data.isAdmin && data.ritualBaths.length > 0 && (React__default.createElement(QuotaGuard, { feature: "baths", behavior: "hide" },
174096
+ React__default.createElement(Fab$1, { color: "primary", "aria-label": "Criar banho ritual", onClick: fns.handleBathCreate, sx: Object.assign(Object.assign({}, LIST_FAB_POSITION_SX), { zIndex: theme.zIndex.speedDial }) },
173863
174097
  React__default.createElement(Add$1, null)))),
173864
174098
  React__default.createElement(FilterDrawer, { open: data.isFilterDrawerOpen, onClose: fns.handleCloseFilterDrawer, onOpen: fns.handleToggleFilterDrawer, value: drawerValue, emptyValue: {}, countActiveFilters: countRitualBathDrawerFilters, "data-testid": "ritual-bath-filter-drawer", onFilter: (filters) => {
173865
174099
  fns.handleCategoryFilter(filters.categoryId);
@@ -195571,5 +195805,5 @@ var index_es = /*#__PURE__*/Object.freeze({
195571
195805
  vectorsRatio: vectorsRatio
195572
195806
  });
195573
195807
 
195574
- export { ACTIVITY_STEP_ORDER, ALSO_EXPERIENCED_LABEL, AVATAR_SIZE_CONFIG, AcademyCertificatePreview, AcademyModulePage, AcademyPage, AccessBlockedPage, AccountOptionSchema, BasicInfoSchema as ActivityBasicInfoSchema, ActivityChatInsumosPicker, ActivityChatMembersPicker, ActivityCheckinWindowSchema, ActivityDetailPage$1 as ActivityDetailPage, ActivityEditPage, ActivityFormChatSummaryCard, InsumosSelectionSchema$1 as ActivityInsumosSelectionSchema, ActivityListPage, MembersSelectionSchema as ActivityMembersSelectionSchema, ActivityOnboardingPage, TemplateSchema as ActivityTemplateSchema, TimeSelectionSchema as ActivityTimeSelectionSchema, AddMediumByQRCodePage, AddressInfoSchema, AddressPage, AffiliateProgramPage, AlsoExperiencedButton, AttendanceCheckinCta$1 as AttendanceCheckinCta, AttendanceCheckinDialog, AttendanceCheckinEntryPage, AttendanceInsightsPage, AvatarWithBadge, BADGE_SIZE_CONFIG, BADGE_TIER_COLORS, BADGE_TIER_CONFIG, BADGE_TIER_LABELS, BADGE_TYPE_LABELS, BANK_OPTIONS, BANNER_GRADIENT_KEYS, BANNER_GRADIENT_PRESETS, BRAZILIAN_STATES$1 as BRAZILIAN_STATES, BadgeProgressSchema, BadgeTierSchema$2 as BadgeTierSchema, BadgesPage, BadgeInfoSchema as BadgesPageBadgeInfoSchema, BadgeTierSchema as BadgesPageBadgeTierSchema, BadgeTypeSchema as BadgesPageBadgeTypeSchema, BadgesPagePropsSchema, BathCategorySchema$2 as BathCategorySchema, BlockDialog, BrazilianStateUFSchema, CARD_CONTENT_STYLES, CATEGORY_CONFIG, CATEGORY_LABELS, CREATE_EXPERIENCE_STEP_LABELS, CREATE_EXPERIENCE_STEP_ORDER, CREATE_QUESTION_STEP_LABELS, CREATE_QUESTION_STEP_ORDER, CellphoneInput, CellphoneInputPropsSchema, CompletenessCard, ConnectionButton, ContactArraySchema, ContactPage, ContactPagePropsSchema, ContactSchema, ContactSectionCardPropsSchema, ContributionImpactCard, CopyTargetSchema, CreateExperiencePage, CreateExperienceValuesSchema, CreateIngressoPage, CreateQuestionPage, CreateQuestionValuesSchema, CredentialsApiErrorSchema, CredentialsDataSchema, CredentialsFormStateSchema, CredentialsPage, CredentialsPagePropsSchema, CredentialsValidationErrorsSchema, CustomBannerGradientPresetSchema, DAILY_MESSAGE_POOL, DEFAULT_BANNER_GRADIENT_KEY, DEFAULT_HOME_WIDGET_ORDER, DEFAULT_HOME_WIDGET_VISIBILITY, DailyRitualCard, DescriptionBox$3 as DescriptionBox, DetailedPermissionSchema, EMPTY_ELEMENT_SIZE, EMPTY_ELEMENT_SIZE as EMPTY_SLOT_SIZE, EVENT_STEP_ORDER, EditEventPage, EditJourneyPage, EventAISuggestionsPage, EventBasicInfoSchema, EventChatActivitiesPicker, EventChatInsumosPicker, EventChatLocationPicker, EventChatMembersPicker, EventChatTypePicker, EventCheckinWindowSchema, EventDateTimeSchema, EventDetailPage$1 as EventDetailPage, EventFormChatSummaryCard, EventFormValuesSchema, InsumosSelectionSchema as EventInsumosSelectionSchema, EventLocationSchema, EventOnboardingPage, EventParticipantsSchema, EventProfileBlockedPage, EventPublicationFormChatSummaryCard, EventTicketingManagementPage, EventsPage, ExperienceCard, ExperienceCategoryBadge, ExperienceCategorySchema, ExperienceCommentRow, ExperienceCommentSchema, ExperienceCommentsSheet, ExperienceComposer, ExperienceDetailPage, ExperienceDetailView, ExperienceEngageMenu, ExperiencePostTypeBadge, ExperiencePostTypeSchema, ExperienceReactionBar, ExperienceReactionTypeSchema, ExperienceSchema, ExpiredLinkPage, FORM_CONFIG, FacebookAuthButton, FilterDrawerShellPropsSchema, FinanceMetricCard$1 as FinanceMetricCard, FinancialAccountPage, FinancialAccountsList$1 as FinancialAccountsList, FinancialOverviewCard, FinancialRegisterPage, FinancialTransparencyPage, ForbiddenPage, ForgotPasswordPage, FormChatAssistant, FormChatListSelect, FormChatPickerDrawer, FormChatSelectionBar, GLOW_EFFECT, GamificationBadgeSchema, GamificationBadgeTierEnum, GamificationBadgeTypeEnum, GamificationCard, GamificationCardPropsSchema, GamificationHelpPage, GamificationHelpPagePropsSchema, GamificationHelpTopicSchema, GamificationSummarySchema, GoogleAuthButton, HOME_BELL_NOTIFICATION_LIMIT, HOME_MEASURE_SLOTS, HOME_WIDGETS_CATALOG, HomePage, Image$1 as Image, ImageButton, IncomeListPage$1 as IncomeListPage, IncomingFinancialPage, InfiniteScroll, InfiniteScrollPropsSchema, InstallPrompt, InsumosAvatarGroup, InventoryItemDetail$1 as InventoryItemDetailPage, InventoryItemOnboardingPage, InventoryListItemPage, InventoryListPage, InviteCard$1 as InviteCard, InviteLandingPage, InviteLandingPagePropsSchema, InviteLandingViewStateSchema, InviteTerreiroInfoSchema, JoinTerreiroPage, JourneyProfile, JourneyProfilePage, LAYOUT, LabeledBrazilianStateSelect, LabeledBrazilianStateSelectPropsSchema, LabeledDatePickerPropsSchema, LabeledFieldHeaderPropsSchema, LabeledMinuteInput, LabeledMonthPickerPropsSchema, LabeledTextField$1 as LabeledTextField, LabeledTimePicker, LeaderboardPage, LeaderboardPagePropsSchema, LoadMoreResultSchema, Loading, LunarEclipseSchema, MeasuredLayoutProvider, MediumBadgeSchema, MediumFinancialTransparencyPage, MediumHubPage, MediumListPage, MediumPage, MediumPointsSchema, MediumProfilePage, MediumProfileViewPage$1 as MediumProfileViewPage, MediumStatus$1 as MediumStatus, MemberListItem$1 as MemberListItem, MonthlyFeeInfoSchema, MonthlyFeePage, MonthlyFeePaymentsManagementPage, MoonApiResponseSchema, MoonCard, MoonCardContent, MoonCardPropsSchema, MoonCardSkeleton, MoonDataSchema, MoonDetailedSchema, MoonEventsSchema, MoonPositionSchema, MoonZodiacSchema, MyPermissionsDetailedSchema, MyPermissionsPage, MyPermissionsPagePropsSchema, NearbyTerreiroSearchPage, NotFoundPage, NotificationSettingsPage, NotificationSettingsPagePropsSchema, NotificationsPage, ONBOARDING_TERREIRO_STEPS, ORIGIN_LABELS, OnboardingFormChatPanel, OnboardingFormChatSummaryCard, OnboardingIntroModal, OnboardingMediumPage, OnboardingPage, OnboardingTerreiroPage$1 as OnboardingTerreiroPage, OnboardingTerreiroPagePropsSchema, OutcomeListPage$1 as OutcomeListPage, OutgoingFinancialPage, PAYMENT_METHOD_OPTIONS$1 as PAYMENT_METHOD_OPTIONS, PIX_KEY_TYPE_OPTIONS, POST_TYPE_LABELS, PROFILE_SECTION_CONFIG, PROFILE_SECTION_WEIGHTS, PWAUpdatePromptUI, PageHeader$2 as PageHeader, PaginationInfoSchema, ParticipationResponseButtons$1 as ParticipationResponseButtons, ParticipationStatusBadge$1 as ParticipationStatusBadge, ParticipationStatusLabels, PasskeyCredentialSchema, PasskeyEnrollmentPrompt, PasskeyLoginDialog, PasswordInfoSchemaWithConfirmation, PasswordVisibilitySchema, PaymentStatusBanner, PeerMessageList, PendingApprovalBlockedPage, PermissionSelector, PermissionStatsSchema, PersonalInfoSchema, PhaseEventSchema, PlanChangePayloadSchema, PlanManagementPage, PlanManagementPagePropsSchema, PointsSummarySchema, PositionInfoSchema, PostGiraPrompt, PrivacySelector, ProfileCompletenessCard, ProfileDetailsPage, PublicEventTicketPage, PublicExperiencePreviewSchema, PublicProfilePreviewSchema, PublicQuestionPreviewSchema, PublicSocialPreviewDataSchema, PublicSocialPreviewPage, PublicTerreiroAgendaPage, QUESTION_SOURCE_LABELS, QUICK_ONBOARDING_TERREIRO_STEPS, QUICK_TERREIRO_ONBOARDING_FIELDS_BY_STEP, QrAnalyticsEventNameSchema, QrLandingPage, QrLandingPagePropsSchema, QrScannerSurface$1 as QrScannerSurface, QrTrackingEventSchema, QrTrackingPayloadSchema, QrVariantSchema, QuestionAnswerCard, QuestionAnswerSchema, QuestionAnswersSheet, QuestionCard, QuestionComposer, QuestionDetailPage, QuestionSchema, QuestionSourceBadge, QuestionSourceSchema, QuestionsPage, QuickActionSchema$1 as QuickActionSchema, QuickActions, QuickActionsPropsSchema, QuickMediumOnboardingFormStateSchema, QuickPersonalInfoSchema, QuickPersonalInfoStep, QuickTerreiroOnboardingFormStateSchema, QuickTerreiroPersonalInfoSchema, QuickTerreiroStepValidationSchemas, QuotaBehaviorSchema, QuotaGuard, QuotaGuardPropsSchema, QuotaStatusSchema, QuotaSummaryCard, QuotaSummaryCardPropsSchema, RADIUS, RANKING_PERIOD_LABELS, RANKING_SCOPE_LABELS, REACTION_LABELS, REPORT_REASON_LABELS, RankingEntrySchema, RankingPeriodEnum, RankingResultSchema, RankingScopeEnum, ReasonDialog$1 as ReasonDialog, ReasonDialogPropsSchema, ReligionSchema, ReportDialog, ResetPasswordPage, BasicInfoStepSchema as RitualBathBasicInfoStepSchema, RitualBathDetailPage$1 as RitualBathDetailPage, RitualBathDetailPagePropsSchema, RitualBathDetailSchema, RitualBathFilterSchema, RitualBathFormValuesSchema, RitualBathIngredientSchema$2 as RitualBathIngredientSchema, IngredientsStepSchema as RitualBathIngredientsStepSchema, RitualBathItemSchema, BathCategorySchema$1 as RitualBathListCategorySchema, RitualBathListPage, RitualBathOccurrenceSchema, RitualBathOnboardingPage, RitualBathOriginSchema, OriginStepSchema as RitualBathOriginStepSchema, RitualBathScheduleFormSchema, RitualBathSchedulePage, RitualBathSchedulePagePropsSchema, RitualBathScheduleSummarySchema, RitualBathStatusSchema, RitualBathStepSchema$2 as RitualBathStepSchema, RitualBathStepTypeSchema, StepsStepSchema as RitualBathStepsStepSchema, RitualCard, RoleFormPage, RoleFormValuesSchema, RoleInfoSchema, RoleManagementPage, RoleSchema, SKELETON_SIZES, SOCIAL_BIO_MAX_LENGTH, SOCIAL_DISPLAY_NAME_MAX_LENGTH, SOCIAL_HOME_BOTTOM_NAV_CLEARANCE, SOCIAL_HOME_BOTTOM_NAV_FLOAT_MB, SOCIAL_HOME_BOTTOM_NAV_HEIGHT, SOCIAL_HOME_HEADER_HEIGHT, SOCIAL_ONBOARDING_INTRO_STEPS, SOCIAL_ONBOARDING_STEP_LABELS, SOCIAL_ONBOARDING_STEP_ORDER, SOCIAL_TRADITION_MAX_LENGTH, SOCIAL_USERNAME_MAX_LENGTH, STATUS_COLORS, STATUS_LABELS, STEP_ORDER, STEP_TYPE_ICONS, STEP_TYPE_LABELS, ScheduleDateTimeFields$1 as ScheduleDateTimeFields, SelectField$2 as SelectField, ShareDrawerPropsSchema, SharePlatformSchema, ShareSheet, SharedExpensesCard, SigninPage, SignupPage, SimilarExperienceCard, SimilarPage, SimilarPeopleCard, SimilarPersonSchema, SingleContactSchema, SocialAccountDrawer, SocialAuthorSchema, SocialConnectionsPage, SocialConversationPage, SocialConversationPeerSchema, SocialConversationRow, SocialConversationSchema, SocialCreateActionsSheet, SocialDeleteConfirmDialog, SocialDiscoverPage, SocialEditTextDialog, SocialEmptyState, SocialErrorState, SocialFeedItemSchema, SocialHomeBottomNav, SocialHomeCurrentUserSchema, SocialHomeHeader, SocialHomePage, SocialInboxPage, SocialMessageBubble, SocialMessageComposer, SocialMessageDeliveryStatusSchema, SocialMessageSchema, SocialNotificationsPage, SocialOnboardingIntro, SocialOnboardingPage, SocialOnboardingValuesSchema, SocialPrivacySettingsPage, SocialProfileFieldsSchema, SocialProfileSchema, SocialReadOnlyNotice, SocialReportReasonSchema, SocialSavedPage, SocialSkeleton, SocialUnreadIndicator, SocialUsernameSchema, SocialVerificationEarnedCelebration, SocialVerificationProgressSheet, SocialVisibilitySchema, SpiritualFormChatSummaryCard, SpiritualProfilePage, StreakInfoSchema, SubscriptionGuard, SubscriptionProvider, SubscriptionRequiredForMediumPage, SuggestionsCarousel, SupplyPlanBlockerSchema, SupplyPlanCostsSchema, SupplyPlanItemSchema, SupplyPlanMissionSchema, SupplyPlanPage, SupplyPlanPagePropsSchema, SupplyPlanReadinessSchema, SupplyPlanSchema, SupplyPlanSourceActivitySchema, SupplyPlanSourceEventSchema, SupplyPlanSummarySchema, SystemSettingsPage, TERREIRO_COMPLETION_MESSAGES, TERREIRO_ONBOARDING_FIELDS_BY_STEP, TERREIRO_SECTION_CONFIG, TERREIRO_SECTION_WEIGHTS, TOP_BAR_HEIGHTS, TYPOGRAPHY_SCALE, TerreiroFinancialInfoSchema, TerreiroOnboardingApiErrorSchema, TerreiroOnboardingFormStateSchema, TerreiroOnboardingValidationErrorsSchema, TerreiroPersonalInfoSchema, TerreiroPolicyPage, TerreiroPolicyPagePropsSchema, TerreiroProfileDataPage$1 as TerreiroProfileDataPage, TerreiroProfilePage, TerreiroReadonlyProfilePage, TerreiroRegistrationSchema, TerreiroRegistrationWithoutPasswordSchema, TerreiroSchema$2 as TerreiroSchema, TerreiroSearchPage, TerreiroSectionCard, TerreiroSectionCardPropsSchema, TerreiroStatusSchema, TerreiroStepValidationSchemas, TerreiroSubscriptionInfoSchema, ThemeButton, ThemeProvider, TicketVoucherPage, TicketingClaimFormChatSummaryCard, TraditionBadge, UnitCostMetaSchema, UpcomingPhasesSchema, UpgradePrompt, UsageBar, UsageBarPropsSchema, UsageProvider, UsageQuotaPage, UsageQuotaPagePropsSchema, UseInfiniteScrollReturnSchema, VISIBILITY_HELPERS, VISIBILITY_LABELS, ValidationErrorsSchema, VerificationBadge, WhatsAppShareButton, WhatsNewModal, authorDisplayName, brand, buildAcademyCertificatePreviewNode, buildItemReasonText, buildMergedInsumos$1 as buildMergedInsumos, buildMergedMediums$1 as buildMergedMediums, defaultDisplayProps, defaultInputProps, drawerSheetRadius, filterSupplyPlanMissions, formatRelativeTime, formatScheduleDate, formatSecondsAsMinutesLabel, formatCurrency$1 as formatTerreiroCurrency, formatPhone as formatTerreiroPhone, generateAcademyCertificatePdf, getBannerGradient, getCardBaseStyles, getContentMarginTop, getContentPaddingTop, getCustomBannerGradient, getDateString, getDefaultHomeWidgetOrder, getHomeWidgetsForProfile, getReorderableHomeWidgetsForProfile, getSocialBannerSx, getSocialUsernameError, getTopBarExpandedHeight, getTopBarHeight, getTopBarStackHeight, installPromptPropsSchema, isDefaultHomeWidgetOrder, isPasskeySupported, isValidEmail, isValidPassword, mapPasskeyError, mapRawMemberToActivityChatOption, mediumStatusLabelsPtBr, mergeHomeWidgetOrder, mergeHomeWidgetVisibility, mockCalendarActivities, mockCalendarEvents, mockCalendarRitualBaths, mockHomePageProps, mockLoadingHomePageProps, mockMediumHomePageProps, mockMoonData, mockPendingMediumHomePageProps, mockQuickActions, mockRituals, mockSupplyPlanEmpty, mockSupplyPlanSufficientWithDemand, mockSupplyPlanWithCosts, mockSupplyPlanWithoutCosts, mockTerreiros, mockUpcomingEvents, mockUser, moveHomeWidgetInOrder, onboardingIntroModalPropsSchema, onboardingIntroModeSchema, onboardingIntroProfileContextSchema, overlayZIndex, parseScheduleDate, radiusPx, reorderHomeWidgetOrder, resolveExperiencePostType, secondsToRoundedMinutes, startPasskeyAuthentication, startPasskeyRegistration, useAcademyModulePage, useAcademyPage, useAccessBlockedPage, useActivityOnboarding, useAddressSectionCard, useAffiliateProgramPage, useAttendanceCheckinEntryPage, useAttendanceInsightsPage, useAvatarWithBadge, useBadgesPage, useCellphoneInput, useCompletenessCard, useContactPage, useContentClearance, useCredentialsPage, useElementSize, useEventAISuggestionsPage, useFilterDrawer, useFinancialRegister, useFinancialTransparencyPage, useFormChatAssistant, useGamificationCard, useGamificationHelpPage, useHideOnScroll, useHomePage, useInfiniteScroll, useInstallPrompt, useInventoryListItemPage, useInventoryListPage, useInviteLandingPage, useJoinTerreiroPage, useLabeledBrazilianStateSelect, useLeaderboardPage, useMeasureSlot, useMeasuredLayoutContext, useMeasuredSlot, useMediumFinancialTransparencyPage, useMediumHubPage, useMemberListItem, useMonthlyFeePaymentsManagementPage, useMoonCard, useMyPermissionsPage, useNotFoundPage, useNotificationSettingsPage, useOnboardingIntroModal, useOnboardingMedium, useOnboardingPage, useOnboardingTerreiro, useOptionalMeasuredLayoutContext, useOptionalUsageContext, usePWAUpdatePromptUI, usePermissionSelector, usePlanManagementPage, useProfileCompletenessCard, useQrLandingPage, useQuotaGuard, useRitualBathDetailPage, useRitualBathListPage, useRitualBathOnboarding, useRoleFormPage, useRoleManagementPage, useSelectMediumsPage, useSpiritualProfilePage, useSubscription, useSubscriptionContext, useSubscriptionGuard, useSupplyPlanPage, useTerreiroPolicyPage, useTerreiroProfileDataPage, useTerreiroProfilePage$1 as useTerreiroProfilePage, useTerreiroSectionCard, useThemeProvider, useUpgradePrompt, useUsageContext, useUsageQuota, useUsageQuotaPage, useVerificationBadge, useWhatsNewModal, validateEmail$1 as validateEmail, validatePassword$1 as validatePassword, validatePhoneNumber, validateCurrency as validateTerreiroCurrency, validateDueDay as validateTerreiroDueDay, validatePassword as validateTerreiroPassword, validatePasswordConfirmation as validateTerreiroPasswordConfirmation, validatePhone as validateTerreiroPhone, whatsNewAnnouncementSchema, whatsNewModalPropsSchema, whatsNewSlideSchema };
195808
+ export { ACTIVITY_STEP_ORDER, ALSO_EXPERIENCED_LABEL, AVATAR_SIZE_CONFIG, AcademyCertificatePreview, AcademyModulePage, AcademyPage, AccessBlockedPage, AccountOptionSchema, BasicInfoSchema as ActivityBasicInfoSchema, ActivityChatInsumosPicker, ActivityChatMembersPicker, ActivityCheckinWindowSchema, ActivityDetailPage$1 as ActivityDetailPage, ActivityEditPage, ActivityFormChatSummaryCard, InsumosSelectionSchema$1 as ActivityInsumosSelectionSchema, ActivityListPage, MembersSelectionSchema as ActivityMembersSelectionSchema, ActivityOnboardingPage, TemplateSchema as ActivityTemplateSchema, TimeSelectionSchema as ActivityTimeSelectionSchema, AddMediumByQRCodePage, AddressInfoSchema, AddressPage, AffiliateProgramPage, AlsoExperiencedButton, AttendanceCheckinCta$1 as AttendanceCheckinCta, AttendanceCheckinDialog, AttendanceCheckinEntryPage, AttendanceInsightsPage, AvatarWithBadge, BADGE_SIZE_CONFIG, BADGE_TIER_COLORS, BADGE_TIER_CONFIG, BADGE_TIER_LABELS, BADGE_TYPE_LABELS, BANK_OPTIONS, BANNER_GRADIENT_KEYS, BANNER_GRADIENT_PRESETS, BRAZILIAN_STATES$1 as BRAZILIAN_STATES, BadgeProgressSchema, BadgeTierSchema$2 as BadgeTierSchema, BadgesPage, BadgeInfoSchema as BadgesPageBadgeInfoSchema, BadgeTierSchema as BadgesPageBadgeTierSchema, BadgeTypeSchema as BadgesPageBadgeTypeSchema, BadgesPagePropsSchema, BathCategorySchema$2 as BathCategorySchema, BlockDialog, BrazilianStateUFSchema, CARD_CONTENT_STYLES, CATEGORY_CONFIG, CATEGORY_LABELS, CREATE_EXPERIENCE_STEP_LABELS, CREATE_EXPERIENCE_STEP_ORDER, CREATE_QUESTION_STEP_LABELS, CREATE_QUESTION_STEP_ORDER, CellphoneInput, CellphoneInputPropsSchema, CompactListDateBlock, CompactListRow, CompletenessCard, ConnectionButton, ContactArraySchema, ContactPage, ContactPagePropsSchema, ContactSchema, ContactSectionCardPropsSchema, ContributionImpactCard, CopyTargetSchema, CreateExperiencePage, CreateExperienceValuesSchema, CreateIngressoPage, CreateQuestionPage, CreateQuestionValuesSchema, CredentialsApiErrorSchema, CredentialsDataSchema, CredentialsFormStateSchema, CredentialsPage, CredentialsPagePropsSchema, CredentialsValidationErrorsSchema, CustomBannerGradientPresetSchema, DAILY_MESSAGE_POOL, DEFAULT_BANNER_GRADIENT_KEY, DEFAULT_HOME_WIDGET_ORDER, DEFAULT_HOME_WIDGET_VISIBILITY, DailyRitualCard, DescriptionBox$3 as DescriptionBox, DetailedPermissionSchema, EMPTY_ELEMENT_SIZE, EMPTY_ELEMENT_SIZE as EMPTY_SLOT_SIZE, EVENT_STEP_ORDER, EditEventPage, EditJourneyPage, EventAISuggestionsPage, EventBasicInfoSchema, EventChatActivitiesPicker, EventChatInsumosPicker, EventChatLocationPicker, EventChatMembersPicker, EventChatTypePicker, EventCheckinWindowSchema, EventDateTimeSchema, EventDetailPage$1 as EventDetailPage, EventFormChatSummaryCard, EventFormValuesSchema, InsumosSelectionSchema as EventInsumosSelectionSchema, EventLocationSchema, EventOnboardingPage, EventParticipantsSchema, EventProfileBlockedPage, EventPublicationFormChatSummaryCard, EventTicketingManagementPage, EventsPage, ExperienceCard, ExperienceCategoryBadge, ExperienceCategorySchema, ExperienceCommentRow, ExperienceCommentSchema, ExperienceCommentsSheet, ExperienceComposer, ExperienceDetailPage, ExperienceDetailView, ExperienceEngageMenu, ExperiencePostTypeBadge, ExperiencePostTypeSchema, ExperienceReactionBar, ExperienceReactionTypeSchema, ExperienceSchema, ExpiredLinkPage, FORM_CONFIG, FacebookAuthButton, FilterDrawerShellPropsSchema, FinanceMetricCard$1 as FinanceMetricCard, FinancialAccountPage, FinancialAccountsList$1 as FinancialAccountsList, FinancialOverviewCard, FinancialRegisterPage, FinancialTransparencyPage, ForbiddenPage, ForgotPasswordPage, FormChatAssistant, FormChatListSelect, FormChatPickerDrawer, FormChatSelectionBar, GLOW_EFFECT, GamificationBadgeSchema, GamificationBadgeTierEnum, GamificationBadgeTypeEnum, GamificationCard, GamificationCardPropsSchema, GamificationHelpPage, GamificationHelpPagePropsSchema, GamificationHelpTopicSchema, GamificationSummarySchema, GoogleAuthButton, HOME_BELL_NOTIFICATION_LIMIT, HOME_MEASURE_SLOTS, HOME_WIDGETS_CATALOG, HomePage, Image$1 as Image, ImageButton, IncomeListPage$1 as IncomeListPage, IncomingFinancialPage, InfiniteScroll, InfiniteScrollPropsSchema, InstallPrompt, InsumosAvatarGroup, InventoryItemDetail$1 as InventoryItemDetailPage, InventoryItemOnboardingPage, InventoryListItemPage, InventoryListPage, InviteCard$1 as InviteCard, InviteLandingPage, InviteLandingPagePropsSchema, InviteLandingViewStateSchema, InviteTerreiroInfoSchema, JoinTerreiroPage, JourneyProfile, JourneyProfilePage, LAYOUT, LabeledBrazilianStateSelect, LabeledBrazilianStateSelectPropsSchema, LabeledDatePickerPropsSchema, LabeledFieldHeaderPropsSchema, LabeledMinuteInput, LabeledMonthPickerPropsSchema, LabeledTextField$1 as LabeledTextField, LabeledTimePicker, LeaderboardPage, LeaderboardPagePropsSchema, LoadMoreResultSchema, Loading, LunarEclipseSchema, MeasuredLayoutProvider, MediumBadgeSchema, MediumFinancialTransparencyPage, MediumHubPage, MediumListPage, MediumPage, MediumPointsSchema, MediumProfilePage, MediumProfileViewPage$1 as MediumProfileViewPage, MediumStatus$1 as MediumStatus, MemberListItem$1 as MemberListItem, MonthlyFeeInfoSchema, MonthlyFeePage, MonthlyFeePaymentsManagementPage, MoonApiResponseSchema, MoonCard, MoonCardContent, MoonCardPropsSchema, MoonCardSkeleton, MoonDataSchema, MoonDetailedSchema, MoonEventsSchema, MoonPositionSchema, MoonZodiacSchema, MyPermissionsDetailedSchema, MyPermissionsPage, MyPermissionsPagePropsSchema, NearbyTerreiroSearchPage, NotFoundPage, NotificationSettingsPage, NotificationSettingsPagePropsSchema, NotificationsPage, ONBOARDING_TERREIRO_STEPS, ORIGIN_LABELS, OnboardingFormChatPanel, OnboardingFormChatSummaryCard, OnboardingIntroModal, OnboardingMediumPage, OnboardingPage, OnboardingTerreiroPage$1 as OnboardingTerreiroPage, OnboardingTerreiroPagePropsSchema, OutcomeListPage$1 as OutcomeListPage, OutgoingFinancialPage, PAYMENT_METHOD_OPTIONS$1 as PAYMENT_METHOD_OPTIONS, PIX_KEY_TYPE_OPTIONS, POST_TYPE_LABELS, PROFILE_SECTION_CONFIG, PROFILE_SECTION_WEIGHTS, PWAUpdatePromptUI, PageHeader$2 as PageHeader, PaginationInfoSchema, ParticipationResponseButtons$1 as ParticipationResponseButtons, ParticipationStatusBadge$1 as ParticipationStatusBadge, ParticipationStatusLabels, PasskeyCredentialSchema, PasskeyEnrollmentPrompt, PasskeyLoginDialog, PasswordInfoSchemaWithConfirmation, PasswordVisibilitySchema, PaymentStatusBanner, PeerMessageList, PendingApprovalBlockedPage, PermissionSelector, PermissionStatsSchema, PersonalInfoSchema, PhaseEventSchema, PlanChangePayloadSchema, PlanManagementPage, PlanManagementPagePropsSchema, PointsSummarySchema, PositionInfoSchema, PostGiraPrompt, PrivacySelector, ProfileCompletenessCard, ProfileDetailsPage, PublicEventTicketPage, PublicExperiencePreviewSchema, PublicProfilePreviewSchema, PublicQuestionPreviewSchema, PublicSocialPreviewDataSchema, PublicSocialPreviewPage, PublicTerreiroAgendaPage, QUESTION_SOURCE_LABELS, QUICK_ONBOARDING_TERREIRO_STEPS, QUICK_TERREIRO_ONBOARDING_FIELDS_BY_STEP, QrAnalyticsEventNameSchema, QrLandingPage, QrLandingPagePropsSchema, QrScannerSurface$1 as QrScannerSurface, QrTrackingEventSchema, QrTrackingPayloadSchema, QrVariantSchema, QuestionAnswerCard, QuestionAnswerSchema, QuestionAnswersSheet, QuestionCard, QuestionComposer, QuestionDetailPage, QuestionSchema, QuestionSourceBadge, QuestionSourceSchema, QuestionsPage, QuickActionSchema$1 as QuickActionSchema, QuickActions, QuickActionsPropsSchema, QuickMediumOnboardingFormStateSchema, QuickPersonalInfoSchema, QuickPersonalInfoStep, QuickTerreiroOnboardingFormStateSchema, QuickTerreiroPersonalInfoSchema, QuickTerreiroStepValidationSchemas, QuotaBehaviorSchema, QuotaGuard, QuotaGuardPropsSchema, QuotaStatusSchema, QuotaSummaryCard, QuotaSummaryCardPropsSchema, RADIUS, RANKING_PERIOD_LABELS, RANKING_SCOPE_LABELS, REACTION_LABELS, REPORT_REASON_LABELS, RankingEntrySchema, RankingPeriodEnum, RankingResultSchema, RankingScopeEnum, ReasonDialog$1 as ReasonDialog, ReasonDialogPropsSchema, ReligionSchema, ReportDialog, ResetPasswordPage, BasicInfoStepSchema as RitualBathBasicInfoStepSchema, RitualBathDetailPage$1 as RitualBathDetailPage, RitualBathDetailPagePropsSchema, RitualBathDetailSchema, RitualBathFilterSchema, RitualBathFormValuesSchema, RitualBathIngredientSchema$2 as RitualBathIngredientSchema, IngredientsStepSchema as RitualBathIngredientsStepSchema, RitualBathItemSchema, BathCategorySchema$1 as RitualBathListCategorySchema, RitualBathListPage, RitualBathOccurrenceSchema, RitualBathOnboardingPage, RitualBathOriginSchema, OriginStepSchema as RitualBathOriginStepSchema, RitualBathScheduleFormSchema, RitualBathSchedulePage, RitualBathSchedulePagePropsSchema, RitualBathScheduleSummarySchema, RitualBathStatusSchema, RitualBathStepSchema$2 as RitualBathStepSchema, RitualBathStepTypeSchema, StepsStepSchema as RitualBathStepsStepSchema, RitualCard, RoleFormPage, RoleFormValuesSchema, RoleInfoSchema, RoleManagementPage, RoleSchema, SKELETON_SIZES, SOCIAL_BIO_MAX_LENGTH, SOCIAL_DISPLAY_NAME_MAX_LENGTH, SOCIAL_HOME_BOTTOM_NAV_CLEARANCE, SOCIAL_HOME_BOTTOM_NAV_FLOAT_MB, SOCIAL_HOME_BOTTOM_NAV_HEIGHT, SOCIAL_HOME_HEADER_HEIGHT, SOCIAL_ONBOARDING_INTRO_STEPS, SOCIAL_ONBOARDING_STEP_LABELS, SOCIAL_ONBOARDING_STEP_ORDER, SOCIAL_TRADITION_MAX_LENGTH, SOCIAL_USERNAME_MAX_LENGTH, STATUS_COLORS, STATUS_LABELS, STEP_ORDER, STEP_TYPE_ICONS, STEP_TYPE_LABELS, ScheduleDateTimeFields$1 as ScheduleDateTimeFields, SelectField$2 as SelectField, ShareDrawerPropsSchema, SharePlatformSchema, ShareSheet, SharedExpensesCard, SigninPage, SignupPage, SimilarExperienceCard, SimilarPage, SimilarPeopleCard, SimilarPersonSchema, SingleContactSchema, SocialAccountDrawer, SocialAuthorSchema, SocialConnectionsPage, SocialConversationPage, SocialConversationPeerSchema, SocialConversationRow, SocialConversationSchema, SocialCreateActionsSheet, SocialDeleteConfirmDialog, SocialDiscoverPage, SocialEditTextDialog, SocialEmptyState, SocialErrorState, SocialFeedItemSchema, SocialHomeBottomNav, SocialHomeCurrentUserSchema, SocialHomeHeader, SocialHomePage, SocialInboxPage, SocialMessageBubble, SocialMessageComposer, SocialMessageDeliveryStatusSchema, SocialMessageSchema, SocialNotificationsPage, SocialOnboardingIntro, SocialOnboardingPage, SocialOnboardingValuesSchema, SocialPrivacySettingsPage, SocialProfileFieldsSchema, SocialProfileSchema, SocialReadOnlyNotice, SocialReportReasonSchema, SocialSavedPage, SocialSkeleton, SocialUnreadIndicator, SocialUsernameSchema, SocialVerificationEarnedCelebration, SocialVerificationProgressSheet, SocialVisibilitySchema, SpiritualFormChatSummaryCard, SpiritualProfilePage, StreakInfoSchema, SubscriptionGuard, SubscriptionProvider, SubscriptionRequiredForMediumPage, SuggestionsCarousel, SupplyPlanBlockerSchema, SupplyPlanCostsSchema, SupplyPlanItemSchema, SupplyPlanMissionSchema, SupplyPlanPage, SupplyPlanPagePropsSchema, SupplyPlanReadinessSchema, SupplyPlanSchema, SupplyPlanSourceActivitySchema, SupplyPlanSourceEventSchema, SupplyPlanSummarySchema, SystemSettingsPage, TERREIRO_COMPLETION_MESSAGES, TERREIRO_ONBOARDING_FIELDS_BY_STEP, TERREIRO_SECTION_CONFIG, TERREIRO_SECTION_WEIGHTS, TOP_BAR_HEIGHTS, TYPOGRAPHY_SCALE, TerreiroFinancialInfoSchema, TerreiroOnboardingApiErrorSchema, TerreiroOnboardingFormStateSchema, TerreiroOnboardingValidationErrorsSchema, TerreiroPersonalInfoSchema, TerreiroPolicyPage, TerreiroPolicyPagePropsSchema, TerreiroProfileDataPage$1 as TerreiroProfileDataPage, TerreiroProfilePage, TerreiroReadonlyProfilePage, TerreiroRegistrationSchema, TerreiroRegistrationWithoutPasswordSchema, TerreiroSchema$2 as TerreiroSchema, TerreiroSearchPage, TerreiroSectionCard, TerreiroSectionCardPropsSchema, TerreiroStatusSchema, TerreiroStepValidationSchemas, TerreiroSubscriptionInfoSchema, ThemeButton, ThemeProvider, TicketVoucherPage, TicketingClaimFormChatSummaryCard, TraditionBadge, UnitCostMetaSchema, UpcomingPhasesSchema, UpgradePrompt, UsageBar, UsageBarPropsSchema, UsageProvider, UsageQuotaPage, UsageQuotaPagePropsSchema, UseInfiniteScrollReturnSchema, VISIBILITY_HELPERS, VISIBILITY_LABELS, ValidationErrorsSchema, VerificationBadge, WhatsAppShareButton, WhatsNewModal, authorDisplayName, brand, buildAcademyCertificatePreviewNode, buildItemReasonText, buildMergedInsumos$1 as buildMergedInsumos, buildMergedMediums$1 as buildMergedMediums, compactListDateParts, defaultDisplayProps, defaultInputProps, drawerSheetRadius, filterSupplyPlanMissions, formatRelativeTime, formatScheduleDate, formatSecondsAsMinutesLabel, formatCurrency$1 as formatTerreiroCurrency, formatPhone as formatTerreiroPhone, generateAcademyCertificatePdf, getBannerGradient, getCardBaseStyles, getContentMarginTop, getContentPaddingTop, getCustomBannerGradient, getDateString, getDefaultHomeWidgetOrder, getHomeWidgetsForProfile, getReorderableHomeWidgetsForProfile, getSocialBannerSx, getSocialUsernameError, getTopBarExpandedHeight, getTopBarHeight, getTopBarStackHeight, installPromptPropsSchema, isDefaultHomeWidgetOrder, isPasskeySupported, isValidEmail, isValidPassword, mapPasskeyError, mapRawMemberToActivityChatOption, mediumStatusLabelsPtBr, mergeHomeWidgetOrder, mergeHomeWidgetVisibility, mockCalendarActivities, mockCalendarEvents, mockCalendarRitualBaths, mockHomePageProps, mockLoadingHomePageProps, mockMediumHomePageProps, mockMoonData, mockPendingMediumHomePageProps, mockQuickActions, mockRituals, mockSupplyPlanEmpty, mockSupplyPlanSufficientWithDemand, mockSupplyPlanWithCosts, mockSupplyPlanWithoutCosts, mockTerreiros, mockUpcomingEvents, mockUser, moveHomeWidgetInOrder, onboardingIntroModalPropsSchema, onboardingIntroModeSchema, onboardingIntroProfileContextSchema, overlayZIndex, parseScheduleDate, radiusPx, reorderHomeWidgetOrder, resolveExperiencePostType, secondsToRoundedMinutes, startPasskeyAuthentication, startPasskeyRegistration, useAcademyModulePage, useAcademyPage, useAccessBlockedPage, useActivityOnboarding, useAddressSectionCard, useAffiliateProgramPage, useAttendanceCheckinEntryPage, useAttendanceInsightsPage, useAvatarWithBadge, useBadgesPage, useCellphoneInput, useCompletenessCard, useContactPage, useContentClearance, useCredentialsPage, useElementSize, useEventAISuggestionsPage, useFilterDrawer, useFinancialRegister, useFinancialTransparencyPage, useFormChatAssistant, useGamificationCard, useGamificationHelpPage, useHideOnScroll, useHomePage, useInfiniteScroll, useInstallPrompt, useInventoryListItemPage, useInventoryListPage, useInviteLandingPage, useJoinTerreiroPage, useLabeledBrazilianStateSelect, useLeaderboardPage, useMeasureSlot, useMeasuredLayoutContext, useMeasuredSlot, useMediumFinancialTransparencyPage, useMediumHubPage, useMemberListItem, useMonthlyFeePaymentsManagementPage, useMoonCard, useMyPermissionsPage, useNotFoundPage, useNotificationSettingsPage, useOnboardingIntroModal, useOnboardingMedium, useOnboardingPage, useOnboardingTerreiro, useOptionalMeasuredLayoutContext, useOptionalUsageContext, usePWAUpdatePromptUI, usePermissionSelector, usePlanManagementPage, useProfileCompletenessCard, useQrLandingPage, useQuotaGuard, useRitualBathDetailPage, useRitualBathListPage, useRitualBathOnboarding, useRoleFormPage, useRoleManagementPage, useSelectMediumsPage, useSpiritualProfilePage, useSubscription, useSubscriptionContext, useSubscriptionGuard, useSupplyPlanPage, useTerreiroPolicyPage, useTerreiroProfileDataPage, useTerreiroProfilePage$1 as useTerreiroProfilePage, useTerreiroSectionCard, useThemeProvider, useUpgradePrompt, useUsageContext, useUsageQuota, useUsageQuotaPage, useVerificationBadge, useWhatsNewModal, validateEmail$1 as validateEmail, validatePassword$1 as validatePassword, validatePhoneNumber, validateCurrency as validateTerreiroCurrency, validateDueDay as validateTerreiroDueDay, validatePassword as validateTerreiroPassword, validatePasswordConfirmation as validateTerreiroPasswordConfirmation, validatePhone as validateTerreiroPhone, whatsNewAnnouncementSchema, whatsNewModalPropsSchema, whatsNewSlideSchema };
195575
195809
  //# sourceMappingURL=bundle.esm.js.map