kumo-svelte 0.1.1 → 0.1.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.
- package/ai/component-registry.json +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.svelte +6 -5
- package/dist/components/breadcrumbs/Breadcrumbs.svelte.d.ts +3 -2
- package/dist/components/input-group/InputGroup.svelte +1 -1
- package/dist/components/input-group/InputGroupButton.svelte +2 -2
- package/dist/components/input-group/InputGroupInput.svelte +1 -1
- package/dist/docs/DemoRenderer.svelte +194 -25
- package/dist/docs/PropsTable.svelte +592 -253
- package/dist/docs/svelteDemoSnippets.js +314 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/blocks/delete-resource/delete-resource.svelte +26 -37
- package/src/blocks/delete-resource/delete-resource.svelte.d.ts +23 -24
- package/src/blocks/delete-resource/index.d.ts +1 -0
- package/src/blocks/delete-resource/index.ts +4 -0
- package/src/blocks/page-header/index.d.ts +1 -0
- package/src/blocks/page-header/index.ts +5 -0
- package/src/blocks/page-header/page-header.svelte +74 -29
- package/src/blocks/page-header/page-header.svelte.d.ts +29 -3
- package/src/blocks/resource-list/index.d.ts +1 -0
- package/src/blocks/resource-list/resource-list.svelte +22 -22
- package/src/blocks/resource-list/resource-list.svelte.d.ts +13 -0
- package/src/lib/components/breadcrumbs/Breadcrumbs.svelte +6 -5
- package/src/lib/components/input-group/InputGroup.svelte +1 -1
- package/src/lib/components/input-group/InputGroupButton.svelte +2 -2
- package/src/lib/components/input-group/InputGroupInput.svelte +1 -1
- package/src/lib/docs/DemoRenderer.svelte +194 -25
- package/src/lib/docs/PropsTable.svelte +592 -253
- package/src/lib/docs/svelteDemoSnippets.ts +314 -0
- package/src/lib/styles.css +27 -0
- package/src/routes/blocks/delete-resource/+page.md +51 -17
- package/src/routes/blocks/page-header/+page.md +58 -36
- package/src/routes/blocks/resource-list/+page.md +78 -71
- package/src/routes/components/dialog/+page.md +1 -41
- package/src/routes/components/pagination/+page.md +0 -16
- package/src/routes/components/popover/+page.md +9 -17
- package/src/routes/components/table/+page.md +0 -8
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"category": "Layout",
|
|
59
59
|
"description": "Resource list page layout with optional sidebar content.",
|
|
60
60
|
"files": ["resource-list/resource-list.svelte", "resource-list/index.ts"],
|
|
61
|
-
"dependencies": [
|
|
61
|
+
"dependencies": []
|
|
62
62
|
},
|
|
63
63
|
"DeleteResource": {
|
|
64
64
|
"name": "DeleteResource",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { Component, Snippet } from 'svelte';
|
|
3
3
|
import { cn } from '../../utils/cn';
|
|
4
4
|
|
|
5
5
|
export const KUMO_BREADCRUMBS_VARIANTS = {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
export interface BreadcrumbsItem {
|
|
29
29
|
label: string;
|
|
30
30
|
href?: string;
|
|
31
|
+
icon?: Component;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export function breadcrumbsVariants({
|
|
@@ -85,9 +86,9 @@
|
|
|
85
86
|
<BreadcrumbsSeparator />
|
|
86
87
|
{/if}
|
|
87
88
|
{#if item.href && index < mobileItems.length - 1}
|
|
88
|
-
<BreadcrumbsLink href={item.href}>{item.label}</BreadcrumbsLink>
|
|
89
|
+
<BreadcrumbsLink href={item.href} icon={item.icon}>{item.label}</BreadcrumbsLink>
|
|
89
90
|
{:else}
|
|
90
|
-
<BreadcrumbsCurrent>{item.label}</BreadcrumbsCurrent>
|
|
91
|
+
<BreadcrumbsCurrent icon={item.icon}>{item.label}</BreadcrumbsCurrent>
|
|
91
92
|
{/if}
|
|
92
93
|
{/each}
|
|
93
94
|
</div>
|
|
@@ -97,9 +98,9 @@
|
|
|
97
98
|
<BreadcrumbsSeparator />
|
|
98
99
|
{/if}
|
|
99
100
|
{#if item.href && index < items.length - 1}
|
|
100
|
-
<BreadcrumbsLink href={item.href}>{item.label}</BreadcrumbsLink>
|
|
101
|
+
<BreadcrumbsLink href={item.href} icon={item.icon}>{item.label}</BreadcrumbsLink>
|
|
101
102
|
{:else}
|
|
102
|
-
<BreadcrumbsCurrent>{item.label}</BreadcrumbsCurrent>
|
|
103
|
+
<BreadcrumbsCurrent icon={item.icon}>{item.label}</BreadcrumbsCurrent>
|
|
103
104
|
{/if}
|
|
104
105
|
{/each}
|
|
105
106
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Snippet } from 'svelte';
|
|
1
|
+
import type { Component, Snippet } from 'svelte';
|
|
2
2
|
export declare const KUMO_BREADCRUMBS_VARIANTS: {
|
|
3
3
|
readonly size: {
|
|
4
4
|
readonly sm: {
|
|
@@ -21,6 +21,7 @@ export interface KumoBreadcrumbsVariantsProps {
|
|
|
21
21
|
export interface BreadcrumbsItem {
|
|
22
22
|
label: string;
|
|
23
23
|
href?: string;
|
|
24
|
+
icon?: Component;
|
|
24
25
|
}
|
|
25
26
|
export declare function breadcrumbsVariants({ size }?: KumoBreadcrumbsVariantsProps): string;
|
|
26
27
|
interface Props extends KumoBreadcrumbsVariantsProps {
|
|
@@ -30,6 +31,6 @@ interface Props extends KumoBreadcrumbsVariantsProps {
|
|
|
30
31
|
items?: BreadcrumbsItem[];
|
|
31
32
|
[key: string]: unknown;
|
|
32
33
|
}
|
|
33
|
-
declare const Breadcrumbs:
|
|
34
|
+
declare const Breadcrumbs: Component<Props, {}, "">;
|
|
34
35
|
type Breadcrumbs = ReturnType<typeof Breadcrumbs>;
|
|
35
36
|
export default Breadcrumbs;
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
'overflow-hidden bg-kumo-control ring ring-kumo-line',
|
|
92
92
|
'focus-within:ring-kumo-focus'
|
|
93
93
|
]
|
|
94
|
-
: 'isolate overflow-visible bg-
|
|
94
|
+
: 'isolate overflow-visible bg-kumo-control ring-0 shadow-none',
|
|
95
95
|
'has-[input[aria-invalid=true]]:ring-kumo-danger',
|
|
96
96
|
'px-0',
|
|
97
97
|
'flex items-center gap-0',
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
'first:rounded-l-[inherit] last:rounded-r-[inherit]',
|
|
62
62
|
'not-first:border-l-0',
|
|
63
63
|
'hover:z-[1]',
|
|
64
|
-
'focus:z-[2] focus:border-kumo-line
|
|
65
|
-
'focus-visible:
|
|
64
|
+
'focus:z-[2] focus:border-kumo-line',
|
|
65
|
+
'focus-visible:[outline:solid_1px_var(--color-kumo-focus)] focus-visible:[outline-offset:-1px]',
|
|
66
66
|
'disabled:bg-kumo-overlay disabled:text-kumo-inactive!'
|
|
67
67
|
],
|
|
68
68
|
className
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
'first:rounded-l-[inherit] last:rounded-r-[inherit]',
|
|
56
56
|
'not-first:border-l-0',
|
|
57
57
|
'hover:z-[1] hover:border-kumo-line',
|
|
58
|
-
'focus:z-[2] focus:border-kumo-line focus:outline focus
|
|
58
|
+
'focus:z-[2] focus:border-kumo-line focus:[outline:solid_1px_var(--color-kumo-focus)] focus:[outline-offset:-1px]'
|
|
59
59
|
]
|
|
60
60
|
: 'relative z-[1] ring-0! shadow-none focus:ring-0! focus:outline-none',
|
|
61
61
|
className
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
import { PoweredByCloudflare } from '../components/cloudflare-logo';
|
|
51
51
|
import { DeleteResource } from '../../blocks/delete-resource';
|
|
52
52
|
import { PageHeader } from '../../blocks/page-header';
|
|
53
|
+
import { ResourceListPage } from '../../blocks/resource-list';
|
|
53
54
|
import ChartDemos from './chart-demos/ChartDemos.svelte';
|
|
54
55
|
|
|
55
56
|
interface Props {
|
|
@@ -62,6 +63,8 @@
|
|
|
62
63
|
let switchCustomIdChecked = $state(false);
|
|
63
64
|
let pageHeaderTab = $state('overview');
|
|
64
65
|
let deleteResourceOpen = $state(false);
|
|
66
|
+
let deleteResourceDeleting = $state(false);
|
|
67
|
+
let deleteResourceErrorMessage = $state('');
|
|
65
68
|
let menuBarActive = $state<string | undefined>('bold');
|
|
66
69
|
let copiedCloudflareLogo = $state<string | undefined>();
|
|
67
70
|
let autocompleteValue = $state('');
|
|
@@ -77,6 +80,37 @@
|
|
|
77
80
|
let sensitiveInputValue = $state('my-secret-value');
|
|
78
81
|
let tableOfContentsActive = $state('Introduction');
|
|
79
82
|
let tableOfContentsClicked = $state<string | null>(null);
|
|
83
|
+
let paginationPages = $state<Record<string, number>>({});
|
|
84
|
+
let paginationPerPages = $state<Record<string, number>>({});
|
|
85
|
+
const paginationInitialPage = $derived(demo === 'PaginationMidPageDemo' ? 5 : 1);
|
|
86
|
+
const paginationInitialPerPage = $derived(demo === 'PaginationCustomPageSizeOptionsDemo' ? 10 : 25);
|
|
87
|
+
const paginationPage = $derived(paginationPages[demo] ?? paginationInitialPage);
|
|
88
|
+
const paginationPerPage = $derived(paginationPerPages[demo] ?? paginationInitialPerPage);
|
|
89
|
+
|
|
90
|
+
function setPaginationPage(nextPage: number) {
|
|
91
|
+
paginationPages[demo] = nextPage;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function setPaginationPerPage(nextPerPage: number) {
|
|
95
|
+
paginationPerPages[demo] = nextPerPage;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function openDeleteResource() {
|
|
99
|
+
deleteResourceErrorMessage = '';
|
|
100
|
+
deleteResourceOpen = true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async function handleDeleteResource() {
|
|
104
|
+
deleteResourceErrorMessage = '';
|
|
105
|
+
deleteResourceDeleting = true;
|
|
106
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
107
|
+
deleteResourceDeleting = false;
|
|
108
|
+
if (demo === 'DeleteResourceErrorDemo') {
|
|
109
|
+
deleteResourceErrorMessage = 'Something went wrong';
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
deleteResourceOpen = false;
|
|
113
|
+
}
|
|
80
114
|
|
|
81
115
|
const selectOptions = [
|
|
82
116
|
{ label: 'Workers', value: 'workers' },
|
|
@@ -1417,31 +1451,115 @@ const route: WorkerRoute = {
|
|
|
1417
1451
|
{/if}
|
|
1418
1452
|
</div>
|
|
1419
1453
|
{:else if looksLike('Pagination')}
|
|
1420
|
-
|
|
1454
|
+
{#if demo === 'PaginationSimpleDemo'}
|
|
1455
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={10} totalCount={100} controls="simple" />
|
|
1456
|
+
{:else if demo === 'PaginationFullDemo'}
|
|
1457
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={10} totalCount={100} controls="full" />
|
|
1458
|
+
{:else if demo === 'PaginationMidPageDemo'}
|
|
1459
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={10} totalCount={100} />
|
|
1460
|
+
{:else if demo === 'PaginationLargeDatasetDemo'}
|
|
1461
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={25} totalCount={1250} />
|
|
1462
|
+
{:else if demo === 'PaginationCustomTextDemo'}
|
|
1463
|
+
<Pagination
|
|
1464
|
+
page={paginationPage} setPage={setPaginationPage}
|
|
1465
|
+
perPage={25}
|
|
1466
|
+
totalCount={100}
|
|
1467
|
+
text={({ perPage }) => `Page ${paginationPage} - showing ${perPage} per page`}
|
|
1468
|
+
/>
|
|
1469
|
+
{:else if demo === 'PaginationPageSizeSelectorDemo' || demo === 'PaginationDropdownSelectorDemo'}
|
|
1470
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={paginationPerPage} totalCount={500}>
|
|
1471
|
+
<Pagination.Info />
|
|
1472
|
+
<Pagination.Separator />
|
|
1473
|
+
<Pagination.PageSize
|
|
1474
|
+
value={paginationPerPage}
|
|
1475
|
+
onChange={(size) => {
|
|
1476
|
+
setPaginationPerPage(size);
|
|
1477
|
+
setPaginationPage(1);
|
|
1478
|
+
}}
|
|
1479
|
+
/>
|
|
1480
|
+
<Pagination.Controls pageSelector={demo === 'PaginationDropdownSelectorDemo' ? 'dropdown' : 'input'} />
|
|
1481
|
+
</Pagination>
|
|
1482
|
+
{:else if demo === 'PaginationCustomPageSizeOptionsDemo'}
|
|
1483
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={paginationPerPage} totalCount={200}>
|
|
1484
|
+
<Pagination.Info />
|
|
1485
|
+
<Pagination.Separator />
|
|
1486
|
+
<Pagination.PageSize
|
|
1487
|
+
value={paginationPerPage}
|
|
1488
|
+
options={[10, 20, 50]}
|
|
1489
|
+
onChange={(size) => {
|
|
1490
|
+
setPaginationPerPage(size);
|
|
1491
|
+
setPaginationPage(1);
|
|
1492
|
+
}}
|
|
1493
|
+
/>
|
|
1494
|
+
<Pagination.Controls />
|
|
1495
|
+
</Pagination>
|
|
1496
|
+
{:else if demo === 'PaginationPageSizeRightDemo'}
|
|
1497
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={paginationPerPage} totalCount={500}>
|
|
1498
|
+
<Pagination.Info />
|
|
1499
|
+
<div class="flex items-center gap-2">
|
|
1500
|
+
<Pagination.Controls />
|
|
1501
|
+
<Pagination.Separator />
|
|
1502
|
+
<Pagination.PageSize
|
|
1503
|
+
value={paginationPerPage}
|
|
1504
|
+
onChange={(size) => {
|
|
1505
|
+
setPaginationPerPage(size);
|
|
1506
|
+
setPaginationPage(1);
|
|
1507
|
+
}}
|
|
1508
|
+
/>
|
|
1509
|
+
</div>
|
|
1510
|
+
</Pagination>
|
|
1511
|
+
{:else}
|
|
1512
|
+
<Pagination page={paginationPage} setPage={setPaginationPage} perPage={10} totalCount={100} />
|
|
1513
|
+
{/if}
|
|
1421
1514
|
{:else if looksLike('PageHeader')}
|
|
1422
1515
|
<div class="w-full">
|
|
1516
|
+
{#snippet pageHeaderBreadcrumbs()}
|
|
1517
|
+
<Breadcrumbs>
|
|
1518
|
+
{#if demo === 'PageHeaderHeroDemo'}
|
|
1519
|
+
<Breadcrumbs.Link icon={House} href="#">Workers & Pages</Breadcrumbs.Link>
|
|
1520
|
+
<Breadcrumbs.Separator />
|
|
1521
|
+
<Breadcrumbs.Current>cloudflare-dev-platform</Breadcrumbs.Current>
|
|
1522
|
+
{:else if demo === 'PageHeaderBasicDemo'}
|
|
1523
|
+
<Breadcrumbs.Link href="#">Home</Breadcrumbs.Link>
|
|
1524
|
+
<Breadcrumbs.Separator />
|
|
1525
|
+
<Breadcrumbs.Current>Dashboard</Breadcrumbs.Current>
|
|
1526
|
+
{:else if demo === 'PageHeaderWithIconsDemo'}
|
|
1527
|
+
<Breadcrumbs.Link icon={House} href="#">Home</Breadcrumbs.Link>
|
|
1528
|
+
<Breadcrumbs.Separator />
|
|
1529
|
+
<Breadcrumbs.Current icon={Settings}>Settings</Breadcrumbs.Current>
|
|
1530
|
+
{:else if demo === 'PageHeaderWithTabsDemo'}
|
|
1531
|
+
<Breadcrumbs.Link href="#">Home</Breadcrumbs.Link>
|
|
1532
|
+
<Breadcrumbs.Separator />
|
|
1533
|
+
<Breadcrumbs.Current>Settings</Breadcrumbs.Current>
|
|
1534
|
+
{:else if demo === 'PageHeaderWithActionsDemo'}
|
|
1535
|
+
<Breadcrumbs.Link href="#">Home</Breadcrumbs.Link>
|
|
1536
|
+
<Breadcrumbs.Separator />
|
|
1537
|
+
<Breadcrumbs.Link href="#">Projects</Breadcrumbs.Link>
|
|
1538
|
+
<Breadcrumbs.Separator />
|
|
1539
|
+
<Breadcrumbs.Current>My Project</Breadcrumbs.Current>
|
|
1540
|
+
{:else}
|
|
1541
|
+
<Breadcrumbs.Link href="#">Home</Breadcrumbs.Link>
|
|
1542
|
+
<Breadcrumbs.Separator />
|
|
1543
|
+
<Breadcrumbs.Link href="#">Products</Breadcrumbs.Link>
|
|
1544
|
+
<Breadcrumbs.Separator />
|
|
1545
|
+
<Breadcrumbs.Current>Page title</Breadcrumbs.Current>
|
|
1546
|
+
{/if}
|
|
1547
|
+
</Breadcrumbs>
|
|
1548
|
+
{/snippet}
|
|
1423
1549
|
{#snippet pageHeaderActions()}
|
|
1424
1550
|
{#if demo === 'PageHeaderHeroDemo'}
|
|
1425
|
-
<Button
|
|
1426
|
-
<Button variant="primary" class="h-8"
|
|
1551
|
+
<Button icon={Code2} class="h-8">Edit code</Button>
|
|
1552
|
+
<Button icon={Globe} variant="primary" class="h-8">Visit</Button>
|
|
1427
1553
|
{:else if demo === 'PageHeaderWithActionsDemo'}
|
|
1428
1554
|
<Button variant="primary" size="base">Deploy</Button>
|
|
1429
1555
|
{:else if demo === 'PageHeaderCompleteDemo'}
|
|
1430
1556
|
<Button variant="outline" size="sm">Export</Button>
|
|
1431
|
-
<Button variant="primary" size="sm"
|
|
1557
|
+
<Button variant="primary" size="sm" icon={Plus}>New Item</Button>
|
|
1432
1558
|
{/if}
|
|
1433
1559
|
{/snippet}
|
|
1434
1560
|
<PageHeader
|
|
1435
1561
|
class="w-full"
|
|
1436
|
-
|
|
1437
|
-
? [{ label: 'Workers & Pages', href: '#' }, { label: 'cloudflare-dev-platform' }]
|
|
1438
|
-
: demo === 'PageHeaderBasicDemo'
|
|
1439
|
-
? [{ label: 'Home', href: '#' }, { label: 'Dashboard' }]
|
|
1440
|
-
: demo === 'PageHeaderWithIconsDemo'
|
|
1441
|
-
? [{ label: 'Home', href: '#' }, { label: 'Settings' }]
|
|
1442
|
-
: demo === 'PageHeaderWithActionsDemo'
|
|
1443
|
-
? [{ label: 'Home', href: '#' }, { label: 'Projects', href: '#' }, { label: 'My Project' }]
|
|
1444
|
-
: [{ label: 'Home', href: '#' }, { label: 'Products', href: '#' }, { label: 'Page title' }]}
|
|
1562
|
+
breadcrumbContent={pageHeaderBreadcrumbs}
|
|
1445
1563
|
title={demo === 'PageHeaderWithTitleDemo' || demo === 'PageHeaderWithTitleDescriptionDemo' || demo === 'PageHeaderCompleteDemo' ? 'Page title' : undefined}
|
|
1446
1564
|
description={demo === 'PageHeaderWithTitleDescriptionDemo'
|
|
1447
1565
|
? 'Action-led, value-oriented description of what this page does. Optional second sentence with use cases or prerequisites.'
|
|
@@ -1476,6 +1594,7 @@ const route: WorkerRoute = {
|
|
|
1476
1594
|
]
|
|
1477
1595
|
: []}
|
|
1478
1596
|
bind:activeTab={pageHeaderTab}
|
|
1597
|
+
defaultTab={demo === 'PageHeaderWithTabsDemo' ? 'general' : 'overview'}
|
|
1479
1598
|
actions={demo === 'PageHeaderHeroDemo' || demo === 'PageHeaderWithActionsDemo' || demo === 'PageHeaderCompleteDemo' ? pageHeaderActions : undefined}
|
|
1480
1599
|
/>
|
|
1481
1600
|
</div>
|
|
@@ -1490,23 +1609,73 @@ const route: WorkerRoute = {
|
|
|
1490
1609
|
{#if demo.includes('Error')}<p class="text-sm text-kumo-danger">Choose an environment to continue.</p>{/if}
|
|
1491
1610
|
</div>
|
|
1492
1611
|
{:else if looksLike('ResourceList')}
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
<
|
|
1496
|
-
|
|
1497
|
-
<
|
|
1498
|
-
|
|
1499
|
-
|
|
1612
|
+
{#snippet resourceUsage()}
|
|
1613
|
+
<Surface class="p-4">
|
|
1614
|
+
<h3 class="mb-2 font-semibold">{demo === 'ResourceListWithUsageDemo' ? 'Quick Start' : 'Usage Example'}</h3>
|
|
1615
|
+
{#if demo === 'ResourceListWithUsageDemo'}
|
|
1616
|
+
<p class="mb-3 text-sm text-kumo-subtle">Generate an API key to authenticate your requests</p>
|
|
1617
|
+
<Code lang="bash" code={'curl -H "Authorization: Bearer YOUR_API_KEY" https://api.example.com'} />
|
|
1618
|
+
{:else}
|
|
1619
|
+
<Code
|
|
1620
|
+
lang="ts"
|
|
1621
|
+
code={`// Read from KV
|
|
1622
|
+
const value = await KV.get('key');
|
|
1623
|
+
|
|
1624
|
+
// Write to KV
|
|
1625
|
+
await KV.put('key', 'value');`}
|
|
1626
|
+
/>
|
|
1627
|
+
{/if}
|
|
1628
|
+
</Surface>
|
|
1629
|
+
{/snippet}
|
|
1630
|
+
{#snippet resourceAdditionalContent()}
|
|
1631
|
+
<Surface class="p-4">
|
|
1632
|
+
<h3 class="mb-2 font-semibold">Learn More</h3>
|
|
1633
|
+
<p class="text-sm text-kumo-subtle">Check out our documentation to learn more about KV storage.</p>
|
|
1634
|
+
</Surface>
|
|
1635
|
+
{/snippet}
|
|
1636
|
+
<div class="w-full">
|
|
1637
|
+
<ResourceListPage
|
|
1638
|
+
class="min-h-[400px]"
|
|
1639
|
+
title={demo === 'ResourceListWithUsageDemo' ? 'API Keys' : demo === 'ResourceListCompleteDemo' ? 'KV Namespaces' : 'Databases'}
|
|
1640
|
+
description={demo === 'ResourceListWithUsageDemo'
|
|
1641
|
+
? 'Create and manage API keys for your applications'
|
|
1642
|
+
: demo === 'ResourceListCompleteDemo'
|
|
1643
|
+
? 'Store key-value data globally with low-latency access'
|
|
1644
|
+
: 'Manage your database instances and configurations'}
|
|
1645
|
+
icon={demo === 'ResourceListWithUsageDemo' ? undefined : Database}
|
|
1646
|
+
usage={demo === 'ResourceListWithUsageDemo' || demo === 'ResourceListCompleteDemo' ? resourceUsage : undefined}
|
|
1647
|
+
additionalContent={demo === 'ResourceListCompleteDemo' ? resourceAdditionalContent : undefined}
|
|
1648
|
+
>
|
|
1649
|
+
{#if demo === 'ResourceListCompleteDemo'}
|
|
1650
|
+
<div class="space-y-4">
|
|
1651
|
+
<Surface class="p-6">
|
|
1652
|
+
<h4 class="mb-2 font-semibold">production-kv</h4>
|
|
1653
|
+
<p class="text-sm text-kumo-subtle">Created 2 days ago</p>
|
|
1654
|
+
</Surface>
|
|
1655
|
+
<Surface class="p-6">
|
|
1656
|
+
<h4 class="mb-2 font-semibold">staging-kv</h4>
|
|
1657
|
+
<p class="text-sm text-kumo-subtle">Created 1 week ago</p>
|
|
1658
|
+
</Surface>
|
|
1659
|
+
</div>
|
|
1660
|
+
{:else}
|
|
1661
|
+
<Surface class="p-6">
|
|
1662
|
+
<p>{demo === 'ResourceListWithUsageDemo' ? 'API keys list would appear here' : 'Main content area - your resource list would go here'}</p>
|
|
1663
|
+
</Surface>
|
|
1664
|
+
{/if}
|
|
1665
|
+
</ResourceListPage>
|
|
1500
1666
|
</div>
|
|
1501
1667
|
{:else if looksLike('DeleteResource')}
|
|
1668
|
+
<Button variant="destructive" onclick={openDeleteResource}>
|
|
1669
|
+
{demo === 'DeleteResourceWorkerDemo' ? 'Delete Worker' : 'Delete Zone'}
|
|
1670
|
+
</Button>
|
|
1502
1671
|
<DeleteResource
|
|
1503
1672
|
bind:open={deleteResourceOpen}
|
|
1673
|
+
onOpenChange={(open) => (deleteResourceOpen = open)}
|
|
1504
1674
|
resourceType={demo === 'DeleteResourceWorkerDemo' ? 'Worker' : 'Zone'}
|
|
1505
|
-
resourceName={demo === 'DeleteResourceWorkerDemo' ? 'api-
|
|
1506
|
-
errorMessage={demo === 'DeleteResourceErrorDemo' ?
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
}}
|
|
1675
|
+
resourceName={demo === 'DeleteResourceWorkerDemo' ? 'api-gateway-worker' : 'example.com'}
|
|
1676
|
+
errorMessage={demo === 'DeleteResourceErrorDemo' ? deleteResourceErrorMessage : undefined}
|
|
1677
|
+
isDeleting={deleteResourceDeleting}
|
|
1678
|
+
onDelete={handleDeleteResource}
|
|
1510
1679
|
/>
|
|
1511
1680
|
{:else if looksLike('Select')}
|
|
1512
1681
|
<div class="w-full max-w-xs space-y-2">
|