@picked/svelte 0.0.1-dev.1788925875333 → 0.0.1-next.1

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 +33 -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,276 +0,0 @@
1
- <script lang="ts">
2
- /** @file Expandable row presenting a single registered field's schema in the devtools fields screen. */
3
- import type { Field } from '@picked/client'
4
- import { Badge, CodeBlock, ExpandableRow, Stack, Text } from '../../ui'
5
-
6
- export let field: Field
7
- export let columnCount: number
8
-
9
- let expanded = false
10
-
11
- $: optionsList = Array.isArray(field.options) ? field.options : []
12
- $: hasOptions = optionsList.length > 0
13
- $: hasCondition = field.condition !== undefined && field.condition !== null
14
- $: hasValidation = field.validation !== undefined && field.validation !== null
15
- $: hasDefault = field.defaultValue !== undefined
16
- $: tracked = Boolean(field.policies?.trackValue)
17
- $: stored = Boolean(field.policies?.storeValue)
18
- $: hasDetails =
19
- hasCondition ||
20
- hasValidation ||
21
- hasOptions ||
22
- Boolean(field.description) ||
23
- Boolean(field.helpText) ||
24
- Boolean(field.placeholder) ||
25
- Boolean(field.label && field.label !== field.name) ||
26
- Boolean(field.id)
27
-
28
- /**
29
- * Returns a Badge status colour for a given field type so each type renders consistently.
30
- *
31
- * @param {Field['type']} type - The field's primitive type.
32
- * @returns {'default' | 'success' | 'warning' | 'info'} The Badge status variant to apply.
33
- * @example
34
- * ```typescript
35
- * typeStatus('number') // 'success'
36
- * ```
37
- */
38
- function typeStatus(type: Field['type']): 'default' | 'success' | 'warning' | 'info' {
39
- if (type === 'text') return 'info'
40
- if (type === 'number') return 'success'
41
- if (type === 'boolean') return 'warning'
42
- return 'default'
43
- }
44
-
45
- /**
46
- * Renders an arbitrary value as a short, single-line preview for use in compact table cells.
47
- * Strings are returned unquoted, primitives are stringified, and objects/arrays are JSON-encoded
48
- * and truncated.
49
- *
50
- * @param {unknown} value - The value to preview.
51
- * @param {number} [maxLength] - Maximum character length before the preview is truncated.
52
- * @returns {string} The short preview string, or `'—'` when the value is null/undefined.
53
- * @example
54
- * ```typescript
55
- * previewValue({ foo: 'bar' }) // '{"foo":"bar"}'
56
- * previewValue(null) // '—'
57
- * ```
58
- */
59
- function previewValue(value: unknown, maxLength = 48): string {
60
- if (value === null || value === undefined) return '—'
61
-
62
- let str: string
63
- if (typeof value === 'string') {
64
- str = value
65
- } else if (typeof value === 'object') {
66
- str = JSON.stringify(value)
67
- } else {
68
- str = String(value)
69
- }
70
-
71
- if (str.length > maxLength) return `${str.slice(0, maxLength - 1)}…`
72
- return str
73
- }
74
-
75
- /**
76
- * Pretty-prints a JSON-serializable value for use inside a multi-line CodeBlock.
77
- *
78
- * @param {unknown} value - The value to format.
79
- * @returns {string} A two-space-indented JSON representation.
80
- * @example
81
- * ```typescript
82
- * formatJson({ a: 1 }) // '{\n "a": 1\n}'
83
- * ```
84
- */
85
- function formatJson(value: unknown): string {
86
- return JSON.stringify(value, null, 2)
87
- }
88
-
89
- /**
90
- * Renders a `FieldOption.value` (which may be any JSON-serializable shape across field types)
91
- * as a short, copyable code string.
92
- *
93
- * @param {unknown} value - The option's underlying value.
94
- * @returns {string} The string to display inside an inline CodeBlock.
95
- * @example
96
- * ```typescript
97
- * formatOptionValue('us') // 'us'
98
- * formatOptionValue({ id: 1 }) // '{"id":1}'
99
- * ```
100
- */
101
- function formatOptionValue(value: unknown): string {
102
- if (typeof value === 'string') return value
103
- return JSON.stringify(value)
104
- }
105
- </script>
106
-
107
- <ExpandableRow
108
- {expanded}
109
- onToggle={() => { if (hasDetails) expanded = !expanded }}
110
- colspan={columnCount}
111
- >
112
- {#snippet summary()}
113
- <td><CodeBlock code={field.key} inline /></td>
114
- <td>
115
- <Stack direction="vertical" gap="none">
116
- <Text size="small" weight="medium">{field.name}</Text>
117
- {#if field.label && field.label !== field.name}
118
- <Text size="caption" color="subdued">{field.label}</Text>
119
- {/if}
120
- </Stack>
121
- </td>
122
- <td><Badge status={typeStatus(field.type)} size="small">{field.type}</Badge></td>
123
- <td>
124
- <Stack direction="horizontal" gap="small">
125
- {#if field.multiple}
126
- <Badge status="default" size="small">multiple</Badge>
127
- {/if}
128
- {#if field.required}
129
- <Badge status="warning" size="small">required</Badge>
130
- {/if}
131
- {#if tracked}
132
- <Badge status="success" size="small">track</Badge>
133
- {/if}
134
- {#if stored}
135
- <Badge status="success" size="small">store</Badge>
136
- {/if}
137
- </Stack>
138
- </td>
139
- <td>
140
- {#if hasDefault}
141
- <CodeBlock code={previewValue(field.defaultValue)} inline />
142
- {:else}
143
- <Text size="small" color="subdued">—</Text>
144
- {/if}
145
- </td>
146
- <td>
147
- {#if hasOptions}
148
- <Badge status="info" size="small">{optionsList.length}</Badge>
149
- {:else}
150
- <Text size="small" color="subdued">—</Text>
151
- {/if}
152
- </td>
153
- <td>
154
- <Stack direction="horizontal" gap="small">
155
- {#if hasCondition}
156
- <Badge status="info" size="small">condition</Badge>
157
- {/if}
158
- {#if hasValidation}
159
- <Badge status="info" size="small">validation</Badge>
160
- {/if}
161
- {#if !hasCondition && !hasValidation}
162
- <Text size="small" color="subdued">—</Text>
163
- {/if}
164
- </Stack>
165
- </td>
166
- {/snippet}
167
-
168
- {#snippet details()}
169
- <Stack direction="vertical" gap="medium">
170
- <Stack direction="vertical" gap="small">
171
- <Text size="caption" weight="semibold" color="subdued">IDENTITY</Text>
172
- <Stack direction="horizontal" gap="medium">
173
- <Text size="small"><strong>id:</strong></Text>
174
- <CodeBlock code={field.id} inline />
175
- </Stack>
176
- </Stack>
177
-
178
- {#if field.description || field.helpText || field.placeholder}
179
- <Stack direction="vertical" gap="small">
180
- <Text size="caption" weight="semibold" color="subdued">COPY</Text>
181
- {#if field.description}
182
- <Text size="small"><strong>description:</strong> {field.description}</Text>
183
- {/if}
184
- {#if field.helpText}
185
- <Text size="small"><strong>help text:</strong> {field.helpText}</Text>
186
- {/if}
187
- {#if field.placeholder}
188
- <Text size="small"><strong>placeholder:</strong> {field.placeholder}</Text>
189
- {/if}
190
- </Stack>
191
- {/if}
192
-
193
- {#if hasDefault}
194
- <Stack direction="vertical" gap="small">
195
- <Text size="caption" weight="semibold" color="subdued">DEFAULT VALUE</Text>
196
- <CodeBlock code={formatJson(field.defaultValue)} />
197
- </Stack>
198
- {/if}
199
-
200
- {#if hasOptions}
201
- <Stack direction="vertical" gap="small">
202
- <Text size="caption" weight="semibold" color="subdued">OPTIONS ({optionsList.length})</Text>
203
- <table class="options-table">
204
- <thead>
205
- <tr>
206
- <th>Label</th>
207
- <th>Value</th>
208
- <th>ID</th>
209
- <th>Description</th>
210
- </tr>
211
- </thead>
212
- <tbody>
213
- {#each optionsList as option (option.id)}
214
- <tr>
215
- <td>{option.label}</td>
216
- <td><CodeBlock code={formatOptionValue(option.value)} inline /></td>
217
- <td><CodeBlock code={option.id} inline /></td>
218
- <td>
219
- {#if option.description}
220
- {option.description}
221
- {:else}
222
- <Text size="small" color="subdued">—</Text>
223
- {/if}
224
- </td>
225
- </tr>
226
- {/each}
227
- </tbody>
228
- </table>
229
- </Stack>
230
- {/if}
231
-
232
- {#if hasCondition}
233
- <Stack direction="vertical" gap="small">
234
- <Text size="caption" weight="semibold" color="subdued">CONDITION</Text>
235
- <CodeBlock code={formatJson(field.condition)} />
236
- </Stack>
237
- {/if}
238
-
239
- {#if hasValidation}
240
- <Stack direction="vertical" gap="small">
241
- <Text size="caption" weight="semibold" color="subdued">VALIDATION</Text>
242
- <CodeBlock code={formatJson(field.validation)} />
243
- </Stack>
244
- {/if}
245
- </Stack>
246
- {/snippet}
247
- </ExpandableRow>
248
-
249
- <style>
250
- .options-table {
251
- width: 100%;
252
- border-collapse: collapse;
253
- background-color: var(--color-white);
254
- border: 1px solid var(--color-gray-200);
255
- border-radius: var(--radius-md);
256
- overflow: hidden;
257
- }
258
-
259
- .options-table th,
260
- .options-table td {
261
- padding: var(--space-1-5) var(--space-2);
262
- text-align: left;
263
- font-size: var(--text-xs);
264
- border-bottom: 1px solid var(--color-gray-200);
265
- }
266
-
267
- .options-table tr:last-child td {
268
- border-bottom: 0;
269
- }
270
-
271
- .options-table th {
272
- font-weight: var(--font-medium);
273
- color: var(--color-gray-700);
274
- background-color: var(--color-gray-50);
275
- }
276
- </style>
@@ -1,12 +0,0 @@
1
- <script lang="ts">
2
- /** @file Devtools screen that lists every field registered with the SDK. */
3
- import { getPicked } from '../../../../hooks'
4
- import FieldsTable from './FieldsTable.svelte'
5
-
6
- const client = getPicked()
7
- const fieldsStore = client.fields.listStore
8
- </script>
9
-
10
- <div>
11
- <FieldsTable fields={$fieldsStore} />
12
- </div>
@@ -1,78 +0,0 @@
1
- <script lang="ts">
2
- /** @file Table of registered fields with type filtering for the devtools fields screen. */
3
- import type { Field } from '@picked/client'
4
- import { Card, DataTable, EmptyState, RadioGroup, Stack } from '../../ui'
5
- import FieldTableRow from './FieldTableRow.svelte'
6
-
7
- export let fields: Field[] = []
8
-
9
- type TypeFilter = 'all' | Field['type']
10
-
11
- let filter: TypeFilter = 'all'
12
-
13
- $: counts = {
14
- all: fields.length,
15
- text: fields.filter((f) => f.type === 'text').length,
16
- number: fields.filter((f) => f.type === 'number').length,
17
- boolean: fields.filter((f) => f.type === 'boolean').length,
18
- object: fields.filter((f) => f.type === 'object').length,
19
- }
20
-
21
- $: visibleFields = filter === 'all' ? fields : fields.filter((f) => f.type === filter)
22
-
23
- const columns = [
24
- { key: 'key', header: 'Key' },
25
- { key: 'name', header: 'Name' },
26
- { key: 'type', header: 'Type' },
27
- { key: 'flags', header: 'Flags' },
28
- { key: 'default', header: 'Default' },
29
- { key: 'options', header: 'Options' },
30
- { key: 'rules', header: 'Rules' },
31
- ]
32
-
33
- $: filterOptions = [
34
- { value: 'all', label: `All (${counts.all})` },
35
- { value: 'text', label: `Text (${counts.text})` },
36
- { value: 'number', label: `Number (${counts.number})` },
37
- { value: 'boolean', label: `Boolean (${counts.boolean})` },
38
- { value: 'object', label: `Object (${counts.object})` },
39
- ]
40
-
41
- /**
42
- * Updates the active type filter when the user picks a different radio option.
43
- *
44
- * @param {string} value - The chosen filter value, expected to be `'all'` or a `Field['type']`.
45
- * @example
46
- * ```typescript
47
- * handleFilterChange('number') // narrows the table to number fields
48
- * ```
49
- */
50
- function handleFilterChange(value: string): void {
51
- if (value === 'all' || value === 'text' || value === 'number' || value === 'boolean' || value === 'object') {
52
- filter = value
53
- }
54
- }
55
- </script>
56
-
57
- <Stack padding="medium">
58
- <Card sectioned>
59
- <Stack direction="horizontal" gap="small" align="space-between" justify="center" padding="medium">
60
- <RadioGroup
61
- label="Filter by type"
62
- name="field-type-filter"
63
- options={filterOptions}
64
- value={filter}
65
- onchange={handleFilterChange}
66
- orientation="horizontal"
67
- />
68
- </Stack>
69
- <DataTable {columns} rows={visibleFields}>
70
- {#snippet row(field)}
71
- <FieldTableRow {field} columnCount={columns.length} />
72
- {/snippet}
73
- {#snippet empty()}
74
- <EmptyState message="No fields registered" />
75
- {/snippet}
76
- </DataTable>
77
- </Card>
78
- </Stack>
@@ -1,66 +0,0 @@
1
- <script lang="ts">
2
- /** @file Devtools screen for the current visitor session — id, isUser flag, and identifiers map. */
3
- import { getPicked } from '../../../../hooks'
4
- import { Badge, Card, CodeBlock, DataTable, EmptyState, Stack, Text } from '../../ui'
5
-
6
- const client = getPicked()
7
- const sessionStore = client.session.store
8
-
9
- $: identifierEntries = Object.entries($sessionStore.identifiers ?? {})
10
-
11
- const overviewColumns = [
12
- { key: 'label', header: 'Property' },
13
- { key: 'value', header: 'Value' },
14
- ]
15
-
16
- const identifierColumns = [
17
- { key: 'key', header: 'Key' },
18
- { key: 'value', header: 'Value' },
19
- ]
20
- </script>
21
-
22
- <Stack direction="vertical" gap="medium" padding="medium">
23
- <Text size="caption" color="subdued">
24
- The current visitor session as tracked by the SDK. Persisted to localStorage when available.
25
- </Text>
26
-
27
- <Card sectioned>
28
- <DataTable columns={overviewColumns} rows={[{ label: 'Session ID', value: $sessionStore.id }]}>
29
- {#snippet row(item)}
30
- <tr>
31
- <td><Text size="small" weight="medium">{item.label}</Text></td>
32
- <td><CodeBlock code={item.value} inline /></td>
33
- </tr>
34
- {/snippet}
35
- </DataTable>
36
- <Stack direction="horizontal" gap="small" padding="medium">
37
- <Text size="small" weight="medium">Identified as user:</Text>
38
- {#if $sessionStore.isUser === true}
39
- <Badge status="success" size="small">true</Badge>
40
- {:else if $sessionStore.isUser === false}
41
- <Badge status="default" size="small">false</Badge>
42
- {:else}
43
- <Badge status="default" size="small">unset</Badge>
44
- {/if}
45
- </Stack>
46
- </Card>
47
-
48
- <Card sectioned>
49
- {#snippet header()}
50
- <Text size="caption" weight="semibold" color="subdued">
51
- IDENTIFIERS ({identifierEntries.length})
52
- </Text>
53
- {/snippet}
54
- <DataTable columns={identifierColumns} rows={identifierEntries}>
55
- {#snippet row(entry)}
56
- <tr>
57
- <td><CodeBlock code={entry[0]} inline /></td>
58
- <td><CodeBlock code={entry[1]} inline /></td>
59
- </tr>
60
- {/snippet}
61
- {#snippet empty()}
62
- <EmptyState message="No identifiers set" />
63
- {/snippet}
64
- </DataTable>
65
- </Card>
66
- </Stack>