@nqmcreative/ui 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +151 -439
- package/cli/index.mjs +67 -30
- package/dist/core/calendar.d.ts +3 -0
- package/dist/core/calendar.js +36 -0
- package/dist/core/dialog.svelte.d.ts +14 -0
- package/dist/core/dialog.svelte.js +23 -0
- package/dist/core/files.d.ts +35 -0
- package/dist/core/files.js +62 -0
- package/dist/core/index.d.ts +37 -0
- package/dist/core/index.js +35 -0
- package/dist/core/list.svelte.d.ts +41 -0
- package/dist/core/list.svelte.js +77 -0
- package/dist/core/number.d.ts +7 -0
- package/dist/core/number.js +17 -0
- package/dist/core/pagination.d.ts +6 -0
- package/dist/core/pagination.js +21 -0
- package/dist/core/password.d.ts +8 -0
- package/dist/core/password.js +23 -0
- package/dist/core/table.d.ts +22 -0
- package/dist/core/table.js +41 -0
- package/dist/core/theme.svelte.d.ts +16 -0
- package/dist/core/theme.svelte.js +34 -0
- package/dist/core/trigger.d.ts +35 -0
- package/dist/core/trigger.js +77 -0
- package/dist/index.d.ts +11 -103
- package/dist/index.js +11 -75
- package/dist/{components → styles/matte}/AccordionItem.svelte +1 -1
- package/dist/{components → styles/matte}/AccordionItem.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Alert.svelte +8 -2
- package/dist/{components → styles/matte}/Alert.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Avatar.svelte +1 -1
- package/dist/{components → styles/matte}/Avatar.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Badge.svelte +8 -3
- package/dist/{components → styles/matte}/Badge.svelte.d.ts +1 -3
- package/dist/{components → styles/matte}/Breadcrumb.svelte +2 -2
- package/dist/{components → styles/matte}/Breadcrumb.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Button.svelte +1 -1
- package/dist/{components → styles/matte}/Button.svelte.d.ts +1 -1
- package/dist/styles/matte/CTASection.svelte +76 -0
- package/dist/styles/matte/CTASection.svelte.d.ts +18 -0
- package/dist/{components → styles/matte}/Calendar.svelte +7 -17
- package/dist/{components → styles/matte}/Calendar.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Card.svelte +1 -1
- package/dist/{components → styles/matte}/Card.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Checkbox.svelte +1 -1
- package/dist/{components → styles/matte}/Checkbox.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/CheckboxGroup.svelte +1 -1
- package/dist/{components → styles/matte}/CheckboxGroup.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Combobox.svelte +31 -42
- package/dist/{components → styles/matte}/Combobox.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/CommandPalette.svelte +26 -41
- package/dist/{components → styles/matte}/CommandPalette.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/ConfirmDialog.svelte +2 -2
- package/dist/{components → styles/matte}/ConfirmDialog.svelte.d.ts +2 -2
- package/dist/{components → styles/matte}/ContextMenu.svelte +5 -7
- package/dist/{components → styles/matte}/DatePicker.svelte +7 -11
- package/dist/{components → styles/matte}/DatePicker.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Drawer.svelte +4 -7
- package/dist/{components → styles/matte}/Dropdown.svelte +18 -36
- package/dist/{components → styles/matte}/Dropdown.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Dropzone.svelte +11 -43
- package/dist/{components → styles/matte}/Dropzone.svelte.d.ts +2 -5
- package/dist/{components → styles/matte}/EmptyState.svelte +1 -1
- package/dist/{components → styles/matte}/EmptyState.svelte.d.ts +1 -1
- package/dist/styles/matte/FeatureCard.svelte +58 -0
- package/dist/styles/matte/FeatureCard.svelte.d.ts +16 -0
- package/dist/styles/matte/FeatureGrid.svelte +62 -0
- package/dist/styles/matte/FeatureGrid.svelte.d.ts +16 -0
- package/dist/{components → styles/matte}/Footer.svelte +1 -1
- package/dist/{components → styles/matte}/Footer.svelte.d.ts +1 -1
- package/dist/styles/matte/HeroSection.svelte +80 -0
- package/dist/styles/matte/HeroSection.svelte.d.ts +21 -0
- package/dist/{components → styles/matte}/Input.svelte +1 -1
- package/dist/{components → styles/matte}/Input.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Link.svelte +1 -1
- package/dist/{components → styles/matte}/Link.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/LocaleProvider.svelte +1 -1
- package/dist/{components → styles/matte}/LocaleProvider.svelte.d.ts +1 -1
- package/dist/styles/matte/LogoCloud.svelte +61 -0
- package/dist/styles/matte/LogoCloud.svelte.d.ts +19 -0
- package/dist/{components → styles/matte}/MenuItem.svelte +1 -1
- package/dist/{components → styles/matte}/MenuItem.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Modal.svelte +4 -7
- package/dist/{components → styles/matte}/MultiSelect.svelte +18 -37
- package/dist/{components → styles/matte}/MultiSelect.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Navbar.svelte +2 -2
- package/dist/{components → styles/matte}/Navbar.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/NumberInput.svelte +4 -8
- package/dist/{components → styles/matte}/NumberInput.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Pagination.svelte +4 -15
- package/dist/{components → styles/matte}/Pagination.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/PasswordInput.svelte +4 -13
- package/dist/{components → styles/matte}/PasswordInput.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Popover.svelte +16 -41
- package/dist/{components → styles/matte}/Popover.svelte.d.ts +1 -1
- package/dist/styles/matte/PricingCard.svelte +107 -0
- package/dist/styles/matte/PricingCard.svelte.d.ts +25 -0
- package/dist/{components → styles/matte}/Progress.svelte +3 -2
- package/dist/{components → styles/matte}/Progress.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Radio.svelte +1 -1
- package/dist/{components → styles/matte}/Radio.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/RadioGroup.svelte +1 -1
- package/dist/{components → styles/matte}/RadioGroup.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/SegmentedControl.svelte +1 -1
- package/dist/{components → styles/matte}/SegmentedControl.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Select.svelte +1 -1
- package/dist/{components → styles/matte}/Select.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Sidebar.svelte +2 -2
- package/dist/{components → styles/matte}/Sidebar.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Slider.svelte +3 -2
- package/dist/{components → styles/matte}/Slider.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Spinner.svelte +2 -2
- package/dist/{components → styles/matte}/Spinner.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Stat.svelte +1 -1
- package/dist/{components → styles/matte}/Stat.svelte.d.ts +1 -1
- package/dist/styles/matte/StatsBand.svelte +57 -0
- package/dist/styles/matte/StatsBand.svelte.d.ts +20 -0
- package/dist/{components → styles/matte}/Steps.svelte +1 -1
- package/dist/{components → styles/matte}/Steps.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Switch.svelte +1 -1
- package/dist/{components → styles/matte}/Switch.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/Table.svelte +6 -28
- package/dist/{components → styles/matte}/Table.svelte.d.ts +2 -6
- package/dist/{components → styles/matte}/Tabs.svelte +8 -1
- package/dist/{components → styles/matte}/Tabs.svelte.d.ts +1 -1
- package/dist/styles/matte/Testimonial.svelte +67 -0
- package/dist/styles/matte/Testimonial.svelte.d.ts +19 -0
- package/dist/{components → styles/matte}/Textarea.svelte +1 -1
- package/dist/{components → styles/matte}/Textarea.svelte.d.ts +1 -1
- package/dist/{components → styles/matte}/ThemeToggle.svelte +14 -27
- package/dist/{components → styles/matte}/ThemeToggle.svelte.d.ts +2 -6
- package/dist/{components → styles/matte}/Toaster.svelte +4 -4
- package/dist/{fonts.css → styles/matte/fonts.css} +4 -3
- package/dist/styles/matte/index.d.ts +109 -0
- package/dist/styles/matte/index.js +83 -0
- package/dist/{theme.css → styles/matte/theme.css} +0 -1
- package/dist/styles/paper/Accordion.svelte +17 -0
- package/dist/styles/paper/Accordion.svelte.d.ts +8 -0
- package/dist/styles/paper/AccordionItem.svelte +46 -0
- package/dist/styles/paper/AccordionItem.svelte.d.ts +14 -0
- package/dist/styles/paper/Alert.svelte +99 -0
- package/dist/styles/paper/Alert.svelte.d.ts +18 -0
- package/dist/styles/paper/Avatar.svelte +60 -0
- package/dist/styles/paper/Avatar.svelte.d.ts +16 -0
- package/dist/styles/paper/AvatarGroup.svelte +17 -0
- package/dist/styles/paper/AvatarGroup.svelte.d.ts +8 -0
- package/dist/styles/paper/Badge.svelte +58 -0
- package/dist/styles/paper/Badge.svelte.d.ts +16 -0
- package/dist/styles/paper/Breadcrumb.svelte +49 -0
- package/dist/styles/paper/Breadcrumb.svelte.d.ts +14 -0
- package/dist/styles/paper/Button.svelte +96 -0
- package/dist/styles/paper/Button.svelte.d.ts +21 -0
- package/dist/styles/paper/CTASection.svelte +76 -0
- package/dist/styles/paper/CTASection.svelte.d.ts +18 -0
- package/dist/styles/paper/Calendar.svelte +202 -0
- package/dist/styles/paper/Calendar.svelte.d.ts +22 -0
- package/dist/styles/paper/Card.svelte +78 -0
- package/dist/styles/paper/Card.svelte.d.ts +21 -0
- package/dist/styles/paper/Checkbox.svelte +75 -0
- package/dist/styles/paper/Checkbox.svelte.d.ts +15 -0
- package/dist/styles/paper/CheckboxGroup.svelte +111 -0
- package/dist/styles/paper/CheckboxGroup.svelte.d.ts +30 -0
- package/dist/styles/paper/Combobox.svelte +266 -0
- package/dist/styles/paper/Combobox.svelte.d.ts +29 -0
- package/dist/styles/paper/CommandPalette.svelte +209 -0
- package/dist/styles/paper/CommandPalette.svelte.d.ts +32 -0
- package/dist/styles/paper/ConfirmDialog.svelte +97 -0
- package/dist/styles/paper/ConfirmDialog.svelte.d.ts +22 -0
- package/dist/styles/paper/ContextMenu.svelte +88 -0
- package/dist/styles/paper/ContextMenu.svelte.d.ts +15 -0
- package/dist/styles/paper/DatePicker.svelte +192 -0
- package/dist/styles/paper/DatePicker.svelte.d.ts +23 -0
- package/dist/styles/paper/Divider.svelte +30 -0
- package/dist/styles/paper/Divider.svelte.d.ts +10 -0
- package/dist/styles/paper/Drawer.svelte +165 -0
- package/dist/styles/paper/Drawer.svelte.d.ts +20 -0
- package/dist/styles/paper/Dropdown.svelte +94 -0
- package/dist/styles/paper/Dropdown.svelte.d.ts +23 -0
- package/dist/styles/paper/Dropzone.svelte +210 -0
- package/dist/styles/paper/Dropzone.svelte.d.ts +29 -0
- package/dist/styles/paper/EmptyState.svelte +71 -0
- package/dist/styles/paper/EmptyState.svelte.d.ts +18 -0
- package/dist/styles/paper/FeatureCard.svelte +58 -0
- package/dist/styles/paper/FeatureCard.svelte.d.ts +16 -0
- package/dist/styles/paper/FeatureGrid.svelte +62 -0
- package/dist/styles/paper/FeatureGrid.svelte.d.ts +16 -0
- package/dist/styles/paper/Field.svelte +42 -0
- package/dist/styles/paper/Field.svelte.d.ts +16 -0
- package/dist/styles/paper/Footer.svelte +91 -0
- package/dist/styles/paper/Footer.svelte.d.ts +25 -0
- package/dist/styles/paper/HeroSection.svelte +86 -0
- package/dist/styles/paper/HeroSection.svelte.d.ts +21 -0
- package/dist/styles/paper/Input.svelte +60 -0
- package/dist/styles/paper/Input.svelte.d.ts +18 -0
- package/dist/styles/paper/InputGroup.svelte +20 -0
- package/dist/styles/paper/InputGroup.svelte.d.ts +11 -0
- package/dist/styles/paper/Kbd.svelte +17 -0
- package/dist/styles/paper/Kbd.svelte.d.ts +8 -0
- package/dist/styles/paper/Label.svelte +16 -0
- package/dist/styles/paper/Label.svelte.d.ts +9 -0
- package/dist/styles/paper/Link.svelte +44 -0
- package/dist/styles/paper/Link.svelte.d.ts +16 -0
- package/dist/styles/paper/LocaleProvider.svelte +24 -0
- package/dist/styles/paper/LocaleProvider.svelte.d.ts +10 -0
- package/dist/styles/paper/LogoCloud.svelte +61 -0
- package/dist/styles/paper/LogoCloud.svelte.d.ts +19 -0
- package/dist/styles/paper/MenuItem.svelte +64 -0
- package/dist/styles/paper/MenuItem.svelte.d.ts +18 -0
- package/dist/styles/paper/MenuSeparator.svelte +22 -0
- package/dist/styles/paper/MenuSeparator.svelte.d.ts +8 -0
- package/dist/styles/paper/Modal.svelte +118 -0
- package/dist/styles/paper/Modal.svelte.d.ts +21 -0
- package/dist/styles/paper/MultiSelect.svelte +287 -0
- package/dist/styles/paper/MultiSelect.svelte.d.ts +31 -0
- package/dist/styles/paper/Navbar.svelte +201 -0
- package/dist/styles/paper/Navbar.svelte.d.ts +33 -0
- package/dist/styles/paper/NumberInput.svelte +96 -0
- package/dist/styles/paper/NumberInput.svelte.d.ts +15 -0
- package/dist/styles/paper/Pagination.svelte +83 -0
- package/dist/styles/paper/Pagination.svelte.d.ts +15 -0
- package/dist/styles/paper/PasswordInput.svelte +100 -0
- package/dist/styles/paper/PasswordInput.svelte.d.ts +12 -0
- package/dist/styles/paper/Popover.svelte +89 -0
- package/dist/styles/paper/Popover.svelte.d.ts +19 -0
- package/dist/styles/paper/PricingCard.svelte +108 -0
- package/dist/styles/paper/PricingCard.svelte.d.ts +25 -0
- package/dist/styles/paper/Progress.svelte +59 -0
- package/dist/styles/paper/Progress.svelte.d.ts +17 -0
- package/dist/styles/paper/Radio.svelte +55 -0
- package/dist/styles/paper/Radio.svelte.d.ts +15 -0
- package/dist/styles/paper/RadioGroup.svelte +95 -0
- package/dist/styles/paper/RadioGroup.svelte.d.ts +27 -0
- package/dist/styles/paper/SegmentedControl.svelte +88 -0
- package/dist/styles/paper/SegmentedControl.svelte.d.ts +25 -0
- package/dist/styles/paper/Select.svelte +61 -0
- package/dist/styles/paper/Select.svelte.d.ts +20 -0
- package/dist/styles/paper/Sidebar.svelte +206 -0
- package/dist/styles/paper/Sidebar.svelte.d.ts +36 -0
- package/dist/styles/paper/Skeleton.svelte +46 -0
- package/dist/styles/paper/Skeleton.svelte.d.ts +13 -0
- package/dist/styles/paper/Slider.svelte +80 -0
- package/dist/styles/paper/Slider.svelte.d.ts +19 -0
- package/dist/styles/paper/Spinner.svelte +34 -0
- package/dist/styles/paper/Spinner.svelte.d.ts +13 -0
- package/dist/styles/paper/Stat.svelte +51 -0
- package/dist/styles/paper/Stat.svelte.d.ts +16 -0
- package/dist/styles/paper/StatsBand.svelte +63 -0
- package/dist/styles/paper/StatsBand.svelte.d.ts +20 -0
- package/dist/styles/paper/Steps.svelte +141 -0
- package/dist/styles/paper/Steps.svelte.d.ts +24 -0
- package/dist/styles/paper/Switch.svelte +64 -0
- package/dist/styles/paper/Switch.svelte.d.ts +14 -0
- package/dist/styles/paper/Table.svelte +217 -0
- package/dist/styles/paper/Table.svelte.d.ts +66 -0
- package/dist/styles/paper/Tabs.svelte +102 -0
- package/dist/styles/paper/Tabs.svelte.d.ts +23 -0
- package/dist/styles/paper/Testimonial.svelte +64 -0
- package/dist/styles/paper/Testimonial.svelte.d.ts +19 -0
- package/dist/styles/paper/Textarea.svelte +54 -0
- package/dist/styles/paper/Textarea.svelte.d.ts +12 -0
- package/dist/styles/paper/ThemeToggle.svelte +130 -0
- package/dist/styles/paper/ThemeToggle.svelte.d.ts +16 -0
- package/dist/styles/paper/Toaster.svelte +132 -0
- package/dist/styles/paper/Toaster.svelte.d.ts +8 -0
- package/dist/styles/paper/Tooltip.svelte +33 -0
- package/dist/styles/paper/Tooltip.svelte.d.ts +12 -0
- package/dist/styles/paper/fonts.css +46 -0
- package/dist/styles/paper/index.d.ts +109 -0
- package/dist/styles/paper/index.js +83 -0
- package/dist/styles/paper/theme.css +222 -0
- package/package.json +531 -201
- package/registry.json +658 -339
- /package/dist/{actions → core/actions}/anchor.d.ts +0 -0
- /package/dist/{actions → core/actions}/anchor.js +0 -0
- /package/dist/{actions → core/actions}/dismissable.d.ts +0 -0
- /package/dist/{actions → core/actions}/dismissable.js +0 -0
- /package/dist/{date.d.ts → core/date.d.ts} +0 -0
- /package/dist/{date.js → core/date.js} +0 -0
- /package/dist/{locale.svelte.d.ts → core/locale.svelte.d.ts} +0 -0
- /package/dist/{locale.svelte.js → core/locale.svelte.js} +0 -0
- /package/dist/{toast.svelte.d.ts → core/toast.svelte.d.ts} +0 -0
- /package/dist/{toast.svelte.js → core/toast.svelte.js} +0 -0
- /package/dist/{tones.d.ts → core/tones.d.ts} +0 -0
- /package/dist/{tones.js → core/tones.js} +0 -0
- /package/dist/{components → styles/matte}/Accordion.svelte +0 -0
- /package/dist/{components → styles/matte}/Accordion.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/AvatarGroup.svelte +0 -0
- /package/dist/{components → styles/matte}/AvatarGroup.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/ContextMenu.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Divider.svelte +0 -0
- /package/dist/{components → styles/matte}/Divider.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Drawer.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Field.svelte +0 -0
- /package/dist/{components → styles/matte}/Field.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/InputGroup.svelte +0 -0
- /package/dist/{components → styles/matte}/InputGroup.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Kbd.svelte +0 -0
- /package/dist/{components → styles/matte}/Kbd.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Label.svelte +0 -0
- /package/dist/{components → styles/matte}/Label.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/MenuSeparator.svelte +0 -0
- /package/dist/{components → styles/matte}/MenuSeparator.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Modal.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Skeleton.svelte +0 -0
- /package/dist/{components → styles/matte}/Skeleton.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Toaster.svelte.d.ts +0 -0
- /package/dist/{components → styles/matte}/Tooltip.svelte +0 -0
- /package/dist/{components → styles/matte}/Tooltip.svelte.d.ts +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Tone } from '../../core/tones.js';
|
|
2
|
+
import { type Theme } from '../../core/theme.svelte.js';
|
|
3
|
+
interface Props {
|
|
4
|
+
/** Bindable. `'system'` follows the OS until the visitor chooses. */
|
|
5
|
+
theme?: Theme;
|
|
6
|
+
/** `'button'` cycles light → dark → system; `'segmented'` shows all three. */
|
|
7
|
+
variant?: 'button' | 'segmented';
|
|
8
|
+
tone?: Tone;
|
|
9
|
+
/** Remember the choice in `localStorage`. Default true. */
|
|
10
|
+
persist?: boolean;
|
|
11
|
+
onchange?: (theme: Theme) => void;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
declare const ThemeToggle: import("svelte").Component<Props, {}, "theme">;
|
|
15
|
+
type ThemeToggle = ReturnType<typeof ThemeToggle>;
|
|
16
|
+
export default ThemeToggle;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { flip } from 'svelte/animate';
|
|
3
|
+
import { fly } from 'svelte/transition';
|
|
4
|
+
import { portal } from '../../core/actions/dismissable.js';
|
|
5
|
+
import { toast } from '../../core/toast.svelte.js';
|
|
6
|
+
import { toneText } from '../../core/tones.js';
|
|
7
|
+
import Spinner from './Spinner.svelte';
|
|
8
|
+
import { useLocale } from '../../core/locale.svelte.js';
|
|
9
|
+
|
|
10
|
+
export type ToasterPosition =
|
|
11
|
+
'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
12
|
+
|
|
13
|
+
interface Props {
|
|
14
|
+
position?: ToasterPosition;
|
|
15
|
+
class?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let { position = 'bottom-right', class: className = '' }: Props = $props();
|
|
19
|
+
|
|
20
|
+
const t = useLocale();
|
|
21
|
+
|
|
22
|
+
const positions: Record<ToasterPosition, string> = {
|
|
23
|
+
'top-left': 'top-4 left-4 items-start',
|
|
24
|
+
'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',
|
|
25
|
+
'top-right': 'top-4 right-4 items-end',
|
|
26
|
+
'bottom-left': 'bottom-4 left-4 items-start',
|
|
27
|
+
'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',
|
|
28
|
+
'bottom-right': 'bottom-4 right-4 items-end'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const fromTop = $derived(position.startsWith('top'));
|
|
32
|
+
const fromLeft = $derived(position.endsWith('left'));
|
|
33
|
+
const fromCenter = $derived(position.endsWith('center'));
|
|
34
|
+
|
|
35
|
+
const enter = $derived(
|
|
36
|
+
fromCenter ? { y: fromTop ? -16 : 16, x: 0 } : { x: fromLeft ? -16 : 16, y: 0 }
|
|
37
|
+
);
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div
|
|
41
|
+
use:portal
|
|
42
|
+
aria-live="polite"
|
|
43
|
+
aria-label={t.current.notifications}
|
|
44
|
+
class="pointer-events-none fixed z-[100] flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2.5 {positions[
|
|
45
|
+
position
|
|
46
|
+
]} {fromTop ? '' : 'flex-col-reverse'} {className}"
|
|
47
|
+
>
|
|
48
|
+
{#each toast.items as item (item.id)}
|
|
49
|
+
<!--
|
|
50
|
+
paper puts every toast on the same neutral card and lets the glyph
|
|
51
|
+
carry the tone. matte tints the whole surface; here the tinted block
|
|
52
|
+
would fight the page underneath.
|
|
53
|
+
-->
|
|
54
|
+
<div
|
|
55
|
+
animate:flip={{ duration: 200 }}
|
|
56
|
+
in:fly={{ ...enter, duration: 220 }}
|
|
57
|
+
out:fly={{ ...enter, duration: 160 }}
|
|
58
|
+
role={item.tone === 'danger' ? 'alert' : 'status'}
|
|
59
|
+
class="pointer-events-auto flex w-full items-start gap-3 rounded-lg border border-hairline bg-bg p-3.5 font-sans shadow-lg"
|
|
60
|
+
>
|
|
61
|
+
<span class="mt-0.5 shrink-0 {toneText[item.tone]}">
|
|
62
|
+
{#if item.loading}
|
|
63
|
+
<Spinner size="sm" label="" />
|
|
64
|
+
{:else if item.tone === 'success'}
|
|
65
|
+
<svg class="size-4" viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
66
|
+
<circle cx="8" cy="8" r="6.5" stroke="currentColor" stroke-width="1.5" />
|
|
67
|
+
<path
|
|
68
|
+
d="m5 8.2 2.2 2.2L11 6"
|
|
69
|
+
stroke="currentColor"
|
|
70
|
+
stroke-width="1.6"
|
|
71
|
+
stroke-linecap="round"
|
|
72
|
+
stroke-linejoin="round"
|
|
73
|
+
/>
|
|
74
|
+
</svg>
|
|
75
|
+
{:else if item.tone === 'danger'}
|
|
76
|
+
<svg class="size-4" viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
77
|
+
<circle cx="8" cy="8" r="6.5" stroke="currentColor" stroke-width="1.5" />
|
|
78
|
+
<path
|
|
79
|
+
d="m5.75 5.75 4.5 4.5M10.25 5.75l-4.5 4.5"
|
|
80
|
+
stroke="currentColor"
|
|
81
|
+
stroke-width="1.6"
|
|
82
|
+
stroke-linecap="round"
|
|
83
|
+
/>
|
|
84
|
+
</svg>
|
|
85
|
+
{:else}
|
|
86
|
+
<svg class="size-4" viewBox="0 0 16 16" fill="none" aria-hidden="true">
|
|
87
|
+
<circle cx="8" cy="8" r="6.5" stroke="currentColor" stroke-width="1.5" />
|
|
88
|
+
<path d="M8 4.75v4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
|
|
89
|
+
<circle cx="8" cy="11.25" r="0.85" fill="currentColor" />
|
|
90
|
+
</svg>
|
|
91
|
+
{/if}
|
|
92
|
+
</span>
|
|
93
|
+
|
|
94
|
+
<div class="flex min-w-0 flex-1 flex-col gap-1">
|
|
95
|
+
<p class="text-sm leading-snug font-semibold text-text">{item.title}</p>
|
|
96
|
+
{#if item.description}
|
|
97
|
+
<p class="text-[13px] leading-relaxed text-text-secondary">{item.description}</p>
|
|
98
|
+
{/if}
|
|
99
|
+
{#if item.action}
|
|
100
|
+
<button
|
|
101
|
+
type="button"
|
|
102
|
+
onclick={() => {
|
|
103
|
+
item.action?.onclick();
|
|
104
|
+
toast.dismiss(item.id);
|
|
105
|
+
}}
|
|
106
|
+
class="mt-1 self-start rounded font-sans text-[13px] font-semibold underline underline-offset-2 {toneText[
|
|
107
|
+
item.tone
|
|
108
|
+
]}"
|
|
109
|
+
>
|
|
110
|
+
{item.action.label}
|
|
111
|
+
</button>
|
|
112
|
+
{/if}
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<button
|
|
116
|
+
type="button"
|
|
117
|
+
onclick={() => toast.dismiss(item.id)}
|
|
118
|
+
aria-label={t.current.dismiss}
|
|
119
|
+
class="-m-1 shrink-0 rounded p-1 text-text-muted transition-colors duration-150 hover:bg-bg-inset hover:text-text focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-current"
|
|
120
|
+
>
|
|
121
|
+
<svg class="size-3.5" viewBox="0 0 14 14" fill="none" aria-hidden="true">
|
|
122
|
+
<path
|
|
123
|
+
d="m2 2 10 10M12 2 2 12"
|
|
124
|
+
stroke="currentColor"
|
|
125
|
+
stroke-width="1.6"
|
|
126
|
+
stroke-linecap="round"
|
|
127
|
+
/>
|
|
128
|
+
</svg>
|
|
129
|
+
</button>
|
|
130
|
+
</div>
|
|
131
|
+
{/each}
|
|
132
|
+
</div>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ToasterPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
2
|
+
interface Props {
|
|
3
|
+
position?: ToasterPosition;
|
|
4
|
+
class?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const Toaster: import("svelte").Component<Props, {}, "">;
|
|
7
|
+
type Toaster = ReturnType<typeof Toaster>;
|
|
8
|
+
export default Toaster;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
6
|
+
|
|
7
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
8
|
+
/** Tooltip text. CSS-only: shows on hover and on keyboard focus. */
|
|
9
|
+
content: string;
|
|
10
|
+
placement?: TooltipPlacement;
|
|
11
|
+
children: Snippet;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let { content, placement = 'top', class: className = '', children, ...rest }: Props = $props();
|
|
15
|
+
|
|
16
|
+
const placements: Record<TooltipPlacement, string> = {
|
|
17
|
+
top: 'bottom-full left-1/2 mb-1.5 -translate-x-1/2',
|
|
18
|
+
bottom: 'top-full left-1/2 mt-1.5 -translate-x-1/2',
|
|
19
|
+
left: 'right-full top-1/2 mr-1.5 -translate-y-1/2',
|
|
20
|
+
right: 'left-full top-1/2 ml-1.5 -translate-y-1/2'
|
|
21
|
+
};
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<span class="group/tt relative inline-flex" {...rest}>
|
|
25
|
+
{@render children()}
|
|
26
|
+
<span
|
|
27
|
+
role="tooltip"
|
|
28
|
+
class="pointer-events-none invisible absolute z-50 rounded-md bg-text px-2 py-1 font-sans text-xs font-medium whitespace-nowrap text-text-inverse opacity-0 shadow-lg transition-opacity duration-150 ease-brand-out group-focus-within/tt:visible group-focus-within/tt:opacity-100 group-hover/tt:visible group-hover/tt:opacity-100
|
|
29
|
+
{placements[placement]} {className}"
|
|
30
|
+
>
|
|
31
|
+
{content}
|
|
32
|
+
</span>
|
|
33
|
+
</span>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
4
|
+
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
/** Tooltip text. CSS-only: shows on hover and on keyboard focus. */
|
|
6
|
+
content: string;
|
|
7
|
+
placement?: TooltipPlacement;
|
|
8
|
+
children: Snippet;
|
|
9
|
+
}
|
|
10
|
+
declare const Tooltip: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type Tooltip = ReturnType<typeof Tooltip>;
|
|
12
|
+
export default Tooltip;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Optional: Plus Jakarta Sans, the face paper is designed around. Import this
|
|
3
|
+
* only if your project doesn't already self-host or load it another way —
|
|
4
|
+
* without it the tokens fall back to the system stack, which works but reads
|
|
5
|
+
* harder and colder.
|
|
6
|
+
*
|
|
7
|
+
* These are plain `@font-face` rules rather than an `@import` of the Google
|
|
8
|
+
* stylesheet on purpose: `@import` is only valid before every other rule, so a
|
|
9
|
+
* bundler silently drops it when this file is imported after `tailwindcss` —
|
|
10
|
+
* the fonts then fall back with no error anywhere. `@font-face` works wherever
|
|
11
|
+
* you put it, and it skips the CSS-to-CSS round trip before the font files
|
|
12
|
+
* start downloading.
|
|
13
|
+
*
|
|
14
|
+
* Two rules rather than matte's eight: this is a variable font, so one file per
|
|
15
|
+
* subset covers every weight from 400 to 700. Latin and Latin Extended only —
|
|
16
|
+
* around 49 kB in total. Add
|
|
17
|
+
* `<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>` to
|
|
18
|
+
* your document head to open the connection earlier.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/* latin */
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: 'Plus Jakarta Sans';
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-weight: 400 700;
|
|
26
|
+
font-display: swap;
|
|
27
|
+
src: url(https://fonts.gstatic.com/s/plusjakartasans/v12/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2)
|
|
28
|
+
format('woff2');
|
|
29
|
+
unicode-range:
|
|
30
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
|
|
31
|
+
U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* latin-ext */
|
|
35
|
+
@font-face {
|
|
36
|
+
font-family: 'Plus Jakarta Sans';
|
|
37
|
+
font-style: normal;
|
|
38
|
+
font-weight: 400 700;
|
|
39
|
+
font-display: swap;
|
|
40
|
+
src: url(https://fonts.gstatic.com/s/plusjakartasans/v12/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko40yyygA.woff2)
|
|
41
|
+
format('woff2');
|
|
42
|
+
unicode-range:
|
|
43
|
+
U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329,
|
|
44
|
+
U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
|
45
|
+
U+A720-A7FF;
|
|
46
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paper — The neutral one. Start here if unsure: soft corners, light shadows, generous spacing, and nothing that fights the content.
|
|
3
|
+
*
|
|
4
|
+
* Generated by `bun run index`. Behaviour comes from
|
|
5
|
+
* `@nqmcreative/ui/core`, re-exported below so this one import covers
|
|
6
|
+
* the whole style.
|
|
7
|
+
*/
|
|
8
|
+
export { TONES, focusRing, peerFocusRing, toneBorder, toneBorderLeft, toneBorderSoft, toneFill, toneFocusBorder, toneFocusWithinBorder, toneHoverBorder, toneHoverText, tonePeerChecked, tonePeerFocus, toneRing, toneSoft, toneSoftHover, toneSolid, toneSolidHover, toneSurface, toneText, anchored, clickOutside, focusTrap, focusable, navigateList, portal, toast, locale, setLocale, provideLocale, useLocale, enUS, idID, LocaleStore, applyTheme, storedTheme, toISO, fromISO, today, isSameDay, addDays, addMonths, monthGrid, weekdayNames, monthLabel, isOutOfRange, formatISO, parseFormatted } from '../../core/index.js';
|
|
9
|
+
export type { Tone, Placement, AnchorOptions, ClickOutsideOptions, FocusTrapOptions, Toast, ToastOptions, ToastAction, Locale, Theme, DateFormat, TableSort, SortDirection, RejectedFile } from '../../core/index.js';
|
|
10
|
+
export { default as LocaleProvider } from './LocaleProvider.svelte';
|
|
11
|
+
export { default as Button } from './Button.svelte';
|
|
12
|
+
export type { ButtonVariant, ButtonSize } from './Button.svelte';
|
|
13
|
+
export { default as Link } from './Link.svelte';
|
|
14
|
+
export { default as Input } from './Input.svelte';
|
|
15
|
+
export type { InputSize } from './Input.svelte';
|
|
16
|
+
export { default as Textarea } from './Textarea.svelte';
|
|
17
|
+
export { default as Select } from './Select.svelte';
|
|
18
|
+
export type { SelectOption } from './Select.svelte';
|
|
19
|
+
export { default as Checkbox } from './Checkbox.svelte';
|
|
20
|
+
export { default as Radio } from './Radio.svelte';
|
|
21
|
+
export { default as Switch } from './Switch.svelte';
|
|
22
|
+
export type { SwitchSize } from './Switch.svelte';
|
|
23
|
+
export { default as Field } from './Field.svelte';
|
|
24
|
+
export { default as Label } from './Label.svelte';
|
|
25
|
+
export { default as PasswordInput } from './PasswordInput.svelte';
|
|
26
|
+
export { default as NumberInput } from './NumberInput.svelte';
|
|
27
|
+
export { default as Slider } from './Slider.svelte';
|
|
28
|
+
export { default as RadioGroup } from './RadioGroup.svelte';
|
|
29
|
+
export type { RadioOption } from './RadioGroup.svelte';
|
|
30
|
+
export { default as CheckboxGroup } from './CheckboxGroup.svelte';
|
|
31
|
+
export type { CheckboxOption } from './CheckboxGroup.svelte';
|
|
32
|
+
export { default as SegmentedControl } from './SegmentedControl.svelte';
|
|
33
|
+
export type { SegmentOption, SegmentedSize } from './SegmentedControl.svelte';
|
|
34
|
+
export { default as InputGroup } from './InputGroup.svelte';
|
|
35
|
+
export { default as Combobox } from './Combobox.svelte';
|
|
36
|
+
export type { ComboboxOption } from './Combobox.svelte';
|
|
37
|
+
export { default as MultiSelect } from './MultiSelect.svelte';
|
|
38
|
+
export type { MultiSelectOption } from './MultiSelect.svelte';
|
|
39
|
+
export { default as DatePicker } from './DatePicker.svelte';
|
|
40
|
+
export { default as Calendar } from './Calendar.svelte';
|
|
41
|
+
export { default as Dropzone } from './Dropzone.svelte';
|
|
42
|
+
export { default as Badge } from './Badge.svelte';
|
|
43
|
+
export type { BadgeVariant, BadgeSize } from './Badge.svelte';
|
|
44
|
+
export { default as Avatar } from './Avatar.svelte';
|
|
45
|
+
export type { AvatarSize } from './Avatar.svelte';
|
|
46
|
+
export { default as AvatarGroup } from './AvatarGroup.svelte';
|
|
47
|
+
export { default as Card } from './Card.svelte';
|
|
48
|
+
export type { CardVariant } from './Card.svelte';
|
|
49
|
+
export { default as Stat } from './Stat.svelte';
|
|
50
|
+
export type { StatTrend } from './Stat.svelte';
|
|
51
|
+
export { default as Table } from './Table.svelte';
|
|
52
|
+
export type { TableColumn } from './Table.svelte';
|
|
53
|
+
export { default as Kbd } from './Kbd.svelte';
|
|
54
|
+
export { default as Alert } from './Alert.svelte';
|
|
55
|
+
export type { AlertVariant } from './Alert.svelte';
|
|
56
|
+
export { default as Progress } from './Progress.svelte';
|
|
57
|
+
export type { ProgressSize } from './Progress.svelte';
|
|
58
|
+
export { default as Spinner } from './Spinner.svelte';
|
|
59
|
+
export type { SpinnerSize } from './Spinner.svelte';
|
|
60
|
+
export { default as Skeleton } from './Skeleton.svelte';
|
|
61
|
+
export type { SkeletonVariant } from './Skeleton.svelte';
|
|
62
|
+
export { default as EmptyState } from './EmptyState.svelte';
|
|
63
|
+
export { default as Toaster } from './Toaster.svelte';
|
|
64
|
+
export type { ToasterPosition } from './Toaster.svelte';
|
|
65
|
+
export { default as Divider } from './Divider.svelte';
|
|
66
|
+
export type { DividerOrientation } from './Divider.svelte';
|
|
67
|
+
export { default as Tabs } from './Tabs.svelte';
|
|
68
|
+
export type { TabItem, TabsVariant } from './Tabs.svelte';
|
|
69
|
+
export { default as Accordion } from './Accordion.svelte';
|
|
70
|
+
export { default as AccordionItem } from './AccordionItem.svelte';
|
|
71
|
+
export { default as Breadcrumb } from './Breadcrumb.svelte';
|
|
72
|
+
export type { BreadcrumbItem } from './Breadcrumb.svelte';
|
|
73
|
+
export { default as Pagination } from './Pagination.svelte';
|
|
74
|
+
export { default as Steps } from './Steps.svelte';
|
|
75
|
+
export type { StepItem } from './Steps.svelte';
|
|
76
|
+
export { default as Navbar } from './Navbar.svelte';
|
|
77
|
+
export type { NavItem } from './Navbar.svelte';
|
|
78
|
+
export { default as Sidebar } from './Sidebar.svelte';
|
|
79
|
+
export type { SidebarItem, SidebarSection } from './Sidebar.svelte';
|
|
80
|
+
export { default as Footer } from './Footer.svelte';
|
|
81
|
+
export type { FooterLink, FooterColumn } from './Footer.svelte';
|
|
82
|
+
export { default as HeroSection } from './HeroSection.svelte';
|
|
83
|
+
export { default as FeatureGrid } from './FeatureGrid.svelte';
|
|
84
|
+
export type { FeatureColumns } from './FeatureGrid.svelte';
|
|
85
|
+
export { default as FeatureCard } from './FeatureCard.svelte';
|
|
86
|
+
export { default as PricingCard } from './PricingCard.svelte';
|
|
87
|
+
export { default as Testimonial } from './Testimonial.svelte';
|
|
88
|
+
export type { TestimonialVariant } from './Testimonial.svelte';
|
|
89
|
+
export { default as LogoCloud } from './LogoCloud.svelte';
|
|
90
|
+
export type { Logo } from './LogoCloud.svelte';
|
|
91
|
+
export { default as CTASection } from './CTASection.svelte';
|
|
92
|
+
export type { CTAVariant } from './CTASection.svelte';
|
|
93
|
+
export { default as StatsBand } from './StatsBand.svelte';
|
|
94
|
+
export type { BandStat } from './StatsBand.svelte';
|
|
95
|
+
export { default as Modal } from './Modal.svelte';
|
|
96
|
+
export type { ModalSize } from './Modal.svelte';
|
|
97
|
+
export { default as Drawer } from './Drawer.svelte';
|
|
98
|
+
export type { DrawerSide, DrawerSize } from './Drawer.svelte';
|
|
99
|
+
export { default as ConfirmDialog } from './ConfirmDialog.svelte';
|
|
100
|
+
export { default as CommandPalette } from './CommandPalette.svelte';
|
|
101
|
+
export type { CommandItem } from './CommandPalette.svelte';
|
|
102
|
+
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
103
|
+
export { default as Dropdown } from './Dropdown.svelte';
|
|
104
|
+
export { default as MenuItem } from './MenuItem.svelte';
|
|
105
|
+
export { default as MenuSeparator } from './MenuSeparator.svelte';
|
|
106
|
+
export { default as Popover } from './Popover.svelte';
|
|
107
|
+
export { default as ThemeToggle } from './ThemeToggle.svelte';
|
|
108
|
+
export { default as Tooltip } from './Tooltip.svelte';
|
|
109
|
+
export type { TooltipPlacement } from './Tooltip.svelte';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paper — The neutral one. Start here if unsure: soft corners, light shadows, generous spacing, and nothing that fights the content.
|
|
3
|
+
*
|
|
4
|
+
* Generated by `bun run index`. Behaviour comes from
|
|
5
|
+
* `@nqmcreative/ui/core`, re-exported below so this one import covers
|
|
6
|
+
* the whole style.
|
|
7
|
+
*/
|
|
8
|
+
/* --- shared behaviour --- */
|
|
9
|
+
export { TONES, focusRing, peerFocusRing, toneBorder, toneBorderLeft, toneBorderSoft, toneFill, toneFocusBorder, toneFocusWithinBorder, toneHoverBorder, toneHoverText, tonePeerChecked, tonePeerFocus, toneRing, toneSoft, toneSoftHover, toneSolid, toneSolidHover, toneSurface, toneText, anchored, clickOutside, focusTrap, focusable, navigateList, portal, toast, locale, setLocale, provideLocale, useLocale, enUS, idID, LocaleStore, applyTheme, storedTheme, toISO, fromISO, today, isSameDay, addDays, addMonths, monthGrid, weekdayNames, monthLabel, isOutOfRange, formatISO, parseFormatted } from '../../core/index.js';
|
|
10
|
+
/* --- locale --- */
|
|
11
|
+
export { default as LocaleProvider } from './LocaleProvider.svelte';
|
|
12
|
+
/* --- actions --- */
|
|
13
|
+
export { default as Button } from './Button.svelte';
|
|
14
|
+
export { default as Link } from './Link.svelte';
|
|
15
|
+
/* --- forms --- */
|
|
16
|
+
export { default as Input } from './Input.svelte';
|
|
17
|
+
export { default as Textarea } from './Textarea.svelte';
|
|
18
|
+
export { default as Select } from './Select.svelte';
|
|
19
|
+
export { default as Checkbox } from './Checkbox.svelte';
|
|
20
|
+
export { default as Radio } from './Radio.svelte';
|
|
21
|
+
export { default as Switch } from './Switch.svelte';
|
|
22
|
+
export { default as Field } from './Field.svelte';
|
|
23
|
+
export { default as Label } from './Label.svelte';
|
|
24
|
+
export { default as PasswordInput } from './PasswordInput.svelte';
|
|
25
|
+
export { default as NumberInput } from './NumberInput.svelte';
|
|
26
|
+
export { default as Slider } from './Slider.svelte';
|
|
27
|
+
export { default as RadioGroup } from './RadioGroup.svelte';
|
|
28
|
+
export { default as CheckboxGroup } from './CheckboxGroup.svelte';
|
|
29
|
+
export { default as SegmentedControl } from './SegmentedControl.svelte';
|
|
30
|
+
export { default as InputGroup } from './InputGroup.svelte';
|
|
31
|
+
export { default as Combobox } from './Combobox.svelte';
|
|
32
|
+
export { default as MultiSelect } from './MultiSelect.svelte';
|
|
33
|
+
export { default as DatePicker } from './DatePicker.svelte';
|
|
34
|
+
export { default as Calendar } from './Calendar.svelte';
|
|
35
|
+
export { default as Dropzone } from './Dropzone.svelte';
|
|
36
|
+
/* --- data display --- */
|
|
37
|
+
export { default as Badge } from './Badge.svelte';
|
|
38
|
+
export { default as Avatar } from './Avatar.svelte';
|
|
39
|
+
export { default as AvatarGroup } from './AvatarGroup.svelte';
|
|
40
|
+
export { default as Card } from './Card.svelte';
|
|
41
|
+
export { default as Stat } from './Stat.svelte';
|
|
42
|
+
export { default as Table } from './Table.svelte';
|
|
43
|
+
export { default as Kbd } from './Kbd.svelte';
|
|
44
|
+
/* --- feedback --- */
|
|
45
|
+
export { default as Alert } from './Alert.svelte';
|
|
46
|
+
export { default as Progress } from './Progress.svelte';
|
|
47
|
+
export { default as Spinner } from './Spinner.svelte';
|
|
48
|
+
export { default as Skeleton } from './Skeleton.svelte';
|
|
49
|
+
export { default as EmptyState } from './EmptyState.svelte';
|
|
50
|
+
export { default as Toaster } from './Toaster.svelte';
|
|
51
|
+
/* --- layout & navigation --- */
|
|
52
|
+
export { default as Divider } from './Divider.svelte';
|
|
53
|
+
export { default as Tabs } from './Tabs.svelte';
|
|
54
|
+
export { default as Accordion } from './Accordion.svelte';
|
|
55
|
+
export { default as AccordionItem } from './AccordionItem.svelte';
|
|
56
|
+
export { default as Breadcrumb } from './Breadcrumb.svelte';
|
|
57
|
+
export { default as Pagination } from './Pagination.svelte';
|
|
58
|
+
export { default as Steps } from './Steps.svelte';
|
|
59
|
+
/* --- app shell --- */
|
|
60
|
+
export { default as Navbar } from './Navbar.svelte';
|
|
61
|
+
export { default as Sidebar } from './Sidebar.svelte';
|
|
62
|
+
export { default as Footer } from './Footer.svelte';
|
|
63
|
+
/* --- marketing --- */
|
|
64
|
+
export { default as HeroSection } from './HeroSection.svelte';
|
|
65
|
+
export { default as FeatureGrid } from './FeatureGrid.svelte';
|
|
66
|
+
export { default as FeatureCard } from './FeatureCard.svelte';
|
|
67
|
+
export { default as PricingCard } from './PricingCard.svelte';
|
|
68
|
+
export { default as Testimonial } from './Testimonial.svelte';
|
|
69
|
+
export { default as LogoCloud } from './LogoCloud.svelte';
|
|
70
|
+
export { default as CTASection } from './CTASection.svelte';
|
|
71
|
+
export { default as StatsBand } from './StatsBand.svelte';
|
|
72
|
+
/* --- overlay --- */
|
|
73
|
+
export { default as Modal } from './Modal.svelte';
|
|
74
|
+
export { default as Drawer } from './Drawer.svelte';
|
|
75
|
+
export { default as ConfirmDialog } from './ConfirmDialog.svelte';
|
|
76
|
+
export { default as CommandPalette } from './CommandPalette.svelte';
|
|
77
|
+
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
78
|
+
export { default as Dropdown } from './Dropdown.svelte';
|
|
79
|
+
export { default as MenuItem } from './MenuItem.svelte';
|
|
80
|
+
export { default as MenuSeparator } from './MenuSeparator.svelte';
|
|
81
|
+
export { default as Popover } from './Popover.svelte';
|
|
82
|
+
export { default as ThemeToggle } from './ThemeToggle.svelte';
|
|
83
|
+
export { default as Tooltip } from './Tooltip.svelte';
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* paper — design tokens.
|
|
3
|
+
*
|
|
4
|
+
* The neutral style: soft corners, light shadows, and a palette that gets out
|
|
5
|
+
* of the content's way. Import this after `@import "tailwindcss";` in your
|
|
6
|
+
* app's CSS entry point.
|
|
7
|
+
*
|
|
8
|
+
* The token *names* are a contract shared by every style — `core` and every
|
|
9
|
+
* component are written against them, so only the values below change from one
|
|
10
|
+
* style to the next. Each hue follows the same 4-step shape:
|
|
11
|
+
*
|
|
12
|
+
* --color-<tone> base / solid fill / text on light surfaces
|
|
13
|
+
* --color-<tone>-hover darker step for hover + active
|
|
14
|
+
* --color-<tone>-light tinted surface (soft variants, alerts, badges)
|
|
15
|
+
* --color-<tone>-border hairline that reads against the tinted surface
|
|
16
|
+
*/
|
|
17
|
+
@theme {
|
|
18
|
+
/* --- surfaces --- */
|
|
19
|
+
--color-bg: #ffffff;
|
|
20
|
+
--color-bg-alt: #f9fafb;
|
|
21
|
+
--color-bg-inset: #f3f4f6;
|
|
22
|
+
--color-hairline: #e5e7eb;
|
|
23
|
+
--color-hairline-strong: #d1d5db;
|
|
24
|
+
|
|
25
|
+
/* --- text --- */
|
|
26
|
+
--color-text: #111827;
|
|
27
|
+
--color-text-secondary: #4b5563;
|
|
28
|
+
--color-text-muted: #6b7280;
|
|
29
|
+
--color-text-inverse: #ffffff;
|
|
30
|
+
|
|
31
|
+
/* --- brand / primary (indigo) --- */
|
|
32
|
+
--color-brand: #4f46e5;
|
|
33
|
+
--color-brand-hover: #4338ca;
|
|
34
|
+
--color-brand-light: #eef2ff;
|
|
35
|
+
--color-brand-border: #c7d2fe;
|
|
36
|
+
|
|
37
|
+
/* --- accent (rose) --- */
|
|
38
|
+
--color-accent: #e11d48;
|
|
39
|
+
--color-accent-hover: #be123c;
|
|
40
|
+
--color-accent-light: #fff1f2;
|
|
41
|
+
--color-accent-border: #fecdd3;
|
|
42
|
+
|
|
43
|
+
/* --- violet --- */
|
|
44
|
+
--color-violet: #7c3aed;
|
|
45
|
+
--color-violet-hover: #6d28d9;
|
|
46
|
+
--color-violet-light: #f5f3ff;
|
|
47
|
+
--color-violet-border: #ddd6fe;
|
|
48
|
+
|
|
49
|
+
/* --- info (blue) --- */
|
|
50
|
+
--color-info: #2563eb;
|
|
51
|
+
--color-info-hover: #1d4ed8;
|
|
52
|
+
--color-info-light: #eff6ff;
|
|
53
|
+
--color-info-border: #bfdbfe;
|
|
54
|
+
|
|
55
|
+
/* --- success (emerald) --- */
|
|
56
|
+
--color-success: #059669;
|
|
57
|
+
--color-success-hover: #047857;
|
|
58
|
+
--color-success-light: #ecfdf5;
|
|
59
|
+
--color-success-border: #a7f3d0;
|
|
60
|
+
|
|
61
|
+
/* --- warning (amber) --- */
|
|
62
|
+
--color-warning: #d97706;
|
|
63
|
+
--color-warning-hover: #b45309;
|
|
64
|
+
--color-warning-light: #fffbeb;
|
|
65
|
+
--color-warning-border: #fde68a;
|
|
66
|
+
|
|
67
|
+
/* --- danger (red) --- */
|
|
68
|
+
--color-danger: #dc2626;
|
|
69
|
+
--color-danger-hover: #b91c1c;
|
|
70
|
+
--color-danger-light: #fef2f2;
|
|
71
|
+
--color-danger-border: #fecaca;
|
|
72
|
+
|
|
73
|
+
/* --- neutral (gray) --- */
|
|
74
|
+
--color-neutral: #6b7280;
|
|
75
|
+
--color-neutral-hover: #4b5563;
|
|
76
|
+
--color-neutral-light: #f3f4f6;
|
|
77
|
+
--color-neutral-border: #d1d5db;
|
|
78
|
+
|
|
79
|
+
/* --- type --- */
|
|
80
|
+
/*
|
|
81
|
+
* Plus Jakarta Sans: rounded terminals, open counters, low contrast. Softer
|
|
82
|
+
* than a system stack, which lands on Segoe UI for most readers and gives
|
|
83
|
+
* paper's generous spacing nothing warm to sit in.
|
|
84
|
+
*
|
|
85
|
+
* One variable file covers 400 to 700, so this costs a single request per
|
|
86
|
+
* subset — see `fonts.css`. Everything degrades to the system stack if that
|
|
87
|
+
* file is not imported, so the webfont stays optional.
|
|
88
|
+
*/
|
|
89
|
+
--font-sans:
|
|
90
|
+
'Plus Jakarta Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
91
|
+
--font-heading:
|
|
92
|
+
'Plus Jakarta Sans', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
93
|
+
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;
|
|
94
|
+
|
|
95
|
+
/* --- motion --- */
|
|
96
|
+
--ease-brand: cubic-bezier(0.4, 0, 0.2, 1);
|
|
97
|
+
--ease-brand-out: cubic-bezier(0, 0, 0.2, 1);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* Dark mode. Two ways in, and they cooperate:
|
|
102
|
+
*
|
|
103
|
+
* 1. put `class="dark"` on <html> — an explicit choice always wins
|
|
104
|
+
* 2. do nothing — the OS preference applies, unless <html> says `class="light"`
|
|
105
|
+
*
|
|
106
|
+
* Both blocks below carry the same values on purpose; keep them in sync.
|
|
107
|
+
* Every utility built on these tokens follows automatically, so components
|
|
108
|
+
* need no `dark:` classes of their own.
|
|
109
|
+
*/
|
|
110
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
111
|
+
|
|
112
|
+
.dark {
|
|
113
|
+
color-scheme: dark;
|
|
114
|
+
|
|
115
|
+
--color-bg: #0b0f19;
|
|
116
|
+
--color-bg-alt: #111827;
|
|
117
|
+
--color-bg-inset: #1f2937;
|
|
118
|
+
--color-hairline: #1f2937;
|
|
119
|
+
--color-hairline-strong: #374151;
|
|
120
|
+
|
|
121
|
+
--color-text: #f9fafb;
|
|
122
|
+
--color-text-secondary: #d1d5db;
|
|
123
|
+
--color-text-muted: #9ca3af;
|
|
124
|
+
--color-text-inverse: #0b0f19;
|
|
125
|
+
|
|
126
|
+
--color-brand: #818cf8;
|
|
127
|
+
--color-brand-hover: #a5b4fc;
|
|
128
|
+
--color-brand-light: #1e1b4b;
|
|
129
|
+
--color-brand-border: #3730a3;
|
|
130
|
+
|
|
131
|
+
--color-accent: #fb7185;
|
|
132
|
+
--color-accent-hover: #fda4af;
|
|
133
|
+
--color-accent-light: #4c0519;
|
|
134
|
+
--color-accent-border: #9f1239;
|
|
135
|
+
|
|
136
|
+
--color-violet: #a78bfa;
|
|
137
|
+
--color-violet-hover: #c4b5fd;
|
|
138
|
+
--color-violet-light: #2e1065;
|
|
139
|
+
--color-violet-border: #5b21b6;
|
|
140
|
+
|
|
141
|
+
--color-info: #60a5fa;
|
|
142
|
+
--color-info-hover: #93c5fd;
|
|
143
|
+
--color-info-light: #172554;
|
|
144
|
+
--color-info-border: #1e40af;
|
|
145
|
+
|
|
146
|
+
--color-success: #34d399;
|
|
147
|
+
--color-success-hover: #6ee7b7;
|
|
148
|
+
--color-success-light: #022c22;
|
|
149
|
+
--color-success-border: #065f46;
|
|
150
|
+
|
|
151
|
+
--color-warning: #fbbf24;
|
|
152
|
+
--color-warning-hover: #fcd34d;
|
|
153
|
+
--color-warning-light: #451a03;
|
|
154
|
+
--color-warning-border: #92400e;
|
|
155
|
+
|
|
156
|
+
--color-danger: #f87171;
|
|
157
|
+
--color-danger-hover: #fca5a5;
|
|
158
|
+
--color-danger-light: #450a0a;
|
|
159
|
+
--color-danger-border: #991b1b;
|
|
160
|
+
|
|
161
|
+
--color-neutral: #9ca3af;
|
|
162
|
+
--color-neutral-hover: #d1d5db;
|
|
163
|
+
--color-neutral-light: #1f2937;
|
|
164
|
+
--color-neutral-border: #374151;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@media (prefers-color-scheme: dark) {
|
|
168
|
+
:root:not(.light) {
|
|
169
|
+
color-scheme: dark;
|
|
170
|
+
|
|
171
|
+
--color-bg: #0b0f19;
|
|
172
|
+
--color-bg-alt: #111827;
|
|
173
|
+
--color-bg-inset: #1f2937;
|
|
174
|
+
--color-hairline: #1f2937;
|
|
175
|
+
--color-hairline-strong: #374151;
|
|
176
|
+
|
|
177
|
+
--color-text: #f9fafb;
|
|
178
|
+
--color-text-secondary: #d1d5db;
|
|
179
|
+
--color-text-muted: #9ca3af;
|
|
180
|
+
--color-text-inverse: #0b0f19;
|
|
181
|
+
|
|
182
|
+
--color-brand: #818cf8;
|
|
183
|
+
--color-brand-hover: #a5b4fc;
|
|
184
|
+
--color-brand-light: #1e1b4b;
|
|
185
|
+
--color-brand-border: #3730a3;
|
|
186
|
+
|
|
187
|
+
--color-accent: #fb7185;
|
|
188
|
+
--color-accent-hover: #fda4af;
|
|
189
|
+
--color-accent-light: #4c0519;
|
|
190
|
+
--color-accent-border: #9f1239;
|
|
191
|
+
|
|
192
|
+
--color-violet: #a78bfa;
|
|
193
|
+
--color-violet-hover: #c4b5fd;
|
|
194
|
+
--color-violet-light: #2e1065;
|
|
195
|
+
--color-violet-border: #5b21b6;
|
|
196
|
+
|
|
197
|
+
--color-info: #60a5fa;
|
|
198
|
+
--color-info-hover: #93c5fd;
|
|
199
|
+
--color-info-light: #172554;
|
|
200
|
+
--color-info-border: #1e40af;
|
|
201
|
+
|
|
202
|
+
--color-success: #34d399;
|
|
203
|
+
--color-success-hover: #6ee7b7;
|
|
204
|
+
--color-success-light: #022c22;
|
|
205
|
+
--color-success-border: #065f46;
|
|
206
|
+
|
|
207
|
+
--color-warning: #fbbf24;
|
|
208
|
+
--color-warning-hover: #fcd34d;
|
|
209
|
+
--color-warning-light: #451a03;
|
|
210
|
+
--color-warning-border: #92400e;
|
|
211
|
+
|
|
212
|
+
--color-danger: #f87171;
|
|
213
|
+
--color-danger-hover: #fca5a5;
|
|
214
|
+
--color-danger-light: #450a0a;
|
|
215
|
+
--color-danger-border: #991b1b;
|
|
216
|
+
|
|
217
|
+
--color-neutral: #9ca3af;
|
|
218
|
+
--color-neutral-hover: #d1d5db;
|
|
219
|
+
--color-neutral-light: #1f2937;
|
|
220
|
+
--color-neutral-border: #374151;
|
|
221
|
+
}
|
|
222
|
+
}
|