jac-client 0.2.2__py3-none-any.whl → 0.2.6__py3-none-any.whl
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.
- jac_client/examples/all-in-one/assets/workers/worker.py +5 -0
- jac_client/examples/all-in-one/src/app.jac +841 -0
- jac_client/examples/all-in-one/{button.jac → src/button.jac} +1 -1
- jac_client/examples/all-in-one/{components → src/components}/button.jac +1 -1
- jac_client/examples/asset-serving/css-with-image/{app.jac → src/app.jac} +2 -2
- jac_client/examples/asset-serving/image-asset/{app.jac → src/app.jac} +2 -2
- jac_client/examples/asset-serving/import-alias/{app.jac → src/app.jac} +7 -7
- jac_client/examples/basic/{app.jac → src/app.jac} +2 -2
- jac_client/examples/basic-auth/src/app.jac +377 -0
- jac_client/examples/basic-auth-with-router/{app.jac → src/app.jac} +18 -18
- jac_client/examples/basic-full-stack/{app.jac → src/app.jac} +175 -130
- jac_client/examples/css-styling/js-styling/{app.jac → src/app.jac} +6 -6
- jac_client/examples/css-styling/material-ui/{app.jac → src/app.jac} +5 -5
- jac_client/examples/css-styling/pure-css/{app.jac → src/app.jac} +6 -6
- jac_client/examples/css-styling/sass-example/{app.jac → src/app.jac} +6 -6
- jac_client/examples/css-styling/styled-components/{app.jac → src/app.jac} +5 -5
- jac_client/examples/css-styling/tailwind-example/{app.jac → src/app.jac} +6 -6
- jac_client/examples/full-stack-with-auth/{app.jac → src/app.jac} +37 -37
- jac_client/examples/little-x/{app.jac → src/app.jac} +27 -32
- jac_client/examples/little-x/src/submit-button.jac +16 -0
- jac_client/examples/nested-folders/nested-advance/{ButtonRoot.jac → src/ButtonRoot.jac} +1 -1
- jac_client/examples/nested-folders/nested-advance/{app.jac → src/app.jac} +1 -1
- jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/ButtonSecondL.jac +1 -1
- jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/Card.jac +1 -1
- jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/level2/ButtonThirdL.jac +1 -1
- jac_client/examples/nested-folders/nested-basic/{app.jac → src/app.jac} +2 -2
- jac_client/examples/nested-folders/nested-basic/{button.jac → src/button.jac} +1 -1
- jac_client/examples/nested-folders/nested-basic/{components → src/components}/button.jac +1 -1
- jac_client/examples/ts-support/src/app.jac +35 -0
- jac_client/examples/with-router/{app.jac → src/app.jac} +11 -11
- jac_client/plugin/cli.jac +547 -0
- jac_client/plugin/client.jac +52 -0
- jac_client/plugin/client_runtime.cl.jac +38 -0
- jac_client/plugin/impl/client.impl.jac +134 -0
- jac_client/plugin/impl/client_runtime.impl.jac +177 -0
- jac_client/plugin/impl/vite_client_bundle.impl.jac +72 -0
- jac_client/plugin/plugin_config.jac +195 -0
- jac_client/plugin/src/__init__.jac +20 -0
- jac_client/plugin/src/asset_processor.jac +33 -0
- jac_client/plugin/src/babel_processor.jac +18 -0
- jac_client/plugin/src/compiler.jac +66 -0
- jac_client/plugin/src/config_loader.jac +32 -0
- jac_client/plugin/src/impl/asset_processor.impl.jac +127 -0
- jac_client/plugin/src/impl/babel_processor.impl.jac +84 -0
- jac_client/plugin/src/impl/compiler.impl.jac +251 -0
- jac_client/plugin/src/impl/config_loader.impl.jac +119 -0
- jac_client/plugin/src/impl/import_processor.impl.jac +33 -0
- jac_client/plugin/src/impl/jac_to_js.impl.jac +41 -0
- jac_client/plugin/src/impl/package_installer.impl.jac +105 -0
- jac_client/plugin/src/impl/vite_bundler.impl.jac +513 -0
- jac_client/plugin/src/import_processor.jac +19 -0
- jac_client/plugin/src/jac_to_js.jac +35 -0
- jac_client/plugin/src/package_installer.jac +26 -0
- jac_client/plugin/src/vite_bundler.jac +36 -0
- jac_client/plugin/vite_client_bundle.jac +31 -0
- jac_client/tests/conftest.py +281 -0
- jac_client/tests/fixtures/basic-app/app.jac +2 -2
- jac_client/tests/fixtures/cl_file/app.cl.jac +2 -2
- jac_client/tests/fixtures/client_app_with_antd/app.jac +1 -1
- jac_client/tests/fixtures/js_import/app.jac +5 -5
- jac_client/tests/fixtures/spawn_test/app.jac +7 -7
- jac_client/tests/fixtures/with-ts/app.jac +35 -0
- jac_client/tests/test_cli.py +755 -0
- jac_client/tests/test_it.py +347 -67
- {jac_client-0.2.2.dist-info → jac_client-0.2.6.dist-info}/METADATA +30 -24
- jac_client-0.2.6.dist-info/RECORD +74 -0
- {jac_client-0.2.2.dist-info → jac_client-0.2.6.dist-info}/WHEEL +2 -1
- jac_client-0.2.6.dist-info/entry_points.txt +4 -0
- jac_client-0.2.6.dist-info/top_level.txt +1 -0
- jac_client/docs/README.md +0 -689
- jac_client/docs/advanced-state.md +0 -1265
- jac_client/docs/asset-serving/intro.md +0 -209
- jac_client/docs/assets/pipe_line-v2.svg +0 -32
- jac_client/docs/assets/pipe_line.png +0 -0
- jac_client/docs/file-system/app.jac.md +0 -121
- jac_client/docs/file-system/backend-frontend.md +0 -217
- jac_client/docs/file-system/intro.md +0 -72
- jac_client/docs/file-system/nested-imports.md +0 -348
- jac_client/docs/guide-example/intro.md +0 -115
- jac_client/docs/guide-example/step-01-setup.md +0 -270
- jac_client/docs/guide-example/step-02-components.md +0 -416
- jac_client/docs/guide-example/step-03-styling.md +0 -478
- jac_client/docs/guide-example/step-04-todo-ui.md +0 -477
- jac_client/docs/guide-example/step-05-local-state.md +0 -530
- jac_client/docs/guide-example/step-06-events.md +0 -749
- jac_client/docs/guide-example/step-07-effects.md +0 -468
- jac_client/docs/guide-example/step-08-walkers.md +0 -534
- jac_client/docs/guide-example/step-09-authentication.md +0 -586
- jac_client/docs/guide-example/step-10-routing.md +0 -539
- jac_client/docs/guide-example/step-11-final.md +0 -963
- jac_client/docs/imports.md +0 -1141
- jac_client/docs/lifecycle-hooks.md +0 -773
- jac_client/docs/routing.md +0 -659
- jac_client/docs/styling/intro.md +0 -249
- jac_client/docs/styling/js-styling.md +0 -367
- jac_client/docs/styling/material-ui.md +0 -341
- jac_client/docs/styling/pure-css.md +0 -299
- jac_client/docs/styling/sass.md +0 -403
- jac_client/docs/styling/styled-components.md +0 -395
- jac_client/docs/styling/tailwind.md +0 -298
- jac_client/examples/all-in-one/.babelrc +0 -9
- jac_client/examples/all-in-one/README.md +0 -16
- jac_client/examples/all-in-one/app.jac +0 -426
- jac_client/examples/all-in-one/assets/burger.png +0 -0
- jac_client/examples/all-in-one/package.json +0 -29
- jac_client/examples/all-in-one/styles.css +0 -26
- jac_client/examples/all-in-one/vite.config.js +0 -28
- jac_client/examples/asset-serving/css-with-image/.babelrc +0 -9
- jac_client/examples/asset-serving/css-with-image/README.md +0 -91
- jac_client/examples/asset-serving/css-with-image/assets/burger.png +0 -0
- jac_client/examples/asset-serving/css-with-image/package.json +0 -28
- jac_client/examples/asset-serving/css-with-image/styles.css +0 -26
- jac_client/examples/asset-serving/css-with-image/vite.config.js +0 -28
- jac_client/examples/asset-serving/image-asset/.babelrc +0 -9
- jac_client/examples/asset-serving/image-asset/README.md +0 -119
- jac_client/examples/asset-serving/image-asset/assets/burger.png +0 -0
- jac_client/examples/asset-serving/image-asset/package.json +0 -28
- jac_client/examples/asset-serving/image-asset/styles.css +0 -26
- jac_client/examples/asset-serving/image-asset/vite.config.js +0 -28
- jac_client/examples/asset-serving/import-alias/.babelrc +0 -9
- jac_client/examples/asset-serving/import-alias/README.md +0 -83
- jac_client/examples/asset-serving/import-alias/assets/burger.png +0 -0
- jac_client/examples/asset-serving/import-alias/package.json +0 -28
- jac_client/examples/asset-serving/import-alias/vite.config.js +0 -28
- jac_client/examples/basic/.babelrc +0 -9
- jac_client/examples/basic/README.md +0 -16
- jac_client/examples/basic/package.json +0 -27
- jac_client/examples/basic/vite.config.js +0 -27
- jac_client/examples/basic-auth/.babelrc +0 -9
- jac_client/examples/basic-auth/README.md +0 -16
- jac_client/examples/basic-auth/app.jac +0 -308
- jac_client/examples/basic-auth/package.json +0 -27
- jac_client/examples/basic-auth/vite.config.js +0 -27
- jac_client/examples/basic-auth-with-router/.babelrc +0 -9
- jac_client/examples/basic-auth-with-router/README.md +0 -60
- jac_client/examples/basic-auth-with-router/package.json +0 -28
- jac_client/examples/basic-auth-with-router/vite.config.js +0 -27
- jac_client/examples/basic-full-stack/.babelrc +0 -9
- jac_client/examples/basic-full-stack/README.md +0 -18
- jac_client/examples/basic-full-stack/package.json +0 -28
- jac_client/examples/basic-full-stack/vite.config.js +0 -27
- jac_client/examples/css-styling/js-styling/.babelrc +0 -9
- jac_client/examples/css-styling/js-styling/README.md +0 -183
- jac_client/examples/css-styling/js-styling/package.json +0 -28
- jac_client/examples/css-styling/js-styling/styles.js +0 -100
- jac_client/examples/css-styling/js-styling/vite.config.js +0 -27
- jac_client/examples/css-styling/material-ui/.babelrc +0 -9
- jac_client/examples/css-styling/material-ui/README.md +0 -16
- jac_client/examples/css-styling/material-ui/package.json +0 -32
- jac_client/examples/css-styling/material-ui/vite.config.js +0 -27
- jac_client/examples/css-styling/pure-css/.babelrc +0 -9
- jac_client/examples/css-styling/pure-css/README.md +0 -16
- jac_client/examples/css-styling/pure-css/package.json +0 -28
- jac_client/examples/css-styling/pure-css/styles.css +0 -111
- jac_client/examples/css-styling/pure-css/vite.config.js +0 -27
- jac_client/examples/css-styling/sass-example/.babelrc +0 -9
- jac_client/examples/css-styling/sass-example/README.md +0 -16
- jac_client/examples/css-styling/sass-example/package.json +0 -29
- jac_client/examples/css-styling/sass-example/styles.scss +0 -153
- jac_client/examples/css-styling/sass-example/vite.config.js +0 -27
- jac_client/examples/css-styling/styled-components/.babelrc +0 -9
- jac_client/examples/css-styling/styled-components/README.md +0 -16
- jac_client/examples/css-styling/styled-components/package.json +0 -29
- jac_client/examples/css-styling/styled-components/styled.js +0 -90
- jac_client/examples/css-styling/styled-components/vite.config.js +0 -27
- jac_client/examples/css-styling/tailwind-example/.babelrc +0 -9
- jac_client/examples/css-styling/tailwind-example/README.md +0 -16
- jac_client/examples/css-styling/tailwind-example/global.css +0 -1
- jac_client/examples/css-styling/tailwind-example/package.json +0 -30
- jac_client/examples/css-styling/tailwind-example/vite.config.js +0 -29
- jac_client/examples/full-stack-with-auth/.babelrc +0 -9
- jac_client/examples/full-stack-with-auth/README.md +0 -16
- jac_client/examples/full-stack-with-auth/package.json +0 -28
- jac_client/examples/full-stack-with-auth/vite.config.js +0 -29
- jac_client/examples/little-x/package.json +0 -23
- jac_client/examples/little-x/submit-button.jac +0 -8
- jac_client/examples/nested-folders/nested-advance/.babelrc +0 -9
- jac_client/examples/nested-folders/nested-advance/README.md +0 -77
- jac_client/examples/nested-folders/nested-advance/package.json +0 -29
- jac_client/examples/nested-folders/nested-advance/vite.config.js +0 -28
- jac_client/examples/nested-folders/nested-basic/.babelrc +0 -9
- jac_client/examples/nested-folders/nested-basic/README.md +0 -183
- jac_client/examples/nested-folders/nested-basic/app.js +0 -7
- jac_client/examples/nested-folders/nested-basic/package.json +0 -28
- jac_client/examples/nested-folders/nested-basic/vite.config.js +0 -27
- jac_client/examples/with-router/.babelrc +0 -9
- jac_client/examples/with-router/README.md +0 -17
- jac_client/examples/with-router/package.json +0 -28
- jac_client/examples/with-router/vite.config.js +0 -27
- jac_client/plugin/cli.py +0 -244
- jac_client/plugin/client.py +0 -152
- jac_client/plugin/client_runtime.jac +0 -234
- jac_client/plugin/vite_client_bundle.py +0 -503
- jac_client/tests/fixtures/js_import/utils.js +0 -21
- jac_client/tests/fixtures/package-lock.json +0 -329
- jac_client/tests/fixtures/package.json +0 -11
- jac_client/tests/test_asset_examples.py +0 -322
- jac_client/tests/test_cl.py +0 -530
- jac_client/tests/test_create_jac_app.py +0 -131
- jac_client/tests/test_nested_file.py +0 -374
- jac_client-0.2.2.dist-info/RECORD +0 -171
- jac_client-0.2.2.dist-info/entry_points.txt +0 -4
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
# JavaScript Styling Example
|
|
2
|
-
|
|
3
|
-
This example demonstrates styling a Jac application using JavaScript objects for inline styles.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
JavaScript styling uses JavaScript objects to define styles, which are then applied via the `style` prop. This approach is perfect for:
|
|
8
|
-
- Dynamic styling based on state
|
|
9
|
-
- Programmatic style generation
|
|
10
|
-
- Component-scoped styles without CSS files
|
|
11
|
-
- React-style inline styling
|
|
12
|
-
|
|
13
|
-
## Project Structure
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
js-styling/
|
|
17
|
-
├── app.jac # Main application component
|
|
18
|
-
├── styles.js # Style objects exported as default
|
|
19
|
-
├── package.json # Dependencies
|
|
20
|
-
└── vite.config.js # Vite configuration
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Setup
|
|
24
|
-
|
|
25
|
-
1. Install dependencies:
|
|
26
|
-
```bash
|
|
27
|
-
npm install
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
2. Run the application:
|
|
31
|
-
```bash
|
|
32
|
-
jac serve app.jac
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## How It Works
|
|
36
|
-
|
|
37
|
-
### 1. Define Style Objects
|
|
38
|
-
|
|
39
|
-
In `styles.js`, export a default object with all styles:
|
|
40
|
-
|
|
41
|
-
```javascript
|
|
42
|
-
const countDisplay = {
|
|
43
|
-
fontSize: "3.75rem",
|
|
44
|
-
fontWeight: "bold",
|
|
45
|
-
transition: "color 0.3s ease"
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export default {
|
|
49
|
-
container: {
|
|
50
|
-
minHeight: "100vh",
|
|
51
|
-
background: "linear-gradient(to bottom right, #dbeafe, #e0e7ff)",
|
|
52
|
-
display: "flex",
|
|
53
|
-
alignItems: "center",
|
|
54
|
-
justifyContent: "center",
|
|
55
|
-
padding: "1rem"
|
|
56
|
-
},
|
|
57
|
-
card: {
|
|
58
|
-
backgroundColor: "#ffffff",
|
|
59
|
-
borderRadius: "1rem",
|
|
60
|
-
boxShadow: "0 25px 50px -12px rgba(0, 0, 0, 0.25)",
|
|
61
|
-
padding: "2rem",
|
|
62
|
-
maxWidth: "28rem",
|
|
63
|
-
width: "100%"
|
|
64
|
-
},
|
|
65
|
-
countDisplayZero: {
|
|
66
|
-
...countDisplay,
|
|
67
|
-
color: "#1f2937"
|
|
68
|
-
},
|
|
69
|
-
countDisplayPositive: {
|
|
70
|
-
...countDisplay,
|
|
71
|
-
color: "#16a34a"
|
|
72
|
-
},
|
|
73
|
-
// ... more styles
|
|
74
|
-
};
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### 2. Import Styles
|
|
78
|
-
|
|
79
|
-
In your Jac file:
|
|
80
|
-
|
|
81
|
-
```jac
|
|
82
|
-
cl import from .styles { default as styles }
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 3. Apply Styles
|
|
86
|
-
|
|
87
|
-
Use the `style` prop with style objects:
|
|
88
|
-
|
|
89
|
-
```jac
|
|
90
|
-
return <div style={styles.container}>
|
|
91
|
-
<div style={styles.card}>
|
|
92
|
-
<h1 style={styles.title}>Counter Application</h1>
|
|
93
|
-
</div>
|
|
94
|
-
</div>;
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### 4. Dynamic Styles
|
|
98
|
-
|
|
99
|
-
Select styles based on state:
|
|
100
|
-
|
|
101
|
-
```jac
|
|
102
|
-
let countStyle = styles.countDisplayZero if count == 0 else (styles.countDisplayPositive if count > 0 else styles.countDisplayNegative);
|
|
103
|
-
|
|
104
|
-
return <div style={countStyle}>{count}</div>;
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Style Object Format
|
|
108
|
-
|
|
109
|
-
JavaScript style objects use camelCase property names (React convention):
|
|
110
|
-
|
|
111
|
-
```javascript
|
|
112
|
-
{
|
|
113
|
-
backgroundColor: "#ffffff", // not background-color
|
|
114
|
-
fontSize: "1.5rem", // not font-size
|
|
115
|
-
marginTop: "10px", // not margin-top
|
|
116
|
-
zIndex: 1 // not z-index
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Best Practices
|
|
121
|
-
|
|
122
|
-
1. **Use object spread**: Share common styles with spread operator
|
|
123
|
-
2. **Organize by component**: Group related styles together
|
|
124
|
-
3. **Use constants**: Define reusable values at the top
|
|
125
|
-
4. **CamelCase properties**: Follow React naming convention
|
|
126
|
-
5. **Extract complex logic**: Move style calculations to functions
|
|
127
|
-
|
|
128
|
-
## Advantages
|
|
129
|
-
|
|
130
|
-
- ✅ Dynamic styling based on props/state
|
|
131
|
-
- ✅ No CSS file needed
|
|
132
|
-
- ✅ Type-safe (with TypeScript)
|
|
133
|
-
- ✅ Component-scoped by default
|
|
134
|
-
- ✅ Programmatic style generation
|
|
135
|
-
|
|
136
|
-
## Limitations
|
|
137
|
-
|
|
138
|
-
- ❌ No pseudo-classes (hover, focus, etc.)
|
|
139
|
-
- ❌ No media queries
|
|
140
|
-
- ❌ No CSS animations (use JavaScript)
|
|
141
|
-
- ❌ Verbose for complex styles
|
|
142
|
-
- ❌ No CSS preprocessor features
|
|
143
|
-
|
|
144
|
-
## When to Use
|
|
145
|
-
|
|
146
|
-
Choose JavaScript Styling when:
|
|
147
|
-
- You need dynamic styles based on state
|
|
148
|
-
- You want programmatic style generation
|
|
149
|
-
- You prefer keeping styles in JavaScript
|
|
150
|
-
- You're building component libraries
|
|
151
|
-
- You need runtime style calculations
|
|
152
|
-
|
|
153
|
-
## Advanced Patterns
|
|
154
|
-
|
|
155
|
-
### Style Functions
|
|
156
|
-
|
|
157
|
-
Create functions that return styles:
|
|
158
|
-
|
|
159
|
-
```javascript
|
|
160
|
-
export const getButtonStyle = (variant) => ({
|
|
161
|
-
...buttonBase,
|
|
162
|
-
backgroundColor: variant === 'primary' ? '#007bff' : '#6c757d'
|
|
163
|
-
});
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Conditional Styles
|
|
167
|
-
|
|
168
|
-
Use ternary operators for conditional styles:
|
|
169
|
-
|
|
170
|
-
```javascript
|
|
171
|
-
export default {
|
|
172
|
-
button: {
|
|
173
|
-
backgroundColor: isActive ? '#007bff' : '#6c757d',
|
|
174
|
-
opacity: isDisabled ? 0.5 : 1,
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
## Next Steps
|
|
180
|
-
|
|
181
|
-
- Explore [Styled Components](../styled-components/) for CSS-in-JS with more features
|
|
182
|
-
- Check out [Emotion](../emotion-example/) for similar CSS-in-JS approach (coming soon)
|
|
183
|
-
- Learn about [CSS Modules](../css-modules/) for scoped CSS (coming soon)
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "bootstrap-example",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"build": "npm run compile && vite build",
|
|
7
|
-
"dev": "vite dev",
|
|
8
|
-
"preview": "vite preview",
|
|
9
|
-
"compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [],
|
|
12
|
-
"author": "",
|
|
13
|
-
"license": "ISC",
|
|
14
|
-
"description": "Jac application: bootstrap-example",
|
|
15
|
-
"type": "module",
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"@babel/cli": "^7.28.3",
|
|
18
|
-
"@babel/core": "^7.28.5",
|
|
19
|
-
"@babel/preset-env": "^7.28.5",
|
|
20
|
-
"@babel/preset-react": "^7.28.5",
|
|
21
|
-
"vite": "^6.4.1"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"react": "^19.2.0",
|
|
25
|
-
"react-dom": "^19.2.0",
|
|
26
|
-
"react-router-dom": "^6.30.1"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
// Style objects for the counter app
|
|
2
|
-
const countDisplay = {
|
|
3
|
-
fontSize: "3.75rem",
|
|
4
|
-
fontWeight: "bold",
|
|
5
|
-
transition: "color 0.3s ease"
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const button = {
|
|
9
|
-
color: "#ffffff",
|
|
10
|
-
fontWeight: "bold",
|
|
11
|
-
padding: "0.75rem 1.5rem",
|
|
12
|
-
borderRadius: "0.5rem",
|
|
13
|
-
boxShadow: "0 10px 15px -3px rgba(0, 0, 0, 0.1)",
|
|
14
|
-
transition: "all 0.2s ease",
|
|
15
|
-
fontSize: "1.25rem",
|
|
16
|
-
border: "none",
|
|
17
|
-
cursor: "pointer"
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export default {
|
|
21
|
-
container: {
|
|
22
|
-
minHeight: "100vh",
|
|
23
|
-
background: "linear-gradient(to bottom right, #dbeafe, #e0e7ff)",
|
|
24
|
-
display: "flex",
|
|
25
|
-
alignItems: "center",
|
|
26
|
-
justifyContent: "center",
|
|
27
|
-
padding: "1rem"
|
|
28
|
-
},
|
|
29
|
-
card: {
|
|
30
|
-
backgroundColor: "#ffffff",
|
|
31
|
-
borderRadius: "1rem",
|
|
32
|
-
boxShadow: "0 25px 50px -12px rgba(0, 0, 0, 0.25)",
|
|
33
|
-
padding: "2rem",
|
|
34
|
-
maxWidth: "28rem",
|
|
35
|
-
width: "100%"
|
|
36
|
-
},
|
|
37
|
-
title: {
|
|
38
|
-
fontSize: "1.875rem",
|
|
39
|
-
fontWeight: "bold",
|
|
40
|
-
color: "#1f2937",
|
|
41
|
-
textAlign: "center",
|
|
42
|
-
marginBottom: "1.5rem"
|
|
43
|
-
},
|
|
44
|
-
divider: {
|
|
45
|
-
height: "1px",
|
|
46
|
-
background: "linear-gradient(to right, transparent, #d1d5db, transparent)",
|
|
47
|
-
marginBottom: "1.5rem"
|
|
48
|
-
},
|
|
49
|
-
counterSection: {
|
|
50
|
-
textAlign: "center",
|
|
51
|
-
marginBottom: "2rem"
|
|
52
|
-
},
|
|
53
|
-
label: {
|
|
54
|
-
fontSize: "0.875rem",
|
|
55
|
-
fontWeight: "600",
|
|
56
|
-
color: "#4b5563",
|
|
57
|
-
marginBottom: "0.5rem",
|
|
58
|
-
textTransform: "uppercase",
|
|
59
|
-
letterSpacing: "0.05em"
|
|
60
|
-
},
|
|
61
|
-
countDisplay: countDisplay,
|
|
62
|
-
countDisplayZero: {
|
|
63
|
-
...countDisplay,
|
|
64
|
-
color: "#1f2937"
|
|
65
|
-
},
|
|
66
|
-
countDisplayPositive: {
|
|
67
|
-
...countDisplay,
|
|
68
|
-
color: "#16a34a"
|
|
69
|
-
},
|
|
70
|
-
countDisplayNegative: {
|
|
71
|
-
...countDisplay,
|
|
72
|
-
color: "#dc2626"
|
|
73
|
-
},
|
|
74
|
-
buttonGroup: {
|
|
75
|
-
display: "flex",
|
|
76
|
-
justifyContent: "center",
|
|
77
|
-
alignItems: "center",
|
|
78
|
-
gap: "1rem",
|
|
79
|
-
marginBottom: "1.5rem"
|
|
80
|
-
},
|
|
81
|
-
button: button,
|
|
82
|
-
buttonDecrement: {
|
|
83
|
-
...button,
|
|
84
|
-
backgroundColor: "#ef4444"
|
|
85
|
-
},
|
|
86
|
-
buttonReset: {
|
|
87
|
-
...button,
|
|
88
|
-
backgroundColor: "#6b7280"
|
|
89
|
-
},
|
|
90
|
-
buttonIncrement: {
|
|
91
|
-
...button,
|
|
92
|
-
backgroundColor: "#22c55e"
|
|
93
|
-
},
|
|
94
|
-
hint: {
|
|
95
|
-
textAlign: "center",
|
|
96
|
-
fontSize: "0.875rem",
|
|
97
|
-
color: "#6b7280",
|
|
98
|
-
fontStyle: "italic"
|
|
99
|
-
}
|
|
100
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { defineConfig } from "vite";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import { fileURLToPath } from "url";
|
|
5
|
-
|
|
6
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
root: ".", // base folder
|
|
10
|
-
build: {
|
|
11
|
-
rollupOptions: {
|
|
12
|
-
input: "build/main.js", // your compiled entry file
|
|
13
|
-
output: {
|
|
14
|
-
entryFileNames: "client.[hash].js", // name of the final js file
|
|
15
|
-
assetFileNames: "[name].[ext]",
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
outDir: "dist", // final bundled output
|
|
19
|
-
emptyOutDir: true,
|
|
20
|
-
},
|
|
21
|
-
publicDir: false,
|
|
22
|
-
resolve: {
|
|
23
|
-
alias: {
|
|
24
|
-
"@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "my-test-app",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"build": "npm run compile && vite build",
|
|
7
|
-
"dev": "vite dev",
|
|
8
|
-
"preview": "vite preview",
|
|
9
|
-
"compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [],
|
|
12
|
-
"author": "",
|
|
13
|
-
"license": "ISC",
|
|
14
|
-
"description": "Jac application: my-test-app",
|
|
15
|
-
"type": "module",
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"@babel/cli": "^7.28.3",
|
|
18
|
-
"@babel/core": "^7.28.5",
|
|
19
|
-
"@babel/preset-env": "^7.28.5",
|
|
20
|
-
"@babel/preset-react": "^7.28.5",
|
|
21
|
-
"vite": "^6.4.1"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@emotion/react": "^11.14.0",
|
|
25
|
-
"@emotion/styled": "^11.14.1",
|
|
26
|
-
"@mui/icons-material": "^7.3.5",
|
|
27
|
-
"@mui/material": "^7.3.5",
|
|
28
|
-
"react": "^19.2.0",
|
|
29
|
-
"react-dom": "^19.2.0",
|
|
30
|
-
"react-router-dom": "^6.30.1"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { defineConfig } from "vite";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import { fileURLToPath } from "url";
|
|
5
|
-
|
|
6
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
root: ".", // base folder
|
|
10
|
-
build: {
|
|
11
|
-
rollupOptions: {
|
|
12
|
-
input: "build/main.js", // your compiled entry file
|
|
13
|
-
output: {
|
|
14
|
-
entryFileNames: "client.[hash].js", // name of the final js file
|
|
15
|
-
assetFileNames: "[name].[ext]",
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
outDir: "dist", // final bundled output
|
|
19
|
-
emptyOutDir: true,
|
|
20
|
-
},
|
|
21
|
-
publicDir: false,
|
|
22
|
-
resolve: {
|
|
23
|
-
alias: {
|
|
24
|
-
"@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "my-test-app",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"build": "npm run compile && vite build",
|
|
7
|
-
"dev": "vite dev",
|
|
8
|
-
"preview": "vite preview",
|
|
9
|
-
"compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [],
|
|
12
|
-
"author": "",
|
|
13
|
-
"license": "ISC",
|
|
14
|
-
"description": "Jac application: my-test-app",
|
|
15
|
-
"type": "module",
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"vite": "^6.4.1",
|
|
18
|
-
"@babel/cli": "^7.28.3",
|
|
19
|
-
"@babel/core": "^7.28.5",
|
|
20
|
-
"@babel/preset-env": "^7.28.5",
|
|
21
|
-
"@babel/preset-react": "^7.28.5"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"react": "^19.2.0",
|
|
25
|
-
"react-dom": "^19.2.0",
|
|
26
|
-
"react-router-dom": "^6.30.1"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
display: flex;
|
|
3
|
-
justify-content: center;
|
|
4
|
-
align-items: center;
|
|
5
|
-
min-height: 100vh;
|
|
6
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
7
|
-
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.card {
|
|
11
|
-
background: white;
|
|
12
|
-
border-radius: 20px;
|
|
13
|
-
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
|
14
|
-
padding: 40px;
|
|
15
|
-
min-width: 400px;
|
|
16
|
-
text-align: center;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.title {
|
|
20
|
-
font-size: 2rem;
|
|
21
|
-
color: #667eea;
|
|
22
|
-
margin: 0 0 10px 0;
|
|
23
|
-
font-weight: 600;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.divider {
|
|
27
|
-
height: 2px;
|
|
28
|
-
background: linear-gradient(90deg, transparent, #667eea, transparent);
|
|
29
|
-
margin: 20px 0;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.counterSection {
|
|
33
|
-
padding: 30px 0;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.label {
|
|
37
|
-
font-size: 1.2rem;
|
|
38
|
-
color: #666;
|
|
39
|
-
margin-bottom: 10px;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.countDisplay {
|
|
43
|
-
font-size: 5rem;
|
|
44
|
-
font-weight: bold;
|
|
45
|
-
margin: 20px 0;
|
|
46
|
-
transition: color 0.3s ease;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.positive {
|
|
50
|
-
color: #4caf50;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.negative {
|
|
54
|
-
color: #f44336;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.zero {
|
|
58
|
-
color: #333;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.buttonGroup {
|
|
62
|
-
display: flex;
|
|
63
|
-
justify-content: space-around;
|
|
64
|
-
gap: 15px;
|
|
65
|
-
margin-top: 30px;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.btn {
|
|
69
|
-
border: none;
|
|
70
|
-
border-radius: 50%;
|
|
71
|
-
width: 70px;
|
|
72
|
-
height: 70px;
|
|
73
|
-
font-size: 1.5rem;
|
|
74
|
-
cursor: pointer;
|
|
75
|
-
transition: all 0.3s ease;
|
|
76
|
-
display: flex;
|
|
77
|
-
align-items: center;
|
|
78
|
-
justify-content: center;
|
|
79
|
-
font-weight: bold;
|
|
80
|
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.btn:hover {
|
|
84
|
-
transform: translateY(-3px);
|
|
85
|
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.btn:active {
|
|
89
|
-
transform: translateY(0);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.btnDecrement {
|
|
93
|
-
background: linear-gradient(135deg, #f44336, #e91e63);
|
|
94
|
-
color: white;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.btnReset {
|
|
98
|
-
background: linear-gradient(135deg, #2196f3, #00bcd4);
|
|
99
|
-
color: white;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.btnIncrement {
|
|
103
|
-
background: linear-gradient(135deg, #4caf50, #8bc34a);
|
|
104
|
-
color: white;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.hint {
|
|
108
|
-
margin-top: 20px;
|
|
109
|
-
font-size: 0.9rem;
|
|
110
|
-
color: #999;
|
|
111
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { defineConfig } from "vite";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import { fileURLToPath } from "url";
|
|
5
|
-
|
|
6
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
root: ".", // base folder
|
|
10
|
-
build: {
|
|
11
|
-
rollupOptions: {
|
|
12
|
-
input: "build/main.js", // your compiled entry file
|
|
13
|
-
output: {
|
|
14
|
-
entryFileNames: "client.[hash].js", // name of the final js file
|
|
15
|
-
assetFileNames: "[name].[ext]",
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
outDir: "dist", // final bundled output
|
|
19
|
-
emptyOutDir: true,
|
|
20
|
-
},
|
|
21
|
-
publicDir: false,
|
|
22
|
-
resolve: {
|
|
23
|
-
alias: {
|
|
24
|
-
"@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "sass-example",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"build": "npm run compile && vite build",
|
|
7
|
-
"dev": "vite dev",
|
|
8
|
-
"preview": "vite preview",
|
|
9
|
-
"compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [],
|
|
12
|
-
"author": "",
|
|
13
|
-
"license": "ISC",
|
|
14
|
-
"description": "Jac application: sass-example",
|
|
15
|
-
"type": "module",
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"vite": "^6.4.1",
|
|
18
|
-
"@babel/cli": "^7.28.3",
|
|
19
|
-
"@babel/core": "^7.28.5",
|
|
20
|
-
"@babel/preset-env": "^7.28.5",
|
|
21
|
-
"@babel/preset-react": "^7.28.5",
|
|
22
|
-
"sass": "^1.77.8"
|
|
23
|
-
},
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"react": "^19.2.0",
|
|
26
|
-
"react-dom": "^19.2.0",
|
|
27
|
-
"react-router-dom": "^6.30.1"
|
|
28
|
-
}
|
|
29
|
-
}
|