@coveo/thermidor-schema 1.0.0-beta.4 → 1.0.0-beta.6

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 (32) hide show
  1. package/dist/generated/schemas.d.ts +1545 -339
  2. package/dist/generated/schemas.js +557 -208
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +1 -1
  5. package/package.json +20 -19
  6. package/schema/base/catalog.schema.json +3 -2
  7. package/schema/base/component.schema.json +24 -33
  8. package/schema/{components/component-contracts.schema.json → component-contracts.schema.json} +8 -2
  9. package/schema/components/bundle-display.schema.json +9 -13
  10. package/schema/components/cart.schema.json +147 -0
  11. package/schema/components/category-facet.schema.json +29 -13
  12. package/schema/components/commerce-search.schema.json +129 -15
  13. package/schema/components/comparison-table.schema.json +21 -13
  14. package/schema/components/date-facet.schema.json +33 -13
  15. package/schema/components/facet-manager.schema.json +12 -14
  16. package/schema/components/layout-stack.schema.json +18 -15
  17. package/schema/components/next-actions-bar.schema.json +12 -15
  18. package/schema/components/numeric-facet.schema.json +37 -13
  19. package/schema/components/page-size.schema.json +13 -15
  20. package/schema/components/pagination.schema.json +41 -14
  21. package/schema/components/product-carousel.schema.json +13 -13
  22. package/schema/components/product-list.schema.json +75 -14
  23. package/schema/components/product-summary.schema.json +15 -14
  24. package/schema/components/query-suggestions.schema.json +113 -0
  25. package/schema/components/query-summary.schema.json +23 -14
  26. package/schema/components/regular-facet.schema.json +33 -13
  27. package/schema/components/sort.schema.json +13 -13
  28. package/schema/definitions/bundle-tier.schema.json +6 -1
  29. package/schema/definitions/child-list.schema.json +32 -0
  30. package/schema/definitions/component-id.schema.json +9 -0
  31. package/schema/definitions/data-binding.schema.json +16 -0
  32. package/schema/definitions/child-ref.schema.json +0 -8
@@ -9,9 +9,28 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
13
16
  "type": "string",
14
- "const": "comparison-table"
17
+ "const": "ComparisonTable"
18
+ },
19
+ "heading": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The table heading, bound to /state/<id>/heading."
22
+ },
23
+ "summary": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The AI summary text, bound to /state/<id>/summary."
26
+ },
27
+ "products": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The compared products, bound to /state/<id>/products."
30
+ },
31
+ "attributes": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The ordered attribute descriptors, bound to /state/<id>/attributes."
15
34
  },
16
35
  "state": {
17
36
  "$ref": "#/$defs/ComparisonTableState"
@@ -20,17 +39,6 @@
20
39
  "type": "object",
21
40
  "properties": {},
22
41
  "additionalProperties": false
23
- },
24
- "children": {
25
- "type": "array",
26
- "items": {
27
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
28
- },
29
- "maxItems": 1000,
30
- "default": []
31
- },
32
- "child": {
33
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
34
42
  }
35
43
  },
36
44
  "additionalProperties": false,
@@ -9,9 +9,40 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "component": {
13
13
  "type": "string",
14
- "const": "date-facet"
14
+ "const": "DateFacet"
15
+ },
16
+ "id": {
17
+ "type": "string"
18
+ },
19
+ "field": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The commerce index field the facet operates on, bound to /state/<id>/field."
22
+ },
23
+ "displayName": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The facet's human-readable label, bound to /state/<id>/displayName."
26
+ },
27
+ "values": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The date-range facet values, bound to /state/<id>/values."
30
+ },
31
+ "customRange": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The custom range, bound to /state/<id>/customRange."
34
+ },
35
+ "hasActiveValues": {
36
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
37
+ "description": "Whether at least one facet value is active, bound to /state/<id>/hasActiveValues."
38
+ },
39
+ "canShowMoreValues": {
40
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
41
+ "description": "Whether more facet values can be shown, bound to /state/<id>/canShowMoreValues."
42
+ },
43
+ "canShowLessValues": {
44
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
45
+ "description": "Whether fewer facet values can be shown, bound to /state/<id>/canShowLessValues."
15
46
  },
16
47
  "state": {
17
48
  "$ref": "#/$defs/DateFacetState"
@@ -47,17 +78,6 @@
47
78
  }
48
79
  },
49
80
  "additionalProperties": false
50
- },
51
- "children": {
52
- "type": "array",
53
- "items": {
54
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
55
- },
56
- "maxItems": 1000,
57
- "default": []
58
- },
59
- "child": {
60
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
61
81
  }
62
82
  },
63
83
  "additionalProperties": false,
@@ -2,16 +2,25 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schema.thermidor.coveo.com/components/facet-manager.schema.json",
4
4
  "title": "FacetManager",
5
- "description": "Manages facet ordering and cross-facet concerns. Holds the backend-determined order of facet components as state. The position of each identifier (indexed from 0) determines the facet's rendering rank. Ready to gain cross-facet actions (e.g., clear all facets, reorder) as needs arise.",
5
+ "description": "Manages facet ordering and cross-facet concerns. Holds the backend-determined order of facet components as state; each identifier's position (from 0) is its rendering rank.",
6
+ "$comment": "Ready to gain cross-facet actions (e.g. clear all facets, reorder) as needs arise.",
6
7
  "allOf": [
7
8
  {
8
9
  "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
10
  }
10
11
  ],
11
12
  "properties": {
12
- "componentType": {
13
+ "id": {
14
+ "type": "string"
15
+ },
16
+ "component": {
13
17
  "type": "string",
14
- "const": "facet-manager"
18
+ "const": "FacetManager"
19
+ },
20
+ "children": {
21
+ "$ref": "https://schema.thermidor.coveo.com/definitions/child-list.schema.json",
22
+ "description": "The backend-determined facet order: a ChildList of ComponentId references whose position (from 0) is each facet's rendering rank.",
23
+ "$comment": "Homogeneous ordered-list composition: child ids are static (binder passes through unresolved), mounted in order via children(id)."
15
24
  },
16
25
  "state": {
17
26
  "$ref": "#/$defs/FacetManagerState"
@@ -20,17 +29,6 @@
20
29
  "type": "object",
21
30
  "properties": {},
22
31
  "additionalProperties": false
23
- },
24
- "children": {
25
- "type": "array",
26
- "items": {
27
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
28
- },
29
- "maxItems": 1000,
30
- "default": []
31
- },
32
- "child": {
33
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
34
32
  }
35
33
  },
36
34
  "additionalProperties": false,
@@ -2,16 +2,30 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schema.thermidor.coveo.com/components/layout-stack.schema.json",
4
4
  "title": "LayoutStack",
5
- "description": "Generic layout container that stacks its children along a single axis. It carries no business data: its AG-UI state is empty. Layout is a presentation concern and travels as an A2-UI node prop ('direction': 'column' | 'row'), never as AG-UI state. Reused across surfaces (commerce search, knowledge search) to compose columns and rows from the A2-UI composition plane rather than hardcoding layout per parent renderer.",
5
+ "description": "Generic layout container that stacks its children along a single axis. Carries no business data; its state is empty and the stacking direction travels as a presentation prop.",
6
+ "$comment": "Reused across surfaces to compose rows/columns from the A2-UI composition plane rather than hardcoding layout per parent renderer.",
6
7
  "allOf": [
7
8
  {
8
9
  "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
10
  }
10
11
  ],
11
12
  "properties": {
12
- "componentType": {
13
+ "id": {
14
+ "type": "string"
15
+ },
16
+ "component": {
17
+ "type": "string",
18
+ "const": "LayoutStack"
19
+ },
20
+ "direction": {
13
21
  "type": "string",
14
- "const": "layout-stack"
22
+ "enum": ["column", "row"],
23
+ "description": "The axis along which children are stacked. A plain presentation value at the node top level, never server state."
24
+ },
25
+ "children": {
26
+ "$ref": "https://schema.thermidor.coveo.com/definitions/child-list.schema.json",
27
+ "description": "The ordered children, a ChildList of ComponentId references mounted in order via children(id).",
28
+ "$comment": "Homogeneous ordered-list composition: the ordered list is the semantics; child ids are static, passed through unresolved."
15
29
  },
16
30
  "state": {
17
31
  "$ref": "#/$defs/LayoutStackState"
@@ -20,24 +34,13 @@
20
34
  "type": "object",
21
35
  "properties": {},
22
36
  "additionalProperties": false
23
- },
24
- "children": {
25
- "type": "array",
26
- "items": {
27
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
28
- },
29
- "maxItems": 1000,
30
- "default": []
31
- },
32
- "child": {
33
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
34
37
  }
35
38
  },
36
39
  "additionalProperties": false,
37
40
  "$defs": {
38
41
  "LayoutStackState": {
39
42
  "title": "LayoutStackState",
40
- "description": "The layout-stack state. A layout container holds no business data, so its state is always the empty object. The stacking direction is presentation and travels as an A2-UI node prop, never as AG-UI state.",
43
+ "description": "Empty: a layout container holds no business data.",
41
44
  "type": "object",
42
45
  "required": [],
43
46
  "properties": {},
@@ -9,9 +9,17 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
13
16
  "type": "string",
14
- "const": "next-actions-bar"
17
+ "const": "NextActionsBar"
18
+ },
19
+ "suggestedActions": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "Bound list of selectable next-action descriptors (bound to /state/<id>/suggestedActions). Presentation data, not the dispatchable actions map.",
22
+ "$comment": "Named `suggestedActions` (not `actions`) so it does not collide with the reserved dispatchable `actions` map."
15
23
  },
16
24
  "state": {
17
25
  "$ref": "#/$defs/NextActionsState"
@@ -25,17 +33,6 @@
25
33
  }
26
34
  },
27
35
  "additionalProperties": false
28
- },
29
- "children": {
30
- "type": "array",
31
- "items": {
32
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
33
- },
34
- "maxItems": 1000,
35
- "default": []
36
- },
37
- "child": {
38
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
39
36
  }
40
37
  },
41
38
  "additionalProperties": false,
@@ -45,9 +42,9 @@
45
42
  "description": "The list of suggested actions to render. Owned exclusively by the backend; the frontend must not mutate this directly.",
46
43
  "$comment": "This schema validates the runtime state value the backend pushes to the frontend.",
47
44
  "type": "object",
48
- "required": ["actions"],
45
+ "required": ["suggestedActions"],
49
46
  "properties": {
50
- "actions": {
47
+ "suggestedActions": {
51
48
  "type": "array",
52
49
  "description": "Suggested actions the assistant offers the user.",
53
50
  "items": {
@@ -9,9 +9,44 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "component": {
13
13
  "type": "string",
14
- "const": "numeric-facet"
14
+ "const": "NumericFacet"
15
+ },
16
+ "id": {
17
+ "type": "string"
18
+ },
19
+ "field": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The index field the facet queries, bound to /state/<id>/field."
22
+ },
23
+ "displayName": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The facet's human-readable label, bound to /state/<id>/displayName."
26
+ },
27
+ "values": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The numeric-range facet values, bound to /state/<id>/values."
30
+ },
31
+ "customRange": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The custom range, bound to /state/<id>/customRange."
34
+ },
35
+ "hasActiveValues": {
36
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
37
+ "description": "Whether at least one facet value is active, bound to /state/<id>/hasActiveValues."
38
+ },
39
+ "canShowMoreValues": {
40
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
41
+ "description": "Whether more facet values can be shown, bound to /state/<id>/canShowMoreValues."
42
+ },
43
+ "canShowLessValues": {
44
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
45
+ "description": "Whether fewer facet values can be shown, bound to /state/<id>/canShowLessValues."
46
+ },
47
+ "domain": {
48
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
49
+ "description": "The numeric domain (min/max) of the facet, bound to /state/<id>/domain."
15
50
  },
16
51
  "state": {
17
52
  "$ref": "#/$defs/NumericFacetState"
@@ -47,17 +82,6 @@
47
82
  }
48
83
  },
49
84
  "additionalProperties": false
50
- },
51
- "children": {
52
- "type": "array",
53
- "items": {
54
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
55
- },
56
- "maxItems": 1000,
57
- "default": []
58
- },
59
- "child": {
60
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
61
85
  }
62
86
  },
63
87
  "additionalProperties": false,
@@ -2,16 +2,24 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://schema.thermidor.coveo.com/components/page-size.schema.json",
4
4
  "title": "PageSize",
5
- "description": "A 'Products per page' selector for a search surface. Its own componentType lets it be mounted through the A2-UI tree (one renderer per componentType). It owns the current pageSize in its state and dispatches setPageSize; the backend applies the change to the surface's paging so the pagination component re-renders from the shared view.",
5
+ "description": "A 'Products per page' selector for a search surface. Owns the current pageSize in its state and dispatches setPageSize.",
6
+ "$comment": "Its own component discriminant lets it mount through the A2-UI tree. The backend applies the change so the pagination component re-renders from the shared view.",
6
7
  "allOf": [
7
8
  {
8
9
  "$ref": "https://schema.thermidor.coveo.com/base/component.schema.json"
9
10
  }
10
11
  ],
11
12
  "properties": {
12
- "componentType": {
13
+ "id": {
14
+ "type": "string"
15
+ },
16
+ "component": {
13
17
  "type": "string",
14
- "const": "page-size"
18
+ "const": "PageSize"
19
+ },
20
+ "pageSize": {
21
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
22
+ "description": "The current page size, bound to /state/<id>/pageSize via a { \"path\": ... } Data_Binding."
15
23
  },
16
24
  "state": {
17
25
  "$ref": "#/$defs/PageSizeState"
@@ -25,24 +33,14 @@
25
33
  }
26
34
  },
27
35
  "additionalProperties": false
28
- },
29
- "children": {
30
- "type": "array",
31
- "items": {
32
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
33
- },
34
- "maxItems": 1000,
35
- "default": []
36
- },
37
- "child": {
38
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
39
36
  }
40
37
  },
41
38
  "additionalProperties": false,
42
39
  "$defs": {
43
40
  "PageSizeState": {
44
41
  "title": "PageSizeState",
45
- "description": "The current page size. Owned exclusively by the backend. Kept as its own entry (keyed by this component's id) so the selector reads exactly the field it needs without depending on the pagination component's state shape.",
42
+ "description": "The current page size. Owned exclusively by the backend.",
43
+ "$comment": "Kept as its own entry (keyed by this component's id) so the selector reads only the field it needs, independent of the pagination component's state shape.",
46
44
  "type": "object",
47
45
  "required": ["pageSize"],
48
46
  "properties": {
@@ -9,36 +9,47 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
13
16
  "type": "string",
14
- "const": "pagination"
17
+ "const": "Pagination"
18
+ },
19
+ "page": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The current page number, bound to /state/<id>/page via a { \"path\": ... } Data_Binding."
22
+ },
23
+ "pageSize": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The number of items per page, bound to /state/<id>/pageSize."
26
+ },
27
+ "totalEntries": {
28
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
29
+ "description": "The total number of items, bound to /state/<id>/totalEntries."
30
+ },
31
+ "totalPages": {
32
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
33
+ "description": "The total number of pages, bound to /state/<id>/totalPages."
15
34
  },
16
35
  "state": {
17
36
  "$ref": "#/$defs/PaginationState"
18
37
  },
19
38
  "actions": {
20
39
  "type": "object",
21
- "required": ["selectPage", "setPageSize"],
40
+ "required": ["selectPage", "setPageSize", "showMore"],
22
41
  "properties": {
23
42
  "selectPage": {
24
43
  "$ref": "#/$defs/SelectPageAction"
25
44
  },
26
45
  "setPageSize": {
27
46
  "$ref": "#/$defs/SetPageSizeAction"
47
+ },
48
+ "showMore": {
49
+ "$ref": "#/$defs/ShowMoreAction"
28
50
  }
29
51
  },
30
52
  "additionalProperties": false
31
- },
32
- "children": {
33
- "type": "array",
34
- "items": {
35
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
36
- },
37
- "maxItems": 1000,
38
- "default": []
39
- },
40
- "child": {
41
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
42
53
  }
43
54
  },
44
55
  "additionalProperties": false,
@@ -117,6 +128,22 @@
117
128
  "additionalProperties": false
118
129
  }
119
130
  }
131
+ },
132
+ "ShowMoreAction": {
133
+ "title": "showMore",
134
+ "description": "Advances to the next page while preserving backend ownership of pagination state.",
135
+ "allOf": [
136
+ {
137
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
138
+ }
139
+ ],
140
+ "properties": {
141
+ "payload": {
142
+ "type": "object",
143
+ "properties": {},
144
+ "additionalProperties": false
145
+ }
146
+ }
120
147
  }
121
148
  }
122
149
  }
@@ -9,9 +9,20 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
13
16
  "type": "string",
14
- "const": "product-carousel"
17
+ "const": "ProductCarousel"
18
+ },
19
+ "heading": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The carousel heading, bound to /state/<id>/heading."
22
+ },
23
+ "products": {
24
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
25
+ "description": "The ordered list of products, bound to /state/<id>/products."
15
26
  },
16
27
  "state": {
17
28
  "$ref": "#/$defs/ProductCarouselState"
@@ -20,17 +31,6 @@
20
31
  "type": "object",
21
32
  "properties": {},
22
33
  "additionalProperties": false
23
- },
24
- "children": {
25
- "type": "array",
26
- "items": {
27
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
28
- },
29
- "maxItems": 1000,
30
- "default": []
31
- },
32
- "child": {
33
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
34
34
  }
35
35
  },
36
36
  "additionalProperties": false,
@@ -9,28 +9,32 @@
9
9
  }
10
10
  ],
11
11
  "properties": {
12
- "componentType": {
12
+ "id": {
13
+ "type": "string"
14
+ },
15
+ "component": {
13
16
  "type": "string",
14
- "const": "product-list"
17
+ "const": "ProductList"
18
+ },
19
+ "products": {
20
+ "$ref": "https://schema.thermidor.coveo.com/definitions/data-binding.schema.json",
21
+ "description": "The ordered list of products, bound to /state/<id>/products via a { \"path\": ... } Data_Binding."
15
22
  },
16
23
  "state": {
17
24
  "$ref": "#/$defs/ProductListState"
18
25
  },
19
26
  "actions": {
20
27
  "type": "object",
21
- "properties": {},
22
- "additionalProperties": false
23
- },
24
- "children": {
25
- "type": "array",
26
- "items": {
27
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
28
+ "required": ["selectProducts", "productClick"],
29
+ "properties": {
30
+ "selectProducts": {
31
+ "$ref": "#/$defs/SelectProductsAction"
32
+ },
33
+ "productClick": {
34
+ "$ref": "#/$defs/ProductClickAction"
35
+ }
28
36
  },
29
- "maxItems": 1000,
30
- "default": []
31
- },
32
- "child": {
33
- "$ref": "https://schema.thermidor.coveo.com/definitions/child-ref.schema.json"
37
+ "additionalProperties": false
34
38
  }
35
39
  },
36
40
  "additionalProperties": false,
@@ -50,6 +54,63 @@
50
54
  }
51
55
  },
52
56
  "additionalProperties": false
57
+ },
58
+ "SelectProductsAction": {
59
+ "title": "selectProducts",
60
+ "description": "Persists the set of products selected by the shopper.",
61
+ "allOf": [
62
+ {
63
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
64
+ }
65
+ ],
66
+ "properties": {
67
+ "payload": {
68
+ "type": "object",
69
+ "required": ["productIds"],
70
+ "properties": {
71
+ "productIds": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "string",
75
+ "minLength": 1
76
+ }
77
+ }
78
+ },
79
+ "additionalProperties": false
80
+ }
81
+ }
82
+ },
83
+ "ProductClickAction": {
84
+ "title": "productClick",
85
+ "description": "Records a shopper clicking a product result.",
86
+ "allOf": [
87
+ {
88
+ "$ref": "https://schema.thermidor.coveo.com/base/action.schema.json"
89
+ }
90
+ ],
91
+ "properties": {
92
+ "payload": {
93
+ "type": "object",
94
+ "required": ["productId", "position"],
95
+ "properties": {
96
+ "productId": {
97
+ "type": "string",
98
+ "minLength": 1
99
+ },
100
+ "name": {
101
+ "type": "string"
102
+ },
103
+ "price": {
104
+ "type": ["number", "null"]
105
+ },
106
+ "position": {
107
+ "type": "integer",
108
+ "minimum": 0
109
+ }
110
+ },
111
+ "additionalProperties": false
112
+ }
113
+ }
53
114
  }
54
115
  }
55
116
  }