@growth-labs/cms 0.5.5 → 0.5.6

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 (113) hide show
  1. package/README.md +36 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/integration/index.d.ts.map +1 -1
  7. package/dist/integration/index.js +9 -0
  8. package/dist/integration/index.js.map +1 -1
  9. package/dist/integration/options.d.ts +19 -0
  10. package/dist/integration/options.d.ts.map +1 -1
  11. package/dist/integration/options.js +7 -0
  12. package/dist/integration/options.js.map +1 -1
  13. package/dist/providers/null.d.ts +2 -1
  14. package/dist/providers/null.d.ts.map +1 -1
  15. package/dist/providers/null.js +9 -0
  16. package/dist/providers/null.js.map +1 -1
  17. package/dist/providers/types.d.ts +10 -0
  18. package/dist/providers/types.d.ts.map +1 -1
  19. package/dist/providers/types.js.map +1 -1
  20. package/dist/routes/authz-matrix.d.ts.map +1 -1
  21. package/dist/routes/authz-matrix.js +2 -0
  22. package/dist/routes/authz-matrix.js.map +1 -1
  23. package/dist/routes/context.d.ts +1 -1
  24. package/dist/routes/context.d.ts.map +1 -1
  25. package/dist/routes/context.js.map +1 -1
  26. package/dist/routes/index.d.ts +1 -0
  27. package/dist/routes/index.d.ts.map +1 -1
  28. package/dist/routes/index.js +2 -0
  29. package/dist/routes/index.js.map +1 -1
  30. package/dist/routes/surveys.d.ts +12 -0
  31. package/dist/routes/surveys.d.ts.map +1 -0
  32. package/dist/routes/surveys.js +109 -0
  33. package/dist/routes/surveys.js.map +1 -0
  34. package/dist/schema/insights-ingest.d.ts +46 -46
  35. package/dist/surveys/access.d.ts +4 -0
  36. package/dist/surveys/access.d.ts.map +1 -0
  37. package/dist/surveys/access.js +9 -0
  38. package/dist/surveys/access.js.map +1 -0
  39. package/dist/surveys/errors.d.ts +43 -0
  40. package/dist/surveys/errors.d.ts.map +1 -0
  41. package/dist/surveys/errors.js +42 -0
  42. package/dist/surveys/errors.js.map +1 -0
  43. package/dist/surveys/schema.d.ts +939 -0
  44. package/dist/surveys/schema.d.ts.map +1 -0
  45. package/dist/surveys/schema.js +385 -0
  46. package/dist/surveys/schema.js.map +1 -0
  47. package/dist/ui/api/surveys/[surveyId]/responses.csv.d.ts +3 -0
  48. package/dist/ui/api/surveys/[surveyId]/responses.csv.d.ts.map +1 -0
  49. package/dist/ui/api/surveys/[surveyId]/responses.csv.js +17 -0
  50. package/dist/ui/api/surveys/[surveyId]/responses.csv.js.map +1 -0
  51. package/dist/ui/api/surveys/[surveyId].d.ts +3 -0
  52. package/dist/ui/api/surveys/[surveyId].d.ts.map +1 -0
  53. package/dist/ui/api/surveys/[surveyId].js +17 -0
  54. package/dist/ui/api/surveys/[surveyId].js.map +1 -0
  55. package/dist/ui/client/mount.d.ts.map +1 -1
  56. package/dist/ui/client/mount.js +1 -0
  57. package/dist/ui/client/mount.js.map +1 -1
  58. package/dist/ui/commands.d.ts +5 -1
  59. package/dist/ui/commands.d.ts.map +1 -1
  60. package/dist/ui/commands.js +7 -0
  61. package/dist/ui/commands.js.map +1 -1
  62. package/dist/ui/components/CmsApp.d.ts +2 -0
  63. package/dist/ui/components/CmsApp.d.ts.map +1 -1
  64. package/dist/ui/components/CmsApp.js +14 -3
  65. package/dist/ui/components/CmsApp.js.map +1 -1
  66. package/dist/ui/components/CommandPalette.d.ts +2 -0
  67. package/dist/ui/components/CommandPalette.d.ts.map +1 -1
  68. package/dist/ui/components/CommandPalette.js +1 -1
  69. package/dist/ui/components/CommandPalette.js.map +1 -1
  70. package/dist/ui/components/Sidebar.d.ts +1 -0
  71. package/dist/ui/components/Sidebar.d.ts.map +1 -1
  72. package/dist/ui/components/Sidebar.js +1 -1
  73. package/dist/ui/components/Sidebar.js.map +1 -1
  74. package/dist/ui/hash-router.d.ts +1 -1
  75. package/dist/ui/hash-router.d.ts.map +1 -1
  76. package/dist/ui/hash-router.js +1 -0
  77. package/dist/ui/hash-router.js.map +1 -1
  78. package/dist/ui/nav.d.ts +5 -1
  79. package/dist/ui/nav.d.ts.map +1 -1
  80. package/dist/ui/nav.js +10 -2
  81. package/dist/ui/nav.js.map +1 -1
  82. package/dist/ui/screens/SurveyResponsesScreen.d.ts +28 -0
  83. package/dist/ui/screens/SurveyResponsesScreen.d.ts.map +1 -0
  84. package/dist/ui/screens/SurveyResponsesScreen.js +110 -0
  85. package/dist/ui/screens/SurveyResponsesScreen.js.map +1 -0
  86. package/dist/ui/screens/registry.d.ts +2 -1
  87. package/dist/ui/screens/registry.d.ts.map +1 -1
  88. package/dist/ui/screens/registry.js +5 -1
  89. package/dist/ui/screens/registry.js.map +1 -1
  90. package/package.json +1 -1
  91. package/src/index.ts +2 -2
  92. package/src/integration/index.ts +9 -0
  93. package/src/integration/options.ts +8 -0
  94. package/src/providers/null.ts +19 -0
  95. package/src/providers/types.ts +7 -0
  96. package/src/routes/authz-matrix.ts +2 -0
  97. package/src/routes/context.ts +2 -0
  98. package/src/routes/index.ts +6 -0
  99. package/src/routes/surveys.ts +130 -0
  100. package/src/surveys/access.ts +11 -0
  101. package/src/surveys/errors.ts +51 -0
  102. package/src/surveys/schema.ts +435 -0
  103. package/src/ui/api/surveys/[surveyId]/responses.csv.ts +23 -0
  104. package/src/ui/api/surveys/[surveyId].ts +23 -0
  105. package/src/ui/client/mount.tsx +1 -0
  106. package/src/ui/commands.ts +14 -1
  107. package/src/ui/components/CmsApp.tsx +25 -3
  108. package/src/ui/components/CommandPalette.tsx +2 -1
  109. package/src/ui/components/Sidebar.tsx +10 -2
  110. package/src/ui/hash-router.ts +1 -0
  111. package/src/ui/nav.ts +15 -2
  112. package/src/ui/screens/SurveyResponsesScreen.tsx +271 -0
  113. package/src/ui/screens/registry.tsx +6 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CmsApp.js","sourceRoot":"","sources":["../../../src/ui/components/CmsApp.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CmsApp.js","sourceRoot":"","sources":["../../../src/ui/components/CmsApp.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
+ import { type Command } from '../commands.js';
1
2
  import type { Route } from '../hash-router.js';
2
3
  export declare function CommandPalette(props: {
3
4
  onClose: () => void;
4
5
  navigate: (r: Route) => void;
5
6
  openDoc: (id: string | null, type?: string) => void;
7
+ commands?: Command[];
6
8
  }): import("react").JSX.Element;
7
9
  //# sourceMappingURL=CommandPalette.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAQ9C,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACrC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACnD,+BAuGA"}
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,OAAO,EAAkB,MAAM,gBAAgB,CAAA;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAQ9C,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACrC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACpB,+BAuGA"}
@@ -27,7 +27,7 @@ export function CommandPalette(props) {
27
27
  .catch(() => { });
28
28
  return () => ctrl.abort();
29
29
  }, [q]);
30
- const all = [...baseCommands, ...docs];
30
+ const all = [...(props.commands ?? baseCommands), ...docs];
31
31
  const filtered = filterCommands(q, all);
32
32
  function run(c) {
33
33
  if (c.kind === 'jump')
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ export declare function Sidebar(props: {
3
3
  route: Route;
4
4
  navigate: (r: Route) => void;
5
5
  collapsed: boolean;
6
+ surveyResultsEnabled?: boolean;
6
7
  }): import("react").JSX.Element;
7
8
  //# sourceMappingURL=Sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAO9C,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,+BA8EhG"}
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAO9C,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAC9B,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC9B,+BAiFA"}
@@ -5,8 +5,8 @@ import { useWorkspace } from '../workspace-context.js';
5
5
  import { SiteSwitcher } from './SiteSwitcher.js';
6
6
  export function Sidebar(props) {
7
7
  const { state } = useWorkspace();
8
- const groups = navItems();
9
8
  const user = state.user;
9
+ const groups = navItems({}, { surveyResultsEnabled: props.surveyResultsEnabled, role: user?.role });
10
10
  const initial = user?.name?.[0]?.toUpperCase() ?? user?.email?.[0]?.toUpperCase() ?? '?';
11
11
  return (_jsxs("aside", { className: "sidebar", "aria-label": "Main navigation", "data-collapsed": props.collapsed, children: [_jsxs("div", { className: "sb-brand", children: [_jsx("div", { className: "sb-mark", children: _jsx(BrandMark, { size: 18, color: "#fff" }) }), !props.collapsed && (_jsxs("div", { className: "sb-wordmark", children: ["Masthead", _jsx("span", { className: "dot", children: "." })] }))] }), _jsx(SiteSwitcher, { collapsed: props.collapsed }), _jsx("nav", { className: "scroll", style: { flex: 1, paddingBottom: 8 }, children: groups.map((g) => (_jsxs("div", { className: "nav-section", children: [!props.collapsed && _jsx("div", { className: "nav-label", children: g.group }), g.items.map((item) => (_jsxs("button", { type: "button", className: `nav-item${props.route === item.id ? ' active' : ''}`, onClick: () => props.navigate(item.id), "aria-current": props.route === item.id ? 'page' : undefined, title: item.label, children: [_jsx(Icon, { name: item.icon, size: 18, className: "ni-icon" }), !props.collapsed && _jsx("span", { className: "ni-label", children: item.label }), !props.collapsed && item.count != null && (_jsx("span", { className: "ni-count tnum", children: item.count }))] }, item.id)))] }, g.group))) }), _jsx("div", { className: "sb-foot", children: _jsxs("div", { className: "sb-user", children: [_jsx("div", { className: "avatar", style: { background: 'var(--accent)' }, children: initial }), !props.collapsed && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: {
12
12
  fontSize: 13,
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/ui/components/Sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/ui/components/Sidebar.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,UAAU,OAAO,CAAC,KAKvB;IACA,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,MAAM,MAAM,GAAG,QAAQ,CACtB,EAAE,EACF,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CACtE,CAAA;IACD,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,CAAA;IAExF,OAAO,CACN,iBAAO,SAAS,EAAC,SAAS,gBAAY,iBAAiB,oBAAiB,KAAK,CAAC,SAAS,aAEtF,eAAK,SAAS,EAAC,UAAU,aACxB,cAAK,SAAS,EAAC,SAAS,YACvB,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,MAAM,GAAG,GAC/B,EACL,CAAC,KAAK,CAAC,SAAS,IAAI,CACpB,eAAK,SAAS,EAAC,aAAa,yBACnB,eAAM,SAAS,EAAC,KAAK,kBAAS,IACjC,CACN,IACI,EAGN,KAAC,YAAY,IAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,EAG5C,cAAK,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAAK,SAAS,EAAC,aAAa,aAC1B,CAAC,KAAK,CAAC,SAAS,IAAI,cAAK,SAAS,EAAC,WAAW,YAAE,CAAC,CAAC,KAAK,GAAO,EAC9D,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACtB,kBAEC,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,WAAW,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAChE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,kBACxB,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC1D,KAAK,EAAE,IAAI,CAAC,KAAK,aAEjB,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,CAAC,IAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,SAAS,GAAG,EAClE,CAAC,KAAK,CAAC,SAAS,IAAI,eAAM,SAAS,EAAC,UAAU,YAAE,IAAI,CAAC,KAAK,GAAQ,EAClE,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAC1C,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,CAAC,KAAK,GAAQ,CACnD,KAXI,IAAI,CAAC,EAAE,CAYJ,CACT,CAAC,KAjB+B,CAAC,CAAC,KAAK,CAkBnC,CACN,CAAC,GACG,EAGN,cAAK,SAAS,EAAC,SAAS,YACvB,eAAK,SAAS,EAAC,SAAS,aACvB,cAAK,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,YAC5D,OAAO,GACH,EACL,CAAC,KAAK,CAAC,SAAS,IAAI,CACpB,8BACC,eAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aACnC,cACC,KAAK,EAAE;gDACN,QAAQ,EAAE,EAAE;gDACZ,UAAU,EAAE,GAAG;gDACf,KAAK,EAAE,YAAY;gDACnB,UAAU,EAAE,QAAQ;gDACpB,QAAQ,EAAE,QAAQ;gDAClB,YAAY,EAAE,UAAU;6CACxB,YAEA,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,OAAO,GAChC,EACN,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAG,IAAI,EAAE,IAAI,GAAO,IACtE,EACN,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAI,IAClE,CACH,IACI,GACD,IACC,CACR,CAAA;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare const ROUTES: readonly ["dashboard", "content", "calendar", "media", "analytics", "authors", "topics", "content-insights", "subscriptions", "social-share", "settings"];
1
+ export declare const ROUTES: readonly ["dashboard", "content", "calendar", "media", "analytics", "authors", "topics", "content-insights", "subscriptions", "survey-responses", "social-share", "settings"];
2
2
  export type Route = (typeof ROUTES)[number];
3
3
  export declare function parseHash(hash: string): Route;
4
4
  export declare function hashFor(route: Route): string;
@@ -1 +1 @@
1
- {"version":3,"file":"hash-router.d.ts","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,2JAYT,CAAA;AAEV,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAI3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAI7C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C"}
1
+ {"version":3,"file":"hash-router.d.ts","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,+KAaT,CAAA;AAEV,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAI3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAI7C;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C"}
@@ -10,6 +10,7 @@ export const ROUTES = [
10
10
  'topics',
11
11
  'content-insights',
12
12
  'subscriptions',
13
+ 'survey-responses',
13
14
  'social-share',
14
15
  'settings',
15
16
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"hash-router.js","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,UAAU;CACD,CAAA;AAIV,MAAM,OAAO,GAAU,WAAW,CAAA;AAElC,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IACzC,OAAQ,MAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,OAAO,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAY;IACnC,OAAO,KAAK,KAAK,EAAE,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"hash-router.js","sourceRoot":"","sources":["../../src/ui/hash-router.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,kBAAkB;IAClB,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,UAAU;CACD,CAAA;AAIV,MAAM,OAAO,GAAU,WAAW,CAAA;AAElC,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IACzC,OAAQ,MAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAc,CAAC,CAAC,CAAC,OAAO,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAY;IACnC,OAAO,KAAK,KAAK,EAAE,CAAA;AACpB,CAAC"}
package/dist/ui/nav.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { CmsRole } from '../schema/types.js';
1
2
  import type { Route } from './hash-router.js';
2
3
  import type { IconName } from './icons.js';
3
4
  export interface NavItem {
@@ -12,5 +13,8 @@ export interface NavGroup {
12
13
  }
13
14
  export declare const NAV_MODEL: NavGroup[];
14
15
  /** Build the nav with live counts merged onto matching item ids. */
15
- export declare function navItems(counts?: Partial<Record<Route, number>>): NavGroup[];
16
+ export declare function navItems(counts?: Partial<Record<Route, number>>, options?: {
17
+ surveyResultsEnabled?: boolean;
18
+ role?: CmsRole | null;
19
+ }): NavGroup[];
16
20
  //# sourceMappingURL=nav.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/ui/nav.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AACD,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EAsB/B,CAAA;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,MAAM,GAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAM,GAAG,QAAQ,EAAE,CAKhF"}
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/ui/nav.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AACD,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,EAuB/B,CAAA;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CACvB,MAAM,GAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAM,EAC3C,OAAO,GAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAG/D,GACC,QAAQ,EAAE,CASZ"}
package/dist/ui/nav.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/ui/nav.ts — the Masthead sidebar nav model. Two groups, 11 items
2
2
  // (spec §6: Social Share added between Subscriptions and Settings).
3
+ import { canViewSurveyResponses } from '../surveys/access.js';
3
4
  export const NAV_MODEL = [
4
5
  {
5
6
  group: 'Workspace',
@@ -18,16 +19,23 @@ export const NAV_MODEL = [
18
19
  { id: 'topics', label: 'Topics & tags', icon: 'tag' },
19
20
  { id: 'content-insights', label: 'Content Insights', icon: 'sparkle' },
20
21
  { id: 'subscriptions', label: 'Subscriptions', icon: 'inbox' },
22
+ { id: 'survey-responses', label: 'Survey responses', icon: 'chart' },
21
23
  { id: 'social-share', label: 'Social Share', icon: 'share' },
22
24
  { id: 'settings', label: 'Settings', icon: 'settings' },
23
25
  ],
24
26
  },
25
27
  ];
26
28
  /** Build the nav with live counts merged onto matching item ids. */
27
- export function navItems(counts = {}) {
29
+ export function navItems(counts = {}, options = {
30
+ surveyResultsEnabled: true,
31
+ role: 'owner',
32
+ }) {
33
+ const canViewSurvey = options.surveyResultsEnabled !== false && canViewSurveyResponses(options.role);
28
34
  return NAV_MODEL.map((g) => ({
29
35
  group: g.group,
30
- items: g.items.map((i) => (counts[i.id] != null ? { ...i, count: counts[i.id] } : { ...i })),
36
+ items: g.items
37
+ .filter((item) => item.id !== 'survey-responses' || canViewSurvey)
38
+ .map((i) => (counts[i.id] != null ? { ...i, count: counts[i.id] } : { ...i })),
31
39
  }));
32
40
  }
33
41
  //# sourceMappingURL=nav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/ui/nav.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AAgBpE,MAAM,CAAC,MAAM,SAAS,GAAe;IACpC;QACC,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE;YACN,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;YAC1D,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;YACvD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;SACtD;KACD;IACD;QACC,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE;YACN,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE;YAC5D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE;YACrD,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YACtE,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9D,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE;YAC5D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;SACvD;KACD;CACD,CAAA;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,SAAyC,EAAE;IACnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5F,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/ui/nav.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAe7D,MAAM,CAAC,MAAM,SAAS,GAAe;IACpC;QACC,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE;YACN,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;YAC1D,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;YACvD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;SACtD;KACD;IACD;QACC,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE;YACN,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE;YAC5D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE;YACrD,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YACtE,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9D,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE;YACpE,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE;YAC5D,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;SACvD;KACD;CACD,CAAA;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CACvB,SAAyC,EAAE,EAC3C,UAAqE;IACpE,oBAAoB,EAAE,IAAI;IAC1B,IAAI,EAAE,OAAO;CACb;IAED,MAAM,aAAa,GAClB,OAAO,CAAC,oBAAoB,KAAK,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,kBAAkB,IAAI,aAAa,CAAC;aACjE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;KAC/E,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type SurveyResults } from '../../surveys/schema.js';
2
+ export type SurveyResponsesState = {
3
+ kind: 'loading';
4
+ } | {
5
+ kind: 'ready';
6
+ data: SurveyResults;
7
+ } | {
8
+ kind: 'forbidden';
9
+ } | {
10
+ kind: 'unavailable';
11
+ } | {
12
+ kind: 'malformed';
13
+ } | {
14
+ kind: 'not_found';
15
+ } | {
16
+ kind: 'retryable';
17
+ };
18
+ export declare function parseSurveyResultsPayload(value: unknown): SurveyResults | null;
19
+ export declare function classifySurveyResultsResponse(response: Response): Promise<SurveyResponsesState>;
20
+ export declare function SurveyResponsesScreen({ surveyId }: {
21
+ surveyId: string;
22
+ }): import("react").JSX.Element;
23
+ export declare function SurveyResponsesBody({ surveyId, state, onRetry, }: {
24
+ surveyId: string;
25
+ state: SurveyResponsesState;
26
+ onRetry?: () => void;
27
+ }): import("react").JSX.Element;
28
+ //# sourceMappingURL=SurveyResponsesScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyResponsesScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/SurveyResponsesScreen.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,aAAa,EAAuB,MAAM,yBAAyB,CAAA;AAEjF,MAAM,MAAM,oBAAoB,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAExB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAG9E;AAED,wBAAsB,6BAA6B,CAClD,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAiBvE;AAED,wBAAgB,mBAAmB,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,OAAO,GACP,EAAE;IACF,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,+BA8HA"}
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from 'react';
3
+ import { isSurveyErrorCode, SURVEY_ERROR_CODE_HEADER, SURVEY_ERROR_DEFINITIONS, } from '../../surveys/errors.js';
4
+ import { SurveyResultsSchema } from '../../surveys/schema.js';
5
+ export function parseSurveyResultsPayload(value) {
6
+ const parsed = SurveyResultsSchema.safeParse(value);
7
+ return parsed.success ? parsed.data : null;
8
+ }
9
+ export async function classifySurveyResultsResponse(response) {
10
+ if (response.ok) {
11
+ const data = parseSurveyResultsPayload(await response.json().catch(() => null));
12
+ return data ? { kind: 'ready', data } : { kind: 'malformed' };
13
+ }
14
+ const code = await readSurveyErrorCode(response);
15
+ if ((response.status === 401 || response.status === 403) && code === 'survey_forbidden') {
16
+ return { kind: 'forbidden' };
17
+ }
18
+ if (response.status === 404 && code === 'survey_not_found')
19
+ return { kind: 'not_found' };
20
+ if (response.status === 502 && code === 'survey_provider_malformed') {
21
+ return { kind: 'malformed' };
22
+ }
23
+ if (response.status === 503 && code === 'survey_provider_unavailable') {
24
+ return { kind: 'unavailable' };
25
+ }
26
+ return { kind: 'retryable' };
27
+ }
28
+ export function SurveyResponsesScreen({ surveyId }) {
29
+ const [state, setState] = useState({ kind: 'loading' });
30
+ const load = useCallback(async () => {
31
+ setState({ kind: 'loading' });
32
+ try {
33
+ const response = await fetch(`/admin/api/surveys/${encodeURIComponent(surveyId)}`);
34
+ setState(await classifySurveyResultsResponse(response));
35
+ }
36
+ catch {
37
+ setState({ kind: 'retryable' });
38
+ }
39
+ }, [surveyId]);
40
+ useEffect(() => {
41
+ void load();
42
+ }, [load]);
43
+ return _jsx(SurveyResponsesBody, { surveyId: surveyId, state: state, onRetry: load });
44
+ }
45
+ export function SurveyResponsesBody({ surveyId, state, onRetry, }) {
46
+ if (state.kind === 'loading')
47
+ return _jsx(StatusPage, { title: "Loading survey responses\u2026" });
48
+ if (state.kind === 'forbidden')
49
+ return _jsx(StatusPage, { title: "You do not have permission to view survey responses." });
50
+ if (state.kind === 'unavailable')
51
+ return _jsx(StatusPage, { title: "Survey reporting is not configured for this site." });
52
+ if (state.kind === 'malformed')
53
+ return _jsx(StatusPage, { title: "Masthead received invalid survey data.", retry: onRetry });
54
+ if (state.kind === 'not_found')
55
+ return _jsx(StatusPage, { title: "The configured survey could not be found." });
56
+ if (state.kind === 'retryable')
57
+ return _jsx(StatusPage, { title: "Survey responses could not be loaded.", retry: onRetry });
58
+ const { data } = state;
59
+ const freeTextByQuestion = new Map();
60
+ for (const entry of data.freeText) {
61
+ const entries = freeTextByQuestion.get(entry.questionId) ?? [];
62
+ entries.push(entry);
63
+ freeTextByQuestion.set(entry.questionId, entries);
64
+ }
65
+ return (_jsxs("div", { className: "page page-wide fade-in", style: { maxWidth: 1340 }, children: [_jsxs("div", { className: "page-head", children: [_jsxs("div", { children: [_jsx("h1", { className: "page-title", children: data.survey.title }), _jsxs("div", { className: "page-sub", children: [data.survey.responseCount, " ", data.survey.responseCount === 1 ? 'response' : 'responses', ' ', "\u00B7 ", data.survey.status] })] }), _jsx("a", { className: "btn", href: `/admin/api/surveys/${encodeURIComponent(surveyId)}/responses.csv`, children: "Export CSV" })] }), data.survey.responseCount === 0 ? (_jsxs("div", { className: "card", role: "status", children: [_jsx("h2", { className: "card-title", children: "No responses yet" }), _jsx("p", { className: "page-sub", children: "Aggregates and free-text answers will appear after submission." })] })) : (_jsxs("section", { className: "card", "aria-labelledby": "survey-response-list", children: [_jsx("h2", { className: "card-title", id: "survey-response-list", children: "Recent responses" }), _jsx("div", { className: "masthead-rule" }), _jsxs("table", { className: "tbl", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Submitted" }), _jsx("th", { children: "Channel" }), _jsx("th", { children: "Audience" }), _jsx("th", { children: "Attribution" })] }) }), _jsx("tbody", { children: data.responses.map((response) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("time", { dateTime: response.submittedAt, children: formatTime(response.submittedAt) }) }), _jsx("td", { children: response.channel }), _jsx("td", { children: segmentLabel(response.respondentSegment) }), _jsx("td", { children: response.anonymous ? 'Anonymous' : 'Known respondent' })] }, response.id))) })] })] })), _jsxs("section", { "aria-labelledby": "survey-aggregates", style: { marginTop: 24 }, children: [_jsx("h2", { className: "page-title", id: "survey-aggregates", style: { fontSize: 22 }, children: "Question aggregates" }), _jsx("div", { className: "grid-split-wide", style: { alignItems: 'start', marginTop: 12 }, children: data.questions.map((question) => (_jsxs("article", { className: "card", children: [_jsxs("div", { className: "kicker", children: ["Q", question.position + 1, " \u00B7 ", questionAudienceLabel(question.audience)] }), _jsx("h3", { className: "card-title", children: question.prompt }), question.counts && _jsx(CountTable, { values: question.counts }), question.distribution && (_jsxs(_Fragment, { children: [_jsxs("p", { className: "page-sub", children: ["Average: ", question.average === null ? '—' : question.average.toFixed(2)] }), _jsx(CountTable, { values: question.distribution })] })), question.kind === 'text' && (_jsxs("p", { className: "page-sub", children: [question.responseCount ?? 0, " free-text responses"] }))] }, question.id))) })] }), _jsxs("section", { "aria-labelledby": "survey-free-text", style: { marginTop: 24 }, children: [_jsx("h2", { className: "page-title", id: "survey-free-text", style: { fontSize: 22 }, children: "Free-text responses" }), data.questions
66
+ .filter((question) => question.kind === 'text')
67
+ .map((question) => (_jsxs("div", { className: "card", style: { marginTop: 12 }, children: [_jsx("h3", { className: "card-title", children: question.prompt }), (freeTextByQuestion.get(question.id) ?? []).length === 0 ? (_jsx("p", { className: "page-sub", children: "No free-text responses." })) : (_jsx("ul", { children: (freeTextByQuestion.get(question.id) ?? []).map((entry) => (_jsx("li", { children: entry.value }, `${entry.responseId}:${entry.submittedAt}`))) }))] }, question.id)))] })] }));
68
+ }
69
+ async function readSurveyErrorCode(response) {
70
+ const headerCode = response.headers.get(SURVEY_ERROR_CODE_HEADER);
71
+ if (!isSurveyErrorCode(headerCode))
72
+ return null;
73
+ if (headerCode === 'survey_forbidden' && (response.status === 401 || response.status === 403)) {
74
+ return headerCode;
75
+ }
76
+ const body = await response.json().catch(() => null);
77
+ if (!isPlainRecord(body) || Object.keys(body).length !== 2)
78
+ return null;
79
+ if (!isSurveyErrorCode(body.code) || body.code !== headerCode)
80
+ return null;
81
+ return body.error === SURVEY_ERROR_DEFINITIONS[body.code].error ? body.code : null;
82
+ }
83
+ function isPlainRecord(value) {
84
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
85
+ }
86
+ function StatusPage({ title, detail, retry, }) {
87
+ return (_jsxs("div", { className: "page", role: "status", children: [_jsx("h1", { className: "page-title", children: "Survey responses" }), _jsx("p", { className: "page-sub", children: title }), detail && _jsx("p", { className: "page-sub", children: detail }), retry && (_jsx("button", { type: "button", className: "btn", onClick: retry, children: "Retry" }))] }));
88
+ }
89
+ function CountTable({ values }) {
90
+ return (_jsx("table", { className: "tbl", children: _jsx("tbody", { children: Object.entries(values).map(([label, count]) => (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: label }), _jsx("td", { className: "tnum", children: count })] }, label))) }) }));
91
+ }
92
+ function formatTime(value) {
93
+ const date = new Date(value);
94
+ return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
95
+ }
96
+ function segmentLabel(value) {
97
+ if (value === 'member')
98
+ return 'Member';
99
+ if (value === 'non_member')
100
+ return 'Non-member';
101
+ return 'Unknown';
102
+ }
103
+ function questionAudienceLabel(value) {
104
+ if (value === 'member')
105
+ return 'Members only';
106
+ if (value === 'non_member')
107
+ return 'Non-members only';
108
+ return 'All respondents';
109
+ }
110
+ //# sourceMappingURL=SurveyResponsesScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyResponsesScreen.js","sourceRoot":"","sources":["../../../src/ui/screens/SurveyResponsesScreen.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { ScreenRegistry } from '../components/CmsApp.js';
2
- export declare function createCmsScreens({ allowInlineAuthorCreation, }?: {
2
+ export declare function createCmsScreens({ allowInlineAuthorCreation, surveyId, }?: {
3
3
  allowInlineAuthorCreation?: boolean;
4
+ surveyId?: string;
4
5
  }): ScreenRegistry;
5
6
  export declare const cmsScreens: ScreenRegistry;
6
7
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA2B7D,wBAAgB,gBAAgB,CAAC,EAChC,yBAAgC,GAChC,GAAE;IACF,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAC9B,GAAG,cAAc,CAgBtB;AAED,eAAO,MAAM,UAAU,EAAE,cAAmC,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA4B7D,wBAAgB,gBAAgB,CAAC,EAChC,yBAAgC,EAChC,QAAQ,GACR,GAAE;IACF,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;CACZ,GAAG,cAAc,CAmBtB;AAED,eAAO,MAAM,UAAU,EAAE,cAAmC,CAAA"}
@@ -10,6 +10,7 @@ import { MediaScreen } from './MediaScreen.js';
10
10
  import { SettingsScreen } from './SettingsScreen.js';
11
11
  import { SocialShareScreen } from './SocialShareScreen.js';
12
12
  import { SubscriptionsScreen } from './SubscriptionsScreen.js';
13
+ import { SurveyResponsesScreen } from './SurveyResponsesScreen.js';
13
14
  import { TopicsScreen } from './TopicsScreen.js';
14
15
  // Thin wrappers that supply the openDoc seam for screens that need it.
15
16
  // On click, we navigate to the content route; the ContentRoute will handle
@@ -22,7 +23,7 @@ function CalendarRoute() {
22
23
  const { navigate } = useHashRouter();
23
24
  return _jsx(CalendarScreen, { openDoc: () => navigate('content') });
24
25
  }
25
- export function createCmsScreens({ allowInlineAuthorCreation = true, } = {}) {
26
+ export function createCmsScreens({ allowInlineAuthorCreation = true, surveyId, } = {}) {
26
27
  return {
27
28
  content: () => _jsx(ContentRoute, { allowInlineAuthorCreation: allowInlineAuthorCreation }),
28
29
  'content-insights': () => _jsx(ContentInsightsScreen, {}),
@@ -33,6 +34,9 @@ export function createCmsScreens({ allowInlineAuthorCreation = true, } = {}) {
33
34
  authors: () => _jsx(AuthorsScreen, {}),
34
35
  topics: () => _jsx(TopicsScreen, {}),
35
36
  subscriptions: () => _jsx(SubscriptionsScreen, {}),
37
+ ...(surveyId
38
+ ? { 'survey-responses': () => _jsx(SurveyResponsesScreen, { surveyId: surveyId }) }
39
+ : {}),
36
40
  'social-share': () => (_jsx(SocialShareScreen, { allowInlineAuthorCreation: allowInlineAuthorCreation })),
37
41
  settings: () => _jsx(SettingsScreen, {}),
38
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,cAAc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,SAAS,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAChC,yBAAyB,GAAG,IAAI,MAG7B,EAAE;IACL,OAAO;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,IAAC,yBAAyB,EAAE,yBAAyB,GAAI;QACrF,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,KAAG;QACnD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;QACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QACjC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAC,WAAW,KAAG;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,KAAG;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QAChC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAC,mBAAmB,KAAG;QAC5C,cAAc,EAAE,GAAG,EAAE,CAAC,CACrB,KAAC,iBAAiB,IAAC,yBAAyB,EAAE,yBAAyB,GAAI,CAC3E;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;KAClC,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,cAAc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,SAAS,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAChC,yBAAyB,GAAG,IAAI,EAChC,QAAQ,MAIL,EAAE;IACL,OAAO;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,IAAC,yBAAyB,EAAE,yBAAyB,GAAI;QACrF,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,KAAG;QACnD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;QACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QACjC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAC,WAAW,KAAG;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,KAAG;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;QAChC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;QAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAC,mBAAmB,KAAG;QAC5C,GAAG,CAAC,QAAQ;YACX,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,IAAC,QAAQ,EAAE,QAAQ,GAAI,EAAE;YAC7E,CAAC,CAAC,EAAE,CAAC;QACN,cAAc,EAAE,GAAG,EAAE,CAAC,CACrB,KAAC,iBAAiB,IAAC,yBAAyB,EAAE,yBAAyB,GAAI,CAC3E;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;KAClC,CAAA;AACF,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB,gBAAgB,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/cms",
3
- "version": "0.5.5",
3
+ "version": "0.5.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "growth-labs-cms-migrations": "./dist/cli/migrations.js"
package/src/index.ts CHANGED
@@ -34,10 +34,8 @@ export * from './engine/index.js'
34
34
 
35
35
  // Injected-provider interfaces + null implementations (spec §3.3).
36
36
  export * from './providers/index.js'
37
-
38
37
  // Route-layer user types (exported at root for convenience; full routes surface at @growth-labs/cms/routes).
39
38
  export type { CmsUser } from './routes/context.js'
40
-
41
39
  export {
42
40
  type ArticleContentRow,
43
41
  type AuthorRow,
@@ -82,3 +80,5 @@ export {
82
80
  type WorkspaceMembershipRow,
83
81
  type WorkspaceSettingsRow,
84
82
  } from './schema/index.js'
83
+ export * from './surveys/errors.js'
84
+ export * from './surveys/schema.js'
@@ -229,6 +229,15 @@ export default function growthLabsCms(userOptions: CmsIntegrationOptions): Astro
229
229
  pattern: `${base}/api/analytics`,
230
230
  entrypoint: resolveEntrypoint('../ui/api/analytics'),
231
231
  })
232
+ // Survey reporting — protected JSON plus CSV, backed by the optional host provider.
233
+ injectRoute({
234
+ pattern: `${base}/api/surveys/[surveyId]`,
235
+ entrypoint: resolveEntrypoint('../ui/api/surveys/[surveyId]'),
236
+ })
237
+ injectRoute({
238
+ pattern: `${base}/api/surveys/[surveyId]/responses.csv`,
239
+ entrypoint: resolveEntrypoint('../ui/api/surveys/[surveyId]/responses.csv'),
240
+ })
232
241
  // Calendar
233
242
  injectRoute({
234
243
  pattern: `${base}/api/calendar`,
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod'
2
+ import { SurveyIdSchema } from '../surveys/schema.js'
2
3
 
3
4
  const workspaceSchema = z.object({
4
5
  id: z.string(),
@@ -22,6 +23,12 @@ const socialSharingSchema = z
22
23
  })
23
24
  .default({})
24
25
 
26
+ const surveyResultsSchema = z
27
+ .object({
28
+ surveyId: SurveyIdSchema,
29
+ })
30
+ .strict()
31
+
25
32
  export const cmsIntegrationOptionsSchema = z
26
33
  .object({
27
34
  workspaces: z.array(workspaceSchema).min(1, 'at least one workspace is required'),
@@ -30,6 +37,7 @@ export const cmsIntegrationOptionsSchema = z
30
37
  searchEnabled: z.boolean().default(true),
31
38
  theme: themeSchema,
32
39
  socialSharing: socialSharingSchema,
40
+ surveyResults: surveyResultsSchema.optional(),
33
41
  })
34
42
  .transform((o) => ({ ...o, activeWorkspaceId: o.activeWorkspaceId ?? o.workspaces[0].id }))
35
43
 
@@ -7,6 +7,7 @@ import type {
7
7
  SeoProvider,
8
8
  SettingsProvider,
9
9
  SubscriptionsProvider,
10
+ SurveyProvider,
10
11
  } from './types.js'
11
12
  import { ProviderHttpError } from './types.js'
12
13
 
@@ -179,6 +180,23 @@ export const nullSettings: SettingsProvider = {
179
180
  },
180
181
  }
181
182
 
183
+ export const nullSurveys: SurveyProvider = {
184
+ async getResults() {
185
+ throw new ProviderHttpError(
186
+ 503,
187
+ 'survey_provider_unavailable',
188
+ 'Survey provider not configured',
189
+ )
190
+ },
191
+ async getCsv() {
192
+ throw new ProviderHttpError(
193
+ 503,
194
+ 'survey_provider_unavailable',
195
+ 'Survey provider not configured',
196
+ )
197
+ },
198
+ }
199
+
182
200
  export const nullProviders: CmsProviders = {
183
201
  analytics: nullAnalytics,
184
202
  subscriptions: nullSubscriptions,
@@ -186,4 +204,5 @@ export const nullProviders: CmsProviders = {
186
204
  seo: defaultSeo,
187
205
  search: nullSearch,
188
206
  settings: nullSettings,
207
+ surveys: nullSurveys,
189
208
  }
@@ -1,4 +1,5 @@
1
1
  import type { SeoScoreInput, SeoScoreResult } from '../engine/seo.js'
2
+ import type { SurveyCsvResult, SurveyResults } from '../surveys/schema.js'
2
3
 
3
4
  export type ProviderStatus = 'live' | 'partial' | 'empty'
4
5
  export interface ProviderResult<T> {
@@ -402,6 +403,11 @@ export interface SettingsProvider {
402
403
  getIntegrations(): Promise<ProviderResult<Record<string, CmsIntegrationStatus | null>>>
403
404
  }
404
405
 
406
+ export interface SurveyProvider {
407
+ getResults(input: { surveyId: string }): Promise<SurveyResults>
408
+ getCsv(input: { surveyId: string }): Promise<SurveyCsvResult>
409
+ }
410
+
405
411
  export interface CmsProviders {
406
412
  analytics: AnalyticsProvider
407
413
  subscriptions: SubscriptionsProvider
@@ -409,4 +415,5 @@ export interface CmsProviders {
409
415
  seo: SeoProvider
410
416
  search: SearchProvider
411
417
  settings: SettingsProvider
418
+ surveys?: SurveyProvider
412
419
  }
@@ -20,6 +20,7 @@
20
20
 
21
21
  import type { MembershipRecord } from '../engine/members.js'
22
22
  import type { CmsRole } from '../schema/types.js'
23
+ import { SURVEY_RESPONSE_ROLES } from '../surveys/access.js'
23
24
  import type { Capability, CmsUser, RouteContext } from './context.js'
24
25
  import { json } from './context.js'
25
26
 
@@ -75,6 +76,7 @@ export const CAPABILITY_MATRIX: Record<Capability, ReadonlySet<CmsRole>> = {
75
76
  // Complimentary access is an editorial admin action by explicit operator
76
77
  // decision; it is not subscriber-PII export or owner-only settings.
77
78
  manage_complimentary_access: new Set<CmsRole>(['owner', 'senior_editor', 'editor']),
79
+ view_survey_responses: SURVEY_RESPONSE_ROLES,
78
80
  }
79
81
 
80
82
  // ---------------------------------------------------------------------------
@@ -38,6 +38,8 @@ export type Capability =
38
38
  // Complimentary access administration. Explicit operator decision: owner,
39
39
  // senior_editor, and editor may grant/revoke/retry; contributor/producer may not.
40
40
  | 'manage_complimentary_access'
41
+ // Read-only survey reporting. No raw respondent identity is exposed in the screen contract.
42
+ | 'view_survey_responses'
41
43
 
42
44
  export interface CmsUser {
43
45
  subject: string
@@ -163,6 +163,12 @@ export {
163
163
  type SubscriptionsRouteConfig,
164
164
  type SubscriptionsRouteHandlers,
165
165
  } from './subscriptions.js'
166
+ // Survey reporting routes — optional storage-neutral provider, protected by role capability.
167
+ export {
168
+ createSurveyRoutes,
169
+ type SurveyRouteConfig,
170
+ type SurveyRouteHandlers,
171
+ } from './surveys.js'
166
172
  // Tag management routes — GET /tags, GET /tags?q=, DELETE /tags/:id (P3 Task 9).
167
173
  export { createTagRoutes, type TagRouteHandlers } from './tags.js'
168
174
  // Topic management over content_items.primary_topic.