@kelpie/ui 0.8.0 → 0.10.0

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 (200) hide show
  1. package/dist/api/resource.d.ts +1 -1
  2. package/dist/api/resource.d.ts.map +1 -1
  3. package/dist/api/resource.js.map +1 -1
  4. package/dist/api/resources/consentPurposes.d.ts +13 -0
  5. package/dist/api/resources/consentPurposes.d.ts.map +1 -0
  6. package/dist/api/resources/consentPurposes.js +39 -0
  7. package/dist/api/resources/consentPurposes.js.map +1 -0
  8. package/dist/api/resources/customFields.d.ts +15 -0
  9. package/dist/api/resources/customFields.d.ts.map +1 -0
  10. package/dist/api/resources/customFields.js +41 -0
  11. package/dist/api/resources/customFields.js.map +1 -0
  12. package/dist/api/resources/enquiries.d.ts +39 -0
  13. package/dist/api/resources/enquiries.d.ts.map +1 -0
  14. package/dist/api/resources/enquiries.js +68 -0
  15. package/dist/api/resources/enquiries.js.map +1 -0
  16. package/dist/api/resources/forms.d.ts +21 -1
  17. package/dist/api/resources/forms.d.ts.map +1 -1
  18. package/dist/api/resources/forms.js +41 -0
  19. package/dist/api/resources/forms.js.map +1 -1
  20. package/dist/api/resources/importJobs.d.ts +5 -0
  21. package/dist/api/resources/importJobs.d.ts.map +1 -1
  22. package/dist/api/resources/importJobs.js +3 -0
  23. package/dist/api/resources/importJobs.js.map +1 -1
  24. package/dist/api/resources/opportunities.d.ts +2 -0
  25. package/dist/api/resources/opportunities.d.ts.map +1 -1
  26. package/dist/api/resources/opportunities.js +1 -0
  27. package/dist/api/resources/opportunities.js.map +1 -1
  28. package/dist/api/resources/sampleData.d.ts.map +1 -1
  29. package/dist/api/resources/sampleData.js +1 -0
  30. package/dist/api/resources/sampleData.js.map +1 -1
  31. package/dist/app/KelpieApp.d.ts.map +1 -1
  32. package/dist/app/KelpieApp.js +7 -1
  33. package/dist/app/KelpieApp.js.map +1 -1
  34. package/dist/components/ActivitiesPanel.d.ts.map +1 -1
  35. package/dist/components/ActivitiesPanel.js +1 -0
  36. package/dist/components/ActivitiesPanel.js.map +1 -1
  37. package/dist/components/CustomFieldsPanel.d.ts +23 -0
  38. package/dist/components/CustomFieldsPanel.d.ts.map +1 -0
  39. package/dist/components/CustomFieldsPanel.js +116 -0
  40. package/dist/components/CustomFieldsPanel.js.map +1 -0
  41. package/dist/components/FormsPanel.d.ts +18 -0
  42. package/dist/components/FormsPanel.d.ts.map +1 -0
  43. package/dist/components/FormsPanel.js +37 -0
  44. package/dist/components/FormsPanel.js.map +1 -0
  45. package/dist/components/PlanAttention.d.ts +3 -2
  46. package/dist/components/PlanAttention.d.ts.map +1 -1
  47. package/dist/components/PlanAttention.js +7 -3
  48. package/dist/components/PlanAttention.js.map +1 -1
  49. package/dist/components/Shell.d.ts.map +1 -1
  50. package/dist/components/Shell.js +3 -0
  51. package/dist/components/Shell.js.map +1 -1
  52. package/dist/components/useHasCustomFields.d.ts +13 -0
  53. package/dist/components/useHasCustomFields.d.ts.map +1 -0
  54. package/dist/components/useHasCustomFields.js +16 -0
  55. package/dist/components/useHasCustomFields.js.map +1 -0
  56. package/dist/pages/CompanyDetail.d.ts.map +1 -1
  57. package/dist/pages/CompanyDetail.js +24 -2
  58. package/dist/pages/CompanyDetail.js.map +1 -1
  59. package/dist/pages/DealDetail.d.ts.map +1 -1
  60. package/dist/pages/DealDetail.js +18 -1
  61. package/dist/pages/DealDetail.js.map +1 -1
  62. package/dist/pages/DecisionsPage.d.ts.map +1 -1
  63. package/dist/pages/DecisionsPage.js +2 -0
  64. package/dist/pages/DecisionsPage.js.map +1 -1
  65. package/dist/pages/EnquiriesPage.d.ts +2 -0
  66. package/dist/pages/EnquiriesPage.d.ts.map +1 -0
  67. package/dist/pages/EnquiriesPage.js +251 -0
  68. package/dist/pages/EnquiriesPage.js.map +1 -0
  69. package/dist/pages/EnquiryDetail.d.ts +2 -0
  70. package/dist/pages/EnquiryDetail.d.ts.map +1 -0
  71. package/dist/pages/EnquiryDetail.js +207 -0
  72. package/dist/pages/EnquiryDetail.js.map +1 -0
  73. package/dist/pages/EnquiryStageSettingsPage.d.ts +3 -0
  74. package/dist/pages/EnquiryStageSettingsPage.d.ts.map +1 -0
  75. package/dist/pages/EnquiryStageSettingsPage.js +34 -0
  76. package/dist/pages/EnquiryStageSettingsPage.js.map +1 -0
  77. package/dist/pages/FormDetail.d.ts.map +1 -1
  78. package/dist/pages/FormDetail.js +19 -1
  79. package/dist/pages/FormDetail.js.map +1 -1
  80. package/dist/pages/ListDetail.d.ts.map +1 -1
  81. package/dist/pages/ListDetail.js +27 -1
  82. package/dist/pages/ListDetail.js.map +1 -1
  83. package/dist/pages/OpportunityDetail.d.ts.map +1 -1
  84. package/dist/pages/OpportunityDetail.js +62 -3
  85. package/dist/pages/OpportunityDetail.js.map +1 -1
  86. package/dist/pages/PartnershipDetail.d.ts.map +1 -1
  87. package/dist/pages/PartnershipDetail.js +17 -1
  88. package/dist/pages/PartnershipDetail.js.map +1 -1
  89. package/dist/pages/PeoplePage.d.ts.map +1 -1
  90. package/dist/pages/PeoplePage.js +17 -0
  91. package/dist/pages/PeoplePage.js.map +1 -1
  92. package/dist/pages/PersonDetail.d.ts.map +1 -1
  93. package/dist/pages/PersonDetail.js +63 -3
  94. package/dist/pages/PersonDetail.js.map +1 -1
  95. package/dist/pages/PlanningPage.d.ts.map +1 -1
  96. package/dist/pages/PlanningPage.js +3 -0
  97. package/dist/pages/PlanningPage.js.map +1 -1
  98. package/dist/pages/RaiseDetail.d.ts.map +1 -1
  99. package/dist/pages/RaiseDetail.js +11 -1
  100. package/dist/pages/RaiseDetail.js.map +1 -1
  101. package/dist/pages/RoleDetail.js +1 -1
  102. package/dist/pages/RoleDetail.js.map +1 -1
  103. package/dist/pages/SearchPage.d.ts.map +1 -1
  104. package/dist/pages/SearchPage.js +1 -0
  105. package/dist/pages/SearchPage.js.map +1 -1
  106. package/dist/pages/admin/DataPage.d.ts.map +1 -1
  107. package/dist/pages/admin/DataPage.js +18 -3
  108. package/dist/pages/admin/DataPage.js.map +1 -1
  109. package/dist/pages/admin/FieldsPage.d.ts +2 -0
  110. package/dist/pages/admin/FieldsPage.d.ts.map +1 -0
  111. package/dist/pages/admin/FieldsPage.js +164 -0
  112. package/dist/pages/admin/FieldsPage.js.map +1 -0
  113. package/dist/pages/admin/PrivacyPage.d.ts +9 -0
  114. package/dist/pages/admin/PrivacyPage.d.ts.map +1 -0
  115. package/dist/pages/admin/PrivacyPage.js +170 -0
  116. package/dist/pages/admin/PrivacyPage.js.map +1 -0
  117. package/dist/pages/dashboard/attention.d.ts.map +1 -1
  118. package/dist/pages/dashboard/attention.js +3 -0
  119. package/dist/pages/dashboard/attention.js.map +1 -1
  120. package/dist/pages/forms/AddFieldMenu.d.ts +17 -0
  121. package/dist/pages/forms/AddFieldMenu.d.ts.map +1 -0
  122. package/dist/pages/forms/AddFieldMenu.js +43 -0
  123. package/dist/pages/forms/AddFieldMenu.js.map +1 -0
  124. package/dist/pages/forms/EmbedPanel.d.ts +4 -0
  125. package/dist/pages/forms/EmbedPanel.d.ts.map +1 -1
  126. package/dist/pages/forms/EmbedPanel.js +62 -3
  127. package/dist/pages/forms/EmbedPanel.js.map +1 -1
  128. package/dist/pages/forms/FieldsEditor.d.ts.map +1 -1
  129. package/dist/pages/forms/FieldsEditor.js +179 -36
  130. package/dist/pages/forms/FieldsEditor.js.map +1 -1
  131. package/dist/pages/forms/FormActions.d.ts +6 -0
  132. package/dist/pages/forms/FormActions.d.ts.map +1 -0
  133. package/dist/pages/forms/FormActions.js +149 -0
  134. package/dist/pages/forms/FormActions.js.map +1 -0
  135. package/dist/pages/forms/FormSettings.d.ts.map +1 -1
  136. package/dist/pages/forms/FormSettings.js +15 -19
  137. package/dist/pages/forms/FormSettings.js.map +1 -1
  138. package/dist/pages/forms/SubmissionDetail.d.ts +2 -0
  139. package/dist/pages/forms/SubmissionDetail.d.ts.map +1 -0
  140. package/dist/pages/forms/SubmissionDetail.js +76 -0
  141. package/dist/pages/forms/SubmissionDetail.js.map +1 -0
  142. package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -1
  143. package/dist/pages/forms/SubmissionsTable.js +56 -8
  144. package/dist/pages/forms/SubmissionsTable.js.map +1 -1
  145. package/dist/pages/forms/fieldList.d.ts +11 -5
  146. package/dist/pages/forms/fieldList.d.ts.map +1 -1
  147. package/dist/pages/forms/fieldList.js +66 -6
  148. package/dist/pages/forms/fieldList.js.map +1 -1
  149. package/dist/pages/forms/template.d.ts +17 -0
  150. package/dist/pages/forms/template.d.ts.map +1 -1
  151. package/dist/pages/forms/template.js +93 -0
  152. package/dist/pages/forms/template.js.map +1 -1
  153. package/dist/pages/onboarding/WorkspaceStepPage.js +1 -1
  154. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -1
  155. package/package.json +2 -2
  156. package/src/api/resource.ts +6 -1
  157. package/src/api/resources/consentPurposes.ts +83 -0
  158. package/src/api/resources/customFields.ts +88 -0
  159. package/src/api/resources/enquiries.ts +118 -0
  160. package/src/api/resources/forms.ts +58 -0
  161. package/src/api/resources/importJobs.ts +9 -0
  162. package/src/api/resources/opportunities.ts +3 -0
  163. package/src/api/resources/sampleData.ts +1 -0
  164. package/src/app/KelpieApp.tsx +12 -0
  165. package/src/components/ActivitiesPanel.tsx +1 -0
  166. package/src/components/CustomFieldsPanel.tsx +330 -0
  167. package/src/components/FormsPanel.tsx +86 -0
  168. package/src/components/PlanAttention.tsx +20 -3
  169. package/src/components/Shell.tsx +3 -0
  170. package/src/components/useHasCustomFields.ts +18 -0
  171. package/src/pages/CompanyDetail.tsx +36 -1
  172. package/src/pages/DealDetail.tsx +31 -0
  173. package/src/pages/DecisionsPage.tsx +2 -0
  174. package/src/pages/EnquiriesPage.tsx +434 -0
  175. package/src/pages/EnquiryDetail.tsx +554 -0
  176. package/src/pages/EnquiryStageSettingsPage.tsx +63 -0
  177. package/src/pages/FormDetail.tsx +23 -1
  178. package/src/pages/ListDetail.tsx +62 -0
  179. package/src/pages/OpportunityDetail.tsx +165 -2
  180. package/src/pages/PartnershipDetail.tsx +32 -0
  181. package/src/pages/PeoplePage.tsx +20 -0
  182. package/src/pages/PersonDetail.tsx +152 -3
  183. package/src/pages/PlanningPage.tsx +3 -0
  184. package/src/pages/RaiseDetail.tsx +21 -0
  185. package/src/pages/RoleDetail.tsx +1 -1
  186. package/src/pages/SearchPage.tsx +1 -0
  187. package/src/pages/admin/DataPage.tsx +51 -3
  188. package/src/pages/admin/FieldsPage.tsx +455 -0
  189. package/src/pages/admin/PrivacyPage.tsx +461 -0
  190. package/src/pages/dashboard/attention.ts +3 -0
  191. package/src/pages/forms/AddFieldMenu.tsx +121 -0
  192. package/src/pages/forms/EmbedPanel.tsx +163 -2
  193. package/src/pages/forms/FieldsEditor.tsx +539 -165
  194. package/src/pages/forms/FormActions.tsx +552 -0
  195. package/src/pages/forms/FormSettings.tsx +29 -70
  196. package/src/pages/forms/SubmissionDetail.tsx +249 -0
  197. package/src/pages/forms/SubmissionsTable.tsx +109 -16
  198. package/src/pages/forms/fieldList.ts +68 -5
  199. package/src/pages/forms/template.ts +103 -0
  200. package/src/pages/onboarding/WorkspaceStepPage.tsx +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddFieldMenu.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/AddFieldMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;CAChD;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkGpF"}
@@ -0,0 +1,43 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FORM_FIELD_MAP_TARGET_LABELS } from '@kelpie/schemas';
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { unusedCrmPresets } from './fieldList.js';
5
+ import { SUBMISSION_FIELD_PRESETS } from './template.js';
6
+ export function AddFieldMenu({ fields, onAdd }) {
7
+ const [open, setOpen] = useState(false);
8
+ const containerRef = useRef(null);
9
+ const crmPresets = unusedCrmPresets(fields);
10
+ useEffect(() => {
11
+ if (!open) {
12
+ return;
13
+ }
14
+ function onPointerDown(event) {
15
+ if (containerRef.current?.contains(event.target) !== true) {
16
+ setOpen(false);
17
+ }
18
+ }
19
+ function onKeyDown(event) {
20
+ if (event.key === 'Escape') {
21
+ setOpen(false);
22
+ }
23
+ }
24
+ document.addEventListener('mousedown', onPointerDown);
25
+ document.addEventListener('keydown', onKeyDown);
26
+ return () => {
27
+ document.removeEventListener('mousedown', onPointerDown);
28
+ document.removeEventListener('keydown', onKeyDown);
29
+ };
30
+ }, [open]);
31
+ function add(field) {
32
+ onAdd(field);
33
+ setOpen(false);
34
+ }
35
+ return (_jsxs("div", { className: "relative", ref: containerRef, children: [_jsx("button", { type: "button", onClick: () => {
36
+ setOpen((current) => !current);
37
+ }, "aria-expanded": open, "aria-haspopup": "menu", className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover", children: "+ Add field" }), open && (_jsxs("div", { role: "menu", "aria-label": "Field to add", className: "absolute right-0 z-20 mt-1.5 max-h-80 w-64 overflow-y-auto rounded-md border border-border bg-surface-raised py-1", children: [crmPresets.length > 0 && (_jsxs(_Fragment, { children: [_jsx("p", { className: "px-3 pb-1 pt-1.5 text-[10px] font-semibold uppercase tracking-wide text-ink-faint", children: "Writes to the CRM" }), crmPresets.map((preset) => (_jsxs("button", { type: "button", role: "menuitem", onClick: () => {
38
+ add(preset);
39
+ }, className: "flex w-full items-center justify-between gap-2 px-3 py-1.5 text-left text-[13px] text-ink transition hover:bg-surface-sunken", children: [_jsx("span", { children: preset.label }), _jsx("span", { className: "shrink-0 text-[11px] text-ink-faint", children: FORM_FIELD_MAP_TARGET_LABELS[preset.mapTo] })] }, preset.mapTo)))] })), _jsx("p", { className: "px-3 pb-1 pt-1.5 text-[10px] font-semibold uppercase tracking-wide text-ink-faint", children: "Submission only" }), SUBMISSION_FIELD_PRESETS.map((preset) => (_jsx("button", { type: "button", role: "menuitem", onClick: () => {
40
+ add(preset.field);
41
+ }, className: "w-full px-3 py-1.5 text-left text-[13px] text-ink transition hover:bg-surface-sunken", children: preset.menuLabel }, preset.menuLabel)))] }))] }));
42
+ }
43
+ //# sourceMappingURL=AddFieldMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddFieldMenu.js","sourceRoot":"","sources":["../../../src/pages/forms/AddFieldMenu.tsx"],"names":[],"mappings":"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"}
@@ -6,6 +6,10 @@ import type { Form } from '@kelpie/schemas';
6
6
  * embed page is served by the service, so its address depends on where the
7
7
  * service is reached, which the server knows from the request and the browser
8
8
  * only happens to share while the two are same-origin.
9
+ *
10
+ * Each iframe snippet has a Preview that opens the bare embed document in a
11
+ * modal — fields only, the same document the snippet iframes — fixed height for
12
+ * the plain iframe, auto-resize for the script variant.
9
13
  */
10
14
  export interface EmbedPanelProps {
11
15
  readonly form: Form;
@@ -1 +1 @@
1
- {"version":3,"file":"EmbedPanel.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/EmbedPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAO3C;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+CvE"}
1
+ {"version":3,"file":"EmbedPanel.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/EmbedPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAQ3C;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAID,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAmEvE"}
@@ -1,19 +1,78 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useId, useState } from 'react';
2
3
  import { useFormEmbed } from '../../api/resources/forms.js';
3
4
  import { CopyButton } from '../../components/CopyButton.js';
4
5
  import { ErrorPanel, LoadingPanel } from '../../components/QueryState.js';
5
6
  import { SectionHeader } from '../../components/SectionHeader.js';
6
7
  export function EmbedPanel({ form }) {
7
8
  const { snippets, isLoading, error } = useFormEmbed(form.id);
9
+ const [preview, setPreview] = useState(null);
8
10
  if (error !== null) {
9
11
  return _jsx(ErrorPanel, { error: error });
10
12
  }
11
13
  if (isLoading || snippets === undefined) {
12
14
  return _jsx(LoadingPanel, { label: "Loading embed details\u2026" });
13
15
  }
14
- return (_jsxs("div", { className: "max-w-2xl space-y-5", children: [_jsx(SectionHeader, { title: "Embed", description: "The page below is served by Kelpie, so a site embedding it loads nothing else." }), _jsxs("div", { children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "Hosted page" }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("code", { className: "flex-1 overflow-x-auto rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[12px] text-ink", children: snippets.url }), _jsx("a", { href: snippets.url, target: "_blank", rel: "noreferrer", className: "rounded-md bg-accent px-3 py-2 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover", children: "Open" })] })] }), _jsx(Snippet, { label: "iframe", hint: "One tag, no JavaScript, fixed height.", value: snippets.iframeSnippet }), _jsx(Snippet, { label: "iframe with auto-resize", hint: "Adds a listener that follows the page as fields appear and as the thank-you replaces the form.", value: snippets.scriptSnippet })] }));
16
+ return (_jsxs("div", { className: "max-w-2xl space-y-5", children: [_jsx(SectionHeader, { title: "Embed", description: "Hosted page is the standalone URL with Kelpie chrome. The iframe snippets load a bare form \u2014 fields only \u2014 so they sit inside your own site." }), _jsxs("div", { children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "Hosted page" }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("code", { className: "flex-1 overflow-x-auto rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[12px] text-ink", children: snippets.url }), _jsx("a", { href: snippets.url, target: "_blank", rel: "noreferrer", className: "rounded-md bg-accent px-3 py-2 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover", children: "Open" })] })] }), _jsx(Snippet, { label: "iframe", hint: "One tag, no JavaScript, fixed height.", value: snippets.iframeSnippet, onPreview: () => {
17
+ setPreview('fixed');
18
+ } }), _jsx(Snippet, { label: "iframe with auto-resize", hint: "Adds a listener that follows the page as fields appear and as the thank-you replaces the form.", value: snippets.scriptSnippet, onPreview: () => {
19
+ setPreview('resize');
20
+ } }), preview !== null && (_jsx(EmbedPreviewModal, { formId: form.id, formName: form.name, formTitle: form.title, url: snippets.embedUrl, mode: preview, onClose: () => {
21
+ setPreview(null);
22
+ } }))] }));
15
23
  }
16
- function Snippet({ label, hint, value, }) {
17
- return (_jsxs("div", { children: [_jsxs("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: [_jsx("span", { className: "text-[12px] font-medium text-ink", children: label }), _jsx(CopyButton, { value: value, label: `Copy the ${label} snippet` })] }), _jsx("textarea", { readOnly: true, value: value, rows: value.split('\n').length + 1, "aria-label": `${label} snippet`, className: "w-full resize-y rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[11px] text-ink outline-none" }), _jsx("p", { className: "mt-1 text-[11px] text-ink-faint", children: hint })] }));
24
+ function Snippet({ label, hint, value, onPreview, }) {
25
+ return (_jsxs("div", { children: [_jsxs("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: [_jsx("span", { className: "text-[12px] font-medium text-ink", children: label }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: onPreview, className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover", children: "Preview" }), _jsx(CopyButton, { value: value, label: `Copy the ${label} snippet` })] })] }), _jsx("textarea", { readOnly: true, value: value, rows: value.split('\n').length + 1, "aria-label": `${label} snippet`, className: "w-full resize-y rounded-md border border-border bg-surface-raised px-3 py-2 font-mono text-[11px] text-ink outline-none" }), _jsx("p", { className: "mt-1 text-[11px] text-ink-faint", children: hint })] }));
26
+ }
27
+ /**
28
+ * Frames the hosted embed the way each snippet would: fixed 720px for the plain
29
+ * iframe, or listening for the height postMessage when previewing auto-resize.
30
+ */
31
+ function EmbedPreviewModal({ formId, formName, formTitle, url, mode, onClose, }) {
32
+ const titleId = useId();
33
+ const heading = formTitle.trim().length > 0 ? formTitle : formName;
34
+ const [height, setHeight] = useState(720);
35
+ useEffect(() => {
36
+ if (mode !== 'resize') {
37
+ return;
38
+ }
39
+ function onMessage(event) {
40
+ const data = event.data;
41
+ if (data === null ||
42
+ typeof data !== 'object' ||
43
+ data.kelpie !== 'height' ||
44
+ data.formId !== formId ||
45
+ typeof data.height !== 'number' ||
46
+ !Number.isFinite(data.height)) {
47
+ return;
48
+ }
49
+ setHeight(Math.max(320, Math.ceil(data.height)));
50
+ }
51
+ window.addEventListener('message', onMessage);
52
+ return () => {
53
+ window.removeEventListener('message', onMessage);
54
+ };
55
+ }, [formId, mode]);
56
+ useEffect(() => {
57
+ function onKeyDown(event) {
58
+ if (event.key === 'Escape') {
59
+ onClose();
60
+ }
61
+ }
62
+ window.addEventListener('keydown', onKeyDown);
63
+ return () => {
64
+ window.removeEventListener('keydown', onKeyDown);
65
+ };
66
+ }, [onClose]);
67
+ return (_jsx("div", { className: "fixed inset-0 z-50 flex items-end justify-center bg-ink/40 p-4 sm:items-center", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, onClick: onClose, children: _jsxs("div", { className: "animate-slide-in flex max-h-[90vh] w-full max-w-lg flex-col overflow-hidden rounded-md border border-border bg-surface-raised shadow-lg", onClick: (event) => {
68
+ event.stopPropagation();
69
+ }, children: [_jsxs("div", { className: "flex shrink-0 items-start justify-between gap-3 border-b border-border px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("h2", { id: titleId, className: "truncate text-[14px] font-semibold text-ink", children: ["Preview \u00B7 ", heading] }), _jsx("p", { className: "mt-0.5 text-[11px] text-ink-faint", children: mode === 'resize'
70
+ ? 'Bare iframe embed with auto-resize — fields only, height follows the form.'
71
+ : 'Bare iframe embed — fields only, fixed height.' })] }), _jsx("button", { type: "button", onClick: onClose, className: "shrink-0 rounded-md px-2 py-1 text-[12px] font-medium text-ink-muted transition hover:text-ink", children: "Close" })] }), _jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto bg-[#f4f4f5] p-4", children: [_jsx("div", { className: "overflow-hidden rounded-md border border-[#d4d4d8] bg-white shadow-sm", children: _jsx("iframe", { src: url, title: `${heading} preview`, style: {
72
+ width: '100%',
73
+ border: 0,
74
+ height: mode === 'fixed' ? '720px' : `${String(height)}px`,
75
+ colorScheme: 'normal',
76
+ }, className: "block bg-transparent" }) }), _jsx("p", { className: "mt-2 text-center text-[11px] text-ink-faint", children: "Simulated host page \u2014 the iframe uses its own neutral styles, not Kelpie's." })] })] }) }));
18
77
  }
19
78
  //# sourceMappingURL=EmbedPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmbedPanel.js","sourceRoot":"","sources":["../../../src/pages/forms/EmbedPanel.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAoC,CAAA;AAelE,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAmB;IAClD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAE5D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,CAAA;IACrC,CAAC;IAED,IAAI,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,KAAC,YAAY,IAAC,KAAK,EAAC,6BAAwB,GAAG,CAAA;IACxD,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,aAAa,IACZ,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,gFAAgF,GAC5F,EAEF,0BACE,eAAM,SAAS,EAAC,+CAA+C,4BAAmB,EAClF,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,mHAAmH,YAChI,QAAQ,CAAC,GAAG,GACR,EACP,YACE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAClB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,YAAY,EAChB,SAAS,EAAC,0GAA0G,qBAGlH,IACA,IACF,EAEN,KAAC,OAAO,IACN,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,uCAAuC,EAC5C,KAAK,EAAE,QAAQ,CAAC,aAAa,GAC7B,EACF,KAAC,OAAO,IACN,KAAK,EAAC,yBAAyB,EAC/B,IAAI,EAAC,gGAAgG,EACrG,KAAK,EAAE,QAAQ,CAAC,aAAa,GAC7B,IACE,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EACf,KAAK,EACL,IAAI,EACJ,KAAK,GAKN;IACC,OAAO,CACL,0BACE,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAM,SAAS,EAAC,kCAAkC,YAAE,KAAK,GAAQ,EACjE,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,KAAK,UAAU,GAAI,IAC5D,EACN,mBACE,QAAQ,QACR,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,gBACtB,GAAG,KAAK,UAAU,EAC9B,SAAS,EAAC,yHAAyH,GACnI,EACF,YAAG,SAAS,EAAC,iCAAiC,YAAE,IAAI,GAAK,IACrD,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"EmbedPanel.js","sourceRoot":"","sources":["../../../src/pages/forms/EmbedPanel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsEditor.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/FieldsEditor.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAA2D,MAAM,iBAAiB,CAAA;AAgDpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2G3E"}
1
+ {"version":3,"file":"FieldsEditor.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/FieldsEditor.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,IAAI,EAKL,MAAM,iBAAiB,CAAA;AAsDxB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkK3E"}
@@ -1,16 +1,21 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors, } from '@dnd-kit/core';
3
3
  import { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
4
4
  import { CSS } from '@dnd-kit/utilities';
5
5
  import { FORM_FIELD_MAP_TARGET_LABELS, FORM_OPTION_VALUE_TYPES } from '@kelpie/schemas';
6
- import { useEffect, useState } from 'react';
6
+ import { useEffect, useRef, useState } from 'react';
7
+ import { useConsentPurposes } from '../../api/resources/consentPurposes.js';
7
8
  import { useUpdateFormFields } from '../../api/resources/forms.js';
8
9
  import { ErrorPanel } from '../../components/QueryState.js';
9
- import { SectionHeader } from '../../components/SectionHeader.js';
10
+ import { AddFieldMenu } from './AddFieldMenu.js';
10
11
  import { FIELD_TYPE_OPTIONS, MAP_TARGET_OPTIONS, editField, fieldsChanged, findProblems, insertField, isUsable, removeField, reorderFields, toEditableFields, toFieldInputs, typeForTarget, } from './fieldList.js';
11
- import { NEW_FIELD } from './template.js';
12
12
  /**
13
- * The field builder.
13
+ * The field builder: the form as a visitor will see it, edited in place.
14
+ *
15
+ * The left column renders the fields the way the embed does — labels, required
16
+ * markers, placeholders, the Submit button. Clicking a field selects it and the
17
+ * panel beside the preview edits its settings; the anchor that appears on hover
18
+ * drags it up and down; "Add field" offers ready-made fields to append.
14
19
  *
15
20
  * Explicitly saved rather than saved per keystroke, unlike the inline editing
16
21
  * everywhere else in the app. A write replaces the whole list, so an
@@ -30,37 +35,64 @@ function localFieldId() {
30
35
  const inputClass = 'w-full rounded-md border border-border bg-surface-raised px-2.5 py-1.5 text-[13px] outline-none focus:border-accent focus:ring-2 focus:ring-accent/20';
31
36
  export function FieldsEditor({ form }) {
32
37
  const [fields, setFields] = useState(() => toEditableFields(form));
38
+ const [selectedId, setSelectedId] = useState(null);
33
39
  const updateFields = useUpdateFormFields();
40
+ const fieldsRef = useRef(fields);
41
+ fieldsRef.current = fields;
34
42
  const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }), useSensor(KeyboardSensor));
35
43
  // A save answers with the stored list, ids and all. Re-reading it here is what
36
- // turns the local ids of newly added fields into the real ones.
44
+ // turns the local ids of newly added fields into the real ones. The selection
45
+ // survives by position: a just-added field comes back at the same index under
46
+ // the id the server gave it.
37
47
  useEffect(() => {
38
- setFields(toEditableFields(form));
48
+ const next = toEditableFields(form);
49
+ setSelectedId((current) => {
50
+ if (current === null || next.some((field) => field.id === current)) {
51
+ return current;
52
+ }
53
+ const index = fieldsRef.current.findIndex((field) => field.id === current);
54
+ return index >= 0 ? (next[index]?.id ?? null) : null;
55
+ });
56
+ setFields(next);
39
57
  }, [form]);
40
58
  const problems = findProblems(fields, form.createDeal);
41
59
  const changed = fieldsChanged(form, fields);
60
+ const selected = fields.find((field) => field.id === selectedId);
42
61
  function onDragEnd(event) {
43
62
  const overId = event.over?.id;
44
63
  if (overId !== undefined) {
45
64
  setFields((current) => reorderFields(current, String(event.active.id), String(overId)));
46
65
  }
47
66
  }
67
+ function addField(input) {
68
+ const added = { ...input, id: localFieldId() };
69
+ setFields((current) => insertField(current, added, selectedId));
70
+ setSelectedId(added.id);
71
+ }
48
72
  function save() {
49
73
  updateFields.run({ id: form.id, fields: toFieldInputs(fields) });
50
74
  }
51
- return (_jsxs("div", { className: "max-w-3xl", children: [_jsx(SectionHeader, { title: "Fields", description: "Drag to reorder. What a field maps to decides what a submission writes.", onAdd: () => {
52
- setFields((current) => insertField(current, { ...NEW_FIELD, id: localFieldId() }, null));
53
- }, addLabel: "Add field" }), problems.list.map((problem) => (_jsx("p", { className: "mb-2 text-[12px] text-danger", children: problem }, problem))), _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: onDragEnd, children: _jsx(SortableContext, { items: fields.map((field) => field.id), strategy: verticalListSortingStrategy, children: _jsx("ul", { className: "flex flex-col gap-2", children: fields.map((field) => (_jsx(SortableField, { field: field, problem: problems.byField.get(field.id), onChange: (change) => {
54
- setFields((current) => editField(current, field.id, change));
55
- }, onRemove: () => {
56
- setFields((current) => removeField(current, field.id));
57
- }, onAddBelow: () => {
58
- setFields((current) => insertField(current, { ...NEW_FIELD, id: localFieldId() }, field.id));
59
- } }, field.id))) }) }) }), fields.length === 0 && (_jsx("p", { className: "rounded-md border border-dashed border-border px-6 py-10 text-center text-[13px] text-ink-muted", children: "No fields yet. A form needs at least an email field." })), updateFields.error !== null && (_jsx("div", { className: "mt-3", children: _jsx(ErrorPanel, { error: updateFields.error }) })), _jsxs("div", { className: "mt-4 flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: save, disabled: !changed || !isUsable(problems) || updateFields.isPending, className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover disabled:opacity-50", children: updateFields.isPending ? 'Saving…' : 'Save fields' }), changed && (_jsx("button", { type: "button", onClick: () => {
75
+ return (_jsxs("div", { children: [_jsxs("div", { className: "mb-3 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "text-[13px] font-semibold text-ink", children: "Fields" }), _jsx("p", { className: "mt-0.5 text-[11px] text-ink-faint", children: "Click a field to edit it. Drag the anchor to reorder. What a field maps to decides what a submission writes." })] }), _jsx(AddFieldMenu, { fields: fields, onAdd: addField })] }), problems.list.map((problem) => (_jsx("p", { className: "mb-2 text-[12px] text-danger", children: problem }, problem))), _jsxs("div", { className: "grid items-start gap-6 lg:grid-cols-[minmax(0,1fr)_300px]", children: [_jsxs("div", { className: "rounded-lg border border-border bg-surface-raised p-4 sm:p-6", children: [fields.length === 0 ? (_jsx("p", { className: "rounded-md border border-dashed border-border px-6 py-10 text-center text-[13px] text-ink-muted", children: "No fields yet. A form needs at least an email field." })) : (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: onDragEnd, children: _jsx(SortableContext, { items: fields.map((field) => field.id), strategy: verticalListSortingStrategy, children: _jsx("ul", { className: "flex flex-col gap-1", children: fields.map((field) => (_jsx(PreviewField, { field: field, selected: field.id === selectedId, problem: problems.byField.get(field.id), onSelect: () => {
76
+ setSelectedId(field.id);
77
+ } }, field.id))) }) }) })), _jsx("div", { className: "mt-4 pl-7", "aria-hidden": "true", children: _jsx("span", { className: "pointer-events-none inline-flex rounded-md bg-accent px-4 py-2 text-[13px] font-semibold text-accent-fg", children: "Submit" }) })] }), selected === undefined ? (_jsx("aside", { className: "rounded-lg border border-dashed border-border p-4 text-[13px] text-ink-muted lg:sticky lg:top-4", children: "Select a field in the preview to edit its label, mapping, and type. \"Add field\" appends a new one." })) : (_jsx(FieldSettings, { field: selected, problem: problems.byField.get(selected.id), onChange: (change) => {
78
+ setFields((current) => editField(current, selected.id, change));
79
+ }, onRemove: () => {
80
+ setFields((current) => removeField(current, selected.id));
81
+ setSelectedId(null);
82
+ }, onClose: () => {
83
+ setSelectedId(null);
84
+ } }))] }), updateFields.error !== null && (_jsx("div", { className: "mt-3", children: _jsx(ErrorPanel, { error: updateFields.error }) })), _jsxs("div", { className: "mt-4 flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: save, disabled: !changed || !isUsable(problems) || updateFields.isPending, className: "rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg transition hover:bg-accent-hover disabled:opacity-50", children: updateFields.isPending ? 'Saving…' : 'Save fields' }), changed && (_jsx("button", { type: "button", onClick: () => {
60
85
  setFields(toEditableFields(form));
86
+ setSelectedId(null);
61
87
  }, className: "text-[12px] font-medium text-ink-muted transition hover:text-ink", children: "Discard changes" })), !changed && _jsx("span", { className: "text-[12px] text-ink-faint", children: "Saved" })] })] }));
62
88
  }
63
- function SortableField({ field, problem, onChange, onRemove, onAddBelow, }) {
89
+ /**
90
+ * One field, rendered the way the embed renders it and inert: the control never
91
+ * takes input here. A full-row button on top is what selects the field, so the
92
+ * click target is the whole thing a visitor would see, and the drag anchor
93
+ * beside the row is the one place a press means "move" instead of "edit".
94
+ */
95
+ function PreviewField({ field, selected, problem, onSelect }) {
64
96
  const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
65
97
  id: field.id,
66
98
  });
@@ -68,23 +100,82 @@ function SortableField({ field, problem, onChange, onRemove, onAddBelow, }) {
68
100
  transform: CSS.Transform.toString(transform),
69
101
  transition,
70
102
  opacity: isDragging ? 0.35 : 1,
71
- }, className: [
72
- 'rounded-md border bg-surface-raised p-3',
73
- problem === undefined ? 'border-border' : 'border-danger/50',
74
- ].join(' '), children: [_jsxs("div", { className: "flex items-start gap-2", children: [_jsx("button", { type: "button", className: "cursor-grab touch-none px-1 py-2 text-[10px] text-ink-faint active:cursor-grabbing", "aria-label": `Drag ${field.label} to reorder`, ...attributes, ...listeners, children: "\u22EE\u22EE" }), _jsxs("div", { className: "grid flex-1 gap-2 sm:grid-cols-2", children: [_jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Label" }), _jsx("input", { className: inputClass, value: field.label, onChange: (event) => {
75
- onChange({ label: event.target.value });
76
- } })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Maps to" }), _jsx("select", { className: inputClass, value: field.mapTo, onChange: (event) => {
77
- const mapTo = event.target.value;
78
- onChange({ mapTo, type: typeForTarget(mapTo, field.type) });
79
- }, children: MAP_TARGET_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: FORM_FIELD_MAP_TARGET_LABELS[option.value] }, option.value))) })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Type" }), _jsx("select", { className: inputClass, value: field.type, onChange: (event) => {
80
- onChange({ type: event.target.value });
81
- }, children: FIELD_TYPE_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value))) })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Placeholder" }), _jsx("input", { className: inputClass, value: field.placeholder ?? '', onChange: (event) => {
82
- onChange({ placeholder: event.target.value.length === 0 ? null : event.target.value });
83
- } })] })] }), _jsxs("div", { className: "flex shrink-0 flex-col items-end gap-1", children: [_jsx("button", { type: "button", onClick: onRemove, "aria-label": `Remove ${field.label}`, className: "rounded-md px-1.5 py-1 text-[12px] text-ink-faint transition hover:text-danger", children: "\u2715" }), _jsx("button", { type: "button", onClick: onAddBelow, "aria-label": `Add a field below ${field.label}`, className: "rounded-md px-1.5 py-1 text-[12px] text-ink-faint transition hover:text-accent", children: "+" })] })] }), _jsxs("label", { className: "mt-2 flex items-center gap-2 pl-7 text-[12px] text-ink-muted", children: [_jsx("input", { type: "checkbox", checked: field.required ?? false, onChange: (event) => {
84
- onChange({ required: event.target.checked });
85
- } }), "Required"] }), field.type === 'select' && (_jsx(OptionsEditor, { options: field.options ?? [], onChange: (options) => {
86
- onChange({ options });
87
- } })), problem !== undefined && _jsx("p", { className: "mt-2 pl-7 text-[12px] text-danger", children: problem })] }));
103
+ }, className: "group flex items-start gap-0.5", children: [_jsx("button", { type: "button", className: "mt-8 shrink-0 cursor-grab touch-none rounded-md px-1 py-1 text-[10px] leading-none text-ink-faint opacity-0 transition hover:text-ink focus-visible:opacity-100 active:cursor-grabbing group-hover:opacity-100", "aria-label": `Drag ${field.label} to reorder`, ...attributes, ...listeners, children: "\u22EE\u22EE" }), _jsxs("div", { className: [
104
+ 'relative min-w-0 flex-1 rounded-md p-2.5 transition',
105
+ selected
106
+ ? 'ring-2 ring-accent'
107
+ : problem === undefined
108
+ ? 'ring-1 ring-transparent group-hover:ring-border-strong'
109
+ : 'ring-1 ring-danger/50',
110
+ ].join(' '), children: [_jsx("button", { type: "button", onClick: onSelect, "aria-label": `Edit ${field.label}`, "aria-pressed": selected, className: "absolute inset-0 z-10 cursor-pointer rounded-md" }), _jsxs("div", { className: "pointer-events-none", children: [_jsxs("span", { className: "mb-1 block text-[13px] font-medium text-ink", children: [field.label, (field.required ?? false) && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsx(PreviewControl, { field: field }), problem !== undefined && _jsx("p", { className: "mt-1.5 text-[12px] text-danger", children: problem })] })] })] }));
111
+ }
112
+ /** The control itself, matching what the embed serves for each field type. */
113
+ function PreviewControl({ field }) {
114
+ const controlClass = 'w-full rounded-md border border-border bg-surface px-3 py-2 text-[13px] text-ink placeholder:text-ink-faint';
115
+ if (field.type === 'textarea') {
116
+ return (_jsx("textarea", { readOnly: true, tabIndex: -1, rows: 3, placeholder: field.placeholder ?? undefined, className: controlClass }));
117
+ }
118
+ if (field.type === 'select') {
119
+ const options = field.options ?? [];
120
+ // Remounted whenever the choices change, so the uncontrolled select cannot
121
+ // show a choice that no longer exists. The embed gives a non-required
122
+ // select a blank "—" first, and the preview shows the same.
123
+ return (_jsxs("select", { tabIndex: -1, defaultValue: "", className: controlClass, children: [(field.required ?? false) === false && _jsx("option", { value: "", children: "\u2014" }), options.map((option) => (_jsx("option", { value: option.key, children: option.value }, option.key)))] }, options.map((option) => option.key).join('\n')));
124
+ }
125
+ if (field.type === 'consent') {
126
+ return _jsx(ConsentPreview, { field: field });
127
+ }
128
+ if (field.type === 'notice') {
129
+ return _jsx(NoticePreview, { field: field });
130
+ }
131
+ return (_jsx("input", { readOnly: true, tabIndex: -1, type: field.type === 'email' ? 'email' : 'text', placeholder: field.placeholder ?? undefined, className: controlClass }));
132
+ }
133
+ /**
134
+ * The consent preview — matches what the visitor sees: a statement above,
135
+ * one checkbox per selected purpose below, each labelled by the purpose. The
136
+ * label above (in FieldRow) still shows the field heading.
137
+ */
138
+ /**
139
+ * The notice preview — prose only, styled like the hosted embed. There is no
140
+ * checkbox because a notice is granted implicitly by submission.
141
+ */
142
+ function NoticePreview({ field }) {
143
+ const statement = (field.statement ?? '').trim();
144
+ return (_jsx("div", { children: statement.length === 0 ? (_jsx("p", { className: "text-[11px] italic text-ink-faint", children: "Add a statement in the settings panel \u2014 the notice text the visitor reads." })) : (_jsx("p", { className: "rounded-md border border-border bg-surface px-3 py-2 text-[12px] leading-snug text-ink-muted whitespace-pre-line", children: statement })) }));
145
+ }
146
+ function ConsentPreview({ field }) {
147
+ const purposes = useConsentPurposes({ sort: 'sort_order', limit: 200 });
148
+ const labelById = new Map(purposes.records.map((purpose) => [purpose.id, purpose.label]));
149
+ const statement = field.statement ?? field.label;
150
+ const ids = field.consentPurposeIds ?? [];
151
+ const overrides = field.consentPurposeLabels ?? {};
152
+ return (_jsxs("div", { className: "space-y-1.5", children: [_jsx("p", { className: "text-[12px] text-ink-muted", children: statement }), ids.length === 0 ? (_jsx("p", { className: "text-[11px] italic text-ink-faint", children: "Pick at least one purpose in the settings panel." })) : (ids.map((id) => (_jsxs("div", { className: "flex items-start gap-2", children: [_jsx("input", { readOnly: true, tabIndex: -1, type: "checkbox", className: "mt-0.5" }), _jsx("span", { className: "text-[13px] text-ink", children: overrides[id] ?? labelById.get(id) ?? id })] }, id))))] }));
153
+ }
154
+ /** The panel a selected field's settings edit in. */
155
+ function FieldSettings({ field, problem, onChange, onRemove, onClose, }) {
156
+ return (_jsxs("aside", { className: "rounded-lg border border-border bg-surface-raised p-4 lg:sticky lg:top-4", children: [_jsxs("div", { className: "mb-3 flex items-center justify-between gap-2", children: [_jsx("h3", { className: "text-[12px] font-semibold text-ink", children: "Field settings" }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close field settings", className: "rounded-md px-1.5 py-1 text-[12px] text-ink-faint transition hover:text-ink", children: "\u2715" })] }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Label" }), _jsx("input", { className: inputClass, value: field.label, onChange: (event) => {
157
+ onChange({ label: event.target.value });
158
+ } })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Maps to" }), _jsx("select", { className: inputClass, value: field.mapTo, onChange: (event) => {
159
+ const mapTo = event.target.value;
160
+ onChange({ mapTo, type: typeForTarget(mapTo, field.type) });
161
+ }, children: MAP_TARGET_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: FORM_FIELD_MAP_TARGET_LABELS[option.value] }, option.value))) })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Type" }), _jsx("select", { className: inputClass, value: field.type, onChange: (event) => {
162
+ onChange({ type: event.target.value });
163
+ }, children: FIELD_TYPE_OPTIONS.map((option) => (_jsx("option", { value: option.value, children: option.label }, option.value))) })] }), _jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Placeholder" }), _jsx("input", { className: inputClass, value: field.placeholder ?? '', onChange: (event) => {
164
+ onChange({ placeholder: event.target.value.length === 0 ? null : event.target.value });
165
+ } })] }), _jsxs("label", { className: "flex items-center gap-2 text-[12px] text-ink-muted", children: [_jsx("input", { type: "checkbox", checked: field.required ?? false, onChange: (event) => {
166
+ onChange({ required: event.target.checked });
167
+ } }), "Required"] }), field.type === 'select' && (_jsx(OptionsEditor, { options: field.options ?? [], onChange: (options) => {
168
+ onChange({ options });
169
+ } })), (field.type === 'consent' || field.type === 'notice') && (_jsxs(_Fragment, { children: [_jsxs("label", { className: "block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: field.type === 'notice'
170
+ ? 'Notice (the text the visitor reads)'
171
+ : 'Statement (intro sentence above the checkboxes)' }), _jsx("textarea", { className: inputClass, rows: field.type === 'notice' ? 5 : 3, value: field.statement ?? '', onChange: (event) => {
172
+ const value = event.target.value;
173
+ onChange({ statement: value.length === 0 ? null : value });
174
+ }, placeholder: field.type === 'notice'
175
+ ? 'By submitting this form you agree to us storing your information and using it to contact you about your enquiry.'
176
+ : 'Please tell us how we can contact you.' })] }), _jsx(ConsentPurposePicker, { mode: field.type === 'notice' ? 'notice' : 'checkbox', value: field.consentPurposeIds ?? [], labels: field.consentPurposeLabels ?? {}, onChange: (consentPurposeIds, consentPurposeLabels) => {
177
+ onChange({ consentPurposeIds, consentPurposeLabels });
178
+ } })] })), problem !== undefined && _jsx("p", { className: "text-[12px] text-danger", children: problem }), _jsx("button", { type: "button", onClick: onRemove, className: "self-start rounded-md border border-border px-2.5 py-1.5 text-[12px] font-medium text-danger transition hover:border-danger/50 hover:bg-danger-soft", children: "Remove field" })] })] }));
88
179
  }
89
180
  /**
90
181
  * A select's choices.
@@ -95,11 +186,11 @@ function SortableField({ field, problem, onChange, onRemove, onAddBelow, }) {
95
186
  * is the whole reason the two are separate.
96
187
  */
97
188
  function OptionsEditor({ options, onChange, }) {
98
- return (_jsxs("div", { className: "mt-3 space-y-2 pl-7", children: [_jsx("span", { className: "block text-[11px] font-medium text-ink-faint", children: "Options" }), options.map((option, index) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { className: `${inputClass} font-mono text-[12px]`, "aria-label": `Option ${String(index + 1)} key`, value: option.key, onChange: (event) => {
189
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("span", { className: "block text-[11px] font-medium text-ink-faint", children: "Options" }), options.map((option, index) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { className: `${inputClass} font-mono text-[12px]`, "aria-label": `Option ${String(index + 1)} key`, value: option.key, onChange: (event) => {
99
190
  onChange(options.map((existing, at) => at === index ? { ...existing, key: event.target.value } : existing));
100
191
  } }), _jsx("input", { className: inputClass, "aria-label": `Option ${String(index + 1)} label`, value: option.value, onChange: (event) => {
101
192
  onChange(options.map((existing, at) => at === index ? { ...existing, value: event.target.value } : existing));
102
- } }), _jsx("select", { className: `${inputClass} w-28`, "aria-label": `Option ${String(index + 1)} value type`, value: option.valueType ?? 'string', onChange: (event) => {
193
+ } }), _jsx("select", { className: `${inputClass} w-24`, "aria-label": `Option ${String(index + 1)} value type`, value: option.valueType ?? 'string', onChange: (event) => {
103
194
  onChange(options.map((existing, at) => at === index
104
195
  ? { ...existing, valueType: event.target.value }
105
196
  : existing));
@@ -112,4 +203,56 @@ function OptionsEditor({ options, onChange, }) {
112
203
  ]);
113
204
  }, className: "text-[12px] font-medium text-ink-muted transition hover:text-accent", children: "+ Add option" })] }));
114
205
  }
206
+ /**
207
+ * Picks the workspace consent purposes this field offers, with a text input
208
+ * beside each selected purpose so the admin can override the checkbox text.
209
+ * The override is bound to the same purpose the checkbox grants — the wording
210
+ * changes, the mapping never does. An empty override falls back to the
211
+ * workspace purpose's own label at render time.
212
+ */
213
+ function ConsentPurposePicker({ mode, value, labels, onChange, }) {
214
+ const purposes = useConsentPurposes({ sort: 'sort_order', limit: 200 });
215
+ if (purposes.isLoading) {
216
+ return _jsx("p", { className: "text-[12px] text-ink-muted", children: "Loading consent purposes\u2026" });
217
+ }
218
+ if (purposes.records.length === 0) {
219
+ return (_jsx("p", { className: "text-[12px] text-ink-muted", children: "No consent purposes yet. Add one on the Privacy admin page, then pick it here." }));
220
+ }
221
+ const chosen = new Set(value);
222
+ function toggle(id, checked) {
223
+ // Preserve the workspace's purpose order so the visitor sees the checkboxes
224
+ // in a consistent order regardless of which one the admin ticked first.
225
+ const order = purposes.records.map((purpose) => purpose.id);
226
+ const nextIds = order.filter((purposeId) => purposeId === id ? checked : chosen.has(purposeId));
227
+ // A deselected purpose drops its override too — silent orphan overrides
228
+ // would resurface if the admin ticked it again later.
229
+ const nextLabels = {};
230
+ for (const [key, val] of Object.entries(labels)) {
231
+ if (nextIds.includes(key))
232
+ nextLabels[key] = val;
233
+ }
234
+ onChange(nextIds, nextLabels);
235
+ }
236
+ function setLabel(id, text) {
237
+ const nextLabels = { ...labels };
238
+ if (text.length === 0) {
239
+ delete nextLabels[id];
240
+ }
241
+ else {
242
+ nextLabels[id] = text;
243
+ }
244
+ onChange(value, nextLabels);
245
+ }
246
+ const legend = mode === 'notice'
247
+ ? 'Purposes granted when the visitor submits (implicit consent)'
248
+ : 'Consent purposes (each selected one becomes a checkbox)';
249
+ return (_jsxs("fieldset", { className: "block", children: [_jsx("legend", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: legend }), _jsx("div", { className: "flex flex-col gap-2", children: purposes.records.map((purpose) => {
250
+ const isChosen = chosen.has(purpose.id);
251
+ return (_jsxs("div", { className: "rounded-md border border-border p-2", children: [_jsxs("label", { className: "flex items-center gap-2 text-[13px] text-ink", children: [_jsx("input", { type: "checkbox", checked: isChosen, onChange: (event) => {
252
+ toggle(purpose.id, event.target.checked);
253
+ } }), purpose.label] }), isChosen && mode === 'checkbox' && (_jsxs("label", { className: "mt-1.5 block", children: [_jsx("span", { className: "mb-1 block text-[11px] font-medium text-ink-faint", children: "Checkbox text (defaults to the purpose label)" }), _jsx("input", { className: inputClass, value: labels[purpose.id] ?? '', onChange: (event) => {
254
+ setLabel(purpose.id, event.target.value);
255
+ }, placeholder: purpose.label })] }))] }, purpose.id));
256
+ }) })] }));
257
+ }
115
258
  //# sourceMappingURL=FieldsEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsEditor.js","sourceRoot":"","sources":["../../../src/pages/forms/FieldsEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FieldsEditor.js","sourceRoot":"","sources":["../../../src/pages/forms/FieldsEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Form } from '@kelpie/schemas';
2
+ export interface FormActionsProps {
3
+ readonly form: Form;
4
+ }
5
+ export declare function FormActions({ form }: FormActionsProps): React.JSX.Element;
6
+ //# sourceMappingURL=FormActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormActions.d.ts","sourceRoot":"","sources":["../../../src/pages/forms/FormActions.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAkC,MAAM,iBAAiB,CAAA;AAkC3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+FzE"}