@picked/client 0.0.101-next.2 → 0.0.101-next.3

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 (147) hide show
  1. package/README.md +34 -158
  2. package/dist/{api-AaQeg3Ij.cjs → api-9o_emCM5.cjs} +1 -1
  3. package/dist/{api-BlRFU0Fi.js → api-BbQt8aW3.js} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/server/index.js +1 -1
  7. package/dist/esm/index.js +2 -2
  8. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  9. package/dist/esm/server/index.js +2 -2
  10. package/dist/{plugin-CVD2TnRC.cjs → plugin-I8_6ncy_.cjs} +1 -1
  11. package/dist/{plugin-DhznDG-h.js → plugin-uZJ45vK6.js} +2 -2
  12. package/dist/{preview-unavailable-xWLCr93y.cjs → preview-unavailable-BUNxTYLe.cjs} +1 -1
  13. package/dist/{preview-unavailable-mW4Pj3Ph.js → preview-unavailable-BYFD2a58.js} +1 -1
  14. package/dist/{provider-zag5m5GH.cjs → provider-Bzi_Kb-n.cjs} +1 -1
  15. package/dist/{provider-COb_V-yq.js → provider-CQKp0iUJ.js} +1 -1
  16. package/package.json +5 -5
  17. package/dist/docs/_root.css +0 -101
  18. package/dist/docs/explanation/conditions-and-the-logic-engine.md +0 -94
  19. package/dist/docs/explanation/content-references.md +0 -99
  20. package/dist/docs/explanation/feature-flag-allocation.md +0 -218
  21. package/dist/docs/explanation/how-picked-works.md +0 -124
  22. package/dist/docs/explanation/how-pickedql-works.md +0 -76
  23. package/dist/docs/explanation/pages-and-flows.md +0 -64
  24. package/dist/docs/explanation/the-content-model.md +0 -87
  25. package/dist/docs/explanation/the-two-apis.md +0 -68
  26. package/dist/docs/explanation/why-server-side-rendering.md +0 -76
  27. package/dist/docs/explanation/workspaces-and-versions.md +0 -71
  28. package/dist/docs/how-to/add-a-step-field-or-action.md +0 -43
  29. package/dist/docs/how-to/analytics/index.md +0 -316
  30. package/dist/docs/how-to/archive-or-delete-a-workspace.md +0 -46
  31. package/dist/docs/how-to/authenticate-the-cli.md +0 -101
  32. package/dist/docs/how-to/authenticate-with-a-magic-link.md +0 -47
  33. package/dist/docs/how-to/authenticate-with-a-password.md +0 -59
  34. package/dist/docs/how-to/authenticate-with-an-api-key.md +0 -51
  35. package/dist/docs/how-to/authenticate-with-oauth.md +0 -40
  36. package/dist/docs/how-to/build-a-flow.md +0 -93
  37. package/dist/docs/how-to/call-an-external-api-from-a-workflow.md +0 -102
  38. package/dist/docs/how-to/connect-the-mcp-server.md +0 -46
  39. package/dist/docs/how-to/create-a-content-entry.md +0 -48
  40. package/dist/docs/how-to/create-a-project.md +0 -29
  41. package/dist/docs/how-to/create-an-experience.md +0 -42
  42. package/dist/docs/how-to/create-and-revoke-an-api-key.md +0 -42
  43. package/dist/docs/how-to/debug-with-the-chrome-extension.md +0 -57
  44. package/dist/docs/how-to/define-a-page-layout.md +0 -46
  45. package/dist/docs/how-to/fill-and-publish-a-page.md +0 -66
  46. package/dist/docs/how-to/install-the-gtm-template.md +0 -84
  47. package/dist/docs/how-to/install-the-sdk.md +0 -93
  48. package/dist/docs/how-to/install-the-vite-plugin.md +0 -69
  49. package/dist/docs/how-to/invite-and-remove-members.md +0 -35
  50. package/dist/docs/how-to/point-one-entry-at-another.md +0 -61
  51. package/dist/docs/how-to/preview-a-workspace.md +0 -28
  52. package/dist/docs/how-to/publish-a-workspace.md +0 -30
  53. package/dist/docs/how-to/read-a-feature-flag.md +0 -113
  54. package/dist/docs/how-to/read-a-referenced-entry.md +0 -109
  55. package/dist/docs/how-to/register-a-component.md +0 -55
  56. package/dist/docs/how-to/register-an-action-handler.md +0 -85
  57. package/dist/docs/how-to/register-an-api-that-uses-oauth2.md +0 -107
  58. package/dist/docs/how-to/render-a-step-form.md +0 -131
  59. package/dist/docs/how-to/render-an-unpublished-preview.md +0 -41
  60. package/dist/docs/how-to/retry-a-failed-call-with-a-loop.md +0 -81
  61. package/dist/docs/how-to/reuse-a-section.md +0 -53
  62. package/dist/docs/how-to/reuse-a-step-field-or-action.md +0 -28
  63. package/dist/docs/how-to/roll-back-a-published-version.md +0 -26
  64. package/dist/docs/how-to/run-an-ab-test.md +0 -49
  65. package/dist/docs/how-to/run-code-on-a-form-submission.md +0 -125
  66. package/dist/docs/how-to/server-render-a-page.md +0 -81
  67. package/dist/docs/how-to/set-a-content-security-policy.md +0 -32
  68. package/dist/docs/how-to/set-up-mfa.md +0 -113
  69. package/dist/docs/how-to/switch-workspaces.md +0 -122
  70. package/dist/docs/how-to/upload-and-use-an-asset.mdx +0 -73
  71. package/dist/docs/how-to/validate-a-field.md +0 -52
  72. package/dist/docs/how-to/wait-for-an-action-response.md +0 -182
  73. package/dist/docs/how-to/write-a-condition.md +0 -45
  74. package/dist/docs/how-to/write-a-predicate.md +0 -60
  75. package/dist/docs/index.md +0 -59
  76. package/dist/docs/reference/dashboard/actions.mdx +0 -56
  77. package/dist/docs/reference/dashboard/api-keys.mdx +0 -38
  78. package/dist/docs/reference/dashboard/conditions.mdx +0 -42
  79. package/dist/docs/reference/dashboard/content/asset-library.mdx +0 -63
  80. package/dist/docs/reference/dashboard/content/blocks.mdx +0 -57
  81. package/dist/docs/reference/dashboard/content/content-entries.mdx +0 -95
  82. package/dist/docs/reference/dashboard/content/models.mdx +0 -108
  83. package/dist/docs/reference/dashboard/content/pages.mdx +0 -61
  84. package/dist/docs/reference/dashboard/experiences.mdx +0 -51
  85. package/dist/docs/reference/dashboard/external-apis.md +0 -169
  86. package/dist/docs/reference/dashboard/features.mdx +0 -154
  87. package/dist/docs/reference/dashboard/fields.mdx +0 -106
  88. package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +0 -58
  89. package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +0 -57
  90. package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +0 -72
  91. package/dist/docs/reference/dashboard/flow-builder/nodes.md +0 -63
  92. package/dist/docs/reference/dashboard/labels.md +0 -321
  93. package/dist/docs/reference/dashboard/lead-search.md +0 -224
  94. package/dist/docs/reference/dashboard/projects.mdx +0 -44
  95. package/dist/docs/reference/dashboard/reports.mdx +0 -43
  96. package/dist/docs/reference/dashboard/steps.mdx +0 -37
  97. package/dist/docs/reference/dashboard/team-management.md +0 -29
  98. package/dist/docs/reference/dashboard/workflow-runs.md +0 -142
  99. package/dist/docs/reference/dashboard/workflow-templates.md +0 -182
  100. package/dist/docs/reference/dashboard/workflow-test-runs.md +0 -77
  101. package/dist/docs/reference/dashboard/workspace-versioning.mdx +0 -30
  102. package/dist/docs/reference/dashboard/workspaces.mdx +0 -76
  103. package/dist/docs/reference/delivery-api/experience-content.md +0 -152
  104. package/dist/docs/reference/delivery-api/index.md +0 -45
  105. package/dist/docs/reference/delivery-api/preview-caching-crawling.md +0 -79
  106. package/dist/docs/reference/delivery-api/project-config.md +0 -65
  107. package/dist/docs/reference/delivery-api/workspace-schema.md +0 -107
  108. package/dist/docs/reference/glossary.md +0 -201
  109. package/dist/docs/reference/management-api/authentication.md +0 -87
  110. package/dist/docs/reference/management-api/authorization-and-scopes.md +0 -291
  111. package/dist/docs/reference/management-api/error-handling.md +0 -232
  112. package/dist/docs/reference/management-api/pagination.md +0 -192
  113. package/dist/docs/reference/pickedql/data-sources.md +0 -174
  114. package/dist/docs/reference/pickedql/dimensions.md +0 -103
  115. package/dist/docs/reference/pickedql/filtering.md +0 -64
  116. package/dist/docs/reference/pickedql/index.md +0 -18
  117. package/dist/docs/reference/pickedql/schema.md +0 -172
  118. package/dist/docs/reference/pickedql/virtual-functions.md +0 -248
  119. package/dist/docs/reference/sdk/actions.md +0 -154
  120. package/dist/docs/reference/sdk/analytics-events.md +0 -453
  121. package/dist/docs/reference/sdk/conditions.md +0 -147
  122. package/dist/docs/reference/sdk/content-security-policy.md +0 -21
  123. package/dist/docs/reference/sdk/content.md +0 -253
  124. package/dist/docs/reference/sdk/experiences.md +0 -51
  125. package/dist/docs/reference/sdk/features.md +0 -256
  126. package/dist/docs/reference/sdk/fields.md +0 -255
  127. package/dist/docs/reference/sdk/index.md +0 -68
  128. package/dist/docs/reference/sdk/plugins/create-experience.md +0 -123
  129. package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +0 -74
  130. package/dist/docs/reference/sdk/plugins/index.md +0 -29
  131. package/dist/docs/reference/sdk/plugins/window-object.md +0 -25
  132. package/dist/docs/reference/sdk/predicates.md +0 -43
  133. package/dist/docs/reference/sdk/ssr/index.md +0 -33
  134. package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +0 -103
  135. package/dist/docs/reference/sdk/ssr/serialize.md +0 -80
  136. package/dist/docs/reference/sdk/ssr/slots-and-placements.md +0 -113
  137. package/dist/docs/reference/sdk/steps.md +0 -86
  138. package/dist/docs/reference/sdk/type-generation.md +0 -265
  139. package/dist/docs/reference/tools/chrome-extension.md +0 -16
  140. package/dist/docs/reference/tools/cli.md +0 -292
  141. package/dist/docs/reference/tools/image-optimisation-service.md +0 -104
  142. package/dist/docs/reference/tools/mcp.md +0 -136
  143. package/dist/docs/reference/tools/vite-plugin.md +0 -163
  144. package/dist/docs/tutorials/first-api-call.md +0 -235
  145. package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +0 -143
  146. package/dist/docs/tutorials/first-experience.mdx +0 -254
  147. package/dist/docs/tutorials/first-server-rendered-page.mdx +0 -186
@@ -1,93 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to build a flow
7
-
8
- This guide shows you how to put a flow together on the canvas. You need an experience
9
- first. See [How to create an experience](/how-to/create-an-experience).
10
-
11
- ## Add nodes
12
-
13
- Drag a step, an action, or a condition from the library onto the canvas. A new
14
- node appears where you drop it.
15
-
16
- You can also drop a block directly onto an arrow that is there already. The flow
17
- builder puts the node into the line. The first arrow splits into two arrows, with the
18
- new node between them. A **+** indicator appears when you hold the pointer over a
19
- valid arrow.
20
-
21
- ## Connect nodes
22
-
23
- Click the output handle of a node, on the right side. Drag to the input handle of
24
- another node, on the left side. An arrow then joins the two nodes.
25
-
26
- The flow follows the arrows from left to right, and it starts at the origin. Every
27
- node after the origin is part of the experience flow.
28
-
29
- ## Branch with conditions
30
-
31
- Connect the origin, or any other node, to a condition node. The condition evaluates
32
- its rule and sends the flow down one of two paths.
33
-
34
- Connect the green handle, for a true result, to the nodes that must run when the
35
- condition holds. Connect the red handle, for a false result, to the other path. Each
36
- path can lead to more steps, more actions, and more conditions.
37
-
38
- ## Assign fields to steps
39
-
40
- Drag a field from the library onto a step node and drop it. That step then
41
- holds the field.
42
-
43
- You can assign more than one field to one step. The step node gives the number of
44
- assigned fields. To see which fields it holds, choose the step. Then read the **Fields**
45
- section in the inspector.
46
-
47
- ## Choose nodes
48
-
49
- Click a node to choose it. Its inspector opens in the right panel.
50
-
51
- Drag on empty canvas to choose every node inside a rectangle. Press `Cmd/Ctrl+A` to
52
- choose every node.
53
-
54
- When you choose more than one node, the inspector gives a count and a list in groups.
55
- Click an item in that list to open its inspector.
56
-
57
- ## Move nodes
58
-
59
- Drag a node to move it. Each node snaps to the grid.
60
-
61
- Use the arrow keys to move a node a small distance. Hold `Shift` to move it further.
62
-
63
- ## Delete nodes
64
-
65
- Choose one or more nodes. Press `Delete` or `Backspace`. The flow builder removes
66
- those nodes and every arrow that joins them.
67
-
68
- ## Duplicate nodes
69
-
70
- Choose one or more nodes. Press `Cmd/Ctrl+D`. A copy of each node appears next to the
71
- first one.
72
-
73
- ## Undo and redo
74
-
75
- Press `Cmd/Ctrl+Z` to undo. Press `Cmd/Ctrl+Shift+Z` to redo. You can also use the two
76
- buttons at the bottom left of the canvas.
77
-
78
- The flow builder records each change that you make to the flow. This includes each node
79
- that you add or delete, each connection, each move, and each change in the inspector.
80
- Text that you type into one field with no stop of more than one second is one change.
81
-
82
- When the cursor is in a text field, `Cmd/Ctrl+Z` undoes the text in that field. When you
83
- save the flow or discard your changes, the flow builder starts a new record.
84
-
85
- You cannot undo the delete of a step, an action, a condition, or a field from the
86
- workspace. The flow builder removes it from each change in the record.
87
-
88
- ## Related
89
-
90
- - [Canvas](/reference/dashboard/flow-builder/canvas) — the panels and the view controls.
91
- - [Nodes](/reference/dashboard/flow-builder/nodes) — every node type.
92
- - [Keyboard shortcuts](/reference/dashboard/flow-builder/keyboard-shortcuts)
93
- - [About how Picked works](/explanation/how-picked-works) — why a flow is a graph.
@@ -1,102 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to call an external API from a workflow
7
-
8
- This guide shows you how to make a workflow send a request to a system outside Picked.
9
- It also shows you how to read the answer in a later node.
10
-
11
- A workflow can only call an origin that you register first. An origin is the scheme, the
12
- host and the optional port of an address, such as `https://api.vendor.test`. When you
13
- register one, every path on it becomes available to the workflow.
14
-
15
- ## 1. Register the external API
16
-
17
- 1. Open **Integrations**.
18
- 2. Choose **Configure external APIs**.
19
- 3. Choose **New external API**.
20
- 4. Enter a **Display name**. This name is for you. Picked does not send it with the
21
- request.
22
- 5. Enter the **Origin**, such as `https://api.vendor.test`. Do not enter a path, a query
23
- or a fragment.
24
- 6. If the API needs an authorization header, set **Credential** to **Authorization
25
- header**.
26
- 7. Enter the header name and its value.
27
- 8. Choose **Register external API**.
28
-
29
- For an API whose access tokens expire, refer to
30
- [How to register an API that uses OAuth2](/how-to/register-an-api-that-uses-oauth2).
31
-
32
- The header value is write-only. After you save it, Picked shows only the header name and
33
- a mask. To replace the value, choose **Rotate authorization header**.
34
-
35
- ## 2. Add an External API node
36
-
37
- 1. Open the workflow.
38
- 2. Choose **Add node**.
39
- 3. Choose **Add tool**.
40
- 4. Choose **External API**.
41
- 5. Set `method` to the request method, such as `GET` or `POST`.
42
- 6. Set `url` to the full address, such as `https://api.vendor.test/v1/orders`. Picked
43
- lists the origins you registered below the field.
44
- 7. For a `POST` or a `PUT`, set `body` to the JSON to send.
45
-
46
- :::warning
47
- Do not enter a credential in `headers`. Picked refuses the workflow when you save it.
48
- Picked sends the authorization header from the registration for you.
49
- :::
50
-
51
- ## 3. Read the answer
52
-
53
- A later node reads what the call recorded:
54
-
55
- - `{{ nodes.<node-id>.status }}` — the HTTP status.
56
- - `{{ nodes.<node-id>.ok }}` — true for a status from 200 to 299.
57
- - `{{ nodes.<node-id>.body }}` — the parsed JSON answer.
58
-
59
- ## 4. Continue after an error status
60
-
61
- By default, a status outside 200 to 299 fails the node and stops the run. The run page
62
- shows the node that failed. Refer to the [workflow runs reference](/reference/dashboard/workflow-runs). To test
63
- the status in the workflow instead:
64
-
65
- 1. Set `failOnErrorStatus` to off.
66
- 2. Add a condition node after the External API node.
67
- 3. Test `{{ nodes.<node-id>.status }}` in the condition.
68
-
69
- ## 5. Continue after a failed call
70
-
71
- A timeout or a connection failure also fails the node. To continue the run after a
72
- failed call:
73
-
74
- 1. Connect the node's error exit to a condition node.
75
- 2. Test `{{ nodes.<node-id>.error.retryable }}` in the condition.
76
- 3. Connect the condition's `false` exit to the nodes that record the failure.
77
-
78
- To send the request again, refer to
79
- [How to retry a failed call with a loop](/how-to/retry-a-failed-call-with-a-loop).
80
-
81
- The run follows the error exit only when the call fails. These failures stop the run at
82
- the node:
83
-
84
- - A required argument has no value.
85
- - An argument has a value that the tool does not accept. For example, the value has the
86
- wrong type, `method` is not one of the six methods, or `timeoutMs` is not from
87
- 1000 to 30000.
88
- - A template cannot be rendered.
89
- - The workflow does not have a scope that the tool needs.
90
- - An error occurs in Picked.
91
-
92
- Refer to the [External APIs reference](/reference/dashboard/external-apis#errors) for each
93
- reason.
94
-
95
- ## Related
96
-
97
- - [How to retry a failed call with a loop](/how-to/retry-a-failed-call-with-a-loop) — send
98
- the request again after a wait.
99
- - [External APIs](/reference/dashboard/external-apis) — every argument, every limit and
100
- every error message.
101
- - [Workflow templates](/reference/dashboard/workflow-templates) — the data that a node can
102
- read, and templates in a condition.
@@ -1,46 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to connect the MCP server
7
-
8
- This guide shows you how to control your Picked workspace from an AI tool that writes
9
- code. The server URL is `https://api.picked.app/mcp`.
10
-
11
- ## Claude Desktop
12
-
13
- 1. Open **Settings > Connectors > Add custom connector**.
14
- 2. Set **Name** to `Picked`.
15
- 3. Set **URL** to `https://api.picked.app/mcp`.
16
- 4. Click **Connect**.
17
- 5. Answer the authorization prompt.
18
-
19
- ## Claude Code, Cursor, Windsurf, and others
20
-
21
- Add `.mcp.json` to the root of your repository:
22
-
23
- ```json
24
- {
25
- "mcpServers": {
26
- "picked": {
27
- "type": "http",
28
- "url": "https://api.picked.app/mcp"
29
- }
30
- }
31
- }
32
- ```
33
-
34
- Cursor reads the same content from `.cursor/mcp.json`.
35
-
36
- ## Two-factor authentication
37
-
38
- The authorization prompt signs you in to Picked. If your account must use MFA, the prompt
39
- asks for the code from your authenticator app before it connects the tool. Picked staff,
40
- and members of an organization that requires MFA, must use it. When an organization
41
- turns the requirement on, the tools its members connected before that point do not
42
- work. Connect them again to continue.
43
-
44
- ## Related
45
-
46
- - [MCP server](/reference/tools/mcp) — every tool that the server gives you.
@@ -1,48 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to create a content entry
7
-
8
- This guide shows you how to make one instance of a Model and fill it with data. You need
9
- a Model first. See [How to define a page layout](/how-to/define-a-page-layout).
10
-
11
- A Page makes its own entry when you create the page. Use this guide for the content that
12
- no Page and no Step owns, such as an author or a product.
13
-
14
- ## 1. Open the entries list
15
-
16
- 1. Open your workspace.
17
- 2. Click **CMS** in the sidebar.
18
- 3. Click **Content entries**.
19
-
20
- ## 2. Create the entry
21
-
22
- 1. Click **New content**.
23
- 2. Choose the **Model** for the entry.
24
- 3. Fill in each field. The form comes from the schema of the Model.
25
- 4. Click **Create entry**.
26
-
27
- The Model is fixed when you create the entry. To move content to another Model, make a
28
- new entry and copy the values across.
29
-
30
- ## 3. Correct every error
31
-
32
- An invalid field shows an error next to it while you edit. The error carries the path to
33
- the exact field. Correct each one before you publish, because Picked serves valid content
34
- only.
35
-
36
- ## Find an entry again
37
-
38
- The entries list shows a title for each entry. The title is the first single-line text
39
- field of the entry. It shows the entry id when no such field holds a value.
40
-
41
- Use the **Model** filter to narrow the list to one Model.
42
-
43
- ## Related
44
-
45
- - [Content entries](/reference/dashboard/content/content-entries) — the editor reference.
46
- - [Models](/reference/dashboard/content/models) — every field type.
47
- - [How to point one entry at another](/how-to/point-one-entry-at-another)
48
- - [How to publish a workspace](/how-to/publish-a-workspace)
@@ -1,29 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to create a project
7
-
8
- This guide shows you how to add a project. A project is one site or one application, and
9
- it holds its own experiences, content, and options.
10
-
11
- ## Steps
12
-
13
- 1. Open your organization.
14
- 2. Click **New project**.
15
- 3. Enter a name.
16
- 4. Click **Create project**.
17
-
18
- The project home page opens. It shows your SDK snippet and the setup tasks that are still
19
- open.
20
-
21
- ## Next
22
-
23
- Copy the snippet and add it to your site. See
24
- [How to install the SDK](/how-to/install-the-sdk).
25
-
26
- ## Related
27
-
28
- - [Projects](/reference/dashboard/projects) — the project surface.
29
- - [Add Picked to your application](/tutorials/first-experience) — the whole path.
@@ -1,42 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to create an experience
7
-
8
- An experience is a Flow or a Page. This guide adds a **Flow**: the interactive kind, of
9
- more than one step, which the browser renders. A **Page** is the standalone kind that your
10
- server renders for a search engine, and
11
- [How to fill and publish a page](/how-to/fill-and-publish-a-page) covers it.
12
-
13
- [About pages and flows](/explanation/pages-and-flows) sets out the difference, and which
14
- kind a piece of work needs.
15
-
16
- ## Steps
17
-
18
- 1. Open your project.
19
- 2. Click **Flows** in the sidebar. The experiences list opens.
20
- 3. Click **New experience**.
21
- 4. Enter a name.
22
- 5. Leave **Type** on the **Flow** option.
23
- 6. Open **Advanced**.
24
- 7. Enter a component name. It must match a component that you register in your
25
- application.
26
- 8. Click **Create flow**.
27
-
28
- The flow editor opens with an empty canvas.
29
-
30
- ## Set the options
31
-
32
- Click the canvas background to open the experience inspector.
33
-
34
- - **Condition** — the experience starts only for a visitor who matches it. Keep it blank
35
- to start for every visitor.
36
- - **Initialize Open** — the experience opens by itself when the page loads.
37
-
38
- ## Related
39
-
40
- - [How to build a flow](/how-to/build-a-flow) — add your first node.
41
- - [About pages and flows](/explanation/pages-and-flows) — Page or Flow.
42
- - [Experiences](/reference/dashboard/experiences) — every option.
@@ -1,42 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to create and revoke an API key
7
-
8
- This guide shows you how to give your code access to the Picked API. Use a key where your
9
- own code calls the API, such as a server-side integration.
10
-
11
- An API key does not sign the [CLI](/reference/tools/cli) in. The CLI reads a session, which
12
- `picked login` writes. See
13
- [How to authenticate the CLI](/how-to/authenticate-the-cli) for the commands that CI can
14
- run without one.
15
-
16
- ## Create a key
17
-
18
- 1. Open your organization.
19
- 2. Click **API Keys**.
20
- 3. Click **Create API Key**.
21
- 4. Enter a **Name**, such as `Production key`.
22
- 5. Set **Project** to one project. The default, **All projects**, gives the key every
23
- project.
24
- 6. Choose the **Permissions** that your integration needs.
25
- 7. Click **Create API Key**.
26
-
27
- :::warning
28
- Copy the key immediately. The dashboard does not show it again.
29
- :::
30
-
31
- ## Revoke a key
32
-
33
- 1. Open the API keys list.
34
- 2. Click **Revoke** next to the key.
35
- 3. Click **Revoke Key** to confirm.
36
-
37
- Picked invalidates the key immediately. No later request can use it.
38
-
39
- ## Related
40
-
41
- - [API keys](/reference/dashboard/api-keys) — the scopes.
42
- - [Authentication](/reference/management-api/authentication) — how to send the key.
@@ -1,57 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to debug with the Chrome extension
7
-
8
- This guide shows you how to add a Picked panel to Chrome DevTools and check your
9
- integration on any page that runs the SDK.
10
-
11
- ## 1. Install the extension
12
-
13
- Install it from the
14
- [Chrome Web Store](https://chromewebstore.google.com/detail/picked-developer-tools/nimmdamgnhlhdpngnalkpmnleebngidh).
15
-
16
- ## 2. Add the devtools plugin
17
-
18
- ```typescript
19
- import { createClient } from 'picked'
20
- import { svelteDevtoolsPlugin } from '@picked/svelte/plugins/devtools'
21
-
22
- const picked = createClient({
23
- projectId: 'your-project-id',
24
- plugins: [svelteDevtoolsPlugin()],
25
- })
26
- ```
27
-
28
- The extension then connects to the SDK.
29
-
30
- ## 3. Add a tool of your own
31
-
32
- A custom tool is a framework-adapted component, and it receives the live Picked client
33
- exactly as an experience component does.
34
-
35
- ```typescript
36
- import { adaptReactComponent } from '@picked/react'
37
- import { svelteDevtoolsPlugin } from '@picked/svelte/plugins/devtools'
38
- import MyTool from './MyTool'
39
-
40
- const picked = createClient({
41
- projectId: 'your-project-id',
42
- plugins: [
43
- svelteDevtoolsPlugin({
44
- customTools: [
45
- { id: 'my-tool', label: 'My Tool', component: adaptReactComponent(MyTool) },
46
- ],
47
- }),
48
- ],
49
- })
50
- ```
51
-
52
- Your tools appear under a **Custom Tools** tab. In React use `usePicked()`, and in Svelte
53
- use `getPicked()`.
54
-
55
- ## Related
56
-
57
- - [Chrome extension](/reference/tools/chrome-extension) — the panel reference.
@@ -1,46 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to define a page layout
7
-
8
- This guide shows you how to define the shape of a page. A page layout sets which fields a
9
- page can hold, and it holds no data itself.
10
-
11
- ## Steps
12
-
13
- 1. Open your workspace.
14
- 2. Click **Pages** in the sidebar, then **Page Layouts**.
15
- 3. Click **New model**.
16
- 4. Set **Category** to **Page layout**.
17
- 5. Enter a **Name** and a **Key**. The key is stable, and your SDK code and your API
18
- calls both use it.
19
- 6. Add your fields. Choose a type for each one.
20
- 7. Click **Create model**.
21
-
22
- The category is fixed when you create the Model. You cannot change it later.
23
-
24
- ## Make a field repeatable
25
-
26
- Turn on **repeatable** on any field. It then renders as a sortable list of values. Use it
27
- for a gallery, or for a list of features.
28
-
29
- ## Group related fields
30
-
31
- Add a **Group** field to hold a set of fields under one key. Make the group repeatable to
32
- describe a list of objects, such as a list of feature cards.
33
-
34
- ## Define content with no layout role
35
-
36
- A Model needs no category. Leave **Category** as **None (general content)** for content
37
- that no Page and no Step renders, such as an author or a product. Reach such a Model
38
- under **CMS** in the sidebar, and point at its entries with a **Reference** field.
39
-
40
- ## Related
41
-
42
- - [About the content model](/explanation/the-content-model) — why the schema and the data
43
- are separate.
44
- - [Models](/reference/dashboard/content/models) — every field type.
45
- - [How to reuse a section](/how-to/reuse-a-section)
46
- - [How to point one entry at another](/how-to/point-one-entry-at-another)
@@ -1,66 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to fill and publish a page
7
-
8
- This guide shows you how to make a server-rendered Page and put content in it. You need a
9
- page layout first. See [How to define a page layout](/how-to/define-a-page-layout).
10
-
11
- ## 1. Create the page
12
-
13
- 1. Open your project.
14
- 2. Choose a workspace.
15
- 3. Click **Pages** in the sidebar.
16
- 4. Click **New experience**.
17
- 5. Choose the **Page** type.
18
- 6. Choose a page layout.
19
- 7. Click **Create page**.
20
-
21
- Picked makes a content entry and links it to the page on the first save.
22
-
23
- ## 2. Fill in the content
24
-
25
- 1. Open the **Properties** tab.
26
- 2. Fill in each field. The inspector on the right edits the field that you choose.
27
- 3. Watch the preview panel as the page fills in.
28
-
29
- ## 3. Correct every error
30
-
31
- An invalid field shows an error next to it while you edit. Correct each one before you
32
- publish. Picked serves valid content only.
33
-
34
- ## 4. Choose the status
35
-
36
- Open the **Settings** tab and set the status.
37
-
38
- - Set **Active** to serve the page to everyone.
39
- - Set **Draft** to keep the page out of the published site. Picked serves a
40
- draft page through a preview link, and to nobody else.
41
-
42
- Use **Draft** for a page that is ready to review but not ready to be public.
43
- When you publish the workspace, Picked releases your other changes and leaves
44
- that page staged.
45
-
46
- ## 5. Publish
47
-
48
- Publish the workspace to apply your changes to the live site. See
49
- [How to publish a workspace](/how-to/publish-a-workspace).
50
-
51
- When you publish the workspace, Picked does not make a draft page public. To
52
- make that page public, set the status to **Active** and publish the workspace
53
- again.
54
-
55
- ## Change the layout later
56
-
57
- Use the change-layout control on the **Settings** tab. When you unlink a layout, Picked
58
- separates the content entry from the page. It deletes no entry, but the page then has no
59
- content to render.
60
-
61
- ## Related
62
-
63
- - [About pages and flows](/explanation/pages-and-flows) — when to choose a Page.
64
- - [Your first server-rendered page](/tutorials/first-server-rendered-page) — the whole
65
- path, with the SDK.
66
- - [Pages](/reference/dashboard/content/pages) — the editor reference.
@@ -1,84 +0,0 @@
1
- ---
2
- type: how-to
3
- layout: docs
4
- ---
5
-
6
- # How to install the GTM template
7
-
8
- This guide shows you how to track an ecommerce event in Google Tag Manager and send it to
9
- Picked. You need a GTM container and your Picked Tag ID.
10
-
11
- ## Automatic installation
12
-
13
- Install the template from the GTM Community Gallery:
14
-
15
- 1. In Tag Manager, click **Templates**.
16
- 2. In the **Tag Templates** section, click **Search Gallery**.
17
- 3. Search for `Picked Ecommerce`.
18
- 4. Click the Picked Ecommerce template to read its detail.
19
- 5. Click the **Add to workspace** button.
20
- 6. Read the permissions that it needs.
21
- 7. Click **Add**.
22
-
23
- ![The Picked Ecommerce template in the GTM Community Gallery](/gtm/picked-ecommerce-gtm.png)
24
-
25
- ## Manual installation
26
-
27
- To import the template file yourself:
28
-
29
- 1. Download the
30
- [template file](https://github.com/picked-app/gtm-template/blob/main/template.tpl)
31
- from GitHub with the download icon.
32
- 2. In Google Tag Manager, go to **Templates**.
33
- 3. Click **New**.
34
- 4. Open the three-dot menu.
35
- 5. Click **Import**.
36
- 6. Choose the file that you downloaded.
37
- 7. Click **Save**.
38
-
39
- ## Setup
40
-
41
- ### 1. Create a Tag ID variable
42
-
43
- Sign in to the [Picked Dashboard](https://dashboard.picked.app) and copy the Tag ID of
44
- your project. Save it as a constant variable in GTM, for example `Picked Tag ID`.
45
-
46
- ![How to create a variable in GTM for the Picked Tag ID](/gtm/gtm-variable.png)
47
-
48
- ### 2. Create an ecommerce data variable
49
-
50
- Create a **Data Layer Variable** with the variable name `ecommerce`. It captures what
51
- GA4 Enhanced Ecommerce writes to the data layer.
52
-
53
- ![The variable for the data layer of GA4 Enhanced Ecommerce](/gtm/gtm-ecommerce-variable.png)
54
-
55
- ### 3. Create event triggers
56
-
57
- Add a trigger for each ecommerce event that you want to track, for example
58
- `add_to_cart`, `purchase`, or `view_item`.
59
-
60
- ![The event triggers that record an ecommerce event](/gtm/gtm-triggers.png)
61
-
62
- ### 4. Create tags
63
-
64
- Create a new tag for each event. Choose the tag template called **Picked Ecommerce**. Assign
65
- the trigger that matches. Then set the options below.
66
-
67
- ![The tags that use the Picked Ecommerce template](/gtm/gtm-tags.png)
68
-
69
- ## Options
70
-
71
- | Option | Description |
72
- | --- | --- |
73
- | **Tag ID** | The Tag ID of your Picked project. Find it in the [Picked Dashboard](https://dashboard.picked.app). |
74
- | **Event** | The ecommerce event to track, for example `add_to_cart` or `purchase`. |
75
- | **Send ecommerce data** | Turn this on to send the data from GA4 Enhanced Ecommerce to Picked. Turn it on for every ecommerce event. |
76
- | **GA4 Enhanced Ecommerce Data** | The GTM variable that holds the data from GA4 Enhanced Ecommerce. Use the data layer variable from step 2. |
77
- | **Additional data** | An optional GTM variable, for more metadata with the event. |
78
-
79
- ![The options on a Picked Ecommerce tag](/gtm/gtm-tag.png)
80
-
81
- ## Related
82
-
83
- - [About how Picked works](/explanation/how-picked-works) — what Picked does with the
84
- event.