@riverbankcms/sdk 0.107.0 → 0.108.0

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 (159) hide show
  1. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-BBT-kZAM.mjs} +46 -11
  2. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-D69xNKT2.mjs} +10 -9
  3. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-RRu7wyQ5.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-CuDjXH6o.mjs} +426 -72
  5. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-BQUY2dEk.mjs} +3865 -544
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +3712 -220
  7. package/dist/_dts/api/src/blocks.d.ts +41 -7
  8. package/dist/_dts/api/src/bookingRecords.d.ts +180 -115
  9. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  10. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +99 -0
  12. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  13. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  14. package/dist/_dts/api/src/index.d.ts +5 -2
  15. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  16. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  17. package/dist/_dts/api/src/sdkContracts.d.ts +62 -0
  18. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  19. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +143 -55
  20. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -1
  21. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +41 -1
  22. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  23. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  25. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  26. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  29. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +2 -2
  31. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  32. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  34. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  35. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  38. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  39. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  40. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  41. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  42. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  43. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  44. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  45. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  46. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  47. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  48. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  49. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  50. package/dist/_dts/core/src/branded.d.ts +3 -0
  51. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  52. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  53. package/dist/_dts/core/src/index.d.ts +2 -0
  54. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  55. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3043 -2941
  56. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  57. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  58. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  61. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  62. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  63. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  64. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  65. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  66. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  67. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  68. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  69. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  70. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  71. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  72. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  73. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -0
  74. package/dist/_dts/sdk/src/client/management/types.d.ts +15 -1
  75. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  76. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  77. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  78. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -2
  79. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  80. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  81. package/dist/_dts/sdk/src/version.d.ts +1 -1
  82. package/dist/_dts/site-commands/src/commands.d.ts +13 -10
  83. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  84. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  86. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  88. package/dist/_dts/theme-core/src/cards/types.d.ts +3 -3
  89. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  90. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -30
  93. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/schema.d.ts +1186 -34
  95. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  96. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  97. package/dist/cli/index.mjs +760 -374
  98. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-D6TOf6Hi.mjs} +1 -1
  99. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-Dao3zxRk.mjs} +3 -3
  100. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-B2NNt4y1.mjs} +2 -2
  101. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BhwFo16w.mjs} +1 -1
  102. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-BWnB7cMR.mjs} +2 -2
  103. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-TzRiQ0BY.mjs} +2 -2
  104. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-BPy-AJ4_.mjs} +1 -1
  105. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-BL4PGZds.mjs} +6 -6
  106. package/dist/client/bookings.mjs +143 -94
  107. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-EBjyslaX.mjs} +144 -95
  108. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-C2b7Cn9-.mjs} +1 -1
  109. package/dist/client/{cart-CEgbgJhX.mjs → cart-BQcbXIVD.mjs} +3 -3
  110. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-DEmpGRJu.mjs} +3 -3
  111. package/dist/client/client.mjs +827 -434
  112. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-BqRZPmsq.mjs} +7 -7
  113. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-B8N_tSl5.mjs} +5 -5
  114. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-Gjn6gtq7.mjs} +2 -2
  115. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-M-VCxA-r.mjs} +3 -3
  116. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-DR19hqYi.mjs} +2 -2
  117. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-BR02a0k3.mjs} +7 -7
  118. package/dist/client/{form-CH1lCusH.mjs → form-LY2xIbwg.mjs} +2 -2
  119. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-CYwwXJfh.mjs} +3 -3
  120. package/dist/client/hooks.mjs +377 -362
  121. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-DWnBXrFq.mjs} +2 -2
  122. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-D9s-fQ2P.mjs} +2 -2
  123. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-DDq80oYc.mjs} +1 -1
  124. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-B0SbWd45.mjs} +3 -3
  125. package/dist/client/{productList-Cc7OMrqN.mjs → productList-PwYlZn0y.mjs} +3 -3
  126. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-BRWBiH7i.mjs} +33 -9
  127. package/dist/client/rendering/client.mjs +247 -40
  128. package/dist/client/rendering/islands.mjs +18 -18
  129. package/dist/client/rendering.mjs +478 -270
  130. package/dist/client/{shop-CQ_YbCnn.mjs → shop-CMwZPYME.mjs} +6 -6
  131. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BuxsFate.mjs} +5 -5
  132. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-boYlEJ91.mjs} +1 -1
  133. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-D2naaOes.mjs} +2 -2
  134. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-D9RHpVoj.mjs} +1 -1
  135. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-igGiK1re.mjs} +3 -3
  136. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-CI7MbsFB.mjs} +2 -2
  137. package/dist/preview-next/before-render.mjs +178 -0
  138. package/dist/preview-next/client/runtime.mjs +4 -4
  139. package/dist/preview-next/middleware.mjs +178 -0
  140. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-a_cBD28m.mjs} +178 -0
  141. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-MBzD-GmP.mjs} +2 -2
  142. package/dist/{separator-BoMSQnsP.mjs → separator-5ahRBC85.mjs} +1 -1
  143. package/dist/server/components.mjs +556 -366
  144. package/dist/server/config-validation.mjs +384 -363
  145. package/dist/server/config.mjs +384 -364
  146. package/dist/server/data.mjs +377 -362
  147. package/dist/server/index.mjs +179 -1
  148. package/dist/server/navigation.mjs +9 -3
  149. package/dist/server/next.mjs +1384 -995
  150. package/dist/server/page-converter.mjs +368 -355
  151. package/dist/server/prebuild.mjs +1 -1
  152. package/dist/server/rendering/server.mjs +539 -360
  153. package/dist/server/rendering.mjs +556 -366
  154. package/dist/server/routing.mjs +613 -543
  155. package/dist/server/server.mjs +554 -361
  156. package/dist/server/theme-bridge.mjs +189 -98
  157. package/dist/server/theme.mjs +161 -95
  158. package/dist/styles/index.css +7 -1
  159. package/package.json +1 -1
@@ -0,0 +1,143 @@
1
+ import type { Brand } from './branded';
2
+ import { type Result } from './result';
3
+ export type FooterModuleId = Brand<string, 'FooterModuleId'>;
4
+ export type FooterMembershipKey = Brand<string, 'FooterMembershipKey'>;
5
+ export type FooterRichText = Readonly<Record<string, unknown>>;
6
+ export type FooterNavigationRole = 'main' | 'legal-policy';
7
+ type FooterSectionBase<TKind extends string> = Readonly<{
8
+ id: FooterModuleId;
9
+ kind: TKind;
10
+ heading: string | null;
11
+ selected: boolean;
12
+ }>;
13
+ export type FooterSection = (FooterSectionBase<'brand'> & Readonly<{
14
+ showLogo: boolean;
15
+ showTitle: boolean;
16
+ }>) | (FooterSectionBase<'navigation'> & Readonly<{
17
+ source: Readonly<{
18
+ kind: 'menu-role';
19
+ role: 'main';
20
+ }>;
21
+ }>) | (FooterSectionBase<'legal-navigation'> & Readonly<{
22
+ source: Readonly<{
23
+ kind: 'menu-role';
24
+ role: 'legal-policy';
25
+ }>;
26
+ }>) | (FooterSectionBase<'business-address'> & Readonly<{
27
+ source: Readonly<{
28
+ kind: 'business-address';
29
+ }>;
30
+ }>) | (FooterSectionBase<'contact'> & Readonly<{
31
+ source: Readonly<{
32
+ kind: 'public-profile';
33
+ }>;
34
+ }>) | (FooterSectionBase<'opening-hours'> & Readonly<{
35
+ source: Readonly<{
36
+ kind: 'public-profile';
37
+ }>;
38
+ }>) | (FooterSectionBase<'social-links'> & Readonly<{
39
+ source: Readonly<{
40
+ kind: 'public-profile';
41
+ }>;
42
+ }>) | (FooterSectionBase<'supporting-text'> & Readonly<{
43
+ content: FooterRichText | null;
44
+ }>) | (FooterSectionBase<'legal'> & Readonly<{
45
+ content: FooterRichText | null;
46
+ }>);
47
+ /** Retained as a source-compatible name while callers move from modules to sections. */
48
+ export type FooterModule = FooterSection;
49
+ export type FooterModuleKind = FooterSection['kind'];
50
+ export type FooterCompositionV1 = Readonly<{
51
+ schemaVersion: 1;
52
+ sections: readonly FooterSection[];
53
+ }>;
54
+ export type FooterCompositionError = Readonly<{
55
+ code: 'invalid_shape' | 'unsupported_schema_version' | 'invalid_section' | 'duplicate_section_id' | 'duplicate_section_kind' | 'unknown_section';
56
+ path: string;
57
+ message: string;
58
+ }>;
59
+ export type FooterLookPolicy = Readonly<{
60
+ kind: 'integrated-legal';
61
+ }> | Readonly<{
62
+ kind: 'separate-legal-region';
63
+ }>;
64
+ export type FooterVisualGroupKind = 'identity' | 'main-navigation' | 'visit' | 'legal-ending';
65
+ export type FooterColumnCount = 1 | 2 | 3 | 4;
66
+ export type FooterVisualGroup = Readonly<{
67
+ kind: FooterVisualGroupKind;
68
+ sections: readonly FooterSection[];
69
+ span: 1;
70
+ }>;
71
+ export type FooterRenderRegion = Readonly<{
72
+ kind: 'main' | 'bottom';
73
+ columns: FooterColumnCount;
74
+ groups: readonly FooterVisualGroup[];
75
+ }>;
76
+ export type FooterArrangementPlan = Readonly<{
77
+ membershipKey: FooterMembershipKey;
78
+ regions: readonly FooterRenderRegion[];
79
+ mobileGroups: readonly FooterVisualGroup[];
80
+ }>;
81
+ export type FooterRepairTarget = Readonly<{
82
+ kind: 'site-identity';
83
+ }> | Readonly<{
84
+ kind: 'navigation';
85
+ role: FooterNavigationRole;
86
+ }> | Readonly<{
87
+ kind: 'business-address';
88
+ }> | Readonly<{
89
+ kind: 'public-profile';
90
+ section: 'contact' | 'opening-hours' | 'social-links';
91
+ }> | Readonly<{
92
+ kind: 'footer-section';
93
+ sectionId: FooterModuleId;
94
+ }>;
95
+ export type ResolvedFooterSection = Readonly<{
96
+ kind: 'renderable';
97
+ section: FooterSection;
98
+ }> | Readonly<{
99
+ kind: 'missing-source';
100
+ section: FooterSection;
101
+ repairTarget: FooterRepairTarget;
102
+ }>;
103
+ export type RenderableFooterSection = Extract<ResolvedFooterSection, {
104
+ kind: 'renderable';
105
+ }>;
106
+ export type FooterSourceAvailability = Readonly<{
107
+ hasLogo: boolean;
108
+ hasMainNavigation: boolean;
109
+ hasLegalPolicyNavigation: boolean;
110
+ hasBusinessAddress: boolean;
111
+ hasContact: boolean;
112
+ hasOpeningHours: boolean;
113
+ hasSocialLinks: boolean;
114
+ }>;
115
+ export declare function unsafeAsFooterModuleId(value: string): FooterModuleId;
116
+ export declare function parseFooterModuleId(value: unknown): Result<FooterModuleId, FooterCompositionError>;
117
+ export declare function validateFooterComposition(composition: FooterCompositionV1): Result<FooterCompositionV1, FooterCompositionError>;
118
+ export declare function parseFooterCompositionV1(value: unknown): Result<FooterCompositionV1, FooterCompositionError>;
119
+ /**
120
+ * Bounded pre-production upgrader for the placement-shaped V1 that never reached production.
121
+ * It is intentionally not called by the runtime parser.
122
+ */
123
+ export declare function upgradePlacementFooterCompositionV1(value: unknown): Result<FooterCompositionV1, FooterCompositionError>;
124
+ export declare function setFooterSectionSelected(composition: FooterCompositionV1, sectionId: FooterModuleId, selected: boolean): Result<FooterCompositionV1, FooterCompositionError>;
125
+ export declare function resolveFooterSections(composition: FooterCompositionV1, availability: FooterSourceAvailability): readonly ResolvedFooterSection[];
126
+ export declare function planFooterArrangement(renderableSections: readonly RenderableFooterSection[], policy: FooterLookPolicy): FooterArrangementPlan;
127
+ export type FooterEditorOverviewItem = Readonly<{
128
+ section: FooterSection;
129
+ status: 'selected' | 'available';
130
+ }>;
131
+ export declare function deriveFooterEditorOverview(composition: FooterCompositionV1): Readonly<{
132
+ selected: readonly FooterEditorOverviewItem[];
133
+ available: readonly FooterEditorOverviewItem[];
134
+ }>;
135
+ type LegacyFooterNormalizationOptions = Readonly<{
136
+ brand?: Readonly<{
137
+ showLogo: boolean;
138
+ showTitle: boolean;
139
+ }>;
140
+ footerVisible?: boolean;
141
+ }>;
142
+ export declare function normalizeLegacyFooterContentToV1(value: unknown, options?: LegacyFooterNormalizationOptions): Result<FooterCompositionV1, FooterCompositionError>;
143
+ export {};
@@ -29,6 +29,8 @@ export * from './assertNever';
29
29
  export * from './participants';
30
30
  export * from './participant-identity';
31
31
  export * from './public-url-validation';
32
+ export * from './public-profile';
33
+ export * from './footer-composition';
32
34
  export * from './number-input';
33
35
  export * from './field-errors';
34
36
  export * from './form-submission-preview';
@@ -0,0 +1,73 @@
1
+ import type { Brand } from './branded';
2
+ import { type Result } from './result';
3
+ export type PublicProfileTimeZone = Brand<string, 'PublicProfileTimeZone'>;
4
+ export type OpeningHoursTime = Brand<string, 'OpeningHoursTime'>;
5
+ export type PublicSocialLinkId = Brand<string, 'PublicSocialLinkId'>;
6
+ export declare const publicProfileWeekdays: readonly ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
7
+ export type PublicProfileWeekday = (typeof publicProfileWeekdays)[number];
8
+ export declare const knownSocialPlatforms: readonly ["facebook", "instagram", "linkedin", "tiktok", "x", "youtube"];
9
+ export type KnownSocialPlatform = (typeof knownSocialPlatforms)[number];
10
+ export type PublicContactDetails = Readonly<{
11
+ kind: 'phone';
12
+ phone: string;
13
+ email: null;
14
+ }> | Readonly<{
15
+ kind: 'email';
16
+ phone: null;
17
+ email: string;
18
+ }> | Readonly<{
19
+ kind: 'phone-and-email';
20
+ phone: string;
21
+ email: string;
22
+ }>;
23
+ export type OpeningHoursInterval = Readonly<{
24
+ opensAt: OpeningHoursTime;
25
+ closesAt: OpeningHoursTime;
26
+ }>;
27
+ export type OpeningHoursDay = Readonly<{
28
+ kind: 'closed';
29
+ weekday: PublicProfileWeekday;
30
+ }> | Readonly<{
31
+ kind: 'open';
32
+ weekday: PublicProfileWeekday;
33
+ intervals: readonly [OpeningHoursInterval, ...OpeningHoursInterval[]];
34
+ }>;
35
+ export type WeeklyOpeningHours = Readonly<{
36
+ timeZone: PublicProfileTimeZone;
37
+ days: readonly [
38
+ OpeningHoursDay,
39
+ OpeningHoursDay,
40
+ OpeningHoursDay,
41
+ OpeningHoursDay,
42
+ OpeningHoursDay,
43
+ OpeningHoursDay,
44
+ OpeningHoursDay
45
+ ];
46
+ }>;
47
+ export type PublicSocialLink = Readonly<{
48
+ id: PublicSocialLinkId;
49
+ kind: 'known';
50
+ platform: KnownSocialPlatform;
51
+ url: string;
52
+ }> | Readonly<{
53
+ id: PublicSocialLinkId;
54
+ kind: 'custom';
55
+ label: string;
56
+ url: string;
57
+ }>;
58
+ export type PublicProfile = Readonly<{
59
+ contact: PublicContactDetails | null;
60
+ openingHours: WeeklyOpeningHours | null;
61
+ socialLinks: readonly PublicSocialLink[];
62
+ }>;
63
+ export type PublicProfileParseError = Readonly<{
64
+ code: 'invalid_shape' | 'contact_method_required' | 'invalid_email' | 'invalid_phone' | 'invalid_timezone' | 'invalid_weekdays' | 'invalid_time' | 'invalid_interval' | 'overlapping_intervals' | 'invalid_social_link' | 'duplicate_social_link_id';
65
+ path: string;
66
+ message: string;
67
+ }>;
68
+ export declare function parsePublicContactDetails(value: unknown): Result<PublicContactDetails, PublicProfileParseError>;
69
+ export declare function parsePublicProfileTimeZone(value: unknown): Result<PublicProfileTimeZone, PublicProfileParseError>;
70
+ export declare function parseWeeklyOpeningHours(value: unknown): Result<WeeklyOpeningHours, PublicProfileParseError>;
71
+ export declare function parsePublicSocialLinks(value: unknown): Result<readonly PublicSocialLink[], PublicProfileParseError>;
72
+ export declare function parsePublicProfile(value: unknown): Result<PublicProfile, PublicProfileParseError>;
73
+ export declare function emptyPublicProfile(): PublicProfile;