@danielito1996/compose-svelted 0.0.1 → 0.2.1

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.
Files changed (89) hide show
  1. package/README.md +113 -274
  2. package/dist/compose-svelted.css +2 -0
  3. package/dist/index.d.ts +152 -0
  4. package/dist/index.js +3271 -0
  5. package/package.json +12 -34
  6. package/.vscode/extensions.json +0 -3
  7. package/docs/assets/components/button/button.png +0 -0
  8. package/docs/assets/components/surface/surface_simple.png +0 -0
  9. package/docs/assets/components/text/text.png +0 -0
  10. package/docs/assets/components/textfield/textfield_simple.png +0 -0
  11. package/docs/assets/svelted.png +0 -0
  12. package/docs/assets/svelted.svg +0 -41
  13. package/docs/getting_started.md +0 -116
  14. package/docs/index.md +0 -106
  15. package/index.html +0 -14
  16. package/screenshots/Captura de pantalla 2025-12-20 022710.png +0 -0
  17. package/screenshots/capturas.txt +0 -1
  18. package/src/App.svelte +0 -39
  19. package/src/app.css +0 -23
  20. package/src/assets/img/hav3m.png +0 -0
  21. package/src/assets/img/vessel.jpg +0 -0
  22. package/src/assets/raw/boat.svg +0 -15
  23. package/src/assets/raw/cash.svg +0 -39
  24. package/src/assets/raw/police.json +0 -1
  25. package/src/assets/raw/svelte.svg +0 -1
  26. package/src/lib/Counter.svelte +0 -10
  27. package/src/lib/components/AppRoot.svelte +0 -15
  28. package/src/lib/components/ContentScale.ts +0 -12
  29. package/src/lib/components/Icon.svelte +0 -47
  30. package/src/lib/components/Image.svelte +0 -31
  31. package/src/lib/components/Spacer.svelte +0 -11
  32. package/src/lib/components/Surface.svelte +0 -19
  33. package/src/lib/components/Text.svelte +0 -23
  34. package/src/lib/components/TonalButton.svelte +0 -34
  35. package/src/lib/components/buttons/Button.svelte +0 -34
  36. package/src/lib/components/buttons/ButtonWithIcon.svelte +0 -0
  37. package/src/lib/components/buttons/IconButton.svelte +0 -0
  38. package/src/lib/components/buttons/OutlinedButton.svelte +0 -0
  39. package/src/lib/components/buttons/OutlinedButtonWithIcon.svelte +0 -0
  40. package/src/lib/components/buttons/OutlinedIconButton.svelte +0 -0
  41. package/src/lib/components/buttons/TextButton.svelte +0 -0
  42. package/src/lib/components/cards/Card.svelte +0 -0
  43. package/src/lib/components/cards/OutlinedCard.svelte +0 -0
  44. package/src/lib/components/layouts/Alignment.ts +0 -37
  45. package/src/lib/components/layouts/Arrangement.ts +0 -66
  46. package/src/lib/components/layouts/Box.svelte +0 -25
  47. package/src/lib/components/layouts/Column.svelte +0 -23
  48. package/src/lib/components/layouts/LazyColumn.svelte +0 -0
  49. package/src/lib/components/layouts/LazyRow.svelte +0 -0
  50. package/src/lib/components/layouts/Row.svelte +0 -23
  51. package/src/lib/components/layouts/Scafold.svelte +0 -0
  52. package/src/lib/components/menus/DropdownMenu.svelte +0 -0
  53. package/src/lib/components/menus/DropdownMenuItem.svelte +0 -0
  54. package/src/lib/components/textFields/BaseTextField.svelte +0 -130
  55. package/src/lib/components/textFields/OutlinedTextField.svelte +0 -52
  56. package/src/lib/components/textFields/TextField.svelte +0 -36
  57. package/src/lib/components/textFields/TextFieldColors.ts +0 -11
  58. package/src/lib/components/textFields/TextFieldDefaults.ts +0 -48
  59. package/src/lib/core/helpers/painterResource.ts +0 -26
  60. package/src/lib/core/modifier/Modifier.ts +0 -259
  61. package/src/lib/core/modifier/ModifierImpl.ts +0 -275
  62. package/src/lib/core/shapes/RoundedCornerShape.ts +0 -53
  63. package/src/lib/core/shapes/Shape.ts +0 -3
  64. package/src/lib/core/theme/ColorScheme.ts +0 -25
  65. package/src/lib/core/theme/ComposeTheme.svelte +0 -22
  66. package/src/lib/core/theme/TextStyle.ts +0 -25
  67. package/src/lib/core/theme/colors.ts +0 -21
  68. package/src/lib/core/theme/cssVars.ts +0 -32
  69. package/src/lib/core/theme/defaults/darkColors.ts +0 -17
  70. package/src/lib/core/theme/defaults/defaultTheme.ts +0 -35
  71. package/src/lib/core/theme/defaults/lightColors.ts +0 -17
  72. package/src/lib/core/theme/defaults/typography.ts +0 -128
  73. package/src/lib/core/theme/elevation.ts +0 -7
  74. package/src/lib/core/theme/getCurrentColor.ts +0 -10
  75. package/src/lib/core/theme/resolve.ts +0 -29
  76. package/src/lib/core/theme/shapes.ts +0 -7
  77. package/src/lib/core/theme/spacing.ts +0 -7
  78. package/src/lib/core/theme/store.ts +0 -26
  79. package/src/lib/core/theme/systemTheme.ts +0 -20
  80. package/src/lib/core/theme/theme.ts +0 -15
  81. package/src/lib/core/theme/typography.ts +0 -29
  82. package/src/lib/index.ts +0 -42
  83. package/src/main.ts +0 -9
  84. package/svelte.config.js +0 -8
  85. package/tsconfig.app.json +0 -21
  86. package/tsconfig.json +0 -7
  87. package/tsconfig.node.json +0 -26
  88. package/vite.config.ts +0 -11
  89. /package/{public → dist}/vite.svg +0 -0
package/README.md CHANGED
@@ -1,274 +1,113 @@
1
- # Compose-like UI for Svelte
2
- <p align="start">
3
- <a href="https://www.npmjs.com/package/compose-svelte">
4
- <img src="https://img.shields.io/npm/v/svelted.svg" alt="npm version" />
5
- </a>
6
- <a href="https://www.npmjs.com/package/compose-svelte">
7
- <img src="https://img.shields.io/npm/dm/svelted.svg" alt="npm downloads" />
8
- </a>
9
- <a href="https://github.com/danielitoCode/compose-svelte/blob/main/LICENSE">
10
- <img src="https://img.shields.io/github/license/danielitoCode/compose-svelte" alt="license" />
11
- </a>
12
- <img src="https://img.shields.io/badge/status-alpha-orange" />
13
- <img src="https://img.shields.io/badge/version-0.0.1-blue" />
14
- </p>
15
-
16
- <p align="center">
17
- <img src="docs/assets/svelted.png" width="310" alt="ios" />
18
- </p>
19
-
20
-
21
- A Compose-inspired UI toolkit for **Svelte**, focused on explicit composition,
22
- immutable modifiers, and theme-driven design.
23
-
24
- Inspired by **Jetpack Compose**, built natively for the web using Svelte and
25
- standard web technologies.
26
-
27
- <p align="center">
28
- <img src="https://img.shields.io/badge/Svelte-FF3E00?logo=svelte&logoColor=white" />
29
- <img src="https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white" />
30
- <img src="https://img.shields.io/badge/Jetpack%20Compose-inspired-4285F4" />
31
- </p>
32
-
33
- ---
34
-
35
- ## ✨ Goals
36
-
37
- - Explicit and predictable UI composition
38
- - Immutable, chainable `Modifier`s
39
- - Strong separation between core, layout and components
40
- - Theme-driven design (tokens, not raw CSS)
41
- - No virtual DOM abstractions
42
- - No hidden magic
43
-
44
- > This is **not** a Material clone.
45
- > It is a Compose-like system that can be styled beyond Material Design.
46
-
47
- ---
48
-
49
- ## Why Compose-like for Svelte?
50
-
51
- Jetpack Compose introduced a clear, explicit and composable mental model for UI.
52
- This project explores how that same philosophy translates to the web,
53
- using Svelte as a native, compiler-driven foundation.
54
-
55
- The goal is not to replicate Android UI,
56
- but to bring Compose’s clarity and composability to modern web applications.
57
-
58
- ## 🚀 Installation
59
-
60
- ```bash
61
- npm install compose-svelte
62
- ```
63
-
64
- ---
65
-
66
- ## 🧭 Minimal Example
67
-
68
- ```svelte
69
- <script>
70
- import {
71
- ComposeTheme,
72
- AppRoot,
73
- Surface,
74
- Text,
75
- Modifier
76
- } from "compose-svelte";
77
- </script>
78
-
79
- <ComposeTheme mode="system">
80
- <AppRoot>
81
- <Surface modifier={Modifier.fillMaxSize()}>
82
- <Text>Hello Compose</Text>
83
- </Surface>
84
- </AppRoot>
85
- </ComposeTheme>
86
- ```
87
-
88
- ---
89
-
90
- ## 🧱 Layout
91
-
92
- ### Column
93
-
94
- ```svelte
95
- <Column modifier={Modifier.padding(16)}>
96
- <Text textStyle="titleLarge">Title</Text>
97
- <Text>Body text</Text>
98
- </Column>
99
- ```
100
-
101
- ### Row
102
-
103
- ```svelte
104
- <Row horizontalArrangement={Arrangement.spacedBy(8)}>
105
- <Text>Left</Text>
106
- <Text>Right</Text>
107
- </Row>
108
- ```
109
-
110
- ### Box
111
-
112
- ```svelte
113
- <Box modifier={Modifier.size(120)}>
114
- <Text modifier={Modifier.align(Alignment.Center)}>Centered</Text>
115
- </Box>
116
- ```
117
-
118
- ---
119
-
120
- ## 🎨 Theme
121
-
122
- ### ComposeTheme
123
-
124
- Provides theming for the entire app.
125
-
126
- - Light / Dark / System modes
127
- - Tokens exposed as CSS variables
128
- - Inspired by MaterialTheme
129
-
130
- ```svelte
131
- <ComposeTheme mode="dark">
132
- <AppRoot>
133
- <Surface>
134
- <Text>Dark mode</Text>
135
- </Surface>
136
- </AppRoot>
137
- </ComposeTheme>
138
- ```
139
-
140
- ---
141
-
142
- ## 📝 TextField
143
-
144
- ### Filled
145
-
146
- ```svelte
147
- <TextField
148
- label="Email"
149
- placeholder="you@email.com"
150
- value={email}
151
- onValueChange={(v) => email = v}
152
- />
153
- ```
154
-
155
- ### Outlined
156
-
157
- ```svelte
158
- <OutlinedTextField
159
- label="Email"
160
- value={email}
161
- onValueChange={(v) => email = v}
162
- />
163
- ```
164
-
165
- ---
166
-
167
- ## 🔘 Buttons
168
-
169
- ```svelte
170
- <Button onClick={submit}>
171
- Submit
172
- </Button>
173
-
174
- <TextButton onClick={cancel}>
175
- Cancel
176
- </TextButton>
177
-
178
- <OutlinedButton>
179
- Outlined
180
- </OutlinedButton>
181
- ```
182
-
183
- ---
184
-
185
- ## 🧩 Modifiers
186
-
187
- Modifiers are immutable and chainable.
188
-
189
- ```ts
190
- Modifier
191
- .padding(16)
192
- .fillMaxWidth()
193
- .background(ColorScheme.Surface)
194
- ```
195
-
196
- ### Available categories
197
-
198
- - Layout: `size`, `width`, `height`, `fill`, `weight`
199
- - Spacing: `padding`, `margin`
200
- - Drawing: `background`, `border`, `clip`
201
- - Interaction: `clickable`
202
- - Transform: `offset`
203
- - Scroll: `verticalScroll`, `horizontalScroll`
204
-
205
- ---
206
-
207
- ## 🔲 Shapes
208
-
209
- ```ts
210
- RoundedCornerShape(12)
211
- RoundedCornerShape({ topStart: 16, topEnd: 16 })
212
- ```
213
-
214
- Shapes are value objects and reusable across components.
215
-
216
- ---
217
-
218
- ## 🎨 Theme Tokens
219
-
220
- ### ColorScheme
221
-
222
- ```ts
223
- ColorScheme.Primary
224
- ColorScheme.Surface
225
- ColorScheme.OnSurface
226
- ```
227
-
228
- ### TextStyle
229
-
230
- ```ts
231
- TextStyle.TitleLarge
232
- TextStyle.BodyMedium
233
- TextStyle.LabelSmall
234
- ```
235
-
236
- ---
237
-
238
- ## 🖼️ Images & Icons
239
-
240
- ```svelte
241
- <Image
242
- painter={painterResource(Res.image("logo.png"))}
243
- contentScale={ContentScale.Fit}
244
- />
245
-
246
- <Icon
247
- painter="https://api.iconify.design/mdi/home.svg"
248
- modifier={Modifier.size(24)}
249
- />
250
- ```
251
-
252
- ---
253
-
254
- ## 📦 Project Status
255
-
256
- - Core v0.0.1: stable
257
- - Layout system: stable
258
- - Theme system: stable
259
- - Modifiers: stable
260
- - Lazy layouts: experimental
261
-
262
- ---
263
-
264
- ## 🧠 Philosophy
265
-
266
- Clarity over cleverness.
267
-
268
- If something is not explicit, it is probably not part of the API.
269
-
270
- ---
271
-
272
- ## 📄 License
273
-
274
- MIT
1
+ # compose-svelted
2
+
3
+ <p align="center">
4
+ <img src="docs/assets/svelted.png" width="960" alt="compose-svelted" />
5
+ </p>
6
+
7
+ <p align="center">
8
+ <b>Compose-inspired UI framework for Svelte</b><br/>
9
+ Declarative layout · Immutable modifiers · Structural motion · Compose-like navigation
10
+ </p>
11
+
12
+ <p align="center">
13
+ <img src="https://img.shields.io/badge/status-alpha-orange" />
14
+ <img src="https://img.shields.io/badge/Svelte-FF3E00?logo=svelte&logoColor=white" />
15
+ <img src="https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white" />
16
+ </p>
17
+
18
+ ---
19
+
20
+ ## ✨ What is compose-svelted?
21
+
22
+ **compose-svelted** is an experimental but ambitious UI framework that brings the
23
+ **Jetpack Compose mental model** to the Svelte ecosystem.
24
+
25
+ It is **not** a Material Design clone, and it is **not** a thin component library.
26
+
27
+ Instead, it focuses on:
28
+ - explicit UI composition
29
+ - predictable layout
30
+ - declarative motion
31
+ - navigation as state
32
+
33
+ All built on top of **Svelte**, without virtual DOM abstractions or hidden magic.
34
+
35
+ ---
36
+
37
+ ## 🧠 Core Philosophy
38
+
39
+ > UI is a function of state.
40
+ > Layout, motion, and navigation must be explicit and predictable.
41
+
42
+ Key ideas:
43
+ - No implicit behavior
44
+ - No global side effects
45
+ - No magic context you cannot reason about
46
+ - Everything composes
47
+
48
+ ---
49
+
50
+ ## 🧱 Library Structure (High-Level)
51
+
52
+ ### Core V1 Layout & Styling
53
+ - Column, Row, Box
54
+ - Modifier (immutable, chainable)
55
+ - Shapes
56
+ - Theme system
57
+ - Typography
58
+
59
+ ### Core V2 – Motion & Navigation (CLOSED)
60
+ - AnimatedVisibility
61
+ - AnimatedContent
62
+ - Declarative motion
63
+ - NavController
64
+ - NavHost
65
+ - Internal backstack
66
+
67
+ ---
68
+
69
+ ## 💪 Strengths
70
+
71
+ ### Explicit Layout
72
+ Layouts are predictable and composable.
73
+
74
+ ### Immutable Modifiers
75
+ Describe intent, not CSS.
76
+
77
+ ### Structural Motion
78
+ Motion is part of the UI structure.
79
+
80
+ ### Compose-like Navigation
81
+ Navigation without external routers.
82
+
83
+ ---
84
+
85
+ ## 🚀 Innovation
86
+
87
+ - Compose mental model on the web
88
+ - Navigation as state
89
+ - Motion as structure
90
+ - No virtual DOM abstraction
91
+
92
+ ---
93
+
94
+ ## 📦 Status
95
+
96
+ - Alpha
97
+ - Core V2 closed
98
+ - Core V3 planned
99
+
100
+ ---
101
+
102
+ ## 🔮 Roadmap
103
+
104
+ ### Core V3
105
+ - Nested navigation
106
+ - Directional transitions
107
+ - Shared elements
108
+
109
+ ---
110
+
111
+ ## 📄 License
112
+
113
+ MIT
@@ -0,0 +1,2 @@
1
+ .lazy-row--hide-scrollbar.svelte-t2yd5u::-webkit-scrollbar{display:none}
2
+ /*$vite$:1*/
@@ -0,0 +1,152 @@
1
+ /*// =======================================
2
+ // Compose Svelted – Public API (Core V2)
3
+ // =======================================
4
+
5
+ import type { SvelteComponent } from "svelte";
6
+
7
+ // =======================================
8
+ // Root / Theme
9
+ // =======================================
10
+
11
+ export class ComposeTheme extends SvelteComponent {}
12
+ export class AppRoot extends SvelteComponent {}
13
+
14
+ // =======================================
15
+ // Layouts
16
+ // =======================================
17
+
18
+ export class Column extends SvelteComponent {}
19
+ export class Row extends SvelteComponent {}
20
+ export class Box extends SvelteComponent {}
21
+ export class Spacer extends SvelteComponent {}
22
+ export class LazyColumn extends SvelteComponent {}
23
+ export class LazyRow extends SvelteComponent {}
24
+ export class Scaffold extends SvelteComponent {}
25
+
26
+ // =======================================
27
+ // Core UI Components
28
+ // =======================================
29
+
30
+ export class Surface extends SvelteComponent {}
31
+ export class Text extends SvelteComponent {}
32
+ export class Button extends SvelteComponent {}
33
+ export class TextButton extends SvelteComponent {}
34
+ export class TonalButton extends SvelteComponent {}
35
+ export class IconButton extends SvelteComponent {}
36
+ export class ButtonWithIcon extends SvelteComponent {}
37
+ export class OutlinedButton extends SvelteComponent {}
38
+ export class OutlinedButtonWithIcon extends SvelteComponent {}
39
+ export class CheckButton extends SvelteComponent {}
40
+
41
+ export class Card extends SvelteComponent {}
42
+ export class OutlinedCard extends SvelteComponent {}
43
+
44
+ export class TextField extends SvelteComponent {}
45
+ export class OutlinedTextField extends SvelteComponent {}
46
+
47
+ export class Image extends SvelteComponent {}
48
+ export class Icon extends SvelteComponent {}
49
+
50
+ // =======================================
51
+ // Motion
52
+ // =======================================
53
+
54
+ export class AnimatedVisibility extends SvelteComponent {}
55
+ export class AnimatedContent extends SvelteComponent {}
56
+
57
+ // =======================================
58
+ // Navigation
59
+ // =======================================
60
+
61
+ export class NavHost extends SvelteComponent {}
62
+
63
+ // =======================================
64
+ // Custom / Docs
65
+ // =======================================
66
+
67
+ export class CodeBlock extends SvelteComponent {}
68
+
69
+ // =======================================
70
+ // Tokens / Helpers (TypeScript only)
71
+ // =======================================
72
+
73
+ export * from "../src/lib/core/shapes/RoundedCornerShape";
74
+ export * from "../src/lib/core/theme/ColorScheme";
75
+ export * from "../src/lib/core/theme/TextStyle";
76
+ export * from "../src/lib/core/theme/Density";
77
+
78
+ export * from "../src/lib/core/modifier/Modifier";
79
+
80
+ export * from "../src/lib/components/layouts/Arrangement";
81
+ export * from "../src/lib/components/layouts/Alignment";
82
+ export * from "../src/lib/components/ContentScale";
83
+
84
+ export * from "../src/lib/core/helpers/painterResource";
85
+
86
+ export * from "../src/lib/core/motion/AnimationSpec";
87
+ export * from "../src/lib/core/motion/transitions";
88
+ export * from "../src/lib/core/motion/contentTransitions";
89
+
90
+ export * from "../src/lib/core/navigation/Route";
91
+ export * from "../src/lib/core/navigation/NavController";
92
+ export * from "../src/lib/core/navigation/rememberNavController";
93
+ export * from "../src/lib/core/navigation/composable";
94
+ /*// =========================*/
95
+ // COMPONENTS (Svelte)
96
+ // =========================
97
+ // LAYOUTS
98
+ export { default as ComposeTheme } from "./core/theme/ComposeTheme.svelte";
99
+ export { default as AppRoot } from "./components/AppRoot.svelte"
100
+ // COMPONENTS
101
+ export { default as Surface } from "./components/Surface.svelte";
102
+ export { default as Text } from "./components/Text.svelte";
103
+ export { default as Column } from "./components/layouts/Column.svelte";
104
+ export { default as Row } from "./components/layouts/Row.svelte";
105
+ export { default as Box } from "./components/layouts/Box.svelte";
106
+ export { default as Spacer } from "./components/Spacer.svelte"
107
+ export { default as Button } from "./components/buttons/Button.svelte"
108
+ export { default as IconButton } from "./components/buttons/IconButton.svelte"
109
+ export { default as ButtonWithIcon } from "./components/buttons/ButtonWithIcon.svelte"
110
+ export { default as OutlinedIconButton } from "./components/buttons/OutlinedButton.svelte"
111
+ export { default as OutlinedButtonWithIcon } from "./components/buttons/OutlinedButtonWithIcon.svelte"
112
+ export { default as CheckButton } from "./components/buttons/CheckButton.svelte"
113
+ export { default as TextButton } from "./components/buttons/TextButton.svelte"
114
+ export { default as OutlinedButton } from "./components/buttons/OutlinedButton.svelte"
115
+ export { default as Card } from "./components/cards/Card.svelte"
116
+ export { default as OutlinedCard } from "./components/cards/OutlinedCard.svelte"
117
+ export { default as TextField } from "./components/textFields/TextField.svelte"
118
+ export { default as OutlinedTextField } from "./components/textFields/OutlinedTextField.svelte"
119
+ export { default as TonalButton } from "./components/TonalButton.svelte"
120
+ export { default as LazyColumn } from "./components/layouts/LazyColumn.svelte"
121
+ export { default as LazyRow } from "./components/layouts/LazyRow.svelte"
122
+ export { default as Icon } from "./components/Icon.svelte"
123
+ export { default as Image } from "./components/Image.svelte"
124
+ export { default as Scaffold } from "./components/layouts/Scaffold.svelte"
125
+ // Motions
126
+ export { default as AnimatedVisibility } from "./components/motion/AnimatedVisibility.svelte"
127
+ export { default as AnimatedContent } from "./components/motion/AnimatedContent.svelte"
128
+ // Custom
129
+ export { default as CodeBlock } from "./components/custom/CodeBlock.svelte"
130
+ // Navigation
131
+ export { default as NavHost } from "./core/navigation/NavHost.svelte";
132
+
133
+ // =========================
134
+ // TOKENS / API (TS only)
135
+ // =========================
136
+ export * from "./core/shapes/RoundedCornerShape"
137
+ export * from "./core/theme/ColorScheme";
138
+ export * from "./core/theme/TextStyle";
139
+ export * from "./core/modifier/Modifier"
140
+ export * from "./components/layouts/Arrangement";
141
+ export * from "./components/layouts/Alignment";
142
+ export * from "./components/ContentScale"
143
+ export * from "./core/helpers/painterResource"
144
+ export * from "./components/ContentScale"
145
+ export * from "./core/theme/Density"
146
+ export * from "./core/motion/AnimationSpec"
147
+ export * from "./core/motion/transitions"
148
+ export * from "./core/motion/contentTransitions"
149
+ export * from "./core/navigation/Route";
150
+ export * from "./core/navigation/NavController";
151
+ export * from "./core/navigation/rememberNavController";
152
+ export * from "./core/navigation/composable";