@mrintel/villain-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1131 -0
- package/dist/abap-Y8Dl9g_6.js +7 -0
- package/dist/abap-Y8Dl9g_6.js.map +1 -0
- package/dist/actionscript-3-DZzbMeqX.js +7 -0
- package/dist/actionscript-3-DZzbMeqX.js.map +1 -0
- package/dist/ada-vP6ak0IW.js +7 -0
- package/dist/ada-vP6ak0IW.js.map +1 -0
- package/dist/andromeeda-BIpZ7gaU.js +5 -0
- package/dist/andromeeda-BIpZ7gaU.js.map +1 -0
- package/dist/angular-html-DPB4Rf0C.js +33 -0
- package/dist/angular-html-DPB4Rf0C.js.map +1 -0
- package/dist/angular-ts-CTOR2ofC.js +22 -0
- package/dist/angular-ts-CTOR2ofC.js.map +1 -0
- package/dist/apache-BUjz-sD2.js +7 -0
- package/dist/apache-BUjz-sD2.js.map +1 -0
- package/dist/apex-oLhhs58q.js +7 -0
- package/dist/apex-oLhhs58q.js.map +1 -0
- package/dist/apl-CjNiDgad.js +17 -0
- package/dist/apl-CjNiDgad.js.map +1 -0
- package/dist/applescript-BPx7YFFu.js +7 -0
- package/dist/applescript-BPx7YFFu.js.map +1 -0
- package/dist/ara-Z2fSOxSw.js +7 -0
- package/dist/ara-Z2fSOxSw.js.map +1 -0
- package/dist/asciidoc-B-pCoB3G.js +7 -0
- package/dist/asciidoc-B-pCoB3G.js.map +1 -0
- package/dist/asm-BTWLY5ym.js +7 -0
- package/dist/asm-BTWLY5ym.js.map +1 -0
- package/dist/astro-CFFExE8Q.js +19 -0
- package/dist/astro-CFFExE8Q.js.map +1 -0
- package/dist/aurora-x-BwoVEUWZ.js +5 -0
- package/dist/aurora-x-BwoVEUWZ.js.map +1 -0
- package/dist/awk-Fb0P9dkn.js +7 -0
- package/dist/awk-Fb0P9dkn.js.map +1 -0
- package/dist/ayu-dark-CxPZkpb2.js +5 -0
- package/dist/ayu-dark-CxPZkpb2.js.map +1 -0
- package/dist/ballerina-oZK-YekG.js +7 -0
- package/dist/ballerina-oZK-YekG.js.map +1 -0
- package/dist/bat-0FvbqU9S.js +7 -0
- package/dist/bat-0FvbqU9S.js.map +1 -0
- package/dist/beancount-DqJEb89h.js +7 -0
- package/dist/beancount-DqJEb89h.js.map +1 -0
- package/dist/berry-DODBq_Ff.js +7 -0
- package/dist/berry-DODBq_Ff.js.map +1 -0
- package/dist/bibtex-EULQRLY5.js +7 -0
- package/dist/bibtex-EULQRLY5.js.map +1 -0
- package/dist/bicep-BorU73w0.js +7 -0
- package/dist/bicep-BorU73w0.js.map +1 -0
- package/dist/blade-CRa6j5zS.js +21 -0
- package/dist/blade-CRa6j5zS.js.map +1 -0
- package/dist/bsl-NkNNwerW.js +9 -0
- package/dist/bsl-NkNNwerW.js.map +1 -0
- package/dist/c-eeMepfLm.js +7 -0
- package/dist/c-eeMepfLm.js.map +1 -0
- package/dist/cadence-02UX7mW8.js +7 -0
- package/dist/cadence-02UX7mW8.js.map +1 -0
- package/dist/cairo-DM6WF2e3.js +9 -0
- package/dist/cairo-DM6WF2e3.js.map +1 -0
- package/dist/catppuccin-frappe-D3cH2rXe.js +5 -0
- package/dist/catppuccin-frappe-D3cH2rXe.js.map +1 -0
- package/dist/catppuccin-latte-C0LRGUW4.js +5 -0
- package/dist/catppuccin-latte-C0LRGUW4.js.map +1 -0
- package/dist/catppuccin-macchiato-c5wQ11TT.js +5 -0
- package/dist/catppuccin-macchiato-c5wQ11TT.js.map +1 -0
- package/dist/catppuccin-mocha-WMD6Qvya.js +5 -0
- package/dist/catppuccin-mocha-WMD6Qvya.js.map +1 -0
- package/dist/clarity-PKm5CwqM.js +7 -0
- package/dist/clarity-PKm5CwqM.js.map +1 -0
- package/dist/clojure-CXJfHrL3.js +7 -0
- package/dist/clojure-CXJfHrL3.js.map +1 -0
- package/dist/cmake-BJz8BOTU.js +7 -0
- package/dist/cmake-BJz8BOTU.js.map +1 -0
- package/dist/cobol-HihOMwht.js +11 -0
- package/dist/cobol-HihOMwht.js.map +1 -0
- package/dist/codeowners-Bt9yU6NX.js +7 -0
- package/dist/codeowners-Bt9yU6NX.js.map +1 -0
- package/dist/codeql-DHkodjjI.js +7 -0
- package/dist/codeql-DHkodjjI.js.map +1 -0
- package/dist/coffee-DGBR_nr_.js +9 -0
- package/dist/coffee-DGBR_nr_.js.map +1 -0
- package/dist/common-lisp-EVqT9Zhp.js +7 -0
- package/dist/common-lisp-EVqT9Zhp.js.map +1 -0
- package/dist/components/buttons/Button.svelte.d.ts +1 -0
- package/dist/components/buttons/ButtonGroup.svelte.d.ts +1 -0
- package/dist/components/buttons/FloatingActionButton.svelte.d.ts +1 -0
- package/dist/components/buttons/IconButton.svelte.d.ts +1 -0
- package/dist/components/buttons/LinkButton.svelte.d.ts +1 -0
- package/dist/components/buttons/buttonClasses.d.ts +10 -0
- package/dist/components/buttons/index.d.ts +5 -0
- package/dist/components/cards/Card.svelte.d.ts +1 -0
- package/dist/components/cards/Container.svelte.d.ts +1 -0
- package/dist/components/cards/Divider.svelte.d.ts +1 -0
- package/dist/components/cards/Grid.svelte.d.ts +1 -0
- package/dist/components/cards/Panel.svelte.d.ts +1 -0
- package/dist/components/cards/SectionHeader.svelte.d.ts +1 -0
- package/dist/components/cards/index.d.ts +6 -0
- package/dist/components/data/Avatar.svelte.d.ts +1 -0
- package/dist/components/data/Badge.svelte.d.ts +1 -0
- package/dist/components/data/CodeBlock.svelte.d.ts +1 -0
- package/dist/components/data/List.svelte.d.ts +1 -0
- package/dist/components/data/Pagination.svelte.d.ts +1 -0
- package/dist/components/data/Stat.svelte.d.ts +1 -0
- package/dist/components/data/Table.svelte.d.ts +1 -0
- package/dist/components/data/Tag.svelte.d.ts +1 -0
- package/dist/components/data/index.d.ts +8 -0
- package/dist/components/forms/Checkbox.svelte.d.ts +1 -0
- package/dist/components/forms/FileUpload.svelte.d.ts +1 -0
- package/dist/components/forms/Input.svelte.d.ts +1 -0
- package/dist/components/forms/InputGroup.svelte.d.ts +1 -0
- package/dist/components/forms/RadioGroup.svelte.d.ts +1 -0
- package/dist/components/forms/RangeSlider.svelte.d.ts +1 -0
- package/dist/components/forms/Select.svelte.d.ts +1 -0
- package/dist/components/forms/Switch.svelte.d.ts +1 -0
- package/dist/components/forms/Textarea.svelte.d.ts +1 -0
- package/dist/components/forms/index.d.ts +9 -0
- package/dist/components/navigation/Breadcrumbs.svelte.d.ts +1 -0
- package/dist/components/navigation/ContextMenu.svelte.d.ts +1 -0
- package/dist/components/navigation/DropdownMenu.svelte.d.ts +1 -0
- package/dist/components/navigation/Menu.svelte.d.ts +1 -0
- package/dist/components/navigation/Navbar.svelte.d.ts +1 -0
- package/dist/components/navigation/Sidebar.svelte.d.ts +1 -0
- package/dist/components/navigation/Tabs.svelte.d.ts +1 -0
- package/dist/components/navigation/index.d.ts +7 -0
- package/dist/components/overlays/Alert.svelte.d.ts +1 -0
- package/dist/components/overlays/CommandPalette.svelte.d.ts +1 -0
- package/dist/components/overlays/Drawer.svelte.d.ts +1 -0
- package/dist/components/overlays/Dropdown.svelte.d.ts +1 -0
- package/dist/components/overlays/Modal.svelte.d.ts +1 -0
- package/dist/components/overlays/Popover.svelte.d.ts +1 -0
- package/dist/components/overlays/ProgressBar.svelte.d.ts +1 -0
- package/dist/components/overlays/SkeletonLoader.svelte.d.ts +1 -0
- package/dist/components/overlays/Spinner.svelte.d.ts +1 -0
- package/dist/components/overlays/Toast.svelte.d.ts +1 -0
- package/dist/components/overlays/Tooltip.svelte.d.ts +1 -0
- package/dist/components/overlays/index.d.ts +11 -0
- package/dist/components/typography/Code.svelte.d.ts +1 -0
- package/dist/components/typography/Heading.svelte.d.ts +1 -0
- package/dist/components/typography/Text.svelte.d.ts +1 -0
- package/dist/components/typography/index.d.ts +3 -0
- package/dist/components/utilities/Accordion.svelte.d.ts +1 -0
- package/dist/components/utilities/Carousel.svelte.d.ts +1 -0
- package/dist/components/utilities/Collapse.svelte.d.ts +1 -0
- package/dist/components/utilities/Portal.svelte.d.ts +1 -0
- package/dist/components/utilities/ScrollArea.svelte.d.ts +1 -0
- package/dist/components/utilities/index.d.ts +5 -0
- package/dist/coq-B0L9upzn.js +7 -0
- package/dist/coq-B0L9upzn.js.map +1 -0
- package/dist/cpp-Cj177cuW.js +19 -0
- package/dist/cpp-Cj177cuW.js.map +1 -0
- package/dist/crystal-CRJyc4G-.js +19 -0
- package/dist/crystal-CRJyc4G-.js.map +1 -0
- package/dist/csharp-C7yUs7-w.js +7 -0
- package/dist/csharp-C7yUs7-w.js.map +1 -0
- package/dist/css-CECN5uSL.js +7 -0
- package/dist/css-CECN5uSL.js.map +1 -0
- package/dist/csv-CmYOceLb.js +7 -0
- package/dist/csv-CmYOceLb.js.map +1 -0
- package/dist/cue-ZzumE7IT.js +7 -0
- package/dist/cue-ZzumE7IT.js.map +1 -0
- package/dist/cypher-jpdmjtA6.js +7 -0
- package/dist/cypher-jpdmjtA6.js.map +1 -0
- package/dist/d-CBagWSwH.js +7 -0
- package/dist/d-CBagWSwH.js.map +1 -0
- package/dist/dark-plus-pUHDTVV0.js +5 -0
- package/dist/dark-plus-pUHDTVV0.js.map +1 -0
- package/dist/dart-6ObCrKr9.js +7 -0
- package/dist/dart-6ObCrKr9.js.map +1 -0
- package/dist/dax-CcDT-8dH.js +7 -0
- package/dist/dax-CcDT-8dH.js.map +1 -0
- package/dist/desktop-B93p9R9O.js +7 -0
- package/dist/desktop-B93p9R9O.js.map +1 -0
- package/dist/diff-BxzP2J8R.js +7 -0
- package/dist/diff-BxzP2J8R.js.map +1 -0
- package/dist/docker-CsHqm9tx.js +7 -0
- package/dist/docker-CsHqm9tx.js.map +1 -0
- package/dist/dotenv-BMjVjUL1.js +7 -0
- package/dist/dotenv-BMjVjUL1.js.map +1 -0
- package/dist/dracula-BtZx2Kac.js +5 -0
- package/dist/dracula-BtZx2Kac.js.map +1 -0
- package/dist/dracula-soft-BKa-aqBv.js +5 -0
- package/dist/dracula-soft-BKa-aqBv.js.map +1 -0
- package/dist/dream-maker-PAx17jaB.js +7 -0
- package/dist/dream-maker-PAx17jaB.js.map +1 -0
- package/dist/edge-BYQkOzbF.js +13 -0
- package/dist/edge-BYQkOzbF.js.map +1 -0
- package/dist/elixir-Dh036GMp.js +9 -0
- package/dist/elixir-Dh036GMp.js.map +1 -0
- package/dist/elm-BtNbw_Cd.js +9 -0
- package/dist/elm-BtNbw_Cd.js.map +1 -0
- package/dist/emacs-lisp-Cfxdx5D-.js +7 -0
- package/dist/emacs-lisp-Cfxdx5D-.js.map +1 -0
- package/dist/erb-CS4zioBv.js +11 -0
- package/dist/erb-CS4zioBv.js.map +1 -0
- package/dist/erlang-DNcDT8Hi.js +9 -0
- package/dist/erlang-DNcDT8Hi.js.map +1 -0
- package/dist/everforest-dark-DMCBqXCK.js +5 -0
- package/dist/everforest-dark-DMCBqXCK.js.map +1 -0
- package/dist/everforest-light-BbXl82Em.js +5 -0
- package/dist/everforest-light-BbXl82Em.js.map +1 -0
- package/dist/fennel-N4WcXuKx.js +7 -0
- package/dist/fennel-N4WcXuKx.js.map +1 -0
- package/dist/fish-BTDEUgqH.js +7 -0
- package/dist/fish-BTDEUgqH.js.map +1 -0
- package/dist/fluent-BMXUxfv1.js +7 -0
- package/dist/fluent-BMXUxfv1.js.map +1 -0
- package/dist/fortran-fixed-form-DUsA-VGo.js +9 -0
- package/dist/fortran-fixed-form-DUsA-VGo.js.map +1 -0
- package/dist/fortran-free-form-DPIT_jbP.js +7 -0
- package/dist/fortran-free-form-DPIT_jbP.js.map +1 -0
- package/dist/fsharp-CYOiIVNx.js +9 -0
- package/dist/fsharp-CYOiIVNx.js.map +1 -0
- package/dist/gdresource-BwtMIoBm.js +11 -0
- package/dist/gdresource-BwtMIoBm.js.map +1 -0
- package/dist/gdscript-BifyeYhI.js +7 -0
- package/dist/gdscript-BifyeYhI.js.map +1 -0
- package/dist/gdshader-Bk8fF6yr.js +7 -0
- package/dist/gdshader-Bk8fF6yr.js.map +1 -0
- package/dist/genie-DzUvd7U9.js +7 -0
- package/dist/genie-DzUvd7U9.js.map +1 -0
- package/dist/gherkin-DHRaV0YP.js +7 -0
- package/dist/gherkin-DHRaV0YP.js.map +1 -0
- package/dist/git-commit-Bd32YZ0K.js +9 -0
- package/dist/git-commit-Bd32YZ0K.js.map +1 -0
- package/dist/git-rebase-ZWUFO_T4.js +9 -0
- package/dist/git-rebase-ZWUFO_T4.js.map +1 -0
- package/dist/github-dark-DenFmJkN.js +5 -0
- package/dist/github-dark-DenFmJkN.js.map +1 -0
- package/dist/github-dark-default-BJPUVz4H.js +5 -0
- package/dist/github-dark-default-BJPUVz4H.js.map +1 -0
- package/dist/github-dark-dimmed-DUshB20C.js +5 -0
- package/dist/github-dark-dimmed-DUshB20C.js.map +1 -0
- package/dist/github-dark-high-contrast-D3aGCnF8.js +5 -0
- package/dist/github-dark-high-contrast-D3aGCnF8.js.map +1 -0
- package/dist/github-light-JYsPkUQd.js +5 -0
- package/dist/github-light-JYsPkUQd.js.map +1 -0
- package/dist/github-light-default-D99KPAby.js +5 -0
- package/dist/github-light-default-D99KPAby.js.map +1 -0
- package/dist/github-light-high-contrast-BbmZE-Mp.js +5 -0
- package/dist/github-light-high-contrast-BbmZE-Mp.js.map +1 -0
- package/dist/gleam-Bv284lvN.js +7 -0
- package/dist/gleam-Bv284lvN.js.map +1 -0
- package/dist/glimmer-js-DkxNrfPT.js +15 -0
- package/dist/glimmer-js-DkxNrfPT.js.map +1 -0
- package/dist/glimmer-ts-D6YZEmK_.js +15 -0
- package/dist/glimmer-ts-D6YZEmK_.js.map +1 -0
- package/dist/glsl-CkUcVZNK.js +9 -0
- package/dist/glsl-CkUcVZNK.js.map +1 -0
- package/dist/gnuplot-yPG9-sE_.js +7 -0
- package/dist/gnuplot-yPG9-sE_.js.map +1 -0
- package/dist/go-ChxJuLYK.js +7 -0
- package/dist/go-ChxJuLYK.js.map +1 -0
- package/dist/graphql-CBu2ehBn.js +15 -0
- package/dist/graphql-CBu2ehBn.js.map +1 -0
- package/dist/groovy-CJQTphOW.js +7 -0
- package/dist/groovy-CJQTphOW.js.map +1 -0
- package/dist/gruvbox-dark-hard-C5HOtKIh.js +5 -0
- package/dist/gruvbox-dark-hard-C5HOtKIh.js.map +1 -0
- package/dist/gruvbox-dark-medium-FVgwJHuz.js +5 -0
- package/dist/gruvbox-dark-medium-FVgwJHuz.js.map +1 -0
- package/dist/gruvbox-dark-soft-B46F314v.js +5 -0
- package/dist/gruvbox-dark-soft-B46F314v.js.map +1 -0
- package/dist/gruvbox-light-hard-CJD38wDZ.js +5 -0
- package/dist/gruvbox-light-hard-CJD38wDZ.js.map +1 -0
- package/dist/gruvbox-light-medium-BlIhMYTA.js +5 -0
- package/dist/gruvbox-light-medium-BlIhMYTA.js.map +1 -0
- package/dist/gruvbox-light-soft-DoPHyLVZ.js +5 -0
- package/dist/gruvbox-light-soft-DoPHyLVZ.js.map +1 -0
- package/dist/hack-ItRNKiEb.js +11 -0
- package/dist/hack-ItRNKiEb.js.map +1 -0
- package/dist/haml-NZLVzu_R.js +11 -0
- package/dist/haml-NZLVzu_R.js.map +1 -0
- package/dist/handlebars-mxStpSE7.js +15 -0
- package/dist/handlebars-mxStpSE7.js.map +1 -0
- package/dist/haskell-WeIwNIP6.js +7 -0
- package/dist/haskell-WeIwNIP6.js.map +1 -0
- package/dist/haxe-TztHsm5T.js +7 -0
- package/dist/haxe-TztHsm5T.js.map +1 -0
- package/dist/hcl-D438OF-I.js +7 -0
- package/dist/hcl-D438OF-I.js.map +1 -0
- package/dist/hjson-DYBUbqOl.js +7 -0
- package/dist/hjson-DYBUbqOl.js.map +1 -0
- package/dist/hlsl-Bk8TCZNL.js +7 -0
- package/dist/hlsl-Bk8TCZNL.js.map +1 -0
- package/dist/houston-BDYrDoDW.js +5 -0
- package/dist/houston-BDYrDoDW.js.map +1 -0
- package/dist/html-B50bmoVb.js +11 -0
- package/dist/html-B50bmoVb.js.map +1 -0
- package/dist/html-derivative-C6bxFbFW.js +9 -0
- package/dist/html-derivative-C6bxFbFW.js.map +1 -0
- package/dist/http-DLvAkeD-.js +15 -0
- package/dist/http-DLvAkeD-.js.map +1 -0
- package/dist/hurl-CgkFN90t.js +13 -0
- package/dist/hurl-CgkFN90t.js.map +1 -0
- package/dist/hxml-GbqSQCLa.js +9 -0
- package/dist/hxml-GbqSQCLa.js.map +1 -0
- package/dist/hy-Brt5EZ7-.js +7 -0
- package/dist/hy-Brt5EZ7-.js.map +1 -0
- package/dist/imba-CimUv-Uh.js +7 -0
- package/dist/imba-CimUv-Uh.js.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +12345 -0
- package/dist/index.js.map +1 -0
- package/dist/ini-BZIuRIvJ.js +7 -0
- package/dist/ini-BZIuRIvJ.js.map +1 -0
- package/dist/java-DY6VlHhP.js +7 -0
- package/dist/java-DY6VlHhP.js.map +1 -0
- package/dist/javascript-C25yR2R2.js +7 -0
- package/dist/javascript-C25yR2R2.js.map +1 -0
- package/dist/jinja-CFW5uAwY.js +12 -0
- package/dist/jinja-CFW5uAwY.js.map +1 -0
- package/dist/jison-DdreslRX.js +9 -0
- package/dist/jison-DdreslRX.js.map +1 -0
- package/dist/json-DxJze_jm.js +7 -0
- package/dist/json-DxJze_jm.js.map +1 -0
- package/dist/json5-BT4Fjg39.js +7 -0
- package/dist/json5-BT4Fjg39.js.map +1 -0
- package/dist/jsonc-CHjZD8gR.js +7 -0
- package/dist/jsonc-CHjZD8gR.js.map +1 -0
- package/dist/jsonl-BGuvDmy9.js +7 -0
- package/dist/jsonl-BGuvDmy9.js.map +1 -0
- package/dist/jsonnet-Bx2cfsXg.js +7 -0
- package/dist/jsonnet-Bx2cfsXg.js.map +1 -0
- package/dist/jssm-BcADi6EI.js +7 -0
- package/dist/jssm-BcADi6EI.js.map +1 -0
- package/dist/jsx-BtKADgXT.js +7 -0
- package/dist/jsx-BtKADgXT.js.map +1 -0
- package/dist/julia--2-efCjg.js +17 -0
- package/dist/julia--2-efCjg.js.map +1 -0
- package/dist/kanagawa-dragon-CiKur4Hl.js +5 -0
- package/dist/kanagawa-dragon-CiKur4Hl.js.map +1 -0
- package/dist/kanagawa-lotus-BKu-smKu.js +5 -0
- package/dist/kanagawa-lotus-BKu-smKu.js.map +1 -0
- package/dist/kanagawa-wave-CQwozSzG.js +5 -0
- package/dist/kanagawa-wave-CQwozSzG.js.map +1 -0
- package/dist/kdl-BNOv9TC3.js +7 -0
- package/dist/kdl-BNOv9TC3.js.map +1 -0
- package/dist/kotlin-ByBMgTeR.js +7 -0
- package/dist/kotlin-ByBMgTeR.js.map +1 -0
- package/dist/kusto-VWFLl2T0.js +7 -0
- package/dist/kusto-VWFLl2T0.js.map +1 -0
- package/dist/laserwave-6a00oqik.js +5 -0
- package/dist/laserwave-6a00oqik.js.map +1 -0
- package/dist/latex-Cs75fyNk.js +9 -0
- package/dist/latex-Cs75fyNk.js.map +1 -0
- package/dist/lean-D5yRrexI.js +7 -0
- package/dist/lean-D5yRrexI.js.map +1 -0
- package/dist/less-B1GLI2Di.js +7 -0
- package/dist/less-B1GLI2Di.js.map +1 -0
- package/dist/lib/internal/id.d.ts +12 -0
- package/dist/light-plus-CZuVqSLX.js +5 -0
- package/dist/light-plus-CZuVqSLX.js.map +1 -0
- package/dist/liquid-CHzkx3jT.js +15 -0
- package/dist/liquid-CHzkx3jT.js.map +1 -0
- package/dist/llvm-co1rIKs3.js +7 -0
- package/dist/llvm-co1rIKs3.js.map +1 -0
- package/dist/log-Al8wyEFV.js +7 -0
- package/dist/log-Al8wyEFV.js.map +1 -0
- package/dist/logo-DBa4JDzV.js +7 -0
- package/dist/logo-DBa4JDzV.js.map +1 -0
- package/dist/lua-kX5WP_P5.js +9 -0
- package/dist/lua-kX5WP_P5.js.map +1 -0
- package/dist/luau-DtBSxLyz.js +7 -0
- package/dist/luau-DtBSxLyz.js.map +1 -0
- package/dist/make-CsMclxtr.js +7 -0
- package/dist/make-CsMclxtr.js.map +1 -0
- package/dist/markdown-CrScaQ96.js +7 -0
- package/dist/markdown-CrScaQ96.js.map +1 -0
- package/dist/marko-ls0Jg2j8.js +15 -0
- package/dist/marko-ls0Jg2j8.js.map +1 -0
- package/dist/material-theme-D6KBX41T.js +5 -0
- package/dist/material-theme-D6KBX41T.js.map +1 -0
- package/dist/material-theme-darker-CkRroheE.js +5 -0
- package/dist/material-theme-darker-CkRroheE.js.map +1 -0
- package/dist/material-theme-lighter-BUBw43Yz.js +5 -0
- package/dist/material-theme-lighter-BUBw43Yz.js.map +1 -0
- package/dist/material-theme-ocean-ClGX14Ja.js +5 -0
- package/dist/material-theme-ocean-ClGX14Ja.js.map +1 -0
- package/dist/material-theme-palenight-C1RVm8K1.js +5 -0
- package/dist/material-theme-palenight-C1RVm8K1.js.map +1 -0
- package/dist/matlab-BOAaUVP0.js +7 -0
- package/dist/matlab-BOAaUVP0.js.map +1 -0
- package/dist/mdc-uaivvctV.js +13 -0
- package/dist/mdc-uaivvctV.js.map +1 -0
- package/dist/mdx-BOhZZUJ8.js +7 -0
- package/dist/mdx-BOhZZUJ8.js.map +1 -0
- package/dist/mermaid-B0ixDHKN.js +7 -0
- package/dist/mermaid-B0ixDHKN.js.map +1 -0
- package/dist/min-dark-C7ak0t6c.js +5 -0
- package/dist/min-dark-C7ak0t6c.js.map +1 -0
- package/dist/min-light-CKFxVcPp.js +5 -0
- package/dist/min-light-CKFxVcPp.js.map +1 -0
- package/dist/mipsasm-CTx18fBl.js +7 -0
- package/dist/mipsasm-CTx18fBl.js.map +1 -0
- package/dist/mojo-BD611d7o.js +7 -0
- package/dist/mojo-BD611d7o.js.map +1 -0
- package/dist/monokai-C1KBYcO0.js +5 -0
- package/dist/monokai-C1KBYcO0.js.map +1 -0
- package/dist/move-F-dICmj2.js +7 -0
- package/dist/move-F-dICmj2.js.map +1 -0
- package/dist/narrat-DmhDCBs-.js +7 -0
- package/dist/narrat-DmhDCBs-.js.map +1 -0
- package/dist/nextflow-DmSVRGjG.js +7 -0
- package/dist/nextflow-DmSVRGjG.js.map +1 -0
- package/dist/nginx-5vhPAEw3.js +9 -0
- package/dist/nginx-5vhPAEw3.js.map +1 -0
- package/dist/night-owl-Bm2rzalh.js +5 -0
- package/dist/night-owl-Bm2rzalh.js.map +1 -0
- package/dist/nim-QAjRdh9w.js +21 -0
- package/dist/nim-QAjRdh9w.js.map +1 -0
- package/dist/nix-BZK5F767.js +10 -0
- package/dist/nix-BZK5F767.js.map +1 -0
- package/dist/nord-CC5OiUXg.js +5 -0
- package/dist/nord-CC5OiUXg.js.map +1 -0
- package/dist/nushell-D8j3dhT-.js +7 -0
- package/dist/nushell-D8j3dhT-.js.map +1 -0
- package/dist/objective-c-Itk8tzmv.js +7 -0
- package/dist/objective-c-Itk8tzmv.js.map +1 -0
- package/dist/objective-cpp-DGt5UKRO.js +7 -0
- package/dist/objective-cpp-DGt5UKRO.js.map +1 -0
- package/dist/ocaml-eSVK32Eg.js +7 -0
- package/dist/ocaml-eSVK32Eg.js.map +1 -0
- package/dist/one-dark-pro-DTA3VF0_.js +5 -0
- package/dist/one-dark-pro-DTA3VF0_.js.map +1 -0
- package/dist/one-light-D9sNaUtq.js +5 -0
- package/dist/one-light-D9sNaUtq.js.map +1 -0
- package/dist/openscad-Sp5uZ6f2.js +7 -0
- package/dist/openscad-Sp5uZ6f2.js.map +1 -0
- package/dist/pascal-xy8pJNns.js +7 -0
- package/dist/pascal-xy8pJNns.js.map +1 -0
- package/dist/perl-DkVrgJBg.js +17 -0
- package/dist/perl-DkVrgJBg.js.map +1 -0
- package/dist/php-j2zCzTEz.js +19 -0
- package/dist/php-j2zCzTEz.js.map +1 -0
- package/dist/pkl-C-zSNmaA.js +7 -0
- package/dist/pkl-C-zSNmaA.js.map +1 -0
- package/dist/plastic-CSTz3KZp.js +5 -0
- package/dist/plastic-CSTz3KZp.js.map +1 -0
- package/dist/plsql-pVbGZfOv.js +7 -0
- package/dist/plsql-pVbGZfOv.js.map +1 -0
- package/dist/po-BNfHvqmm.js +7 -0
- package/dist/po-BNfHvqmm.js.map +1 -0
- package/dist/poimandres-C-VADXHD.js +5 -0
- package/dist/poimandres-C-VADXHD.js.map +1 -0
- package/dist/polar-CAZahv3u.js +7 -0
- package/dist/polar-CAZahv3u.js.map +1 -0
- package/dist/postcss-05aHdL-n.js +7 -0
- package/dist/postcss-05aHdL-n.js.map +1 -0
- package/dist/powerquery-DI9HkTvs.js +7 -0
- package/dist/powerquery-DI9HkTvs.js.map +1 -0
- package/dist/powershell-Clc4ydu-.js +7 -0
- package/dist/powershell-Clc4ydu-.js.map +1 -0
- package/dist/prisma-FZjmVtSl.js +7 -0
- package/dist/prisma-FZjmVtSl.js.map +1 -0
- package/dist/prolog-C5-yg4TO.js +7 -0
- package/dist/prolog-C5-yg4TO.js.map +1 -0
- package/dist/proto-MmCPeFAD.js +7 -0
- package/dist/proto-MmCPeFAD.js.map +1 -0
- package/dist/pug-XOw9Q1Ho.js +13 -0
- package/dist/pug-XOw9Q1Ho.js.map +1 -0
- package/dist/puppet-CUJHmnxV.js +7 -0
- package/dist/puppet-CUJHmnxV.js.map +1 -0
- package/dist/purescript-rUfGld-4.js +7 -0
- package/dist/purescript-rUfGld-4.js.map +1 -0
- package/dist/python-BFNSHbwJ.js +7 -0
- package/dist/python-BFNSHbwJ.js.map +1 -0
- package/dist/qml-rTNXsquU.js +9 -0
- package/dist/qml-rTNXsquU.js.map +1 -0
- package/dist/qmldir-BInDYbpo.js +7 -0
- package/dist/qmldir-BInDYbpo.js.map +1 -0
- package/dist/qss-AeJTysr_.js +7 -0
- package/dist/qss-AeJTysr_.js.map +1 -0
- package/dist/r-Bm0uF0U2.js +7 -0
- package/dist/r-Bm0uF0U2.js.map +1 -0
- package/dist/racket-B83wSAja.js +7 -0
- package/dist/racket-B83wSAja.js.map +1 -0
- package/dist/raku-nEQ4ZJJ7.js +7 -0
- package/dist/raku-nEQ4ZJJ7.js.map +1 -0
- package/dist/razor-B1z-bksM.js +11 -0
- package/dist/razor-B1z-bksM.js.map +1 -0
- package/dist/red-7y8PH7HH.js +5 -0
- package/dist/red-7y8PH7HH.js.map +1 -0
- package/dist/reg-m_s_Kiip.js +7 -0
- package/dist/reg-m_s_Kiip.js.map +1 -0
- package/dist/regexp-BazyLpPg.js +7 -0
- package/dist/regexp-BazyLpPg.js.map +1 -0
- package/dist/rel-BcRfyd6Q.js +7 -0
- package/dist/rel-BcRfyd6Q.js.map +1 -0
- package/dist/riscv-Ce8MAQLP.js +7 -0
- package/dist/riscv-Ce8MAQLP.js.map +1 -0
- package/dist/rose-pine-BKc3yVeu.js +5 -0
- package/dist/rose-pine-BKc3yVeu.js.map +1 -0
- package/dist/rose-pine-dawn-BulJcPZT.js +5 -0
- package/dist/rose-pine-dawn-BulJcPZT.js.map +1 -0
- package/dist/rose-pine-moon-j6jiXKV8.js +5 -0
- package/dist/rose-pine-moon-j6jiXKV8.js.map +1 -0
- package/dist/rosmsg-Cz0w1km8.js +7 -0
- package/dist/rosmsg-Cz0w1km8.js.map +1 -0
- package/dist/rst-CcbeA9zE.js +23 -0
- package/dist/rst-CcbeA9zE.js.map +1 -0
- package/dist/ruby-DMPw6uKF.js +31 -0
- package/dist/ruby-DMPw6uKF.js.map +1 -0
- package/dist/rust-CLzF9zIN.js +7 -0
- package/dist/rust-CLzF9zIN.js.map +1 -0
- package/dist/sas-fpEvgATw.js +9 -0
- package/dist/sas-fpEvgATw.js.map +1 -0
- package/dist/sass-DxHp5rTx.js +7 -0
- package/dist/sass-DxHp5rTx.js.map +1 -0
- package/dist/scala-D4grkFkl.js +7 -0
- package/dist/scala-D4grkFkl.js.map +1 -0
- package/dist/scheme-BCRWuEm4.js +7 -0
- package/dist/scheme-BCRWuEm4.js.map +1 -0
- package/dist/scss-B1FaCqwR.js +9 -0
- package/dist/scss-B1FaCqwR.js.map +1 -0
- package/dist/sdbl-B7T8abf4.js +7 -0
- package/dist/sdbl-B7T8abf4.js.map +1 -0
- package/dist/shaderlab-Cr62-Wb4.js +9 -0
- package/dist/shaderlab-Cr62-Wb4.js.map +1 -0
- package/dist/shellscript-InADTalH.js +7 -0
- package/dist/shellscript-InADTalH.js.map +1 -0
- package/dist/shellsession-DiDJNQdy.js +9 -0
- package/dist/shellsession-DiDJNQdy.js.map +1 -0
- package/dist/slack-dark-i7wN4OET.js +5 -0
- package/dist/slack-dark-i7wN4OET.js.map +1 -0
- package/dist/slack-ochin-ndHf0LoP.js +5 -0
- package/dist/slack-ochin-ndHf0LoP.js.map +1 -0
- package/dist/smalltalk-BlI1_OkM.js +7 -0
- package/dist/smalltalk-BlI1_OkM.js.map +1 -0
- package/dist/snazzy-light-BlSJXAu4.js +5 -0
- package/dist/snazzy-light-BlSJXAu4.js.map +1 -0
- package/dist/solarized-dark-UTmkh7lw.js +5 -0
- package/dist/solarized-dark-UTmkh7lw.js.map +1 -0
- package/dist/solarized-light-BheCkDPT.js +5 -0
- package/dist/solarized-light-BheCkDPT.js.map +1 -0
- package/dist/solidity-DUWnFhS6.js +7 -0
- package/dist/solidity-DUWnFhS6.js.map +1 -0
- package/dist/soy-C1-6njHa.js +9 -0
- package/dist/soy-C1-6njHa.js.map +1 -0
- package/dist/sparql-B0KWFEri.js +9 -0
- package/dist/sparql-B0KWFEri.js.map +1 -0
- package/dist/splunk-CRXR8A9s.js +7 -0
- package/dist/splunk-CRXR8A9s.js.map +1 -0
- package/dist/sql-Cn_v3PB0.js +7 -0
- package/dist/sql-Cn_v3PB0.js.map +1 -0
- package/dist/ssh-config-DP-hNVbF.js +7 -0
- package/dist/ssh-config-DP-hNVbF.js.map +1 -0
- package/dist/stata-B8c5fTjX.js +9 -0
- package/dist/stata-B8c5fTjX.js.map +1 -0
- package/dist/stylus-CyKEU1Ej.js +7 -0
- package/dist/stylus-CyKEU1Ej.js.map +1 -0
- package/dist/svelte-5UasyOg7.js +15 -0
- package/dist/svelte-5UasyOg7.js.map +1 -0
- package/dist/swift-9UzSvamq.js +7 -0
- package/dist/swift-9UzSvamq.js.map +1 -0
- package/dist/synthwave-84-NU3C_KFZ.js +5 -0
- package/dist/synthwave-84-NU3C_KFZ.js.map +1 -0
- package/dist/system-verilog-BCm7smPJ.js +7 -0
- package/dist/system-verilog-BCm7smPJ.js.map +1 -0
- package/dist/systemd-C-4qm6XH.js +7 -0
- package/dist/systemd-C-4qm6XH.js.map +1 -0
- package/dist/talonscript-CFF3LF_O.js +7 -0
- package/dist/talonscript-CFF3LF_O.js.map +1 -0
- package/dist/tasl-Cg_WBUAe.js +7 -0
- package/dist/tasl-Cg_WBUAe.js.map +1 -0
- package/dist/tcl-DN7buRTF.js +7 -0
- package/dist/tcl-DN7buRTF.js.map +1 -0
- package/dist/templ-peLZIM2D.js +13 -0
- package/dist/templ-peLZIM2D.js.map +1 -0
- package/dist/terraform-DGvcn9zM.js +7 -0
- package/dist/terraform-DGvcn9zM.js.map +1 -0
- package/dist/tex-DpOayVob.js +9 -0
- package/dist/tex-DpOayVob.js.map +1 -0
- package/dist/tokyo-night-DP4TmcQl.js +5 -0
- package/dist/tokyo-night-DP4TmcQl.js.map +1 -0
- package/dist/toml-DY62mUL_.js +7 -0
- package/dist/toml-DY62mUL_.js.map +1 -0
- package/dist/ts-tags-ioVe2PKw.js +42 -0
- package/dist/ts-tags-ioVe2PKw.js.map +1 -0
- package/dist/tsv-BtvSkaG0.js +7 -0
- package/dist/tsv-BtvSkaG0.js.map +1 -0
- package/dist/tsx-B8rCNbgL.js +7 -0
- package/dist/tsx-B8rCNbgL.js.map +1 -0
- package/dist/turtle-_H59FV7D.js +7 -0
- package/dist/turtle-_H59FV7D.js.map +1 -0
- package/dist/twig-CcRLVyUg.js +19 -0
- package/dist/twig-CcRLVyUg.js.map +1 -0
- package/dist/typescript-RycA9KXf.js +7 -0
- package/dist/typescript-RycA9KXf.js.map +1 -0
- package/dist/typespec-DWqp-kUU.js +7 -0
- package/dist/typespec-DWqp-kUU.js.map +1 -0
- package/dist/typst-D_1QKWns.js +7 -0
- package/dist/typst-D_1QKWns.js.map +1 -0
- package/dist/v-BPCNiyYe.js +7 -0
- package/dist/v-BPCNiyYe.js.map +1 -0
- package/dist/vala-uxaPR7d1.js +7 -0
- package/dist/vala-uxaPR7d1.js.map +1 -0
- package/dist/vb-D8_c5-KN.js +7 -0
- package/dist/vb-D8_c5-KN.js.map +1 -0
- package/dist/verilog-B-bybjPF.js +7 -0
- package/dist/verilog-B-bybjPF.js.map +1 -0
- package/dist/vesper-BckBta1U.js +5 -0
- package/dist/vesper-BckBta1U.js.map +1 -0
- package/dist/vhdl-CUlNa8ac.js +7 -0
- package/dist/vhdl-CUlNa8ac.js.map +1 -0
- package/dist/viml-DsfA-sWm.js +7 -0
- package/dist/viml-DsfA-sWm.js.map +1 -0
- package/dist/vitesse-black-BoGvW84i.js +5 -0
- package/dist/vitesse-black-BoGvW84i.js.map +1 -0
- package/dist/vitesse-dark-Cym-eLtO.js +5 -0
- package/dist/vitesse-dark-Cym-eLtO.js.map +1 -0
- package/dist/vitesse-light-CcmG315c.js +5 -0
- package/dist/vitesse-light-CcmG315c.js.map +1 -0
- package/dist/vue-DOVAQqiz.js +32 -0
- package/dist/vue-DOVAQqiz.js.map +1 -0
- package/dist/vue-html-C7WI2elu.js +11 -0
- package/dist/vue-html-C7WI2elu.js.map +1 -0
- package/dist/vue-vine-D386fra9.js +21 -0
- package/dist/vue-vine-D386fra9.js.map +1 -0
- package/dist/vyper-CPQuu50u.js +7 -0
- package/dist/vyper-CPQuu50u.js.map +1 -0
- package/dist/wasm-BBXxrAl7.js +7 -0
- package/dist/wasm-BBXxrAl7.js.map +1 -0
- package/dist/wasm-DQxwEHae.js +8 -0
- package/dist/wasm-DQxwEHae.js.map +1 -0
- package/dist/wenyan-pbVjoM9_.js +7 -0
- package/dist/wenyan-pbVjoM9_.js.map +1 -0
- package/dist/wgsl-DY4iK1q1.js +7 -0
- package/dist/wgsl-DY4iK1q1.js.map +1 -0
- package/dist/wikitext-Z-MoUasO.js +7 -0
- package/dist/wikitext-Z-MoUasO.js.map +1 -0
- package/dist/wit-CQMQOlTg.js +7 -0
- package/dist/wit-CQMQOlTg.js.map +1 -0
- package/dist/wolfram-Dz4KXISs.js +7 -0
- package/dist/wolfram-Dz4KXISs.js.map +1 -0
- package/dist/xml-C2J0sS9M.js +9 -0
- package/dist/xml-C2J0sS9M.js.map +1 -0
- package/dist/xsl-BmSZphgC.js +9 -0
- package/dist/xsl-BmSZphgC.js.map +1 -0
- package/dist/yaml-DaO7k5B1.js +7 -0
- package/dist/yaml-DaO7k5B1.js.map +1 -0
- package/dist/zenscript-CxBjpf9c.js +7 -0
- package/dist/zenscript-CxBjpf9c.js.map +1 -0
- package/dist/zig-Vm0PO9wB.js +7 -0
- package/dist/zig-Vm0PO9wB.js.map +1 -0
- package/package.json +78 -0
package/README.md
ADDED
|
@@ -0,0 +1,1131 @@
|
|
|
1
|
+
# @mrintel/villain-ui
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@mrintel/villain-ui)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
A luxury Svelte 5 component library with a distinctive dark aesthetic. Built for modern web applications that demand elegance, performance, and exceptional user experience.
|
|
7
|
+
|
|
8
|
+
## ✨ Features
|
|
9
|
+
|
|
10
|
+
- **🚀 Svelte 5 with Runes** - Built on the latest Svelte 5 reactivity system with full TypeScript support
|
|
11
|
+
- **🎨 Luxury Dark Aesthetic** - Premium glass morphism, accent glows, and sophisticated depth
|
|
12
|
+
- **🎭 Tailwind CSS v4** - Powered by the latest Tailwind with CSS variable theming
|
|
13
|
+
- **🌳 Tree-Shakeable** - Import only what you need for optimal bundle size
|
|
14
|
+
- **🎯 Fully Typed** - Strict TypeScript mode with complete type definitions
|
|
15
|
+
- **🎬 Premium Motion** - Smooth animations with custom luxury easing curves
|
|
16
|
+
- **🔧 Highly Customizable** - Theme via CSS variables without touching component code
|
|
17
|
+
- **♿ Accessible** - ARIA-compliant components following WAI-ARIA best practices
|
|
18
|
+
|
|
19
|
+
## 📦 Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# npm
|
|
23
|
+
npm install @mrintel/villain-ui
|
|
24
|
+
|
|
25
|
+
# pnpm
|
|
26
|
+
pnpm add @mrintel/villain-ui
|
|
27
|
+
|
|
28
|
+
# yarn
|
|
29
|
+
yarn add @mrintel/villain-ui
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
> **Note on Imports:** All components are exported from the root package (`@mrintel/villain-ui`). Category-specific subpath imports (e.g., `@mrintel/villain-ui/buttons`) are not provided, as the library is designed for tree-shaking at the component level. Your bundler will automatically include only the components you import.
|
|
33
|
+
|
|
34
|
+
### Peer Dependencies
|
|
35
|
+
|
|
36
|
+
Install the required peer dependencies if you haven't already:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install svelte@^5.0.0 tailwindcss@^4.0.0
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Import Theme
|
|
43
|
+
|
|
44
|
+
**Important:** The theme CSS is **not** automatically imported when you use components. You must explicitly import it in your app's entry point to apply the default styles.
|
|
45
|
+
|
|
46
|
+
Import the theme CSS in your app's entry point (e.g., `+layout.svelte` in SvelteKit or `main.ts` in Vite):
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import '@mrintel/villain-ui/theme.css';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This explicit import strategy gives you full control over styling and allows you to:
|
|
53
|
+
- Use a custom theme instead of the default
|
|
54
|
+
- Conditionally load themes
|
|
55
|
+
- Override theme variables before or after the default theme loads
|
|
56
|
+
|
|
57
|
+
## 🚀 Quick Start
|
|
58
|
+
|
|
59
|
+
### SvelteKit Setup
|
|
60
|
+
|
|
61
|
+
```svelte
|
|
62
|
+
<!-- src/routes/+layout.svelte -->
|
|
63
|
+
<script>
|
|
64
|
+
import '@mrintel/villain-ui/theme.css';
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<slot />
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Basic Usage
|
|
71
|
+
|
|
72
|
+
```svelte
|
|
73
|
+
<script>
|
|
74
|
+
import { Button, Card } from '@mrintel/villain-ui';
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<Card padding="lg">
|
|
78
|
+
<h1>Welcome to @mrintel/villain-ui</h1>
|
|
79
|
+
<p>Build luxury interfaces with ease.</p>
|
|
80
|
+
<Button variant="primary">Get Started</Button>
|
|
81
|
+
</Card>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 📚 Components
|
|
85
|
+
|
|
86
|
+
### Buttons
|
|
87
|
+
|
|
88
|
+
**Button** - Primary interactive element with variants
|
|
89
|
+
|
|
90
|
+
```svelte
|
|
91
|
+
<script>
|
|
92
|
+
import { Button } from '@mrintel/villain-ui';
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
<Button variant="primary" size="md">Primary Button</Button>
|
|
96
|
+
<Button variant="secondary" size="md">Secondary Button</Button>
|
|
97
|
+
<Button variant="ghost" size="sm">Ghost Button</Button>
|
|
98
|
+
<Button variant="primary" size="lg" disabled>Disabled</Button>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**IconButton** - Compact button for icon-only interactions
|
|
102
|
+
|
|
103
|
+
```svelte
|
|
104
|
+
<script>
|
|
105
|
+
import { IconButton } from '@mrintel/villain-ui';
|
|
106
|
+
</script>
|
|
107
|
+
|
|
108
|
+
<IconButton variant="primary" size="md" aria-label="Settings">
|
|
109
|
+
<SettingsIcon />
|
|
110
|
+
</IconButton>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**ButtonGroup** - Group related buttons together
|
|
114
|
+
|
|
115
|
+
```svelte
|
|
116
|
+
<script>
|
|
117
|
+
import { ButtonGroup, Button } from '@mrintel/villain-ui';
|
|
118
|
+
</script>
|
|
119
|
+
|
|
120
|
+
<ButtonGroup>
|
|
121
|
+
<Button variant="secondary">Left</Button>
|
|
122
|
+
<Button variant="secondary">Center</Button>
|
|
123
|
+
<Button variant="secondary">Right</Button>
|
|
124
|
+
</ButtonGroup>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**LinkButton** - Button styled as link
|
|
128
|
+
|
|
129
|
+
```svelte
|
|
130
|
+
<script>
|
|
131
|
+
import { LinkButton } from '@mrintel/villain-ui';
|
|
132
|
+
</script>
|
|
133
|
+
|
|
134
|
+
<LinkButton href="/docs" variant="primary">View Documentation</LinkButton>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**FloatingActionButton** - Prominent floating action button
|
|
138
|
+
|
|
139
|
+
```svelte
|
|
140
|
+
<script>
|
|
141
|
+
import { FloatingActionButton } from '@mrintel/villain-ui';
|
|
142
|
+
</script>
|
|
143
|
+
|
|
144
|
+
<FloatingActionButton position="bottom-right" onclick={() => console.log('FAB clicked')}>
|
|
145
|
+
<PlusIcon />
|
|
146
|
+
</FloatingActionButton>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Forms
|
|
150
|
+
|
|
151
|
+
**Input** - Text input with label and error states
|
|
152
|
+
|
|
153
|
+
```svelte
|
|
154
|
+
<script>
|
|
155
|
+
import { Input } from '@mrintel/villain-ui';
|
|
156
|
+
|
|
157
|
+
let email = $state('');
|
|
158
|
+
let hasError = $state(false);
|
|
159
|
+
</script>
|
|
160
|
+
|
|
161
|
+
<Input
|
|
162
|
+
type="email"
|
|
163
|
+
label="Email Address"
|
|
164
|
+
placeholder="you@example.com"
|
|
165
|
+
bind:value={email}
|
|
166
|
+
error={hasError}
|
|
167
|
+
/>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Textarea** - Multi-line text input
|
|
171
|
+
|
|
172
|
+
```svelte
|
|
173
|
+
<script>
|
|
174
|
+
import { Textarea } from '@mrintel/villain-ui';
|
|
175
|
+
|
|
176
|
+
let comment = $state('');
|
|
177
|
+
</script>
|
|
178
|
+
|
|
179
|
+
<Textarea
|
|
180
|
+
label="Comment"
|
|
181
|
+
placeholder="Enter your comment..."
|
|
182
|
+
rows={5}
|
|
183
|
+
bind:value={comment}
|
|
184
|
+
/>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Select** - Dropdown selection
|
|
188
|
+
|
|
189
|
+
```svelte
|
|
190
|
+
<script>
|
|
191
|
+
import { Select } from '@mrintel/villain-ui';
|
|
192
|
+
|
|
193
|
+
let selected = $state('');
|
|
194
|
+
const options = [
|
|
195
|
+
{ value: 'option1', label: 'Option 1' },
|
|
196
|
+
{ value: 'option2', label: 'Option 2' },
|
|
197
|
+
{ value: 'option3', label: 'Option 3' }
|
|
198
|
+
];
|
|
199
|
+
</script>
|
|
200
|
+
|
|
201
|
+
<Select label="Choose an option" {options} bind:value={selected} />
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Checkbox** - Boolean selection
|
|
205
|
+
|
|
206
|
+
```svelte
|
|
207
|
+
<script>
|
|
208
|
+
import { Checkbox } from '@mrintel/villain-ui';
|
|
209
|
+
|
|
210
|
+
let accepted = $state(false);
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
<Checkbox label="I accept the terms and conditions" bind:checked={accepted} />
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Switch** - Toggle switch
|
|
217
|
+
|
|
218
|
+
```svelte
|
|
219
|
+
<script>
|
|
220
|
+
import { Switch } from '@mrintel/villain-ui';
|
|
221
|
+
|
|
222
|
+
let enabled = $state(false);
|
|
223
|
+
</script>
|
|
224
|
+
|
|
225
|
+
<Switch label="Enable notifications" bind:checked={enabled} />
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**RadioGroup** - Single selection from multiple options
|
|
229
|
+
|
|
230
|
+
```svelte
|
|
231
|
+
<script>
|
|
232
|
+
import { RadioGroup } from '@mrintel/villain-ui';
|
|
233
|
+
|
|
234
|
+
let selected = $state('');
|
|
235
|
+
const options = [
|
|
236
|
+
{ value: 'small', label: 'Small' },
|
|
237
|
+
{ value: 'medium', label: 'Medium' },
|
|
238
|
+
{ value: 'large', label: 'Large' }
|
|
239
|
+
];
|
|
240
|
+
</script>
|
|
241
|
+
|
|
242
|
+
<RadioGroup label="Select size" {options} bind:value={selected} />
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**RangeSlider** - Numeric range selection
|
|
246
|
+
|
|
247
|
+
```svelte
|
|
248
|
+
<script>
|
|
249
|
+
import { RangeSlider } from '@mrintel/villain-ui';
|
|
250
|
+
|
|
251
|
+
let volume = $state(50);
|
|
252
|
+
</script>
|
|
253
|
+
|
|
254
|
+
<RangeSlider label="Volume" min={0} max={100} bind:value={volume} />
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**FileUpload** - File selection with drag & drop
|
|
258
|
+
|
|
259
|
+
```svelte
|
|
260
|
+
<script>
|
|
261
|
+
import { FileUpload } from '@mrintel/villain-ui';
|
|
262
|
+
|
|
263
|
+
function handleUpload(files) {
|
|
264
|
+
console.log('Files:', files);
|
|
265
|
+
}
|
|
266
|
+
</script>
|
|
267
|
+
|
|
268
|
+
<FileUpload
|
|
269
|
+
accept="image/*"
|
|
270
|
+
multiple
|
|
271
|
+
onchange={handleUpload}
|
|
272
|
+
label="Upload Images"
|
|
273
|
+
/>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**InputGroup** - Grouped input with addons
|
|
277
|
+
|
|
278
|
+
```svelte
|
|
279
|
+
<script>
|
|
280
|
+
import { InputGroup } from '@mrintel/villain-ui';
|
|
281
|
+
</script>
|
|
282
|
+
|
|
283
|
+
<InputGroup>
|
|
284
|
+
{#snippet prepend()}
|
|
285
|
+
https://
|
|
286
|
+
{/snippet}
|
|
287
|
+
|
|
288
|
+
<input type="text" placeholder="example.com" />
|
|
289
|
+
|
|
290
|
+
{#snippet append()}
|
|
291
|
+
.com
|
|
292
|
+
{/snippet}
|
|
293
|
+
</InputGroup>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Layout
|
|
297
|
+
|
|
298
|
+
**Card** - Content container with optional header and footer
|
|
299
|
+
|
|
300
|
+
```svelte
|
|
301
|
+
<script>
|
|
302
|
+
import { Card } from '@mrintel/villain-ui';
|
|
303
|
+
</script>
|
|
304
|
+
|
|
305
|
+
<Card padding="lg" hoverable>
|
|
306
|
+
{#snippet header()}
|
|
307
|
+
<h2>Card Title</h2>
|
|
308
|
+
{/snippet}
|
|
309
|
+
|
|
310
|
+
<p>Card content goes here with beautiful glass morphism effect.</p>
|
|
311
|
+
|
|
312
|
+
{#snippet footer()}
|
|
313
|
+
<Button variant="primary">Action</Button>
|
|
314
|
+
{/snippet}
|
|
315
|
+
</Card>
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Panel** - Simple content panel
|
|
319
|
+
|
|
320
|
+
```svelte
|
|
321
|
+
<script>
|
|
322
|
+
import { Panel } from '@mrintel/villain-ui';
|
|
323
|
+
</script>
|
|
324
|
+
|
|
325
|
+
<Panel>
|
|
326
|
+
<p>Panel content with default styling</p>
|
|
327
|
+
</Panel>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Grid** - Responsive grid layout
|
|
331
|
+
|
|
332
|
+
```svelte
|
|
333
|
+
<script>
|
|
334
|
+
import { Grid, Card } from '@mrintel/villain-ui';
|
|
335
|
+
</script>
|
|
336
|
+
|
|
337
|
+
<Grid columns={3} gap="lg">
|
|
338
|
+
<Card>Item 1</Card>
|
|
339
|
+
<Card>Item 2</Card>
|
|
340
|
+
<Card>Item 3</Card>
|
|
341
|
+
</Grid>
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**Container** - Centered content container
|
|
345
|
+
|
|
346
|
+
```svelte
|
|
347
|
+
<script>
|
|
348
|
+
import { Container } from '@mrintel/villain-ui';
|
|
349
|
+
</script>
|
|
350
|
+
|
|
351
|
+
<Container maxWidth="lg">
|
|
352
|
+
<h1>Centered Content</h1>
|
|
353
|
+
</Container>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**SectionHeader** - Section heading with divider
|
|
357
|
+
|
|
358
|
+
```svelte
|
|
359
|
+
<script>
|
|
360
|
+
import { SectionHeader } from '@mrintel/villain-ui';
|
|
361
|
+
</script>
|
|
362
|
+
|
|
363
|
+
<SectionHeader title="Features" subtitle="What makes us different" />
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**Divider** - Visual separator
|
|
367
|
+
|
|
368
|
+
```svelte
|
|
369
|
+
<script>
|
|
370
|
+
import { Divider } from '@mrintel/villain-ui';
|
|
371
|
+
</script>
|
|
372
|
+
|
|
373
|
+
<Divider />
|
|
374
|
+
<Divider orientation="vertical" />
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Navigation
|
|
378
|
+
|
|
379
|
+
**Navbar** - Top navigation bar
|
|
380
|
+
|
|
381
|
+
```svelte
|
|
382
|
+
<script>
|
|
383
|
+
import { Navbar } from '@mrintel/villain-ui';
|
|
384
|
+
</script>
|
|
385
|
+
|
|
386
|
+
<Navbar>
|
|
387
|
+
{#snippet logo()}
|
|
388
|
+
<Logo />
|
|
389
|
+
{/snippet}
|
|
390
|
+
|
|
391
|
+
{#snippet links()}
|
|
392
|
+
<a href="/">Home</a>
|
|
393
|
+
<a href="/about">About</a>
|
|
394
|
+
<a href="/contact">Contact</a>
|
|
395
|
+
{/snippet}
|
|
396
|
+
|
|
397
|
+
{#snippet actions()}
|
|
398
|
+
<Button variant="primary">Sign In</Button>
|
|
399
|
+
{/snippet}
|
|
400
|
+
</Navbar>
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Sidebar** - Side navigation with collapsible state
|
|
404
|
+
|
|
405
|
+
```svelte
|
|
406
|
+
<script>
|
|
407
|
+
import { Sidebar } from '@mrintel/villain-ui';
|
|
408
|
+
|
|
409
|
+
let collapsed = $state(false);
|
|
410
|
+
</script>
|
|
411
|
+
|
|
412
|
+
<Sidebar bind:collapsed>
|
|
413
|
+
<nav>
|
|
414
|
+
<a href="/dashboard">Dashboard</a>
|
|
415
|
+
<a href="/settings">Settings</a>
|
|
416
|
+
<a href="/profile">Profile</a>
|
|
417
|
+
</nav>
|
|
418
|
+
</Sidebar>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**Tabs** - Tabbed interface
|
|
422
|
+
|
|
423
|
+
```svelte
|
|
424
|
+
<script>
|
|
425
|
+
import { Tabs } from '@mrintel/villain-ui';
|
|
426
|
+
|
|
427
|
+
let activeTab = $state('tab1');
|
|
428
|
+
const tabs = [
|
|
429
|
+
{ id: 'tab1', label: 'Overview' },
|
|
430
|
+
{ id: 'tab2', label: 'Analytics' },
|
|
431
|
+
{ id: 'tab3', label: 'Reports' }
|
|
432
|
+
];
|
|
433
|
+
</script>
|
|
434
|
+
|
|
435
|
+
<Tabs {tabs} bind:activeTab>
|
|
436
|
+
{#if activeTab === 'tab1'}
|
|
437
|
+
<div>Overview content</div>
|
|
438
|
+
{:else if activeTab === 'tab2'}
|
|
439
|
+
<div>Analytics content</div>
|
|
440
|
+
{:else}
|
|
441
|
+
<div>Reports content</div>
|
|
442
|
+
{/if}
|
|
443
|
+
</Tabs>
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**Breadcrumbs** - Navigation breadcrumb trail
|
|
447
|
+
|
|
448
|
+
```svelte
|
|
449
|
+
<script>
|
|
450
|
+
import { Breadcrumbs } from '@mrintel/villain-ui';
|
|
451
|
+
|
|
452
|
+
const items = [
|
|
453
|
+
{ label: 'Home', href: '/' },
|
|
454
|
+
{ label: 'Products', href: '/products' },
|
|
455
|
+
{ label: 'Category', href: '/products/category' },
|
|
456
|
+
{ label: 'Item' }
|
|
457
|
+
];
|
|
458
|
+
</script>
|
|
459
|
+
|
|
460
|
+
<Breadcrumbs {items} />
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**Menu** - Vertical navigation menu
|
|
464
|
+
|
|
465
|
+
```svelte
|
|
466
|
+
<script>
|
|
467
|
+
import { Menu } from '@mrintel/villain-ui';
|
|
468
|
+
|
|
469
|
+
const items = [
|
|
470
|
+
{ label: 'Dashboard', icon: DashboardIcon, href: '/dashboard' },
|
|
471
|
+
{ label: 'Settings', icon: SettingsIcon, href: '/settings' }
|
|
472
|
+
];
|
|
473
|
+
</script>
|
|
474
|
+
|
|
475
|
+
<Menu {items} />
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
**DropdownMenu** - Dropdown menu with items
|
|
479
|
+
|
|
480
|
+
```svelte
|
|
481
|
+
<script>
|
|
482
|
+
import { DropdownMenu } from '@mrintel/villain-ui';
|
|
483
|
+
|
|
484
|
+
const items = [
|
|
485
|
+
{ label: 'Edit', onclick: () => console.log('Edit') },
|
|
486
|
+
{ label: 'Delete', onclick: () => console.log('Delete') }
|
|
487
|
+
];
|
|
488
|
+
</script>
|
|
489
|
+
|
|
490
|
+
<DropdownMenu {items} trigger="Options" />
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
**ContextMenu** - Right-click context menu
|
|
494
|
+
|
|
495
|
+
```svelte
|
|
496
|
+
<script>
|
|
497
|
+
import { ContextMenu } from '@mrintel/villain-ui';
|
|
498
|
+
|
|
499
|
+
const items = [
|
|
500
|
+
{ label: 'Copy', onclick: () => console.log('Copy') },
|
|
501
|
+
{ label: 'Paste', onclick: () => console.log('Paste') }
|
|
502
|
+
];
|
|
503
|
+
</script>
|
|
504
|
+
|
|
505
|
+
<ContextMenu {items}>
|
|
506
|
+
<div>Right click me</div>
|
|
507
|
+
</ContextMenu>
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
### Overlays & Feedback
|
|
511
|
+
|
|
512
|
+
**Modal** - Modal dialog with backdrop
|
|
513
|
+
|
|
514
|
+
```svelte
|
|
515
|
+
<script>
|
|
516
|
+
import { Modal, Button } from '@mrintel/villain-ui';
|
|
517
|
+
|
|
518
|
+
let open = $state(false);
|
|
519
|
+
</script>
|
|
520
|
+
|
|
521
|
+
<Button onclick={() => open = true}>Open Modal</Button>
|
|
522
|
+
|
|
523
|
+
<Modal bind:open title="Confirm Action">
|
|
524
|
+
<p>Are you sure you want to proceed?</p>
|
|
525
|
+
|
|
526
|
+
{#snippet footer()}
|
|
527
|
+
<Button variant="ghost" onclick={() => open = false}>Cancel</Button>
|
|
528
|
+
<Button variant="primary" onclick={() => open = false}>Confirm</Button>
|
|
529
|
+
{/snippet}
|
|
530
|
+
</Modal>
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
**Alert** - Alert message with variants
|
|
534
|
+
|
|
535
|
+
```svelte
|
|
536
|
+
<script>
|
|
537
|
+
import { Alert } from '@mrintel/villain-ui';
|
|
538
|
+
</script>
|
|
539
|
+
|
|
540
|
+
<Alert variant="success" title="Success">
|
|
541
|
+
Operation completed successfully!
|
|
542
|
+
</Alert>
|
|
543
|
+
|
|
544
|
+
<Alert variant="warning" title="Warning">
|
|
545
|
+
Please review your changes.
|
|
546
|
+
</Alert>
|
|
547
|
+
|
|
548
|
+
<Alert variant="error" title="Error">
|
|
549
|
+
An error occurred.
|
|
550
|
+
</Alert>
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
**Spinner** - Loading spinner
|
|
554
|
+
|
|
555
|
+
```svelte
|
|
556
|
+
<script>
|
|
557
|
+
import { Spinner } from '@mrintel/villain-ui';
|
|
558
|
+
</script>
|
|
559
|
+
|
|
560
|
+
<Spinner size="lg" />
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
**Tooltip** - Hover tooltip
|
|
564
|
+
|
|
565
|
+
```svelte
|
|
566
|
+
<script>
|
|
567
|
+
import { Tooltip } from '@mrintel/villain-ui';
|
|
568
|
+
</script>
|
|
569
|
+
|
|
570
|
+
<Tooltip content="This is a helpful tip" position="top">
|
|
571
|
+
<Button>Hover me</Button>
|
|
572
|
+
</Tooltip>
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**ProgressBar** - Progress indicator
|
|
576
|
+
|
|
577
|
+
```svelte
|
|
578
|
+
<script>
|
|
579
|
+
import { ProgressBar } from '@mrintel/villain-ui';
|
|
580
|
+
|
|
581
|
+
let progress = $state(45);
|
|
582
|
+
</script>
|
|
583
|
+
|
|
584
|
+
<ProgressBar value={progress} max={100} showLabel />
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**SkeletonLoader** - Content loading placeholder
|
|
588
|
+
|
|
589
|
+
```svelte
|
|
590
|
+
<script>
|
|
591
|
+
import { SkeletonLoader } from '@mrintel/villain-ui';
|
|
592
|
+
</script>
|
|
593
|
+
|
|
594
|
+
<SkeletonLoader variant="text" count={3} />
|
|
595
|
+
<SkeletonLoader variant="circle" width="60px" height="60px" />
|
|
596
|
+
<SkeletonLoader variant="rectangle" width="100%" height="200px" />
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
**Toast** - Notification toast
|
|
600
|
+
|
|
601
|
+
```svelte
|
|
602
|
+
<script>
|
|
603
|
+
import { Toast } from '@mrintel/villain-ui';
|
|
604
|
+
|
|
605
|
+
let show = $state(false);
|
|
606
|
+
</script>
|
|
607
|
+
|
|
608
|
+
<Toast bind:show variant="success" duration={3000}>
|
|
609
|
+
Changes saved successfully!
|
|
610
|
+
</Toast>
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
**Drawer** - Slide-out drawer panel
|
|
614
|
+
|
|
615
|
+
```svelte
|
|
616
|
+
<script>
|
|
617
|
+
import { Drawer, Button } from '@mrintel/villain-ui';
|
|
618
|
+
|
|
619
|
+
let open = $state(false);
|
|
620
|
+
</script>
|
|
621
|
+
|
|
622
|
+
<Button onclick={() => open = true}>Open Drawer</Button>
|
|
623
|
+
|
|
624
|
+
<Drawer bind:open position="right">
|
|
625
|
+
<h2>Drawer Content</h2>
|
|
626
|
+
<p>This slides in from the side.</p>
|
|
627
|
+
</Drawer>
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
**Popover** - Popover content
|
|
631
|
+
|
|
632
|
+
```svelte
|
|
633
|
+
<script>
|
|
634
|
+
import { Popover } from '@mrintel/villain-ui';
|
|
635
|
+
</script>
|
|
636
|
+
|
|
637
|
+
<Popover>
|
|
638
|
+
{#snippet trigger()}
|
|
639
|
+
<Button>Click me</Button>
|
|
640
|
+
{/snippet}
|
|
641
|
+
|
|
642
|
+
{#snippet content()}
|
|
643
|
+
<div>Popover content here</div>
|
|
644
|
+
{/snippet}
|
|
645
|
+
</Popover>
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
**Dropdown** - Generic dropdown container
|
|
649
|
+
|
|
650
|
+
```svelte
|
|
651
|
+
<script>
|
|
652
|
+
import { Dropdown } from '@mrintel/villain-ui';
|
|
653
|
+
</script>
|
|
654
|
+
|
|
655
|
+
<Dropdown trigger="Select Option">
|
|
656
|
+
<a href="#">Option 1</a>
|
|
657
|
+
<a href="#">Option 2</a>
|
|
658
|
+
<a href="#">Option 3</a>
|
|
659
|
+
</Dropdown>
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**CommandPalette** - Command palette with fuzzy search
|
|
663
|
+
|
|
664
|
+
```svelte
|
|
665
|
+
<script>
|
|
666
|
+
import { CommandPalette } from '@mrintel/villain-ui';
|
|
667
|
+
|
|
668
|
+
let open = $state(false);
|
|
669
|
+
const commands = [
|
|
670
|
+
{ id: '1', label: 'New File', onSelect: () => console.log('New File') },
|
|
671
|
+
{ id: '2', label: 'Open Settings', onSelect: () => console.log('Settings') }
|
|
672
|
+
];
|
|
673
|
+
</script>
|
|
674
|
+
|
|
675
|
+
<CommandPalette bind:open {commands} placeholder="Search commands..." />
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
### Typography
|
|
679
|
+
|
|
680
|
+
**Heading** - Semantic heading levels
|
|
681
|
+
|
|
682
|
+
```svelte
|
|
683
|
+
<script>
|
|
684
|
+
import { Heading } from '@mrintel/villain-ui';
|
|
685
|
+
</script>
|
|
686
|
+
|
|
687
|
+
<Heading level={1}>Main Title</Heading>
|
|
688
|
+
<Heading level={2}>Section Title</Heading>
|
|
689
|
+
<Heading level={3}>Subsection</Heading>
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
**Text** - Text with variants
|
|
693
|
+
|
|
694
|
+
```svelte
|
|
695
|
+
<script>
|
|
696
|
+
import { Text } from '@mrintel/villain-ui';
|
|
697
|
+
</script>
|
|
698
|
+
|
|
699
|
+
<Text variant="body">Regular body text</Text>
|
|
700
|
+
<Text variant="caption">Caption text</Text>
|
|
701
|
+
<Text variant="muted">Muted text</Text>
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
**Code** - Inline code
|
|
705
|
+
|
|
706
|
+
```svelte
|
|
707
|
+
<script>
|
|
708
|
+
import { Code } from '@mrintel/villain-ui';
|
|
709
|
+
</script>
|
|
710
|
+
|
|
711
|
+
<p>Install with <Code>npm install @mrintel/villain-ui</Code></p>
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
### Data Display
|
|
715
|
+
|
|
716
|
+
**Table** - Data table
|
|
717
|
+
|
|
718
|
+
```svelte
|
|
719
|
+
<script>
|
|
720
|
+
import { Table } from '@mrintel/villain-ui';
|
|
721
|
+
|
|
722
|
+
const columns = [
|
|
723
|
+
{ key: 'name', label: 'Name' },
|
|
724
|
+
{ key: 'email', label: 'Email' },
|
|
725
|
+
{ key: 'role', label: 'Role' }
|
|
726
|
+
];
|
|
727
|
+
|
|
728
|
+
const data = [
|
|
729
|
+
{ name: 'John Doe', email: 'john@example.com', role: 'Admin' },
|
|
730
|
+
{ name: 'Jane Smith', email: 'jane@example.com', role: 'User' }
|
|
731
|
+
];
|
|
732
|
+
</script>
|
|
733
|
+
|
|
734
|
+
<Table {columns} {data} hoverable striped />
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
**Pagination** - Page navigation
|
|
738
|
+
|
|
739
|
+
```svelte
|
|
740
|
+
<script>
|
|
741
|
+
import { Pagination } from '@mrintel/villain-ui';
|
|
742
|
+
|
|
743
|
+
let currentPage = $state(1);
|
|
744
|
+
const totalPages = 10;
|
|
745
|
+
</script>
|
|
746
|
+
|
|
747
|
+
<Pagination bind:currentPage {totalPages} />
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
**Badge** - Status badge
|
|
751
|
+
|
|
752
|
+
```svelte
|
|
753
|
+
<script>
|
|
754
|
+
import { Badge } from '@mrintel/villain-ui';
|
|
755
|
+
</script>
|
|
756
|
+
|
|
757
|
+
<Badge variant="success">Active</Badge>
|
|
758
|
+
<Badge variant="warning">Pending</Badge>
|
|
759
|
+
<Badge variant="error">Error</Badge>
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
**Tag** - Removable tag
|
|
763
|
+
|
|
764
|
+
```svelte
|
|
765
|
+
<script>
|
|
766
|
+
import { Tag } from '@mrintel/villain-ui';
|
|
767
|
+
</script>
|
|
768
|
+
|
|
769
|
+
<Tag onRemove={() => console.log('Removed')}>JavaScript</Tag>
|
|
770
|
+
<Tag>TypeScript</Tag>
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
**List** - Styled list
|
|
774
|
+
|
|
775
|
+
```svelte
|
|
776
|
+
<script>
|
|
777
|
+
import { List } from '@mrintel/villain-ui';
|
|
778
|
+
|
|
779
|
+
const items = ['Item 1', 'Item 2', 'Item 3'];
|
|
780
|
+
</script>
|
|
781
|
+
|
|
782
|
+
<List {items} variant="ordered" />
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
**Avatar** - User avatar
|
|
786
|
+
|
|
787
|
+
```svelte
|
|
788
|
+
<script>
|
|
789
|
+
import { Avatar } from '@mrintel/villain-ui';
|
|
790
|
+
</script>
|
|
791
|
+
|
|
792
|
+
<Avatar src="/avatar.jpg" alt="User" size="md" />
|
|
793
|
+
<Avatar initials="JD" size="lg" />
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
**CodeBlock** - Syntax-highlighted code block
|
|
797
|
+
|
|
798
|
+
```svelte
|
|
799
|
+
<script>
|
|
800
|
+
import { CodeBlock } from '@mrintel/villain-ui';
|
|
801
|
+
|
|
802
|
+
const code = `function hello() {
|
|
803
|
+
console.log('Hello, world!');
|
|
804
|
+
}`;
|
|
805
|
+
</script>
|
|
806
|
+
|
|
807
|
+
<CodeBlock {code} language="javascript" showLineNumbers />
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
**Stat** - Statistic display
|
|
811
|
+
|
|
812
|
+
```svelte
|
|
813
|
+
<script>
|
|
814
|
+
import { Stat } from '@mrintel/villain-ui';
|
|
815
|
+
</script>
|
|
816
|
+
|
|
817
|
+
<Stat label="Total Users" value="1,234" change="+12.5%" trend="up" />
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
### Utilities
|
|
821
|
+
|
|
822
|
+
**Portal** - Render content in different DOM location
|
|
823
|
+
|
|
824
|
+
```svelte
|
|
825
|
+
<script>
|
|
826
|
+
import { Portal } from '@mrintel/villain-ui';
|
|
827
|
+
</script>
|
|
828
|
+
|
|
829
|
+
<Portal target="body">
|
|
830
|
+
<div>This renders at the end of body</div>
|
|
831
|
+
</Portal>
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
**Collapse** - Collapsible content
|
|
835
|
+
|
|
836
|
+
```svelte
|
|
837
|
+
<script>
|
|
838
|
+
import { Collapse } from '@mrintel/villain-ui';
|
|
839
|
+
|
|
840
|
+
let open = $state(false);
|
|
841
|
+
</script>
|
|
842
|
+
|
|
843
|
+
<Collapse title="Click to expand" open={open} onToggle={() => open = !open}>
|
|
844
|
+
<p>Hidden content that can be toggled</p>
|
|
845
|
+
</Collapse>
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
**Accordion** - Accordion with multiple items
|
|
849
|
+
|
|
850
|
+
```svelte
|
|
851
|
+
<script>
|
|
852
|
+
import { Accordion } from '@mrintel/villain-ui';
|
|
853
|
+
|
|
854
|
+
const items = [
|
|
855
|
+
{ id: '1', title: 'Section 1', content: 'Content for section 1' },
|
|
856
|
+
{ id: '2', title: 'Section 2', content: 'Content for section 2' }
|
|
857
|
+
];
|
|
858
|
+
|
|
859
|
+
let openItems = $state([]);
|
|
860
|
+
</script>
|
|
861
|
+
|
|
862
|
+
<Accordion {items} bind:openItems mode="multiple" />
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
**Carousel** - Image/content carousel
|
|
866
|
+
|
|
867
|
+
```svelte
|
|
868
|
+
<script>
|
|
869
|
+
import { Carousel } from '@mrintel/villain-ui';
|
|
870
|
+
|
|
871
|
+
const items = [
|
|
872
|
+
{ id: '1', content: 'Slide 1' },
|
|
873
|
+
{ id: '2', content: 'Slide 2' },
|
|
874
|
+
{ id: '3', content: 'Slide 3' }
|
|
875
|
+
];
|
|
876
|
+
|
|
877
|
+
let currentIndex = $state(0);
|
|
878
|
+
</script>
|
|
879
|
+
|
|
880
|
+
<Carousel {items} bind:currentIndex autoplay showDots showArrows />
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
**ScrollArea** - Custom scrollable area
|
|
884
|
+
|
|
885
|
+
```svelte
|
|
886
|
+
<script>
|
|
887
|
+
import { ScrollArea } from '@mrintel/villain-ui';
|
|
888
|
+
</script>
|
|
889
|
+
|
|
890
|
+
<ScrollArea height="300px">
|
|
891
|
+
<div>Long scrollable content...</div>
|
|
892
|
+
</ScrollArea>
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
## 🎨 Theming
|
|
896
|
+
|
|
897
|
+
### CSS Variable System
|
|
898
|
+
|
|
899
|
+
@mrintel/villain-ui uses a comprehensive CSS variable system that allows complete customization without touching component code. All theme variables are defined in `theme.css` and can be overridden in your own CSS.
|
|
900
|
+
|
|
901
|
+
### Custom Theme Example
|
|
902
|
+
|
|
903
|
+
Create a custom CSS file (e.g., `custom-theme.css`) and import it **after** the library theme:
|
|
904
|
+
|
|
905
|
+
```css
|
|
906
|
+
/* custom-theme.css */
|
|
907
|
+
|
|
908
|
+
/* Override accent color from purple to blue */
|
|
909
|
+
:root {
|
|
910
|
+
--color-accent: #3B82F6;
|
|
911
|
+
--color-accent-soft: #60A5FA;
|
|
912
|
+
--color-accent-dark: #1E40AF;
|
|
913
|
+
|
|
914
|
+
--shadow-accent-glow:
|
|
915
|
+
0 0 20px rgba(59, 130, 246, 0.4),
|
|
916
|
+
0 0 40px rgba(59, 130, 246, 0.2),
|
|
917
|
+
0 0 60px rgba(59, 130, 246, 0.1);
|
|
918
|
+
|
|
919
|
+
--shadow-text-glow:
|
|
920
|
+
0 0 20px rgba(59, 130, 246, 0.5),
|
|
921
|
+
0 0 40px rgba(59, 130, 246, 0.3);
|
|
922
|
+
}
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
Import order in your app:
|
|
926
|
+
|
|
927
|
+
```typescript
|
|
928
|
+
import '@mrintel/villain-ui/theme.css';
|
|
929
|
+
import './custom-theme.css'; // Your overrides
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
### Typography Customization
|
|
933
|
+
|
|
934
|
+
```css
|
|
935
|
+
:root {
|
|
936
|
+
--font-heading: 'Montserrat', sans-serif;
|
|
937
|
+
--font-body: 'Open Sans', sans-serif;
|
|
938
|
+
--font-mono: 'Fira Code', monospace;
|
|
939
|
+
|
|
940
|
+
--text-h1-size: 4rem;
|
|
941
|
+
--text-body-size: 1.125rem;
|
|
942
|
+
}
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
### Border Radius Customization
|
|
946
|
+
|
|
947
|
+
```css
|
|
948
|
+
:root {
|
|
949
|
+
--radius-sm: 6px;
|
|
950
|
+
--radius-md: 10px;
|
|
951
|
+
--radius-lg: 14px;
|
|
952
|
+
--radius-xl: 20px;
|
|
953
|
+
--radius-2xl: 28px;
|
|
954
|
+
}
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
### Complete Variable Reference
|
|
958
|
+
|
|
959
|
+
#### Colors
|
|
960
|
+
|
|
961
|
+
**Base Colors**
|
|
962
|
+
- `--color-base-0` through `--color-base-3`: Background layers
|
|
963
|
+
- `--color-surface`: Default surface color
|
|
964
|
+
- `--color-panel`: Panel background
|
|
965
|
+
- `--color-overlay`: Modal/overlay backdrop
|
|
966
|
+
|
|
967
|
+
**Accent Colors**
|
|
968
|
+
- `--color-accent`: Primary accent color
|
|
969
|
+
- `--color-accent-soft`: Lighter accent variant
|
|
970
|
+
- `--color-accent-dark`: Darker accent variant
|
|
971
|
+
|
|
972
|
+
**Text Colors**
|
|
973
|
+
- `--color-text`: Primary text color
|
|
974
|
+
- `--color-text-soft`: Secondary text color
|
|
975
|
+
- `--color-text-muted`: Muted/disabled text
|
|
976
|
+
|
|
977
|
+
**State Colors**
|
|
978
|
+
- `--color-success`: Success state
|
|
979
|
+
- `--color-warning`: Warning state
|
|
980
|
+
- `--color-error`: Error state
|
|
981
|
+
|
|
982
|
+
**Border Colors**
|
|
983
|
+
- `--color-border`: Default border
|
|
984
|
+
- `--color-border-strong`: Emphasized border
|
|
985
|
+
|
|
986
|
+
#### Typography
|
|
987
|
+
|
|
988
|
+
**Font Families**
|
|
989
|
+
- `--font-heading`: Heading font stack
|
|
990
|
+
- `--font-body`: Body text font stack
|
|
991
|
+
- `--font-mono`: Monospace font stack
|
|
992
|
+
|
|
993
|
+
**Text Scales** (h1-h6, body, caption)
|
|
994
|
+
- `--text-{level}-size`: Font size
|
|
995
|
+
- `--text-{level}-line-height`: Line height
|
|
996
|
+
- `--text-{level}-weight`: Font weight
|
|
997
|
+
|
|
998
|
+
#### Layout
|
|
999
|
+
|
|
1000
|
+
**Border Radii**
|
|
1001
|
+
- `--radius-none` through `--radius-2xl`, `--radius-pill`
|
|
1002
|
+
|
|
1003
|
+
**Spacing**
|
|
1004
|
+
- `--spacing-4.5`: 1.125rem
|
|
1005
|
+
- `--spacing-18`: 4.5rem
|
|
1006
|
+
|
|
1007
|
+
#### Effects
|
|
1008
|
+
|
|
1009
|
+
**Shadows**
|
|
1010
|
+
- `--shadow-accent-glow`: Accent glow effect
|
|
1011
|
+
- `--shadow-deep`: Deep shadow
|
|
1012
|
+
- `--shadow-text-glow`: Text glow effect
|
|
1013
|
+
|
|
1014
|
+
**Glass Effect**
|
|
1015
|
+
- `--glass-panel-background`: Glass panel background
|
|
1016
|
+
|
|
1017
|
+
#### Motion
|
|
1018
|
+
|
|
1019
|
+
**Easing Curves**
|
|
1020
|
+
- `--ease-luxe`: Primary luxury easing
|
|
1021
|
+
- `--ease-sharp`: Sharp transitions
|
|
1022
|
+
|
|
1023
|
+
### Custom Utility Classes
|
|
1024
|
+
|
|
1025
|
+
The library provides custom utility classes you can use:
|
|
1026
|
+
|
|
1027
|
+
- `.text-glow` - Apply accent glow to text
|
|
1028
|
+
- `.glass-panel` - Glass morphism effect with backdrop blur
|
|
1029
|
+
- `.accent-glow` - Accent color glow effect
|
|
1030
|
+
- `.hover-lift` - Lift and glow on hover
|
|
1031
|
+
|
|
1032
|
+
Example usage:
|
|
1033
|
+
|
|
1034
|
+
```svelte
|
|
1035
|
+
<div class="glass-panel accent-glow">
|
|
1036
|
+
<h2 class="text-glow">Glowing Title</h2>
|
|
1037
|
+
</div>
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
### Theme Persistence
|
|
1041
|
+
|
|
1042
|
+
The brand structure (depth system, spacing, motion curves) persists even when colors change, maintaining the luxury aesthetic regardless of your chosen palette.
|
|
1043
|
+
|
|
1044
|
+
## 🛠️ Development
|
|
1045
|
+
|
|
1046
|
+
### Clone and Setup
|
|
1047
|
+
|
|
1048
|
+
```bash
|
|
1049
|
+
git clone <repository-url>
|
|
1050
|
+
cd villain-ui
|
|
1051
|
+
npm install
|
|
1052
|
+
```
|
|
1053
|
+
|
|
1054
|
+
### Available Scripts
|
|
1055
|
+
|
|
1056
|
+
- `npm run dev` - Start Vite dev server
|
|
1057
|
+
- `npm run build` - Build the library for production
|
|
1058
|
+
- `npm run type-check` - Run TypeScript type checking
|
|
1059
|
+
- `npm run check` - Alias for type-check
|
|
1060
|
+
|
|
1061
|
+
### Build Output
|
|
1062
|
+
|
|
1063
|
+
The build creates a `dist/` directory with:
|
|
1064
|
+
|
|
1065
|
+
```
|
|
1066
|
+
dist/
|
|
1067
|
+
├── index.js # Compiled components
|
|
1068
|
+
├── index.d.ts # TypeScript declarations
|
|
1069
|
+
└── theme.css # Compiled theme styles
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
### Manual Build Before Publishing
|
|
1073
|
+
|
|
1074
|
+
If you want to verify the build manually:
|
|
1075
|
+
|
|
1076
|
+
```bash
|
|
1077
|
+
npm run build
|
|
1078
|
+
npm pack
|
|
1079
|
+
```
|
|
1080
|
+
|
|
1081
|
+
This creates a `.tgz` file you can inspect before publishing.
|
|
1082
|
+
|
|
1083
|
+
## 📘 TypeScript Support
|
|
1084
|
+
|
|
1085
|
+
@mrintel/villain-ui is built with TypeScript in strict mode and includes complete type definitions.
|
|
1086
|
+
|
|
1087
|
+
- ✅ Full TypeScript support
|
|
1088
|
+
- ✅ Strict mode enabled
|
|
1089
|
+
- ✅ Type definitions included in `dist/index.d.ts`
|
|
1090
|
+
- ✅ All components have typed Props interfaces
|
|
1091
|
+
- ✅ IntelliSense support in VS Code and other editors
|
|
1092
|
+
|
|
1093
|
+
Import types directly from components:
|
|
1094
|
+
|
|
1095
|
+
```typescript
|
|
1096
|
+
import type { Button } from '@mrintel/villain-ui';
|
|
1097
|
+
|
|
1098
|
+
// Component props are fully typed
|
|
1099
|
+
const props: ComponentProps<typeof Button> = {
|
|
1100
|
+
variant: 'primary',
|
|
1101
|
+
size: 'md',
|
|
1102
|
+
disabled: false
|
|
1103
|
+
};
|
|
1104
|
+
```
|
|
1105
|
+
|
|
1106
|
+
## 🌐 Browser Support
|
|
1107
|
+
|
|
1108
|
+
@mrintel/villain-ui targets modern browsers that support:
|
|
1109
|
+
|
|
1110
|
+
- ✅ CSS Variables (Custom Properties)
|
|
1111
|
+
- ✅ CSS `backdrop-filter` for glass morphism
|
|
1112
|
+
- ✅ ES2022+ JavaScript features
|
|
1113
|
+
- ✅ Tailwind CSS v4 requirements
|
|
1114
|
+
|
|
1115
|
+
**Supported Browsers:**
|
|
1116
|
+
- Chrome/Edge 88+
|
|
1117
|
+
- Firefox 94+
|
|
1118
|
+
- Safari 15.4+
|
|
1119
|
+
- Opera 74+
|
|
1120
|
+
|
|
1121
|
+
## 📄 License
|
|
1122
|
+
|
|
1123
|
+
MIT License - see LICENSE file for details
|
|
1124
|
+
|
|
1125
|
+
## 🤝 Contributing
|
|
1126
|
+
|
|
1127
|
+
Contributions are welcome! Please feel free to submit issues and pull requests.
|
|
1128
|
+
|
|
1129
|
+
---
|
|
1130
|
+
|
|
1131
|
+
**Built with ❤️ for the modern web**
|