├── .gitignore ├── app ├── .gitignore ├── .vscode │ ├── extensions.json │ └── launch.json ├── README.md ├── astro.config.mjs ├── package-lock.json ├── package.json ├── public │ ├── clients │ │ ├── automatic.svg │ │ ├── bissell.svg │ │ └── microsoft.svg │ ├── defaultavatar.webp │ ├── favicon-dark.png │ ├── favicon.svg │ ├── fonts │ │ ├── geist-medium.woff │ │ ├── geist-normal.woff │ │ └── geist-semibold.woff │ ├── icons │ │ ├── css.svg │ │ ├── html.svg │ │ ├── js.svg │ │ ├── laravel.svg │ │ ├── npm.svg │ │ ├── radix-vue.svg │ │ ├── ruby.svg │ │ ├── shell.svg │ │ ├── tailwind.svg │ │ ├── ts.svg │ │ ├── vite.svg │ │ ├── vue.svg │ │ └── yarn.svg │ ├── images │ │ ├── Image.png │ │ ├── african-american-business.webp │ │ ├── baskets.webp │ │ ├── baskets_2.webp │ │ ├── bottes-cuir.webp │ │ ├── buildingImg.jpg │ │ ├── camion1.webp │ │ ├── chaussures-cuir-marron.webp │ │ ├── chaussures-talons-hauts.webp │ │ ├── chef.webp │ │ ├── creative-agency-production.webp │ │ ├── dash-dark.webp │ │ ├── dash-light.webp │ │ ├── dev-with-c-1.webp │ │ ├── dev-with-c.webp │ │ ├── happy-work.webp │ │ ├── hero-img.webp │ │ ├── heroImg.webp │ │ ├── icons │ │ │ ├── fruit-icon.svg │ │ │ ├── green-grapes-icon.svg │ │ │ ├── seo.svg │ │ │ ├── spinach-icon.svg │ │ │ ├── tomato-icon.svg │ │ │ └── web-development.svg │ │ ├── image1.webp │ │ ├── img1.webp │ │ ├── img2.webp │ │ ├── medecine-team.webp │ │ ├── podCast.webp │ │ ├── portrait-of-smiling-med.webp │ │ ├── sidebiew.webp │ │ ├── sports-shoe.webp │ │ ├── woman-at-meet-up.webp │ │ ├── woman-with-gro.webp │ │ └── working-on-housing-project.jpg │ └── logos │ │ ├── logoipsum-1.svg │ │ ├── logoipsum-2.svg │ │ ├── logoipsum-3.svg │ │ ├── paypallogo.png │ │ ├── slack.png │ │ └── spotify.png ├── src │ ├── assets │ │ ├── css │ │ │ ├── app-ui.css │ │ │ ├── button.css │ │ │ ├── colors.css │ │ │ ├── default-colors.css │ │ │ ├── doc-styles.css │ │ │ ├── find-ui.css │ │ │ ├── global.css │ │ │ ├── scrollbar.css │ │ │ ├── themes │ │ │ │ ├── air.css │ │ │ │ ├── earth.css │ │ │ │ ├── fire.css │ │ │ │ └── water.css │ │ │ └── ui.css │ │ └── js │ │ │ ├── doc-script.ts │ │ │ ├── global.ts │ │ │ ├── navbar.ts │ │ │ ├── pager.ts │ │ │ ├── scrollbar.ts │ │ │ ├── selector.ts │ │ │ ├── switch-palette.ts │ │ │ ├── tab-content-menu.ts │ │ │ └── theme.ts │ ├── components │ │ ├── atoms │ │ │ ├── AppLogoLink.astro │ │ │ ├── Container.astro │ │ │ ├── PaletteCard.astro │ │ │ ├── Paragraph.astro │ │ │ ├── SocialLinks.astro │ │ │ └── UiLink.astro │ │ ├── docs │ │ │ ├── DocPageHeader.astro │ │ │ ├── MdxComponents.astro │ │ │ ├── base │ │ │ │ ├── DocResLink.astro │ │ │ │ ├── GroupItem.astro │ │ │ │ ├── ScrollableY.astro │ │ │ │ ├── Sidebar.astro │ │ │ │ ├── SidebarGroup.astro │ │ │ │ ├── SidebarItemBlock.astro │ │ │ │ └── TopDocsNav.astro │ │ │ ├── mdx-components │ │ │ │ ├── BlockCode.astro │ │ │ │ ├── BoxCode.astro │ │ │ │ ├── Callout.astro │ │ │ │ ├── CardTech.astro │ │ │ │ ├── CodeGroupBox.astro │ │ │ │ ├── Codebloc.astro │ │ │ │ ├── ComponentPrev.astro │ │ │ │ ├── ComponentPreview.astro │ │ │ │ ├── ComponentPreviewOnly.astro │ │ │ │ ├── DemoBox.astro │ │ │ │ ├── DocLink.astro │ │ │ │ ├── DocsTab.astro │ │ │ │ ├── Heading2.astro │ │ │ │ ├── Heading3.astro │ │ │ │ ├── Li.astro │ │ │ │ ├── LinkCard.astro │ │ │ │ ├── Ol.astro │ │ │ │ ├── Paragraph.astro │ │ │ │ ├── Step.astro │ │ │ │ ├── Steps.astro │ │ │ │ ├── TBody.astro │ │ │ │ ├── THead.astro │ │ │ │ ├── TabPanel.astro │ │ │ │ ├── Table.astro │ │ │ │ ├── UiWrapper.astro │ │ │ │ └── Ul.astro │ │ │ └── ui │ │ │ │ ├── BoxTableOfContent.astro │ │ │ │ ├── CodeViewBox.astro │ │ │ │ ├── ContribDoc.astro │ │ │ │ ├── DocsFooter.astro │ │ │ │ ├── DocsNavbar.astro │ │ │ │ ├── DocsPagination.astro │ │ │ │ ├── TableOfContent.astro │ │ │ │ ├── TableOfContentsHeading.astro │ │ │ │ └── TabsViewCode.astro │ │ ├── molecules │ │ │ └── SEO.astro │ │ ├── registry │ │ │ ├── accordion │ │ │ │ ├── Default.astro │ │ │ │ ├── Link.astro │ │ │ │ ├── Outline.astro │ │ │ │ ├── Soft.astro │ │ │ │ ├── Solid.astro │ │ │ │ ├── Subtle.astro │ │ │ │ └── ac_codes.ts │ │ │ ├── alert │ │ │ │ ├── CustomExample1.astro │ │ │ │ ├── Default.astro │ │ │ │ ├── Outline.astro │ │ │ │ ├── Soft.astro │ │ │ │ ├── Solid.astro │ │ │ │ ├── Subtle.astro │ │ │ │ ├── WithTitle.astro │ │ │ │ └── alert_code.ts │ │ │ ├── allCode.ts │ │ │ ├── aspect-ratio │ │ │ │ ├── 35mmfilm.astro │ │ │ │ ├── Square.astro │ │ │ │ ├── StandardTV.astro │ │ │ │ ├── UltrawideMonitor.astro │ │ │ │ └── Video-TV.astro │ │ │ ├── avatar │ │ │ │ ├── AvatarHolder.astro │ │ │ │ ├── AvatarPlace.astro │ │ │ │ ├── AvatarUI.astro │ │ │ │ └── ImageSize.astro │ │ │ ├── badge │ │ │ │ ├── Default.astro │ │ │ │ ├── Outline.astro │ │ │ │ ├── Soft.astro │ │ │ │ ├── Solid.astro │ │ │ │ ├── Subtle.astro │ │ │ │ └── WithIcon.astro │ │ │ ├── button │ │ │ │ ├── Button.astro │ │ │ │ ├── Default.astro │ │ │ │ ├── IconSizes.astro │ │ │ │ ├── Sizes.astro │ │ │ │ ├── Variants.astro │ │ │ │ └── WithIcon.astro │ │ │ ├── card │ │ │ │ ├── Default.astro │ │ │ │ ├── Ecommerce1.astro │ │ │ │ ├── Ecommerce2.astro │ │ │ │ ├── PricingCard.astro │ │ │ │ ├── WithIcon.astro │ │ │ │ └── codeCard.ts │ │ │ ├── divider │ │ │ │ ├── Default.astro │ │ │ │ └── WithLabel.astro │ │ │ ├── dropdown │ │ │ │ ├── Default.astro │ │ │ │ └── code_Dropdown.ts │ │ │ ├── input │ │ │ │ ├── Default.astro │ │ │ │ ├── Leading.astro │ │ │ │ ├── Trailing.astro │ │ │ │ ├── WithLabel.astro │ │ │ │ └── inputCode.ts │ │ │ ├── kbd │ │ │ │ ├── Default.astro │ │ │ │ ├── Grouped.astro │ │ │ │ └── WithIcon.astro │ │ │ ├── link │ │ │ │ ├── BtnLink.astro │ │ │ │ ├── Underline.astro │ │ │ │ └── WithIcon.astro │ │ │ ├── meter │ │ │ │ ├── Default.astro │ │ │ │ ├── MeterSize.astro │ │ │ │ └── ProgIndicator.astro │ │ │ ├── pagination │ │ │ │ ├── ActiveState.astro │ │ │ │ ├── Default.astro │ │ │ │ └── WithIcon.astro │ │ │ ├── popover │ │ │ │ ├── Default.astro │ │ │ │ ├── WithContent.astro │ │ │ │ └── popoverCode.ts │ │ │ └── progress │ │ │ │ ├── Default.astro │ │ │ │ ├── ProgressIndicator.astro │ │ │ │ ├── ProgressSizes.astro │ │ │ │ └── WithMessage.astro │ │ └── vuejs │ │ │ ├── CopyBtnCode.vue │ │ │ ├── CustomCodeBlock.vue │ │ │ └── NewsLetterForm.vue │ ├── config │ │ └── shikiconfig.ts │ ├── const │ │ └── index.ts │ ├── content.config.ts │ ├── data │ │ ├── docSidebar.ts │ │ └── index.ts │ ├── docs-content │ │ ├── components │ │ │ ├── accordion.mdx │ │ │ ├── alert.mdx │ │ │ ├── aspect-ratio.mdx │ │ │ ├── avatar.mdx │ │ │ ├── badge.mdx │ │ │ ├── button.mdx │ │ │ ├── card.mdx │ │ │ ├── checkbox.mdx │ │ │ ├── divider.mdx │ │ │ ├── dropdown.mdx │ │ │ ├── kbd.mdx │ │ │ ├── link.mdx │ │ │ ├── meter.mdx │ │ │ ├── pagination.mdx │ │ │ ├── progress.mdx │ │ │ └── radio.mdx │ │ ├── documentation │ │ │ ├── framework-guide │ │ │ │ ├── astrojs.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── laravel.mdx │ │ │ │ ├── static.mdx │ │ │ │ └── vitejs.mdx │ │ │ ├── installation.mdx │ │ │ └── introduction.mdx │ │ └── preset │ │ │ ├── customization │ │ │ ├── configuration.mdx │ │ │ └── theme.mdx │ │ │ ├── installation.mdx │ │ │ ├── introduction.mdx │ │ │ └── utilities │ │ │ ├── button.mdx │ │ │ ├── common.mdx │ │ │ ├── display.mdx │ │ │ ├── form-input.mdx │ │ │ ├── progressbar.mdx │ │ │ └── switch.mdx │ ├── helpers │ │ ├── copy-to-clipboard.ts │ │ └── string-helper.ts │ ├── layouts │ │ ├── Base.astro │ │ ├── DocsLayout.astro │ │ ├── Layout.astro │ │ └── ScriptTheme.astro │ ├── pages │ │ ├── components │ │ │ └── [...slug].astro │ │ ├── docs │ │ │ └── [...slug].astro │ │ ├── index.astro │ │ └── preset │ │ │ └── [...slug].astro │ └── types │ │ └── index.ts ├── tsconfig.json └── uno.config.ts └── html ├── .gitignore ├── button.css ├── colors.css ├── components ├── accordion │ ├── index.html │ └── js │ │ └── script.js ├── alert-dialog │ ├── alert.html │ ├── index.html │ └── js │ │ └── script.js ├── alert │ └── index.html ├── annonce_pill │ └── index.html ├── aspect-ratio │ └── index.html ├── avatar │ └── index.html ├── badge │ └── index.html ├── breadcrumbs │ └── index.html ├── button │ └── index.html ├── card │ └── index.html ├── checkbox │ └── index.html ├── chip │ └── index.html ├── container │ └── index.html ├── divider │ └── index.html ├── dropdown │ ├── index.html │ └── js │ │ └── script.js ├── form │ └── index.html ├── icon │ └── index.html ├── input │ └── index.html ├── kbd │ └── index.html ├── link │ └── index.html ├── meter │ └── index.html ├── pagination │ └── index.html ├── popover │ ├── index.html │ └── js │ │ └── script.js ├── progress │ └── index.html ├── radio │ └── index.html ├── range │ ├── index.html │ └── js │ │ └── script.js ├── select │ └── index.html ├── skeleton │ └── index.html ├── slideover │ ├── index.html │ └── js │ │ └── script.js ├── switch │ └── index.html ├── table │ └── index.html ├── tabs │ ├── index.html │ └── js │ │ └── script.js ├── text-area │ ├── index.html │ └── js │ │ └── script.js └── tooltip │ ├── index.html │ └── js │ └── script.js ├── js ├── app.js └── load.theme.js ├── main.ts ├── package-lock.json ├── package.json ├── public ├── defaultavatar.webp ├── images │ ├── baskets.webp │ ├── baskets_2.webp │ ├── bottes-cuir.webp │ ├── chaussures-cuir-marron.webp │ ├── chaussures-talons-hauts.webp │ ├── img1.webp │ ├── img2.webp │ └── sports-shoe.webp └── vite.svg ├── style.css ├── tsconfig.json ├── ui-colors.css ├── ui.css ├── uno.config.ts └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | 4 | # generated types 5 | .astro/ 6 | 7 | # dependencies 8 | node_modules/ 9 | 10 | # logs 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # environment variables 17 | .env 18 | .env.production 19 | 20 | # macOS-specific files 21 | .DS_Store 22 | 23 | # jetbrains setting folder 24 | .idea/ 25 | -------------------------------------------------------------------------------- /app/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /app/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | # Astro Starter Kit: Basics 2 | 3 | ```sh 4 | npm create astro@latest -- --template basics 5 | ``` 6 | 7 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics) 8 | [![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics) 9 | [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json) 10 | 11 | > 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! 12 | 13 | ![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554) 14 | 15 | ## 🚀 Project Structure 16 | 17 | Inside of your Astro project, you'll see the following folders and files: 18 | 19 | ```text 20 | / 21 | ├── public/ 22 | │ └── favicon.svg 23 | ├── src/ 24 | │ ├── layouts/ 25 | │ │ └── Layout.astro 26 | │ └── pages/ 27 | │ └── index.astro 28 | └── package.json 29 | ``` 30 | 31 | To learn more about the folder structure of an Astro project, refer to [our guide on project structure](https://docs.astro.build/en/basics/project-structure/). 32 | 33 | ## 🧞 Commands 34 | 35 | All commands are run from the root of the project, from a terminal: 36 | 37 | | Command | Action | 38 | | :------------------------ | :----------------------------------------------- | 39 | | `npm install` | Installs dependencies | 40 | | `npm run dev` | Starts local dev server at `localhost:4321` | 41 | | `npm run build` | Build your production site to `./dist/` | 42 | | `npm run preview` | Preview your build locally, before deploying | 43 | | `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | 44 | | `npm run astro -- --help` | Get help using the Astro CLI | 45 | 46 | ## 👀 Want to learn more? 47 | 48 | Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). 49 | -------------------------------------------------------------------------------- /app/astro.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { defineConfig } from "astro/config"; 3 | import dynamicImport from "astro-dynamic-import"; 4 | import { transformerNotationDiff } from "shiki-transformers"; 5 | 6 | import unoCSS from "unocss/astro"; 7 | 8 | import mdx from "@astrojs/mdx"; 9 | 10 | import vue from "@astrojs/vue"; 11 | 12 | // https://astro.build/config 13 | export default defineConfig({ 14 | integrations: [unoCSS({ 15 | injectReset: true, 16 | }), dynamicImport(), mdx(), vue()], 17 | redirects: { 18 | "/docs": { 19 | status: 302, 20 | destination: "/docs/introduction", 21 | }, 22 | "/preset": { 23 | status: 302, 24 | destination: "/preset/introduction", 25 | }, 26 | "/components": { 27 | status: 302, 28 | destination: "/components/accordion", 29 | }, 30 | }, 31 | markdown: { 32 | shikiConfig: { 33 | theme: "css-variables", 34 | transformers: [transformerNotationDiff()], 35 | }, 36 | }, 37 | output: "static", 38 | }); -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "scripts": { 6 | "dev": "astro dev", 7 | "build": "astro build", 8 | "preview": "astro preview", 9 | "astro": "astro" 10 | }, 11 | "dependencies": { 12 | "@astrojs/mdx": "^4.0.8", 13 | "@astrojs/vue": "^5.0.6", 14 | "@flexilla/flexilla": "^2.0.9", 15 | "@flexilla/utilities": "^2.0.71", 16 | "astro": "^5.2.3", 17 | "astro-dynamic-import": "^2.0.3", 18 | "astro-font": "^1.0.0", 19 | "overlayscrollbars": "^2.10.1", 20 | "unocss": "^65.4.3", 21 | "vue": "^3.5.13" 22 | }, 23 | "devDependencies": { 24 | "@iconify-json/ph": "^1.2.2", 25 | "@julr/unocss-preset-forms": "^1.0.0", 26 | "@unifydev/flexilla": "^0.0.0", 27 | "@unifydev/preset-ui": "^0.1.1", 28 | "shiki-transformers": "^1.0.1", 29 | "shikiji-transformers": "^0.10.2" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/public/defaultavatar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/defaultavatar.webp -------------------------------------------------------------------------------- /app/public/favicon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/favicon-dark.png -------------------------------------------------------------------------------- /app/public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/public/fonts/geist-medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/fonts/geist-medium.woff -------------------------------------------------------------------------------- /app/public/fonts/geist-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/fonts/geist-normal.woff -------------------------------------------------------------------------------- /app/public/fonts/geist-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/fonts/geist-semibold.woff -------------------------------------------------------------------------------- /app/public/icons/css.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/html.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/js.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/laravel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/npm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/shell.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/tailwind.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/ts.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/icons/yarn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/images/Image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/Image.png -------------------------------------------------------------------------------- /app/public/images/african-american-business.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/african-american-business.webp -------------------------------------------------------------------------------- /app/public/images/baskets.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/baskets.webp -------------------------------------------------------------------------------- /app/public/images/baskets_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/baskets_2.webp -------------------------------------------------------------------------------- /app/public/images/bottes-cuir.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/bottes-cuir.webp -------------------------------------------------------------------------------- /app/public/images/buildingImg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/buildingImg.jpg -------------------------------------------------------------------------------- /app/public/images/camion1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/camion1.webp -------------------------------------------------------------------------------- /app/public/images/chaussures-cuir-marron.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/chaussures-cuir-marron.webp -------------------------------------------------------------------------------- /app/public/images/chaussures-talons-hauts.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/chaussures-talons-hauts.webp -------------------------------------------------------------------------------- /app/public/images/chef.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/chef.webp -------------------------------------------------------------------------------- /app/public/images/creative-agency-production.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/creative-agency-production.webp -------------------------------------------------------------------------------- /app/public/images/dash-dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/dash-dark.webp -------------------------------------------------------------------------------- /app/public/images/dash-light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/dash-light.webp -------------------------------------------------------------------------------- /app/public/images/dev-with-c-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/dev-with-c-1.webp -------------------------------------------------------------------------------- /app/public/images/dev-with-c.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/dev-with-c.webp -------------------------------------------------------------------------------- /app/public/images/happy-work.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/happy-work.webp -------------------------------------------------------------------------------- /app/public/images/hero-img.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/hero-img.webp -------------------------------------------------------------------------------- /app/public/images/heroImg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/heroImg.webp -------------------------------------------------------------------------------- /app/public/images/icons/fruit-icon.svg: -------------------------------------------------------------------------------- 1 | fruit -------------------------------------------------------------------------------- /app/public/images/icons/web-development.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/public/images/image1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/image1.webp -------------------------------------------------------------------------------- /app/public/images/img1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/img1.webp -------------------------------------------------------------------------------- /app/public/images/img2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/img2.webp -------------------------------------------------------------------------------- /app/public/images/medecine-team.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/medecine-team.webp -------------------------------------------------------------------------------- /app/public/images/podCast.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/podCast.webp -------------------------------------------------------------------------------- /app/public/images/portrait-of-smiling-med.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/portrait-of-smiling-med.webp -------------------------------------------------------------------------------- /app/public/images/sidebiew.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/sidebiew.webp -------------------------------------------------------------------------------- /app/public/images/sports-shoe.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/sports-shoe.webp -------------------------------------------------------------------------------- /app/public/images/woman-at-meet-up.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/woman-at-meet-up.webp -------------------------------------------------------------------------------- /app/public/images/woman-with-gro.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/woman-with-gro.webp -------------------------------------------------------------------------------- /app/public/images/working-on-housing-project.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/images/working-on-housing-project.jpg -------------------------------------------------------------------------------- /app/public/logos/paypallogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/logos/paypallogo.png -------------------------------------------------------------------------------- /app/public/logos/slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/logos/slack.png -------------------------------------------------------------------------------- /app/public/logos/spotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/public/logos/spotify.png -------------------------------------------------------------------------------- /app/src/assets/css/app-ui.css: -------------------------------------------------------------------------------- 1 | 2 | :root { 3 | --bg: var(--c-white); 4 | --bg-lighter: var(--c-gray-50); 5 | --bg-light: var(--c-gray-100); 6 | --bg-high: var(--c-gray-200); 7 | --bg-higher: var(--c-gray-300); 8 | 9 | --fg: var(--c-gray-700); 10 | --fg-subtext: var(--c-gray-600); 11 | --fg-title: var(--c-gray-900); 12 | --fg-subtitle: var(--c-gray-800); 13 | --border: var(--c-gray-200); 14 | 15 | --border-lighter: var(--c-gray-50); 16 | --border-light: var(--c-gray-200); 17 | --border-high: var(--c-gray-300); 18 | --border-higher: var(--c-gray-400); 19 | 20 | --ui-checkbox-bg: var(--bg); 21 | --ui-checkbox-border: var(--border-high); 22 | --ui-radio-bg: var(--bg); 23 | --ui-radio-border: var(--border-high); 24 | 25 | --switch-checked-thumb-primary: var(--primary-600) 26 | 27 | } 28 | 29 | .dark { 30 | /* Background colors */ 31 | --bg:var(--c-gray-950); 32 | --bg-lighter: var(--c-gray-900); 33 | --bg-light: var(--c-gray-900); 34 | --bg-high: var(--c-gray-800); 35 | --bg-higher: var(--c-gray-700); 36 | 37 | /* Foreground colors */ 38 | --fg-text: var(--c-gray-300); 39 | --fg-title: var(--c-white); 40 | --fg-subtitle: var(--c-gray-200); 41 | --fg-subtext: var(--c-gray-300); 42 | --fg-light: var(--c-gray-400); 43 | 44 | /* Border colors */ 45 | --border: var(--c-gray-900); 46 | --border-light: var(--c-gray-800); 47 | --border-lighter: var(--c-gray-900); 48 | --border-high: var(--c-gray-700); 49 | --border-higher: var(--c-gray-600); 50 | 51 | --ui-checkbox-border: var(--border-light); 52 | 53 | } -------------------------------------------------------------------------------- /app/src/assets/css/colors.css: -------------------------------------------------------------------------------- 1 | @import url(./default-colors.css); 2 | @import url(./themes/air.css); 3 | @import url(./themes/earth.css); 4 | @import url(./themes/fire.css); 5 | @import url(./themes/water.css); 6 | 7 | :root { 8 | --pagefind-ui-scale: .8; 9 | --ui-find-page-input-bt: hsl(var(--c-gray-200)); 10 | --page-find-message: hsl(var(--c-gray-600)); 11 | --card-ui-find-page-bg-hover: hsl(var(--c-gray-100)); 12 | --card-ui-find-page-bdr: hsl(var(--c-gray-100)); 13 | --card-ui-find-page-bdr-hover: hsl(var(--c-gray-200)); 14 | --card-ui-find-page-title: var(--c-gray-900); 15 | --card-ui-find-page-text-expert: hsl(var(--c-gray-600)); 16 | 17 | --card-ui-find-mark-bg: hsl(var(--c-primary-600)); 18 | --card-ui-find-mark-text: hsl(var(--c-white)); 19 | --ui-find-input-bg: hsl(var(--c-white)); 20 | --ui-find-input-placeholder: hsl(var(--c-gray-600)); 21 | --pagefind-ui-text:hsl(var(--c-gray-600)); 22 | } 23 | 24 | .dark { 25 | --ui-find-page-input-bt: hsl(var(--c-gray-800)); 26 | --page-find-message: hsl(var(--c-gray-400)); 27 | --card-ui-find-page-bg-hover: hsl(var(--c-gray-900)); 28 | --card-ui-find-page-bdr: hsl(var(--c-gray-900)); 29 | --card-ui-find-page-bdr-hover: hsl(var(--c-gray-800)); 30 | --card-ui-find-page-title: white; 31 | --card-ui-find-page-text-expert: hsl(var(--c-gray-400)); 32 | --ui-find-input-bg: hsl(var(--c-gray-950)); 33 | --ui-find-input-placeholder: hsl(var(--c-gray-400)); 34 | --pagefind-ui-text:hsl(var(--c-gray-400)); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/assets/css/global.css: -------------------------------------------------------------------------------- 1 | @import url(./colors.css); 2 | @import url(./app-ui.css); 3 | @import url(./ui.css); 4 | @import url(./button.css); 5 | 6 | *::selection { 7 | color : hsl(var(--c-primary-950)); 8 | background-color: hsl(var(--c-primary-300)); 9 | } 10 | 11 | /* Firefox */ 12 | * { 13 | scrollbar-width: thin !important; 14 | scrollbar-color: transparent !important; 15 | } 16 | 17 | ::-webkit-scrollbar { 18 | width : 0 !important; 19 | height : 0 !important; 20 | background-color: transparent; 21 | } 22 | 23 | 24 | html { 25 | max-width : 100vw; 26 | scroll-behavior: smooth; 27 | } 28 | 29 | body { 30 | width: 100%; 31 | font-family: 'Geist Sans', 'geistSans', "Inter Variable", 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 32 | "Segoe UI", Roboto, sans-serif; 33 | font-synthesis-weight: none; 34 | text-rendering : optimizeLegibility; 35 | } 36 | 37 | @media (prefers-color-scheme: dark) { 38 | .dark:root { 39 | color-scheme: dark; 40 | } 41 | } 42 | 43 | .hidden-scrollbar { 44 | content: ''; 45 | } 46 | 47 | @media (max-width: 1279px) { 48 | .hidden-scrollbar { 49 | overflow: hidden !important; 50 | } 51 | } 52 | 53 | @media (max-width: 1023px) { 54 | .overflow-small-device { 55 | overflow : hidden; 56 | overflow-y: auto; 57 | } 58 | 59 | .hidden-scrollbar-on-navopen { 60 | overflow: hidden !important; 61 | } 62 | } 63 | 64 | @keyframes fadeInScale { 65 | from { 66 | opacity : 0; 67 | transform: scale(.85); 68 | } 69 | 70 | to { 71 | opacity : 1; 72 | transform: scale(1); 73 | } 74 | } 75 | 76 | @keyframes fadeOutScale { 77 | from { 78 | opacity : 1; 79 | transform: scale(1); 80 | } 81 | 82 | to { 83 | opacity : 0; 84 | transform: scale(.85); 85 | } 86 | } -------------------------------------------------------------------------------- /app/src/assets/css/themes/fire.css: -------------------------------------------------------------------------------- 1 | [data-palette=fire] { 2 | --c-primary-50: var(--c-thunderbird-50); 3 | --c-primary-100: var(--c-thunderbird-100); 4 | --c-primary-200: var(--c-thunderbird-200); 5 | --c-primary-300: var(--c-thunderbird-300); 6 | --c-primary-400: var(--c-thunderbird-400); 7 | --c-primary-500: var(--c-thunderbird-500); 8 | --c-primary-600: var(--c-thunderbird-600); 9 | --c-primary-700: var(--c-thunderbird-700); 10 | --c-primary-800: var(--c-thunderbird-800); 11 | --c-primary-900: var(--c-thunderbird-900); 12 | --c-primary-950: var(--c-thunderbird-950); 13 | 14 | --c-secondary-50: var(--c-air-orange-50); 15 | --c-secondary-100: var(--c-air-orange-100); 16 | --c-secondary-200: var(--c-air-orange-200); 17 | --c-secondary-300: var(--c-air-orange-300); 18 | --c-secondary-400: var(--c-air-orange-400); 19 | --c-secondary-500: var(--c-air-orange-500); 20 | --c-secondary-600: var(--c-air-orange-600); 21 | --c-secondary-700: var(--c-air-orange-700); 22 | --c-secondary-800: var(--c-air-orange-800); 23 | --c-secondary-900: var(--c-air-orange-900); 24 | --c-secondary-950: var(--c-air-orange-950); 25 | 26 | 27 | --c-gray-50: var(--c-stone-50); 28 | --c-gray-100: var(--c-stone-100); 29 | --c-gray-200: var(--c-stone-200); 30 | --c-gray-300: var(--c-stone-300); 31 | --c-gray-400: var(--c-stone-400); 32 | --c-gray-500: var(--c-stone-500); 33 | --c-gray-600: var(--c-stone-600); 34 | --c-gray-700: var(--c-stone-700); 35 | --c-gray-800: var(--c-stone-800); 36 | --c-gray-900: var(--c-stone-900); 37 | --c-gray-950: var(--c-stone-950); 38 | } 39 | -------------------------------------------------------------------------------- /app/src/assets/css/themes/water.css: -------------------------------------------------------------------------------- 1 | [data-palette="water"] { 2 | --c-primary-50: 213 36% 97%; 3 | --c-primary-100: 213 41% 94%; 4 | --c-primary-200: 213 54% 86%; 5 | --c-primary-300: 210 57% 74%; 6 | --c-primary-400: 208 56% 60%; 7 | --c-primary-500: 209 50% 48%; 8 | --c-primary-600: 210 55% 40%; 9 | --c-primary-700: 211 55% 32%; 10 | --c-primary-800: 212 52% 27%; 11 | --c-primary-900: 213 46% 24%; 12 | --c-primary-950: 214 46% 16%; 13 | 14 | --c-secondary-50: var(--c-teal-50); 15 | --c-secondary-100: var(--c-teal-100); 16 | --c-secondary-200: var(--c-teal-200); 17 | --c-secondary-300: var(--c-teal-300); 18 | --c-secondary-400: var(--c-teal-400); 19 | --c-secondary-500: var(--c-teal-500); 20 | --c-secondary-600: var(--c-teal-600); 21 | --c-secondary-700: var(--c-teal-700); 22 | --c-secondary-800: var(--c-teal-800); 23 | --c-secondary-900: var(--c-teal-900); 24 | --c-secondary-950: var(--c-teal-950); 25 | 26 | 27 | --c-accent-50: var(--c-dodger-blue-50); 28 | --c-accent-100: var(--c-dodger-blue-100); 29 | --c-accent-200: var(--c-dodger-blue-200); 30 | --c-accent-300: var(--c-dodger-blue-300); 31 | --c-accent-400: var(--c-dodger-blue-400); 32 | --c-accent-500: var(--c-dodger-blue-500); 33 | --c-accent-600: var(--c-dodger-blue-600); 34 | --c-accent-700: var(--c-dodger-blue-700); 35 | --c-accent-800: var(--c-dodger-blue-800); 36 | --c-accent-900: var(--c-dodger-blue-900); 37 | --c-accent-950: var(--c-dodger-blue-950); 38 | 39 | 40 | --c-gray-50: var(--c-gray-base-50); 41 | --c-gray-100: var(--c-gray-base-100); 42 | --c-gray-200: var(--c-gray-base-200); 43 | --c-gray-300: var(--c-gray-base-300); 44 | --c-gray-400: var(--c-gray-base-400); 45 | --c-gray-500: var(--c-gray-base-500); 46 | --c-gray-600: var(--c-gray-base-600); 47 | --c-gray-700: var(--c-gray-base-700); 48 | --c-gray-800: var(--c-gray-base-800); 49 | --c-gray-900: var(--c-gray-base-900); 50 | --c-gray-950: var(--c-gray-base-950); 51 | } 52 | -------------------------------------------------------------------------------- /app/src/assets/js/doc-script.ts: -------------------------------------------------------------------------------- 1 | import "./tab-content-menu" 2 | import { Collapse, Tabs, Accordion, Modal, Dropdown, Tooltip, CustomRange, OffCanvas, AutoResizeTextArea, Popover } from "@flexilla/flexilla" 3 | import { $$ } from "./selector" 4 | 5 | export const initdDocsScript = () => { 6 | OffCanvas.autoInit("[data-ui-offcanvas]") 7 | 8 | const collaspses = $$("[data-fx-collapse]") 9 | 10 | for (const collaspe of collaspses) { 11 | new Collapse(collaspe, { 12 | defaultState: "open" 13 | }) 14 | } 15 | 16 | Modal.autoInit() 17 | OffCanvas.autoInit() 18 | Tabs.autoInit('[data-tab-fx-site]') 19 | Tabs.autoInit('[data-tabs]') 20 | Accordion.autoInit('[data-accordion]') 21 | Dropdown.autoInit('[data-drop-down]') 22 | 23 | Tooltip.autoInit() 24 | Tooltip.autoInit("[data-tooltip]") 25 | Popover.autoInit("[data-popover]") 26 | CustomRange.autoInit("[data-custom-range-wrapper]") 27 | AutoResizeTextArea.autoInit() 28 | } 29 | -------------------------------------------------------------------------------- /app/src/assets/js/global.ts: -------------------------------------------------------------------------------- 1 | import { OffCanvas } from "@flexilla/flexilla" 2 | 3 | export const initCommonScript = ()=>{ 4 | OffCanvas.autoInit('[data-ui-offcanvas]') 5 | } -------------------------------------------------------------------------------- /app/src/assets/js/navbar.ts: -------------------------------------------------------------------------------- 1 | export const initNavbar = () => { 2 | const navbar = document.querySelector("[data-navbar]"); 3 | const navTrigger = document.querySelector("[data-toggle-navbar]"); 4 | if (navbar instanceof HTMLElement && navTrigger instanceof HTMLButtonElement) { 5 | 6 | const hideNavBar = () => { 7 | navbar.setAttribute("data-state", "close"); 8 | navTrigger.setAttribute("aria-expanded", "false"); 9 | navTrigger.setAttribute("data-state", "close"); 10 | document.body.classList.remove("hidden-scrollbar-on-navopen") 11 | document.removeEventListener("click", hideNavOnClickOutSide); 12 | } 13 | const hideNavOnClickOutSide = (ev: MouseEvent) => { 14 | if (!navTrigger.contains(ev.target as Node)) { 15 | hideNavBar(); 16 | } 17 | } 18 | 19 | const toggleNavbar = () => { 20 | const state = navbar.dataset.state || "close"; 21 | navbar.setAttribute( 22 | "data-state", 23 | `${state === "open" ? "close" : "open"}` 24 | ); 25 | navTrigger.setAttribute( 26 | "data-state", 27 | `${state === "open" ? "close" : "open"}` 28 | ); 29 | navTrigger.setAttribute( 30 | "aria-expanded", 31 | `${state === "open" ? "false" : "true"}` 32 | ); 33 | document.body.classList[state === "open" ? "remove" : "add"]("hidden-scrollbar-on-navopen") 34 | if (state === "close") { 35 | document.addEventListener("click", hideNavOnClickOutSide); 36 | } else { 37 | document.removeEventListener("click", hideNavOnClickOutSide); 38 | } 39 | } 40 | 41 | navTrigger.addEventListener("click", toggleNavbar); 42 | navbar.addEventListener("click", hideNavBar); 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/assets/js/pager.ts: -------------------------------------------------------------------------------- 1 | 2 | import { sidebarItems } from "@/data/index"; 3 | import type { SidebarItem } from "@/types/index"; 4 | 5 | export type SlugPaginate = { 6 | title: string; 7 | slug: string; 8 | description:string, 9 | keywords:string 10 | } 11 | 12 | 13 | 14 | export const findItemsByName = (name: string): SidebarItem[] | undefined => { 15 | for (const item of sidebarItems) { 16 | if (item.name === name) { 17 | const data = item.items.map(item => name === "components" ? item.label === "Getting Started" ? [] : item.items : item.items).flat() 18 | return data 19 | } 20 | } 21 | return undefined; 22 | } 23 | 24 | const flatMapItems = (name: string): SlugPaginate[] | undefined => { 25 | const data = findItemsByName(name) 26 | return data?.flatMap((item) => ({ title: item.title, slug: item.path, description: item.description, keywords: item.keywords })) 27 | } 28 | 29 | 30 | const getActiveIndex = (array_: SlugPaginate[], slug: string) => { 31 | return array_.findIndex((item) => item.slug === slug) 32 | } 33 | 34 | 35 | export const getPagger = ({ slug, name, baseUrl }: { slug: string, name: string, baseUrl: string }) => { 36 | const flatMap = flatMapItems(name) as SlugPaginate[] 37 | 38 | const flatenedItems = [...flatMap] 39 | const activeIndex = getActiveIndex(flatenedItems, `/${baseUrl}/${slug}`) 40 | const prev = activeIndex !== 0 ? flatenedItems[activeIndex - 1] : null 41 | const next = activeIndex !== flatenedItems.length - 1 ? flatenedItems[activeIndex + 1] : null 42 | const current = flatenedItems[activeIndex] 43 | return { prev, next, current } 44 | } -------------------------------------------------------------------------------- /app/src/assets/js/scrollbar.ts: -------------------------------------------------------------------------------- 1 | import { OverlayScrollbars } from 'overlayscrollbars'; 2 | import { $$ } from './selector'; 3 | 4 | export const initScrollbar = ()=>{ 5 | const elements = $$('[data-hidden-scrollbar-s]') 6 | for (const element of elements) { 7 | OverlayScrollbars(element, {}); 8 | } 9 | 10 | } -------------------------------------------------------------------------------- /app/src/assets/js/selector.ts: -------------------------------------------------------------------------------- 1 | export const $ = (selector: string, parentElement: HTMLElement = document.body): HTMLElement | null => 2 | parentElement.querySelector(selector); 3 | 4 | export const $$ = (selector: string, parentElement: HTMLElement = document.body): HTMLElement[] => 5 | Array.from(parentElement.querySelectorAll(selector)); -------------------------------------------------------------------------------- /app/src/assets/js/tab-content-menu.ts: -------------------------------------------------------------------------------- 1 | import { $ } from "@assets/js/selector"; 2 | export const initTabOfContent = () => { 3 | const tabOfContentMob = $("[data-table-of-content]"); 4 | const trigger = $("[data-trigger-tab-content]"); 5 | if (tabOfContentMob && trigger) { 6 | const toggleTabOfContent = () => { 7 | const isOpened = trigger.getAttribute("aria-expanded") === "true"; 8 | trigger.setAttribute("aria-expanded", `${!isOpened}`); 9 | tabOfContentMob.setAttribute( 10 | "data-state", 11 | `${isOpened ? "close" : "open"}` 12 | ); 13 | 14 | tabOfContentMob.setAttribute("aria-hidden", `${isOpened}`); 15 | tabOfContentMob.hidden = isOpened; 16 | document.body.classList[isOpened ? "remove" : "add"]("hidden-scrollbar") 17 | if (!isOpened) { 18 | document.addEventListener("click", hideOnClickOutSide); 19 | } else { 20 | document.removeEventListener("click", hideOnClickOutSide); 21 | } 22 | }; 23 | const hideTabOfContent = () => { 24 | trigger.setAttribute("aria-expanded", "false"); 25 | tabOfContentMob.setAttribute("data-state", "close"); 26 | tabOfContentMob.setAttribute("aria-hidden", "true"); 27 | tabOfContentMob.hidden = true; 28 | document.body.classList.remove("hidden-scrollbar") 29 | document.removeEventListener("click", hideOnClickOutSide); 30 | }; 31 | const hideOnClickOutSide = (ev: MouseEvent) => { 32 | if (!trigger.contains(ev.target as Node)) { 33 | hideTabOfContent(); 34 | } 35 | }; 36 | trigger.addEventListener("click", toggleTabOfContent); 37 | tabOfContentMob.addEventListener("click", hideTabOfContent); 38 | } 39 | } -------------------------------------------------------------------------------- /app/src/components/atoms/Container.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"div"> & {} 5 | 6 | const { class: className = "", ...rest } = Astro.props; 7 | --- 8 | 9 |
10 | 11 |
12 | -------------------------------------------------------------------------------- /app/src/components/atoms/PaletteCard.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | label: string; 4 | colors: string[]; 5 | id: string; 6 | isDefault?: boolean; 7 | } 8 | const { label, colors, id, isDefault } = Astro.props; 9 | --- 10 | 11 |
  • 12 | 32 |
  • 33 | -------------------------------------------------------------------------------- /app/src/components/atoms/Paragraph.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"p"> & {} 5 | const { class: className, ...rest } = Astro.props; 6 | --- 7 | 8 |

    9 | 10 |

    11 | -------------------------------------------------------------------------------- /app/src/components/atoms/SocialLinks.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { discordServer, orgUrl, twitterLink } from "@/const/index"; 3 | import UiLink from "./UiLink.astro"; 4 | 5 | 6 | const links = [ 7 | { 8 | title: "Discord Server", 9 | href: discordServer, 10 | icon: "i-fx-discord", 11 | }, 12 | { 13 | title: "Github Account", 14 | href: orgUrl, 15 | icon: "i-fx-github", 16 | }, 17 | { 18 | title: "X account", 19 | href: twitterLink, 20 | icon: "i-ph-x-logo", 21 | }, 22 | ]; 23 | --- 24 |
    25 | 26 | { 27 | links.map((link) => ( 28 | 29 | 31 | )) 32 | } 33 |
    34 | -------------------------------------------------------------------------------- /app/src/components/atoms/UiLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"a"> & { 5 | asInternal?: boolean; 6 | } 7 | const { href, "aria-label": label, asInternal, ...rest } = Astro.props; 8 | const href_ = href as string; 9 | --- 10 | 11 | { 12 | (href_ && href_.startsWith("/")) || 13 | (href_ && href_.startsWith("#")) || 14 | asInternal ? ( 15 | 20 | 21 | 22 | ) : ( 23 | 30 | 31 | 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /app/src/components/docs/DocPageHeader.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import DocResLink from "./base/DocResLink.astro"; 3 | 4 | type Props = { 5 | breadcrumbsMain: { href: string; text: string }; 6 | breadcrumbsWords: string[]; 7 | title: string; 8 | subTitle?: string; 9 | links: Record[] | undefined; 10 | } 11 | const { 12 | breadcrumbsMain, 13 | breadcrumbsWords: words, 14 | title, 15 | subTitle: description, 16 | links, 17 | } = Astro.props; 18 | --- 19 | 20 |
    21 |
      24 |
    1. 25 | 30 | {breadcrumbsMain.text} 31 | 32 | 33 |
    2. 34 | { 35 | words.map((word, index) => ( 36 |
    3. 45 | {word} 46 | {index === words.length - 1 ? null : ( 47 |
    4. 50 | )) 51 | } 52 |
    53 |

    54 | {title} 55 |

    56 |

    57 | {description} 58 |

    59 | { 60 | links ? ( 61 |
    62 | {links.map((link) => 63 | Object.entries(link).map(([key, value]) => ( 64 | 65 | )), 66 | )} 67 |
    68 | ) : null 69 | } 70 |
    71 | -------------------------------------------------------------------------------- /app/src/components/docs/MdxComponents.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Paragraph from "./mdx-components/Paragraph.astro"; 3 | import DocsTab from "./mdx-components/DocsTab.astro"; 4 | import TabPanel from "./mdx-components/TabPanel.astro"; 5 | import Heading2 from "./mdx-components/Heading2.astro"; 6 | import Heading3 from "./mdx-components/Heading3.astro"; 7 | import Callout from "./mdx-components/Callout.astro"; 8 | import Ol from "./mdx-components/Ol.astro"; 9 | import Ul from "./mdx-components/Ul.astro"; 10 | import Table from "./mdx-components/Table.astro"; 11 | import THead from "./mdx-components/THead.astro"; 12 | import TBody from "./mdx-components/TBody.astro"; 13 | import Li from "./mdx-components/Li.astro"; 14 | import Steps from "./mdx-components/Steps.astro"; 15 | import Step from "./mdx-components/Step.astro"; 16 | import BoxCode from "./mdx-components/BoxCode.astro"; 17 | import Codebloc from "./mdx-components/Codebloc.astro"; 18 | import BlockCode from "./mdx-components/BlockCode.astro"; 19 | import DocLink from "./mdx-components/DocLink.astro"; 20 | import DemoBox from "./mdx-components/DemoBox.astro"; 21 | import LinkCard from "./mdx-components/LinkCard.astro"; 22 | import UiWrapper from "./mdx-components/UiWrapper.astro"; 23 | import ComponentPreview from "./mdx-components/ComponentPreview.astro"; 24 | import ComponentPreviewOnly from "./mdx-components/ComponentPreviewOnly.astro"; 25 | import ComponentPrev from "./mdx-components/ComponentPrev.astro"; 26 | import CodeGroupBox from "./mdx-components/CodeGroupBox.astro"; 27 | 28 | export const components = { 29 | Tabs: DocsTab, 30 | TabPanel, 31 | Callout, 32 | Steps, 33 | Step, 34 | BoxCode, 35 | BlockCode, 36 | DemoBox, 37 | LinkCard, 38 | UiWrapper, 39 | CodeGroupBox, 40 | p: Paragraph, 41 | h2: Heading2, 42 | h3: Heading3, 43 | li: Li, 44 | ol: Ol, 45 | ul: Ul, 46 | a: DocLink, 47 | table: Table, 48 | thead: THead, 49 | tbody: TBody, 50 | pre: Codebloc, 51 | ComponentPreview, 52 | PreviewBox: ComponentPreviewOnly, 53 | Preview:ComponentPrev 54 | }; 55 | --- 56 | -------------------------------------------------------------------------------- /app/src/components/docs/base/DocResLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import UiLink from "@components/atoms/UiLink.astro"; 3 | type Props = { 4 | href: string; 5 | text: string; 6 | } 7 | 8 | const { href, text } = Astro.props; 9 | 10 | const isNotExternal = (href: string) => 11 | href.startsWith("/") || href.startsWith("#"); 12 | --- 13 | 14 | 15 | {text} 16 | { 17 | isNotExternal(href) ? null : ( 18 | 22 | -------------------------------------------------------------------------------- /app/src/components/docs/base/GroupItem.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | icon: string; 4 | title: string; 5 | path: string; 6 | isActive: boolean; 7 | } 8 | const { icon, title, path, isActive } = Astro.props; 9 | --- 10 | 11 |
  • 12 | 19 | 26 | 27 | {title} 28 | 29 | 30 |
  • 31 | -------------------------------------------------------------------------------- /app/src/components/docs/base/ScrollableY.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"div"> 5 | 6 | const { class: className = "", ...rest } = Astro.props; 7 | --- 8 | 9 |
    15 | 16 |
    17 | -------------------------------------------------------------------------------- /app/src/components/docs/base/SidebarGroup.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import SidebarItemBlock from "./SidebarItemBlock.astro"; 3 | 4 | type Props = { 5 | activeItem: string; 6 | label: string; 7 | items: { 8 | title: string; 9 | path: string; 10 | state?: "updated" | "draft" | "new" | "none" | "wip"; 11 | }[]; 12 | }; 13 | const { label, items, activeItem } = Astro.props; 14 | --- 15 | 16 |
    17 | 18 | 65 | 66 |
    67 | -------------------------------------------------------------------------------- /app/src/components/docs/base/SidebarItemBlock.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | label: string; 4 | } 5 | 6 | const { label } = Astro.props; 7 | --- 8 | 9 | 12 | {label} 13 | 14 |
    15 | 16 |
    17 | -------------------------------------------------------------------------------- /app/src/components/docs/base/TopDocsNav.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | hideTableOfContent?: boolean; 4 | } 5 | 6 | const { hideTableOfContent } = Astro.props; 7 | --- 8 | 9 |
    12 | 13 |
    16 | 24 | { 25 | !hideTableOfContent ? ( 26 | 38 | ) : null 39 | } 40 |
    41 |
    42 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/BlockCode.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import CopyBtnCode from "@components/vuejs/CopyBtnCode.vue"; 3 | 4 | type Props = { 5 | shellStyle?: string; 6 | noBorderRadiusTop?: boolean; 7 | }; 8 | 9 | const { shellStyle, noBorderRadiusTop } = Astro.props; 10 | --- 11 | 12 |
    23 | 27 |
    28 |
    29 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Callout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | type: "update" | "note" | "warning" | "important"; 4 | withoutIcon?: boolean; 5 | } 6 | 7 | const { type, withoutIcon } = Astro.props; 8 | 9 | const getIcon = (type: "update" | "note" | "warning" | "important") => { 10 | return type === "update" 11 | ? "i-ph-clock-clockwise" 12 | : type === "note" 13 | ? "i-ph-note" 14 | : type === "warning" 15 | ? "i-ph-warning" 16 | : type === "important" 17 | ? "i-ph-call-bell" 18 | : ""; 19 | }; 20 | --- 21 | 22 |
    34 | { 35 | withoutIcon ? null : ( 36 |
    37 |
    39 | ) 40 | } 41 |
    42 | 43 |
    44 |
    45 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/CardTech.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import UiLink from "@components/atoms/UiLink.astro"; 3 | 4 | type Props = { 5 | href: string; 6 | icon: string; 7 | } 8 | const { href } = Astro.props; 9 | --- 10 | 11 | 12 |
    13 | 14 |
    15 |
    16 | 17 |
    18 |
    19 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/CodeGroupBox.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Codebloc.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | noBorderRadiusTop?: boolean; 4 | } 5 | 6 | const { noBorderRadiusTop } = Astro.props; 7 | --- 8 | 9 |
    20 |
    27 |
    28 |
    29 |
    30 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/ComponentPrev.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import dynamic from "astro:import"; 3 | 4 | type Props = { 5 | name: string; 6 | props?: any; 7 | }; 8 | 9 | const { name, props = {} } = Astro.props; 10 | 11 | const toImport = `components/registry/${name}.astro`; 12 | const Component = await dynamic(toImport); 13 | --- 14 | 15 |
    16 |
    20 | 21 |
    22 |
    23 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/ComponentPreviewOnly.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import dynamic from "astro:import"; 3 | import BlockCode from "./BlockCode.astro"; 4 | 5 | type Props = { 6 | name: string; 7 | props?: any; 8 | }; 9 | 10 | const { name, props = {} } = Astro.props; 11 | 12 | const toImport = `components/registry/${name}.astro`; 13 | const Component = await dynamic(toImport); 14 | --- 15 | 16 |
    17 |
    21 | 22 |
    23 | 24 | 25 | 26 |
    27 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/DemoBox.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | noBottomBorder?: boolean; 4 | } 5 | 6 | const { noBottomBorder } = Astro.props; 7 | --- 8 | 9 |
    18 | 19 |
    20 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/DocLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import UiLink from "@components/atoms/UiLink.astro"; 3 | import type { HTMLAttributes } from "astro/types"; 4 | 5 | type Props = HTMLAttributes<"a"> 6 | const { href } = Astro.props; 7 | const href_ = href as string; 8 | const isInternalLink = 9 | (href_ && href_.startsWith("/")) || (href_ && href_.startsWith("#")); 10 | --- 11 | 12 | 16 | 17 | { 18 | isInternalLink?null: 21 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/DocsTab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | type Props = { 4 | values: string[]; 5 | docPanelClass?: string; 6 | } & HTMLAttributes<"div">; 7 | 8 | const { values, docPanelClass, ...rest } = Astro.props; 9 | --- 10 | 11 |
    18 | 41 |
    45 | 46 |
    47 |
    48 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Heading2.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes} from "astro/types" 3 | type Props = HTMLAttributes<"h2"> 4 | const {...rest} = Astro.props 5 | --- 6 | 7 |

    8 | 9 |

    -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Heading3.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes} from "astro/types" 3 | type Props = HTMLAttributes<"h3"> 4 | const {...rest} = Astro.props 5 | --- 6 | 7 |

    8 | 9 |

    -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Li.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types" 3 | 4 | type Props = HTMLAttributes<"li"> 5 | 6 | const { ...rest } = Astro.props 7 | --- 8 |
  • 9 | 10 |
  • -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/LinkCard.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import UiLink from "@components/atoms/UiLink.astro"; 3 | 4 | 5 | type Props = { 6 | href: string; 7 | title: string; 8 | padding: number; 9 | type?: "soft" | "ghost" | "white"; 10 | } 11 | const { href, padding, title, type = "white" } = Astro.props; 12 | --- 13 | 14 | div]:text-fg ease-linear duration-200", 18 | { 19 | "p1 space-y-0.5": padding === 1, 20 | "p2 space-y-1": padding === 2, 21 | "p3 space-y-1": padding === 3, 22 | "p4 space-y-1.5": padding === 4, 23 | "p5 space-y-1.5": padding === 5, 24 | "p6 space-y-2": padding === 6, 25 | "btn-soft btn-soft-gray": type === "soft", 26 | "btn-ghost btn-ghost-gray": type === "ghost", 27 | "b b-border text-fg hover-b-border-light hover-bg-bg-light":type==="white" 28 | }, 29 | ]} 30 | >{title} 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Ol.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types" 3 | 4 | type Props = HTMLAttributes<"ol"> 5 | 6 | const { ...rest } = Astro.props 7 | --- 8 |
      9 | 10 |
    -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Paragraph.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"p"> 5 | const { class: className, ...rest } = Astro.props; 6 | --- 7 | 8 |
    9 | 10 |
    11 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Step.astro: -------------------------------------------------------------------------------- 1 |
  • 6 | 7 |
  • 8 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Steps.astro: -------------------------------------------------------------------------------- 1 |
      2 | 3 |
    4 | 5 | 45 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/TBody.astro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/THead.astro: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/TabPanel.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | value: string; 4 | active?: boolean; 5 | noBorder?: boolean; 6 | noBg?: string; 7 | class?: string; 8 | }; 9 | 10 | const { value, active, class: className } = Astro.props; 11 | --- 12 | 13 |
    23 | 24 |
    25 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Table.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 |
    5 |
    -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/UiWrapper.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | col: "1-2" | "1-2-3" | "2-4" | "1-2-4"; 4 | gap?: number; 5 | } 6 | 7 | const { col, gap } = Astro.props; 8 | --- 9 | 10 |
    27 | 28 |
    29 | -------------------------------------------------------------------------------- /app/src/components/docs/mdx-components/Ul.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | type Props = HTMLAttributes<"ul"> 5 | 6 | const { ...rest } = Astro.props; 7 | --- 8 | 9 |
      14 | 15 |
    16 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/BoxTableOfContent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { MarkdownHeading } from "astro"; 3 | import ScrollableY from "../base/ScrollableY.astro"; 4 | import TableOfContent from "./TableOfContent.astro"; 5 | import ContribDoc from "./ContribDoc.astro"; 6 | type Props = { 7 | headings: MarkdownHeading[]; 8 | fileName: string; 9 | contribUrl: string; 10 | discussionLink?:string 11 | } 12 | 13 | const { headings, fileName, contribUrl, discussionLink } = Astro.props; 14 | --- 15 | 16 |
    21 | 22 |
    23 |
    24 | On this page 25 |
    26 | 27 |
    28 |
    29 | 30 |
    31 |
    32 |
    33 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/CodeViewBox.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import CopyBtnCode from "@components/vuejs/CopyBtnCode.vue"; 3 | import CustomCodeBlock from "@components/vuejs/CustomCodeBlock.vue"; 4 | 5 | type Props = { 6 | code: string; 7 | lang: "html" | "css" | "ts" | "js" | "vue"; 8 | class?: string; 9 | unstilled?: boolean; 10 | }; 11 | 12 | const { code, lang, unstilled, class: className = "" } = Astro.props; 13 | --- 14 | 15 |
    22 | 26 |
    31 | 32 |
    33 |
    34 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/ContribDoc.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { 3 | repoContentLocation, 4 | repositoryUrl, 5 | startDiscussion, 6 | } from "@/const/index"; 7 | 8 | type Props = { 9 | fileName: string; 10 | contribLink: string; 11 | starsUrl?: string; 12 | discussionLink?: string; 13 | }; 14 | 15 | const { 16 | fileName: fileName, 17 | contribLink, 18 | starsUrl, 19 | discussionLink, 20 | } = Astro.props; 21 | 22 | const contribLinks = [ 23 | { 24 | href: `${contribLink}`, 25 | text: "Contributing", 26 | icon: "i-ph-chats-circle", 27 | }, 28 | { 29 | href: `${repoContentLocation}${fileName}`, 30 | text: "Edit this page", 31 | icon: "i-ph-pencil-simple-line", 32 | }, 33 | { 34 | href: `${starsUrl || repositoryUrl}`, 35 | text: "Star On github", 36 | icon: "i-ph-star", 37 | }, 38 | ]; 39 | --- 40 | 41 |
    42 | 43 | 78 |
    79 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/DocsFooter.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import SocialLinks from "@components/atoms/SocialLinks.astro"; 3 | import UiLink from "@components/atoms/UiLink.astro"; 4 | 5 | const links = [ 6 | { 7 | text: "Demo", 8 | href: "https:", 9 | }, 10 | { 11 | text: "Demo", 12 | href: "#", 13 | }, 14 | { 15 | text: "Templates", 16 | href: "#", 17 | }, 18 | ]; 19 | --- 20 | 21 |
    22 |
    23 |
    24 |
    25 | Published under MIT License 29 |
    30 |
      31 | { 32 | links.map((link) => ( 33 | 38 | {link.text} 39 | {link.href.startsWith("/") || link.href.startsWith("#") ? null : ( 40 | 43 | )) 44 | } 45 |
    46 |
    47 | 48 |
    49 |
    50 |
    51 | © unifyuidev 2023 - Present. By UnifyUIDev Team in DRC. 52 |
    53 |
    54 |
    55 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/TableOfContent.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { MarkdownHeading } from "astro"; 3 | import TableOfContentsHeading from "./TableOfContentsHeading.astro"; 4 | 5 | type Props = { 6 | headings: MarkdownHeading[]; 7 | }; 8 | 9 | type HeadingWithSubheadings = MarkdownHeading & { 10 | subheadings: MarkdownHeading[]; 11 | }; 12 | 13 | const { headings } = Astro.props; 14 | 15 | const grouppedHeadings = headings.reduce((array, heading) => { 16 | if (heading.depth === 2) { 17 | array.push({ ...heading, subheadings: [] }); 18 | } else if (heading.depth === 3) { 19 | array.at(-1)?.subheadings.push(heading); 20 | } 21 | 22 | return array; 23 | }, [] as HeadingWithSubheadings[]); 24 | --- 25 | 26 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/components/docs/ui/TableOfContentsHeading.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { MarkdownHeading } from "astro"; 3 | 4 | type HeadingWithSubheadings = MarkdownHeading & { 5 | subheadings: MarkdownHeading[]; 6 | }; 7 | 8 | type Props = { 9 | heading: HeadingWithSubheadings; 10 | } 11 | 12 | const { heading: h } = Astro.props; 13 | --- 14 | 15 |
  • 16 | 20 | {h.text} 21 | 22 | {h.subheadings.length > 0 && ( 23 |
      24 | {h.subheadings.map((sub) => ( 25 |
    1. 26 | 30 | {sub.text} 31 | 32 |
    2. 33 | ))} 34 |
    35 | )} 36 |
  • -------------------------------------------------------------------------------- /app/src/components/molecules/SEO.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { siteUrl, site_domain } from "@/const/index"; 3 | import { type SeoType } from "@/types/index"; 4 | 5 | export type Props = { 6 | seo: SeoType; 7 | } 8 | 9 | const { 10 | seo: { title, ogImage, description, keywords }, 11 | } = Astro.props; 12 | --- 13 | 14 | 15 | 19 | 20 | {title} 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 9 |
    10 |

    11 | Yes. It adheres to the WAI-ARIA design pattern. 12 |

    13 |
    14 |
    15 |
    16 | 22 |
    23 |

    24 | Yes. It's unstyled by default, giving you freedom over the look and feel. 25 |

    26 |
    27 |
    28 |
    29 | 35 |
    36 |

    37 | Yes! You can use the transition prop to configure the animation. 38 |

    39 |
    40 |
    41 |
    -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Link.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 9 |
    10 |

    11 | Yes. It adheres to the WAI-ARIA design pattern. 12 |

    13 |
    14 |
    15 |
    16 | 22 |
    23 |

    24 | Yes. It's unstyled by default, giving you freedom over the look and feel. 25 |

    26 |
    27 |
    28 |
    29 | 35 |
    36 |

    37 | Yes! You can use the transition prop to configure the animation. 38 |

    39 |
    40 |
    41 |
    -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Outline.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 9 |
    10 |

    11 | Yes. It adheres to the WAI-ARIA design pattern. 12 |

    13 |
    14 |
    15 |
    16 | 22 |
    23 |

    24 | Yes. It's unstyled by default, giving you freedom over the look and feel. 25 |

    26 |
    27 |
    28 |
    29 | 35 |
    36 |

    37 | Yes! You can use the transition prop to configure the animation. 38 |

    39 |
    40 |
    41 |
    -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Soft.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    4 | 10 |
    11 |

    12 | Yes. It adheres to the WAI-ARIA design pattern. 13 |

    14 |
    15 |
    16 |
    18 | 24 |
    25 |

    26 | Yes. It's unstyled by default, giving you freedom over the look and feel. 27 |

    28 |
    29 |
    30 |
    32 | 38 |
    39 |

    40 | Yes! You can use the transition prop to configure the animation. 41 |

    42 |
    43 |
    44 |
    -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Solid.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 9 |
    10 |

    11 | Yes. It adheres to the WAI-ARIA design pattern. 12 |

    13 |
    14 |
    15 |
    16 | 22 |
    23 |

    24 | Yes. It's unstyled by default, giving you freedom over the look and feel. 25 |

    26 |
    27 |
    28 |
    29 | 35 |
    36 |

    37 | Yes! You can use the transition prop to configure the animation. 38 |

    39 |
    40 |
    41 |
    -------------------------------------------------------------------------------- /app/src/components/registry/accordion/Subtle.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    4 | 10 |
    11 |

    12 | Yes. It adheres to the WAI-ARIA design pattern. 13 |

    14 |
    15 |
    16 |
    18 | 24 |
    25 |

    26 | Yes. It's unstyled by default, giving you freedom over the look and feel. 27 |

    28 |
    29 |
    30 |
    32 | 38 |
    39 |

    40 | Yes! You can use the transition prop to configure the animation. 41 |

    42 |
    43 |
    44 |
    -------------------------------------------------------------------------------- /app/src/components/registry/alert/CustomExample1.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 |
    5 |
    6 |

    The data export you requested is ready!

    7 |
    8 | 14 |
    15 |
    16 |
    17 | -------------------------------------------------------------------------------- /app/src/components/registry/alert/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |

    4 | You can add components to your app using the ou CLI. 5 |

    6 |
    7 |
    8 | 9 |
    10 |

    11 | You can add components to your app using the ou CLI. 12 |

    13 |
    14 |
    15 |
    16 | 17 |
    18 |

    19 | You can add components to your app using the ou CLI. 20 |

    21 |
    22 |
    23 |
    24 | -------------------------------------------------------------------------------- /app/src/components/registry/alert/Outline.astro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/src/components/registry/alert/Outline.astro -------------------------------------------------------------------------------- /app/src/components/registry/alert/Soft.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |

    You can add components to your app using the ou CLI.

    4 |
    5 |
    6 |

    You can add components to your app using the ou CLI.

    7 |
    8 |
    9 |

    With Border

    10 |

    11 | You can add components to your app using the ou CLI. 12 |

    13 |
    14 |
    15 |

    16 | You can add components to your app using the ou CLI. 17 |

    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /app/src/components/registry/alert/Solid.astro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/app/src/components/registry/alert/Solid.astro -------------------------------------------------------------------------------- /app/src/components/registry/alert/Subtle.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |

    You can add components to your app using the ou CLI.

    5 |
    6 |
    7 |

    You can add components to your app using the ou CLI.

    8 |
    9 |
    10 |

    You can add components to your app using the ou CLI.

    11 |
    12 |
    13 |

    14 | You can add components to your app using the ou CLI. 15 |

    16 |
    17 |
    18 | 19 | -------------------------------------------------------------------------------- /app/src/components/registry/alert/WithTitle.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |

    4 | Alert with title : default 5 |

    6 |

    7 | You can add components to your app using the ou CLI. 8 |

    9 |
    10 |
    11 |
    12 | 13 |
    14 |
    15 |

    16 | Alert with title & Icon : default Reverse 17 |

    18 |

    19 | You can add components to your app using the ou CLI. 20 |

    21 |
    22 |
    23 |
    24 | 25 |
    26 |

    27 | Alert with title & Icon : default Reverse 28 |

    29 |

    30 | You can add components to your app using the ou CLI. 31 |

    32 |
    33 |
    34 |
    -------------------------------------------------------------------------------- /app/src/components/registry/allCode.ts: -------------------------------------------------------------------------------- 1 | import type { ComponentCode } from "@/types/index" 2 | import { acCodes } from "./accordion/ac_codes" 3 | import { alertCode } from "./alert/alert_code" 4 | import { codeCards } from "./card/codeCard" 5 | import { codeDropdowns } from "./dropdown/code_Dropdown" 6 | import { radioCode } from "./radio/radioCode" 7 | import { popoverCode } from "./popover/popoverCode" 8 | 9 | export const allComponentCode: ComponentCode = { 10 | ...acCodes, 11 | ...alertCode, 12 | ...codeCards, 13 | ...codeDropdowns, 14 | ...radioCode, 15 | ...popoverCode, 16 | } -------------------------------------------------------------------------------- /app/src/components/registry/aspect-ratio/35mmfilm.astro: -------------------------------------------------------------------------------- 1 |
    2 | aspect 35by Johnnathan Tshibangu 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/aspect-ratio/Square.astro: -------------------------------------------------------------------------------- 1 |
    2 | Aspect Square ,by Johnnathan Tshibangu 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/aspect-ratio/StandardTV.astro: -------------------------------------------------------------------------------- 1 |
    2 | StandardTv,by Johnnathan Tshibangu 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/aspect-ratio/UltrawideMonitor.astro: -------------------------------------------------------------------------------- 1 |
    2 | UltraWide,by Johnnathan Tshibangu 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/aspect-ratio/Video-TV.astro: -------------------------------------------------------------------------------- 1 |
    2 | Image by Johnnathan Tshibangu 4 |
    5 | -------------------------------------------------------------------------------- /app/src/components/registry/avatar/AvatarHolder.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import ImageSize from "./ImageSize.astro"; 3 | --- 4 | 5 |
    6 | 7 | 8 | 9 |
    10 | -------------------------------------------------------------------------------- /app/src/components/registry/avatar/AvatarPlace.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import ImageSize from "./ImageSize.astro"; 3 | --- 4 | 5 |
    6 | 7 | 8 | 9 |
    -------------------------------------------------------------------------------- /app/src/components/registry/avatar/AvatarUI.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import ImageSize from "./ImageSize.astro"; 3 | --- 4 | 5 |
    6 | 7 | 8 | 9 | 10 | 11 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | Badge 3 | Badge 4 | Badge 5 | Badge 6 | Badge 7 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/Outline.astro: -------------------------------------------------------------------------------- 1 |
    2 | Badge Gray 3 | Badge Neutral 4 | Badge Primary 5 | Badge Secondary 6 | Badge Accent 7 | Badge Warning 8 | Badge danger 9 | Badge Info 10 | Badge Success 11 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/Soft.astro: -------------------------------------------------------------------------------- 1 |
    2 | Badge Gray 3 | Badge Neutral 4 | Badge Primary 5 | Badge Secondary 6 | Badge Accent 7 | Badge Warning 8 | Badge danger 9 | Badge Info 10 | Badge Success 11 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/Solid.astro: -------------------------------------------------------------------------------- 1 |
    2 | Badge Gray 3 | Badge Neutral 4 | Badge Primary 5 | Badge Secondary 6 | Badge Accent 7 | Badge Warning 8 | Badge danger 9 | Badge Info 10 | Badge Success 11 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/Subtle.astro: -------------------------------------------------------------------------------- 1 |
    2 | Badge Gray 3 | Badge Neutral 4 | Badge Primary 5 | Badge Secondary 6 | Badge Accent 7 | Badge Warning 8 | Badge danger 9 | Badge Info 10 | Badge Success 11 |
    -------------------------------------------------------------------------------- /app/src/components/registry/badge/WithIcon.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 12% 4 | 5 | 6 | 7 | 50% 8 | 9 | 10 | 11 | You're reaching out your limit 12 | 13 | 14 |
    -------------------------------------------------------------------------------- /app/src/components/registry/button/Button.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { BtnSizeVariant, CornerRadius } from "@/types/index"; 3 | import type { HTMLAttributes } from "astro/types"; 4 | 5 | type Props = { 6 | variant?: "soft" | "outline" | "solid" | "ghost"; 7 | size?: BtnSizeVariant; 8 | radius?: CornerRadius; 9 | } & HTMLAttributes<"button">; 10 | 11 | const variants = { 12 | solid: "btn-solid", 13 | soft: "btn-soft", 14 | outline: "btn-outline", 15 | ghost: "btn-ghost", 16 | }; 17 | const sizes = { 18 | xs: "btn-xs", 19 | sm: "btn-sm", 20 | md: "btn-md", 21 | lg: "btn-lg", 22 | xl: "btn-xl", 23 | "icon-xs": "btn-icon-xs", 24 | "icon-sm": "btn-icon-sm", 25 | "icon-md": "btn-icon-md", 26 | "icon-lg": "btn-icon-lg", 27 | "icon-xl": "btn-icon-xl", 28 | }; 29 | 30 | const cornerRadius = { 31 | sm: "rd-sm", 32 | md: "rd-md", 33 | lg: "rd-lg", 34 | xl: "rd-xl", 35 | "2xl": "rd-2xl", 36 | "3xl": "rd-3xl", 37 | full: "rd-full", 38 | }; 39 | 40 | const { 41 | size = "md", 42 | radius = "lg", 43 | class: className = "", 44 | variant = "solid", 45 | ...rest 46 | } = Astro.props; 47 | --- 48 | 49 | 61 | -------------------------------------------------------------------------------- /app/src/components/registry/button/Default.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Button from "./Button.astro"; 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /app/src/components/registry/button/IconSizes.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Button from "./Button.astro"; 3 | --- 4 |
    5 | 8 | 11 | 14 | 17 | 20 |
    -------------------------------------------------------------------------------- /app/src/components/registry/button/Sizes.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Button from "./Button.astro"; 3 | --- 4 |
    5 | 8 | 11 | 14 | 17 | 20 |
    -------------------------------------------------------------------------------- /app/src/components/registry/button/WithIcon.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Button from "./Button.astro"; 3 | --- 4 | 5 |
    6 | 13 | 20 |
    21 | -------------------------------------------------------------------------------- /app/src/components/registry/card/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 5 |
    6 |
    7 |

    8 | Card Title

    9 |

    10 | Lorem ipsum dolor sit amet consectetur adipisicing elit. 11 |

    12 |
    13 |
    14 |
    -------------------------------------------------------------------------------- /app/src/components/registry/card/Ecommerce1.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    5 |
    7 | 9 | -40% 10 | 11 | 15 |
    16 | bottes cuir 17 |
    18 |
    19 |

    20 | Air Nike 21 |

    22 | 12$ 23 |
    24 |
    25 | 26 |
    -------------------------------------------------------------------------------- /app/src/components/registry/card/Ecommerce2.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    5 | 6 | Top Seller 7 | 8 |
    9 | Sport Shoe 10 |
    11 |
    12 |

    13 | Air Nike 14 |

    15 | 12$ 16 |
    17 |
    18 |

    19 | Colored 20 |

    21 | 25 |
    26 |
    27 |
    28 | 29 |
    -------------------------------------------------------------------------------- /app/src/components/registry/card/PricingCard.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Business Plan 4 |

    5 | Lorem ipsum dolor sit amet consectetur, adipisicing elit. 6 |

    7 |
    8 | 10 | $400 11 | 12 | 13 | lifetime 14 | 15 |
    16 |
      17 |
    • 18 | 19 | Lorem ipsum dolor sit amet 20 |
    • 21 |
    • 22 | 23 | Lorem ipsum dolor sit amet 24 |
    • 25 |
    • 26 | 27 | Lorem ipsum dolor sit amet 28 |
    • 29 |
    • 30 | 31 | Lorem ipsum dolor sit amet 32 |
    • 33 |
    • 34 | 35 | Lorem ipsum dolor sit amet 36 |
    • 37 |
    38 | 39 | Get Started 40 | 41 |
    42 |
    -------------------------------------------------------------------------------- /app/src/components/registry/card/WithIcon.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    5 | 6 |
    7 |
    8 |

    9 | Card Title

    10 |

    11 | Lorem ipsum dolor sit amet consectetur adipisicing elit. 12 |

    13 |
    14 |
    15 | 16 |
    -------------------------------------------------------------------------------- /app/src/components/registry/divider/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 |
    6 |
    -------------------------------------------------------------------------------- /app/src/components/registry/divider/WithLabel.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Label Start 4 |
    5 |
    6 | Label Center 7 |
    8 |
    9 | Label Start 10 |
    11 |
    12 | Custom label 13 |
    14 |
    -------------------------------------------------------------------------------- /app/src/components/registry/dropdown/Default.astro: -------------------------------------------------------------------------------- 1 | 7 | 24 | -------------------------------------------------------------------------------- /app/src/components/registry/dropdown/code_Dropdown.ts: -------------------------------------------------------------------------------- 1 | import type { ComponentCode } from "@/types/index"; 2 | 3 | export const codeDropdowns: ComponentCode = { 4 | 'dropdown/Default':{ 5 | lang:"html", 6 | name:"index.html", 7 | code:` 8 | 14 | ` 31 | }, 32 | } -------------------------------------------------------------------------------- /app/src/components/registry/input/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/input/Leading.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 5 | 9 |
    10 |
    11 | 13 | 17 |
    18 |
    19 | 21 | 25 |
    26 |
    27 | 31 | 33 |
    34 |
    -------------------------------------------------------------------------------- /app/src/components/registry/input/Trailing.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 5 | 9 |
    10 |
    11 | 13 | 17 |
    18 |
    19 | 21 | 25 |
    26 |
    27 | 29 | 33 |
    34 |
    -------------------------------------------------------------------------------- /app/src/components/registry/input/WithLabel.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 | 6 |
    7 |
    8 | 9 | 11 |
    12 |
    -------------------------------------------------------------------------------- /app/src/components/registry/kbd/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | kbd xs 4 | 5 | 6 | Kbd sm 7 | 8 | 9 | Kbd md 10 | 11 | 12 | Kbd lg 13 | 14 | 15 | Kbd xl 16 | 17 |
    -------------------------------------------------------------------------------- /app/src/components/registry/kbd/Grouped.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 4 | 5 | 6 | 7 | + 8 | B 9 | 10 | 11 | And 12 | 13 | 14 | 15 | 16 | 17 | + R 18 | 19 |
    20 |
    -------------------------------------------------------------------------------- /app/src/components/registry/kbd/WithIcon.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | / 12 | 13 |
    -------------------------------------------------------------------------------- /app/src/components/registry/link/BtnLink.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/components/registry/link/Underline.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/components/registry/link/WithIcon.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/components/registry/meter/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 |
    -------------------------------------------------------------------------------- /app/src/components/registry/meter/MeterSize.astro: -------------------------------------------------------------------------------- 1 |
    2 | 7 | 12 | 17 | 22 | 27 | 32 |
    33 | -------------------------------------------------------------------------------- /app/src/components/registry/meter/ProgIndicator.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 40% 5 |
    6 | 11 |
    12 |
    13 | 18 |
    22 | 70% 23 |
    24 |
    25 |
    26 | -------------------------------------------------------------------------------- /app/src/components/registry/pagination/ActiveState.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/components/registry/pagination/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 31 |
    -------------------------------------------------------------------------------- /app/src/components/registry/pagination/WithIcon.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/components/registry/popover/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 6 | 12 |
    -------------------------------------------------------------------------------- /app/src/components/registry/popover/WithContent.astro: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /app/src/components/registry/popover/popoverCode.ts: -------------------------------------------------------------------------------- 1 | import type { ComponentCode } from "@/types/index"; 2 | 3 | export const popoverCode: ComponentCode = { 4 | 'popover/Default':{ 5 | lang:"html", 6 | name:"index.html", 7 | code:` 8 | 12 | ` 18 | }, 19 | 20 | } -------------------------------------------------------------------------------- /app/src/components/registry/progress/Default.astro: -------------------------------------------------------------------------------- 1 |
    2 | 4 | 6 | 8 | 10 |
    -------------------------------------------------------------------------------- /app/src/components/registry/progress/ProgressIndicator.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | 40% 5 |
    6 | 8 |
    9 |
    10 |
    11 | 40% 12 |
    13 | 15 |
    16 |
    -------------------------------------------------------------------------------- /app/src/components/registry/progress/ProgressSizes.astro: -------------------------------------------------------------------------------- 1 |
    2 | 4 | 6 | 8 | 10 | 12 | 14 |
    -------------------------------------------------------------------------------- /app/src/components/registry/progress/WithMessage.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 8 |
    9 | Installing ... 10 |
    11 |
    12 |
    13 | 18 |
    60%
    19 |
    20 |
    21 | 26 |
    29 | 37 | 41 | 42 |
    43 |
    44 |
    45 | 50 |
    53 | 59 | 63 | 64 |
    65 |
    66 |
    67 | -------------------------------------------------------------------------------- /app/src/components/vuejs/CopyBtnCode.vue: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /app/src/components/vuejs/CustomCodeBlock.vue: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /app/src/components/vuejs/NewsLetterForm.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /app/src/config/shikiconfig.ts: -------------------------------------------------------------------------------- 1 | import { createCssVariablesTheme } from 'shiki' 2 | 3 | export const cssVariables = createCssVariablesTheme({ 4 | variablePrefix: '--astro-code-', 5 | variableDefaults: {}, 6 | }) -------------------------------------------------------------------------------- /app/src/const/index.ts: -------------------------------------------------------------------------------- 1 | export const siteUrl = "import.meta.env.SITE" 2 | export const keywordsDef = "UnifyUI, Unify, Unify UI, Unify Components, UnoCSS, Uno CSS, Atomic UI, Atomic CSS, UnoCSS Components, Modern Components, Uno Components, UnoCSS Components" 3 | export const defaultOgImage = "/ui.png" 4 | export const defaultOgAlt = "UnifyUI : " 5 | 6 | export const site_domain = "siteUrl" 7 | 8 | export const twitterLink = 'https://twitter.com/johnkat_Mj' 9 | export const discordServer = 'https://discord.gg/6VN6zTPZAy' 10 | export const githubUrl = 'https://github.com/unoforge' 11 | export const repositoryUrl = "https://github.com/unoforge/unify-ui" 12 | export const repositoryUrlPreset = "https://github.com/unoforge/unify-preset" 13 | 14 | export const repoContentLocation = "https://github.com/unoforge/unify-ui/blob/main/app" 15 | export const orgUrl = "https://github.com/unoforge/" 16 | export const startDiscussion = "https://github.com/unoforge/unify-ui/discussions" 17 | export const startDiscussionPreset = "https://github.com/unoforge/unify-preset/discussions" 18 | export const contribUrl = 'https://github.com/unoforge/unify-ui/blob/main/CONTRIBUTING.MD' 19 | export const contribUrlPreset = 'https://github.com/unoforge/unify-preset/blob/main/CONTRIBUTING.MD' 20 | -------------------------------------------------------------------------------- /app/src/content.config.ts: -------------------------------------------------------------------------------- 1 | import { defineCollection, z } from 'astro:content'; 2 | import { glob, file } from 'astro/loaders'; // Not available with legacy API 3 | 4 | 5 | const linkSchema = z.array(z.record(z.string().trim())); 6 | 7 | const docSchema = z.object({ 8 | title: z.string(), 9 | description: z.string(), 10 | hideTableOfContent:z.boolean().optional(), 11 | links: linkSchema.optional() 12 | }) 13 | const documentation = defineCollection({ 14 | loader: glob({ pattern: "**/[^_]*.mdx", base: "./src/docs-content/documentation" }), 15 | schema: docSchema 16 | }) 17 | 18 | const preset = defineCollection({ 19 | loader: glob({ pattern: "**/[^_]*.mdx", base: "./src/docs-content/preset" }), 20 | schema: docSchema 21 | }) 22 | 23 | const components = defineCollection({ 24 | loader: glob({ pattern: "**/[^_]*.mdx", base: "./src/docs-content/components" }), 25 | schema: docSchema 26 | }) 27 | 28 | 29 | // export const collections = { 30 | // docs: docsCollection, 31 | // components:docsCollection, 32 | // preset:docsCollection 33 | // }; 34 | 35 | export const collections = { documentation, components, preset: preset }; 36 | -------------------------------------------------------------------------------- /app/src/data/index.ts: -------------------------------------------------------------------------------- 1 | export { sidebarItems } from "./docSidebar" 2 | 3 | -------------------------------------------------------------------------------- /app/src/docs-content/components/accordion.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: UnoCSS Accordion 3 | description: Display togglable accordion panels. 4 | links: 5 | - 'PresetUI' : /preset/utilities/common 6 | - 'Flexilla Accordion' : https://flexilla-docs.vercel.app/docs/accordion 7 | --- 8 | 9 | 10 | 11 | ## Example 12 | 13 | 14 | 15 | 16 | This component require JS. By default we're using our own Interactive Component Library [Flexilla](https://flexilla-docs.vercel.app/) 17 | 18 | 19 | 20 | ### Adding JS 21 | 22 | 23 | ```js 24 | import { Accordion } from "@flexilla/flexilla" 25 | Accordion.autoInit('[data-accordion]') 26 | ``` 27 | 28 | 29 | ## Variants 30 | 31 | ### Solid 32 | 33 | 34 | 35 | 36 | ### Outline 37 | 38 | 39 | 40 | ### Soft 41 | 42 | 43 | 44 | ### Subtle 45 | 46 | 47 | 48 | 49 | ### Link 50 | 51 | -------------------------------------------------------------------------------- /app/src/docs-content/components/alert.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Alert 3 | description: Displays a callout for user attention. 4 | --- 5 | 6 | ## Example 7 | 8 | Display a `callout` with icon and description. 9 | 10 | 11 | ## With Title 12 | 13 | 14 | 15 | ## Variants 16 | 17 | ### Soft 18 | 19 | 20 | 21 | ### Subtle 22 | 23 | 24 | 25 | 26 | ## Custom Examples 27 | 28 | ### With button 29 | 30 | -------------------------------------------------------------------------------- /app/src/docs-content/components/aspect-ratio.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Aspect Ratio 3 | description: Displays content within a desired ratio. 4 | --- 5 | 6 | ## Video/TV 7 | 8 | 9 | ```html 10 |
    11 | Image by Johnnathan Tshibangu 13 |
    14 | 15 | ``` 16 |
    17 | 18 | ## Square 19 | 20 | 21 | ```html 22 |
    23 | Image by Johnnathan Tshibangu 25 |
    26 | ``` 27 |
    28 | 29 | ## 35mm film 30 | 31 | 32 | ```html 33 |
    34 | aspect 35by Johnnathan Tshibangu 36 |
    37 | ``` 38 |
    39 | 40 | ## Standard TV/Monitor 41 | 42 | 43 | ```html 44 |
    45 | StandardTv,by Johnnathan Tshibangu 47 |
    48 | ``` 49 |
    50 | 51 | ## Ultrawide monitor 52 | 53 | 54 | ```html 55 |
    56 | UltraWide,by Johnnathan Tshibangu 58 |
    59 | ``` 60 |
    61 | -------------------------------------------------------------------------------- /app/src/docs-content/components/avatar.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Avatar 3 | description: An image element for representing the user. 4 | --- 5 | 6 | ## Size 7 | 8 | 9 | ```html 10 |
    11 | avatar xs 12 | avatar sm 13 | avatar md 14 | avatar lg 15 | avatar xl 16 |
    17 | ``` 18 |
    19 | 20 | ## PlaceHolder 21 | 22 | ### With Text 23 | 24 | 25 | ```html 26 |
    27 |
    JK
    28 |
    JK
    29 |
    JK
    30 |
    31 | ``` 32 |
    33 | 34 | ### With Icon 35 | 36 | 37 | ```html 38 |
    39 |
    40 | 41 |
    42 |
    43 | 44 |
    45 |
    46 | 47 |
    48 |
    49 | ``` 50 |
    51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/docs-content/components/card.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Card 3 | description: Cards provide a flexible and extensible content container with multiple variants and options. 4 | --- 5 | 6 | 7 | 8 | ## With Icon 9 | 10 | 11 | 12 | ## Examples 13 | 14 | ### Ecommerce 1 15 | 16 | 17 | 18 | ### Ecommerce 2 19 | 20 | 21 | 22 | ### Pricing Card 23 | 24 | -------------------------------------------------------------------------------- /app/src/docs-content/components/checkbox.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Checkbox 3 | description: A checkbox is an input control that allows a user to select one or more options from a number of choices. 4 | links: 5 | - 'PresetUI Form' : '/preset/form-input' 6 | - 'UnoCSS Preset Form' : '' 7 | --- 8 | 9 | 10 | ```html 11 |
    12 |
    13 | 14 | 15 |
    16 |
    17 | 18 | 19 |
    20 |
    21 | ``` 22 |
    -------------------------------------------------------------------------------- /app/src/docs-content/components/divider.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Divider 3 | description: Insert a horizontal rule or a thematic break to divide or separate sections. 4 | --- 5 | 6 | 7 | ## Default 8 | 9 | ```html 10 |
    11 |
    12 |
    13 |
    14 |
    15 |
    16 | ``` 17 |
    18 | 19 | ## With Label 20 | 21 | 22 | ```html 23 |
    24 |
    25 | Label Start 26 |
    27 |
    28 | Label Center 29 |
    30 |
    31 | Label Start 32 |
    33 |
    34 | Custom label 35 |
    36 |
    37 | ``` 38 |
    -------------------------------------------------------------------------------- /app/src/docs-content/components/dropdown.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dropdown 3 | description: A customizable menu that allows users to select an option from a list. 4 | --- 5 | 6 | ## Default 7 | 8 | -------------------------------------------------------------------------------- /app/src/docs-content/components/link.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Link 3 | description: Form Input 4 | --- 5 | 6 | 7 | 8 | ## Underline 9 | 10 | 11 | ```html 12 | 29 | ``` 30 | 31 | 32 | ## With icon 33 | 34 | 35 | ```html 36 | 56 | ``` 57 | 58 | 59 | ## Button Link 60 | 61 | 62 | ```html 63 | 72 | ``` 73 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/framework-guide/astrojs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install with ViteJS 3 | description: Use UnoCSS within your ViteJS project 4 | --- 5 | 6 | This guide will help you get started with UnifyUI, how to install and integrate it in your new or existing ViteJS project. 7 | 8 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/framework-guide/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Framework Guide 3 | description: Use UnifyUI + UnoCSS with your favorite framework 4 | --- 5 | 6 | This guide will help you how to use UnoCSS + UnifyUI, how to install and integrate it in your new or existing project! 7 | How to install dependencies and structure your app. 8 | 9 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/framework-guide/laravel.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install with Laravel 3 | description: Use UnoCSS within your Laravel project 4 | --- 5 | 6 | This guide will help you get started with UnifyUI, how to install and integrate it in your new or existing Laravel project. 7 | 8 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/framework-guide/static.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install In any Static Site 3 | description: Use UnoCSS within your Static Site 4 | --- 5 | 6 | This guide will help you get started with UnifyUI, how to install and integrate it in following projects 7 | - Symfony 8 | - Django 9 | - Static Site 10 | 11 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/framework-guide/vitejs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install with ViteJS 3 | description: Use UnoCSS within your ViteJS project 4 | --- 5 | 6 | This guide will help you get started with UnifyUI, how to install and integrate it in your new or existing ViteJS project. 7 | 8 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/installation.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: UnifyUI - Installation 3 | description: something 4 | --- 5 | 6 | ## Quick setup 7 | 8 | This guide will help you get started with UnifyUI 9 | 10 | ## Installation 11 | 12 | We need to have `UnoCSS` & `Preset UI` installed. 13 | 14 | 15 | 16 | ### Installation 17 | 18 | ```bash 19 | npm i -D unocss @unifydev/preset-ui 20 | ``` 21 | 22 | 23 | To learn more about installing UnoCSS and PresetUI, check [this guide](/preset/installation) 24 | 25 | 26 | ### Add interactivity 27 | 28 | If you're willing to use interactive component then make sure to have [Flexilla]() installed or the corresponding Flexilla Package 29 | 30 | 31 | ```bash 32 | npm i @flexilla/flexilla 33 | ``` 34 | 35 | 36 | To init all components 37 | 38 | 39 | ```ts 40 | import {initFlexilla} from "@flexilla/flexilla" 41 | 42 | initFlexilla() // This will init all interactive component for all element with data-fx-COmponentName attribute 43 | ``` 44 | 45 | 46 | 47 | 48 | 49 | ## Use a boiler Plate 50 | 51 | You can start even faster with our boilerplate : 52 | - [Vite HTML Starter]() 53 | - [AstroJS Boilerplate]() 54 | - [Laravel Blade]() 55 | - [Static Site]() 56 | -------------------------------------------------------------------------------- /app/src/docs-content/documentation/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unify-UI 3 | description: Rapidly build your website with modern look using UnoCss 4 | --- 5 | 6 | ## About UnifyUI 7 | 8 | UnifyUI is a collection of blocks and components designed to work seamlessly with UnoCSS. 9 | Designed to be attractive, functional, lightweight, flexible, and easy to use. 10 | Unify-UI's goal is to provide developers with the tools they need to create beautiful and engaging user interfaces with ease. 11 | 12 | 13 | UnifyUI is free and Open-source, every contribution is welcome. 14 | It still under development. 15 | 16 | 17 | ## Features 18 | - Fully responsive 19 | - Dark Mode Support 20 | - Customizable 21 | - Modern and accessible 22 | - Framework support 23 | - Efficient design 24 | 25 | 26 | 27 | ## Authors 28 | 29 | - [Johnkat Mj]() 30 | 31 | ## Credits 32 | 33 | - [UnoCSS](https://github.com/unocss/unocss) 34 | - [Flowbite]() 35 | - [Preline]() 36 | 37 | ## Quick Start 38 | 39 | 40 | 41 | Lorem ipsum dolor sit, amet consectetur adipisicing elit. 42 | 43 | 44 | Lorem ipsum dolor sit, amet consectetur adipisicing elit. 45 | 46 | 47 | Lorem ipsum dolor sit, amet consectetur adipisicing elit. 48 | 49 | 50 | Lorem ipsum dolor sit, amet consectetur adipisicing elit. 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/customization/configuration.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Configuration Guide for Preset UI 3 | description: Learn how to configure PresetUI to suit your project's needs. 4 | --- 5 | 6 | While presetUI's configuration mainly focused on CSS Variable, there's some optional configurations but not realy required 7 | 8 | ## Configuration 9 | 10 | 11 | ```js 12 | // uno.config.ts 13 | import { presetUI } from "@unifydev/preset-ui" 14 | 15 | export default defineConfig({ 16 | // ...config 17 | presets: [ 18 | // ...other presets 19 | presetUI({ 20 | prefixDataStateVariant?: string, 21 | components?: Components, 22 | baseVariants?: BaseVariants, 23 | colorFormat?: "rgb" | "hex" | "hsl" | "oklch" | "none", 24 | }) 25 | ], 26 | }); 27 | ``` 28 | 29 | 30 | ### colorFormat 31 | 32 | This option tells PresetUI what color format you’re using for your project. By default, it is set to hsl. However, you can change it to match your preferred format. 33 | 34 | Options: 35 | - hsl (default) 36 | - rgb 37 | - hex 38 | - oklch 39 | - none (use this if you have multiple color formats in your project) 40 | 41 | 42 | ```js 43 | ... 44 | colorFormat: "none" 45 | ... 46 | ``` 47 | 48 | 49 | ### prefixDataStateVariant 50 | 51 | This option allows you to customize the prefix for data-state variants. By default, it is set to fx-. 52 | 53 | - Default: fx- 54 | 55 | - Usage: All custom variants will start with the specified prefix 56 | 57 | Example 58 | 59 | 60 | ```html 61 | 62 | Active now 63 | 64 | ``` 65 | 66 | 67 | If you want to change the prefix, you can do so like this: 68 | 69 | 70 | ```js 71 | presetUI({ 72 | prefixDataStateVariant: 'custom-', // Now variants will start with `custom-` 73 | }) 74 | ``` 75 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/installation.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Preset Ui - Installation 3 | description: This guide will help you get started with PresetUI 4 | links: 5 | - UnoCSS: https://unocss.dev/ 6 | --- 7 | ## Installation 8 | ### Requirements 9 | Ensure that UnoCSS has been already installed in your project. If not, please follow the [Official UnoCSS installation guide](https://unocss.dev/integrations/vite). 10 | 11 | 12 | 13 | ### Install PresetUI 14 | 15 | ```bash 16 | npm i -D @unifydev/preset-ui 17 | ``` 18 | 19 | Note that PresetUI is a `dev dependency` 20 | 21 | 22 | 23 | ### Add the preset 24 | Inside your `uno.config.(js|ts)` file, import PresetUI and add it in preset List. 25 | 26 | ```js 27 | // import the packages 28 | import { presetUI } from "@unifydev/preset-ui" 29 | 30 | export default defineConfig({ 31 | // ...config 32 | presets: [ 33 | //other presets 34 | presetUI({ 35 | // your configuration here 36 | }) 37 | ], 38 | }); 39 | ``` 40 | 41 | 42 | 43 | 44 | Nice you can now use PresetUI in your project, test this : 45 | 46 | ```html 47 | 48 | badge md 49 | 50 | ``` 51 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/utilities/common.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shared Utilities 3 | description: Guide to shared component utilities in Preset UI 4 | --- 5 | 6 | Preset UI offers a range of utilities for various components such as accordion, alert, and badge. These components share similar configuration options, making it easy to manage and customize them collectively. 7 | 8 | ## Common Variants 9 | 10 | | ClassName | Description | Example | 11 | |-----------|-------------|---------| 12 | | `ui-variantName` | Apply variantName style to an Element | `ui-solid` | 13 | 14 | 15 | 16 | ## Common Sizes 17 | 18 | Availabele `xs`, `sm`, `md`, `lg`, `xl` 19 | 20 | 21 | ## Example 22 | 23 | 24 | ```html 25 | 26 | Message Here 27 | 28 |
    29 | A Solid UI Element Example with Gray 30 |
    31 | ``` 32 |
    33 | 34 | ## Configuration 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/utilities/display.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Preset Ui - Installation 3 | description: something 4 | --- 5 | 6 | ## -------------------------------------------------------------------------------- /app/src/docs-content/preset/utilities/form-input.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Form Input Utilities 3 | description: Utility classes to customize Form Input 4 | --- 5 | 6 | ## Form Input 7 | 8 | To use it just add `form-input` utility class to your input, this class contains base styles. 9 | 10 | ### Sizes 11 | 12 | The Input component supports the following sizes : `2xs`, `xs`, `sm`, `md`, `lg`, `xl` 13 | 14 | ### Customize style 15 | 16 | 17 | ```css 18 | --ui-input-focus-outline: your color ; /** When input focus */ 19 | --ui-input-place-holder: your color; /** placeholder text-color */ 20 | --ui-input-invalid-outline: your color; /** When input invalid and focus */ 21 | ``` 22 | 23 | 24 | ### Examples 25 | 26 | 27 | ```html 28 | 29 | ``` 30 | 31 | 32 | 33 | Using form input utilities require having [@julr/unocss-preset-forms](https://github.com/Julien-R44/unocss-preset-forms) Preset installed. 34 | 35 | 36 | 37 | ## Input Checkbox 38 | 39 | 40 | ```html 41 | 42 | 43 | 44 | ``` 45 | 46 | 47 | ### Style 48 | 49 | 50 | ```css 51 | --ui-checkbox-bg: your color ; 52 | --ui-checkbox-border: your color; 53 | --ui-ring-bg: your color; 54 | ``` 55 | 56 | 57 | ## Input Radio 58 | 59 | 60 | ```html 61 | 62 | 63 | 64 | ``` 65 | 66 | 67 | ### Style 68 | 69 | 70 | ```css 71 | --ui-radio-bg: color here; 72 | ``` 73 | 74 | 75 | ## Input Range 76 | 77 | 78 | ```html 79 | 80 | ``` 81 | 82 | 83 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/utilities/progressbar.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Progressbar utilities 3 | description: something 4 | --- 5 | 6 | ## Progressbar 7 | 8 | Easily customize the semantic `progressbar` element. 9 | 10 | 11 | 12 | ```html 13 | 14 | ``` 15 | 16 | 17 | - **Set base rules :** Simply add `progress-bar` 18 | - **Progressebar background** : add `progress-bar-bg-*` 19 | - `gray` : apply a background with gray color (light gray-200 and dark gray-900) 20 | - `light` : apply a background with gray color (light gray-100 and dark gray-900) 21 | - `high` : apply a background with gray color (light gray-200 and dark gray-800) 22 | - `higher` : apply a background with gray color (light gray-300 and dark gray-700) 23 | - **Progressbar Height** : add `progress-bar-sizeVariant` 24 | - `xs` 25 | - `sm` 26 | - `md` 27 | - `lg` 28 | - `xl` 29 | - `2xl` 30 | - `3xl` 31 | - **Corner radius** : add `progress-bar-rounded-*` 32 | - `sm` 33 | - `md` 34 | - `lg` 35 | - `xl` 36 | - `full` 37 | 38 | 39 | ## Meter 40 | 41 | -------------------------------------------------------------------------------- /app/src/docs-content/preset/utilities/switch.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Preset Ui - Variants 3 | description: something 4 | --- 5 | 6 | ## -------------------------------------------------------------------------------- /app/src/helpers/copy-to-clipboard.ts: -------------------------------------------------------------------------------- 1 | import { ref } from "vue" 2 | 3 | export const copyToClipboard = async ({ snippet, onCopy, onCopyCompleted, timeout = 1000 }: { snippet: HTMLElement | string | undefined | null, onCopy?: () => void, onCopyCompleted?: () => void, timeout?: number }) => { 4 | if (snippet instanceof HTMLElement || typeof snippet === 'string') { 5 | let valueToCopy = '' 6 | const timer = ref(null) 7 | const startTimeOut = (callback: () => void) => { 8 | timer.value = setTimeout(() => { 9 | callback() 10 | }, timeout) 11 | } 12 | 13 | const cancelTimeout = () => { 14 | timer.value && clearTimeout(timer.value) 15 | } 16 | if (typeof snippet === 'string') 17 | valueToCopy = snippet 18 | else 19 | valueToCopy = snippet.innerText 20 | 21 | onCopy && onCopy() 22 | await navigator.clipboard.writeText(valueToCopy) 23 | 24 | const onCompleted = () => { 25 | onCopyCompleted && onCopyCompleted() 26 | cancelTimeout() 27 | } 28 | if (onCopyCompleted) startTimeOut(onCompleted) 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/helpers/string-helper.ts: -------------------------------------------------------------------------------- 1 | 2 | export const splitSlugUrl = (value: string) => value.includes("/") ? value.split('/') : [value] 3 | 4 | -------------------------------------------------------------------------------- /app/src/layouts/Base.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { AstroFont } from "astro-font"; 3 | import "@assets/css/global.css"; 4 | import "@assets/css/find-ui.css"; 5 | import type { SeoType } from "../types"; 6 | import SEO from "@components/molecules/SEO.astro"; 7 | import ScriptTheme from "./ScriptTheme.astro"; 8 | import { ClientRouter } from "astro:transitions"; 9 | type Props = { 10 | seo: SeoType; 11 | }; 12 | 13 | const { seo } = Astro.props; 14 | --- 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 52 | 53 | 54 | 55 | 58 | 59 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/src/layouts/DocsLayout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import "@assets/css/scrollbar.css"; 3 | import "@assets/css/doc-styles.css"; 4 | import Sidebar from "@components/docs/base/Sidebar.astro"; 5 | import Base from "./Base.astro"; 6 | import DocNavbar from "@components/docs/ui/DocsNavbar.astro"; 7 | import type { MarkdownHeading } from "astro"; 8 | import type { SeoType } from "../types"; 9 | import { defaultOgImage, defaultOgAlt, keywordsDef } from "../const"; 10 | import DocsFooter from "@components/docs/ui/DocsFooter.astro"; 11 | import TopDocsNav from "@components/docs/base/TopDocsNav.astro"; 12 | 13 | type Props = { 14 | activeGroup: string; 15 | activeItem: string; 16 | description?: string; 17 | headings: MarkdownHeading[]; 18 | keywords?: string; 19 | title: string; 20 | hideTableOfContent?: boolean; 21 | ogImage?: { 22 | src: string; 23 | alt: string; 24 | }; 25 | }; 26 | 27 | const { activeGroup, activeItem } = Astro.props; 28 | 29 | const { title, keywords, ogImage, description, hideTableOfContent } = 30 | Astro.props; 31 | 32 | const seo: SeoType = { 33 | ogImage: { 34 | src: ogImage?.src || defaultOgImage, 35 | alt: ogImage?.alt || defaultOgAlt, 36 | }, 37 | keywords: `${keywordsDef} ${keywords ? `, ${keywords}` : ""}`, 38 | title: title, 39 | description: description 40 | ? description 41 | : "Easily add interactive Components to your App.", 42 | }; 43 | --- 44 | 45 | 46 | 47 |
    50 | 51 |
    52 | 53 |
    54 | 55 |
    56 | 57 |
    58 |
    59 | 60 | 73 | 74 | -------------------------------------------------------------------------------- /app/src/layouts/Layout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | type Props = { 3 | title: string; 4 | } 5 | 6 | const { title } = Astro.props; 7 | --- 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {title} 18 | 19 | 20 | 21 | 22 | 23 | 52 | -------------------------------------------------------------------------------- /app/src/layouts/ScriptTheme.astro: -------------------------------------------------------------------------------- 1 | 54 | -------------------------------------------------------------------------------- /app/src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { getCollection } from 'astro:content'; 3 | import Layout from '../layouts/Layout.astro'; 4 | 5 | 6 | const docs = await getCollection("documentation"); 7 | 8 | --- 9 | 10 | 11 |
    12 | {JSON.stringify(docs)} 13 |
    14 |
    15 | -------------------------------------------------------------------------------- /app/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type SeoType = { 2 | ogImage: { 3 | src: string; 4 | alt: string; 5 | }; 6 | keywords: string; 7 | title: string; 8 | description: string; 9 | }; 10 | 11 | export type SidebarItem = { 12 | title: string; 13 | path: string; 14 | description: string; 15 | keywords: string; 16 | state?: "updated" | "draft" | "new" | "none" | "wip" 17 | } 18 | type SidebarGroupItems = { 19 | label: string; 20 | items: SidebarItem[]; 21 | } 22 | 23 | export type SidebarGroupCat = { 24 | name: string; 25 | items: SidebarGroupItems[]; 26 | } 27 | 28 | export type CornerRadius = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "full" 29 | export type BtnSizeVariant = "xs" | "sm" | "md" | "lg" | "xl" | "icon-xs" | "icon-sm" | "icon-md" | "icon-lg" | "icon-xl" 30 | export type UiSize = "2xs" | "xs" | "sm" | "md" | "lg" | "xl" 31 | export type VariantIntent = "primary" | "secondary" | "accent" | "info" | "warning" | "success" | "danger" | "gray" | "neutral" 32 | export type UiVariant = "outline" | "soft" | "subtle" | "solid" 33 | export type SupportedLanguage = "html" | "css" | "js" | "ts" | "vue" 34 | export type ComponentCode = Record -------------------------------------------------------------------------------- /app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict", 3 | "include": [ 4 | ".astro/types.d.ts", 5 | "**/*" 6 | ], 7 | "compilerOptions": { 8 | "baseUrl": ".", 9 | "paths": { 10 | "@components/*": [ 11 | "src/components/*" 12 | ], 13 | "@layouts/*": [ 14 | "src/layouts/*" 15 | ], 16 | "@lib/*": [ 17 | "src/lib/*" 18 | ], 19 | "@/data/*": [ 20 | "src/data/*" 21 | ], 22 | "@assets/*": [ 23 | "src/assets/*" 24 | ], 25 | "@helper/*": [ 26 | "src/helpers/*" 27 | ], 28 | "@/types/*": [ 29 | "src/types/*" 30 | ], 31 | "@/const/*": [ 32 | "src/const/*" 33 | ] 34 | }, 35 | "allowJs": true, 36 | "jsx": "preserve" 37 | }, 38 | "exclude": [ 39 | "dist" 40 | ] 41 | } -------------------------------------------------------------------------------- /html/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /html/colors.css: -------------------------------------------------------------------------------- 1 | @import url(./ui-colors.css); 2 | @import url(./ui.css); 3 | 4 | :root { 5 | --bg: var(--c-white); 6 | --bg-lighter: var(--neutral-50); 7 | --bg-light: var(--neutral-100); 8 | --bg-high: var(--neutral-200); 9 | --bg-higher: var(--neutral-300); 10 | 11 | --fg: var(--neutral-700); 12 | --fg-subtext: var(--neutral-600); 13 | --fg-title: var(--neutral-900); 14 | --fg-subtitle: var(--neutral-800); 15 | --border: var(--neutral-200); 16 | 17 | --border-lighter: var(--neutral-50); 18 | --border-light: var(--neutral-200); 19 | --border-high: var(--neutral-300); 20 | --border-higher: var(--neutral-400); 21 | 22 | --ui-checkbox-bg: var(--bg); 23 | --ui-checkbox-border: var(--border-high); 24 | --ui-radio-bg: var(--bg); 25 | --ui-radio-border: var(--border-high); 26 | 27 | --switch-checked-thumb-primary: var(--primary-600) 28 | 29 | } 30 | 31 | .dark { 32 | /* Background colors */ 33 | --bg:var(--neutral-950); 34 | --bg-lighter: var(--neutral-900); 35 | --bg-light: var(--neutral-900); 36 | --bg-high: var(--neutral-800); 37 | --bg-higher: var(--neutral-700); 38 | 39 | /* Foreground colors */ 40 | --fg-text: var(--neutral-300); 41 | --fg-title: var(--c-white); 42 | --fg-subtitle: var(--neutral-200); 43 | --fg-subtext: var(--neutral-300); 44 | --fg-light: var(--neutral-400); 45 | 46 | /* Border colors */ 47 | --border: var(--neutral-900); 48 | --border-light: var(--neutral-800); 49 | --border-lighter: var(--neutral-900); 50 | --border-high: var(--neutral-700); 51 | --border-higher: var(--neutral-600); 52 | 53 | --ui-checkbox-border: var(--border-light); 54 | 55 | } -------------------------------------------------------------------------------- /html/components/accordion/js/script.js: -------------------------------------------------------------------------------- 1 | import { Accordion } from "@flexilla/accordion"; 2 | 3 | Accordion.autoInit("[data-accordion]") -------------------------------------------------------------------------------- /html/components/alert-dialog/alert.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/components/alert-dialog/alert.html -------------------------------------------------------------------------------- /html/components/alert-dialog/js/script.js: -------------------------------------------------------------------------------- 1 | import { Modal } from "@flexilla/modal"; 2 | import "@flexilla/modal/modal.css" 3 | 4 | // Initialize modals on elements with the 'data-alert-dialog' attribute. 5 | const modals = Array.from(document.querySelectorAll("[data-alert-dialog]")); 6 | for (const modal of modals) { 7 | new Modal(modal); 8 | } 9 | -------------------------------------------------------------------------------- /html/components/container/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 | 11 | 12 |
    13 |
    14 | 19 |
    20 |
    21 |
    22 |
    23 |

    24 | Container : Default 25 |

    26 |
    27 |
    28 |
    29 | 30 |
    31 |
    32 |
    33 |
    34 |
    35 |

    36 | Container : Max-w7xl 37 |

    38 |
    39 |
    40 |
    41 | 42 |
    43 |
    44 |
    45 |
    46 |
    47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /html/components/dropdown/js/script.js: -------------------------------------------------------------------------------- 1 | import { Dropdown } from "@flexilla/dropdown"; 2 | import "@flexilla/dropdown/dropdown.css"; 3 | 4 | const dropdowns = Array.from(document.querySelectorAll("[data-drop-down]")); 5 | for (const dropdown of dropdowns) { 6 | new Dropdown(dropdown); 7 | } 8 | -------------------------------------------------------------------------------- /html/components/popover/js/script.js: -------------------------------------------------------------------------------- 1 | import { Popover } from "@flexilla/popover"; 2 | 3 | 4 | Popover.autoInit("[data-popover]") 5 | -------------------------------------------------------------------------------- /html/components/range/js/script.js: -------------------------------------------------------------------------------- 1 | import { CustomRange } from "@flexilla/custom-range" 2 | 3 | const constumRanges = Array.from(document.querySelectorAll("[data-custom-range-wrapper]")) 4 | 5 | for (const customRange of constumRanges) { 6 | new CustomRange(customRange) 7 | } -------------------------------------------------------------------------------- /html/components/slideover/js/script.js: -------------------------------------------------------------------------------- 1 | import { OffCanvas } from "@flexilla/offcanvas"; 2 | 3 | const slideOvers = Array.from(document.querySelectorAll("[data-slideover]")); 4 | 5 | for (const slideover of slideOvers) { 6 | new OffCanvas(slideover); 7 | } 8 | -------------------------------------------------------------------------------- /html/components/tabs/js/script.js: -------------------------------------------------------------------------------- 1 | import { Tabs } from "@flexilla/flexilla"; 2 | 3 | Tabs.autoInit("[data-tabs]") 4 | -------------------------------------------------------------------------------- /html/components/text-area/js/script.js: -------------------------------------------------------------------------------- 1 | import { AutoResizeTextArea } from "@flexilla/auto-resize-area"; 2 | const resizableTextAreas = Array.from( 3 | document.querySelectorAll("textarea[data-autoresizable]") 4 | ); 5 | 6 | for (const resizableTextArea of resizableTextAreas) { 7 | new AutoResizeTextArea(resizableTextArea); 8 | } -------------------------------------------------------------------------------- /html/components/tooltip/js/script.js: -------------------------------------------------------------------------------- 1 | import { Tooltip } from "@flexilla/tooltip"; 2 | import "@flexilla/tooltip/tooltip.css" 3 | 4 | const tooltips = Array.from(document.querySelectorAll("[data-fx-tooltip]")); 5 | for (const tooltip of tooltips) { 6 | new Tooltip(tooltip); 7 | } 8 | -------------------------------------------------------------------------------- /html/js/app.js: -------------------------------------------------------------------------------- 1 | import { getThemePreference } from "./load.theme"; 2 | 3 | const themeSwitcher = () => { 4 | const switchTheme = document.querySelector("[data-switch-theme]"); 5 | 6 | const isDark = getThemePreference() === "dark"; 7 | document.documentElement.classList[isDark ? "add" : "remove"]("dark"); 8 | if (switchTheme) { 9 | switchTheme.addEventListener("click", (e) => { 10 | e.preventDefault(); 11 | const doc = document.documentElement; 12 | if (doc) { 13 | const isDarkTheme = getThemePreference() === "dark"; 14 | doc.classList[isDarkTheme ? "remove" : "add"]("dark"); 15 | localStorage.setItem("theme", isDarkTheme ? "light" : "dark"); 16 | } 17 | }); 18 | } 19 | }; 20 | 21 | themeSwitcher() -------------------------------------------------------------------------------- /html/js/load.theme.js: -------------------------------------------------------------------------------- 1 | export const getThemePreference = () => { 2 | const currentTheme = localStorage.getItem("theme"); 3 | if (localStorage !== undefined && currentTheme) { 4 | return currentTheme; 5 | } 6 | return window.matchMedia("(prefers-color-scheme: dark)").matches 7 | ? "dark" 8 | : "light"; 9 | }; 10 | const isDark = getThemePreference() === "dark"; 11 | document.documentElement.classList[isDark ? "add" : "remove"]("dark"); 12 | 13 | if (localStorage) { 14 | const observer = new MutationObserver(() => { 15 | const isDark = document.documentElement.classList.contains("dark"); 16 | localStorage.setItem("theme", isDark ? "dark" : "light"); 17 | }); 18 | observer.observe(document.documentElement, { 19 | attributes: true, 20 | attributeFilter: ["class"], 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /html/main.ts: -------------------------------------------------------------------------------- 1 | import '@unocss/reset/tailwind.css' 2 | import 'virtual:uno.css' 3 | import "./button.css" 4 | import './style.css' 5 | import "./colors.css" 6 | 7 | import "./js/app.js" -------------------------------------------------------------------------------- /html/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uno-ui", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "@iconify-json/carbon": "^1.2.5", 13 | "@iconify-json/ph": "^1.2.2", 14 | "@julr/unocss-preset-forms": "^0.1.0", 15 | "@unifydev/flexilla": "^0.0.0", 16 | "@unifydev/preset-ui": "^0.1.0", 17 | "typescript": "~5.6.2", 18 | "unocss": "^0.65.3", 19 | "unocss-preset-animations": "^1.1.0", 20 | "vite": "^6.0.5" 21 | }, 22 | "dependencies": { 23 | "@flexilla/flexilla": "^2.0.9" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /html/public/defaultavatar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/defaultavatar.webp -------------------------------------------------------------------------------- /html/public/images/baskets.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/baskets.webp -------------------------------------------------------------------------------- /html/public/images/baskets_2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/baskets_2.webp -------------------------------------------------------------------------------- /html/public/images/bottes-cuir.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/bottes-cuir.webp -------------------------------------------------------------------------------- /html/public/images/chaussures-cuir-marron.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/chaussures-cuir-marron.webp -------------------------------------------------------------------------------- /html/public/images/chaussures-talons-hauts.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/chaussures-talons-hauts.webp -------------------------------------------------------------------------------- /html/public/images/img1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/img1.webp -------------------------------------------------------------------------------- /html/public/images/img2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/img2.webp -------------------------------------------------------------------------------- /html/public/images/sports-shoe.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unoforge/unify-ui/c8a3a099c123378fcb406d7e692d21de8ac2bbd9/html/public/images/sports-shoe.webp -------------------------------------------------------------------------------- /html/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /html/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true, 21 | "noUncheckedSideEffectImports": true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /html/vite.config.ts: -------------------------------------------------------------------------------- 1 | import UnoCSS from 'unocss/vite' 2 | import { defineConfig } from 'vite' 3 | 4 | 5 | export default defineConfig({ 6 | plugins: [ 7 | UnoCSS(), 8 | ], 9 | }) --------------------------------------------------------------------------------