├── .changeset └── config.json ├── .editorconfig ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── 1-bug-report.yml │ ├── 2-feature-request.yml │ ├── 3-testimonial.yml │ ├── 99-new-chore.md │ └── config.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── ci-delabeler.yml │ ├── ci-first-contributor.yml │ ├── ci-pr-snapshot.yml │ ├── ci-push-main.yml │ └── co-author.yml ├── .gitignore ├── .node-version ├── .prototools ├── .vscode ├── extensions.json └── settings.json ├── .well-known └── funding-manifest-urls ├── LICENSE ├── README.md ├── assets ├── banner-readme.png ├── discord-emoji-dark.png ├── discord-emoji-light.png ├── logo-adaptive.svg ├── logo-dark.svg ├── logo-discord.png ├── logo-discord.svg ├── logo-light.svg ├── logo-outlined-adaptive.svg ├── logo-outlined-dark.svg ├── logo-outlined-light.svg ├── old │ ├── banner-readme.png │ ├── discord-emoji-dark.png │ ├── discord-emoji-light.png │ ├── logo-dark.svg │ ├── logo-discord.png │ ├── logo-discord.svg │ ├── logo-light.svg │ ├── studioCMS-dark.png │ ├── studioCMS.png │ └── studiocms-new-logos.zip ├── studioCMS.png ├── studiocms-dark.png └── studiocms-new-logos.zip ├── biome.json ├── build-scripts ├── cmd │ └── build.js ├── index.js ├── jsconfig.json └── package.json ├── docs ├── .gitignore ├── .vscode │ ├── extensions.json │ └── launch.json ├── README.md ├── astro.config.mts ├── ec.config.mjs ├── hostUtils.ts ├── lunaria.config.ts ├── lunaria │ ├── components.ts │ └── styles.ts ├── package.json ├── public │ ├── .well-known │ │ └── funding-manifest-urls │ ├── favicon-dark.png │ ├── favicon-light.png │ ├── favicon.svg │ ├── og.png │ └── socialproof │ │ ├── adam-matthiesen.jpg │ │ ├── louis-escher.jpg │ │ ├── matthew-justice-image.png │ │ ├── matthew-justice.jpg │ │ └── the-otterlord.png ├── scripts │ ├── changelog.ts │ ├── lib │ │ ├── changelogs.ts │ │ └── utils.ts │ ├── lunaria-report-bot.ts │ └── lunaria.mts ├── src │ ├── assets │ │ ├── astro.svg │ │ ├── avatar.png │ │ ├── bsky.svg │ │ ├── discord.svg │ │ ├── github.svg │ │ ├── logo-adaptive.svg │ │ ├── patreon.svg │ │ ├── swords.svg │ │ └── twitter.svg │ ├── components │ │ ├── ContributorList.astro │ │ ├── DropdownScript.astro │ │ ├── FacePile.astro │ │ ├── Gallery.astro │ │ ├── Integration.astro │ │ ├── ModalScript.astro │ │ ├── Newsletter.astro │ │ ├── PackageCatalog.astro │ │ ├── PreviewCard.astro │ │ ├── ProgressScript.astro │ │ ├── ReadMore.astro │ │ ├── Sponsors.astro │ │ ├── ThemeHelperScript.astro │ │ ├── ToasterScript.astro │ │ ├── TursoCLI.astro │ │ ├── Version.astro │ │ ├── Youtube.astro │ │ ├── fluid-grid.astro │ │ ├── icons │ │ │ └── GitHubIcon.astro │ │ ├── landing │ │ │ ├── DropdownExample.astro │ │ │ ├── EcosystemSection.astro │ │ │ ├── FormExample.astro │ │ │ ├── HeroSection.astro │ │ │ ├── ModalExample.astro │ │ │ ├── PageHeader.astro │ │ │ ├── ShowcaseSection.astro │ │ │ ├── SocialProofCard.astro │ │ │ ├── SocialProofSection.astro │ │ │ └── styles.css │ │ ├── media-card.astro │ │ ├── showcase-card.astro │ │ └── showcase-sites.astro │ ├── content.config.ts │ ├── content │ │ ├── docs │ │ │ └── docs │ │ │ │ ├── changelog.md │ │ │ │ ├── components │ │ │ │ ├── Sidebar.mdx │ │ │ │ ├── accordion.mdx │ │ │ │ ├── badge.mdx │ │ │ │ ├── breadcrumbs.mdx │ │ │ │ ├── button.mdx │ │ │ │ ├── card.mdx │ │ │ │ ├── center.mdx │ │ │ │ ├── checkbox.mdx │ │ │ │ ├── divider.mdx │ │ │ │ ├── dropdown.mdx │ │ │ │ ├── footer.mdx │ │ │ │ ├── group.mdx │ │ │ │ ├── input.mdx │ │ │ │ ├── modal.mdx │ │ │ │ ├── progress.mdx │ │ │ │ ├── radio-group.mdx │ │ │ │ ├── row.mdx │ │ │ │ ├── select-searchable.mdx │ │ │ │ ├── select.mdx │ │ │ │ ├── tabs.mdx │ │ │ │ ├── textarea.mdx │ │ │ │ ├── theme-toggle.mdx │ │ │ │ ├── toast.mdx │ │ │ │ ├── toggle.mdx │ │ │ │ └── user.mdx │ │ │ │ ├── guides │ │ │ │ └── customization.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── showcase.mdx │ │ │ │ ├── upgrade-guides │ │ │ │ ├── 0.1.0-to-0.3.0.mdx │ │ │ │ └── 0.3-to-0.4.mdx │ │ │ │ └── utilities │ │ │ │ └── theme-helper.mdx │ │ ├── i18n │ │ │ └── en.json │ │ ├── showcase.json │ │ └── socialproof │ │ │ ├── adam-matthiesen.json │ │ │ ├── louis-escher.json │ │ │ └── matthew-justice.json │ ├── env.d.ts │ ├── pages │ │ └── index.astro │ ├── plugins │ │ ├── rehype.types.ts │ │ ├── rehypeAutolink.ts │ │ ├── rehypeExternalLinks.ts │ │ └── rehypePluginKit.ts │ ├── share-link.ts │ ├── starlightOverrides │ │ ├── Head.astro │ │ ├── Header.astro │ │ ├── PageTitle.astro │ │ ├── Sidebar.astro │ │ └── SiteTitle.astro │ ├── styles │ │ ├── sponsorcolors.css │ │ └── starlight.css │ ├── util-server.ts │ └── util │ │ ├── SponsorLink.astro │ │ ├── contributors.config.ts │ │ ├── getContributors.ts │ │ └── thum.io.ts ├── starlight-types.ts ├── starlight-virtual.d.ts └── tsconfig.json ├── package.json ├── packages └── studiocms_ui │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── env.d.ts │ ├── package.json │ ├── src │ ├── components │ │ ├── Accordion │ │ │ ├── Accordion.astro │ │ │ ├── Item.astro │ │ │ ├── accordion.css │ │ │ └── accordion.ts │ │ ├── Badge │ │ │ ├── Badge.astro │ │ │ └── badge.css │ │ ├── Breadcrumbs │ │ │ ├── Breadcrumbs.astro │ │ │ └── breadcrumbs.css │ │ ├── Button │ │ │ ├── Button.astro │ │ │ └── button.css │ │ ├── Card │ │ │ ├── Card.astro │ │ │ └── card.css │ │ ├── Center │ │ │ ├── Center.astro │ │ │ └── center.css │ │ ├── Checkbox │ │ │ ├── Checkbox.astro │ │ │ ├── checkbox.css │ │ │ └── checkbox.ts │ │ ├── Divider │ │ │ ├── Divider.astro │ │ │ └── divider.css │ │ ├── Dropdown │ │ │ ├── Dropdown.astro │ │ │ ├── dropdown.css │ │ │ └── dropdown.ts │ │ ├── Footer │ │ │ ├── Footer.astro │ │ │ └── footer.css │ │ ├── Group │ │ │ ├── Group.astro │ │ │ └── group.css │ │ ├── Icon │ │ │ ├── Icon.astro │ │ │ ├── IconBase.astro │ │ │ └── iconType.ts │ │ ├── Input │ │ │ ├── Input.astro │ │ │ └── input.css │ │ ├── Modal │ │ │ ├── Modal.astro │ │ │ ├── modal.css │ │ │ └── modal.ts │ │ ├── Progress │ │ │ ├── Progress.astro │ │ │ ├── helper.ts │ │ │ ├── progress.css │ │ │ └── progress.ts │ │ ├── RadioGroup │ │ │ ├── RadioGroup.astro │ │ │ ├── radiogroup.css │ │ │ └── radiogroup.ts │ │ ├── Row │ │ │ ├── Row.astro │ │ │ └── row.css │ │ ├── SearchSelect │ │ │ ├── SearchSelect.astro │ │ │ ├── searchselect.css │ │ │ └── searchselect.ts │ │ ├── Select │ │ │ ├── Select.astro │ │ │ ├── select.css │ │ │ └── select.ts │ │ ├── Sidebar │ │ │ ├── Double.astro │ │ │ ├── Single.astro │ │ │ └── helpers.ts │ │ ├── Tabs │ │ │ ├── TabItem.astro │ │ │ ├── Tabs.astro │ │ │ ├── tabs.css │ │ │ └── tabs.ts │ │ ├── Textarea │ │ │ ├── Textarea.astro │ │ │ └── textarea.css │ │ ├── ThemeToggle │ │ │ ├── ThemeToggle.astro │ │ │ ├── themetoggle.css │ │ │ └── themetoggle.ts │ │ ├── Toast │ │ │ ├── Toaster.astro │ │ │ ├── toast.ts │ │ │ ├── toaster.css │ │ │ └── toaster.ts │ │ ├── Toggle │ │ │ ├── Toggle.astro │ │ │ ├── toggle.css │ │ │ └── toggle.ts │ │ └── User │ │ │ ├── User.astro │ │ │ └── user.css │ ├── css │ │ ├── colors.css │ │ ├── global.css │ │ ├── radii.css │ │ └── resets.css │ ├── icons │ │ ├── Checkmark.astro │ │ ├── ChevronUpDown.astro │ │ ├── User.astro │ │ └── X-Mark.astro │ ├── index.ts │ ├── toolbar │ │ ├── ColorPicker.ts │ │ ├── icon.ts │ │ └── index.ts │ ├── types │ │ └── index.ts │ └── utils │ │ ├── ThemeHelper.ts │ │ ├── colors.ts │ │ ├── generateID.ts │ │ ├── headers.ts │ │ ├── iconStrings.ts │ │ ├── iconifyUtils.ts │ │ └── integration-utils.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts └── filter-warnings.cjs └── tsconfig.base.json /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", 3 | "changelog": ["@changesets/changelog-github", { "repo": "withstudiocms/ui" }], 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": ["docs", "build-scripts"] 11 | } 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Unix-style newlines with a newline ending every file 2 | [*] 3 | end_of_line = lf 4 | insert_final_newline = true -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @withstudiocms/exalted @louisescher 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/1-bug-report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report. 3 | title: "[Bug]: " 4 | labels: ["bug"] 5 | type: "Bug" 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | Thanks for taking the time to fill out this bug report! 11 | - type: textarea 12 | id: what-happened 13 | attributes: 14 | label: What happened? 15 | description: Also tell us, what did you expect to happen? 16 | placeholder: Tell us what you see! 17 | value: "A bug happened!" 18 | validations: 19 | required: true 20 | - type: dropdown 21 | id: package 22 | attributes: 23 | label: Package 24 | description: Which package is the bug report for? 25 | options: 26 | - '@studiocms/ui' 27 | default: 0 28 | validations: 29 | required: true 30 | - type: input 31 | id: version 32 | attributes: 33 | label: Version 34 | description: What version are you running? 35 | placeholder: 0.1.0 36 | validations: 37 | required: true 38 | - type: dropdown 39 | id: browsers 40 | attributes: 41 | label: What browsers are you seeing the problem on? 42 | multiple: true 43 | options: 44 | - Firefox 45 | - Chrome 46 | - Safari 47 | - Microsoft Edge 48 | - type: textarea 49 | id: logs 50 | attributes: 51 | label: Relevant log output 52 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. 53 | render: shell 54 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/2-feature-request.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: Suggest an idea/feature for @studiocms/ui 3 | title: '[Feature Request]: ' 4 | labels: 5 | - feat 6 | type: 'Feature' 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for proposing a new feature for `@studiocms/ui`! 12 | - type: textarea 13 | id: idea 14 | attributes: 15 | label: Describe your feature request 16 | description: Try to give as much detail as possible. 17 | placeholder: Tell us what you want! 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: examples 22 | attributes: 23 | label: Other examples? 24 | description: Has there been something similar made elsewhere? 25 | placeholder: If not just respond no 26 | validations: 27 | required: true 28 | - type: textarea 29 | id: additional-context 30 | attributes: 31 | label: Additional context 32 | description: Add any other context or screenshots about the plugin request here. 33 | validations: 34 | required: false 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/3-testimonial.yml: -------------------------------------------------------------------------------- 1 | name: Testimonial 2 | description: Share your experience with StudioCMS/UI 3 | title: "[Testimonial]:
{description}
44 | 45 |
--------------------------------------------------------------------------------
/docs/src/components/Version.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { cachedFetch } from '../util-server';
3 |
4 | export interface Props {
5 | pkgName: string;
6 | }
7 |
8 | const { pkgName } = Astro.props as Props;
9 |
10 | const url = `https://registry.npmjs.org/${pkgName}/latest`;
11 |
12 | const response = await cachedFetch(url);
13 | const json = await response.json();
14 |
15 | if (!response.ok) {
16 | throw new Error(
17 | `npm API call failed: GET "${url}" returned status ${response.status}: ${JSON.stringify(json)}`
18 | );
19 | }
20 | ---
21 |
22 | v{json.version}
23 |
24 |
--------------------------------------------------------------------------------
/docs/src/components/fluid-grid.astro:
--------------------------------------------------------------------------------
1 | ---
2 | interface Props {
3 | minColumnWidth?: string;
4 | }
5 | const { minColumnWidth } = Astro.props;
6 | ---
7 |
8 | 11 | Are you sure you want to remove React from your project? 12 | Just imagine how much harder your life could be with it! 13 |
14 |{title}
28 |No sites on the showcase yet! Start using @studiocms/ui
and add your site today!