@picked/svelte 0.0.45-next.1 → 0.0.45-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 (44) hide show
  1. package/dist/plugins/devtools/DevToolsExperience.svelte +61 -44
  2. package/dist/plugins/devtools/components/ExperienceInstanceListItem.svelte +2 -1
  3. package/dist/plugins/devtools/components/ExperienceInstancesTable.svelte +22 -20
  4. package/dist/plugins/devtools/components/Tabs.svelte +20 -7
  5. package/dist/plugins/devtools/experience.js +1 -1
  6. package/dist/plugins/devtools/screens/components/ComponentsListScreen.svelte +18 -18
  7. package/dist/plugins/devtools/screens/events/EventListItem.svelte +28 -42
  8. package/dist/plugins/devtools/screens/events/EventsListScreen.svelte +10 -11
  9. package/dist/plugins/devtools/screens/events/EventsTable.svelte +31 -33
  10. package/dist/plugins/devtools/screens/experiences/ExperienceDetailsScreen.svelte +13 -16
  11. package/dist/plugins/devtools/screens/experiences/ExperienceTreeScreen.svelte +20 -71
  12. package/dist/plugins/devtools/screens/features/FeaturesListScreen.svelte +96 -232
  13. package/dist/plugins/devtools/screens/frameworks/FrameworksListScreen.svelte +14 -16
  14. package/dist/plugins/devtools/screens/history/HistoryEntriesTable.svelte +18 -16
  15. package/dist/plugins/devtools/screens/predicates/PredicatesListScreen.svelte +14 -16
  16. package/dist/plugins/devtools/screens/responses/ResponseTableRow.svelte +25 -63
  17. package/dist/plugins/devtools/screens/responses/ResponsesTable.svelte +43 -64
  18. package/dist/plugins/devtools/ui/actions/Button.svelte +171 -0
  19. package/dist/plugins/devtools/ui/actions/CopyButton.svelte +88 -0
  20. package/dist/plugins/devtools/ui/data/Badge.svelte +62 -0
  21. package/dist/plugins/devtools/ui/data/CodeBlock.svelte +38 -0
  22. package/dist/plugins/devtools/ui/data/DataTable.svelte +134 -0
  23. package/dist/plugins/devtools/ui/data/EmptyState.svelte +26 -0
  24. package/dist/plugins/devtools/ui/data/ExpandableRow.svelte +66 -0
  25. package/dist/plugins/devtools/ui/data/VisualizationContainer.svelte +55 -0
  26. package/dist/plugins/devtools/ui/feedback/Banner.svelte +116 -0
  27. package/dist/plugins/devtools/ui/feedback/Spinner.svelte +79 -0
  28. package/dist/plugins/devtools/ui/forms/Checkbox.svelte +139 -0
  29. package/dist/plugins/devtools/ui/forms/RadioGroup.svelte +218 -0
  30. package/dist/plugins/devtools/ui/forms/Select.svelte +137 -0
  31. package/dist/plugins/devtools/ui/forms/Switch.svelte +158 -0
  32. package/dist/plugins/devtools/ui/forms/TextField.svelte +125 -0
  33. package/dist/plugins/devtools/ui/index.d.ts +22 -0
  34. package/dist/plugins/devtools/ui/index.js +1 -0
  35. package/dist/plugins/devtools/ui/layout/Card.svelte +55 -0
  36. package/dist/plugins/devtools/ui/layout/Divider.svelte +34 -0
  37. package/dist/plugins/devtools/ui/layout/Spacer.svelte +11 -0
  38. package/dist/plugins/devtools/ui/layout/Stack.svelte +129 -0
  39. package/dist/plugins/devtools/ui/overlays/Tooltip.svelte +90 -0
  40. package/dist/plugins/devtools/ui/tokens.css +144 -0
  41. package/dist/plugins/devtools/ui/tokens.css.js +1 -0
  42. package/dist/plugins/devtools/ui/typography/Heading.svelte +55 -0
  43. package/dist/plugins/devtools/ui/typography/Text.svelte +93 -0
  44. package/package.json +5 -2
@@ -0,0 +1,55 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/layout/card.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ import type { Snippet } from 'svelte'
9
+
10
+ interface Props {
11
+ children: Snippet
12
+ header?: Snippet
13
+ subdued?: boolean
14
+ sectioned?: boolean
15
+ }
16
+
17
+ let { children, header, subdued = false, sectioned = false }: Props = $props()
18
+ </script>
19
+
20
+ <div class="card" class:subdued class:sectioned>
21
+ {#if header}
22
+ <div class="card-header">
23
+ {@render header()}
24
+ </div>
25
+ {/if}
26
+ <div class="card-body">
27
+ {@render children()}
28
+ </div>
29
+ </div>
30
+
31
+ <style>
32
+ .card {
33
+ overflow: hidden;
34
+ border-radius: var(--radius-lg);
35
+ border: 1px solid var(--color-gray-200);
36
+ box-shadow: var(--shadow-card);
37
+ background-color: var(--color-white);
38
+ }
39
+
40
+ .card.subdued {
41
+ background-color: var(--color-gray-50);
42
+ }
43
+
44
+ .card:not(.sectioned) .card-body {
45
+ padding: var(--space-4);
46
+ }
47
+
48
+ .card-header {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ border-bottom: 1px solid var(--color-gray-200);
53
+ padding: var(--space-3) var(--space-4);
54
+ }
55
+ </style>
@@ -0,0 +1,34 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/layout/divider.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ interface Props {
9
+ orientation?: 'horizontal' | 'vertical'
10
+ }
11
+
12
+ let { orientation = 'horizontal' }: Props = $props()
13
+ </script>
14
+
15
+ {#if orientation === 'horizontal'}
16
+ <hr class="divider-horizontal" />
17
+ {:else}
18
+ <div class="divider-vertical" role="separator" aria-orientation="vertical"></div>
19
+ {/if}
20
+
21
+ <style>
22
+ .divider-horizontal {
23
+ width: 100%;
24
+ border: none;
25
+ border-top: 1px solid var(--color-gray-200);
26
+ margin: 0;
27
+ }
28
+
29
+ .divider-vertical {
30
+ width: 1px;
31
+ align-self: stretch;
32
+ background-color: var(--color-gray-200);
33
+ }
34
+ </style>
@@ -0,0 +1,11 @@
1
+ <!--
2
+ Flexible spacer that expands to fill available space in a flex container.
3
+ Useful for pushing sibling elements to opposite ends.
4
+ -->
5
+ <div class="spacer"></div>
6
+
7
+ <style>
8
+ .spacer {
9
+ flex: 1;
10
+ }
11
+ </style>
@@ -0,0 +1,129 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/layout/stack.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ import type { Snippet } from 'svelte'
9
+
10
+ interface Props {
11
+ children: Snippet
12
+ direction?: 'horizontal' | 'vertical'
13
+ gap?: 'none' | 'small' | 'medium' | 'large'
14
+ align?: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly'
15
+ justify?: 'start' | 'center' | 'end' | 'stretch' | 'baseline'
16
+ wrap?: boolean
17
+ padding?: 'none' | 'small' | 'medium' | 'large'
18
+ fill?: boolean
19
+ }
20
+
21
+ let {
22
+ children,
23
+ direction = 'vertical',
24
+ gap = 'medium',
25
+ align = 'start',
26
+ justify = 'stretch',
27
+ wrap = false,
28
+ padding = 'none',
29
+ fill = false,
30
+ }: Props = $props()
31
+ </script>
32
+
33
+ <div
34
+ class="stack direction-{direction} gap-{gap} align-{align} justify-{justify} padding-{padding}"
35
+ class:wrap
36
+ class:fill
37
+ >
38
+ {@render children()}
39
+ </div>
40
+
41
+ <style>
42
+ .stack {
43
+ display: flex;
44
+ }
45
+
46
+ /* Direction */
47
+ .direction-horizontal {
48
+ flex-direction: row;
49
+ }
50
+ .direction-vertical {
51
+ flex-direction: column;
52
+ }
53
+
54
+ /* Gap */
55
+ .gap-none {
56
+ gap: 0;
57
+ }
58
+ .gap-small {
59
+ gap: var(--space-2);
60
+ }
61
+ .gap-medium {
62
+ gap: var(--space-4);
63
+ }
64
+ .gap-large {
65
+ gap: var(--space-8);
66
+ }
67
+
68
+ /* Align (main axis — justify-content) */
69
+ .align-start {
70
+ justify-content: flex-start;
71
+ }
72
+ .align-center {
73
+ justify-content: center;
74
+ }
75
+ .align-end {
76
+ justify-content: flex-end;
77
+ }
78
+ .align-space-between {
79
+ justify-content: space-between;
80
+ }
81
+ .align-space-around {
82
+ justify-content: space-around;
83
+ }
84
+ .align-space-evenly {
85
+ justify-content: space-evenly;
86
+ }
87
+
88
+ /* Justify (cross axis — align-items) */
89
+ .justify-start {
90
+ align-items: flex-start;
91
+ }
92
+ .justify-center {
93
+ align-items: center;
94
+ }
95
+ .justify-end {
96
+ align-items: flex-end;
97
+ }
98
+ .justify-stretch {
99
+ align-items: stretch;
100
+ }
101
+ .justify-baseline {
102
+ align-items: baseline;
103
+ }
104
+
105
+ /* Padding */
106
+ .padding-none {
107
+ padding: 0;
108
+ }
109
+ .padding-small {
110
+ padding: var(--space-2);
111
+ }
112
+ .padding-medium {
113
+ padding: var(--space-4);
114
+ }
115
+ .padding-large {
116
+ padding: var(--space-8);
117
+ }
118
+
119
+ /* Fill (flex: 1 to expand within a flex/grid parent) */
120
+ .fill {
121
+ flex: 1;
122
+ min-height: 0;
123
+ }
124
+
125
+ /* Wrap */
126
+ .wrap {
127
+ flex-wrap: wrap;
128
+ }
129
+ </style>
@@ -0,0 +1,90 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/overlays/tooltip.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ import type { Snippet } from 'svelte'
9
+
10
+ interface Props {
11
+ children: Snippet
12
+ content: string
13
+ placement?: 'top' | 'bottom' | 'left' | 'right'
14
+ isDisabled?: boolean
15
+ }
16
+
17
+ let { children, content, placement = 'top', isDisabled = false }: Props = $props()
18
+
19
+ const tooltipId = `tooltip-${Math.random().toString(36).slice(2, 9)}`
20
+ </script>
21
+
22
+ {#if isDisabled}
23
+ {@render children()}
24
+ {:else}
25
+ <span class="tooltip-wrapper" aria-describedby={tooltipId}>
26
+ {@render children()}
27
+ <span
28
+ id={tooltipId}
29
+ class="tooltip placement-{placement}"
30
+ role="tooltip"
31
+ >
32
+ {content}
33
+ </span>
34
+ </span>
35
+ {/if}
36
+
37
+ <style>
38
+ .tooltip-wrapper {
39
+ position: relative;
40
+ display: inline-flex;
41
+ }
42
+
43
+ .tooltip {
44
+ pointer-events: none;
45
+ position: absolute;
46
+ z-index: 50;
47
+ white-space: nowrap;
48
+ border-radius: var(--radius-md);
49
+ background-color: var(--color-gray-900);
50
+ padding: var(--space-1-5) var(--space-2-5);
51
+ font-size: var(--text-sm);
52
+ color: var(--color-white);
53
+ box-shadow: var(--shadow-lg);
54
+ opacity: 0;
55
+ transition: opacity 0.15s ease;
56
+ }
57
+
58
+ .tooltip-wrapper:hover .tooltip,
59
+ .tooltip-wrapper:focus-within .tooltip {
60
+ opacity: 1;
61
+ }
62
+
63
+ .placement-top {
64
+ bottom: 100%;
65
+ left: 50%;
66
+ transform: translateX(-50%);
67
+ margin-bottom: var(--space-2);
68
+ }
69
+
70
+ .placement-bottom {
71
+ top: 100%;
72
+ left: 50%;
73
+ transform: translateX(-50%);
74
+ margin-top: var(--space-2);
75
+ }
76
+
77
+ .placement-left {
78
+ right: 100%;
79
+ top: 50%;
80
+ transform: translateY(-50%);
81
+ margin-right: var(--space-2);
82
+ }
83
+
84
+ .placement-right {
85
+ left: 100%;
86
+ top: 50%;
87
+ transform: translateY(-50%);
88
+ margin-left: var(--space-2);
89
+ }
90
+ </style>
@@ -0,0 +1,144 @@
1
+ .devtools {
2
+ /* Colors — match Tailwind's default palette exactly */
3
+ --color-blue-500: #3b82f6;
4
+ --color-blue-600: #2563eb;
5
+ --color-blue-700: #1d4ed8;
6
+ --color-blue-800: #1e40af;
7
+ --color-gray-50: #f9fafb;
8
+ --color-gray-100: #f3f4f6;
9
+ --color-gray-200: #e5e7eb;
10
+ --color-gray-300: #d1d5db;
11
+ --color-gray-500: #6b7280;
12
+ --color-gray-600: #4b5563;
13
+ --color-gray-700: #374151;
14
+ --color-gray-900: #111827;
15
+ --color-red-500: #ef4444;
16
+ --color-red-600: #dc2626;
17
+ --color-red-700: #b91c1c;
18
+ --color-red-800: #991b1b;
19
+ --color-green-100: #dcfce7;
20
+ --color-green-700: #15803d;
21
+ --color-green-800: #166534;
22
+ --color-yellow-100: #fef9c3;
23
+ --color-yellow-700: #a16207;
24
+ --color-yellow-800: #854d0e;
25
+ --color-white: #ffffff;
26
+ --color-black: #000000;
27
+
28
+ /* Typography — match Tailwind's type scale */
29
+ --text-xs: 0.75rem;
30
+ --text-sm: 0.875rem;
31
+ --text-base: 1rem;
32
+ --text-lg: 1.125rem;
33
+ --text-xl: 1.25rem;
34
+ --text-2xl: 1.5rem;
35
+ --font-normal: 400;
36
+ --font-medium: 500;
37
+ --font-semibold: 600;
38
+
39
+ /* Spacing — match Tailwind's spacing scale */
40
+ --space-0: 0;
41
+ --space-0-5: 0.125rem;
42
+ --space-1: 0.25rem;
43
+ --space-1-5: 0.375rem;
44
+ --space-2: 0.5rem;
45
+ --space-2-5: 0.625rem;
46
+ --space-3: 0.75rem;
47
+ --space-4: 1rem;
48
+ --space-5: 1.25rem;
49
+ --space-6: 1.5rem;
50
+ --space-8: 2rem;
51
+
52
+ /* Radii */
53
+ --radius-sm: 0.125rem;
54
+ --radius-md: 0.375rem;
55
+ --radius-lg: 0.5rem;
56
+ --radius-xl: 0.75rem;
57
+ --radius-full: 9999px;
58
+
59
+ /* Shadows */
60
+ --shadow-card: 0 1px 2px 0 rgba(0, 0, 0, 0.03);
61
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
62
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
63
+
64
+ /* Focus ring — matches dashboard's ring-2 ring-blue-500 ring-offset-2 */
65
+ --ring-color: var(--color-blue-500);
66
+ --ring-width: 2px;
67
+ --ring-offset: 2px;
68
+
69
+ /* Base typography reset */
70
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
71
+ 'Helvetica Neue', Arial, sans-serif;
72
+ font-size: var(--text-sm);
73
+ line-height: 1.5;
74
+ color: var(--color-gray-900);
75
+ }
76
+
77
+ /** Compact inline form elements for use within table cells */
78
+ .devtools .inline-select,
79
+ .devtools .inline-input {
80
+ font-size: var(--text-xs);
81
+ padding: var(--space-0-5) var(--space-1);
82
+ border: 1px solid var(--color-gray-300);
83
+ border-radius: var(--radius-sm);
84
+ font-family: inherit;
85
+ }
86
+
87
+ .devtools .inline-input {
88
+ width: 100%;
89
+ }
90
+
91
+ .devtools .inline-select:focus,
92
+ .devtools .inline-input:focus {
93
+ outline: none;
94
+ box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
95
+ }
96
+
97
+ /** Textarea elements within devtools */
98
+ .devtools textarea {
99
+ width: 100%;
100
+ min-height: 60px;
101
+ font-family: monospace;
102
+ font-size: var(--text-xs);
103
+ padding: var(--space-1);
104
+ border: 1px solid var(--color-gray-300);
105
+ border-radius: var(--radius-md);
106
+ }
107
+
108
+ .devtools textarea:focus {
109
+ outline: none;
110
+ box-shadow: 0 0 0 var(--ring-width) var(--ring-color);
111
+ }
112
+
113
+ /** Event detail panel styling */
114
+ .devtools .details-cell {
115
+ background-color: var(--color-gray-50);
116
+ padding: var(--space-4);
117
+ border-left: 3px solid var(--color-blue-500);
118
+ }
119
+
120
+ /** Expand/collapse icon for table rows */
121
+ .devtools .expand-icon {
122
+ margin-right: var(--space-2);
123
+ display: inline-block;
124
+ width: 12px;
125
+ }
126
+
127
+ /** Clickable table rows (e.g., expandable event rows) */
128
+ .devtools .event-row {
129
+ cursor: pointer;
130
+ }
131
+
132
+ /** Centered checkbox cell in tables */
133
+ .devtools .include-cell {
134
+ text-align: center;
135
+ width: 2.5rem;
136
+ }
137
+
138
+ /** Inline option label for checkbox/radio lists in table cells */
139
+ .devtools .option-label {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: var(--space-2);
143
+ cursor: pointer;
144
+ }
@@ -0,0 +1 @@
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};
@@ -0,0 +1,55 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/typography/heading.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ import type { Snippet } from 'svelte'
9
+
10
+ interface Props {
11
+ children: Snippet
12
+ level?: 1 | 2 | 3 | 4 | 5 | 6
13
+ size?: 'large' | 'medium' | 'small'
14
+ align?: 'start' | 'center' | 'end'
15
+ }
16
+
17
+ let { children, level = 2, size = 'medium', align = 'start' }: Props = $props()
18
+ </script>
19
+
20
+ <svelte:element
21
+ this={`h${level}`}
22
+ class="heading size-{size} align-{align}"
23
+ >
24
+ {@render children()}
25
+ </svelte:element>
26
+
27
+ <style>
28
+ .heading {
29
+ color: var(--color-gray-900);
30
+ margin: 0;
31
+ }
32
+
33
+ .size-large {
34
+ font-size: var(--text-2xl);
35
+ font-weight: var(--font-semibold);
36
+ }
37
+ .size-medium {
38
+ font-size: var(--text-xl);
39
+ font-weight: var(--font-semibold);
40
+ }
41
+ .size-small {
42
+ font-size: var(--text-lg);
43
+ font-weight: var(--font-medium);
44
+ }
45
+
46
+ .align-start {
47
+ text-align: start;
48
+ }
49
+ .align-center {
50
+ text-align: center;
51
+ }
52
+ .align-end {
53
+ text-align: end;
54
+ }
55
+ </style>
@@ -0,0 +1,93 @@
1
+ <!--
2
+ @paired-component apps/dashboard/src/shared/ui/typography/text.tsx
3
+ @design-parity Props, variants, sizes, and visual output must stay in sync
4
+ with the Dashboard React counterpart. When modifying this component, replicate
5
+ the change in the paired React component to maintain visual and behavioral parity.
6
+ -->
7
+ <script lang="ts">
8
+ import type { Snippet } from 'svelte'
9
+
10
+ interface Props {
11
+ children: Snippet
12
+ size?: 'large' | 'medium' | 'small' | 'caption'
13
+ color?: 'default' | 'subdued' | 'success' | 'warning' | 'error'
14
+ weight?: 'regular' | 'medium' | 'semibold'
15
+ align?: 'start' | 'center' | 'end'
16
+ inline?: boolean
17
+ }
18
+
19
+ let {
20
+ children,
21
+ size = 'medium',
22
+ color = 'default',
23
+ weight = 'regular',
24
+ align = 'start',
25
+ inline = false,
26
+ }: Props = $props()
27
+ </script>
28
+
29
+ <svelte:element
30
+ this={inline ? 'span' : 'p'}
31
+ class="text size-{size} color-{color} weight-{weight} align-{align}"
32
+ >
33
+ {@render children()}
34
+ </svelte:element>
35
+
36
+ <style>
37
+ .text {
38
+ margin: 0;
39
+ }
40
+
41
+ /* Sizes */
42
+ .size-large {
43
+ font-size: var(--text-base);
44
+ }
45
+ .size-medium {
46
+ font-size: var(--text-sm);
47
+ }
48
+ .size-small {
49
+ font-size: var(--text-xs);
50
+ }
51
+ .size-caption {
52
+ font-size: var(--text-xs);
53
+ }
54
+
55
+ /* Colors */
56
+ .color-default {
57
+ color: var(--color-gray-900);
58
+ }
59
+ .color-subdued {
60
+ color: var(--color-gray-600);
61
+ }
62
+ .color-success {
63
+ color: var(--color-green-700);
64
+ }
65
+ .color-warning {
66
+ color: var(--color-yellow-700);
67
+ }
68
+ .color-error {
69
+ color: var(--color-red-600);
70
+ }
71
+
72
+ /* Weights */
73
+ .weight-regular {
74
+ font-weight: var(--font-normal);
75
+ }
76
+ .weight-medium {
77
+ font-weight: var(--font-medium);
78
+ }
79
+ .weight-semibold {
80
+ font-weight: var(--font-semibold);
81
+ }
82
+
83
+ /* Alignment */
84
+ .align-start {
85
+ text-align: start;
86
+ }
87
+ .align-center {
88
+ text-align: center;
89
+ }
90
+ .align-end {
91
+ text-align: end;
92
+ }
93
+ </style>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/svelte",
3
- "version": "0.0.45-next.1",
3
+ "version": "0.0.45-next.3",
4
4
  "dependencies": {
5
5
  "d3": "^7.9.0"
6
6
  },
@@ -79,11 +79,14 @@
79
79
  "jscpd",
80
80
  "eslint",
81
81
  "tsc"
82
+ ],
83
+ "entry": [
84
+ "src/plugins/devtools/ui/index.ts"
82
85
  ]
83
86
  },
84
87
  "module": "./dist/index.js",
85
88
  "peerDependencies": {
86
- "@picked/client": "0.0.45-next.1",
89
+ "@picked/client": "0.0.45-next.3",
87
90
  "effector": "^23.3.0",
88
91
  "svelte": "^5.34.3"
89
92
  },