├── .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 | [](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
8 | [](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
9 | [](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
10 |
11 | > 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
12 |
13 | 
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 |
21 |
22 | {
23 | colors.map(color => (
24 |
25 | ))
26 | }
27 |
28 |
29 | {label}
30 |
31 |
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 |
30 |
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 |
25 |
30 | {breadcrumbsMain.text}
31 |
32 |
33 |
34 | {
35 | words.map((word, index) => (
36 |
45 | {word}
46 | {index === words.length - 1 ? null : (
47 |
48 | )}
49 |
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 |
19 | )
20 | }
21 |
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 |
24 |
25 |
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 |
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 |
22 |
23 |
24 | {
25 | !hideTableOfContent ? (
26 |
32 | On this page
33 |
37 |
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 |
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 |
38 |
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 |
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 |
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:
19 | }
20 |
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 |
23 | {
24 | values.map((value) => (
25 |
26 |
35 | {value}
36 |
37 |
38 | ))
39 | }
40 |
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 |
25 |
--------------------------------------------------------------------------------
/app/src/components/docs/mdx-components/Table.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
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 |
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 |
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 |
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 |
41 | )}
42 |
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 |
31 |
32 | {grouppedHeadings.map((h) => )}
33 |
34 |
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 |
26 |
30 | {sub.text}
31 |
32 |
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 |
5 | Is it accessible?
6 |
8 |
9 |
10 |
11 | Yes. It adheres to the WAI-ARIA design pattern.
12 |
13 |
14 |
15 |
16 |
18 | Is it unstyled?
19 |
21 |
22 |
23 |
24 | Yes. It's unstyled by default, giving you freedom over the look and feel.
25 |
26 |
27 |
28 |
29 |
31 | Can it be animated?
32 |
34 |
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 |
5 | Is it accessible?
6 |
8 |
9 |
10 |
11 | Yes. It adheres to the WAI-ARIA design pattern.
12 |
13 |
14 |
15 |
16 |
18 | Is it unstyled?
19 |
21 |
22 |
23 |
24 | Yes. It's unstyled by default, giving you freedom over the look and feel.
25 |
26 |
27 |
28 |
29 |
31 | Can it be animated?
32 |
34 |
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 |
5 | Is it accessible?
6 |
8 |
9 |
10 |
11 | Yes. It adheres to the WAI-ARIA design pattern.
12 |
13 |
14 |
15 |
16 |
18 | Is it unstyled?
19 |
21 |
22 |
23 |
24 | Yes. It's unstyled by default, giving you freedom over the look and feel.
25 |
26 |
27 |
28 |
29 |
31 | Can it be animated?
32 |
34 |
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 |
6 | Is it accessible?
7 |
9 |
10 |
11 |
12 | Yes. It adheres to the WAI-ARIA design pattern.
13 |
14 |
15 |
16 |
18 |
20 | Is it unstyled?
21 |
23 |
24 |
25 |
26 | Yes. It's unstyled by default, giving you freedom over the look and feel.
27 |
28 |
29 |
30 |
32 |
34 | Can it be animated?
35 |
37 |
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 |
5 | Is it accessible?
6 |
8 |
9 |
10 |
11 | Yes. It adheres to the WAI-ARIA design pattern.
12 |
13 |
14 |
15 |
16 |
18 | Is it unstyled?
19 |
21 |
22 |
23 |
24 | Yes. It's unstyled by default, giving you freedom over the look and feel.
25 |
26 |
27 |
28 |
29 |
31 | Can it be animated?
32 |
34 |
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 |
6 | Is it accessible?
7 |
9 |
10 |
11 |
12 | Yes. It adheres to the WAI-ARIA design pattern.
13 |
14 |
15 |
16 |
18 |
20 | Is it unstyled?
21 |
23 |
24 |
25 |
26 | Yes. It's unstyled by default, giving you freedom over the look and feel.
27 |
28 |
29 |
30 |
32 |
34 | Can it be animated?
35 |
37 |
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 |
12 | View the Data
13 |
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 |
4 |
--------------------------------------------------------------------------------
/app/src/components/registry/aspect-ratio/Square.astro:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/app/src/components/registry/aspect-ratio/StandardTV.astro:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/app/src/components/registry/aspect-ratio/UltrawideMonitor.astro:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/app/src/components/registry/aspect-ratio/Video-TV.astro:
--------------------------------------------------------------------------------
1 |
2 |
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 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/app/src/components/registry/button/Default.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Button from "./Button.astro";
3 | ---
4 |
5 |
6 | Click Me
7 |
--------------------------------------------------------------------------------
/app/src/components/registry/button/IconSizes.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Button from "./Button.astro";
3 | ---
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/components/registry/button/Sizes.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Button from "./Button.astro";
3 | ---
4 |
5 |
6 | Click me
7 |
8 |
9 | Click me
10 |
11 |
12 | Click me
13 |
14 |
15 | Click me
16 |
17 |
18 | Click me
19 |
20 |
--------------------------------------------------------------------------------
/app/src/components/registry/button/WithIcon.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Button from "./Button.astro";
3 | ---
4 |
5 |
6 |
10 |
11 | leading
12 |
13 |
17 | trailing
18 |
19 |
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 |
13 |
14 |
15 |
16 |
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 |
10 |
11 |
12 |
13 | Air Nike
14 |
15 | 12$
16 |
17 |
18 |
19 | Colored
20 |
21 |
23 | Add to card
24 |
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 |
4 | User Setting
5 |
6 |
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 |
11 | User Setting
12 |
13 |
14 | `
31 | },
32 | }
--------------------------------------------------------------------------------
/app/src/components/registry/input/Default.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/components/registry/input/Leading.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/components/registry/input/Trailing.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/components/registry/input/WithLabel.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
12 |
13 |
18 |
22 | 70%
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/components/registry/pagination/ActiveState.astro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 1
11 |
12 |
13 |
14 |
15 | 2
16 |
17 |
18 |
19 |
20 | 3
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/components/registry/pagination/Default.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/components/registry/pagination/WithIcon.astro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Prev
7 |
8 |
9 |
10 |
11 | 1
12 |
13 |
14 |
15 |
16 | 2
17 |
18 |
19 |
20 |
21 | 3
22 |
23 |
24 |
25 |
26 | Next
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/src/components/registry/popover/Default.astro:
--------------------------------------------------------------------------------
1 |
2 |
4 | Show Content
5 |
6 |
12 |
--------------------------------------------------------------------------------
/app/src/components/registry/popover/WithContent.astro:
--------------------------------------------------------------------------------
1 |
3 |
5 |
6 |
Johnkat MJ
7 | FrontEnd Designer
8 |
9 |
10 |
12 |
13 |
14 |
John Doe
15 |
12k followers
16 |
17 |
19 | Follow
20 |
21 |
--------------------------------------------------------------------------------
/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 |
10 | Show Content
11 |
12 | `
18 | },
19 |
20 | }
--------------------------------------------------------------------------------
/app/src/components/registry/progress/Default.astro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/components/registry/progress/ProgressIndicator.astro:
--------------------------------------------------------------------------------
1 |
2 |
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 |
20 |
44 |
66 |
67 |
--------------------------------------------------------------------------------
/app/src/components/vuejs/CopyBtnCode.vue:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 |
31 |
32 |
34 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/components/vuejs/CustomCodeBlock.vue:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/components/vuejs/NewsLetterForm.vue:
--------------------------------------------------------------------------------
1 |
19 |
20 |
40 |
--------------------------------------------------------------------------------
/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 |
13 |
14 |
15 | ```
16 |
17 |
18 | ## Square
19 |
20 |
21 | ```html
22 |
23 |
25 |
26 | ```
27 |
28 |
29 | ## 35mm film
30 |
31 |
32 | ```html
33 |
34 |
36 |
37 | ```
38 |
39 |
40 | ## Standard TV/Monitor
41 |
42 |
43 | ```html
44 |
45 |
47 |
48 | ```
49 |
50 |
51 | ## Ultrawide monitor
52 |
53 |
54 | ```html
55 |
56 |
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 |
12 |
13 |
14 |
15 |
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 |
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 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Container : Default
25 |
26 |
33 |
34 |
35 |
36 | Container : Max-w7xl
37 |
38 |
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 | })
--------------------------------------------------------------------------------