@flamingo-stack/openframe-frontend-core 0.0.846 → 0.0.848

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 (125) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{case-study-card-DJOHIHYU.cjs → case-study-card-X2HKPKT7.cjs} +5 -5
  3. package/dist/{chunk-N2A24FDF.cjs → chunk-2V6FCVUL.cjs} +955 -932
  4. package/dist/{chunk-CNMXP77I.cjs → chunk-36DUCHI7.cjs} +4 -4
  5. package/dist/{chunk-J2IXYCEH.cjs → chunk-3W4ASAXN.cjs} +15 -15
  6. package/dist/{chunk-6LDL3UZE.cjs → chunk-4YBS4HIO.cjs} +20 -20
  7. package/dist/{chunk-QK2A334V.cjs → chunk-5HOWR4TG.cjs} +12 -12
  8. package/dist/{chunk-2FUTZKLB.cjs → chunk-74Z34I2C.cjs} +6 -6
  9. package/dist/{chunk-PV3NKXWS.cjs → chunk-7DW3LZ52.cjs} +57 -57
  10. package/dist/{chunk-ZTO7KNYV.cjs → chunk-7LE4HWHA.cjs} +35 -35
  11. package/dist/{chunk-URP6GYTD.cjs → chunk-7YJQTQPV.cjs} +56 -56
  12. package/dist/{chunk-4R4HAFXI.cjs → chunk-ALRYVZ3E.cjs} +6 -6
  13. package/dist/{chunk-57JYB3E2.cjs → chunk-C3WZXOZJ.cjs} +3 -3
  14. package/dist/{chunk-SSSI2RBV.cjs → chunk-FNQWL4W4.cjs} +14 -14
  15. package/dist/{chunk-J2ZSGOUC.cjs → chunk-GASFYPGH.cjs} +27 -27
  16. package/dist/{chunk-3V5JWG27.cjs → chunk-GG466XFQ.cjs} +2 -2
  17. package/dist/{chunk-XCVH5BCZ.cjs → chunk-GRCOEICK.cjs} +6 -6
  18. package/dist/{chunk-5GBLXY5F.cjs → chunk-HTYJUMFB.cjs} +7 -7
  19. package/dist/{chunk-HBDLJUI3.cjs → chunk-I3YRYS23.cjs} +5 -5
  20. package/dist/{chunk-HPXET3LH.cjs → chunk-IIUZE73M.cjs} +27 -27
  21. package/dist/{chunk-WCK5T3UD.cjs → chunk-IKOL6NJY.cjs} +101 -69
  22. package/dist/{chunk-DGQDGCQH.cjs → chunk-INA2FX2N.cjs} +2 -2
  23. package/dist/{chunk-PQDCSZ3W.cjs → chunk-IUZVOQXP.cjs} +85 -85
  24. package/dist/{chunk-BIOSHDXQ.cjs → chunk-MDLT6D46.cjs} +61 -61
  25. package/dist/{chunk-DEEQSVLX.cjs → chunk-MWYEROAP.cjs} +90 -90
  26. package/dist/{chunk-D5DMWXF2.cjs → chunk-NYT6IBIX.cjs} +4 -4
  27. package/dist/{chunk-TBOWFTEN.cjs → chunk-O4BXHCMK.cjs} +22 -22
  28. package/dist/{chunk-YC52LSPP.cjs → chunk-OCJXOSIH.cjs} +40 -40
  29. package/dist/{chunk-3TOWCFIK.cjs → chunk-PMUCEUFQ.cjs} +13 -1
  30. package/dist/{chunk-BZZE4KIV.cjs → chunk-QUSCSYHJ.cjs} +135 -135
  31. package/dist/{chunk-744JXTDP.cjs → chunk-SA2NNWIJ.cjs} +23 -23
  32. package/dist/{chunk-BHOVF4KP.cjs → chunk-SOSIXRQ3.cjs} +2 -2
  33. package/dist/{chunk-PZNWIJRZ.cjs → chunk-TIVPOVIM.cjs} +2 -2
  34. package/dist/{chunk-FLW4WULE.cjs → chunk-U7UBYJEZ.cjs} +17 -61
  35. package/dist/{chunk-Y2OEC7UW.cjs → chunk-VW4446JR.cjs} +40 -40
  36. package/dist/{chunk-NFNSPLGC.cjs → chunk-W7OFAROY.cjs} +14 -9
  37. package/dist/{chunk-RAJ5FYFL.cjs → chunk-Y2ZWWIUA.cjs} +14 -14
  38. package/dist/{chunk-MPVOPSU6.cjs → chunk-Y4BG7SPX.cjs} +96 -96
  39. package/dist/{chunk-SIFRIUPW.cjs → chunk-YAW7CHLV.cjs} +340 -354
  40. package/dist/{chunk-ABL5OBSF.cjs → chunk-YXKAHQYS.cjs} +294 -249
  41. package/dist/{chunk-SWF6TNZ3.cjs → chunk-ZGEWT3SF.cjs} +2 -2
  42. package/dist/{chunk-5SZ4ILU3.cjs → chunk-ZZDFMUEU.cjs} +3 -3
  43. package/dist/{cloud-tenants-XEUUMABT.cjs → cloud-tenants-YAZHLPOQ.cjs} +21 -21
  44. package/dist/components/case-studies/index.cjs +36 -36
  45. package/dist/components/chat/chat-composer.d.ts.map +1 -1
  46. package/dist/components/chat/chat-composer.js +4 -3
  47. package/dist/components/chat/chat-container.d.ts.map +1 -1
  48. package/dist/components/chat/chat-container.js +2 -2
  49. package/dist/components/chat/entity-cards/design-doc-card.d.ts.map +1 -1
  50. package/dist/components/chat/entity-cards/design-doc-card.js +5 -17
  51. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  52. package/dist/components/chat/entity-cards/dispatch.js +4 -7
  53. package/dist/components/chat/index.cjs +15 -15
  54. package/dist/components/contact/index.cjs +22 -22
  55. package/dist/components/docs/index.cjs +25 -25
  56. package/dist/components/embeds/index.cjs +22 -22
  57. package/dist/components/faq/index.cjs +23 -23
  58. package/dist/components/features/index.cjs +21 -21
  59. package/dist/components/features/status-filter-component.d.ts +7 -1
  60. package/dist/components/features/status-filter-component.d.ts.map +1 -1
  61. package/dist/components/features/status-filter-component.js +9 -3
  62. package/dist/components/help-center-pages/index.cjs +140 -140
  63. package/dist/components/index.cjs +137 -135
  64. package/dist/components/layout/back-button.d.ts +7 -1
  65. package/dist/components/layout/back-button.d.ts.map +1 -1
  66. package/dist/components/layout/back-button.js +34 -2
  67. package/dist/components/loading/unified-skeleton.d.ts +6 -1
  68. package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
  69. package/dist/components/loading/unified-skeleton.js +13 -1
  70. package/dist/components/meeting-scheduler/index.cjs +119 -119
  71. package/dist/components/navigation/index.cjs +24 -24
  72. package/dist/components/onboarding-guides/index.cjs +24 -24
  73. package/dist/components/product-demo/index.cjs +33 -33
  74. package/dist/components/related-content/index.cjs +11 -11
  75. package/dist/components/tickets/index.cjs +28 -28
  76. package/dist/components/ui/file-manager/file-manager-table.d.ts.map +1 -1
  77. package/dist/components/ui/file-manager/file-manager-table.js +63 -85
  78. package/dist/components/ui/file-manager/index.cjs +87 -109
  79. package/dist/components/ui/index.cjs +23 -21
  80. package/dist/components/ui/markdown/engine.d.ts +5 -4
  81. package/dist/components/ui/markdown/engine.d.ts.map +1 -1
  82. package/dist/components/ui/markdown/engine.js +15 -15
  83. package/dist/components/ui/people-cell.d.ts +9 -2
  84. package/dist/components/ui/people-cell.d.ts.map +1 -1
  85. package/dist/components/ui/people-cell.js +39 -23
  86. package/dist/components/ui/progress-bar.d.ts +6 -0
  87. package/dist/components/ui/progress-bar.d.ts.map +1 -1
  88. package/dist/components/ui/progress-bar.js +2 -0
  89. package/dist/components/ui/tag.d.ts +8 -0
  90. package/dist/components/ui/tag.d.ts.map +1 -1
  91. package/dist/components/ui/tag.js +5 -0
  92. package/dist/{devices-7YDIHVVP.cjs → devices-IZROCLFK.cjs} +22 -22
  93. package/dist/embed-shims/index.cjs +3 -3
  94. package/dist/embed-shims/next-image.cjs +3 -3
  95. package/dist/{embeddable-chat-Z3S37SSM.cjs → embeddable-chat-ETW6S22E.cjs} +94 -94
  96. package/dist/hooks/index.cjs +6 -6
  97. package/dist/index.cjs +30 -32
  98. package/dist/{knowledge-SQVPQSKM.cjs → knowledge-4IRWLTNW.cjs} +22 -22
  99. package/dist/{logs-M5DFGUBC.cjs → logs-EFDGY5IO.cjs} +28 -28
  100. package/dist/{policies-T3VQEJUD.cjs → policies-3KEXZ5BP.cjs} +25 -25
  101. package/dist/{remote-session-EE6477O3.cjs → remote-session-NT4NG7EF.cjs} +10 -10
  102. package/dist/{scripts-JFRFJKPH.cjs → scripts-PCGTZLZL.cjs} +28 -28
  103. package/dist/{software-update-E7W3AAIY.cjs → software-update-YCDNVFJE.cjs} +25 -25
  104. package/dist/{tickets-board-44HO3LR4.cjs → tickets-board-7FLGQEHF.cjs} +10 -10
  105. package/dist/types/design-doc.d.ts +45 -8
  106. package/dist/types/design-doc.d.ts.map +1 -1
  107. package/dist/utils/design-doc-readiness.d.ts +17 -15
  108. package/dist/utils/design-doc-readiness.d.ts.map +1 -1
  109. package/dist/utils/design-doc-readiness.js +5 -11
  110. package/dist/utils/index.cjs +5 -11
  111. package/package.json +1 -1
  112. package/src/components/chat/chat-composer.tsx +10 -3
  113. package/src/components/chat/chat-container.tsx +6 -4
  114. package/src/components/chat/entity-cards/design-doc-card.tsx +12 -17
  115. package/src/components/chat/entity-cards/dispatch.tsx +7 -10
  116. package/src/components/features/status-filter-component.tsx +15 -0
  117. package/src/components/layout/back-button.tsx +54 -2
  118. package/src/components/loading/unified-skeleton.tsx +18 -2
  119. package/src/components/ui/file-manager/file-manager-table.tsx +10 -45
  120. package/src/components/ui/markdown/engine.tsx +21 -30
  121. package/src/components/ui/people-cell.tsx +53 -17
  122. package/src/components/ui/progress-bar.tsx +8 -0
  123. package/src/components/ui/tag.tsx +14 -0
  124. package/src/types/design-doc.ts +59 -10
  125. package/src/utils/design-doc-readiness.ts +22 -23
@@ -3,9 +3,11 @@
3
3
  //
4
4
  // Participant sections are keyed by the employee DEPARTMENT (FK to the ONE
5
5
  // `departments` table — see department.ts); there is no function enum.
6
- // A doc has no status: it is READY when every section is signed off and no
7
- // blocking comment is open. That math lives in the hub's
6
+ // A doc's READINESS is derived: it is ready when every section is signed off and
7
+ // no blocking comment is open. That math lives in the hub's
8
8
  // `lib/utils/design-doc-gate.ts` (isomorphic, shared by server + client).
9
+ // Beside it a PERSON may set a lifecycle status (`lifecycle_status`: postponed,
10
+ // shipped, archived), which replaces readiness on every surface while it is set.
9
11
 
10
12
  // MIGRATION NOTE (2026-09-11). This file dropped `status`, `DesignDocStatus`,
11
13
  // `DesignDocStatusTransition`, `approved_at`, `dri_vacated_by`, `by_status` and
@@ -53,7 +55,15 @@ import type { EntityAuthor } from './entity-author';
53
55
  /** One value of `design_doc_vocabulary.kind` — the STRUCTURAL list (one per
54
56
  * value column), the only design-doc vocabulary that is code. */
55
57
  export type DesignDocVocabularyKind =
56
- 'tier' | 'spec_mode' | 'participant_status' | 'comment_type' | 'comment_status' | 'link_type' | 'media_type';
58
+ | 'tier'
59
+ | 'spec_mode'
60
+ | 'participant_status'
61
+ | 'comment_type'
62
+ | 'comment_status'
63
+ | 'link_type'
64
+ | 'media_type'
65
+ | 'lifecycle_status'
66
+ | 'readiness';
57
67
 
58
68
  /** A `design_doc_vocabulary` row, as the DAL and the vocabulary API return it. */
59
69
  export interface DesignDocVocabularyOption {
@@ -107,6 +117,24 @@ export type DesignDocCommentStatus = string;
107
117
  export type DesignDocLinkType = string;
108
118
  /** A `design_doc_vocabulary.value` of kind `media_type`. */
109
119
  export type DesignDocMediaType = string;
120
+ /**
121
+ * A `design_doc_vocabulary.value` of kind `lifecycle_status`: a status a PERSON sets (postponed, shipped, archived),
122
+ * beside the readiness the sign-offs decide. Null on a doc = active, and its readiness shows.
123
+ */
124
+ export type DesignDocLifecycleStatus = string;
125
+ /**
126
+ * A `design_doc_vocabulary.value` of kind `readiness`: the stage the sign-offs put a doc in (not ready, in active
127
+ * work, blocked, ready to build). The hub picks the row by its role; the words and the colour are the row's.
128
+ */
129
+ export type DesignDocReadiness = string;
130
+
131
+ /** A vocabulary value as a card shows it, resolved by the hub so a surface without the vocabulary can draw it. */
132
+ export interface DesignDocVocabularyDisplay {
133
+ value: string;
134
+ label: string;
135
+ /** A `StatusBadge` colorScheme name. */
136
+ color_scheme: string;
137
+ }
110
138
 
111
139
  // ---------------------------------------------------------------------------
112
140
  // Rows (as returned by the hub DAL — hydrated)
@@ -258,6 +286,15 @@ export interface DesignDoc {
258
286
  comments: DesignDocComment[];
259
287
  completion: DesignDocCompletion;
260
288
  my_open_work?: DesignDocMyOpenWork;
289
+ /** The status a person set (postponed, shipped, archived); null = active, its readiness shows. */
290
+ lifecycle_status: DesignDocLifecycleStatus | null;
291
+ /** That status as the vocabulary words it, resolved by the hub (null when none is set). */
292
+ lifecycle?: DesignDocVocabularyDisplay | null;
293
+ /** When the status was last set or cleared, and by whom. */
294
+ lifecycle_status_changed_at: string | null;
295
+ lifecycle_status_changed_by?: DesignDocPerson | null;
296
+ /** The stage its sign-offs put it in, as the vocabulary words it, resolved by the hub. */
297
+ readiness?: DesignDocVocabularyDisplay | null;
261
298
  }
262
299
 
263
300
  // ---------------------------------------------------------------------------
@@ -328,6 +365,8 @@ export interface UpdateDesignDocData {
328
365
  */
329
366
  feature_lead_ids?: string[];
330
367
  links?: DesignDocLinkInput[];
368
+ /** A `lifecycle_status` value, or null to make the doc active again. Anyone who may edit the doc may set it. */
369
+ lifecycle_status?: DesignDocLifecycleStatus | null;
331
370
  /** OCC token — the `updated_at` the editor seeded from; mismatch → 409. */
332
371
  expected_updated_at?: string;
333
372
  }
@@ -358,10 +397,18 @@ export interface AddDesignDocCommentData {
358
397
  body: string;
359
398
  }
360
399
 
361
- /** The dashboard's readiness filter (`?ready=`). */
362
- export type DesignDocReadyFilter = 'ready' | 'not_ready';
400
+ /** The dashboard's readiness filter (`?ready=`): one `readiness` value. */
401
+ export type DesignDocReadyFilter = DesignDocReadiness;
402
+
403
+ /**
404
+ * The dashboard's status filter (`?status=`): `active` (no lifecycle status set, the default) or one
405
+ * `lifecycle_status` value.
406
+ */
407
+ export type DesignDocLifecycleFilter = 'active' | DesignDocLifecycleStatus;
363
408
 
364
409
  export interface DesignDocFilters {
410
+ /** Defaults to `active`: a doc a person postponed, shipped or archived is listed only under its own status. */
411
+ lifecycle?: DesignDocLifecycleFilter;
365
412
  ready?: DesignDocReadyFilter;
366
413
  /** One or more `spec_mode` values (CSV on the wire). */
367
414
  spec_mode?: string;
@@ -378,16 +425,18 @@ export interface DesignDocListResponse {
378
425
  * filter itself — so a filtered row still shows what the other value holds. */
379
426
  facets: {
380
427
  spec_mode: Record<string, number>;
381
- /** The same over readiness (`ready` / `not_ready`), MINUS the ready filter itself: the filter row's options. */
382
- ready: Record<'ready' | 'not_ready', number>;
428
+ /** The same over readiness (each `readiness` value), MINUS the ready filter itself: the filter row's options. */
429
+ ready: Record<DesignDocReadiness, number>;
430
+ /** The same over the status filter (`active` and each `lifecycle_status` value), MINUS the status filter itself. */
431
+ lifecycle: Record<string, number>;
383
432
  };
384
433
  }
385
434
 
435
+ /** Counted over ACTIVE docs (no lifecycle status), so postponed, shipped and archived docs never inflate open work. */
386
436
  export interface DesignDocStats {
387
437
  total: number;
388
- /** Docs whose every section is signed off with no open blocking comment. */
389
- ready: number;
390
- not_ready: number;
438
+ /** How many active docs each `readiness` value holds, zeros included. */
439
+ readiness: Record<DesignDocReadiness, number>;
391
440
  waiting_on_me_docs: number;
392
441
  waiting_on_me_tasks: number;
393
442
  }
@@ -1,34 +1,33 @@
1
1
  /**
2
- * A design doc's readiness in words — THE wording every surface prints (the hub's design-docs screens, its doc
3
- * page, the lib's design-doc card): "Ready to build" once every department section is signed off and no blocking
4
- * comment is open, else "Not ready", and the sign-off caption beside it. Pure, zero-import beyond the type.
2
+ * A design doc's status as every surface draws it (the hub's design-docs screens, its doc page, the lib's design-doc
3
+ * cards), and its sign-off caption.
4
+ *
5
+ * Both halves of the status are vocabulary rows the hub resolves onto the doc, so no surface holds a word or a colour:
6
+ * - its READINESS (`doc.readiness`): the stage the sign-offs put it in (not ready, in active work, blocked, ready to
7
+ * build), picked by the hub from the `readiness` rows by role;
8
+ * - a LIFECYCLE status a person set (`doc.lifecycle`: postponed, shipped, archived). While one is set it is what the
9
+ * doc shows; cleared, the readiness shows again.
10
+ *
11
+ * The sign-off caption is counts only ("4/6 signed off · 1 blocking"): the status has its own badge.
12
+ * Pure, zero-import beyond the type.
5
13
  */
6
- import type { DesignDocCompletion } from '../types/design-doc';
14
+ import type { DesignDoc, DesignDocCompletion, DesignDocVocabularyDisplay } from '../types/design-doc';
7
15
 
8
- export const DESIGN_DOC_READINESS = ['ready', 'not_ready'] as const;
9
- export type DesignDocReadiness = (typeof DESIGN_DOC_READINESS)[number];
10
-
11
- /** Each readiness's label and badge colour (a `StatusBadge` scheme). */
12
- export const DESIGN_DOC_READINESS_DISPLAY: Record<
13
- DesignDocReadiness,
14
- { label: string; scheme: 'success' | 'default' }
15
- > = {
16
- ready: { label: 'Ready to build', scheme: 'success' },
17
- not_ready: { label: 'Not ready', scheme: 'default' },
18
- };
19
-
20
- /** Ready to build ⇔ `completion.isComplete` (every section signed off, no open blocking comment). */
21
- export const designDocReadiness = (completion: Pick<DesignDocCompletion, 'isComplete'>): DesignDocReadiness =>
22
- completion.isComplete ? 'ready' : 'not_ready';
16
+ /** What the doc's status badge says: its lifecycle status when a person set one, else its readiness (null from a hub
17
+ * that resolves neither). */
18
+ export function designDocStatusDisplay(
19
+ doc: Pick<DesignDoc, 'lifecycle' | 'readiness'>,
20
+ ): DesignDocVocabularyDisplay | null {
21
+ return doc.lifecycle ?? doc.readiness ?? null;
22
+ }
23
23
 
24
- /** "4/6 reviews signed off" */
24
+ /** "4/6 signed off" */
25
25
  export function formatCompletionLabel(completion: Pick<DesignDocCompletion, 'total' | 'completed'>): string {
26
- return `${completion.completed}/${completion.total} reviews signed off`;
26
+ return `${completion.completed}/${completion.total} signed off`;
27
27
  }
28
28
 
29
- /** The SAME label plus readiness and the blocking veto (the dashboard row, the doc page, the card). */
29
+ /** The SAME count plus the blocking veto ("4/6 signed off · 1 blocking"): the dashboard row, the doc page, the card. */
30
30
  export function formatCompletionLabelWithBlockers(completion: DesignDocCompletion): string {
31
31
  const base = formatCompletionLabel(completion);
32
- if (completion.isComplete) return `${DESIGN_DOC_READINESS_DISPLAY.ready.label} · ${base}`;
33
32
  return completion.openBlocking > 0 ? `${base} · ${completion.openBlocking} blocking` : base;
34
33
  }