Fixed an issue where media manager only shows files uploaded in specific sections.

Fixed an issue with icon picker names.

Removed jumbo rounding and a few other style tweaks.
This commit is contained in:
Stefan Lazic committed 2026-08-05 09:25:59 +01:00
1 parent 9e39908ea7
commit d3bbad09c6
74 files changed
+1622 -195

No files matched your search

+51 -2
View File
@@ -1143,14 +1143,49 @@ model AppointmentService {
// count"; every stamp add/remove/redemption is its own row).
// ─────────────────────────────────────────────────────────────────────────
/// Phase 10 — a small, curated set of card fonts with zero extra network
/// cost (Tailwind's own built-in generic font-family stacks), not an
/// arbitrary CSS font-family string — see loyalty-config-form.tsx's
/// IconPicker-style font Select.
enum LoyaltyCardFont {
SANS
SERIF
MONO
}
/// Phase 10 — an enum, not a free number, so a bad value can never break
/// card layout.
enum LoyaltyCardTextSize {
SM
MD
LG
}
/// Phase 10 — resolves the "stamps required" ambiguity the brief called
/// out: does the reward unlock only once every stamp position is filled,
/// or is the final position itself the reward (earned one stamp early)?
/// See resolveRewardThreshold() in src/services/loyalty/loyalty.service.ts
/// — the one place this is interpreted; automatic stamps, manual stamps,
/// the customer card, and progress text all read through it, so none of
/// them can disagree with each other.
enum RewardPositionMode {
AFTER_ALL_STAMPS
FINAL_SLOT_IS_REWARD
}
model LoyaltyProgramme {
id String @id @default(cuid())
businessId String @unique
business Business @relation(fields: [businessId], references: [id], onDelete: Cascade)
isEnabled Boolean @default(false)
stampsRequired Int @default(10)
isEnabled Boolean @default(false)
/// Capped at 10 (see the CHECK constraint added in migration
/// 20260805000000_phase10_loyalty_card_and_permission_fixes) — enforced
/// identically in validateProgrammeConfig, the owner form, and here.
stampsRequired Int @default(10)
/// See RewardPositionMode's own doc comment.
rewardPosition RewardPositionMode @default(AFTER_ALL_STAMPS)
rewardType RewardType @default(PERCENTAGE)
/// Percentage points or a fixed-amount value depending on rewardType;
@@ -1179,6 +1214,20 @@ model LoyaltyProgramme {
stampIcon String?
termsLine String?
/// Phase 10 — free text shown in the card's top-right area, above the
/// member number. Separate from the member number itself (always
/// shown, has its own colour below) — null/empty means nothing renders
/// there beyond the member number, same as today.
cardTopRightText String?
/// Card-wide — applies to all card text, not just the top-right text.
/// See LoyaltyCardFont's doc comment for why this is card-wide rather
/// than a control per element.
cardFont LoyaltyCardFont @default(SANS)
cardTopRightTextSize LoyaltyCardTextSize @default(MD)
cardTopRightTextColor String?
cardBorderColor String?
cardMemberNumberColor String?
updatedAt DateTime @updatedAt
/// An empty eligibleServices/eligibleStaff list means "all services /