@fluid-app/rep-widgets 0.1.10 → 0.1.12

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 (71) hide show
  1. package/dist/CalendarWidget-4C5V2LX7.cjs +18 -0
  2. package/dist/{CalendarWidget-MQ2ID7YS.cjs.map → CalendarWidget-4C5V2LX7.cjs.map} +1 -1
  3. package/dist/{CalendarWidget-3FLYUVHK.js → CalendarWidget-OJHI3AYU.js} +3 -3
  4. package/dist/{CalendarWidget-3FLYUVHK.js.map → CalendarWidget-OJHI3AYU.js.map} +1 -1
  5. package/dist/{CatchUpWidget-PJNNL5GI.js → CatchUpWidget-RARSAVXN.js} +3 -3
  6. package/dist/{CatchUpWidget-PJNNL5GI.js.map → CatchUpWidget-RARSAVXN.js.map} +1 -1
  7. package/dist/CatchUpWidget-YTMRMLWH.cjs +18 -0
  8. package/dist/{CatchUpWidget-ADY4ZUDD.cjs.map → CatchUpWidget-YTMRMLWH.cjs.map} +1 -1
  9. package/dist/{ListWidget-Q2MXWXKA.cjs → ListWidget-MP6AMXCM.cjs} +5 -5
  10. package/dist/{ListWidget-Q2MXWXKA.cjs.map → ListWidget-MP6AMXCM.cjs.map} +1 -1
  11. package/dist/ListWidget-U4Z353KL.js +6 -0
  12. package/dist/{ListWidget-LZ77ZSBT.js.map → ListWidget-U4Z353KL.js.map} +1 -1
  13. package/dist/{MySiteWidget-L37MCRTV.js → MySiteWidget-CXZTDDJM.js} +3 -3
  14. package/dist/{MySiteWidget-L37MCRTV.js.map → MySiteWidget-CXZTDDJM.js.map} +1 -1
  15. package/dist/MySiteWidget-J7KD76GZ.cjs +18 -0
  16. package/dist/{MySiteWidget-2XUSXN5I.cjs.map → MySiteWidget-J7KD76GZ.cjs.map} +1 -1
  17. package/dist/RecentActivityWidget-5UJ4UN2Y.cjs +18 -0
  18. package/dist/{RecentActivityWidget-ZYOFEB5R.cjs.map → RecentActivityWidget-5UJ4UN2Y.cjs.map} +1 -1
  19. package/dist/RecentActivityWidget-BF6AWDCX.js +5 -0
  20. package/dist/{RecentActivityWidget-USXCTA5W.js.map → RecentActivityWidget-BF6AWDCX.js.map} +1 -1
  21. package/dist/ToDoWidget-34ZHMX4G.cjs +18 -0
  22. package/dist/{ToDoWidget-5EXKPVSO.cjs.map → ToDoWidget-34ZHMX4G.cjs.map} +1 -1
  23. package/dist/ToDoWidget-ZAV3YC23.js +5 -0
  24. package/dist/{ToDoWidget-MI3K365J.js.map → ToDoWidget-ZAV3YC23.js.map} +1 -1
  25. package/dist/{chunk-JS4NC5JR.cjs → chunk-2QNE7OLP.cjs} +47 -4
  26. package/dist/chunk-2QNE7OLP.cjs.map +1 -0
  27. package/dist/{chunk-G45UWQDF.js → chunk-6JPKUUAC.js} +28 -5
  28. package/dist/chunk-6JPKUUAC.js.map +1 -0
  29. package/dist/{chunk-EL6H7WGK.js → chunk-AMNYGW7I.js} +22 -4
  30. package/dist/chunk-AMNYGW7I.js.map +1 -0
  31. package/dist/{chunk-TMG7H4K5.cjs → chunk-BC72P5EU.cjs} +21 -4
  32. package/dist/chunk-BC72P5EU.cjs.map +1 -0
  33. package/dist/{chunk-XX2N55EZ.js → chunk-BQVC5IMY.js} +66 -15
  34. package/dist/chunk-BQVC5IMY.js.map +1 -0
  35. package/dist/{chunk-HF7QCK7D.cjs → chunk-CMPGAQCS.cjs} +57 -4
  36. package/dist/chunk-CMPGAQCS.cjs.map +1 -0
  37. package/dist/{chunk-STGAGLIG.cjs → chunk-DJPXRRHL.cjs} +22 -4
  38. package/dist/chunk-DJPXRRHL.cjs.map +1 -0
  39. package/dist/{chunk-2YQKGRGW.js → chunk-EEZISZ5T.js} +47 -4
  40. package/dist/chunk-EEZISZ5T.js.map +1 -0
  41. package/dist/{chunk-3CAOLNTX.js → chunk-FM3TRTCP.js} +21 -4
  42. package/dist/chunk-FM3TRTCP.js.map +1 -0
  43. package/dist/{chunk-XCHMHDYQ.cjs → chunk-GXDSEJJL.cjs} +66 -15
  44. package/dist/chunk-GXDSEJJL.cjs.map +1 -0
  45. package/dist/{chunk-SH2YPW2J.cjs → chunk-MAESFG6E.cjs} +28 -5
  46. package/dist/chunk-MAESFG6E.cjs.map +1 -0
  47. package/dist/{chunk-YGATS7HW.js → chunk-NUJO5V6H.js} +57 -4
  48. package/dist/chunk-NUJO5V6H.js.map +1 -0
  49. package/dist/widgets/index.cjs +24 -24
  50. package/dist/widgets/index.js +12 -12
  51. package/package.json +5 -5
  52. package/dist/CalendarWidget-MQ2ID7YS.cjs +0 -18
  53. package/dist/CatchUpWidget-ADY4ZUDD.cjs +0 -18
  54. package/dist/ListWidget-LZ77ZSBT.js +0 -6
  55. package/dist/MySiteWidget-2XUSXN5I.cjs +0 -18
  56. package/dist/RecentActivityWidget-USXCTA5W.js +0 -5
  57. package/dist/RecentActivityWidget-ZYOFEB5R.cjs +0 -18
  58. package/dist/ToDoWidget-5EXKPVSO.cjs +0 -18
  59. package/dist/ToDoWidget-MI3K365J.js +0 -5
  60. package/dist/chunk-2YQKGRGW.js.map +0 -1
  61. package/dist/chunk-3CAOLNTX.js.map +0 -1
  62. package/dist/chunk-EL6H7WGK.js.map +0 -1
  63. package/dist/chunk-G45UWQDF.js.map +0 -1
  64. package/dist/chunk-HF7QCK7D.cjs.map +0 -1
  65. package/dist/chunk-JS4NC5JR.cjs.map +0 -1
  66. package/dist/chunk-SH2YPW2J.cjs.map +0 -1
  67. package/dist/chunk-STGAGLIG.cjs.map +0 -1
  68. package/dist/chunk-TMG7H4K5.cjs.map +0 -1
  69. package/dist/chunk-XCHMHDYQ.cjs.map +0 -1
  70. package/dist/chunk-XX2N55EZ.js.map +0 -1
  71. package/dist/chunk-YGATS7HW.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var chunkGXDSEJJL_cjs = require('./chunk-GXDSEJJL.cjs');
4
+ require('./chunk-3CUVGQQI.cjs');
5
+ require('./chunk-J6HCPXT5.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "CalendarWidget", {
10
+ enumerable: true,
11
+ get: function () { return chunkGXDSEJJL_cjs.CalendarWidget; }
12
+ });
13
+ Object.defineProperty(exports, "calendarWidgetPropertySchema", {
14
+ enumerable: true,
15
+ get: function () { return chunkGXDSEJJL_cjs.calendarWidgetPropertySchema; }
16
+ });
17
+ //# sourceMappingURL=CalendarWidget-4C5V2LX7.cjs.map
18
+ //# sourceMappingURL=CalendarWidget-4C5V2LX7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"CalendarWidget-MQ2ID7YS.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"CalendarWidget-4C5V2LX7.cjs"}
@@ -1,5 +1,5 @@
1
- export { CalendarWidget, calendarWidgetPropertySchema } from './chunk-XX2N55EZ.js';
1
+ export { CalendarWidget, calendarWidgetPropertySchema } from './chunk-BQVC5IMY.js';
2
2
  import './chunk-GRFCSQ2M.js';
3
3
  import './chunk-6ZECDBGI.js';
4
- //# sourceMappingURL=CalendarWidget-3FLYUVHK.js.map
5
- //# sourceMappingURL=CalendarWidget-3FLYUVHK.js.map
4
+ //# sourceMappingURL=CalendarWidget-OJHI3AYU.js.map
5
+ //# sourceMappingURL=CalendarWidget-OJHI3AYU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"CalendarWidget-3FLYUVHK.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"CalendarWidget-OJHI3AYU.js"}
@@ -1,5 +1,5 @@
1
- export { CatchUpWidget, catchUpWidgetPropertySchema } from './chunk-EL6H7WGK.js';
1
+ export { CatchUpWidget, catchUpWidgetPropertySchema } from './chunk-AMNYGW7I.js';
2
2
  import './chunk-GRFCSQ2M.js';
3
3
  import './chunk-6ZECDBGI.js';
4
- //# sourceMappingURL=CatchUpWidget-PJNNL5GI.js.map
5
- //# sourceMappingURL=CatchUpWidget-PJNNL5GI.js.map
4
+ //# sourceMappingURL=CatchUpWidget-RARSAVXN.js.map
5
+ //# sourceMappingURL=CatchUpWidget-RARSAVXN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"CatchUpWidget-PJNNL5GI.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"CatchUpWidget-RARSAVXN.js"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var chunkDJPXRRHL_cjs = require('./chunk-DJPXRRHL.cjs');
4
+ require('./chunk-3CUVGQQI.cjs');
5
+ require('./chunk-J6HCPXT5.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "CatchUpWidget", {
10
+ enumerable: true,
11
+ get: function () { return chunkDJPXRRHL_cjs.CatchUpWidget; }
12
+ });
13
+ Object.defineProperty(exports, "catchUpWidgetPropertySchema", {
14
+ enumerable: true,
15
+ get: function () { return chunkDJPXRRHL_cjs.catchUpWidgetPropertySchema; }
16
+ });
17
+ //# sourceMappingURL=CatchUpWidget-YTMRMLWH.cjs.map
18
+ //# sourceMappingURL=CatchUpWidget-YTMRMLWH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"CatchUpWidget-ADY4ZUDD.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"CatchUpWidget-YTMRMLWH.cjs"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkSH2YPW2J_cjs = require('./chunk-SH2YPW2J.cjs');
3
+ var chunkMAESFG6E_cjs = require('./chunk-MAESFG6E.cjs');
4
4
  require('./chunk-LOXFR6XC.cjs');
5
5
  require('./chunk-QV3OAAEQ.cjs');
6
6
  require('./chunk-J6HCPXT5.cjs');
@@ -9,11 +9,11 @@ require('./chunk-J6HCPXT5.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "ListWidget", {
11
11
  enumerable: true,
12
- get: function () { return chunkSH2YPW2J_cjs.ListWidget; }
12
+ get: function () { return chunkMAESFG6E_cjs.ListWidget; }
13
13
  });
14
14
  Object.defineProperty(exports, "listWidgetPropertySchema", {
15
15
  enumerable: true,
16
- get: function () { return chunkSH2YPW2J_cjs.listWidgetPropertySchema; }
16
+ get: function () { return chunkMAESFG6E_cjs.listWidgetPropertySchema; }
17
17
  });
18
- //# sourceMappingURL=ListWidget-Q2MXWXKA.cjs.map
19
- //# sourceMappingURL=ListWidget-Q2MXWXKA.cjs.map
18
+ //# sourceMappingURL=ListWidget-MP6AMXCM.cjs.map
19
+ //# sourceMappingURL=ListWidget-MP6AMXCM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ListWidget-Q2MXWXKA.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ListWidget-MP6AMXCM.cjs"}
@@ -0,0 +1,6 @@
1
+ export { ListWidget, listWidgetPropertySchema } from './chunk-6JPKUUAC.js';
2
+ import './chunk-T6BC5TUS.js';
3
+ import './chunk-FKDPFJHH.js';
4
+ import './chunk-6ZECDBGI.js';
5
+ //# sourceMappingURL=ListWidget-U4Z353KL.js.map
6
+ //# sourceMappingURL=ListWidget-U4Z353KL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ListWidget-LZ77ZSBT.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ListWidget-U4Z353KL.js"}
@@ -1,5 +1,5 @@
1
- export { MySiteWidget, mySiteWidgetPropertySchema } from './chunk-3CAOLNTX.js';
1
+ export { MySiteWidget, mySiteWidgetPropertySchema } from './chunk-FM3TRTCP.js';
2
2
  import './chunk-GRFCSQ2M.js';
3
3
  import './chunk-6ZECDBGI.js';
4
- //# sourceMappingURL=MySiteWidget-L37MCRTV.js.map
5
- //# sourceMappingURL=MySiteWidget-L37MCRTV.js.map
4
+ //# sourceMappingURL=MySiteWidget-CXZTDDJM.js.map
5
+ //# sourceMappingURL=MySiteWidget-CXZTDDJM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"MySiteWidget-L37MCRTV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"MySiteWidget-CXZTDDJM.js"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var chunkBC72P5EU_cjs = require('./chunk-BC72P5EU.cjs');
4
+ require('./chunk-3CUVGQQI.cjs');
5
+ require('./chunk-J6HCPXT5.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "MySiteWidget", {
10
+ enumerable: true,
11
+ get: function () { return chunkBC72P5EU_cjs.MySiteWidget; }
12
+ });
13
+ Object.defineProperty(exports, "mySiteWidgetPropertySchema", {
14
+ enumerable: true,
15
+ get: function () { return chunkBC72P5EU_cjs.mySiteWidgetPropertySchema; }
16
+ });
17
+ //# sourceMappingURL=MySiteWidget-J7KD76GZ.cjs.map
18
+ //# sourceMappingURL=MySiteWidget-J7KD76GZ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"MySiteWidget-2XUSXN5I.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"MySiteWidget-J7KD76GZ.cjs"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var chunkCMPGAQCS_cjs = require('./chunk-CMPGAQCS.cjs');
4
+ require('./chunk-3CUVGQQI.cjs');
5
+ require('./chunk-J6HCPXT5.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "RecentActivityWidget", {
10
+ enumerable: true,
11
+ get: function () { return chunkCMPGAQCS_cjs.RecentActivityWidget; }
12
+ });
13
+ Object.defineProperty(exports, "recentActivityWidgetPropertySchema", {
14
+ enumerable: true,
15
+ get: function () { return chunkCMPGAQCS_cjs.recentActivityWidgetPropertySchema; }
16
+ });
17
+ //# sourceMappingURL=RecentActivityWidget-5UJ4UN2Y.cjs.map
18
+ //# sourceMappingURL=RecentActivityWidget-5UJ4UN2Y.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"RecentActivityWidget-ZYOFEB5R.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"RecentActivityWidget-5UJ4UN2Y.cjs"}
@@ -0,0 +1,5 @@
1
+ export { RecentActivityWidget, recentActivityWidgetPropertySchema } from './chunk-NUJO5V6H.js';
2
+ import './chunk-GRFCSQ2M.js';
3
+ import './chunk-6ZECDBGI.js';
4
+ //# sourceMappingURL=RecentActivityWidget-BF6AWDCX.js.map
5
+ //# sourceMappingURL=RecentActivityWidget-BF6AWDCX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"RecentActivityWidget-USXCTA5W.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"RecentActivityWidget-BF6AWDCX.js"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var chunk2QNE7OLP_cjs = require('./chunk-2QNE7OLP.cjs');
4
+ require('./chunk-3CUVGQQI.cjs');
5
+ require('./chunk-J6HCPXT5.cjs');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "ToDoWidget", {
10
+ enumerable: true,
11
+ get: function () { return chunk2QNE7OLP_cjs.ToDoWidget; }
12
+ });
13
+ Object.defineProperty(exports, "toDoWidgetPropertySchema", {
14
+ enumerable: true,
15
+ get: function () { return chunk2QNE7OLP_cjs.toDoWidgetPropertySchema; }
16
+ });
17
+ //# sourceMappingURL=ToDoWidget-34ZHMX4G.cjs.map
18
+ //# sourceMappingURL=ToDoWidget-34ZHMX4G.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ToDoWidget-5EXKPVSO.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ToDoWidget-34ZHMX4G.cjs"}
@@ -0,0 +1,5 @@
1
+ export { ToDoWidget, toDoWidgetPropertySchema } from './chunk-EEZISZ5T.js';
2
+ import './chunk-GRFCSQ2M.js';
3
+ import './chunk-6ZECDBGI.js';
4
+ //# sourceMappingURL=ToDoWidget-ZAV3YC23.js.map
5
+ //# sourceMappingURL=ToDoWidget-ZAV3YC23.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ToDoWidget-MI3K365J.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ToDoWidget-ZAV3YC23.js"}
@@ -6,12 +6,53 @@ var reactFontawesome = require('@fortawesome/react-fontawesome');
6
6
  var proRegularSvgIcons = require('@fortawesome/pro-regular-svg-icons');
7
7
  var reactQuery = require('@tanstack/react-query');
8
8
  var context = require('@fluid-app/rep-core/data-sources/context');
9
+ var previewContext = require('@fluid-app/rep-core/data-sources/preview-context');
9
10
  var jsxRuntime = require('react/jsx-runtime');
10
11
 
12
+ // src/hooks/use-todos.preview.ts
13
+ var now = /* @__PURE__ */ new Date();
14
+ function daysFromNow(days) {
15
+ const d = new Date(now);
16
+ d.setDate(d.getDate() + days);
17
+ return d.toISOString();
18
+ }
19
+ var PREVIEW_DATA = [
20
+ {
21
+ id: 1,
22
+ body: "Send follow-up email to new leads",
23
+ dueAt: daysFromNow(1),
24
+ completedAt: null,
25
+ createdAt: daysFromNow(-2),
26
+ contactName: "Sarah Johnson"
27
+ },
28
+ {
29
+ id: 2,
30
+ body: "Prepare slides for team training",
31
+ dueAt: daysFromNow(3),
32
+ completedAt: null,
33
+ createdAt: daysFromNow(-1),
34
+ contactName: null
35
+ },
36
+ {
37
+ id: 3,
38
+ body: "Review monthly sales report",
39
+ dueAt: daysFromNow(-1),
40
+ completedAt: null,
41
+ createdAt: daysFromNow(-5),
42
+ contactName: "Mike Chen"
43
+ }
44
+ ];
45
+
46
+ // src/hooks/use-todos.ts
11
47
  function useTodos() {
12
48
  const { baseUrl, getApiHeaders } = context.useDataSourceConfig();
49
+ const { isPreview } = previewContext.useWidgetPreviewContext();
13
50
  return reactQuery.useQuery({
14
- queryKey: ["rep-widget-use", "todos", baseUrl],
51
+ queryKey: [
52
+ "rep-widget-use",
53
+ "todos",
54
+ isPreview ? "preview" : baseUrl
55
+ ],
15
56
  queryFn: async ({ signal }) => {
16
57
  const url = baseUrl ? `${baseUrl}/tasks` : "/tasks";
17
58
  const response = await fetch(url, {
@@ -26,7 +67,9 @@ function useTodos() {
26
67
  }
27
68
  const data = await response.json();
28
69
  return transformTodos(data);
29
- }
70
+ },
71
+ enabled: !isPreview,
72
+ ...isPreview && { placeholderData: PREVIEW_DATA }
30
73
  });
31
74
  }
32
75
  function transformTodos(rawData) {
@@ -256,5 +299,5 @@ var toDoWidgetPropertySchema = {
256
299
 
257
300
  exports.ToDoWidget = ToDoWidget;
258
301
  exports.toDoWidgetPropertySchema = toDoWidgetPropertySchema;
259
- //# sourceMappingURL=chunk-JS4NC5JR.cjs.map
260
- //# sourceMappingURL=chunk-JS4NC5JR.cjs.map
302
+ //# sourceMappingURL=chunk-2QNE7OLP.cjs.map
303
+ //# sourceMappingURL=chunk-2QNE7OLP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-todos.preview.ts","../src/hooks/use-todos.ts","../src/widgets/ToDoWidget.tsx"],"names":["useDataSourceConfig","useWidgetPreviewContext","useQuery","jsxs","jsx","FontAwesomeIcon","faListCheck","ErrorState","Fragment","faPlus","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField"],"mappings":"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","file":"chunk-2QNE7OLP.cjs","sourcesContent":["import type { Todo } from \"./use-todos.types\";\n\nconst now = new Date();\n\nfunction daysFromNow(days: number): string {\n const d = new Date(now);\n d.setDate(d.getDate() + days);\n return d.toISOString();\n}\n\nexport const PREVIEW_DATA: Todo[] = [\n {\n id: 1,\n body: \"Send follow-up email to new leads\",\n dueAt: daysFromNow(1),\n completedAt: null,\n createdAt: daysFromNow(-2),\n contactName: \"Sarah Johnson\",\n },\n {\n id: 2,\n body: \"Prepare slides for team training\",\n dueAt: daysFromNow(3),\n completedAt: null,\n createdAt: daysFromNow(-1),\n contactName: null,\n },\n {\n id: 3,\n body: \"Review monthly sales report\",\n dueAt: daysFromNow(-1),\n completedAt: null,\n createdAt: daysFromNow(-5),\n contactName: \"Mike Chen\",\n },\n];\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useDataSourceConfig } from \"@fluid-app/rep-core/data-sources/context\";\nimport { useWidgetPreviewContext } from \"@fluid-app/rep-core/data-sources/preview-context\";\nimport { PREVIEW_DATA } from \"./use-todos.preview\";\nimport type { ApiTodo, Todo } from \"./use-todos.types\";\n\nexport type { TodoContact, ApiTodo, Todo } from \"./use-todos.types\";\n\nexport function useTodos() {\n const { baseUrl, getApiHeaders } = useDataSourceConfig();\n const { isPreview } = useWidgetPreviewContext();\n\n return useQuery({\n queryKey: [\n \"rep-widget-use\",\n \"todos\",\n isPreview ? \"preview\" : baseUrl,\n ] as const,\n queryFn: async ({ signal }): Promise<Todo[]> => {\n const url = baseUrl ? `${baseUrl}/tasks` : \"/tasks\";\n const response = await fetch(url, {\n headers: {\n \"content-type\": \"application/json\",\n ...getApiHeaders?.(),\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch todos: ${response.status}`);\n }\n\n const data: ApiTodo[] = await response.json();\n return transformTodos(data);\n },\n enabled: !isPreview,\n ...(isPreview && { placeholderData: PREVIEW_DATA }),\n });\n}\n\nfunction transformTodos(rawData: ApiTodo[]): Todo[] {\n return rawData.map((todo) => ({\n id: todo.id,\n body: todo.body,\n dueAt: todo.due_at,\n completedAt: todo.completed_at,\n createdAt: todo.created_at,\n contactName: todo.contact\n ? `${todo.contact.first_name} ${todo.contact.last_name}`\n : null,\n }));\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/rep-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n} from \"../core/fields\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faListCheck, faPlus } from \"@fortawesome/pro-regular-svg-icons\";\nimport { useTodos } from \"../hooks/use-todos\";\nimport { ErrorState } from \"../components/error-state\";\n\ntype ToDoWidgetProps = ComponentProps<\"div\"> & {\n // Title\n titleEnabled?: boolean;\n titleText?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n\n // Content\n maxItems?: number;\n};\n\nexport function ToDoWidget({\n // Title defaults\n titleEnabled = true,\n titleText = \"To-Do\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n\n // Styling defaults\n background = {\n type: \"solid\",\n color: \"background\",\n },\n textColor = \"foreground\",\n accentColor = \"primary\",\n padding = 4,\n borderRadius = \"md\",\n\n // Content defaults\n maxItems = 5,\n\n className,\n ...props\n}: ToDoWidgetProps) {\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n const { data: todos = [], isLoading, isError } = useTodos();\n\n // Use API data if available, otherwise fall back to demo data\n const displayTodos = todos.length > 0 ? todos : [];\n\n // Filter out completed tasks\n const activeTodos = displayTodos.filter((todo) => !todo.completedAt);\n const todosToShow = activeTodos.slice(0, maxItems);\n const remainingCount = activeTodos.length - todosToShow.length;\n const isEmpty = activeTodos.length === 0;\n\n return (\n <div\n className={`overflow-hidden rounded-${borderRadius} bg-${backgroundColor} text-${textColor} p-${padding} ${className ?? \"\"}`}\n style={{ backgroundImage }}\n {...props}\n >\n {/* Header */}\n <div className=\"mb-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n {titleEnabled && titleText && (\n <h2\n className={`text-${titleFontSize} font-bold text-${titleColor}`}\n >\n {titleText}\n </h2>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {!isEmpty && !isLoading && (\n <span className={`text-2xl font-bold text-${accentColor}`}>\n {activeTodos.length}\n </span>\n )}\n <div\n className={`flex h-10 w-10 shrink-0 items-center justify-center`}\n >\n <FontAwesomeIcon\n icon={faListCheck}\n className={`h-5 w-5 text-${accentColor}-foreground`}\n />\n </div>\n </div>\n </div>\n\n {/* Loading state */}\n {isLoading ? (\n <div className=\"flex min-h-[120px] items-center justify-center\">\n <div className=\"h-6 w-6 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n </div>\n ) : isError ? (\n /* Error state */\n <ErrorState />\n ) : isEmpty ? (\n /* Empty state */\n <div className=\"flex flex-col items-center justify-center py-8\">\n <p className={`text-center text-${textColor}/60`}>\n You&apos;ve got nothing else To-Do!\n </p>\n </div>\n ) : (\n /* Todo List */\n <>\n <div className=\"flex flex-col\">\n {todosToShow.map((todo, index) => (\n <div\n key={todo.id}\n className={`flex items-center gap-3 py-2.5 ${\n index !== todosToShow.length - 1\n ? `border-b border-${textColor}/10`\n : \"\"\n }`}\n >\n <input\n type=\"checkbox\"\n className={`h-5 w-5 rounded-full border-2 border-${textColor}/30 bg-transparent`}\n checked={!!todo.completedAt}\n readOnly\n />\n <span className=\"line-clamp-1 flex-1 text-sm\">{todo.body}</span>\n </div>\n ))}\n </div>\n\n {/* Footer */}\n <div className=\"mt-2 flex items-center justify-between\">\n {remainingCount > 0 && (\n <span className={`text-sm text-${textColor}/50 underline`}>\n {remainingCount} more task{remainingCount > 1 ? \"s\" : \"\"}\n </span>\n )}\n <div className=\"ml-auto\">\n <FontAwesomeIcon\n icon={faPlus}\n className={`h-5 w-5 text-${textColor}/50`}\n />\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\nexport const toDoWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ToDoWidget\",\n displayName: \"To-Do Widget\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [\n // Styling Tab - Title Group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the todo list\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"titleText\",\n label: \"Title\",\n type: \"text\",\n description: \"Title text displayed above the todo list\",\n defaultValue: \"To-Do\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the widget title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the widget title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling Tab - Design Group\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the widget container\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Design\",\n },\n getColorField({\n key: \"textColor\",\n label: \"Text Color\",\n description: \"Default text color for todo items\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getColorField({\n key: \"accentColor\",\n label: \"Accent Color\",\n description: \"Color used for count badge and icon\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n key: \"separator\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Design\",\n },\n {\n key: \"maxItems\",\n label: \"Max Items\",\n type: \"number\",\n description: \"Maximum number of todo items to display\",\n min: 1,\n max: 20,\n step: 1,\n defaultValue: 5,\n tab: \"styling\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding around the widget container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Border radius for the widget container\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n ],\n} as const satisfies WidgetPropertySchema;\n"]}
@@ -341,7 +341,7 @@ function OrderedList({
341
341
  "div",
342
342
  {
343
343
  ref: scrollContainerRef,
344
- className: `flex gap-${gapValues[gap]} scrollbar-hide overflow-x-auto scroll-smooth`,
344
+ className: `flex gap-${gapValues[gap]} scrollbar-hide overflow-x-auto overflow-y-hidden scroll-smooth`,
345
345
  children: items.map((item, index) => {
346
346
  const imageUrl = getImageUrl2(item);
347
347
  const aspectRatioClass = getAspectRatioClass2(imageAspectRatio);
@@ -455,7 +455,7 @@ function ListWidget({
455
455
  titleSize = "lg",
456
456
  itemTitleColor = "foreground",
457
457
  itemTitleSize = "sm",
458
- descriptionColor = "muted",
458
+ descriptionColor = "foreground",
459
459
  descriptionSize = "sm",
460
460
  priceColor = "foreground",
461
461
  priceSize = "md",
@@ -795,6 +795,29 @@ var listWidgetPropertySchema = {
795
795
  tab: "styling",
796
796
  group: "Item Styling"
797
797
  },
798
+ getColorField({
799
+ key: "descriptionColor",
800
+ label: "Description Color",
801
+ description: "Color for descriptions",
802
+ defaultValue: "foreground",
803
+ tab: "styling",
804
+ group: "Item Styling"
805
+ }),
806
+ getFontSizeField({
807
+ key: "descriptionSize",
808
+ label: "Description Font Size",
809
+ description: "Size of descriptions",
810
+ defaultValue: "sm",
811
+ tab: "styling",
812
+ group: "Item Styling"
813
+ }),
814
+ {
815
+ key: "separator3",
816
+ type: "separator",
817
+ label: "Separator",
818
+ tab: "styling",
819
+ group: "Item Styling"
820
+ },
798
821
  getColorField({
799
822
  key: "priceColor",
800
823
  label: "Price Color",
@@ -820,7 +843,7 @@ var listWidgetPropertySchema = {
820
843
  group: "Item Styling"
821
844
  }),
822
845
  {
823
- key: "separator3",
846
+ key: "separator4",
824
847
  type: "separator",
825
848
  label: "Separator",
826
849
  tab: "styling",
@@ -983,5 +1006,5 @@ var listWidgetPropertySchema = {
983
1006
  };
984
1007
 
985
1008
  export { ListWidget, listWidgetPropertySchema };
986
- //# sourceMappingURL=chunk-G45UWQDF.js.map
987
- //# sourceMappingURL=chunk-G45UWQDF.js.map
1009
+ //# sourceMappingURL=chunk-6JPKUUAC.js.map
1010
+ //# sourceMappingURL=chunk-6JPKUUAC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/widgets/list-widget/FeaturedSection.tsx","../src/widgets/list-widget/ListItemCard.tsx","../src/widgets/list-widget/UnorderedList.tsx","../src/widgets/list-widget/OrderedList.tsx","../src/widgets/ListWidget.tsx"],"names":["jsxs","jsx","getImageUrl","getAspectRatioClass"],"mappings":"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","file":"chunk-6JPKUUAC.js","sourcesContent":["import type {\n BorderRadiusOptions,\n FontSizeOptions,\n ColorOptions,\n} from \"@fluid-app/rep-core/types\";\nimport { MediaRenderer } from \"../../components/MediaRenderer\";\n\ninterface FeaturedSectionProps {\n borderRadius: BorderRadiusOptions;\n titleSize: FontSizeOptions;\n featuredTitle?: string | undefined;\n featuredSubtitle?: string | undefined;\n featuredButtonText?: string | undefined;\n featuredButtonUrl?: string | undefined;\n featuredSubtitleColor: ColorOptions;\n featuredSubtitleSize: FontSizeOptions;\n asset: { url: string; isVideo: boolean };\n}\n\nexport function FeaturedSection({\n borderRadius,\n titleSize,\n featuredTitle,\n featuredSubtitle,\n featuredButtonText,\n featuredButtonUrl,\n featuredSubtitleColor,\n featuredSubtitleSize,\n asset,\n}: FeaturedSectionProps) {\n return (\n <div\n className={`relative h-full min-h-[300px] w-full overflow-hidden rounded-${borderRadius}`}\n >\n <div className=\"absolute inset-0 h-full w-full\">\n <MediaRenderer\n src={asset.url}\n mediaType={asset.isVideo ? \"video\" : \"image\"}\n alt={featuredTitle || \"Featured\"}\n objectFit=\"cover\"\n autoplay={asset.isVideo}\n loop={asset.isVideo}\n muted={asset.isVideo}\n controls={false}\n />\n </div>\n\n <div className=\"absolute inset-0 bg-black/40\" />\n\n <div className=\"absolute inset-0 flex flex-col items-start justify-end p-8\">\n {featuredTitle && (\n <h3\n className={`mb-2 font-bold text-white text-${titleSize === \"md\" ? \"base\" : titleSize}`}\n >\n {featuredTitle}\n </h3>\n )}\n {featuredSubtitle && (\n <p\n className={`mb-4 text-${featuredSubtitleColor} text-${featuredSubtitleSize === \"md\" ? \"base\" : featuredSubtitleSize}`}\n >\n {featuredSubtitle}\n </p>\n )}\n {featuredButtonText && (\n <a\n href={featuredButtonUrl || \"#\"}\n className={`bg-white px-6 py-2 font-medium text-foreground transition-opacity hover:opacity-90 rounded-${borderRadius}`}\n >\n {featuredButtonText}\n </a>\n )}\n </div>\n </div>\n );\n}\n","import type {\n ColorOptions,\n FontSizeOptions,\n PaddingOptions,\n} from \"@fluid-app/rep-core/types\";\n\ntype ListItem = {\n id: string;\n image?: string;\n imageUrl?: string;\n videoUrl?: string;\n title?: string;\n description?: string;\n price?: string;\n originalPrice?: string;\n discount?: string;\n qv?: string;\n cv?: string;\n};\n\nfunction getTextContent(value: string | unknown | undefined): string {\n if (!value) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"object\" && value !== null && \"body\" in value) {\n const body = (value as { body: unknown }).body;\n return typeof body === \"string\" ? body : \"\";\n }\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\nfunction getStringValue(value: unknown): string {\n if (!value) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"object\" && value !== null) {\n if (\"body\" in value) {\n const body = (value as { body: unknown }).body;\n if (typeof body === \"string\") return body;\n }\n if (\"text\" in value) {\n const text = (value as { text: unknown }).text;\n if (typeof text === \"string\") return text;\n }\n if (\"value\" in value) {\n const val = (value as { value: unknown }).value;\n if (typeof val === \"string\") return val;\n if (typeof val === \"number\") return String(val);\n }\n }\n return \"\";\n}\n\nexport interface ListItemCardContentProps {\n item: ListItem;\n padding: PaddingOptions;\n itemTitleColor: ColorOptions;\n itemTitleSize: FontSizeOptions;\n descriptionColor: ColorOptions;\n descriptionSize: FontSizeOptions;\n priceColor: ColorOptions;\n priceSize: FontSizeOptions;\n originalPriceColor: ColorOptions;\n metaTextColor: ColorOptions;\n metaTextSize: FontSizeOptions;\n showMetaText: boolean;\n}\n\nexport function ListItemCardContent({\n item,\n padding,\n itemTitleColor,\n itemTitleSize,\n descriptionColor,\n descriptionSize,\n priceColor,\n priceSize,\n originalPriceColor,\n metaTextColor,\n metaTextSize,\n showMetaText,\n}: ListItemCardContentProps) {\n return (\n <div className={`p-${padding}`}>\n {item.title && (\n <h3\n className={`text-${itemTitleColor} text-${itemTitleSize === \"md\" ? \"base\" : itemTitleSize} mb-1 font-semibold`}\n >\n {getTextContent(item.title)}\n </h3>\n )}\n {item.description && (\n <p\n className={`text-${descriptionColor} text-${descriptionSize === \"md\" ? \"base\" : descriptionSize} mb-2`}\n >\n {getTextContent(item.description)}\n </p>\n )}\n <div className=\"flex items-center gap-2\">\n {item.price && (\n <span\n className={`text-${priceColor} text-${priceSize === \"md\" ? \"base\" : priceSize} font-bold`}\n >\n {getStringValue(item.price)}\n </span>\n )}\n {item.originalPrice && (\n <span\n className={`text-${originalPriceColor} text-${descriptionSize === \"md\" ? \"base\" : descriptionSize} line-through`}\n >\n {getStringValue(item.originalPrice)}\n </span>\n )}\n </div>\n {showMetaText && (item.qv || item.cv) && (\n <div\n className={`mt-2 flex gap-3 text-${metaTextColor} text-${metaTextSize === \"md\" ? \"base\" : metaTextSize}`}\n >\n {item.qv && <span>QV: {getStringValue(item.qv)}</span>}\n {item.cv && <span>CV: {getStringValue(item.cv)}</span>}\n </div>\n )}\n </div>\n );\n}\n\nexport interface BadgeAndFavoriteProps {\n showBadge: boolean;\n showFavorite: boolean;\n discount?: string;\n favoritePosition?: \"default\" | \"inline\";\n}\n\nexport function DiscountBadge({ discount }: { discount: string }) {\n return (\n <div className=\"absolute top-2 right-2 z-10 rounded-md bg-destructive px-2 py-1 text-xs font-bold text-destructive-foreground\">\n {getStringValue(discount)}\n </div>\n );\n}\n\nexport function FavoriteButton({ className }: { className?: string }) {\n return (\n <button\n className={\n className ||\n \"absolute top-2 left-2 z-10 rounded-full bg-background/80 p-2 backdrop-blur-sm transition-colors hover:bg-background\"\n }\n >\n <svg\n className=\"h-5 w-5 text-muted-foreground\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\"\n />\n </svg>\n </button>\n );\n}\n\nexport { getStringValue, getTextContent };\nexport type { ListItem };\n","import type {\n ColorOptions,\n FontSizeOptions,\n BorderRadiusOptions,\n PaddingOptions,\n GapOptions,\n} from \"@fluid-app/rep-core/types\";\nimport { gapValues } from \"../../core/fields\";\nimport {\n ListItemCardContent,\n DiscountBadge,\n FavoriteButton,\n type ListItem,\n} from \"./ListItemCard\";\n\ntype ImageAspectRatio = \"square\" | \"landscape\" | \"portrait\";\n\nconst getImageUrl = (item: ListItem): string | undefined => {\n return item.imageUrl || item.image;\n};\n\nconst getAspectRatioClass = (ratio: ImageAspectRatio): string => {\n const ratios = {\n square: \"aspect-square\",\n landscape: \"aspect-video\",\n portrait: \"aspect-[3/4]\",\n };\n return ratios[ratio];\n};\n\nconst getResponsiveGridClass = (columns: number): string => {\n const responsiveClasses: Record<number, string> = {\n 1: \"grid-cols-2 @lg:grid-cols-1\",\n 2: \"grid-cols-2 @lg:grid-cols-2\",\n 3: \"grid-cols-2 @lg:grid-cols-3\",\n 4: \"grid-cols-2 @lg:grid-cols-4\",\n 5: \"grid-cols-2 @lg:grid-cols-5\",\n 6: \"grid-cols-2 @lg:grid-cols-6\",\n };\n return responsiveClasses[columns] || \"grid-cols-2 @lg:grid-cols-3\";\n};\n\nexport interface UnorderedListProps {\n items: ListItem[];\n columns: number;\n gap: GapOptions;\n borderRadius: BorderRadiusOptions;\n imageAspectRatio: ImageAspectRatio;\n showBadge: boolean;\n showFavorite: boolean;\n padding: PaddingOptions;\n itemTitleColor: ColorOptions;\n itemTitleSize: FontSizeOptions;\n descriptionColor: ColorOptions;\n descriptionSize: FontSizeOptions;\n priceColor: ColorOptions;\n priceSize: FontSizeOptions;\n originalPriceColor: ColorOptions;\n metaTextColor: ColorOptions;\n metaTextSize: FontSizeOptions;\n showMetaText: boolean;\n}\n\nexport function UnorderedList({\n items,\n columns,\n gap,\n borderRadius,\n imageAspectRatio,\n showBadge,\n showFavorite,\n padding,\n itemTitleColor,\n itemTitleSize,\n descriptionColor,\n descriptionSize,\n priceColor,\n priceSize,\n originalPriceColor,\n metaTextColor,\n metaTextSize,\n showMetaText,\n}: UnorderedListProps) {\n const gridClass = getResponsiveGridClass(columns);\n\n return (\n <div className={`grid ${gridClass} gap-${gapValues[gap]}`}>\n {items.map((item) => {\n const imageUrl = getImageUrl(item);\n const aspectRatioClass = getAspectRatioClass(imageAspectRatio);\n\n return (\n <div\n key={item.id}\n className={`relative rounded-${borderRadius} overflow-hidden bg-background shadow-sm transition-shadow hover:shadow-md`}\n >\n {showBadge && item.discount && (\n <DiscountBadge discount={item.discount} />\n )}\n {showFavorite && <FavoriteButton />}\n {imageUrl && (\n <div className={`w-full ${aspectRatioClass} overflow-hidden`}>\n <img\n src={imageUrl}\n alt={item.title || \"Product\"}\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n <ListItemCardContent\n item={item}\n padding={padding}\n itemTitleColor={itemTitleColor}\n itemTitleSize={itemTitleSize}\n descriptionColor={descriptionColor}\n descriptionSize={descriptionSize}\n priceColor={priceColor}\n priceSize={priceSize}\n originalPriceColor={originalPriceColor}\n metaTextColor={metaTextColor}\n metaTextSize={metaTextSize}\n showMetaText={showMetaText}\n />\n </div>\n );\n })}\n </div>\n );\n}\n","import { useRef } from \"react\";\nimport type {\n ColorOptions,\n FontSizeOptions,\n BorderRadiusOptions,\n PaddingOptions,\n GapOptions,\n} from \"@fluid-app/rep-core/types\";\nimport { gapValues } from \"../../core/fields\";\nimport { ScrollArrows } from \"../../ui/scroll-arrows\";\nimport {\n ListItemCardContent,\n DiscountBadge,\n FavoriteButton,\n getStringValue,\n type ListItem,\n} from \"./ListItemCard\";\n\ntype ImageAspectRatio = \"square\" | \"landscape\" | \"portrait\";\ntype ScrollAxis = \"horizontal\" | \"vertical\";\n\nconst SCROLL_ITEM_WIDTH = 300;\n\nconst getImageUrl = (item: ListItem): string | undefined => {\n return item.imageUrl || item.image;\n};\n\nconst getAspectRatioClass = (ratio: ImageAspectRatio): string => {\n const ratios = {\n square: \"aspect-square\",\n landscape: \"aspect-video\",\n portrait: \"aspect-[3/4]\",\n };\n return ratios[ratio];\n};\n\nexport interface OrderedListProps {\n items: ListItem[];\n scrollAxis: ScrollAxis;\n gap: GapOptions;\n borderRadius: BorderRadiusOptions;\n imageAspectRatio: ImageAspectRatio;\n showBadge: boolean;\n showFavorite: boolean;\n padding: PaddingOptions;\n itemTitleColor: ColorOptions;\n itemTitleSize: FontSizeOptions;\n descriptionColor: ColorOptions;\n descriptionSize: FontSizeOptions;\n priceColor: ColorOptions;\n priceSize: FontSizeOptions;\n originalPriceColor: ColorOptions;\n metaTextColor: ColorOptions;\n metaTextSize: FontSizeOptions;\n numberColor: ColorOptions;\n numberSize: FontSizeOptions;\n showMetaText: boolean;\n}\n\nconst largeNumberSizes: Record<FontSizeOptions, string> = {\n xs: \"8rem\",\n sm: \"10rem\",\n md: \"12rem\",\n lg: \"14rem\",\n xl: \"16rem\",\n \"2xl\": \"20rem\",\n};\n\nexport function OrderedList({\n items,\n scrollAxis,\n gap,\n borderRadius,\n imageAspectRatio,\n showBadge,\n showFavorite,\n padding,\n itemTitleColor,\n itemTitleSize,\n descriptionColor,\n descriptionSize,\n priceColor,\n priceSize,\n originalPriceColor,\n metaTextColor,\n metaTextSize,\n numberColor,\n numberSize,\n showMetaText,\n}: OrderedListProps) {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const scrollByAmount = (direction: \"prev\" | \"next\") => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const computedGap = parseFloat(getComputedStyle(container).gap) || 0;\n const scrollAmount = SCROLL_ITEM_WIDTH + computedGap;\n\n container.scrollTo({\n left:\n container.scrollLeft +\n (direction === \"next\" ? scrollAmount : -scrollAmount),\n behavior: \"smooth\",\n });\n };\n\n const contentProps = {\n padding,\n itemTitleColor,\n itemTitleSize,\n descriptionColor,\n descriptionSize,\n priceColor,\n priceSize,\n originalPriceColor,\n metaTextColor,\n metaTextSize,\n showMetaText,\n };\n\n if (scrollAxis === \"horizontal\") {\n return (\n <div className=\"relative\">\n <div\n ref={scrollContainerRef}\n className={`flex gap-${gapValues[gap]} scrollbar-hide overflow-x-auto overflow-y-hidden scroll-smooth`}\n >\n {items.map((item, index) => {\n const imageUrl = getImageUrl(item);\n const aspectRatioClass = getAspectRatioClass(imageAspectRatio);\n\n return (\n <div key={item.id} className=\"relative w-[300px] flex-shrink-0\">\n <div\n className={`absolute top-0 left-0 text-${numberColor} z-0 leading-none font-bold opacity-20`}\n style={{ fontSize: largeNumberSizes[numberSize] }}\n >\n {index + 1}\n </div>\n\n <div\n className={`relative z-10 ml-20 rounded-${borderRadius} overflow-hidden bg-background shadow-sm transition-shadow hover:shadow-md`}\n >\n {showBadge && item.discount && (\n <DiscountBadge discount={item.discount} />\n )}\n {showFavorite && <FavoriteButton />}\n {imageUrl && (\n <div\n className={`w-full ${aspectRatioClass} overflow-hidden`}\n >\n <img\n src={imageUrl}\n alt={item.title || \"Product\"}\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n <ListItemCardContent item={item} {...contentProps} />\n </div>\n </div>\n );\n })}\n </div>\n\n <div className=\"absolute inset-x-0 top-1/2 z-20 flex w-full -translate-y-1/2 items-center justify-between px-8\">\n <ScrollArrows\n onPrevious={() => scrollByAmount(\"prev\")}\n onNext={() => scrollByAmount(\"next\")}\n />\n </div>\n </div>\n );\n }\n\n if (scrollAxis === \"vertical\") {\n return (\n <div className={`flex flex-col gap-${gapValues[gap]}`}>\n {items.map((item, index) => {\n const imageUrl = getImageUrl(item);\n\n return (\n <div\n key={item.id}\n className={`relative flex gap-${gapValues[gap]} rounded-${borderRadius} overflow-hidden bg-background shadow-sm transition-shadow hover:shadow-md ${`p-${padding}`}`}\n >\n <div\n className={`flex-shrink-0 text-${numberColor} text-${numberSize === \"md\" ? \"base\" : numberSize} flex w-16 items-center justify-center font-bold`}\n >\n {index + 1}\n </div>\n {imageUrl && (\n <div className=\"h-24 w-24 flex-shrink-0 overflow-hidden rounded-md\">\n <img\n src={imageUrl}\n alt={item.title || \"Product\"}\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex-1\">\n <ListItemCardContent item={item} {...contentProps} />\n </div>\n {showBadge && item.discount && (\n <div className=\"absolute top-2 right-2 rounded-md bg-destructive px-2 py-1 text-xs font-bold text-destructive-foreground\">\n {getStringValue(item.discount)}\n </div>\n )}\n {showFavorite && (\n <FavoriteButton className=\"absolute top-2 right-12 rounded-full bg-background/80 p-2 backdrop-blur-sm transition-colors hover:bg-background\" />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n return null;\n}\n","import type { ComponentProps } from \"react\";\nimport type {\n ColorOptions,\n FontSizeOptions,\n BorderRadiusOptions,\n PaddingOptions,\n GapOptions,\n BackgroundValue,\n} from \"@fluid-app/rep-core/types\";\nimport type { WidgetPropertySchema } from \"@fluid-app/rep-core/registries\";\nimport {\n getBorderRadiusField,\n getColorField,\n getFontSizeField,\n getPaddingField,\n getGapField,\n} from \"../core/fields\";\nimport { FeaturedSection } from \"./list-widget/FeaturedSection\";\nimport { UnorderedList } from \"./list-widget/UnorderedList\";\nimport { OrderedList } from \"./list-widget/OrderedList\";\n\nconst DEFAULT_ITEMS: ListItem[] = [];\n\ntype ListItem = {\n id: string;\n image?: string;\n imageUrl?: string;\n videoUrl?: string;\n title?: string;\n description?: string;\n price?: string;\n originalPrice?: string;\n discount?: string;\n qv?: string;\n cv?: string;\n};\n\ntype ImageAspectRatio = \"square\" | \"landscape\" | \"portrait\";\ntype ListType = \"ordered\" | \"unordered\";\ntype ScrollAxis = \"horizontal\" | \"vertical\";\n\ntype ListWidgetProps = ComponentProps<\"div\"> & {\n // List configuration\n listType?: ListType;\n scrollAxis?: ScrollAxis;\n titleEnabled?: boolean;\n title?: string;\n items?: ListItem[];\n\n // Text styling\n titleColor?: ColorOptions;\n titleSize?: FontSizeOptions;\n itemTitleColor?: ColorOptions;\n itemTitleSize?: FontSizeOptions;\n descriptionColor?: ColorOptions;\n descriptionSize?: FontSizeOptions;\n priceColor?: ColorOptions;\n priceSize?: FontSizeOptions;\n originalPriceColor?: ColorOptions;\n metaTextColor?: ColorOptions;\n metaTextSize?: FontSizeOptions;\n\n // Ordered list styling\n numberColor?: ColorOptions;\n numberSize?: FontSizeOptions;\n\n // Layout\n borderRadius?: BorderRadiusOptions;\n padding?: PaddingOptions;\n gap?: GapOptions;\n columns?: number;\n imageAspectRatio?: ImageAspectRatio;\n background?: BackgroundValue;\n\n // Behavior\n showBadge?: boolean;\n showFavorite?: boolean;\n showMetaText?: boolean;\n maxItems?: number;\n\n // Featured section\n showFeaturedSection?: boolean;\n featuredAsset?: string | { [key: string]: unknown };\n featuredTitle?: string;\n featuredSubtitle?: string;\n featuredButtonText?: string;\n featuredButtonUrl?: string;\n featuredSubtitleColor?: ColorOptions;\n featuredSubtitleSize?: FontSizeOptions;\n};\n\nfunction getFeaturedAssetUrl(\n value: string | { [key: string]: unknown } | undefined,\n): { url: string; isVideo: boolean } | undefined {\n if (!value) return undefined;\n\n // Handle string URLs\n if (typeof value === \"string\") {\n const isVideo = /\\.(mp4|webm|ogg|mov)$/i.test(value);\n return { url: value, isVideo };\n }\n\n // Handle ShareableItem objects\n if (typeof value === \"object\") {\n // Check for video URL first\n const videoUrl =\n (value.videoUrl as string) ||\n (value.video_url as string) ||\n (value.url as string);\n if (videoUrl && /\\.(mp4|webm|ogg|mov)$/i.test(videoUrl)) {\n return { url: videoUrl, isVideo: true };\n }\n\n // Fall back to image URL\n const imageUrl =\n (value.imageUrl as string) ||\n (value.image_url as string) ||\n (value.url as string);\n if (imageUrl) {\n return { url: imageUrl, isVideo: false };\n }\n }\n\n return undefined;\n}\n\nexport function ListWidget({\n listType = \"unordered\",\n scrollAxis = \"horizontal\",\n titleEnabled = true,\n title,\n items = DEFAULT_ITEMS,\n titleColor = \"foreground\",\n titleSize = \"lg\",\n itemTitleColor = \"foreground\",\n itemTitleSize = \"sm\",\n descriptionColor = \"foreground\",\n descriptionSize = \"sm\",\n priceColor = \"foreground\",\n priceSize = \"md\",\n originalPriceColor = \"muted\",\n metaTextColor = \"muted\",\n metaTextSize = \"xs\",\n numberColor = \"primary\",\n numberSize = \"2xl\",\n borderRadius = \"md\",\n padding = 4,\n gap = \"md\",\n columns = 3,\n imageAspectRatio = \"square\",\n background = { type: \"solid\", color: \"background\" },\n showBadge = true,\n showFavorite = true,\n showMetaText = true,\n maxItems = 12,\n showFeaturedSection = false,\n featuredAsset,\n featuredTitle,\n featuredSubtitle,\n featuredButtonText,\n featuredButtonUrl,\n featuredSubtitleColor = \"background\",\n featuredSubtitleSize = \"md\",\n className,\n ...props\n}: ListWidgetProps) {\n const displayItems = maxItems ? items.slice(0, maxItems) : items;\n const hasItems = displayItems.length > 0;\n\n const itemStyleProps = {\n padding,\n itemTitleColor,\n itemTitleSize,\n descriptionColor,\n descriptionSize,\n priceColor,\n priceSize,\n originalPriceColor,\n metaTextColor,\n metaTextSize,\n showMetaText,\n showBadge,\n showFavorite,\n borderRadius,\n imageAspectRatio,\n gap,\n };\n\n const hasFeaturedAsset = getFeaturedAssetUrl(featuredAsset);\n const shouldShowFeaturedSection = showFeaturedSection && hasFeaturedAsset;\n\n // Background styling\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n return (\n <div\n className={`@container bg-${backgroundColor} ${className}`}\n style={{ backgroundImage }}\n {...props}\n >\n {titleEnabled && title && (\n <h2\n className={`text-${titleColor} text-${titleSize === \"md\" ? \"base\" : titleSize} mb-6 font-bold`}\n >\n {title}\n </h2>\n )}\n {!hasItems ? (\n <div className=\"flex items-center justify-center rounded-md border-2 border-dashed border-border bg-muted py-12 text-center\">\n <p className=\"text-muted\">No items to display</p>\n </div>\n ) : shouldShowFeaturedSection ? (\n <div className=\"flex flex-col gap-4 @lg:flex-row @lg:gap-6\">\n <div className=\"w-full @lg:w-[45%]\">\n <FeaturedSection\n borderRadius={borderRadius}\n titleSize={titleSize}\n featuredTitle={featuredTitle}\n featuredSubtitle={featuredSubtitle}\n featuredButtonText={featuredButtonText}\n featuredButtonUrl={featuredButtonUrl}\n featuredSubtitleColor={featuredSubtitleColor}\n featuredSubtitleSize={featuredSubtitleSize}\n asset={hasFeaturedAsset!}\n />\n </div>\n <div className=\"w-full @lg:w-[55%]\">\n {listType === \"unordered\" ? (\n <UnorderedList\n items={displayItems}\n columns={columns}\n {...itemStyleProps}\n />\n ) : (\n <OrderedList\n items={displayItems}\n scrollAxis={scrollAxis}\n numberColor={numberColor}\n numberSize={numberSize}\n {...itemStyleProps}\n />\n )}\n </div>\n </div>\n ) : listType === \"unordered\" ? (\n <UnorderedList\n items={displayItems}\n columns={columns}\n {...itemStyleProps}\n />\n ) : (\n <OrderedList\n items={displayItems}\n scrollAxis={scrollAxis}\n numberColor={numberColor}\n numberSize={numberSize}\n {...itemStyleProps}\n />\n )}\n </div>\n );\n}\n\nexport const listWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"ListWidget\",\n displayName: \"List\",\n tabsConfig: [\n { id: \"styling\", label: \"Styling\" },\n { id: \"data\", label: \"Data\" },\n ],\n dataSourceTargetProps: [\"items\"],\n fields: [\n // Styling tab - Title group\n {\n key: \"titleEnabled\",\n label: \"Widget Title\",\n type: \"boolean\",\n description: \"Enable the title displayed above the list\",\n defaultValue: true,\n tab: \"styling\",\n group: \"Title\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Header text for the list\",\n defaultValue: \"List\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n },\n getFontSizeField({\n key: \"titleSize\",\n label: \"Title Font Size\",\n description: \"Size of the list title\",\n defaultValue: \"xl\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the list title\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Title\",\n requiresKeyToBeTrue: \"titleEnabled\",\n }),\n\n // Styling tab - Design group\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Padding inside the container\",\n defaultValue: 4,\n tab: \"styling\",\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Rounded corners for the container and images\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gap\",\n label: \"Gap\",\n description: \"Spacing between items\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Design\",\n }),\n {\n type: \"background\",\n defaultValue: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background color or image for the widget\",\n tab: \"styling\",\n group: \"Design\",\n },\n\n // Styling tab - List Configuration group\n {\n key: \"listType\",\n label: \"List Type\",\n type: \"select\",\n description: \"Type of list layout\",\n defaultValue: \"unordered\",\n options: [\n { label: \"Unordered (Grid)\", value: \"unordered\" },\n { label: \"Ordered (Numbered)\", value: \"ordered\" },\n ],\n tab: \"styling\",\n group: \"List Configuration\",\n },\n {\n key: \"maxItems\",\n label: \"Max Items\",\n type: \"number\",\n description: \"Maximum number of items to display\",\n min: 1,\n max: 100,\n step: 1,\n defaultValue: 12,\n tab: \"styling\",\n group: \"List Configuration\",\n },\n {\n key: \"imageAspectRatio\",\n label: \"Image Aspect Ratio\",\n type: \"buttonGroup\",\n description: \"Aspect ratio for item images\",\n defaultValue: \"square\",\n options: [\n { label: \"Square\", value: \"square\" },\n { label: \"Landscape\", value: \"landscape\" },\n { label: \"Portrait\", value: \"portrait\" },\n ],\n tab: \"styling\",\n group: \"List Configuration\",\n },\n {\n key: \"showBadge\",\n label: \"Show Discount Badge\",\n type: \"boolean\",\n description: \"Display discount badge on images\",\n defaultValue: true,\n tab: \"styling\",\n group: \"List Configuration\",\n },\n {\n key: \"showFavorite\",\n label: \"Show Favorite Icon\",\n type: \"boolean\",\n description: \"Display favorite/heart icon on images\",\n defaultValue: true,\n tab: \"styling\",\n group: \"List Configuration\",\n },\n {\n key: \"showMetaText\",\n label: \"Show QV/CV Text\",\n type: \"boolean\",\n description: \"Display QV and CV values\",\n defaultValue: true,\n tab: \"styling\",\n group: \"List Configuration\",\n },\n\n // Styling tab - Unordered List Configuration\n {\n key: \"columns\",\n label: \"Grid Columns\",\n type: \"number\",\n description: \"Number of columns in the grid (unordered list only)\",\n min: 1,\n max: 6,\n step: 1,\n defaultValue: 3,\n tab: \"styling\",\n group: \"Unordered List Configuration\",\n requiresKeyValue: { key: \"listType\", value: \"unordered\" },\n },\n\n // Styling tab - Ordered List Configuration\n {\n key: \"scrollAxis\",\n label: \"Scroll Direction\",\n type: \"select\",\n description: \"Direction for ordered list scrolling\",\n defaultValue: \"horizontal\",\n options: [\n { label: \"Horizontal\", value: \"horizontal\" },\n { label: \"Vertical\", value: \"vertical\" },\n ],\n tab: \"styling\",\n group: \"Ordered List Configuration\",\n requiresKeyValue: { key: \"listType\", value: \"ordered\" },\n },\n getColorField({\n key: \"numberColor\",\n label: \"Number Color\",\n description: \"Color for ordered list numbers\",\n defaultValue: \"primary\",\n tab: \"styling\",\n group: \"Ordered List Configuration\",\n requiresKeyValue: { key: \"listType\", value: \"ordered\" },\n }),\n getFontSizeField({\n key: \"numberSize\",\n label: \"Number Font Size\",\n description: \"Size of ordered list numbers\",\n defaultValue: \"2xl\",\n tab: \"styling\",\n group: \"Ordered List Configuration\",\n requiresKeyValue: { key: \"listType\", value: \"ordered\" },\n }),\n\n // Styling tab - Item Styling group\n getColorField({\n key: \"itemTitleColor\",\n label: \"Item Title Color\",\n description: \"Color for item titles\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n getFontSizeField({\n key: \"itemTitleSize\",\n label: \"Item Title Font Size\",\n description: \"Size of item titles\",\n defaultValue: \"sm\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n {\n key: \"separator2\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Item Styling\",\n },\n getColorField({\n key: \"descriptionColor\",\n label: \"Description Color\",\n description: \"Color for descriptions\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n getFontSizeField({\n key: \"descriptionSize\",\n label: \"Description Font Size\",\n description: \"Size of descriptions\",\n defaultValue: \"sm\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n {\n key: \"separator3\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Item Styling\",\n },\n getColorField({\n key: \"priceColor\",\n label: \"Price Color\",\n description: \"Color for prices\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n getFontSizeField({\n key: \"priceSize\",\n label: \"Price Font Size\",\n description: \"Size of prices\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n getColorField({\n key: \"originalPriceColor\",\n label: \"Original Price Color\",\n description: \"Color for crossed-out original prices\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n {\n key: \"separator4\",\n type: \"separator\",\n label: \"Separator\",\n tab: \"styling\",\n group: \"Item Styling\",\n },\n getColorField({\n key: \"metaTextColor\",\n label: \"Meta Text Color\",\n description: \"Color for QV/CV text\",\n defaultValue: \"foreground\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n getFontSizeField({\n key: \"metaTextSize\",\n label: \"Meta Text Font Size\",\n description: \"Size of QV/CV text\",\n defaultValue: \"xs\",\n tab: \"styling\",\n group: \"Item Styling\",\n }),\n\n // Styling tab - Featured Section group\n {\n key: \"showFeaturedSection\",\n label: \"Show Featured Section\",\n type: \"boolean\",\n description: \"Display a featured content section\",\n defaultValue: false,\n tab: \"styling\",\n group: \"Featured Section\",\n },\n {\n key: \"featuredAsset\",\n label: \"Featured Asset\",\n type: \"resource\",\n description:\n \"Select a single image or video resource for the featured section\",\n tab: \"styling\",\n group: \"Featured Section\",\n allowedTypes: [\"Medium\"],\n requiresKeyToBeTrue: \"showFeaturedSection\",\n },\n {\n key: \"featuredTitle\",\n label: \"Featured Title\",\n type: \"text\",\n description: \"Title for featured section\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n },\n {\n key: \"featuredSubtitle\",\n label: \"Featured Subtitle\",\n type: \"text\",\n description: \"Subtitle for featured section\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n },\n {\n key: \"featuredButtonText\",\n label: \"Featured Button Text\",\n type: \"text\",\n description: \"Text for featured section button\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n },\n {\n key: \"featuredButtonUrl\",\n label: \"Featured Button URL\",\n type: \"text\",\n description: \"URL for featured section button\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n },\n getColorField({\n key: \"featuredSubtitleColor\",\n label: \"Featured Subtitle Color\",\n description: \"Color for featured subtitle\",\n defaultValue: \"background\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n }),\n getFontSizeField({\n key: \"featuredSubtitleSize\",\n label: \"Featured Subtitle Font Size\",\n description: \"Size of featured subtitle\",\n defaultValue: \"md\",\n tab: \"styling\",\n group: \"Featured Section\",\n requiresKeyToBeTrue: \"showFeaturedSection\",\n }),\n\n // Data tab - Data Configuration\n {\n key: \"dataSource\",\n label: \"Data Source\",\n type: \"dataSource\",\n description: \"\",\n tab: \"data\",\n group: \"Data Configuration\",\n },\n ],\n itemConfigSchema: {\n description: \"Configure settings for this list item\",\n fields: [\n {\n key: \"title\",\n label: \"Custom Title\",\n type: \"text\",\n description: \"Override the item's title\",\n },\n {\n key: \"description\",\n label: \"Custom Description\",\n type: \"textarea\",\n description: \"Override the item's description\",\n rows: 3,\n },\n {\n key: \"price\",\n label: \"Price\",\n type: \"text\",\n description: \"Current price\",\n },\n {\n key: \"originalPrice\",\n label: \"Original Price\",\n type: \"text\",\n description: \"Original price (will be crossed out)\",\n },\n {\n key: \"discount\",\n label: \"Discount Badge\",\n type: \"text\",\n description: \"Discount text (e.g., '40% Off')\",\n },\n {\n key: \"qv\",\n label: \"QV Value\",\n type: \"text\",\n description: \"Qualifying Volume value\",\n },\n {\n key: \"cv\",\n label: \"CV Value\",\n type: \"text\",\n description: \"Commission Volume value\",\n },\n {\n key: \"image\",\n label: \"Image URL\",\n type: \"text\",\n description: \"Custom image URL for this item\",\n },\n ],\n },\n} as const satisfies WidgetPropertySchema;\n"]}