@cellarnode/ui 0.9.1 → 0.9.3

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/components/asset-list.d.ts +34 -0
  2. package/dist/components/asset-list.d.ts.map +1 -0
  3. package/dist/components/asset-list.js +34 -0
  4. package/dist/components/asset-list.js.map +1 -0
  5. package/dist/components/asset-list.stories.d.ts +20 -0
  6. package/dist/components/asset-list.stories.d.ts.map +1 -0
  7. package/dist/components/asset-list.stories.js +50 -0
  8. package/dist/components/asset-list.stories.js.map +1 -0
  9. package/dist/components/branch-overview-panel.d.ts +51 -0
  10. package/dist/components/branch-overview-panel.d.ts.map +1 -0
  11. package/dist/components/branch-overview-panel.js +48 -0
  12. package/dist/components/branch-overview-panel.js.map +1 -0
  13. package/dist/components/branch-overview-panel.stories.d.ts +16 -0
  14. package/dist/components/branch-overview-panel.stories.d.ts.map +1 -0
  15. package/dist/components/branch-overview-panel.stories.js +96 -0
  16. package/dist/components/branch-overview-panel.stories.js.map +1 -0
  17. package/dist/components/branch-resolution-modal.d.ts +31 -0
  18. package/dist/components/branch-resolution-modal.d.ts.map +1 -0
  19. package/dist/components/branch-resolution-modal.js +35 -0
  20. package/dist/components/branch-resolution-modal.js.map +1 -0
  21. package/dist/components/branch-resolution-modal.stories.d.ts +16 -0
  22. package/dist/components/branch-resolution-modal.stories.d.ts.map +1 -0
  23. package/dist/components/branch-resolution-modal.stories.js +66 -0
  24. package/dist/components/branch-resolution-modal.stories.js.map +1 -0
  25. package/dist/components/branch-resolution-modal.test.d.ts +2 -0
  26. package/dist/components/branch-resolution-modal.test.d.ts.map +1 -0
  27. package/dist/components/branch-resolution-modal.test.js +52 -0
  28. package/dist/components/branch-resolution-modal.test.js.map +1 -0
  29. package/dist/components/card-stack.d.ts +25 -0
  30. package/dist/components/card-stack.d.ts.map +1 -0
  31. package/dist/components/card-stack.js +26 -0
  32. package/dist/components/card-stack.js.map +1 -0
  33. package/dist/components/card-stack.stories.d.ts +21 -0
  34. package/dist/components/card-stack.stories.d.ts.map +1 -0
  35. package/dist/components/card-stack.stories.js +59 -0
  36. package/dist/components/card-stack.stories.js.map +1 -0
  37. package/dist/components/celebration-pulse.d.ts +21 -0
  38. package/dist/components/celebration-pulse.d.ts.map +1 -0
  39. package/dist/components/celebration-pulse.js +16 -0
  40. package/dist/components/celebration-pulse.js.map +1 -0
  41. package/dist/components/celebration-pulse.stories.d.ts +16 -0
  42. package/dist/components/celebration-pulse.stories.d.ts.map +1 -0
  43. package/dist/components/celebration-pulse.stories.js +29 -0
  44. package/dist/components/celebration-pulse.stories.js.map +1 -0
  45. package/dist/components/completed-offer-card.d.ts +34 -0
  46. package/dist/components/completed-offer-card.d.ts.map +1 -0
  47. package/dist/components/completed-offer-card.js +20 -0
  48. package/dist/components/completed-offer-card.js.map +1 -0
  49. package/dist/components/completed-offer-card.stories.d.ts +17 -0
  50. package/dist/components/completed-offer-card.stories.d.ts.map +1 -0
  51. package/dist/components/completed-offer-card.stories.js +75 -0
  52. package/dist/components/completed-offer-card.stories.js.map +1 -0
  53. package/dist/components/file-dropzone.d.ts +26 -0
  54. package/dist/components/file-dropzone.d.ts.map +1 -0
  55. package/dist/components/file-dropzone.js +49 -0
  56. package/dist/components/file-dropzone.js.map +1 -0
  57. package/dist/components/file-dropzone.stories.d.ts +21 -0
  58. package/dist/components/file-dropzone.stories.d.ts.map +1 -0
  59. package/dist/components/file-dropzone.stories.js +55 -0
  60. package/dist/components/file-dropzone.stories.js.map +1 -0
  61. package/dist/components/image-carousel.d.ts +41 -0
  62. package/dist/components/image-carousel.d.ts.map +1 -0
  63. package/dist/components/image-carousel.js +77 -0
  64. package/dist/components/image-carousel.js.map +1 -0
  65. package/dist/components/image-carousel.stories.d.ts +20 -0
  66. package/dist/components/image-carousel.stories.d.ts.map +1 -0
  67. package/dist/components/image-carousel.stories.js +62 -0
  68. package/dist/components/image-carousel.stories.js.map +1 -0
  69. package/dist/components/importer-picker-modal.d.ts +50 -0
  70. package/dist/components/importer-picker-modal.d.ts.map +1 -0
  71. package/dist/components/importer-picker-modal.js +82 -0
  72. package/dist/components/importer-picker-modal.js.map +1 -0
  73. package/dist/components/importer-picker-modal.stories.d.ts +17 -0
  74. package/dist/components/importer-picker-modal.stories.d.ts.map +1 -0
  75. package/dist/components/importer-picker-modal.stories.js +62 -0
  76. package/dist/components/importer-picker-modal.stories.js.map +1 -0
  77. package/dist/components/importer-picker-modal.test.d.ts +2 -0
  78. package/dist/components/importer-picker-modal.test.d.ts.map +1 -0
  79. package/dist/components/importer-picker-modal.test.js +51 -0
  80. package/dist/components/importer-picker-modal.test.js.map +1 -0
  81. package/dist/components/kanban-board.d.ts +19 -0
  82. package/dist/components/kanban-board.d.ts.map +1 -1
  83. package/dist/components/kanban-board.js.map +1 -1
  84. package/dist/components/kanban-dnd-board.d.ts +1 -1
  85. package/dist/components/kanban-dnd-board.d.ts.map +1 -1
  86. package/dist/components/kanban-dnd-board.js +52 -7
  87. package/dist/components/kanban-dnd-board.js.map +1 -1
  88. package/dist/components/kanban-dnd-board.stories.d.ts +1 -0
  89. package/dist/components/kanban-dnd-board.stories.d.ts.map +1 -1
  90. package/dist/components/kanban-dnd-board.stories.js +66 -0
  91. package/dist/components/kanban-dnd-board.stories.js.map +1 -1
  92. package/dist/components/kanban-dnd-board.test.d.ts +2 -0
  93. package/dist/components/kanban-dnd-board.test.d.ts.map +1 -0
  94. package/dist/components/kanban-dnd-board.test.js +34 -0
  95. package/dist/components/kanban-dnd-board.test.js.map +1 -0
  96. package/dist/components/offer-status-dots.d.ts +23 -0
  97. package/dist/components/offer-status-dots.d.ts.map +1 -0
  98. package/dist/components/offer-status-dots.js +34 -0
  99. package/dist/components/offer-status-dots.js.map +1 -0
  100. package/dist/components/offer-status-dots.stories.d.ts +19 -0
  101. package/dist/components/offer-status-dots.stories.d.ts.map +1 -0
  102. package/dist/components/offer-status-dots.stories.js +49 -0
  103. package/dist/components/offer-status-dots.stories.js.map +1 -0
  104. package/dist/components/product-card.d.ts +42 -0
  105. package/dist/components/product-card.d.ts.map +1 -0
  106. package/dist/components/product-card.js +20 -0
  107. package/dist/components/product-card.js.map +1 -0
  108. package/dist/components/product-card.stories.d.ts +20 -0
  109. package/dist/components/product-card.stories.d.ts.map +1 -0
  110. package/dist/components/product-card.stories.js +59 -0
  111. package/dist/components/product-card.stories.js.map +1 -0
  112. package/dist/components/product-list-row.d.ts +29 -0
  113. package/dist/components/product-list-row.d.ts.map +1 -0
  114. package/dist/components/product-list-row.js +13 -0
  115. package/dist/components/product-list-row.js.map +1 -0
  116. package/dist/components/product-list-row.stories.d.ts +19 -0
  117. package/dist/components/product-list-row.stories.d.ts.map +1 -0
  118. package/dist/components/product-list-row.stories.js +37 -0
  119. package/dist/components/product-list-row.stories.js.map +1 -0
  120. package/dist/components/sent-offer-card.d.ts +31 -0
  121. package/dist/components/sent-offer-card.d.ts.map +1 -0
  122. package/dist/components/sent-offer-card.js +23 -0
  123. package/dist/components/sent-offer-card.js.map +1 -0
  124. package/dist/components/sent-offer-card.stories.d.ts +17 -0
  125. package/dist/components/sent-offer-card.stories.d.ts.map +1 -0
  126. package/dist/components/sent-offer-card.stories.js +51 -0
  127. package/dist/components/sent-offer-card.stories.js.map +1 -0
  128. package/dist/components/view-toggle.d.ts +14 -0
  129. package/dist/components/view-toggle.d.ts.map +1 -0
  130. package/dist/components/view-toggle.js +14 -0
  131. package/dist/components/view-toggle.js.map +1 -0
  132. package/dist/components/view-toggle.stories.d.ts +20 -0
  133. package/dist/components/view-toggle.stories.d.ts.map +1 -0
  134. package/dist/components/view-toggle.stories.js +41 -0
  135. package/dist/components/view-toggle.stories.js.map +1 -0
  136. package/dist/hooks/use-celebration-pulse.d.ts +12 -0
  137. package/dist/hooks/use-celebration-pulse.d.ts.map +1 -0
  138. package/dist/hooks/use-celebration-pulse.js +28 -0
  139. package/dist/hooks/use-celebration-pulse.js.map +1 -0
  140. package/dist/index.d.ts +13 -1
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +15 -1
  143. package/dist/index.js.map +1 -1
  144. package/dist/lib/kanban-transitions.d.ts +62 -0
  145. package/dist/lib/kanban-transitions.d.ts.map +1 -1
  146. package/dist/lib/kanban-transitions.js +32 -0
  147. package/dist/lib/kanban-transitions.js.map +1 -1
  148. package/dist/lib/kanban-transitions.test.d.ts +2 -0
  149. package/dist/lib/kanban-transitions.test.d.ts.map +1 -0
  150. package/dist/lib/kanban-transitions.test.js +75 -0
  151. package/dist/lib/kanban-transitions.test.js.map +1 -0
  152. package/dist/offer/index.d.ts +3 -0
  153. package/dist/offer/index.d.ts.map +1 -1
  154. package/dist/offer/index.js +7 -0
  155. package/dist/offer/index.js.map +1 -1
  156. package/dist/offer/sensory-profile.d.ts.map +1 -1
  157. package/dist/offer/sensory-profile.js +1 -1
  158. package/dist/offer/sensory-profile.js.map +1 -1
  159. package/package.json +1 -1
@@ -1,6 +1,14 @@
1
1
  /**
2
2
  * Generic transition validation for kanban boards.
3
3
  * Not tied to any specific domain — consumers define their own rules.
4
+ *
5
+ * Two flavors:
6
+ * 1. createTransitionValidator(rules) — boolean API, used by simple boards
7
+ * that only need to know "is this transition allowed?"
8
+ * 2. createGatedTransitionValidator(rules) — discriminated-union API, used
9
+ * by boards that need to distinguish between unconditionally-allowed,
10
+ * blocked, hard-gated (predicate check), and modal-gated transitions.
11
+ * See offer-branching producer journey for the canonical use case.
4
12
  */
5
13
  export type TransitionRules = Record<string, string[]>;
6
14
  export declare function createTransitionValidator(rules: TransitionRules): {
@@ -9,4 +17,58 @@ export declare function createTransitionValidator(rules: TransitionRules): {
9
17
  /** Get all columns reachable from the given column */
10
18
  getValidTargets: (from: string) => string[];
11
19
  };
20
+ /**
21
+ * Result of evaluating a single transition. Returned by
22
+ * `createGatedTransitionValidator(rules).check(from, to, item)`.
23
+ *
24
+ * - "allowed": unconditional move; the consumer should call `onMove` directly.
25
+ * - "blocked": move is forbidden. Optional `reason` for diagnostics; the
26
+ * consumer should NOT show a toast or shake — the drop is silently rejected.
27
+ * Use this for "automatic only" columns (e.g. card moves there via a backend
28
+ * webhook, never via drag).
29
+ * - "hard-gate": move is allowed only when `check(item)` returns true. The
30
+ * consumer should run the check; on fail, fire a shake animation and toast
31
+ * with `failMessage`; on pass, call `onMove`.
32
+ * - "modal-gate": move opens a modal keyed by `openModalKey`. The consumer
33
+ * wires the modal and calls `onMove` only after the modal confirms.
34
+ */
35
+ export type GateResult<TItem = unknown> = {
36
+ kind: "allowed";
37
+ } | {
38
+ kind: "blocked";
39
+ reason?: string;
40
+ } | {
41
+ kind: "hard-gate";
42
+ check: (item: TItem) => boolean;
43
+ failMessage: string;
44
+ } | {
45
+ kind: "modal-gate";
46
+ openModalKey: string;
47
+ };
48
+ /**
49
+ * Per-from-column map of per-to-column gate descriptors. Missing entries
50
+ * default to "blocked".
51
+ *
52
+ * Example:
53
+ * const rules: GateRules<JourneyItem> = {
54
+ * drafting: {
55
+ * ready: { kind: "hard-gate", check: (i) => i.missingFields === 0, failMessage: "..." },
56
+ * interested: { kind: "allowed" },
57
+ * },
58
+ * ready: {
59
+ * sent: { kind: "modal-gate", openModalKey: "importer-picker" },
60
+ * drafting: { kind: "allowed" },
61
+ * },
62
+ * };
63
+ */
64
+ export type GateRules<TItem = unknown> = Record<string, Record<string, GateResult<TItem>>>;
65
+ export declare function createGatedTransitionValidator<TItem = unknown>(rules: GateRules<TItem>): {
66
+ /**
67
+ * Evaluate a transition from one column to another for a given item.
68
+ * Returns the gate descriptor — the consumer dispatches based on `kind`.
69
+ */
70
+ check(from: string, to: string, _item: TItem): GateResult<TItem>;
71
+ /** Get all columns reachable from the given column (regardless of gate kind) */
72
+ getValidTargets(from: string): string[];
73
+ };
12
74
  //# sourceMappingURL=kanban-transitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-transitions.d.ts","sourceRoot":"","sources":["../../src/lib/kanban-transitions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe;IAE5D,4DAA4D;oBAC5C,MAAM,MAAM,MAAM,KAAG,OAAO;IAG5C,sDAAsD;4BAC9B,MAAM,KAAG,MAAM,EAAE;EAE5C"}
1
+ {"version":3,"file":"kanban-transitions.d.ts","sourceRoot":"","sources":["../../src/lib/kanban-transitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe;IAE5D,4DAA4D;oBAC5C,MAAM,MAAM,MAAM,KAAG,OAAO;IAG5C,sDAAsD;4BAC9B,MAAM,KAAG,MAAM,EAAE;EAE5C;AAID;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,UAAU,CAAC,KAAK,GAAG,OAAO,IAClC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,GAAG,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3F,wBAAgB,8BAA8B,CAAC,KAAK,GAAG,OAAO,EAC5D,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;IAGrB;;;OAGG;gBACS,MAAM,MAAM,MAAM,SAAS,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAQhE,gFAAgF;0BAC1D,MAAM,GAAG,MAAM,EAAE;EAM1C"}
@@ -1,6 +1,14 @@
1
1
  /**
2
2
  * Generic transition validation for kanban boards.
3
3
  * Not tied to any specific domain — consumers define their own rules.
4
+ *
5
+ * Two flavors:
6
+ * 1. createTransitionValidator(rules) — boolean API, used by simple boards
7
+ * that only need to know "is this transition allowed?"
8
+ * 2. createGatedTransitionValidator(rules) — discriminated-union API, used
9
+ * by boards that need to distinguish between unconditionally-allowed,
10
+ * blocked, hard-gated (predicate check), and modal-gated transitions.
11
+ * See offer-branching producer journey for the canonical use case.
4
12
  */
5
13
  export function createTransitionValidator(rules) {
6
14
  return {
@@ -10,4 +18,28 @@ export function createTransitionValidator(rules) {
10
18
  getValidTargets: (from) => rules[from] ?? [],
11
19
  };
12
20
  }
21
+ export function createGatedTransitionValidator(rules) {
22
+ return {
23
+ /**
24
+ * Evaluate a transition from one column to another for a given item.
25
+ * Returns the gate descriptor — the consumer dispatches based on `kind`.
26
+ */
27
+ check(from, to, _item) {
28
+ const fromRow = rules[from];
29
+ if (!fromRow)
30
+ return { kind: "blocked" };
31
+ const result = fromRow[to];
32
+ if (!result)
33
+ return { kind: "blocked" };
34
+ return result;
35
+ },
36
+ /** Get all columns reachable from the given column (regardless of gate kind) */
37
+ getValidTargets(from) {
38
+ const fromRow = rules[from];
39
+ if (!fromRow)
40
+ return [];
41
+ return Object.keys(fromRow);
42
+ },
43
+ };
44
+ }
13
45
  //# sourceMappingURL=kanban-transitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-transitions.js","sourceRoot":"","sources":["../../src/lib/kanban-transitions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,OAAO;QACL,4DAA4D;QAC5D,OAAO,EAAE,CAAC,IAAY,EAAE,EAAU,EAAW,EAAE,CAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK;QAEpC,sDAAsD;QACtD,eAAe,EAAE,CAAC,IAAY,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;KAC/D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"kanban-transitions.js","sourceRoot":"","sources":["../../src/lib/kanban-transitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,OAAO;QACL,4DAA4D;QAC5D,OAAO,EAAE,CAAC,IAAY,EAAE,EAAU,EAAW,EAAE,CAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK;QAEpC,sDAAsD;QACtD,eAAe,EAAE,CAAC,IAAY,EAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;KAC/D,CAAC;AACJ,CAAC;AA2CD,MAAM,UAAU,8BAA8B,CAC5C,KAAuB;IAEvB,OAAO;QACL;;;WAGG;QACH,KAAK,CAAC,IAAY,EAAE,EAAU,EAAE,KAAY;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,gFAAgF;QAChF,eAAe,CAAC,IAAY;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kanban-transitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-transitions.test.d.ts","sourceRoot":"","sources":["../../src/lib/kanban-transitions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { createTransitionValidator, createGatedTransitionValidator, } from "./kanban-transitions";
3
+ describe("createTransitionValidator (existing API)", () => {
4
+ test("isValid returns true for allowed transitions", () => {
5
+ const v = createTransitionValidator({ a: ["b"], b: [] });
6
+ expect(v.isValid("a", "b")).toBe(true);
7
+ expect(v.isValid("a", "c")).toBe(false);
8
+ expect(v.isValid("b", "a")).toBe(false);
9
+ });
10
+ test("getValidTargets returns the transition list", () => {
11
+ const v = createTransitionValidator({ a: ["b", "c"], b: [] });
12
+ expect(v.getValidTargets("a")).toEqual(["b", "c"]);
13
+ expect(v.getValidTargets("b")).toEqual([]);
14
+ expect(v.getValidTargets("nonexistent")).toEqual([]);
15
+ });
16
+ });
17
+ describe("createGatedTransitionValidator", () => {
18
+ const rules = {
19
+ drafting: {
20
+ ready: { kind: "hard-gate", check: (item) => item.missingFields === 0, failMessage: "Missing fields" },
21
+ },
22
+ ready: {
23
+ sent: { kind: "modal-gate", openModalKey: "importer-picker" },
24
+ drafting: { kind: "allowed" },
25
+ },
26
+ sent: {
27
+ completed: { kind: "blocked", reason: "automatic-only" },
28
+ },
29
+ };
30
+ test("returns 'allowed' for an unconditional transition", () => {
31
+ const v = createGatedTransitionValidator(rules);
32
+ const item = { id: "1", missingFields: 0 };
33
+ expect(v.check("ready", "drafting", item).kind).toBe("allowed");
34
+ });
35
+ test("returns the hard-gate descriptor for gated transitions and the check function works", () => {
36
+ const v = createGatedTransitionValidator(rules);
37
+ const completeItem = { id: "1", missingFields: 0 };
38
+ const incompleteItem = { id: "2", missingFields: 3 };
39
+ const result = v.check("drafting", "ready", completeItem);
40
+ expect(result.kind).toBe("hard-gate");
41
+ if (result.kind === "hard-gate") {
42
+ expect(result.check(completeItem)).toBe(true);
43
+ expect(result.check(incompleteItem)).toBe(false);
44
+ expect(result.failMessage).toBe("Missing fields");
45
+ }
46
+ });
47
+ test("returns 'modal-gate' with openModalKey", () => {
48
+ const v = createGatedTransitionValidator(rules);
49
+ const result = v.check("ready", "sent", { id: "1", missingFields: 0 });
50
+ expect(result.kind).toBe("modal-gate");
51
+ if (result.kind === "modal-gate") {
52
+ expect(result.openModalKey).toBe("importer-picker");
53
+ }
54
+ });
55
+ test("returns 'blocked' for explicitly blocked transitions", () => {
56
+ const v = createGatedTransitionValidator(rules);
57
+ const result = v.check("sent", "completed", { id: "1", missingFields: 0 });
58
+ expect(result.kind).toBe("blocked");
59
+ });
60
+ test("returns 'blocked' for unknown transitions (default)", () => {
61
+ const v = createGatedTransitionValidator(rules);
62
+ const result = v.check("drafting", "completed", { id: "1", missingFields: 0 });
63
+ expect(result.kind).toBe("blocked");
64
+ });
65
+ test("getValidTargets returns the keys of the from-row map", () => {
66
+ const v = createGatedTransitionValidator(rules);
67
+ expect(v.getValidTargets("ready").sort()).toEqual(["drafting", "sent"]);
68
+ expect(v.getValidTargets("sent")).toEqual(["completed"]);
69
+ });
70
+ test("interop: createTransitionValidator's boolean API is unchanged", () => {
71
+ const v = createTransitionValidator({ a: ["b"] });
72
+ expect(v.isValid("a", "b")).toBe(true);
73
+ });
74
+ });
75
+ //# sourceMappingURL=kanban-transitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-transitions.test.js","sourceRoot":"","sources":["../../src/lib/kanban-transitions.test.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,7 @@ export { OfferDetailHeader } from "./offer-detail-header";
26
26
  export type { OfferDetailHeaderProps } from "./offer-detail-header";
27
27
  export { OfferDetailTabs } from "./offer-detail-tabs";
28
28
  export type { OfferDetailTabsProps, OfferTab } from "./offer-detail-tabs";
29
+ export { ImporterPickerModal, type ImporterPickerModalProps, type ImporterPickerImporter, type ImporterPickerMode, } from "../components/importer-picker-modal";
30
+ export { OffersSentPanel, type OffersSentPanelProps, type OfferBranch, } from "../components/branch-overview-panel";
31
+ export { FinalizeDealModal, type FinalizeDealModalProps, type FinalizeDealTerm, type FinalizeDealClosedBranch, } from "../components/branch-resolution-modal";
29
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAO1E,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,uCAAuC,CAAC"}
@@ -12,4 +12,11 @@ export { OrgBanner } from "./org-banner";
12
12
  export { OfferDetailShell } from "./offer-detail-shell";
13
13
  export { OfferDetailHeader } from "./offer-detail-header";
14
14
  export { OfferDetailTabs } from "./offer-detail-tabs";
15
+ // ─── Offer-branching modals + slide-over (new in v0.10.x) ───────────────
16
+ // Internal files use "branch" / "branch-overview" / "branch-resolution"
17
+ // terminology — exports use the user-facing "offer" naming per the
18
+ // terminology contract.
19
+ export { ImporterPickerModal, } from "../components/importer-picker-modal";
20
+ export { OffersSentPanel, } from "../components/branch-overview-panel";
21
+ export { FinalizeDealModal, } from "../components/branch-resolution-modal";
15
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/offer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AASzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,2EAA2E;AAC3E,wEAAwE;AACxE,mEAAmE;AACnE,wBAAwB;AAExB,OAAO,EACL,mBAAmB,GAIpB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,GAGhB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,iBAAiB,GAIlB,MAAM,uCAAuC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sensory-profile.d.ts","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACxF,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6CD,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,EAAE,mBAAmB,kDA6DrB"}
1
+ {"version":3,"file":"sensory-profile.d.ts","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACxF,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6CD,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,EAAE,mBAAmB,kDA8DrB"}
@@ -64,7 +64,7 @@ export function SensoryProfile({ sensoryDetails, stageLabels, fieldLabels, field
64
64
  const fieldDef = stageFieldDefs?.[fieldKey];
65
65
  const displayLabel = stageFieldLabels?.[fieldKey] ?? fieldDef?.label ?? capitalize(fieldKey);
66
66
  const { isArray, items } = resolveDisplayValue(value, fieldDef);
67
- return (_jsxs("div", { className: "grid gap-0.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: displayLabel }), isArray ? (_jsx("div", { className: "flex flex-wrap gap-1", children: items.map((item, i) => (_jsx("span", { className: "inline-flex rounded-full bg-primary/10 px-2 py-0.5 text-xs text-foreground", children: item }, i))) })) : (_jsx("span", { className: "text-sm text-foreground", children: items[0] }))] }, fieldKey));
67
+ return (_jsxs("div", { className: "grid gap-0.5", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: displayLabel }), isArray ? (_jsx("div", { className: "flex flex-wrap gap-1", children: items.map((item, i) => (_jsx("span", { className: "inline-flex rounded-full bg-primary/10 px-2 py-0.5 text-xs text-foreground", children: item }, `${item}-${i}`))) })) : (_jsx("span", { className: "text-sm text-foreground", children: items[0] }))] }, fieldKey));
68
68
  }) })] }, stageKey));
69
69
  }) }));
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sensory-profile.js","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sensory-profile.js","sourceRoot":"","sources":["../../src/offer/sensory-profile.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellarnode/ui",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared UI components, theme tokens, and chat/offer primitives for CellarNode dashboards.",