@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/table/table.stories.data.ts"],"sourcesContent":["/**\n * Data types, generation functions, and sample data for Table stories\n */\n\nexport type JobData = {\n id: string;\n name: string;\n total: number;\n success: number;\n failed: number;\n neutral: number;\n flaked: number;\n failureRate: string;\n flakeRate: string;\n repository?: string;\n branch?: string;\n};\n\nexport type SearchJobData = {\n id: string;\n name: string;\n total: number;\n success: number;\n failed: number;\n status: 'active' | 'completed' | 'failed';\n repository: string;\n branch: string;\n};\n\nexport type User = {\n id: string;\n name: string;\n email: string;\n role: string;\n status: 'active' | 'inactive';\n};\n\n/**\n * Generate mock job data\n */\nexport const generateJobData = (count: number): JobData[] => {\n return Array.from({length: count}, (_, i) => {\n const total = 40 + (i % 20); // keeps totals in a reasonable range\n const failed = i % 7;\n const flaked = i % 5;\n const neutral = i % 3;\n const success = total - failed - flaked - neutral;\n const failureRate = `${Math.round((failed / total) * 100)}%`;\n const flakeRate = `${Math.round((flaked / total) * 100)}%`;\n return {\n id: `job-${i + 1}`,\n name: 'Dependabot updates',\n total,\n success,\n failed,\n neutral,\n flaked,\n failureRate,\n flakeRate,\n repository: 'shipfox/tooling',\n branch: 'main',\n };\n });\n};\n\n/**\n * Generate mock search job data with varied properties\n */\nexport const generateSearchJobData = (count: number): SearchJobData[] => {\n const jobNames = [\n 'Build & Deploy',\n 'Run Tests',\n 'Code Quality Check',\n 'Security Scan',\n 'Integration Tests',\n 'Performance Tests',\n 'Deploy to Staging',\n 'Deploy to Production',\n 'Database Migration',\n 'Cache Warm-up',\n ];\n const repositories = ['shipfox/tooling', 'shipfox/web', 'shipfox/api', 'shipfox/mobile'];\n const branches = ['main', 'develop', 'staging', 'feat/new-feature'];\n const statuses: Array<'active' | 'completed' | 'failed'> = ['active', 'completed', 'failed'];\n\n return Array.from({length: count}, (_, i) => ({\n id: `job-${i + 1}`,\n name: jobNames[i % jobNames.length],\n total: Math.floor(Math.random() * 100) + 20,\n success: Math.floor(Math.random() * 80) + 10,\n failed: Math.floor(Math.random() * 20),\n status: statuses[i % statuses.length],\n repository: repositories[i % repositories.length],\n branch: branches[i % branches.length],\n }));\n};\n\n/**\n * Sample job data\n */\nexport const jobsData = generateJobData(100);\n\n/**\n * Sample search job data\n */\nexport const searchJobsData = generateSearchJobData(50);\n\n/**\n * Sample user data\n */\nexport const users: User[] = [\n {id: '1', name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active'},\n {id: '2', name: 'Jane Smith', email: 'jane@example.com', role: 'User', status: 'active'},\n {id: '3', name: 'Bob Johnson', email: 'bob@example.com', role: 'User', status: 'inactive'},\n {id: '4', name: 'Alice Williams', email: 'alice@example.com', role: 'Editor', status: 'active'},\n {id: '5', name: 'Charlie Brown', email: 'charlie@example.com', role: 'User', status: 'active'},\n];\n"],"names":["generateJobData","count","Array","from","length","_","i","total","failed","flaked","neutral","success","failureRate","Math","round","flakeRate","id","name","repository","branch","generateSearchJobData","jobNames","repositories","branches","statuses","floor","random","status","jobsData","searchJobsData","users","email","role"],"mappings":"AAAA;;CAEC,GAmCD;;CAEC,GACD,OAAO,MAAMA,kBAAkB,CAACC;IAC9B,OAAOC,MAAMC,IAAI,CAAC;QAACC,QAAQH;IAAK,GAAG,CAACI,GAAGC;QACrC,MAAMC,QAAQ,KAAMD,IAAI,IAAK,qCAAqC;QAClE,MAAME,SAASF,IAAI;QACnB,MAAMG,SAASH,IAAI;QACnB,MAAMI,UAAUJ,IAAI;QACpB,MAAMK,UAAUJ,QAAQC,SAASC,SAASC;QAC1C,MAAME,cAAc,GAAGC,KAAKC,KAAK,CAAC,AAACN,SAASD,QAAS,KAAK,CAAC,CAAC;QAC5D,MAAMQ,YAAY,GAAGF,KAAKC,KAAK,CAAC,AAACL,SAASF,QAAS,KAAK,CAAC,CAAC;QAC1D,OAAO;YACLS,IAAI,CAAC,IAAI,EAAEV,IAAI,GAAG;YAClBW,MAAM;YACNV;YACAI;YACAH;YACAE;YACAD;YACAG;YACAG;YACAG,YAAY;YACZC,QAAQ;QACV;IACF;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMC,wBAAwB,CAACnB;IACpC,MAAMoB,WAAW;QACf;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;KACD;IACD,MAAMC,eAAe;QAAC;QAAmB;QAAe;QAAe;KAAiB;IACxF,MAAMC,WAAW;QAAC;QAAQ;QAAW;QAAW;KAAmB;IACnE,MAAMC,WAAqD;QAAC;QAAU;QAAa;KAAS;IAE5F,OAAOtB,MAAMC,IAAI,CAAC;QAACC,QAAQH;IAAK,GAAG,CAACI,GAAGC,IAAO,CAAA;YAC5CU,IAAI,CAAC,IAAI,EAAEV,IAAI,GAAG;YAClBW,MAAMI,QAAQ,CAACf,IAAIe,SAASjB,MAAM,CAAC;YACnCG,OAAOM,KAAKY,KAAK,CAACZ,KAAKa,MAAM,KAAK,OAAO;YACzCf,SAASE,KAAKY,KAAK,CAACZ,KAAKa,MAAM,KAAK,MAAM;YAC1ClB,QAAQK,KAAKY,KAAK,CAACZ,KAAKa,MAAM,KAAK;YACnCC,QAAQH,QAAQ,CAAClB,IAAIkB,SAASpB,MAAM,CAAC;YACrCc,YAAYI,YAAY,CAAChB,IAAIgB,aAAalB,MAAM,CAAC;YACjDe,QAAQI,QAAQ,CAACjB,IAAIiB,SAASnB,MAAM,CAAC;QACvC,CAAA;AACF,EAAE;AAEF;;CAEC,GACD,OAAO,MAAMwB,WAAW5B,gBAAgB,KAAK;AAE7C;;CAEC,GACD,OAAO,MAAM6B,iBAAiBT,sBAAsB,IAAI;AAExD;;CAEC,GACD,OAAO,MAAMU,QAAgB;IAC3B;QAACd,IAAI;QAAKC,MAAM;QAAYc,OAAO;QAAoBC,MAAM;QAASL,QAAQ;IAAQ;IACtF;QAACX,IAAI;QAAKC,MAAM;QAAcc,OAAO;QAAoBC,MAAM;QAAQL,QAAQ;IAAQ;IACvF;QAACX,IAAI;QAAKC,MAAM;QAAec,OAAO;QAAmBC,MAAM;QAAQL,QAAQ;IAAU;IACzF;QAACX,IAAI;QAAKC,MAAM;QAAkBc,OAAO;QAAqBC,MAAM;QAAUL,QAAQ;IAAQ;IAC9F;QAACX,IAAI;QAAKC,MAAM;QAAiBc,OAAO;QAAuBC,MAAM;QAAQL,QAAQ;IAAQ;CAC9F,CAAC"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Search, SearchContent, SearchTrigger } from '../../components/search/index.js';
|
|
3
|
+
import { Header, Text } from '../../components/typography/index.js';
|
|
4
|
+
import { useMemo, useState } from 'react';
|
|
5
|
+
import { Button } from '../button/index.js';
|
|
6
|
+
import { Icon } from '../icon/index.js';
|
|
7
|
+
import { SearchInline } from '../search/search-inline.js';
|
|
8
|
+
import { DataTable } from './data-table.js';
|
|
9
|
+
import { jobColumns, searchJobColumns, userColumns } from './table.stories.columns.js';
|
|
10
|
+
import { JobsEmptyState, SearchModalContent } from './table.stories.components.js';
|
|
11
|
+
import { jobsData, searchJobsData, users } from './table.stories.data.js';
|
|
12
|
+
const meta = {
|
|
13
|
+
title: 'Components/Table',
|
|
14
|
+
parameters: {
|
|
15
|
+
layout: 'padded'
|
|
16
|
+
},
|
|
17
|
+
tags: [
|
|
18
|
+
'autodocs'
|
|
19
|
+
]
|
|
20
|
+
};
|
|
21
|
+
export default meta;
|
|
22
|
+
export const Simple = {
|
|
23
|
+
parameters: {
|
|
24
|
+
viewport: {
|
|
25
|
+
defaultViewport: 'extraLarge'
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
render: ()=>/*#__PURE__*/ _jsx("div", {
|
|
29
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
30
|
+
children: /*#__PURE__*/ _jsx(DataTable, {
|
|
31
|
+
columns: jobColumns.slice(0, 4),
|
|
32
|
+
data: jobsData.slice(0, 5),
|
|
33
|
+
pagination: false
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
export const WithPagination = {
|
|
38
|
+
parameters: {
|
|
39
|
+
viewport: {
|
|
40
|
+
defaultViewport: 'extraLarge'
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
render: ()=>/*#__PURE__*/ _jsx("div", {
|
|
44
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
45
|
+
children: /*#__PURE__*/ _jsx(DataTable, {
|
|
46
|
+
columns: jobColumns,
|
|
47
|
+
data: jobsData,
|
|
48
|
+
pagination: true,
|
|
49
|
+
pageSize: 10,
|
|
50
|
+
pageSizeOptions: [
|
|
51
|
+
5,
|
|
52
|
+
10,
|
|
53
|
+
20,
|
|
54
|
+
50
|
|
55
|
+
]
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
export const EmptyState = {
|
|
60
|
+
parameters: {
|
|
61
|
+
viewport: {
|
|
62
|
+
defaultViewport: 'extraLarge'
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
render: ()=>/*#__PURE__*/ _jsx("div", {
|
|
66
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
67
|
+
children: /*#__PURE__*/ _jsx(DataTable, {
|
|
68
|
+
columns: jobColumns,
|
|
69
|
+
data: [],
|
|
70
|
+
pagination: true,
|
|
71
|
+
emptyState: /*#__PURE__*/ _jsx(JobsEmptyState, {})
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
};
|
|
75
|
+
export const UserTable = {
|
|
76
|
+
parameters: {
|
|
77
|
+
viewport: {
|
|
78
|
+
defaultViewport: 'extraLarge'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
render: ()=>/*#__PURE__*/ _jsx("div", {
|
|
82
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
83
|
+
children: /*#__PURE__*/ _jsx(DataTable, {
|
|
84
|
+
columns: userColumns,
|
|
85
|
+
data: users,
|
|
86
|
+
pagination: false
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
};
|
|
90
|
+
export const CompactTable = {
|
|
91
|
+
parameters: {
|
|
92
|
+
viewport: {
|
|
93
|
+
defaultViewport: 'extraLarge'
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
render: ()=>{
|
|
97
|
+
const compactColumns = [
|
|
98
|
+
jobColumns[0],
|
|
99
|
+
jobColumns[1],
|
|
100
|
+
jobColumns[6]
|
|
101
|
+
];
|
|
102
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
103
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
104
|
+
children: /*#__PURE__*/ _jsx(DataTable, {
|
|
105
|
+
columns: compactColumns,
|
|
106
|
+
data: jobsData.slice(0, 5),
|
|
107
|
+
pagination: false
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export const JobsOverview = {
|
|
113
|
+
parameters: {
|
|
114
|
+
viewport: {
|
|
115
|
+
defaultViewport: 'extraLarge'
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
render: ()=>{
|
|
119
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
120
|
+
const filteredData = useMemo(()=>jobsData.filter((job)=>job.name.toLowerCase().includes(searchQuery.toLowerCase())), [
|
|
121
|
+
searchQuery
|
|
122
|
+
]);
|
|
123
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
124
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
127
|
+
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-12 sm:gap-0 p-12 border-t border-x border-border-neutral-base rounded-t-8 rounded-b-none bg-background-neutral-base",
|
|
128
|
+
children: [
|
|
129
|
+
/*#__PURE__*/ _jsx(Header, {
|
|
130
|
+
variant: "h3",
|
|
131
|
+
className: "text-foreground-neutral-base",
|
|
132
|
+
children: "Jobs overview"
|
|
133
|
+
}),
|
|
134
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
135
|
+
className: "flex items-center gap-12 sm:gap-16 w-full sm:w-auto",
|
|
136
|
+
children: [
|
|
137
|
+
/*#__PURE__*/ _jsx(SearchInline, {
|
|
138
|
+
placeholder: "Search...",
|
|
139
|
+
value: searchQuery,
|
|
140
|
+
onChange: (e)=>setSearchQuery(e.target.value),
|
|
141
|
+
onClear: ()=>setSearchQuery(''),
|
|
142
|
+
className: "flex-1 sm:w-240"
|
|
143
|
+
}),
|
|
144
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
145
|
+
variant: "secondary",
|
|
146
|
+
"aria-label": "Insert column left",
|
|
147
|
+
className: "shrink-0",
|
|
148
|
+
children: /*#__PURE__*/ _jsx(Icon, {
|
|
149
|
+
name: "insertColumnLeft",
|
|
150
|
+
className: "size-16 text-foreground-neutral-subtle"
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}),
|
|
157
|
+
/*#__PURE__*/ _jsx(DataTable, {
|
|
158
|
+
columns: jobColumns,
|
|
159
|
+
data: filteredData,
|
|
160
|
+
pagination: true,
|
|
161
|
+
pageSize: 10,
|
|
162
|
+
pageSizeOptions: [
|
|
163
|
+
10,
|
|
164
|
+
20,
|
|
165
|
+
50,
|
|
166
|
+
100
|
|
167
|
+
],
|
|
168
|
+
className: "rounded-t-none"
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
export const WithSearchModal = {
|
|
175
|
+
parameters: {
|
|
176
|
+
viewport: {
|
|
177
|
+
defaultViewport: 'extraLarge'
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
render: ()=>{
|
|
181
|
+
function SearchModalDemo() {
|
|
182
|
+
const [open, setOpen] = useState(false);
|
|
183
|
+
const [selectedJobId, setSelectedJobId] = useState(null);
|
|
184
|
+
const filteredData = useMemo(()=>selectedJobId ? searchJobsData.filter((job)=>job.id === selectedJobId) : searchJobsData, [
|
|
185
|
+
selectedJobId
|
|
186
|
+
]);
|
|
187
|
+
const selectedJob = useMemo(()=>selectedJobId ? searchJobsData.find((job)=>job.id === selectedJobId) : null, [
|
|
188
|
+
selectedJobId
|
|
189
|
+
]);
|
|
190
|
+
const handleSelectJob = (jobId)=>{
|
|
191
|
+
setSelectedJobId(jobId);
|
|
192
|
+
setOpen(false);
|
|
193
|
+
};
|
|
194
|
+
const handleClearSelection = ()=>{
|
|
195
|
+
setSelectedJobId(null);
|
|
196
|
+
};
|
|
197
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
198
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
199
|
+
children: [
|
|
200
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
201
|
+
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-12 sm:gap-0 p-12 border-t border-x border-border-neutral-base rounded-t-8 rounded-b-none bg-background-neutral-base",
|
|
202
|
+
children: [
|
|
203
|
+
/*#__PURE__*/ _jsx(Header, {
|
|
204
|
+
variant: "h3",
|
|
205
|
+
className: "text-foreground-neutral-base",
|
|
206
|
+
children: "Jobs Breakdown"
|
|
207
|
+
}),
|
|
208
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
209
|
+
className: "flex flex-col sm:flex-row items-stretch sm:items-center gap-12 sm:gap-16 w-full sm:w-auto",
|
|
210
|
+
children: [
|
|
211
|
+
selectedJob && /*#__PURE__*/ _jsx(Button, {
|
|
212
|
+
variant: "transparentMuted",
|
|
213
|
+
size: "sm",
|
|
214
|
+
onClick: handleClearSelection,
|
|
215
|
+
className: "text-foreground-neutral-muted gap-4 w-full sm:w-auto justify-center sm:justify-start",
|
|
216
|
+
iconRight: "closeLine",
|
|
217
|
+
children: "Clear filter"
|
|
218
|
+
}),
|
|
219
|
+
/*#__PURE__*/ _jsxs(Search, {
|
|
220
|
+
open: open,
|
|
221
|
+
onOpenChange: setOpen,
|
|
222
|
+
shortcutKey: "meta+k",
|
|
223
|
+
shouldFilter: false,
|
|
224
|
+
children: [
|
|
225
|
+
/*#__PURE__*/ _jsx(SearchTrigger, {
|
|
226
|
+
placeholder: "Filter jobs...",
|
|
227
|
+
className: "w-full sm:w-280"
|
|
228
|
+
}),
|
|
229
|
+
/*#__PURE__*/ _jsx(SearchContent, {
|
|
230
|
+
"aria-describedby": undefined,
|
|
231
|
+
children: /*#__PURE__*/ _jsx(SearchModalContent, {
|
|
232
|
+
onSelectJob: handleSelectJob
|
|
233
|
+
})
|
|
234
|
+
})
|
|
235
|
+
]
|
|
236
|
+
})
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
}),
|
|
241
|
+
/*#__PURE__*/ _jsx(DataTable, {
|
|
242
|
+
columns: searchJobColumns,
|
|
243
|
+
data: filteredData,
|
|
244
|
+
pagination: true,
|
|
245
|
+
pageSize: 10,
|
|
246
|
+
pageSizeOptions: [
|
|
247
|
+
10,
|
|
248
|
+
25,
|
|
249
|
+
50
|
|
250
|
+
],
|
|
251
|
+
className: "rounded-t-none"
|
|
252
|
+
})
|
|
253
|
+
]
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
return /*#__PURE__*/ _jsx(SearchModalDemo, {});
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
export const WithRowSelection = {
|
|
260
|
+
parameters: {
|
|
261
|
+
viewport: {
|
|
262
|
+
defaultViewport: 'extraLarge'
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
render: ()=>/*#__PURE__*/ _jsx("div", {
|
|
266
|
+
className: "w-full min-h-screen bg-background-neutral-background p-24",
|
|
267
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
268
|
+
className: "space-y-16",
|
|
269
|
+
children: [
|
|
270
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
271
|
+
children: [
|
|
272
|
+
/*#__PURE__*/ _jsx(Header, {
|
|
273
|
+
variant: "h3",
|
|
274
|
+
className: "text-foreground-neutral-base mb-8",
|
|
275
|
+
children: "Selectable Rows"
|
|
276
|
+
}),
|
|
277
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
278
|
+
size: "sm",
|
|
279
|
+
className: "text-foreground-neutral-muted",
|
|
280
|
+
children: "Use the checkboxes to select rows. The pagination footer shows the count of selected rows."
|
|
281
|
+
})
|
|
282
|
+
]
|
|
283
|
+
}),
|
|
284
|
+
/*#__PURE__*/ _jsx(DataTable, {
|
|
285
|
+
columns: jobColumns,
|
|
286
|
+
data: jobsData,
|
|
287
|
+
pagination: true,
|
|
288
|
+
pageSize: 10,
|
|
289
|
+
pageSizeOptions: [
|
|
290
|
+
5,
|
|
291
|
+
10,
|
|
292
|
+
20,
|
|
293
|
+
50
|
|
294
|
+
],
|
|
295
|
+
showSelectedCount: true
|
|
296
|
+
})
|
|
297
|
+
]
|
|
298
|
+
})
|
|
299
|
+
})
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
//# sourceMappingURL=table.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/table/table.stories.tsx"],"sourcesContent":["import type {Meta, StoryObj} from '@storybook/react';\nimport type {ColumnDef} from '@tanstack/react-table';\nimport {Search, SearchContent, SearchTrigger} from 'components/search';\nimport {Header, Text} from 'components/typography';\nimport {useMemo, useState} from 'react';\nimport {Button} from '../button';\nimport {Icon} from '../icon';\nimport {SearchInline} from '../search/search-inline';\nimport {DataTable} from './data-table';\nimport {jobColumns, searchJobColumns, userColumns} from './table.stories.columns';\nimport {JobsEmptyState, SearchModalContent} from './table.stories.components';\nimport {type JobData, jobsData, searchJobsData, users} from './table.stories.data';\n\nconst meta = {\n title: 'Components/Table',\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n} satisfies Meta;\n\nexport default meta;\ntype Story = StoryObj;\n\nexport const Simple: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <DataTable columns={jobColumns.slice(0, 4)} data={jobsData.slice(0, 5)} pagination={false} />\n </div>\n ),\n};\n\nexport const WithPagination: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <DataTable\n columns={jobColumns}\n data={jobsData}\n pagination={true}\n pageSize={10}\n pageSizeOptions={[5, 10, 20, 50]}\n />\n </div>\n ),\n};\n\nexport const EmptyState: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <DataTable columns={jobColumns} data={[]} pagination={true} emptyState={<JobsEmptyState />} />\n </div>\n ),\n};\n\nexport const UserTable: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <DataTable columns={userColumns} data={users} pagination={false} />\n </div>\n ),\n};\n\nexport const CompactTable: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => {\n const compactColumns: ColumnDef<JobData>[] = [\n jobColumns[0], // name\n jobColumns[1], // total\n jobColumns[6], // failureRate\n ];\n\n return (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <DataTable columns={compactColumns} data={jobsData.slice(0, 5)} pagination={false} />\n </div>\n );\n },\n};\n\nexport const JobsOverview: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => {\n const [searchQuery, setSearchQuery] = useState('');\n\n const filteredData = useMemo(\n () => jobsData.filter((job) => job.name.toLowerCase().includes(searchQuery.toLowerCase())),\n [searchQuery],\n );\n\n return (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-12 sm:gap-0 p-12 border-t border-x border-border-neutral-base rounded-t-8 rounded-b-none bg-background-neutral-base\">\n <Header variant=\"h3\" className=\"text-foreground-neutral-base\">\n Jobs overview\n </Header>\n\n <div className=\"flex items-center gap-12 sm:gap-16 w-full sm:w-auto\">\n <SearchInline\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onClear={() => setSearchQuery('')}\n className=\"flex-1 sm:w-240\"\n />\n <Button variant=\"secondary\" aria-label=\"Insert column left\" className=\"shrink-0\">\n <Icon name=\"insertColumnLeft\" className=\"size-16 text-foreground-neutral-subtle\" />\n </Button>\n </div>\n </div>\n\n <DataTable\n columns={jobColumns}\n data={filteredData}\n pagination={true}\n pageSize={10}\n pageSizeOptions={[10, 20, 50, 100]}\n className=\"rounded-t-none\"\n />\n </div>\n );\n },\n};\n\nexport const WithSearchModal: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => {\n function SearchModalDemo() {\n const [open, setOpen] = useState(false);\n const [selectedJobId, setSelectedJobId] = useState<string | null>(null);\n\n const filteredData = useMemo(\n () =>\n selectedJobId ? searchJobsData.filter((job) => job.id === selectedJobId) : searchJobsData,\n [selectedJobId],\n );\n\n const selectedJob = useMemo(\n () => (selectedJobId ? searchJobsData.find((job) => job.id === selectedJobId) : null),\n [selectedJobId],\n );\n\n const handleSelectJob = (jobId: string) => {\n setSelectedJobId(jobId);\n setOpen(false);\n };\n\n const handleClearSelection = () => {\n setSelectedJobId(null);\n };\n\n return (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-12 sm:gap-0 p-12 border-t border-x border-border-neutral-base rounded-t-8 rounded-b-none bg-background-neutral-base\">\n <Header variant=\"h3\" className=\"text-foreground-neutral-base\">\n Jobs Breakdown\n </Header>\n\n <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-12 sm:gap-16 w-full sm:w-auto\">\n {selectedJob && (\n <Button\n variant=\"transparentMuted\"\n size=\"sm\"\n onClick={handleClearSelection}\n className=\"text-foreground-neutral-muted gap-4 w-full sm:w-auto justify-center sm:justify-start\"\n iconRight=\"closeLine\"\n >\n Clear filter\n </Button>\n )}\n <Search open={open} onOpenChange={setOpen} shortcutKey=\"meta+k\" shouldFilter={false}>\n <SearchTrigger placeholder=\"Filter jobs...\" className=\"w-full sm:w-280\" />\n <SearchContent aria-describedby={undefined}>\n <SearchModalContent onSelectJob={handleSelectJob} />\n </SearchContent>\n </Search>\n </div>\n </div>\n\n <DataTable\n columns={searchJobColumns}\n data={filteredData}\n pagination={true}\n pageSize={10}\n pageSizeOptions={[10, 25, 50]}\n className=\"rounded-t-none\"\n />\n </div>\n );\n }\n\n return <SearchModalDemo />;\n },\n};\n\nexport const WithRowSelection: Story = {\n parameters: {\n viewport: {\n defaultViewport: 'extraLarge',\n },\n },\n render: () => (\n <div className=\"w-full min-h-screen bg-background-neutral-background p-24\">\n <div className=\"space-y-16\">\n <div>\n <Header variant=\"h3\" className=\"text-foreground-neutral-base mb-8\">\n Selectable Rows\n </Header>\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n Use the checkboxes to select rows. The pagination footer shows the count of selected\n rows.\n </Text>\n </div>\n <DataTable\n columns={jobColumns}\n data={jobsData}\n pagination={true}\n pageSize={10}\n pageSizeOptions={[5, 10, 20, 50]}\n showSelectedCount={true}\n />\n </div>\n </div>\n ),\n};\n"],"names":["Search","SearchContent","SearchTrigger","Header","Text","useMemo","useState","Button","Icon","SearchInline","DataTable","jobColumns","searchJobColumns","userColumns","JobsEmptyState","SearchModalContent","jobsData","searchJobsData","users","meta","title","parameters","layout","tags","Simple","viewport","defaultViewport","render","div","className","columns","slice","data","pagination","WithPagination","pageSize","pageSizeOptions","EmptyState","emptyState","UserTable","CompactTable","compactColumns","JobsOverview","searchQuery","setSearchQuery","filteredData","filter","job","name","toLowerCase","includes","variant","placeholder","value","onChange","e","target","onClear","aria-label","WithSearchModal","SearchModalDemo","open","setOpen","selectedJobId","setSelectedJobId","id","selectedJob","find","handleSelectJob","jobId","handleClearSelection","size","onClick","iconRight","onOpenChange","shortcutKey","shouldFilter","aria-describedby","undefined","onSelectJob","WithRowSelection","showSelectedCount"],"mappings":"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"}
|