From 5f9f15842bbbac4ab2df230d3f93176c8d9b5341 Mon Sep 17 00:00:00 2001 From: Jeremy Anderson Date: Tue, 21 Jul 2026 21:30:46 -0400 Subject: [PATCH] =?UTF-8?q?A=20Cockpit=20module=20for=20managing=20Kata=20?= =?UTF-8?q?Containers=20=E2=80=94=20lightweight=20VM-based=20container=20s?= =?UTF-8?q?andboxes=20that=20provide=20hardware-level=20isolation=20for=20?= =?UTF-8?q?container=20workloads.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 190 + README.md | 460 ++ cockpit-kata/README.md | 93 + cockpit-kata/build.sh | 18 + cockpit-kata/cockpit.d.ts | 109 + .../dist/components/kata/BuildGuide.d.ts | 3 + .../dist/components/kata/BuildGuide.d.ts.map | 1 + .../dist/components/kata/Configuration.d.ts | 3 + .../components/kata/Configuration.d.ts.map | 1 + .../dist/components/kata/ExportImage.d.ts | 3 + .../dist/components/kata/ExportImage.d.ts.map | 1 + .../dist/components/kata/ImportImage.d.ts | 3 + .../dist/components/kata/ImportImage.d.ts.map | 1 + .../dist/components/kata/KataModule.d.ts | 3 + .../dist/components/kata/KataModule.d.ts.map | 1 + .../dist/components/kata/KernelDetail.d.ts | 3 + .../components/kata/KernelDetail.d.ts.map | 1 + .../components/kata/MetricsDashboard.d.ts | 3 + .../components/kata/MetricsDashboard.d.ts.map | 1 + .../dist/components/kata/SandboxDetail.d.ts | 9 + .../components/kata/SandboxDetail.d.ts.map | 1 + .../dist/components/kata/SandboxList.d.ts | 8 + .../dist/components/kata/SandboxList.d.ts.map | 1 + .../dist/components/ui/accordion.d.ts | 8 + .../dist/components/ui/accordion.d.ts.map | 1 + cockpit-kata/dist/components/ui/badge.d.ts | 10 + .../dist/components/ui/badge.d.ts.map | 1 + cockpit-kata/dist/components/ui/button.d.ts | 11 + .../dist/components/ui/button.d.ts.map | 1 + cockpit-kata/dist/components/ui/card.d.ts | 10 + cockpit-kata/dist/components/ui/card.d.ts.map | 1 + cockpit-kata/dist/components/ui/checkbox.d.ts | 5 + .../dist/components/ui/checkbox.d.ts.map | 1 + cockpit-kata/dist/components/ui/dialog.d.ts | 16 + .../dist/components/ui/dialog.d.ts.map | 1 + .../dist/components/ui/dropdown-menu.d.ts | 26 + .../dist/components/ui/dropdown-menu.d.ts.map | 1 + cockpit-kata/dist/components/ui/input.d.ts | 4 + .../dist/components/ui/input.d.ts.map | 1 + cockpit-kata/dist/components/ui/label.d.ts | 5 + .../dist/components/ui/label.d.ts.map | 1 + cockpit-kata/dist/components/ui/progress.d.ts | 5 + .../dist/components/ui/progress.d.ts.map | 1 + .../dist/components/ui/scroll-area.d.ts | 6 + .../dist/components/ui/scroll-area.d.ts.map | 1 + cockpit-kata/dist/components/ui/select.d.ts | 16 + .../dist/components/ui/select.d.ts.map | 1 + .../dist/components/ui/separator.d.ts | 5 + .../dist/components/ui/separator.d.ts.map | 1 + cockpit-kata/dist/components/ui/slider.d.ts | 5 + .../dist/components/ui/slider.d.ts.map | 1 + cockpit-kata/dist/components/ui/switch.d.ts | 5 + .../dist/components/ui/switch.d.ts.map | 1 + cockpit-kata/dist/components/ui/table.d.ts | 11 + .../dist/components/ui/table.d.ts.map | 1 + cockpit-kata/dist/components/ui/tabs.d.ts | 8 + cockpit-kata/dist/components/ui/tabs.d.ts.map | 1 + cockpit-kata/dist/components/ui/textarea.d.ts | 4 + .../dist/components/ui/textarea.d.ts.map | 1 + cockpit-kata/dist/components/ui/toast.d.ts | 16 + .../dist/components/ui/toast.d.ts.map | 1 + cockpit-kata/dist/hooks/use-toast.d.ts | 45 + cockpit-kata/dist/hooks/use-toast.d.ts.map | 1 + cockpit-kata/dist/index.css | 2661 ++++++++++ cockpit-kata/dist/index.css.map | 1 + cockpit-kata/dist/index.d.ts | 13 + cockpit-kata/dist/index.d.ts.map | 1 + cockpit-kata/dist/index.js | 3 + cockpit-kata/dist/index.js.LICENSE.txt | 46 + cockpit-kata/dist/index.js.map | 1 + cockpit-kata/dist/lib/backend/adapter.d.ts | 45 + .../dist/lib/backend/adapter.d.ts.map | 1 + .../dist/lib/backend/cockpit-api.d.ts | 47 + .../dist/lib/backend/cockpit-api.d.ts.map | 1 + cockpit-kata/dist/lib/kata-mock.d.ts | 288 ++ cockpit-kata/dist/lib/kata-mock.d.ts.map | 1 + cockpit-kata/dist/lib/utils.d.ts | 3 + cockpit-kata/dist/lib/utils.d.ts.map | 1 + cockpit-kata/dist/manifest.json | 16 + cockpit-kata/manifest.json | 16 + cockpit-kata/package-lock.json | 4440 +++++++++++++++++ cockpit-kata/package.json | 54 + cockpit-kata/postcss.config.js | 6 + cockpit-kata/src/cockpit-stub.js | 35 + .../src/components/kata/BuildGuide.tsx | 582 +++ .../src/components/kata/Configuration.tsx | 633 +++ .../src/components/kata/ExportImage.tsx | 489 ++ .../src/components/kata/ImportImage.tsx | 1542 ++++++ .../src/components/kata/KataModule.tsx | 200 + .../src/components/kata/KernelDetail.tsx | 957 ++++ .../src/components/kata/MetricsDashboard.tsx | 358 ++ .../src/components/kata/SandboxDetail.tsx | 329 ++ .../src/components/kata/SandboxList.tsx | 314 ++ cockpit-kata/src/components/ui/accordion.tsx | 65 + cockpit-kata/src/components/ui/badge.tsx | 46 + cockpit-kata/src/components/ui/button.tsx | 59 + cockpit-kata/src/components/ui/card.tsx | 92 + cockpit-kata/src/components/ui/checkbox.tsx | 31 + cockpit-kata/src/components/ui/dialog.tsx | 142 + .../src/components/ui/dropdown-menu.tsx | 256 + cockpit-kata/src/components/ui/input.tsx | 21 + cockpit-kata/src/components/ui/label.tsx | 23 + cockpit-kata/src/components/ui/progress.tsx | 30 + .../src/components/ui/scroll-area.tsx | 57 + cockpit-kata/src/components/ui/select.tsx | 184 + cockpit-kata/src/components/ui/separator.tsx | 27 + cockpit-kata/src/components/ui/slider.tsx | 62 + cockpit-kata/src/components/ui/switch.tsx | 30 + cockpit-kata/src/components/ui/table.tsx | 115 + cockpit-kata/src/components/ui/tabs.tsx | 65 + cockpit-kata/src/components/ui/textarea.tsx | 18 + cockpit-kata/src/components/ui/toast.tsx | 128 + cockpit-kata/src/globals.css | 37 + cockpit-kata/src/hooks/use-toast.ts | 193 + cockpit-kata/src/index.tsx | 26 + cockpit-kata/src/kata.css | 331 ++ cockpit-kata/src/lib/backend/adapter.ts | 247 + cockpit-kata/src/lib/backend/cockpit-api.ts | 886 ++++ cockpit-kata/src/lib/kata-mock.ts | 1344 +++++ cockpit-kata/src/lib/utils.ts | 6 + cockpit-kata/tailwind.config.js | 52 + cockpit-kata/tsconfig.json | 24 + cockpit-kata/webpack.config.js | 68 + components.json | 21 + eslint.config.mjs | 50 + installer.sh | 728 +++ next.config.ts | 12 + package.json | 94 + postcss.config.mjs | 5 + public/logo.svg | 29 + public/robots.txt | 14 + qcrows-export | 873 ++++ qcrows-initrd-regen | 1336 +++++ qcrows-inspect | 121 + qcrows-pack | 698 +++ qcrows-spec.md | 808 +++ qcrows-verify | 198 + quickstart.md | 306 ++ src/app/api/kata/validate/route.ts | 70 + src/app/api/route.ts | 5 + src/app/globals.css | 122 + src/app/layout.tsx | 53 + src/app/page.tsx | 7 + src/components/kata/BuildGuide.tsx | 582 +++ src/components/kata/Configuration.tsx | 633 +++ src/components/kata/ExportImage.tsx | 489 ++ src/components/kata/ImportImage.tsx | 1542 ++++++ src/components/kata/KataModule.tsx | 200 + src/components/kata/KernelDetail.tsx | 957 ++++ src/components/kata/MetricsDashboard.tsx | 358 ++ src/components/kata/SandboxDetail.tsx | 329 ++ src/components/kata/SandboxList.tsx | 314 ++ src/components/ui/accordion.tsx | 66 + src/components/ui/alert-dialog.tsx | 157 + src/components/ui/alert.tsx | 66 + src/components/ui/aspect-ratio.tsx | 11 + src/components/ui/avatar.tsx | 53 + src/components/ui/badge.tsx | 46 + src/components/ui/breadcrumb.tsx | 109 + src/components/ui/button.tsx | 59 + src/components/ui/calendar.tsx | 213 + src/components/ui/card.tsx | 92 + src/components/ui/carousel.tsx | 241 + src/components/ui/chart.tsx | 353 ++ src/components/ui/checkbox.tsx | 32 + src/components/ui/collapsible.tsx | 33 + src/components/ui/command.tsx | 184 + src/components/ui/context-menu.tsx | 252 + src/components/ui/dialog.tsx | 143 + src/components/ui/drawer.tsx | 135 + src/components/ui/dropdown-menu.tsx | 257 + src/components/ui/form.tsx | 167 + src/components/ui/hover-card.tsx | 44 + src/components/ui/input-otp.tsx | 77 + src/components/ui/input.tsx | 21 + src/components/ui/label.tsx | 24 + src/components/ui/menubar.tsx | 276 + src/components/ui/navigation-menu.tsx | 168 + src/components/ui/pagination.tsx | 127 + src/components/ui/popover.tsx | 48 + src/components/ui/progress.tsx | 31 + src/components/ui/radio-group.tsx | 45 + src/components/ui/resizable.tsx | 56 + src/components/ui/scroll-area.tsx | 58 + src/components/ui/select.tsx | 185 + src/components/ui/separator.tsx | 28 + src/components/ui/sheet.tsx | 139 + src/components/ui/sidebar.tsx | 726 +++ src/components/ui/skeleton.tsx | 13 + src/components/ui/slider.tsx | 63 + src/components/ui/sonner.tsx | 25 + src/components/ui/switch.tsx | 31 + src/components/ui/table.tsx | 116 + src/components/ui/tabs.tsx | 66 + src/components/ui/textarea.tsx | 18 + src/components/ui/toast.tsx | 129 + src/components/ui/toaster.tsx | 35 + src/components/ui/toggle-group.tsx | 73 + src/components/ui/toggle.tsx | 47 + src/components/ui/tooltip.tsx | 61 + src/hooks/use-mobile.ts | 19 + src/hooks/use-toast.ts | 194 + src/lib/backend/adapter.ts | 247 + src/lib/backend/cockpit-api.ts | 881 ++++ src/lib/db.ts | 13 + src/lib/kata-mock.ts | 1343 +++++ src/lib/utils.ts | 6 + tailwind.config.ts | 64 + tsconfig.json | 42 + 209 files changed, 38069 insertions(+) create mode 100755 LICENSE create mode 100755 README.md create mode 100755 cockpit-kata/README.md create mode 100755 cockpit-kata/build.sh create mode 100755 cockpit-kata/cockpit.d.ts create mode 100644 cockpit-kata/dist/components/kata/BuildGuide.d.ts create mode 100644 cockpit-kata/dist/components/kata/BuildGuide.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/Configuration.d.ts create mode 100644 cockpit-kata/dist/components/kata/Configuration.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/ExportImage.d.ts create mode 100644 cockpit-kata/dist/components/kata/ExportImage.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/ImportImage.d.ts create mode 100644 cockpit-kata/dist/components/kata/ImportImage.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/KataModule.d.ts create mode 100644 cockpit-kata/dist/components/kata/KataModule.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/KernelDetail.d.ts create mode 100644 cockpit-kata/dist/components/kata/KernelDetail.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/MetricsDashboard.d.ts create mode 100644 cockpit-kata/dist/components/kata/MetricsDashboard.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/SandboxDetail.d.ts create mode 100644 cockpit-kata/dist/components/kata/SandboxDetail.d.ts.map create mode 100644 cockpit-kata/dist/components/kata/SandboxList.d.ts create mode 100644 cockpit-kata/dist/components/kata/SandboxList.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/accordion.d.ts create mode 100644 cockpit-kata/dist/components/ui/accordion.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/badge.d.ts create mode 100644 cockpit-kata/dist/components/ui/badge.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/button.d.ts create mode 100644 cockpit-kata/dist/components/ui/button.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/card.d.ts create mode 100644 cockpit-kata/dist/components/ui/card.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/checkbox.d.ts create mode 100644 cockpit-kata/dist/components/ui/checkbox.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/dialog.d.ts create mode 100644 cockpit-kata/dist/components/ui/dialog.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/dropdown-menu.d.ts create mode 100644 cockpit-kata/dist/components/ui/dropdown-menu.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/input.d.ts create mode 100644 cockpit-kata/dist/components/ui/input.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/label.d.ts create mode 100644 cockpit-kata/dist/components/ui/label.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/progress.d.ts create mode 100644 cockpit-kata/dist/components/ui/progress.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/scroll-area.d.ts create mode 100644 cockpit-kata/dist/components/ui/scroll-area.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/select.d.ts create mode 100644 cockpit-kata/dist/components/ui/select.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/separator.d.ts create mode 100644 cockpit-kata/dist/components/ui/separator.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/slider.d.ts create mode 100644 cockpit-kata/dist/components/ui/slider.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/switch.d.ts create mode 100644 cockpit-kata/dist/components/ui/switch.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/table.d.ts create mode 100644 cockpit-kata/dist/components/ui/table.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/tabs.d.ts create mode 100644 cockpit-kata/dist/components/ui/tabs.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/textarea.d.ts create mode 100644 cockpit-kata/dist/components/ui/textarea.d.ts.map create mode 100644 cockpit-kata/dist/components/ui/toast.d.ts create mode 100644 cockpit-kata/dist/components/ui/toast.d.ts.map create mode 100644 cockpit-kata/dist/hooks/use-toast.d.ts create mode 100644 cockpit-kata/dist/hooks/use-toast.d.ts.map create mode 100644 cockpit-kata/dist/index.css create mode 100644 cockpit-kata/dist/index.css.map create mode 100644 cockpit-kata/dist/index.d.ts create mode 100644 cockpit-kata/dist/index.d.ts.map create mode 100644 cockpit-kata/dist/index.js create mode 100644 cockpit-kata/dist/index.js.LICENSE.txt create mode 100644 cockpit-kata/dist/index.js.map create mode 100644 cockpit-kata/dist/lib/backend/adapter.d.ts create mode 100644 cockpit-kata/dist/lib/backend/adapter.d.ts.map create mode 100644 cockpit-kata/dist/lib/backend/cockpit-api.d.ts create mode 100644 cockpit-kata/dist/lib/backend/cockpit-api.d.ts.map create mode 100644 cockpit-kata/dist/lib/kata-mock.d.ts create mode 100644 cockpit-kata/dist/lib/kata-mock.d.ts.map create mode 100644 cockpit-kata/dist/lib/utils.d.ts create mode 100644 cockpit-kata/dist/lib/utils.d.ts.map create mode 100644 cockpit-kata/dist/manifest.json create mode 100755 cockpit-kata/manifest.json create mode 100644 cockpit-kata/package-lock.json create mode 100644 cockpit-kata/package.json create mode 100644 cockpit-kata/postcss.config.js create mode 100644 cockpit-kata/src/cockpit-stub.js create mode 100755 cockpit-kata/src/components/kata/BuildGuide.tsx create mode 100755 cockpit-kata/src/components/kata/Configuration.tsx create mode 100755 cockpit-kata/src/components/kata/ExportImage.tsx create mode 100755 cockpit-kata/src/components/kata/ImportImage.tsx create mode 100755 cockpit-kata/src/components/kata/KataModule.tsx create mode 100755 cockpit-kata/src/components/kata/KernelDetail.tsx create mode 100755 cockpit-kata/src/components/kata/MetricsDashboard.tsx create mode 100755 cockpit-kata/src/components/kata/SandboxDetail.tsx create mode 100755 cockpit-kata/src/components/kata/SandboxList.tsx create mode 100755 cockpit-kata/src/components/ui/accordion.tsx create mode 100755 cockpit-kata/src/components/ui/badge.tsx create mode 100755 cockpit-kata/src/components/ui/button.tsx create mode 100755 cockpit-kata/src/components/ui/card.tsx create mode 100755 cockpit-kata/src/components/ui/checkbox.tsx create mode 100755 cockpit-kata/src/components/ui/dialog.tsx create mode 100755 cockpit-kata/src/components/ui/dropdown-menu.tsx create mode 100755 cockpit-kata/src/components/ui/input.tsx create mode 100755 cockpit-kata/src/components/ui/label.tsx create mode 100755 cockpit-kata/src/components/ui/progress.tsx create mode 100755 cockpit-kata/src/components/ui/scroll-area.tsx create mode 100755 cockpit-kata/src/components/ui/select.tsx create mode 100755 cockpit-kata/src/components/ui/separator.tsx create mode 100755 cockpit-kata/src/components/ui/slider.tsx create mode 100755 cockpit-kata/src/components/ui/switch.tsx create mode 100755 cockpit-kata/src/components/ui/table.tsx create mode 100755 cockpit-kata/src/components/ui/tabs.tsx create mode 100755 cockpit-kata/src/components/ui/textarea.tsx create mode 100755 cockpit-kata/src/components/ui/toast.tsx create mode 100644 cockpit-kata/src/globals.css create mode 100755 cockpit-kata/src/hooks/use-toast.ts create mode 100755 cockpit-kata/src/index.tsx create mode 100644 cockpit-kata/src/kata.css create mode 100755 cockpit-kata/src/lib/backend/adapter.ts create mode 100755 cockpit-kata/src/lib/backend/cockpit-api.ts create mode 100755 cockpit-kata/src/lib/kata-mock.ts create mode 100755 cockpit-kata/src/lib/utils.ts create mode 100644 cockpit-kata/tailwind.config.js create mode 100755 cockpit-kata/tsconfig.json create mode 100755 cockpit-kata/webpack.config.js create mode 100755 components.json create mode 100755 eslint.config.mjs create mode 100755 installer.sh create mode 100755 next.config.ts create mode 100755 package.json create mode 100755 postcss.config.mjs create mode 100755 public/logo.svg create mode 100755 public/robots.txt create mode 100755 qcrows-export create mode 100755 qcrows-initrd-regen create mode 100755 qcrows-inspect create mode 100755 qcrows-pack create mode 100755 qcrows-spec.md create mode 100755 qcrows-verify create mode 100755 quickstart.md create mode 100755 src/app/api/kata/validate/route.ts create mode 100755 src/app/api/route.ts create mode 100755 src/app/globals.css create mode 100755 src/app/layout.tsx create mode 100755 src/app/page.tsx create mode 100755 src/components/kata/BuildGuide.tsx create mode 100755 src/components/kata/Configuration.tsx create mode 100755 src/components/kata/ExportImage.tsx create mode 100755 src/components/kata/ImportImage.tsx create mode 100755 src/components/kata/KataModule.tsx create mode 100755 src/components/kata/KernelDetail.tsx create mode 100755 src/components/kata/MetricsDashboard.tsx create mode 100755 src/components/kata/SandboxDetail.tsx create mode 100755 src/components/kata/SandboxList.tsx create mode 100755 src/components/ui/accordion.tsx create mode 100755 src/components/ui/alert-dialog.tsx create mode 100755 src/components/ui/alert.tsx create mode 100755 src/components/ui/aspect-ratio.tsx create mode 100755 src/components/ui/avatar.tsx create mode 100755 src/components/ui/badge.tsx create mode 100755 src/components/ui/breadcrumb.tsx create mode 100755 src/components/ui/button.tsx create mode 100755 src/components/ui/calendar.tsx create mode 100755 src/components/ui/card.tsx create mode 100755 src/components/ui/carousel.tsx create mode 100755 src/components/ui/chart.tsx create mode 100755 src/components/ui/checkbox.tsx create mode 100755 src/components/ui/collapsible.tsx create mode 100755 src/components/ui/command.tsx create mode 100755 src/components/ui/context-menu.tsx create mode 100755 src/components/ui/dialog.tsx create mode 100755 src/components/ui/drawer.tsx create mode 100755 src/components/ui/dropdown-menu.tsx create mode 100755 src/components/ui/form.tsx create mode 100755 src/components/ui/hover-card.tsx create mode 100755 src/components/ui/input-otp.tsx create mode 100755 src/components/ui/input.tsx create mode 100755 src/components/ui/label.tsx create mode 100755 src/components/ui/menubar.tsx create mode 100755 src/components/ui/navigation-menu.tsx create mode 100755 src/components/ui/pagination.tsx create mode 100755 src/components/ui/popover.tsx create mode 100755 src/components/ui/progress.tsx create mode 100755 src/components/ui/radio-group.tsx create mode 100755 src/components/ui/resizable.tsx create mode 100755 src/components/ui/scroll-area.tsx create mode 100755 src/components/ui/select.tsx create mode 100755 src/components/ui/separator.tsx create mode 100755 src/components/ui/sheet.tsx create mode 100755 src/components/ui/sidebar.tsx create mode 100755 src/components/ui/skeleton.tsx create mode 100755 src/components/ui/slider.tsx create mode 100755 src/components/ui/sonner.tsx create mode 100755 src/components/ui/switch.tsx create mode 100755 src/components/ui/table.tsx create mode 100755 src/components/ui/tabs.tsx create mode 100755 src/components/ui/textarea.tsx create mode 100755 src/components/ui/toast.tsx create mode 100755 src/components/ui/toaster.tsx create mode 100755 src/components/ui/toggle-group.tsx create mode 100755 src/components/ui/toggle.tsx create mode 100755 src/components/ui/tooltip.tsx create mode 100755 src/hooks/use-mobile.ts create mode 100755 src/hooks/use-toast.ts create mode 100755 src/lib/backend/adapter.ts create mode 100755 src/lib/backend/cockpit-api.ts create mode 100755 src/lib/db.ts create mode 100755 src/lib/kata-mock.ts create mode 100755 src/lib/utils.ts create mode 100755 tailwind.config.ts create mode 100755 tsconfig.json diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..3b413fa --- /dev/null +++ b/LICENSE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to the Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by the Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding any notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2024-2026 Cockpit Kata Containers Contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100755 index 0000000..6de59ee --- /dev/null +++ b/README.md @@ -0,0 +1,460 @@ +# Cockpit Kata Containers + +A [Cockpit](https://cockpit-project.org/) module for managing [Kata Containers](https://katacontainers.io/) — lightweight VM-based container sandboxes that provide hardware-level isolation for container workloads. + +![Cockpit Kata Containers](https://img.shields.io/badge/cockpit-286%2B-blue) ![Kata](https://img.shields.io/badge/kata--runtime-2.5%2B-green) ![License](https://img.shields.io/badge/license-Apache--2.0-orange) + +## What It Does + +Cockpit Kata Containers brings the same usability-first approach as Cockpit's built-in **machines** module (libvirt VM management) to Kata Containers. It provides a unified interface for: + +- **Sandbox Management** — List, inspect, start, stop, and restart Kata sandboxes across all VMM backends (QEMU, Cloud Hypervisor, Firecracker, Dragonball) +- **Image Import** — Import rootfs tarballs, initrd images, and **QCrows** self-describing VM container archives with a multi-step validation wizard that checks for kata-agent, init systems, resolv.conf, size limits, format compliance, and archive integrity +- **Image Export** — Export QCrows images to **qcow2** disk images, **ISO** for live USB media, or **PXE** for network boot, directly from the Cockpit UI with format-specific configuration options +- **Kernel Management** — Inspect guest kernel configs, validate Kata-required options, review boot parameters, and regenerate initrd with environment-aware VMM module selection +- **Initrd Regeneration** — Rebuild initrd with precise awareness of the VMM transport layer, kernel compression support, and rootfs init style — unlike `dracut` or `mkinitramfs`, produces an initrd where kata-agent IS the final process +- **PXE Push** — Deploy QCrows images to TFTP servers for network boot with a one-click button, automatic dnsmasq configuration, and squashfs rootfs packing +- **Build Guide** — Step-by-step walkthrough for building compatible custom Kata container images (rootfs and initrd), with copyable commands and progress tracking +- **Runtime Configuration** — View and edit `configuration.toml` files for each Kata runtime profile with live TOML editing and structured/raw view toggle +- **Metrics Dashboard** — Real-time resource utilization from kata-monitor's Prometheus endpoint with per-sandbox CPU, memory, and network breakdowns + +## Architecture + +``` +cockpit-kata-containers/ +├── README.md # This file +├── quickstart.md # Quick-start installation guide +├── installer.sh # Automated OS-aware installer +├── LICENSE # Apache-2.0 +├── Caddyfile # Reverse proxy config for standalone mode +├── qcrows-spec.md # QCrows format specification +├── qcrows-pack # CLI tool to create .qcrows archives +├── qcrows-verify # CLI tool to verify .qcrows integrity +├── qcrows-inspect # CLI tool to read .qcrows metadata +├── qcrows-export # CLI tool to export .qcrows to qcow2, ISO, or PXE +├── qcrows-initrd-regen # CLI tool to regenerate initrd (env-aware) +│ +├── cockpit-kata/ # Production Cockpit module (webpack build) +│ ├── manifest.json # Cockpit package manifest +│ ├── webpack.config.js # Bundler config — outputs to dist/ +│ ├── package.json # Build dependencies (React 18, webpack 5) +│ ├── tsconfig.json # TypeScript config +│ ├── cockpit.d.ts # Type declarations for cockpit.js APIs +│ └── src/ +│ └── index.tsx # Entry point — mounts KataModule +│ +├── src/ # Next.js prototype + shared components +│ ├── app/ +│ │ ├── page.tsx # Renders KataModule +│ │ ├── layout.tsx # Dark theme root layout +│ │ ├── globals.css # Tailwind CSS base +│ │ └── api/kata/ +│ │ ├── validate/route.ts # Pre-upload validation endpoint +│ │ └── upload/route.ts # File upload with server-side checks +│ ├── components/kata/ +│ │ ├── KataModule.tsx # Main shell — sidebar + top bar + routing +│ │ ├── SandboxList.tsx # Sandbox table with summary cards +│ │ ├── SandboxDetail.tsx # Per-sandbox detail with 4 tabs +│ │ ├── ImportImage.tsx # 4-step import wizard + QCrows kernel validation +│ │ ├── ExportImage.tsx # Export to qcow2/ISO/PXE with format-specific config +│ │ ├── KernelDetail.tsx # Kernel config viewer + boot params + initrd regen +│ │ ├── BuildGuide.tsx # Rootfs/initrd build instructions +│ │ ├── Configuration.tsx # Runtime config viewer + TOML editor +│ │ └── MetricsDashboard.tsx # Aggregate + per-sandbox metrics +│ ├── lib/ +│ │ ├── kata-mock.ts # Mock data layer + TypeScript interfaces +│ │ ├── backend/ +│ │ │ ├── adapter.ts # Auto-detect cockpit vs mock backend +│ │ │ └── cockpit-api.ts # Real cockpit.spawn/http/file calls +│ │ └── utils.ts # cn() utility, shared helpers +│ └── hooks/ +│ ├── use-toast.ts # Toast notifications +│ └── use-mobile.ts # Responsive breakpoint hook +│ +├── package.json # Next.js project config +├── tsconfig.json # Root TypeScript config +├── tailwind.config.ts # Tailwind CSS config +├── postcss.config.mjs # PostCSS config +├── next.config.ts # Next.js config +├── eslint.config.mjs # ESLint config +└── components.json # shadcn/ui component registry +``` + +## Two Deployment Modes + +### Mode 1: Cockpit Module (Production) + +The `cockpit-kata/` directory builds into a self-contained Cockpit package that drops into `/usr/share/cockpit/kata/`. It uses: + +- `cockpit.spawn()` — runs `kata-runtime`, `crictl`, `kata-ctl` on the host +- `cockpit.http()` — queries `kata-monitor` on `127.0.0.1:8090` for Prometheus metrics +- `cockpit.file()` — reads/writes `configuration.toml` with atomic TOML round-tripping + +Build and install: + +```bash +cd cockpit-kata +npm install +npm run build +sudo cp -r dist/ /usr/share/cockpit/kata/ +``` + +### Mode 2: Standalone Web App (Development/Demo) + +The Next.js prototype runs independently with mock data, no Kata or Cockpit installation required: + +```bash +npm install +npm run dev +# Open http://localhost:3000 +``` + +The backend adapter (`src/lib/backend/adapter.ts`) auto-detects whether `cockpit` is available in the global scope and routes API calls to either the real Cockpit backend or the mock data layer. This means the same UI components work in both modes without modification. + +## QCrows — Self-Describing VM Container Images + +QCrows (pronounced *cue-crows*) is a self-describing container image format designed for VM-based container runtimes like Kata Containers. A `.qcrows` file bundles everything needed to deploy a VM container into a single, verifiable archive. + +### What's in a QCrows Archive + +| Component | Required | Description | +|-----------|----------|-------------| +| `metadata.toml` | Yes | Image manifest — name, version, arch, hypervisor compat, kernel info, agent version | +| `menu.toml` | Yes | Cockpit UI menu entry — label, category, init system, workload tags | +| `hashes.sha256` | Yes | SHA-256 integrity verification for all files | +| `rootfs.tar.*` | Yes | Guest OS filesystem (tar.gz, tar.xz, or tar.zst) | +| `initrd.*` | One of | Initial ramdisk (cpio-gzip, cpio-lz4, cpio-xz, or cramfs) | +| `kernel/` | **REQUIRED** | Guest kernel binary + config — eliminates kernel-rootfs mismatch | +| `boot-params.conf` | Optional | Per-image kernel command line parameters | +| `build.toml` | Recommended | Build provenance — build system, flags, source hashes | +| `spec.md` | Optional | Build guide for reproducing or modifying the image | + +### Build System Support + +The `qcrows-pack` tool auto-detects and supports: + +| Build System | Package Manager | Typical Use | +|-------------|----------------|-------------| +| Gentoo | Portage | Full control, hardened builds | +| Source Mage (Sorcery) | cast/dispel | Source-based, spell system | +| Buildroot | make + kconfig | Embedded, cross-compilation | +| Lunar Linux | lin/lrm | Source-based, rolling | +| LEDE / OpenWrt | opkg + make | Routers, embedded, IoT | +| BTC | custom | Niche / custom pipeline | + +### Creating a QCrows Image + +```bash +# From individual build outputs +qcrows-pack \ + --rootfs ./output/rootfs.tar.gz \ + --initrd ./output/initrd.img \ + --kernel ./output/bzImage \ + --kernel-config ./output/.config \ + --name "alpine-3.20-kata" --version "3.20.1" \ + --build-system buildroot \ + --hypervisors "qemu,cloud-hypervisor" \ + -o alpine-3.20-kata.qcrows + +# From a Buildroot output directory (auto-discovery) +qcrows-pack --from-dir ./buildroot/output/ \ + --name "buildroot-kata" --build-system buildroot \ + -o buildroot-kata.qcrows + +# Verify before importing +qcrows-verify alpine-3.20-kata.qcrows + +# Inspect metadata without extraction +qcrows-inspect alpine-3.20-kata.qcrows + +# Export to qcow2 for QEMU direct boot +qcrows-export --format qcow2 alpine-3.20-kata.qcrows -o alpine-3.20-kata.qcow2 + +# Export to bootable ISO for live USB +qcrows-export --format iso alpine-3.20-kata.qcrows -o alpine-live.iso +dd if=alpine-live.iso of=/dev/sdX bs=4M status=progress && sync +``` + +### Importing in Cockpit + +1. Click **Import Image** in the sidebar +2. Select **QCrows Image** as the import mode +3. Drop a `.qcrows` file — the module auto-detects the format +4. The 11-step validator runs: extract → verify hashes → parse metadata → parse menu → check compatibility → validate kernel binary → validate kernel config → validate rootfs → validate initrd → validate boot-params → register +5. Review the parsed metadata (name, version, arch, kernel, hypervisors, agent) and the Cockpit menu entry preview +6. Click **Import QCrows Image** + +See [qcrows-spec.md](qcrows-spec.md) for the complete format specification. + +### Exporting QCrows Images + +The **Export** view in the Cockpit UI and the `qcrows-export` CLI tool convert `.qcrows` archives into bootable formats: + +**From the Cockpit UI:** Click **Export** in the sidebar → select a QCrows image → choose target format (qcow2, ISO, or PXE) → configure options → click **Export**. The UI provides format-specific options (EFI boot, disk size, partition labels, server IP), a progress indicator, and a usage hint on completion. + +**From the CLI:** + +**qcow2** — QEMU disk image with partitioned layout, rootfs installed, kernel in `/boot`, and bootloader configured: +```bash +# Auto-sized qcow2 with MBR boot +qcrows-export --format qcow2 image.qcrows -o disk.qcow2 + +# 2GB disk with EFI partition layout +qcrows-export --format qcow2 --disk-size 2G --efi image.qcrows -o disk-efi.qcow2 + +# Boot the result +qemu-system-x86_64 -m 1G -smp 2 -drive file=disk.qcow2,format=qcow2 -enable-kvm +``` + +**ISO** — Bootable live ISO for USB media, including a `/kata/` directory for host-side deployment: +```bash +# MBR-bootable (hybrid — dd-able to USB) +qcrows-export --format iso image.qcrows -o live.iso + +# EFI-bootable +qcrows-export --format iso --efi image.qcrows -o live-efi.iso + +# Write to USB +dd if=live.iso of=/dev/sdX bs=4M status=progress && sync +``` + +**PXE** — Push the image to a TFTP directory for network boot via dnsmasq: +```bash +# Deploy to TFTP with PXE configuration +qcrows-export --format pxe image.qcrows --server-ip 192.168.1.1 + +# Or use the "Push via PXE" button in the Import view +``` + +| Format | Boot Mode | Use Case | Prerequisites | UI Access | +|--------|-----------|----------|---------------|-----------| +| qcow2 | MBR/extlinux or EFI/GRUB | Standalone QEMU VM | qemu-img, parted, mkfs.ext4 | Export view | +| iso | MBR/isolinux or EFI/GRUB | Live USB, Kata deployment from media | xorriso, syslinux | Export view | +| pxe | pxelinux + dnsmasq | Network boot, bulk provisioning | dnsmasq, squashfs-tools | Export view + Import view PXE button | + +### Initrd Regeneration + +The `qcrows-initrd-regen` tool rebuilds the initrd component of a QCrows bundle with **environment awareness**. Unlike `dracut` or `mkinitramfs`, it produces an initrd where kata-agent IS the final process (no pivot_root) and includes ONLY the kernel modules required by the detected VMM transport layer. + +**Auto-detection pipeline:** +1. **VMM** — Reads `kata-runtime` symlink and `configuration.toml` to determine active hypervisor +2. **Compression** — Inspects kernel `.config` for `CONFIG_RD_LZ4/GZIP/XZ/ZSTD`, selects fastest supported +3. **Init style** — Examines rootfs for `/sbin/init` (systemd), `/sbin/openrc-init` (OpenRC), or neither (busybox) +4. **kata-agent** — Scans rootfs for the agent binary at standard paths +5. **Modules** — Selects kernel modules from the VMM-specific matrix (QEMU: virtio-pci, CLH: virtio-mmio, Firecracker: virtio-mmio minimal, Dragonball: vsock-direct) + +```bash +# Auto-detect everything from the host environment +qcrows-initrd-regen alpine-3.20-kata.qcrows + +# Target QEMU with lz4 compression +qcrows-initrd-regen alpine.qcrows --vmm qemu --compress lz4 + +# Update the bundle in-place +qcrows-initrd-regen alpine.qcrows --in-place --vmm cloud-hypervisor + +# Or use the "Regen Initrd" button in the Kernel Management view +``` + +## Features in Detail + +### Sandbox Management + +The sandbox list view mirrors the Cockpit machines module's VM list pattern: +- Summary cards at the top (Total Sandboxes, Running, Total vCPU, Total Memory) +- Searchable, filterable table with status badges, VMM type, and boot time +- Action dropdown per sandbox (Start / Stop / Restart / Console) +- Click-through to detail view with breadcrumb navigation back + +The detail view provides: +- **Overview tab** — Identity (name, namespace, UID, runtime class) and Runtime (VMM, kernel, agent, vCPU, memory) +- **Metrics tab** — CPU/memory usage with sparklines, VMM API call counts, network I/O +- **Network tab** — vsock connection details for kata-agent communication +- **Console tab** — Text terminal to the kata-agent inside the guest VM + +### Image Import + +A 4-step wizard guides users through importing Kata container images: + +1. **Select** — Choose image type (Rootfs Tarball or Initrd Image) and drag-and-drop the file +2. **Configure** — Set image name and hypervisor compatibility (QEMU / CLH / Firecracker / Dragonball) +3. **Validate** — Automatic checks for format compliance, required files (init, kata-agent, resolv.conf), size limits, and security concerns +4. **Complete** — Import progress with stage messages and validation summary + +Validation rules include: +| Rule | Applies To | Severity | +|------|-----------|----------| +| Valid tar archive | rootfs | error | +| Init system present | rootfs | error | +| kata-agent binary | rootfs | error | +| resolv.conf present | rootfs | warning | +| Valid initrd format | initrd | error | +| Size limits | both | warning | +| No setuid binaries | rootfs | warning | +| Kernel modules | rootfs | warning | + +### Build Guide + +Step-by-step instructions for creating compatible custom images: + +**Rootfs (6 steps):** Choose distro → Install kata-agent → Configure init → Set up networking → Optimize size → Package as tar.gz + +**Initrd (5 steps):** Choose base → Install kata-agent → Configure init → Optimize → Package as cpio archive + +Each step includes copyable command blocks, important notes, and warnings. A comparison card explains when to use rootfs vs initrd. + +### Kernel Management + +The **Kernel** view provides a dedicated interface for inspecting guest kernels bundled in QCrows images: + +- **Image selector** — Sidebar listing all imported QCrows images with kernel version, format, and size at a glance +- **Kernel overview cards** — Version, format (vmlinuz/vmlinux), size, and config validation status +- **Hypervisor compatibility** — Matrix showing which VMMs support the kernel's format (vmlinuz for QEMU/x86_64, vmlinux for CLH/Firecracker/Dragonball) +- **Kernel config viewer** — Required Kata options (VSOCKETS, VIRTIO, DEVTMPFS) with pass/fail status, recommended options with coverage metrics, total config statistics (built-in vs module count) +- **Boot parameters** — Kernel command line from `boot-params.conf`, parameter breakdown, and security warnings for dangerous options (e.g., `module.sig_enforce=0`) +- **Initrd Regeneration** — Rebuild initrd with VMM-aware module selection, configurable compression, init style, and in-place bundle update +- **Build provenance** — Compiler, defconfig, build ID, and import file paths + +The kernel view is especially valuable for source-based distro builds where the kernel is compiled alongside the rootfs — it provides assurance that the kernel config has all required Kata options enabled before deployment. + +### Configuration + +View and edit Kata runtime configuration files (`configuration.toml`) for each VMM profile: +- Config selector sidebar listing all profiles (kata-qemu, kata-clh, kata-fc, kata-dragonball) +- Structured view showing paths, default resources, and boot mode +- Raw TOML editor with save/cancel and unsaved changes detection +- Discard confirmation dialog when navigating away from unsaved edits + +### Metrics Dashboard + +Real-time monitoring powered by `kata-monitor`'s Prometheus endpoint: +- Aggregate stats with sparklines (CPU, Memory, Network RX/TX) +- Per-sandbox metric cards with progress bars +- Empty state with setup instructions when kata-monitor is not running + +## Backend Adapter Pattern + +The module uses a unified API layer that works in both modes: + +``` +UI Components + │ + ▼ +adapter.ts ──→ isCockpitAvailable() ? + │ │ + ▼ YES ▼ NO +cockpit-api.ts kata-mock.ts + │ │ + ▼ ▼ +cockpit.spawn() simulateDelay() +cockpit.http() MOCK_SANDBOXES +cockpit.file() MOCK_METRICS +``` + +All functions return the same TypeScript types (`Sandbox`, `ImportedImage`, `RuntimeConfig`, `SandboxMetrics`), so UI components never need to know which backend is active. + +## Prerequisites + +### For Cockpit Module (Production) + +| Component | Minimum Version | Purpose | +|-----------|----------------|---------| +| Cockpit | 286+ | Web management framework | +| kata-runtime | 2.5+ | Kata Containers runtime | +| containerd | 1.6+ | CRI container runtime | +| crictl | 1.25+ | CRI CLI tool | +| kata-monitor | (optional) | Prometheus metrics endpoint | +| KVM | enabled | Hardware virtualization | + +### For Standalone Mode (Development) + +| Component | Minimum Version | Purpose | +|-----------|----------------|---------| +| Node.js | 18+ | JavaScript runtime | +| npm or bun | latest | Package manager | + +## Quick Install + +The fastest way to get running: + +```bash +# Clone and enter the project +git clone cockpit-kata-containers +cd cockpit-kata-containers + +# Run the automated installer +chmod +x installer.sh +sudo ./installer.sh +``` + +The installer detects your OS, installs all dependencies, installs QCrows CLI tools to `/usr/local/bin/`, builds the Cockpit module, and starts required services. See [quickstart.md](quickstart.md) for the manual approach. + +## Development + +### Standalone Mode (Mock Data) + +```bash +npm install +npm run dev +# → http://localhost:3000 +``` + +### Cockpit Module Development + +```bash +cd cockpit-kata +npm install +npm run watch # Auto-rebuild on changes +npm run devel-install # Symlink to ~/.local/share/cockpit/kata +``` + +Then open Cockpit in your browser and navigate to the "Kata Containers" tool. + +### Building for Production + +```bash +cd cockpit-kata +npm run build +sudo cp -r dist/ /usr/share/cockpit/kata/ + +# Verify installation +cockpit-bridge --packages | grep kata +``` + +## CSP Requirements + +The `manifest.json` includes a Content Security Policy that allows: + +- `connect-src 'self' http://127.0.0.1:8090 ws:` — kata-monitor HTTP and WebSocket +- `style-src 'self' 'unsafe-inline'` — React inline styles +- `img-src 'self' data:` — inline SVG icons and data URIs + +If kata-monitor binds to a different address, update the CSP in `cockpit-kata/manifest.json`. + +## Comparison with Cockpit Machines Module + +| Aspect | Machines Module | Kata Module | +|--------|----------------|-------------| +| Object model | Persistent libvirt VMs | Ephemeral Kata sandboxes (per-pod lifecycle) | +| Creation flow | In-module wizard (disk, RAM, OS) | Via Kubernetes RuntimeClass | +| Import feature | Disk images (qcow2, raw) | Rootfs tarballs, initrd images, QCrows bundles | +| Export feature | — | qcow2, ISO, PXE (UI + CLI) | +| Initrd regen | — | Environment-aware VMM module selection | +| Config format | libvirt XML | TOML (configuration.toml) | +| Console access | VNC (graphical) | vsock text terminal | +| Metrics source | libvirt API | kata-monitor Prometheus endpoint | +| List view | VM table + status | Sandbox table + status (same pattern) | +| Action menus | Start/Stop/Restart/Console | Start/Stop/Restart/Console (same pattern) | +| Status badges | Color-coded running/stopped | Color-coded running/stopped/error | + +## Contributing + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/my-feature`) +3. Commit your changes (`git commit -am 'Add my feature'`) +4. Push to the branch (`git push origin feature/my-feature`) +5. Open a Pull Request + +## License + +Apache-2.0 — see [LICENSE](LICENSE) for details. diff --git a/cockpit-kata/README.md b/cockpit-kata/README.md new file mode 100755 index 0000000..2d44258 --- /dev/null +++ b/cockpit-kata/README.md @@ -0,0 +1,93 @@ +# Cockpit Kata Containers Module — Build & Install + +## Quick Start + +```bash +# Install dependencies +npm install + +# Build for production +npm run build + +# Install for local Cockpit development (symlinks to ~/.local/share/cockpit/kata) +npm run devel-install + +# Watch for changes during development +npm run watch +``` + +## Production Install + +```bash +# Build +npm run build + +# Copy the dist/ directory to the system Cockpit package directory +sudo cp -r dist/ /usr/share/cockpit/kata/ + +# Verify Cockpit sees the package +cockpit-bridge --packages | grep kata +``` + +## Architecture + +``` +cockpit-kata/ +├── manifest.json # Cockpit package manifest (menu placement, CSP, version requirements) +├── webpack.config.js # Build config — bundles React app into single JS file +├── package.json # npm build scripts and dependencies +├── tsconfig.json # TypeScript config +├── cockpit.d.ts # Type declarations for cockpit.js APIs +├── src/ +│ ├── index.tsx # Entry point — mounts KataModule into DOM +│ ├── KataModule.tsx # Main component (copied from Next.js prototype) +│ ├── backend/ +│ │ ├── adapter.ts # Backend adapter — selects cockpit vs mock mode +│ │ ├── cockpit-api.ts # Real cockpit.spawn() / cockpit.http() / cockpit.file() calls +│ │ └── mock-api.ts # Mock fallback for standalone development +│ ├── components/ # UI components (same as Next.js prototype) +│ └── types.ts # Shared TypeScript interfaces +└── dist/ # Build output — files Cockpit actually serves + ├── index.js # Bundled React app + ├── index.js.map # Source map for debugging + └── manifest.json # Copied from root +``` + +## Backend Adapter Pattern + +The module uses a two-mode backend: + +1. **Cockpit mode** (production): `cockpit.spawn()` calls `kata-runtime` / `kata-ctl` / `crictl`, + `cockpit.http()` talks to `kata-monitor` on `127.0.0.1:8090`, + `cockpit.file()` watches/edits `configuration.toml` + +2. **Mock mode** (standalone dev): Same TypeScript interfaces, but backed by + simulated data and delays. This is what the Next.js prototype uses. + +The adapter in `src/backend/adapter.ts` auto-detects whether `cockpit` is available +in the global scope and selects the appropriate implementation. + +## CSP Requirements + +The `manifest.json` includes a `content-security-policy` that allows: + +- `connect-src 'self' http://127.0.0.1:8090 ws:` — for kata-monitor HTTP and WebSocket +- `style-src 'self' 'unsafe-inline'` — for CSS-in-JS (React inline styles) +- `img-src 'self' data:` — for inline SVG icons and data URIs + +If kata-monitor binds to a different address, update the CSP in manifest.json. + +## Integration with Cockpit Machines Module + +The Kata module follows the same UX patterns as Cockpit's machines module: +- List view → detail view navigation +- Action dropdown menus (start/stop/restart/console) +- Breadcrumb-based navigation back to list +- Card-based summary stats at the top of list views + +Key divergences from the machines module: +- Kata sandboxes are ephemeral (per-pod lifecycle), not persistent VMs +- Creation happens via Kubernetes RuntimeClass, not an in-module wizard +- Import is for rootfs/initrd images, not disk images +- Config is TOML, not libvirt XML +- Console is vsock-based text only, not VNC diff --git a/cockpit-kata/build.sh b/cockpit-kata/build.sh new file mode 100755 index 0000000..61e6f7f --- /dev/null +++ b/cockpit-kata/build.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Build script for the cockpit-kata Cockpit module +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +echo "[cockpit-kata] Building production bundle..." +./node_modules/.bin/webpack --mode production + +if [[ -f dist/index.js ]]; then + SIZE=$(du -sh dist/ | cut -f1) + echo "[cockpit-kata] Build successful: ${SIZE}" + echo "[cockpit-kata] Output: dist/index.js + dist/index.css" +else + echo "[cockpit-kata] ERROR: Build failed — dist/index.js not found" + exit 1 +fi diff --git a/cockpit-kata/cockpit.d.ts b/cockpit-kata/cockpit.d.ts new file mode 100755 index 0000000..0f4056c --- /dev/null +++ b/cockpit-kata/cockpit.d.ts @@ -0,0 +1,109 @@ +/** + * cockpit.js type declarations for TypeScript + * + * In a real Cockpit deployment, cockpit.js is provided globally by + * cockpit-bridge at /usr/share/cockpit/cockpit.js. These declarations + * let TypeScript compile without installing the full cockpit package. + */ +declare module "cockpit" { + // ─── spawn ──────────────────────────────────────────────────────── + // cockpit.spawn(command, options?) → Process + // Runs a local command and returns a Promise-like Process stream. + export function spawn( + command: string[], + options?: SpawnOptions + ): Process; + + export interface SpawnOptions { + superuser?: "try" | "require" | null; + err?: "message" | "ignore" | "out"; + environ?: string[]; + directory?: string; + pty?: boolean; + binary?: boolean; + } + + export interface Process extends Promise { + stream(callback: (data: string) => void): Process; + input(data: string, stream?: boolean): void; + close(reason?: string): void; + then(onFulfilled?: (output: string) => void, onRejected?: (error: SpawnError) => void): Process; + catch(onRejected: (error: SpawnError) => void): Process; + } + + export interface SpawnError extends Error { + problem?: string; + exit_status?: number; + exit_signal?: string; + } + + // ─── file ───────────────────────────────────────────────────────── + // cockpit.file(path, options?) → FileHandle + export function file(path: string, options?: FileOptions): FileHandle; + + export interface FileOptions { + binary?: boolean; + superuser?: "try" | "require" | null; + } + + export interface FileHandle { + read(): Promise; + replace(content: string): Promise; + modify(callback: (oldContent: string | null) => string | null): Promise; + watch(callback: (content: string | null) => void, options?: { read?: boolean }): void; + close(): void; + } + + // ─── http ───────────────────────────────────────────────────────── + // cockpit.http(options) → HttpChannel + export function http(options: HttpOptions): HttpChannel; + + export interface HttpOptions { + port?: number; + path?: string; + address?: string; + superuser?: "try" | "require" | null; + tls?: Record; + } + + export interface HttpChannel { + get(path: string, headers?: Record): HttpRequest; + post(path: string, body: string, headers?: Record): HttpRequest; + } + + export interface HttpRequest extends Promise { + then(onFulfilled?: (data: string) => void, onRejected?: (error: Error) => void): HttpRequest; + catch(onRejected: (error: Error) => void): HttpRequest; + } + + // ─── dbus ───────────────────────────────────────────────────────── + export function dbus(name: string, options?: DbusOptions): DbusClient; + + export interface DbusOptions { + bus?: "system" | "session"; + superuser?: "try" | "require" | null; + track?: boolean; + } + + export interface DbusClient { + proxy(interfaceName: string, path: string): DbusProxy; + call(path: string, interfaceName: string, method: string, args: unknown[]): Promise; + } + + export interface DbusProxy { + wait(): Promise; + [key: string]: unknown; + } + + // ─── User info ──────────────────────────────────────────────────── + export function user(): UserInfo; + + export interface UserInfo { + id: number; + name: string; + full_name: string; + groups: string[]; + home: string; + shell: string; + } +} diff --git a/cockpit-kata/dist/components/kata/BuildGuide.d.ts b/cockpit-kata/dist/components/kata/BuildGuide.d.ts new file mode 100644 index 0000000..bf01243 --- /dev/null +++ b/cockpit-kata/dist/components/kata/BuildGuide.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function BuildGuide(): React.JSX.Element; +//# sourceMappingURL=BuildGuide.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/BuildGuide.d.ts.map b/cockpit-kata/dist/components/kata/BuildGuide.d.ts.map new file mode 100644 index 0000000..efbf043 --- /dev/null +++ b/cockpit-kata/dist/components/kata/BuildGuide.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BuildGuide.d.ts","sourceRoot":"","sources":["../../../src/components/kata/BuildGuide.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAwQxC,wBAAgB,UAAU,sBA2TzB"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/Configuration.d.ts b/cockpit-kata/dist/components/kata/Configuration.d.ts new file mode 100644 index 0000000..c6d5929 --- /dev/null +++ b/cockpit-kata/dist/components/kata/Configuration.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function Configuration(): React.JSX.Element; +//# sourceMappingURL=Configuration.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/Configuration.d.ts.map b/cockpit-kata/dist/components/kata/Configuration.d.ts.map new file mode 100644 index 0000000..77833c7 --- /dev/null +++ b/cockpit-kata/dist/components/kata/Configuration.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Configuration.d.ts","sourceRoot":"","sources":["../../../src/components/kata/Configuration.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAyHhE,wBAAgB,aAAa,sBA6f5B"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/ExportImage.d.ts b/cockpit-kata/dist/components/kata/ExportImage.d.ts new file mode 100644 index 0000000..7196601 --- /dev/null +++ b/cockpit-kata/dist/components/kata/ExportImage.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function ExportImage(): React.JSX.Element; +//# sourceMappingURL=ExportImage.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/ExportImage.d.ts.map b/cockpit-kata/dist/components/kata/ExportImage.d.ts.map new file mode 100644 index 0000000..b6dcc83 --- /dev/null +++ b/cockpit-kata/dist/components/kata/ExportImage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ExportImage.d.ts","sourceRoot":"","sources":["../../../src/components/kata/ExportImage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAyDnD,wBAAgB,WAAW,sBA6a1B"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/ImportImage.d.ts b/cockpit-kata/dist/components/kata/ImportImage.d.ts new file mode 100644 index 0000000..a08d8f9 --- /dev/null +++ b/cockpit-kata/dist/components/kata/ImportImage.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function ImportImage(): React.JSX.Element; +//# sourceMappingURL=ImportImage.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/ImportImage.d.ts.map b/cockpit-kata/dist/components/kata/ImportImage.d.ts.map new file mode 100644 index 0000000..2c2ce31 --- /dev/null +++ b/cockpit-kata/dist/components/kata/ImportImage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ImportImage.d.ts","sourceRoot":"","sources":["../../../src/components/kata/ImportImage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAwD7D,wBAAgB,WAAW,sBA28C1B"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/KataModule.d.ts b/cockpit-kata/dist/components/kata/KataModule.d.ts new file mode 100644 index 0000000..0a0cbd7 --- /dev/null +++ b/cockpit-kata/dist/components/kata/KataModule.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function KataModule(): React.JSX.Element; +//# sourceMappingURL=KataModule.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/KataModule.d.ts.map b/cockpit-kata/dist/components/kata/KataModule.d.ts.map new file mode 100644 index 0000000..79651be --- /dev/null +++ b/cockpit-kata/dist/components/kata/KataModule.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"KataModule.d.ts","sourceRoot":"","sources":["../../../src/components/kata/KataModule.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAwCxC,wBAAgB,UAAU,sBA6JzB"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/KernelDetail.d.ts b/cockpit-kata/dist/components/kata/KernelDetail.d.ts new file mode 100644 index 0000000..72865d0 --- /dev/null +++ b/cockpit-kata/dist/components/kata/KernelDetail.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function KernelDetail(): React.JSX.Element; +//# sourceMappingURL=KernelDetail.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/KernelDetail.d.ts.map b/cockpit-kata/dist/components/kata/KernelDetail.d.ts.map new file mode 100644 index 0000000..490ef23 --- /dev/null +++ b/cockpit-kata/dist/components/kata/KernelDetail.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"KernelDetail.d.ts","sourceRoot":"","sources":["../../../src/components/kata/KernelDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAwCnD,wBAAgB,YAAY,sBAqF3B"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts b/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts new file mode 100644 index 0000000..ce2e230 --- /dev/null +++ b/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts @@ -0,0 +1,3 @@ +import React from "react"; +export declare function MetricsDashboard(): React.JSX.Element; +//# sourceMappingURL=MetricsDashboard.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts.map b/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts.map new file mode 100644 index 0000000..86909ab --- /dev/null +++ b/cockpit-kata/dist/components/kata/MetricsDashboard.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"MetricsDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/kata/MetricsDashboard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAwBnD,wBAAgB,gBAAgB,sBA2U/B"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/SandboxDetail.d.ts b/cockpit-kata/dist/components/kata/SandboxDetail.d.ts new file mode 100644 index 0000000..b3e7b24 --- /dev/null +++ b/cockpit-kata/dist/components/kata/SandboxDetail.d.ts @@ -0,0 +1,9 @@ +import React from "react"; +import { type Sandbox } from "@/lib/kata-mock"; +interface SandboxDetailProps { + sandbox: Sandbox; + onBack: () => void; +} +export declare function SandboxDetail({ sandbox, onBack }: SandboxDetailProps): React.JSX.Element; +export {}; +//# sourceMappingURL=SandboxDetail.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/SandboxDetail.d.ts.map b/cockpit-kata/dist/components/kata/SandboxDetail.d.ts.map new file mode 100644 index 0000000..94b470a --- /dev/null +++ b/cockpit-kata/dist/components/kata/SandboxDetail.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SandboxDetail.d.ts","sourceRoot":"","sources":["../../../src/components/kata/SandboxDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAsBnD,OAAO,EAAuB,KAAK,OAAO,EAAuB,MAAM,iBAAiB,CAAC;AAEzF,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,kBAAkB,qBAySpE"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/SandboxList.d.ts b/cockpit-kata/dist/components/kata/SandboxList.d.ts new file mode 100644 index 0000000..b7c9a39 --- /dev/null +++ b/cockpit-kata/dist/components/kata/SandboxList.d.ts @@ -0,0 +1,8 @@ +import React from "react"; +import { type Sandbox } from "@/lib/kata-mock"; +interface SandboxListProps { + onSelectSandbox: (sandbox: Sandbox) => void; +} +export declare function SandboxList({ onSelectSandbox }: SandboxListProps): React.JSX.Element; +export {}; +//# sourceMappingURL=SandboxList.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/kata/SandboxList.d.ts.map b/cockpit-kata/dist/components/kata/SandboxList.d.ts.map new file mode 100644 index 0000000..59295b8 --- /dev/null +++ b/cockpit-kata/dist/components/kata/SandboxList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SandboxList.d.ts","sourceRoot":"","sources":["../../../src/components/kata/SandboxList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAkCnD,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAgB/D,UAAU,gBAAgB;IACxB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,WAAW,CAAC,EAAE,eAAe,EAAE,EAAE,gBAAgB,qBAiQhE"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/accordion.d.ts b/cockpit-kata/dist/components/ui/accordion.d.ts new file mode 100644 index 0000000..cd04143 --- /dev/null +++ b/cockpit-kata/dist/components/ui/accordion.d.ts @@ -0,0 +1,8 @@ +import * as React from "react"; +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +declare function Accordion({ ...props }: React.ComponentProps): React.JSX.Element; +declare function AccordionItem({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps): React.JSX.Element; +declare function AccordionContent({ className, children, ...props }: React.ComponentProps): React.JSX.Element; +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; +//# sourceMappingURL=accordion.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/accordion.d.ts.map b/cockpit-kata/dist/components/ui/accordion.d.ts.map new file mode 100644 index 0000000..01a35bc --- /dev/null +++ b/cockpit-kata/dist/components/ui/accordion.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/ui/accordion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAK/D,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAEtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAQtD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,qBAgBzD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,qBAUzD;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/badge.d.ts b/cockpit-kata/dist/components/ui/badge.d.ts new file mode 100644 index 0000000..908d901 --- /dev/null +++ b/cockpit-kata/dist/components/ui/badge.d.ts @@ -0,0 +1,10 @@ +import * as React from "react"; +import { type VariantProps } from "class-variance-authority"; +declare const badgeVariants: (props?: ({ + variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined; +} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string; +declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps & { + asChild?: boolean; +}): React.JSX.Element; +export { Badge, badgeVariants }; +//# sourceMappingURL=badge.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/badge.d.ts.map b/cockpit-kata/dist/components/ui/badge.d.ts.map new file mode 100644 index 0000000..eb97fe3 --- /dev/null +++ b/cockpit-kata/dist/components/ui/badge.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;mFAmBlB,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,EACP,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAC7B,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,qBAU3D;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/button.d.ts b/cockpit-kata/dist/components/ui/button.d.ts new file mode 100644 index 0000000..7cfcad0 --- /dev/null +++ b/cockpit-kata/dist/components/ui/button.d.ts @@ -0,0 +1,11 @@ +import * as React from "react"; +import { type VariantProps } from "class-variance-authority"; +declare const buttonVariants: (props?: ({ + variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined; + size?: "default" | "sm" | "lg" | "icon" | null | undefined; +} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string; +declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps & { + asChild?: boolean; +}): React.JSX.Element; +export { Button, buttonVariants }; +//# sourceMappingURL=button.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/button.d.ts.map b/cockpit-kata/dist/components/ui/button.d.ts.map new file mode 100644 index 0000000..98154fd --- /dev/null +++ b/cockpit-kata/dist/components/ui/button.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,cAAc;;;mFA6BnB,CAAA;AAED,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,qBAUF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/card.d.ts b/cockpit-kata/dist/components/ui/card.d.ts new file mode 100644 index 0000000..c159cda --- /dev/null +++ b/cockpit-kata/dist/components/ui/card.d.ts @@ -0,0 +1,10 @@ +import * as React from "react"; +declare function Card({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function CardFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent, }; +//# sourceMappingURL=card.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/card.d.ts.map b/cockpit-kata/dist/components/ui/card.d.ts.map new file mode 100644 index 0000000..a313d20 --- /dev/null +++ b/cockpit-kata/dist/components/ui/card.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/checkbox.d.ts b/cockpit-kata/dist/components/ui/checkbox.d.ts new file mode 100644 index 0000000..83aa2ae --- /dev/null +++ b/cockpit-kata/dist/components/ui/checkbox.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +declare function Checkbox({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Checkbox }; +//# sourceMappingURL=checkbox.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/checkbox.d.ts.map b/cockpit-kata/dist/components/ui/checkbox.d.ts.map new file mode 100644 index 0000000..a8ad826 --- /dev/null +++ b/cockpit-kata/dist/components/ui/checkbox.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/checkbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAK7D,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,qBAkBrD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/dialog.d.ts b/cockpit-kata/dist/components/ui/dialog.d.ts new file mode 100644 index 0000000..068ae41 --- /dev/null +++ b/cockpit-kata/dist/components/ui/dialog.d.ts @@ -0,0 +1,16 @@ +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +declare function Dialog({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogTrigger({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogPortal({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogClose({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogOverlay({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogContent({ className, children, showCloseButton, ...props }: React.ComponentProps & { + showCloseButton?: boolean; +}): React.JSX.Element; +declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function DialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element; +declare function DialogTitle({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function DialogDescription({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, }; +//# sourceMappingURL=dialog.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/dialog.d.ts.map b/cockpit-kata/dist/components/ui/dialog.d.ts.map new file mode 100644 index 0000000..895060a --- /dev/null +++ b/cockpit-kata/dist/components/ui/dialog.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAKzD,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAEnD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAEtD;AAED,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC,qBAErD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAEpD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBAWtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,eAAsB,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACxD,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,qBAyBA;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQzE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWzE;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAQpD;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC,qBAQ1D;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/dropdown-menu.d.ts b/cockpit-kata/dist/components/ui/dropdown-menu.d.ts new file mode 100644 index 0000000..40e9438 --- /dev/null +++ b/cockpit-kata/dist/components/ui/dropdown-menu.d.ts @@ -0,0 +1,26 @@ +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +declare function DropdownMenu({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuPortal({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuTrigger({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuGroup({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps & { + inset?: boolean; + variant?: "default" | "destructive"; +}): React.JSX.Element; +declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps & { + inset?: boolean; +}): React.JSX.Element; +declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element; +declare function DropdownMenuSub({ ...props }: React.ComponentProps): React.JSX.Element; +declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps & { + inset?: boolean; +}): React.JSX.Element; +declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, }; +//# sourceMappingURL=dropdown-menu.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/dropdown-menu.d.ts.map b/cockpit-kata/dist/components/ui/dropdown-menu.d.ts.map new file mode 100644 index 0000000..0e79ecf --- /dev/null +++ b/cockpit-kata/dist/components/ui/dropdown-menu.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dropdown-menu.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/input.d.ts b/cockpit-kata/dist/components/ui/input.d.ts new file mode 100644 index 0000000..49ae885 --- /dev/null +++ b/cockpit-kata/dist/components/ui/input.d.ts @@ -0,0 +1,4 @@ +import * as React from "react"; +declare function Input({ className, type, ...props }: React.ComponentProps<"input">): React.JSX.Element; +export { Input }; +//# sourceMappingURL=input.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/input.d.ts.map b/cockpit-kata/dist/components/ui/input.d.ts.map new file mode 100644 index 0000000..aa1aa26 --- /dev/null +++ b/cockpit-kata/dist/components/ui/input.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/label.d.ts b/cockpit-kata/dist/components/ui/label.d.ts new file mode 100644 index 0000000..fa1c599 --- /dev/null +++ b/cockpit-kata/dist/components/ui/label.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as LabelPrimitive from "@radix-ui/react-label"; +declare function Label({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Label }; +//# sourceMappingURL=label.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/label.d.ts.map b/cockpit-kata/dist/components/ui/label.d.ts.map new file mode 100644 index 0000000..d0f9537 --- /dev/null +++ b/cockpit-kata/dist/components/ui/label.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../src/components/ui/label.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,qBAWlD;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/progress.d.ts b/cockpit-kata/dist/components/ui/progress.d.ts new file mode 100644 index 0000000..981ac87 --- /dev/null +++ b/cockpit-kata/dist/components/ui/progress.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as ProgressPrimitive from "@radix-ui/react-progress"; +declare function Progress({ className, value, ...props }: React.ComponentProps): React.JSX.Element; +export { Progress }; +//# sourceMappingURL=progress.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/progress.d.ts.map b/cockpit-kata/dist/components/ui/progress.d.ts.map new file mode 100644 index 0000000..368d0a3 --- /dev/null +++ b/cockpit-kata/dist/components/ui/progress.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/components/ui/progress.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAI7D,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,qBAiBrD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/scroll-area.d.ts b/cockpit-kata/dist/components/ui/scroll-area.d.ts new file mode 100644 index 0000000..1dc82ea --- /dev/null +++ b/cockpit-kata/dist/components/ui/scroll-area.d.ts @@ -0,0 +1,6 @@ +import * as React from "react"; +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"; +declare function ScrollArea({ className, children, ...props }: React.ComponentProps): React.JSX.Element; +declare function ScrollBar({ className, orientation, ...props }: React.ComponentProps): React.JSX.Element; +export { ScrollArea, ScrollBar }; +//# sourceMappingURL=scroll-area.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/scroll-area.d.ts.map b/cockpit-kata/dist/components/ui/scroll-area.d.ts.map new file mode 100644 index 0000000..f0b5952 --- /dev/null +++ b/cockpit-kata/dist/components/ui/scroll-area.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"scroll-area.d.ts","sourceRoot":"","sources":["../../../src/components/ui/scroll-area.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAA;AAIlE,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,qBAiBvD;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,qBAqBtE;AAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/select.d.ts b/cockpit-kata/dist/components/ui/select.d.ts new file mode 100644 index 0000000..db26230 --- /dev/null +++ b/cockpit-kata/dist/components/ui/select.d.ts @@ -0,0 +1,16 @@ +import * as React from "react"; +import * as SelectPrimitive from "@radix-ui/react-select"; +declare function Select({ ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectGroup({ ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectValue({ ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectTrigger({ className, size, children, ...props }: React.ComponentProps & { + size?: "sm" | "default"; +}): React.JSX.Element; +declare function SelectContent({ className, children, position, ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectLabel({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectItem({ className, children, ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectSeparator({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectScrollUpButton({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function SelectScrollDownButton({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, }; +//# sourceMappingURL=select.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/select.d.ts.map b/cockpit-kata/dist/components/ui/select.d.ts.map new file mode 100644 index 0000000..89b71e2 --- /dev/null +++ b/cockpit-kata/dist/components/ui/select.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/select.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAKzD,iBAAS,MAAM,CAAC,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAEnD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAEpD;AAED,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAEpD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,IAAgB,EAChB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACxB,qBAiBA;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,QAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,qBA4BtD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAQpD;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAkBnD;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,qBAQxD;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,cAAc,CAAC,qBAa7D;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,gBAAgB,CAAC,qBAa/D;AAED,OAAO,EACL,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/separator.d.ts b/cockpit-kata/dist/components/ui/separator.d.ts new file mode 100644 index 0000000..596782a --- /dev/null +++ b/cockpit-kata/dist/components/ui/separator.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as SeparatorPrimitive from "@radix-ui/react-separator"; +declare function Separator({ className, orientation, decorative, ...props }: React.ComponentProps): React.JSX.Element; +export { Separator }; +//# sourceMappingURL=separator.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/separator.d.ts.map b/cockpit-kata/dist/components/ui/separator.d.ts.map new file mode 100644 index 0000000..fac268f --- /dev/null +++ b/cockpit-kata/dist/components/ui/separator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../src/components/ui/separator.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAI/D,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAA0B,EAC1B,UAAiB,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAatD;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/slider.d.ts b/cockpit-kata/dist/components/ui/slider.d.ts new file mode 100644 index 0000000..cbd1ef8 --- /dev/null +++ b/cockpit-kata/dist/components/ui/slider.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as SliderPrimitive from "@radix-ui/react-slider"; +declare function Slider({ className, defaultValue, value, min, max, ...props }: React.ComponentProps): React.JSX.Element; +export { Slider }; +//# sourceMappingURL=slider.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/slider.d.ts.map b/cockpit-kata/dist/components/ui/slider.d.ts.map new file mode 100644 index 0000000..4ff1835 --- /dev/null +++ b/cockpit-kata/dist/components/ui/slider.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../src/components/ui/slider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,GAAO,EACP,GAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBA8CnD;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/switch.d.ts b/cockpit-kata/dist/components/ui/switch.d.ts new file mode 100644 index 0000000..5f04a5f --- /dev/null +++ b/cockpit-kata/dist/components/ui/switch.d.ts @@ -0,0 +1,5 @@ +import * as React from "react"; +import * as SwitchPrimitive from "@radix-ui/react-switch"; +declare function Switch({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Switch }; +//# sourceMappingURL=switch.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/switch.d.ts.map b/cockpit-kata/dist/components/ui/switch.d.ts.map new file mode 100644 index 0000000..3ebaeec --- /dev/null +++ b/cockpit-kata/dist/components/ui/switch.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/components/ui/switch.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAkBnD;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/table.d.ts b/cockpit-kata/dist/components/ui/table.d.ts new file mode 100644 index 0000000..64e602b --- /dev/null +++ b/cockpit-kata/dist/components/ui/table.d.ts @@ -0,0 +1,11 @@ +import * as React from "react"; +declare function Table({ className, ...props }: React.ComponentProps<"table">): React.JSX.Element; +declare function TableHeader({ className, ...props }: React.ComponentProps<"thead">): React.JSX.Element; +declare function TableBody({ className, ...props }: React.ComponentProps<"tbody">): React.JSX.Element; +declare function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">): React.JSX.Element; +declare function TableRow({ className, ...props }: React.ComponentProps<"tr">): React.JSX.Element; +declare function TableHead({ className, ...props }: React.ComponentProps<"th">): React.JSX.Element; +declare function TableCell({ className, ...props }: React.ComponentProps<"td">): React.JSX.Element; +declare function TableCaption({ className, ...props }: React.ComponentProps<"caption">): React.JSX.Element; +export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, }; +//# sourceMappingURL=table.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/table.d.ts.map b/cockpit-kata/dist/components/ui/table.d.ts.map new file mode 100644 index 0000000..35be638 --- /dev/null +++ b/cockpit-kata/dist/components/ui/table.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/ui/table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAapE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAQ1E;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAQxE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAW1E;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAWpE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAWrE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAWrE;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,qBAQjC;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/tabs.d.ts b/cockpit-kata/dist/components/ui/tabs.d.ts new file mode 100644 index 0000000..62ee410 --- /dev/null +++ b/cockpit-kata/dist/components/ui/tabs.d.ts @@ -0,0 +1,8 @@ +import * as React from "react"; +import * as TabsPrimitive from "@radix-ui/react-tabs"; +declare function Tabs({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function TabsList({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function TabsTrigger({ className, ...props }: React.ComponentProps): React.JSX.Element; +declare function TabsContent({ className, ...props }: React.ComponentProps): React.JSX.Element; +export { Tabs, TabsList, TabsTrigger, TabsContent }; +//# sourceMappingURL=tabs.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/tabs.d.ts.map b/cockpit-kata/dist/components/ui/tabs.d.ts.map new file mode 100644 index 0000000..2f311fc --- /dev/null +++ b/cockpit-kata/dist/components/ui/tabs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAIrD,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,qBAQjD;AAED,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,qBAWjD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,qBAWpD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,qBAQpD;AAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/textarea.d.ts b/cockpit-kata/dist/components/ui/textarea.d.ts new file mode 100644 index 0000000..1b40486 --- /dev/null +++ b/cockpit-kata/dist/components/ui/textarea.d.ts @@ -0,0 +1,4 @@ +import * as React from "react"; +declare function Textarea({ className, ...props }: React.ComponentProps<"textarea">): React.JSX.Element; +export { Textarea }; +//# sourceMappingURL=textarea.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/textarea.d.ts.map b/cockpit-kata/dist/components/ui/textarea.d.ts.map new file mode 100644 index 0000000..884b547 --- /dev/null +++ b/cockpit-kata/dist/components/ui/textarea.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/components/ui/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,qBAW1E;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/toast.d.ts b/cockpit-kata/dist/components/ui/toast.d.ts new file mode 100644 index 0000000..897072c --- /dev/null +++ b/cockpit-kata/dist/components/ui/toast.d.ts @@ -0,0 +1,16 @@ +import * as React from "react"; +import * as ToastPrimitives from "@radix-ui/react-toast"; +import { type VariantProps } from "class-variance-authority"; +declare const ToastProvider: React.FC; +declare const ToastViewport: React.ForwardRefExoticComponent, "ref"> & React.RefAttributes>; +declare const Toast: React.ForwardRefExoticComponent, "ref"> & VariantProps<(props?: ({ + variant?: "default" | "destructive" | null | undefined; +} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string> & React.RefAttributes>; +declare const ToastAction: React.ForwardRefExoticComponent, "ref"> & React.RefAttributes>; +declare const ToastClose: React.ForwardRefExoticComponent, "ref"> & React.RefAttributes>; +declare const ToastTitle: React.ForwardRefExoticComponent, "ref"> & React.RefAttributes>; +declare const ToastDescription: React.ForwardRefExoticComponent, "ref"> & React.RefAttributes>; +type ToastProps = React.ComponentPropsWithoutRef; +type ToastActionElement = React.ReactElement; +export { type ToastProps, type ToastActionElement, ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction, }; +//# sourceMappingURL=toast.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/components/ui/toast.d.ts.map b/cockpit-kata/dist/components/ui/toast.d.ts.map new file mode 100644 index 0000000..97b01b7 --- /dev/null +++ b/cockpit-kata/dist/components/ui/toast.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toast.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,aAAa,8CAA2B,CAAA;AAE9C,QAAA,MAAM,aAAa,kKAYjB,CAAA;AAmBF,QAAA,MAAM,KAAK;;0HAYT,CAAA;AAGF,QAAA,MAAM,WAAW,kKAYf,CAAA;AAGF,QAAA,MAAM,UAAU,iKAed,CAAA;AAGF,QAAA,MAAM,UAAU,2JASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,iKASpB,CAAA;AAGF,KAAK,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,KAAK,CAAC,CAAA;AAE9D,KAAK,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,WAAW,CAAC,CAAA;AAEhE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,aAAa,EACb,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/hooks/use-toast.d.ts b/cockpit-kata/dist/hooks/use-toast.d.ts new file mode 100644 index 0000000..09b5876 --- /dev/null +++ b/cockpit-kata/dist/hooks/use-toast.d.ts @@ -0,0 +1,45 @@ +import * as React from "react"; +import type { ToastActionElement, ToastProps } from "@/components/ui/toast"; +type ToasterToast = ToastProps & { + id: string; + title?: React.ReactNode; + description?: React.ReactNode; + action?: ToastActionElement; +}; +declare const actionTypes: { + readonly ADD_TOAST: "ADD_TOAST"; + readonly UPDATE_TOAST: "UPDATE_TOAST"; + readonly DISMISS_TOAST: "DISMISS_TOAST"; + readonly REMOVE_TOAST: "REMOVE_TOAST"; +}; +type ActionType = typeof actionTypes; +type Action = { + type: ActionType["ADD_TOAST"]; + toast: ToasterToast; +} | { + type: ActionType["UPDATE_TOAST"]; + toast: Partial; +} | { + type: ActionType["DISMISS_TOAST"]; + toastId?: ToasterToast["id"]; +} | { + type: ActionType["REMOVE_TOAST"]; + toastId?: ToasterToast["id"]; +}; +interface State { + toasts: ToasterToast[]; +} +export declare const reducer: (state: State, action: Action) => State; +type Toast = Omit; +declare function toast({ ...props }: Toast): { + id: string; + dismiss: () => void; + update: (props: ToasterToast) => void; +}; +declare function useToast(): { + toast: typeof toast; + dismiss: (toastId?: string) => void; + toasts: ToasterToast[]; +}; +export { useToast, toast }; +//# sourceMappingURL=use-toast.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/hooks/use-toast.d.ts.map b/cockpit-kata/dist/hooks/use-toast.d.ts.map new file mode 100644 index 0000000..0d47534 --- /dev/null +++ b/cockpit-kata/dist/hooks/use-toast.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"use-toast.d.ts","sourceRoot":"","sources":["../../src/hooks/use-toast.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACX,MAAM,uBAAuB,CAAA;AAK9B,KAAK,YAAY,GAAG,UAAU,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAC5B,CAAA;AAED,QAAA,MAAM,WAAW;;;;;CAKP,CAAA;AASV,KAAK,UAAU,GAAG,OAAO,WAAW,CAAA;AAEpC,KAAK,MAAM,GACP;IACA,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAC7B,KAAK,EAAE,YAAY,CAAA;CACpB,GACC;IACA,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IAChC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAC7B,GACC;IACA,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CAC7B,GACC;IACA,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CAC7B,CAAA;AAEH,UAAU,KAAK;IACb,MAAM,EAAE,YAAY,EAAE,CAAA;CACvB;AAoBD,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,KAAG,KAqDtD,CAAA;AAaD,KAAK,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAErC,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK;;;oBAGT,YAAY;EAwBpC;AAED,iBAAS,QAAQ;;wBAgBO,MAAM;YAtIpB,YAAY,EAAE;EAwIvB;AAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA"} \ No newline at end of file diff --git a/cockpit-kata/dist/index.css b/cockpit-kata/dist/index.css new file mode 100644 index 0000000..798b718 --- /dev/null +++ b/cockpit-kata/dist/index.css @@ -0,0 +1,2661 @@ +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +}/* +! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com +*//* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; /* 1 */ + border-width: 0; /* 2 */ + border-style: solid; /* 2 */ + border-color: #e5e7eb; /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -moz-tab-size: 4; /* 3 */ + -o-tab-size: 4; + tab-size: 4; /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ + font-feature-settings: normal; /* 5 */ + font-variation-settings: normal; /* 6 */ + -webkit-tap-highlight-color: transparent; /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; /* 1 */ + line-height: inherit; /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; /* 1 */ + color: inherit; /* 2 */ + border-top-width: 1px; /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ + font-feature-settings: normal; /* 2 */ + font-variation-settings: normal; /* 3 */ + font-size: 1em; /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; /* 1 */ + border-color: inherit; /* 2 */ + border-collapse: collapse; /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-feature-settings: inherit; /* 1 */ + font-variation-settings: inherit; /* 1 */ + font-size: 100%; /* 1 */ + font-weight: inherit; /* 1 */ + line-height: inherit; /* 1 */ + letter-spacing: inherit; /* 1 */ + color: inherit; /* 1 */ + margin: 0; /* 2 */ + padding: 0; /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; /* 1 */ + background-color: transparent; /* 2 */ + background-image: none; /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; /* 1 */ + vertical-align: middle; /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} + :root { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 47.4% 11.2%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 224.3 76.3% 48%; + --radius: 0.5rem; + } + * { + border-color: hsl(var(--border)); +} + body, #kata-app { + background-color: hsl(var(--background)); + color: hsl(var(--foreground)); +} +.container { + width: 100%; +} +@media (min-width: 640px) { + + .container { + max-width: 640px; + } +} +@media (min-width: 768px) { + + .container { + max-width: 768px; + } +} +@media (min-width: 1024px) { + + .container { + max-width: 1024px; + } +} +@media (min-width: 1280px) { + + .container { + max-width: 1280px; + } +} +@media (min-width: 1536px) { + + .container { + max-width: 1536px; + } +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} +.pointer-events-none { + pointer-events: none; +} +.pointer-events-auto { + pointer-events: auto; +} +.fixed { + position: fixed; +} +.absolute { + position: absolute; +} +.relative { + position: relative; +} +.inset-0 { + inset: 0px; +} +.left-2 { + left: 0.5rem; +} +.left-3 { + left: 0.75rem; +} +.left-\[50\%\] { + left: 50%; +} +.right-1 { + right: 0.25rem; +} +.right-2 { + right: 0.5rem; +} +.right-4 { + right: 1rem; +} +.top-0 { + top: 0px; +} +.top-1 { + top: 0.25rem; +} +.top-1\/2 { + top: 50%; +} +.top-4 { + top: 1rem; +} +.top-\[50\%\] { + top: 50%; +} +.z-50 { + z-index: 50; +} +.z-\[100\] { + z-index: 100; +} +.col-span-3 { + grid-column: span 3 / span 3; +} +.col-span-9 { + grid-column: span 9 / span 9; +} +.col-start-2 { + grid-column-start: 2; +} +.row-span-2 { + grid-row: span 2 / span 2; +} +.row-start-1 { + grid-row-start: 1; +} +.-mx-1 { + margin-left: -0.25rem; + margin-right: -0.25rem; +} +.mx-auto { + margin-left: auto; + margin-right: auto; +} +.my-1 { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} +.-mt-2 { + margin-top: -0.5rem; +} +.mb-1 { + margin-bottom: 0.25rem; +} +.mb-1\.5 { + margin-bottom: 0.375rem; +} +.mb-2 { + margin-bottom: 0.5rem; +} +.mb-3 { + margin-bottom: 0.75rem; +} +.mb-4 { + margin-bottom: 1rem; +} +.mb-6 { + margin-bottom: 1.5rem; +} +.ml-2 { + margin-left: 0.5rem; +} +.ml-8 { + margin-left: 2rem; +} +.ml-auto { + margin-left: auto; +} +.mr-1 { + margin-right: 0.25rem; +} +.mr-1\.5 { + margin-right: 0.375rem; +} +.mr-2 { + margin-right: 0.5rem; +} +.mt-0\.5 { + margin-top: 0.125rem; +} +.mt-1 { + margin-top: 0.25rem; +} +.mt-1\.5 { + margin-top: 0.375rem; +} +.mt-2 { + margin-top: 0.5rem; +} +.mt-3 { + margin-top: 0.75rem; +} +.mt-4 { + margin-top: 1rem; +} +.block { + display: block; +} +.inline-block { + display: inline-block; +} +.flex { + display: flex; +} +.inline-flex { + display: inline-flex; +} +.table { + display: table; +} +.table-caption { + display: table-caption; +} +.table-cell { + display: table-cell; +} +.table-row { + display: table-row; +} +.grid { + display: grid; +} +.hidden { + display: none; +} +.size-2 { + width: 0.5rem; + height: 0.5rem; +} +.size-3\.5 { + width: 0.875rem; + height: 0.875rem; +} +.size-4 { + width: 1rem; + height: 1rem; +} +.size-9 { + width: 2.25rem; + height: 2.25rem; +} +.size-full { + width: 100%; + height: 100%; +} +.h-1\.5 { + height: 0.375rem; +} +.h-10 { + height: 2.5rem; +} +.h-12 { + height: 3rem; +} +.h-14 { + height: 3.5rem; +} +.h-2 { + height: 0.5rem; +} +.h-2\.5 { + height: 0.625rem; +} +.h-3 { + height: 0.75rem; +} +.h-3\.5 { + height: 0.875rem; +} +.h-4 { + height: 1rem; +} +.h-5 { + height: 1.25rem; +} +.h-6 { + height: 1.5rem; +} +.h-64 { + height: 16rem; +} +.h-7 { + height: 1.75rem; +} +.h-8 { + height: 2rem; +} +.h-9 { + height: 2.25rem; +} +.h-\[1\.15rem\] { + height: 1.15rem; +} +.h-\[500px\] { + height: 500px; +} +.h-\[calc\(100\%-1px\)\] { + height: calc(100% - 1px); +} +.h-\[var\(--radix-select-trigger-height\)\] { + height: var(--radix-select-trigger-height); +} +.h-full { + height: 100%; +} +.h-px { + height: 1px; +} +.h-screen { + height: 100vh; +} +.max-h-40 { + max-height: 10rem; +} +.max-h-\[500px\] { + max-height: 500px; +} +.max-h-\[85vh\] { + max-height: 85vh; +} +.max-h-screen { + max-height: 100vh; +} +.min-h-16 { + min-height: 4rem; +} +.min-h-\[60px\] { + min-height: 60px; +} +.w-10 { + width: 2.5rem; +} +.w-12 { + width: 3rem; +} +.w-16 { + width: 4rem; +} +.w-2\.5 { + width: 0.625rem; +} +.w-28 { + width: 7rem; +} +.w-3 { + width: 0.75rem; +} +.w-3\.5 { + width: 0.875rem; +} +.w-32 { + width: 8rem; +} +.w-4 { + width: 1rem; +} +.w-48 { + width: 12rem; +} +.w-5 { + width: 1.25rem; +} +.w-56 { + width: 14rem; +} +.w-6 { + width: 1.5rem; +} +.w-64 { + width: 16rem; +} +.w-7 { + width: 1.75rem; +} +.w-8 { + width: 2rem; +} +.w-9 { + width: 2.25rem; +} +.w-fit { + width: -moz-fit-content; + width: fit-content; +} +.w-full { + width: 100%; +} +.min-w-0 { + min-width: 0px; +} +.min-w-\[8rem\] { + min-width: 8rem; +} +.min-w-\[var\(--radix-select-trigger-width\)\] { + min-width: var(--radix-select-trigger-width); +} +.max-w-2xl { + max-width: 42rem; +} +.max-w-4xl { + max-width: 56rem; +} +.max-w-\[60\%\] { + max-width: 60%; +} +.max-w-\[calc\(100\%-2rem\)\] { + max-width: calc(100% - 2rem); +} +.max-w-lg { + max-width: 32rem; +} +.max-w-md { + max-width: 28rem; +} +.max-w-sm { + max-width: 24rem; +} +.flex-1 { + flex: 1 1 0%; +} +.shrink-0 { + flex-shrink: 0; +} +.grow { + flex-grow: 1; +} +.caption-bottom { + caption-side: bottom; +} +.-translate-y-1\/2 { + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.translate-x-\[-50\%\] { + --tw-translate-x: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.translate-y-0\.5 { + --tw-translate-y: 0.125rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.translate-y-\[-50\%\] { + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +@keyframes pulse { + + 50% { + opacity: .5; + } +} +.animate-pulse { + animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; +} +@keyframes spin { + + to { + transform: rotate(360deg); + } +} +.animate-spin { + animation: spin 1s linear infinite; +} +.cursor-default { + cursor: default; +} +.cursor-not-allowed { + cursor: not-allowed; +} +.cursor-pointer { + cursor: pointer; +} +.touch-none { + touch-action: none; +} +.select-none { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.resize-none { + resize: none; +} +.scroll-my-1 { + scroll-margin-top: 0.25rem; + scroll-margin-bottom: 0.25rem; +} +.auto-rows-min { + grid-auto-rows: min-content; +} +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +.grid-cols-12 { + grid-template-columns: repeat(12, minmax(0, 1fr)); +} +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +.grid-rows-\[auto_auto\] { + grid-template-rows: auto auto; +} +.flex-col { + flex-direction: column; +} +.flex-col-reverse { + flex-direction: column-reverse; +} +.flex-wrap { + flex-wrap: wrap; +} +.items-start { + align-items: flex-start; +} +.items-center { + align-items: center; +} +.justify-end { + justify-content: flex-end; +} +.justify-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.gap-1 { + gap: 0.25rem; +} +.gap-1\.5 { + gap: 0.375rem; +} +.gap-2 { + gap: 0.5rem; +} +.gap-2\.5 { + gap: 0.625rem; +} +.gap-3 { + gap: 0.75rem; +} +.gap-4 { + gap: 1rem; +} +.gap-5 { + gap: 1.25rem; +} +.gap-6 { + gap: 1.5rem; +} +.gap-x-4 { + -moz-column-gap: 1rem; + column-gap: 1rem; +} +.gap-x-6 { + -moz-column-gap: 1.5rem; + column-gap: 1.5rem; +} +.gap-x-8 { + -moz-column-gap: 2rem; + column-gap: 2rem; +} +.gap-y-1 { + row-gap: 0.25rem; +} +.gap-y-1\.5 { + row-gap: 0.375rem; +} +.gap-y-2 { + row-gap: 0.5rem; +} +.gap-y-3 { + row-gap: 0.75rem; +} +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} +.space-y-0\.5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); +} +.space-y-1 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); +} +.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); +} +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} +.space-y-2\.5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.625rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.625rem * var(--tw-space-y-reverse)); +} +.space-y-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); +} +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} +.space-y-5 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); +} +.space-y-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); +} +.self-start { + align-self: flex-start; +} +.justify-self-end { + justify-self: end; +} +.overflow-auto { + overflow: auto; +} +.overflow-hidden { + overflow: hidden; +} +.overflow-x-auto { + overflow-x: auto; +} +.overflow-y-auto { + overflow-y: auto; +} +.overflow-x-hidden { + overflow-x: hidden; +} +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.whitespace-nowrap { + white-space: nowrap; +} +.break-all { + word-break: break-all; +} +.rounded { + border-radius: 0.25rem; +} +.rounded-\[4px\] { + border-radius: 4px; +} +.rounded-\[inherit\] { + border-radius: inherit; +} +.rounded-full { + border-radius: 9999px; +} +.rounded-lg { + border-radius: var(--radius); +} +.rounded-md { + border-radius: calc(var(--radius) - 2px); +} +.rounded-sm { + border-radius: calc(var(--radius) - 4px); +} +.rounded-xl { + border-radius: 0.75rem; +} +.border { + border-width: 1px; +} +.border-2 { + border-width: 2px; +} +.border-b { + border-bottom-width: 1px; +} +.border-l { + border-left-width: 1px; +} +.border-r { + border-right-width: 1px; +} +.border-t { + border-top-width: 1px; +} +.border-dashed { + border-style: dashed; +} +.border-amber-500 { + --tw-border-opacity: 1; + border-color: rgb(245 158 11 / var(--tw-border-opacity, 1)); +} +.border-amber-600 { + --tw-border-opacity: 1; + border-color: rgb(217 119 6 / var(--tw-border-opacity, 1)); +} +.border-amber-700 { + --tw-border-opacity: 1; + border-color: rgb(180 83 9 / var(--tw-border-opacity, 1)); +} +.border-amber-700\/20 { + border-color: rgb(180 83 9 / 0.2); +} +.border-amber-700\/30 { + border-color: rgb(180 83 9 / 0.3); +} +.border-amber-700\/50 { + border-color: rgb(180 83 9 / 0.5); +} +.border-blue-500\/60 { + border-color: rgb(59 130 246 / 0.6); +} +.border-blue-600 { + --tw-border-opacity: 1; + border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); +} +.border-blue-700 { + --tw-border-opacity: 1; + border-color: rgb(29 78 216 / var(--tw-border-opacity, 1)); +} +.border-blue-700\/20 { + border-color: rgb(29 78 216 / 0.2); +} +.border-cyan-600 { + --tw-border-opacity: 1; + border-color: rgb(8 145 178 / var(--tw-border-opacity, 1)); +} +.border-cyan-700\/50 { + border-color: rgb(14 116 144 / 0.5); +} +.border-destructive { + border-color: hsl(var(--destructive)); +} +.border-emerald-400 { + --tw-border-opacity: 1; + border-color: rgb(52 211 153 / var(--tw-border-opacity, 1)); +} +.border-emerald-500 { + --tw-border-opacity: 1; + border-color: rgb(16 185 129 / var(--tw-border-opacity, 1)); +} +.border-emerald-600 { + --tw-border-opacity: 1; + border-color: rgb(5 150 105 / var(--tw-border-opacity, 1)); +} +.border-emerald-600\/50 { + border-color: rgb(5 150 105 / 0.5); +} +.border-emerald-700 { + --tw-border-opacity: 1; + border-color: rgb(4 120 87 / var(--tw-border-opacity, 1)); +} +.border-emerald-700\/20 { + border-color: rgb(4 120 87 / 0.2); +} +.border-emerald-700\/30 { + border-color: rgb(4 120 87 / 0.3); +} +.border-emerald-700\/50 { + border-color: rgb(4 120 87 / 0.5); +} +.border-input { + border-color: hsl(var(--input)); +} +.border-primary { + border-color: hsl(var(--primary)); +} +.border-red-600 { + --tw-border-opacity: 1; + border-color: rgb(220 38 38 / var(--tw-border-opacity, 1)); +} +.border-red-700 { + --tw-border-opacity: 1; + border-color: rgb(185 28 28 / var(--tw-border-opacity, 1)); +} +.border-red-700\/30 { + border-color: rgb(185 28 28 / 0.3); +} +.border-red-700\/50 { + border-color: rgb(185 28 28 / 0.5); +} +.border-slate-600 { + --tw-border-opacity: 1; + border-color: rgb(71 85 105 / var(--tw-border-opacity, 1)); +} +.border-slate-700 { + --tw-border-opacity: 1; + border-color: rgb(51 65 85 / var(--tw-border-opacity, 1)); +} +.border-slate-700\/10 { + border-color: rgb(51 65 85 / 0.1); +} +.border-slate-700\/30 { + border-color: rgb(51 65 85 / 0.3); +} +.border-slate-700\/50 { + border-color: rgb(51 65 85 / 0.5); +} +.border-transparent { + border-color: transparent; +} +.border-violet-600 { + --tw-border-opacity: 1; + border-color: rgb(124 58 237 / var(--tw-border-opacity, 1)); +} +.border-violet-700\/20 { + border-color: rgb(109 40 217 / 0.2); +} +.border-violet-700\/50 { + border-color: rgb(109 40 217 / 0.5); +} +.border-l-transparent { + border-left-color: transparent; +} +.border-t-transparent { + border-top-color: transparent; +} +.bg-\[\#0a0f1a\] { + --tw-bg-opacity: 1; + background-color: rgb(10 15 26 / var(--tw-bg-opacity, 1)); +} +.bg-\[\#0c1222\] { + --tw-bg-opacity: 1; + background-color: rgb(12 18 34 / var(--tw-bg-opacity, 1)); +} +.bg-\[\#0f172a\] { + --tw-bg-opacity: 1; + background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1)); +} +.bg-\[\#111827\] { + --tw-bg-opacity: 1; + background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); +} +.bg-\[\#131c31\] { + --tw-bg-opacity: 1; + background-color: rgb(19 28 49 / var(--tw-bg-opacity, 1)); +} +.bg-amber-500\/20 { + background-color: rgb(245 158 11 / 0.2); +} +.bg-amber-600 { + --tw-bg-opacity: 1; + background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1)); +} +.bg-amber-900\/10 { + background-color: rgb(120 53 15 / 0.1); +} +.bg-amber-900\/20 { + background-color: rgb(120 53 15 / 0.2); +} +.bg-amber-900\/5 { + background-color: rgb(120 53 15 / 0.05); +} +.bg-background { + background-color: hsl(var(--background)); +} +.bg-black\/50 { + background-color: rgb(0 0 0 / 0.5); +} +.bg-blue-500\/10 { + background-color: rgb(59 130 246 / 0.1); +} +.bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); +} +.bg-blue-900\/5 { + background-color: rgb(30 58 138 / 0.05); +} +.bg-border { + background-color: hsl(var(--border)); +} +.bg-card { + background-color: hsl(var(--card)); +} +.bg-cyan-500 { + --tw-bg-opacity: 1; + background-color: rgb(6 182 212 / var(--tw-bg-opacity, 1)); +} +.bg-cyan-900\/10 { + background-color: rgb(22 78 99 / 0.1); +} +.bg-cyan-900\/20 { + background-color: rgb(22 78 99 / 0.2); +} +.bg-destructive { + background-color: hsl(var(--destructive)); +} +.bg-emerald-500 { + --tw-bg-opacity: 1; + background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1)); +} +.bg-emerald-500\/20 { + background-color: rgb(16 185 129 / 0.2); +} +.bg-emerald-600 { + --tw-bg-opacity: 1; + background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1)); +} +.bg-emerald-700 { + --tw-bg-opacity: 1; + background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1)); +} +.bg-emerald-900\/10 { + background-color: rgb(6 78 59 / 0.1); +} +.bg-emerald-900\/20 { + background-color: rgb(6 78 59 / 0.2); +} +.bg-emerald-900\/30 { + background-color: rgb(6 78 59 / 0.3); +} +.bg-emerald-900\/5 { + background-color: rgb(6 78 59 / 0.05); +} +.bg-muted { + background-color: hsl(var(--muted)); +} +.bg-muted\/50 { + background-color: hsl(var(--muted) / 0.5); +} +.bg-popover { + background-color: hsl(var(--popover)); +} +.bg-primary { + background-color: hsl(var(--primary)); +} +.bg-primary\/20 { + background-color: hsl(var(--primary) / 0.2); +} +.bg-red-500\/20 { + background-color: rgb(239 68 68 / 0.2); +} +.bg-red-600 { + --tw-bg-opacity: 1; + background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); +} +.bg-red-900\/10 { + background-color: rgb(127 29 29 / 0.1); +} +.bg-red-900\/20 { + background-color: rgb(127 29 29 / 0.2); +} +.bg-red-900\/5 { + background-color: rgb(127 29 29 / 0.05); +} +.bg-red-950\/30 { + background-color: rgb(69 10 10 / 0.3); +} +.bg-secondary { + background-color: hsl(var(--secondary)); +} +.bg-slate-500\/20 { + background-color: rgb(100 116 139 / 0.2); +} +.bg-slate-700 { + --tw-bg-opacity: 1; + background-color: rgb(51 65 85 / var(--tw-bg-opacity, 1)); +} +.bg-slate-700\/30 { + background-color: rgb(51 65 85 / 0.3); +} +.bg-slate-700\/50 { + background-color: rgb(51 65 85 / 0.5); +} +.bg-slate-700\/60 { + background-color: rgb(51 65 85 / 0.6); +} +.bg-slate-800 { + --tw-bg-opacity: 1; + background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1)); +} +.bg-slate-800\/30 { + background-color: rgb(30 41 59 / 0.3); +} +.bg-slate-800\/40 { + background-color: rgb(30 41 59 / 0.4); +} +.bg-slate-800\/50 { + background-color: rgb(30 41 59 / 0.5); +} +.bg-slate-800\/80 { + background-color: rgb(30 41 59 / 0.8); +} +.bg-slate-900\/20 { + background-color: rgb(15 23 42 / 0.2); +} +.bg-slate-900\/50 { + background-color: rgb(15 23 42 / 0.5); +} +.bg-transparent { + background-color: transparent; +} +.bg-violet-500 { + --tw-bg-opacity: 1; + background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1)); +} +.bg-violet-600 { + --tw-bg-opacity: 1; + background-color: rgb(124 58 237 / var(--tw-bg-opacity, 1)); +} +.bg-violet-700 { + --tw-bg-opacity: 1; + background-color: rgb(109 40 217 / var(--tw-bg-opacity, 1)); +} +.bg-violet-900\/10 { + background-color: rgb(76 29 149 / 0.1); +} +.bg-violet-900\/20 { + background-color: rgb(76 29 149 / 0.2); +} +.fill-current { + fill: currentColor; +} +.p-0 { + padding: 0px; +} +.p-0\.5 { + padding: 0.125rem; +} +.p-1 { + padding: 0.25rem; +} +.p-2 { + padding: 0.5rem; +} +.p-2\.5 { + padding: 0.625rem; +} +.p-3 { + padding: 0.75rem; +} +.p-4 { + padding: 1rem; +} +.p-6 { + padding: 1.5rem; +} +.p-8 { + padding: 2rem; +} +.p-\[3px\] { + padding: 3px; +} +.p-px { + padding: 1px; +} +.px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} +.px-1\.5 { + padding-left: 0.375rem; + padding-right: 0.375rem; +} +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} +.px-2\.5 { + padding-left: 0.625rem; + padding-right: 0.625rem; +} +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.py-0 { + padding-top: 0px; + padding-bottom: 0px; +} +.py-0\.5 { + padding-top: 0.125rem; + padding-bottom: 0.125rem; +} +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} +.py-1\.5 { + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} +.py-16 { + padding-top: 4rem; + padding-bottom: 4rem; +} +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} +.py-6 { + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} +.pb-2 { + padding-bottom: 0.5rem; +} +.pb-3 { + padding-bottom: 0.75rem; +} +.pb-4 { + padding-bottom: 1rem; +} +.pl-2 { + padding-left: 0.5rem; +} +.pl-8 { + padding-left: 2rem; +} +.pl-9 { + padding-left: 2.25rem; +} +.pr-2 { + padding-right: 0.5rem; +} +.pr-4 { + padding-right: 1rem; +} +.pr-6 { + padding-right: 1.5rem; +} +.pr-8 { + padding-right: 2rem; +} +.pt-0 { + padding-top: 0px; +} +.pt-1 { + padding-top: 0.25rem; +} +.pt-2 { + padding-top: 0.5rem; +} +.pt-3 { + padding-top: 0.75rem; +} +.pt-4 { + padding-top: 1rem; +} +.text-left { + text-align: left; +} +.text-center { + text-align: center; +} +.text-right { + text-align: right; +} +.align-middle { + vertical-align: middle; +} +.font-mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} +.text-\[10px\] { + font-size: 10px; +} +.text-\[11px\] { + font-size: 11px; +} +.text-\[9px\] { + font-size: 9px; +} +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} +.font-bold { + font-weight: 700; +} +.font-medium { + font-weight: 500; +} +.font-normal { + font-weight: 400; +} +.font-semibold { + font-weight: 600; +} +.uppercase { + text-transform: uppercase; +} +.capitalize { + text-transform: capitalize; +} +.italic { + font-style: italic; +} +.leading-none { + line-height: 1; +} +.leading-relaxed { + line-height: 1.625; +} +.tracking-tight { + letter-spacing: -0.025em; +} +.tracking-wider { + letter-spacing: 0.05em; +} +.tracking-widest { + letter-spacing: 0.1em; +} +.text-amber-300 { + --tw-text-opacity: 1; + color: rgb(252 211 77 / var(--tw-text-opacity, 1)); +} +.text-amber-400 { + --tw-text-opacity: 1; + color: rgb(251 191 36 / var(--tw-text-opacity, 1)); +} +.text-blue-300 { + --tw-text-opacity: 1; + color: rgb(147 197 253 / var(--tw-text-opacity, 1)); +} +.text-blue-400 { + --tw-text-opacity: 1; + color: rgb(96 165 250 / var(--tw-text-opacity, 1)); +} +.text-card-foreground { + color: hsl(var(--card-foreground)); +} +.text-current { + color: currentColor; +} +.text-cyan-300 { + --tw-text-opacity: 1; + color: rgb(103 232 249 / var(--tw-text-opacity, 1)); +} +.text-cyan-400 { + --tw-text-opacity: 1; + color: rgb(34 211 238 / var(--tw-text-opacity, 1)); +} +.text-destructive-foreground { + color: hsl(var(--destructive-foreground)); +} +.text-emerald-300 { + --tw-text-opacity: 1; + color: rgb(110 231 183 / var(--tw-text-opacity, 1)); +} +.text-emerald-400 { + --tw-text-opacity: 1; + color: rgb(52 211 153 / var(--tw-text-opacity, 1)); +} +.text-emerald-500 { + --tw-text-opacity: 1; + color: rgb(16 185 129 / var(--tw-text-opacity, 1)); +} +.text-foreground { + color: hsl(var(--foreground)); +} +.text-foreground\/50 { + color: hsl(var(--foreground) / 0.5); +} +.text-muted-foreground { + color: hsl(var(--muted-foreground)); +} +.text-popover-foreground { + color: hsl(var(--popover-foreground)); +} +.text-primary { + color: hsl(var(--primary)); +} +.text-primary-foreground { + color: hsl(var(--primary-foreground)); +} +.text-red-300 { + --tw-text-opacity: 1; + color: rgb(252 165 165 / var(--tw-text-opacity, 1)); +} +.text-red-400 { + --tw-text-opacity: 1; + color: rgb(248 113 113 / var(--tw-text-opacity, 1)); +} +.text-red-500 { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.text-secondary-foreground { + color: hsl(var(--secondary-foreground)); +} +.text-slate-100 { + --tw-text-opacity: 1; + color: rgb(241 245 249 / var(--tw-text-opacity, 1)); +} +.text-slate-200 { + --tw-text-opacity: 1; + color: rgb(226 232 240 / var(--tw-text-opacity, 1)); +} +.text-slate-300 { + --tw-text-opacity: 1; + color: rgb(203 213 225 / var(--tw-text-opacity, 1)); +} +.text-slate-400 { + --tw-text-opacity: 1; + color: rgb(148 163 184 / var(--tw-text-opacity, 1)); +} +.text-slate-500 { + --tw-text-opacity: 1; + color: rgb(100 116 139 / var(--tw-text-opacity, 1)); +} +.text-slate-600 { + --tw-text-opacity: 1; + color: rgb(71 85 105 / var(--tw-text-opacity, 1)); +} +.text-slate-700 { + --tw-text-opacity: 1; + color: rgb(51 65 85 / var(--tw-text-opacity, 1)); +} +.text-violet-300 { + --tw-text-opacity: 1; + color: rgb(196 181 253 / var(--tw-text-opacity, 1)); +} +.text-violet-400 { + --tw-text-opacity: 1; + color: rgb(167 139 250 / var(--tw-text-opacity, 1)); +} +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.underline { + text-decoration-line: underline; +} +.line-through { + text-decoration-line: line-through; +} +.decoration-amber-600 { + text-decoration-color: #d97706; +} +.decoration-emerald-700 { + text-decoration-color: #047857; +} +.decoration-wavy { + text-decoration-style: wavy; +} +.underline-offset-4 { + text-underline-offset: 4px; +} +.opacity-0 { + opacity: 0; +} +.opacity-30 { + opacity: 0.3; +} +.opacity-50 { + opacity: 0.5; +} +.opacity-70 { + opacity: 0.7; +} +.opacity-90 { + opacity: 0.9; +} +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.shadow-md { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.shadow-sm { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} +.outline { + outline-style: solid; +} +.ring-0 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.ring-1 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.ring-blue-500\/30 { + --tw-ring-color: rgb(59 130 246 / 0.3); +} +.ring-ring\/50 { + --tw-ring-color: hsl(var(--ring) / 0.5); +} +.ring-offset-background { + --tw-ring-offset-color: hsl(var(--background)); +} +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} +.transition-\[color\2c box-shadow\] { + transition-property: color,box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-none { + transition-property: none; +} +.transition-opacity { + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-shadow { + transition-property: box-shadow; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-transform { + transition-property: transform; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.duration-200 { + transition-duration: 200ms; +} +.selection\:bg-primary *::-moz-selection { + background-color: hsl(var(--primary)); +} +.selection\:bg-primary *::selection { + background-color: hsl(var(--primary)); +} +.selection\:text-primary-foreground *::-moz-selection { + color: hsl(var(--primary-foreground)); +} +.selection\:text-primary-foreground *::selection { + color: hsl(var(--primary-foreground)); +} +.selection\:bg-primary::-moz-selection { + background-color: hsl(var(--primary)); +} +.selection\:bg-primary::selection { + background-color: hsl(var(--primary)); +} +.selection\:text-primary-foreground::-moz-selection { + color: hsl(var(--primary-foreground)); +} +.selection\:text-primary-foreground::selection { + color: hsl(var(--primary-foreground)); +} +.file\:inline-flex::file-selector-button { + display: inline-flex; +} +.file\:h-7::file-selector-button { + height: 1.75rem; +} +.file\:border-0::file-selector-button { + border-width: 0px; +} +.file\:bg-transparent::file-selector-button { + background-color: transparent; +} +.file\:text-sm::file-selector-button { + font-size: 0.875rem; + line-height: 1.25rem; +} +.file\:font-medium::file-selector-button { + font-weight: 500; +} +.file\:text-foreground::file-selector-button { + color: hsl(var(--foreground)); +} +.placeholder\:text-muted-foreground::-moz-placeholder { + color: hsl(var(--muted-foreground)); +} +.placeholder\:text-muted-foreground::placeholder { + color: hsl(var(--muted-foreground)); +} +.placeholder\:text-slate-600::-moz-placeholder { + --tw-text-opacity: 1; + color: rgb(71 85 105 / var(--tw-text-opacity, 1)); +} +.placeholder\:text-slate-600::placeholder { + --tw-text-opacity: 1; + color: rgb(71 85 105 / var(--tw-text-opacity, 1)); +} +.last\:border-b-0:last-child { + border-bottom-width: 0px; +} +.hover\:border-slate-600:hover { + --tw-border-opacity: 1; + border-color: rgb(71 85 105 / var(--tw-border-opacity, 1)); +} +.hover\:bg-accent:hover { + background-color: hsl(var(--accent)); +} +.hover\:bg-amber-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(180 83 9 / var(--tw-bg-opacity, 1)); +} +.hover\:bg-blue-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); +} +.hover\:bg-destructive\/90:hover { + background-color: hsl(var(--destructive) / 0.9); +} +.hover\:bg-emerald-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1)); +} +.hover\:bg-muted\/50:hover { + background-color: hsl(var(--muted) / 0.5); +} +.hover\:bg-primary\/90:hover { + background-color: hsl(var(--primary) / 0.9); +} +.hover\:bg-red-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1)); +} +.hover\:bg-secondary:hover { + background-color: hsl(var(--secondary)); +} +.hover\:bg-secondary\/80:hover { + background-color: hsl(var(--secondary) / 0.8); +} +.hover\:bg-slate-800\/40:hover { + background-color: rgb(30 41 59 / 0.4); +} +.hover\:bg-slate-800\/50:hover { + background-color: rgb(30 41 59 / 0.5); +} +.hover\:bg-slate-800\/60:hover { + background-color: rgb(30 41 59 / 0.6); +} +.hover\:bg-transparent:hover { + background-color: transparent; +} +.hover\:bg-violet-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(124 58 237 / var(--tw-bg-opacity, 1)); +} +.hover\:bg-violet-700:hover { + --tw-bg-opacity: 1; + background-color: rgb(109 40 217 / var(--tw-bg-opacity, 1)); +} +.hover\:text-accent-foreground:hover { + color: hsl(var(--accent-foreground)); +} +.hover\:text-foreground:hover { + color: hsl(var(--foreground)); +} +.hover\:text-red-400:hover { + --tw-text-opacity: 1; + color: rgb(248 113 113 / var(--tw-text-opacity, 1)); +} +.hover\:text-slate-200:hover { + --tw-text-opacity: 1; + color: rgb(226 232 240 / var(--tw-text-opacity, 1)); +} +.hover\:text-slate-300:hover { + --tw-text-opacity: 1; + color: rgb(203 213 225 / var(--tw-text-opacity, 1)); +} +.hover\:text-slate-400:hover { + --tw-text-opacity: 1; + color: rgb(148 163 184 / var(--tw-text-opacity, 1)); +} +.hover\:text-violet-300:hover { + --tw-text-opacity: 1; + color: rgb(196 181 253 / var(--tw-text-opacity, 1)); +} +.hover\:text-white:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.hover\:underline:hover { + text-decoration-line: underline; +} +.hover\:opacity-100:hover { + opacity: 1; +} +.hover\:ring-4:hover { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.focus\:bg-accent:focus { + background-color: hsl(var(--accent)); +} +.focus\:bg-slate-800:focus { + --tw-bg-opacity: 1; + background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1)); +} +.focus\:text-accent-foreground:focus { + color: hsl(var(--accent-foreground)); +} +.focus\:opacity-100:focus { + opacity: 1; +} +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} +.focus\:ring-1:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.focus\:ring-2:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.focus\:ring-emerald-600\/50:focus { + --tw-ring-color: rgb(5 150 105 / 0.5); +} +.focus\:ring-ring:focus { + --tw-ring-color: hsl(var(--ring)); +} +.focus\:ring-offset-2:focus { + --tw-ring-offset-width: 2px; +} +.focus-visible\:border-ring:focus-visible { + border-color: hsl(var(--ring)); +} +.focus-visible\:outline-1:focus-visible { + outline-width: 1px; +} +.focus-visible\:outline-ring:focus-visible { + outline-color: hsl(var(--ring)); +} +.focus-visible\:ring-4:focus-visible { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.focus-visible\:ring-\[3px\]:focus-visible { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.focus-visible\:ring-destructive\/20:focus-visible { + --tw-ring-color: hsl(var(--destructive) / 0.2); +} +.focus-visible\:ring-ring\/50:focus-visible { + --tw-ring-color: hsl(var(--ring) / 0.5); +} +.disabled\:pointer-events-none:disabled { + pointer-events: none; +} +.disabled\:cursor-not-allowed:disabled { + cursor: not-allowed; +} +.disabled\:opacity-50:disabled { + opacity: 0.5; +} +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} +.group.destructive .group-\[\.destructive\]\:border-muted\/40 { + border-color: hsl(var(--muted) / 0.4); +} +.group.destructive .group-\[\.destructive\]\:text-red-300 { + --tw-text-opacity: 1; + color: rgb(252 165 165 / var(--tw-text-opacity, 1)); +} +.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover { + border-color: hsl(var(--destructive) / 0.3); +} +.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover { + background-color: hsl(var(--destructive)); +} +.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover { + color: hsl(var(--destructive-foreground)); +} +.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover { + --tw-text-opacity: 1; + color: rgb(254 242 242 / var(--tw-text-opacity, 1)); +} +.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus { + --tw-ring-color: hsl(var(--destructive)); +} +.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1)); +} +.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus { + --tw-ring-offset-color: #dc2626; +} +.peer:disabled ~ .peer-disabled\:cursor-not-allowed { + cursor: not-allowed; +} +.peer:disabled ~ .peer-disabled\:opacity-50 { + opacity: 0.5; +} +.has-\[\>svg\]\:px-2\.5:has(>svg) { + padding-left: 0.625rem; + padding-right: 0.625rem; +} +.has-\[\>svg\]\:px-3:has(>svg) { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.has-\[\>svg\]\:px-4:has(>svg) { + padding-left: 1rem; + padding-right: 1rem; +} +.data-\[disabled\]\:pointer-events-none[data-disabled] { + pointer-events: none; +} +.data-\[orientation\=horizontal\]\:h-1\.5[data-orientation="horizontal"] { + height: 0.375rem; +} +.data-\[orientation\=horizontal\]\:h-full[data-orientation="horizontal"] { + height: 100%; +} +.data-\[orientation\=horizontal\]\:h-px[data-orientation="horizontal"] { + height: 1px; +} +.data-\[orientation\=vertical\]\:h-full[data-orientation="vertical"] { + height: 100%; +} +.data-\[size\=default\]\:h-9[data-size="default"] { + height: 2.25rem; +} +.data-\[size\=sm\]\:h-8[data-size="sm"] { + height: 2rem; +} +.data-\[orientation\=vertical\]\:min-h-44[data-orientation="vertical"] { + min-height: 11rem; +} +.data-\[orientation\=horizontal\]\:w-full[data-orientation="horizontal"] { + width: 100%; +} +.data-\[orientation\=vertical\]\:w-1\.5[data-orientation="vertical"] { + width: 0.375rem; +} +.data-\[orientation\=vertical\]\:w-auto[data-orientation="vertical"] { + width: auto; +} +.data-\[orientation\=vertical\]\:w-full[data-orientation="vertical"] { + width: 100%; +} +.data-\[orientation\=vertical\]\:w-px[data-orientation="vertical"] { + width: 1px; +} +.data-\[side\=bottom\]\:translate-y-1[data-side="bottom"] { + --tw-translate-y: 0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[side\=left\]\:-translate-x-1[data-side="left"] { + --tw-translate-x: -0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[side\=right\]\:translate-x-1[data-side="right"] { + --tw-translate-x: 0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[side\=top\]\:-translate-y-1[data-side="top"] { + --tw-translate-y: -0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state="checked"] { + --tw-translate-x: calc(100% - 2px); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[state\=unchecked\]\:translate-x-0[data-state="unchecked"] { + --tw-translate-x: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[swipe\=cancel\]\:translate-x-0[data-swipe="cancel"] { + --tw-translate-x: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe="end"] { + --tw-translate-x: var(--radix-toast-swipe-end-x); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe="move"] { + --tw-translate-x: var(--radix-toast-swipe-move-x); + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.data-\[orientation\=vertical\]\:flex-col[data-orientation="vertical"] { + flex-direction: column; +} +.data-\[state\=checked\]\:border-primary[data-state="checked"] { + border-color: hsl(var(--primary)); +} +.data-\[state\=active\]\:bg-background[data-state="active"] { + background-color: hsl(var(--background)); +} +.data-\[state\=active\]\:bg-slate-700\/60[data-state="active"] { + background-color: rgb(51 65 85 / 0.6); +} +.data-\[state\=checked\]\:bg-primary[data-state="checked"] { + background-color: hsl(var(--primary)); +} +.data-\[state\=open\]\:bg-accent[data-state="open"] { + background-color: hsl(var(--accent)); +} +.data-\[state\=selected\]\:bg-muted[data-state="selected"] { + background-color: hsl(var(--muted)); +} +.data-\[state\=unchecked\]\:bg-input[data-state="unchecked"] { + background-color: hsl(var(--input)); +} +.data-\[inset\]\:pl-8[data-inset] { + padding-left: 2rem; +} +.data-\[placeholder\]\:text-muted-foreground[data-placeholder] { + color: hsl(var(--muted-foreground)); +} +.data-\[state\=active\]\:text-white[data-state="active"] { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.data-\[state\=checked\]\:text-primary-foreground[data-state="checked"] { + color: hsl(var(--primary-foreground)); +} +.data-\[state\=open\]\:text-accent-foreground[data-state="open"] { + color: hsl(var(--accent-foreground)); +} +.data-\[state\=open\]\:text-muted-foreground[data-state="open"] { + color: hsl(var(--muted-foreground)); +} +.data-\[variant\=destructive\]\:text-destructive[data-variant="destructive"] { + color: hsl(var(--destructive)); +} +.data-\[disabled\]\:opacity-50[data-disabled] { + opacity: 0.5; +} +.data-\[state\=active\]\:shadow-sm[data-state="active"] { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.data-\[swipe\=move\]\:transition-none[data-swipe="move"] { + transition-property: none; +} +.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot="select-value"] > * { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; +} +.\*\:data-\[slot\=select-value\]\:flex[data-slot="select-value"] > * { + display: flex; +} +.\*\:data-\[slot\=select-value\]\:items-center[data-slot="select-value"] > * { + align-items: center; +} +.\*\:data-\[slot\=select-value\]\:gap-2[data-slot="select-value"] > * { + gap: 0.5rem; +} +.data-\[variant\=destructive\]\:focus\:bg-destructive\/10:focus[data-variant="destructive"] { + background-color: hsl(var(--destructive) / 0.1); +} +.data-\[variant\=destructive\]\:focus\:text-destructive:focus[data-variant="destructive"] { + color: hsl(var(--destructive)); +} +.group[data-disabled="true"] .group-data-\[disabled\=true\]\:pointer-events-none { + pointer-events: none; +} +.group[data-disabled="true"] .group-data-\[disabled\=true\]\:opacity-50 { + opacity: 0.5; +} +.dark\:border-input:is(.dark *) { + border-color: hsl(var(--input)); +} +.dark\:bg-destructive\/60:is(.dark *) { + background-color: hsl(var(--destructive) / 0.6); +} +.dark\:bg-input\/30:is(.dark *) { + background-color: hsl(var(--input) / 0.3); +} +.dark\:text-muted-foreground:is(.dark *) { + color: hsl(var(--muted-foreground)); +} +.dark\:hover\:bg-accent\/50:hover:is(.dark *) { + background-color: hsl(var(--accent) / 0.5); +} +.dark\:hover\:bg-input\/50:hover:is(.dark *) { + background-color: hsl(var(--input) / 0.5); +} +.dark\:focus-visible\:ring-destructive\/40:focus-visible:is(.dark *) { + --tw-ring-color: hsl(var(--destructive) / 0.4); +} +.dark\:data-\[state\=active\]\:border-input[data-state="active"]:is(.dark *) { + border-color: hsl(var(--input)); +} +.dark\:data-\[state\=active\]\:bg-input\/30[data-state="active"]:is(.dark *) { + background-color: hsl(var(--input) / 0.3); +} +.dark\:data-\[state\=checked\]\:bg-primary[data-state="checked"]:is(.dark *) { + background-color: hsl(var(--primary)); +} +.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state="checked"]:is(.dark *) { + background-color: hsl(var(--primary-foreground)); +} +.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state="unchecked"]:is(.dark *) { + background-color: hsl(var(--foreground)); +} +.dark\:data-\[state\=unchecked\]\:bg-input\/80[data-state="unchecked"]:is(.dark *) { + background-color: hsl(var(--input) / 0.8); +} +.dark\:data-\[state\=active\]\:text-foreground[data-state="active"]:is(.dark *) { + color: hsl(var(--foreground)); +} +.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:focus[data-variant="destructive"]:is(.dark *) { + background-color: hsl(var(--destructive) / 0.2); +} +@media (min-width: 640px) { + + .sm\:bottom-0 { + bottom: 0px; + } + + .sm\:right-0 { + right: 0px; + } + + .sm\:top-auto { + top: auto; + } + + .sm\:max-w-lg { + max-width: 32rem; + } + + .sm\:flex-row { + flex-direction: row; + } + + .sm\:flex-col { + flex-direction: column; + } + + .sm\:justify-end { + justify-content: flex-end; + } + + .sm\:text-left { + text-align: left; + } +} +@media (min-width: 768px) { + + .md\:max-w-\[420px\] { + max-width: 420px; + } + + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .md\:text-sm { + font-size: 0.875rem; + line-height: 1.25rem; + } +} +@media (min-width: 1024px) { + + .lg\:col-span-2 { + grid-column: span 2 / span 2; + } + + .lg\:col-span-3 { + grid-column: span 3 / span 3; + } + + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .lg\:grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } +} +.\[\&\+div\]\:text-xs+div { + font-size: 0.75rem; + line-height: 1rem; +} +.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]) { + padding-right: 0px; +} +.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox] { + --tw-translate-y: 2px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.\[\&\>div\]\:bg-blue-500>div { + --tw-bg-opacity: 1; + background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); +} +.\[\&\>div\]\:bg-emerald-500>div { + --tw-bg-opacity: 1; + background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1)); +} +.\[\&\>div\]\:bg-red-500>div { + --tw-bg-opacity: 1; + background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); +} +.\[\&\>svg\]\:pointer-events-none>svg { + pointer-events: none; +} +.\[\&\>svg\]\:size-3>svg { + width: 0.75rem; + height: 0.75rem; +} +.\[\&\>tr\]\:last\:border-b-0:last-child>tr { + border-bottom-width: 0px; +} +.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg { + --tw-rotate: 180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*='size-']) { + width: 1rem; + height: 1rem; +} +.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*='text-']) { + color: hsl(var(--muted-foreground)); +} +.\[\&_svg\]\:pointer-events-none svg { + pointer-events: none; +} +.\[\&_svg\]\:shrink-0 svg { + flex-shrink: 0; +} +.\[\&_tr\:last-child\]\:border-0 tr:last-child { + border-width: 0px; +} +.\[\&_tr\]\:border-b tr { + border-bottom-width: 1px; +} +a.\[a\&\]\:hover\:bg-accent:hover { + background-color: hsl(var(--accent)); +} +a.\[a\&\]\:hover\:bg-destructive\/90:hover { + background-color: hsl(var(--destructive) / 0.9); +} +a.\[a\&\]\:hover\:bg-primary\/90:hover { + background-color: hsl(var(--primary) / 0.9); +} +a.\[a\&\]\:hover\:bg-secondary\/90:hover { + background-color: hsl(var(--secondary) / 0.9); +} +a.\[a\&\]\:hover\:text-accent-foreground:hover { + color: hsl(var(--accent-foreground)); +} + + +/*# sourceMappingURL=index.css.map*/ \ No newline at end of file diff --git a/cockpit-kata/dist/index.css.map b/cockpit-kata/dist/index.css.map new file mode 100644 index 0000000..454467b --- /dev/null +++ b/cockpit-kata/dist/index.css.map @@ -0,0 +1 @@ +{"version":3,"file":"index.css","mappings":"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AAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,aAAmB;EAAnB;AAAmB;AAAnB;EAAA,eAAmB;EAAnB;AAAmB;AAAnB;EAAA,WAAmB;EAAnB;AAAmB;AAAnB;EAAA,cAAmB;EAAnB;AAAmB;AAAnB;EAAA,WAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,uBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;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AmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,qBAAmB;EAAnB;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,sBAAmB;EAAnB;AAAmB;AAAnB;EAAA,qBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,gBAAmB;EAAnB;AAAmB;AAAnB;EAAA,qBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,qBAAmB;EAAnB;AAAmB;AAAnB;EAAA,iBAAmB;EAAnB;AAAmB;AAAnB;EAAA,iBAAmB;EAAnB;AAAmB;AAAnB;EAAA,mBAAmB;EAAnB;AAAmB;AAAnB;EAAA,qBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,iBAAmB;EAAnB;AAAmB;AAAnB;EAAA,mBAAmB;EAAnB;AAAmB;AAAnB;EAAA,iBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,iBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,eAAmB;EAAnB;AAAmB;AAAnB;EAAA,mBAAmB;EAAnB;AAAmB;AAAnB;EAAA,mBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA,kBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAnB;EAAA,oBAAmB;EAAnB;AAAmB;AAAn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","sources":["webpack://cockpit-kata/./src/globals.css"],"sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n --primary: 217.2 91.2% 59.8%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 224.3 76.3% 48%;\n --radius: 0.5rem;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body, #kata-app {\n @apply bg-background text-foreground;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/cockpit-kata/dist/index.d.ts b/cockpit-kata/dist/index.d.ts new file mode 100644 index 0000000..cf6ad55 --- /dev/null +++ b/cockpit-kata/dist/index.d.ts @@ -0,0 +1,13 @@ +/** + * Entry point for the Cockpit module build. + * + * This file imports the KataModule component and mounts it into + * the #kata-app container. In a real Cockpit deployment, this is + * the file referenced by manifest.json → tools.index. + * + * The webpack config bundles this + all dependencies into dist/index.js + * and dist/index.css. Cockpit loads them automatically when the user + * navigates to the "Kata Containers" tool. + */ +import "./globals.css"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/cockpit-kata/dist/index.d.ts.map b/cockpit-kata/dist/index.d.ts.map new file mode 100644 index 0000000..3162b50 --- /dev/null +++ b/cockpit-kata/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,eAAe,CAAC"} \ No newline at end of file diff --git a/cockpit-kata/dist/index.js b/cockpit-kata/dist/index.js new file mode 100644 index 0000000..b35c5b7 --- /dev/null +++ b/cockpit-kata/dist/index.js @@ -0,0 +1,3 @@ +/*! For license information please see index.js.LICENSE.txt */ +(()=>{"use strict";var e={551(e,t,n){var r=n(540),a=n(982);function s(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n