@picked/svelte 0.0.1-dev.1771907441854 → 0.0.1-dev.1771981674305

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.
@@ -0,0 +1 @@
1
+ const p="modulepreload",v=function(l){return"/"+l},u={},y=function(d,c,E){let i=Promise.resolve();if(c&&c.length>0){let f=function(e){return Promise.all(e.map(o=>Promise.resolve(o).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),t=r?.nonce||r?.getAttribute("nonce");i=f(c.map(e=>{if(e=v(e),e in u)return;u[e]=!0;const o=e.endsWith(".css"),s=o?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${s}`))return;const n=document.createElement("link");if(n.rel=o?"stylesheet":p,o||(n.as="script"),n.crossOrigin="",n.href=e,t&&n.setAttribute("nonce",t),document.head.appendChild(n),o)return new Promise((m,h)=>{n.addEventListener("load",m),n.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${e}`)))})}))}function a(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return i.then(r=>{for(const t of r||[])t.status==="rejected"&&a(t.reason);return d().catch(a)})};export{y as __vitePreload};
@@ -1,9 +1,9 @@
1
- import { AdaptedComponent, AdaptedComponentStyle } from '@picked/client';
1
+ import { AdaptedComponent, AdaptedComponentStyle, LazyComponentLoader } from '@picked/client';
2
2
  import { Component } from 'svelte';
3
3
  export type ComponentWithProps = Component<any>;
4
4
  export declare const adaptSvelteComponent: (component: ComponentWithProps | Promise<{
5
5
  default: ComponentWithProps;
6
- }>, style?: AdaptedComponentStyle) => AdaptedComponent<"svelte", ComponentWithProps | Promise<{
6
+ }> | LazyComponentLoader<ComponentWithProps>, style?: AdaptedComponentStyle) => AdaptedComponent<"svelte", ComponentWithProps | Promise<{
7
7
  default: ComponentWithProps;
8
- }>>;
8
+ }> | LazyComponentLoader<ComponentWithProps>>;
9
9
  export declare const isValidAdaptedComponent: (component: AdaptedComponent<string, unknown>) => component is AdaptedComponent<"svelte", ComponentWithProps>;
@@ -126,7 +126,7 @@
126
126
  class="floating-button"
127
127
  onclick={() => experience.open()}
128
128
  aria-label="Open Picked Devtools"
129
- title="Open Picked Devtools (or press .)"
129
+ title="Open Picked Devtools"
130
130
  >
131
131
  <PickedIcon height={25} width={25}/>
132
132
  </button>
@@ -139,6 +139,80 @@
139
139
  }
140
140
 
141
141
  .devtools {
142
+ /* Colors — match Tailwind's default palette exactly */
143
+ --color-blue-500: #3b82f6;
144
+ --color-blue-600: #2563eb;
145
+ --color-blue-700: #1d4ed8;
146
+ --color-blue-800: #1e40af;
147
+ --color-gray-50: #f9fafb;
148
+ --color-gray-100: #f3f4f6;
149
+ --color-gray-200: #e5e7eb;
150
+ --color-gray-300: #d1d5db;
151
+ --color-gray-500: #6b7280;
152
+ --color-gray-600: #4b5563;
153
+ --color-gray-700: #374151;
154
+ --color-gray-900: #111827;
155
+ --color-red-500: #ef4444;
156
+ --color-red-600: #dc2626;
157
+ --color-red-700: #b91c1c;
158
+ --color-red-800: #991b1b;
159
+ --color-green-100: #dcfce7;
160
+ --color-green-700: #15803d;
161
+ --color-green-800: #166534;
162
+ --color-yellow-100: #fef9c3;
163
+ --color-yellow-700: #a16207;
164
+ --color-yellow-800: #854d0e;
165
+ --color-white: #ffffff;
166
+ --color-black: #000000;
167
+
168
+ /* Typography — match Tailwind's type scale */
169
+ --text-xs: 0.75rem;
170
+ --text-sm: 0.875rem;
171
+ --text-base: 1rem;
172
+ --text-lg: 1.125rem;
173
+ --text-xl: 1.25rem;
174
+ --text-2xl: 1.5rem;
175
+ --font-normal: 400;
176
+ --font-medium: 500;
177
+ --font-semibold: 600;
178
+
179
+ /* Spacing — match Tailwind's spacing scale */
180
+ --space-0: 0;
181
+ --space-0-5: 0.125rem;
182
+ --space-1: 0.25rem;
183
+ --space-1-5: 0.375rem;
184
+ --space-2: 0.5rem;
185
+ --space-2-5: 0.625rem;
186
+ --space-3: 0.75rem;
187
+ --space-4: 1rem;
188
+ --space-5: 1.25rem;
189
+ --space-6: 1.5rem;
190
+ --space-8: 2rem;
191
+
192
+ /* Radii */
193
+ --radius-sm: 0.125rem;
194
+ --radius-md: 0.375rem;
195
+ --radius-lg: 0.5rem;
196
+ --radius-xl: 0.75rem;
197
+ --radius-full: 9999px;
198
+
199
+ /* Shadows */
200
+ --shadow-card: 0 1px 2px 0 rgba(0, 0, 0, 0.03);
201
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
202
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
203
+
204
+ /* Focus ring — matches dashboard's ring-2 ring-blue-500 ring-offset-2 */
205
+ --ring-color: var(--color-blue-500);
206
+ --ring-width: 2px;
207
+ --ring-offset: 2px;
208
+
209
+ /* Base typography reset */
210
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
211
+ 'Helvetica Neue', Arial, sans-serif;
212
+ font-size: var(--text-sm);
213
+ line-height: 1.5;
214
+ color: var(--color-gray-900);
215
+
142
216
  position: fixed;
143
217
  inset: 0;
144
218
  z-index: 999999999;
@@ -252,7 +326,72 @@
252
326
  }
253
327
  }
254
328
 
329
+ /** Compact inline form elements for use within table cells */
330
+ .devtools :global(.inline-select),
331
+ .devtools :global(.inline-input) {
332
+ font-size: var(--text-xs);
333
+ padding: var(--space-0-5) var(--space-1);
334
+ border: 1px solid var(--color-gray-300);
335
+ border-radius: var(--radius-sm);
336
+ font-family: inherit;
337
+ }
338
+
339
+ .devtools :global(.inline-input) {
340
+ width: 100%;
341
+ }
342
+
343
+ .devtools :global(.inline-select:focus),
344
+ .devtools :global(.inline-input:focus) {
345
+ outline: none;
346
+ box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
347
+ }
348
+
349
+ /** Textarea elements within devtools */
350
+ .devtools :global(textarea) {
351
+ width: 100%;
352
+ min-height: 60px;
353
+ font-family: monospace;
354
+ font-size: var(--text-xs);
355
+ padding: var(--space-1);
356
+ border: 1px solid var(--color-gray-300);
357
+ border-radius: var(--radius-md);
358
+ }
359
+
360
+ .devtools :global(textarea:focus) {
361
+ outline: none;
362
+ box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
363
+ }
364
+
365
+ /** Event detail panel styling */
366
+ .devtools :global(.details-cell) {
367
+ background-color: var(--color-gray-50);
368
+ padding: var(--space-4);
369
+ border-left: 3px solid var(--color-blue-500);
370
+ }
371
+
372
+ /** Expand/collapse icon for table rows */
373
+ .devtools :global(.expand-icon) {
374
+ margin-right: var(--space-2);
375
+ display: inline-block;
376
+ width: 12px;
377
+ }
255
378
 
379
+ /** Clickable table rows (e.g., expandable event rows) */
380
+ .devtools :global(.event-row) {
381
+ cursor: pointer;
382
+ }
256
383
 
384
+ /** Centered checkbox cell in tables */
385
+ .devtools :global(.include-cell) {
386
+ text-align: center;
387
+ width: 2.5rem;
388
+ }
257
389
 
390
+ /** Inline option label for checkbox/radio lists in table cells */
391
+ .devtools :global(.option-label) {
392
+ display: flex;
393
+ align-items: center;
394
+ gap: var(--space-2);
395
+ cursor: pointer;
396
+ }
258
397
  </style>
@@ -1,7 +1,15 @@
1
1
  import { Plugin } from '@picked/client';
2
+ export interface SvelteDevtoolsPluginOptions {
3
+ /**
4
+ * When `true`, the devtools experience launches automatically on page load.
5
+ * When `false`, devtools can only be opened via the Picked Chrome extension.
6
+ *
7
+ * @default false
8
+ */
9
+ enabled?: boolean;
10
+ }
2
11
  /**
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.
12
+ * Registers the devtools experience for on-demand loading via the Chrome DevTools extension.
13
+ * The devtools component is lazily loaded — it is never included in the initial bundle.
6
14
  */
7
- export declare const svelteDevtoolsPlugin: () => Plugin[];
15
+ export declare const svelteDevtoolsPlugin: (options?: SvelteDevtoolsPluginOptions) => Plugin[];
@@ -1 +1 @@
1
- import{supportsDocument as c,isPickedRoot as a}from"@picked/client";import{createExperiencePlugin as g}from"@picked/client/plugins/create-experience";import{devtoolsExperience as r}from"./experience.js";const m=()=>[{name:"svelte-devtools",setup:t=>{if(!c())return;const s=t.experienceInstances.getByExperienceId(r.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&&a(e.currentTarget))&&!(e.target instanceof HTMLElement&&a(e.target))){const n=s.getState();n.length>0?n.forEach(o=>o.toggleOpen()):t.launchExperienceById(r.id)}};document.addEventListener("keydown",i),t.eventBus.watch(e=>{e.type==="ready"&&t.launchExperienceById(r.id)})}},g({experiences:[r]})];export{m as svelteDevtoolsPlugin};
1
+ import{__vitePreload as t}from"../../_virtual/preload-helper.js";import{lazyComponent as n}from"@picked/client";import{createExperience as r,createExperiencePlugin as i}from"@picked/client/plugins/create-experience";import{adaptSvelteComponent as l}from"../../component.js";const d=o=>{const e=r({id:"devtools",name:"Picked Devtools",condition:o?.enabled??!1,initializeOpen:!1,targets:[{selector:"body",placement:"append"}],component:l(n(()=>t(()=>import("./DevToolsExperience.svelte"),[])))});return e.addStep({label:"Tools"}),[i({experiences:[e]})]};export{d as svelteDevtoolsPlugin};
@@ -1 +1 @@
1
- import{mount as a}from"svelte";import{isValidAdaptedComponent as u}from"../component.js";import{CLIENT_CONTEXT_KEY as d,EXPERIENCE_CONTEXT_KEY as E}from"../context.js";import{mergeArrays as p}from"../utils/array.js";import f from"../utils/ErrorBoundary.svelte";function y(n,e){return new Map([[d,n],[E,e]])}const g=async(n,e,s,o,i)=>{if(!u(e))throw new Error("The component is invalid.");const c=p(e.style?.sheets,i.stylesheets),m=p(e.style?.css,i.css);c.length&&c.forEach(r=>{const t=document.createElement("link");t.setAttribute("rel","stylesheet"),t.setAttribute("href",r),t.setAttribute("type","text/css"),t.setAttribute("picked-injected","true"),n.appendChild(t)}),m.length&&m.forEach(r=>{const t=document.createElement("style");t.textContent=r,t.setAttribute("type","text/css"),t.setAttribute("picked-injected","true"),n.appendChild(t)});const l=r=>{a(f,{target:n,props:{component:r,componentProps:{client:s,experience:o}},context:y(s,o)})};if(e.component instanceof Promise){const{default:r}=await e.component;l(r);return}l(e.component)},x=n=>{};export{y as createContext,g as renderSvelteComponent,x as unRenderSvelteComponent};
1
+ import{isLazyLoader as p}from"@picked/client";import{mount as u}from"svelte";import{isValidAdaptedComponent as d}from"../component.js";import{CLIENT_CONTEXT_KEY as f,EXPERIENCE_CONTEXT_KEY as E}from"../context.js";import{mergeArrays as l}from"../utils/array.js";import y from"../utils/ErrorBoundary.svelte";function C(n,t){return new Map([[f,n],[E,t]])}const k=async(n,t,s,i,c)=>{if(!d(t))throw new Error("The component is invalid.");const m=l(t.style?.sheets,c.stylesheets),a=l(t.style?.css,c.css);m.length&&m.forEach(r=>{const e=document.createElement("link");e.setAttribute("rel","stylesheet"),e.setAttribute("href",r),e.setAttribute("type","text/css"),e.setAttribute("picked-injected","true"),n.appendChild(e)}),a.length&&a.forEach(r=>{const e=document.createElement("style");e.textContent=r,e.setAttribute("type","text/css"),e.setAttribute("picked-injected","true"),n.appendChild(e)});const o=r=>{u(y,{target:n,props:{component:r,componentProps:{client:s,experience:i}},context:C(s,i)})};if(p(t.component)){const{default:r}=await t.component.load();o(r);return}if(t.component instanceof Promise){const{default:r}=await t.component;o(r);return}o(t.component)},N=n=>{};export{C as createContext,k as renderSvelteComponent,N as unRenderSvelteComponent};
@@ -1 +1 @@
1
- import{render as a}from"svelte/server";import{isValidAdaptedComponent as E}from"../component.js";import{CLIENT_CONTEXT_KEY as p,EXPERIENCE_CONTEXT_KEY as f}from"../context.js";import{mergeArrays as n}from"../utils/array.js";function d(t,s){return new Map([[p,t],[f,s]])}const C=async(t,s,e,o)=>{if(!E(t))throw new Error("The component is invalid.");const h=n(t.style?.sheets,o.stylesheets),m=n(t.style?.css,o.css),r=t.component instanceof Promise?a((await t.component).default,{props:{client:s,experience:e},context:d(s,e)}):a(t.component,{props:{client:s,experience:e},context:d(s,e)});return{stylesheets:h,css:m,head:r.head,html:r.html,body:r.body,hashes:r.hashes}};export{d as createContext,C as staticRenderSvelteComponent};
1
+ import{isLazyLoader as m}from"@picked/client";import{render as l}from"svelte/server";import{isValidAdaptedComponent as h}from"../component.js";import{CLIENT_CONTEXT_KEY as f,EXPERIENCE_CONTEXT_KEY as p}from"../context.js";import{mergeArrays as n}from"../utils/array.js";function c(e,t){return new Map([[f,e],[p,t]])}const w=async(e,t,o,a)=>{if(!h(e))throw new Error("The component is invalid.");const d=n(e.style?.sheets,a.stylesheets),i=n(e.style?.css,a.css);let s;m(e.component)?s=(await e.component.load()).default:e.component instanceof Promise?s=(await e.component).default:s=e.component;const r=l(s,{props:{client:t,experience:o},context:c(t,o)});return{stylesheets:d,css:i,head:r.head,html:r.html,body:r.body,hashes:r.hashes}};export{c as createContext,w as staticRenderSvelteComponent};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/svelte",
3
- "version": "0.0.1-dev.1771907441854",
3
+ "version": "0.0.1-dev.1771981674305",
4
4
  "dependencies": {
5
5
  "d3": "^7.9.0"
6
6
  },
@@ -86,7 +86,7 @@
86
86
  },
87
87
  "module": "./dist/index.js",
88
88
  "peerDependencies": {
89
- "@picked/client": "0.0.1-dev.1771907441854",
89
+ "@picked/client": "0.0.1-dev.1771981674305",
90
90
  "effector": "^23.3.0",
91
91
  "svelte": "^5.34.3"
92
92
  },
@@ -1 +0,0 @@
1
- export declare const devtoolsExperience: import('@picked/client/plugins/create-experience').SerializableExperience;
@@ -1 +0,0 @@
1
- import{createExperience as e}from"@picked/client/plugins/create-experience";import{adaptSvelteComponent as o}from"../../component.js";import t from"./DevToolsExperience.svelte";import p from"./ui/tokens.css.js";const r=e({id:"devtools",name:"Picked Devtools",decide:{},targets:[{selector:"body",placement:"append"}],component:o(t,{css:[p]})});r.addStep({label:"Tools"});export{r as devtoolsExperience};
@@ -1 +0,0 @@
1
- const e=".devtools{--color-blue-500: #3b82f6;--color-blue-600: #2563eb;--color-blue-700: #1d4ed8;--color-blue-800: #1e40af;--color-gray-50: #f9fafb;--color-gray-100: #f3f4f6;--color-gray-200: #e5e7eb;--color-gray-300: #d1d5db;--color-gray-500: #6b7280;--color-gray-600: #4b5563;--color-gray-700: #374151;--color-gray-900: #111827;--color-red-500: #ef4444;--color-red-600: #dc2626;--color-red-700: #b91c1c;--color-red-800: #991b1b;--color-green-100: #dcfce7;--color-green-700: #15803d;--color-green-800: #166534;--color-yellow-100: #fef9c3;--color-yellow-700: #a16207;--color-yellow-800: #854d0e;--color-white: #ffffff;--color-black: #000000;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--font-normal: 400;--font-medium: 500;--font-semibold: 600;--space-0: 0;--space-0-5: .125rem;--space-1: .25rem;--space-1-5: .375rem;--space-2: .5rem;--space-2-5: .625rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--radius-sm: .125rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-full: 9999px;--shadow-card: 0 1px 2px 0 rgba(0, 0, 0, .03);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -4px rgba(0, 0, 0, .1);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--ring-color: var(--color-blue-500);--ring-width: 2px;--ring-offset: 2px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:var(--text-sm);line-height:1.5;color:var(--color-gray-900)}.devtools .inline-select,.devtools .inline-input{font-size:var(--text-xs);padding:var(--space-0-5) var(--space-1);border:1px solid var(--color-gray-300);border-radius:var(--radius-sm);font-family:inherit}.devtools .inline-input{width:100%}.devtools .inline-select:focus,.devtools .inline-input:focus{outline:none;box-shadow:0 0 0 var(--ring-width) var(--ring-color)}.devtools textarea{width:100%;min-height:60px;font-family:monospace;font-size:var(--text-xs);padding:var(--space-1);border:1px solid var(--color-gray-300);border-radius:var(--radius-md)}.devtools textarea:focus{outline:none;box-shadow:0 0 0 var(--ring-width) var(--ring-color)}.devtools .details-cell{background-color:var(--color-gray-50);padding:var(--space-4);border-left:3px solid var(--color-blue-500)}.devtools .expand-icon{margin-right:var(--space-2);display:inline-block;width:12px}.devtools .event-row{cursor:pointer}.devtools .include-cell{text-align:center;width:2.5rem}.devtools .option-label{display:flex;align-items:center;gap:var(--space-2);cursor:pointer}";export{e as default};