@shipfox/react-ui 0.13.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.
Files changed (268) hide show
  1. package/.storybook/preview.tsx +7 -0
  2. package/.turbo/turbo-build.log +7 -7
  3. package/.turbo/turbo-check.log +2 -2
  4. package/.turbo/turbo-type.log +1 -1
  5. package/CHANGELOG.md +16 -0
  6. package/dist/components/avatar/avatar.js +1 -1
  7. package/dist/components/avatar/avatar.js.map +1 -1
  8. package/dist/components/button-group/button-group.d.ts +17 -0
  9. package/dist/components/button-group/button-group.d.ts.map +1 -0
  10. package/dist/components/button-group/button-group.js +74 -0
  11. package/dist/components/button-group/button-group.js.map +1 -0
  12. package/dist/components/button-group/button-group.stories.js +644 -0
  13. package/dist/components/button-group/button-group.stories.js.map +1 -0
  14. package/dist/components/button-group/index.d.ts +2 -0
  15. package/dist/components/button-group/index.d.ts.map +1 -0
  16. package/dist/components/button-group/index.js +3 -0
  17. package/dist/components/button-group/index.js.map +1 -0
  18. package/dist/components/code-block/code-block-footer.d.ts.map +1 -1
  19. package/dist/components/code-block/code-block-footer.js +13 -5
  20. package/dist/components/code-block/code-block-footer.js.map +1 -1
  21. package/dist/components/command/command.d.ts +28 -0
  22. package/dist/components/command/command.d.ts.map +1 -0
  23. package/dist/components/command/command.js +190 -0
  24. package/dist/components/command/command.js.map +1 -0
  25. package/dist/components/command/command.stories.js +228 -0
  26. package/dist/components/command/command.stories.js.map +1 -0
  27. package/dist/components/command/index.d.ts +2 -0
  28. package/dist/components/command/index.d.ts.map +1 -0
  29. package/dist/components/command/index.js +3 -0
  30. package/dist/components/command/index.js.map +1 -0
  31. package/dist/components/confetti/confetti.d.ts +21 -0
  32. package/dist/components/confetti/confetti.d.ts.map +1 -0
  33. package/dist/components/confetti/confetti.js +101 -0
  34. package/dist/components/confetti/confetti.js.map +1 -0
  35. package/dist/components/confetti/confetti.stories.js +41 -0
  36. package/dist/components/confetti/confetti.stories.js.map +1 -0
  37. package/dist/components/confetti/index.d.ts +2 -0
  38. package/dist/components/confetti/index.d.ts.map +1 -0
  39. package/dist/components/confetti/index.js +3 -0
  40. package/dist/components/confetti/index.js.map +1 -0
  41. package/dist/components/dashboard/components/analytics-content.d.ts +2 -0
  42. package/dist/components/dashboard/components/analytics-content.d.ts.map +1 -0
  43. package/dist/components/dashboard/components/analytics-content.js +180 -0
  44. package/dist/components/dashboard/components/analytics-content.js.map +1 -0
  45. package/dist/components/dashboard/components/animated-logo.d.ts +4 -0
  46. package/dist/components/dashboard/components/animated-logo.d.ts.map +1 -0
  47. package/dist/components/dashboard/components/animated-logo.js +23 -0
  48. package/dist/components/dashboard/components/animated-logo.js.map +1 -0
  49. package/dist/components/dashboard/components/complete-setup-button.d.ts +4 -0
  50. package/dist/components/dashboard/components/complete-setup-button.d.ts.map +1 -0
  51. package/dist/components/dashboard/components/complete-setup-button.js +28 -0
  52. package/dist/components/dashboard/components/complete-setup-button.js.map +1 -0
  53. package/dist/components/dashboard/components/jobs-content.d.ts +2 -0
  54. package/dist/components/dashboard/components/jobs-content.d.ts.map +1 -0
  55. package/dist/components/dashboard/components/jobs-content.js +69 -0
  56. package/dist/components/dashboard/components/jobs-content.js.map +1 -0
  57. package/dist/components/dashboard/components/mobile-menu.d.ts +2 -0
  58. package/dist/components/dashboard/components/mobile-menu.d.ts.map +1 -0
  59. package/dist/components/dashboard/components/mobile-menu.js +65 -0
  60. package/dist/components/dashboard/components/mobile-menu.js.map +1 -0
  61. package/dist/components/dashboard/components/organization-selector.d.ts +2 -0
  62. package/dist/components/dashboard/components/organization-selector.d.ts.map +1 -0
  63. package/dist/components/dashboard/components/organization-selector.js +92 -0
  64. package/dist/components/dashboard/components/organization-selector.js.map +1 -0
  65. package/dist/components/dashboard/components/top-menu.d.ts +5 -0
  66. package/dist/components/dashboard/components/top-menu.d.ts.map +1 -0
  67. package/dist/components/dashboard/components/top-menu.js +31 -0
  68. package/dist/components/dashboard/components/top-menu.js.map +1 -0
  69. package/dist/components/dashboard/components/topbar-button.d.ts +7 -0
  70. package/dist/components/dashboard/components/topbar-button.d.ts.map +1 -0
  71. package/dist/components/dashboard/components/topbar-button.js +18 -0
  72. package/dist/components/dashboard/components/topbar-button.js.map +1 -0
  73. package/dist/components/dashboard/components/topbar.d.ts +4 -0
  74. package/dist/components/dashboard/components/topbar.d.ts.map +1 -0
  75. package/dist/components/dashboard/components/topbar.js +62 -0
  76. package/dist/components/dashboard/components/topbar.js.map +1 -0
  77. package/dist/components/dashboard/components/user-profile.d.ts +2 -0
  78. package/dist/components/dashboard/components/user-profile.d.ts.map +1 -0
  79. package/dist/components/dashboard/components/user-profile.js +146 -0
  80. package/dist/components/dashboard/components/user-profile.js.map +1 -0
  81. package/dist/components/dashboard/dashboard.d.ts +2 -0
  82. package/dist/components/dashboard/dashboard.d.ts.map +1 -0
  83. package/dist/components/dashboard/dashboard.js +70 -0
  84. package/dist/components/dashboard/dashboard.js.map +1 -0
  85. package/dist/components/dashboard/dashboard.stories.js +23 -0
  86. package/dist/components/dashboard/dashboard.stories.js.map +1 -0
  87. package/dist/components/dashboard/index.d.ts +2 -0
  88. package/dist/components/dashboard/index.d.ts.map +1 -0
  89. package/dist/components/dashboard/index.js +3 -0
  90. package/dist/components/dashboard/index.js.map +1 -0
  91. package/dist/components/form/form.stories.js +6 -1
  92. package/dist/components/form/form.stories.js.map +1 -1
  93. package/dist/components/icon/icon.d.ts +3 -2
  94. package/dist/components/icon/icon.d.ts.map +1 -1
  95. package/dist/components/icon/icon.js +7 -2
  96. package/dist/components/icon/icon.js.map +1 -1
  97. package/dist/components/index.d.ts +9 -0
  98. package/dist/components/index.d.ts.map +1 -1
  99. package/dist/components/index.js +9 -0
  100. package/dist/components/index.js.map +1 -1
  101. package/dist/components/kbd/index.d.ts +2 -0
  102. package/dist/components/kbd/index.d.ts.map +1 -0
  103. package/dist/components/kbd/index.js +3 -0
  104. package/dist/components/kbd/index.js.map +1 -0
  105. package/dist/components/kbd/kbd.d.ts +7 -0
  106. package/dist/components/kbd/kbd.d.ts.map +1 -0
  107. package/dist/components/kbd/kbd.js +18 -0
  108. package/dist/components/kbd/kbd.js.map +1 -0
  109. package/dist/components/kbd/kbd.stories.js +119 -0
  110. package/dist/components/kbd/kbd.stories.js.map +1 -0
  111. package/dist/components/modal/modal.stories.js +227 -168
  112. package/dist/components/modal/modal.stories.js.map +1 -1
  113. package/dist/components/search/index.d.ts +7 -0
  114. package/dist/components/search/index.d.ts.map +1 -0
  115. package/dist/components/search/index.js +8 -0
  116. package/dist/components/search/index.js.map +1 -0
  117. package/dist/components/search/search-context.d.ts +11 -0
  118. package/dist/components/search/search-context.d.ts.map +1 -0
  119. package/dist/components/search/search-context.js +56 -0
  120. package/dist/components/search/search-context.js.map +1 -0
  121. package/dist/components/search/search-inline.d.ts +9 -0
  122. package/dist/components/search/search-inline.d.ts.map +1 -0
  123. package/dist/components/search/search-inline.js +85 -0
  124. package/dist/components/search/search-inline.js.map +1 -0
  125. package/dist/components/search/search-modal.d.ts +25 -0
  126. package/dist/components/search/search-modal.d.ts.map +1 -0
  127. package/dist/components/search/search-modal.js +162 -0
  128. package/dist/components/search/search-modal.js.map +1 -0
  129. package/dist/components/search/search-trigger.d.ts +9 -0
  130. package/dist/components/search/search-trigger.d.ts.map +1 -0
  131. package/dist/components/search/search-trigger.js +37 -0
  132. package/dist/components/search/search-trigger.js.map +1 -0
  133. package/dist/components/search/search-variants.d.ts +14 -0
  134. package/dist/components/search/search-variants.d.ts.map +1 -0
  135. package/dist/components/search/search-variants.js +90 -0
  136. package/dist/components/search/search-variants.js.map +1 -0
  137. package/dist/components/search/search.d.ts +11 -0
  138. package/dist/components/search/search.d.ts.map +1 -0
  139. package/dist/components/search/search.js +35 -0
  140. package/dist/components/search/search.js.map +1 -0
  141. package/dist/components/search/search.stories.js +630 -0
  142. package/dist/components/search/search.stories.js.map +1 -0
  143. package/dist/components/select/index.d.ts +2 -0
  144. package/dist/components/select/index.d.ts.map +1 -0
  145. package/dist/components/select/index.js +3 -0
  146. package/dist/components/select/index.js.map +1 -0
  147. package/dist/components/select/select.d.ts +25 -0
  148. package/dist/components/select/select.d.ts.map +1 -0
  149. package/dist/components/select/select.js +153 -0
  150. package/dist/components/select/select.js.map +1 -0
  151. package/dist/components/select/select.stories.js +393 -0
  152. package/dist/components/select/select.stories.js.map +1 -0
  153. package/dist/components/shiny-text/index.d.ts +2 -0
  154. package/dist/components/shiny-text/index.d.ts.map +1 -0
  155. package/dist/components/shiny-text/index.js +3 -0
  156. package/dist/components/shiny-text/index.js.map +1 -0
  157. package/dist/components/shiny-text/shiny-text.d.ts +10 -0
  158. package/dist/components/shiny-text/shiny-text.d.ts.map +1 -0
  159. package/dist/components/shiny-text/shiny-text.js +17 -0
  160. package/dist/components/shiny-text/shiny-text.js.map +1 -0
  161. package/dist/components/skeleton/index.d.ts +2 -0
  162. package/dist/components/skeleton/index.d.ts.map +1 -0
  163. package/dist/components/skeleton/index.js +3 -0
  164. package/dist/components/skeleton/index.js.map +1 -0
  165. package/dist/components/skeleton/skeleton.d.ts +5 -0
  166. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  167. package/dist/components/skeleton/skeleton.js +11 -0
  168. package/dist/components/skeleton/skeleton.js.map +1 -0
  169. package/dist/components/skeleton/skeleton.stories.js +345 -0
  170. package/dist/components/skeleton/skeleton.stories.js.map +1 -0
  171. package/dist/components/table/data-table.d.ts +70 -0
  172. package/dist/components/table/data-table.d.ts.map +1 -0
  173. package/dist/components/table/data-table.js +159 -0
  174. package/dist/components/table/data-table.js.map +1 -0
  175. package/dist/components/table/index.d.ts +6 -0
  176. package/dist/components/table/index.d.ts.map +1 -0
  177. package/dist/components/table/index.js +6 -0
  178. package/dist/components/table/index.js.map +1 -0
  179. package/dist/components/table/table-column-header.d.ts +79 -0
  180. package/dist/components/table/table-column-header.d.ts.map +1 -0
  181. package/dist/components/table/table-column-header.js +99 -0
  182. package/dist/components/table/table-column-header.js.map +1 -0
  183. package/dist/components/table/table-pagination.d.ts +53 -0
  184. package/dist/components/table/table-pagination.d.ts.map +1 -0
  185. package/dist/components/table/table-pagination.js +139 -0
  186. package/dist/components/table/table-pagination.js.map +1 -0
  187. package/dist/components/table/table.d.ts +11 -0
  188. package/dist/components/table/table.d.ts.map +1 -0
  189. package/dist/components/table/table.js +64 -0
  190. package/dist/components/table/table.js.map +1 -0
  191. package/dist/components/table/table.stories.columns.d.ts +24 -0
  192. package/dist/components/table/table.stories.columns.d.ts.map +1 -0
  193. package/dist/components/table/table.stories.columns.js +310 -0
  194. package/dist/components/table/table.stories.columns.js.map +1 -0
  195. package/dist/components/table/table.stories.components.d.ts +14 -0
  196. package/dist/components/table/table.stories.components.d.ts.map +1 -0
  197. package/dist/components/table/table.stories.components.js +107 -0
  198. package/dist/components/table/table.stories.components.js.map +1 -0
  199. package/dist/components/table/table.stories.data.d.ts +54 -0
  200. package/dist/components/table/table.stories.data.d.ts.map +1 -0
  201. package/dist/components/table/table.stories.data.js +122 -0
  202. package/dist/components/table/table.stories.data.js.map +1 -0
  203. package/dist/components/table/table.stories.js +302 -0
  204. package/dist/components/table/table.stories.js.map +1 -0
  205. package/dist/index.d.ts +1 -0
  206. package/dist/index.d.ts.map +1 -1
  207. package/dist/index.js +1 -0
  208. package/dist/index.js.map +1 -1
  209. package/dist/styles.css +1 -1
  210. package/index.css +79 -0
  211. package/package.json +6 -2
  212. package/src/components/avatar/avatar.tsx +1 -1
  213. package/src/components/button-group/button-group.stories.tsx +361 -0
  214. package/src/components/button-group/button-group.tsx +111 -0
  215. package/src/components/button-group/index.ts +1 -0
  216. package/src/components/code-block/code-block-footer.tsx +19 -2
  217. package/src/components/command/command.stories.tsx +133 -0
  218. package/src/components/command/command.tsx +265 -0
  219. package/src/components/command/index.ts +1 -0
  220. package/src/components/confetti/confetti.stories.tsx +38 -0
  221. package/src/components/confetti/confetti.tsx +140 -0
  222. package/src/components/confetti/index.ts +1 -0
  223. package/src/components/dashboard/components/analytics-content.tsx +102 -0
  224. package/src/components/dashboard/components/animated-logo.tsx +25 -0
  225. package/src/components/dashboard/components/complete-setup-button.tsx +30 -0
  226. package/src/components/dashboard/components/jobs-content.tsx +51 -0
  227. package/src/components/dashboard/components/mobile-menu.tsx +50 -0
  228. package/src/components/dashboard/components/organization-selector.tsx +51 -0
  229. package/src/components/dashboard/components/top-menu.tsx +26 -0
  230. package/src/components/dashboard/components/topbar-button.tsx +27 -0
  231. package/src/components/dashboard/components/topbar.tsx +40 -0
  232. package/src/components/dashboard/components/user-profile.tsx +90 -0
  233. package/src/components/dashboard/dashboard.stories.tsx +25 -0
  234. package/src/components/dashboard/dashboard.tsx +61 -0
  235. package/src/components/dashboard/index.ts +1 -0
  236. package/src/components/form/form.stories.tsx +5 -0
  237. package/src/components/icon/icon.tsx +7 -3
  238. package/src/components/index.ts +9 -0
  239. package/src/components/kbd/index.ts +1 -0
  240. package/src/components/kbd/kbd.stories.tsx +64 -0
  241. package/src/components/kbd/kbd.tsx +32 -0
  242. package/src/components/modal/modal.stories.tsx +58 -4
  243. package/src/components/search/index.ts +28 -0
  244. package/src/components/search/search-context.tsx +78 -0
  245. package/src/components/search/search-inline.tsx +107 -0
  246. package/src/components/search/search-modal.tsx +198 -0
  247. package/src/components/search/search-trigger.tsx +47 -0
  248. package/src/components/search/search-variants.ts +88 -0
  249. package/src/components/search/search.stories.tsx +392 -0
  250. package/src/components/search/search.tsx +47 -0
  251. package/src/components/select/index.ts +1 -0
  252. package/src/components/select/select.stories.tsx +207 -0
  253. package/src/components/select/select.tsx +220 -0
  254. package/src/components/shiny-text/index.ts +1 -0
  255. package/src/components/shiny-text/shiny-text.tsx +21 -0
  256. package/src/components/skeleton/index.ts +1 -0
  257. package/src/components/skeleton/skeleton.stories.tsx +178 -0
  258. package/src/components/skeleton/skeleton.tsx +14 -0
  259. package/src/components/table/data-table.tsx +254 -0
  260. package/src/components/table/index.ts +5 -0
  261. package/src/components/table/table-column-header.tsx +141 -0
  262. package/src/components/table/table-pagination.tsx +161 -0
  263. package/src/components/table/table.stories.columns.tsx +198 -0
  264. package/src/components/table/table.stories.components.tsx +104 -0
  265. package/src/components/table/table.stories.data.ts +117 -0
  266. package/src/components/table/table.stories.tsx +256 -0
  267. package/src/components/table/table.tsx +95 -0
  268. package/src/index.ts +1 -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":"AAAA;;CAEC;AAGD,SAAQA,KAAK,QAAO,mBAAmB;AACvC,SAAQC,IAAI,QAAO,kBAAkB;AAErC,SAAQC,iBAAiB,QAAO,wBAAwB;AAExD;;CAEC,GACD,OAAO,MAAMC,mBAAmB,IAA4B;QAC1D;YACEC,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,KAACC;oBAAIC,WAAU;8BAA4CF,IAAIG,QAAQ,CAAC;;QAE5E;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBAAK,KAACI;oBAAKF,WAAU;8BAAgBF,IAAIG,QAAQ,CAAC;;QAChE;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBAAK,KAACI;oBAAKF,WAAU;8BAAgBF,IAAIG,QAAQ,CAAC;;QAChE;KACD,CAAC;AAEF;;CAEC,GACD,OAAO,MAAME,oBAAoB,IAAyB;QACxD;YACEV,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,KAACC;oBAAIC,WAAU;8BAA4CF,IAAIG,QAAQ,CAAC;;QAE5E;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBAAK,KAACC;oBAAIC,WAAU;8BAAkCF,IAAIG,QAAQ,CAAC;;QACjF;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBAAK,KAACT;oBAAMe,SAAQ;8BAAWN,IAAIG,QAAQ,CAAC;;QAC1D;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC;gBACV,MAAMO,SAASP,IAAIG,QAAQ,CAAC;gBAC5B,qBACE,KAACZ;oBAAMe,SAASC,WAAW,WAAW,YAAY;8BAC/CA,OAAOC,MAAM,CAAC,GAAGC,WAAW,KAAKF,OAAOG,KAAK,CAAC;;YAGrD;QACF;KACD,CAAC;AAEF;;CAEC,GACD,OAAO,MAAMC,yBAAyB,IAAkC;QACtE;YACEhB,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,KAACC;oBAAIC,WAAU;8BAA4CF,IAAIG,QAAQ,CAAC;;QAE5E;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,KAACC;oBAAIC,WAAU;8BACZF,IAAIG,QAAQ,CAAC;;QAGpB;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACV;4BAAKoB,MAAK;4BAAgBV,WAAU;;sCACrC,KAACE;4BAAKF,WAAU;sCAAqBF,IAAIG,QAAQ,CAAC;;;;QAGxD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBAAK,KAACI;oBAAKF,WAAU;8BAAgBF,IAAIG,QAAQ,CAAC;;QAChE;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC,iBACV,MAACC;oBAAIC,WAAU;;sCACb,KAACD;4BAAIC,WAAU;;sCACf,KAACE;4BAAKF,WAAU;sCAAgBF,IAAIG,QAAQ,CAAC;;;;QAGnD;QACA;YACER,aAAa;YACbC,QAAQ,CAAC,EAACC,MAAM,EAAC,iBAAK,KAACJ;oBAAkBI,QAAQA;oBAAQC,OAAM;;YAC/DC,MAAM,CAAC,EAACC,GAAG,EAAC;gBACV,MAAMO,SAASP,IAAIG,QAAQ,CAAC;gBAC5B,MAAMU,aAAa;oBACjBC,QAAQ;oBACRC,WAAW;oBACXC,QAAQ;gBACV;gBACA,qBACE,KAACzB;oBAAMe,SAASO,UAAU,CAACN,OAAkC;8BAC1DA,OAAOC,MAAM,CAAC,GAAGC,WAAW,KAAKF,OAAOG,KAAK,CAAC;;YAGrD;QACF;KACD,CAAC;AAEF;;CAEC,GACD,OAAO,MAAMO,aAAavB,mBAAmB;AAC7C,OAAO,MAAMwB,cAAcb,oBAAoB;AAC/C,OAAO,MAAMc,mBAAmBR,yBAAyB"}
@@ -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