@shipfox/react-ui 0.14.0 → 0.15.0
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/.storybook/preview.tsx +7 -0
- package/.turbo/turbo-build.log +7 -7
- package/.turbo/turbo-check.log +2 -2
- package/.turbo/turbo-type.log +1 -1
- package/CHANGELOG.md +10 -0
- package/dist/components/avatar/avatar.js +1 -1
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/button-group/button-group.d.ts +17 -0
- package/dist/components/button-group/button-group.d.ts.map +1 -0
- package/dist/components/button-group/button-group.js +74 -0
- package/dist/components/button-group/button-group.js.map +1 -0
- package/dist/components/button-group/button-group.stories.js +644 -0
- package/dist/components/button-group/button-group.stories.js.map +1 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/button-group/index.d.ts.map +1 -0
- package/dist/components/button-group/index.js +3 -0
- package/dist/components/button-group/index.js.map +1 -0
- package/dist/components/code-block/code-block-footer.d.ts.map +1 -1
- package/dist/components/code-block/code-block-footer.js +4 -2
- package/dist/components/code-block/code-block-footer.js.map +1 -1
- package/dist/components/command/command.d.ts +28 -0
- package/dist/components/command/command.d.ts.map +1 -0
- package/dist/components/command/command.js +190 -0
- package/dist/components/command/command.js.map +1 -0
- package/dist/components/command/command.stories.js +228 -0
- package/dist/components/command/command.stories.js.map +1 -0
- package/dist/components/command/index.d.ts +2 -0
- package/dist/components/command/index.d.ts.map +1 -0
- package/dist/components/command/index.js +3 -0
- package/dist/components/command/index.js.map +1 -0
- package/dist/components/dashboard/components/analytics-content.d.ts +2 -0
- package/dist/components/dashboard/components/analytics-content.d.ts.map +1 -0
- package/dist/components/dashboard/components/analytics-content.js +180 -0
- package/dist/components/dashboard/components/analytics-content.js.map +1 -0
- package/dist/components/dashboard/components/animated-logo.d.ts +4 -0
- package/dist/components/dashboard/components/animated-logo.d.ts.map +1 -0
- package/dist/components/dashboard/components/animated-logo.js +23 -0
- package/dist/components/dashboard/components/animated-logo.js.map +1 -0
- package/dist/components/dashboard/components/complete-setup-button.d.ts +4 -0
- package/dist/components/dashboard/components/complete-setup-button.d.ts.map +1 -0
- package/dist/components/dashboard/components/complete-setup-button.js +28 -0
- package/dist/components/dashboard/components/complete-setup-button.js.map +1 -0
- package/dist/components/dashboard/components/jobs-content.d.ts +2 -0
- package/dist/components/dashboard/components/jobs-content.d.ts.map +1 -0
- package/dist/components/dashboard/components/jobs-content.js +69 -0
- package/dist/components/dashboard/components/jobs-content.js.map +1 -0
- package/dist/components/dashboard/components/mobile-menu.d.ts +2 -0
- package/dist/components/dashboard/components/mobile-menu.d.ts.map +1 -0
- package/dist/components/dashboard/components/mobile-menu.js +65 -0
- package/dist/components/dashboard/components/mobile-menu.js.map +1 -0
- package/dist/components/dashboard/components/organization-selector.d.ts +2 -0
- package/dist/components/dashboard/components/organization-selector.d.ts.map +1 -0
- package/dist/components/dashboard/components/organization-selector.js +92 -0
- package/dist/components/dashboard/components/organization-selector.js.map +1 -0
- package/dist/components/dashboard/components/top-menu.d.ts +5 -0
- package/dist/components/dashboard/components/top-menu.d.ts.map +1 -0
- package/dist/components/dashboard/components/top-menu.js +31 -0
- package/dist/components/dashboard/components/top-menu.js.map +1 -0
- package/dist/components/dashboard/components/topbar-button.d.ts +7 -0
- package/dist/components/dashboard/components/topbar-button.d.ts.map +1 -0
- package/dist/components/dashboard/components/topbar-button.js +18 -0
- package/dist/components/dashboard/components/topbar-button.js.map +1 -0
- package/dist/components/dashboard/components/topbar.d.ts +4 -0
- package/dist/components/dashboard/components/topbar.d.ts.map +1 -0
- package/dist/components/dashboard/components/topbar.js +62 -0
- package/dist/components/dashboard/components/topbar.js.map +1 -0
- package/dist/components/dashboard/components/user-profile.d.ts +2 -0
- package/dist/components/dashboard/components/user-profile.d.ts.map +1 -0
- package/dist/components/dashboard/components/user-profile.js +146 -0
- package/dist/components/dashboard/components/user-profile.js.map +1 -0
- package/dist/components/dashboard/dashboard.d.ts +2 -0
- package/dist/components/dashboard/dashboard.d.ts.map +1 -0
- package/dist/components/dashboard/dashboard.js +70 -0
- package/dist/components/dashboard/dashboard.js.map +1 -0
- package/dist/components/dashboard/dashboard.stories.js +23 -0
- package/dist/components/dashboard/dashboard.stories.js.map +1 -0
- package/dist/components/dashboard/index.d.ts +2 -0
- package/dist/components/dashboard/index.d.ts.map +1 -0
- package/dist/components/dashboard/index.js +3 -0
- package/dist/components/dashboard/index.js.map +1 -0
- package/dist/components/form/form.stories.js +6 -1
- package/dist/components/form/form.stories.js.map +1 -1
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/kbd/index.d.ts +2 -0
- package/dist/components/kbd/index.d.ts.map +1 -0
- package/dist/components/kbd/index.js +3 -0
- package/dist/components/kbd/index.js.map +1 -0
- package/dist/components/kbd/kbd.d.ts +7 -0
- package/dist/components/kbd/kbd.d.ts.map +1 -0
- package/dist/components/kbd/kbd.js +18 -0
- package/dist/components/kbd/kbd.js.map +1 -0
- package/dist/components/kbd/kbd.stories.js +119 -0
- package/dist/components/kbd/kbd.stories.js.map +1 -0
- package/dist/components/search/index.d.ts +7 -0
- package/dist/components/search/index.d.ts.map +1 -0
- package/dist/components/search/index.js +8 -0
- package/dist/components/search/index.js.map +1 -0
- package/dist/components/search/search-context.d.ts +11 -0
- package/dist/components/search/search-context.d.ts.map +1 -0
- package/dist/components/search/search-context.js +56 -0
- package/dist/components/search/search-context.js.map +1 -0
- package/dist/components/search/search-inline.d.ts +9 -0
- package/dist/components/search/search-inline.d.ts.map +1 -0
- package/dist/components/search/search-inline.js +85 -0
- package/dist/components/search/search-inline.js.map +1 -0
- package/dist/components/search/search-modal.d.ts +25 -0
- package/dist/components/search/search-modal.d.ts.map +1 -0
- package/dist/components/search/search-modal.js +162 -0
- package/dist/components/search/search-modal.js.map +1 -0
- package/dist/components/search/search-trigger.d.ts +9 -0
- package/dist/components/search/search-trigger.d.ts.map +1 -0
- package/dist/components/search/search-trigger.js +37 -0
- package/dist/components/search/search-trigger.js.map +1 -0
- package/dist/components/search/search-variants.d.ts +14 -0
- package/dist/components/search/search-variants.d.ts.map +1 -0
- package/dist/components/search/search-variants.js +90 -0
- package/dist/components/search/search-variants.js.map +1 -0
- package/dist/components/search/search.d.ts +11 -0
- package/dist/components/search/search.d.ts.map +1 -0
- package/dist/components/search/search.js +35 -0
- package/dist/components/search/search.js.map +1 -0
- package/dist/components/search/search.stories.js +630 -0
- package/dist/components/search/search.stories.js.map +1 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +3 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/select.d.ts +25 -0
- package/dist/components/select/select.d.ts.map +1 -0
- package/dist/components/select/select.js +153 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/select/select.stories.js +393 -0
- package/dist/components/select/select.stories.js.map +1 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/index.js +3 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/skeleton/skeleton.d.ts +5 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +11 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/skeleton/skeleton.stories.js +345 -0
- package/dist/components/skeleton/skeleton.stories.js.map +1 -0
- package/dist/components/table/data-table.d.ts +70 -0
- package/dist/components/table/data-table.d.ts.map +1 -0
- package/dist/components/table/data-table.js +159 -0
- package/dist/components/table/data-table.js.map +1 -0
- package/dist/components/table/index.d.ts +6 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +6 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table-column-header.d.ts +79 -0
- package/dist/components/table/table-column-header.d.ts.map +1 -0
- package/dist/components/table/table-column-header.js +99 -0
- package/dist/components/table/table-column-header.js.map +1 -0
- package/dist/components/table/table-pagination.d.ts +53 -0
- package/dist/components/table/table-pagination.d.ts.map +1 -0
- package/dist/components/table/table-pagination.js +139 -0
- package/dist/components/table/table-pagination.js.map +1 -0
- package/dist/components/table/table.d.ts +11 -0
- package/dist/components/table/table.d.ts.map +1 -0
- package/dist/components/table/table.js +64 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/table/table.stories.columns.d.ts +24 -0
- package/dist/components/table/table.stories.columns.d.ts.map +1 -0
- package/dist/components/table/table.stories.columns.js +310 -0
- package/dist/components/table/table.stories.columns.js.map +1 -0
- package/dist/components/table/table.stories.components.d.ts +14 -0
- package/dist/components/table/table.stories.components.d.ts.map +1 -0
- package/dist/components/table/table.stories.components.js +107 -0
- package/dist/components/table/table.stories.components.js.map +1 -0
- package/dist/components/table/table.stories.data.d.ts +54 -0
- package/dist/components/table/table.stories.data.d.ts.map +1 -0
- package/dist/components/table/table.stories.data.js +122 -0
- package/dist/components/table/table.stories.data.js.map +1 -0
- package/dist/components/table/table.stories.js +302 -0
- package/dist/components/table/table.stories.js.map +1 -0
- package/dist/styles.css +1 -1
- package/index.css +48 -0
- package/package.json +3 -2
- package/src/components/avatar/avatar.tsx +1 -1
- package/src/components/button-group/button-group.stories.tsx +361 -0
- package/src/components/button-group/button-group.tsx +111 -0
- package/src/components/button-group/index.ts +1 -0
- package/src/components/code-block/code-block-footer.tsx +8 -1
- package/src/components/command/command.stories.tsx +133 -0
- package/src/components/command/command.tsx +265 -0
- package/src/components/command/index.ts +1 -0
- package/src/components/dashboard/components/analytics-content.tsx +102 -0
- package/src/components/dashboard/components/animated-logo.tsx +25 -0
- package/src/components/dashboard/components/complete-setup-button.tsx +30 -0
- package/src/components/dashboard/components/jobs-content.tsx +51 -0
- package/src/components/dashboard/components/mobile-menu.tsx +50 -0
- package/src/components/dashboard/components/organization-selector.tsx +51 -0
- package/src/components/dashboard/components/top-menu.tsx +26 -0
- package/src/components/dashboard/components/topbar-button.tsx +27 -0
- package/src/components/dashboard/components/topbar.tsx +40 -0
- package/src/components/dashboard/components/user-profile.tsx +90 -0
- package/src/components/dashboard/dashboard.stories.tsx +25 -0
- package/src/components/dashboard/dashboard.tsx +61 -0
- package/src/components/dashboard/index.ts +1 -0
- package/src/components/form/form.stories.tsx +5 -0
- package/src/components/index.ts +7 -0
- package/src/components/kbd/index.ts +1 -0
- package/src/components/kbd/kbd.stories.tsx +64 -0
- package/src/components/kbd/kbd.tsx +32 -0
- package/src/components/search/index.ts +28 -0
- package/src/components/search/search-context.tsx +78 -0
- package/src/components/search/search-inline.tsx +107 -0
- package/src/components/search/search-modal.tsx +198 -0
- package/src/components/search/search-trigger.tsx +47 -0
- package/src/components/search/search-variants.ts +88 -0
- package/src/components/search/search.stories.tsx +392 -0
- package/src/components/search/search.tsx +47 -0
- package/src/components/select/index.ts +1 -0
- package/src/components/select/select.stories.tsx +207 -0
- package/src/components/select/select.tsx +220 -0
- package/src/components/skeleton/index.ts +1 -0
- package/src/components/skeleton/skeleton.stories.tsx +178 -0
- package/src/components/skeleton/skeleton.tsx +14 -0
- package/src/components/table/data-table.tsx +254 -0
- package/src/components/table/index.ts +5 -0
- package/src/components/table/table-column-header.tsx +141 -0
- package/src/components/table/table-pagination.tsx +161 -0
- package/src/components/table/table.stories.columns.tsx +198 -0
- package/src/components/table/table.stories.components.tsx +104 -0
- package/src/components/table/table.stories.data.ts +117 -0
- package/src/components/table/table.stories.tsx +256 -0
- package/src/components/table/table.tsx +95 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column definitions for Table stories
|
|
3
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { Badge } from '../../components/badge/index.js';
|
|
5
|
+
import { Icon } from '../../components/icon/index.js';
|
|
6
|
+
import { TableColumnHeader } from './table-column-header.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create column definitions for JobData
|
|
9
|
+
*/ export const createJobColumns = ()=>[
|
|
10
|
+
{
|
|
11
|
+
accessorKey: 'name',
|
|
12
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
13
|
+
column: column,
|
|
14
|
+
title: "Name"
|
|
15
|
+
}),
|
|
16
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("div", {
|
|
17
|
+
className: "font-medium text-foreground-neutral-base",
|
|
18
|
+
children: row.getValue('name')
|
|
19
|
+
})
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
accessorKey: 'total',
|
|
23
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
24
|
+
column: column,
|
|
25
|
+
title: "Total"
|
|
26
|
+
}),
|
|
27
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
28
|
+
className: "flex items-center gap-6",
|
|
29
|
+
children: [
|
|
30
|
+
/*#__PURE__*/ _jsx("div", {
|
|
31
|
+
className: "size-6 rounded-full bg-foreground-neutral-muted"
|
|
32
|
+
}),
|
|
33
|
+
/*#__PURE__*/ _jsx("span", {
|
|
34
|
+
className: "tabular-nums",
|
|
35
|
+
children: row.getValue('total')
|
|
36
|
+
})
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
accessorKey: 'success',
|
|
42
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
43
|
+
column: column,
|
|
44
|
+
title: "Success"
|
|
45
|
+
}),
|
|
46
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
47
|
+
className: "flex items-center gap-6",
|
|
48
|
+
children: [
|
|
49
|
+
/*#__PURE__*/ _jsx("div", {
|
|
50
|
+
className: "size-6 rounded-full bg-tag-success-icon"
|
|
51
|
+
}),
|
|
52
|
+
/*#__PURE__*/ _jsx("span", {
|
|
53
|
+
className: "tabular-nums",
|
|
54
|
+
children: row.getValue('success')
|
|
55
|
+
})
|
|
56
|
+
]
|
|
57
|
+
})
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
accessorKey: 'failed',
|
|
61
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
62
|
+
column: column,
|
|
63
|
+
title: "Failed"
|
|
64
|
+
}),
|
|
65
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
66
|
+
className: "flex items-center gap-6",
|
|
67
|
+
children: [
|
|
68
|
+
/*#__PURE__*/ _jsx("div", {
|
|
69
|
+
className: "size-6 rounded-full bg-tag-error-icon"
|
|
70
|
+
}),
|
|
71
|
+
/*#__PURE__*/ _jsx("span", {
|
|
72
|
+
className: "tabular-nums",
|
|
73
|
+
children: row.getValue('failed')
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
})
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
accessorKey: 'neutral',
|
|
80
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
81
|
+
column: column,
|
|
82
|
+
title: "Neutral"
|
|
83
|
+
}),
|
|
84
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
85
|
+
className: "flex items-center gap-6",
|
|
86
|
+
children: [
|
|
87
|
+
/*#__PURE__*/ _jsx("div", {
|
|
88
|
+
className: "size-6 rounded-full bg-foreground-neutral-muted"
|
|
89
|
+
}),
|
|
90
|
+
/*#__PURE__*/ _jsx("span", {
|
|
91
|
+
className: "tabular-nums",
|
|
92
|
+
children: row.getValue('neutral')
|
|
93
|
+
})
|
|
94
|
+
]
|
|
95
|
+
})
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
accessorKey: 'flaked',
|
|
99
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
100
|
+
column: column,
|
|
101
|
+
title: "Flaked"
|
|
102
|
+
}),
|
|
103
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
104
|
+
className: "flex items-center gap-6",
|
|
105
|
+
children: [
|
|
106
|
+
/*#__PURE__*/ _jsx("div", {
|
|
107
|
+
className: "size-6 rounded-full bg-tag-warning-icon"
|
|
108
|
+
}),
|
|
109
|
+
/*#__PURE__*/ _jsx("span", {
|
|
110
|
+
className: "tabular-nums",
|
|
111
|
+
children: row.getValue('flaked')
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
})
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
accessorKey: 'failureRate',
|
|
118
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
119
|
+
column: column,
|
|
120
|
+
title: "Failure rate"
|
|
121
|
+
}),
|
|
122
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("span", {
|
|
123
|
+
className: "tabular-nums",
|
|
124
|
+
children: row.getValue('failureRate')
|
|
125
|
+
})
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
accessorKey: 'flakeRate',
|
|
129
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
130
|
+
column: column,
|
|
131
|
+
title: "Flake rate"
|
|
132
|
+
}),
|
|
133
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("span", {
|
|
134
|
+
className: "tabular-nums",
|
|
135
|
+
children: row.getValue('flakeRate')
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
];
|
|
139
|
+
/**
|
|
140
|
+
* Create column definitions for User data
|
|
141
|
+
*/ export const createUserColumns = ()=>[
|
|
142
|
+
{
|
|
143
|
+
accessorKey: 'name',
|
|
144
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
145
|
+
column: column,
|
|
146
|
+
title: "Name"
|
|
147
|
+
}),
|
|
148
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("div", {
|
|
149
|
+
className: "font-medium text-foreground-neutral-base",
|
|
150
|
+
children: row.getValue('name')
|
|
151
|
+
})
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
accessorKey: 'email',
|
|
155
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
156
|
+
column: column,
|
|
157
|
+
title: "Email"
|
|
158
|
+
}),
|
|
159
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("div", {
|
|
160
|
+
className: "text-foreground-neutral-subtle",
|
|
161
|
+
children: row.getValue('email')
|
|
162
|
+
})
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
accessorKey: 'role',
|
|
166
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
167
|
+
column: column,
|
|
168
|
+
title: "Role"
|
|
169
|
+
}),
|
|
170
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx(Badge, {
|
|
171
|
+
variant: "neutral",
|
|
172
|
+
children: row.getValue('role')
|
|
173
|
+
})
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
accessorKey: 'status',
|
|
177
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
178
|
+
column: column,
|
|
179
|
+
title: "Status"
|
|
180
|
+
}),
|
|
181
|
+
cell: ({ row })=>{
|
|
182
|
+
const status = row.getValue('status');
|
|
183
|
+
return /*#__PURE__*/ _jsx(Badge, {
|
|
184
|
+
variant: status === 'active' ? 'success' : 'neutral',
|
|
185
|
+
children: status.charAt(0).toUpperCase() + status.slice(1)
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
];
|
|
190
|
+
/**
|
|
191
|
+
* Create column definitions for SearchJobData
|
|
192
|
+
*/ export const createSearchJobColumns = ()=>[
|
|
193
|
+
{
|
|
194
|
+
accessorKey: 'name',
|
|
195
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
196
|
+
column: column,
|
|
197
|
+
title: "Job Name"
|
|
198
|
+
}),
|
|
199
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("div", {
|
|
200
|
+
className: "font-medium text-foreground-neutral-base",
|
|
201
|
+
children: row.getValue('name')
|
|
202
|
+
})
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
accessorKey: 'repository',
|
|
206
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
207
|
+
column: column,
|
|
208
|
+
title: "Repository"
|
|
209
|
+
}),
|
|
210
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("div", {
|
|
211
|
+
className: "text-foreground-neutral-subtle font-mono text-xs",
|
|
212
|
+
children: row.getValue('repository')
|
|
213
|
+
})
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
accessorKey: 'branch',
|
|
217
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
218
|
+
column: column,
|
|
219
|
+
title: "Branch"
|
|
220
|
+
}),
|
|
221
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
222
|
+
className: "flex items-center gap-6",
|
|
223
|
+
children: [
|
|
224
|
+
/*#__PURE__*/ _jsx(Icon, {
|
|
225
|
+
name: "gitBranchLine",
|
|
226
|
+
className: "size-14 text-foreground-neutral-muted"
|
|
227
|
+
}),
|
|
228
|
+
/*#__PURE__*/ _jsx("span", {
|
|
229
|
+
className: "font-mono text-xs",
|
|
230
|
+
children: row.getValue('branch')
|
|
231
|
+
})
|
|
232
|
+
]
|
|
233
|
+
})
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
accessorKey: 'total',
|
|
237
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
238
|
+
column: column,
|
|
239
|
+
title: "Total"
|
|
240
|
+
}),
|
|
241
|
+
cell: ({ row })=>/*#__PURE__*/ _jsx("span", {
|
|
242
|
+
className: "tabular-nums",
|
|
243
|
+
children: row.getValue('total')
|
|
244
|
+
})
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
accessorKey: 'success',
|
|
248
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
249
|
+
column: column,
|
|
250
|
+
title: "Success"
|
|
251
|
+
}),
|
|
252
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
253
|
+
className: "flex items-center gap-6",
|
|
254
|
+
children: [
|
|
255
|
+
/*#__PURE__*/ _jsx("div", {
|
|
256
|
+
className: "size-6 rounded-full bg-tag-success-icon"
|
|
257
|
+
}),
|
|
258
|
+
/*#__PURE__*/ _jsx("span", {
|
|
259
|
+
className: "tabular-nums",
|
|
260
|
+
children: row.getValue('success')
|
|
261
|
+
})
|
|
262
|
+
]
|
|
263
|
+
})
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
accessorKey: 'failed',
|
|
267
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
268
|
+
column: column,
|
|
269
|
+
title: "Failed"
|
|
270
|
+
}),
|
|
271
|
+
cell: ({ row })=>/*#__PURE__*/ _jsxs("div", {
|
|
272
|
+
className: "flex items-center gap-6",
|
|
273
|
+
children: [
|
|
274
|
+
/*#__PURE__*/ _jsx("div", {
|
|
275
|
+
className: "size-6 rounded-full bg-tag-error-icon"
|
|
276
|
+
}),
|
|
277
|
+
/*#__PURE__*/ _jsx("span", {
|
|
278
|
+
className: "tabular-nums",
|
|
279
|
+
children: row.getValue('failed')
|
|
280
|
+
})
|
|
281
|
+
]
|
|
282
|
+
})
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
accessorKey: 'status',
|
|
286
|
+
header: ({ column })=>/*#__PURE__*/ _jsx(TableColumnHeader, {
|
|
287
|
+
column: column,
|
|
288
|
+
title: "Status"
|
|
289
|
+
}),
|
|
290
|
+
cell: ({ row })=>{
|
|
291
|
+
const status = row.getValue('status');
|
|
292
|
+
const variantMap = {
|
|
293
|
+
active: 'info',
|
|
294
|
+
completed: 'success',
|
|
295
|
+
failed: 'error'
|
|
296
|
+
};
|
|
297
|
+
return /*#__PURE__*/ _jsx(Badge, {
|
|
298
|
+
variant: variantMap[status],
|
|
299
|
+
children: status.charAt(0).toUpperCase() + status.slice(1)
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
];
|
|
304
|
+
/**
|
|
305
|
+
* Column instances for reuse in stories
|
|
306
|
+
*/ export const jobColumns = createJobColumns();
|
|
307
|
+
export const userColumns = createUserColumns();
|
|
308
|
+
export const searchJobColumns = createSearchJobColumns();
|
|
309
|
+
|
|
310
|
+
//# sourceMappingURL=table.stories.columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/table/table.stories.columns.tsx"],"sourcesContent":["/**\n * Column definitions for Table stories\n */\n\nimport type {ColumnDef} from '@tanstack/react-table';\nimport {Badge} from 'components/badge';\nimport {Icon} from 'components/icon';\nimport type {JobData, SearchJobData, User} from './table.stories.data';\nimport {TableColumnHeader} from './table-column-header';\n\n/**\n * Create column definitions for JobData\n */\nexport const createJobColumns = (): ColumnDef<JobData>[] => [\n {\n accessorKey: 'name',\n header: ({column}) => <TableColumnHeader column={column} title=\"Name\" />,\n cell: ({row}) => (\n <div className=\"font-medium text-foreground-neutral-base\">{row.getValue('name')}</div>\n ),\n },\n {\n accessorKey: 'total',\n header: ({column}) => <TableColumnHeader column={column} title=\"Total\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-foreground-neutral-muted\" />\n <span className=\"tabular-nums\">{row.getValue('total')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'success',\n header: ({column}) => <TableColumnHeader column={column} title=\"Success\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-tag-success-icon\" />\n <span className=\"tabular-nums\">{row.getValue('success')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'failed',\n header: ({column}) => <TableColumnHeader column={column} title=\"Failed\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-tag-error-icon\" />\n <span className=\"tabular-nums\">{row.getValue('failed')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'neutral',\n header: ({column}) => <TableColumnHeader column={column} title=\"Neutral\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-foreground-neutral-muted\" />\n <span className=\"tabular-nums\">{row.getValue('neutral')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'flaked',\n header: ({column}) => <TableColumnHeader column={column} title=\"Flaked\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-tag-warning-icon\" />\n <span className=\"tabular-nums\">{row.getValue('flaked')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'failureRate',\n header: ({column}) => <TableColumnHeader column={column} title=\"Failure rate\" />,\n cell: ({row}) => <span className=\"tabular-nums\">{row.getValue('failureRate')}</span>,\n },\n {\n accessorKey: 'flakeRate',\n header: ({column}) => <TableColumnHeader column={column} title=\"Flake rate\" />,\n cell: ({row}) => <span className=\"tabular-nums\">{row.getValue('flakeRate')}</span>,\n },\n];\n\n/**\n * Create column definitions for User data\n */\nexport const createUserColumns = (): ColumnDef<User>[] => [\n {\n accessorKey: 'name',\n header: ({column}) => <TableColumnHeader column={column} title=\"Name\" />,\n cell: ({row}) => (\n <div className=\"font-medium text-foreground-neutral-base\">{row.getValue('name')}</div>\n ),\n },\n {\n accessorKey: 'email',\n header: ({column}) => <TableColumnHeader column={column} title=\"Email\" />,\n cell: ({row}) => <div className=\"text-foreground-neutral-subtle\">{row.getValue('email')}</div>,\n },\n {\n accessorKey: 'role',\n header: ({column}) => <TableColumnHeader column={column} title=\"Role\" />,\n cell: ({row}) => <Badge variant=\"neutral\">{row.getValue('role')}</Badge>,\n },\n {\n accessorKey: 'status',\n header: ({column}) => <TableColumnHeader column={column} title=\"Status\" />,\n cell: ({row}) => {\n const status = row.getValue('status') as string;\n return (\n <Badge variant={status === 'active' ? 'success' : 'neutral'}>\n {status.charAt(0).toUpperCase() + status.slice(1)}\n </Badge>\n );\n },\n },\n];\n\n/**\n * Create column definitions for SearchJobData\n */\nexport const createSearchJobColumns = (): ColumnDef<SearchJobData>[] => [\n {\n accessorKey: 'name',\n header: ({column}) => <TableColumnHeader column={column} title=\"Job Name\" />,\n cell: ({row}) => (\n <div className=\"font-medium text-foreground-neutral-base\">{row.getValue('name')}</div>\n ),\n },\n {\n accessorKey: 'repository',\n header: ({column}) => <TableColumnHeader column={column} title=\"Repository\" />,\n cell: ({row}) => (\n <div className=\"text-foreground-neutral-subtle font-mono text-xs\">\n {row.getValue('repository')}\n </div>\n ),\n },\n {\n accessorKey: 'branch',\n header: ({column}) => <TableColumnHeader column={column} title=\"Branch\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <Icon name=\"gitBranchLine\" className=\"size-14 text-foreground-neutral-muted\" />\n <span className=\"font-mono text-xs\">{row.getValue('branch')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'total',\n header: ({column}) => <TableColumnHeader column={column} title=\"Total\" />,\n cell: ({row}) => <span className=\"tabular-nums\">{row.getValue('total')}</span>,\n },\n {\n accessorKey: 'success',\n header: ({column}) => <TableColumnHeader column={column} title=\"Success\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-tag-success-icon\" />\n <span className=\"tabular-nums\">{row.getValue('success')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'failed',\n header: ({column}) => <TableColumnHeader column={column} title=\"Failed\" />,\n cell: ({row}) => (\n <div className=\"flex items-center gap-6\">\n <div className=\"size-6 rounded-full bg-tag-error-icon\" />\n <span className=\"tabular-nums\">{row.getValue('failed')}</span>\n </div>\n ),\n },\n {\n accessorKey: 'status',\n header: ({column}) => <TableColumnHeader column={column} title=\"Status\" />,\n cell: ({row}) => {\n const status = row.getValue('status') as string;\n const variantMap = {\n active: 'info',\n completed: 'success',\n failed: 'error',\n } as const;\n return (\n <Badge variant={variantMap[status as keyof typeof variantMap]}>\n {status.charAt(0).toUpperCase() + status.slice(1)}\n </Badge>\n );\n },\n },\n];\n\n/**\n * Column instances for reuse in stories\n */\nexport const jobColumns = createJobColumns();\nexport const userColumns = createUserColumns();\nexport const searchJobColumns = createSearchJobColumns();\n"],"names":["Badge","Icon","TableColumnHeader","createJobColumns","accessorKey","header","column","title","cell","row","div","className","getValue","span","createUserColumns","variant","status","charAt","toUpperCase","slice","createSearchJobColumns","name","variantMap","active","completed","failed","jobColumns","userColumns","searchJobColumns"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared components for Table stories
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Empty state component for job tables
|
|
6
|
+
*/
|
|
7
|
+
export declare function JobsEmptyState(): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
/**
|
|
9
|
+
* Search modal content component with job filtering
|
|
10
|
+
*/
|
|
11
|
+
export declare function SearchModalContent({ onSelectJob }: {
|
|
12
|
+
onSelectJob: (jobId: string) => void;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=table.stories.components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.stories.components.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.stories.components.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;GAEG;AACH,wBAAgB,cAAc,4CAoB7B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAC,WAAW,EAAC,EAAE;IAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAC,2CAyDvF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Shared components for Table stories
|
|
4
|
+
*/ import { Icon } from '../../components/icon/index.js';
|
|
5
|
+
import { useSearchContext } from '../../components/search/search-context.js';
|
|
6
|
+
import { SearchEmpty, SearchFooter, SearchGroup, SearchInput, SearchItem, SearchList } from '../../components/search/search-modal.js';
|
|
7
|
+
import { Text } from '../../components/typography/index.js';
|
|
8
|
+
import { useMemo } from 'react';
|
|
9
|
+
import { searchJobsData } from './table.stories.data.js';
|
|
10
|
+
/**
|
|
11
|
+
* Empty state component for job tables
|
|
12
|
+
*/ export function JobsEmptyState() {
|
|
13
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
14
|
+
className: "flex flex-col items-center justify-center gap-12 py-48",
|
|
15
|
+
children: [
|
|
16
|
+
/*#__PURE__*/ _jsx("div", {
|
|
17
|
+
className: "size-32 rounded-6 bg-transparent border border-border-neutral-strong flex items-center justify-center",
|
|
18
|
+
children: /*#__PURE__*/ _jsx(Icon, {
|
|
19
|
+
name: "shipfox",
|
|
20
|
+
className: "size-16 text-foreground-neutral-subtle",
|
|
21
|
+
color: "var(--foreground-neutral-subtle, #a1a1aa)"
|
|
22
|
+
})
|
|
23
|
+
}),
|
|
24
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
25
|
+
className: "text-center space-y-4",
|
|
26
|
+
children: [
|
|
27
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
28
|
+
size: "sm",
|
|
29
|
+
className: "text-foreground-neutral-base",
|
|
30
|
+
children: "No jobs yet"
|
|
31
|
+
}),
|
|
32
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
33
|
+
size: "xs",
|
|
34
|
+
className: "text-foreground-neutral-muted",
|
|
35
|
+
children: "Import past runs or start a runner."
|
|
36
|
+
})
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Search modal content component with job filtering
|
|
44
|
+
*/ export function SearchModalContent({ onSelectJob }) {
|
|
45
|
+
const { searchValue } = useSearchContext();
|
|
46
|
+
const modalFilteredData = useMemo(()=>{
|
|
47
|
+
if (!searchValue) {
|
|
48
|
+
return searchJobsData;
|
|
49
|
+
}
|
|
50
|
+
const query = searchValue.toLowerCase();
|
|
51
|
+
return searchJobsData.filter((job)=>job.name.toLowerCase().includes(query) || job.repository.toLowerCase().includes(query) || job.branch.toLowerCase().includes(query));
|
|
52
|
+
}, [
|
|
53
|
+
searchValue
|
|
54
|
+
]);
|
|
55
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
56
|
+
children: [
|
|
57
|
+
/*#__PURE__*/ _jsx(SearchInput, {
|
|
58
|
+
placeholder: "Search by job name, repository, or branch..."
|
|
59
|
+
}),
|
|
60
|
+
/*#__PURE__*/ _jsx(SearchList, {
|
|
61
|
+
children: modalFilteredData.length === 0 ? /*#__PURE__*/ _jsx(SearchEmpty, {
|
|
62
|
+
children: /*#__PURE__*/ _jsx(JobsEmptyState, {})
|
|
63
|
+
}) : /*#__PURE__*/ _jsx(SearchGroup, {
|
|
64
|
+
heading: searchValue ? `Results (${modalFilteredData.length})` : 'All Jobs',
|
|
65
|
+
children: modalFilteredData.map((job)=>/*#__PURE__*/ _jsx(SearchItem, {
|
|
66
|
+
value: `${job.id}-${job.name}-${job.repository}-${job.branch}`,
|
|
67
|
+
icon: /*#__PURE__*/ _jsx(Icon, {
|
|
68
|
+
name: "gitBranchLine",
|
|
69
|
+
className: "size-16 text-foreground-neutral-subtle"
|
|
70
|
+
}),
|
|
71
|
+
description: `${job.repository} • ${job.branch}`,
|
|
72
|
+
onSelect: ()=>onSelectJob(job.id),
|
|
73
|
+
children: job.name
|
|
74
|
+
}, job.id))
|
|
75
|
+
})
|
|
76
|
+
}),
|
|
77
|
+
/*#__PURE__*/ _jsx(SearchFooter, {
|
|
78
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
79
|
+
className: "flex items-center justify-between px-8 py-6",
|
|
80
|
+
children: [
|
|
81
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
82
|
+
size: "xs",
|
|
83
|
+
className: "text-foreground-neutral-muted",
|
|
84
|
+
children: "Select a job to filter the table"
|
|
85
|
+
}),
|
|
86
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
87
|
+
className: "flex items-center gap-8",
|
|
88
|
+
children: [
|
|
89
|
+
/*#__PURE__*/ _jsx(Icon, {
|
|
90
|
+
name: "cornerDownLeft",
|
|
91
|
+
className: "size-14 text-foreground-neutral-muted"
|
|
92
|
+
}),
|
|
93
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
94
|
+
size: "xs",
|
|
95
|
+
className: "text-foreground-neutral-muted",
|
|
96
|
+
children: "to select"
|
|
97
|
+
})
|
|
98
|
+
]
|
|
99
|
+
})
|
|
100
|
+
]
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
]
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=table.stories.components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/table/table.stories.components.tsx"],"sourcesContent":["/**\n * Shared components for Table stories\n */\n\nimport {Icon} from 'components/icon';\nimport {useSearchContext} from 'components/search/search-context';\nimport {\n SearchEmpty,\n SearchFooter,\n SearchGroup,\n SearchInput,\n SearchItem,\n SearchList,\n} from 'components/search/search-modal';\nimport {Text} from 'components/typography';\nimport {useMemo} from 'react';\nimport {searchJobsData} from './table.stories.data';\n\n/**\n * Empty state component for job tables\n */\nexport function JobsEmptyState() {\n return (\n <div className=\"flex flex-col items-center justify-center gap-12 py-48\">\n <div className=\"size-32 rounded-6 bg-transparent border border-border-neutral-strong flex items-center justify-center\">\n <Icon\n name=\"shipfox\"\n className=\"size-16 text-foreground-neutral-subtle\"\n color=\"var(--foreground-neutral-subtle, #a1a1aa)\"\n />\n </div>\n <div className=\"text-center space-y-4\">\n <Text size=\"sm\" className=\"text-foreground-neutral-base\">\n No jobs yet\n </Text>\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n Import past runs or start a runner.\n </Text>\n </div>\n </div>\n );\n}\n\n/**\n * Search modal content component with job filtering\n */\nexport function SearchModalContent({onSelectJob}: {onSelectJob: (jobId: string) => void}) {\n const {searchValue} = useSearchContext();\n\n const modalFilteredData = useMemo(() => {\n if (!searchValue) {\n return searchJobsData;\n }\n const query = searchValue.toLowerCase();\n return searchJobsData.filter(\n (job) =>\n job.name.toLowerCase().includes(query) ||\n job.repository.toLowerCase().includes(query) ||\n job.branch.toLowerCase().includes(query),\n );\n }, [searchValue]);\n\n return (\n <>\n <SearchInput placeholder=\"Search by job name, repository, or branch...\" />\n <SearchList>\n {modalFilteredData.length === 0 ? (\n <SearchEmpty>\n <JobsEmptyState />\n </SearchEmpty>\n ) : (\n <SearchGroup heading={searchValue ? `Results (${modalFilteredData.length})` : 'All Jobs'}>\n {modalFilteredData.map((job) => (\n <SearchItem\n key={job.id}\n value={`${job.id}-${job.name}-${job.repository}-${job.branch}`}\n icon={\n <Icon name=\"gitBranchLine\" className=\"size-16 text-foreground-neutral-subtle\" />\n }\n description={`${job.repository} • ${job.branch}`}\n onSelect={() => onSelectJob(job.id)}\n >\n {job.name}\n </SearchItem>\n ))}\n </SearchGroup>\n )}\n </SearchList>\n <SearchFooter>\n <div className=\"flex items-center justify-between px-8 py-6\">\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n Select a job to filter the table\n </Text>\n <div className=\"flex items-center gap-8\">\n <Icon name=\"cornerDownLeft\" className=\"size-14 text-foreground-neutral-muted\" />\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n to select\n </Text>\n </div>\n </div>\n </SearchFooter>\n </>\n );\n}\n"],"names":["Icon","useSearchContext","SearchEmpty","SearchFooter","SearchGroup","SearchInput","SearchItem","SearchList","Text","useMemo","searchJobsData","JobsEmptyState","div","className","name","color","size","SearchModalContent","onSelectJob","searchValue","modalFilteredData","query","toLowerCase","filter","job","includes","repository","branch","placeholder","length","heading","map","value","id","icon","description","onSelect"],"mappings":";AAAA;;CAEC,GAED,SAAQA,IAAI,QAAO,kBAAkB;AACrC,SAAQC,gBAAgB,QAAO,mCAAmC;AAClE,SACEC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,UAAU,EACVC,UAAU,QACL,iCAAiC;AACxC,SAAQC,IAAI,QAAO,wBAAwB;AAC3C,SAAQC,OAAO,QAAO,QAAQ;AAC9B,SAAQC,cAAc,QAAO,uBAAuB;AAEpD;;CAEC,GACD,OAAO,SAASC;IACd,qBACE,MAACC;QAAIC,WAAU;;0BACb,KAACD;gBAAIC,WAAU;0BACb,cAAA,KAACb;oBACCc,MAAK;oBACLD,WAAU;oBACVE,OAAM;;;0BAGV,MAACH;gBAAIC,WAAU;;kCACb,KAACL;wBAAKQ,MAAK;wBAAKH,WAAU;kCAA+B;;kCAGzD,KAACL;wBAAKQ,MAAK;wBAAKH,WAAU;kCAAgC;;;;;;AAMlE;AAEA;;CAEC,GACD,OAAO,SAASI,mBAAmB,EAACC,WAAW,EAAyC;IACtF,MAAM,EAACC,WAAW,EAAC,GAAGlB;IAEtB,MAAMmB,oBAAoBX,QAAQ;QAChC,IAAI,CAACU,aAAa;YAChB,OAAOT;QACT;QACA,MAAMW,QAAQF,YAAYG,WAAW;QACrC,OAAOZ,eAAea,MAAM,CAC1B,CAACC,MACCA,IAAIV,IAAI,CAACQ,WAAW,GAAGG,QAAQ,CAACJ,UAChCG,IAAIE,UAAU,CAACJ,WAAW,GAAGG,QAAQ,CAACJ,UACtCG,IAAIG,MAAM,CAACL,WAAW,GAAGG,QAAQ,CAACJ;IAExC,GAAG;QAACF;KAAY;IAEhB,qBACE;;0BACE,KAACd;gBAAYuB,aAAY;;0BACzB,KAACrB;0BACEa,kBAAkBS,MAAM,KAAK,kBAC5B,KAAC3B;8BACC,cAAA,KAACS;mCAGH,KAACP;oBAAY0B,SAASX,cAAc,CAAC,SAAS,EAAEC,kBAAkBS,MAAM,CAAC,CAAC,CAAC,GAAG;8BAC3ET,kBAAkBW,GAAG,CAAC,CAACP,oBACtB,KAAClB;4BAEC0B,OAAO,GAAGR,IAAIS,EAAE,CAAC,CAAC,EAAET,IAAIV,IAAI,CAAC,CAAC,EAAEU,IAAIE,UAAU,CAAC,CAAC,EAAEF,IAAIG,MAAM,EAAE;4BAC9DO,oBACE,KAAClC;gCAAKc,MAAK;gCAAgBD,WAAU;;4BAEvCsB,aAAa,GAAGX,IAAIE,UAAU,CAAC,GAAG,EAAEF,IAAIG,MAAM,EAAE;4BAChDS,UAAU,IAAMlB,YAAYM,IAAIS,EAAE;sCAEjCT,IAAIV,IAAI;2BARJU,IAAIS,EAAE;;;0BAcrB,KAAC9B;0BACC,cAAA,MAACS;oBAAIC,WAAU;;sCACb,KAACL;4BAAKQ,MAAK;4BAAKH,WAAU;sCAAgC;;sCAG1D,MAACD;4BAAIC,WAAU;;8CACb,KAACb;oCAAKc,MAAK;oCAAiBD,WAAU;;8CACtC,KAACL;oCAAKQ,MAAK;oCAAKH,WAAU;8CAAgC;;;;;;;;;AAQtE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data types, generation functions, and sample data for Table stories
|
|
3
|
+
*/
|
|
4
|
+
export type JobData = {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
total: number;
|
|
8
|
+
success: number;
|
|
9
|
+
failed: number;
|
|
10
|
+
neutral: number;
|
|
11
|
+
flaked: number;
|
|
12
|
+
failureRate: string;
|
|
13
|
+
flakeRate: string;
|
|
14
|
+
repository?: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
};
|
|
17
|
+
export type SearchJobData = {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
total: number;
|
|
21
|
+
success: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
status: 'active' | 'completed' | 'failed';
|
|
24
|
+
repository: string;
|
|
25
|
+
branch: string;
|
|
26
|
+
};
|
|
27
|
+
export type User = {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
email: string;
|
|
31
|
+
role: string;
|
|
32
|
+
status: 'active' | 'inactive';
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Generate mock job data
|
|
36
|
+
*/
|
|
37
|
+
export declare const generateJobData: (count: number) => JobData[];
|
|
38
|
+
/**
|
|
39
|
+
* Generate mock search job data with varied properties
|
|
40
|
+
*/
|
|
41
|
+
export declare const generateSearchJobData: (count: number) => SearchJobData[];
|
|
42
|
+
/**
|
|
43
|
+
* Sample job data
|
|
44
|
+
*/
|
|
45
|
+
export declare const jobsData: JobData[];
|
|
46
|
+
/**
|
|
47
|
+
* Sample search job data
|
|
48
|
+
*/
|
|
49
|
+
export declare const searchJobsData: SearchJobData[];
|
|
50
|
+
/**
|
|
51
|
+
* Sample user data
|
|
52
|
+
*/
|
|
53
|
+
export declare const users: User[];
|
|
54
|
+
//# sourceMappingURL=table.stories.data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.stories.data.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.stories.data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,OAAO,EAuBtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,aAAa,EA2BlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,WAAuB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,cAAc,iBAA4B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,IAAI,EAMvB,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data types, generation functions, and sample data for Table stories
|
|
3
|
+
*/ /**
|
|
4
|
+
* Generate mock job data
|
|
5
|
+
*/ export const generateJobData = (count)=>{
|
|
6
|
+
return Array.from({
|
|
7
|
+
length: count
|
|
8
|
+
}, (_, i)=>{
|
|
9
|
+
const total = 40 + i % 20; // keeps totals in a reasonable range
|
|
10
|
+
const failed = i % 7;
|
|
11
|
+
const flaked = i % 5;
|
|
12
|
+
const neutral = i % 3;
|
|
13
|
+
const success = total - failed - flaked - neutral;
|
|
14
|
+
const failureRate = `${Math.round(failed / total * 100)}%`;
|
|
15
|
+
const flakeRate = `${Math.round(flaked / total * 100)}%`;
|
|
16
|
+
return {
|
|
17
|
+
id: `job-${i + 1}`,
|
|
18
|
+
name: 'Dependabot updates',
|
|
19
|
+
total,
|
|
20
|
+
success,
|
|
21
|
+
failed,
|
|
22
|
+
neutral,
|
|
23
|
+
flaked,
|
|
24
|
+
failureRate,
|
|
25
|
+
flakeRate,
|
|
26
|
+
repository: 'shipfox/tooling',
|
|
27
|
+
branch: 'main'
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Generate mock search job data with varied properties
|
|
33
|
+
*/ export const generateSearchJobData = (count)=>{
|
|
34
|
+
const jobNames = [
|
|
35
|
+
'Build & Deploy',
|
|
36
|
+
'Run Tests',
|
|
37
|
+
'Code Quality Check',
|
|
38
|
+
'Security Scan',
|
|
39
|
+
'Integration Tests',
|
|
40
|
+
'Performance Tests',
|
|
41
|
+
'Deploy to Staging',
|
|
42
|
+
'Deploy to Production',
|
|
43
|
+
'Database Migration',
|
|
44
|
+
'Cache Warm-up'
|
|
45
|
+
];
|
|
46
|
+
const repositories = [
|
|
47
|
+
'shipfox/tooling',
|
|
48
|
+
'shipfox/web',
|
|
49
|
+
'shipfox/api',
|
|
50
|
+
'shipfox/mobile'
|
|
51
|
+
];
|
|
52
|
+
const branches = [
|
|
53
|
+
'main',
|
|
54
|
+
'develop',
|
|
55
|
+
'staging',
|
|
56
|
+
'feat/new-feature'
|
|
57
|
+
];
|
|
58
|
+
const statuses = [
|
|
59
|
+
'active',
|
|
60
|
+
'completed',
|
|
61
|
+
'failed'
|
|
62
|
+
];
|
|
63
|
+
return Array.from({
|
|
64
|
+
length: count
|
|
65
|
+
}, (_, i)=>({
|
|
66
|
+
id: `job-${i + 1}`,
|
|
67
|
+
name: jobNames[i % jobNames.length],
|
|
68
|
+
total: Math.floor(Math.random() * 100) + 20,
|
|
69
|
+
success: Math.floor(Math.random() * 80) + 10,
|
|
70
|
+
failed: Math.floor(Math.random() * 20),
|
|
71
|
+
status: statuses[i % statuses.length],
|
|
72
|
+
repository: repositories[i % repositories.length],
|
|
73
|
+
branch: branches[i % branches.length]
|
|
74
|
+
}));
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Sample job data
|
|
78
|
+
*/ export const jobsData = generateJobData(100);
|
|
79
|
+
/**
|
|
80
|
+
* Sample search job data
|
|
81
|
+
*/ export const searchJobsData = generateSearchJobData(50);
|
|
82
|
+
/**
|
|
83
|
+
* Sample user data
|
|
84
|
+
*/ export const users = [
|
|
85
|
+
{
|
|
86
|
+
id: '1',
|
|
87
|
+
name: 'John Doe',
|
|
88
|
+
email: 'john@example.com',
|
|
89
|
+
role: 'Admin',
|
|
90
|
+
status: 'active'
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: '2',
|
|
94
|
+
name: 'Jane Smith',
|
|
95
|
+
email: 'jane@example.com',
|
|
96
|
+
role: 'User',
|
|
97
|
+
status: 'active'
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: '3',
|
|
101
|
+
name: 'Bob Johnson',
|
|
102
|
+
email: 'bob@example.com',
|
|
103
|
+
role: 'User',
|
|
104
|
+
status: 'inactive'
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: '4',
|
|
108
|
+
name: 'Alice Williams',
|
|
109
|
+
email: 'alice@example.com',
|
|
110
|
+
role: 'Editor',
|
|
111
|
+
status: 'active'
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: '5',
|
|
115
|
+
name: 'Charlie Brown',
|
|
116
|
+
email: 'charlie@example.com',
|
|
117
|
+
role: 'User',
|
|
118
|
+
status: 'active'
|
|
119
|
+
}
|
|
120
|
+
];
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=table.stories.data.js.map
|