import { type Brand, type Result } from '../../core/src/index';
export declare const resourceKinds: readonly ["site-style", "media", "page", "block", "blocks", "nav", "form", "footer", "content", "staff", "venue", "event-category", "event", "course", "ticket", "pass", "membership", "customer", "customer-pass", "customer-membership", "appointment", "course-enrollment", "event-registration", "pass-redemption", "order", "appointment-service", "appointment-resource", "availability"];
export type ResourceKind = (typeof resourceKinds)[number];
export type CommandRef = Brand<`${string}:${string}`, 'SiteCommandRef:command'>;
export type SiteStyleRef = Brand<`site-style:${string}`, 'SiteCommandResourceRef:site-style'>;
export type MediaRef = Brand<`media:${string}`, 'SiteCommandResourceRef:media'>;
export type PageRef = Brand<`page:${string}`, 'SiteCommandResourceRef:page'>;
export type BlockRef = Brand<`block:${string}`, 'SiteCommandResourceRef:block'>;
export type BlocksRef = Brand<`blocks:${string}`, 'SiteCommandResourceRef:blocks'>;
export type NavigationRef = Brand<`nav:${string}`, 'SiteCommandResourceRef:nav'>;
export type FormRef = Brand<`form:${string}`, 'SiteCommandResourceRef:form'>;
export type FooterRef = Brand<`footer:${string}`, 'SiteCommandResourceRef:footer'>;
export type ContentEntryRef = Brand<`content:${string}`, 'SiteCommandResourceRef:content'>;
export type StaffRef = Brand<`staff:${string}`, 'SiteCommandResourceRef:staff'>;
export type VenueRef = Brand<`venue:${string}`, 'SiteCommandResourceRef:venue'>;
export type EventCategoryRef = Brand<`event-category:${string}`, 'SiteCommandResourceRef:event-category'>;
export type EventSeriesRef = Brand<`event:${string}`, 'SiteCommandResourceRef:event'>;
export type CourseRef = Brand<`course:${string}`, 'SiteCommandResourceRef:course'>;
export type TicketTypeRef = Brand<`ticket:${string}`, 'SiteCommandResourceRef:ticket'>;
export type PassProductRef = Brand<`pass:${string}`, 'SiteCommandResourceRef:pass'>;
export type MembershipProductRef = Brand<`membership:${string}`, 'SiteCommandResourceRef:membership'>;
export type BookingCustomerRef = Brand<`customer:${string}`, 'SiteCommandResourceRef:customer'>;
export type CustomerPassRef = Brand<`customer-pass:${string}`, 'SiteCommandResourceRef:customer-pass'>;
export type CustomerMembershipRef = Brand<`customer-membership:${string}`, 'SiteCommandResourceRef:customer-membership'>;
export type AppointmentBookingRef = Brand<`appointment:${string}`, 'SiteCommandResourceRef:appointment'>;
export type CourseEnrollmentRef = Brand<`course-enrollment:${string}`, 'SiteCommandResourceRef:course-enrollment'>;
export type EventRegistrationRef = Brand<`event-registration:${string}`, 'SiteCommandResourceRef:event-registration'>;
export type PassRedemptionRef = Brand<`pass-redemption:${string}`, 'SiteCommandResourceRef:pass-redemption'>;
export type OrderRef = Brand<`order:${string}`, 'SiteCommandResourceRef:order'>;
export type AppointmentServiceRef = Brand<`appointment-service:${string}`, 'SiteCommandResourceRef:appointment-service'>;
export type AppointmentResourceRef = Brand<`appointment-resource:${string}`, 'SiteCommandResourceRef:appointment-resource'>;
export type AppointmentAvailabilityRef = Brand<`availability:${string}`, 'SiteCommandResourceRef:availability'>;
export type SiteCommandSiteRef = Brand<`site:${string}`, 'SiteCommandSiteRef'>;
export type ResourceRefByKind = Readonly<{
    'site-style': SiteStyleRef;
    media: MediaRef;
    page: PageRef;
    block: BlockRef;
    blocks: BlocksRef;
    nav: NavigationRef;
    form: FormRef;
    footer: FooterRef;
    content: ContentEntryRef;
    staff: StaffRef;
    venue: VenueRef;
    'event-category': EventCategoryRef;
    event: EventSeriesRef;
    course: CourseRef;
    ticket: TicketTypeRef;
    pass: PassProductRef;
    membership: MembershipProductRef;
    customer: BookingCustomerRef;
    'customer-pass': CustomerPassRef;
    'customer-membership': CustomerMembershipRef;
    appointment: AppointmentBookingRef;
    'course-enrollment': CourseEnrollmentRef;
    'event-registration': EventRegistrationRef;
    'pass-redemption': PassRedemptionRef;
    order: OrderRef;
    'appointment-service': AppointmentServiceRef;
    'appointment-resource': AppointmentResourceRef;
    availability: AppointmentAvailabilityRef;
}>;
export type ResourceRef = ResourceRefByKind[ResourceKind];
export type SiteCommandRef = CommandRef | ResourceRef;
export declare const commandRefPattern: RegExp;
export declare const siteCommandSiteRefPattern: RegExp;
export type RefParseError = Readonly<{
    code: 'invalid_ref_format';
    ref: string;
}> | Readonly<{
    code: 'unknown_resource_kind';
    ref: string;
    kind: string;
}>;
export declare function isCommandRef(value: string): boolean;
export declare function createCommandRef(prefix: string, parts: readonly string[]): CommandRef;
export declare function createContentEntryRef(parts: readonly string[]): ContentEntryRef;
export declare function createPageRef(parts: readonly string[]): PageRef;
export declare function createBlockRef(parts: readonly string[]): BlockRef;
export declare function createBlocksRef(parts: readonly string[]): BlocksRef;
export declare function createNavigationRef(parts: readonly string[]): NavigationRef;
export declare function createFormRef(parts: readonly string[]): FormRef;
export declare function createFooterRef(parts: readonly string[]): FooterRef;
export declare function createVenueRef(parts: readonly string[]): VenueRef;
export declare function createEventCategoryRef(parts: readonly string[]): EventCategoryRef;
export declare function createEventSeriesRef(parts: readonly string[]): EventSeriesRef;
export declare function createCourseRef(parts: readonly string[]): CourseRef;
export declare function createSiteCommandSiteRef(parts: readonly string[]): SiteCommandSiteRef;
export declare function refSlug(ref: SiteCommandRef | string): string;
export declare function parseResourceRef(value: string): Result<ResourceRef, RefParseError>;
export declare function resourceKindOf(ref: ResourceRef): ResourceKind;
export declare function slugPart(value: string): string;
