@sealcode/jdd-editor 0.1.5 → 0.1.7

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 (117) hide show
  1. package/.nyc_output/29e7bb87-9f10-462e-84d8-ec620cfa9e6b.json +1 -0
  2. package/.nyc_output/7d7104e8-f179-427b-b4bd-30f78397e4f1.json +1 -0
  3. package/.nyc_output/9bfa248d-4f8e-4d29-9c47-d1a3961c5254.json +1 -0
  4. package/.nyc_output/processinfo/29e7bb87-9f10-462e-84d8-ec620cfa9e6b.json +1 -0
  5. package/.nyc_output/processinfo/7d7104e8-f179-427b-b4bd-30f78397e4f1.json +1 -0
  6. package/.nyc_output/processinfo/9bfa248d-4f8e-4d29-9c47-d1a3961c5254.json +1 -0
  7. package/.nyc_output/processinfo/index.json +1 -0
  8. package/.xunit +2 -0
  9. package/assets/styles/components.jdd-page.css +3 -2
  10. package/coverage/clover.xml +846 -0
  11. package/dist/src/inputs/component-input-image.js +2 -1
  12. package/dist/src/inputs/component-input-image.js.map +2 -2
  13. package/lib/src/component-preview-actions.js +439 -0
  14. package/lib/src/component-preview-actions.js.map +7 -0
  15. package/lib/src/components.sreact.js +93 -0
  16. package/lib/src/components.sreact.js.map +7 -0
  17. package/{dist/src → lib/src/controllers}/autogrow-textarea.stimulus.js.map +1 -1
  18. package/{dist/src → lib/src/controllers}/component-debugger.stimulus.js +3 -0
  19. package/lib/src/controllers/component-debugger.stimulus.js.map +7 -0
  20. package/{dist/src → lib/src/controllers}/exportable-textarea.stimulus.js.map +1 -1
  21. package/{dist/src → lib/src/controllers}/input-image-preview.stimulus.js.map +1 -1
  22. package/{dist/src → lib/src/controllers}/jdd-table-paste.stimulus.js.map +1 -1
  23. package/{dist/src → lib/src/controllers}/json-editor.stimulus.js.map +1 -1
  24. package/{dist/src → lib/src/controllers}/markdown-textarea.stimulus.js.map +1 -1
  25. package/lib/src/controllers/refresh-on-ts-changes.stimulus.js +90 -0
  26. package/lib/src/controllers/refresh-on-ts-changes.stimulus.js.map +7 -0
  27. package/lib/src/controllers/refresh-styles.stimulus.js +67 -0
  28. package/lib/src/controllers/refresh-styles.stimulus.js.map +7 -0
  29. package/{dist/src → lib/src/controllers}/submit-on-input.stimulus.js.map +1 -1
  30. package/{dist/src → lib/src/controllers}/toast.stimulus.js.map +1 -1
  31. package/lib/src/edit-jdd-field.js +94 -0
  32. package/lib/src/edit-jdd-field.js.map +7 -0
  33. package/lib/src/index.js +3 -0
  34. package/lib/src/index.js.map +7 -0
  35. package/lib/src/inputs/component-input-enum.js +30 -0
  36. package/lib/src/inputs/component-input-enum.js.map +7 -0
  37. package/lib/src/inputs/component-input-image.js +63 -0
  38. package/lib/src/inputs/component-input-image.js.map +7 -0
  39. package/lib/src/inputs/component-input-list.js +74 -0
  40. package/lib/src/inputs/component-input-list.js.map +7 -0
  41. package/lib/src/inputs/component-input-single-reference.js +31 -0
  42. package/lib/src/inputs/component-input-single-reference.js.map +7 -0
  43. package/lib/src/inputs/component-input-structured.js +36 -0
  44. package/lib/src/inputs/component-input-structured.js.map +7 -0
  45. package/lib/src/inputs/component-input-table.js +228 -0
  46. package/lib/src/inputs/component-input-table.js.map +7 -0
  47. package/lib/src/inputs/component-input.js +164 -0
  48. package/lib/src/inputs/component-input.js.map +7 -0
  49. package/lib/src/inputs/print-arg-path.js +7 -0
  50. package/lib/src/inputs/print-arg-path.js.map +7 -0
  51. package/lib/src/jdd-creator.js +131 -0
  52. package/lib/src/jdd-creator.js.map +7 -0
  53. package/lib/src/jdd-page.js +339 -0
  54. package/lib/src/jdd-page.js.map +7 -0
  55. package/lib/src/test.test.js +5 -0
  56. package/lib/src/test.test.js.map +7 -0
  57. package/package.json +1 -1
  58. package/src/inputs/component-input-image.ts +2 -1
  59. package/dist/src/component-debugger.stimulus.js.map +0 -7
  60. package/lib/component-preview-actions.js +0 -286
  61. package/lib/component-preview-actions.js.map +0 -1
  62. package/lib/components.sreact.js +0 -102
  63. package/lib/components.sreact.js.map +0 -1
  64. package/lib/controllers/autogrow-textarea.stimulus.js +0 -15
  65. package/lib/controllers/autogrow-textarea.stimulus.js.map +0 -1
  66. package/lib/controllers/component-debugger.stimulus.js +0 -188
  67. package/lib/controllers/component-debugger.stimulus.js.map +0 -1
  68. package/lib/controllers/exportable-textarea.stimulus.js +0 -79
  69. package/lib/controllers/exportable-textarea.stimulus.js.map +0 -1
  70. package/lib/controllers/input-image-preview.stimulus.js +0 -28
  71. package/lib/controllers/input-image-preview.stimulus.js.map +0 -1
  72. package/lib/controllers/jdd-table-paste.stimulus.js +0 -84
  73. package/lib/controllers/jdd-table-paste.stimulus.js.map +0 -1
  74. package/lib/controllers/json-editor.stimulus.js +0 -134
  75. package/lib/controllers/json-editor.stimulus.js.map +0 -1
  76. package/lib/controllers/markdown-textarea.stimulus.js +0 -186
  77. package/lib/controllers/markdown-textarea.stimulus.js.map +0 -1
  78. package/lib/controllers/refresh-on-ts-changes.stimulus.js +0 -123
  79. package/lib/controllers/refresh-on-ts-changes.stimulus.js.map +0 -1
  80. package/lib/controllers/refresh-styles.stimulus.js +0 -66
  81. package/lib/controllers/refresh-styles.stimulus.js.map +0 -1
  82. package/lib/controllers/submit-on-input.stimulus.js +0 -48
  83. package/lib/controllers/submit-on-input.stimulus.js.map +0 -1
  84. package/lib/controllers/toast.stimulus.js +0 -16
  85. package/lib/controllers/toast.stimulus.js.map +0 -1
  86. package/lib/edit-jdd-field.js +0 -102
  87. package/lib/edit-jdd-field.js.map +0 -1
  88. package/lib/index.js +0 -19
  89. package/lib/index.js.map +0 -1
  90. package/lib/inputs/component-input-enum.js +0 -25
  91. package/lib/inputs/component-input-enum.js.map +0 -1
  92. package/lib/inputs/component-input-image.js +0 -47
  93. package/lib/inputs/component-input-image.js.map +0 -1
  94. package/lib/inputs/component-input-list.js +0 -61
  95. package/lib/inputs/component-input-list.js.map +0 -1
  96. package/lib/inputs/component-input-single-reference.js +0 -36
  97. package/lib/inputs/component-input-single-reference.js.map +0 -1
  98. package/lib/inputs/component-input-structured.js +0 -42
  99. package/lib/inputs/component-input-structured.js.map +0 -1
  100. package/lib/inputs/component-input-table.js +0 -184
  101. package/lib/inputs/component-input-table.js.map +0 -1
  102. package/lib/inputs/component-input.js +0 -133
  103. package/lib/inputs/component-input.js.map +0 -1
  104. package/lib/inputs/print-arg-path.js +0 -7
  105. package/lib/inputs/print-arg-path.js.map +0 -1
  106. package/lib/jdd-creator.js +0 -113
  107. package/lib/jdd-creator.js.map +0 -1
  108. package/lib/jdd-page.js +0 -310
  109. package/lib/jdd-page.js.map +0 -1
  110. /package/{dist/src → lib/src/controllers}/autogrow-textarea.stimulus.js +0 -0
  111. /package/{dist/src → lib/src/controllers}/exportable-textarea.stimulus.js +0 -0
  112. /package/{dist/src → lib/src/controllers}/input-image-preview.stimulus.js +0 -0
  113. /package/{dist/src → lib/src/controllers}/jdd-table-paste.stimulus.js +0 -0
  114. /package/{dist/src → lib/src/controllers}/json-editor.stimulus.js +0 -0
  115. /package/{dist/src → lib/src/controllers}/markdown-textarea.stimulus.js +0 -0
  116. /package/{dist/src → lib/src/controllers}/submit-on-input.stimulus.js +0 -0
  117. /package/{dist/src → lib/src/controllers}/toast.stimulus.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import { tempstream } from "tempstream";
2
2
  import { printArgPath } from "./print-arg-path.js";
3
+ import { htmlEscape } from "escape-goat";
3
4
  function ComponentInputImage({
4
5
  arg_path,
5
6
  arg,
@@ -42,7 +43,7 @@ function ComponentInputImage({
42
43
  <input
43
44
  type="hidden"
44
45
  name="${`$${printArgPath(arg_path)}.old`}"
45
- value="${(value == null ? void 0 : value.token) || ""}"
46
+ value="${htmlEscape((value == null ? void 0 : value.token) || "")}"
46
47
  autocomplete="off"
47
48
  />
48
49
  </div>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/inputs/component-input-image.ts"],
4
- "sourcesContent": ["import type { Context } from \"koa\";\nimport type { FilePointer } from \"@sealcode/file-manager\";\nimport type { Image, JDDContext } from \"@sealcode/jdd\";\nimport type { StatefulPage } from \"@sealcode/sealgen\";\nimport type { ComponentPreviewActions } from \"../component-preview-actions.js\";\nimport type { JDDPageState } from \"../jdd-page.js\";\nimport { tempstream } from \"tempstream\";\nimport { printArgPath } from \"./print-arg-path.js\";\n\nexport function ComponentInputImage<State extends JDDPageState>({\n\targ_path,\n\targ,\n\tvalue,\n\tctx,\n\tpage,\n\tstate,\n\tmakeJDDContext,\n}: {\n\tstate: State;\n\targ_path: string[];\n\targ: Image;\n\tvalue: FilePointer | null;\n\tpage: StatefulPage<JDDPageState, typeof ComponentPreviewActions>;\n\tctx: Context;\n\tmakeJDDContext: (ctx: Context) => JDDContext;\n}): JSX.Element {\n\tconst jdd_context = makeJDDContext(ctx);\n\treturn tempstream/* HTML */ `<div style=\"margin-bottom: 10px\">\n\t\t<label\n\t\t\tstyle=\"display: flex; align-items: center; column-gap: 10px;\"\n\t\t\tdata-controller=\"input-image-preview\"\n\t\t>\n\t\t\t${arg_path.at(-1) || \"\"}\n\t\t\t<div class=\"image-preview-container\">\n\t\t\t\t${value &&\n\t\t\t\tjdd_context.render_image(value, {\n\t\t\t\t\tcontainer: {\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 40,\n\t\t\t\t\t\tobjectFit: \"cover\",\n\t\t\t\t\t},\n\t\t\t\t\tcrop: { width: 40, height: 40 },\n\t\t\t\t\tstyle: \"height: 40px; width: 40px;\",\n\t\t\t\t\talt: \"\",\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\tname=\"${`$${printArgPath(arg_path)}.new`}\"\n\t\t\t\tvalue=\"\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tdata-action=\"change->input-image-preview#handleChange\"\n\t\t\t\t${arg.hasParent(\"list\") ? \"multiple\" : \"\"}\n\t\t\t/>\n\t\t</label>\n\t\t<div>\n\t\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"${`$${printArgPath(arg_path)}.old`}\"\n\t\t\t\tvalue=\"${value?.token || \"\"}\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t/>\n\t\t</div>\n\t\t${page.makeActionButton(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\taction: \"remove_file\",\n\t\t\t\tlabel: \"\u274C\",\n\t\t\t},\n\t\t\targ_path\n\t\t)}\n\t</div>`;\n}\n"],
5
- "mappings": "AAMA,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAEtB,SAAS,oBAAgD;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAQgB;AACf,QAAM,cAAc,eAAe,GAAG;AACtC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,KAKH,SAAS,GAAG,EAAE,KAAK;AAAA;AAAA,MAElB,SACF,YAAY,aAAa,OAAO;AAAA,IAC/B,WAAW;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IACZ;AAAA,IACA,MAAM,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,IAC9B,OAAO;AAAA,IACP,KAAK;AAAA,EACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKO,IAAI,aAAa,QAAQ;AAAA;AAAA;AAAA;AAAA,MAI/B,IAAI,UAAU,MAAM,IAAI,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAM/B,IAAI,aAAa,QAAQ;AAAA,cACxB,+BAAO,UAAS;AAAA;AAAA;AAAA;AAAA,IAIzB,KAAK;AAAA,IACN;AAAA,IACA;AAAA,MACC,QAAQ;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IACA;AAAA,EACD;AAAA;AAEF;",
4
+ "sourcesContent": ["import type { Context } from \"koa\";\nimport type { FilePointer } from \"@sealcode/file-manager\";\nimport type { Image, JDDContext } from \"@sealcode/jdd\";\nimport type { StatefulPage } from \"@sealcode/sealgen\";\nimport type { ComponentPreviewActions } from \"../component-preview-actions.js\";\nimport type { JDDPageState } from \"../jdd-page.js\";\nimport { tempstream } from \"tempstream\";\nimport { printArgPath } from \"./print-arg-path.js\";\nimport { htmlEscape } from \"escape-goat\";\n\nexport function ComponentInputImage<State extends JDDPageState>({\n\targ_path,\n\targ,\n\tvalue,\n\tctx,\n\tpage,\n\tstate,\n\tmakeJDDContext,\n}: {\n\tstate: State;\n\targ_path: string[];\n\targ: Image;\n\tvalue: FilePointer | null;\n\tpage: StatefulPage<JDDPageState, typeof ComponentPreviewActions>;\n\tctx: Context;\n\tmakeJDDContext: (ctx: Context) => JDDContext;\n}): JSX.Element {\n\tconst jdd_context = makeJDDContext(ctx);\n\treturn tempstream/* HTML */ `<div style=\"margin-bottom: 10px\">\n\t\t<label\n\t\t\tstyle=\"display: flex; align-items: center; column-gap: 10px;\"\n\t\t\tdata-controller=\"input-image-preview\"\n\t\t>\n\t\t\t${arg_path.at(-1) || \"\"}\n\t\t\t<div class=\"image-preview-container\">\n\t\t\t\t${value &&\n\t\t\t\tjdd_context.render_image(value, {\n\t\t\t\t\tcontainer: {\n\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\theight: 40,\n\t\t\t\t\t\tobjectFit: \"cover\",\n\t\t\t\t\t},\n\t\t\t\t\tcrop: { width: 40, height: 40 },\n\t\t\t\t\tstyle: \"height: 40px; width: 40px;\",\n\t\t\t\t\talt: \"\",\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t<input\n\t\t\t\ttype=\"file\"\n\t\t\t\tname=\"${`$${printArgPath(arg_path)}.new`}\"\n\t\t\t\tvalue=\"\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tdata-action=\"change->input-image-preview#handleChange\"\n\t\t\t\t${arg.hasParent(\"list\") ? \"multiple\" : \"\"}\n\t\t\t/>\n\t\t</label>\n\t\t<div>\n\t\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"${`$${printArgPath(arg_path)}.old`}\"\n\t\t\t\tvalue=\"${htmlEscape(value?.token || \"\")}\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t/>\n\t\t</div>\n\t\t${page.makeActionButton(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\taction: \"remove_file\",\n\t\t\t\tlabel: \"\u274C\",\n\t\t\t},\n\t\t\targ_path\n\t\t)}\n\t</div>`;\n}\n"],
5
+ "mappings": "AAMA,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAEpB,SAAS,oBAAgD;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAQgB;AACf,QAAM,cAAc,eAAe,GAAG;AACtC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,KAKH,SAAS,GAAG,EAAE,KAAK;AAAA;AAAA,MAElB,SACF,YAAY,aAAa,OAAO;AAAA,IAC/B,WAAW;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IACZ;AAAA,IACA,MAAM,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,IAC9B,OAAO;AAAA,IACP,KAAK;AAAA,EACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKO,IAAI,aAAa,QAAQ;AAAA;AAAA;AAAA;AAAA,MAI/B,IAAI,UAAU,MAAM,IAAI,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAM/B,IAAI,aAAa,QAAQ;AAAA,aACxB,YAAW,+BAAO,UAAS,EAAE;AAAA;AAAA;AAAA;AAAA,IAItC,KAAK;AAAA,IACN;AAAA,IACA;AAAA,MACC,QAAQ;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IACA;AAAA,EACD;AAAA;AAEF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,439 @@
1
+ import { List, Table } from "@sealcode/jdd";
2
+ import { isTableData, isTableRegularRow } from "@sealcode/jdd";
3
+ import objectPath from "object-path";
4
+ function moveElement(array, fromIndex, toIndex) {
5
+ const element = array.splice(fromIndex, 1)[0];
6
+ array.splice(toIndex, 0, element);
7
+ return array;
8
+ }
9
+ function getComponentData(state, arg_path, registry) {
10
+ var _a, _b;
11
+ const index_arg = arg_path[1];
12
+ if (!index_arg) {
13
+ throw new Error("Missing component index in arg path");
14
+ }
15
+ const component_index = parseInt(index_arg);
16
+ const component_args = ((_a = state.components[component_index]) == null ? void 0 : _a.args) || {};
17
+ const component_name = ((_b = state.components[component_index]) == null ? void 0 : _b.component_name) || "";
18
+ const component = registry.get(component_name);
19
+ const arg_path_within_component = arg_path.slice(3);
20
+ const [argument, , argument_value] = (component == null ? void 0 : component.getArgumentAtPath(
21
+ arg_path_within_component,
22
+ component_args
23
+ )) || [null, null, null];
24
+ return {
25
+ component_index,
26
+ component_args,
27
+ component_name,
28
+ component,
29
+ argument,
30
+ argument_value,
31
+ arg_path_within_component
32
+ };
33
+ }
34
+ const ComponentPreviewActions = {
35
+ add_array_item: async ({
36
+ ctx,
37
+ state,
38
+ args: [arg_path],
39
+ page
40
+ }) => {
41
+ const {
42
+ component_name,
43
+ component,
44
+ argument,
45
+ arg_path_within_component,
46
+ argument_value
47
+ } = getComponentData(state, arg_path, page.registry);
48
+ if (!component) {
49
+ console.error("unknown component: ", component_name);
50
+ return state;
51
+ }
52
+ if (!argument) {
53
+ console.error(
54
+ "Didn't find a list argument at this path",
55
+ arg_path_within_component
56
+ );
57
+ return state;
58
+ }
59
+ if (!(argument instanceof List)) {
60
+ throw new Error(
61
+ `Expected argument in path ${arg_path.join(
62
+ "."
63
+ )} to be an instance of List`
64
+ );
65
+ }
66
+ objectPath.insert(
67
+ state,
68
+ arg_path,
69
+ await argument.item_type.getExampleValue(
70
+ page.makeJDDContext(ctx)
71
+ ),
72
+ Array.isArray(argument_value) ? argument_value.length : 0
73
+ );
74
+ return state;
75
+ },
76
+ remove_array_item: ({
77
+ state,
78
+ args: [arg_path, index_to_remove]
79
+ }) => {
80
+ objectPath.del(state, [...arg_path, index_to_remove]);
81
+ return state;
82
+ },
83
+ move_array_item_up: async ({
84
+ state,
85
+ args: [arg_path, element_index]
86
+ }) => {
87
+ const array_values = objectPath.get(state, arg_path);
88
+ const curr = array_values[element_index];
89
+ const prev = array_values[element_index - 1];
90
+ if (!prev || !curr) {
91
+ throw new Error("No element at such index or cannot move it up");
92
+ }
93
+ [array_values[element_index - 1], array_values[element_index]] = [
94
+ curr,
95
+ prev
96
+ ];
97
+ return state;
98
+ },
99
+ move_array_item_down: async ({
100
+ state,
101
+ args: [arg_path, element_index]
102
+ }) => {
103
+ const array_values = objectPath.get(state, arg_path);
104
+ const curr = array_values[element_index];
105
+ const next = array_values[element_index + 1];
106
+ if (!next || !curr) {
107
+ throw new Error("No element at such index or cannot move it up");
108
+ }
109
+ [array_values[element_index], array_values[element_index + 1]] = [
110
+ next,
111
+ curr
112
+ ];
113
+ return state;
114
+ },
115
+ change_component: async ({
116
+ ctx,
117
+ inputs,
118
+ state,
119
+ page
120
+ }) => {
121
+ const component_name = inputs.component;
122
+ if (!component_name || typeof component_name !== "string") {
123
+ throw new Error(
124
+ "Missing input: 'component' for action change_component. It should contain the name of the new component type"
125
+ );
126
+ }
127
+ const component = page.registry.get(component_name);
128
+ if (!component) {
129
+ throw new Error(
130
+ `Unknown or disallowed component name: ${component_name}`
131
+ );
132
+ }
133
+ return {
134
+ ...state,
135
+ components: [
136
+ {
137
+ component_name,
138
+ args: await (component == null ? void 0 : component.getExampleValues(
139
+ page.makeJDDContext(ctx)
140
+ )) || {}
141
+ }
142
+ ]
143
+ };
144
+ },
145
+ randomize_args: async ({
146
+ ctx,
147
+ state,
148
+ page,
149
+ args: [component_index_str]
150
+ }) => {
151
+ const { component_index, component } = getComponentData(
152
+ state,
153
+ ["components", component_index_str],
154
+ page.registry
155
+ );
156
+ const component_data = state.components[component_index];
157
+ if (!component_data) {
158
+ throw new Error("Missing component data");
159
+ }
160
+ component_data.args = await (component == null ? void 0 : component.getExampleValues(
161
+ page.makeJDDContext(ctx)
162
+ )) || {};
163
+ return {
164
+ ...state
165
+ };
166
+ },
167
+ add_table_row: async ({
168
+ ctx,
169
+ state,
170
+ page,
171
+ args: [arg_path, columns, type = "row"]
172
+ }) => {
173
+ const jdd_context = page.makeJDDContext(ctx);
174
+ const { component_args, argument } = getComponentData(
175
+ state,
176
+ arg_path,
177
+ page.registry
178
+ );
179
+ let row;
180
+ if (!argument) {
181
+ console.error("Unknown component at path", arg_path);
182
+ return state;
183
+ }
184
+ if (!(argument instanceof Table)) {
185
+ throw new Error(
186
+ `Expected argument at path ${arg_path.join(
187
+ "."
188
+ )} to be of type Table`
189
+ );
190
+ }
191
+ if (type == "header") {
192
+ row = {
193
+ type: "header",
194
+ header_content: await argument.header_type.getExampleValue(
195
+ jdd_context
196
+ )
197
+ };
198
+ } else {
199
+ const cells = [];
200
+ for (let i = 0; i < columns; i++) {
201
+ cells.push(
202
+ await argument.cell_type.getExampleValue(jdd_context)
203
+ );
204
+ }
205
+ row = { type: "row", cells };
206
+ }
207
+ objectPath.push(state, [...arg_path, "rows"], row);
208
+ return state;
209
+ },
210
+ add_table_column: async ({
211
+ ctx,
212
+ state,
213
+ page,
214
+ args: [arg_path]
215
+ }) => {
216
+ const { argument } = getComponentData(
217
+ state,
218
+ arg_path,
219
+ page.registry
220
+ );
221
+ if (!argument) {
222
+ console.error("Unknown component at path", arg_path);
223
+ return state;
224
+ }
225
+ const tableData = objectPath.get(
226
+ state,
227
+ arg_path
228
+ );
229
+ if (!isTableData(tableData)) {
230
+ throw new Error("wrong table data");
231
+ }
232
+ for (const i in tableData.rows) {
233
+ const row = tableData.rows[i];
234
+ if (isTableRegularRow(row)) {
235
+ row.cells.push(
236
+ await argument.cell_type.getExampleValue(
237
+ page.makeJDDContext(ctx)
238
+ )
239
+ );
240
+ }
241
+ }
242
+ objectPath.set(state, arg_path, tableData);
243
+ console.log("NEW STATE AFTER ADDING THE COLUN");
244
+ console.dir(state, { depth: 10 });
245
+ return state;
246
+ },
247
+ remove_table_column: ({
248
+ state,
249
+ args: [arg_path, column_index_to_remove]
250
+ }) => {
251
+ const tableData = objectPath.get(
252
+ state,
253
+ arg_path
254
+ );
255
+ if (!isTableData(tableData)) {
256
+ throw new Error("wrong table data");
257
+ }
258
+ for (const i in tableData.rows) {
259
+ const row = tableData.rows[i];
260
+ if (isTableRegularRow(row)) {
261
+ row.cells = row.cells.filter(
262
+ (_, i2) => i2 != column_index_to_remove
263
+ );
264
+ }
265
+ }
266
+ objectPath.set(state, arg_path, tableData);
267
+ return state;
268
+ },
269
+ remove_table_row: ({
270
+ state,
271
+ args: [arg_path, row_index]
272
+ }) => {
273
+ objectPath.del(state, [...arg_path, "rows", row_index]);
274
+ return state;
275
+ },
276
+ move_table_column_right: ({
277
+ state,
278
+ page,
279
+ args: [arg_path, column_index]
280
+ }) => {
281
+ const { component_args } = getComponentData(
282
+ state,
283
+ arg_path,
284
+ page.registry
285
+ );
286
+ const last_path_element = arg_path.at(-1);
287
+ if (!last_path_element) {
288
+ throw new Error("arg path is empty");
289
+ }
290
+ const data = objectPath.get(
291
+ component_args,
292
+ last_path_element,
293
+ ""
294
+ );
295
+ if (!isTableData(data)) {
296
+ throw new Error(
297
+ "Expected arg value for a table to be properly shaped"
298
+ );
299
+ }
300
+ for (const row of data.rows) {
301
+ if (row.type == "row") {
302
+ moveElement(row.cells, column_index, column_index + 1);
303
+ }
304
+ }
305
+ objectPath.set(state, [...arg_path, "rows"], data.rows);
306
+ return state;
307
+ },
308
+ move_table_row_down: ({
309
+ state,
310
+ page,
311
+ args: [arg_path, row_index]
312
+ }) => {
313
+ const { component_args } = getComponentData(
314
+ state,
315
+ arg_path,
316
+ page.registry
317
+ );
318
+ const last_path_element = arg_path.at(-1);
319
+ if (!last_path_element) {
320
+ throw new Error("arg path is empty");
321
+ }
322
+ const data = objectPath.get(
323
+ component_args,
324
+ last_path_element,
325
+ ""
326
+ );
327
+ if (!isTableData(data)) {
328
+ throw new Error(
329
+ "Expected arg value for a table to be properly shaped"
330
+ );
331
+ }
332
+ moveElement(data.rows, row_index, row_index + 1);
333
+ objectPath.set(state, [...arg_path, "rows"], data.rows);
334
+ return state;
335
+ },
336
+ change_size: ({
337
+ state,
338
+ inputs
339
+ }) => {
340
+ return {
341
+ ...state,
342
+ preview_size: inputs.size
343
+ };
344
+ },
345
+ add_component: async ({
346
+ ctx,
347
+ state,
348
+ inputs,
349
+ page
350
+ }) => {
351
+ const component_name = inputs.component;
352
+ if (!component_name) {
353
+ throw new Error("Missing component name");
354
+ }
355
+ const component = page.registry.get(component_name);
356
+ return {
357
+ ...state,
358
+ components: [
359
+ ...state.components,
360
+ {
361
+ component_name,
362
+ args: await (component == null ? void 0 : component.getExampleValues(
363
+ page.makeJDDContext(ctx)
364
+ )) || {}
365
+ }
366
+ ]
367
+ };
368
+ },
369
+ remove_component: async ({
370
+ state,
371
+ args: [component_index]
372
+ }) => {
373
+ const newComponentState = [...state.components];
374
+ newComponentState.splice(component_index, 1);
375
+ return {
376
+ ...state,
377
+ components: newComponentState
378
+ };
379
+ },
380
+ move_component_up: async ({
381
+ state,
382
+ args: [component_index]
383
+ }) => {
384
+ const newComps = [...state.components];
385
+ const prev = newComps[component_index - 1];
386
+ const curr = newComps[component_index];
387
+ if (!prev || !curr) {
388
+ throw new Error("No component at such index or cannot move it up");
389
+ }
390
+ [newComps[component_index], newComps[component_index - 1]] = [
391
+ prev,
392
+ curr
393
+ ];
394
+ return { ...state, components: newComps };
395
+ },
396
+ move_component_down: async ({
397
+ state,
398
+ args: [component_index]
399
+ }) => {
400
+ const newComps = [...state.components];
401
+ const next = newComps[component_index + 1];
402
+ const curr = newComps[component_index];
403
+ if (!next || !curr) {
404
+ throw new Error("No component at such index or cannot move it up");
405
+ }
406
+ [newComps[component_index], newComps[component_index + 1]] = [
407
+ next,
408
+ curr
409
+ ];
410
+ return { ...state, components: newComps };
411
+ },
412
+ remove_file: async ({
413
+ state,
414
+ args: [arg_path]
415
+ }) => {
416
+ objectPath.set(state, arg_path, null);
417
+ return state;
418
+ },
419
+ replace_state: async ({
420
+ ctx,
421
+ state,
422
+ inputs,
423
+ page
424
+ }) => {
425
+ const new_state = await page.deserializeState(
426
+ ctx,
427
+ inputs["state_override"] || "{}"
428
+ );
429
+ return {
430
+ ...new_state,
431
+ preview_size: state.preview_size
432
+ };
433
+ }
434
+ };
435
+ export {
436
+ ComponentPreviewActions,
437
+ getComponentData
438
+ };
439
+ //# sourceMappingURL=component-preview-actions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/component-preview-actions.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport type { Registry, TableData } from \"@sealcode/jdd\";\nimport { List, Table } from \"@sealcode/jdd\";\nimport { isTableData, isTableRegularRow } from \"@sealcode/jdd\";\nimport objectPath from \"object-path\";\nimport type { JDDPageState } from \"./jdd-page.js\";\nimport type { StatefulPageActionArgument } from \"@sealcode/sealgen\";\nimport type JDDPage from \"./jdd-page.js\";\n\nfunction moveElement<T>(\n\tarray: Array<T>,\n\tfromIndex: number,\n\ttoIndex: number\n): Array<T> {\n\tconst element = array.splice(fromIndex, 1)[0];\n\tarray.splice(toIndex, 0, element as T);\n\treturn array;\n}\n\nexport function getComponentData(\n\tstate: JDDPageState,\n\targ_path: string[],\n\tregistry: Registry\n) {\n\tconst index_arg = arg_path[1];\n\tif (!index_arg) {\n\t\tthrow new Error(\"Missing component index in arg path\");\n\t}\n\tconst component_index = parseInt(index_arg);\n\tconst component_args = state.components[component_index]?.args || {};\n\tconst component_name =\n\t\tstate.components[component_index]?.component_name || \"\";\n\tconst component = registry.get(component_name);\n\tconst arg_path_within_component = arg_path.slice(3); // remove \"components\" and the index of the component and \"args\"\n\n\tconst [argument, , argument_value] = component?.getArgumentAtPath(\n\t\targ_path_within_component,\n\t\tcomponent_args\n\t) || [null, null, null];\n\n\treturn {\n\t\tcomponent_index,\n\t\tcomponent_args,\n\t\tcomponent_name,\n\t\tcomponent,\n\t\targument,\n\t\targument_value,\n\t\targ_path_within_component,\n\t};\n}\n\nexport const ComponentPreviewActions = <const>{\n\tadd_array_item: async ({\n\t\tctx,\n\t\tstate,\n\t\targs: [arg_path],\n\t\tpage,\n\t}: StatefulPageActionArgument<JDDPageState, [string[]]>) => {\n\t\tconst {\n\t\t\tcomponent_name,\n\t\t\tcomponent,\n\t\t\targument,\n\t\t\targ_path_within_component,\n\t\t\targument_value,\n\t\t} = getComponentData(state, arg_path, (page as JDDPage).registry);\n\t\tif (!component) {\n\t\t\tconsole.error(\"unknown component: \", component_name);\n\t\t\treturn state;\n\t\t}\n\t\tif (!argument) {\n\t\t\tconsole.error(\n\t\t\t\t\"Didn't find a list argument at this path\",\n\t\t\t\targ_path_within_component\n\t\t\t);\n\t\t\treturn state;\n\t\t}\n\t\tif (!(argument instanceof List)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected argument in path ${arg_path.join(\n\t\t\t\t\t\".\"\n\t\t\t\t)} to be an instance of List`\n\t\t\t);\n\t\t}\n\t\tobjectPath.insert(\n\t\t\tstate,\n\t\t\targ_path,\n\t\t\tawait argument.item_type.getExampleValue(\n\t\t\t\t(page as JDDPage).makeJDDContext(ctx)\n\t\t\t),\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tArray.isArray(argument_value) ? argument_value.length : 0\n\t\t);\n\t\treturn state;\n\t},\n\n\tremove_array_item: ({\n\t\tstate,\n\t\targs: [arg_path, index_to_remove],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number]\n\t>): JDDPageState => {\n\t\tobjectPath.del(state, [...arg_path, index_to_remove]);\n\t\treturn state;\n\t},\n\n\tmove_array_item_up: async ({\n\t\tstate,\n\t\targs: [arg_path, element_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number]\n\t>): Promise<JDDPageState> => {\n\t\tconst array_values = objectPath.get(state, arg_path) as unknown[];\n\t\tconst curr = array_values[element_index];\n\t\tconst prev = array_values[element_index - 1];\n\t\tif (!prev || !curr) {\n\t\t\tthrow new Error(\"No element at such index or cannot move it up\");\n\t\t}\n\t\t[array_values[element_index - 1], array_values[element_index]] = [\n\t\t\tcurr,\n\t\t\tprev,\n\t\t];\n\t\treturn state;\n\t},\n\n\tmove_array_item_down: async ({\n\t\tstate,\n\t\targs: [arg_path, element_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number]\n\t>): Promise<JDDPageState> => {\n\t\tconst array_values = objectPath.get(state, arg_path) as unknown[];\n\t\tconst curr = array_values[element_index];\n\t\tconst next = array_values[element_index + 1];\n\t\tif (!next || !curr) {\n\t\t\tthrow new Error(\"No element at such index or cannot move it up\");\n\t\t}\n\t\t[array_values[element_index], array_values[element_index + 1]] = [\n\t\t\tnext,\n\t\t\tcurr,\n\t\t];\n\t\treturn state;\n\t},\n\n\tchange_component: async ({\n\t\tctx,\n\t\tinputs,\n\t\tstate,\n\t\tpage,\n\t}: StatefulPageActionArgument<JDDPageState, []>): Promise<JDDPageState> => {\n\t\tconst component_name = inputs.component;\n\t\tif (!component_name || typeof component_name !== \"string\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Missing input: 'component' for action change_component. It should contain the name of the new component type\"\n\t\t\t);\n\t\t}\n\t\tconst component = (page as JDDPage).registry.get(component_name);\n\t\tif (!component) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown or disallowed component name: ${component_name}`\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\t...state,\n\t\t\tcomponents: [\n\t\t\t\t{\n\t\t\t\t\tcomponent_name: component_name,\n\t\t\t\t\targs:\n\t\t\t\t\t\t(await component?.getExampleValues(\n\t\t\t\t\t\t\t(page as JDDPage).makeJDDContext(ctx)\n\t\t\t\t\t\t)) || {},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\n\trandomize_args: async ({\n\t\tctx,\n\t\tstate,\n\t\tpage,\n\t\targs: [component_index_str],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string]\n\t>): Promise<JDDPageState> => {\n\t\tconst { component_index, component } = getComponentData(\n\t\t\tstate,\n\t\t\t[\"components\", component_index_str],\n\t\t\t(page as JDDPage).registry\n\t\t);\n\n\t\tconst component_data = state.components[component_index];\n\t\tif (!component_data) {\n\t\t\tthrow new Error(\"Missing component data\");\n\t\t}\n\t\tcomponent_data.args =\n\t\t\t(await component?.getExampleValues(\n\t\t\t\t(page as JDDPage).makeJDDContext(ctx)\n\t\t\t)) || {};\n\t\treturn {\n\t\t\t...state,\n\t\t};\n\t},\n\n\tadd_table_row: async ({\n\t\tctx,\n\t\tstate,\n\t\tpage,\n\t\targs: [arg_path, columns, type = \"row\"],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number, \"header\" | \"row\" | undefined]\n\t>) => {\n\t\tconst jdd_context = (page as JDDPage).makeJDDContext(ctx);\n\t\tconst { component_args, argument } = getComponentData(\n\t\t\tstate,\n\t\t\targ_path,\n\t\t\t(page as JDDPage).registry\n\t\t);\n\t\tlet row;\n\n\t\tif (!argument) {\n\t\t\tconsole.error(\"Unknown component at path\", arg_path);\n\t\t\treturn state;\n\t\t}\n\t\tif (!(argument instanceof Table)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected argument at path ${arg_path.join(\n\t\t\t\t\t\".\"\n\t\t\t\t)} to be of type Table`\n\t\t\t);\n\t\t}\n\t\tif (type == \"header\") {\n\t\t\trow = {\n\t\t\t\ttype: \"header\",\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\theader_content: await argument.header_type.getExampleValue(\n\t\t\t\t\tjdd_context\n\t\t\t\t),\n\t\t\t};\n\t\t} else {\n\t\t\tconst cells = [];\n\t\t\tfor (let i = 0; i < columns; i++) {\n\t\t\t\tcells.push(\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait argument.cell_type.getExampleValue(jdd_context)\n\t\t\t\t);\n\t\t\t}\n\t\t\trow = { type: \"row\", cells };\n\t\t}\n\t\tobjectPath.push(state, [...arg_path, \"rows\"], row);\n\t\treturn state;\n\t},\n\n\tadd_table_column: async ({\n\t\tctx,\n\t\tstate,\n\t\tpage,\n\t\targs: [arg_path],\n\t}: StatefulPageActionArgument<JDDPageState, [string[]]>) => {\n\t\tconst { argument } = getComponentData(\n\t\t\tstate,\n\t\t\targ_path,\n\t\t\t(page as JDDPage).registry\n\t\t) as unknown as {\n\t\t\targument: Table<unknown, unknown>;\n\t\t};\n\t\tif (!argument) {\n\t\t\tconsole.error(\"Unknown component at path\", arg_path);\n\t\t\treturn state;\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tconst tableData: TableData<unknown, unknown> = objectPath.get(\n\t\t\tstate,\n\t\t\targ_path\n\t\t);\n\t\tif (!isTableData(tableData)) {\n\t\t\tthrow new Error(\"wrong table data\");\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-for-in-array\n\t\tfor (const i in tableData.rows) {\n\t\t\tconst row = tableData.rows[i];\n\t\t\tif (isTableRegularRow(row)) {\n\t\t\t\trow.cells.push(\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait argument.cell_type.getExampleValue(\n\t\t\t\t\t\t(page as JDDPage).makeJDDContext(ctx)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tobjectPath.set(state, arg_path, tableData);\n\t\tconsole.log(\"NEW STATE AFTER ADDING THE COLUN\");\n\t\tconsole.dir(state, { depth: 10 });\n\t\treturn state;\n\t},\n\n\tremove_table_column: ({\n\t\tstate,\n\t\targs: [arg_path, column_index_to_remove],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number]\n\t>): JDDPageState => {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tconst tableData: TableData<unknown, unknown> = objectPath.get(\n\t\t\tstate,\n\t\t\targ_path\n\t\t);\n\t\tif (!isTableData(tableData)) {\n\t\t\tthrow new Error(\"wrong table data\");\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-for-in-array\n\t\tfor (const i in tableData.rows) {\n\t\t\tconst row = tableData.rows[i];\n\t\t\tif (isTableRegularRow(row)) {\n\t\t\t\trow.cells = row.cells.filter(\n\t\t\t\t\t(_, i) => i != column_index_to_remove\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tobjectPath.set(state, arg_path, tableData);\n\t\treturn state;\n\t},\n\n\tremove_table_row: ({\n\t\tstate,\n\t\targs: [arg_path, row_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[], number]\n\t>): JDDPageState => {\n\t\tobjectPath.del(state, [...arg_path, \"rows\", row_index]);\n\t\treturn state;\n\t},\n\n\tmove_table_column_right: ({\n\t\tstate,\n\t\tpage,\n\t\targs: [arg_path, column_index],\n\t}: StatefulPageActionArgument<JDDPageState, [string[], number]>) => {\n\t\tconst { component_args } = getComponentData(\n\t\t\tstate,\n\t\t\targ_path,\n\t\t\t(page as JDDPage).registry\n\t\t);\n\n\t\tconst last_path_element = arg_path.at(-1);\n\t\tif (!last_path_element) {\n\t\t\tthrow new Error(\"arg path is empty\");\n\t\t}\n\t\tconst data = objectPath.get<unknown>(\n\t\t\tcomponent_args,\n\t\t\tlast_path_element,\n\t\t\t\"\"\n\t\t);\n\t\tif (!isTableData(data)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Expected arg value for a table to be properly shaped\"\n\t\t\t);\n\t\t}\n\t\tfor (const row of data.rows) {\n\t\t\tif (row.type == \"row\") {\n\t\t\t\tmoveElement(row.cells, column_index, column_index + 1);\n\t\t\t}\n\t\t}\n\t\tobjectPath.set(state, [...arg_path, \"rows\"], data.rows);\n\t\treturn state;\n\t},\n\n\tmove_table_row_down: ({\n\t\tstate,\n\t\tpage,\n\t\targs: [arg_path, row_index],\n\t}: StatefulPageActionArgument<JDDPageState, [string[], number]>) => {\n\t\tconst { component_args } = getComponentData(\n\t\t\tstate,\n\t\t\targ_path,\n\t\t\t(page as JDDPage).registry\n\t\t);\n\t\tconst last_path_element = arg_path.at(-1);\n\t\tif (!last_path_element) {\n\t\t\tthrow new Error(\"arg path is empty\");\n\t\t}\n\t\tconst data = objectPath.get<unknown>(\n\t\t\tcomponent_args,\n\t\t\tlast_path_element,\n\t\t\t\"\"\n\t\t);\n\t\tif (!isTableData(data)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Expected arg value for a table to be properly shaped\"\n\t\t\t);\n\t\t}\n\t\tmoveElement(data.rows, row_index, row_index + 1);\n\t\tobjectPath.set(state, [...arg_path, \"rows\"], data.rows);\n\t\treturn state;\n\t},\n\n\tchange_size: ({\n\t\tstate,\n\t\tinputs,\n\t}: StatefulPageActionArgument<JDDPageState>) => {\n\t\treturn {\n\t\t\t...state,\n\t\t\tpreview_size: inputs.size,\n\t\t};\n\t},\n\n\tadd_component: async ({\n\t\tctx,\n\t\tstate,\n\t\tinputs,\n\t\tpage,\n\t}: StatefulPageActionArgument<JDDPageState, []>): Promise<JDDPageState> => {\n\t\tconst component_name = inputs.component;\n\t\tif (!component_name) {\n\t\t\tthrow new Error(\"Missing component name\");\n\t\t}\n\t\tconst component = (page as JDDPage).registry.get(component_name);\n\n\t\treturn {\n\t\t\t...state,\n\t\t\tcomponents: [\n\t\t\t\t...state.components,\n\t\t\t\t{\n\t\t\t\t\tcomponent_name: component_name,\n\t\t\t\t\targs:\n\t\t\t\t\t\t(await component?.getExampleValues(\n\t\t\t\t\t\t\t(page as JDDPage).makeJDDContext(ctx)\n\t\t\t\t\t\t)) || {},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\n\tremove_component: async ({\n\t\tstate,\n\t\targs: [component_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[number]\n\t>): Promise<JDDPageState> => {\n\t\tconst newComponentState = [...state.components];\n\t\tnewComponentState.splice(component_index, 1);\n\t\treturn {\n\t\t\t...state,\n\t\t\tcomponents: newComponentState,\n\t\t};\n\t},\n\n\tmove_component_up: async ({\n\t\tstate,\n\t\targs: [component_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[number]\n\t>): Promise<JDDPageState> => {\n\t\tconst newComps = [...state.components];\n\t\tconst prev = newComps[component_index - 1];\n\t\tconst curr = newComps[component_index];\n\t\tif (!prev || !curr) {\n\t\t\tthrow new Error(\"No component at such index or cannot move it up\");\n\t\t}\n\t\t[newComps[component_index], newComps[component_index - 1]] = [\n\t\t\tprev,\n\t\t\tcurr,\n\t\t];\n\t\treturn { ...state, components: newComps };\n\t},\n\n\tmove_component_down: async ({\n\t\tstate,\n\t\targs: [component_index],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[number]\n\t>): Promise<JDDPageState> => {\n\t\tconst newComps = [...state.components];\n\t\tconst next = newComps[component_index + 1];\n\t\tconst curr = newComps[component_index];\n\t\tif (!next || !curr) {\n\t\t\tthrow new Error(\"No component at such index or cannot move it up\");\n\t\t}\n\t\t[newComps[component_index], newComps[component_index + 1]] = [\n\t\t\tnext,\n\t\t\tcurr,\n\t\t];\n\t\treturn { ...state, components: newComps };\n\t},\n\n\tremove_file: async ({\n\t\tstate,\n\t\targs: [arg_path],\n\t}: StatefulPageActionArgument<\n\t\tJDDPageState,\n\t\t[string[]]\n\t>): Promise<JDDPageState> => {\n\t\tobjectPath.set(state, arg_path, null);\n\t\treturn state;\n\t},\n\n\treplace_state: async ({\n\t\tctx,\n\t\tstate,\n\t\tinputs,\n\t\tpage,\n\t}: StatefulPageActionArgument<JDDPageState>) => {\n\t\tconst new_state = await (page as JDDPage).deserializeState(\n\t\t\tctx,\n\t\t\tinputs[\"state_override\"] || \"{}\"\n\t\t);\n\t\treturn {\n\t\t\t...new_state,\n\t\t\tpreview_size: state.preview_size,\n\t\t};\n\t},\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["i"]
7
+ }
@@ -0,0 +1,93 @@
1
+ import { documentContainerFromParsed, JDD } from "@sealcode/jdd";
2
+ import { tempstream } from "tempstream";
3
+ import { ComponentPreviewActions } from "./component-preview-actions.js";
4
+ import JDDPage from "./jdd-page.js";
5
+ class JDDDebugger extends JDDPage {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.actions = ComponentPreviewActions;
9
+ this.containerSizes = ["320", "600", "800", "1024", "1300", "1920"];
10
+ }
11
+ renderParameterButtons(state) {
12
+ const all_components = super.getRegistryComponents();
13
+ if (!state.components[0]) {
14
+ console.error("No components are present in state.components");
15
+ }
16
+ return `<div>
17
+ <input type="submit" value="Preview" />
18
+ <select
19
+ name="component"
20
+ onchange="${this.makeActionCallback("change_component")}"
21
+ autocomplete="off"
22
+ >
23
+ ${Object.entries(all_components).map(
24
+ ([name]) => {
25
+ var _a;
26
+ return `<option
27
+ value="${name}"
28
+ ${name == ((_a = state.components[0]) == null ? void 0 : _a.component_name) ? "selected" : ""}
29
+ >
30
+ ${name}
31
+ </option>`;
32
+ }
33
+ ).join("")}
34
+ </select>
35
+ <noscript>
36
+ ${this.makeActionButton(state, "change_component")}
37
+ </noscript>
38
+ ${this.makeActionButton(state, "randomize_args", "0")}
39
+ </div>`;
40
+ }
41
+ async getInitialState(ctx) {
42
+ const first_component = Object.entries(this.registry.getAll())[0];
43
+ if (!first_component) {
44
+ throw new Error("No registered components!");
45
+ }
46
+ const [component_name, component] = first_component;
47
+ const initial_state = {
48
+ components: [
49
+ {
50
+ component_name,
51
+ args: await component.getExampleValues(
52
+ this.makeJDDContext(ctx)
53
+ ),
54
+ open: true
55
+ }
56
+ ]
57
+ };
58
+ return initial_state;
59
+ }
60
+ wrapInLayout(ctx, content, state) {
61
+ const jdd = new JDD(
62
+ this.registry,
63
+ this.makeJDDContext(ctx),
64
+ documentContainerFromParsed(state.components)
65
+ );
66
+ return this.html({
67
+ ctx,
68
+ title: "Components",
69
+ body: content,
70
+ description: "",
71
+ css_clumps: ["jdd-page", ...jdd.getAllCSSClumps()],
72
+ htmlOptions: {
73
+ morphing: true,
74
+ preserveScroll: true,
75
+ autoRefreshCSS: true,
76
+ showBanner: false,
77
+ navbar: () => ``,
78
+ bodyClasses: ["jdd-editor"],
79
+ showBottomNavbar: false,
80
+ showFooter: false,
81
+ loadHamburgerMenu: false,
82
+ loadSearchModal: false
83
+ },
84
+ makeHead: (...args) => tempstream`${this.defaultHead(
85
+ ...args
86
+ )}${jdd.renderEarlyAssets()}`
87
+ });
88
+ }
89
+ }
90
+ export {
91
+ JDDDebugger
92
+ };
93
+ //# sourceMappingURL=components.sreact.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components.sreact.ts"],
4
+ "sourcesContent": ["import { documentContainerFromParsed, JDD } from \"@sealcode/jdd\";\nimport type { Context } from \"koa\";\nimport type { Templatable } from \"tempstream\";\nimport { tempstream } from \"tempstream\";\nimport type { Stringifiable } from \"tempstream/@types/stringify.js\";\nimport { ComponentPreviewActions } from \"./component-preview-actions.js\";\nimport type { JDDPageState } from \"./jdd-page.js\";\nimport JDDPage from \"./jdd-page.js\";\n\nexport class JDDDebugger extends JDDPage {\n\trenderParameterButtons(state: JDDPageState): Stringifiable {\n\t\tconst all_components = super.getRegistryComponents();\n\t\tif (!state.components[0]) {\n\t\t\tconsole.error(\"No components are present in state.components\");\n\t\t}\n\t\treturn /* HTML */ `<div>\n\t\t\t<input type=\"submit\" value=\"Preview\" />\n\t\t\t<select\n\t\t\t\tname=\"component\"\n\t\t\t\tonchange=\"${this.makeActionCallback(\"change_component\")}\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t>\n\t\t\t\t${Object.entries(all_components)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([name]) => /* HTML */ `<option\n\t\t\t\t\t\t\tvalue=\"${name}\"\n\t\t\t\t\t\t\t${name == state.components[0]?.component_name\n\t\t\t\t\t\t\t\t? \"selected\"\n\t\t\t\t\t\t\t\t: \"\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${name}\n\t\t\t\t\t\t</option>`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\")}\n\t\t\t</select>\n\t\t\t<noscript>\n\t\t\t\t${this.makeActionButton(state, \"change_component\")}\n\t\t\t</noscript>\n\t\t\t${this.makeActionButton(state, \"randomize_args\", \"0\")}\n\t\t</div>`;\n\t}\n\tactions = ComponentPreviewActions;\n\n\tasync getInitialState(ctx: Context) {\n\t\tconst first_component = Object.entries(this.registry.getAll())[0];\n\t\tif (!first_component) {\n\t\t\tthrow new Error(\"No registered components!\");\n\t\t}\n\t\tconst [component_name, component] = first_component;\n\t\tconst initial_state = {\n\t\t\tcomponents: [\n\t\t\t\t{\n\t\t\t\t\tcomponent_name: component_name,\n\t\t\t\t\targs: await component.getExampleValues(\n\t\t\t\t\t\tthis.makeJDDContext(ctx)\n\t\t\t\t\t),\n\t\t\t\t\topen: true,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\treturn initial_state;\n\t}\n\n\twrapInLayout(\n\t\tctx: Context,\n\t\tcontent: Templatable,\n\t\tstate: JDDPageState\n\t): Templatable {\n\t\tconst jdd = new JDD(\n\t\t\tthis.registry,\n\t\t\tthis.makeJDDContext(ctx),\n\t\t\tdocumentContainerFromParsed(state.components)\n\t\t);\n\t\treturn this.html({\n\t\t\tctx,\n\t\t\ttitle: \"Components\",\n\t\t\tbody: content,\n\t\t\tdescription: \"\",\n\t\t\tcss_clumps: [\"jdd-page\", ...jdd.getAllCSSClumps()],\n\t\t\thtmlOptions: {\n\t\t\t\tmorphing: true,\n\t\t\t\tpreserveScroll: true,\n\t\t\t\tautoRefreshCSS: true,\n\t\t\t\tshowBanner: false,\n\t\t\t\tnavbar: () => ``,\n\t\t\t\tbodyClasses: [\"jdd-editor\"],\n\t\t\t\tshowBottomNavbar: false,\n\t\t\t\tshowFooter: false,\n\t\t\t\tloadHamburgerMenu: false,\n\t\t\t\tloadSearchModal: false,\n\t\t\t},\n\t\t\tmakeHead: (...args: unknown[]) =>\n\t\t\t\ttempstream`${this.defaultHead(\n\t\t\t\t\t...args\n\t\t\t\t)}${jdd.renderEarlyAssets()}`,\n\t\t});\n\t}\n\n\tcontainerSizes = [\"320\", \"600\", \"800\", \"1024\", \"1300\", \"1920\"];\n}\n"],
5
+ "mappings": "AAAA,SAAS,6BAA6B,WAAW;AAGjD,SAAS,kBAAkB;AAE3B,SAAS,+BAA+B;AAExC,OAAO,aAAa;AAEb,MAAM,oBAAoB,QAAQ;AAAA,EAAlC;AAAA;AAgCN,mBAAU;AAyDV,0BAAiB,CAAC,OAAO,OAAO,OAAO,QAAQ,QAAQ,MAAM;AAAA;AAAA,EAxF7D,uBAAuB,OAAoC;AAC1D,UAAM,iBAAiB,MAAM,sBAAsB;AACnD,QAAI,CAAC,MAAM,WAAW,IAAI;AACzB,cAAQ,MAAM,+CAA+C;AAAA,IAC9D;AACA,WAAkB;AAAA;AAAA;AAAA;AAAA,gBAIJ,KAAK,mBAAmB,kBAAkB;AAAA;AAAA;AAAA,MAGpD,OAAO,QAAQ,cAAc,EAC7B;AAAA,MACA,CAAC,CAAC,IAAI,MAAG;AAxBf;AAwB6B;AAAA,gBACb;AAAA,SACP,UAAQ,WAAM,WAAW,OAAjB,mBAAqB,kBAC5B,aACA;AAAA;AAAA,SAED;AAAA;AAAA;AAAA,IAEJ,EACC,KAAK,EAAE;AAAA;AAAA;AAAA,MAGP,KAAK,iBAAiB,OAAO,kBAAkB;AAAA;AAAA,KAEhD,KAAK,iBAAiB,OAAO,kBAAkB,GAAG;AAAA;AAAA,EAEtD;AAAA,EAGA,MAAM,gBAAgB,KAAc;AACnC,UAAM,kBAAkB,OAAO,QAAQ,KAAK,SAAS,OAAO,CAAC,EAAE;AAC/D,QAAI,CAAC,iBAAiB;AACrB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC5C;AACA,UAAM,CAAC,gBAAgB,SAAS,IAAI;AACpC,UAAM,gBAAgB;AAAA,MACrB,YAAY;AAAA,QACX;AAAA,UACC;AAAA,UACA,MAAM,MAAM,UAAU;AAAA,YACrB,KAAK,eAAe,GAAG;AAAA,UACxB;AAAA,UACA,MAAM;AAAA,QACP;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,aACC,KACA,SACA,OACc;AACd,UAAM,MAAM,IAAI;AAAA,MACf,KAAK;AAAA,MACL,KAAK,eAAe,GAAG;AAAA,MACvB,4BAA4B,MAAM,UAAU;AAAA,IAC7C;AACA,WAAO,KAAK,KAAK;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC;AAAA,MACjD,aAAa;AAAA,QACZ,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd,aAAa,CAAC,YAAY;AAAA,QAC1B,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,MAClB;AAAA,MACA,UAAU,IAAI,SACb,aAAa,KAAK;AAAA,QACjB,GAAG;AAAA,MACJ,IAAI,IAAI,kBAAkB;AAAA,IAC5B,CAAC;AAAA,EACF;AAGD;",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/autogrow-textarea.stimulus.ts"],
3
+ "sources": ["../../../src/controllers/autogrow-textarea.stimulus.ts"],
4
4
  "sourcesContent": ["/* eslint-disable @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-unsafe-assignment */\nimport { Controller } from \"stimulus\";\n\nexport default class AutogrowTextarea extends Controller<HTMLTextAreaElement> {\n\tconnect() {\n\t\tthis.autogrow();\n\t}\n\n\tautogrow() {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\t\t(this.element.parentNode as any).dataset.replicatedValue = this.element.value;\n\t}\n}\n"],
5
5
  "mappings": "AACA,SAAS,kBAAkB;AAE3B,MAAO,yBAAuC,WAAgC;AAAA,EAC7E,UAAU;AACT,SAAK,SAAS;AAAA,EACf;AAAA,EAEA,WAAW;AAEV,IAAC,KAAK,QAAQ,WAAmB,QAAQ,kBAAkB,KAAK,QAAQ;AAAA,EACzE;AACD;",
6
6
  "names": []
@@ -6,6 +6,7 @@ class ComponentDebugger extends Controller {
6
6
  if (!main_form) {
7
7
  throw new Error("No main form");
8
8
  }
9
+ this.main_form = main_form;
9
10
  document.documentElement.addEventListener("ts-rebuilt", () => {
10
11
  this.main_form.requestSubmit();
11
12
  });
@@ -36,6 +37,7 @@ class ComponentDebugger extends Controller {
36
37
  });
37
38
  }
38
39
  update_width_display() {
40
+ console.log("uwd");
39
41
  const preview = this.targets.find("preview");
40
42
  const component_width = preview.offsetWidth;
41
43
  this.sizeSelectTarget.querySelectorAll("option").forEach((e) => e.removeAttribute("selected"));
@@ -52,6 +54,7 @@ class ComponentDebugger extends Controller {
52
54
  option.setAttribute("selected", "");
53
55
  option.innerHTML = `${component_width} px`;
54
56
  option.value = String(component_width);
57
+ this.sizeSelectTarget.value = String(component_width);
55
58
  }
56
59
  resizeHandler(e) {
57
60
  const width_offset = this.origin_x - e.clientX;