@clyrex-digital/clyrex-controls-dev 0.8.1-dev.20260923043912 → 0.8.1-dev.20260923102653

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.
@@ -762,6 +762,11 @@ var flattenNodeText = (nodes) => {
762
762
  if (isTextNode(node)) return node.text ?? "";
763
763
  const element = asElementNode(node);
764
764
  if (element.type === "linebreak" || element.type === "line-break") return "\n";
765
+ if (element.type === "bulletList" || element.type === "numberedList") {
766
+ const items = Array.isArray(element.items) ? element.items : [];
767
+ return items.map((item) => `${flattenNodeText(item.children)}
768
+ `).join("");
769
+ }
765
770
  const inner = flattenNodeText(element.children);
766
771
  return element.type === "paragraph" ? `${inner}
767
772
  ` : inner;
@@ -865,6 +870,18 @@ var CommentNodeRenderer = ({ node, assetBaseUrl }) => {
865
870
  case "listitem":
866
871
  case "list-item":
867
872
  return /* @__PURE__ */ jsx6("li", { className: "comment-node-listitem", children: renderChildren(element.children, key, assetBaseUrl) });
873
+ // ContentComposer's shape: items are paragraph-like nodes (their own
874
+ // `children`), not wrapped in a separate "listitem" node.
875
+ case "bulletList":
876
+ case "numberedList": {
877
+ const ListTag = element.type === "numberedList" ? "ol" : "ul";
878
+ const items = Array.isArray(element.items) ? element.items : [];
879
+ return /* @__PURE__ */ jsx6(ListTag, { className: "comment-node-list", children: items.map((item, index) => {
880
+ const itemChildren = item.children ?? [];
881
+ const isEmptyItem = itemChildren.length === 0 || itemChildren.every((child) => isTextNode(child) && (child.text ?? "").length === 0);
882
+ return /* @__PURE__ */ jsx6("li", { className: "comment-node-listitem", children: isEmptyItem ? null : renderChildren(item.children, key, assetBaseUrl) }, item.id ?? `${key}-${index}`);
883
+ }) });
884
+ }
868
885
  case "quote":
869
886
  case "blockquote":
870
887
  return /* @__PURE__ */ jsx6("blockquote", { className: "comment-node-quote", children: renderChildren(element.children, key, assetBaseUrl) });
@@ -764,6 +764,11 @@ var flattenNodeText = (nodes) => {
764
764
  if (isTextNode(node)) return node.text ?? "";
765
765
  const element = asElementNode(node);
766
766
  if (element.type === "linebreak" || element.type === "line-break") return "\n";
767
+ if (element.type === "bulletList" || element.type === "numberedList") {
768
+ const items = Array.isArray(element.items) ? element.items : [];
769
+ return items.map((item) => `${flattenNodeText(item.children)}
770
+ `).join("");
771
+ }
767
772
  const inner = flattenNodeText(element.children);
768
773
  return element.type === "paragraph" ? `${inner}
769
774
  ` : inner;
@@ -867,6 +872,18 @@ var CommentNodeRenderer = ({ node, assetBaseUrl }) => {
867
872
  case "listitem":
868
873
  case "list-item":
869
874
  return /* @__PURE__ */ jsx6("li", { className: "comment-node-listitem", children: renderChildren(element.children, key, assetBaseUrl) });
875
+ // ContentComposer's shape: items are paragraph-like nodes (their own
876
+ // `children`), not wrapped in a separate "listitem" node.
877
+ case "bulletList":
878
+ case "numberedList": {
879
+ const ListTag = element.type === "numberedList" ? "ol" : "ul";
880
+ const items = Array.isArray(element.items) ? element.items : [];
881
+ return /* @__PURE__ */ jsx6(ListTag, { className: "comment-node-list", children: items.map((item, index) => {
882
+ const itemChildren = item.children ?? [];
883
+ const isEmptyItem = itemChildren.length === 0 || itemChildren.every((child) => isTextNode(child) && (child.text ?? "").length === 0);
884
+ return /* @__PURE__ */ jsx6("li", { className: "comment-node-listitem", children: isEmptyItem ? null : renderChildren(item.children, key, assetBaseUrl) }, item.id ?? `${key}-${index}`);
885
+ }) });
886
+ }
870
887
  case "quote":
871
888
  case "blockquote":
872
889
  return /* @__PURE__ */ jsx6("blockquote", { className: "comment-node-quote", children: renderChildren(element.children, key, assetBaseUrl) });
@@ -3,7 +3,7 @@
3
3
  "use client";
4
4
  import {
5
5
  InputControl_default
6
- } from "./chunk-7VXZJ55M.mjs";
6
+ } from "./chunk-XDTWUEVR.mjs";
7
7
  import {
8
8
  Button_default
9
9
  } from "./chunk-LSKD5U3S.mjs";
@@ -13,7 +13,7 @@ import { useRouter } from "next/navigation";
13
13
 
14
14
  // src/components/controls/edit/InputControl.tsx
15
15
  import dynamic from "next/dynamic";
16
- var InputControl = dynamic(() => import("./InputControlClient-QBBQP25W.mjs"), {
16
+ var InputControl = dynamic(() => import("./InputControlClient-NHXG4QBU.mjs"), {
17
17
  ssr: false
18
18
  });
19
19
  var InputControl_default = InputControl;
@@ -188,20 +188,26 @@ var SelectWithSearchPanel = (props) => {
188
188
  " ",
189
189
  props?.attributes?.required && /* @__PURE__ */ jsx("span", { className: "bg-error-weak", children: "*" })
190
190
  ] }),
191
- /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
192
- "input",
193
- {
194
- type: "text",
195
- value: searchTerm,
196
- onChange: textChangeHandler,
197
- onFocus: () => setIsOpen(true),
198
- onKeyDown: handleKeyDown,
199
- placeholder: props.attributes?.placeholder,
200
- className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
201
- ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
191
+ /* @__PURE__ */ jsxs("div", { children: [
192
+ /* @__PURE__ */ jsx(
193
+ "input",
194
+ {
195
+ type: "text",
196
+ name: props.name,
197
+ id: props.name,
198
+ value: searchTerm,
199
+ onChange: textChangeHandler,
200
+ onFocus: () => setIsOpen(true),
201
+ onKeyDown: handleKeyDown,
202
+ placeholder: props.attributes?.placeholder,
203
+ required: props.attributes?.required,
204
+ className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
205
+ ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
202
206
  disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`
203
- }
204
- ) }),
207
+ }
208
+ ),
209
+ /* @__PURE__ */ jsx("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props.attributes?.errorMessage ?? "" })
210
+ ] }),
205
211
  /* @__PURE__ */ jsx("div", { ref: containerRef, children: isOpen && /* @__PURE__ */ jsxs(React.Fragment, { children: [
206
212
  /* @__PURE__ */ jsxs("div", { className: "fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200", children: [
207
213
  /* @__PURE__ */ jsx("div", { className: "flex flex-col p-2 bg-accent-950 text-white", children: /* @__PURE__ */ jsxs("h5", { className: "text-md text-white font-medium", children: [
@@ -506,21 +512,18 @@ var SwitchInput = (props) => {
506
512
  if (props.value != void 0 && props.value != null && props.value != "" && (props.value == "true" || props.value.toString() == "true")) {
507
513
  value = true;
508
514
  }
509
- return /* @__PURE__ */ jsx3(React3.Fragment, { children: /* @__PURE__ */ jsxs3("div", { className: "flex items-start justify-between gap-4 py-3", children: [
510
- /* @__PURE__ */ jsxs3("div", { className: "min-w-0", children: [
511
- props?.attributes?.label && /* @__PURE__ */ jsxs3(
512
- "label",
513
- {
514
- htmlFor: props.name,
515
- className: "inline-block text-sm font-semibold text-slate-800",
516
- children: [
517
- props.attributes.label,
518
- props?.attributes?.required && /* @__PURE__ */ jsx3("span", { className: "bg-error-weak", children: "*" })
519
- ]
520
- }
521
- ),
522
- /* @__PURE__ */ jsx3("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
523
- ] }),
515
+ return /* @__PURE__ */ jsx3(React3.Fragment, { children: /* @__PURE__ */ jsxs3("div", { className: "relative flex items-start justify-between gap-4 py-3", children: [
516
+ /* @__PURE__ */ jsx3("div", { className: "min-w-0", children: props?.attributes?.label && /* @__PURE__ */ jsxs3(
517
+ "label",
518
+ {
519
+ htmlFor: props.name,
520
+ className: "inline-block text-sm font-semibold text-slate-800",
521
+ children: [
522
+ props.attributes.label,
523
+ props?.attributes?.required && /* @__PURE__ */ jsx3("span", { className: "bg-error-weak", children: "*" })
524
+ ]
525
+ }
526
+ ) }),
524
527
  /* @__PURE__ */ jsxs3(
525
528
  "label",
526
529
  {
@@ -551,7 +554,8 @@ var SwitchInput = (props) => {
551
554
  {
552
555
  className: "absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-default shadow\n transition-transform duration-200 ease-in-out\n peer-checked:translate-x-5\n peer-disabled:bg-slate-50"
553
556
  }
554
- )
557
+ ),
558
+ /* @__PURE__ */ jsx3("p", { className: "hidden group-[.validated]:peer-invalid:block absolute left-0 top-full mt-1 w-max max-w-[220px] whitespace-normal bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
555
559
  ]
556
560
  }
557
561
  )
@@ -1092,20 +1092,26 @@ var SelectWithSearchPanel = (props) => {
1092
1092
  " ",
1093
1093
  props?.attributes?.required && /* @__PURE__ */ jsx13("span", { className: "bg-error-weak", children: "*" })
1094
1094
  ] }),
1095
- /* @__PURE__ */ jsx13("div", { children: /* @__PURE__ */ jsx13(
1096
- "input",
1097
- {
1098
- type: "text",
1099
- value: searchTerm,
1100
- onChange: textChangeHandler,
1101
- onFocus: () => setIsOpen(true),
1102
- onKeyDown: handleKeyDown,
1103
- placeholder: props.attributes?.placeholder,
1104
- className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
1105
- ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
1095
+ /* @__PURE__ */ jsxs13("div", { children: [
1096
+ /* @__PURE__ */ jsx13(
1097
+ "input",
1098
+ {
1099
+ type: "text",
1100
+ name: props.name,
1101
+ id: props.name,
1102
+ value: searchTerm,
1103
+ onChange: textChangeHandler,
1104
+ onFocus: () => setIsOpen(true),
1105
+ onKeyDown: handleKeyDown,
1106
+ placeholder: props.attributes?.placeholder,
1107
+ required: props.attributes?.required,
1108
+ className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
1109
+ ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
1106
1110
  disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`
1107
- }
1108
- ) }),
1111
+ }
1112
+ ),
1113
+ /* @__PURE__ */ jsx13("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props.attributes?.errorMessage ?? "" })
1114
+ ] }),
1109
1115
  /* @__PURE__ */ jsx13("div", { ref: containerRef, children: isOpen && /* @__PURE__ */ jsxs13(React13.Fragment, { children: [
1110
1116
  /* @__PURE__ */ jsxs13("div", { className: "fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200", children: [
1111
1117
  /* @__PURE__ */ jsx13("div", { className: "flex flex-col p-2 bg-accent-950 text-white", children: /* @__PURE__ */ jsxs13("h5", { className: "text-md text-white font-medium", children: [
@@ -1509,21 +1515,18 @@ var SwitchInput = (props) => {
1509
1515
  if (props.value != void 0 && props.value != null && props.value != "" && (props.value == "true" || props.value.toString() == "true")) {
1510
1516
  value = true;
1511
1517
  }
1512
- return /* @__PURE__ */ jsx17(React17.Fragment, { children: /* @__PURE__ */ jsxs17("div", { className: "flex items-start justify-between gap-4 py-3", children: [
1513
- /* @__PURE__ */ jsxs17("div", { className: "min-w-0", children: [
1514
- props?.attributes?.label && /* @__PURE__ */ jsxs17(
1515
- "label",
1516
- {
1517
- htmlFor: props.name,
1518
- className: "inline-block text-sm font-semibold text-slate-800",
1519
- children: [
1520
- props.attributes.label,
1521
- props?.attributes?.required && /* @__PURE__ */ jsx17("span", { className: "bg-error-weak", children: "*" })
1522
- ]
1523
- }
1524
- ),
1525
- /* @__PURE__ */ jsx17("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
1526
- ] }),
1518
+ return /* @__PURE__ */ jsx17(React17.Fragment, { children: /* @__PURE__ */ jsxs17("div", { className: "relative flex items-start justify-between gap-4 py-3", children: [
1519
+ /* @__PURE__ */ jsx17("div", { className: "min-w-0", children: props?.attributes?.label && /* @__PURE__ */ jsxs17(
1520
+ "label",
1521
+ {
1522
+ htmlFor: props.name,
1523
+ className: "inline-block text-sm font-semibold text-slate-800",
1524
+ children: [
1525
+ props.attributes.label,
1526
+ props?.attributes?.required && /* @__PURE__ */ jsx17("span", { className: "bg-error-weak", children: "*" })
1527
+ ]
1528
+ }
1529
+ ) }),
1527
1530
  /* @__PURE__ */ jsxs17(
1528
1531
  "label",
1529
1532
  {
@@ -1554,7 +1557,8 @@ var SwitchInput = (props) => {
1554
1557
  {
1555
1558
  className: "absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-default shadow\n transition-transform duration-200 ease-in-out\n peer-checked:translate-x-5\n peer-disabled:bg-slate-50"
1556
1559
  }
1557
- )
1560
+ ),
1561
+ /* @__PURE__ */ jsx17("p", { className: "hidden group-[.validated]:peer-invalid:block absolute left-0 top-full mt-1 w-max max-w-[220px] whitespace-normal bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
1558
1562
  ]
1559
1563
  }
1560
1564
  )
@@ -3,7 +3,7 @@
3
3
 
4
4
  // src/components/controls/edit/InputControl.tsx
5
5
  import dynamic from "next/dynamic";
6
- var InputControl = dynamic(() => import("./InputControlClient-H75UIZE3.mjs"), {
6
+ var InputControl = dynamic(() => import("./InputControlClient-A3V5YRWH.mjs"), {
7
7
  ssr: false
8
8
  });
9
9
  var InputControl_default = InputControl;
package/dist/index.js CHANGED
@@ -1748,6 +1748,11 @@ var init_CommentNodeRenderer = __esm({
1748
1748
  if (isTextNode(node)) return node.text ?? "";
1749
1749
  const element = asElementNode(node);
1750
1750
  if (element.type === "linebreak" || element.type === "line-break") return "\n";
1751
+ if (element.type === "bulletList" || element.type === "numberedList") {
1752
+ const items = Array.isArray(element.items) ? element.items : [];
1753
+ return items.map((item) => `${flattenNodeText(item.children)}
1754
+ `).join("");
1755
+ }
1751
1756
  const inner = flattenNodeText(element.children);
1752
1757
  return element.type === "paragraph" ? `${inner}
1753
1758
  ` : inner;
@@ -1851,6 +1856,18 @@ var init_CommentNodeRenderer = __esm({
1851
1856
  case "listitem":
1852
1857
  case "list-item":
1853
1858
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { className: "comment-node-listitem", children: renderChildren(element.children, key, assetBaseUrl) });
1859
+ // ContentComposer's shape: items are paragraph-like nodes (their own
1860
+ // `children`), not wrapped in a separate "listitem" node.
1861
+ case "bulletList":
1862
+ case "numberedList": {
1863
+ const ListTag = element.type === "numberedList" ? "ol" : "ul";
1864
+ const items = Array.isArray(element.items) ? element.items : [];
1865
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ListTag, { className: "comment-node-list", children: items.map((item, index) => {
1866
+ const itemChildren = item.children ?? [];
1867
+ const isEmptyItem = itemChildren.length === 0 || itemChildren.every((child) => isTextNode(child) && (child.text ?? "").length === 0);
1868
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { className: "comment-node-listitem", children: isEmptyItem ? null : renderChildren(item.children, key, assetBaseUrl) }, item.id ?? `${key}-${index}`);
1869
+ }) });
1870
+ }
1854
1871
  case "quote":
1855
1872
  case "blockquote":
1856
1873
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("blockquote", { className: "comment-node-quote", children: renderChildren(element.children, key, assetBaseUrl) });
@@ -3633,20 +3650,26 @@ var init_SelectWithSearchPanel = __esm({
3633
3650
  " ",
3634
3651
  props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "bg-error-weak", children: "*" })
3635
3652
  ] }),
3636
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3637
- "input",
3638
- {
3639
- type: "text",
3640
- value: searchTerm,
3641
- onChange: textChangeHandler,
3642
- onFocus: () => setIsOpen(true),
3643
- onKeyDown: handleKeyDown,
3644
- placeholder: props.attributes?.placeholder,
3645
- className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
3646
- ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
3653
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { children: [
3654
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3655
+ "input",
3656
+ {
3657
+ type: "text",
3658
+ name: props.name,
3659
+ id: props.name,
3660
+ value: searchTerm,
3661
+ onChange: textChangeHandler,
3662
+ onFocus: () => setIsOpen(true),
3663
+ onKeyDown: handleKeyDown,
3664
+ placeholder: props.attributes?.placeholder,
3665
+ required: props.attributes?.required,
3666
+ className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
3667
+ ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
3647
3668
  disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`
3648
- }
3649
- ) }),
3669
+ }
3670
+ ),
3671
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props.attributes?.errorMessage ?? "" })
3672
+ ] }),
3650
3673
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { ref: containerRef, children: isOpen && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_react38.default.Fragment, { children: [
3651
3674
  /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200", children: [
3652
3675
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex flex-col p-2 bg-accent-950 text-white", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("h5", { className: "text-md text-white font-medium", children: [
@@ -4201,21 +4224,18 @@ var init_SwitchInput = __esm({
4201
4224
  if (props.value != void 0 && props.value != null && props.value != "" && (props.value == "true" || props.value.toString() == "true")) {
4202
4225
  value = true;
4203
4226
  }
4204
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react42.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-start justify-between gap-4 py-3", children: [
4205
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "min-w-0", children: [
4206
- props?.attributes?.label && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
4207
- "label",
4208
- {
4209
- htmlFor: props.name,
4210
- className: "inline-block text-sm font-semibold text-slate-800",
4211
- children: [
4212
- props.attributes.label,
4213
- props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "bg-error-weak", children: "*" })
4214
- ]
4215
- }
4216
- ),
4217
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
4218
- ] }),
4227
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react42.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "relative flex items-start justify-between gap-4 py-3", children: [
4228
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "min-w-0", children: props?.attributes?.label && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
4229
+ "label",
4230
+ {
4231
+ htmlFor: props.name,
4232
+ className: "inline-block text-sm font-semibold text-slate-800",
4233
+ children: [
4234
+ props.attributes.label,
4235
+ props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "bg-error-weak", children: "*" })
4236
+ ]
4237
+ }
4238
+ ) }),
4219
4239
  /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
4220
4240
  "label",
4221
4241
  {
@@ -4246,7 +4266,8 @@ var init_SwitchInput = __esm({
4246
4266
  {
4247
4267
  className: "absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-default shadow\n transition-transform duration-200 ease-in-out\n peer-checked:translate-x-5\n peer-disabled:bg-slate-50"
4248
4268
  }
4249
- )
4269
+ ),
4270
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block absolute left-0 top-full mt-1 w-max max-w-[220px] whitespace-normal bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
4250
4271
  ]
4251
4272
  }
4252
4273
  )
package/dist/index.mjs CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-SNDGEYWZ.mjs";
9
9
  import {
10
10
  InputControl_default
11
- } from "./chunk-7VXZJ55M.mjs";
11
+ } from "./chunk-XDTWUEVR.mjs";
12
12
  import "./chunk-JDX47MFV.mjs";
13
13
  import {
14
14
  CheckboxInput_default,
@@ -410,7 +410,7 @@ var TimeUntilStarts_default = TimeUntilStarts;
410
410
 
411
411
  // src/components/controls/view/Commentrenderer.tsx
412
412
  import dynamic5 from "next/dynamic";
413
- var CommentRenderer = dynamic5(() => import("./CommentRendererClient-52UOUQAD.mjs"), {
413
+ var CommentRenderer = dynamic5(() => import("./CommentRendererClient-TBATG5LD.mjs"), {
414
414
  ssr: false
415
415
  });
416
416
  var Commentrenderer_default = CommentRenderer;
@@ -2391,7 +2391,7 @@ var GoogleMapNode_default = GoogleMapNode;
2391
2391
  // src/components/pageRenderingEngine/nodes/DivContainer.tsx
2392
2392
  import { jsx as jsx36, jsxs as jsxs14 } from "react/jsx-runtime";
2393
2393
  var Pagination = dynamic13(() => import("./Pagination-3SOPLEQN.mjs"), { ssr: true });
2394
- var DataBindingControls = dynamic13(() => import("./DataBindingControls-KJIEP7WU.mjs"), {
2394
+ var DataBindingControls = dynamic13(() => import("./DataBindingControls-CUZ34EVI.mjs"), {
2395
2395
  ssr: true
2396
2396
  });
2397
2397
  var Slider = dynamic13(() => import("./Slider-IVPJBPE5.mjs"), {
package/dist/server.js CHANGED
@@ -2538,6 +2538,11 @@ var init_CommentNodeRenderer = __esm({
2538
2538
  if (isTextNode(node)) return node.text ?? "";
2539
2539
  const element = asElementNode(node);
2540
2540
  if (element.type === "linebreak" || element.type === "line-break") return "\n";
2541
+ if (element.type === "bulletList" || element.type === "numberedList") {
2542
+ const items = Array.isArray(element.items) ? element.items : [];
2543
+ return items.map((item) => `${flattenNodeText(item.children)}
2544
+ `).join("");
2545
+ }
2541
2546
  const inner = flattenNodeText(element.children);
2542
2547
  return element.type === "paragraph" ? `${inner}
2543
2548
  ` : inner;
@@ -2641,6 +2646,18 @@ var init_CommentNodeRenderer = __esm({
2641
2646
  case "listitem":
2642
2647
  case "list-item":
2643
2648
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("li", { className: "comment-node-listitem", children: renderChildren(element.children, key, assetBaseUrl) });
2649
+ // ContentComposer's shape: items are paragraph-like nodes (their own
2650
+ // `children`), not wrapped in a separate "listitem" node.
2651
+ case "bulletList":
2652
+ case "numberedList": {
2653
+ const ListTag = element.type === "numberedList" ? "ol" : "ul";
2654
+ const items = Array.isArray(element.items) ? element.items : [];
2655
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ListTag, { className: "comment-node-list", children: items.map((item, index) => {
2656
+ const itemChildren = item.children ?? [];
2657
+ const isEmptyItem = itemChildren.length === 0 || itemChildren.every((child) => isTextNode(child) && (child.text ?? "").length === 0);
2658
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("li", { className: "comment-node-listitem", children: isEmptyItem ? null : renderChildren(item.children, key, assetBaseUrl) }, item.id ?? `${key}-${index}`);
2659
+ }) });
2660
+ }
2644
2661
  case "quote":
2645
2662
  case "blockquote":
2646
2663
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("blockquote", { className: "comment-node-quote", children: renderChildren(element.children, key, assetBaseUrl) });
@@ -4817,20 +4834,26 @@ var init_SelectWithSearchPanel = __esm({
4817
4834
  " ",
4818
4835
  props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "bg-error-weak", children: "*" })
4819
4836
  ] }),
4820
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
4821
- "input",
4822
- {
4823
- type: "text",
4824
- value: searchTerm,
4825
- onChange: textChangeHandler,
4826
- onFocus: () => setIsOpen(true),
4827
- onKeyDown: handleKeyDown,
4828
- placeholder: props.attributes?.placeholder,
4829
- className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
4830
- ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
4837
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { children: [
4838
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
4839
+ "input",
4840
+ {
4841
+ type: "text",
4842
+ name: props.name,
4843
+ id: props.name,
4844
+ value: searchTerm,
4845
+ onChange: textChangeHandler,
4846
+ onFocus: () => setIsOpen(true),
4847
+ onKeyDown: handleKeyDown,
4848
+ placeholder: props.attributes?.placeholder,
4849
+ required: props.attributes?.required,
4850
+ className: `peer mt-1 py-1.5 block w-full text-black rounded border-gray-300 shadow-sm
4851
+ ${isError ? "focus:border-red-300 focus:ring focus:ring-red-200 focus:ring-opacity-50" : "focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"}
4831
4852
  disabled:bg-slate-50 disabled:text-slate-500 disabled:border-slate-200 disabled:shadow-none`
4832
- }
4833
- ) }),
4853
+ }
4854
+ ),
4855
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props.attributes?.errorMessage ?? "" })
4856
+ ] }),
4834
4857
  /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { ref: containerRef, children: isOpen && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_react51.default.Fragment, { children: [
4835
4858
  /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "fixed z-50 right-0 bg-white top-[62px] w-1/4 border-l border-gray-200", children: [
4836
4859
  /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "flex flex-col p-2 bg-accent-950 text-white", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("h5", { className: "text-md text-white font-medium", children: [
@@ -5265,21 +5288,18 @@ var init_SwitchInput = __esm({
5265
5288
  if (props.value != void 0 && props.value != null && props.value != "" && (props.value == "true" || props.value.toString() == "true")) {
5266
5289
  value = true;
5267
5290
  }
5268
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_react55.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "flex items-start justify-between gap-4 py-3", children: [
5269
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "min-w-0", children: [
5270
- props?.attributes?.label && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
5271
- "label",
5272
- {
5273
- htmlFor: props.name,
5274
- className: "inline-block text-sm font-semibold text-slate-800",
5275
- children: [
5276
- props.attributes.label,
5277
- props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "bg-error-weak", children: "*" })
5278
- ]
5279
- }
5280
- ),
5281
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block mt-1 bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
5282
- ] }),
5291
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_react55.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "relative flex items-start justify-between gap-4 py-3", children: [
5292
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "min-w-0", children: props?.attributes?.label && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
5293
+ "label",
5294
+ {
5295
+ htmlFor: props.name,
5296
+ className: "inline-block text-sm font-semibold text-slate-800",
5297
+ children: [
5298
+ props.attributes.label,
5299
+ props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "bg-error-weak", children: "*" })
5300
+ ]
5301
+ }
5302
+ ) }),
5283
5303
  /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
5284
5304
  "label",
5285
5305
  {
@@ -5310,7 +5330,8 @@ var init_SwitchInput = __esm({
5310
5330
  {
5311
5331
  className: "absolute left-0.5 top-0.5 h-5 w-5 rounded-full bg-default shadow\n transition-transform duration-200 ease-in-out\n peer-checked:translate-x-5\n peer-disabled:bg-slate-50"
5312
5332
  }
5313
- )
5333
+ ),
5334
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "hidden group-[.validated]:peer-invalid:block absolute left-0 top-full mt-1 w-max max-w-[220px] whitespace-normal bg-error-weak text-sm", children: props?.attributes?.errorMessage || "" })
5314
5335
  ]
5315
5336
  }
5316
5337
  )
package/dist/server.mjs CHANGED
@@ -746,7 +746,7 @@ var TimeUntilStarts_default = TimeUntilStarts;
746
746
 
747
747
  // src/components/controls/view/Commentrenderer.tsx
748
748
  import dynamic7 from "next/dynamic";
749
- var CommentRenderer = dynamic7(() => import("./CommentRendererClient-QC65XBT2.mjs"), {
749
+ var CommentRenderer = dynamic7(() => import("./CommentRendererClient-OHYVSNU5.mjs"), {
750
750
  ssr: false
751
751
  });
752
752
  var Commentrenderer_default = CommentRenderer;
@@ -2359,7 +2359,7 @@ var GoogleMapNode_default = GoogleMapNode;
2359
2359
  // src/components/pageRenderingEngine/nodes/DivContainer.tsx
2360
2360
  import { jsx as jsx36, jsxs as jsxs14 } from "react/jsx-runtime";
2361
2361
  var Pagination = dynamic13(() => import("./Pagination-FEXY7ERI.mjs"), { ssr: true });
2362
- var DataBindingControls = dynamic13(() => import("./DataBindingControls-CVU43FTE.mjs"), {
2362
+ var DataBindingControls = dynamic13(() => import("./DataBindingControls-TBDJBK62.mjs"), {
2363
2363
  ssr: true
2364
2364
  });
2365
2365
  var Slider = dynamic13(() => import("./Slider-QIGKP6AE.mjs"), {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clyrex-digital/clyrex-controls-dev",
3
- "version": "0.8.1-dev.20260923043912",
3
+ "version": "0.8.1-dev.20260923102653",
4
4
  "description": "Reusable React components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",