@picked/svelte 0.0.1-dev.1789541668638 → 0.0.1-next.2

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 (132) hide show
  1. package/dist/component.d.ts +5 -5
  2. package/dist/component.js +1 -1
  3. package/dist/context.js +1 -1
  4. package/dist/form/index.d.ts +15 -3
  5. package/dist/form/index.js +1 -1
  6. package/dist/hooks/client.d.ts +1 -1
  7. package/dist/hooks/client.js +1 -1
  8. package/dist/hooks/field.d.ts +5 -16
  9. package/dist/hooks/field.js +1 -1
  10. package/dist/hooks/index.d.ts +1 -9
  11. package/dist/hooks/index.js +1 -1
  12. package/dist/hooks/step.d.ts +15 -93
  13. package/dist/hooks/step.js +1 -1
  14. package/dist/hooks/storage.d.ts +2 -2
  15. package/dist/hooks/storage.js +1 -1
  16. package/dist/hooks/stores.d.ts +1 -1
  17. package/dist/hooks/stores.js +1 -1
  18. package/dist/index.d.ts +1 -8
  19. package/dist/index.js +1 -1
  20. package/dist/plugins/devtools/DevToolsExperience.svelte +53 -355
  21. package/dist/plugins/devtools/PickedLogo.svelte +58 -0
  22. package/dist/plugins/devtools/components/ExperienceInstanceListItem.svelte +4 -17
  23. package/dist/plugins/devtools/components/ExperienceInstancesTable.svelte +19 -26
  24. package/dist/plugins/devtools/components/Tabs.svelte +12 -69
  25. package/dist/plugins/devtools/experience.d.ts +1 -0
  26. package/dist/plugins/devtools/experience.js +1 -0
  27. package/dist/plugins/devtools/index.d.ts +0 -2
  28. package/dist/plugins/devtools/index.js +1 -1
  29. package/dist/plugins/devtools/plugin.d.ts +5 -37
  30. package/dist/plugins/devtools/plugin.js +1 -1
  31. package/dist/plugins/devtools/screens/components/ComponentsListScreen.svelte +14 -18
  32. package/dist/plugins/devtools/screens/experience-instances/ExperienceInstancesListScreen.svelte +3 -1
  33. package/dist/plugins/devtools/screens/experiences/ExperienceDetailsScreen.svelte +33 -31
  34. package/dist/plugins/devtools/screens/experiences/ExperienceExperienceInstancesListScreen.svelte +3 -1
  35. package/dist/plugins/devtools/screens/experiences/ExperienceTreeScreen.svelte +103 -293
  36. package/dist/plugins/devtools/screens/experiences/ExperiencesListScreen.svelte +1 -2
  37. package/dist/plugins/devtools/screens/frameworks/FrameworksListScreen.svelte +13 -15
  38. package/dist/plugins/devtools/screens/history/HistoryEntriesTable.svelte +16 -22
  39. package/dist/plugins/devtools/screens/history/HistoryEntryListItem.svelte +1 -7
  40. package/dist/plugins/devtools/screens/predicates/PredicatesListScreen.svelte +13 -15
  41. package/dist/plugins/devtools/screens/project/ProjectScreen.svelte +1 -46
  42. package/dist/plugins/framework/index.js +1 -1
  43. package/dist/plugins/framework/plugin.d.ts +4 -4
  44. package/dist/plugins/framework/plugin.js +1 -1
  45. package/dist/render/browser.d.ts +2 -35
  46. package/dist/render/browser.js +1 -1
  47. package/dist/render/server.d.ts +8 -22
  48. package/dist/render/server.js +1 -1
  49. package/dist/router/Step.svelte +4 -6
  50. package/dist/router/StepRouter.svelte +34 -14
  51. package/dist/router/context.d.ts +3 -3
  52. package/dist/router/context.js +1 -1
  53. package/dist/router/index.js +1 -1
  54. package/dist/server/index.d.ts +2 -2
  55. package/dist/server/index.js +1 -1
  56. package/dist/utils/array.js +1 -1
  57. package/dist/vite-env.d.js +1 -0
  58. package/package.json +33 -106
  59. package/dist/.tsbuildinfo +0 -1
  60. package/dist/_virtual/_vite/preload-helper.js +0 -1
  61. package/dist/components/LazyImage.svelte +0 -192
  62. package/dist/components/index.d.ts +0 -1
  63. package/dist/components/index.js +0 -1
  64. package/dist/experience/ExperienceHost.svelte +0 -112
  65. package/dist/experience/ExperienceSlot.svelte +0 -154
  66. package/dist/experience/HtmlRender.svelte +0 -52
  67. package/dist/experience/set-picked-context.d.ts +0 -29
  68. package/dist/experience/set-picked-context.js +0 -1
  69. package/dist/form/__tests__/CreateFormHarness.svelte +0 -30
  70. package/dist/form/create-form.js +0 -1
  71. package/dist/form/create-form.svelte.d.ts +0 -40
  72. package/dist/form/create-form.svelte.js +0 -1
  73. package/dist/form/get-form.d.ts +0 -30
  74. package/dist/form/get-form.js +0 -1
  75. package/dist/hooks/action.d.ts +0 -40
  76. package/dist/hooks/action.js +0 -1
  77. package/dist/hooks/content.d.ts +0 -18
  78. package/dist/hooks/content.js +0 -1
  79. package/dist/hooks/create-query/index.d.ts +0 -145
  80. package/dist/hooks/create-query/index.js +0 -1
  81. package/dist/hooks/events.d.ts +0 -2
  82. package/dist/hooks/events.js +0 -1
  83. package/dist/hooks/feature.d.ts +0 -47
  84. package/dist/hooks/feature.js +0 -1
  85. package/dist/hooks/predicate.d.ts +0 -3
  86. package/dist/hooks/predicate.js +0 -1
  87. package/dist/hooks/reference.d.ts +0 -61
  88. package/dist/hooks/reference.js +0 -1
  89. package/dist/plugins/devtools/PickedIcon.svelte +0 -19
  90. package/dist/plugins/devtools/components/AdaptedToolHost.svelte +0 -103
  91. package/dist/plugins/devtools/customTools.d.ts +0 -27
  92. package/dist/plugins/devtools/customTools.js +0 -1
  93. package/dist/plugins/devtools/screens/config/ConfigScreen.svelte +0 -160
  94. package/dist/plugins/devtools/screens/content/ContentListScreen.svelte +0 -89
  95. package/dist/plugins/devtools/screens/custom-tools/CustomToolsScreen.svelte +0 -29
  96. package/dist/plugins/devtools/screens/events/EventListItem.svelte +0 -216
  97. package/dist/plugins/devtools/screens/events/EventsListScreen.svelte +0 -18
  98. package/dist/plugins/devtools/screens/events/EventsTable.svelte +0 -76
  99. package/dist/plugins/devtools/screens/features/FeaturesListScreen.svelte +0 -239
  100. package/dist/plugins/devtools/screens/fields/FieldTableRow.svelte +0 -276
  101. package/dist/plugins/devtools/screens/fields/FieldsListScreen.svelte +0 -12
  102. package/dist/plugins/devtools/screens/fields/FieldsTable.svelte +0 -78
  103. package/dist/plugins/devtools/screens/identity/IdentityScreen.svelte +0 -66
  104. package/dist/plugins/devtools/screens/responses/ResponseTableRow.svelte +0 -280
  105. package/dist/plugins/devtools/screens/responses/ResponsesListScreen.svelte +0 -12
  106. package/dist/plugins/devtools/screens/responses/ResponsesTable.svelte +0 -88
  107. package/dist/plugins/devtools/ui/actions/Button.svelte +0 -175
  108. package/dist/plugins/devtools/ui/actions/CopyButton.svelte +0 -88
  109. package/dist/plugins/devtools/ui/data/Badge.svelte +0 -62
  110. package/dist/plugins/devtools/ui/data/CodeBlock.svelte +0 -38
  111. package/dist/plugins/devtools/ui/data/DataTable.svelte +0 -144
  112. package/dist/plugins/devtools/ui/data/EmptyState.svelte +0 -26
  113. package/dist/plugins/devtools/ui/data/ExpandableRow.svelte +0 -66
  114. package/dist/plugins/devtools/ui/data/VisualizationContainer.svelte +0 -55
  115. package/dist/plugins/devtools/ui/feedback/Banner.svelte +0 -116
  116. package/dist/plugins/devtools/ui/feedback/Spinner.svelte +0 -79
  117. package/dist/plugins/devtools/ui/forms/Checkbox.svelte +0 -139
  118. package/dist/plugins/devtools/ui/forms/RadioGroup.svelte +0 -218
  119. package/dist/plugins/devtools/ui/forms/Select.svelte +0 -137
  120. package/dist/plugins/devtools/ui/forms/Switch.svelte +0 -158
  121. package/dist/plugins/devtools/ui/forms/TextField.svelte +0 -125
  122. package/dist/plugins/devtools/ui/index.d.ts +0 -22
  123. package/dist/plugins/devtools/ui/index.js +0 -1
  124. package/dist/plugins/devtools/ui/layout/Card.svelte +0 -55
  125. package/dist/plugins/devtools/ui/layout/Divider.svelte +0 -34
  126. package/dist/plugins/devtools/ui/layout/Spacer.svelte +0 -11
  127. package/dist/plugins/devtools/ui/layout/Stack.svelte +0 -129
  128. package/dist/plugins/devtools/ui/overlays/Tooltip.svelte +0 -90
  129. package/dist/plugins/devtools/ui/tokens.css +0 -144
  130. package/dist/plugins/devtools/ui/typography/Heading.svelte +0 -55
  131. package/dist/plugins/devtools/ui/typography/Text.svelte +0 -93
  132. package/dist/utils/ErrorBoundary.svelte +0 -27
@@ -1,47 +1,22 @@
1
- <script lang="ts" generics="P extends Record<string, unknown> = Record<string, never>">
2
- /** @file Accessible tab container that renders dynamic Svelte components per tab. */
1
+ <script lang="ts">
3
2
  import type { Component } from 'svelte'
4
3
 
5
4
  interface Tab {
6
5
  id: string
7
6
  label: string
8
- component: Component<P>
9
- props: P
7
+ component: Component<any>
8
+ props?: Record<string, unknown>
10
9
  }
11
10
 
12
11
  export let tabs: Tab[]
13
12
  export let initialTab = 0
14
13
 
15
14
  let activeTab = initialTab
16
- // Keyed by tab index — written at render time via Svelte `bind:this`. A
17
- // record rather than an array sidesteps `sonarjs/no-empty-collection`,
18
- // whose flow analysis can't see the bind writes.
19
- const tabButtons: Record<number, HTMLButtonElement | undefined> = {}
20
-
21
- /**
22
- * Sets the active tab to the given index and scrolls the corresponding button into the
23
- * horizontal viewport so keyboard navigation never lands off-screen.
24
- *
25
- * @param {number} index - The zero-based tab index to activate.
26
- * @example
27
- * ```typescript
28
- * activateTab(2) // switches to the third tab and scrolls it into view
29
- * ```
30
- */
15
+
31
16
  function activateTab(index: number) {
32
17
  activeTab = index
33
- tabButtons[index]?.scrollIntoView({ inline: 'nearest', block: 'nearest', behavior: 'smooth' })
34
18
  }
35
19
 
36
- /**
37
- * Handles arrow-key, Home, and End navigation within the tab list.
38
- *
39
- * @param {KeyboardEvent} event - The keyboard event from the tab list.
40
- * @example
41
- * ```typescript
42
- * handleKeydown(new KeyboardEvent('keydown', { key: 'ArrowRight' }))
43
- * ```
44
- */
45
20
  function handleKeydown(event: KeyboardEvent) {
46
21
  const tabCount = tabs.length
47
22
  let newIndex = activeTab
@@ -72,7 +47,6 @@
72
47
  <div role="tablist" tabindex="0" on:keydown={handleKeydown} class="tab-list">
73
48
  {#each tabs as tab, i (tab.id)}
74
49
  <button
75
- bind:this={tabButtons[i]}
76
50
  role="tab"
77
51
  id="tab-{tab.id}"
78
52
  aria-controls="panel-{tab.id}"
@@ -97,7 +71,7 @@
97
71
  hidden={activeTab !== i}
98
72
  >
99
73
  {#if activeTab === i}
100
- <svelte:component this={tab.component} {...tab.props} />
74
+ <svelte:component this={tab.component} {...tab.props || {}} />
101
75
  {/if}
102
76
  </div>
103
77
  {/each}
@@ -108,68 +82,37 @@
108
82
  width: 100%;
109
83
  display: flex;
110
84
  flex-direction: column;
111
- flex: 1;
112
- min-height: 0;
113
85
  }
114
86
 
115
87
  .tab-list {
116
88
  display: flex;
117
- border-bottom: 1px solid var(--color-gray-200);
118
- flex-shrink: 0;
119
- overflow-x: auto;
120
- overflow-y: hidden;
121
- scrollbar-width: thin;
122
- scrollbar-color: var(--color-gray-300) transparent;
123
- scroll-behavior: smooth;
124
- }
125
-
126
- .tab-list::-webkit-scrollbar {
127
- height: 6px;
128
- }
129
-
130
- .tab-list::-webkit-scrollbar-thumb {
131
- background-color: var(--color-gray-300);
132
- border-radius: var(--radius-full);
133
- }
134
-
135
- .tab-list::-webkit-scrollbar-track {
136
- background-color: transparent;
89
+ border-bottom: 1px solid #ccc;
137
90
  }
138
91
 
139
92
  .tab-button {
140
- padding: var(--space-2) var(--space-4);
93
+ padding: 0.5rem 1rem;
141
94
  border: none;
142
95
  background: none;
143
96
  cursor: pointer;
144
97
  border-bottom: 2px solid transparent;
145
- font-size: var(--text-sm);
146
- color: var(--color-gray-600);
147
- font-family: inherit;
148
- white-space: nowrap;
149
- transition: color 0.15s ease, border-color 0.15s ease;
150
98
  }
151
99
 
152
100
  .tab-button:hover {
153
- background-color: var(--color-gray-100);
154
- color: var(--color-gray-900);
101
+ background-color: #f0f0f0;
155
102
  }
156
103
 
157
104
  .tab-button.active {
158
- border-bottom-color: var(--color-gray-900);
159
- color: var(--color-gray-900);
160
- font-weight: var(--font-medium);
105
+ border-bottom: 2px solid #000;
161
106
  }
162
107
 
163
- .tab-button:focus-visible {
164
- outline: var(--ring-width) solid var(--ring-color);
165
- outline-offset: calc(-1 * var(--ring-width));
108
+ .tab-button:focus {
109
+ outline: 2px solid #0066cc;
110
+ outline-offset: -2px;
166
111
  }
167
112
 
168
113
  .tab-panel {
169
114
  flex: 1 1 auto;
170
115
  display: grid;
171
- min-height: 0;
172
- overflow: auto;
173
116
  }
174
117
 
175
118
  .tab-panel:not(.active) {
@@ -0,0 +1 @@
1
+ export declare const devtoolsExperience: import('@picked/client/plugins/create-experience').SerializableExperience;
@@ -0,0 +1 @@
1
+ import{createExperience as e}from"@picked/client/plugins/create-experience";import{adaptSvelteComponent as o}from"../../component.js";import t from"./DevToolsExperience.svelte";const p=e({id:"svelte-devtools",name:"Picked Devtools",decide:{},targets:[{selector:"main",placement:"append"}],type:"funnel",component:o(t)});p.addStep({label:"Tools"});export{p as devtoolsExperience};
@@ -1,4 +1,2 @@
1
- /** @file Public entrypoint for the Svelte devtools plugin — the plugin factory and its consumer-facing types. */
2
1
  export { svelteDevtoolsPlugin } from './plugin';
3
2
  export type * from './plugin';
4
- export type { CustomTool } from './customTools';
@@ -1 +1 @@
1
- import{svelteDevtoolsPlugin as e}from"./plugin.js";export{e as svelteDevtoolsPlugin};
1
+ import{svelteDevtoolsPlugin as l}from"./plugin.js";export{l as svelteDevtoolsPlugin};
@@ -1,39 +1,7 @@
1
- /** @file Svelte devtools plugin that registers and lazily loads the Picked DevTools experience. */
2
- import { type Plugin } from '@picked/client';
3
- import type { CustomTool } from './customTools';
4
- /** Plugin name under which the devtools plugin stores its config (including registered custom tools). */
5
- export declare const DEVTOOLS_PLUGIN_NAME = "svelte-devtools";
6
- export interface SvelteDevtoolsPluginOptions {
7
- /**
8
- * When `true`, the devtools experience launches automatically on page load.
9
- * When `false`, devtools can only be opened via the Picked Chrome extension,
10
- * **unless** a preview token is present — in which case the launcher always
11
- * mounts so the previewed site remains inspectable in production builds.
12
- *
13
- * @default false
14
- */
15
- enabled?: boolean;
16
- /**
17
- * Project-specific custom dev tools surfaced under the "Custom Tools" tab. Each tool's
18
- * `component` is framework-adapted (via `adaptReactComponent` or `adaptSvelteComponent`), so it
19
- * can be authored in the host app's framework and still receive the live Picked client the way
20
- * an experience component does.
21
- *
22
- * @default []
23
- */
24
- customTools?: CustomTool[];
25
- }
1
+ import { Plugin } from '@picked/client';
26
2
  /**
27
- * Registers the devtools experience for on-demand loading via the Chrome DevTools extension.
28
- * The devtools component is lazily loaded — it is never included in the initial bundle.
29
- *
30
- * @param {SvelteDevtoolsPluginOptions} [options] - Optional configuration for the devtools plugin.
31
- * @returns {Plugin[]} An array of plugins to register with the Picked client.
32
- * @example
33
- * ```typescript
34
- * const client = new Picked({
35
- * plugins: [...svelteDevtoolsPlugin({ enabled: true })],
36
- * })
37
- * ```
3
+ * Enables Svelte component rendering compatability.
4
+ * This plugin registers the Svelte framework and allows rendering Svelte components
5
+ * with the client's experience data.
38
6
  */
39
- export declare const svelteDevtoolsPlugin: (options?: SvelteDevtoolsPluginOptions) => Plugin[];
7
+ export declare const svelteDevtoolsPlugin: () => Plugin[];
@@ -1 +1 @@
1
- import{adaptSvelteComponent as e}from"../../component.js";import{__vitePreload as t}from"../../_virtual/_vite/preload-helper.js";import{lazyComponent as n}from"@picked/client";import{createExperience as r,createExperiencePlugin as i}from"@picked/client/plugins/create-experience";var a=`svelte-devtools`,o=o=>{let s=r({id:`devtools`,key:`devtools`,name:`Picked Devtools`,condition:!1,initializeOpen:!1,targets:[{selector:`body`,placement:`append`}],component:e(n(()=>t(()=>import(`./DevToolsExperience.svelte`),[])))});return s.addStep({name:`Tools`}),[{name:a,setup:e=>{let t=!!e.searchParams[`preview-token`]?.[0];return(o?.enabled||t)&&e.eventBus.watch(t=>{t.type===`ready`&&e.experiences.launch({key:s.key,options:{bypassCondition:!0}})}),{customTools:o?.customTools??[]}}},i({experiences:[s]})]};export{a as DEVTOOLS_PLUGIN_NAME,o as svelteDevtoolsPlugin};
1
+ import{supportsDocument as c,isPickedRoot as o}from"@picked/client";import{createExperiencePlugin as g}from"@picked/client/plugins/create-experience";import{devtoolsExperience as t}from"./experience.js";const d=()=>[{name:"svelte-devtools",setup:r=>{if(!c())return;const s=r.experienceInstances.getByExperienceId(t.id),i=e=>{if(!(!e.target||!("tagName"in e.target)||typeof e.target.tagName!="string")&&e.key==="."&&!["INPUT","TEXTAREA"].includes(e.target.tagName)&&!(e.currentTarget instanceof HTMLElement&&o(e.currentTarget))&&!(e.target instanceof HTMLElement&&o(e.target))){const n=s.getState();n.length>0?n.forEach(a=>a.toggleOpen()):r.launchExperienceById(t.id)}};document.addEventListener("keydown",i)}},g({experiences:[t]})];export{d as svelteDevtoolsPlugin};
@@ -1,30 +1,26 @@
1
1
  <script lang="ts">
2
2
  import { getPicked } from '../../../../hooks'
3
- import { Card, DataTable, EmptyState, Stack } from '../../ui'
4
3
 
5
4
  const client = getPicked()
6
5
 
7
6
  $: components = client.components.listStore
8
-
9
- const columns = [
10
- { key: 'name', header: 'Name' },
11
- { key: 'framework', header: 'Framework' },
12
- ]
13
7
  </script>
14
8
 
15
- <Stack padding="medium">
16
- <Card sectioned>
17
- <DataTable columns={columns} rows={$components}>
18
- {#snippet row(item)}
19
- {@const component = item}
9
+ <div>
10
+ <table>
11
+ <thead>
12
+ <tr>
13
+ <th>Name</th>
14
+ <th>Framework</th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ {#each $components as component (component.name)}
20
19
  <tr>
21
20
  <td>{component.name}</td>
22
21
  <td>{component.component.frameworkName}</td>
23
22
  </tr>
24
- {/snippet}
25
- {#snippet empty()}
26
- <EmptyState message="No components" />
27
- {/snippet}
28
- </DataTable>
29
- </Card>
30
- </Stack>
23
+ {/each}
24
+ </tbody>
25
+ </table>
26
+ </div>
@@ -7,4 +7,6 @@
7
7
  $: experienceInstances = client.experienceInstances.listStore
8
8
  </script>
9
9
 
10
- <ExperienceInstancesTable experienceInstances={$experienceInstances} />
10
+ <div>
11
+ <ExperienceInstancesTable experienceInstances={$experienceInstances} />
12
+ </div>
@@ -1,8 +1,6 @@
1
1
  <script lang="ts">
2
- /** @file Detail screen for a single experience, showing its config, target selectors, and decision logic. */
3
2
  import type { ExperienceStore } from '@picked/client'
4
3
  import { getPicked } from '../../../../hooks'
5
- import { Button, Card, Text, CodeBlock, Stack } from '../../ui'
6
4
 
7
5
  const client = getPicked()
8
6
  export let experience: ExperienceStore
@@ -10,35 +8,39 @@
10
8
  $: config = experience.configStore
11
9
  </script>
12
10
 
13
- <Stack direction="vertical" gap="medium" padding="medium">
14
- <Stack direction="horizontal" gap="small">
15
- <Button variant="primary" size="small" onclick={() => client.experiences.open({ key: experience.key, options: { bypassCondition: true } })}>
16
- Launch experience
17
- </Button>
18
- </Stack>
11
+ <div class="container">
12
+ <div>
13
+ <button on:click={() => client.launchExperienceById(experience.id)}>Launch experience</button>
14
+ </div>
19
15
 
20
- <Card sectioned>
21
- <Stack direction="vertical" gap="medium" padding="medium">
16
+ <div>
17
+ <p><b>Type</b></p>
18
+ <p>{$config.type}</p>
19
+ </div>
22
20
 
23
- <div>
24
- <Text weight="semibold">Target selectors</Text>
25
- <ul>
26
- {#if $config.targetSelectors.length > 0}
27
- {#each $config.targetSelectors as selector (selector)}
28
- <li>
29
- <CodeBlock code="{selector.selector} || {selector.placement}" />
30
- </li>
31
- {/each}
32
- {:else}
33
- <li><Text color="subdued">(none)</Text></li>
34
- {/if}
35
- </ul>
36
- </div>
21
+ <div>
22
+ <p><b>Target selectors</b></p>
23
+ <ul>
24
+ {#if $config.targetSelectors.length > 0}
25
+ {#each $config.targetSelectors as selector (selector)}
26
+ <li>
27
+ <pre>{selector.selector} || {selector.placement}</pre>
28
+ </li>
29
+ {/each}
30
+ {:else}
31
+ <li>(none)</li>
32
+ {/if}
33
+ </ul>
34
+ </div>
37
35
 
38
- <div>
39
- <Text weight="semibold">Decision logic</Text>
40
- <CodeBlock code={JSON.stringify($config.decisionLogic, null, 2)} />
41
- </div>
42
- </Stack>
43
- </Card>
44
- </Stack>
36
+ <div>
37
+ <p><b>Decision logic</b></p>
38
+ <pre>{JSON.stringify($config.decisionLogic, null, 2)}</pre>
39
+ </div>
40
+ </div>
41
+
42
+ <style>
43
+ .container {
44
+ padding: 0.5em;
45
+ }
46
+ </style>
@@ -10,4 +10,6 @@
10
10
  $: experienceInstances = client.experienceInstances.getByExperienceId(experience.id)
11
11
  </script>
12
12
 
13
- <ExperienceInstancesTable experienceInstances={$experienceInstances} />
13
+ <div>
14
+ <ExperienceInstancesTable experienceInstances={$experienceInstances} />
15
+ </div>