@peripheries/core 0.4.1 → 0.5.1

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 (69) hide show
  1. package/README.md +1 -1
  2. package/index.css +1 -1
  3. package/index.js +3 -3
  4. package/package.json +1 -1
  5. package/types/core/Rail/Rail.d.ts +9 -0
  6. package/types/core/_shared/formatters.d.ts +9 -2
  7. package/types/core/_shared/overlay/focusables.d.ts +2 -0
  8. package/types/core/_shared/overlay/hooks.d.ts +4 -0
  9. package/types/core/_shared/overlay/placement.d.ts +28 -0
  10. package/types/core/_shared/overlay/scroll-lock.d.ts +1 -0
  11. package/types/core/_shared/safe-url.d.ts +2 -0
  12. package/types/core/_shared/viewer.d.ts +15 -0
  13. package/types/core/display/DataTable/DataTable.d.ts +5 -3
  14. package/types/core/display/KpiCardGrid/KpiCardGrid.d.ts +1 -0
  15. package/types/core/display/OptionCard/OptionCard.d.ts +1 -0
  16. package/types/core/display/ProfileCard/ProfileCard.d.ts +1 -0
  17. package/types/core/display/SectionHeader/SectionHeader.d.ts +2 -1
  18. package/types/core/display/Stat/Stat.d.ts +2 -1
  19. package/types/core/display/StatStrip/StatStrip.d.ts +2 -1
  20. package/types/core/display/_shared/ValueBadge.d.ts +3 -2
  21. package/types/core/document/ComparisonBars/ComparisonBars.d.ts +2 -1
  22. package/types/core/document/RowList/RowList.d.ts +5 -3
  23. package/types/core/events/BookEventCard/BookEventCard.d.ts +37 -0
  24. package/types/core/events/CalendarFilters/CalendarFilters.d.ts +22 -0
  25. package/types/core/events/CalendarView/CalendarView.d.ts +23 -0
  26. package/types/core/events/EventCard/EventCard.d.ts +1 -0
  27. package/types/core/events/EventSchedule/EventSchedule.d.ts +2 -0
  28. package/types/core/events/HandoverCard/HandoverCard.d.ts +19 -0
  29. package/types/core/events/HourGrid/HourGrid.d.ts +24 -0
  30. package/types/core/events/LogCard/LogCard.d.ts +27 -0
  31. package/types/core/events/MiniMonth/MiniMonth.d.ts +18 -0
  32. package/types/core/events/NoteSplitCard/NoteSplitCard.d.ts +22 -0
  33. package/types/core/events/OverlapNotice/OverlapNotice.d.ts +11 -0
  34. package/types/core/events/QuickNoteCard/QuickNoteCard.d.ts +21 -0
  35. package/types/core/events/ShareApprovalCard/ShareApprovalCard.d.ts +16 -0
  36. package/types/core/events/StartProcessCard/StartProcessCard.d.ts +22 -0
  37. package/types/core/events/SuggestedActions/SuggestedActions.d.ts +10 -0
  38. package/types/core/events/TaskCard/TaskCard.d.ts +28 -0
  39. package/types/core/events/WeekStrip/WeekStrip.d.ts +16 -0
  40. package/types/core/events/_shared/SeriesGlyph.d.ts +9 -0
  41. package/types/core/events/_shared/calendar.d.ts +36 -0
  42. package/types/core/events/_shared/event.d.ts +7 -1
  43. package/types/core/events/_shared/intent.d.ts +18 -0
  44. package/types/core/events/_shared/path.d.ts +1 -0
  45. package/types/core/events/_shared/when.d.ts +10 -0
  46. package/types/core/forms/CodeField/CodeField.d.ts +15 -0
  47. package/types/core/forms/Combobox/Combobox.d.ts +17 -0
  48. package/types/core/forms/Combobox/useCombobox.d.ts +74 -0
  49. package/types/core/overlay/Dialog/Dialog.d.ts +16 -0
  50. package/types/core/overlay/Menu/Menu.d.ts +26 -0
  51. package/types/core/overlay/Popover/Popover.d.ts +19 -0
  52. package/types/core/overlay/Sheet/Sheet.d.ts +21 -0
  53. package/types/core/overlay/Toast/Toast.d.ts +20 -0
  54. package/types/core/overlay/Toast/toast-store.d.ts +51 -0
  55. package/types/core/overlay/_shared/Modal.d.ts +19 -0
  56. package/types/core/page/PageStaffTools/PageStaffTools.d.ts +19 -0
  57. package/types/core/public/ContactForm/ContactForm.d.ts +24 -0
  58. package/types/core/public/CtaBand/CtaBand.d.ts +11 -0
  59. package/types/core/public/FeatureGrid/FeatureGrid.d.ts +15 -0
  60. package/types/core/public/Hero/Hero.d.ts +14 -0
  61. package/types/core/public/Image/Image.d.ts +12 -0
  62. package/types/core/public/LogoMark/LogoMark.d.ts +10 -0
  63. package/types/core/public/PublicFooter/PublicFooter.d.ts +15 -0
  64. package/types/core/public/PublicHeader/PublicHeader.d.ts +16 -0
  65. package/types/core/public/TeamGrid/TeamGrid.d.ts +16 -0
  66. package/types/core/public/Testimonial/Testimonial.d.ts +11 -0
  67. package/types/core/public/_shared/actions.d.ts +15 -0
  68. package/types/core/public/_shared/media.d.ts +9 -0
  69. package/types/index.core.d.ts +43 -2
@@ -10,6 +10,9 @@ export interface EventView {
10
10
  startOn?: string;
11
11
  endOn?: string;
12
12
  location?: string;
13
+ series?: number;
14
+ clientName?: string;
15
+ busyOnly?: boolean;
13
16
  cardComponent?: string;
14
17
  }
15
18
  export type RenderComponent = (key: string, props?: Record<string, unknown>) => unknown;
@@ -33,7 +36,10 @@ export interface WriteResult {
33
36
  success: boolean;
34
37
  id?: string;
35
38
  data?: unknown;
36
- errors?: string;
39
+ errors?: string | ReadonlyArray<{
40
+ message: string;
41
+ field?: string;
42
+ }>;
37
43
  code?: 'DENIED' | 'CONFLICT' | 'INVALID' | 'FAILED';
38
44
  }
39
45
  export type Action<I> = (input: I) => Promise<WriteResult>;
@@ -0,0 +1,18 @@
1
+ import { type WriteResult } from './event';
2
+ export interface CardIntent<A extends string = string> {
3
+ action: A;
4
+ values?: Record<string, unknown>;
5
+ }
6
+ export type IntentHandler<A extends string = string> = (intent: CardIntent<A>) => Promise<WriteResult | void> | WriteResult | void;
7
+ export declare function displayName(value: unknown): string | undefined;
8
+ export declare const NOT_AVAILABLE = "This can\u2019t be done from here yet.";
9
+ export declare function useIntent<A extends string>(handler: IntentHandler<A> | undefined): {
10
+ run: (action: A, values?: Record<string, unknown>) => Promise<{
11
+ ok: boolean;
12
+ result?: WriteResult | void;
13
+ }>;
14
+ busy: A | null;
15
+ message: string;
16
+ available: boolean;
17
+ clearMessage: () => void;
18
+ };
@@ -0,0 +1 @@
1
+ export declare function sameOriginPath(value: unknown): string | undefined;
@@ -0,0 +1,10 @@
1
+ export declare const DATE: RegExp;
2
+ export declare const TIME: RegExp;
3
+ export declare const dayText: (iso: string | undefined, locale?: string) => string;
4
+ export declare const clockText: (time: string, locale?: string) => string;
5
+ export declare function partsOf(iso: string | undefined, timeZone?: string): {
6
+ date: string;
7
+ time: string;
8
+ } | null;
9
+ export declare function localWithOffset(date: string, time: string): string | undefined;
10
+ export declare function todayIn(timeZone?: string, now?: number): string;
@@ -0,0 +1,15 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ export interface CodeFieldProps {
3
+ length?: number;
4
+ label?: string;
5
+ value?: string;
6
+ onChange?: (value: string) => void;
7
+ onComplete?: (code: string) => void;
8
+ error?: string;
9
+ disabled?: boolean;
10
+ autoFocus?: boolean;
11
+ name?: string;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare function CodeField({ length, label, value, onChange, onComplete, error, disabled, autoFocus, name, className, style }: CodeFieldProps): ReactElement;
@@ -0,0 +1,17 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { useCombobox, type ComboboxOption, type UseComboboxOptions } from './useCombobox';
3
+ export type { ComboboxOption, UseComboboxOptions };
4
+ export { useCombobox };
5
+ export interface ComboboxProps extends UseComboboxOptions {
6
+ placeholder?: string;
7
+ emptyText?: string;
8
+ errorText?: string;
9
+ renderOption?: (option: ComboboxOption, query: string) => ReactNode;
10
+ className?: string;
11
+ style?: CSSProperties;
12
+ }
13
+ export declare function Highlighted({ text, match }: {
14
+ text: string;
15
+ match: string;
16
+ }): import("react").JSX.Element;
17
+ export declare function Combobox({ placeholder, emptyText, errorText, renderOption, className, style, ...options }: ComboboxProps): import("react").JSX.Element;
@@ -0,0 +1,74 @@
1
+ import { type ChangeEvent, type KeyboardEvent } from 'react';
2
+ export interface ComboboxOption {
3
+ id: string;
4
+ label: string;
5
+ description?: string;
6
+ highlight?: string;
7
+ group?: string;
8
+ disabled?: boolean;
9
+ data?: unknown;
10
+ }
11
+ export type ComboboxStatus = 'idle' | 'loading' | 'ready' | 'empty' | 'error';
12
+ export interface UseComboboxOptions {
13
+ label: string;
14
+ options?: ReadonlyArray<ComboboxOption>;
15
+ loadOptions?: (query: string, signal: AbortSignal) => Promise<ReadonlyArray<ComboboxOption>>;
16
+ value?: string;
17
+ defaultValue?: string;
18
+ onValueChange?: (value: string) => void;
19
+ onSelect?: (option: ComboboxOption) => void;
20
+ orientation?: 'vertical' | 'horizontal';
21
+ debounceMs?: number;
22
+ minChars?: number;
23
+ closeOnSelect?: boolean;
24
+ fillOnSelect?: boolean;
25
+ openOnFocus?: boolean;
26
+ emptyText?: string;
27
+ errorText?: string;
28
+ defaultOpen?: boolean;
29
+ }
30
+ export declare function useCombobox({ label, options, loadOptions, value, defaultValue, onValueChange, onSelect, orientation, debounceMs, minChars, closeOnSelect, fillOnSelect, openOnFocus, defaultOpen, emptyText, errorText }: UseComboboxOptions): {
31
+ options: readonly ComboboxOption[];
32
+ status: ComboboxStatus;
33
+ statusText: string;
34
+ open: boolean;
35
+ activeId: string | null;
36
+ close: () => void;
37
+ inputProps: {
38
+ role: "combobox";
39
+ 'aria-label': string;
40
+ 'aria-expanded': boolean;
41
+ 'aria-controls': string;
42
+ 'aria-autocomplete': "list";
43
+ 'aria-activedescendant': string | undefined;
44
+ autoComplete: string;
45
+ value: string;
46
+ onChange: (e: ChangeEvent<HTMLInputElement>) => void;
47
+ onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => void;
48
+ onFocus: () => void;
49
+ onBlur: () => void;
50
+ };
51
+ listboxProps: {
52
+ id: string;
53
+ role: "listbox";
54
+ 'aria-label': string;
55
+ 'aria-orientation': "horizontal" | "vertical";
56
+ };
57
+ statusProps: {
58
+ role: "status";
59
+ 'aria-live': "polite";
60
+ 'aria-atomic': boolean;
61
+ };
62
+ getOptionProps: (option: ComboboxOption) => {
63
+ id: string;
64
+ role: "option";
65
+ 'aria-selected': boolean;
66
+ 'aria-disabled': true | undefined;
67
+ 'data-active': string | undefined;
68
+ onPointerDown: (e: {
69
+ preventDefault: () => void;
70
+ }) => void;
71
+ onClick: () => void;
72
+ };
73
+ query: string;
74
+ };
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface DialogProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ title: ReactNode;
6
+ label?: string;
7
+ description?: ReactNode;
8
+ role?: 'dialog' | 'alertdialog';
9
+ initialFocus?: string;
10
+ dismissOnBackdrop?: boolean;
11
+ headerTools?: ReactNode;
12
+ footer?: ReactNode;
13
+ children?: ReactNode;
14
+ className?: string;
15
+ }
16
+ export declare function Dialog({ role, dismissOnBackdrop, ...props }: DialogProps): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import { type Placement } from '../Popover/Popover';
3
+ export interface MenuItem {
4
+ id: string;
5
+ label: string;
6
+ icon?: ReactNode;
7
+ tone?: 'danger';
8
+ disabled?: boolean;
9
+ href?: string;
10
+ onSelect?: () => void;
11
+ }
12
+ export interface MenuSeparator {
13
+ type: 'separator';
14
+ id: string;
15
+ }
16
+ export interface MenuProps {
17
+ trigger: ReactElement<Record<string, unknown>>;
18
+ items: ReadonlyArray<MenuItem | MenuSeparator>;
19
+ label: string;
20
+ placement?: Placement;
21
+ presentation?: 'auto' | 'popover' | 'sheet';
22
+ defaultOpen?: boolean;
23
+ onOpenChange?: (open: boolean) => void;
24
+ className?: string;
25
+ }
26
+ export declare function Menu({ trigger, items, label, placement, presentation, defaultOpen, onOpenChange, className }: MenuProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import { type Placement } from '../../_shared/overlay/placement';
3
+ export type { Placement };
4
+ export interface PopoverProps {
5
+ trigger: ReactElement<Record<string, unknown>>;
6
+ label: string;
7
+ placement?: Placement;
8
+ open?: boolean;
9
+ defaultOpen?: boolean;
10
+ onOpenChange?: (open: boolean) => void;
11
+ popupRole?: 'dialog' | 'menu';
12
+ initialFocus?: string | false | ((panel: HTMLElement) => HTMLElement | null);
13
+ onTriggerKeyDown?: (event: React.KeyboardEvent) => void;
14
+ children?: ReactNode | ((api: {
15
+ close: () => void;
16
+ }) => ReactNode);
17
+ className?: string;
18
+ }
19
+ export declare function Popover({ trigger, label, placement, open: openProp, defaultOpen, onOpenChange, popupRole, initialFocus, onTriggerKeyDown, children, className }: PopoverProps): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface SheetBack {
3
+ label: string;
4
+ onBack: () => void;
5
+ }
6
+ export interface SheetProps {
7
+ open: boolean;
8
+ onClose: () => void;
9
+ title: ReactNode;
10
+ label?: string;
11
+ description?: ReactNode;
12
+ side?: 'bottom' | 'end';
13
+ back?: SheetBack;
14
+ initialFocus?: string;
15
+ dismissOnBackdrop?: boolean;
16
+ headerTools?: ReactNode;
17
+ footer?: ReactNode;
18
+ children?: ReactNode;
19
+ className?: string;
20
+ }
21
+ export declare function Sheet({ side, back, ...props }: SheetProps): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { type CSSProperties } from 'react';
2
+ import { dismissToast, toast, type ToastItem } from './toast-store';
3
+ export { dismissToast, toast, type ToastInput, type ToastTone } from './toast-store';
4
+ export declare function useToast(): {
5
+ toast: typeof toast;
6
+ dismiss: typeof dismissToast;
7
+ };
8
+ export interface ToastProps {
9
+ toast: Pick<ToastItem, 'title' | 'description' | 'tone' | 'action'>;
10
+ actionAvailable?: boolean;
11
+ onAction?: () => void;
12
+ onDismiss?: () => void;
13
+ className?: string;
14
+ style?: CSSProperties;
15
+ }
16
+ export declare function Toast({ toast: t, actionAvailable, onAction, onDismiss, className, ...rest }: ToastProps): import("react").JSX.Element;
17
+ export declare function ToastRegion({ className, actions }: {
18
+ className?: string;
19
+ actions?: Record<string, () => void>;
20
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,51 @@
1
+ export type ToastTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
2
+ export interface ToastInput {
3
+ title: string;
4
+ description?: string;
5
+ tone?: ToastTone;
6
+ duration?: number;
7
+ action?: {
8
+ id: string;
9
+ label: string;
10
+ };
11
+ id?: string;
12
+ source?: string;
13
+ }
14
+ export interface ToastItem {
15
+ id: string;
16
+ title: string;
17
+ description?: string;
18
+ tone: ToastTone;
19
+ duration: number;
20
+ action?: {
21
+ id: string;
22
+ label: string;
23
+ };
24
+ source: string;
25
+ revision: number;
26
+ }
27
+ export interface ToastSnapshot {
28
+ toasts: readonly ToastItem[];
29
+ actions: readonly string[];
30
+ }
31
+ export declare const LIMITS: {
32
+ readonly title: 120;
33
+ readonly description: 280;
34
+ readonly label: 40;
35
+ readonly visible: 4;
36
+ readonly perSource: 2;
37
+ readonly burst: 5;
38
+ readonly windowMs: 10000;
39
+ readonly defaultDuration: 6000;
40
+ };
41
+ export declare function toast(input: ToastInput): string | null;
42
+ export declare function dismissToast(id: string): void;
43
+ export declare function runToastAction(id: string): boolean;
44
+ export declare const subscribeToasts: (listener: () => void) => () => undefined;
45
+ export declare const getToasts: () => ToastSnapshot;
46
+ export interface RegionClaim {
47
+ release: () => void;
48
+ setActions: (handlers: Record<string, () => void>) => void;
49
+ }
50
+ export declare function claimRegion(): RegionClaim | null;
51
+ export declare function resetToasts(): void;
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from 'react';
2
+ export type ModalVariant = 'dialog' | 'sheet-bottom' | 'sheet-end';
3
+ export interface ModalProps {
4
+ variant: ModalVariant;
5
+ open: boolean;
6
+ onClose: () => void;
7
+ title: ReactNode;
8
+ label?: string;
9
+ description?: ReactNode;
10
+ role?: 'dialog' | 'alertdialog';
11
+ initialFocus?: string;
12
+ dismissOnBackdrop?: boolean;
13
+ headerStart?: ReactNode;
14
+ headerTools?: ReactNode;
15
+ footer?: ReactNode;
16
+ children?: ReactNode;
17
+ className?: string;
18
+ }
19
+ export declare function Modal({ variant, open, onClose, title, label, description, role, initialFocus, dismissOnBackdrop, headerStart, headerTools, footer, children, className }: ModalProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ import { type IntentHandler } from '../../events/_shared/intent';
3
+ export type PageStaffAction = 'release' | 'view_versions' | 'view_as_client' | 'edit_with_assistant';
4
+ export interface PageRelease {
5
+ state: 'unreleased' | 'released' | 'withdrawn' | 'staff_only';
6
+ number?: number;
7
+ hasChanges?: boolean;
8
+ }
9
+ export interface PageStaffToolsProps {
10
+ release: PageRelease;
11
+ canRelease?: boolean;
12
+ busy?: boolean;
13
+ versionsHref?: string;
14
+ viewAsHref?: string;
15
+ onIntent?: IntentHandler<PageStaffAction>;
16
+ className?: string;
17
+ style?: CSSProperties;
18
+ }
19
+ export declare function PageStaffTools(props: PageStaffToolsProps): ReactElement | null;
@@ -0,0 +1,24 @@
1
+ import { type CSSProperties, type ReactElement } from 'react';
2
+ import { type Action } from '../../events/_shared/event';
3
+ export interface ContactRequestInput {
4
+ name: string;
5
+ email: string;
6
+ phone?: string;
7
+ message?: string;
8
+ consent: boolean;
9
+ website: string;
10
+ }
11
+ export interface ContactFormProps {
12
+ title?: string;
13
+ intro?: string;
14
+ askPhone?: boolean;
15
+ consent?: string;
16
+ submitLabel?: string;
17
+ thanks?: string;
18
+ actions?: {
19
+ submitRequest?: Action<ContactRequestInput>;
20
+ };
21
+ className?: string;
22
+ style?: CSSProperties;
23
+ }
24
+ export declare function ContactForm({ title, intro, askPhone, consent, submitLabel, thanks, actions, className, style }: ContactFormProps): ReactElement;
@@ -0,0 +1,11 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type PublicAction } from '../_shared/actions';
3
+ export interface CtaBandProps {
4
+ title: string;
5
+ text?: string;
6
+ actions?: PublicAction[] | PublicAction;
7
+ tone?: 'accent' | 'strong' | 'neutral' | string;
8
+ className?: string;
9
+ style?: CSSProperties;
10
+ }
11
+ export declare function CtaBand({ title, text, actions, tone, className, style }: CtaBandProps): ReactElement;
@@ -0,0 +1,15 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ export interface FeatureItem {
3
+ title: string;
4
+ text?: string;
5
+ icon?: string;
6
+ }
7
+ export interface FeatureGridProps {
8
+ title?: string;
9
+ intro?: string;
10
+ items: FeatureItem[];
11
+ columns?: number;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare function FeatureGrid({ title, intro, items, columns, className, style }: FeatureGridProps): ReactElement | null;
@@ -0,0 +1,14 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type PublicAction } from '../_shared/actions';
3
+ import { type PublicImage } from '../_shared/media';
4
+ export interface HeroProps {
5
+ eyebrow?: string;
6
+ title: string;
7
+ intro?: string;
8
+ actions?: PublicAction[] | PublicAction;
9
+ media?: PublicImage;
10
+ align?: 'start' | 'center' | string;
11
+ className?: string;
12
+ style?: CSSProperties;
13
+ }
14
+ export declare function Hero({ eyebrow, title, intro, actions, media, align, className, style }: HeroProps): ReactElement;
@@ -0,0 +1,12 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ export interface ImageProps {
3
+ src: string;
4
+ alt?: string;
5
+ decorative?: boolean;
6
+ ratio?: string;
7
+ caption?: string;
8
+ priority?: boolean;
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ }
12
+ export declare function Image({ src, alt, decorative, ratio, caption, priority, className, style }: ImageProps): ReactElement | null;
@@ -0,0 +1,10 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ export interface LogoMarkProps {
3
+ text: string;
4
+ src?: string;
5
+ href?: string;
6
+ size?: 'sm' | 'md' | 'lg' | string;
7
+ className?: string;
8
+ style?: CSSProperties;
9
+ }
10
+ export declare function LogoMark({ text, src, href, size, className, style }: LogoMarkProps): ReactElement;
@@ -0,0 +1,15 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type LogoMarkProps } from '../LogoMark/LogoMark';
3
+ import { type PublicNavLink } from '../PublicHeader/PublicHeader';
4
+ export interface PublicFooterGroup {
5
+ title: string;
6
+ links: PublicNavLink[];
7
+ }
8
+ export interface PublicFooterProps {
9
+ logo?: LogoMarkProps;
10
+ groups?: PublicFooterGroup[];
11
+ legal?: string;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare function PublicFooter({ logo, groups, legal, className, style }: PublicFooterProps): ReactElement;
@@ -0,0 +1,16 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type PublicAction } from '../_shared/actions';
3
+ import { type LogoMarkProps } from '../LogoMark/LogoMark';
4
+ export interface PublicNavLink {
5
+ label: string;
6
+ href: string;
7
+ }
8
+ export interface PublicHeaderProps {
9
+ logo?: LogoMarkProps;
10
+ links?: PublicNavLink[];
11
+ signIn?: PublicAction | false;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ export declare const linksOf: (v: unknown) => PublicNavLink[];
16
+ export declare function PublicHeader({ logo, links, signIn, className, style }: PublicHeaderProps): ReactElement;
@@ -0,0 +1,16 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type PublicImage } from '../_shared/media';
3
+ export interface TeamMember {
4
+ name: string;
5
+ role?: string;
6
+ bio?: string;
7
+ photo?: PublicImage;
8
+ }
9
+ export interface TeamGridProps {
10
+ title?: string;
11
+ intro?: string;
12
+ members: TeamMember[];
13
+ className?: string;
14
+ style?: CSSProperties;
15
+ }
16
+ export declare function TeamGrid({ title, intro, members, className, style }: TeamGridProps): ReactElement | null;
@@ -0,0 +1,11 @@
1
+ import type { CSSProperties, ReactElement } from 'react';
2
+ import { type PublicImage } from '../_shared/media';
3
+ export interface TestimonialProps {
4
+ quote: string;
5
+ name: string;
6
+ role?: string;
7
+ photo?: PublicImage;
8
+ className?: string;
9
+ style?: CSSProperties;
10
+ }
11
+ export declare function Testimonial({ quote, name, role, photo, className, style }: TestimonialProps): ReactElement | null;
@@ -0,0 +1,15 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface PublicAction {
3
+ label: string;
4
+ href: string;
5
+ variant?: 'primary' | 'secondary' | string;
6
+ }
7
+ export declare function actionsOf(value: unknown): PublicAction[];
8
+ export declare function ActionLink({ action, className }: {
9
+ action: PublicAction;
10
+ className?: string;
11
+ }): ReactElement | null;
12
+ export declare function ActionRow({ actions, className }: {
13
+ actions: PublicAction[];
14
+ className?: string;
15
+ }): ReactElement | null;
@@ -0,0 +1,9 @@
1
+ export interface PublicImage {
2
+ src: string;
3
+ alt?: string;
4
+ decorative?: boolean;
5
+ }
6
+ export declare function imageOf(value: unknown): {
7
+ src: string;
8
+ alt: string;
9
+ } | null;
@@ -5,12 +5,19 @@ export { Container } from './core/Container/Container';
5
5
  export { Divider } from './core/Divider/Divider';
6
6
  export { Hide } from './core/Hide/Hide';
7
7
  export { Inline } from './core/Inline/Inline';
8
+ export { Rail, type RailProps } from './core/Rail/Rail';
8
9
  export { Show } from './core/Show/Show';
10
+ export { Menu, type MenuItem, type MenuProps, type MenuSeparator } from './core/overlay/Menu/Menu';
11
+ export { ToastRegion, Toast, dismissToast, toast, useToast, type ToastInput, type ToastTone, type ToastProps } from './core/overlay/Toast/Toast';
12
+ export { Popover, type Placement, type PopoverProps } from './core/overlay/Popover/Popover';
13
+ export { Dialog, type DialogProps } from './core/overlay/Dialog/Dialog';
14
+ export { Sheet, type SheetBack, type SheetProps } from './core/overlay/Sheet/Sheet';
9
15
  export { Spacer } from './core/Spacer/Spacer';
10
16
  export { Stack } from './core/Stack/Stack';
11
17
  export { ListRow, type ListRowProps } from './core/page/ListRow/ListRow';
12
18
  export { PageFrame, type PageFrameProps } from './core/page/PageFrame/PageFrame';
13
19
  export { PageHead, type PageHeadProps } from './core/page/PageHead/PageHead';
20
+ export { PageStaffTools, type PageStaffAction, type PageRelease, type PageStaffToolsProps } from './core/page/PageStaffTools/PageStaffTools';
14
21
  export { RuleSection, type RuleSectionProps } from './core/page/RuleSection/RuleSection';
15
22
  export { UnderlinedAction, type UnderlinedActionProps } from './core/page/UnderlinedAction/UnderlinedAction';
16
23
  export { Avatar, initialsOf, type AvatarProps } from './core/text/Avatar/Avatar';
@@ -80,7 +87,7 @@ export { ExecutionBlock, type ExecutionBlockProps, type ExecutionSignatory } fro
80
87
  export { DocumentBlocks, type DocumentBlocksProps } from './core/document/DocumentBlocks/DocumentBlocks';
81
88
  export { DocumentSection, type DocumentSectionProps } from './core/document/DocumentSection/DocumentSection';
82
89
  export { BLOCK_SCHEMAS } from './core/document/_shared/block-schemas';
83
- export { formatValue, renderFormatted, type FormatOpts, type FormattableValue, type FormatterToken, type ValueSpec } from './core/_shared/formatters';
90
+ export { DEFAULT_DISPLAY_LOCALE, displayLocale, formatValue, renderFormatted, type DisplayLocale, type FormatOpts, type FormattableValue, type FormatterToken, type ValueSpec } from './core/_shared/formatters';
84
91
  export { TONES, toneOf, type Tone } from './core/display/_shared/tone';
85
92
  export { Eyebrow, inkToneOf, type EyebrowAs, type EyebrowProps, type InkTone } from './core/display/Eyebrow/Eyebrow';
86
93
  export { Stat, StatGroup, type StatGroupProps, type StatProps, type StatSize } from './core/display/Stat/Stat';
@@ -98,4 +105,38 @@ export { EventLogForm, type EventLogFormProps, type LogEventInput } from './core
98
105
  export { EventRespond, type EventRespondProps } from './core/events/EventRespond/EventRespond';
99
106
  export { EventSchedule, type EventScheduleProps } from './core/events/EventSchedule/EventSchedule';
100
107
  export { EventTimeline, type ActivityItem, type EventTimelineProps } from './core/events/EventTimeline/EventTimeline';
101
- export { eventWhen, typeCard, type EventTypeOption, type EventView, type RenderComponent as EventRenderComponent, type WriteResult as EventWriteResult } from './core/events/_shared/event';
108
+ export { eventWhen, hrefFrom, typeCard, type EventTypeOption, type EventView, type RenderComponent as EventRenderComponent, type WriteResult as EventWriteResult } from './core/events/_shared/event';
109
+ export { DAY_MINUTES, isBusyOnly, layoutDay, overlapDays, visibleRange, wallOf, weekDates, type CalendarBlock, type DayLayout, type Wall } from './core/events/_shared/calendar';
110
+ export { HourGrid, type HourGridColumn, type HourGridProps } from './core/events/HourGrid/HourGrid';
111
+ export { SeriesGlyph, seriesNumber, seriesShape, SERIES_SHAPES, type SeriesShape } from './core/events/_shared/SeriesGlyph';
112
+ export { OverlapNotice, type OverlapNoticeProps } from './core/events/OverlapNotice/OverlapNotice';
113
+ export { CalendarFilters, type CalendarFilterType, type CalendarFiltersProps } from './core/events/CalendarFilters/CalendarFilters';
114
+ export { MiniMonth, type MiniMonthProps } from './core/events/MiniMonth/MiniMonth';
115
+ export { CalendarView, type CalendarViewName, type CalendarViewProps } from './core/events/CalendarView/CalendarView';
116
+ export { WeekStrip, type WeekStripProps } from './core/events/WeekStrip/WeekStrip';
117
+ export { sameOriginPath } from './core/events/_shared/path';
118
+ export { NOT_AVAILABLE, useIntent, type CardIntent, type IntentHandler } from './core/events/_shared/intent';
119
+ export { LogCard, type LogCardPrefill, type LogCardProps } from './core/events/LogCard/LogCard';
120
+ export { QuickNoteCard, type QuickNote, type QuickNoteCardProps } from './core/events/QuickNoteCard/QuickNoteCard';
121
+ export { BookEventCard, type BookEventCardProps, type BookEventPrefill, type BookablePerson, type BookableType } from './core/events/BookEventCard/BookEventCard';
122
+ export { TaskCard, localWithOffset, type TaskCardProps, type TaskTypeOption, type TaskView } from './core/events/TaskCard/TaskCard';
123
+ export { HandoverCard, type HandoverCardProps, type HandoverPointer } from './core/events/HandoverCard/HandoverCard';
124
+ export { StartProcessCard, type StartProcessCardProps, type StartProcessNeed } from './core/events/StartProcessCard/StartProcessCard';
125
+ export { NoteSplitCard, type NoteSplitCardProps, type NoteSplitMatch, type NoteSplitPart } from './core/events/NoteSplitCard/NoteSplitCard';
126
+ export { ShareApprovalCard, type ShareApprovalCardProps, type ShareApprovalItem } from './core/events/ShareApprovalCard/ShareApprovalCard';
127
+ export { SuggestedActions, type SuggestedAction, type SuggestedActionsProps } from './core/events/SuggestedActions/SuggestedActions';
128
+ export { ActionLink, ActionRow, actionsOf, type PublicAction } from './core/public/_shared/actions';
129
+ export { imageOf, type PublicImage } from './core/public/_shared/media';
130
+ export { Hero, type HeroProps } from './core/public/Hero/Hero';
131
+ export { PublicHeader, type PublicHeaderProps, type PublicNavLink } from './core/public/PublicHeader/PublicHeader';
132
+ export { PublicFooter, type PublicFooterGroup, type PublicFooterProps } from './core/public/PublicFooter/PublicFooter';
133
+ export { LogoMark, type LogoMarkProps } from './core/public/LogoMark/LogoMark';
134
+ export { Image, type ImageProps } from './core/public/Image/Image';
135
+ export { FeatureGrid, type FeatureGridProps, type FeatureItem } from './core/public/FeatureGrid/FeatureGrid';
136
+ export { TeamGrid, type TeamGridProps, type TeamMember } from './core/public/TeamGrid/TeamGrid';
137
+ export { Testimonial, type TestimonialProps } from './core/public/Testimonial/Testimonial';
138
+ export { CtaBand, type CtaBandProps } from './core/public/CtaBand/CtaBand';
139
+ export { ContactForm, type ContactFormProps, type ContactRequestInput } from './core/public/ContactForm/ContactForm';
140
+ export { Combobox, Highlighted, useCombobox, type ComboboxOption, type ComboboxProps, type UseComboboxOptions } from './core/forms/Combobox/Combobox';
141
+ export { CodeField, type CodeFieldProps } from './core/forms/CodeField/CodeField';
142
+ export { DEFAULT_VIEWER, ViewerProvider, hasRole, isStaff, normalizeViewer, useViewer, type Viewer } from './core/_shared/viewer';