@salesql/sql_components_vue3 0.2.0 → 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.
- package/README.md +253 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# @salesql/sql_components_vue3
|
|
2
|
+
|
|
3
|
+
Librería de componentes Vue 3 (TypeScript) para SalesQL.
|
|
4
|
+
Estilos con **SCSS** (variables centralizadas en `colors.scss`).
|
|
5
|
+
Visor de componentes y playground con **Histoire**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🚀 Requisitos
|
|
10
|
+
|
|
11
|
+
> ⚠️ **Node:** Vite 7 requiere **Node ≥ 20.19** (recomendado **22.12.0**).
|
|
12
|
+
> Con Node 18 fallará con `crypto.hash is not a function`.
|
|
13
|
+
|
|
14
|
+
| Tool / lib | Versión recomendada |
|
|
15
|
+
| ---------------------- | ---------------------- |
|
|
16
|
+
| **Node** | **22.12.0** (o ≥20.19) |
|
|
17
|
+
| **pnpm** | 10.17.0 |
|
|
18
|
+
| **Vue** | 3.5.22 |
|
|
19
|
+
| **Vite** | 7.1.7 |
|
|
20
|
+
| **@vitejs/plugin-vue** | 6.0.1 |
|
|
21
|
+
| **TypeScript** | 5.9.2 |
|
|
22
|
+
| **vue-tsc** | 2.2.12 |
|
|
23
|
+
| **Histoire** | 1.0.0-alpha.3 |
|
|
24
|
+
| **Sass (dart-sass)** | 1.93.2 |
|
|
25
|
+
| **Changesets** | 2.29.7 |
|
|
26
|
+
|
|
27
|
+
### Preparación de entorno
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Node
|
|
31
|
+
nvm install 22.12.0
|
|
32
|
+
nvm use 22.12.0
|
|
33
|
+
node -v # v22.12.0
|
|
34
|
+
|
|
35
|
+
# Instalar dependencias del monorepo
|
|
36
|
+
pnpm install
|
|
37
|
+
|
|
38
|
+
# (Primera vez con Vite/Histoire)
|
|
39
|
+
pnpm approve-builds # marca @parcel/watcher y confirma
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 📂 Estructura
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
salesql-components-library-vue3/
|
|
48
|
+
├─ package.json # raíz del monorepo
|
|
49
|
+
├─ pnpm-workspace.yaml
|
|
50
|
+
├─ tsconfig.base.json
|
|
51
|
+
└─ components/ # paquete de la librería
|
|
52
|
+
├─ package.json
|
|
53
|
+
├─ tsconfig.json # solo src/*
|
|
54
|
+
├─ tsconfig.build.json # build de la lib
|
|
55
|
+
├─ tsconfig.node.json # configs: vite/histoire
|
|
56
|
+
├─ vite.config.ts
|
|
57
|
+
├─ histoire.config.ts
|
|
58
|
+
├─ src/
|
|
59
|
+
│ ├─ index.ts # exporta componentes (+ importa estilos base)
|
|
60
|
+
│ ├─ env.d.ts
|
|
61
|
+
│ ├─ stories.setup.ts
|
|
62
|
+
│ ├─ assets/css/
|
|
63
|
+
│ │ ├─ base.scss
|
|
64
|
+
│ │ ├─ colors.scss
|
|
65
|
+
│ │ └─ spacing.scss
|
|
66
|
+
│ ├─ constants/sql-components.ts
|
|
67
|
+
│ └─ components/
|
|
68
|
+
│ ├─ SqlButton.vue
|
|
69
|
+
│ ├─ SqlButton.story.vue
|
|
70
|
+
│ ├─ SqlSpinner.vue
|
|
71
|
+
│ └─ SqlSpinner.story.vue
|
|
72
|
+
└─ dist/ # salida de build
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 📦 Scripts principales
|
|
78
|
+
|
|
79
|
+
Desde la raíz:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pnpm build # build de la librería
|
|
83
|
+
pnpm dev:stories # arranca Histoire
|
|
84
|
+
pnpm typecheck # chequeo estricto de tipos
|
|
85
|
+
pnpm changeset # crear un changeset
|
|
86
|
+
pnpm release:version # aplicar changeset y subir versión
|
|
87
|
+
pnpm release:publish # publicar a npm
|
|
88
|
+
pnpm reset # limpiar node_modules + reinstalar + aprobar builds
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🔎 Histoire (visualización y testeo)
|
|
94
|
+
|
|
95
|
+
Para arrancar el entorno de historias:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm dev:stories
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
- Abre http://localhost:6006
|
|
102
|
+
- Historias junto al componente, ej: `SqlButton.story.vue`
|
|
103
|
+
- Usa `<Story>` / `<Variant>` / `<Controls>` para mostrar variantes e interactuar
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 📥 Uso en apps consumidoras
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pnpm add @salesql/sql_components_vue3
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Ejemplo:
|
|
114
|
+
|
|
115
|
+
```vue
|
|
116
|
+
<script setup lang="ts">
|
|
117
|
+
import { SqlButton } from "@salesql/sql_components_vue3";
|
|
118
|
+
</script>
|
|
119
|
+
|
|
120
|
+
<template>
|
|
121
|
+
<SqlButton class="sql-button--primary sql-button--large"> Guardar </SqlButton>
|
|
122
|
+
</template>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Los estilos base se importan automáticamente desde la librería (`base.scss`).
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 🛠️ Añadir un nuevo componente (Checklist)
|
|
130
|
+
|
|
131
|
+
> Convención de nombres: archivos **PascalCase** (`SqlX.vue`, `SqlX.story.vue`).
|
|
132
|
+
|
|
133
|
+
### 1. Crear el componente
|
|
134
|
+
|
|
135
|
+
`components/src/components/SqlX.vue`:
|
|
136
|
+
|
|
137
|
+
```vue
|
|
138
|
+
<script setup lang="ts">
|
|
139
|
+
// lógica/props
|
|
140
|
+
</script>
|
|
141
|
+
|
|
142
|
+
<template>
|
|
143
|
+
<div class="sql-x">
|
|
144
|
+
<slot />
|
|
145
|
+
</div>
|
|
146
|
+
</template>
|
|
147
|
+
|
|
148
|
+
<style lang="scss" scoped>
|
|
149
|
+
@use "../assets/css/colors.scss" as colors;
|
|
150
|
+
@use "../assets/css/spacing.scss" as s;
|
|
151
|
+
|
|
152
|
+
.sql-x {
|
|
153
|
+
color: colors.$primary-main;
|
|
154
|
+
padding: s.spacing(2);
|
|
155
|
+
}
|
|
156
|
+
</style>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 2. Crear la historia
|
|
160
|
+
|
|
161
|
+
`components/src/components/SqlX.story.vue`:
|
|
162
|
+
|
|
163
|
+
```vue
|
|
164
|
+
<script setup lang="ts">
|
|
165
|
+
import SqlX from "./SqlX.vue";
|
|
166
|
+
</script>
|
|
167
|
+
|
|
168
|
+
<template>
|
|
169
|
+
<Story title="SqlX/Básico">
|
|
170
|
+
<Variant title="Default">
|
|
171
|
+
<SqlX>Contenido</SqlX>
|
|
172
|
+
</Variant>
|
|
173
|
+
<Variant title="Playground">
|
|
174
|
+
<Controls :data="{ text: { type: 'text', default: 'Hola' } }">
|
|
175
|
+
<template #default="{ state }">
|
|
176
|
+
<SqlX>{{ state.text }}</SqlX>
|
|
177
|
+
</template>
|
|
178
|
+
</Controls>
|
|
179
|
+
</Variant>
|
|
180
|
+
</Story>
|
|
181
|
+
</template>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 3. Exportarlo
|
|
185
|
+
|
|
186
|
+
En `components/src/index.ts`:
|
|
187
|
+
|
|
188
|
+
```ts
|
|
189
|
+
import "./assets/css/base.scss";
|
|
190
|
+
|
|
191
|
+
export { default as SqlButton } from "./components/SqlButton.vue";
|
|
192
|
+
export { default as SqlSpinner } from "./components/SqlSpinner.vue";
|
|
193
|
+
export { default as SqlX } from "./components/SqlX.vue";
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 4. Probar con Histoire
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
pnpm dev:stories
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 5. Chequear y build
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
pnpm typecheck
|
|
206
|
+
pnpm build
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 6. Versionado
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
pnpm changeset
|
|
213
|
+
pnpm release:version
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### 7. Publicación
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
pnpm release:publish
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 🔧 Convenciones
|
|
225
|
+
|
|
226
|
+
- **Archivos:** PascalCase para `.vue` y `.story.vue`.
|
|
227
|
+
- **Estilos:** `@use '../assets/css/colors.scss' as colors;`.
|
|
228
|
+
- **Spacing:** `spacing.scss` con `map.get(...)`.
|
|
229
|
+
- **Enums/constantes:**
|
|
230
|
+
```ts
|
|
231
|
+
export const SQL_SPINNER_SIZES = {
|
|
232
|
+
SMALL: "small",
|
|
233
|
+
MEDIUM: "medium",
|
|
234
|
+
LARGE: "large",
|
|
235
|
+
} as const;
|
|
236
|
+
export type SqlSpinnerSize =
|
|
237
|
+
(typeof SQL_SPINNER_SIZES)[keyof typeof SQL_SPINNER_SIZES];
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 🐛 Troubleshooting
|
|
243
|
+
|
|
244
|
+
- **`crypto.hash is not a function` / “Vite requires Node 20.19+ or 22.12+”**
|
|
245
|
+
→ Actualiza Node a **22.12.0** y reinstala dependencias.
|
|
246
|
+
|
|
247
|
+
- **VSCode marca “Cannot find module 'vue'”**
|
|
248
|
+
→ Asegúrate de que `vue` está en **peerDependencies** y **devDependencies** en `components/package.json`.
|
|
249
|
+
Reinicia TS server.
|
|
250
|
+
|
|
251
|
+
- **pnpm pide aprobar `@parcel/watcher`**
|
|
252
|
+
→ `pnpm approve-builds` (marca `@parcel/watcher`).
|
|
253
|
+
Para global: `pnpm approve-builds --global`.
|