[data-slot=section]+[data-slot=section]]:mt-8'
- )}
- />
- )
-}
-
-export function SidebarFooter({ className, ...props }) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarSection({ className, ...props }) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function SidebarDivider({ className, ...props }) {
- return
-}
-
-export function SidebarSpacer({ className, ...props }) {
- return
-}
-
-export function SidebarHeading({ className, ...props }) {
- return (
-
- )
-}
-
-export const SidebarItem = forwardRef(function SidebarItem(
- { current, className, children, ...props },
-
- ref
-) {
- let classes = clsx(
- // Base
- 'flex w-full items-center gap-3 rounded-lg px-2 py-2.5 text-left text-base/6 font-medium text-zinc-950 sm:py-2 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:last:data-[slot=icon]:ml-auto *:last:data-[slot=icon]:size-5 sm:*:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Current
- 'data-current:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',
- 'dark:data-current:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function SidebarLabel({ className, ...props }) {
- return
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/components/stacked-layout.jsx b/catalyst-ui-kit/demo/javascript/src/components/stacked-layout.jsx
deleted file mode 100644
index a8984dcb..00000000
--- a/catalyst-ui-kit/demo/javascript/src/components/stacked-layout.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function StackedLayout({ navbar, sidebar, children }) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/components/switch.jsx b/catalyst-ui-kit/demo/javascript/src/components/switch.jsx
deleted file mode 100644
index 10ca4ac6..00000000
--- a/catalyst-ui-kit/demo/javascript/src/components/switch.jsx
+++ /dev/null
@@ -1,182 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function SwitchGroup({ className, ...props }) {
- return (
-
- )
-}
-
-export function SwitchField({ className, ...props }) {
- return (
-
- )
-}
-
-const colors = {
- 'dark/zinc': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-zinc-700)]/90',
- ],
- 'dark/white': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-zinc-900)]',
- ],
- dark: [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:var(--color-white)]/15',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]',
- ],
- zinc: [
- '[--switch-bg-ring:var(--color-zinc-700)]/90 [--switch-bg:var(--color-zinc-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-zinc-700)]/90',
- ],
- white: [
- '[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-zinc-950)]',
- ],
- red: [
- '[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20',
- ],
- orange: [
- '[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20',
- ],
- amber: [
- '[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]',
- ],
- yellow: [
- '[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]',
- ],
- lime: [
- '[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]',
- ],
- green: [
- '[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20',
- ],
- emerald: [
- '[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20',
- ],
- teal: [
- '[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20',
- ],
- cyan: [
- '[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]',
- ],
- sky: [
- '[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20',
- ],
- blue: [
- '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20',
- ],
- indigo: [
- '[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20',
- ],
- violet: [
- '[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20',
- ],
- purple: [
- '[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20',
- ],
- fuchsia: [
- '[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20',
- ],
- pink: [
- '[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20',
- ],
- rose: [
- '[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20',
- ],
-}
-
-export function Switch({ color = 'dark/zinc', className, ...props }) {
- return (
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/components/table.jsx b/catalyst-ui-kit/demo/javascript/src/components/table.jsx
deleted file mode 100644
index 07300ed1..00000000
--- a/catalyst-ui-kit/demo/javascript/src/components/table.jsx
+++ /dev/null
@@ -1,109 +0,0 @@
-'use client'
-
-import clsx from 'clsx'
-import { createContext, useContext, useState } from 'react'
-import { Link } from './link'
-
-const TableContext = createContext({
- bleed: false,
- dense: false,
- grid: false,
- striped: false,
-})
-
-export function Table({ bleed = false, dense = false, grid = false, striped = false, className, children, ...props }) {
- return (
-
-
-
- )
-}
-
-export function TableHead({ className, ...props }) {
- return
-}
-
-export function TableBody(props) {
- return
-}
-
-const TableRowContext = createContext({
- href: undefined,
- target: undefined,
- title: undefined,
-})
-
-export function TableRow({ href, target, title, className, ...props }) {
- let { striped } = useContext(TableContext)
-
- return (
-
-
-
- )
-}
-
-export function TableHeader({ className, ...props }) {
- let { bleed, grid } = useContext(TableContext)
-
- return (
-
- )
-}
-
-export function TableCell({ className, children, ...props }) {
- let { bleed, dense, grid, striped } = useContext(TableContext)
- let { href, target, title } = useContext(TableRowContext)
- let [cellRef, setCellRef] = useState(null)
-
- return (
-
- {href && (
-
- )}
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/components/text.jsx b/catalyst-ui-kit/demo/javascript/src/components/text.jsx
deleted file mode 100644
index 402801bc..00000000
--- a/catalyst-ui-kit/demo/javascript/src/components/text.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import clsx from 'clsx'
-import { Link } from './link'
-
-export function Text({ className, ...props }) {
- return (
-
- )
-}
-
-export function TextLink({ className, ...props }) {
- return (
-
- )
-}
-
-export function Strong({ className, ...props }) {
- return
-}
-
-export function Code({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/components/textarea.jsx b/catalyst-ui-kit/demo/javascript/src/components/textarea.jsx
deleted file mode 100644
index c368edef..00000000
--- a/catalyst-ui-kit/demo/javascript/src/components/textarea.jsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { forwardRef } from 'react'
-
-export const Textarea = forwardRef(function Textarea({ className, resizable = true, ...props }, ref) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/javascript/src/data.js b/catalyst-ui-kit/demo/javascript/src/data.js
deleted file mode 100644
index 995cc01e..00000000
--- a/catalyst-ui-kit/demo/javascript/src/data.js
+++ /dev/null
@@ -1,932 +0,0 @@
-export async function getOrder(id) {
- return (await getOrders()).find((order) => order.id.toString() === id)
-}
-
-export async function getRecentOrders() {
- return (await getOrders()).slice(0, 10)
-}
-
-export async function getOrders() {
- return [
- {
- id: 3000,
- url: '/orders/3000',
- date: 'May 9, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_2HLf8DfYJ0Db7asfCC5T546TY',
- card: {
- number: '1254',
- type: 'American Express',
- expiry: '01 / 2025',
- },
- },
- customer: {
- name: 'Leslie Alexander',
- email: 'leslie.alexander@example.com',
- address: '123 Main St. Toronto, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3001,
- url: '/orders/3001',
- date: 'May 5, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_1KLf7AsYJ0Dda7fs3CC5d46TY',
- card: {
- number: '3897',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Michael Foster',
- email: 'michael.foster@example.com',
- address: '357 Bridge St. New York, NY',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3002,
- url: '/orders/3002',
- date: 'Apr 28, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_2DLf5AsYJ0Ddb7fs3CC5d46TY',
- card: {
- number: '7421',
- type: 'Mastercard',
- expiry: '12 / 2026',
- },
- },
- customer: {
- name: 'Dries Vincent',
- email: 'dries.vincent@example.com',
- address: '456 Elm St. Vancouver, BC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3003,
- url: '/orders/3003',
- date: 'Apr 23, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_3KLf6DfYJ0Db7fassCC546TY',
- card: {
- number: '5683',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Lindsay Walton',
- email: 'lindsay.walton@example.com',
- address: '789 Oak St. Montreal, QC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3004,
- url: '/orders/3004',
- date: 'Apr 18, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_4HLf7DfYJ0Db78fas3C5d6TY',
- card: {
- number: '9576',
- type: 'Visa',
- expiry: '01 / 2025',
- },
- },
- customer: {
- name: 'Courtney Henry',
- email: 'courtney.henry@example.com',
- address: '321 Pine St. Calgary, AB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3005,
- url: '/orders/3005',
- date: 'Apr 14, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_5HLf8DfYJ0Ddb78fas3CC5TY',
- card: {
- number: '2310',
- type: 'Visa',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Tom Cook',
- email: 'tom.cook@example.com',
- address: '741 Lake St. Miami, FL',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3006,
- url: '/orders/3006',
- date: 'Apr 10, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_6KLf9DfYJ0Db7asf3CC54dTY',
- card: {
- number: '6942',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Whitney Francis',
- email: 'whitney.francis@example.com',
- address: '654 Maple St. Ottawa, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3007,
- url: '/orders/3007',
- date: 'Apr 6, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_7KLf6DfYJ0Ddb78fs3C5d6TY',
- card: {
- number: '8473',
- type: 'Visa',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Leonard Krasner',
- email: 'leonard.krasner@example.com',
- address: '987 Birch St. Winnipeg, MB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3008,
- url: '/orders/3008',
- date: 'Apr 3, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_8HLf5AsYJ0Db78fassCC5d6TY',
- card: {
- number: '5061',
- type: 'Visa',
- expiry: '11 / 2026',
- },
- },
- customer: {
- name: 'Floyd Miles',
- email: 'floyd.miles@example.com',
- address: '147 Cedar St. Quebec City, QC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3009,
- url: '/orders/3009',
- date: 'Mar 29, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_9KLf7DfYJ0Ddb78fas3C5dTY',
- card: {
- number: '3129',
- type: 'American Express',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Emily Selman',
- email: 'emily.selman@example.com',
- address: '258 Willow St. Halifax, NS',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3010,
- url: '/orders/3010',
- date: 'Mar 25, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_1KLf8DfYJ0Db78fas3CC54TY',
- card: {
- number: '6498',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Kristin Watson',
- email: 'kristin.watson@example.com',
- address: '369 Spruce St. Edmonton, AB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3011,
- url: '/orders/3011',
- date: 'Mar 21, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_2KLf9DfYJ0Db78fas3CC546Y',
- card: {
- number: '1732',
- type: 'American Express',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Emma Dorsey',
- email: 'emma.dorsey@example.com',
- address: '159 Park St. Chicago, IL',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3012,
- url: '/orders/3012',
- date: 'Mar 16, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_3HLf6DfYJ0Db7afs3CC54dTY',
- card: {
- number: '8256',
- type: 'Visa',
- expiry: '01 / 2024',
- },
- },
- customer: {
- name: 'Alicia Bell',
- email: 'alicia.bell@example.com',
- address: '741 Laurel St. Regina, SK',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3013,
- url: '/orders/3013',
- date: 'Mar 12, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_4DLf7DfYJ0Db78fs3CC5d46Y',
- card: {
- number: '4901',
- type: 'Mastercard',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Jenny Wilson',
- email: 'jenny.wilson@example.com',
- address: '852 Ash St. Saskatoon, SK',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3014,
- url: '/orders/3014',
- date: 'Mar 8, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_5KLf8DfYJ0Db78fssCC54TY',
- card: {
- number: '7365',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Anna Roberts',
- email: 'anna.roberts@example.com',
- address: '852 Hill St. Houston, TX',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3015,
- url: '/orders/3015',
- date: 'Mar 4, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_6HLf9DfYJ0Db78fas3CC546TY',
- card: {
- number: '2849',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Benjamin Russel',
- email: 'benjamin.russel@example.com',
- address: '963 Cherry St. Victoria, BC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3016,
- url: '/orders/3016',
- date: 'Feb 28, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_7HLf6DfYJ0Db78fas3CC546Y',
- card: {
- number: '6132',
- type: 'Mastercard',
- expiry: '01 / 2026',
- },
- },
- customer: {
- name: 'Jeffrey Webb',
- email: 'jeffrey.webb@example.com',
- address: '654 Ocean St. Hamilton, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3017,
- url: '/orders/3017',
- date: 'Feb 23, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_8KLf5DfYJ0Db78fas3CC546TY',
- card: {
- number: '9054',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Kathryn Murphy',
- email: 'kathryn.murphy@example.com',
- address: '357 River St. London, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3018,
- url: '/orders/3018',
- date: 'Feb 19, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_9HLf8DfYJ0Db78fas3CC5dTY',
- card: {
- number: '4287',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Lawrence Hunter',
- email: 'lawrence.hunter@example.com',
- address: '159 Lake St. Mississauga, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3019,
- url: '/orders/3019',
- date: 'Feb 15, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_1HLf9DfYJ0Db78fas3CC54TY',
- card: {
- number: '1765',
- type: 'Visa',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Yvette Armstrong',
- email: 'yvette.armstrong@example.com',
- address: '852 Forest St. Markham, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3020,
- url: '/orders/3020',
- date: 'Feb 10, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_2DLf6DfYJ0Db78fas3CC546TY',
- card: {
- number: '5923',
- type: 'Visa',
- expiry: '12 / 2024',
- },
- },
- customer: {
- name: 'Angela Fisher',
- email: 'angela.fisher@example.com',
- address: '741 Hill St. Brampton, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3021,
- url: '/orders/3021',
- date: 'Feb 5, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_3KLf5DfYJ0Db78fassCC546TY',
- card: {
- number: '3014',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Blake Reid',
- email: 'blake.reid@example.com',
- address: '369 Valley St. Oshawa, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3022,
- url: '/orders/3022',
- date: 'Feb 1, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_4HLf8DfYJ0Db78fas3CC546Y',
- card: {
- number: '8642',
- type: 'American Express',
- expiry: '11 / 2026',
- },
- },
- customer: {
- name: 'Hector Gibbons',
- email: 'hector.gibbons@example.com',
- address: '258 Ridge St. Richmond Hill, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3023,
- url: '/orders/3023',
- date: 'Jan 27, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_5KLf9DfYJ0Db78fs3CC546TY',
- card: {
- number: '5173',
- type: 'Visa',
- expiry: '12 / 2025',
- },
- },
- customer: {
- name: 'Fabricio Mendes',
- email: 'fabricio.mendes@example.com',
- address: '147 Park St. Vaughan, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3024,
- url: '/orders/3024',
- date: 'Jan 22, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_6HLf6DfYJ0Db78fas3CC5dTY',
- card: {
- number: '6298',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Jillian Steward',
- email: 'jillian.steward@example.com',
- address: '987 Grove St. Windsor, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3025,
- url: '/orders/3025',
- date: 'Jan 18, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_7HLf7DfYJ0Db78fas3CC546TY',
- card: {
- number: '9401',
- type: 'American Express',
- expiry: '08 / 2025',
- },
- },
- customer: {
- name: 'Chelsea Hagon',
- email: 'chelsea.hagon@example.com',
- address: '654 Court St. Los Angeles, CA',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1003'),
- },
- ]
-}
-
-export async function getEvent(id) {
- return (await getEvents()).find((event) => event.id.toString() === id)
-}
-
-export async function getEventOrders(id) {
- return (await getOrders()).filter((order) => order.event.id.toString() === id)
-}
-
-export async function getEvents() {
- return [
- {
- id: 1000,
- name: 'Bear Hug: Live in Concert',
- url: '/events/1000',
- date: 'May 20, 2024',
- time: '10 PM',
- location: 'Harmony Theater, Winnipeg, MB',
- totalRevenue: '$102,552',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 500,
- ticketsSold: 350,
- ticketsSoldChange: '+8.1%',
- pageViews: '24,300',
- pageViewsChange: '-0.75%',
- status: 'On Sale',
- imgUrl: '/events/bear-hug.jpg',
- thumbUrl: '/events/bear-hug-thumb.jpg',
- },
- {
- id: 1001,
- name: 'Six Fingers — DJ Set',
- url: '/events/1001',
- date: 'Jun 2, 2024',
- time: '8 PM',
- location: 'Moonbeam Arena, Uxbridge, ON',
- totalRevenue: '$24,115',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 150,
- ticketsSold: 72,
- ticketsSoldChange: '+8.1%',
- pageViews: '57,544',
- pageViewsChange: '-2.5%',
- status: 'On Sale',
- imgUrl: '/events/six-fingers.jpg',
- thumbUrl: '/events/six-fingers-thumb.jpg',
- },
- {
- id: 1002,
- name: 'We All Look The Same',
- url: '/events/1002',
- date: 'Aug 5, 2024',
- time: '4 PM',
- location: 'Electric Coliseum, New York, NY',
- totalRevenue: '$40,598',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 275,
- ticketsSold: 275,
- ticketsSoldChange: '+8.1%',
- pageViews: '122,122',
- pageViewsChange: '-8.0%',
- status: 'Closed',
- imgUrl: '/events/we-all-look-the-same.jpg',
- thumbUrl: '/events/we-all-look-the-same-thumb.jpg',
- },
- {
- id: 1003,
- name: 'Viking People',
- url: '/events/1003',
- date: 'Dec 31, 2024',
- time: '8 PM',
- location: 'Tapestry Hall, Cambridge, ON',
- totalRevenue: '$3,552',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 40,
- ticketsSold: 6,
- ticketsSoldChange: '+8.1%',
- pageViews: '9,000',
- pageViewsChange: '-0.15%',
- status: 'On Sale',
- imgUrl: '/events/viking-people.jpg',
- thumbUrl: '/events/viking-people-thumb.jpg',
- },
- ]
-}
-
-export function getCountries() {
- return [
- {
- name: 'Canada',
- code: 'CA',
- flagUrl: '/flags/ca.svg',
- regions: [
- 'Alberta',
- 'British Columbia',
- 'Manitoba',
- 'New Brunswick',
- 'Newfoundland and Labrador',
- 'Northwest Territories',
- 'Nova Scotia',
- 'Nunavut',
- 'Ontario',
- 'Prince Edward Island',
- 'Quebec',
- 'Saskatchewan',
- 'Yukon',
- ],
- },
- {
- name: 'Mexico',
- code: 'MX',
- flagUrl: '/flags/mx.svg',
- regions: [
- 'Aguascalientes',
- 'Baja California',
- 'Baja California Sur',
- 'Campeche',
- 'Chiapas',
- 'Chihuahua',
- 'Ciudad de Mexico',
- 'Coahuila',
- 'Colima',
- 'Durango',
- 'Guanajuato',
- 'Guerrero',
- 'Hidalgo',
- 'Jalisco',
- 'Mexico State',
- 'Michoacán',
- 'Morelos',
- 'Nayarit',
- 'Nuevo León',
- 'Oaxaca',
- 'Puebla',
- 'Querétaro',
- 'Quintana Roo',
- 'San Luis Potosí',
- 'Sinaloa',
- 'Sonora',
- 'Tabasco',
- 'Tamaulipas',
- 'Tlaxcala',
- 'Veracruz',
- 'Yucatán',
- 'Zacatecas',
- ],
- },
- {
- name: 'United States',
- code: 'US',
- flagUrl: '/flags/us.svg',
- regions: [
- 'Alabama',
- 'Alaska',
- 'American Samoa',
- 'Arizona',
- 'Arkansas',
- 'California',
- 'Colorado',
- 'Connecticut',
- 'Delaware',
- 'Washington DC',
- 'Micronesia',
- 'Florida',
- 'Georgia',
- 'Guam',
- 'Hawaii',
- 'Idaho',
- 'Illinois',
- 'Indiana',
- 'Iowa',
- 'Kansas',
- 'Kentucky',
- 'Louisiana',
- 'Maine',
- 'Marshall Islands',
- 'Maryland',
- 'Massachusetts',
- 'Michigan',
- 'Minnesota',
- 'Mississippi',
- 'Missouri',
- 'Montana',
- 'Nebraska',
- 'Nevada',
- 'New Hampshire',
- 'New Jersey',
- 'New Mexico',
- 'New York',
- 'North Carolina',
- 'North Dakota',
- 'Northern Mariana Islands',
- 'Ohio',
- 'Oklahoma',
- 'Oregon',
- 'Palau',
- 'Pennsylvania',
- 'Puerto Rico',
- 'Rhode Island',
- 'South Carolina',
- 'South Dakota',
- 'Tennessee',
- 'Texas',
- 'Utah',
- 'Vermont',
- 'U.S. Virgin Islands',
- 'Virginia',
- 'Washington',
- 'West Virginia',
- 'Wisconsin',
- 'Wyoming',
- 'Armed Forces Americas',
- 'Armed Forces Europe',
- 'Armed Forces Pacific',
- ],
- },
- ]
-}
diff --git a/catalyst-ui-kit/demo/javascript/src/styles/tailwind.css b/catalyst-ui-kit/demo/javascript/src/styles/tailwind.css
deleted file mode 100644
index 32ed686f..00000000
--- a/catalyst-ui-kit/demo/javascript/src/styles/tailwind.css
+++ /dev/null
@@ -1,6 +0,0 @@
-@import 'tailwindcss';
-
-@theme {
- --font-sans: Inter, sans-serif;
- --font-sans--font-feature-settings: 'cv11';
-}
diff --git a/catalyst-ui-kit/demo/typescript/.eslintrc.json b/catalyst-ui-kit/demo/typescript/.eslintrc.json
deleted file mode 100644
index f0f3abee..00000000
--- a/catalyst-ui-kit/demo/typescript/.eslintrc.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "next/core-web-vitals",
- "rules": {
- "@next/next/no-img-element": "off"
- }
-}
diff --git a/catalyst-ui-kit/demo/typescript/.gitignore b/catalyst-ui-kit/demo/typescript/.gitignore
deleted file mode 100644
index fd3dbb57..00000000
--- a/catalyst-ui-kit/demo/typescript/.gitignore
+++ /dev/null
@@ -1,36 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-.yarn/install-state.gz
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
diff --git a/catalyst-ui-kit/demo/typescript/LICENSE.md b/catalyst-ui-kit/demo/typescript/LICENSE.md
deleted file mode 100644
index 482f68b8..00000000
--- a/catalyst-ui-kit/demo/typescript/LICENSE.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# Tailwind Plus License
-
-## Personal License
-
-Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.
-
-The license grants permission to **one individual** (the Licensee) to access and use the Components and Templates.
-
-You **can**:
-
-- Use the Components and Templates to create unlimited End Products.
-- Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.
-- Use the Components and Templates to create unlimited End Products for unlimited Clients.
-- Use the Components and Templates to create End Products where the End Product is sold to End Users.
-- Use the Components and Templates to create End Products that are open source and freely available to End Users.
-
-You **cannot**:
-
-- Use the Components and Templates to create End Products that are designed to allow an End User to build their own End Products using the Components and Templates or derivatives of the Components and Templates.
-- Re-distribute the Components and Templates or derivatives of the Components and Templates separately from an End Product, neither in code or as design assets.
-- Share your access to the Components and Templates with any other individuals.
-- Use the Components and Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.
-
-### Example usage
-
-Examples of usage **allowed** by the license:
-
-- Creating a personal website by yourself.
-- Creating a website or web application for a client that will be owned by that client.
-- Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.
-- Creating a commercial self-hosted web application that is sold to end users for a one-time fee.
-- Creating a web application where the primary purpose is clearly not to simply re-distribute the components (like a conference organization app that uses the components for its UI for example) that is free and open source, where the source code is publicly available.
-
-Examples of usage **not allowed** by the license:
-
-- Creating a repository of your favorite Tailwind Plus components or templates (or derivatives based on Tailwind Plus components or templates) and publishing it publicly.
-- Creating a React or Vue version of Tailwind Plus and making it available either for sale or for free.
-- Create a Figma or Sketch UI kit based on the Tailwind Plus component designs.
-- Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind Plus.
-- Creating a theme, template, or project starter kit using the components or templates and making it available either for sale or for free.
-- Creating an admin panel tool (like [Laravel Nova](https://nova.laravel.com/) or [ActiveAdmin](https://activeadmin.info/)) that is made available either for sale or for free.
-
-In simple terms, use Tailwind Plus for anything you like as long as it doesn't compete with Tailwind Plus.
-
-### Personal License Definitions
-
-Licensee is the individual who has purchased a Personal License.
-
-Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind Plus license.
-
-End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.
-
-End User is a user of an End Product.
-
-Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.
-
-## Team License
-
-Tailwind Labs Inc. grants you an on-going, non-exclusive license to use the Components and Templates.
-
-The license grants permission for **up to 25 Employees and Contractors of the Licensee** to access and use the Components and Templates.
-
-You **can**:
-
-- Use the Components and Templates to create unlimited End Products.
-- Modify the Components and Templates to create derivative components and templates. Those components and templates are subject to this license.
-- Use the Components and Templates to create unlimited End Products for unlimited Clients.
-- Use the Components and Templates to create End Products where the End Product is sold to End Users.
-- Use the Components and Templates to create End Products that are open source and freely available to End Users.
-
-You **cannot**:
-
-- Use the Components or Templates to create End Products that are designed to allow an End User to build their own End Products using the Components or Templates or derivatives of the Components or Templates.
-- Re-distribute the Components or Templates or derivatives of the Components or Templates separately from an End Product.
-- Use the Components or Templates to create End Products that are the property of any individual or entity other than the Licensee or Clients of the Licensee.
-- Use the Components or Templates to produce anything that may be deemed by Tailwind Labs Inc, in their sole and absolute discretion, to be competitive or in conflict with the business of Tailwind Labs Inc.
-
-### Example usage
-
-Examples of usage **allowed** by the license:
-
-- Creating a website for your company.
-- Creating a website or web application for a client that will be owned by that client.
-- Creating a commercial SaaS application (like an invoicing app for example) where end users have to pay a fee to use the application.
-- Creating a commercial self-hosted web application that is sold to end users for a one-time fee.
-- Creating a web application where the primary purpose is clearly not to simply re-distribute the components or templates (like a conference organization app that uses the components or a template for its UI for example) that is free and open source, where the source code is publicly available.
-
-Examples of use **not allowed** by the license:
-
-- Creating a repository of your favorite Tailwind Plus components or template (or derivatives based on Tailwind Plus components or templates) and publishing it publicly.
-- Creating a React or Vue version of Tailwind Plus and making it available either for sale or for free.
-- Creating a "website builder" project where end users can build their own websites using components or templates included with or derived from Tailwind Plus.
-- Creating a theme or template using the components or templates and making it available either for sale or for free.
-- Creating an admin panel tool (like [Laravel Nova](https://nova.laravel.com/) or [ActiveAdmin](https://activeadmin.info/)) that is made available either for sale or for free.
-- Creating any End Product that is not the sole property of either your company or a client of your company. For example your employees/contractors can't use your company Tailwind Plus license to build their own websites or side projects.
-
-### Team License Definitions
-
-Licensee is the business entity who has purchased a Team License.
-
-Components and Templates are the source code and design assets made available to the Licensee after purchasing a Tailwind Plus license.
-
-End Product is any artifact produced that incorporates the Components or Templates or derivatives of the Components or Templates.
-
-End User is a user of an End Product.
-
-Employee is a full-time or part-time employee of the Licensee.
-
-Contractor is an individual or business entity contracted to perform services for the Licensee.
-
-Client is an individual or entity receiving custom professional services directly from the Licensee, produced specifically for that individual or entity. Customers of software-as-a-service products are not considered clients for the purpose of this document.
-
-## Enforcement
-
-If you are found to be in violation of the license, access to your Tailwind Plus account will be terminated, and a refund may be issued at our discretion. When license violation is blatant and malicious (such as intentionally redistributing the Components or Templates through private warez channels), no refund will be issued.
-
-The copyright of the Components and Templates is owned by Tailwind Labs Inc. You are granted only the permissions described in this license; all other rights are reserved. Tailwind Labs Inc. reserves the right to pursue legal remedies for any unauthorized use of the Components or Templates outside the scope of this license.
-
-## Liability
-
-Tailwind Labs Inc.’s liability to you for costs, damages, or other losses arising from your use of the Components or Templates — including third-party claims against you — is limited to a refund of your license fee. Tailwind Labs Inc. may not be held liable for any consequential damages related to your use of the Components or Templates.
-
-This Agreement is governed by the laws of the Province of Ontario and the applicable laws of Canada. Legal proceedings related to this Agreement may only be brought in the courts of Ontario. You agree to service of process at the e-mail address on your original order.
-
-## Questions?
-
-Unsure which license you need, or unsure if your use case is covered by our licenses?
-
-Email us at [support@tailwindcss.com](mailto:support@tailwindcss.com) with your questions.
diff --git a/catalyst-ui-kit/demo/typescript/README.md b/catalyst-ui-kit/demo/typescript/README.md
deleted file mode 100644
index b9a8f556..00000000
--- a/catalyst-ui-kit/demo/typescript/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Catalyst Demo
-
-To run the Catalyst demo, first install the npm dependencies:
-
-```bash
-npm install
-```
-
-Next, run the development server:
-
-```bash
-npm run dev
-```
-
-Finally, open [http://localhost:3000](http://localhost:3000) in your browser to view the website.
diff --git a/catalyst-ui-kit/demo/typescript/next.config.mjs b/catalyst-ui-kit/demo/typescript/next.config.mjs
deleted file mode 100644
index 1d614782..00000000
--- a/catalyst-ui-kit/demo/typescript/next.config.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-/** @type {import('next').NextConfig} */
-const nextConfig = {}
-
-export default nextConfig
diff --git a/catalyst-ui-kit/demo/typescript/package.json b/catalyst-ui-kit/demo/typescript/package.json
deleted file mode 100644
index 76ccdb7a..00000000
--- a/catalyst-ui-kit/demo/typescript/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "catalyst-demo",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
- },
- "dependencies": {
- "@headlessui/react": "^2.2.6",
- "@heroicons/react": "^2.2.0",
- "clsx": "^2.1.1",
- "motion": "^12.23.11",
- "next": "^15",
- "react": "^19",
- "react-dom": "^19"
- },
- "devDependencies": {
- "@tailwindcss/postcss": "^4.1.11",
- "@types/node": "^24.1.0",
- "@types/react": "^19",
- "@types/react-dom": "^19",
- "eslint": "^9",
- "eslint-config-next": "^15",
- "postcss": "^8",
- "prettier": "^3.6.2",
- "prettier-plugin-organize-imports": "^4.2.0",
- "prettier-plugin-tailwindcss": "^0.6.14",
- "tailwindcss": "^4.1.11",
- "typescript": "^5.8.3"
- }
-}
diff --git a/catalyst-ui-kit/demo/typescript/postcss.config.mjs b/catalyst-ui-kit/demo/typescript/postcss.config.mjs
deleted file mode 100644
index a869506e..00000000
--- a/catalyst-ui-kit/demo/typescript/postcss.config.mjs
+++ /dev/null
@@ -1,8 +0,0 @@
-/** @type {import('postcss-load-config').Config} */
-const config = {
- plugins: {
- '@tailwindcss/postcss': {},
- },
-}
-
-export default config
diff --git a/catalyst-ui-kit/demo/typescript/prettier.config.mjs b/catalyst-ui-kit/demo/typescript/prettier.config.mjs
deleted file mode 100644
index d9a23caa..00000000
--- a/catalyst-ui-kit/demo/typescript/prettier.config.mjs
+++ /dev/null
@@ -1,12 +0,0 @@
-/** @type {import("prettier").Config} */
-const config = {
- semi: false,
- singleQuote: true,
- printWidth: 120,
- trailingComma: 'es5',
- tailwindFunctions: ['clsx', 'tw'],
- plugins: ['prettier-plugin-organize-imports', 'prettier-plugin-tailwindcss'],
- tailwindStylesheet: './src/styles/tailwind.css',
-}
-
-export default config
diff --git a/catalyst-ui-kit/demo/typescript/public/events/bear-hug-thumb.jpg b/catalyst-ui-kit/demo/typescript/public/events/bear-hug-thumb.jpg
deleted file mode 100644
index 21b509de..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/bear-hug-thumb.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/bear-hug.jpg b/catalyst-ui-kit/demo/typescript/public/events/bear-hug.jpg
deleted file mode 100644
index 940a9e53..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/bear-hug.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/bear-hug.webp b/catalyst-ui-kit/demo/typescript/public/events/bear-hug.webp
deleted file mode 100644
index 279194ae..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/bear-hug.webp and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/six-fingers-thumb.jpg b/catalyst-ui-kit/demo/typescript/public/events/six-fingers-thumb.jpg
deleted file mode 100644
index 99349d95..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/six-fingers-thumb.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/six-fingers.jpg b/catalyst-ui-kit/demo/typescript/public/events/six-fingers.jpg
deleted file mode 100644
index 8c089a5a..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/six-fingers.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/six-fingers.webp b/catalyst-ui-kit/demo/typescript/public/events/six-fingers.webp
deleted file mode 100644
index 9b7bed9d..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/six-fingers.webp and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/viking-people-thumb.jpg b/catalyst-ui-kit/demo/typescript/public/events/viking-people-thumb.jpg
deleted file mode 100644
index b6ea81c9..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/viking-people-thumb.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/viking-people.jpg b/catalyst-ui-kit/demo/typescript/public/events/viking-people.jpg
deleted file mode 100644
index 4b53d801..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/viking-people.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/viking-people.webp b/catalyst-ui-kit/demo/typescript/public/events/viking-people.webp
deleted file mode 100644
index e1145e32..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/viking-people.webp and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same-thumb.jpg b/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same-thumb.jpg
deleted file mode 100644
index 1bb4b464..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same-thumb.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.jpg b/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.jpg
deleted file mode 100644
index f5315d07..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.webp b/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.webp
deleted file mode 100644
index 53619d38..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/events/we-all-look-the-same.webp and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/public/flags/ca.svg b/catalyst-ui-kit/demo/typescript/public/flags/ca.svg
deleted file mode 100644
index dc478b00..00000000
--- a/catalyst-ui-kit/demo/typescript/public/flags/ca.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/catalyst-ui-kit/demo/typescript/public/flags/mx.svg b/catalyst-ui-kit/demo/typescript/public/flags/mx.svg
deleted file mode 100644
index 56a01594..00000000
--- a/catalyst-ui-kit/demo/typescript/public/flags/mx.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/catalyst-ui-kit/demo/typescript/public/flags/us.svg b/catalyst-ui-kit/demo/typescript/public/flags/us.svg
deleted file mode 100644
index 547e80b9..00000000
--- a/catalyst-ui-kit/demo/typescript/public/flags/us.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/catalyst-ui-kit/demo/typescript/public/teams/catalyst.svg b/catalyst-ui-kit/demo/typescript/public/teams/catalyst.svg
deleted file mode 100644
index fc3e7e21..00000000
--- a/catalyst-ui-kit/demo/typescript/public/teams/catalyst.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/catalyst-ui-kit/demo/typescript/public/users/erica.jpg b/catalyst-ui-kit/demo/typescript/public/users/erica.jpg
deleted file mode 100644
index ce812745..00000000
Binary files a/catalyst-ui-kit/demo/typescript/public/users/erica.jpg and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/application-layout.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/application-layout.tsx
deleted file mode 100644
index 7499ab98..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/application-layout.tsx
+++ /dev/null
@@ -1,193 +0,0 @@
-'use client'
-
-import { Avatar } from '@/components/avatar'
-import {
- Dropdown,
- DropdownButton,
- DropdownDivider,
- DropdownItem,
- DropdownLabel,
- DropdownMenu,
-} from '@/components/dropdown'
-import { Navbar, NavbarItem, NavbarSection, NavbarSpacer } from '@/components/navbar'
-import {
- Sidebar,
- SidebarBody,
- SidebarFooter,
- SidebarHeader,
- SidebarHeading,
- SidebarItem,
- SidebarLabel,
- SidebarSection,
- SidebarSpacer,
-} from '@/components/sidebar'
-import { SidebarLayout } from '@/components/sidebar-layout'
-import { getEvents } from '@/data'
-import {
- ArrowRightStartOnRectangleIcon,
- ChevronDownIcon,
- ChevronUpIcon,
- Cog8ToothIcon,
- LightBulbIcon,
- PlusIcon,
- ShieldCheckIcon,
- UserCircleIcon,
-} from '@heroicons/react/16/solid'
-import {
- Cog6ToothIcon,
- HomeIcon,
- QuestionMarkCircleIcon,
- SparklesIcon,
- Square2StackIcon,
- TicketIcon,
-} from '@heroicons/react/20/solid'
-import { usePathname } from 'next/navigation'
-
-function AccountDropdownMenu({ anchor }: { anchor: 'top start' | 'bottom end' }) {
- return (
-
-
-
- My account
-
-
-
-
- Privacy policy
-
-
-
- Share feedback
-
-
-
-
- Sign out
-
-
- )
-}
-
-export function ApplicationLayout({
- events,
- children,
-}: {
- events: Awaited
>
- children: React.ReactNode
-}) {
- let pathname = usePathname()
-
- return (
-
-
-
-
-
-
-
-
-
-
-
- }
- sidebar={
-
-
-
-
-
- Catalyst
-
-
-
-
-
- Settings
-
-
-
-
- Catalyst
-
-
-
- Big Events
-
-
-
-
- New team…
-
-
-
-
-
-
-
-
-
- Home
-
-
-
- Events
-
-
-
- Orders
-
-
-
- Settings
-
-
-
-
- Upcoming Events
- {events.map((event) => (
-
- {event.name}
-
- ))}
-
-
-
-
-
-
-
- Support
-
-
-
- Changelog
-
-
-
-
-
-
-
-
-
-
- Erica
-
- erica@example.com
-
-
-
-
-
-
-
-
-
- }
- >
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/events/[id]/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/events/[id]/page.tsx
deleted file mode 100644
index 07bd0acc..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/events/[id]/page.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import { Stat } from '@/app/stat'
-import { Badge } from '@/components/badge'
-import { Button } from '@/components/button'
-import { Heading, Subheading } from '@/components/heading'
-import { Link } from '@/components/link'
-import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/table'
-import { getEvent, getEventOrders } from '@/data'
-import { ChevronLeftIcon } from '@heroicons/react/16/solid'
-import type { Metadata } from 'next'
-import { notFound } from 'next/navigation'
-
-export async function generateMetadata({ params }: { params: Promise<{ id: string }> }): Promise {
- let { id } = await params
- let event = await getEvent(id)
-
- return {
- title: event?.name,
- }
-}
-
-export default async function Event({ params }: { params: Promise<{ id: string }> }) {
- let { id } = await params
- let event = await getEvent(id)
- let orders = await getEventOrders(id)
-
- if (!event) {
- notFound()
- }
-
- return (
- <>
-
-
-
- Events
-
-
-
-
-
-
-
-
-
- {event.name}
- {event.status}
-
-
- {event.date} at {event.time} · {event.location}
-
-
-
-
- Edit
- View
-
-
-
-
-
-
-
- Recent orders
-
-
-
- Order number
- Purchase date
- Customer
- Amount
-
-
-
- {orders.map((order) => (
-
- {order.id}
- {order.date}
- {order.customer.name}
- US{order.amount.usd}
-
- ))}
-
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/events/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/events/page.tsx
deleted file mode 100644
index d1e54547..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/events/page.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { Badge } from '@/components/badge'
-import { Button } from '@/components/button'
-import { Divider } from '@/components/divider'
-import { Dropdown, DropdownButton, DropdownItem, DropdownMenu } from '@/components/dropdown'
-import { Heading } from '@/components/heading'
-import { Input, InputGroup } from '@/components/input'
-import { Link } from '@/components/link'
-import { Select } from '@/components/select'
-import { getEvents } from '@/data'
-import { EllipsisVerticalIcon, MagnifyingGlassIcon } from '@heroicons/react/16/solid'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: 'Events',
-}
-
-export default async function Events() {
- let events = await getEvents()
-
- return (
- <>
-
-
-
Events
-
-
-
-
-
-
-
-
-
- Sort by name
- Sort by date
- Sort by status
-
-
-
-
-
Create event
-
-
- {events.map((event, index) => (
-
- 0} />
-
-
-
-
-
-
-
-
-
- {event.name}
-
-
- {event.date} at {event.time} · {event.location}
-
-
- {event.ticketsSold}/{event.ticketsAvailable} tickets sold
-
-
-
-
-
- {event.status}
-
-
-
-
-
-
- View
- Edit
- Delete
-
-
-
-
-
- ))}
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/layout.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/layout.tsx
deleted file mode 100644
index 9499222f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/layout.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { getEvents } from '@/data'
-import { ApplicationLayout } from './application-layout'
-
-export default async function RootLayout({ children }: { children: React.ReactNode }) {
- let events = await getEvents()
-
- return {children}
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/page.tsx
deleted file mode 100644
index 1cd0b431..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/page.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import { Avatar } from '@/components/avatar'
-import { Badge } from '@/components/badge'
-import { Button } from '@/components/button'
-import { DescriptionDetails, DescriptionList, DescriptionTerm } from '@/components/description-list'
-import { Divider } from '@/components/divider'
-import { Heading, Subheading } from '@/components/heading'
-import { Link } from '@/components/link'
-import { getOrder } from '@/data'
-import { BanknotesIcon, CalendarIcon, ChevronLeftIcon, CreditCardIcon } from '@heroicons/react/16/solid'
-import type { Metadata } from 'next'
-import { notFound } from 'next/navigation'
-import { RefundOrder } from './refund'
-
-export async function generateMetadata({ params }: { params: Promise<{ id: string }> }): Promise {
- let { id } = await params
- let order = await getOrder(id)
-
- return {
- title: order && `Order #${order.id}`,
- }
-}
-
-export default async function Order({ params }: { params: Promise<{ id: string }> }) {
- let { id } = await params
- let order = await getOrder(id)
-
- if (!order) {
- notFound()
- }
-
- return (
- <>
-
-
-
- Orders
-
-
-
-
- Order #{order.id}
- Successful
-
-
-
-
-
- US{order.amount.usd}
-
-
-
-
- {order.payment.card.type}{' '}
-
- •••• {order.payment.card.number}
-
-
-
-
-
- {order.date}
-
-
-
-
- Refund
-
- Resend Invoice
-
-
-
-
-
Summary
-
-
- Customer
- {order.customer.name}
- Event
-
-
-
- {order.event.name}
-
-
- Amount
- US{order.amount.usd}
- Amount after exchange rate
-
- US{order.amount.usd} → CA{order.amount.cad}
-
- Fee
- CA{order.amount.fee}
- Net
- CA{order.amount.net}
-
-
-
-
Payment method
-
-
- Transaction ID
- {order.payment.transactionId}
- Card number
- •••• {order.payment.card.number}
- Card type
- {order.payment.card.type}
- Card expiry
- {order.payment.card.expiry}
- Owner
- {order.customer.name}
- Email address
- {order.customer.email}
- Address
- {order.customer.address}
- Country
-
-
-
- {order.customer.country}
-
-
- CVC
-
- Passed successfully
-
-
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/refund.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/refund.tsx
deleted file mode 100644
index 6e63a42f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/[id]/refund.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-'use client'
-
-import { Button } from '@/components/button'
-import { Checkbox, CheckboxField } from '@/components/checkbox'
-import { Dialog, DialogActions, DialogBody, DialogDescription, DialogTitle } from '@/components/dialog'
-import { Description, Field, FieldGroup, Label } from '@/components/fieldset'
-import { Input } from '@/components/input'
-import { Select } from '@/components/select'
-import { useState } from 'react'
-
-export function RefundOrder({ amount, ...props }: { amount: string } & React.ComponentPropsWithoutRef) {
- let [isOpen, setIsOpen] = useState(false)
-
- return (
- <>
- setIsOpen(true)} {...props} />
-
- Refund payment
-
- The refund will be reflected in the customer’s bank account 2 to 3 business days after processing.
-
-
-
-
- Amount
-
-
-
- Reason
-
-
- Select a reason…
-
- Duplicate
- Fraudulent
- Requested by customer
- Other
-
-
-
-
- Notify customer
- An email notification will be sent to this customer.
-
-
-
-
- setIsOpen(false)}>
- Cancel
-
- setIsOpen(false)}>Refund
-
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/page.tsx
deleted file mode 100644
index e3c092aa..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/orders/page.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { Avatar } from '@/components/avatar'
-import { Button } from '@/components/button'
-import { Heading } from '@/components/heading'
-import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/table'
-import { getOrders } from '@/data'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: 'Orders',
-}
-
-export default async function Orders() {
- let orders = await getOrders()
-
- return (
- <>
-
- Orders
- Create order
-
-
-
-
- Order number
- Purchase date
- Customer
- Event
- Amount
-
-
-
- {orders.map((order) => (
-
- {order.id}
- {order.date}
- {order.customer.name}
-
-
-
- US{order.amount.usd}
-
- ))}
-
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/page.tsx
deleted file mode 100644
index 55df6a02..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/page.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { Stat } from '@/app/stat'
-import { Avatar } from '@/components/avatar'
-import { Heading, Subheading } from '@/components/heading'
-import { Select } from '@/components/select'
-import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/table'
-import { getRecentOrders } from '@/data'
-
-export default async function Home() {
- let orders = await getRecentOrders()
-
- return (
- <>
- Good afternoon, Erica
-
-
Overview
-
-
- Last week
- Last two weeks
- Last month
- Last quarter
-
-
-
-
-
-
-
-
-
- Recent orders
-
-
-
- Order number
- Purchase date
- Customer
- Event
- Amount
-
-
-
- {orders.map((order) => (
-
- {order.id}
- {order.date}
- {order.customer.name}
-
-
-
- US{order.amount.usd}
-
- ))}
-
-
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/address.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/address.tsx
deleted file mode 100644
index 92dd862c..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/address.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-'use client'
-
-import { Input } from '@/components/input'
-import { Listbox, ListboxLabel, ListboxOption } from '@/components/listbox'
-import { getCountries } from '@/data'
-import { useState } from 'react'
-
-export function Address() {
- let countries = getCountries()
- let [country, setCountry] = useState(countries[0])
-
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/page.tsx
deleted file mode 100644
index 038c5d37..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(app)/settings/page.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import { Button } from '@/components/button'
-import { Checkbox, CheckboxField } from '@/components/checkbox'
-import { Divider } from '@/components/divider'
-import { Label } from '@/components/fieldset'
-import { Heading, Subheading } from '@/components/heading'
-import { Input } from '@/components/input'
-import { Select } from '@/components/select'
-import { Text } from '@/components/text'
-import { Textarea } from '@/components/textarea'
-import type { Metadata } from 'next'
-import { Address } from './address'
-
-export const metadata: Metadata = {
- title: 'Settings',
-}
-
-export default function Settings() {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(auth)/forgot-password/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(auth)/forgot-password/page.tsx
deleted file mode 100644
index a5539b93..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(auth)/forgot-password/page.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Logo } from '@/app/logo'
-import { Button } from '@/components/button'
-import { Field, Label } from '@/components/fieldset'
-import { Heading } from '@/components/heading'
-import { Input } from '@/components/input'
-import { Strong, Text, TextLink } from '@/components/text'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: 'Forgot password',
-}
-
-export default function Login() {
- return (
-
-
- Reset your password
- Enter your email and we’ll send you a link to reset your password.
-
- Email
-
-
-
- Reset password
-
-
- Don’t have an account?{' '}
-
- Sign up
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(auth)/layout.tsx b/catalyst-ui-kit/demo/typescript/src/app/(auth)/layout.tsx
deleted file mode 100644
index 6a54f227..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(auth)/layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { AuthLayout } from '@/components/auth-layout'
-
-export default async function RootLayout({ children }: { children: React.ReactNode }) {
- return {children}
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(auth)/login/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(auth)/login/page.tsx
deleted file mode 100644
index e63aa3fa..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(auth)/login/page.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import { Logo } from '@/app/logo'
-import { Button } from '@/components/button'
-import { Checkbox, CheckboxField } from '@/components/checkbox'
-import { Field, Label } from '@/components/fieldset'
-import { Heading } from '@/components/heading'
-import { Input } from '@/components/input'
-import { Strong, Text, TextLink } from '@/components/text'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: 'Login',
-}
-
-export default function Login() {
- return (
-
-
- Sign in to your account
-
- Email
-
-
-
- Password
-
-
-
-
-
- Remember me
-
-
-
- Forgot password?
-
-
-
-
- Login
-
-
- Don’t have an account?{' '}
-
- Sign up
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/(auth)/register/page.tsx b/catalyst-ui-kit/demo/typescript/src/app/(auth)/register/page.tsx
deleted file mode 100644
index 129de8c5..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/(auth)/register/page.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { Logo } from '@/app/logo'
-import { Button } from '@/components/button'
-import { Checkbox, CheckboxField } from '@/components/checkbox'
-import { Field, Label } from '@/components/fieldset'
-import { Heading } from '@/components/heading'
-import { Input } from '@/components/input'
-import { Select } from '@/components/select'
-import { Strong, Text, TextLink } from '@/components/text'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: 'Register',
-}
-
-export default function Login() {
- return (
-
-
- Create your account
-
- Email
-
-
-
- Full name
-
-
-
- Password
-
-
-
- Country
-
- Canada
- Mexico
- United States
-
-
-
-
- Get emails about product updates and news.
-
-
- Create account
-
-
- Already have an account?{' '}
-
- Sign in
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/favicon.ico b/catalyst-ui-kit/demo/typescript/src/app/favicon.ico
deleted file mode 100644
index 3c0e18ff..00000000
Binary files a/catalyst-ui-kit/demo/typescript/src/app/favicon.ico and /dev/null differ
diff --git a/catalyst-ui-kit/demo/typescript/src/app/layout.tsx b/catalyst-ui-kit/demo/typescript/src/app/layout.tsx
deleted file mode 100644
index 1369f465..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/layout.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import '@/styles/tailwind.css'
-import type { Metadata } from 'next'
-
-export const metadata: Metadata = {
- title: {
- template: '%s - Catalyst',
- default: 'Catalyst',
- },
- description: '',
-}
-
-export default async function RootLayout({ children }: { children: React.ReactNode }) {
- return (
-
-
-
-
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/logo.tsx b/catalyst-ui-kit/demo/typescript/src/app/logo.tsx
deleted file mode 100644
index 80cce59d..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/logo.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-export function Logo({ className, ...props }: React.ComponentPropsWithoutRef<'svg'>) {
- return (
-
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/app/stat.tsx b/catalyst-ui-kit/demo/typescript/src/app/stat.tsx
deleted file mode 100644
index 0f3b0652..00000000
--- a/catalyst-ui-kit/demo/typescript/src/app/stat.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Badge } from '@/components/badge'
-import { Divider } from '@/components/divider'
-
-export function Stat({ title, value, change }: { title: string; value: string; change: string }) {
- return (
-
-
-
{title}
-
{value}
-
- {change} {' '}
- from last week
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/alert.tsx b/catalyst-ui-kit/demo/typescript/src/components/alert.tsx
deleted file mode 100644
index 9369921d..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/alert.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Alert({
- size = 'md',
- className,
- children,
- ...props
-}: { size?: keyof typeof sizes; className?: string; children: React.ReactNode } & Omit<
- Headless.DialogProps,
- 'as' | 'className'
->) {
- return (
-
-
-
-
-
- )
-}
-
-export function AlertTitle({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function AlertDescription({
- className,
- ...props
-}: { className?: string } & Omit, 'as' | 'className'>) {
- return (
-
- )
-}
-
-export function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/auth-layout.tsx b/catalyst-ui-kit/demo/typescript/src/components/auth-layout.tsx
deleted file mode 100644
index 52309ea3..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/auth-layout.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import type React from 'react'
-
-export function AuthLayout({ children }: { children: React.ReactNode }) {
- return (
-
-
- {children}
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/avatar.tsx b/catalyst-ui-kit/demo/typescript/src/components/avatar.tsx
deleted file mode 100644
index 7422f211..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/avatar.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-type AvatarProps = {
- src?: string | null
- square?: boolean
- initials?: string
- alt?: string
- className?: string
-}
-
-export function Avatar({
- src = null,
- square = false,
- initials,
- alt = '',
- className,
- ...props
-}: AvatarProps & React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {initials && (
-
- {alt && {alt} }
-
- {initials}
-
-
- )}
- {src && }
-
- )
-}
-
-export const AvatarButton = forwardRef(function AvatarButton(
- {
- src,
- square = false,
- initials,
- alt,
- className,
- ...props
- }: AvatarProps &
- (Omit | Omit, 'className'>),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- square ? 'rounded-[20%]' : 'rounded-full',
- 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
- }>
-
-
-
-
- ) : (
-
-
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/components/badge.tsx b/catalyst-ui-kit/demo/typescript/src/components/badge.tsx
deleted file mode 100644
index 60f51c66..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/badge.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-const colors = {
- red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-data-hover:bg-red-500/20',
- orange:
- 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-400 dark:group-data-hover:bg-orange-500/20',
- amber:
- 'bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-data-hover:bg-amber-400/15',
- yellow:
- 'bg-yellow-400/20 text-yellow-700 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-300 dark:group-data-hover:bg-yellow-400/15',
- lime: 'bg-lime-400/20 text-lime-700 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-300 dark:group-data-hover:bg-lime-400/15',
- green:
- 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-400 dark:group-data-hover:bg-green-500/20',
- emerald:
- 'bg-emerald-500/15 text-emerald-700 group-data-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-400 dark:group-data-hover:bg-emerald-500/20',
- teal: 'bg-teal-500/15 text-teal-700 group-data-hover:bg-teal-500/25 dark:bg-teal-500/10 dark:text-teal-300 dark:group-data-hover:bg-teal-500/20',
- cyan: 'bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15',
- sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',
- blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-400 dark:group-data-hover:bg-blue-500/25',
- indigo:
- 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-400 dark:group-data-hover:bg-indigo-500/20',
- violet:
- 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-400 dark:group-data-hover:bg-violet-500/20',
- purple:
- 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-400 dark:group-data-hover:bg-purple-500/20',
- fuchsia:
- 'bg-fuchsia-400/15 text-fuchsia-700 group-data-hover:bg-fuchsia-400/25 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:group-data-hover:bg-fuchsia-400/20',
- pink: 'bg-pink-400/15 text-pink-700 group-data-hover:bg-pink-400/25 dark:bg-pink-400/10 dark:text-pink-400 dark:group-data-hover:bg-pink-400/20',
- rose: 'bg-rose-400/15 text-rose-700 group-data-hover:bg-rose-400/25 dark:bg-rose-400/10 dark:text-rose-400 dark:group-data-hover:bg-rose-400/20',
- zinc: 'bg-zinc-600/10 text-zinc-700 group-data-hover:bg-zinc-600/20 dark:bg-white/5 dark:text-zinc-400 dark:group-data-hover:bg-white/10',
-}
-
-type BadgeProps = { color?: keyof typeof colors }
-
-export function Badge({ color = 'zinc', className, ...props }: BadgeProps & React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- )
-}
-
-export const BadgeButton = forwardRef(function BadgeButton(
- {
- color = 'zinc',
- className,
- children,
- ...props
- }: BadgeProps & { className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- 'group relative inline-flex rounded-md focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
- }>
-
- {children}
-
-
- ) : (
-
-
- {children}
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/components/button.tsx b/catalyst-ui-kit/demo/typescript/src/components/button.tsx
deleted file mode 100644
index 0190f500..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/button.tsx
+++ /dev/null
@@ -1,204 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { Link } from './link'
-
-const styles = {
- base: [
- // Base
- 'relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',
- // Sizing
- 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',
- // Focus
- 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',
- // Disabled
- 'data-disabled:opacity-50',
- // Icon
- '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',
- ],
- solid: [
- // Optical border, implemented as the button background to avoid corner artifacts
- 'border-transparent bg-(--btn-border)',
- // Dark mode: border is rendered on `after` so background is set to button background
- 'dark:bg-(--btn-bg)',
- // Button background, implemented as foreground layer to stack on top of pseudo-border layer
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',
- // Drop shadow, applied to the inset `before` layer so it blends with the border
- 'before:shadow-sm',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Dark mode: Subtle white outline is applied using a border
- 'dark:border-white/5',
- // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow
- 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',
- // Inner highlight shadow
- 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- // White overlay on hover
- 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',
- // Dark mode: `after` layer expands to cover entire button
- 'dark:after:-inset-px dark:after:rounded-lg',
- // Disabled
- 'data-disabled:before:shadow-none data-disabled:after:shadow-none',
- ],
- outline: [
- // Base
- 'border-zinc-950/10 text-zinc-950 data-active:bg-zinc-950/2.5 data-hover:bg-zinc-950/2.5',
- // Dark mode
- 'dark:border-white/15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:data-hover:bg-white/5',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- plain: [
- // Base
- 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',
- // Dark mode
- 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- colors: {
- 'dark/zinc': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- light: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- 'dark/white': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- dark: [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- white: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',
- ],
- zinc: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- indigo: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',
- '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',
- ],
- cyan: [
- 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',
- '[--btn-icon:var(--color-cyan-500)]',
- ],
- red: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',
- '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',
- ],
- orange: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',
- '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',
- ],
- amber: [
- 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',
- '[--btn-icon:var(--color-amber-600)]',
- ],
- yellow: [
- 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',
- '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',
- ],
- lime: [
- 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',
- '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',
- ],
- green: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- emerald: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- teal: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- sky: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- blue: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',
- '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',
- ],
- violet: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',
- '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',
- ],
- purple: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',
- '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',
- ],
- fuchsia: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',
- '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',
- ],
- pink: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',
- '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',
- ],
- rose: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',
- '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',
- ],
- },
-}
-
-type ButtonProps = (
- | { color?: keyof typeof styles.colors; outline?: never; plain?: never }
- | { color?: never; outline: true; plain?: never }
- | { color?: never; outline?: never; plain: true }
-) & { className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- )
-
-export const Button = forwardRef(function Button(
- { color, outline, plain, className, children, ...props }: ButtonProps,
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- styles.base,
- outline ? styles.outline : plain ? styles.plain : clsx(styles.solid, styles.colors[color ?? 'dark/zinc'])
- )
-
- return 'href' in props ? (
- }>
- {children}
-
- ) : (
-
- {children}
-
- )
-})
-
-/**
- * Expand the hit area to at least 44×44px on touch devices
- */
-export function TouchTarget({ children }: { children: React.ReactNode }) {
- return (
- <>
-
- {children}
- >
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/checkbox.tsx b/catalyst-ui-kit/demo/typescript/src/components/checkbox.tsx
deleted file mode 100644
index 64a5e80f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/checkbox.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function CheckboxGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
-
-export function CheckboxField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.5 items-center justify-center rounded-[0.3125rem] sm:size-4',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(0.3125rem-1px)] before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--checkbox-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--checkbox-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--checkbox-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-[calc(0.3125rem-1px)] after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-[0.3125rem] dark:group-data-checked:after:block',
- // Focus ring
- 'group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--checkbox-check:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--checkbox-check:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
- // Forced colors mode
- 'forced-colors:[--checkbox-check:HighlightText] forced-colors:[--checkbox-checked-bg:Highlight] forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
- 'dark:forced-colors:[--checkbox-check:HighlightText] dark:forced-colors:[--checkbox-checked-bg:Highlight] dark:forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-check:var(--color-zinc-900)] dark:[--checkbox-checked-bg:var(--color-white)] dark:[--checkbox-checked-border:var(--color-zinc-950)]/15',
- ],
- white:
- '[--checkbox-check:var(--color-zinc-900)] [--checkbox-checked-bg:var(--color-white)] [--checkbox-checked-border:var(--color-zinc-950)]/15',
- dark: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- zinc: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-600)] [--checkbox-checked-border:var(--color-zinc-700)]/90',
- red: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-red-600)] [--checkbox-checked-border:var(--color-red-700)]/90',
- orange:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-orange-500)] [--checkbox-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--checkbox-check:var(--color-amber-950)] [--checkbox-checked-bg:var(--color-amber-400)] [--checkbox-checked-border:var(--color-amber-500)]/80',
- yellow:
- '[--checkbox-check:var(--color-yellow-950)] [--checkbox-checked-bg:var(--color-yellow-300)] [--checkbox-checked-border:var(--color-yellow-400)]/80',
- lime: '[--checkbox-check:var(--color-lime-950)] [--checkbox-checked-bg:var(--color-lime-300)] [--checkbox-checked-border:var(--color-lime-400)]/80',
- green:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-green-600)] [--checkbox-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-emerald-600)] [--checkbox-checked-border:var(--color-emerald-700)]/90',
- teal: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-teal-600)] [--checkbox-checked-border:var(--color-teal-700)]/90',
- cyan: '[--checkbox-check:var(--color-cyan-950)] [--checkbox-checked-bg:var(--color-cyan-300)] [--checkbox-checked-border:var(--color-cyan-400)]/80',
- sky: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-sky-500)] [--checkbox-checked-border:var(--color-sky-600)]/80',
- blue: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-blue-600)] [--checkbox-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-indigo-500)] [--checkbox-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-violet-500)] [--checkbox-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-purple-500)] [--checkbox-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-fuchsia-500)] [--checkbox-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-pink-500)] [--checkbox-checked-border:var(--color-pink-600)]/90',
- rose: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-rose-500)] [--checkbox-checked-border:var(--color-rose-600)]/90',
-}
-
-type Color = keyof typeof colors
-
-export function Checkbox({
- color = 'dark/zinc',
- className,
- ...props
-}: {
- color?: Color
- className?: string
-} & Omit) {
- return (
-
-
-
- {/* Checkmark icon */}
-
- {/* Indeterminate icon */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/combobox.tsx b/catalyst-ui-kit/demo/typescript/src/components/combobox.tsx
deleted file mode 100644
index bf649b4b..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/combobox.tsx
+++ /dev/null
@@ -1,188 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { useState } from 'react'
-
-export function Combobox({
- options,
- displayValue,
- filter,
- anchor = 'bottom',
- className,
- placeholder,
- autoFocus,
- 'aria-label': ariaLabel,
- children,
- ...props
-}: {
- options: T[]
- displayValue: (value: T | null) => string | undefined
- filter?: (value: T, query: string) => boolean
- className?: string
- placeholder?: string
- autoFocus?: boolean
- 'aria-label'?: string
- children: (value: NonNullable) => React.ReactElement
-} & Omit, 'as' | 'multiple' | 'children'> & { anchor?: 'top' | 'bottom' }) {
- const [query, setQuery] = useState('')
-
- const filteredOptions =
- query === ''
- ? options
- : options.filter((option) =>
- filter ? filter(option, query) : displayValue(option)?.toLowerCase().includes(query.toLowerCase())
- )
-
- return (
- setQuery('')}>
-
- displayValue(option) ?? ''}
- onChange={(event) => setQuery(event.target.value)}
- placeholder={placeholder}
- className={clsx([
- className,
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Horizontal padding
- 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',
- // Border
- 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Hide default focus styles
- 'focus:outline-hidden',
- // Invalid state
- 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-500 dark:data-invalid:data-hover:border-red-500',
- // Disabled state
- 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',
- // System icons
- 'dark:scheme-dark',
- ])}
- />
-
-
-
-
-
-
-
-
- {({ option }) => children(option)}
-
-
- )
-}
-
-export function ComboboxOption({
- children,
- className,
- ...props
-}: { className?: string; children?: React.ReactNode } & Omit<
- Headless.ComboboxOptionProps<'div', T>,
- 'as' | 'className'
->) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {children}
-
-
-
-
- )
-}
-
-export function ComboboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function ComboboxDescription({ className, children, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/description-list.tsx b/catalyst-ui-kit/demo/typescript/src/components/description-list.tsx
deleted file mode 100644
index b19b3b5d..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/description-list.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import clsx from 'clsx'
-
-export function DescriptionList({ className, ...props }: React.ComponentPropsWithoutRef<'dl'>) {
- return (
-
- )
-}
-
-export function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>) {
- return (
-
- )
-}
-
-export function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/dialog.tsx b/catalyst-ui-kit/demo/typescript/src/components/dialog.tsx
deleted file mode 100644
index eb55aa3f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/dialog.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Dialog({
- size = 'lg',
- className,
- children,
- ...props
-}: { size?: keyof typeof sizes; className?: string; children: React.ReactNode } & Omit<
- Headless.DialogProps,
- 'as' | 'className'
->) {
- return (
-
-
-
-
-
- )
-}
-
-export function DialogTitle({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DialogDescription({
- className,
- ...props
-}: { className?: string } & Omit, 'as' | 'className'>) {
- return
-}
-
-export function DialogBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DialogActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/divider.tsx b/catalyst-ui-kit/demo/typescript/src/components/divider.tsx
deleted file mode 100644
index dd84b100..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/divider.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import clsx from 'clsx'
-
-export function Divider({
- soft = false,
- className,
- ...props
-}: { soft?: boolean } & React.ComponentPropsWithoutRef<'hr'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/dropdown.tsx b/catalyst-ui-kit/demo/typescript/src/components/dropdown.tsx
deleted file mode 100644
index 9e58bb0f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/dropdown.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Button } from './button'
-import { Link } from './link'
-
-export function Dropdown(props: Headless.MenuProps) {
- return
-}
-
-export function DropdownButton({
- as = Button,
- ...props
-}: { className?: string } & Omit, 'className'>) {
- return
-}
-
-export function DropdownMenu({
- anchor = 'bottom',
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownItem({
- className,
- ...props
-}: { className?: string } & (
- | Omit, 'as' | 'className'>
- | Omit, 'as' | 'className'>
-)) {
- let classes = clsx(
- className,
- // Base styles
- 'group cursor-default rounded-lg px-3.5 py-2.5 focus:outline-hidden sm:px-3 sm:py-1.5',
- // Text styles
- 'text-left text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Focus
- 'data-focus:bg-blue-500 data-focus:text-white',
- // Disabled state
- 'data-disabled:opacity-50',
- // Forced colors mode
- 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText] forced-colors:data-focus:*:data-[slot=icon]:text-[HighlightText]',
- // Use subgrid when available but fallback to an explicit grid layout if not
- 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] items-center supports-[grid-template-columns:subgrid]:grid-cols-subgrid',
- // Icons
- '*:data-[slot=icon]:col-start-1 *:data-[slot=icon]:row-start-1 *:data-[slot=icon]:mr-2.5 *:data-[slot=icon]:-ml-0.5 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:mr-2 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 data-focus:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400 dark:data-focus:*:data-[slot=icon]:text-white',
- // Avatar
- '*:data-[slot=avatar]:mr-2.5 *:data-[slot=avatar]:-ml-1 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:mr-2 sm:*:data-[slot=avatar]:size-5'
- )
-
- return 'href' in props ? (
-
- ) : (
-
- )
-}
-
-export function DropdownHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DropdownSection({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownHeading({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownDivider({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownLabel({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DropdownDescription({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownShortcut({
- keys,
- className,
- ...props
-}: { keys: string | string[]; className?: string } & Omit, 'as' | 'className'>) {
- return (
-
- {(Array.isArray(keys) ? keys : keys.split('')).map((char, index) => (
- 0 && char.length > 1 && 'pl-1',
- ])}
- >
- {char}
-
- ))}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/fieldset.tsx b/catalyst-ui-kit/demo/typescript/src/components/fieldset.tsx
deleted file mode 100644
index 155ca204..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/fieldset.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function Fieldset({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
- *+[data-slot=control]]:mt-6')}
- />
- )
-}
-
-export function Legend({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function FieldGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function Field({ className, ...props }: { className?: string } & Omit) {
- return (
- [data-slot=label]+[data-slot=control]]:mt-3',
- '[&>[data-slot=label]+[data-slot=description]]:mt-1',
- '[&>[data-slot=description]+[data-slot=control]]:mt-3',
- '[&>[data-slot=control]+[data-slot=description]]:mt-3',
- '[&>[data-slot=control]+[data-slot=error]]:mt-3',
- '*:data-[slot=label]:font-medium'
- )}
- />
- )
-}
-
-export function Label({ className, ...props }: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function Description({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function ErrorMessage({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/heading.tsx b/catalyst-ui-kit/demo/typescript/src/components/heading.tsx
deleted file mode 100644
index 5ccc9d13..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/heading.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import clsx from 'clsx'
-
-type HeadingProps = { level?: 1 | 2 | 3 | 4 | 5 | 6 } & React.ComponentPropsWithoutRef<
- 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
->
-
-export function Heading({ className, level = 1, ...props }: HeadingProps) {
- let Element: `h${typeof level}` = `h${level}`
-
- return (
-
- )
-}
-
-export function Subheading({ className, level = 2, ...props }: HeadingProps) {
- let Element: `h${typeof level}` = `h${level}`
-
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/input.tsx b/catalyst-ui-kit/demo/typescript/src/components/input.tsx
deleted file mode 100644
index 72816fb7..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/input.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export function InputGroup({ children }: React.ComponentPropsWithoutRef<'span'>) {
- return (
- [data-slot=icon]:first-child]:left-3 sm:[&>[data-slot=icon]:first-child]:left-2.5 [&>[data-slot=icon]:last-child]:right-3 sm:[&>[data-slot=icon]:last-child]:right-2.5',
- '*:data-[slot=icon]:text-zinc-500 dark:*:data-[slot=icon]:text-zinc-400'
- )}
- >
- {children}
-
- )
-}
-
-const dateTypes = ['date', 'datetime-local', 'month', 'time', 'week']
-type DateType = (typeof dateTypes)[number]
-
-export const Input = forwardRef(function Input(
- {
- className,
- ...props
- }: {
- className?: string
- type?: 'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url' | DateType
- } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/components/link.tsx b/catalyst-ui-kit/demo/typescript/src/components/link.tsx
deleted file mode 100644
index 06a8e13a..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/link.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import * as Headless from '@headlessui/react'
-import NextLink, { type LinkProps } from 'next/link'
-import React, { forwardRef } from 'react'
-
-export const Link = forwardRef(function Link(
- props: LinkProps & React.ComponentPropsWithoutRef<'a'>,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/components/listbox.tsx b/catalyst-ui-kit/demo/typescript/src/components/listbox.tsx
deleted file mode 100644
index ecd0a448..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/listbox.tsx
+++ /dev/null
@@ -1,177 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { Fragment } from 'react'
-
-export function Listbox({
- className,
- placeholder,
- autoFocus,
- 'aria-label': ariaLabel,
- children: options,
- ...props
-}: {
- className?: string
- placeholder?: React.ReactNode
- autoFocus?: boolean
- 'aria-label'?: string
- children?: React.ReactNode
-} & Omit, 'as' | 'multiple'>) {
- return (
-
-
- {placeholder}}
- className={clsx([
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Set minimum height for when no value is selected
- 'min-h-11 sm:min-h-9',
- // Horizontal padding
- 'pr-[calc(--spacing(7)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-left text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Border
- 'border border-zinc-950/10 group-data-active:border-zinc-950/20 group-data-hover:border-zinc-950/20 dark:border-white/10 dark:group-data-active:border-white/20 dark:group-data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Invalid state
- 'group-data-invalid:border-red-500 group-data-hover:group-data-invalid:border-red-500 dark:group-data-invalid:border-red-600 dark:data-hover:group-data-invalid:border-red-600',
- // Disabled state
- 'group-data-disabled:border-zinc-950/20 group-data-disabled:opacity-100 dark:group-data-disabled:border-white/15 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:data-hover:border-white/15',
- ])}
- />
-
-
-
-
-
-
-
-
- {options}
-
-
- )
-}
-
-export function ListboxOption({
- children,
- className,
- ...props
-}: { className?: string; children?: React.ReactNode } & Omit<
- Headless.ListboxOptionProps<'div', T>,
- 'as' | 'className'
->) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {({ selectedOption }) => {
- if (selectedOption) {
- return {children}
- }
-
- return (
-
- )
- }}
-
- )
-}
-
-export function ListboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function ListboxDescription({ className, children, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/navbar.tsx b/catalyst-ui-kit/demo/typescript/src/components/navbar.tsx
deleted file mode 100644
index 0b4fd9be..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/navbar.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Navbar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function NavbarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function NavbarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function NavbarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export const NavbarItem = forwardRef(function NavbarItem(
- {
- current,
- className,
- children,
- ...props
- }: { current?: boolean; className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- // Base
- 'relative flex min-w-0 items-center gap-3 rounded-lg p-2 text-left text-base/6 font-medium text-zinc-950 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:not-nth-2:last:data-[slot=icon]:ml-auto *:not-nth-2:last:data-[slot=icon]:size-5 sm:*:not-nth-2:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 *:data-[slot=avatar]:[--avatar-radius:var(--radius-md)] sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
- }
- >
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function NavbarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/pagination.tsx b/catalyst-ui-kit/demo/typescript/src/components/pagination.tsx
deleted file mode 100644
index 540224f2..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/pagination.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import clsx from 'clsx'
-import type React from 'react'
-import { Button } from './button'
-
-export function Pagination({
- 'aria-label': ariaLabel = 'Page navigation',
- className,
- ...props
-}: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function PaginationPrevious({
- href = null,
- className,
- children = 'Previous',
-}: React.PropsWithChildren<{ href?: string | null; className?: string }>) {
- return (
-
-
-
-
-
- {children}
-
-
- )
-}
-
-export function PaginationNext({
- href = null,
- className,
- children = 'Next',
-}: React.PropsWithChildren<{ href?: string | null; className?: string }>) {
- return (
-
-
- {children}
-
-
-
-
-
- )
-}
-
-export function PaginationList({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function PaginationPage({
- href,
- className,
- current = false,
- children,
-}: React.PropsWithChildren<{ href: string; className?: string; current?: boolean }>) {
- return (
-
- {children}
-
- )
-}
-
-export function PaginationGap({
- className,
- children = <>…>,
- ...props
-}: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/radio.tsx b/catalyst-ui-kit/demo/typescript/src/components/radio.tsx
deleted file mode 100644
index c06307be..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/radio.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function RadioGroup({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function RadioField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.75 shrink-0 rounded-full sm:size-4.25',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-full before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--radio-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--radio-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--radio-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-full dark:group-data-checked:after:block',
- // Indicator color (light mode)
- '[--radio-indicator:transparent] group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:[--radio-indicator:var(--color-zinc-900)]/10',
- // Indicator color (dark mode)
- 'dark:group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] dark:group-data-hover:[--radio-indicator:var(--color-zinc-700)]',
- // Focus ring
- 'group-data-focus:outline group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--radio-checked-indicator:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--radio-checked-indicator:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-white)] dark:[--radio-checked-border:var(--color-zinc-950)]/15 dark:[--radio-checked-indicator:var(--color-zinc-900)]',
- ],
- white:
- '[--radio-checked-bg:var(--color-white)] [--radio-checked-border:var(--color-zinc-950)]/15 [--radio-checked-indicator:var(--color-zinc-900)]',
- dark: '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- zinc: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-zinc-600)] [--radio-checked-border:var(--color-zinc-700)]/90',
- red: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-red-600)] [--radio-checked-border:var(--color-red-700)]/90',
- orange:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-orange-500)] [--radio-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--radio-checked-bg:var(--color-amber-400)] [--radio-checked-border:var(--color-amber-500)]/80 [--radio-checked-indicator:var(--color-amber-950)]',
- yellow:
- '[--radio-checked-bg:var(--color-yellow-300)] [--radio-checked-border:var(--color-yellow-400)]/80 [--radio-checked-indicator:var(--color-yellow-950)]',
- lime: '[--radio-checked-bg:var(--color-lime-300)] [--radio-checked-border:var(--color-lime-400)]/80 [--radio-checked-indicator:var(--color-lime-950)]',
- green:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-green-600)] [--radio-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-emerald-600)] [--radio-checked-border:var(--color-emerald-700)]/90',
- teal: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-teal-600)] [--radio-checked-border:var(--color-teal-700)]/90',
- cyan: '[--radio-checked-bg:var(--color-cyan-300)] [--radio-checked-border:var(--color-cyan-400)]/80 [--radio-checked-indicator:var(--color-cyan-950)]',
- sky: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-sky-500)] [--radio-checked-border:var(--color-sky-600)]/80',
- blue: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-blue-600)] [--radio-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-indigo-500)] [--radio-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-violet-500)] [--radio-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-purple-500)] [--radio-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-fuchsia-500)] [--radio-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-pink-500)] [--radio-checked-border:var(--color-pink-600)]/90',
- rose: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-rose-500)] [--radio-checked-border:var(--color-rose-600)]/90',
-}
-
-type Color = keyof typeof colors
-
-export function Radio({
- color = 'dark/zinc',
- className,
- ...props
-}: { color?: Color; className?: string } & Omit) {
- return (
-
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/select.tsx b/catalyst-ui-kit/demo/typescript/src/components/select.tsx
deleted file mode 100644
index ffda6002..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/select.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Select = forwardRef(function Select(
- { className, multiple, ...props }: { className?: string } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
- {!multiple && (
-
-
-
-
-
-
- )}
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/components/sidebar-layout.tsx b/catalyst-ui-kit/demo/typescript/src/components/sidebar-layout.tsx
deleted file mode 100644
index ecc07b1f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/sidebar-layout.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }: React.PropsWithChildren<{ open: boolean; close: () => void }>) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function SidebarLayout({
- navbar,
- sidebar,
- children,
-}: React.PropsWithChildren<{ navbar: React.ReactNode; sidebar: React.ReactNode }>) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on desktop */}
-
{sidebar}
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar on mobile */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/sidebar.tsx b/catalyst-ui-kit/demo/typescript/src/components/sidebar.tsx
deleted file mode 100644
index 4f655572..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/sidebar.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Sidebar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function SidebarHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
- [data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-8'
- )}
- />
- )
-}
-
-export function SidebarFooter({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function SidebarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'hr'>) {
- return
-}
-
-export function SidebarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function SidebarHeading({ className, ...props }: React.ComponentPropsWithoutRef<'h3'>) {
- return (
-
- )
-}
-
-export const SidebarItem = forwardRef(function SidebarItem(
- {
- current,
- className,
- children,
- ...props
- }: { current?: boolean; className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'as' | 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- // Base
- 'flex w-full items-center gap-3 rounded-lg px-2 py-2.5 text-left text-base/6 font-medium text-zinc-950 sm:py-2 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:last:data-[slot=icon]:ml-auto *:last:data-[slot=icon]:size-5 sm:*:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Current
- 'data-current:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',
- 'dark:data-current:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function SidebarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/stacked-layout.tsx b/catalyst-ui-kit/demo/typescript/src/components/stacked-layout.tsx
deleted file mode 100644
index 5b1c40e1..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/stacked-layout.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }: React.PropsWithChildren<{ open: boolean; close: () => void }>) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function StackedLayout({
- navbar,
- sidebar,
- children,
-}: React.PropsWithChildren<{ navbar: React.ReactNode; sidebar: React.ReactNode }>) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/switch.tsx b/catalyst-ui-kit/demo/typescript/src/components/switch.tsx
deleted file mode 100644
index db40ea4a..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/switch.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function SwitchGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
-
-export function SwitchField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const colors = {
- 'dark/zinc': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-zinc-700)]/90',
- ],
- 'dark/white': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-zinc-900)]',
- ],
- dark: [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:var(--color-white)]/15',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]',
- ],
- zinc: [
- '[--switch-bg-ring:var(--color-zinc-700)]/90 [--switch-bg:var(--color-zinc-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-zinc-700)]/90',
- ],
- white: [
- '[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-zinc-950)]',
- ],
- red: [
- '[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20',
- ],
- orange: [
- '[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20',
- ],
- amber: [
- '[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]',
- ],
- yellow: [
- '[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]',
- ],
- lime: [
- '[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]',
- ],
- green: [
- '[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20',
- ],
- emerald: [
- '[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20',
- ],
- teal: [
- '[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20',
- ],
- cyan: [
- '[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]',
- ],
- sky: [
- '[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20',
- ],
- blue: [
- '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20',
- ],
- indigo: [
- '[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20',
- ],
- violet: [
- '[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20',
- ],
- purple: [
- '[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20',
- ],
- fuchsia: [
- '[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20',
- ],
- pink: [
- '[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20',
- ],
- rose: [
- '[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20',
- ],
-}
-
-type Color = keyof typeof colors
-
-export function Switch({
- color = 'dark/zinc',
- className,
- ...props
-}: {
- color?: Color
- className?: string
-} & Omit) {
- return (
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/table.tsx b/catalyst-ui-kit/demo/typescript/src/components/table.tsx
deleted file mode 100644
index 86423869..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/table.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-'use client'
-
-import clsx from 'clsx'
-import type React from 'react'
-import { createContext, useContext, useState } from 'react'
-import { Link } from './link'
-
-const TableContext = createContext<{ bleed: boolean; dense: boolean; grid: boolean; striped: boolean }>({
- bleed: false,
- dense: false,
- grid: false,
- striped: false,
-})
-
-export function Table({
- bleed = false,
- dense = false,
- grid = false,
- striped = false,
- className,
- children,
- ...props
-}: { bleed?: boolean; dense?: boolean; grid?: boolean; striped?: boolean } & React.ComponentPropsWithoutRef<'div'>) {
- return (
- }>
-
-
- )
-}
-
-export function TableHead({ className, ...props }: React.ComponentPropsWithoutRef<'thead'>) {
- return
-}
-
-export function TableBody(props: React.ComponentPropsWithoutRef<'tbody'>) {
- return
-}
-
-const TableRowContext = createContext<{ href?: string; target?: string; title?: string }>({
- href: undefined,
- target: undefined,
- title: undefined,
-})
-
-export function TableRow({
- href,
- target,
- title,
- className,
- ...props
-}: { href?: string; target?: string; title?: string } & React.ComponentPropsWithoutRef<'tr'>) {
- let { striped } = useContext(TableContext)
-
- return (
- }>
-
-
- )
-}
-
-export function TableHeader({ className, ...props }: React.ComponentPropsWithoutRef<'th'>) {
- let { bleed, grid } = useContext(TableContext)
-
- return (
-
- )
-}
-
-export function TableCell({ className, children, ...props }: React.ComponentPropsWithoutRef<'td'>) {
- let { bleed, dense, grid, striped } = useContext(TableContext)
- let { href, target, title } = useContext(TableRowContext)
- let [cellRef, setCellRef] = useState(null)
-
- return (
-
- {href && (
-
- )}
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/text.tsx b/catalyst-ui-kit/demo/typescript/src/components/text.tsx
deleted file mode 100644
index 2b2512c0..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/text.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import clsx from 'clsx'
-import { Link } from './link'
-
-export function Text({ className, ...props }: React.ComponentPropsWithoutRef<'p'>) {
- return (
-
- )
-}
-
-export function TextLink({ className, ...props }: React.ComponentPropsWithoutRef) {
- return (
-
- )
-}
-
-export function Strong({ className, ...props }: React.ComponentPropsWithoutRef<'strong'>) {
- return
-}
-
-export function Code({ className, ...props }: React.ComponentPropsWithoutRef<'code'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/components/textarea.tsx b/catalyst-ui-kit/demo/typescript/src/components/textarea.tsx
deleted file mode 100644
index d4ef5ef1..00000000
--- a/catalyst-ui-kit/demo/typescript/src/components/textarea.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Textarea = forwardRef(function Textarea(
- {
- className,
- resizable = true,
- ...props
- }: { className?: string; resizable?: boolean } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/demo/typescript/src/data.ts b/catalyst-ui-kit/demo/typescript/src/data.ts
deleted file mode 100644
index aa1ee26f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/data.ts
+++ /dev/null
@@ -1,932 +0,0 @@
-export async function getOrder(id: string) {
- return (await getOrders()).find((order) => order.id.toString() === id)!
-}
-
-export async function getRecentOrders() {
- return (await getOrders()).slice(0, 10)
-}
-
-export async function getOrders() {
- return [
- {
- id: 3000,
- url: '/orders/3000',
- date: 'May 9, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_2HLf8DfYJ0Db7asfCC5T546TY',
- card: {
- number: '1254',
- type: 'American Express',
- expiry: '01 / 2025',
- },
- },
- customer: {
- name: 'Leslie Alexander',
- email: 'leslie.alexander@example.com',
- address: '123 Main St. Toronto, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3001,
- url: '/orders/3001',
- date: 'May 5, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_1KLf7AsYJ0Dda7fs3CC5d46TY',
- card: {
- number: '3897',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Michael Foster',
- email: 'michael.foster@example.com',
- address: '357 Bridge St. New York, NY',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3002,
- url: '/orders/3002',
- date: 'Apr 28, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_2DLf5AsYJ0Ddb7fs3CC5d46TY',
- card: {
- number: '7421',
- type: 'Mastercard',
- expiry: '12 / 2026',
- },
- },
- customer: {
- name: 'Dries Vincent',
- email: 'dries.vincent@example.com',
- address: '456 Elm St. Vancouver, BC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3003,
- url: '/orders/3003',
- date: 'Apr 23, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_3KLf6DfYJ0Db7fassCC546TY',
- card: {
- number: '5683',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Lindsay Walton',
- email: 'lindsay.walton@example.com',
- address: '789 Oak St. Montreal, QC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3004,
- url: '/orders/3004',
- date: 'Apr 18, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_4HLf7DfYJ0Db78fas3C5d6TY',
- card: {
- number: '9576',
- type: 'Visa',
- expiry: '01 / 2025',
- },
- },
- customer: {
- name: 'Courtney Henry',
- email: 'courtney.henry@example.com',
- address: '321 Pine St. Calgary, AB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3005,
- url: '/orders/3005',
- date: 'Apr 14, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_5HLf8DfYJ0Ddb78fas3CC5TY',
- card: {
- number: '2310',
- type: 'Visa',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Tom Cook',
- email: 'tom.cook@example.com',
- address: '741 Lake St. Miami, FL',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3006,
- url: '/orders/3006',
- date: 'Apr 10, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_6KLf9DfYJ0Db7asf3CC54dTY',
- card: {
- number: '6942',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Whitney Francis',
- email: 'whitney.francis@example.com',
- address: '654 Maple St. Ottawa, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3007,
- url: '/orders/3007',
- date: 'Apr 6, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_7KLf6DfYJ0Ddb78fs3C5d6TY',
- card: {
- number: '8473',
- type: 'Visa',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Leonard Krasner',
- email: 'leonard.krasner@example.com',
- address: '987 Birch St. Winnipeg, MB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3008,
- url: '/orders/3008',
- date: 'Apr 3, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_8HLf5AsYJ0Db78fassCC5d6TY',
- card: {
- number: '5061',
- type: 'Visa',
- expiry: '11 / 2026',
- },
- },
- customer: {
- name: 'Floyd Miles',
- email: 'floyd.miles@example.com',
- address: '147 Cedar St. Quebec City, QC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3009,
- url: '/orders/3009',
- date: 'Mar 29, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_9KLf7DfYJ0Ddb78fas3C5dTY',
- card: {
- number: '3129',
- type: 'American Express',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Emily Selman',
- email: 'emily.selman@example.com',
- address: '258 Willow St. Halifax, NS',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3010,
- url: '/orders/3010',
- date: 'Mar 25, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_1KLf8DfYJ0Db78fas3CC54TY',
- card: {
- number: '6498',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Kristin Watson',
- email: 'kristin.watson@example.com',
- address: '369 Spruce St. Edmonton, AB',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3011,
- url: '/orders/3011',
- date: 'Mar 21, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_2KLf9DfYJ0Db78fas3CC546Y',
- card: {
- number: '1732',
- type: 'American Express',
- expiry: '08 / 2024',
- },
- },
- customer: {
- name: 'Emma Dorsey',
- email: 'emma.dorsey@example.com',
- address: '159 Park St. Chicago, IL',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3012,
- url: '/orders/3012',
- date: 'Mar 16, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_3HLf6DfYJ0Db7afs3CC54dTY',
- card: {
- number: '8256',
- type: 'Visa',
- expiry: '01 / 2024',
- },
- },
- customer: {
- name: 'Alicia Bell',
- email: 'alicia.bell@example.com',
- address: '741 Laurel St. Regina, SK',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3013,
- url: '/orders/3013',
- date: 'Mar 12, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_4DLf7DfYJ0Db78fs3CC5d46Y',
- card: {
- number: '4901',
- type: 'Mastercard',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Jenny Wilson',
- email: 'jenny.wilson@example.com',
- address: '852 Ash St. Saskatoon, SK',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3014,
- url: '/orders/3014',
- date: 'Mar 8, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_5KLf8DfYJ0Db78fssCC54TY',
- card: {
- number: '7365',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Anna Roberts',
- email: 'anna.roberts@example.com',
- address: '852 Hill St. Houston, TX',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3015,
- url: '/orders/3015',
- date: 'Mar 4, 2024',
- amount: {
- usd: '$150.00',
- cad: '$205.25',
- fee: '$6.15',
- net: '$199.10',
- },
- payment: {
- transactionId: 'ch_6HLf9DfYJ0Db78fas3CC546TY',
- card: {
- number: '2849',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Benjamin Russel',
- email: 'benjamin.russel@example.com',
- address: '963 Cherry St. Victoria, BC',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1002'),
- },
- {
- id: 3016,
- url: '/orders/3016',
- date: 'Feb 28, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_7HLf6DfYJ0Db78fas3CC546Y',
- card: {
- number: '6132',
- type: 'Mastercard',
- expiry: '01 / 2026',
- },
- },
- customer: {
- name: 'Jeffrey Webb',
- email: 'jeffrey.webb@example.com',
- address: '654 Ocean St. Hamilton, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3017,
- url: '/orders/3017',
- date: 'Feb 23, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_8KLf5DfYJ0Db78fas3CC546TY',
- card: {
- number: '9054',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Kathryn Murphy',
- email: 'kathryn.murphy@example.com',
- address: '357 River St. London, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3018,
- url: '/orders/3018',
- date: 'Feb 19, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_9HLf8DfYJ0Db78fas3CC5dTY',
- card: {
- number: '4287',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Lawrence Hunter',
- email: 'lawrence.hunter@example.com',
- address: '159 Lake St. Mississauga, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3019,
- url: '/orders/3019',
- date: 'Feb 15, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_1HLf9DfYJ0Db78fas3CC54TY',
- card: {
- number: '1765',
- type: 'Visa',
- expiry: '06 / 2025',
- },
- },
- customer: {
- name: 'Yvette Armstrong',
- email: 'yvette.armstrong@example.com',
- address: '852 Forest St. Markham, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3020,
- url: '/orders/3020',
- date: 'Feb 10, 2024',
- amount: {
- usd: '$299.00',
- cad: '$409.13',
- fee: '$12.27',
- net: '$396.86',
- },
- payment: {
- transactionId: 'ch_2DLf6DfYJ0Db78fas3CC546TY',
- card: {
- number: '5923',
- type: 'Visa',
- expiry: '12 / 2024',
- },
- },
- customer: {
- name: 'Angela Fisher',
- email: 'angela.fisher@example.com',
- address: '741 Hill St. Brampton, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1001'),
- },
- {
- id: 3021,
- url: '/orders/3021',
- date: 'Feb 5, 2024',
- amount: {
- usd: '$80.00',
- cad: '$109.47',
- fee: '$3.28',
- net: '$106.19',
- },
- payment: {
- transactionId: 'ch_3KLf5DfYJ0Db78fassCC546TY',
- card: {
- number: '3014',
- type: 'Visa',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Blake Reid',
- email: 'blake.reid@example.com',
- address: '369 Valley St. Oshawa, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1000'),
- },
- {
- id: 3022,
- url: '/orders/3022',
- date: 'Feb 1, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_4HLf8DfYJ0Db78fas3CC546Y',
- card: {
- number: '8642',
- type: 'American Express',
- expiry: '11 / 2026',
- },
- },
- customer: {
- name: 'Hector Gibbons',
- email: 'hector.gibbons@example.com',
- address: '258 Ridge St. Richmond Hill, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3023,
- url: '/orders/3023',
- date: 'Jan 27, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_5KLf9DfYJ0Db78fs3CC546TY',
- card: {
- number: '5173',
- type: 'Visa',
- expiry: '12 / 2025',
- },
- },
- customer: {
- name: 'Fabricio Mendes',
- email: 'fabricio.mendes@example.com',
- address: '147 Park St. Vaughan, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3024,
- url: '/orders/3024',
- date: 'Jan 22, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_6HLf6DfYJ0Db78fas3CC5dTY',
- card: {
- number: '6298',
- type: 'Mastercard',
- expiry: '06 / 2024',
- },
- },
- customer: {
- name: 'Jillian Steward',
- email: 'jillian.steward@example.com',
- address: '987 Grove St. Windsor, ON',
- country: 'Canada',
- countryFlagUrl: '/flags/ca.svg',
- },
- event: await getEvent('1003'),
- },
- {
- id: 3025,
- url: '/orders/3025',
- date: 'Jan 18, 2024',
- amount: {
- usd: '$114.99',
- cad: '$157.34',
- fee: '$4.72',
- net: '$152.62',
- },
- payment: {
- transactionId: 'ch_7HLf7DfYJ0Db78fas3CC546TY',
- card: {
- number: '9401',
- type: 'American Express',
- expiry: '08 / 2025',
- },
- },
- customer: {
- name: 'Chelsea Hagon',
- email: 'chelsea.hagon@example.com',
- address: '654 Court St. Los Angeles, CA',
- country: 'USA',
- countryFlagUrl: '/flags/us.svg',
- },
- event: await getEvent('1003'),
- },
- ]
-}
-
-export async function getEvent(id: string) {
- return (await getEvents()).find((event) => event.id.toString() === id)!
-}
-
-export async function getEventOrders(id: string) {
- return (await getOrders()).filter((order) => order.event.id.toString() === id)
-}
-
-export async function getEvents() {
- return [
- {
- id: 1000,
- name: 'Bear Hug: Live in Concert',
- url: '/events/1000',
- date: 'May 20, 2024',
- time: '10 PM',
- location: 'Harmony Theater, Winnipeg, MB',
- totalRevenue: '$102,552',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 500,
- ticketsSold: 350,
- ticketsSoldChange: '+8.1%',
- pageViews: '24,300',
- pageViewsChange: '-0.75%',
- status: 'On Sale',
- imgUrl: '/events/bear-hug.jpg',
- thumbUrl: '/events/bear-hug-thumb.jpg',
- },
- {
- id: 1001,
- name: 'Six Fingers — DJ Set',
- url: '/events/1001',
- date: 'Jun 2, 2024',
- time: '8 PM',
- location: 'Moonbeam Arena, Uxbridge, ON',
- totalRevenue: '$24,115',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 150,
- ticketsSold: 72,
- ticketsSoldChange: '+8.1%',
- pageViews: '57,544',
- pageViewsChange: '-2.5%',
- status: 'On Sale',
- imgUrl: '/events/six-fingers.jpg',
- thumbUrl: '/events/six-fingers-thumb.jpg',
- },
- {
- id: 1002,
- name: 'We All Look The Same',
- url: '/events/1002',
- date: 'Aug 5, 2024',
- time: '4 PM',
- location: 'Electric Coliseum, New York, NY',
- totalRevenue: '$40,598',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 275,
- ticketsSold: 275,
- ticketsSoldChange: '+8.1%',
- pageViews: '122,122',
- pageViewsChange: '-8.0%',
- status: 'Closed',
- imgUrl: '/events/we-all-look-the-same.jpg',
- thumbUrl: '/events/we-all-look-the-same-thumb.jpg',
- },
- {
- id: 1003,
- name: 'Viking People',
- url: '/events/1003',
- date: 'Dec 31, 2024',
- time: '8 PM',
- location: 'Tapestry Hall, Cambridge, ON',
- totalRevenue: '$3,552',
- totalRevenueChange: '+3.2%',
- ticketsAvailable: 40,
- ticketsSold: 6,
- ticketsSoldChange: '+8.1%',
- pageViews: '9,000',
- pageViewsChange: '-0.15%',
- status: 'On Sale',
- imgUrl: '/events/viking-people.jpg',
- thumbUrl: '/events/viking-people-thumb.jpg',
- },
- ]
-}
-
-export function getCountries() {
- return [
- {
- name: 'Canada',
- code: 'CA',
- flagUrl: '/flags/ca.svg',
- regions: [
- 'Alberta',
- 'British Columbia',
- 'Manitoba',
- 'New Brunswick',
- 'Newfoundland and Labrador',
- 'Northwest Territories',
- 'Nova Scotia',
- 'Nunavut',
- 'Ontario',
- 'Prince Edward Island',
- 'Quebec',
- 'Saskatchewan',
- 'Yukon',
- ],
- },
- {
- name: 'Mexico',
- code: 'MX',
- flagUrl: '/flags/mx.svg',
- regions: [
- 'Aguascalientes',
- 'Baja California',
- 'Baja California Sur',
- 'Campeche',
- 'Chiapas',
- 'Chihuahua',
- 'Ciudad de Mexico',
- 'Coahuila',
- 'Colima',
- 'Durango',
- 'Guanajuato',
- 'Guerrero',
- 'Hidalgo',
- 'Jalisco',
- 'Mexico State',
- 'Michoacán',
- 'Morelos',
- 'Nayarit',
- 'Nuevo León',
- 'Oaxaca',
- 'Puebla',
- 'Querétaro',
- 'Quintana Roo',
- 'San Luis Potosí',
- 'Sinaloa',
- 'Sonora',
- 'Tabasco',
- 'Tamaulipas',
- 'Tlaxcala',
- 'Veracruz',
- 'Yucatán',
- 'Zacatecas',
- ],
- },
- {
- name: 'United States',
- code: 'US',
- flagUrl: '/flags/us.svg',
- regions: [
- 'Alabama',
- 'Alaska',
- 'American Samoa',
- 'Arizona',
- 'Arkansas',
- 'California',
- 'Colorado',
- 'Connecticut',
- 'Delaware',
- 'Washington DC',
- 'Micronesia',
- 'Florida',
- 'Georgia',
- 'Guam',
- 'Hawaii',
- 'Idaho',
- 'Illinois',
- 'Indiana',
- 'Iowa',
- 'Kansas',
- 'Kentucky',
- 'Louisiana',
- 'Maine',
- 'Marshall Islands',
- 'Maryland',
- 'Massachusetts',
- 'Michigan',
- 'Minnesota',
- 'Mississippi',
- 'Missouri',
- 'Montana',
- 'Nebraska',
- 'Nevada',
- 'New Hampshire',
- 'New Jersey',
- 'New Mexico',
- 'New York',
- 'North Carolina',
- 'North Dakota',
- 'Northern Mariana Islands',
- 'Ohio',
- 'Oklahoma',
- 'Oregon',
- 'Palau',
- 'Pennsylvania',
- 'Puerto Rico',
- 'Rhode Island',
- 'South Carolina',
- 'South Dakota',
- 'Tennessee',
- 'Texas',
- 'Utah',
- 'Vermont',
- 'U.S. Virgin Islands',
- 'Virginia',
- 'Washington',
- 'West Virginia',
- 'Wisconsin',
- 'Wyoming',
- 'Armed Forces Americas',
- 'Armed Forces Europe',
- 'Armed Forces Pacific',
- ],
- },
- ]
-}
diff --git a/catalyst-ui-kit/demo/typescript/src/styles/tailwind.css b/catalyst-ui-kit/demo/typescript/src/styles/tailwind.css
deleted file mode 100644
index 32ed686f..00000000
--- a/catalyst-ui-kit/demo/typescript/src/styles/tailwind.css
+++ /dev/null
@@ -1,6 +0,0 @@
-@import 'tailwindcss';
-
-@theme {
- --font-sans: Inter, sans-serif;
- --font-sans--font-feature-settings: 'cv11';
-}
diff --git a/catalyst-ui-kit/demo/typescript/tsconfig.json b/catalyst-ui-kit/demo/typescript/tsconfig.json
deleted file mode 100644
index 51d0dbce..00000000
--- a/catalyst-ui-kit/demo/typescript/tsconfig.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "compilerOptions": {
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/*": ["./src/*"]
- },
- "target": "ES2017"
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
-}
diff --git a/catalyst-ui-kit/javascript/alert.jsx b/catalyst-ui-kit/javascript/alert.jsx
deleted file mode 100644
index 14c871e3..00000000
--- a/catalyst-ui-kit/javascript/alert.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Alert({ size = 'md', className, children, ...props }) {
- return (
-
-
-
-
-
- )
-}
-
-export function AlertTitle({ className, ...props }) {
- return (
-
- )
-}
-
-export function AlertDescription({ className, ...props }) {
- return (
-
- )
-}
-
-export function AlertBody({ className, ...props }) {
- return
-}
-
-export function AlertActions({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/auth-layout.jsx b/catalyst-ui-kit/javascript/auth-layout.jsx
deleted file mode 100644
index b8a8ae88..00000000
--- a/catalyst-ui-kit/javascript/auth-layout.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-export function AuthLayout({ children }) {
- return (
-
-
- {children}
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/avatar.jsx b/catalyst-ui-kit/javascript/avatar.jsx
deleted file mode 100644
index 28f83d0f..00000000
--- a/catalyst-ui-kit/javascript/avatar.jsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Avatar({ src = null, square = false, initials, alt = '', className, ...props }) {
- return (
-
- {initials && (
-
- {alt && {alt} }
-
- {initials}
-
-
- )}
- {src && }
-
- )
-}
-
-export const AvatarButton = forwardRef(function AvatarButton(
- { src, square = false, initials, alt, className, ...props },
- ref
-) {
- let classes = clsx(
- className,
- square ? 'rounded-[20%]' : 'rounded-full',
- 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
-
-
-
-
-
- ) : (
-
-
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/javascript/badge.jsx b/catalyst-ui-kit/javascript/badge.jsx
deleted file mode 100644
index c1cc6e1a..00000000
--- a/catalyst-ui-kit/javascript/badge.jsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-const colors = {
- red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-data-hover:bg-red-500/20',
- orange:
- 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-400 dark:group-data-hover:bg-orange-500/20',
- amber:
- 'bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-data-hover:bg-amber-400/15',
- yellow:
- 'bg-yellow-400/20 text-yellow-700 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-300 dark:group-data-hover:bg-yellow-400/15',
- lime: 'bg-lime-400/20 text-lime-700 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-300 dark:group-data-hover:bg-lime-400/15',
- green:
- 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-400 dark:group-data-hover:bg-green-500/20',
- emerald:
- 'bg-emerald-500/15 text-emerald-700 group-data-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-400 dark:group-data-hover:bg-emerald-500/20',
- teal: 'bg-teal-500/15 text-teal-700 group-data-hover:bg-teal-500/25 dark:bg-teal-500/10 dark:text-teal-300 dark:group-data-hover:bg-teal-500/20',
- cyan: 'bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15',
- sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',
- blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-400 dark:group-data-hover:bg-blue-500/25',
- indigo:
- 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-400 dark:group-data-hover:bg-indigo-500/20',
- violet:
- 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-400 dark:group-data-hover:bg-violet-500/20',
- purple:
- 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-400 dark:group-data-hover:bg-purple-500/20',
- fuchsia:
- 'bg-fuchsia-400/15 text-fuchsia-700 group-data-hover:bg-fuchsia-400/25 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:group-data-hover:bg-fuchsia-400/20',
- pink: 'bg-pink-400/15 text-pink-700 group-data-hover:bg-pink-400/25 dark:bg-pink-400/10 dark:text-pink-400 dark:group-data-hover:bg-pink-400/20',
- rose: 'bg-rose-400/15 text-rose-700 group-data-hover:bg-rose-400/25 dark:bg-rose-400/10 dark:text-rose-400 dark:group-data-hover:bg-rose-400/20',
- zinc: 'bg-zinc-600/10 text-zinc-700 group-data-hover:bg-zinc-600/20 dark:bg-white/5 dark:text-zinc-400 dark:group-data-hover:bg-white/10',
-}
-
-export function Badge({ color = 'zinc', className, ...props }) {
- return (
-
- )
-}
-
-export const BadgeButton = forwardRef(function BadgeButton(
- { color = 'zinc', className, children, ...props },
-
- ref
-) {
- let classes = clsx(
- className,
- 'group relative inline-flex rounded-md focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
-
-
- {children}
-
-
- ) : (
-
-
- {children}
-
-
- )
-})
diff --git a/catalyst-ui-kit/javascript/button.jsx b/catalyst-ui-kit/javascript/button.jsx
deleted file mode 100644
index 6d3b3cda..00000000
--- a/catalyst-ui-kit/javascript/button.jsx
+++ /dev/null
@@ -1,192 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { Link } from './link'
-
-const styles = {
- base: [
- // Base
- 'relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',
- // Sizing
- 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',
- // Focus
- 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',
- // Disabled
- 'data-disabled:opacity-50',
- // Icon
- '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',
- ],
- solid: [
- // Optical border, implemented as the button background to avoid corner artifacts
- 'border-transparent bg-(--btn-border)',
- // Dark mode: border is rendered on `after` so background is set to button background
- 'dark:bg-(--btn-bg)',
- // Button background, implemented as foreground layer to stack on top of pseudo-border layer
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',
- // Drop shadow, applied to the inset `before` layer so it blends with the border
- 'before:shadow-sm',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Dark mode: Subtle white outline is applied using a border
- 'dark:border-white/5',
- // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow
- 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',
- // Inner highlight shadow
- 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- // White overlay on hover
- 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',
- // Dark mode: `after` layer expands to cover entire button
- 'dark:after:-inset-px dark:after:rounded-lg',
- // Disabled
- 'data-disabled:before:shadow-none data-disabled:after:shadow-none',
- ],
- outline: [
- // Base
- 'border-zinc-950/10 text-zinc-950 data-active:bg-zinc-950/2.5 data-hover:bg-zinc-950/2.5',
- // Dark mode
- 'dark:border-white/15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:data-hover:bg-white/5',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- plain: [
- // Base
- 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',
- // Dark mode
- 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- colors: {
- 'dark/zinc': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- light: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- 'dark/white': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- dark: [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- white: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',
- ],
- zinc: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- indigo: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',
- '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',
- ],
- cyan: [
- 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',
- '[--btn-icon:var(--color-cyan-500)]',
- ],
- red: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',
- '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',
- ],
- orange: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',
- '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',
- ],
- amber: [
- 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',
- '[--btn-icon:var(--color-amber-600)]',
- ],
- yellow: [
- 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',
- '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',
- ],
- lime: [
- 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',
- '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',
- ],
- green: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- emerald: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- teal: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- sky: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- blue: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',
- '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',
- ],
- violet: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',
- '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',
- ],
- purple: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',
- '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',
- ],
- fuchsia: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',
- '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',
- ],
- pink: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',
- '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',
- ],
- rose: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',
- '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',
- ],
- },
-}
-
-export const Button = forwardRef(function Button({ color, outline, plain, className, children, ...props }, ref) {
- let classes = clsx(
- className,
- styles.base,
- outline ? styles.outline : plain ? styles.plain : clsx(styles.solid, styles.colors[color ?? 'dark/zinc'])
- )
-
- return 'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )
-})
-
-/**
- * Expand the hit area to at least 44×44px on touch devices
- */
-export function TouchTarget({ children }) {
- return (
- <>
-
- {children}
- >
- )
-}
diff --git a/catalyst-ui-kit/javascript/checkbox.jsx b/catalyst-ui-kit/javascript/checkbox.jsx
deleted file mode 100644
index 53a407b8..00000000
--- a/catalyst-ui-kit/javascript/checkbox.jsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function CheckboxGroup({ className, ...props }) {
- return (
-
- )
-}
-
-export function CheckboxField({ className, ...props }) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.5 items-center justify-center rounded-[0.3125rem] sm:size-4',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(0.3125rem-1px)] before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--checkbox-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--checkbox-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--checkbox-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-[calc(0.3125rem-1px)] after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-[0.3125rem] dark:group-data-checked:after:block',
- // Focus ring
- 'group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--checkbox-check:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--checkbox-check:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
- // Forced colors mode
- 'forced-colors:[--checkbox-check:HighlightText] forced-colors:[--checkbox-checked-bg:Highlight] forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
- 'dark:forced-colors:[--checkbox-check:HighlightText] dark:forced-colors:[--checkbox-checked-bg:Highlight] dark:forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-check:var(--color-zinc-900)] dark:[--checkbox-checked-bg:var(--color-white)] dark:[--checkbox-checked-border:var(--color-zinc-950)]/15',
- ],
- white:
- '[--checkbox-check:var(--color-zinc-900)] [--checkbox-checked-bg:var(--color-white)] [--checkbox-checked-border:var(--color-zinc-950)]/15',
- dark: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- zinc: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-600)] [--checkbox-checked-border:var(--color-zinc-700)]/90',
- red: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-red-600)] [--checkbox-checked-border:var(--color-red-700)]/90',
- orange:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-orange-500)] [--checkbox-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--checkbox-check:var(--color-amber-950)] [--checkbox-checked-bg:var(--color-amber-400)] [--checkbox-checked-border:var(--color-amber-500)]/80',
- yellow:
- '[--checkbox-check:var(--color-yellow-950)] [--checkbox-checked-bg:var(--color-yellow-300)] [--checkbox-checked-border:var(--color-yellow-400)]/80',
- lime: '[--checkbox-check:var(--color-lime-950)] [--checkbox-checked-bg:var(--color-lime-300)] [--checkbox-checked-border:var(--color-lime-400)]/80',
- green:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-green-600)] [--checkbox-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-emerald-600)] [--checkbox-checked-border:var(--color-emerald-700)]/90',
- teal: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-teal-600)] [--checkbox-checked-border:var(--color-teal-700)]/90',
- cyan: '[--checkbox-check:var(--color-cyan-950)] [--checkbox-checked-bg:var(--color-cyan-300)] [--checkbox-checked-border:var(--color-cyan-400)]/80',
- sky: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-sky-500)] [--checkbox-checked-border:var(--color-sky-600)]/80',
- blue: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-blue-600)] [--checkbox-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-indigo-500)] [--checkbox-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-violet-500)] [--checkbox-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-purple-500)] [--checkbox-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-fuchsia-500)] [--checkbox-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-pink-500)] [--checkbox-checked-border:var(--color-pink-600)]/90',
- rose: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-rose-500)] [--checkbox-checked-border:var(--color-rose-600)]/90',
-}
-
-export function Checkbox({ color = 'dark/zinc', className, ...props }) {
- return (
-
-
-
- {/* Checkmark icon */}
-
- {/* Indeterminate icon */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/combobox.jsx b/catalyst-ui-kit/javascript/combobox.jsx
deleted file mode 100644
index e9c4d9df..00000000
--- a/catalyst-ui-kit/javascript/combobox.jsx
+++ /dev/null
@@ -1,172 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { useState } from 'react'
-
-export function Combobox({
- options,
- displayValue,
- filter,
- anchor = 'bottom',
- className,
- placeholder,
- autoFocus,
- 'aria-label': ariaLabel,
- children,
- ...props
-}) {
- const [query, setQuery] = useState('')
-
- const filteredOptions =
- query === ''
- ? options
- : options.filter((option) =>
- filter ? filter(option, query) : displayValue(option)?.toLowerCase().includes(query.toLowerCase())
- )
-
- return (
- setQuery('')}>
-
- displayValue(option) ?? ''}
- onChange={(event) => setQuery(event.target.value)}
- placeholder={placeholder}
- className={clsx([
- className,
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Horizontal padding
- 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',
- // Border
- 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Hide default focus styles
- 'focus:outline-hidden',
- // Invalid state
- 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-500 dark:data-invalid:data-hover:border-red-500',
- // Disabled state
- 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',
- // System icons
- 'dark:scheme-dark',
- ])}
- />
-
-
-
-
-
-
-
-
- {({ option }) => children(option)}
-
-
- )
-}
-
-export function ComboboxOption({ children, className, ...props }) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {children}
-
-
-
-
- )
-}
-
-export function ComboboxLabel({ className, ...props }) {
- return
-}
-
-export function ComboboxDescription({ className, children, ...props }) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/description-list.jsx b/catalyst-ui-kit/javascript/description-list.jsx
deleted file mode 100644
index e7954362..00000000
--- a/catalyst-ui-kit/javascript/description-list.jsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import clsx from 'clsx'
-
-export function DescriptionList({ className, ...props }) {
- return (
-
- )
-}
-
-export function DescriptionTerm({ className, ...props }) {
- return (
-
- )
-}
-
-export function DescriptionDetails({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/dialog.jsx b/catalyst-ui-kit/javascript/dialog.jsx
deleted file mode 100644
index 57b032c4..00000000
--- a/catalyst-ui-kit/javascript/dialog.jsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Dialog({ size = 'lg', className, children, ...props }) {
- return (
-
-
-
-
-
- )
-}
-
-export function DialogTitle({ className, ...props }) {
- return (
-
- )
-}
-
-export function DialogDescription({ className, ...props }) {
- return
-}
-
-export function DialogBody({ className, ...props }) {
- return
-}
-
-export function DialogActions({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/divider.jsx b/catalyst-ui-kit/javascript/divider.jsx
deleted file mode 100644
index 7e1bb60f..00000000
--- a/catalyst-ui-kit/javascript/divider.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import clsx from 'clsx'
-
-export function Divider({ soft = false, className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/dropdown.jsx b/catalyst-ui-kit/javascript/dropdown.jsx
deleted file mode 100644
index dad9ab87..00000000
--- a/catalyst-ui-kit/javascript/dropdown.jsx
+++ /dev/null
@@ -1,154 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-import { Button } from './button'
-import { Link } from './link'
-
-export function Dropdown(props) {
- return
-}
-
-export function DropdownButton({ as = Button, ...props }) {
- return
-}
-
-export function DropdownMenu({ anchor = 'bottom', className, ...props }) {
- return (
-
- )
-}
-
-export function DropdownItem({ className, ...props }) {
- let classes = clsx(
- className,
- // Base styles
- 'group cursor-default rounded-lg px-3.5 py-2.5 focus:outline-hidden sm:px-3 sm:py-1.5',
- // Text styles
- 'text-left text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Focus
- 'data-focus:bg-blue-500 data-focus:text-white',
- // Disabled state
- 'data-disabled:opacity-50',
- // Forced colors mode
- 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText] forced-colors:data-focus:*:data-[slot=icon]:text-[HighlightText]',
- // Use subgrid when available but fallback to an explicit grid layout if not
- 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] items-center supports-[grid-template-columns:subgrid]:grid-cols-subgrid',
- // Icons
- '*:data-[slot=icon]:col-start-1 *:data-[slot=icon]:row-start-1 *:data-[slot=icon]:mr-2.5 *:data-[slot=icon]:-ml-0.5 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:mr-2 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 data-focus:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400 dark:data-focus:*:data-[slot=icon]:text-white',
- // Avatar
- '*:data-[slot=avatar]:mr-2.5 *:data-[slot=avatar]:-ml-1 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:mr-2 sm:*:data-[slot=avatar]:size-5'
- )
-
- return 'href' in props ? (
-
- ) : (
-
- )
-}
-
-export function DropdownHeader({ className, ...props }) {
- return
-}
-
-export function DropdownSection({ className, ...props }) {
- return (
-
- )
-}
-
-export function DropdownHeading({ className, ...props }) {
- return (
-
- )
-}
-
-export function DropdownDivider({ className, ...props }) {
- return (
-
- )
-}
-
-export function DropdownLabel({ className, ...props }) {
- return
-}
-
-export function DropdownDescription({ className, ...props }) {
- return (
-
- )
-}
-
-export function DropdownShortcut({ keys, className, ...props }) {
- return (
-
- {(Array.isArray(keys) ? keys : keys.split('')).map((char, index) => (
- 0 && char.length > 1 && 'pl-1',
- ])}
- >
- {char}
-
- ))}
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/fieldset.jsx b/catalyst-ui-kit/javascript/fieldset.jsx
deleted file mode 100644
index 2ae777a5..00000000
--- a/catalyst-ui-kit/javascript/fieldset.jsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function Fieldset({ className, ...props }) {
- return (
- *+[data-slot=control]]:mt-6')}
- />
- )
-}
-
-export function Legend({ className, ...props }) {
- return (
-
- )
-}
-
-export function FieldGroup({ className, ...props }) {
- return
-}
-
-export function Field({ className, ...props }) {
- return (
- [data-slot=label]+[data-slot=control]]:mt-3',
- '[&>[data-slot=label]+[data-slot=description]]:mt-1',
- '[&>[data-slot=description]+[data-slot=control]]:mt-3',
- '[&>[data-slot=control]+[data-slot=description]]:mt-3',
- '[&>[data-slot=control]+[data-slot=error]]:mt-3',
- '*:data-[slot=label]:font-medium'
- )}
- />
- )
-}
-
-export function Label({ className, ...props }) {
- return (
-
- )
-}
-
-export function Description({ className, ...props }) {
- return (
-
- )
-}
-
-export function ErrorMessage({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/heading.jsx b/catalyst-ui-kit/javascript/heading.jsx
deleted file mode 100644
index 194fb338..00000000
--- a/catalyst-ui-kit/javascript/heading.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import clsx from 'clsx'
-
-export function Heading({ className, level = 1, ...props }) {
- let Element = `h${level}`
-
- return (
-
- )
-}
-
-export function Subheading({ className, level = 2, ...props }) {
- let Element = `h${level}`
-
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/input.jsx b/catalyst-ui-kit/javascript/input.jsx
deleted file mode 100644
index dcd121f6..00000000
--- a/catalyst-ui-kit/javascript/input.jsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export function InputGroup({ children }) {
- return (
- [data-slot=icon]:first-child]:left-3 sm:[&>[data-slot=icon]:first-child]:left-2.5 [&>[data-slot=icon]:last-child]:right-3 sm:[&>[data-slot=icon]:last-child]:right-2.5',
- '*:data-[slot=icon]:text-zinc-500 dark:*:data-[slot=icon]:text-zinc-400'
- )}
- >
- {children}
-
- )
-}
-
-const dateTypes = ['date', 'datetime-local', 'month', 'time', 'week']
-
-export const Input = forwardRef(function Input(
- { className, ...props },
-
- ref
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/javascript/link.jsx b/catalyst-ui-kit/javascript/link.jsx
deleted file mode 100644
index 560bb898..00000000
--- a/catalyst-ui-kit/javascript/link.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * TODO: Update this component to use your client-side framework's link
- * component. We've provided examples of how to do this for Next.js, Remix, and
- * Inertia.js in the Catalyst documentation:
- *
- * https://catalyst.tailwindui.com/docs#client-side-router-integration
- */
-
-import * as Headless from '@headlessui/react'
-import React, { forwardRef } from 'react'
-
-export const Link = forwardRef(function Link(props, ref) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/javascript/listbox.jsx b/catalyst-ui-kit/javascript/listbox.jsx
deleted file mode 100644
index e4ce1929..00000000
--- a/catalyst-ui-kit/javascript/listbox.jsx
+++ /dev/null
@@ -1,157 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { Fragment } from 'react'
-
-export function Listbox({ className, placeholder, autoFocus, 'aria-label': ariaLabel, children: options, ...props }) {
- return (
-
-
- {placeholder}}
- className={clsx([
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Set minimum height for when no value is selected
- 'min-h-11 sm:min-h-9',
- // Horizontal padding
- 'pr-[calc(--spacing(7)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-left text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Border
- 'border border-zinc-950/10 group-data-active:border-zinc-950/20 group-data-hover:border-zinc-950/20 dark:border-white/10 dark:group-data-active:border-white/20 dark:group-data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Invalid state
- 'group-data-invalid:border-red-500 group-data-hover:group-data-invalid:border-red-500 dark:group-data-invalid:border-red-600 dark:data-hover:group-data-invalid:border-red-600',
- // Disabled state
- 'group-data-disabled:border-zinc-950/20 group-data-disabled:opacity-100 dark:group-data-disabled:border-white/15 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:data-hover:border-white/15',
- ])}
- />
-
-
-
-
-
-
-
-
- {options}
-
-
- )
-}
-
-export function ListboxOption({ children, className, ...props }) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {({ selectedOption }) => {
- if (selectedOption) {
- return {children}
- }
-
- return (
-
- )
- }}
-
- )
-}
-
-export function ListboxLabel({ className, ...props }) {
- return
-}
-
-export function ListboxDescription({ className, children, ...props }) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/navbar.jsx b/catalyst-ui-kit/javascript/navbar.jsx
deleted file mode 100644
index dff6ebdf..00000000
--- a/catalyst-ui-kit/javascript/navbar.jsx
+++ /dev/null
@@ -1,84 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Navbar({ className, ...props }) {
- return
-}
-
-export function NavbarDivider({ className, ...props }) {
- return
-}
-
-export function NavbarSection({ className, ...props }) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function NavbarSpacer({ className, ...props }) {
- return
-}
-
-export const NavbarItem = forwardRef(function NavbarItem(
- { current, className, children, ...props },
-
- ref
-) {
- let classes = clsx(
- // Base
- 'relative flex min-w-0 items-center gap-3 rounded-lg p-2 text-left text-base/6 font-medium text-zinc-950 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:not-nth-2:last:data-[slot=icon]:ml-auto *:not-nth-2:last:data-[slot=icon]:size-5 sm:*:not-nth-2:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 *:data-[slot=avatar]:[--avatar-radius:var(--radius-md)] sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function NavbarLabel({ className, ...props }) {
- return
-}
diff --git a/catalyst-ui-kit/javascript/pagination.jsx b/catalyst-ui-kit/javascript/pagination.jsx
deleted file mode 100644
index 942df44e..00000000
--- a/catalyst-ui-kit/javascript/pagination.jsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import clsx from 'clsx'
-
-import { Button } from './button'
-
-export function Pagination({ 'aria-label': ariaLabel = 'Page navigation', className, ...props }) {
- return
-}
-
-export function PaginationPrevious({ href = null, className, children = 'Previous' }) {
- return (
-
-
-
-
-
- {children}
-
-
- )
-}
-
-export function PaginationNext({ href = null, className, children = 'Next' }) {
- return (
-
-
- {children}
-
-
-
-
-
- )
-}
-
-export function PaginationList({ className, ...props }) {
- return
-}
-
-export function PaginationPage({ href, className, current = false, children }) {
- return (
-
- {children}
-
- )
-}
-
-export function PaginationGap({ className, children = <>…>, ...props }) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/radio.jsx b/catalyst-ui-kit/javascript/radio.jsx
deleted file mode 100644
index adbcacfc..00000000
--- a/catalyst-ui-kit/javascript/radio.jsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function RadioGroup({ className, ...props }) {
- return (
-
- )
-}
-
-export function RadioField({ className, ...props }) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.75 shrink-0 rounded-full sm:size-4.25',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-full before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--radio-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--radio-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--radio-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-full dark:group-data-checked:after:block',
- // Indicator color (light mode)
- '[--radio-indicator:transparent] group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:[--radio-indicator:var(--color-zinc-900)]/10',
- // Indicator color (dark mode)
- 'dark:group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] dark:group-data-hover:[--radio-indicator:var(--color-zinc-700)]',
- // Focus ring
- 'group-data-focus:outline group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--radio-checked-indicator:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--radio-checked-indicator:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-white)] dark:[--radio-checked-border:var(--color-zinc-950)]/15 dark:[--radio-checked-indicator:var(--color-zinc-900)]',
- ],
- white:
- '[--radio-checked-bg:var(--color-white)] [--radio-checked-border:var(--color-zinc-950)]/15 [--radio-checked-indicator:var(--color-zinc-900)]',
- dark: '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- zinc: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-zinc-600)] [--radio-checked-border:var(--color-zinc-700)]/90',
- red: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-red-600)] [--radio-checked-border:var(--color-red-700)]/90',
- orange:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-orange-500)] [--radio-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--radio-checked-bg:var(--color-amber-400)] [--radio-checked-border:var(--color-amber-500)]/80 [--radio-checked-indicator:var(--color-amber-950)]',
- yellow:
- '[--radio-checked-bg:var(--color-yellow-300)] [--radio-checked-border:var(--color-yellow-400)]/80 [--radio-checked-indicator:var(--color-yellow-950)]',
- lime: '[--radio-checked-bg:var(--color-lime-300)] [--radio-checked-border:var(--color-lime-400)]/80 [--radio-checked-indicator:var(--color-lime-950)]',
- green:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-green-600)] [--radio-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-emerald-600)] [--radio-checked-border:var(--color-emerald-700)]/90',
- teal: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-teal-600)] [--radio-checked-border:var(--color-teal-700)]/90',
- cyan: '[--radio-checked-bg:var(--color-cyan-300)] [--radio-checked-border:var(--color-cyan-400)]/80 [--radio-checked-indicator:var(--color-cyan-950)]',
- sky: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-sky-500)] [--radio-checked-border:var(--color-sky-600)]/80',
- blue: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-blue-600)] [--radio-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-indigo-500)] [--radio-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-violet-500)] [--radio-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-purple-500)] [--radio-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-fuchsia-500)] [--radio-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-pink-500)] [--radio-checked-border:var(--color-pink-600)]/90',
- rose: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-rose-500)] [--radio-checked-border:var(--color-rose-600)]/90',
-}
-
-export function Radio({ color = 'dark/zinc', className, ...props }) {
- return (
-
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/select.jsx b/catalyst-ui-kit/javascript/select.jsx
deleted file mode 100644
index 2e076ce4..00000000
--- a/catalyst-ui-kit/javascript/select.jsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Select = forwardRef(function Select({ className, multiple, ...props }, ref) {
- return (
-
-
- {!multiple && (
-
-
-
-
-
-
- )}
-
- )
-})
diff --git a/catalyst-ui-kit/javascript/sidebar-layout.jsx b/catalyst-ui-kit/javascript/sidebar-layout.jsx
deleted file mode 100644
index ed4d0aaf..00000000
--- a/catalyst-ui-kit/javascript/sidebar-layout.jsx
+++ /dev/null
@@ -1,78 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function SidebarLayout({ navbar, sidebar, children }) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on desktop */}
-
{sidebar}
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar on mobile */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/sidebar.jsx b/catalyst-ui-kit/javascript/sidebar.jsx
deleted file mode 100644
index 71a20a9d..00000000
--- a/catalyst-ui-kit/javascript/sidebar.jsx
+++ /dev/null
@@ -1,135 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Sidebar({ className, ...props }) {
- return
-}
-
-export function SidebarHeader({ className, ...props }) {
- return (
- [data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarBody({ className, ...props }) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-8'
- )}
- />
- )
-}
-
-export function SidebarFooter({ className, ...props }) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarSection({ className, ...props }) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function SidebarDivider({ className, ...props }) {
- return
-}
-
-export function SidebarSpacer({ className, ...props }) {
- return
-}
-
-export function SidebarHeading({ className, ...props }) {
- return (
-
- )
-}
-
-export const SidebarItem = forwardRef(function SidebarItem(
- { current, className, children, ...props },
-
- ref
-) {
- let classes = clsx(
- // Base
- 'flex w-full items-center gap-3 rounded-lg px-2 py-2.5 text-left text-base/6 font-medium text-zinc-950 sm:py-2 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:last:data-[slot=icon]:ml-auto *:last:data-[slot=icon]:size-5 sm:*:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Current
- 'data-current:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',
- 'dark:data-current:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function SidebarLabel({ className, ...props }) {
- return
-}
diff --git a/catalyst-ui-kit/javascript/stacked-layout.jsx b/catalyst-ui-kit/javascript/stacked-layout.jsx
deleted file mode 100644
index 3132712f..00000000
--- a/catalyst-ui-kit/javascript/stacked-layout.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function StackedLayout({ navbar, sidebar, children }) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/switch.jsx b/catalyst-ui-kit/javascript/switch.jsx
deleted file mode 100644
index 10ca4ac6..00000000
--- a/catalyst-ui-kit/javascript/switch.jsx
+++ /dev/null
@@ -1,182 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function SwitchGroup({ className, ...props }) {
- return (
-
- )
-}
-
-export function SwitchField({ className, ...props }) {
- return (
-
- )
-}
-
-const colors = {
- 'dark/zinc': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-zinc-700)]/90',
- ],
- 'dark/white': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-zinc-900)]',
- ],
- dark: [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:var(--color-white)]/15',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]',
- ],
- zinc: [
- '[--switch-bg-ring:var(--color-zinc-700)]/90 [--switch-bg:var(--color-zinc-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-zinc-700)]/90',
- ],
- white: [
- '[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-zinc-950)]',
- ],
- red: [
- '[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20',
- ],
- orange: [
- '[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20',
- ],
- amber: [
- '[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]',
- ],
- yellow: [
- '[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]',
- ],
- lime: [
- '[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]',
- ],
- green: [
- '[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20',
- ],
- emerald: [
- '[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20',
- ],
- teal: [
- '[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20',
- ],
- cyan: [
- '[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]',
- ],
- sky: [
- '[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20',
- ],
- blue: [
- '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20',
- ],
- indigo: [
- '[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20',
- ],
- violet: [
- '[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20',
- ],
- purple: [
- '[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20',
- ],
- fuchsia: [
- '[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20',
- ],
- pink: [
- '[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20',
- ],
- rose: [
- '[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20',
- ],
-}
-
-export function Switch({ color = 'dark/zinc', className, ...props }) {
- return (
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/table.jsx b/catalyst-ui-kit/javascript/table.jsx
deleted file mode 100644
index 07300ed1..00000000
--- a/catalyst-ui-kit/javascript/table.jsx
+++ /dev/null
@@ -1,109 +0,0 @@
-'use client'
-
-import clsx from 'clsx'
-import { createContext, useContext, useState } from 'react'
-import { Link } from './link'
-
-const TableContext = createContext({
- bleed: false,
- dense: false,
- grid: false,
- striped: false,
-})
-
-export function Table({ bleed = false, dense = false, grid = false, striped = false, className, children, ...props }) {
- return (
-
-
-
- )
-}
-
-export function TableHead({ className, ...props }) {
- return
-}
-
-export function TableBody(props) {
- return
-}
-
-const TableRowContext = createContext({
- href: undefined,
- target: undefined,
- title: undefined,
-})
-
-export function TableRow({ href, target, title, className, ...props }) {
- let { striped } = useContext(TableContext)
-
- return (
-
-
-
- )
-}
-
-export function TableHeader({ className, ...props }) {
- let { bleed, grid } = useContext(TableContext)
-
- return (
-
- )
-}
-
-export function TableCell({ className, children, ...props }) {
- let { bleed, dense, grid, striped } = useContext(TableContext)
- let { href, target, title } = useContext(TableRowContext)
- let [cellRef, setCellRef] = useState(null)
-
- return (
-
- {href && (
-
- )}
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/text.jsx b/catalyst-ui-kit/javascript/text.jsx
deleted file mode 100644
index 402801bc..00000000
--- a/catalyst-ui-kit/javascript/text.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import clsx from 'clsx'
-import { Link } from './link'
-
-export function Text({ className, ...props }) {
- return (
-
- )
-}
-
-export function TextLink({ className, ...props }) {
- return (
-
- )
-}
-
-export function Strong({ className, ...props }) {
- return
-}
-
-export function Code({ className, ...props }) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/javascript/textarea.jsx b/catalyst-ui-kit/javascript/textarea.jsx
deleted file mode 100644
index 5ecc0bcb..00000000
--- a/catalyst-ui-kit/javascript/textarea.jsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Textarea = forwardRef(function Textarea({ className, resizable = true, ...props }, ref) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/alert.tsx b/catalyst-ui-kit/typescript/alert.tsx
deleted file mode 100644
index 9369921d..00000000
--- a/catalyst-ui-kit/typescript/alert.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Alert({
- size = 'md',
- className,
- children,
- ...props
-}: { size?: keyof typeof sizes; className?: string; children: React.ReactNode } & Omit<
- Headless.DialogProps,
- 'as' | 'className'
->) {
- return (
-
-
-
-
-
- )
-}
-
-export function AlertTitle({
- className,
- ...props
-}: { className?: string } & Omit
) {
- return (
-
- )
-}
-
-export function AlertDescription({
- className,
- ...props
-}: { className?: string } & Omit, 'as' | 'className'>) {
- return (
-
- )
-}
-
-export function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/auth-layout.tsx b/catalyst-ui-kit/typescript/auth-layout.tsx
deleted file mode 100644
index 52309ea3..00000000
--- a/catalyst-ui-kit/typescript/auth-layout.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import type React from 'react'
-
-export function AuthLayout({ children }: { children: React.ReactNode }) {
- return (
-
-
- {children}
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/avatar.tsx b/catalyst-ui-kit/typescript/avatar.tsx
deleted file mode 100644
index 7422f211..00000000
--- a/catalyst-ui-kit/typescript/avatar.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-type AvatarProps = {
- src?: string | null
- square?: boolean
- initials?: string
- alt?: string
- className?: string
-}
-
-export function Avatar({
- src = null,
- square = false,
- initials,
- alt = '',
- className,
- ...props
-}: AvatarProps & React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {initials && (
-
- {alt && {alt} }
-
- {initials}
-
-
- )}
- {src && }
-
- )
-}
-
-export const AvatarButton = forwardRef(function AvatarButton(
- {
- src,
- square = false,
- initials,
- alt,
- className,
- ...props
- }: AvatarProps &
- (Omit | Omit, 'className'>),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- square ? 'rounded-[20%]' : 'rounded-full',
- 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
- }>
-
-
-
-
- ) : (
-
-
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/badge.tsx b/catalyst-ui-kit/typescript/badge.tsx
deleted file mode 100644
index 60f51c66..00000000
--- a/catalyst-ui-kit/typescript/badge.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-const colors = {
- red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-data-hover:bg-red-500/20',
- orange:
- 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-400 dark:group-data-hover:bg-orange-500/20',
- amber:
- 'bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-data-hover:bg-amber-400/15',
- yellow:
- 'bg-yellow-400/20 text-yellow-700 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-300 dark:group-data-hover:bg-yellow-400/15',
- lime: 'bg-lime-400/20 text-lime-700 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-300 dark:group-data-hover:bg-lime-400/15',
- green:
- 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-400 dark:group-data-hover:bg-green-500/20',
- emerald:
- 'bg-emerald-500/15 text-emerald-700 group-data-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-400 dark:group-data-hover:bg-emerald-500/20',
- teal: 'bg-teal-500/15 text-teal-700 group-data-hover:bg-teal-500/25 dark:bg-teal-500/10 dark:text-teal-300 dark:group-data-hover:bg-teal-500/20',
- cyan: 'bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15',
- sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',
- blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-400 dark:group-data-hover:bg-blue-500/25',
- indigo:
- 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-400 dark:group-data-hover:bg-indigo-500/20',
- violet:
- 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-400 dark:group-data-hover:bg-violet-500/20',
- purple:
- 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-400 dark:group-data-hover:bg-purple-500/20',
- fuchsia:
- 'bg-fuchsia-400/15 text-fuchsia-700 group-data-hover:bg-fuchsia-400/25 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:group-data-hover:bg-fuchsia-400/20',
- pink: 'bg-pink-400/15 text-pink-700 group-data-hover:bg-pink-400/25 dark:bg-pink-400/10 dark:text-pink-400 dark:group-data-hover:bg-pink-400/20',
- rose: 'bg-rose-400/15 text-rose-700 group-data-hover:bg-rose-400/25 dark:bg-rose-400/10 dark:text-rose-400 dark:group-data-hover:bg-rose-400/20',
- zinc: 'bg-zinc-600/10 text-zinc-700 group-data-hover:bg-zinc-600/20 dark:bg-white/5 dark:text-zinc-400 dark:group-data-hover:bg-white/10',
-}
-
-type BadgeProps = { color?: keyof typeof colors }
-
-export function Badge({ color = 'zinc', className, ...props }: BadgeProps & React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- )
-}
-
-export const BadgeButton = forwardRef(function BadgeButton(
- {
- color = 'zinc',
- className,
- children,
- ...props
- }: BadgeProps & { className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- 'group relative inline-flex rounded-md focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500'
- )
-
- return 'href' in props ? (
- }>
-
- {children}
-
-
- ) : (
-
-
- {children}
-
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/button.tsx b/catalyst-ui-kit/typescript/button.tsx
deleted file mode 100644
index 0190f500..00000000
--- a/catalyst-ui-kit/typescript/button.tsx
+++ /dev/null
@@ -1,204 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-import { Link } from './link'
-
-const styles = {
- base: [
- // Base
- 'relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',
- // Sizing
- 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',
- // Focus
- 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',
- // Disabled
- 'data-disabled:opacity-50',
- // Icon
- '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',
- ],
- solid: [
- // Optical border, implemented as the button background to avoid corner artifacts
- 'border-transparent bg-(--btn-border)',
- // Dark mode: border is rendered on `after` so background is set to button background
- 'dark:bg-(--btn-bg)',
- // Button background, implemented as foreground layer to stack on top of pseudo-border layer
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',
- // Drop shadow, applied to the inset `before` layer so it blends with the border
- 'before:shadow-sm',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Dark mode: Subtle white outline is applied using a border
- 'dark:border-white/5',
- // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow
- 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',
- // Inner highlight shadow
- 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- // White overlay on hover
- 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',
- // Dark mode: `after` layer expands to cover entire button
- 'dark:after:-inset-px dark:after:rounded-lg',
- // Disabled
- 'data-disabled:before:shadow-none data-disabled:after:shadow-none',
- ],
- outline: [
- // Base
- 'border-zinc-950/10 text-zinc-950 data-active:bg-zinc-950/2.5 data-hover:bg-zinc-950/2.5',
- // Dark mode
- 'dark:border-white/15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:data-hover:bg-white/5',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- plain: [
- // Base
- 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',
- // Dark mode
- 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',
- // Icon
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- colors: {
- 'dark/zinc': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- light: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- 'dark/white': [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',
- ],
- dark: [
- 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- white: [
- 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',
- 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',
- ],
- zinc: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',
- 'dark:[--btn-hover-overlay:var(--color-white)]/5',
- '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',
- ],
- indigo: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',
- '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',
- ],
- cyan: [
- 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',
- '[--btn-icon:var(--color-cyan-500)]',
- ],
- red: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',
- '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',
- ],
- orange: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',
- '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',
- ],
- amber: [
- 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',
- '[--btn-icon:var(--color-amber-600)]',
- ],
- yellow: [
- 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',
- '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',
- ],
- lime: [
- 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',
- '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',
- ],
- green: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- emerald: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- teal: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- sky: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',
- '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',
- ],
- blue: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',
- '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',
- ],
- violet: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',
- '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',
- ],
- purple: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',
- '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',
- ],
- fuchsia: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',
- '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',
- ],
- pink: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',
- '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',
- ],
- rose: [
- 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',
- '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',
- ],
- },
-}
-
-type ButtonProps = (
- | { color?: keyof typeof styles.colors; outline?: never; plain?: never }
- | { color?: never; outline: true; plain?: never }
- | { color?: never; outline?: never; plain: true }
-) & { className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- )
-
-export const Button = forwardRef(function Button(
- { color, outline, plain, className, children, ...props }: ButtonProps,
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- className,
- styles.base,
- outline ? styles.outline : plain ? styles.plain : clsx(styles.solid, styles.colors[color ?? 'dark/zinc'])
- )
-
- return 'href' in props ? (
- }>
- {children}
-
- ) : (
-
- {children}
-
- )
-})
-
-/**
- * Expand the hit area to at least 44×44px on touch devices
- */
-export function TouchTarget({ children }: { children: React.ReactNode }) {
- return (
- <>
-
- {children}
- >
- )
-}
diff --git a/catalyst-ui-kit/typescript/checkbox.tsx b/catalyst-ui-kit/typescript/checkbox.tsx
deleted file mode 100644
index 64a5e80f..00000000
--- a/catalyst-ui-kit/typescript/checkbox.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function CheckboxGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
-
-export function CheckboxField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.5 items-center justify-center rounded-[0.3125rem] sm:size-4',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(0.3125rem-1px)] before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--checkbox-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--checkbox-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--checkbox-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-[calc(0.3125rem-1px)] after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-[0.3125rem] dark:group-data-checked:after:block',
- // Focus ring
- 'group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--checkbox-check:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--checkbox-check:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
- // Forced colors mode
- 'forced-colors:[--checkbox-check:HighlightText] forced-colors:[--checkbox-checked-bg:Highlight] forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
- 'dark:forced-colors:[--checkbox-check:HighlightText] dark:forced-colors:[--checkbox-checked-bg:Highlight] dark:forced-colors:group-data-disabled:[--checkbox-check:Highlight]',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- 'dark:[--checkbox-check:var(--color-zinc-900)] dark:[--checkbox-checked-bg:var(--color-white)] dark:[--checkbox-checked-border:var(--color-zinc-950)]/15',
- ],
- white:
- '[--checkbox-check:var(--color-zinc-900)] [--checkbox-checked-bg:var(--color-white)] [--checkbox-checked-border:var(--color-zinc-950)]/15',
- dark: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',
- zinc: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-600)] [--checkbox-checked-border:var(--color-zinc-700)]/90',
- red: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-red-600)] [--checkbox-checked-border:var(--color-red-700)]/90',
- orange:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-orange-500)] [--checkbox-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--checkbox-check:var(--color-amber-950)] [--checkbox-checked-bg:var(--color-amber-400)] [--checkbox-checked-border:var(--color-amber-500)]/80',
- yellow:
- '[--checkbox-check:var(--color-yellow-950)] [--checkbox-checked-bg:var(--color-yellow-300)] [--checkbox-checked-border:var(--color-yellow-400)]/80',
- lime: '[--checkbox-check:var(--color-lime-950)] [--checkbox-checked-bg:var(--color-lime-300)] [--checkbox-checked-border:var(--color-lime-400)]/80',
- green:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-green-600)] [--checkbox-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-emerald-600)] [--checkbox-checked-border:var(--color-emerald-700)]/90',
- teal: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-teal-600)] [--checkbox-checked-border:var(--color-teal-700)]/90',
- cyan: '[--checkbox-check:var(--color-cyan-950)] [--checkbox-checked-bg:var(--color-cyan-300)] [--checkbox-checked-border:var(--color-cyan-400)]/80',
- sky: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-sky-500)] [--checkbox-checked-border:var(--color-sky-600)]/80',
- blue: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-blue-600)] [--checkbox-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-indigo-500)] [--checkbox-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-violet-500)] [--checkbox-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-purple-500)] [--checkbox-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-fuchsia-500)] [--checkbox-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-pink-500)] [--checkbox-checked-border:var(--color-pink-600)]/90',
- rose: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-rose-500)] [--checkbox-checked-border:var(--color-rose-600)]/90',
-}
-
-type Color = keyof typeof colors
-
-export function Checkbox({
- color = 'dark/zinc',
- className,
- ...props
-}: {
- color?: Color
- className?: string
-} & Omit) {
- return (
-
-
-
- {/* Checkmark icon */}
-
- {/* Indeterminate icon */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/combobox.tsx b/catalyst-ui-kit/typescript/combobox.tsx
deleted file mode 100644
index bf649b4b..00000000
--- a/catalyst-ui-kit/typescript/combobox.tsx
+++ /dev/null
@@ -1,188 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { useState } from 'react'
-
-export function Combobox({
- options,
- displayValue,
- filter,
- anchor = 'bottom',
- className,
- placeholder,
- autoFocus,
- 'aria-label': ariaLabel,
- children,
- ...props
-}: {
- options: T[]
- displayValue: (value: T | null) => string | undefined
- filter?: (value: T, query: string) => boolean
- className?: string
- placeholder?: string
- autoFocus?: boolean
- 'aria-label'?: string
- children: (value: NonNullable) => React.ReactElement
-} & Omit, 'as' | 'multiple' | 'children'> & { anchor?: 'top' | 'bottom' }) {
- const [query, setQuery] = useState('')
-
- const filteredOptions =
- query === ''
- ? options
- : options.filter((option) =>
- filter ? filter(option, query) : displayValue(option)?.toLowerCase().includes(query.toLowerCase())
- )
-
- return (
- setQuery('')}>
-
- displayValue(option) ?? ''}
- onChange={(event) => setQuery(event.target.value)}
- placeholder={placeholder}
- className={clsx([
- className,
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Horizontal padding
- 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',
- // Border
- 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Hide default focus styles
- 'focus:outline-hidden',
- // Invalid state
- 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-500 dark:data-invalid:data-hover:border-red-500',
- // Disabled state
- 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',
- // System icons
- 'dark:scheme-dark',
- ])}
- />
-
-
-
-
-
-
-
-
- {({ option }) => children(option)}
-
-
- )
-}
-
-export function ComboboxOption({
- children,
- className,
- ...props
-}: { className?: string; children?: React.ReactNode } & Omit<
- Headless.ComboboxOptionProps<'div', T>,
- 'as' | 'className'
->) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {children}
-
-
-
-
- )
-}
-
-export function ComboboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function ComboboxDescription({ className, children, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/description-list.tsx b/catalyst-ui-kit/typescript/description-list.tsx
deleted file mode 100644
index b19b3b5d..00000000
--- a/catalyst-ui-kit/typescript/description-list.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import clsx from 'clsx'
-
-export function DescriptionList({ className, ...props }: React.ComponentPropsWithoutRef<'dl'>) {
- return (
-
- )
-}
-
-export function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>) {
- return (
-
- )
-}
-
-export function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/dialog.tsx b/catalyst-ui-kit/typescript/dialog.tsx
deleted file mode 100644
index eb55aa3f..00000000
--- a/catalyst-ui-kit/typescript/dialog.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Text } from './text'
-
-const sizes = {
- xs: 'sm:max-w-xs',
- sm: 'sm:max-w-sm',
- md: 'sm:max-w-md',
- lg: 'sm:max-w-lg',
- xl: 'sm:max-w-xl',
- '2xl': 'sm:max-w-2xl',
- '3xl': 'sm:max-w-3xl',
- '4xl': 'sm:max-w-4xl',
- '5xl': 'sm:max-w-5xl',
-}
-
-export function Dialog({
- size = 'lg',
- className,
- children,
- ...props
-}: { size?: keyof typeof sizes; className?: string; children: React.ReactNode } & Omit<
- Headless.DialogProps,
- 'as' | 'className'
->) {
- return (
-
-
-
-
-
- )
-}
-
-export function DialogTitle({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DialogDescription({
- className,
- ...props
-}: { className?: string } & Omit, 'as' | 'className'>) {
- return
-}
-
-export function DialogBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DialogActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/divider.tsx b/catalyst-ui-kit/typescript/divider.tsx
deleted file mode 100644
index dd84b100..00000000
--- a/catalyst-ui-kit/typescript/divider.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import clsx from 'clsx'
-
-export function Divider({
- soft = false,
- className,
- ...props
-}: { soft?: boolean } & React.ComponentPropsWithoutRef<'hr'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/dropdown.tsx b/catalyst-ui-kit/typescript/dropdown.tsx
deleted file mode 100644
index 9e58bb0f..00000000
--- a/catalyst-ui-kit/typescript/dropdown.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-import { Button } from './button'
-import { Link } from './link'
-
-export function Dropdown(props: Headless.MenuProps) {
- return
-}
-
-export function DropdownButton({
- as = Button,
- ...props
-}: { className?: string } & Omit, 'className'>) {
- return
-}
-
-export function DropdownMenu({
- anchor = 'bottom',
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownItem({
- className,
- ...props
-}: { className?: string } & (
- | Omit, 'as' | 'className'>
- | Omit, 'as' | 'className'>
-)) {
- let classes = clsx(
- className,
- // Base styles
- 'group cursor-default rounded-lg px-3.5 py-2.5 focus:outline-hidden sm:px-3 sm:py-1.5',
- // Text styles
- 'text-left text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Focus
- 'data-focus:bg-blue-500 data-focus:text-white',
- // Disabled state
- 'data-disabled:opacity-50',
- // Forced colors mode
- 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText] forced-colors:data-focus:*:data-[slot=icon]:text-[HighlightText]',
- // Use subgrid when available but fallback to an explicit grid layout if not
- 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] items-center supports-[grid-template-columns:subgrid]:grid-cols-subgrid',
- // Icons
- '*:data-[slot=icon]:col-start-1 *:data-[slot=icon]:row-start-1 *:data-[slot=icon]:mr-2.5 *:data-[slot=icon]:-ml-0.5 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:mr-2 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 data-focus:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400 dark:data-focus:*:data-[slot=icon]:text-white',
- // Avatar
- '*:data-[slot=avatar]:mr-2.5 *:data-[slot=avatar]:-ml-1 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:mr-2 sm:*:data-[slot=avatar]:size-5'
- )
-
- return 'href' in props ? (
-
- ) : (
-
- )
-}
-
-export function DropdownHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DropdownSection({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownHeading({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownDivider({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownLabel({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function DropdownDescription({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function DropdownShortcut({
- keys,
- className,
- ...props
-}: { keys: string | string[]; className?: string } & Omit, 'as' | 'className'>) {
- return (
-
- {(Array.isArray(keys) ? keys : keys.split('')).map((char, index) => (
- 0 && char.length > 1 && 'pl-1',
- ])}
- >
- {char}
-
- ))}
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/fieldset.tsx b/catalyst-ui-kit/typescript/fieldset.tsx
deleted file mode 100644
index 155ca204..00000000
--- a/catalyst-ui-kit/typescript/fieldset.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function Fieldset({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
- *+[data-slot=control]]:mt-6')}
- />
- )
-}
-
-export function Legend({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function FieldGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function Field({ className, ...props }: { className?: string } & Omit) {
- return (
- [data-slot=label]+[data-slot=control]]:mt-3',
- '[&>[data-slot=label]+[data-slot=description]]:mt-1',
- '[&>[data-slot=description]+[data-slot=control]]:mt-3',
- '[&>[data-slot=control]+[data-slot=description]]:mt-3',
- '[&>[data-slot=control]+[data-slot=error]]:mt-3',
- '*:data-[slot=label]:font-medium'
- )}
- />
- )
-}
-
-export function Label({ className, ...props }: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function Description({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function ErrorMessage({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/heading.tsx b/catalyst-ui-kit/typescript/heading.tsx
deleted file mode 100644
index 5ccc9d13..00000000
--- a/catalyst-ui-kit/typescript/heading.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import clsx from 'clsx'
-
-type HeadingProps = { level?: 1 | 2 | 3 | 4 | 5 | 6 } & React.ComponentPropsWithoutRef<
- 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
->
-
-export function Heading({ className, level = 1, ...props }: HeadingProps) {
- let Element: `h${typeof level}` = `h${level}`
-
- return (
-
- )
-}
-
-export function Subheading({ className, level = 2, ...props }: HeadingProps) {
- let Element: `h${typeof level}` = `h${level}`
-
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/input.tsx b/catalyst-ui-kit/typescript/input.tsx
deleted file mode 100644
index 72816fb7..00000000
--- a/catalyst-ui-kit/typescript/input.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export function InputGroup({ children }: React.ComponentPropsWithoutRef<'span'>) {
- return (
- [data-slot=icon]:first-child]:left-3 sm:[&>[data-slot=icon]:first-child]:left-2.5 [&>[data-slot=icon]:last-child]:right-3 sm:[&>[data-slot=icon]:last-child]:right-2.5',
- '*:data-[slot=icon]:text-zinc-500 dark:*:data-[slot=icon]:text-zinc-400'
- )}
- >
- {children}
-
- )
-}
-
-const dateTypes = ['date', 'datetime-local', 'month', 'time', 'week']
-type DateType = (typeof dateTypes)[number]
-
-export const Input = forwardRef(function Input(
- {
- className,
- ...props
- }: {
- className?: string
- type?: 'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url' | DateType
- } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/link.tsx b/catalyst-ui-kit/typescript/link.tsx
deleted file mode 100644
index f5bd5bc8..00000000
--- a/catalyst-ui-kit/typescript/link.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * TODO: Update this component to use your client-side framework's link
- * component. We've provided examples of how to do this for Next.js, Remix, and
- * Inertia.js in the Catalyst documentation:
- *
- * https://catalyst.tailwindui.com/docs#client-side-router-integration
- */
-
-import * as Headless from '@headlessui/react'
-import React, { forwardRef } from 'react'
-
-export const Link = forwardRef(function Link(
- props: { href: string } & React.ComponentPropsWithoutRef<'a'>,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/listbox.tsx b/catalyst-ui-kit/typescript/listbox.tsx
deleted file mode 100644
index ecd0a448..00000000
--- a/catalyst-ui-kit/typescript/listbox.tsx
+++ /dev/null
@@ -1,177 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { Fragment } from 'react'
-
-export function Listbox({
- className,
- placeholder,
- autoFocus,
- 'aria-label': ariaLabel,
- children: options,
- ...props
-}: {
- className?: string
- placeholder?: React.ReactNode
- autoFocus?: boolean
- 'aria-label'?: string
- children?: React.ReactNode
-} & Omit, 'as' | 'multiple'>) {
- return (
-
-
- {placeholder}}
- className={clsx([
- // Basic layout
- 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',
- // Set minimum height for when no value is selected
- 'min-h-11 sm:min-h-9',
- // Horizontal padding
- 'pr-[calc(--spacing(7)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pl-[calc(--spacing(3)-1px)]',
- // Typography
- 'text-left text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',
- // Border
- 'border border-zinc-950/10 group-data-active:border-zinc-950/20 group-data-hover:border-zinc-950/20 dark:border-white/10 dark:group-data-active:border-white/20 dark:group-data-hover:border-white/20',
- // Background color
- 'bg-transparent dark:bg-white/5',
- // Invalid state
- 'group-data-invalid:border-red-500 group-data-hover:group-data-invalid:border-red-500 dark:group-data-invalid:border-red-600 dark:data-hover:group-data-invalid:border-red-600',
- // Disabled state
- 'group-data-disabled:border-zinc-950/20 group-data-disabled:opacity-100 dark:group-data-disabled:border-white/15 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:data-hover:border-white/15',
- ])}
- />
-
-
-
-
-
-
-
-
- {options}
-
-
- )
-}
-
-export function ListboxOption({
- children,
- className,
- ...props
-}: { className?: string; children?: React.ReactNode } & Omit<
- Headless.ListboxOptionProps<'div', T>,
- 'as' | 'className'
->) {
- let sharedClasses = clsx(
- // Base
- 'flex min-w-0 items-center',
- // Icons
- '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',
- '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',
- 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',
- // Avatars
- '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5'
- )
-
- return (
-
- {({ selectedOption }) => {
- if (selectedOption) {
- return {children}
- }
-
- return (
-
- )
- }}
-
- )
-}
-
-export function ListboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function ListboxDescription({ className, children, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/navbar.tsx b/catalyst-ui-kit/typescript/navbar.tsx
deleted file mode 100644
index 0b4fd9be..00000000
--- a/catalyst-ui-kit/typescript/navbar.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Navbar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function NavbarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function NavbarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function NavbarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export const NavbarItem = forwardRef(function NavbarItem(
- {
- current,
- className,
- children,
- ...props
- }: { current?: boolean; className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- // Base
- 'relative flex min-w-0 items-center gap-3 rounded-lg p-2 text-left text-base/6 font-medium text-zinc-950 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:not-nth-2:last:data-[slot=icon]:ml-auto *:not-nth-2:last:data-[slot=icon]:size-5 sm:*:not-nth-2:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 *:data-[slot=avatar]:[--avatar-radius:var(--radius-md)] sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
- }
- >
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function NavbarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
diff --git a/catalyst-ui-kit/typescript/pagination.tsx b/catalyst-ui-kit/typescript/pagination.tsx
deleted file mode 100644
index 540224f2..00000000
--- a/catalyst-ui-kit/typescript/pagination.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import clsx from 'clsx'
-import type React from 'react'
-import { Button } from './button'
-
-export function Pagination({
- 'aria-label': ariaLabel = 'Page navigation',
- className,
- ...props
-}: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function PaginationPrevious({
- href = null,
- className,
- children = 'Previous',
-}: React.PropsWithChildren<{ href?: string | null; className?: string }>) {
- return (
-
-
-
-
-
- {children}
-
-
- )
-}
-
-export function PaginationNext({
- href = null,
- className,
- children = 'Next',
-}: React.PropsWithChildren<{ href?: string | null; className?: string }>) {
- return (
-
-
- {children}
-
-
-
-
-
- )
-}
-
-export function PaginationList({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
-
-export function PaginationPage({
- href,
- className,
- current = false,
- children,
-}: React.PropsWithChildren<{ href: string; className?: string; current?: boolean }>) {
- return (
-
- {children}
-
- )
-}
-
-export function PaginationGap({
- className,
- children = <>…>,
- ...props
-}: React.ComponentPropsWithoutRef<'span'>) {
- return (
-
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/radio.tsx b/catalyst-ui-kit/typescript/radio.tsx
deleted file mode 100644
index c06307be..00000000
--- a/catalyst-ui-kit/typescript/radio.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-
-export function RadioGroup({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-export function RadioField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const base = [
- // Basic layout
- 'relative isolate flex size-4.75 shrink-0 rounded-full sm:size-4.25',
- // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode
- 'before:absolute before:inset-0 before:-z-10 before:rounded-full before:bg-white before:shadow-sm',
- // Background color when checked
- 'group-data-checked:before:bg-(--radio-checked-bg)',
- // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo
- 'dark:before:hidden',
- // Background color applied to control in dark mode
- 'dark:bg-white/5 dark:group-data-checked:bg-(--radio-checked-bg)',
- // Border
- 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--radio-checked-border)',
- 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',
- // Inner highlight shadow
- 'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_1px_--theme(--color-white/15%)]',
- 'dark:after:-inset-px dark:after:hidden dark:after:rounded-full dark:group-data-checked:after:block',
- // Indicator color (light mode)
- '[--radio-indicator:transparent] group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:[--radio-indicator:var(--color-zinc-900)]/10',
- // Indicator color (dark mode)
- 'dark:group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] dark:group-data-hover:[--radio-indicator:var(--color-zinc-700)]',
- // Focus ring
- 'group-data-focus:outline group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',
- // Disabled state
- 'group-data-disabled:opacity-50',
- 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--radio-checked-indicator:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',
- 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--radio-checked-indicator:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',
-]
-
-const colors = {
- 'dark/zinc': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-zinc-600)]',
- ],
- 'dark/white': [
- '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- 'dark:[--radio-checked-bg:var(--color-white)] dark:[--radio-checked-border:var(--color-zinc-950)]/15 dark:[--radio-checked-indicator:var(--color-zinc-900)]',
- ],
- white:
- '[--radio-checked-bg:var(--color-white)] [--radio-checked-border:var(--color-zinc-950)]/15 [--radio-checked-indicator:var(--color-zinc-900)]',
- dark: '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',
- zinc: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-zinc-600)] [--radio-checked-border:var(--color-zinc-700)]/90',
- red: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-red-600)] [--radio-checked-border:var(--color-red-700)]/90',
- orange:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-orange-500)] [--radio-checked-border:var(--color-orange-600)]/90',
- amber:
- '[--radio-checked-bg:var(--color-amber-400)] [--radio-checked-border:var(--color-amber-500)]/80 [--radio-checked-indicator:var(--color-amber-950)]',
- yellow:
- '[--radio-checked-bg:var(--color-yellow-300)] [--radio-checked-border:var(--color-yellow-400)]/80 [--radio-checked-indicator:var(--color-yellow-950)]',
- lime: '[--radio-checked-bg:var(--color-lime-300)] [--radio-checked-border:var(--color-lime-400)]/80 [--radio-checked-indicator:var(--color-lime-950)]',
- green:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-green-600)] [--radio-checked-border:var(--color-green-700)]/90',
- emerald:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-emerald-600)] [--radio-checked-border:var(--color-emerald-700)]/90',
- teal: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-teal-600)] [--radio-checked-border:var(--color-teal-700)]/90',
- cyan: '[--radio-checked-bg:var(--color-cyan-300)] [--radio-checked-border:var(--color-cyan-400)]/80 [--radio-checked-indicator:var(--color-cyan-950)]',
- sky: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-sky-500)] [--radio-checked-border:var(--color-sky-600)]/80',
- blue: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-blue-600)] [--radio-checked-border:var(--color-blue-700)]/90',
- indigo:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-indigo-500)] [--radio-checked-border:var(--color-indigo-600)]/90',
- violet:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-violet-500)] [--radio-checked-border:var(--color-violet-600)]/90',
- purple:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-purple-500)] [--radio-checked-border:var(--color-purple-600)]/90',
- fuchsia:
- '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-fuchsia-500)] [--radio-checked-border:var(--color-fuchsia-600)]/90',
- pink: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-pink-500)] [--radio-checked-border:var(--color-pink-600)]/90',
- rose: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-rose-500)] [--radio-checked-border:var(--color-rose-600)]/90',
-}
-
-type Color = keyof typeof colors
-
-export function Radio({
- color = 'dark/zinc',
- className,
- ...props
-}: { color?: Color; className?: string } & Omit) {
- return (
-
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/select.tsx b/catalyst-ui-kit/typescript/select.tsx
deleted file mode 100644
index ffda6002..00000000
--- a/catalyst-ui-kit/typescript/select.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Select = forwardRef(function Select(
- { className, multiple, ...props }: { className?: string } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
- {!multiple && (
-
-
-
-
-
-
- )}
-
- )
-})
diff --git a/catalyst-ui-kit/typescript/sidebar-layout.tsx b/catalyst-ui-kit/typescript/sidebar-layout.tsx
deleted file mode 100644
index ecc07b1f..00000000
--- a/catalyst-ui-kit/typescript/sidebar-layout.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }: React.PropsWithChildren<{ open: boolean; close: () => void }>) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function SidebarLayout({
- navbar,
- sidebar,
- children,
-}: React.PropsWithChildren<{ navbar: React.ReactNode; sidebar: React.ReactNode }>) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on desktop */}
-
{sidebar}
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar on mobile */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/sidebar.tsx b/catalyst-ui-kit/typescript/sidebar.tsx
deleted file mode 100644
index 4f655572..00000000
--- a/catalyst-ui-kit/typescript/sidebar.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import { LayoutGroup, motion } from 'motion/react'
-import React, { forwardRef, useId } from 'react'
-import { TouchTarget } from './button'
-import { Link } from './link'
-
-export function Sidebar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {
- return
-}
-
-export function SidebarHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
- [data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-8'
- )}
- />
- )
-}
-
-export function SidebarFooter({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
[data-slot=section]+[data-slot=section]]:mt-2.5'
- )}
- />
- )
-}
-
-export function SidebarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- let id = useId()
-
- return (
-
-
-
- )
-}
-
-export function SidebarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'hr'>) {
- return
-}
-
-export function SidebarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return
-}
-
-export function SidebarHeading({ className, ...props }: React.ComponentPropsWithoutRef<'h3'>) {
- return (
-
- )
-}
-
-export const SidebarItem = forwardRef(function SidebarItem(
- {
- current,
- className,
- children,
- ...props
- }: { current?: boolean; className?: string; children: React.ReactNode } & (
- | Omit
- | Omit, 'as' | 'className'>
- ),
- ref: React.ForwardedRef
-) {
- let classes = clsx(
- // Base
- 'flex w-full items-center gap-3 rounded-lg px-2 py-2.5 text-left text-base/6 font-medium text-zinc-950 sm:py-2 sm:text-sm/5',
- // Leading icon/icon-only
- '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',
- // Trailing icon (down chevron or similar)
- '*:last:data-[slot=icon]:ml-auto *:last:data-[slot=icon]:size-5 sm:*:last:data-[slot=icon]:size-4',
- // Avatar
- '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 sm:*:data-[slot=avatar]:size-6',
- // Hover
- 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',
- // Active
- 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',
- // Current
- 'data-current:*:data-[slot=icon]:fill-zinc-950',
- // Dark mode
- 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',
- 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',
- 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',
- 'dark:data-current:*:data-[slot=icon]:fill-white'
- )
-
- return (
-
- {current && (
-
- )}
- {'href' in props ? (
-
- {children}
-
- ) : (
-
- {children}
-
- )}
-
- )
-})
-
-export function SidebarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {
- return
-}
diff --git a/catalyst-ui-kit/typescript/stacked-layout.tsx b/catalyst-ui-kit/typescript/stacked-layout.tsx
deleted file mode 100644
index 5b1c40e1..00000000
--- a/catalyst-ui-kit/typescript/stacked-layout.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-'use client'
-
-import * as Headless from '@headlessui/react'
-import React, { useState } from 'react'
-import { NavbarItem } from './navbar'
-
-function OpenMenuIcon() {
- return (
-
-
-
- )
-}
-
-function CloseMenuIcon() {
- return (
-
-
-
- )
-}
-
-function MobileSidebar({ open, close, children }: React.PropsWithChildren<{ open: boolean; close: () => void }>) {
- return (
-
-
-
-
-
-
- )
-}
-
-export function StackedLayout({
- navbar,
- sidebar,
- children,
-}: React.PropsWithChildren<{ navbar: React.ReactNode; sidebar: React.ReactNode }>) {
- let [showSidebar, setShowSidebar] = useState(false)
-
- return (
-
- {/* Sidebar on mobile */}
-
setShowSidebar(false)}>
- {sidebar}
-
-
- {/* Navbar */}
-
-
- {/* Content */}
-
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/switch.tsx b/catalyst-ui-kit/typescript/switch.tsx
deleted file mode 100644
index db40ea4a..00000000
--- a/catalyst-ui-kit/typescript/switch.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import type React from 'react'
-
-export function SwitchGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {
- return (
-
- )
-}
-
-export function SwitchField({
- className,
- ...props
-}: { className?: string } & Omit) {
- return (
-
- )
-}
-
-const colors = {
- 'dark/zinc': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-zinc-700)]/90',
- ],
- 'dark/white': [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-zinc-900)]',
- ],
- dark: [
- '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:var(--color-white)]/15',
- '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]',
- ],
- zinc: [
- '[--switch-bg-ring:var(--color-zinc-700)]/90 [--switch-bg:var(--color-zinc-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-zinc-700)]/90',
- ],
- white: [
- '[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]',
- '[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-zinc-950)]',
- ],
- red: [
- '[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20',
- ],
- orange: [
- '[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20',
- ],
- amber: [
- '[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]',
- ],
- yellow: [
- '[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]',
- ],
- lime: [
- '[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]',
- ],
- green: [
- '[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20',
- ],
- emerald: [
- '[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20',
- ],
- teal: [
- '[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20',
- ],
- cyan: [
- '[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]',
- '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]',
- ],
- sky: [
- '[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20',
- ],
- blue: [
- '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20',
- ],
- indigo: [
- '[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20',
- ],
- violet: [
- '[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20',
- ],
- purple: [
- '[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20',
- ],
- fuchsia: [
- '[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20',
- ],
- pink: [
- '[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20',
- ],
- rose: [
- '[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]',
- '[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20',
- ],
-}
-
-type Color = keyof typeof colors
-
-export function Switch({
- color = 'dark/zinc',
- className,
- ...props
-}: {
- color?: Color
- className?: string
-} & Omit) {
- return (
-
-
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/table.tsx b/catalyst-ui-kit/typescript/table.tsx
deleted file mode 100644
index 86423869..00000000
--- a/catalyst-ui-kit/typescript/table.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-'use client'
-
-import clsx from 'clsx'
-import type React from 'react'
-import { createContext, useContext, useState } from 'react'
-import { Link } from './link'
-
-const TableContext = createContext<{ bleed: boolean; dense: boolean; grid: boolean; striped: boolean }>({
- bleed: false,
- dense: false,
- grid: false,
- striped: false,
-})
-
-export function Table({
- bleed = false,
- dense = false,
- grid = false,
- striped = false,
- className,
- children,
- ...props
-}: { bleed?: boolean; dense?: boolean; grid?: boolean; striped?: boolean } & React.ComponentPropsWithoutRef<'div'>) {
- return (
- }>
-
-
- )
-}
-
-export function TableHead({ className, ...props }: React.ComponentPropsWithoutRef<'thead'>) {
- return
-}
-
-export function TableBody(props: React.ComponentPropsWithoutRef<'tbody'>) {
- return
-}
-
-const TableRowContext = createContext<{ href?: string; target?: string; title?: string }>({
- href: undefined,
- target: undefined,
- title: undefined,
-})
-
-export function TableRow({
- href,
- target,
- title,
- className,
- ...props
-}: { href?: string; target?: string; title?: string } & React.ComponentPropsWithoutRef<'tr'>) {
- let { striped } = useContext(TableContext)
-
- return (
- }>
-
-
- )
-}
-
-export function TableHeader({ className, ...props }: React.ComponentPropsWithoutRef<'th'>) {
- let { bleed, grid } = useContext(TableContext)
-
- return (
-
- )
-}
-
-export function TableCell({ className, children, ...props }: React.ComponentPropsWithoutRef<'td'>) {
- let { bleed, dense, grid, striped } = useContext(TableContext)
- let { href, target, title } = useContext(TableRowContext)
- let [cellRef, setCellRef] = useState(null)
-
- return (
-
- {href && (
-
- )}
- {children}
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/text.tsx b/catalyst-ui-kit/typescript/text.tsx
deleted file mode 100644
index 2b2512c0..00000000
--- a/catalyst-ui-kit/typescript/text.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import clsx from 'clsx'
-import { Link } from './link'
-
-export function Text({ className, ...props }: React.ComponentPropsWithoutRef<'p'>) {
- return (
-
- )
-}
-
-export function TextLink({ className, ...props }: React.ComponentPropsWithoutRef) {
- return (
-
- )
-}
-
-export function Strong({ className, ...props }: React.ComponentPropsWithoutRef<'strong'>) {
- return
-}
-
-export function Code({ className, ...props }: React.ComponentPropsWithoutRef<'code'>) {
- return (
-
- )
-}
diff --git a/catalyst-ui-kit/typescript/textarea.tsx b/catalyst-ui-kit/typescript/textarea.tsx
deleted file mode 100644
index d4ef5ef1..00000000
--- a/catalyst-ui-kit/typescript/textarea.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import * as Headless from '@headlessui/react'
-import clsx from 'clsx'
-import React, { forwardRef } from 'react'
-
-export const Textarea = forwardRef(function Textarea(
- {
- className,
- resizable = true,
- ...props
- }: { className?: string; resizable?: boolean } & Omit,
- ref: React.ForwardedRef
-) {
- return (
-
-
-
- )
-})