@sepale/components 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +65 -3
- package/dist/components/Accordion.svelte +48 -0
- package/dist/components/Accordion.svelte.d.ts +24 -0
- package/dist/components/Alert.svelte +107 -0
- package/dist/components/Alert.svelte.d.ts +40 -0
- package/dist/components/Avatar.svelte +75 -0
- package/dist/components/Avatar.svelte.d.ts +37 -0
- package/dist/components/Badge.svelte +46 -0
- package/dist/components/Badge.svelte.d.ts +22 -0
- package/dist/components/Breadcrumbs.svelte +36 -0
- package/dist/components/Breadcrumbs.svelte.d.ts +18 -0
- package/dist/components/Bubble.svelte +43 -0
- package/dist/components/Bubble.svelte.d.ts +23 -0
- package/dist/components/Button.svelte +132 -0
- package/dist/components/Button.svelte.d.ts +40 -0
- package/dist/components/Calendar.svelte +193 -0
- package/dist/components/Calendar.svelte.d.ts +60 -0
- package/dist/components/Card.svelte +69 -0
- package/dist/components/Card.svelte.d.ts +37 -0
- package/dist/components/Carousel.svelte +550 -0
- package/dist/components/Carousel.svelte.d.ts +124 -0
- package/dist/components/Checkbox.svelte +48 -0
- package/dist/components/Checkbox.svelte.d.ts +26 -0
- package/dist/components/Chip.svelte +60 -0
- package/dist/components/Chip.svelte.d.ts +26 -0
- package/dist/components/ChipsInput.svelte +158 -0
- package/dist/components/ChipsInput.svelte.d.ts +64 -0
- package/dist/components/Collapse.svelte +101 -0
- package/dist/components/Collapse.svelte.d.ts +46 -0
- package/dist/components/ColorPicker.svelte +135 -0
- package/dist/components/ColorPicker.svelte.d.ts +44 -0
- package/dist/components/Combobox.svelte +496 -0
- package/dist/components/Combobox.svelte.d.ts +96 -0
- package/dist/components/DataControl.svelte +754 -0
- package/dist/components/DataControl.svelte.d.ts +143 -0
- package/dist/components/DataHandler.svelte +67 -0
- package/dist/components/DataHandler.svelte.d.ts +44 -0
- package/dist/components/DatePicker.svelte +185 -0
- package/dist/components/DatePicker.svelte.d.ts +56 -0
- package/dist/components/Dialog.svelte +194 -0
- package/dist/components/Dialog.svelte.d.ts +51 -0
- package/dist/components/Divider.svelte +54 -0
- package/dist/components/Divider.svelte.d.ts +27 -0
- package/dist/components/Dock.svelte +34 -0
- package/dist/components/Dock.svelte.d.ts +18 -0
- package/dist/components/Drawer.svelte +174 -0
- package/dist/components/Drawer.svelte.d.ts +51 -0
- package/dist/components/Dropdown.svelte +183 -0
- package/dist/components/Dropdown.svelte.d.ts +52 -0
- package/dist/components/Editable.svelte +292 -0
- package/dist/components/Editable.svelte.d.ts +113 -0
- package/dist/components/EmptyState.svelte +64 -0
- package/dist/components/EmptyState.svelte.d.ts +29 -0
- package/dist/components/Fieldset.svelte +42 -0
- package/dist/components/Fieldset.svelte.d.ts +20 -0
- package/dist/components/FileDropzone.svelte +154 -0
- package/dist/components/FileDropzone.svelte.d.ts +45 -0
- package/dist/components/FileExplorer.svelte +643 -0
- package/dist/components/FileExplorer.svelte.d.ts +114 -0
- package/dist/components/FileInput.svelte +125 -0
- package/dist/components/FileInput.svelte.d.ts +51 -0
- package/dist/components/FloatingLabel.svelte +38 -0
- package/dist/components/FloatingLabel.svelte.d.ts +24 -0
- package/dist/components/Footer.svelte +68 -0
- package/dist/components/Footer.svelte.d.ts +37 -0
- package/dist/components/Grid.svelte +122 -0
- package/dist/components/Grid.svelte.d.ts +72 -0
- package/dist/components/Hero.svelte +62 -0
- package/dist/components/Hero.svelte.d.ts +33 -0
- package/dist/components/Input.svelte +184 -0
- package/dist/components/Input.svelte.d.ts +65 -0
- package/dist/components/Join.svelte +38 -0
- package/dist/components/Join.svelte.d.ts +21 -0
- package/dist/components/Kanban.svelte +284 -0
- package/dist/components/Kanban.svelte.d.ts +93 -0
- package/dist/components/Label.svelte +32 -0
- package/dist/components/Label.svelte.d.ts +21 -0
- package/dist/components/LaptopFrame.svelte +44 -0
- package/dist/components/LaptopFrame.svelte.d.ts +21 -0
- package/dist/components/List.svelte +95 -0
- package/dist/components/List.svelte.d.ts +69 -0
- package/dist/components/Loading.svelte +37 -0
- package/dist/components/Loading.svelte.d.ts +17 -0
- package/dist/components/Menu.svelte +144 -0
- package/dist/components/Menu.svelte.d.ts +53 -0
- package/dist/components/MobileFrame.svelte +41 -0
- package/dist/components/MobileFrame.svelte.d.ts +21 -0
- package/dist/components/Navbar.svelte +49 -0
- package/dist/components/Navbar.svelte.d.ts +25 -0
- package/dist/components/NumberInput.svelte +255 -0
- package/dist/components/NumberInput.svelte.d.ts +68 -0
- package/dist/components/Pagination.svelte +169 -0
- package/dist/components/Pagination.svelte.d.ts +50 -0
- package/dist/components/Progress.svelte +65 -0
- package/dist/components/Progress.svelte.d.ts +28 -0
- package/dist/components/RadialProgress.svelte +48 -0
- package/dist/components/RadialProgress.svelte.d.ts +20 -0
- package/dist/components/Radio.svelte +50 -0
- package/dist/components/Radio.svelte.d.ts +28 -0
- package/dist/components/Range.svelte +53 -0
- package/dist/components/Range.svelte.d.ts +26 -0
- package/dist/components/Rating.svelte +90 -0
- package/dist/components/Rating.svelte.d.ts +41 -0
- package/dist/components/Select.svelte +338 -0
- package/dist/components/Select.svelte.d.ts +74 -0
- package/dist/components/Sidebar.svelte +100 -0
- package/dist/components/Sidebar.svelte.d.ts +54 -0
- package/dist/components/Skeleton.svelte +40 -0
- package/dist/components/Skeleton.svelte.d.ts +18 -0
- package/dist/components/Stat.svelte +71 -0
- package/dist/components/Stat.svelte.d.ts +35 -0
- package/dist/components/Stats.svelte +38 -0
- package/dist/components/Stats.svelte.d.ts +22 -0
- package/dist/components/Steps.svelte +204 -0
- package/dist/components/Steps.svelte.d.ts +66 -0
- package/dist/components/Subtitle.svelte +44 -0
- package/dist/components/Subtitle.svelte.d.ts +26 -0
- package/dist/components/Swatch.svelte +61 -0
- package/dist/components/Swatch.svelte.d.ts +27 -0
- package/dist/components/Switch.svelte +105 -0
- package/dist/components/Switch.svelte.d.ts +44 -0
- package/dist/components/Table.svelte +243 -0
- package/dist/components/Table.svelte.d.ts +121 -0
- package/dist/components/Tabs.svelte +142 -0
- package/dist/components/Tabs.svelte.d.ts +80 -0
- package/dist/components/Text.svelte +43 -0
- package/dist/components/Text.svelte.d.ts +25 -0
- package/dist/components/Textarea.svelte +76 -0
- package/dist/components/Textarea.svelte.d.ts +39 -0
- package/dist/components/Title.svelte +46 -0
- package/dist/components/Title.svelte.d.ts +29 -0
- package/dist/components/Toast.svelte +154 -0
- package/dist/components/Toast.svelte.d.ts +49 -0
- package/dist/components/Toggle.svelte +48 -0
- package/dist/components/Toggle.svelte.d.ts +25 -0
- package/dist/components/Tooltip.svelte +70 -0
- package/dist/components/Tooltip.svelte.d.ts +34 -0
- package/dist/components/WindowFrame.svelte +53 -0
- package/dist/components/WindowFrame.svelte.d.ts +24 -0
- package/dist/components/accordion-context.d.ts +8 -0
- package/dist/components/accordion-context.js +25 -0
- package/dist/components/color.d.ts +39 -0
- package/dist/components/color.js +92 -0
- package/dist/components/data-handler.svelte.d.ts +362 -0
- package/dist/components/data-handler.svelte.js +690 -0
- package/dist/components/file-icons.d.ts +25 -0
- package/dist/components/file-icons.js +46 -0
- package/dist/family-types.d.ts +45 -0
- package/dist/family-types.js +73 -0
- package/dist/generated/classes.d.ts +17 -0
- package/dist/generated/classes.js +2511 -0
- package/dist/generated/components.d.ts +39 -0
- package/dist/generated/components.js +28666 -0
- package/dist/generated/registry.d.ts +35 -0
- package/dist/generated/registry.js +2658 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.js +99 -0
- package/dist/sepale-types.d.ts +8 -0
- package/dist/sepale-types.js +200 -0
- package/dist/theme.d.ts +123 -0
- package/dist/theme.js +226 -0
- package/dist/variants.d.ts +124 -0
- package/dist/variants.js +70 -0
- package/dist/vendor/air-datepicker/LICENSE.md +21 -0
- package/dist/vendor/air-datepicker/README.md +19 -0
- package/dist/vendor/air-datepicker/buttonPresets.d.ts +13 -0
- package/dist/vendor/air-datepicker/buttonPresets.js +12 -0
- package/dist/vendor/air-datepicker/consts.d.ts +18 -0
- package/dist/vendor/air-datepicker/consts.js +35 -0
- package/dist/vendor/air-datepicker/datepicker.d.ts +289 -0
- package/dist/vendor/air-datepicker/datepicker.js +1435 -0
- package/dist/vendor/air-datepicker/datepickerBody.d.ts +46 -0
- package/dist/vendor/air-datepicker/datepickerBody.js +386 -0
- package/dist/vendor/air-datepicker/datepickerButtons.d.ts +25 -0
- package/dist/vendor/air-datepicker/datepickerButtons.js +85 -0
- package/dist/vendor/air-datepicker/datepickerCell.d.ts +35 -0
- package/dist/vendor/air-datepicker/datepickerCell.js +297 -0
- package/dist/vendor/air-datepicker/datepickerKeyboard.d.ts +26 -0
- package/dist/vendor/air-datepicker/datepickerKeyboard.js +207 -0
- package/dist/vendor/air-datepicker/datepickerNav.d.ts +31 -0
- package/dist/vendor/air-datepicker/datepickerNav.js +200 -0
- package/dist/vendor/air-datepicker/datepickerTime.d.ts +60 -0
- package/dist/vendor/air-datepicker/datepickerTime.js +276 -0
- package/dist/vendor/air-datepicker/defaults.d.ts +65 -0
- package/dist/vendor/air-datepicker/defaults.js +79 -0
- package/dist/vendor/air-datepicker/index.d.ts +168 -0
- package/dist/vendor/air-datepicker/index.js +3 -0
- package/dist/vendor/air-datepicker/locale/ar.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ar.js +14 -0
- package/dist/vendor/air-datepicker/locale/bg.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/bg.js +14 -0
- package/dist/vendor/air-datepicker/locale/ca.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ca.js +14 -0
- package/dist/vendor/air-datepicker/locale/cs.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/cs.js +14 -0
- package/dist/vendor/air-datepicker/locale/da.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/da.js +14 -0
- package/dist/vendor/air-datepicker/locale/de.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/de.js +14 -0
- package/dist/vendor/air-datepicker/locale/el.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/el.js +14 -0
- package/dist/vendor/air-datepicker/locale/en.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/en.js +14 -0
- package/dist/vendor/air-datepicker/locale/es.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/es.js +14 -0
- package/dist/vendor/air-datepicker/locale/eu.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/eu.js +14 -0
- package/dist/vendor/air-datepicker/locale/fi.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/fi.js +14 -0
- package/dist/vendor/air-datepicker/locale/fr.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/fr.js +14 -0
- package/dist/vendor/air-datepicker/locale/hr.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/hr.js +14 -0
- package/dist/vendor/air-datepicker/locale/hu.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/hu.js +14 -0
- package/dist/vendor/air-datepicker/locale/id.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/id.js +14 -0
- package/dist/vendor/air-datepicker/locale/it.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/it.js +14 -0
- package/dist/vendor/air-datepicker/locale/ja.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ja.js +14 -0
- package/dist/vendor/air-datepicker/locale/ko.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ko.js +14 -0
- package/dist/vendor/air-datepicker/locale/nb.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/nb.js +14 -0
- package/dist/vendor/air-datepicker/locale/nl.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/nl.js +14 -0
- package/dist/vendor/air-datepicker/locale/pl.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/pl.js +14 -0
- package/dist/vendor/air-datepicker/locale/pt-BR.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/pt-BR.js +14 -0
- package/dist/vendor/air-datepicker/locale/pt.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/pt.js +14 -0
- package/dist/vendor/air-datepicker/locale/ro.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ro.js +14 -0
- package/dist/vendor/air-datepicker/locale/ru.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/ru.js +14 -0
- package/dist/vendor/air-datepicker/locale/si.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/si.js +14 -0
- package/dist/vendor/air-datepicker/locale/sk.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/sk.js +14 -0
- package/dist/vendor/air-datepicker/locale/sl.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/sl.js +14 -0
- package/dist/vendor/air-datepicker/locale/sv.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/sv.js +14 -0
- package/dist/vendor/air-datepicker/locale/th.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/th.js +14 -0
- package/dist/vendor/air-datepicker/locale/tr.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/tr.js +16 -0
- package/dist/vendor/air-datepicker/locale/uk.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/uk.js +14 -0
- package/dist/vendor/air-datepicker/locale/zh.d.ts +4 -0
- package/dist/vendor/air-datepicker/locale/zh.js +14 -0
- package/dist/vendor/air-datepicker/typedefs.d.ts +3 -0
- package/dist/vendor/air-datepicker/typedefs.js +15 -0
- package/dist/vendor/air-datepicker/utils.d.ts +155 -0
- package/dist/vendor/air-datepicker/utils.js +395 -0
- package/dist/vendor/air-datepicker/withEvents.d.ts +1 -0
- package/dist/vendor/air-datepicker/withEvents.js +39 -0
- package/package.json +44 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export { default as Button } from './components/Button.svelte';
|
|
2
|
+
export { default as Input } from './components/Input.svelte';
|
|
3
|
+
export { default as Textarea } from './components/Textarea.svelte';
|
|
4
|
+
export { default as Select } from './components/Select.svelte';
|
|
5
|
+
export { default as Combobox, type ComboboxSource } from './components/Combobox.svelte';
|
|
6
|
+
export { default as ChipsInput, type ChipsInputField } from './components/ChipsInput.svelte';
|
|
7
|
+
export { default as FileInput } from './components/FileInput.svelte';
|
|
8
|
+
export { default as FileDropzone } from './components/FileDropzone.svelte';
|
|
9
|
+
export { default as Calendar } from './components/Calendar.svelte';
|
|
10
|
+
export { default as DatePicker } from './components/DatePicker.svelte';
|
|
11
|
+
export { default as Checkbox } from './components/Checkbox.svelte';
|
|
12
|
+
export { default as Radio } from './components/Radio.svelte';
|
|
13
|
+
export { default as Toggle } from './components/Toggle.svelte';
|
|
14
|
+
export { default as Range } from './components/Range.svelte';
|
|
15
|
+
export { default as Fieldset } from './components/Fieldset.svelte';
|
|
16
|
+
export { default as Label } from './components/Label.svelte';
|
|
17
|
+
export { default as FloatingLabel } from './components/FloatingLabel.svelte';
|
|
18
|
+
export { default as Switch } from './components/Switch.svelte';
|
|
19
|
+
export { default as NumberInput } from './components/NumberInput.svelte';
|
|
20
|
+
export { default as Avatar } from './components/Avatar.svelte';
|
|
21
|
+
export { default as Bubble } from './components/Bubble.svelte';
|
|
22
|
+
export { default as Chip } from './components/Chip.svelte';
|
|
23
|
+
export { default as Badge } from './components/Badge.svelte';
|
|
24
|
+
export { default as Swatch } from './components/Swatch.svelte';
|
|
25
|
+
export { default as ColorPicker } from './components/ColorPicker.svelte';
|
|
26
|
+
export { default as Loading } from './components/Loading.svelte';
|
|
27
|
+
export { default as Progress } from './components/Progress.svelte';
|
|
28
|
+
export { default as RadialProgress } from './components/RadialProgress.svelte';
|
|
29
|
+
export { default as Skeleton } from './components/Skeleton.svelte';
|
|
30
|
+
export { default as List } from './components/List.svelte';
|
|
31
|
+
export { default as Card } from './components/Card.svelte';
|
|
32
|
+
export { default as Stat } from './components/Stat.svelte';
|
|
33
|
+
export { default as Stats } from './components/Stats.svelte';
|
|
34
|
+
export { default as Carousel } from './components/Carousel.svelte';
|
|
35
|
+
export { default as Text } from './components/Text.svelte';
|
|
36
|
+
export { default as Title } from './components/Title.svelte';
|
|
37
|
+
export { default as Subtitle } from './components/Subtitle.svelte';
|
|
38
|
+
export { default as Divider } from './components/Divider.svelte';
|
|
39
|
+
export { default as Alert } from './components/Alert.svelte';
|
|
40
|
+
export { default as Toast, type ToastOptions } from './components/Toast.svelte';
|
|
41
|
+
export { default as Tooltip } from './components/Tooltip.svelte';
|
|
42
|
+
export { default as Collapse } from './components/Collapse.svelte';
|
|
43
|
+
export { default as Accordion } from './components/Accordion.svelte';
|
|
44
|
+
export { default as Rating } from './components/Rating.svelte';
|
|
45
|
+
export { default as Editable, type EditableKind, type EditableTrigger, type EditableControl } from './components/Editable.svelte';
|
|
46
|
+
export { default as EmptyState } from './components/EmptyState.svelte';
|
|
47
|
+
export { default as Hero } from './components/Hero.svelte';
|
|
48
|
+
export { default as Footer, type FooterSection } from './components/Footer.svelte';
|
|
49
|
+
export { default as MobileFrame } from './components/MobileFrame.svelte';
|
|
50
|
+
export { default as WindowFrame } from './components/WindowFrame.svelte';
|
|
51
|
+
export { default as LaptopFrame } from './components/LaptopFrame.svelte';
|
|
52
|
+
export { default as Sidebar } from './components/Sidebar.svelte';
|
|
53
|
+
export { default as Drawer, type DrawerState } from './components/Drawer.svelte';
|
|
54
|
+
export { default as Menu, type MenuNode } from './components/Menu.svelte';
|
|
55
|
+
export { default as Navbar } from './components/Navbar.svelte';
|
|
56
|
+
export { default as Breadcrumbs } from './components/Breadcrumbs.svelte';
|
|
57
|
+
export { default as Pagination } from './components/Pagination.svelte';
|
|
58
|
+
export { default as Steps, type Step, type StepState } from './components/Steps.svelte';
|
|
59
|
+
export { default as Dock } from './components/Dock.svelte';
|
|
60
|
+
export { default as Tabs, type TabItem } from './components/Tabs.svelte';
|
|
61
|
+
export { default as DataHandler, DataHandlerState, parseQuery, parseFilterValues, filterValuesToParams, type DataHandlerOptions, type DataHandlerMessages, type DataRow, type DiscardChoice, type EntityValue, type EntitySuggestion, type Filter, type FilterValues, type GetParams, type GetResult, type HandledFilter, type Identifier, type Navigation, type Sort } from './components/DataHandler.svelte';
|
|
62
|
+
export { default as DataControl, LABELS as DATA_CONTROL_LABELS, type DataControlLabels } from './components/DataControl.svelte';
|
|
63
|
+
export { default as Table, type TableColumn, type TableSort, type TableSortDirection } from './components/Table.svelte';
|
|
64
|
+
export { default as Grid } from './components/Grid.svelte';
|
|
65
|
+
export { default as Kanban, type KanbanColumn, type KanbanMove } from './components/Kanban.svelte';
|
|
66
|
+
export { default as FileExplorer, type FileNode, type FileDrop } from './components/FileExplorer.svelte';
|
|
67
|
+
export { FILE_ICONS, extensionOf, type FileIcon } from './components/file-icons.js';
|
|
68
|
+
export { default as Dialog } from './components/Dialog.svelte';
|
|
69
|
+
export { default as Dropdown, type DropdownTrigger } from './components/Dropdown.svelte';
|
|
70
|
+
export { default as Join } from './components/Join.svelte';
|
|
71
|
+
export { type Axis, type AxisProps, type Values } from './variants.js';
|
|
72
|
+
export { families, themesByFamily, type ThemeData } from './generated/registry.js';
|
|
73
|
+
export { defaultTheme, familyCategory, cloneTheme, serializeTheme, tokensToInlineStyle, tokensForFamily, parseTheme, type ThemeToken, type TokenType } from './theme.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Sepale — the Svelte layer.
|
|
2
|
+
//
|
|
3
|
+
// Every component emits the class names of whatever family stylesheet is
|
|
4
|
+
// loaded; bring `families/<name>.css` and a theme alongside. A component
|
|
5
|
+
// declares its own vocabulary in AXES and FLAGS blocks, and the build writes a
|
|
6
|
+
// copy per family as plain code — props typed to exactly the classes the family
|
|
7
|
+
// ships, nothing generic, nothing to import — so an exported component cannot
|
|
8
|
+
// offer a variant its stylesheet has never heard of.
|
|
9
|
+
//
|
|
10
|
+
// `link` and `validator` have no component here on purpose: they are one
|
|
11
|
+
// class on one element, with no axis and no structure, and a wrapper would only
|
|
12
|
+
// add an import. Write `<a class="link">`. Text does have wrappers — `Text`,
|
|
13
|
+
// `Title`, `Subtitle` — because it has three axes (size, weight, colour) and
|
|
14
|
+
// a heading has a tag to choose.
|
|
15
|
+
//
|
|
16
|
+
// A component draws its own inner parts rather than exposing them as separate
|
|
17
|
+
// wrappers: `Menu` renders its rows from `items`, `Tabs` its tabs from `tabs`,
|
|
18
|
+
// `List` its rows from `rows`. One stylesheet, one namespace, one component
|
|
19
|
+
// (ADR 0009).
|
|
20
|
+
export { default as Button } from './components/Button.svelte';
|
|
21
|
+
// Form
|
|
22
|
+
export { default as Input } from './components/Input.svelte';
|
|
23
|
+
export { default as Textarea } from './components/Textarea.svelte';
|
|
24
|
+
export { default as Select } from './components/Select.svelte';
|
|
25
|
+
export { default as Combobox } from './components/Combobox.svelte';
|
|
26
|
+
export { default as ChipsInput } from './components/ChipsInput.svelte';
|
|
27
|
+
export { default as FileInput } from './components/FileInput.svelte';
|
|
28
|
+
export { default as FileDropzone } from './components/FileDropzone.svelte';
|
|
29
|
+
export { default as Calendar } from './components/Calendar.svelte';
|
|
30
|
+
export { default as DatePicker } from './components/DatePicker.svelte';
|
|
31
|
+
export { default as Checkbox } from './components/Checkbox.svelte';
|
|
32
|
+
export { default as Radio } from './components/Radio.svelte';
|
|
33
|
+
export { default as Toggle } from './components/Toggle.svelte';
|
|
34
|
+
export { default as Range } from './components/Range.svelte';
|
|
35
|
+
export { default as Fieldset } from './components/Fieldset.svelte';
|
|
36
|
+
export { default as Label } from './components/Label.svelte';
|
|
37
|
+
export { default as FloatingLabel } from './components/FloatingLabel.svelte';
|
|
38
|
+
export { default as Switch } from './components/Switch.svelte';
|
|
39
|
+
export { default as NumberInput } from './components/NumberInput.svelte';
|
|
40
|
+
// Display
|
|
41
|
+
export { default as Avatar } from './components/Avatar.svelte';
|
|
42
|
+
export { default as Bubble } from './components/Bubble.svelte';
|
|
43
|
+
export { default as Chip } from './components/Chip.svelte';
|
|
44
|
+
export { default as Badge } from './components/Badge.svelte';
|
|
45
|
+
export { default as Swatch } from './components/Swatch.svelte';
|
|
46
|
+
export { default as ColorPicker } from './components/ColorPicker.svelte';
|
|
47
|
+
export { default as Loading } from './components/Loading.svelte';
|
|
48
|
+
export { default as Progress } from './components/Progress.svelte';
|
|
49
|
+
export { default as RadialProgress } from './components/RadialProgress.svelte';
|
|
50
|
+
export { default as Skeleton } from './components/Skeleton.svelte';
|
|
51
|
+
export { default as List } from './components/List.svelte';
|
|
52
|
+
export { default as Card } from './components/Card.svelte';
|
|
53
|
+
export { default as Stat } from './components/Stat.svelte';
|
|
54
|
+
export { default as Stats } from './components/Stats.svelte';
|
|
55
|
+
export { default as Carousel } from './components/Carousel.svelte';
|
|
56
|
+
export { default as Text } from './components/Text.svelte';
|
|
57
|
+
export { default as Title } from './components/Title.svelte';
|
|
58
|
+
export { default as Subtitle } from './components/Subtitle.svelte';
|
|
59
|
+
export { default as Divider } from './components/Divider.svelte';
|
|
60
|
+
export { default as Alert } from './components/Alert.svelte';
|
|
61
|
+
export { default as Toast } from './components/Toast.svelte';
|
|
62
|
+
export { default as Tooltip } from './components/Tooltip.svelte';
|
|
63
|
+
export { default as Collapse } from './components/Collapse.svelte';
|
|
64
|
+
export { default as Accordion } from './components/Accordion.svelte';
|
|
65
|
+
export { default as Rating } from './components/Rating.svelte';
|
|
66
|
+
export { default as Editable } from './components/Editable.svelte';
|
|
67
|
+
export { default as EmptyState } from './components/EmptyState.svelte';
|
|
68
|
+
export { default as Hero } from './components/Hero.svelte';
|
|
69
|
+
export { default as Footer } from './components/Footer.svelte';
|
|
70
|
+
export { default as MobileFrame } from './components/MobileFrame.svelte';
|
|
71
|
+
export { default as WindowFrame } from './components/WindowFrame.svelte';
|
|
72
|
+
export { default as LaptopFrame } from './components/LaptopFrame.svelte';
|
|
73
|
+
export { default as Sidebar } from './components/Sidebar.svelte';
|
|
74
|
+
export { default as Drawer } from './components/Drawer.svelte';
|
|
75
|
+
// Navigation
|
|
76
|
+
export { default as Menu } from './components/Menu.svelte';
|
|
77
|
+
export { default as Navbar } from './components/Navbar.svelte';
|
|
78
|
+
export { default as Breadcrumbs } from './components/Breadcrumbs.svelte';
|
|
79
|
+
export { default as Pagination } from './components/Pagination.svelte';
|
|
80
|
+
export { default as Steps } from './components/Steps.svelte';
|
|
81
|
+
export { default as Dock } from './components/Dock.svelte';
|
|
82
|
+
export { default as Tabs } from './components/Tabs.svelte';
|
|
83
|
+
// Data
|
|
84
|
+
export { default as DataHandler, DataHandlerState, parseQuery, parseFilterValues, filterValuesToParams } from './components/DataHandler.svelte';
|
|
85
|
+
export { default as DataControl, LABELS as DATA_CONTROL_LABELS } from './components/DataControl.svelte';
|
|
86
|
+
export { default as Table } from './components/Table.svelte';
|
|
87
|
+
export { default as Grid } from './components/Grid.svelte';
|
|
88
|
+
export { default as Kanban } from './components/Kanban.svelte';
|
|
89
|
+
export { default as FileExplorer } from './components/FileExplorer.svelte';
|
|
90
|
+
export { FILE_ICONS, extensionOf } from './components/file-icons.js';
|
|
91
|
+
// Overlay
|
|
92
|
+
export { default as Dialog } from './components/Dialog.svelte';
|
|
93
|
+
export { default as Dropdown } from './components/Dropdown.svelte';
|
|
94
|
+
// Other
|
|
95
|
+
export { default as Join } from './components/Join.svelte';
|
|
96
|
+
export {} from './variants.js';
|
|
97
|
+
// Registry of style families + their themes, auto-generated from src/scss.
|
|
98
|
+
export { families, themesByFamily } from './generated/registry.js';
|
|
99
|
+
export { defaultTheme, familyCategory, cloneTheme, serializeTheme, tokensToInlineStyle, tokensForFamily, parseTheme } from './theme.js';
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-nocheck — a Node command in a package whose types target the browser
|
|
3
|
+
// (no @types/node here); its behaviour is checked against the build instead.
|
|
4
|
+
/**
|
|
5
|
+
* sepale-types — write the types a family stylesheet carries (ADR 0015).
|
|
6
|
+
*
|
|
7
|
+
* npx sepale-types orchid.css → orchid.css.d.ts beside it
|
|
8
|
+
* npx sepale-types --components lib/components orchid.css
|
|
9
|
+
*
|
|
10
|
+
* For a stylesheet that never went through Sepale's build or app: one written
|
|
11
|
+
* by hand or by an assistant, or one you changed after downloading it. It does
|
|
12
|
+
* what they do — reads which axis value, flag or part each class is, from the
|
|
13
|
+
* components' own AXES / FLAGS / PARTS blocks — and writes the declaration
|
|
14
|
+
* with the same function (family-types). Never write that file by hand: it
|
|
15
|
+
* would say what you meant the stylesheet to draw, not what it draws.
|
|
16
|
+
*
|
|
17
|
+
* `--components` points at the components to read: by default the ones next
|
|
18
|
+
* to this script (the package's, or a bundle's `lib/components`). Point it at
|
|
19
|
+
* your own copies when you changed their AXES, so a variant you added is typed.
|
|
20
|
+
*
|
|
21
|
+
* Plain JavaScript, no dependency: it runs from node_modules and from a
|
|
22
|
+
* bundle's `lib/` alike. In a bundle, family-types is TypeScript, which Node
|
|
23
|
+
* runs as it is from 22.18 / 23.6.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { readFileSync, readdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
27
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
28
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
29
|
+
|
|
30
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
31
|
+
|
|
32
|
+
/* Classes Sepale writes but does not own: never classified (scripts/prefix.mjs). */
|
|
33
|
+
const EXTERNAL = new Set(['prose', 'filter']);
|
|
34
|
+
const EXTERNAL_PREFIXES = ['air-datepicker'];
|
|
35
|
+
const isExternal = (/** @type {string} */ cls) =>
|
|
36
|
+
EXTERNAL.has(cls) || EXTERNAL_PREFIXES.some((p) => cls.startsWith(p));
|
|
37
|
+
|
|
38
|
+
/** The class suffix one axis value writes — the rules of variants.ts. */
|
|
39
|
+
const axisSuffix = (/** @type {string} */ axis, /** @type {string} */ value) =>
|
|
40
|
+
value === 'none' ? `no${axis}` : /^\d+$/.test(value) ? `${axis}${value}` : value;
|
|
41
|
+
|
|
42
|
+
/** Every class name in a stylesheet. */
|
|
43
|
+
function classesIn(/** @type {string} */ css) {
|
|
44
|
+
const clean = css
|
|
45
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
46
|
+
.replace(/url\([^)]*\)/g, '')
|
|
47
|
+
.replace(/"[^"\n]*"|'[^'\n]*'/g, '');
|
|
48
|
+
return new Set([...clean.matchAll(/\.([a-z][a-z0-9]*(?:-[a-z0-9]+)*)/g)].map((m) => /** @type {string} */ (m[1])));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The literal after `export const NAME =` in a component: a string, an array
|
|
53
|
+
* or an object of strings. Parsed as data (quotes normalised to JSON), never
|
|
54
|
+
* evaluated.
|
|
55
|
+
* @param {string} src
|
|
56
|
+
* @param {string} name
|
|
57
|
+
* @returns {unknown}
|
|
58
|
+
*/
|
|
59
|
+
function readConst(src, name) {
|
|
60
|
+
const at = src.indexOf(`export const ${name} =`);
|
|
61
|
+
if (at < 0) return undefined;
|
|
62
|
+
const start = src.indexOf('=', at) + 1;
|
|
63
|
+
const from = start + src.slice(start).search(/[[{'"]/);
|
|
64
|
+
const open = src[from];
|
|
65
|
+
if (open === "'" || open === '"') return src.slice(from + 1, src.indexOf(open, from + 1));
|
|
66
|
+
const close = open === '[' ? ']' : '}';
|
|
67
|
+
let depth = 0;
|
|
68
|
+
for (let i = from; i < src.length; i++) {
|
|
69
|
+
if (src[i] === open) depth++;
|
|
70
|
+
else if (src[i] === close && --depth === 0) {
|
|
71
|
+
const json = src
|
|
72
|
+
.slice(from, i + 1)
|
|
73
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
74
|
+
.replace(/\/\/[^\n]*/g, '')
|
|
75
|
+
.replace(/'((?:[^'\\]|\\.)*)'/g, (_, s) => JSON.stringify(s.replace(/\\'/g, "'")))
|
|
76
|
+
.replace(/([{,]\s*)([A-Za-z_$][\w$-]*)\s*:/g, '$1"$2":')
|
|
77
|
+
.replace(/,(\s*[}\]])/g, '$1');
|
|
78
|
+
return JSON.parse(json);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @typedef {{ name: string, prefix: string, axes: Record<string, string[]>, flags: string[], parts: string[] }} Decl
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
/** Every component with a namespace in `dir`, read from its module script. */
|
|
89
|
+
function componentsIn(/** @type {string} */ dir) {
|
|
90
|
+
/** @type {Decl[]} */
|
|
91
|
+
const out = [];
|
|
92
|
+
for (const file of readdirSync(dir).filter((f) => f.endsWith('.svelte'))) {
|
|
93
|
+
const src = readFileSync(join(dir, file), 'utf8');
|
|
94
|
+
const prefix = readConst(src, 'PREFIX');
|
|
95
|
+
if (typeof prefix !== 'string') continue;
|
|
96
|
+
try {
|
|
97
|
+
const flags = /** @type {Record<string, string>} */ (readConst(src, 'FLAGS') ?? {});
|
|
98
|
+
out.push({
|
|
99
|
+
name: file.replace(/\.svelte$/, ''),
|
|
100
|
+
prefix,
|
|
101
|
+
axes: /** @type {Record<string, string[]>} */ (readConst(src, 'AXES') ?? {}),
|
|
102
|
+
flags: Object.keys(flags),
|
|
103
|
+
parts: /** @type {string[]} */ (readConst(src, 'PARTS') ?? [])
|
|
104
|
+
});
|
|
105
|
+
} catch (e) {
|
|
106
|
+
throw new Error(`${file}: its AXES / FLAGS / PARTS block is not plain data (${/** @type {Error} */ (e).message})`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return out.sort((a, b) => b.prefix.length - a.prefix.length);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* What each class of a stylesheet is, in the shape family-types reads.
|
|
114
|
+
* @param {string} css
|
|
115
|
+
* @param {Decl[]} decls longest prefix first
|
|
116
|
+
*/
|
|
117
|
+
function classify(css, decls) {
|
|
118
|
+
/** @type {Record<string, { kind: string, component?: string, axis?: string, value?: string }>} */
|
|
119
|
+
const classes = {};
|
|
120
|
+
/** @type {string[]} */
|
|
121
|
+
const unclassified = [];
|
|
122
|
+
for (const cls of [...classesIn(css)].sort()) {
|
|
123
|
+
if (isExternal(cls)) continue;
|
|
124
|
+
const owner = decls.find((c) => cls === c.prefix || cls.startsWith(`${c.prefix}-`));
|
|
125
|
+
if (!owner) continue;
|
|
126
|
+
if (cls === owner.prefix) {
|
|
127
|
+
classes[cls] = { kind: 'root', component: owner.name };
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const suffix = cls.slice(owner.prefix.length + 1);
|
|
131
|
+
let info = null;
|
|
132
|
+
for (const [axis, values] of Object.entries(owner.axes)) {
|
|
133
|
+
const value = values.find((v) => axisSuffix(axis, v) === suffix);
|
|
134
|
+
if (value !== undefined) info = { kind: 'axis', component: owner.name, axis, value };
|
|
135
|
+
}
|
|
136
|
+
if (!info && owner.flags.includes(suffix)) info = { kind: 'flag', component: owner.name };
|
|
137
|
+
if (!info && owner.parts.includes(suffix)) info = { kind: 'part', component: owner.name };
|
|
138
|
+
if (!info) {
|
|
139
|
+
info = { kind: 'unclassified', component: owner.name };
|
|
140
|
+
unclassified.push(cls);
|
|
141
|
+
}
|
|
142
|
+
classes[cls] = info;
|
|
143
|
+
}
|
|
144
|
+
return { classes, unclassified };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** family-types, as JavaScript (package) or TypeScript (bundle). */
|
|
148
|
+
async function loadFamilyTypes() {
|
|
149
|
+
for (const file of ['family-types.js', 'family-types.ts']) {
|
|
150
|
+
const path = join(here, file);
|
|
151
|
+
if (existsSync(path)) return import(pathToFileURL(path).href);
|
|
152
|
+
}
|
|
153
|
+
throw new Error(`family-types not found next to ${here}`);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async function main(/** @type {string[]} */ argv) {
|
|
157
|
+
let componentsDir = join(here, 'components');
|
|
158
|
+
let help = false;
|
|
159
|
+
/** @type {string[]} */
|
|
160
|
+
const files = [];
|
|
161
|
+
for (let i = 0; i < argv.length; i++) {
|
|
162
|
+
const arg = /** @type {string} */ (argv[i]);
|
|
163
|
+
if (arg === '--components') componentsDir = resolve(/** @type {string} */ (argv[++i]));
|
|
164
|
+
else if (arg === '-h' || arg === '--help') help = true;
|
|
165
|
+
else files.push(arg);
|
|
166
|
+
}
|
|
167
|
+
if (help || !files.length) {
|
|
168
|
+
console.log('usage: sepale-types [--components <dir>] <family.css>…\n\nWrites <family>.css.d.ts beside each stylesheet: what it draws, as types.');
|
|
169
|
+
return help ? 0 : 1;
|
|
170
|
+
}
|
|
171
|
+
if (!existsSync(componentsDir)) throw new Error(`no components at ${componentsDir} (use --components <dir>)`);
|
|
172
|
+
|
|
173
|
+
const { familyShape, familyTypes } = await loadFamilyTypes();
|
|
174
|
+
const decls = componentsIn(componentsDir);
|
|
175
|
+
const schema = Object.fromEntries(decls.map((d) => [d.name, { prefix: d.prefix, flags: d.flags }]));
|
|
176
|
+
|
|
177
|
+
for (const file of files) {
|
|
178
|
+
const css = readFileSync(file, 'utf8');
|
|
179
|
+
const family = basename(file).replace(/\.css$/, '');
|
|
180
|
+
const { classes, unclassified } = classify(css, decls);
|
|
181
|
+
const out = `${file.replace(/\.css$/, '')}.css.d.ts`;
|
|
182
|
+
writeFileSync(out, familyTypes(family, familyShape(classes, schema, css)));
|
|
183
|
+
console.log(`sepale-types: ${family} -> ${out}`);
|
|
184
|
+
if (unclassified.length) {
|
|
185
|
+
console.warn(
|
|
186
|
+
` ${unclassified.length} class(es) under a component's namespace that no AXES, FLAGS or PARTS block names — untyped:\n` +
|
|
187
|
+
unclassified.map((c) => ` .${c}`).join('\n')
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
main(process.argv.slice(2)).then(
|
|
195
|
+
(code) => process.exit(code),
|
|
196
|
+
(e) => {
|
|
197
|
+
console.error(`sepale-types: ${e.message}`);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
);
|
package/dist/theme.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme model.
|
|
3
|
+
*
|
|
4
|
+
* A *family* is a set of opinionated classes **with its own set of
|
|
5
|
+
* variables**. Sharing a variable name with another family is a convenience,
|
|
6
|
+
* never a rule. This module does not decide what a family exposes: it reads
|
|
7
|
+
* the declaration out of the registry and serialises the edited values back
|
|
8
|
+
* to a drop-in `:root { … }` stylesheet.
|
|
9
|
+
*
|
|
10
|
+
* Which inks are parameters is the family's call: daisy exposes every one
|
|
11
|
+
* (`--color-primary-content`, as daisyUI does), the others derive theirs in
|
|
12
|
+
* CSS (`--color-on-primary`, see each family's `_root.scss`). A colour token
|
|
13
|
+
* says which variable holds its ink through `on`; nothing here reads a name.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* `edge-width` and `shadows` are still ONE variable each — what changes is the
|
|
17
|
+
* control that edits it:
|
|
18
|
+
*
|
|
19
|
+
* edge-width a width and the edges it is drawn on, as the `border-width`
|
|
20
|
+
* shorthand (`1px 0 1px 0`). The parts at `0` ARE the edges that
|
|
21
|
+
* are off, so the value is its own record.
|
|
22
|
+
* shadows a whole `box-shadow` value, edited as a list of layers.
|
|
23
|
+
*/
|
|
24
|
+
export type TokenType = 'color' | 'length' | 'number' | 'text' | 'edge-width' | 'shadows';
|
|
25
|
+
export interface ThemeToken {
|
|
26
|
+
/** CSS custom property name without the leading `--`. */
|
|
27
|
+
name: string;
|
|
28
|
+
label: string;
|
|
29
|
+
group: string;
|
|
30
|
+
type: TokenType;
|
|
31
|
+
value: string;
|
|
32
|
+
/** Short help text shown under the control, explaining what it tunes. */
|
|
33
|
+
description?: string;
|
|
34
|
+
/** Slider bounds for `number` and `length` tokens (rendered as range + number input). */
|
|
35
|
+
min?: number;
|
|
36
|
+
max?: number;
|
|
37
|
+
step?: number;
|
|
38
|
+
/** Unit of a `length` token, written back with the number (e.g. `rem`, `px`). */
|
|
39
|
+
unit?: string;
|
|
40
|
+
/** Units the editor offers for this token. A length with several units gets
|
|
41
|
+
* a unit picker next to its number; the CSS never cares which one is used. */
|
|
42
|
+
units?: string[];
|
|
43
|
+
/** Colours only: `surface` (a ground), `accent` (a colour things are
|
|
44
|
+
* painted with) or `ink` (text and lines drawn over both). */
|
|
45
|
+
kind?: string;
|
|
46
|
+
/** Colours only: the variable (without `--`) holding the ink written on
|
|
47
|
+
* this colour — another token of the family, or a value it derives. */
|
|
48
|
+
on?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Units offered for editable lengths. `%` is excluded on purpose: it is
|
|
51
|
+
* meaningless on a border and unreadable on a slider. */
|
|
52
|
+
export declare const LENGTH_UNITS: string[];
|
|
53
|
+
/**
|
|
54
|
+
* Split a CSS length into its number and its unit (`"0.5rem"` → `[0.5, 'rem']`).
|
|
55
|
+
*
|
|
56
|
+
* A four-value shorthand — `1px 0 1px 0`, an edge set — reads back as its
|
|
57
|
+
* first non-zero part, which is exactly the number that was typed.
|
|
58
|
+
*/
|
|
59
|
+
export declare function splitLength(value: string, fallbackUnit?: string): [number, string];
|
|
60
|
+
export interface Sides {
|
|
61
|
+
top: boolean;
|
|
62
|
+
right: boolean;
|
|
63
|
+
bottom: boolean;
|
|
64
|
+
left: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface EdgeWidth {
|
|
67
|
+
width: string;
|
|
68
|
+
sides: Sides;
|
|
69
|
+
}
|
|
70
|
+
export declare const SIDES: readonly ["top", "right", "bottom", "left"];
|
|
71
|
+
/** A width and its edges as one shorthand. All four on → just the length. */
|
|
72
|
+
export declare function edgeWidthToCss({ width, sides }: EdgeWidth): string;
|
|
73
|
+
/** And back. A part at `0` is an edge that is off. */
|
|
74
|
+
export declare function edgeWidthFromCss(raw: string, fallbackUnit?: string): EdgeWidth;
|
|
75
|
+
export interface ShadowLayer {
|
|
76
|
+
x: string;
|
|
77
|
+
y: string;
|
|
78
|
+
blur: string;
|
|
79
|
+
spread: string;
|
|
80
|
+
color: string;
|
|
81
|
+
inset: boolean;
|
|
82
|
+
}
|
|
83
|
+
/** The layers as CSS. An empty list is `none`, not an empty string. */
|
|
84
|
+
export declare function shadowsToCss(layers: ShadowLayer[]): string;
|
|
85
|
+
/**
|
|
86
|
+
* And back. A layer is up to four lengths and a colour, in any order the
|
|
87
|
+
* spec allows; whatever is not a length is the colour.
|
|
88
|
+
*/
|
|
89
|
+
export declare function shadowsFromCss(raw: string): ShadowLayer[];
|
|
90
|
+
/**
|
|
91
|
+
* Read a theme file — any stylesheet of `--name: value;` declarations — back
|
|
92
|
+
* into variables. A theme IS its variables, so this is all it takes; the
|
|
93
|
+
* family then keeps the ones it declares (see `tokensForFamily`).
|
|
94
|
+
*/
|
|
95
|
+
export declare function parseTheme(css: string): {
|
|
96
|
+
vars: Record<string, string>;
|
|
97
|
+
scheme?: string;
|
|
98
|
+
};
|
|
99
|
+
import type { FamilyParam } from './generated/registry.js';
|
|
100
|
+
/** A neutral fallback for the rare caller with no family in hand. */
|
|
101
|
+
export declare const defaultTheme: ThemeToken[];
|
|
102
|
+
/** Human label of each family's design language, taken from its own header. */
|
|
103
|
+
export declare const familyCategory: Record<string, string>;
|
|
104
|
+
/** A custom property name (without `--`) safe to write. */
|
|
105
|
+
export declare const isSafeName: (name: unknown) => name is string;
|
|
106
|
+
/** A value safe to write after `--name:`: no way out of the declaration. */
|
|
107
|
+
export declare function isSafeValue(value: unknown): value is string;
|
|
108
|
+
/** A `color-scheme` keyword, or undefined. */
|
|
109
|
+
export declare function safeScheme(scheme: unknown): string | undefined;
|
|
110
|
+
/** Convert tokens into an inline `style` string for a preview element. */
|
|
111
|
+
export declare function tokensToInlineStyle(tokens: ThemeToken[]): string;
|
|
112
|
+
/** Serialise tokens into a drop-in `:root { … }` stylesheet. */
|
|
113
|
+
export declare function serializeTheme(tokens: ThemeToken[], scheme?: string): string;
|
|
114
|
+
/** Deep copy so callers can edit without mutating the schema. */
|
|
115
|
+
export declare function cloneTheme(tokens?: ThemeToken[]): ThemeToken[];
|
|
116
|
+
/**
|
|
117
|
+
* Editable tokens for a family: exactly the parameters that family declares,
|
|
118
|
+
* seeded from `vars` (a theme's parsed custom properties) where present and
|
|
119
|
+
* from the family's own default otherwise.
|
|
120
|
+
*/
|
|
121
|
+
export declare function tokensForFamily(family: string, vars?: Record<string, string>): ThemeToken[];
|
|
122
|
+
/** The same, from a parameter list in hand — a family the build never saw. */
|
|
123
|
+
export declare function tokensFrom(params: FamilyParam[], vars?: Record<string, string>): ThemeToken[];
|