@ttt-productions/ttt-core 0.79.76 → 0.79.78

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 (33) hide show
  1. package/dist/doc-schemas/registry.d.ts +32 -68
  2. package/dist/doc-schemas/registry.d.ts.map +1 -1
  3. package/dist/doc-schemas/system-slots.d.ts +32 -0
  4. package/dist/doc-schemas/system-slots.d.ts.map +1 -1
  5. package/dist/media/domain-events-admin.d.ts +0 -18
  6. package/dist/media/domain-events-admin.d.ts.map +1 -1
  7. package/dist/media/domain-events-admin.js +1 -13
  8. package/dist/media/domain-events-admin.js.map +1 -1
  9. package/dist/media/domain-events.d.ts +0 -17
  10. package/dist/media/domain-events.d.ts.map +1 -1
  11. package/dist/media/domain-events.js +1 -2
  12. package/dist/media/domain-events.js.map +1 -1
  13. package/dist/media/pending-media.d.ts +0 -187
  14. package/dist/media/pending-media.d.ts.map +1 -1
  15. package/dist/media/target-info.d.ts +32 -0
  16. package/dist/media/target-info.d.ts.map +1 -1
  17. package/dist/schemas/admin.d.ts +32 -0
  18. package/dist/schemas/admin.d.ts.map +1 -1
  19. package/dist/system-slots/help-videos.d.ts +134 -0
  20. package/dist/system-slots/help-videos.d.ts.map +1 -0
  21. package/dist/system-slots/help-videos.js +44 -0
  22. package/dist/system-slots/help-videos.js.map +1 -0
  23. package/dist/system-slots/index.d.ts +1 -0
  24. package/dist/system-slots/index.d.ts.map +1 -1
  25. package/dist/system-slots/index.js +1 -0
  26. package/dist/system-slots/index.js.map +1 -1
  27. package/dist/system-slots/system-slots.d.ts +117 -4
  28. package/dist/system-slots/system-slots.d.ts.map +1 -1
  29. package/dist/system-slots/system-slots.js +38 -0
  30. package/dist/system-slots/system-slots.js.map +1 -1
  31. package/dist/upload-variables/upload-system-content-variables.d.ts +32 -0
  32. package/dist/upload-variables/upload-system-content-variables.d.ts.map +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-videos.js","sourceRoot":"","sources":["../../src/system-slots/help-videos.ts"],"names":[],"mappings":"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","sourcesContent":["// The Help components' videos: the one declaration of every Help placement — each `?` Help dialog\n// in the app — with a stable id, the readable title its dialog shows, and where it sits. The\n// system-slot registry derives an optional video slot per entry, so an admin can find any Help\n// placement and give it a video. Separate placements never share a slot, even when their written\n// Help reads the same.\n\nexport const HELP_VIDEO_DEFINITIONS = [\n { id: 'work-project-information', title: 'Work Project Information', location: 'Work page — the Work Project Information section.' },\n { id: 'work-team-communication', title: 'Team Communication', location: 'Work page — the Team Communication (guild chat) section.' },\n { id: 'work-your-team', title: 'Your Team', location: 'Work page — the Your Team section.' },\n { id: 'work-guildmate-users', title: 'Guildmate Users', location: 'Work page — the Guildmate Users list inside Your Team.' },\n { id: 'work-member-stake-shares', title: 'Number of Shares', location: \"Work page — a Guildmate's details, beside their Stake count.\" },\n { id: 'work-member-guild-standings', title: 'Guild Standings', location: \"Work page — a Guildmate's details, beside their Guild Standings.\" },\n { id: 'work-member-trade-professions', title: 'User Trade Professions', location: \"Work page — a Guildmate's details, beside their Trade Professions.\" },\n { id: 'work-pending-invitations', title: 'Pending Invitations', location: 'Work page — the Pending Invitations section.' },\n { id: 'work-invite-by-craft', title: 'Search and Invite by Craft', location: 'Work page — the craft search for inviting an Artisan.' },\n { id: 'work-project-files', title: 'Work Project Files', location: 'Work page — the Work Project Files section.' },\n { id: 'work-find-talent', title: 'Find Talent', location: 'Work page — the Find Talent (commissions) section.' },\n { id: 'work-community-feedback', title: 'Get Community Feedback', location: 'Work page — the Get Community Feedback (auditions) section.' },\n { id: 'work-project-auditions', title: 'Work Project Auditions', location: \"Work page — the Work's auditions list.\" },\n { id: 'work-submit-to-hall', title: 'Submit to the Hall', location: 'Work page — the Submit to the Hall section.' },\n { id: 'work-episodic-publishing', title: 'Episodic Publishing', location: 'Work page — the episodic publishing list inside Submit to the Hall.' },\n { id: 'work-platform-correspondence', title: 'Platform Correspondence', location: 'Work page — the Platform Correspondence section.' },\n { id: 'hall', title: 'Discover Human Creativity', location: 'The Hall — its masthead.' },\n { id: 'square', title: 'The Square', location: 'The Square — its masthead.' },\n { id: 'notice-board', title: 'The Notice Board', location: 'The Notice Board — its masthead.' },\n { id: 'craft-fair', title: 'The Craft Fair', location: 'The Craft Fair — its search bar.' },\n { id: 'audition-stage', title: \"Shape TTT's Future\", location: 'The Audition Stage — its masthead.' },\n { id: 'audition-sponsored-prize', title: 'Sponsored prize — how it works', location: \"An audition card on the Audition Stage and an audition's page — beside a Sponsored audition's prize.\" },\n { id: 'audition-view-sponsored-prize', title: 'Sponsored prize — how it works', location: \"An audition's full view (a Work's or the admin's) — beside a Sponsored audition's prize.\" },\n { id: 'admin-audition-sponsored-prize', title: 'Sponsored prize — how it works', location: 'Admin → Audition Mngt — the audition form, beside the Sponsored prize field.' },\n { id: 'messages-admin-dispatches', title: 'Important Notifications', location: 'Messages — the admin dispatches section.' },\n { id: 'messages-guild-invites', title: 'Work Project Collaboration Invites', location: 'Messages — the guild invites section.' },\n { id: 'profile-overview', title: 'Your TTT Profile', location: 'Profile page — the profile header.' },\n { id: 'profile-square-activity', title: 'Your Square Activity', location: 'Profile page — the Square activity section.' },\n { id: 'profile-following', title: 'Users You Follow', location: 'Profile page — the Following section.' },\n { id: 'profile-artisan-tools', title: 'Unlock Artisan Creator Tools', location: 'Profile page — the Become an Artisan Creator section.' },\n { id: 'profile-work-projects', title: 'Your Creative Work Projects', location: 'Profile page — the Works section.' },\n { id: 'profile-crafts', title: 'Showcase Your Craft', location: 'Profile page — the Crafts section.' },\n] as const;\n\nexport type HelpVideoDefinition = (typeof HELP_VIDEO_DEFINITIONS)[number];\nexport type HelpVideoId = HelpVideoDefinition['id'];\n\n/** The system video slot that holds a Help placement's video. */\nexport function helpVideoSlotId<V extends HelpVideoId>(helpId: V): `help-${V}` {\n return `help-${helpId}`;\n}\n"]}
@@ -1,3 +1,4 @@
1
1
  export * from './guide-videos.js';
2
+ export * from './help-videos.js';
2
3
  export * from './system-slots.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/system-slots/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/system-slots/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './guide-videos.js';
2
+ export * from './help-videos.js';
2
3
  export * from './system-slots.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-slots/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './guide-videos.js';\nexport * from './system-slots.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-slots/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './guide-videos.js';\nexport * from './help-videos.js';\nexport * from './system-slots.js';\n"]}
@@ -6,35 +6,77 @@ export declare const SystemSlotKindSchema: z.ZodEnum<{
6
6
  uidList: "uidList";
7
7
  }>;
8
8
  export type SystemSlotKind = z.infer<typeof SystemSlotKindSchema>;
9
- export interface SystemSlotDefinition {
9
+ /**
10
+ * Where a slot appears — the admin System Slots view groups slots by it, in this order, under these
11
+ * names. A group is declared only once a slot belongs to it.
12
+ */
13
+ export declare const SYSTEM_SLOT_GROUPS: readonly [{
14
+ readonly id: "landingPage";
15
+ readonly label: "Landing page";
16
+ }, {
17
+ readonly id: "acknowledgmentsPage";
18
+ readonly label: "Acknowledgments page";
19
+ }, {
20
+ readonly id: "backstageGuide";
21
+ readonly label: "Backstage Guide";
22
+ }, {
23
+ readonly id: "helpComponents";
24
+ readonly label: "Help components";
25
+ }];
26
+ export type SystemSlotGroupId = (typeof SYSTEM_SLOT_GROUPS)[number]['id'];
27
+ interface SystemSlotDefinitionBase {
10
28
  readonly id: string;
11
- readonly kind: SystemSlotKind;
12
29
  /** The admin view's row title. */
13
30
  readonly label: string;
14
31
  /** Where the slot appears, in one sentence. */
15
32
  readonly description: string;
33
+ readonly group: SystemSlotGroupId;
16
34
  }
35
+ /**
36
+ * A video slot declares whether its place always shows a video. `requiredVideo: true` reserves the
37
+ * 16:9 box everywhere it is shown and holds the coming-soon placard until a video is uploaded;
38
+ * `false` takes no space and shows nothing until a video is uploaded.
39
+ */
40
+ export type SystemSlotDefinition = (SystemSlotDefinitionBase & {
41
+ readonly kind: 'video';
42
+ readonly requiredVideo: boolean;
43
+ }) | (SystemSlotDefinitionBase & {
44
+ readonly kind: 'uid' | 'uidList';
45
+ });
17
46
  export declare const SYSTEM_SLOTS: readonly [{
18
47
  readonly id: "founder";
19
48
  readonly kind: "uid";
20
49
  readonly label: "Founder";
21
50
  readonly description: "The founder named on the acknowledgments page.";
51
+ readonly group: "acknowledgmentsPage";
22
52
  }, {
23
53
  readonly id: "team";
24
54
  readonly kind: "uidList";
25
55
  readonly label: "Our Team";
26
56
  readonly description: "The team listed on the acknowledgments page.";
57
+ readonly group: "acknowledgmentsPage";
27
58
  }, {
28
59
  readonly id: "landing-hero";
29
60
  readonly kind: "video";
30
61
  readonly label: "Landing page hero";
31
62
  readonly description: "The video under the hero on the signed-in landing page.";
32
- }, ...{
63
+ readonly group: "landingPage";
64
+ readonly requiredVideo: true;
65
+ }, ...({
33
66
  id: "guide-ttt-in-five-minutes" | "guide-finding-your-way-around" | "guide-find-something-to-enjoy" | "guide-start-a-work-as-steward" | "guide-how-to-join-a-work" | "guide-what-is-a-realm" | "guide-what-is-a-work" | "guide-what-is-a-guild" | "guide-what-are-stakes" | "guide-how-bouquets-and-payouts-will-work";
34
67
  kind: "video";
35
68
  label: "TTT in Five Minutes" | "Finding Your Way Around TTT" | "Find Something to Enjoy in the Hall" | "Start a Work as Steward" | "How to Join a Work" | "What is a Realm?" | "What is a Work?" | "What is a Guild?" | "What are Stakes?" | "How Bouquets and Payouts Will Work";
36
69
  description: string;
37
- }[]];
70
+ group: "backstageGuide";
71
+ requiredVideo: boolean;
72
+ } | {
73
+ id: "help-work-project-information" | "help-work-team-communication" | "help-work-your-team" | "help-work-guildmate-users" | "help-work-member-stake-shares" | "help-work-member-guild-standings" | "help-work-member-trade-professions" | "help-work-pending-invitations" | "help-work-invite-by-craft" | "help-work-project-files" | "help-work-find-talent" | "help-work-community-feedback" | "help-work-project-auditions" | "help-work-submit-to-hall" | "help-work-episodic-publishing" | "help-work-platform-correspondence" | "help-hall" | "help-square" | "help-notice-board" | "help-craft-fair" | "help-audition-stage" | "help-audition-sponsored-prize" | "help-audition-view-sponsored-prize" | "help-admin-audition-sponsored-prize" | "help-messages-admin-dispatches" | "help-messages-guild-invites" | "help-profile-overview" | "help-profile-square-activity" | "help-profile-following" | "help-profile-artisan-tools" | "help-profile-work-projects" | "help-profile-crafts";
74
+ kind: "video";
75
+ label: "Work Project Information" | "Team Communication" | "Your Team" | "Guildmate Users" | "Number of Shares" | "Guild Standings" | "User Trade Professions" | "Pending Invitations" | "Search and Invite by Craft" | "Work Project Files" | "Find Talent" | "Get Community Feedback" | "Work Project Auditions" | "Submit to the Hall" | "Episodic Publishing" | "Platform Correspondence" | "Discover Human Creativity" | "The Square" | "The Notice Board" | "The Craft Fair" | "Shape TTT's Future" | "Sponsored prize — how it works" | "Important Notifications" | "Work Project Collaboration Invites" | "Your TTT Profile" | "Your Square Activity" | "Users You Follow" | "Unlock Artisan Creator Tools" | "Your Creative Work Projects" | "Showcase Your Craft";
76
+ description: "Work page — the Work Project Information section." | "Work page — the Team Communication (guild chat) section." | "Work page — the Your Team section." | "Work page — the Guildmate Users list inside Your Team." | "Work page — a Guildmate's details, beside their Stake count." | "Work page — a Guildmate's details, beside their Guild Standings." | "Work page — a Guildmate's details, beside their Trade Professions." | "Work page — the Pending Invitations section." | "Work page — the craft search for inviting an Artisan." | "Work page — the Work Project Files section." | "Work page — the Find Talent (commissions) section." | "Work page — the Get Community Feedback (auditions) section." | "Work page — the Work's auditions list." | "Work page — the Submit to the Hall section." | "Work page — the episodic publishing list inside Submit to the Hall." | "Work page — the Platform Correspondence section." | "The Hall — its masthead." | "The Square — its masthead." | "The Notice Board — its masthead." | "The Craft Fair — its search bar." | "The Audition Stage — its masthead." | "An audition card on the Audition Stage and an audition's page — beside a Sponsored audition's prize." | "An audition's full view (a Work's or the admin's) — beside a Sponsored audition's prize." | "Admin → Audition Mngt — the audition form, beside the Sponsored prize field." | "Messages — the admin dispatches section." | "Messages — the guild invites section." | "Profile page — the profile header." | "Profile page — the Square activity section." | "Profile page — the Following section." | "Profile page — the Become an Artisan Creator section." | "Profile page — the Works section." | "Profile page — the Crafts section.";
77
+ group: "helpComponents";
78
+ requiredVideo: boolean;
79
+ })[]];
38
80
  type SystemSlot = (typeof SYSTEM_SLOTS)[number];
39
81
  export type SystemSlotId = SystemSlot['id'];
40
82
  export type SystemVideoSlotId = Extract<SystemSlot, {
@@ -57,6 +99,38 @@ export declare const SystemSlotIdSchema: z.ZodEnum<{
57
99
  "guide-what-is-a-guild": "guide-what-is-a-guild";
58
100
  "guide-what-are-stakes": "guide-what-are-stakes";
59
101
  "guide-how-bouquets-and-payouts-will-work": "guide-how-bouquets-and-payouts-will-work";
102
+ "help-work-project-information": "help-work-project-information";
103
+ "help-work-team-communication": "help-work-team-communication";
104
+ "help-work-your-team": "help-work-your-team";
105
+ "help-work-guildmate-users": "help-work-guildmate-users";
106
+ "help-work-member-stake-shares": "help-work-member-stake-shares";
107
+ "help-work-member-guild-standings": "help-work-member-guild-standings";
108
+ "help-work-member-trade-professions": "help-work-member-trade-professions";
109
+ "help-work-pending-invitations": "help-work-pending-invitations";
110
+ "help-work-invite-by-craft": "help-work-invite-by-craft";
111
+ "help-work-project-files": "help-work-project-files";
112
+ "help-work-find-talent": "help-work-find-talent";
113
+ "help-work-community-feedback": "help-work-community-feedback";
114
+ "help-work-project-auditions": "help-work-project-auditions";
115
+ "help-work-submit-to-hall": "help-work-submit-to-hall";
116
+ "help-work-episodic-publishing": "help-work-episodic-publishing";
117
+ "help-work-platform-correspondence": "help-work-platform-correspondence";
118
+ "help-hall": "help-hall";
119
+ "help-square": "help-square";
120
+ "help-notice-board": "help-notice-board";
121
+ "help-craft-fair": "help-craft-fair";
122
+ "help-audition-stage": "help-audition-stage";
123
+ "help-audition-sponsored-prize": "help-audition-sponsored-prize";
124
+ "help-audition-view-sponsored-prize": "help-audition-view-sponsored-prize";
125
+ "help-admin-audition-sponsored-prize": "help-admin-audition-sponsored-prize";
126
+ "help-messages-admin-dispatches": "help-messages-admin-dispatches";
127
+ "help-messages-guild-invites": "help-messages-guild-invites";
128
+ "help-profile-overview": "help-profile-overview";
129
+ "help-profile-square-activity": "help-profile-square-activity";
130
+ "help-profile-following": "help-profile-following";
131
+ "help-profile-artisan-tools": "help-profile-artisan-tools";
132
+ "help-profile-work-projects": "help-profile-work-projects";
133
+ "help-profile-crafts": "help-profile-crafts";
60
134
  founder: "founder";
61
135
  team: "team";
62
136
  "landing-hero": "landing-hero";
@@ -72,6 +146,38 @@ export declare const SystemVideoSlotIdSchema: z.ZodEnum<{
72
146
  "guide-what-is-a-guild": "guide-what-is-a-guild";
73
147
  "guide-what-are-stakes": "guide-what-are-stakes";
74
148
  "guide-how-bouquets-and-payouts-will-work": "guide-how-bouquets-and-payouts-will-work";
149
+ "help-work-project-information": "help-work-project-information";
150
+ "help-work-team-communication": "help-work-team-communication";
151
+ "help-work-your-team": "help-work-your-team";
152
+ "help-work-guildmate-users": "help-work-guildmate-users";
153
+ "help-work-member-stake-shares": "help-work-member-stake-shares";
154
+ "help-work-member-guild-standings": "help-work-member-guild-standings";
155
+ "help-work-member-trade-professions": "help-work-member-trade-professions";
156
+ "help-work-pending-invitations": "help-work-pending-invitations";
157
+ "help-work-invite-by-craft": "help-work-invite-by-craft";
158
+ "help-work-project-files": "help-work-project-files";
159
+ "help-work-find-talent": "help-work-find-talent";
160
+ "help-work-community-feedback": "help-work-community-feedback";
161
+ "help-work-project-auditions": "help-work-project-auditions";
162
+ "help-work-submit-to-hall": "help-work-submit-to-hall";
163
+ "help-work-episodic-publishing": "help-work-episodic-publishing";
164
+ "help-work-platform-correspondence": "help-work-platform-correspondence";
165
+ "help-hall": "help-hall";
166
+ "help-square": "help-square";
167
+ "help-notice-board": "help-notice-board";
168
+ "help-craft-fair": "help-craft-fair";
169
+ "help-audition-stage": "help-audition-stage";
170
+ "help-audition-sponsored-prize": "help-audition-sponsored-prize";
171
+ "help-audition-view-sponsored-prize": "help-audition-view-sponsored-prize";
172
+ "help-admin-audition-sponsored-prize": "help-admin-audition-sponsored-prize";
173
+ "help-messages-admin-dispatches": "help-messages-admin-dispatches";
174
+ "help-messages-guild-invites": "help-messages-guild-invites";
175
+ "help-profile-overview": "help-profile-overview";
176
+ "help-profile-square-activity": "help-profile-square-activity";
177
+ "help-profile-following": "help-profile-following";
178
+ "help-profile-artisan-tools": "help-profile-artisan-tools";
179
+ "help-profile-work-projects": "help-profile-work-projects";
180
+ "help-profile-crafts": "help-profile-crafts";
75
181
  "landing-hero": "landing-hero";
76
182
  }>;
77
183
  export declare const SystemUidSlotIdSchema: z.ZodEnum<{
@@ -88,5 +194,12 @@ export declare const SystemAccountSlotIdSchema: z.ZodEnum<{
88
194
  export type SystemAccountSlotId = z.infer<typeof SystemAccountSlotIdSchema>;
89
195
  /** The registry entry for `id`, or undefined for an id the registry does not hold. */
90
196
  export declare function getSystemSlot(id: string): SystemSlotDefinition | undefined;
197
+ /** Whether a video slot's place always shows a video (its box and placard) — read from the registry. */
198
+ export declare function isRequiredVideoSlot(slotId: SystemVideoSlotId): boolean;
199
+ /** The registry's slots under each group, in the groups' order; a group no slot belongs to is left out. */
200
+ export declare function systemSlotsByGroup(): Array<{
201
+ group: (typeof SYSTEM_SLOT_GROUPS)[number];
202
+ slots: SystemSlot[];
203
+ }>;
91
204
  export {};
92
205
  //# sourceMappingURL=system-slots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-slots.d.ts","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,mGAAmG;AACnG,eAAO,MAAM,oBAAoB;;;;EAAsC,CAAC;AACxE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AASD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;IAoB2B,CAAC;AAErD,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAOjF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;EAE9B,CAAC;AACF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAAiC,CAAC;AACtE,eAAO,MAAM,qBAAqB;;EAA+B,CAAC;AAClE,eAAO,MAAM,yBAAyB;;EAAmC,CAAC;AAC1E,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB;;;EAGpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAE1E"}
1
+ {"version":3,"file":"system-slots.d.ts","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,mGAAmG;AACnG,eAAO,MAAM,oBAAoB;;;;EAAsC,CAAC;AACxE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAKrB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1E,UAAU,wBAAwB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,CAAC,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,GACxF,CAAC,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAoBtE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyB2B,CAAC;AAErD,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAOjF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9B,CAAC;AACF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiC,CAAC;AACtE,eAAO,MAAM,qBAAqB;;EAA+B,CAAC;AAClE,eAAO,MAAM,yBAAyB;;EAAmC,CAAC;AAC1E,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB;;;EAGpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAE1E;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAGtE;AAED,2GAA2G;AAC3G,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAAE,KAAK,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAK/G"}
@@ -6,13 +6,34 @@
6
6
  // bucket, so a slot that names accounts is readable by anyone, signed in or not.
7
7
  import { z } from 'zod';
8
8
  import { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';
9
+ import { HELP_VIDEO_DEFINITIONS, helpVideoSlotId } from './help-videos.js';
9
10
  /** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */
10
11
  export const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);
12
+ /**
13
+ * Where a slot appears — the admin System Slots view groups slots by it, in this order, under these
14
+ * names. A group is declared only once a slot belongs to it.
15
+ */
16
+ export const SYSTEM_SLOT_GROUPS = [
17
+ { id: 'landingPage', label: 'Landing page' },
18
+ { id: 'acknowledgmentsPage', label: 'Acknowledgments page' },
19
+ { id: 'backstageGuide', label: 'Backstage Guide' },
20
+ { id: 'helpComponents', label: 'Help components' },
21
+ ];
11
22
  const GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({
12
23
  id: guideVideoSlotId(video.id),
13
24
  kind: 'video',
14
25
  label: video.plannedTitle,
15
26
  description: 'A Backstage Guide video, shown wherever the Guide offers it.',
27
+ group: 'backstageGuide',
28
+ requiredVideo: true,
29
+ }));
30
+ const HELP_VIDEO_SLOTS = HELP_VIDEO_DEFINITIONS.map((help) => ({
31
+ id: helpVideoSlotId(help.id),
32
+ kind: 'video',
33
+ label: help.title,
34
+ description: help.location,
35
+ group: 'helpComponents',
36
+ requiredVideo: false,
16
37
  }));
17
38
  export const SYSTEM_SLOTS = [
18
39
  {
@@ -20,20 +41,25 @@ export const SYSTEM_SLOTS = [
20
41
  kind: 'uid',
21
42
  label: 'Founder',
22
43
  description: 'The founder named on the acknowledgments page.',
44
+ group: 'acknowledgmentsPage',
23
45
  },
24
46
  {
25
47
  id: 'team',
26
48
  kind: 'uidList',
27
49
  label: 'Our Team',
28
50
  description: 'The team listed on the acknowledgments page.',
51
+ group: 'acknowledgmentsPage',
29
52
  },
30
53
  {
31
54
  id: 'landing-hero',
32
55
  kind: 'video',
33
56
  label: 'Landing page hero',
34
57
  description: 'The video under the hero on the signed-in landing page.',
58
+ group: 'landingPage',
59
+ requiredVideo: true,
35
60
  },
36
61
  ...GUIDE_VIDEO_SLOTS,
62
+ ...HELP_VIDEO_SLOTS,
37
63
  ];
38
64
  function slotIdsOfKind(kind) {
39
65
  const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);
@@ -52,4 +78,16 @@ export const SystemAccountSlotIdSchema = z.enum([
52
78
  export function getSystemSlot(id) {
53
79
  return SYSTEM_SLOTS.find((slot) => slot.id === id);
54
80
  }
81
+ /** Whether a video slot's place always shows a video (its box and placard) — read from the registry. */
82
+ export function isRequiredVideoSlot(slotId) {
83
+ const slot = SYSTEM_SLOTS.find((entry) => entry.id === slotId);
84
+ return slot?.kind === 'video' && slot.requiredVideo;
85
+ }
86
+ /** The registry's slots under each group, in the groups' order; a group no slot belongs to is left out. */
87
+ export function systemSlotsByGroup() {
88
+ return SYSTEM_SLOT_GROUPS.map((group) => ({
89
+ group,
90
+ slots: SYSTEM_SLOTS.filter((slot) => slot.group === group.id),
91
+ })).filter((entry) => entry.slots.length > 0);
92
+ }
55
93
  //# sourceMappingURL=system-slots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-slots.js","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,gGAAgG;AAChG,0CAA0C;AAC1C,EAAE;AACF,gGAAgG;AAChG,iFAAiF;AAEjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,mGAAmG;AACnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAYxE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChE,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9B,IAAI,EAAE,OAAgB;IACtB,KAAK,EAAE,KAAK,CAAC,YAAY;IACzB,WAAW,EAAE,8DAA8D;CAC5E,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,gDAAgD;KAC9D;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,8CAA8C;KAC5D;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,yDAAyD;KACvE;IACD,GAAG,iBAAiB;CAC8B,CAAC;AAQrD,SAAS,aAAa,CAA2B,IAAO;IACtD,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,GAAuG,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CACtC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAiD,CACpF,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,GAAG,qBAAqB,CAAC,OAAO;IAChC,GAAG,yBAAyB,CAAC,OAAO;CACrC,CAAC,CAAC;AAGH,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC","sourcesContent":["// System slots: the admin-managed places the app shows a founder-recorded video or names a special\n// account. Each surface is one registry entry; its value lives in Firestore and is set from the\n// admin System Slots view, never in code.\n//\n// Every `uid` / `uidList` slot is PUBLIC data: its values are stored in the public `_appConfig`\n// bucket, so a slot that names accounts is readable by anyone, signed in or not.\n\nimport { z } from 'zod';\nimport { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';\n\n/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */\nexport const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);\nexport type SystemSlotKind = z.infer<typeof SystemSlotKindSchema>;\n\nexport interface SystemSlotDefinition {\n readonly id: string;\n readonly kind: SystemSlotKind;\n /** The admin view's row title. */\n readonly label: string;\n /** Where the slot appears, in one sentence. */\n readonly description: string;\n}\n\nconst GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({\n id: guideVideoSlotId(video.id),\n kind: 'video' as const,\n label: video.plannedTitle,\n description: 'A Backstage Guide video, shown wherever the Guide offers it.',\n}));\n\nexport const SYSTEM_SLOTS = [\n {\n id: 'founder',\n kind: 'uid',\n label: 'Founder',\n description: 'The founder named on the acknowledgments page.',\n },\n {\n id: 'team',\n kind: 'uidList',\n label: 'Our Team',\n description: 'The team listed on the acknowledgments page.',\n },\n {\n id: 'landing-hero',\n kind: 'video',\n label: 'Landing page hero',\n description: 'The video under the hero on the signed-in landing page.',\n },\n ...GUIDE_VIDEO_SLOTS,\n] as const satisfies readonly SystemSlotDefinition[];\n\ntype SystemSlot = (typeof SYSTEM_SLOTS)[number];\nexport type SystemSlotId = SystemSlot['id'];\nexport type SystemVideoSlotId = Extract<SystemSlot, { kind: 'video' }>['id'];\nexport type SystemUidSlotId = Extract<SystemSlot, { kind: 'uid' }>['id'];\nexport type SystemUidListSlotId = Extract<SystemSlot, { kind: 'uidList' }>['id'];\n\nfunction slotIdsOfKind<K extends SystemSlotKind>(kind: K) {\n const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);\n return ids as unknown as [Extract<SystemSlot, { kind: K }>['id'], ...Extract<SystemSlot, { kind: K }>['id'][]];\n}\n\nexport const SystemSlotIdSchema = z.enum(\n SYSTEM_SLOTS.map((slot) => slot.id) as unknown as [SystemSlotId, ...SystemSlotId[]],\n);\nexport const SystemVideoSlotIdSchema = z.enum(slotIdsOfKind('video'));\nexport const SystemUidSlotIdSchema = z.enum(slotIdsOfKind('uid'));\nexport const SystemUidListSlotIdSchema = z.enum(slotIdsOfKind('uidList'));\n/** A slot that names accounts: a `uid` or a `uidList` slot. */\nexport const SystemAccountSlotIdSchema = z.enum([\n ...SystemUidSlotIdSchema.options,\n ...SystemUidListSlotIdSchema.options,\n]);\nexport type SystemAccountSlotId = z.infer<typeof SystemAccountSlotIdSchema>;\n\n/** The registry entry for `id`, or undefined for an id the registry does not hold. */\nexport function getSystemSlot(id: string): SystemSlotDefinition | undefined {\n return SYSTEM_SLOTS.find((slot) => slot.id === id);\n}\n"]}
1
+ {"version":3,"file":"system-slots.js","sourceRoot":"","sources":["../../src/system-slots/system-slots.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,gGAAgG;AAChG,0CAA0C;AAC1C,EAAE;AACF,gGAAgG;AAChG,iFAAiF;AAEjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE3E,mGAAmG;AACnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAGxE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;IAC5C,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC5D,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC1C,CAAC;AAqBX,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChE,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9B,IAAI,EAAE,OAAgB;IACtB,KAAK,EAAE,KAAK,CAAC,YAAY;IACzB,WAAW,EAAE,8DAA8D;IAC3E,KAAK,EAAE,gBAAyB;IAChC,aAAa,EAAE,IAAI;CACpB,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5B,IAAI,EAAE,OAAgB;IACtB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,WAAW,EAAE,IAAI,CAAC,QAAQ;IAC1B,KAAK,EAAE,gBAAyB;IAChC,aAAa,EAAE,KAAK;CACrB,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,qBAAqB;KAC7B;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,qBAAqB;KAC7B;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,yDAAyD;QACtE,KAAK,EAAE,aAAa;QACpB,aAAa,EAAE,IAAI;KACpB;IACD,GAAG,iBAAiB;IACpB,GAAG,gBAAgB;CAC+B,CAAC;AAQrD,SAAS,aAAa,CAA2B,IAAO;IACtD,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,GAAuG,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CACtC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAiD,CACpF,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,GAAG,qBAAqB,CAAC,OAAO;IAChC,GAAG,yBAAyB,CAAC,OAAO;CACrC,CAAC,CAAC;AAGH,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC/D,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC;AACtD,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,kBAAkB;IAChC,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK;QACL,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC","sourcesContent":["// System slots: the admin-managed places the app shows a founder-recorded video or names a special\n// account. Each surface is one registry entry; its value lives in Firestore and is set from the\n// admin System Slots view, never in code.\n//\n// Every `uid` / `uidList` slot is PUBLIC data: its values are stored in the public `_appConfig`\n// bucket, so a slot that names accounts is readable by anyone, signed in or not.\n\nimport { z } from 'zod';\nimport { GUIDE_VIDEO_DEFINITIONS, guideVideoSlotId } from './guide-videos.js';\nimport { HELP_VIDEO_DEFINITIONS, helpVideoSlotId } from './help-videos.js';\n\n/** `video` holds one processed video; `uid` names one account; `uidList` names an ordered list. */\nexport const SystemSlotKindSchema = z.enum(['video', 'uid', 'uidList']);\nexport type SystemSlotKind = z.infer<typeof SystemSlotKindSchema>;\n\n/**\n * Where a slot appears — the admin System Slots view groups slots by it, in this order, under these\n * names. A group is declared only once a slot belongs to it.\n */\nexport const SYSTEM_SLOT_GROUPS = [\n { id: 'landingPage', label: 'Landing page' },\n { id: 'acknowledgmentsPage', label: 'Acknowledgments page' },\n { id: 'backstageGuide', label: 'Backstage Guide' },\n { id: 'helpComponents', label: 'Help components' },\n] as const;\nexport type SystemSlotGroupId = (typeof SYSTEM_SLOT_GROUPS)[number]['id'];\n\ninterface SystemSlotDefinitionBase {\n readonly id: string;\n /** The admin view's row title. */\n readonly label: string;\n /** Where the slot appears, in one sentence. */\n readonly description: string;\n readonly group: SystemSlotGroupId;\n}\n\n/**\n * A video slot declares whether its place always shows a video. `requiredVideo: true` reserves the\n * 16:9 box everywhere it is shown and holds the coming-soon placard until a video is uploaded;\n * `false` takes no space and shows nothing until a video is uploaded.\n */\nexport type SystemSlotDefinition =\n | (SystemSlotDefinitionBase & { readonly kind: 'video'; readonly requiredVideo: boolean })\n | (SystemSlotDefinitionBase & { readonly kind: 'uid' | 'uidList' });\n\nconst GUIDE_VIDEO_SLOTS = GUIDE_VIDEO_DEFINITIONS.map((video) => ({\n id: guideVideoSlotId(video.id),\n kind: 'video' as const,\n label: video.plannedTitle,\n description: 'A Backstage Guide video, shown wherever the Guide offers it.',\n group: 'backstageGuide' as const,\n requiredVideo: true,\n}));\n\nconst HELP_VIDEO_SLOTS = HELP_VIDEO_DEFINITIONS.map((help) => ({\n id: helpVideoSlotId(help.id),\n kind: 'video' as const,\n label: help.title,\n description: help.location,\n group: 'helpComponents' as const,\n requiredVideo: false,\n}));\n\nexport const SYSTEM_SLOTS = [\n {\n id: 'founder',\n kind: 'uid',\n label: 'Founder',\n description: 'The founder named on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'team',\n kind: 'uidList',\n label: 'Our Team',\n description: 'The team listed on the acknowledgments page.',\n group: 'acknowledgmentsPage',\n },\n {\n id: 'landing-hero',\n kind: 'video',\n label: 'Landing page hero',\n description: 'The video under the hero on the signed-in landing page.',\n group: 'landingPage',\n requiredVideo: true,\n },\n ...GUIDE_VIDEO_SLOTS,\n ...HELP_VIDEO_SLOTS,\n] as const satisfies readonly SystemSlotDefinition[];\n\ntype SystemSlot = (typeof SYSTEM_SLOTS)[number];\nexport type SystemSlotId = SystemSlot['id'];\nexport type SystemVideoSlotId = Extract<SystemSlot, { kind: 'video' }>['id'];\nexport type SystemUidSlotId = Extract<SystemSlot, { kind: 'uid' }>['id'];\nexport type SystemUidListSlotId = Extract<SystemSlot, { kind: 'uidList' }>['id'];\n\nfunction slotIdsOfKind<K extends SystemSlotKind>(kind: K) {\n const ids = SYSTEM_SLOTS.filter((slot) => slot.kind === kind).map((slot) => slot.id);\n return ids as unknown as [Extract<SystemSlot, { kind: K }>['id'], ...Extract<SystemSlot, { kind: K }>['id'][]];\n}\n\nexport const SystemSlotIdSchema = z.enum(\n SYSTEM_SLOTS.map((slot) => slot.id) as unknown as [SystemSlotId, ...SystemSlotId[]],\n);\nexport const SystemVideoSlotIdSchema = z.enum(slotIdsOfKind('video'));\nexport const SystemUidSlotIdSchema = z.enum(slotIdsOfKind('uid'));\nexport const SystemUidListSlotIdSchema = z.enum(slotIdsOfKind('uidList'));\n/** A slot that names accounts: a `uid` or a `uidList` slot. */\nexport const SystemAccountSlotIdSchema = z.enum([\n ...SystemUidSlotIdSchema.options,\n ...SystemUidListSlotIdSchema.options,\n]);\nexport type SystemAccountSlotId = z.infer<typeof SystemAccountSlotIdSchema>;\n\n/** The registry entry for `id`, or undefined for an id the registry does not hold. */\nexport function getSystemSlot(id: string): SystemSlotDefinition | undefined {\n return SYSTEM_SLOTS.find((slot) => slot.id === id);\n}\n\n/** Whether a video slot's place always shows a video (its box and placard) — read from the registry. */\nexport function isRequiredVideoSlot(slotId: SystemVideoSlotId): boolean {\n const slot = SYSTEM_SLOTS.find((entry) => entry.id === slotId);\n return slot?.kind === 'video' && slot.requiredVideo;\n}\n\n/** The registry's slots under each group, in the groups' order; a group no slot belongs to is left out. */\nexport function systemSlotsByGroup(): Array<{ group: (typeof SYSTEM_SLOT_GROUPS)[number]; slots: SystemSlot[] }> {\n return SYSTEM_SLOT_GROUPS.map((group) => ({\n group,\n slots: SYSTEM_SLOTS.filter((slot) => slot.group === group.id),\n })).filter((entry) => entry.slots.length > 0);\n}\n"]}
@@ -11,6 +11,38 @@ export declare const UploadSystemContentVariablesSchema: z.ZodObject<{
11
11
  "guide-what-is-a-guild": "guide-what-is-a-guild";
12
12
  "guide-what-are-stakes": "guide-what-are-stakes";
13
13
  "guide-how-bouquets-and-payouts-will-work": "guide-how-bouquets-and-payouts-will-work";
14
+ "help-work-project-information": "help-work-project-information";
15
+ "help-work-team-communication": "help-work-team-communication";
16
+ "help-work-your-team": "help-work-your-team";
17
+ "help-work-guildmate-users": "help-work-guildmate-users";
18
+ "help-work-member-stake-shares": "help-work-member-stake-shares";
19
+ "help-work-member-guild-standings": "help-work-member-guild-standings";
20
+ "help-work-member-trade-professions": "help-work-member-trade-professions";
21
+ "help-work-pending-invitations": "help-work-pending-invitations";
22
+ "help-work-invite-by-craft": "help-work-invite-by-craft";
23
+ "help-work-project-files": "help-work-project-files";
24
+ "help-work-find-talent": "help-work-find-talent";
25
+ "help-work-community-feedback": "help-work-community-feedback";
26
+ "help-work-project-auditions": "help-work-project-auditions";
27
+ "help-work-submit-to-hall": "help-work-submit-to-hall";
28
+ "help-work-episodic-publishing": "help-work-episodic-publishing";
29
+ "help-work-platform-correspondence": "help-work-platform-correspondence";
30
+ "help-hall": "help-hall";
31
+ "help-square": "help-square";
32
+ "help-notice-board": "help-notice-board";
33
+ "help-craft-fair": "help-craft-fair";
34
+ "help-audition-stage": "help-audition-stage";
35
+ "help-audition-sponsored-prize": "help-audition-sponsored-prize";
36
+ "help-audition-view-sponsored-prize": "help-audition-view-sponsored-prize";
37
+ "help-admin-audition-sponsored-prize": "help-admin-audition-sponsored-prize";
38
+ "help-messages-admin-dispatches": "help-messages-admin-dispatches";
39
+ "help-messages-guild-invites": "help-messages-guild-invites";
40
+ "help-profile-overview": "help-profile-overview";
41
+ "help-profile-square-activity": "help-profile-square-activity";
42
+ "help-profile-following": "help-profile-following";
43
+ "help-profile-artisan-tools": "help-profile-artisan-tools";
44
+ "help-profile-work-projects": "help-profile-work-projects";
45
+ "help-profile-crafts": "help-profile-crafts";
14
46
  "landing-hero": "landing-hero";
15
47
  }>;
16
48
  videoFile: z.ZodUnion<[z.ZodCustom<File, File>, z.ZodCustom<Blob, Blob>]>;
@@ -1 +1 @@
1
- {"version":3,"file":"upload-system-content-variables.d.ts","sourceRoot":"","sources":["../../src/upload-variables/upload-system-content-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
1
+ {"version":3,"file":"upload-system-content-variables.d.ts","sourceRoot":"","sources":["../../src/upload-variables/upload-system-content-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttt-productions/ttt-core",
3
- "version": "0.79.76",
3
+ "version": "0.79.78",
4
4
  "description": "Core types, Firestore path constants, and shared constants for TTT Productions",
5
5
  "repository": {
6
6
  "type": "git",