@plitzi/sdk-elements 0.37.2 → 0.37.4

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 (158) hide show
  1. package/CHANGELOG.md +1180 -0
  2. package/dist/Component/ComponentProvider.mjs +10 -5
  3. package/dist/Element/JsxManager.mjs +1 -0
  4. package/dist/Element/PluginRemote.d.ts +3 -1
  5. package/dist/Element/PluginRemote.mjs +9 -9
  6. package/dist/Element/helpers/elementConstants.mjs +28 -0
  7. package/dist/Element/helpers/elementUtils.mjs +1 -1
  8. package/dist/Element/helpers/loadComponent.d.ts +6 -1
  9. package/dist/Element/helpers/loadComponent.mjs +7 -7
  10. package/dist/Element/helpers/pluginSelector.mjs +1 -0
  11. package/dist/Element/hooks/useElementDataSource.mjs +23 -16
  12. package/dist/Element/hooks/useElementInternal.mjs +60 -52
  13. package/dist/Element/hooks/useInternalClassName.mjs +19 -18
  14. package/dist/Element/hooks/useKeyTriggers.d.ts +18 -0
  15. package/dist/Element/hooks/useKeyTriggers.mjs +36 -0
  16. package/dist/Element/hooks/useRootElementInteractions.mjs +65 -56
  17. package/dist/Element/hooks/useRscData.mjs +20 -15
  18. package/dist/dataSource/GlobalSources.mjs +114 -80
  19. package/dist/dataSource/getSourcesByElementId.mjs +2 -2
  20. package/dist/elements/advanced/BlockJsx/BlockJsx.mjs +1 -1
  21. package/dist/elements/advanced/NodeHtml/declaration.d.ts +1 -1
  22. package/dist/elements/advanced/NodeHtml/index.d.ts +1 -1
  23. package/dist/elements/basic/Button/Button.d.ts +10 -3
  24. package/dist/elements/basic/Button/Button.mjs +5 -5
  25. package/dist/elements/basic/Button/Settings.d.ts +2 -1
  26. package/dist/elements/basic/Button/Settings.mjs +14 -7
  27. package/dist/elements/basic/Button/declaration.d.ts +8 -3
  28. package/dist/elements/basic/Button/declaration.mjs +14 -6
  29. package/dist/elements/basic/Button/index.d.ts +8 -3
  30. package/dist/elements/basic/Dropdown/Dropdown.mjs +48 -39
  31. package/dist/elements/basic/Dropdown/declaration.d.ts +3 -0
  32. package/dist/elements/basic/Dropdown/declaration.mjs +9 -3
  33. package/dist/elements/basic/Dropdown/index.d.ts +3 -0
  34. package/dist/elements/basic/Dropdown/useDropdown.d.ts +6 -1
  35. package/dist/elements/basic/Dropdown/useDropdown.mjs +58 -41
  36. package/dist/elements/basic/Dropdown/useDropdownTrigger.d.ts +26 -0
  37. package/dist/elements/basic/Dropdown/useDropdownTrigger.mjs +30 -0
  38. package/dist/elements/basic/Heading/declaration.d.ts +9 -6
  39. package/dist/elements/basic/Heading/declaration.mjs +17 -9
  40. package/dist/elements/basic/Heading/index.d.ts +9 -6
  41. package/dist/elements/basic/Link/Link.mjs +4 -1
  42. package/dist/elements/basic/Link/Settings.d.ts +2 -1
  43. package/dist/elements/basic/Link/Settings.mjs +31 -24
  44. package/dist/elements/basic/Link/declaration.d.ts +5 -1
  45. package/dist/elements/basic/Link/declaration.mjs +16 -3
  46. package/dist/elements/basic/Link/index.d.ts +5 -1
  47. package/dist/elements/basic/Markdown/declaration.d.ts +1 -1
  48. package/dist/elements/basic/Markdown/declaration.mjs +1 -1
  49. package/dist/elements/basic/Markdown/index.d.ts +1 -1
  50. package/dist/elements/basic/RichText/declaration.d.ts +3 -0
  51. package/dist/elements/basic/RichText/declaration.mjs +8 -3
  52. package/dist/elements/basic/RichText/index.d.ts +3 -0
  53. package/dist/elements/basic/Text/declaration.d.ts +1 -1
  54. package/dist/elements/basic/Text/declaration.mjs +1 -1
  55. package/dist/elements/basic/Text/index.d.ts +1 -1
  56. package/dist/elements/basic/ThemeToggle/ThemeToggle.mjs +3 -0
  57. package/dist/elements/basic/ThemeToggle/declaration.d.ts +3 -0
  58. package/dist/elements/basic/ThemeToggle/declaration.mjs +4 -3
  59. package/dist/elements/basic/ThemeToggle/index.d.ts +3 -0
  60. package/dist/elements/declarations/index.d.ts +217 -17
  61. package/dist/elements/declarations/index.mjs +24 -22
  62. package/dist/elements/form/Form/declaration.d.ts +3 -0
  63. package/dist/elements/form/Form/declaration.mjs +4 -3
  64. package/dist/elements/form/Form/index.d.ts +3 -0
  65. package/dist/elements/form/FormControl/FormControl.d.ts +18 -6
  66. package/dist/elements/form/FormControl/FormControl.mjs +135 -127
  67. package/dist/elements/form/FormControl/Settings.d.ts +3 -1
  68. package/dist/elements/form/FormControl/Settings.mjs +73 -57
  69. package/dist/elements/form/FormControl/components/Label.d.ts +3 -1
  70. package/dist/elements/form/FormControl/components/Label.mjs +20 -18
  71. package/dist/elements/form/FormControl/components/visuallyHidden.d.ts +6 -0
  72. package/dist/elements/form/FormControl/components/visuallyHidden.mjs +14 -0
  73. package/dist/elements/form/FormControl/declaration.d.ts +5 -0
  74. package/dist/elements/form/FormControl/declaration.mjs +46 -30
  75. package/dist/elements/form/FormControl/hocs/withFieldValue.mjs +68 -61
  76. package/dist/elements/form/FormControl/index.d.ts +5 -0
  77. package/dist/elements/form/FormControl/inputs/Checkbox.d.ts +6 -1
  78. package/dist/elements/form/FormControl/inputs/Checkbox.mjs +5 -3
  79. package/dist/elements/form/FormControl/inputs/Input.d.ts +8 -1
  80. package/dist/elements/form/FormControl/inputs/Input.mjs +44 -38
  81. package/dist/elements/form/FormControl/inputs/Select.d.ts +6 -1
  82. package/dist/elements/form/FormControl/inputs/Select.mjs +12 -10
  83. package/dist/elements/form/FormControl/inputs/Textarea.d.ts +8 -1
  84. package/dist/elements/form/FormControl/inputs/Textarea.mjs +26 -21
  85. package/dist/elements/form/FormControl/inputs/useFocusWhenShown.d.ts +7 -0
  86. package/dist/elements/form/FormControl/inputs/useFocusWhenShown.mjs +9 -0
  87. package/dist/elements/index.d.ts +3 -1
  88. package/dist/elements/index.mjs +16 -14
  89. package/dist/elements/internal/LayoutContainer/declaration.d.ts +3 -0
  90. package/dist/elements/internal/LayoutContainer/declaration.mjs +15 -3
  91. package/dist/elements/internal/LayoutContainer/index.d.ts +3 -0
  92. package/dist/elements/media/FontAwesome/FontAwesome.d.ts +8 -1
  93. package/dist/elements/media/FontAwesome/FontAwesome.mjs +12 -5
  94. package/dist/elements/media/FontAwesome/Settings.d.ts +2 -1
  95. package/dist/elements/media/FontAwesome/Settings.mjs +29 -22
  96. package/dist/elements/media/FontAwesome/declaration.d.ts +1 -0
  97. package/dist/elements/media/FontAwesome/index.d.ts +1 -0
  98. package/dist/elements/media/Image/Image.d.ts +13 -2
  99. package/dist/elements/media/Image/Image.mjs +25 -25
  100. package/dist/elements/media/Image/Settings.d.ts +3 -1
  101. package/dist/elements/media/Image/Settings.mjs +29 -15
  102. package/dist/elements/media/Image/declaration.d.ts +7 -1
  103. package/dist/elements/media/Image/declaration.mjs +16 -3
  104. package/dist/elements/media/Image/index.d.ts +7 -1
  105. package/dist/elements/provider/ApiContainer/ApiContainer.mjs +145 -137
  106. package/dist/elements/provider/ApiContainer/declaration.d.ts +14 -1
  107. package/dist/elements/provider/ApiContainer/declaration.mjs +41 -4
  108. package/dist/elements/provider/ApiContainer/helpers/isEmptyAnswer.d.ts +16 -0
  109. package/dist/elements/provider/ApiContainer/helpers/isEmptyAnswer.mjs +4 -0
  110. package/dist/elements/provider/ApiContainer/helpers/queryInput.d.ts +5 -0
  111. package/dist/elements/provider/ApiContainer/helpers/queryInput.mjs +12 -0
  112. package/dist/elements/provider/ApiContainer/index.d.ts +14 -1
  113. package/dist/elements/provider/Channel/Channel.d.ts +26 -0
  114. package/dist/elements/provider/Channel/Channel.mjs +92 -0
  115. package/dist/elements/provider/Channel/Settings.d.ts +9 -0
  116. package/dist/elements/provider/Channel/Settings.mjs +38 -0
  117. package/dist/elements/provider/Channel/declaration.d.ts +138 -0
  118. package/dist/elements/provider/Channel/declaration.mjs +125 -0
  119. package/dist/elements/provider/Channel/index.d.ts +137 -0
  120. package/dist/elements/provider/Channel/index.mjs +6 -0
  121. package/dist/elements/settings.mjs +25 -23
  122. package/dist/elements/structure/Container/Container.d.ts +16 -2
  123. package/dist/elements/structure/Container/Container.mjs +18 -9
  124. package/dist/elements/structure/Container/Settings.d.ts +4 -2
  125. package/dist/elements/structure/Container/Settings.mjs +110 -69
  126. package/dist/elements/structure/Container/declaration.d.ts +12 -1
  127. package/dist/elements/structure/Container/declaration.mjs +35 -3
  128. package/dist/elements/structure/Container/index.d.ts +6 -1
  129. package/dist/elements/structure/Container/index.mjs +3 -3
  130. package/dist/elements/structure/DialogContainer/DialogContainer.mjs +123 -100
  131. package/dist/elements/structure/List/declaration.d.ts +4 -0
  132. package/dist/elements/structure/List/declaration.mjs +7 -3
  133. package/dist/elements/structure/List/index.d.ts +4 -0
  134. package/dist/elements/structure/ModalContainer/ModalContainer.mjs +92 -80
  135. package/dist/elements/structure/ModalContainer/metadataFromText.d.ts +1 -0
  136. package/dist/elements/structure/ModalContainer/metadataFromText.mjs +10 -0
  137. package/dist/elements/structure/ModalContainer/useModalDialog.d.ts +20 -0
  138. package/dist/elements/structure/ModalContainer/useModalDialog.mjs +31 -0
  139. package/dist/elements/structure/Pagination/Pagination.d.ts +6 -1
  140. package/dist/elements/structure/Pagination/Pagination.mjs +23 -21
  141. package/dist/elements/structure/Pagination/Settings.d.ts +2 -1
  142. package/dist/elements/structure/Pagination/Settings.mjs +16 -9
  143. package/dist/elements/structure/Pagination/declaration.d.ts +5 -0
  144. package/dist/elements/structure/Pagination/declaration.mjs +7 -3
  145. package/dist/elements/structure/Pagination/index.d.ts +5 -0
  146. package/dist/elements/structure/TabContainer/TabContainer.mjs +19 -17
  147. package/dist/elements/structure/TabContainer/TabContainerBody/TabContainerBody.mjs +8 -6
  148. package/dist/elements/structure/TabContainer/TabContainerContext.d.ts +2 -0
  149. package/dist/elements/structure/TabContainer/TabContainerHeader/TabContainerHeader.mjs +18 -14
  150. package/dist/elements/structure/TabContainer/TabContainerItem/TabContainerItem.d.ts +5 -1
  151. package/dist/elements/structure/TabContainer/TabContainerItem/TabContainerItem.mjs +48 -13
  152. package/dist/elements/structure/TabContainer/TabContainerItem/declaration.d.ts +1 -1
  153. package/dist/index.d.ts +220 -16
  154. package/dist/index.mjs +20 -17
  155. package/dist/realtime/useChannel.d.ts +35 -0
  156. package/dist/realtime/useChannel.mjs +57 -0
  157. package/package.json +67 -11
  158. package/dist/elements/media/FontAwesome/FontAwesome.stories-paused.d.ts +0 -1
@@ -3,193 +3,201 @@ import t from "../../../Element/hooks/useElement.mjs";
3
3
  import ee from "../../../Element/hooks/useRscData.mjs";
4
4
  import { RootElement as te } from "../../../Element/RootElement.mjs";
5
5
  import n from "./declaration.mjs";
6
- import r from "./helpers/providerOutcome.mjs";
7
- import ne from "./hooks/useApi.mjs";
8
- import re from "./hooks/useAutoRefresh.mjs";
9
- import ie from "./hooks/useProviderPagination.mjs";
10
- import ae from "./hooks/useProviderWrite.mjs";
11
- import i from "../../../dataSource/pathFields.mjs";
12
- import { use as a, useCallback as o, useEffect as s, useMemo as c } from "react";
13
- import oe from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
14
- import { useSdkStore as se } from "@plitzi/sdk-shared/store";
15
- import { StoreProvider as ce } from "@plitzi/nexus/react";
16
- import { emptyObject as l } from "@plitzi/sdk-shared/helpers/utils";
17
- import { jsx as u } from "react/jsx-runtime";
18
- import { currentRscLocation as le } from "@plitzi/sdk-shared/server/rsc/refreshRsc";
19
- import ue from "clsx";
20
- import de from "@plitzi/sdk-shared/dataSource/helpers/getSourceName";
21
- import fe from "@plitzi/sdk-shared/dataSource/hooks/useRegisterSource";
22
- import { QueryBuilderEvaluator as pe } from "@plitzi/plitzi-ui/QueryBuilder";
6
+ import { isEmptyAnswer as r } from "./helpers/isEmptyAnswer.mjs";
7
+ import ne from "./helpers/providerOutcome.mjs";
8
+ import { queryInputOf as i } from "./helpers/queryInput.mjs";
9
+ import re from "./hooks/useApi.mjs";
10
+ import ie from "./hooks/useAutoRefresh.mjs";
11
+ import ae from "./hooks/useProviderPagination.mjs";
12
+ import oe from "./hooks/useProviderWrite.mjs";
13
+ import se from "../../../dataSource/pathFields.mjs";
14
+ import { use as ce, useCallback as a, useEffect as le, useMemo as o, useRef as ue } from "react";
15
+ import de from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
16
+ import { useSdkStore as s } from "@plitzi/sdk-shared/store";
17
+ import { StoreProvider as fe } from "@plitzi/nexus/react";
18
+ import { emptyObject as c } from "@plitzi/sdk-shared/helpers/utils";
19
+ import { jsx as l } from "react/jsx-runtime";
20
+ import { currentRscLocation as pe } from "@plitzi/sdk-shared/server/rsc/refreshRsc";
21
+ import me from "clsx";
22
+ import he from "@plitzi/sdk-shared/dataSource/helpers/getSourceName";
23
+ import ge from "@plitzi/sdk-shared/dataSource/hooks/useRegisterSource";
24
+ import { QueryBuilderEvaluator as _e } from "@plitzi/plitzi-ui/QueryBuilder";
23
25
  //#region src/elements/provider/ApiContainer/ApiContainer.tsx
24
- var d = ({ ref: e, className: d = "", children: f, query: p = "", method: m = "get", accessToken: h = "", when: g = l, headers: _ = l, mockData: v = "{}", subType: y = "", credentials: b = "same-origin", singleRecord: x = !1, pagination: me = "none", pageParam: he = "page", renderWhileLoading: ge = !1, cache: _e = !1, staleTime: ve = 30, gcTime: ye = 300, refreshSeconds: be = 0 }) => {
25
- let { id: S, visible: C, definition: { label: w = "Api Container", runtime: xe, items: T } } = t(), E = xe === "server", { loaded: D, stale: O, location: k, elementData: A, refresh: j } = ee(), M = de(n.sourceType, S), { settings: { previewMode: N }, contexts: { InteractionsContext: Se } } = oe(), { interactionsManager: P } = a(Se), [[F, I, Ce]] = se([
26
+ var u = ({ ref: e, className: u = "", children: d, query: f = "", method: p = "get", accessToken: m = "", when: h = c, headers: g = c, mockData: _ = "{}", subType: v = "", credentials: ve = "same-origin", singleRecord: y = !1, pagination: ye = "none", pageParam: be = "page", renderWhileLoading: xe = !1, cache: b = !1, staleTime: Se = 30, gcTime: Ce = 300, refreshSeconds: we = 0 }) => {
27
+ let { id: x, visible: S, definition: { label: C = "Api Container", runtime: Te, items: Ee } } = t(), w = Te === "server", { loaded: T, stale: E, location: D, elementData: O, refresh: k } = ee(), A = he(n.sourceType, x), { settings: { previewMode: j }, contexts: { InteractionsContext: De } } = de(), { interactionsManager: M } = ce(De), [[N, P, Oe]] = s([
26
28
  "navigation.routeParams",
27
29
  "navigation.queryParams",
28
30
  "navigation.navigate"
29
- ]), we = c(() => h ? {
30
- ..._,
31
- Authorization: `Bearer ${h}`
32
- } : _, [_, h]), L = c(() => E || !C ? !1 : !!(N && p && (g === l || pe(g, {
33
- ...F,
34
- ...I
35
- })) || !N && (p || v && v !== "{}" && v !== l)), [
36
- E,
37
- C,
31
+ ]), ke = o(() => m ? {
32
+ ...g,
33
+ Authorization: `Bearer ${m}`
34
+ } : g, [g, m]), F = o(() => w || !S ? !1 : !!(j && f && (h === c || _e(h, {
35
+ ...N,
36
+ ...P
37
+ })) || !j && (f || _ && _ !== "{}" && _ !== c)), [
38
+ w,
39
+ S,
40
+ j,
41
+ f,
42
+ h,
38
43
  N,
39
- p,
40
- g,
41
- F,
42
- I,
43
- v
44
- ]), Te = c(() => [S], [S]), { isLoading: Ee, isFetching: R, data: z, refetch: B, isSuccess: De, isError: Oe } = ne({
45
- url: p,
46
- method: m,
47
- credentials: b,
48
- mock: N ? void 0 : v,
49
- customHeaders: we,
50
- enabled: L,
51
- cache: _e,
52
- staleTime: ve,
53
- gcTime: ye,
54
- tags: Te
55
- }), V = E && !!k && k !== le(), H = E && D && !V && A === null, U = c(() => {
56
- if (!E) return z ?? l;
57
- if (A) return A;
58
- if (D) return l;
59
- if (typeof v != "string") return v;
44
+ P,
45
+ _
46
+ ]), Ae = o(() => [x], [x]), { isLoading: je, isFetching: Me, data: I, refetch: L, isSuccess: Ne, isError: Pe } = re({
47
+ url: f,
48
+ method: p,
49
+ credentials: ve,
50
+ mock: j ? void 0 : _,
51
+ customHeaders: ke,
52
+ enabled: F,
53
+ cache: b,
54
+ staleTime: Se,
55
+ gcTime: Ce,
56
+ tags: Ae
57
+ }), R = w && !!D && D !== pe(), z = w && T && !R && O === null, B = o(() => {
58
+ if (!w) return I ?? c;
59
+ if (O) return O;
60
+ if (T) return c;
61
+ if (typeof _ != "string") return _;
60
62
  try {
61
- return JSON.parse(v || "{}");
63
+ return JSON.parse(_ || "{}");
62
64
  } catch {
63
- return l;
65
+ return c;
64
66
  }
65
67
  }, [
66
- E,
67
- z,
68
- A,
69
- D,
70
- v
71
- ]), W = E ? V : R, ke = E ? V : Ee, G = o(async () => {
72
- if (!E) {
73
- B();
68
+ w,
69
+ I,
70
+ O,
71
+ T,
72
+ _
73
+ ]), V = w ? R : Me, Fe = w ? R : je, H = ue({}), U = a((e, t) => k(e, {
74
+ ...H.current,
75
+ ...t
76
+ }), [k]), W = a(async () => {
77
+ if (!w) {
78
+ L();
74
79
  return;
75
80
  }
76
- await j([S]);
81
+ await U([x]);
77
82
  }, [
78
- E,
79
- B,
80
- j,
81
- S
82
- ]);
83
- re({
84
- seconds: be,
85
- enabled: C && (E ? D && !V : L),
86
- refresh: G
83
+ w,
84
+ L,
85
+ U,
86
+ x
87
+ ]), G = a(async ({ input: e } = {}) => {
88
+ let t = i(e);
89
+ t && (H.current = t), await W();
90
+ }, [W]);
91
+ ie({
92
+ seconds: we,
93
+ enabled: S && (w ? T && !R : F),
94
+ refresh: W
87
95
  });
88
- let K = U, Ae = c(() => Array.isArray(K.records) ? K.records : [], [K.records]), { records: q, isLoadingMore: J, goToPage: Y, loadMore: X } = ie({
89
- elementId: S,
90
- mode: me,
91
- pageParam: he,
92
- records: Ae,
96
+ let K = B, Ie = o(() => Array.isArray(K.records) ? K.records : [], [K.records]), { records: q, isLoadingMore: J, goToPage: Y, loadMore: X } = ae({
97
+ elementId: x,
98
+ mode: ye,
99
+ pageParam: be,
100
+ records: Ie,
93
101
  page: K.pageInfo?.page ?? 1,
94
- refresh: j,
95
- navigate: Ce
96
- }), Z = r({
97
- serverMode: E,
98
- isSuccess: De,
99
- isError: Oe,
100
- rscResolved: D,
101
- rscPending: V,
102
- elementData: A
102
+ refresh: U,
103
+ navigate: Oe
104
+ }), Z = ne({
105
+ serverMode: w,
106
+ isSuccess: Ne,
107
+ isError: Pe,
108
+ rscResolved: T,
109
+ rscPending: R,
110
+ elementData: O
103
111
  });
104
- s(() => {
105
- !W && S && Z && P.interactionTrigger(S, Z === "success" ? "onApiSuccess" : "onApiError", {
106
- url: p,
107
- method: m,
108
- ...U
112
+ le(() => {
113
+ !V && x && Z && M.interactionTrigger(x, Z === "success" ? "onApiSuccess" : "onApiError", {
114
+ url: f,
115
+ method: p,
116
+ ...B
109
117
  });
110
118
  }, [
111
- U,
112
- S,
113
- P,
114
- W,
115
- m,
119
+ B,
120
+ x,
121
+ M,
122
+ V,
123
+ p,
116
124
  Z,
117
- p
125
+ f
118
126
  ]);
119
- let Q = c(() => ({
120
- ...U,
121
- ...Array.isArray(K.records) ? { records: q } : l,
122
- isLoading: W || J,
123
- isEmpty: x ? K.record === void 0 : q.length === 0,
124
- hasError: H,
125
- errorMessage: H ? "The data provider could not be reached" : "",
126
- isStale: E && O
127
+ let Q = o(() => ({
128
+ ...B,
129
+ ...Array.isArray(K.records) ? { records: q } : c,
130
+ isLoading: V || J,
131
+ isEmpty: r(K, q, y),
132
+ hasError: z,
133
+ errorMessage: z ? "The data provider could not be reached" : "",
134
+ isStale: w && E
127
135
  }), [
128
- U,
136
+ B,
129
137
  K.records,
130
138
  K.record,
131
139
  q,
132
- W,
140
+ V,
133
141
  J,
134
- x,
135
- H,
136
- E,
137
- O
138
- ]), je = o(() => i(Q), [Q]);
139
- fe({
140
- id: S,
141
- source: M,
142
- name: w || `API - ${S}`,
143
- fields: je
142
+ y,
143
+ z,
144
+ w,
145
+ E
146
+ ]), Le = a(() => se(Q), [Q]);
147
+ ge({
148
+ id: x,
149
+ source: A,
150
+ name: C || `API - ${x}`,
151
+ fields: Le
144
152
  });
145
- let { writeRecord: $ } = ae({
146
- elementId: S,
147
- enabled: E,
148
- onDone: G
149
- }), Me = c(() => {
153
+ let { writeRecord: $ } = oe({
154
+ elementId: x,
155
+ enabled: w,
156
+ onDone: W
157
+ }), Re = o(() => {
150
158
  let e = {
151
159
  performQuery: {
152
160
  ...n.callbacks.performQuery,
153
- title: `Perform Query ${w}`,
161
+ title: `Perform Query ${C}`,
154
162
  callback: G
155
163
  },
156
164
  loadMore: {
157
165
  ...n.callbacks.loadMore,
158
- title: `Load More ${w}`,
166
+ title: `Load More ${C}`,
159
167
  callback: X
160
168
  },
161
169
  goToPage: {
162
170
  ...n.callbacks.goToPage,
163
- title: `Go To Page ${w}`,
171
+ title: `Go To Page ${C}`,
164
172
  callback: ({ page: e }) => Y(Number(e) || 1)
165
173
  }
166
174
  };
167
- return E && (e.writeRecord = {
175
+ return w && (e.writeRecord = {
168
176
  ...n.callbacks.writeRecord,
169
- title: `Write Record ${w}`,
177
+ title: `Write Record ${C}`,
170
178
  callback: $
171
179
  }), e;
172
180
  }, [
173
- w,
181
+ C,
174
182
  G,
175
183
  X,
176
184
  Y,
177
- E,
185
+ w,
178
186
  $
179
- ]), Ne = c(() => M ? { runtime: { sources: { [M]: Q } } } : l, [Q, M]);
180
- return /* @__PURE__ */ u(te, {
187
+ ]), ze = o(() => A ? { runtime: { sources: { [A]: Q } } } : c, [Q, A]);
188
+ return /* @__PURE__ */ l(te, {
181
189
  ref: e,
182
- tag: !N && !T?.length ? "div" : y,
183
- className: ue("plitzi-component__api-container", d),
190
+ tag: !j && !Ee?.length ? "div" : v,
191
+ className: me("plitzi-component__api-container", u),
184
192
  interactionTriggers: n.triggers,
185
- interactionCallbacks: Me,
186
- children: (!ke || ge) && /* @__PURE__ */ u(ce, {
193
+ interactionCallbacks: Re,
194
+ children: (!Fe || xe) && /* @__PURE__ */ l(fe, {
187
195
  inherit: "live",
188
- name: `Api:${S}`,
189
- value: Ne,
190
- children: f
196
+ name: `Api:${x}`,
197
+ value: ze,
198
+ children: d
191
199
  })
192
200
  });
193
- }, f = e(d);
201
+ }, d = e(u);
194
202
  //#endregion
195
- export { d as ApiContainer, f as default };
203
+ export { u as ApiContainer, d as default };
@@ -12,6 +12,12 @@ export type ApiContainerAttributes = AuthorableAttributes<ApiContainerProps> & {
12
12
  };
13
13
  declare const declaration: {
14
14
  readonly type: "apiContainer";
15
+ readonly attributeValues: {
16
+ readonly subType: readonly string[];
17
+ readonly method: readonly string[];
18
+ readonly credentials: readonly string[];
19
+ readonly pagination: readonly string[];
20
+ };
15
21
  readonly sourceType: "apiContainer";
16
22
  readonly triggers: {
17
23
  readonly onApiError: {
@@ -45,7 +51,14 @@ declare const declaration: {
45
51
  readonly title: "Perform Query";
46
52
  readonly type: "callback";
47
53
  readonly preview: {};
48
- readonly params: {};
54
+ readonly params: {
55
+ readonly input: {
56
+ readonly label: "Input (server providers)";
57
+ readonly type: "codemirror-json";
58
+ readonly defaultValue: "{}";
59
+ readonly description: string;
60
+ };
61
+ };
49
62
  };
50
63
  readonly loadMore: {
51
64
  readonly action: "loadMore";
@@ -1,7 +1,39 @@
1
- import { elementDeclaration as e } from "@plitzi/sdk-shared/authoring/declare";
1
+ import { elementDeclaration as e, valuesOf as t } from "@plitzi/sdk-shared/authoring/declare";
2
2
  //#region src/elements/provider/ApiContainer/declaration.ts
3
- var t = e()({
3
+ var n = e()({
4
4
  type: "apiContainer",
5
+ attributeValues: {
6
+ subType: t()([
7
+ "",
8
+ "div",
9
+ "header",
10
+ "footer",
11
+ "nav",
12
+ "main",
13
+ "section",
14
+ "article",
15
+ "aside",
16
+ "address",
17
+ "figure"
18
+ ]),
19
+ method: t()([
20
+ "get",
21
+ "post",
22
+ "put",
23
+ "delete",
24
+ "patch"
25
+ ]),
26
+ credentials: t()([
27
+ "include",
28
+ "omit",
29
+ "same-origin"
30
+ ]),
31
+ pagination: t()([
32
+ "none",
33
+ "url",
34
+ "append"
35
+ ])
36
+ },
5
37
  sourceType: "apiContainer",
6
38
  triggers: {
7
39
  onApiError: {
@@ -35,7 +67,12 @@ var t = e()({
35
67
  title: "Perform Query",
36
68
  type: "callback",
37
69
  preview: {},
38
- params: {}
70
+ params: { input: {
71
+ label: "Input (server providers)",
72
+ type: "codemirror-json",
73
+ defaultValue: "{}",
74
+ description: "Values handed to a server-driven provider with its request, beside the page’s own route and query params — a search, a filter. Kept for the pages it loads after (`loadMore`, `goToPage`) until the next query."
75
+ } }
39
76
  },
40
77
  loadMore: {
41
78
  action: "loadMore",
@@ -131,4 +168,4 @@ var t = e()({
131
168
  }
132
169
  });
133
170
  //#endregion
134
- export { t as default };
171
+ export { n as default };
@@ -0,0 +1,16 @@
1
+ type ProviderSlice = {
2
+ records?: unknown[];
3
+ record?: unknown;
4
+ data?: unknown;
5
+ };
6
+ /**
7
+ * Whether a provider has nothing to show, for each shape of answer it can hold.
8
+ *
9
+ * A connector list publishes `records`, a detail provider `record`, and a plain `query` the body it received under
10
+ * `data`. Only the first two used to be asked, so a `query` — whose slice has no `records` at all — reported empty
11
+ * whatever it held, and an empty state bound to `isEmpty` showed over a full page.
12
+ *
13
+ * `records` is the list after pagination has accumulated it, which is why it is passed in rather than read here.
14
+ */
15
+ export declare const isEmptyAnswer: (slice: ProviderSlice, records: unknown[], singleRecord: boolean) => boolean;
16
+ export {};
@@ -0,0 +1,4 @@
1
+ //#region src/elements/provider/ApiContainer/helpers/isEmptyAnswer.ts
2
+ var e = (e) => e == null || e === "" || Array.isArray(e) && e.length === 0 || typeof e == "object" && !Array.isArray(e) && Object.keys(e).length === 0, t = (t, n, r) => r ? t.record === void 0 : Array.isArray(t.records) ? n.length === 0 : e(t.data);
3
+ //#endregion
4
+ export { t as isEmptyAnswer };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * A query's `input`, as the server reads a page's query params: flat, each value a string. An object as authored, or
3
+ * its JSON text as the editor keeps it; anything else is no input at all.
4
+ */
5
+ export declare const queryInputOf: (input: unknown) => Record<string, string> | undefined;
@@ -0,0 +1,12 @@
1
+ //#region src/elements/provider/ApiContainer/helpers/queryInput.ts
2
+ var e = (e) => {
3
+ let t = e;
4
+ if (typeof t == "string") try {
5
+ t = JSON.parse(t || "{}");
6
+ } catch {
7
+ return;
8
+ }
9
+ if (typeof t == "object" && t && !Array.isArray(t)) return Object.fromEntries(Object.entries(t).flatMap(([e, t]) => typeof t == "string" || typeof t == "number" || typeof t == "boolean" ? [[e, String(t)]] : []));
10
+ };
11
+ //#endregion
12
+ export { e as queryInputOf };
@@ -3,6 +3,12 @@ declare const ApiContainer: {
3
3
  displayName: string;
4
4
  } & {
5
5
  readonly type: "apiContainer";
6
+ readonly attributeValues: {
7
+ readonly subType: readonly string[];
8
+ readonly method: readonly string[];
9
+ readonly credentials: readonly string[];
10
+ readonly pagination: readonly string[];
11
+ };
6
12
  readonly sourceType: "apiContainer";
7
13
  readonly triggers: {
8
14
  readonly onApiError: {
@@ -36,7 +42,14 @@ declare const ApiContainer: {
36
42
  readonly title: "Perform Query";
37
43
  readonly type: "callback";
38
44
  readonly preview: {};
39
- readonly params: {};
45
+ readonly params: {
46
+ readonly input: {
47
+ readonly label: "Input (server providers)";
48
+ readonly type: "codemirror-json";
49
+ readonly defaultValue: "{}";
50
+ readonly description: string;
51
+ };
52
+ };
40
53
  };
41
54
  readonly loadMore: {
42
55
  readonly action: "loadMore";
@@ -0,0 +1,26 @@
1
+ import { ReactNode, RefObject } from 'react';
2
+ export type ChannelProps = {
3
+ ref?: RefObject<HTMLElement | null>;
4
+ className?: string;
5
+ children?: ReactNode;
6
+ /** The topic, usually a template: `board:{{ id }}`. A channel the space declares must cover it. */
7
+ topic?: string;
8
+ /**
9
+ * What opens a topic of a private (`grant: true`) channel: bound to the `grant` the action that let this visitor in
10
+ * returned — `{{ data.grant }}`. Empty for any other channel.
11
+ */
12
+ grant?: string;
13
+ /** What this page announces to the members — an object from a binding, or JSON text typed in the builder. */
14
+ presence?: unknown;
15
+ /** How many of the latest messages its source holds. */
16
+ keep?: number | string;
17
+ /** Empty renders no element of its own, as a provider does; a tag gives it one to style. */
18
+ subType?: '' | 'div' | 'section' | 'aside' | 'main';
19
+ };
20
+ declare const Channel: ({ ref, className, children, topic, grant, presence, keep, subType }: ChannelProps) => import('react').JSX.Element;
21
+ declare const _default: {
22
+ (props: import('../../../Element/hocs/withElement').WithElementProps<ChannelProps>): import('react').JSX.Element;
23
+ displayName: string;
24
+ };
25
+ export default _default;
26
+ export { Channel };
@@ -0,0 +1,92 @@
1
+ import e from "../../../Element/hocs/withElement.mjs";
2
+ import t from "../../../Element/hooks/useElement.mjs";
3
+ import { RootElement as n } from "../../../Element/RootElement.mjs";
4
+ import r from "../../../dataSource/pathFields.mjs";
5
+ import i from "./declaration.mjs";
6
+ import a from "../../../realtime/useChannel.mjs";
7
+ import { use as o, useCallback as s, useMemo as c, useState as l } from "react";
8
+ import u from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
9
+ import { StoreProvider as d } from "@plitzi/nexus/react";
10
+ import { emptyObject as f } from "@plitzi/sdk-shared/helpers/utils";
11
+ import { jsx as p } from "react/jsx-runtime";
12
+ import m from "clsx";
13
+ import h from "@plitzi/sdk-shared/dataSource/helpers/getSourceName";
14
+ import g from "@plitzi/sdk-shared/dataSource/hooks/useRegisterSource";
15
+ import { JOIN_TYPE as _, LEAVE_TYPE as v, PRESENCE_TYPE as y } from "@plitzi/sdk-shared/realtime";
16
+ //#region src/elements/provider/Channel/Channel.tsx
17
+ var b = (e) => {
18
+ if (typeof e != "string") return e;
19
+ try {
20
+ return JSON.parse(e);
21
+ } catch {
22
+ return e;
23
+ }
24
+ }, x = /* @__PURE__ */ new Set([
25
+ y,
26
+ _,
27
+ v
28
+ ]), S = ({ ref: e, className: _, children: v, topic: y = "", grant: S = "", presence: C, keep: w = 20, subType: T = "" }) => {
29
+ let { id: E, definition: { label: D = "Channel" } } = t(), { settings: { previewMode: O }, contexts: { InteractionsContext: k } } = u(), { interactionsManager: A } = o(k), j = Math.max(0, Number(w) || 0), [M, N] = l([]), P = s((e) => {
30
+ x.has(e.type) || (j > 0 && N((t) => [...t, e].slice(-j)), A.interactionTrigger(E, "onMessage", { ...e }));
31
+ }, [
32
+ E,
33
+ A,
34
+ j
35
+ ]), F = s(({ from: e, user: t, state: n }) => void A.interactionTrigger(E, "onJoin", {
36
+ from: e,
37
+ user: t ?? "",
38
+ state: n
39
+ }), [E, A]), I = s(({ from: e, user: t, state: n }) => void A.interactionTrigger(E, "onLeave", {
40
+ from: e,
41
+ user: t ?? "",
42
+ state: n
43
+ }), [E, A]), L = a(O && y ? y : void 0, {
44
+ grant: S || void 0,
45
+ presence: C === void 0 || C === "" ? void 0 : b(C),
46
+ onMessage: P,
47
+ onJoin: F,
48
+ onLeave: I
49
+ }), R = c(() => ({
50
+ publish: {
51
+ ...i.callbacks.publish,
52
+ callback: ({ type: e, data: t }) => typeof e == "string" && e ? L.publish(e, b(t)) : Promise.resolve(!1)
53
+ },
54
+ setPresence: {
55
+ ...i.callbacks.setPresence,
56
+ callback: ({ data: e }) => L.setPresence(b(e))
57
+ }
58
+ }), [L]), z = h(i.sourceType, E), B = c(() => ({
59
+ connected: L.connected,
60
+ me: L.me ?? "",
61
+ members: L.members,
62
+ messages: M,
63
+ last: M.at(-1) ?? null
64
+ }), [
65
+ L.connected,
66
+ L.me,
67
+ L.members,
68
+ M
69
+ ]), V = s(() => r(B), [B]);
70
+ g({
71
+ id: E,
72
+ source: z,
73
+ name: D || `Channel - ${E}`,
74
+ fields: V
75
+ });
76
+ let H = c(() => z ? { runtime: { sources: { [z]: B } } } : f, [B, z]);
77
+ return /* @__PURE__ */ p(n, {
78
+ ref: e,
79
+ tag: T,
80
+ className: m("plitzi-component__channel", _),
81
+ interactionTriggers: i.triggers,
82
+ interactionCallbacks: R,
83
+ children: /* @__PURE__ */ p(d, {
84
+ inherit: "live",
85
+ name: `Channel:${E}`,
86
+ value: H,
87
+ children: v
88
+ })
89
+ });
90
+ }, C = e(S);
91
+ //#endregion
92
+ export { S as Channel, C as default };
@@ -0,0 +1,9 @@
1
+ type SettingsProps = {
2
+ topic?: string;
3
+ grant?: string;
4
+ keep?: number | string;
5
+ presence?: unknown;
6
+ onUpdate?: (key: string, value: string | boolean | number) => void;
7
+ };
8
+ declare const Settings: ({ topic, grant, keep, presence, onUpdate }: SettingsProps) => import('react').JSX.Element;
9
+ export default Settings;