@picked/client 0.0.1-dev.1785305085063 → 0.0.1-dev.1785908062293

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 (291) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/api-03c5jvVk.js +38 -0
  3. package/dist/api-CQxCVIrm.cjs +1 -0
  4. package/dist/cjs/form/index.js +1 -1
  5. package/dist/cjs/index.js +2 -2
  6. package/dist/cjs/plugins/dom-observer/index.js +1 -1
  7. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  8. package/dist/cjs/server/index.js +1 -1
  9. package/dist/docs/explanation/conditions-and-the-logic-engine.md +94 -0
  10. package/dist/docs/explanation/feature-flag-allocation.md +176 -0
  11. package/dist/docs/explanation/how-picked-works.md +124 -0
  12. package/dist/docs/explanation/how-pickedql-works.md +76 -0
  13. package/dist/docs/explanation/pages-and-flows.md +64 -0
  14. package/dist/docs/explanation/the-content-model.md +77 -0
  15. package/dist/docs/explanation/the-two-apis.md +68 -0
  16. package/dist/docs/explanation/why-server-side-rendering.md +76 -0
  17. package/dist/docs/explanation/workspaces-and-versions.md +71 -0
  18. package/dist/docs/how-to/add-a-step-field-or-action.md +43 -0
  19. package/dist/docs/{pickedql/examples.md → how-to/analytics/index.md} +53 -28
  20. package/dist/docs/how-to/archive-or-delete-a-workspace.md +46 -0
  21. package/dist/docs/how-to/authenticate-with-a-magic-link.md +40 -0
  22. package/dist/docs/how-to/authenticate-with-a-password.md +51 -0
  23. package/dist/docs/how-to/authenticate-with-an-api-key.md +51 -0
  24. package/dist/docs/how-to/authenticate-with-oauth.md +40 -0
  25. package/dist/docs/how-to/build-a-flow.md +83 -0
  26. package/dist/docs/how-to/connect-the-mcp-server.md +38 -0
  27. package/dist/docs/how-to/create-a-project.md +29 -0
  28. package/dist/docs/how-to/create-an-experience.md +42 -0
  29. package/dist/docs/how-to/create-and-revoke-an-api-key.md +37 -0
  30. package/dist/docs/how-to/debug-with-the-chrome-extension.md +57 -0
  31. package/dist/docs/how-to/define-a-page-layout.md +39 -0
  32. package/dist/docs/how-to/fill-and-publish-a-page.md +50 -0
  33. package/dist/docs/how-to/install-the-gtm-template.md +84 -0
  34. package/dist/docs/how-to/install-the-sdk.md +68 -0
  35. package/dist/docs/how-to/install-the-vite-plugin.md +56 -0
  36. package/dist/docs/how-to/invite-and-remove-members.md +34 -0
  37. package/dist/docs/how-to/preview-a-workspace.md +28 -0
  38. package/dist/docs/how-to/publish-a-workspace.md +30 -0
  39. package/dist/docs/how-to/read-a-feature-flag.md +101 -0
  40. package/dist/docs/how-to/register-a-component.md +55 -0
  41. package/dist/docs/how-to/register-an-action-handler.md +67 -0
  42. package/dist/docs/how-to/render-a-step-form.md +132 -0
  43. package/dist/docs/how-to/render-an-unpublished-preview.md +41 -0
  44. package/dist/docs/how-to/reuse-a-section.md +37 -0
  45. package/dist/docs/how-to/reuse-a-step-field-or-action.md +28 -0
  46. package/dist/docs/how-to/roll-back-a-published-version.md +26 -0
  47. package/dist/docs/how-to/run-an-ab-test.md +49 -0
  48. package/dist/docs/how-to/run-code-on-a-form-submission.md +125 -0
  49. package/dist/docs/how-to/server-render-a-page.md +81 -0
  50. package/dist/docs/how-to/set-a-content-security-policy.md +32 -0
  51. package/dist/docs/how-to/set-up-mfa.md +69 -0
  52. package/dist/docs/how-to/upload-and-use-an-asset.mdx +73 -0
  53. package/dist/docs/how-to/validate-a-field.md +52 -0
  54. package/dist/docs/how-to/write-a-condition.md +45 -0
  55. package/dist/docs/how-to/write-a-predicate.md +60 -0
  56. package/dist/docs/index.md +41 -59
  57. package/dist/docs/reference/dashboard/actions.mdx +53 -0
  58. package/dist/docs/reference/dashboard/api-keys.mdx +37 -0
  59. package/dist/docs/reference/dashboard/conditions.mdx +42 -0
  60. package/dist/docs/reference/dashboard/content/asset-library.mdx +63 -0
  61. package/dist/docs/reference/dashboard/content/content-entries.mdx +44 -0
  62. package/dist/docs/reference/dashboard/content/layouts.mdx +62 -0
  63. package/dist/docs/reference/dashboard/content/pages.mdx +35 -0
  64. package/dist/docs/reference/dashboard/content/sections.mdx +28 -0
  65. package/dist/docs/reference/dashboard/experiences.mdx +51 -0
  66. package/dist/docs/reference/dashboard/features.mdx +114 -0
  67. package/dist/docs/reference/dashboard/fields.mdx +100 -0
  68. package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +58 -0
  69. package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +57 -0
  70. package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +72 -0
  71. package/dist/docs/reference/dashboard/flow-builder/nodes.md +63 -0
  72. package/dist/docs/reference/dashboard/projects.mdx +44 -0
  73. package/dist/docs/reference/dashboard/reports.mdx +43 -0
  74. package/dist/docs/reference/dashboard/steps.mdx +37 -0
  75. package/dist/docs/reference/dashboard/team-management.md +29 -0
  76. package/dist/docs/reference/dashboard/workspace-versioning.mdx +30 -0
  77. package/dist/docs/reference/dashboard/workspaces.mdx +76 -0
  78. package/dist/docs/{delivery-api → reference/delivery-api}/experience-content.md +17 -5
  79. package/dist/docs/reference/delivery-api/index.md +45 -0
  80. package/dist/docs/reference/delivery-api/preview-caching-crawling.md +79 -0
  81. package/dist/docs/{delivery-api → reference/delivery-api}/project-config.md +15 -6
  82. package/dist/docs/reference/glossary.md +173 -0
  83. package/dist/docs/reference/management-api/authentication.md +74 -0
  84. package/dist/docs/{api → reference/management-api}/authorization-and-scopes.md +70 -47
  85. package/dist/docs/reference/management-api/error-handling.md +233 -0
  86. package/dist/docs/{api → reference/management-api}/pagination.md +36 -20
  87. package/dist/docs/reference/pickedql/data-sources.md +174 -0
  88. package/dist/docs/reference/pickedql/dimensions.md +87 -0
  89. package/dist/docs/{pickedql → reference/pickedql}/filtering.md +17 -6
  90. package/dist/docs/reference/pickedql/index.md +18 -0
  91. package/dist/docs/reference/pickedql/schema.md +172 -0
  92. package/dist/docs/reference/pickedql/virtual-functions.md +237 -0
  93. package/dist/docs/reference/sdk/actions.md +30 -0
  94. package/dist/docs/{sdk → reference/sdk}/conditions.md +15 -5
  95. package/dist/docs/reference/sdk/content-security-policy.md +21 -0
  96. package/dist/docs/reference/sdk/experiences.md +51 -0
  97. package/dist/docs/reference/sdk/features.md +233 -0
  98. package/dist/docs/reference/sdk/fields.md +209 -0
  99. package/dist/docs/reference/sdk/index.md +68 -0
  100. package/dist/docs/{sdk → reference/sdk}/plugins/create-experience.md +25 -34
  101. package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +74 -0
  102. package/dist/docs/reference/sdk/plugins/index.md +29 -0
  103. package/dist/docs/{sdk → reference/sdk}/plugins/window-object.md +6 -0
  104. package/dist/docs/reference/sdk/predicates.md +43 -0
  105. package/dist/docs/reference/sdk/ssr/index.md +33 -0
  106. package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +103 -0
  107. package/dist/docs/reference/sdk/ssr/serialize.md +77 -0
  108. package/dist/docs/reference/sdk/ssr/slots-and-placements.md +59 -0
  109. package/dist/docs/reference/sdk/steps.md +87 -0
  110. package/dist/docs/reference/tools/chrome-extension.md +16 -0
  111. package/dist/docs/reference/tools/image-optimisation-service.md +104 -0
  112. package/dist/docs/reference/tools/mcp.md +88 -0
  113. package/dist/docs/reference/tools/vite-plugin.md +88 -0
  114. package/dist/docs/tutorials/first-api-call.md +228 -0
  115. package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +143 -0
  116. package/dist/docs/tutorials/first-experience.mdx +255 -0
  117. package/dist/docs/tutorials/first-server-rendered-page.mdx +186 -0
  118. package/dist/{dom-BwmTHeT7.js → dom-BqcToNL0.js} +1 -3
  119. package/dist/{dom-CDrHc_j9.cjs → dom-DlLH3FxV.cjs} +1 -1
  120. package/dist/esm/form/index.js +2 -4
  121. package/dist/esm/index.js +225 -186
  122. package/dist/esm/plugins/dom-observer/index.js +1 -1
  123. package/dist/esm/plugins/dynamic-experiences/index.js +3 -3
  124. package/dist/esm/preview/index.js +1 -1
  125. package/dist/esm/server/index.js +33 -31
  126. package/dist/{experience-instance-DOJShRk5.js → experience-instance-DGk11d8a.js} +3 -3
  127. package/dist/experience-instance-Dej3P1sE.cjs +1 -0
  128. package/dist/plugin-CHOVsx7Z.js +287 -0
  129. package/dist/plugin-DsaGXQHx.cjs +1 -0
  130. package/dist/{preview-channel-DW9J8t4B.js → preview-channel-CSr96XAo.js} +1 -1
  131. package/dist/{protocol-DSqOlW2r.js → protocol-C5KkkiZc.js} +1 -1
  132. package/dist/types/client.d.ts +7 -6
  133. package/dist/types/data-source/api.d.ts +60 -0
  134. package/dist/types/data-source/api.d.ts.map +1 -0
  135. package/dist/types/data-source/provider.d.ts +97 -0
  136. package/dist/types/data-source/provider.d.ts.map +1 -0
  137. package/dist/types/entities/action/action.d.ts +5 -4
  138. package/dist/types/entities/action/action.d.ts.map +1 -1
  139. package/dist/types/entities/component/component.d.ts +6 -5
  140. package/dist/types/entities/component/component.d.ts.map +1 -1
  141. package/dist/types/entities/condition/condition.d.ts +5 -5
  142. package/dist/types/entities/content/content.d.ts +4 -3
  143. package/dist/types/entities/experience/experience.d.ts +11 -10
  144. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  145. package/dist/types/entities/experience-instance/experience-instance.d.ts +10 -9
  146. package/dist/types/entities/feature/feature.d.ts +19 -2
  147. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  148. package/dist/types/entities/field/field.d.ts +7 -6
  149. package/dist/types/entities/framework/framework.d.ts +7 -6
  150. package/dist/types/entities/framework/framework.d.ts.map +1 -1
  151. package/dist/types/entities/history/history.d.ts +6 -6
  152. package/dist/types/entities/plugin/plugin.d.ts +3 -2
  153. package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
  154. package/dist/types/entities/predicate/predicate.d.ts +4 -3
  155. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  156. package/dist/types/entities/response/response-validation.d.ts +3 -2
  157. package/dist/types/entities/response/response.d.ts +12 -11
  158. package/dist/types/entities/session/session.d.ts +2 -1
  159. package/dist/types/entities/step/step.d.ts +6 -5
  160. package/dist/types/exports.d.ts +2 -1
  161. package/dist/types/exports.d.ts.map +1 -1
  162. package/dist/types/form/build-responses.d.ts +2 -1
  163. package/dist/types/form/create-field-evaluator.d.ts +4 -3
  164. package/dist/types/form/create-field-validation.d.ts +5 -4
  165. package/dist/types/form/create-form.d.ts +7 -6
  166. package/dist/types/form/create-submit-pipeline.d.ts +7 -6
  167. package/dist/types/form/get-step-fields.d.ts +3 -2
  168. package/dist/types/lifecycle/condition-selection.d.ts +14 -4
  169. package/dist/types/lifecycle/lifecycle.d.ts +4 -3
  170. package/dist/types/lifecycle/rules-logic.d.ts +4 -3
  171. package/dist/types/lifecycle/state-snapshot.d.ts +4 -3
  172. package/dist/types/picked.d.ts +79 -62
  173. package/dist/types/picked.d.ts.map +1 -1
  174. package/dist/types/ping.d.ts +1 -1
  175. package/dist/types/ping.d.ts.map +1 -1
  176. package/dist/types/plugins/create-experience/create-experience.d.ts +9 -8
  177. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  178. package/dist/types/plugins/create-experience/plugin.d.ts +3 -2
  179. package/dist/types/plugins/create-experience/plugin.d.ts.map +1 -1
  180. package/dist/types/plugins/create-experience/serialization.d.ts.map +1 -1
  181. package/dist/types/plugins/dom-observer/plugin.d.ts +1 -1
  182. package/dist/types/plugins/dynamic-experiences/hash.d.ts +40 -5
  183. package/dist/types/plugins/dynamic-experiences/hash.d.ts.map +1 -1
  184. package/dist/types/plugins/dynamic-experiences/index.d.ts +2 -0
  185. package/dist/types/plugins/dynamic-experiences/index.d.ts.map +1 -1
  186. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +4 -36
  187. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  188. package/dist/types/plugins/dynamic-experiences/types.d.ts +42 -11
  189. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  190. package/dist/types/plugins/experience-browser-storage/plugin.d.ts +1 -1
  191. package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +1 -1
  192. package/dist/types/plugins/history-browser-storage/plugin.d.ts +1 -1
  193. package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +1 -1
  194. package/dist/types/plugins/responses-browser-storage/plugin.d.ts +1 -1
  195. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  196. package/dist/types/plugins/responses-indexeddb/plugin.d.ts +1 -1
  197. package/dist/types/plugins/single-page-app/plugin.d.ts +1 -1
  198. package/dist/types/plugins/single-page-app/plugin.d.ts.map +1 -1
  199. package/dist/types/plugins/web-components/plugin.d.ts +2 -1
  200. package/dist/types/plugins/window-object/plugin.d.ts +2 -2
  201. package/dist/types/preview-channel.d.ts +5 -1
  202. package/dist/types/preview-receiver/index.d.ts +18 -1
  203. package/dist/types/preview-receiver/protocol.d.ts +10 -1
  204. package/dist/types/server/index.d.ts +3 -3
  205. package/dist/types/server/serialize.d.ts +8 -2
  206. package/dist/types/server/serialize.d.ts.map +1 -1
  207. package/dist/types/utils/dom.d.ts +2 -1
  208. package/dist/types/utils/events.d.ts +6 -6
  209. package/dist/types/utils/events.d.ts.map +1 -1
  210. package/dist/types/utils/global-obj.d.ts +1 -1
  211. package/dist/types/utils/global-obj.d.ts.map +1 -1
  212. package/dist/types/utils/id.d.ts.map +1 -1
  213. package/dist/types/utils/logger.d.ts +2 -1
  214. package/dist/types/utils/logger.d.ts.map +1 -1
  215. package/dist/types/utils/node-tree/get-next-node-from-action.d.ts +2 -1
  216. package/dist/types/utils/node-tree/get-next-node-from-condition.d.ts +2 -1
  217. package/dist/types/utils/node-tree/get-next-node.d.ts +1 -1
  218. package/dist/types/utils/node-tree/get-next-node.d.ts.map +1 -1
  219. package/dist/types/utils/node-tree/get-origin-node.d.ts +1 -1
  220. package/dist/types/utils/node-tree/get-origin-node.d.ts.map +1 -1
  221. package/dist/types/utils/node-tree/min-max-steps-to-leaf.d.ts +1 -1
  222. package/dist/types/utils/node-tree/min-max-steps-to-leaf.d.ts.map +1 -1
  223. package/dist/types/utils/node-tree/min-max-steps-to-origin.d.ts +1 -1
  224. package/dist/types/utils/node-tree/min-max-steps-to-origin.d.ts.map +1 -1
  225. package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts +1 -1
  226. package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts.map +1 -1
  227. package/dist/types/utils/nodes.d.ts +1 -1
  228. package/dist/types/utils/picked-config.d.ts +2 -1
  229. package/dist/types/utils/rehydrate-scripts.d.ts +6 -0
  230. package/dist/types/utils/rehydrate-scripts.d.ts.map +1 -1
  231. package/dist/types/utils/rules-logic.d.ts +6 -2
  232. package/dist/types/utils/storage.d.ts +1 -1
  233. package/dist/types/utils/storage.d.ts.map +1 -1
  234. package/package.json +22 -23
  235. package/dist/api-CPL40b7A.js +0 -40
  236. package/dist/api-Dz5rgRgQ.cjs +0 -1
  237. package/dist/docs/actions.mdx +0 -78
  238. package/dist/docs/api/authentication.md +0 -376
  239. package/dist/docs/api/error-handling.md +0 -211
  240. package/dist/docs/api/index.md +0 -197
  241. package/dist/docs/api-keys.mdx +0 -40
  242. package/dist/docs/chrome-extension.md +0 -51
  243. package/dist/docs/conditions.mdx +0 -59
  244. package/dist/docs/content/asset-library.mdx +0 -93
  245. package/dist/docs/content/content-entries.mdx +0 -30
  246. package/dist/docs/content/layouts.mdx +0 -70
  247. package/dist/docs/content/pages.mdx +0 -67
  248. package/dist/docs/content/sections.mdx +0 -33
  249. package/dist/docs/delivery-api/index.md +0 -46
  250. package/dist/docs/delivery-api/preview-caching-crawling.md +0 -59
  251. package/dist/docs/experiences.mdx +0 -42
  252. package/dist/docs/features.mdx +0 -58
  253. package/dist/docs/fields.mdx +0 -79
  254. package/dist/docs/flow-builder/building-flows.md +0 -61
  255. package/dist/docs/flow-builder/condition-builder.md +0 -54
  256. package/dist/docs/flow-builder/keyboard-shortcuts.md +0 -66
  257. package/dist/docs/flow-builder/nodes.md +0 -43
  258. package/dist/docs/flow-builder/overview.mdx +0 -50
  259. package/dist/docs/gtm-template.md +0 -69
  260. package/dist/docs/guides/build-a-personalized-page.mdx +0 -143
  261. package/dist/docs/image-optimisation-service.md +0 -80
  262. package/dist/docs/mcp.md +0 -120
  263. package/dist/docs/pickedql/data-sources.md +0 -145
  264. package/dist/docs/pickedql/dimensions.md +0 -65
  265. package/dist/docs/pickedql/index.md +0 -36
  266. package/dist/docs/pickedql/schema.md +0 -156
  267. package/dist/docs/pickedql/virtual-functions.md +0 -204
  268. package/dist/docs/projects.mdx +0 -37
  269. package/dist/docs/reports.mdx +0 -18
  270. package/dist/docs/sdk/actions.md +0 -66
  271. package/dist/docs/sdk/content-security-policy.md +0 -32
  272. package/dist/docs/sdk/experiences.md +0 -46
  273. package/dist/docs/sdk/features.md +0 -212
  274. package/dist/docs/sdk/fields.md +0 -263
  275. package/dist/docs/sdk/index.md +0 -83
  276. package/dist/docs/sdk/plugins/dynamic-experiences.md +0 -58
  277. package/dist/docs/sdk/plugins/index.md +0 -9
  278. package/dist/docs/sdk/predicates.md +0 -112
  279. package/dist/docs/sdk/ssr/index.md +0 -62
  280. package/dist/docs/sdk/ssr/rendering-and-hydration.md +0 -141
  281. package/dist/docs/sdk/ssr/serialize.md +0 -86
  282. package/dist/docs/sdk/ssr/slots-and-placements.md +0 -35
  283. package/dist/docs/sdk/steps.md +0 -434
  284. package/dist/docs/steps.mdx +0 -44
  285. package/dist/docs/team-management.md +0 -40
  286. package/dist/docs/vite-plugin.md +0 -82
  287. package/dist/docs/workspace-versioning.mdx +0 -28
  288. package/dist/docs/workspaces.mdx +0 -102
  289. package/dist/experience-instance-DurC3pE-.cjs +0 -1
  290. package/dist/plugin-CFXwbXeM.js +0 -247
  291. package/dist/plugin-m4qekgtA.cjs +0 -1
@@ -0,0 +1,35 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../../components/Screenshot'
7
+
8
+ # Pages
9
+
10
+ A Page is a standalone, server-rendered experience backed by CMS content, built for SEO-critical landing pages.
11
+
12
+ <Screenshot
13
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences"
14
+ alt="The experiences list, where Pages and Flows are created on the Picked dashboard"
15
+ />
16
+
17
+ ## Edit page content
18
+
19
+ The Page editor has two tabs. The **Properties** tab holds the content of the page.
20
+ The **Settings** tab holds its name, its condition, and its layout. Fill in the
21
+ fields on the **Properties** tab. The inspector on the right edits the field that you
22
+ choose, and the preview panel shows the page while it fills in.
23
+
24
+ ## Change or remove the layout
25
+
26
+ Use the change-layout control on the **Settings** tab to move the page to another
27
+ Page Layout. When you unlink a layout, Picked separates the Content Entry from the
28
+ page. It deletes no entry, but the page then has no content to render until you
29
+ attach a layout again.
30
+
31
+ ## Related
32
+
33
+ - [About pages and flows](/explanation/pages-and-flows) — when to choose a Page.
34
+ - [How to fill and publish a page](/how-to/fill-and-publish-a-page)
35
+ - [How to server-render a page](/how-to/server-render-a-page)
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../../components/Screenshot'
7
+
8
+ # Sections
9
+
10
+ Sections are reusable schema fragments you embed inside layouts, so common structures such as a hero or a feature list are defined once.
11
+
12
+ <Screenshot
13
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/blocks"
14
+ alt="The sections list in the schema builder on the Picked dashboard"
15
+ />
16
+
17
+ ## What a section is
18
+
19
+ A Section is a reusable schema fragment with its own **Key**. A
20
+ [layout](/reference/dashboard/content/layouts) gives its shape to a whole Page or Step. A Section is a
21
+ part that you put into one or more layouts. Define the shape one time, then reuse it
22
+ everywhere.
23
+
24
+ ## Related
25
+
26
+ - [About the content model](/explanation/the-content-model) — why sections exist.
27
+ - [How to reuse a section](/how-to/reuse-a-section)
28
+ - [Page and step layouts](/reference/dashboard/content/layouts)
@@ -0,0 +1,51 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Experiences
9
+
10
+ An experience is personalized content that Picked serves to the visitors on your
11
+ site. Each experience points at a component that you register in your application.
12
+
13
+ An experience is either a **Flow** or a **Page**. A **Flow** is an interactive
14
+ experience of more than one step, and the browser renders it. This page covers the
15
+ flow. A **Page** is a standalone experience that the server renders from CMS content,
16
+ for a landing page where the search rank matters. See [Pages](/reference/dashboard/content/pages) for
17
+ that kind.
18
+
19
+ <Screenshot
20
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences"
21
+ alt="The experiences list for a workspace on the Picked dashboard"
22
+ />
23
+
24
+ ## Experience settings
25
+
26
+ Choose no node on the canvas, or click the canvas background, to open the experience
27
+ inspector in the right panel.
28
+
29
+ **Name**: The name that the dashboard shows. Your visitors do not see it.
30
+
31
+ **Component Name**: The identifier that points this experience at a component in your
32
+ application.
33
+
34
+ **Condition**: An optional condition. When you set it, the experience starts only for
35
+ a visitor who matches the condition. See
36
+ [Condition Builder](/reference/dashboard/flow-builder/condition-builder) for how to write one. Keep it
37
+ blank to start the experience for every visitor.
38
+
39
+ **Initialize Open**: An optional condition that controls whether the experience opens
40
+ by itself when the page loads. When it is blank, the experience loads but stays
41
+ closed until something opens it.
42
+
43
+ ## Experience list
44
+
45
+ The experiences list shows every experience in the current project. Click an
46
+ experience to open it in the flow builder.
47
+
48
+ ## Related
49
+
50
+ - [About pages and flows](/explanation/pages-and-flows) — Page or Flow.
51
+ - [How to create an experience](/how-to/create-an-experience)
@@ -0,0 +1,114 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Feature flags
9
+
10
+ A feature flag lets you run an A/B test and roll a change out in stages. It controls
11
+ which visitors see a change to your site, and you deploy no code.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/features"
15
+ alt="The feature flags list for a workspace on the Picked dashboard"
16
+ />
17
+
18
+ ## Keys
19
+
20
+ Each feature flag has a unique key. Your application uses this key to check whether
21
+ Picked allocates a visitor to the feature flag. You set the key when you create the
22
+ feature flag, and you cannot change it later.
23
+
24
+ ## Set the allocation
25
+
26
+ Set the allocation from the detail page of the feature flag:
27
+
28
+ | Control | What it does |
29
+ | --- | --- |
30
+ | **Enabled** | Whether Picked allocates a visitor to the feature flag. A disabled feature flag allocates nobody, and it records nothing. See [Disable a feature flag](#disable-a-feature-flag). |
31
+ | **Weight** | The percentage of visitors that Picked allocates to the feature flag, from 0 to 100. |
32
+ | **Description** | An internal note about what the feature flag tests. |
33
+
34
+ A feature flag has one weight. For each visitor it gives one of two outcomes:
35
+ allocated, or not allocated. A weight of 30 allocates 30% of your visitors. The other
36
+ 70% stay unallocated. A weight of 0 allocates nobody. A weight of 100 allocates
37
+ everybody.
38
+
39
+ ## How Picked allocates a visitor
40
+
41
+ The allocation is deterministic. It derives from the visitor ID, the ID of the feature
42
+ flag, and the weight. Each feature flag gets its own value, so tests that run at the
43
+ same time are independent. See
44
+ [About feature flag allocation](/explanation/feature-flag-allocation).
45
+
46
+ ## Disable a feature flag
47
+
48
+ A disabled feature flag allocates nobody, and it records nothing. The difference
49
+ from a weight of 0 matters for your reports. The visitor is **not in the test at
50
+ all**, and the visitor is not in the control group.
51
+
52
+ The SDK does not evaluate a disabled feature flag. It stores no decision in the
53
+ browser of the visitor, and it reports no decision to your analytics. Such a feature
54
+ flag is absent from the feature list on every analytics event.
55
+
56
+ An experience whose condition points at a disabled feature flag behaves as though
57
+ the visitor is not in the test. The condition reads as not allocated, and Picked
58
+ records no assignment.
59
+
60
+ This state is temporary, and it discards no decision that Picked made already. A
61
+ visitor who was allocated before keeps that decision in the browser. When you enable the
62
+ feature flag again, Picked continues from that decision, and the visitor stays in the
63
+ group they were already in.
64
+
65
+ :::note
66
+ Expect a step change in your reports when you disable a feature flag: fewer feature
67
+ flags for each visitor, and fewer decision events. That is the feature flag that drops
68
+ out, and you lose no data.
69
+ :::
70
+
71
+ A disabled feature flag stays visible in the developer tools, and a
72
+ [URL override](/reference/sdk/features#overrides-in-the-url) still turns one on for QA.
73
+
74
+ ## Feature flag versions
75
+
76
+ Each feature flag has a version number, and it starts at 1. The SDK caches an
77
+ allocation decision in the browser of the visitor under a key, and the version is part
78
+ of that key. The version does nothing else, and it is not an input to the allocation
79
+ value. When you increment the version, the SDK discards those cached decisions. It
80
+ then evaluates every visitor again on the next page load.
81
+
82
+ ### What happens when you increment the version
83
+
84
+ - **The SDK invalidates the cached decisions.** The cache key holds the version, so the
85
+ old entry no longer matches and the feature flag counts as undecided.
86
+ - **Picked evaluates each visitor against the current weight.** The allocation is
87
+ deterministic and the version is not one of its inputs, so the same visitor against
88
+ an unchanged weight gives the same result.
89
+ - **You cannot reverse this.** There is no way to decrement a version.
90
+
91
+ :::note
92
+ The new version does not move your visitors between groups. It clears the cached
93
+ decisions and runs the allocation again. With an unchanged weight, everybody lands
94
+ where they were before. Change the weight to move your visitors.
95
+ :::
96
+
97
+ ### When to increment
98
+
99
+ Increment the version after you change the weight. Do this when you want Picked to
100
+ evaluate an allocated visitor again against the new weight, and not to use the cached
101
+ decision.
102
+
103
+ ### When not to increment
104
+
105
+ To apply a weight change only to a visitor that Picked does not allocate yet, change
106
+ the weight and leave the version as it is. An allocated visitor keeps the current
107
+ allocation.
108
+
109
+ ## Related
110
+
111
+ - [About feature flag allocation](/explanation/feature-flag-allocation)
112
+ - [How to run an A/B test](/how-to/run-an-ab-test)
113
+ - [How to read a feature flag](/how-to/read-a-feature-flag)
114
+ - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
@@ -0,0 +1,100 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Fields
9
+
10
+ A field is a data input that a visitor sees inside a step. A field collects
11
+ information such as a name, an email address, a preference, or a choice.
12
+
13
+ This page covers the experience field, which collects visitor input. An experience
14
+ field is not the same as a content field. A content field is part of the schema of a
15
+ CMS layout. See [Page and Step Layouts](/reference/dashboard/content/layouts) for those.
16
+
17
+ <Screenshot
18
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/fields"
19
+ alt="The fields list for a workspace on the Picked dashboard"
20
+ />
21
+
22
+ ## Field types
23
+
24
+ A field has one of many types. These are the common ones:
25
+
26
+ `TEXT`: A string input. Use it for a name, an email address, or free text.
27
+
28
+ `NUMBER`: A numeric input. Use it for a quantity, a rating, or an age.
29
+
30
+ `BOOLEAN`: A true or false toggle. Use it for a checkbox or for consent.
31
+
32
+ `OBJECT`: A structured data input. Use it for data that holds other data.
33
+
34
+ ## Options
35
+
36
+ **Name**: The name that the dashboard shows. Your visitors do not see it.
37
+
38
+ **Key**: The identifier for your application. You set it once and you cannot change
39
+ it. Your visitors do not see it.
40
+
41
+ **Label**: The label that a visitor sees next to the field.
42
+
43
+ **Placeholder**: The hint text that the input shows while it is empty.
44
+
45
+ **Description**: A longer description of what the field is for. The dashboard shows
46
+ it. Your visitors do not see it.
47
+
48
+ **Help Text**: Text below the field that helps your visitors.
49
+
50
+ **Default Value**: The value that the field holds when it loads.
51
+
52
+ ## Validation
53
+
54
+ **Required**: When this is on, a visitor must fill in the field before the flow can
55
+ continue.
56
+
57
+ **Validation rules**: Conditions for a constraint such as a smallest value, a largest
58
+ value, or a pattern. See [Condition Builder](/reference/dashboard/flow-builder/condition-builder) for how
59
+ to build a validation rule.
60
+
61
+ ## More than one value
62
+
63
+ Turn on **Multiple** to let a visitor send more than one value for the field. This is
64
+ useful for an input that takes several choices, or for a field of tags.
65
+
66
+ ## Choices
67
+
68
+ For a field with a fixed set of choices, such as a dropdown or a set of radio
69
+ buttons, add options. Each option has a value, and the response carries that value.
70
+
71
+ Each option can also carry a condition. When you set one, the option appears only to
72
+ a visitor who matches the condition. See
73
+ [Condition Builder](/reference/dashboard/flow-builder/condition-builder) for more detail.
74
+
75
+ ## Privacy
76
+
77
+ Two policies control where the value of a field can go. They are independent, and a
78
+ sensitive field usually needs both.
79
+
80
+ | Policy | What it does |
81
+ | --- | --- |
82
+ | **Do Not Track** | Picked keeps the value out of your analytics events. The events carry the field ID only. |
83
+ | **Do Not Store** | The SDK reads the value but does not put it in browser storage. |
84
+
85
+ Neither policy stops the flow from the use of the value inside the page. A field with both
86
+ policies set still holds its value there. The flow validates the step with it, and it
87
+ evaluates the conditions after the step with it. The policies control what leaves the
88
+ page.
89
+
90
+ Set both for a password, a tax number, or a payment detail. A field that only takes a
91
+ branch in a flow needs neither.
92
+
93
+ ## Related
94
+
95
+ - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
96
+
97
+ - [How to validate a field](/how-to/validate-a-field)
98
+ - [How to write a condition](/how-to/write-a-condition) — for a validation rule or an
99
+ option condition.
100
+ - [SDK fields](/reference/sdk/fields) — the `policies` object.
@@ -0,0 +1,58 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../../components/Screenshot'
7
+
8
+ # Flow builder
9
+
10
+ The flow builder is a visual editor for an experience flow. You drag a block onto a
11
+ canvas, connect the blocks with arrows, and set the options of each node in an
12
+ inspector panel.
13
+
14
+ <Screenshot
15
+ route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences/{experienceId}"
16
+ alt="The flow builder with the library, canvas, and inspector panels"
17
+ />
18
+
19
+ ## Layout
20
+
21
+ The flow builder has three panels, from left to right.
22
+
23
+ **Library**, on the left: it lists every step, action, condition, and field in
24
+ your project. Drag an item from here onto the canvas.
25
+
26
+ **Canvas**, in the middle: the area where you build your flow. A node stands for a
27
+ block. An arrow stands for a connection between two blocks.
28
+
29
+ **Inspector**, on the right: it shows the options of the node that you choose. When
30
+ you choose no node, it shows the settings of the experience.
31
+
32
+ ## Panel controls
33
+
34
+ Drag a divider between two panels to change their size. Press `Cmd/Ctrl+\` to turn
35
+ both side panels on and off. Press `Cmd/Ctrl+Shift+\` to turn the inspector on and
36
+ off.
37
+
38
+ ## Move around the canvas
39
+
40
+ **Zoom**: scroll to make the view larger or smaller.
41
+
42
+ **Pan**: choose the hand tool with `H`, then drag. You can also hold `Space` and
43
+ drag. A drag with the middle mouse button also pans.
44
+
45
+ **Choose tool**: press `V` to go back to the default tool.
46
+ Click to choose a node. Drag on empty space to choose every node inside a rectangle.
47
+
48
+ ## Auto-layout
49
+
50
+ Click the auto-layout button in the toolbar. The flow builder then arranges every
51
+ node into a clean hierarchy. This is useful after you add many nodes, and when the
52
+ canvas becomes messy.
53
+
54
+ ## Related
55
+
56
+ - [How to build a flow](/how-to/build-a-flow) — add, connect, and branch.
57
+ - [Keyboard shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts)
58
+ - [Nodes](/reference/dashboard/flow-builder/nodes)
@@ -0,0 +1,57 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ # Condition builder
7
+
8
+ The condition builder is a visual rule editor, and the dashboard uses it in several
9
+ places. With it you define a rule and you write no code.
10
+
11
+ ## Where it appears
12
+
13
+ The dashboard uses the condition builder here:
14
+
15
+ - **Condition nodes** — they set which branch the flow takes in the
16
+ [flow builder](/reference/dashboard/flow-builder/canvas).
17
+ - **Experience conditions** — they control when an experience starts for a visitor.
18
+ - **Initialize open conditions** — they control when an experience opens by itself as
19
+ the page loads.
20
+ - **Field option conditions** — they show or hide one option, and the state of the
21
+ visitor decides which.
22
+
23
+ ## Rule structure
24
+
25
+ The builder holds your rules in groups. Each group uses **AND** or **OR**. With
26
+ **AND**, every rule must match. With **OR**, one rule must match.
27
+
28
+ A single rule has three parts:
29
+
30
+ 1. **Field** — the data source to evaluate.
31
+ 2. **Operator** — how to compare. Examples are equals, not equals, greater than, and
32
+ contains.
33
+ 3. **Value** — the value to compare against.
34
+
35
+ You can put a group inside another group to build a larger rule. An example is an AND
36
+ group that holds two OR groups.
37
+
38
+ ## Data sources
39
+
40
+ A rule can point at these data sources:
41
+
42
+ **Responses** — the values that your visitors send through the form fields of the
43
+ current experience. Each field that you create in your project appears here under its
44
+ name.
45
+
46
+ **Actions** — the actions that ran during the flow.
47
+
48
+ **Feature flags** — the state of each feature flag in your project. Use it to take a
49
+ branch on whether Picked allocates a visitor to a flag.
50
+
51
+ **Location** — the parts of the current page URL of the visitor. These are the
52
+ pathname, the search parameters, the hostname, and the hash.
53
+
54
+ ## Related
55
+
56
+ - [How to write a condition](/how-to/write-a-condition) — a worked example.
57
+ - [About conditions and the logic engine](/explanation/conditions-and-the-logic-engine)
@@ -0,0 +1,72 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ # Keyboard shortcuts
7
+
8
+ These shortcuts work when the canvas of the flow builder holds the keyboard input.
9
+
10
+ ## Canvas tools
11
+
12
+ | Shortcut (Mac) | Shortcut (PC) | Action |
13
+ | --- | --- | --- |
14
+ | `V` | `V` | The choose tool |
15
+ | `H` | `H` | The hand tool, which pans the view |
16
+ | `Space`, held | `Space`, held | The hand tool, while you hold the key |
17
+
18
+ ## Layout
19
+
20
+ | Shortcut (Mac) | Shortcut (PC) | Action |
21
+ | --- | --- | --- |
22
+ | `Shift+L` | `Shift+L` | Auto-layout |
23
+
24
+ ## Choice
25
+
26
+ | Shortcut (Mac) | Shortcut (PC) | Action |
27
+ | --- | --- | --- |
28
+ | `Cmd+A` | `Ctrl+A` | Choose every node |
29
+ | `Escape` | `Escape` | Choose no node |
30
+
31
+ ## Edits
32
+
33
+ | Shortcut (Mac) | Shortcut (PC) | Action |
34
+ | --- | --- | --- |
35
+ | `Cmd+D` | `Ctrl+D` | Make a copy of each chosen node |
36
+ | `Delete` or `Backspace` | `Delete` or `Backspace` | Delete each chosen node |
37
+ | `Cmd+Z` | `Ctrl+Z` | Undo |
38
+ | `Cmd+Shift+Z` | `Ctrl+Shift+Z` | Redo |
39
+
40
+ ## Movement
41
+
42
+ | Shortcut (Mac) | Shortcut (PC) | Action |
43
+ | --- | --- | --- |
44
+ | Arrow keys | Arrow keys | Move each chosen node a small distance |
45
+ | `Shift` and an arrow key | `Shift` and an arrow key | Move each chosen node further |
46
+
47
+ ## Zoom
48
+
49
+ | Shortcut (Mac) | Shortcut (PC) | Action |
50
+ | --- | --- | --- |
51
+ | Scroll | Scroll | Zoom in or out |
52
+ | Pinch | Pinch | Zoom in or out, on a trackpad |
53
+ | `Cmd+=` | `Ctrl+=` | Zoom in |
54
+ | `Cmd+-` | `Ctrl+-` | Zoom out |
55
+ | `Shift+1` | `Shift+1` | Fit the flow to the view |
56
+ | `Shift+0` | `Shift+0` | Zoom to 100% |
57
+
58
+ ## Panels
59
+
60
+ | Shortcut (Mac) | Shortcut (PC) | Action |
61
+ | --- | --- | --- |
62
+ | `Cmd+\` | `Ctrl+\` | Turn both side panels on or off |
63
+ | `?` | `?` | Turn this shortcut list on or off |
64
+
65
+ ---
66
+
67
+ [Overview](/reference/dashboard/flow-builder/canvas) · [Nodes](/reference/dashboard/flow-builder/nodes) · [Build Flows](/how-to/build-a-flow) · **Keyboard Shortcuts** · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
68
+
69
+ ## Related
70
+
71
+ - [How to build a flow](/how-to/build-a-flow)
72
+ - [Canvas](/reference/dashboard/flow-builder/canvas) — the panels and the view controls.
@@ -0,0 +1,63 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ # Nodes
7
+
8
+ A node is one part of a flow. Each node stands for a block in your experience. There
9
+ are four node types.
10
+
11
+ ## Origin
12
+
13
+ Every flow starts with an origin node. It is a gray circle on the left side of the
14
+ canvas, and it has one output handle on its right side.
15
+
16
+ You cannot move the origin, delete it, or make a copy of it. It is always there.
17
+
18
+ ## Step
19
+
20
+ A step node stands for a screen that a visitor sees. It appears as a blue rectangle
21
+ on the canvas.
22
+
23
+ A step holds fields. Drag a field from the library onto a step node to assign
24
+ it. The subtitle of the node gives the number of assigned fields.
25
+
26
+ Each step has a `layoutName`. It tells the SDK which visual layout to use for this
27
+ step. Set the layout name in the inspector.
28
+
29
+ ## Action
30
+
31
+ An action node stands for a side effect. A side effect happens where the visitor
32
+ cannot see it. The node appears as a green rectangle.
33
+
34
+ An action runs when the flow reaches it. Use an action to record an event, to send
35
+ data, or to start an integration.
36
+
37
+ ## Condition
38
+
39
+ A condition node stands for a point where the flow splits. It appears as an amber
40
+ rectangle.
41
+
42
+ A condition node has two output handles, and not one. The green handle at the top
43
+ right connects to the path for a true result. The red handle at the bottom right
44
+ connects to the path for a false result.
45
+
46
+ Define the rule in the inspector, with the visual condition builder. See
47
+ [Conditions](/reference/dashboard/conditions) for more detail.
48
+
49
+ ## Handles
50
+
51
+ A handle is a connection point on a node. An input handle is on the left. An output
52
+ handle is on the right. Drag from an output handle to an input handle to connect two
53
+ nodes.
54
+
55
+ ---
56
+
57
+ [Overview](/reference/dashboard/flow-builder/canvas) · **Nodes** · [Build Flows](/how-to/build-a-flow) · [Keyboard Shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts) · [Condition Builder](/reference/dashboard/flow-builder/condition-builder)
58
+
59
+ ## Related
60
+
61
+ - [How to build a flow](/how-to/build-a-flow)
62
+ - [Canvas](/reference/dashboard/flow-builder/canvas)
63
+ - [About how Picked works](/explanation/how-picked-works) — why a flow is a graph.
@@ -0,0 +1,44 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Projects
9
+
10
+ A project is one site or one application that you want to measure with Picked. Each
11
+ project has its own experiences, content, and options.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}"
15
+ alt="The organization home page on the Picked dashboard, with the projects in an organization"
16
+ />
17
+
18
+ ## Workspaces
19
+
20
+ Each project holds one or more [Workspaces](/reference/dashboard/workspaces). In a workspace you set the
21
+ options for an experience and you see a preview of it before you make it live.
22
+
23
+ ## Project home
24
+
25
+ When you open a project, you land on the project home page. It shows your SDK
26
+ snippet and a list of the setup tasks that are still open.
27
+
28
+ Copy the snippet and add it to your site. The snippet connects your site to the
29
+ project and lets Picked serve experiences to it. See
30
+ [SDK Installation](/reference/sdk) for the setup detail.
31
+
32
+ ## Project navigation
33
+
34
+ The sidebar shows the sections of your project: **Feature flags**, **Fields**, **Flows**,
35
+ **Pages**, and **Workspace settings**. **Flows** holds **Step Layouts**, and **Pages**
36
+ holds **Page Layouts** and **Sections**.
37
+
38
+ A step, an action, and a condition have no sidebar entry. You reach all three from the
39
+ library in the flow builder, because each one belongs to a flow.
40
+
41
+ ## Related
42
+
43
+ - [How to create a project](/how-to/create-a-project)
44
+ - [How to install the SDK](/how-to/install-the-sdk)
@@ -0,0 +1,43 @@
1
+ ---
2
+ type: reference
3
+ layout: docs
4
+ ---
5
+
6
+ import { Screenshot } from '../../../../components/Screenshot'
7
+
8
+ # Reports
9
+
10
+ A report is an embedded Metabase dashboard or question, attached to a Picked project. Use
11
+ a report to see how your visitors move through your experiences and your feature flags.
12
+
13
+ <Screenshot
14
+ route="/{orgSlug}/{projectId}/reports"
15
+ alt="The reports list for a project on the Picked dashboard"
16
+ />
17
+
18
+ ## Report options
19
+
20
+ | Option | Description |
21
+ | --- | --- |
22
+ | **Report name** | The name that the reports list shows. |
23
+ | **Description** | An optional note about what the report shows. |
24
+ | **Metabase report type** | `Dashboard` or `Question`. |
25
+ | **Metabase report ID** | The numeric ID from the Metabase URL. |
26
+ | **Display order** | Optional. It controls the position of the report in the list. |
27
+
28
+ The create form has a link that opens the report, so you can check that the ID is
29
+ correct before you save.
30
+
31
+ ## Permissions
32
+
33
+ A member needs permission in the organization to create, edit, or delete a report. The
34
+ dashboard hides those actions from a member without it.
35
+
36
+ ## Delete a report
37
+
38
+ Open the report settings page and click **Delete report**. You cannot reverse a delete.
39
+
40
+ ## Related
41
+
42
+ - [Analytics queries](/how-to/analytics) — query the same data with SQL.
43
+ - [About PickedQL](/explanation/how-pickedql-works) — what the query layer expands.