@cellarnode/ui 0.17.1 → 0.17.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 (164) hide show
  1. package/dist/chat/global-chat-widget.js +2 -2
  2. package/dist/chat/global-chat-widget.js.map +1 -1
  3. package/dist/chat/global-chat-widget.test.d.ts +2 -0
  4. package/dist/chat/global-chat-widget.test.d.ts.map +1 -0
  5. package/dist/chat/global-chat-widget.test.js +167 -0
  6. package/dist/chat/global-chat-widget.test.js.map +1 -0
  7. package/dist/chat/index.d.ts +0 -1
  8. package/dist/chat/index.d.ts.map +1 -1
  9. package/dist/chat/index.js +0 -1
  10. package/dist/chat/index.js.map +1 -1
  11. package/dist/components/bottle-extract-dialog.test.d.ts +2 -0
  12. package/dist/components/bottle-extract-dialog.test.d.ts.map +1 -0
  13. package/dist/components/bottle-extract-dialog.test.js +99 -0
  14. package/dist/components/bottle-extract-dialog.test.js.map +1 -0
  15. package/dist/components/branch-edit-banner.js +1 -1
  16. package/dist/components/branch-edit-banner.js.map +1 -1
  17. package/dist/components/branch-overview-panel.d.ts.map +1 -1
  18. package/dist/components/branch-overview-panel.js +8 -0
  19. package/dist/components/branch-overview-panel.js.map +1 -1
  20. package/dist/components/branch-overview-panel.stories.d.ts +8 -0
  21. package/dist/components/branch-overview-panel.stories.d.ts.map +1 -1
  22. package/dist/components/branch-overview-panel.stories.js.map +1 -1
  23. package/dist/components/branch-resolution-modal.d.ts.map +1 -1
  24. package/dist/components/branch-resolution-modal.js +9 -0
  25. package/dist/components/branch-resolution-modal.js.map +1 -1
  26. package/dist/components/branch-resolution-modal.stories.d.ts +9 -0
  27. package/dist/components/branch-resolution-modal.stories.d.ts.map +1 -1
  28. package/dist/components/branch-resolution-modal.stories.js.map +1 -1
  29. package/dist/components/branch-resolution-modal.test.js +9 -0
  30. package/dist/components/branch-resolution-modal.test.js.map +1 -1
  31. package/dist/components/card.js +2 -2
  32. package/dist/components/card.js.map +1 -1
  33. package/dist/components/celebration-pulse.d.ts.map +1 -1
  34. package/dist/components/celebration-pulse.js +1 -1
  35. package/dist/components/celebration-pulse.js.map +1 -1
  36. package/dist/components/drawer.js +1 -1
  37. package/dist/components/drawer.js.map +1 -1
  38. package/dist/components/journey-card.js +2 -2
  39. package/dist/components/journey-card.js.map +1 -1
  40. package/dist/components/journey-card.test.d.ts +2 -0
  41. package/dist/components/journey-card.test.d.ts.map +1 -0
  42. package/dist/components/journey-card.test.js +82 -0
  43. package/dist/components/journey-card.test.js.map +1 -0
  44. package/dist/components/kanban-board.stories.d.ts.map +1 -1
  45. package/dist/components/kanban-board.stories.js +13 -3
  46. package/dist/components/kanban-board.stories.js.map +1 -1
  47. package/dist/components/kanban-dnd-board.stories.d.ts.map +1 -1
  48. package/dist/components/kanban-dnd-board.stories.js +7 -4
  49. package/dist/components/kanban-dnd-board.stories.js.map +1 -1
  50. package/dist/components/label.js +1 -1
  51. package/dist/components/label.js.map +1 -1
  52. package/dist/components/offer-card.js +1 -1
  53. package/dist/components/offer-card.js.map +1 -1
  54. package/dist/components/offer-card.test.d.ts +2 -0
  55. package/dist/components/offer-card.test.d.ts.map +1 -0
  56. package/dist/components/offer-card.test.js +73 -0
  57. package/dist/components/offer-card.test.js.map +1 -0
  58. package/dist/components/product-card.js +1 -1
  59. package/dist/components/product-card.js.map +1 -1
  60. package/dist/components/product-card.stories.js +2 -2
  61. package/dist/components/product-card.stories.js.map +1 -1
  62. package/dist/components/reason-pill.js +1 -1
  63. package/dist/components/reason-pill.js.map +1 -1
  64. package/dist/components/score-chip.js +1 -1
  65. package/dist/components/score-chip.js.map +1 -1
  66. package/dist/components/shadcn-dialog.js +1 -1
  67. package/dist/components/shadcn-dialog.js.map +1 -1
  68. package/dist/components/variant-picker-dialog.stories.js +1 -1
  69. package/dist/components/variant-picker-dialog.stories.js.map +1 -1
  70. package/dist/index.d.ts +0 -9
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +0 -6
  73. package/dist/index.js.map +1 -1
  74. package/dist/nav/app-sidebar.js +1 -1
  75. package/dist/nav/app-sidebar.js.map +1 -1
  76. package/dist/offer/index.d.ts +1 -3
  77. package/dist/offer/index.d.ts.map +1 -1
  78. package/dist/offer/index.js +5 -2
  79. package/dist/offer/index.js.map +1 -1
  80. package/dist/offer/negotiation-event-card.stories.d.ts +1 -1
  81. package/dist/offer/negotiation-event-card.stories.d.ts.map +1 -1
  82. package/dist/offer/negotiation-event-card.stories.js +3 -1
  83. package/dist/offer/negotiation-event-card.stories.js.map +1 -1
  84. package/dist/opportunities/opportunities-table.js +1 -1
  85. package/dist/opportunities/opportunities-table.js.map +1 -1
  86. package/dist/opportunities/opportunities-table.test.d.ts +2 -0
  87. package/dist/opportunities/opportunities-table.test.d.ts.map +1 -0
  88. package/dist/opportunities/opportunities-table.test.js +87 -0
  89. package/dist/opportunities/opportunities-table.test.js.map +1 -0
  90. package/dist/skeleton/__tests__/provider.test.js +11 -1
  91. package/dist/skeleton/__tests__/provider.test.js.map +1 -1
  92. package/dist/skeleton/provider.d.ts +11 -1
  93. package/dist/skeleton/provider.d.ts.map +1 -1
  94. package/dist/skeleton/provider.js +2 -2
  95. package/dist/skeleton/provider.js.map +1 -1
  96. package/package.json +1 -1
  97. package/dist/chat/messenger-chat-header.d.ts +0 -14
  98. package/dist/chat/messenger-chat-header.d.ts.map +0 -1
  99. package/dist/chat/messenger-chat-header.js +0 -25
  100. package/dist/chat/messenger-chat-header.js.map +0 -1
  101. package/dist/components/asset-list.d.ts +0 -34
  102. package/dist/components/asset-list.d.ts.map +0 -1
  103. package/dist/components/asset-list.js +0 -34
  104. package/dist/components/asset-list.js.map +0 -1
  105. package/dist/components/asset-list.stories.d.ts +0 -20
  106. package/dist/components/asset-list.stories.d.ts.map +0 -1
  107. package/dist/components/asset-list.stories.js +0 -50
  108. package/dist/components/asset-list.stories.js.map +0 -1
  109. package/dist/components/classification-select.d.ts +0 -24
  110. package/dist/components/classification-select.d.ts.map +0 -1
  111. package/dist/components/classification-select.js +0 -51
  112. package/dist/components/classification-select.js.map +0 -1
  113. package/dist/components/classification-select.stories.d.ts +0 -17
  114. package/dist/components/classification-select.stories.d.ts.map +0 -1
  115. package/dist/components/classification-select.stories.js +0 -100
  116. package/dist/components/classification-select.stories.js.map +0 -1
  117. package/dist/components/completed-offer-card.d.ts +0 -34
  118. package/dist/components/completed-offer-card.d.ts.map +0 -1
  119. package/dist/components/completed-offer-card.js +0 -20
  120. package/dist/components/completed-offer-card.js.map +0 -1
  121. package/dist/components/completed-offer-card.stories.d.ts +0 -17
  122. package/dist/components/completed-offer-card.stories.d.ts.map +0 -1
  123. package/dist/components/completed-offer-card.stories.js +0 -75
  124. package/dist/components/completed-offer-card.stories.js.map +0 -1
  125. package/dist/components/kanban-card.d.ts +0 -8
  126. package/dist/components/kanban-card.d.ts.map +0 -1
  127. package/dist/components/kanban-card.js +0 -13
  128. package/dist/components/kanban-card.js.map +0 -1
  129. package/dist/components/kanban-card.stories.d.ts +0 -16
  130. package/dist/components/kanban-card.stories.d.ts.map +0 -1
  131. package/dist/components/kanban-card.stories.js +0 -30
  132. package/dist/components/kanban-card.stories.js.map +0 -1
  133. package/dist/components/price-comparison.d.ts +0 -13
  134. package/dist/components/price-comparison.d.ts.map +0 -1
  135. package/dist/components/price-comparison.js +0 -60
  136. package/dist/components/price-comparison.js.map +0 -1
  137. package/dist/components/price-comparison.stories.d.ts +0 -11
  138. package/dist/components/price-comparison.stories.d.ts.map +0 -1
  139. package/dist/components/price-comparison.stories.js +0 -56
  140. package/dist/components/price-comparison.stories.js.map +0 -1
  141. package/dist/components/pricing-reference-card.d.ts +0 -13
  142. package/dist/components/pricing-reference-card.d.ts.map +0 -1
  143. package/dist/components/pricing-reference-card.js +0 -38
  144. package/dist/components/pricing-reference-card.js.map +0 -1
  145. package/dist/components/pricing-reference-card.stories.d.ts +0 -11
  146. package/dist/components/pricing-reference-card.stories.d.ts.map +0 -1
  147. package/dist/components/pricing-reference-card.stories.js +0 -54
  148. package/dist/components/pricing-reference-card.stories.js.map +0 -1
  149. package/dist/components/pricing-reference-card.test.d.ts +0 -2
  150. package/dist/components/pricing-reference-card.test.d.ts.map +0 -1
  151. package/dist/components/pricing-reference-card.test.js +0 -31
  152. package/dist/components/pricing-reference-card.test.js.map +0 -1
  153. package/dist/offer/negotiation-event-card.d.ts +0 -9
  154. package/dist/offer/negotiation-event-card.d.ts.map +0 -1
  155. package/dist/offer/negotiation-event-card.js +0 -39
  156. package/dist/offer/negotiation-event-card.js.map +0 -1
  157. package/dist/offer/org-banner.d.ts +0 -11
  158. package/dist/offer/org-banner.d.ts.map +0 -1
  159. package/dist/offer/org-banner.js +0 -19
  160. package/dist/offer/org-banner.js.map +0 -1
  161. package/dist/offer/org-banner.stories.d.ts +0 -18
  162. package/dist/offer/org-banner.stories.d.ts.map +0 -1
  163. package/dist/offer/org-banner.stories.js +0 -51
  164. package/dist/offer/org-banner.stories.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, it, expect, vi } from "vitest";
3
+ import { fireEvent, render, screen } from "@testing-library/react";
4
+ import { OpportunitiesTable, } from "./opportunities-table";
5
+ // ─── Invariants under test ──────────────────────────────────────────────────
6
+ //
7
+ // 1. Empty state renders the configured empty message when `data=[]`.
8
+ // 2. Loading state renders skeletons and hides the row count / empty message.
9
+ // 3. Custom emptyMessage overrides the default.
10
+ // 4. The search input filters rows by name.
11
+ // 5. Row expand toggle flips aria-expanded and reveals the detail grid.
12
+ // 6. When `getRowHref` + `renderLink` are provided, the name is wrapped by
13
+ // the link renderer (consumer-provided routing).
14
+ //
15
+ // We do NOT test date formatting (date-fns / time-sensitive) or every flag
16
+ // mapping — those are cosmetic and would thrash with locale/data changes.
17
+ const rows = [
18
+ {
19
+ id: "opp-1",
20
+ name: "Nordic Beer Tender 2026",
21
+ marketIdentifier: "SYS-2026-001",
22
+ beverageType: "Beer",
23
+ countryOfOrigin: "Sweden",
24
+ status: "open",
25
+ submissionDeadline: new Date(Date.now() + 14 * 24 * 60 * 60 * 1000).toISOString(),
26
+ createdAt: new Date().toISOString(),
27
+ },
28
+ {
29
+ id: "opp-2",
30
+ name: "French Wine RFP",
31
+ marketIdentifier: "SYS-2026-002",
32
+ beverageType: "Wine",
33
+ countryOfOrigin: "France",
34
+ status: "closed",
35
+ submissionDeadline: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString(),
36
+ createdAt: new Date().toISOString(),
37
+ },
38
+ ];
39
+ describe("OpportunitiesTable", () => {
40
+ it("renders the default empty-state message when data is empty", () => {
41
+ render(_jsx(OpportunitiesTable, { data: [] }));
42
+ expect(screen.getByText(/no opportunities found/i)).toBeInTheDocument();
43
+ });
44
+ it("renders a custom emptyMessage when provided", () => {
45
+ render(_jsx(OpportunitiesTable, { data: [], emptyMessage: "Nothing matches your filters." }));
46
+ expect(screen.getByText(/nothing matches your filters/i)).toBeInTheDocument();
47
+ });
48
+ it("renders loading skeletons and hides the row count when isLoading", () => {
49
+ const { container } = render(_jsx(OpportunitiesTable, { data: [], isLoading: true }));
50
+ // Skeleton list items — there should be the 5 placeholder <li> entries.
51
+ const listItems = container.querySelectorAll("ul > li");
52
+ expect(listItems.length).toBe(5);
53
+ // The "N opportunities" count chip is suppressed while loading.
54
+ expect(screen.queryByText(/opportunit(y|ies)$/i)).not.toBeInTheDocument();
55
+ });
56
+ it("renders a row per data item with its name and market identifier", () => {
57
+ render(_jsx(OpportunitiesTable, { data: rows }));
58
+ expect(screen.getByText(/nordic beer tender 2026/i)).toBeInTheDocument();
59
+ expect(screen.getByText(/french wine rfp/i)).toBeInTheDocument();
60
+ expect(screen.getByText(/SYS-2026-001/)).toBeInTheDocument();
61
+ });
62
+ it("filters rows via the search input (global filter)", () => {
63
+ render(_jsx(OpportunitiesTable, { data: rows }));
64
+ const search = screen.getByPlaceholderText(/search name/i);
65
+ fireEvent.change(search, { target: { value: "wine" } });
66
+ expect(screen.queryByText(/nordic beer tender/i)).not.toBeInTheDocument();
67
+ expect(screen.getByText(/french wine rfp/i)).toBeInTheDocument();
68
+ });
69
+ it("flips aria-expanded when the row expand toggle is clicked", () => {
70
+ render(_jsx(OpportunitiesTable, { data: [rows[0]] }));
71
+ const toggle = screen.getByRole("button", { name: /expand details/i });
72
+ expect(toggle).toHaveAttribute("aria-expanded", "false");
73
+ fireEvent.click(toggle);
74
+ // After clicking, aria flips to true and the aria-label rotates.
75
+ expect(screen.getByRole("button", { name: /collapse details/i })).toHaveAttribute("aria-expanded", "true");
76
+ });
77
+ it("uses renderLink + getRowHref to wrap row names when provided", () => {
78
+ const renderLink = vi.fn((href, children) => (_jsx("a", { href: href, "data-testid": "stub-link", children: children })));
79
+ render(_jsx(OpportunitiesTable, { data: rows, renderLink: renderLink, getRowHref: (row) => `/ops/${row.id}` }));
80
+ // Consumer link renderer was invoked for each row
81
+ expect(renderLink).toHaveBeenCalled();
82
+ const links = screen.getAllByTestId("stub-link");
83
+ expect(links.length).toBe(rows.length);
84
+ expect(links[0]).toHaveAttribute("href", "/ops/opp-1");
85
+ });
86
+ });
87
+ //# sourceMappingURL=opportunities-table.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opportunities-table.test.js","sourceRoot":"","sources":["../../src/opportunities/opportunities-table.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAE/B,+EAA+E;AAC/E,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,gDAAgD;AAChD,4CAA4C;AAC5C,wEAAwE;AACxE,2EAA2E;AAC3E,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAE1E,MAAM,IAAI,GAAqB;IAC7B;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,yBAAyB;QAC/B,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,QAAQ;QACzB,MAAM,EAAE,MAAM;QACd,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QACjF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,iBAAiB;QACvB,gBAAgB,EAAE,cAAc;QAChC,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,QAAQ;QACzB,MAAM,EAAE,QAAQ;QAChB,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QAChF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC;CACF,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CACJ,KAAC,kBAAkB,IAAC,IAAI,EAAE,EAAE,EAAE,YAAY,EAAC,+BAA+B,GAAG,CAC9E,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,SAAG,CAAC,CAAC;QACzE,wEAAwE;QACxE,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,gEAAgE;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC3D,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,KAAC,kBAAkB,IAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAI,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACzD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,iEAAiE;QACjE,MAAM,CACJ,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAC1D,CAAC,eAAe,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,QAAyB,EAAE,EAAE,CAAC,CACpE,YAAG,IAAI,EAAE,IAAI,iBAAc,WAAW,YACnC,QAAQ,GACP,CACL,CAAC,CAAC;QACH,MAAM,CACJ,KAAC,kBAAkB,IACjB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,GACrC,CACH,CAAC;QAEF,kDAAkD;QAClD,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -56,14 +56,24 @@ describe("SkeletonProvider", () => {
56
56
  render(_jsx(SkeletonProvider, { tier: "data", stagger: 60, label: "Loading dashboard", children: _jsx(TierProbe, {}) }));
57
57
  expect(screen.getByTestId("tier").textContent).toBe("data");
58
58
  });
59
- it("wraps children in role=status with aria-live=polite and aria-busy=true", () => {
59
+ it("does NOT emit an aria-live region by default (isBusy unset)", () => {
60
60
  render(_jsx(SkeletonProvider, { label: "Loading dashboard", children: _jsx("div", { "data-testid": "inner", children: "content" }) }));
61
+ expect(screen.queryByRole("status")).not.toBeInTheDocument();
62
+ expect(screen.getByTestId("inner")).toBeInTheDocument();
63
+ });
64
+ it("emits role=status + aria-live=polite + aria-busy=true when isBusy={true}", () => {
65
+ render(_jsx(SkeletonProvider, { label: "Loading dashboard", isBusy: true, children: _jsx("div", { "data-testid": "inner", children: "content" }) }));
61
66
  const region = screen.getByRole("status");
62
67
  expect(region).toHaveAttribute("aria-live", "polite");
63
68
  expect(region).toHaveAttribute("aria-busy", "true");
64
69
  expect(region).toHaveAttribute("aria-label", "Loading dashboard");
65
70
  expect(screen.getByTestId("inner")).toBeInTheDocument();
66
71
  });
72
+ it("does NOT emit an aria-live region when isBusy={false}", () => {
73
+ render(_jsx(SkeletonProvider, { isBusy: false, children: _jsx("div", { "data-testid": "inner", children: "content" }) }));
74
+ expect(screen.queryByRole("status")).not.toBeInTheDocument();
75
+ expect(screen.getByTestId("inner")).toBeInTheDocument();
76
+ });
67
77
  });
68
78
  describe("useSkeletonContext", () => {
69
79
  it("reports hasProvider: false without a provider", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../../src/skeleton/__tests__/provider.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../../src/skeleton/__tests__/provider.test.tsx"],"names":[],"mappings":"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"}
@@ -4,9 +4,19 @@ export interface SkeletonProviderProps {
4
4
  tier?: SkeletonTier;
5
5
  stagger?: number;
6
6
  label?: string;
7
+ /**
8
+ * Whether this provider's wrapper should announce itself as a busy `role="status"`
9
+ * aria-live region. Default: `false` so wrapping a long-lived route in
10
+ * `<SkeletonProvider>` does not cause screen readers to announce "Loading" forever.
11
+ *
12
+ * Pass `isBusy={query.isLoading}` (or similar) to scope the announcement to the
13
+ * actual loading window. Pass `isBusy` statically as `true` only when the provider's
14
+ * scope is itself lifecycled with the loading state.
15
+ */
16
+ isBusy?: boolean;
7
17
  children: React.ReactNode;
8
18
  }
9
- export declare function SkeletonProvider({ tier, stagger, label, children, }: SkeletonProviderProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function SkeletonProvider({ tier, stagger, label, isBusy, children, }: SkeletonProviderProps): import("react/jsx-runtime").JSX.Element;
10
20
  export declare function SkeletonGroup({ children }: {
11
21
  children: React.ReactNode;
12
22
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/skeleton/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAa,EACb,OAAa,EACb,KAAiB,EACjB,QAAQ,GACT,EAAE,qBAAqB,2CAwBvB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAaxE"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/skeleton/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAa,EACb,OAAa,EACb,KAAiB,EACjB,MAAc,EACd,QAAQ,GACT,EAAE,qBAAqB,2CA4BvB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAaxE"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { SkeletonContext, } from "./stagger";
4
- export function SkeletonProvider({ tier = "hero", stagger = 120, label = "Loading", children, }) {
4
+ export function SkeletonProvider({ tier = "hero", stagger = 120, label = "Loading", isBusy = false, children, }) {
5
5
  // useState with a lazy initializer yields a stable object reference for the
6
6
  // lifetime of the provider without reading a ref's `.current` during render.
7
7
  const [counterRef] = React.useState(() => ({ current: 0 }));
@@ -13,7 +13,7 @@ export function SkeletonProvider({ tier = "hero", stagger = 120, label = "Loadin
13
13
  label,
14
14
  hasProvider: true,
15
15
  }), [tier, stagger, label, counterRef]);
16
- return (_jsx(SkeletonContext, { value: value, children: _jsx("div", { role: "status", "aria-live": "polite", "aria-busy": "true", "aria-label": label, children: children }) }));
16
+ return (_jsx(SkeletonContext, { value: value, children: isBusy ? (_jsx("div", { role: "status", "aria-live": "polite", "aria-busy": "true", "aria-label": label, children: children })) : (_jsx("div", { children: children })) }));
17
17
  }
18
18
  export function SkeletonGroup({ children }) {
19
19
  const parent = React.use(SkeletonContext);
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/skeleton/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,eAAe,GAGhB,MAAM,WAAW,CAAC;AASnB,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,GAAG,MAAM,EACb,OAAO,GAAG,GAAG,EACb,KAAK,GAAG,SAAS,EACjB,QAAQ,GACc;IACtB,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,OAAO;QACP,eAAe,EAAE,KAAK;QACtB,UAAU;QACV,KAAK;QACL,WAAW,EAAE,IAAI;KAClB,CAAC,EACF,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CACnC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,YAC3B,cAAK,IAAI,EAAC,QAAQ,eAAW,QAAQ,eAAW,MAAM,gBAAa,KAAK,YACrE,QAAQ,GACL,GACU,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAiC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC;QACL,GAAG,MAAM;QACT,UAAU;KACX,CAAC,EACF,CAAC,MAAM,EAAE,UAAU,CAAC,CACrB,CAAC;IAEF,OAAO,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAmB,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/skeleton/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,eAAe,GAGhB,MAAM,WAAW,CAAC;AAmBnB,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,GAAG,MAAM,EACb,OAAO,GAAG,GAAG,EACb,KAAK,GAAG,SAAS,EACjB,MAAM,GAAG,KAAK,EACd,QAAQ,GACc;IACtB,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,OAAO;QACP,eAAe,EAAE,KAAK;QACtB,UAAU;QACV,KAAK;QACL,WAAW,EAAE,IAAI;KAClB,CAAC,EACF,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CACnC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,YAC1B,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,IAAI,EAAC,QAAQ,eAAW,QAAQ,eAAW,MAAM,gBAAa,KAAK,YACrE,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,CACF,wBAAM,QAAQ,GAAO,CACtB,GACe,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAiC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC;QACL,GAAG,MAAM;QACT,UAAU;KACX,CAAC,EACF,CAAC,MAAM,EAAE,UAAU,CAAC,CACrB,CAAC;IAEF,OAAO,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAmB,CAAC;AACrE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellarnode/ui",
3
- "version": "0.17.1",
3
+ "version": "0.17.3",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "Shared UI components, theme tokens, and chat/offer primitives for CellarNode dashboards.",
@@ -1,14 +0,0 @@
1
- import type { PresenceStatus } from "./types.js";
2
- interface MessengerChatHeaderProps {
3
- displayName: string;
4
- initials: string;
5
- presenceStatus: PresenceStatus;
6
- lastSeenAt?: string | null;
7
- productName?: string | null;
8
- offerStatus?: string | null;
9
- onViewOffer?: () => void;
10
- onBack?: () => void;
11
- }
12
- export declare function MessengerChatHeader({ displayName, initials, presenceStatus, lastSeenAt, productName, offerStatus, onViewOffer, onBack, }: MessengerChatHeaderProps): import("react/jsx-runtime").JSX.Element;
13
- export {};
14
- //# sourceMappingURL=messenger-chat-header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messenger-chat-header.d.ts","sourceRoot":"","sources":["../../src/chat/messenger-chat-header.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAmBD,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,MAAM,GACP,EAAE,wBAAwB,2CA6D1B"}
@@ -1,25 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ArrowLeft, ArrowUpRight } from "lucide-react";
3
- import { cn } from "../lib/utils.js";
4
- import { PresenceDot } from "./presence-dot.js";
5
- function getStatusBadge(status) {
6
- switch (status) {
7
- case "in_negotiation":
8
- return { label: "In Negotiation", className: "text-primary bg-primary/[0.08]" };
9
- case "sent":
10
- return { label: "Sent", className: "text-amber-600 bg-amber-500/10" };
11
- case "accepted":
12
- return { label: "Accepted", className: "text-emerald-600 bg-emerald-500/10" };
13
- case "rejected":
14
- return { label: "Rejected", className: "text-red-600 bg-red-500/10" };
15
- case "archived":
16
- return { label: "Archived", className: "text-muted-foreground bg-muted" };
17
- default:
18
- return null;
19
- }
20
- }
21
- export function MessengerChatHeader({ displayName, initials, presenceStatus, lastSeenAt, productName, offerStatus, onViewOffer, onBack, }) {
22
- const badge = getStatusBadge(offerStatus);
23
- return (_jsxs("div", { className: "flex items-center gap-3 border-b border-border/40 bg-white/50 px-4 py-3 backdrop-blur-sm", children: [onBack && (_jsx("button", { type: "button", onClick: onBack, className: "inline-flex items-center rounded-lg p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground transition-colors lg:hidden", children: _jsx(ArrowLeft, { className: "size-4" }) })), _jsxs("div", { className: "relative shrink-0", children: [_jsx("span", { className: "flex size-10 items-center justify-center rounded-xl bg-linear-to-br from-primary to-primary/70 text-xs font-semibold text-primary-foreground", children: initials }), _jsx(PresenceDot, { status: presenceStatus, className: "absolute -bottom-0.5 -right-0.5 ring-2 ring-white" })] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: displayName }), _jsxs("div", { className: "mt-0.5 flex items-center gap-1.5 text-[11px] text-muted-foreground", children: [_jsx(PresenceDot, { status: presenceStatus, lastSeenAt: lastSeenAt, showLabel: true }), productName && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-border", children: "\u00B7" }), _jsx("span", { className: "truncate", children: productName })] }))] })] }), badge && (_jsx("span", { className: cn("shrink-0 rounded-lg px-2.5 py-1 text-[10px] font-medium", badge.className), children: badge.label })), onViewOffer && (_jsx("button", { type: "button", onClick: onViewOffer, className: "flex size-8 shrink-0 items-center justify-center rounded-lg border border-border/40 bg-muted/40 text-muted-foreground hover:bg-muted hover:text-foreground transition-colors", title: "View offer", children: _jsx(ArrowUpRight, { className: "size-3.5" }) }))] }));
24
- }
25
- //# sourceMappingURL=messenger-chat-header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messenger-chat-header.js","sourceRoot":"","sources":["../../src/chat/messenger-chat-header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,SAAS,cAAc,CAAC,MAAiC;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;QAClF,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;QACxE,KAAK,UAAU;YACb,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,oCAAoC,EAAE,CAAC;QAChF,KAAK,UAAU;YACb,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,4BAA4B,EAAE,CAAC;QACxE,KAAK,UAAU;YACb,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;QAC5E;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,WAAW,EACX,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,MAAM,GACmB;IACzB,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE1C,OAAO,CACL,eAAK,SAAS,EAAC,0FAA0F,aAEtG,MAAM,IAAI,CACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,mIAAmI,YAE7I,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,GACzB,CACV,EAGD,eAAK,SAAS,EAAC,mBAAmB,aAChC,eAAM,SAAS,EAAC,8IAA8I,YAC3J,QAAQ,GACJ,EACP,KAAC,WAAW,IACV,MAAM,EAAE,cAAc,EACtB,SAAS,EAAC,mDAAmD,GAC7D,IACE,EAGN,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,uCAAuC,YAAE,WAAW,GAAO,EAC1E,eAAK,SAAS,EAAC,oEAAoE,aACjF,KAAC,WAAW,IAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,SAAG,EACxE,WAAW,IAAI,CACd,8BACE,eAAM,SAAS,EAAC,aAAa,uBAAS,EACtC,eAAM,SAAS,EAAC,UAAU,YAAE,WAAW,GAAQ,IAC9C,CACJ,IACG,IACF,EAGL,KAAK,IAAI,CACR,eAAM,SAAS,EAAE,EAAE,CAAC,yDAAyD,EAAE,KAAK,CAAC,SAAS,CAAC,YAC5F,KAAK,CAAC,KAAK,GACP,CACR,EAGA,WAAW,IAAI,CACd,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,8KAA8K,EACxL,KAAK,EAAC,YAAY,YAElB,KAAC,YAAY,IAAC,SAAS,EAAC,UAAU,GAAG,GAC9B,CACV,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,34 +0,0 @@
1
- import * as React from "react";
2
- export interface AssetListItem {
3
- id: string;
4
- fileName: string;
5
- fileSize: number;
6
- mimeType: string;
7
- /** Human-readable kind label (e.g. "Technical Sheet", "Label Artwork"). */
8
- kindLabel?: string;
9
- uploadedAt?: string;
10
- altText?: string | null;
11
- }
12
- export interface AssetListProps {
13
- items: AssetListItem[];
14
- /** Show a preview action on each row. */
15
- onPreview?: (id: string) => void;
16
- /** Show a download action on each row. */
17
- onDownload?: (id: string) => void;
18
- /** Show a delete action on each row. */
19
- onDelete?: (id: string) => void;
20
- /** Custom empty-state content. Defaults to a helpful placeholder. */
21
- emptyState?: React.ReactNode;
22
- className?: string;
23
- }
24
- /**
25
- * Vertical list of downloadable resources — PDFs or images. Each row shows
26
- * a type-aware icon, filename, size, optional kind chip, and configurable
27
- * preview / download / delete actions.
28
- *
29
- * Used on the producer variant edit page's Resources tab to surface
30
- * purpose='asset' attachments (technical sheets, label artwork, press
31
- * images, certificates, etc.).
32
- */
33
- export declare function AssetList({ items, onPreview, onDownload, onDelete, emptyState, className, }: AssetListProps): import("react/jsx-runtime").JSX.Element;
34
- //# sourceMappingURL=asset-list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-list.d.ts","sourceRoot":"","sources":["../../src/components/asset-list.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,qEAAqE;IACrE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE,cAAc,2CA6EhB"}
@@ -1,34 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { ArrowDownTrayIcon, DocumentIcon, EyeIcon, PhotoIcon, TrashIcon, } from "@heroicons/react/20/solid";
3
- import { cn } from "../lib/utils";
4
- function formatFileSize(bytes) {
5
- if (bytes < 1024)
6
- return `${bytes} B`;
7
- if (bytes < 1024 * 1024)
8
- return `${(bytes / 1024).toFixed(1)} KB`;
9
- return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
10
- }
11
- function fileIconFor(mimeType) {
12
- if (mimeType.startsWith("image/"))
13
- return PhotoIcon;
14
- return DocumentIcon;
15
- }
16
- /**
17
- * Vertical list of downloadable resources — PDFs or images. Each row shows
18
- * a type-aware icon, filename, size, optional kind chip, and configurable
19
- * preview / download / delete actions.
20
- *
21
- * Used on the producer variant edit page's Resources tab to surface
22
- * purpose='asset' attachments (technical sheets, label artwork, press
23
- * images, certificates, etc.).
24
- */
25
- export function AssetList({ items, onPreview, onDownload, onDelete, emptyState, className, }) {
26
- if (items.length === 0) {
27
- return (_jsxs("div", { className: cn("flex flex-col items-center justify-center gap-2 rounded-2xl border-2 border-dashed border-border/60 bg-muted/20 p-8 text-center", className), children: [_jsx(DocumentIcon, { className: "size-8 text-muted-foreground", "aria-hidden": true }), emptyState ?? (_jsx("p", { className: "text-sm text-muted-foreground", children: "No resources yet. Upload PDFs, label artwork, or technical sheets." }))] }));
28
- }
29
- return (_jsx("ul", { className: cn("space-y-2", className), children: items.map((item) => {
30
- const Icon = fileIconFor(item.mimeType);
31
- return (_jsxs("li", { className: "flex items-center gap-3 rounded-xl border border-border/60 bg-card p-3 transition-colors hover:bg-accent/20", children: [_jsx("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: _jsx(Icon, { className: "size-5", "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-semibold text-foreground", children: item.fileName }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [formatFileSize(item.fileSize), item.kindLabel && _jsxs(_Fragment, { children: [" \u00B7 ", item.kindLabel] })] })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [onPreview && (_jsx("button", { type: "button", onClick: () => onPreview(item.id), className: "flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", "aria-label": `Preview ${item.fileName}`, children: _jsx(EyeIcon, { className: "size-4", "aria-hidden": true }) })), onDownload && (_jsx("button", { type: "button", onClick: () => onDownload(item.id), className: "flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", "aria-label": `Download ${item.fileName}`, children: _jsx(ArrowDownTrayIcon, { className: "size-4", "aria-hidden": true }) })), onDelete && (_jsx("button", { type: "button", onClick: () => onDelete(item.id), className: "flex size-8 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive", "aria-label": `Delete ${item.fileName}`, children: _jsx(TrashIcon, { className: "size-4", "aria-hidden": true }) }))] })] }, item.id));
32
- }) }));
33
- }
34
- //# sourceMappingURL=asset-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-list.js","sourceRoot":"","sources":["../../src/components/asset-list.tsx"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { StoryObj } from "@storybook/react-vite";
2
- import { AssetList } from "./asset-list";
3
- declare const meta: {
4
- title: string;
5
- component: typeof AssetList;
6
- tags: string[];
7
- parameters: {
8
- docs: {
9
- description: {
10
- component: string;
11
- };
12
- };
13
- };
14
- };
15
- export default meta;
16
- type Story = StoryObj<typeof meta>;
17
- export declare const Default: Story;
18
- export declare const ReadOnly: Story;
19
- export declare const Empty: Story;
20
- //# sourceMappingURL=asset-list.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-list.stories.d.ts","sourceRoot":"","sources":["../../src/components/asset-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI;;;;;;;;;;;CAYwB,CAAC;AAEnC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAkBrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAgBtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KASnB,CAAC"}
@@ -1,50 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { AssetList } from "./asset-list";
3
- const meta = {
4
- title: "Components/AssetList",
5
- component: AssetList,
6
- tags: ["autodocs"],
7
- parameters: {
8
- docs: {
9
- description: {
10
- component: "Vertical list of downloadable resources (PDFs + images) with preview / download / delete actions. Used on the producer variant edit page's Resources tab.",
11
- },
12
- },
13
- },
14
- };
15
- export default meta;
16
- export const Default = {
17
- args: {
18
- items: [
19
- { id: "1", fileName: "sourdough-techsheet.pdf", fileSize: 248_576, mimeType: "application/pdf", kindLabel: "Technical Sheet" },
20
- { id: "2", fileName: "label-print-ready.pdf", fileSize: 1_048_576, mimeType: "application/pdf", kindLabel: "Label Artwork" },
21
- { id: "3", fileName: "bottle-hero.jpg", fileSize: 512_000, mimeType: "image/jpeg", kindLabel: "Press Image" },
22
- ],
23
- onPreview: (id) => window.alert(`Preview ${id}`),
24
- onDownload: (id) => window.alert(`Download ${id}`),
25
- onDelete: (id) => window.alert(`Delete ${id}`),
26
- },
27
- decorators: [
28
- (Story) => (_jsx("div", { className: "w-[480px]", children: _jsx(Story, {}) })),
29
- ],
30
- };
31
- export const ReadOnly = {
32
- args: {
33
- items: [
34
- { id: "1", fileName: "compliance-cert-2025.pdf", fileSize: 824_000, mimeType: "application/pdf", kindLabel: "Certificate" },
35
- { id: "2", fileName: "origin-declaration.pdf", fileSize: 156_000, mimeType: "application/pdf", kindLabel: "Designation of Origin" },
36
- ],
37
- onPreview: (id) => window.alert(`Preview ${id}`),
38
- onDownload: (id) => window.alert(`Download ${id}`),
39
- },
40
- decorators: [
41
- (Story) => (_jsx("div", { className: "w-[480px]", children: _jsx(Story, {}) })),
42
- ],
43
- };
44
- export const Empty = {
45
- args: { items: [] },
46
- decorators: [
47
- (Story) => (_jsx("div", { className: "w-[480px]", children: _jsx(Story, {}) })),
48
- ],
49
- };
50
- //# sourceMappingURL=asset-list.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-list.stories.js","sourceRoot":"","sources":["../../src/components/asset-list.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,sBAAsB;IAC7B,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,SAAS,EACP,2JAA2J;aAC9J;SACF;KACF;CAC+B,CAAC;AAEnC,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,yBAAyB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE;YAC9H,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE;YAC5H,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE;SAC9G;QACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;QAClD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;KAC/C;IACD,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,cAAK,SAAS,EAAC,WAAW,YACxB,KAAC,KAAK,KAAG,GACL,CACP;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,0BAA0B,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE;YAC3H,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,uBAAuB,EAAE;SACpI;QACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;KACnD;IACD,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,cAAK,SAAS,EAAC,WAAW,YACxB,KAAC,KAAK,KAAG,GACL,CACP;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAU;IAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACnB,UAAU,EAAE;QACV,CAAC,KAAK,EAAE,EAAE,CAAC,CACT,cAAK,SAAS,EAAC,WAAW,YACxB,KAAC,KAAK,KAAG,GACL,CACP;KACF;CACF,CAAC"}
@@ -1,24 +0,0 @@
1
- export interface CategoryOption {
2
- id: string;
3
- name: string;
4
- subtypes: {
5
- id: string;
6
- name: string;
7
- }[];
8
- }
9
- export interface ClassificationSelectProps {
10
- categories: CategoryOption[];
11
- selectedCategory?: string;
12
- selectedSubtype?: string;
13
- onCategoryChange: (categoryId: string) => void;
14
- onSubtypeChange: (subtypeId: string) => void;
15
- isLoading?: boolean;
16
- allowOther?: boolean;
17
- categoryLabel?: string;
18
- subtypeLabel?: string;
19
- categoryPlaceholder?: string;
20
- subtypePlaceholder?: string;
21
- className?: string;
22
- }
23
- export declare function ClassificationSelect({ categories, selectedCategory, selectedSubtype, onCategoryChange, onSubtypeChange, isLoading, allowOther, categoryLabel, subtypeLabel, categoryPlaceholder, subtypePlaceholder, className, }: ClassificationSelectProps): import("react/jsx-runtime").JSX.Element;
24
- //# sourceMappingURL=classification-select.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classification-select.d.ts","sourceRoot":"","sources":["../../src/components/classification-select.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,SAAiB,EACjB,UAAiB,EACjB,aAA0B,EAC1B,YAAwB,EACxB,mBAAyC,EACzC,kBAAuC,EACvC,SAAS,GACV,EAAE,yBAAyB,2CAuI3B"}
@@ -1,51 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from 'react';
3
- import { Input } from './input';
4
- import { Field, Label } from './fieldset';
5
- import { cn } from '../lib/utils';
6
- const OTHER_VALUE = '__other__';
7
- export function ClassificationSelect({ categories, selectedCategory, selectedSubtype, onCategoryChange, onSubtypeChange, isLoading = false, allowOther = true, categoryLabel = 'Category', subtypeLabel = 'Subtype', categoryPlaceholder = 'Select a category', subtypePlaceholder = 'Select a subtype', className, }) {
8
- const [categoryOtherText, setCategoryOtherText] = useState('');
9
- const [subtypeOtherText, setSubtypeOtherText] = useState('');
10
- const isCategoryOther = selectedCategory === OTHER_VALUE;
11
- const isSubtypeOther = selectedSubtype === OTHER_VALUE;
12
- const currentCategory = categories.find((c) => c.id === selectedCategory);
13
- const availableSubtypes = currentCategory?.subtypes ?? [];
14
- // When category changes, clear the subtype other text
15
- useEffect(() => {
16
- // eslint-disable-next-line @eslint-react/set-state-in-effect, react-hooks/set-state-in-effect
17
- setSubtypeOtherText('');
18
- }, [selectedCategory]);
19
- function handleCategoryChange(e) {
20
- const value = e.target.value;
21
- onCategoryChange(value);
22
- // Always clear subtype when category changes
23
- onSubtypeChange('');
24
- }
25
- function handleSubtypeChange(e) {
26
- onSubtypeChange(e.target.value);
27
- }
28
- function handleCategoryOtherChange(e) {
29
- const value = e.target.value;
30
- setCategoryOtherText(value);
31
- onCategoryChange(value ? `other:${value}` : OTHER_VALUE);
32
- }
33
- function handleSubtypeOtherChange(e) {
34
- const value = e.target.value;
35
- setSubtypeOtherText(value);
36
- onSubtypeChange(value ? `other:${value}` : OTHER_VALUE);
37
- }
38
- return (_jsxs("div", { className: cn('grid grid-cols-1 gap-4 sm:grid-cols-2', className), children: [_jsxs(Field, { children: [_jsx(Label, { children: categoryLabel }), isCategoryOther ? (_jsxs("div", { className: "mt-3 flex gap-2", children: [_jsx(Input, { type: "text", value: categoryOtherText, onChange: handleCategoryOtherChange, placeholder: "Enter category\u2026", disabled: isLoading }), _jsx("button", { type: "button", onClick: () => {
39
- setCategoryOtherText('');
40
- onCategoryChange('');
41
- onSubtypeChange('');
42
- }, className: "shrink-0 text-sm/6 text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200", children: "\u21A9 Back" })] })) : (_jsxs("select", { value: selectedCategory ?? '', onChange: handleCategoryChange, disabled: isLoading, className: "mt-3 block w-full appearance-none rounded-lg border border-zinc-950/10 bg-transparent py-[calc(--spacing(2.5)-1px)] pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] text-base/6 text-zinc-950 focus:outline-2 focus:-outline-offset-1 focus:outline-ring disabled:opacity-50 sm:py-[calc(--spacing(1.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)] sm:text-sm/6 dark:border-white/10 dark:bg-white/5 dark:text-white", children: [_jsx("option", { value: "", disabled: true, children: isLoading ? 'Loading…' : categoryPlaceholder }), categories.map((cat) => (_jsx("option", { value: cat.id, children: cat.name }, cat.id))), allowOther && _jsx("option", { value: OTHER_VALUE, children: "Other\u2026" })] }))] }), _jsxs(Field, { children: [_jsx(Label, { children: subtypeLabel }), isSubtypeOther ? (_jsxs("div", { className: "mt-3 flex gap-2", children: [_jsx(Input, { type: "text", value: subtypeOtherText, onChange: handleSubtypeOtherChange, placeholder: "Enter subtype\u2026", disabled: isLoading }), _jsx("button", { type: "button", onClick: () => {
43
- setSubtypeOtherText('');
44
- onSubtypeChange('');
45
- }, className: "shrink-0 text-sm/6 text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200", children: "\u21A9 Back" })] })) : (_jsxs("select", { value: selectedSubtype ?? '', onChange: handleSubtypeChange, disabled: isLoading || !selectedCategory || isCategoryOther, className: "mt-3 block w-full appearance-none rounded-lg border border-zinc-950/10 bg-transparent py-[calc(--spacing(2.5)-1px)] pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] text-base/6 text-zinc-950 focus:outline-2 focus:-outline-offset-1 focus:outline-ring disabled:opacity-50 sm:py-[calc(--spacing(1.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)] sm:text-sm/6 dark:border-white/10 dark:bg-white/5 dark:text-white", children: [_jsx("option", { value: "", disabled: true, children: isLoading
46
- ? 'Loading…'
47
- : !selectedCategory || isCategoryOther
48
- ? 'Select a category first'
49
- : subtypePlaceholder }), availableSubtypes.map((sub) => (_jsx("option", { value: sub.id, children: sub.name }, sub.id))), allowOther && selectedCategory && !isCategoryOther && (_jsx("option", { value: OTHER_VALUE, children: "Other\u2026" }))] }))] })] }));
50
- }
51
- //# sourceMappingURL=classification-select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classification-select.js","sourceRoot":"","sources":["../../src/components/classification-select.tsx"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { StoryObj } from "@storybook/react-vite";
2
- import { ClassificationSelect } from "./classification-select";
3
- declare const meta: {
4
- title: string;
5
- component: typeof ClassificationSelect;
6
- tags: string[];
7
- parameters: {
8
- layout: string;
9
- };
10
- };
11
- export default meta;
12
- type Story = StoryObj<typeof meta>;
13
- export declare const Default: Story;
14
- export declare const WithPreselected: Story;
15
- export declare const Loading: Story;
16
- export declare const WithoutOther: Story;
17
- //# sourceMappingURL=classification-select.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"classification-select.stories.d.ts","sourceRoot":"","sources":["../../src/components/classification-select.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAuB,MAAM,yBAAyB,CAAC;AA+CpF,QAAA,MAAM,IAAI;;;;;;;CAKmC,CAAC;AAE9C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAkCnC,eAAO,MAAM,OAAO,EAAE,KAGrB,CAAC;AAsBF,eAAO,MAAM,eAAe,EAAE,KAG7B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAcrB,CAAC;AAyBF,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAC"}