@samline/notify 0.1.0 → 0.1.6

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.
@@ -0,0 +1,501 @@
1
+ # Blueprint Interno Para Replicar Este Paquete En Otro Dominio
2
+
3
+ ## Instrucción Para La IA
4
+
5
+ Este archivo está escrito para que la IA que trabaje dentro de este repositorio lo revise antes de proponer o construir un paquete nuevo basado en esta misma arquitectura.
6
+
7
+ Si en una conversación futura se pide crear otro paquete siguiendo este modelo, la IA debe revisar primero este documento, identificar qué partes del scaffold actual sí aplican al nuevo dominio y pedir la información faltante antes de generar código.
8
+
9
+ ## Objetivo
10
+
11
+ Este documento resume la arquitectura completa de este paquete y la traduce a un blueprint reutilizable para construir un paquete independiente con la misma calidad de implementación, por ejemplo un paquete para parsear, convertir y formatear fechas.
12
+
13
+ La meta no es clonar el dominio de visibilidad, sino reutilizar su estructura de producto:
14
+
15
+ - core compartido
16
+ - entrypoints por entorno o framework
17
+ - build multi-entrypoint
18
+ - documentación separada por variante
19
+ - pruebas por capa
20
+ - publicación npm con controles previos
21
+
22
+ ## Qué Debo Pedirte Antes De Crear El Nuevo Paquete
23
+
24
+ Antes de empezar la implementación, necesito estos datos:
25
+
26
+ 1. Nombre del paquete npm.
27
+ 2. Descripción corta del paquete.
28
+ 3. Objetivo funcional exacto.
29
+ 4. Código fuente inicial del paquete o una especificación funcional suficientemente precisa.
30
+ 5. API pública deseada.
31
+ 6. Dependencias runtime obligatorias.
32
+ 7. Peer dependencies opcionales, si aplica.
33
+ 8. Frameworks que deben estar soportados desde la primera versión.
34
+ 9. Si debe existir una variante browser o CDN sin build step.
35
+ 10. Versión mínima de Node.js.
36
+ 11. Licencia.
37
+ 12. URL de repositorio, homepage e issues, si ya existen.
38
+ 13. Ejemplos reales de uso esperados.
39
+ 14. Restricciones de compatibilidad o rendimiento.
40
+ 15. Estrategia de publicación: público o privado, alcance npm, prerelease o release estable.
41
+ 16. Preferencias de testing, lint, formateo y cobertura.
42
+
43
+ Sin esos datos, el scaffold puede quedar técnicamente correcto pero mal alineado con el producto real.
44
+
45
+ ### Regla por defecto de compatibilidad Node
46
+
47
+ Si el usuario no define otra restricción, los paquetes replicados desde este blueprint deben mantenerse compatibles con Node 20 o superior, incluyendo Node 24 y versiones posteriores que sigan siendo razonables para el stack elegido.
48
+
49
+ La IA no debe subir el requisito mínimo de Node por encima de 20 ni usar APIs que fuercen esa subida sin una solicitud explícita.
50
+
51
+ ## Regla De Uso Para La IA
52
+
53
+ Antes de iniciar un scaffold nuevo dentro de este repositorio o en uno similar, la IA debe:
54
+
55
+ 1. Revisar este archivo completo.
56
+ 2. Confirmar si el nuevo dominio realmente necesita variantes React, Vue, Svelte o browser.
57
+ 3. Pedir el código fuente o la especificación funcional si todavía no existe suficiente detalle.
58
+ 4. No asumir que todos los entrypoints del paquete actual deben replicarse.
59
+ 5. Mantener el resultado alineado con el alcance real y no con una plantilla inflada.
60
+
61
+ ## Resumen Del Paquete Actual
62
+
63
+ Este proyecto sigue una arquitectura multi-entrypoint con TypeScript y ESM:
64
+
65
+ - un core compartido en src/core
66
+ - una API vanilla reutilizable
67
+ - un bundle browser global para uso sin bundler
68
+ - wrappers idiomáticos para React, Vue y Svelte
69
+ - documentación específica por entorno en docs/
70
+ - pruebas separadas por capa en test/
71
+
72
+ ### Capacidades del scaffold actual
73
+
74
+ 1. Exporta varias entradas desde un solo paquete npm.
75
+ 2. Publica solo dist/.
76
+ 3. Genera tipos TypeScript para cada subpath.
77
+ 4. Mantiene peer dependencies opcionales para frameworks.
78
+ 5. Ejecuta build, typecheck y tests antes de publicar.
79
+
80
+ ## Archivos Que Sirven Como Plantilla
81
+
82
+ ### Metadatos y build
83
+
84
+ - package.json: nombre del paquete, exports, peer dependencies, scripts, files publicados.
85
+ - package.json: nombre del paquete, exports, peer dependencies, scripts, files publicados y engines alineado con compatibilidad Node 20 o superior si no se indicó otra cosa.
86
+ - tsup.config.ts: build ESM por subpath y bundle IIFE para browser.
87
+ - tsconfig.json: configuración estricta TypeScript con NodeNext.
88
+ - .gitignore: exclusiones locales y de build.
89
+
90
+ ### Código fuente
91
+
92
+ - src/core/observe.ts: patrón de núcleo compartido desacoplado del framework.
93
+ - src/index.ts: entrypoint principal del paquete.
94
+ - src/vanilla/index.ts: wrapper base para consumo DOM o librería directa.
95
+ - src/browser/global.ts: exposición a globalThis para uso sin bundler.
96
+ - src/react/\*: adaptación idiomática a React.
97
+ - src/vue/\*: adaptación idiomática a Vue.
98
+ - src/svelte/\*: adaptación idiomática a Svelte.
99
+
100
+ ### Documentación
101
+
102
+ - README.md: usar una estructura práctica y navegable, evitando secciones promocionales genéricas como "Why This Package" salvo que el usuario las pida.
103
+ - README.md: la tabla de contenidos por defecto debe seguir este orden cuando aplique: Installation, CDN / Browser, Entrypoints, Quick Start, API, Supported Locales, Documentation, License.
104
+ - README.md: incluir instalación con npm, pnpm, yarn y bun, y añadir CDN / Browser cuando exista una variante sin bundler.
105
+ - README.md: si el paquete no depende de locales, la sección Supported Locales debe indicarlo explícitamente en vez de inventar compatibilidad localizada.
106
+ - docs/vanilla.md: contrato base compartido.
107
+ - docs/browser.md: uso sin compilación.
108
+ - docs/react.md: uso idiomático en React.
109
+ - docs/vue.md: uso idiomático en Vue.
110
+ - docs/svelte.md: uso idiomático en Svelte.
111
+
112
+ ### Testing
113
+
114
+ - test/helpers/intersection-observer.ts: helper centralizado para mocks del entorno.
115
+ - test/index.test.ts: cobertura del core y wrapper base.
116
+ - test/browser/global.test.ts: validación del bundle browser.
117
+ - test/react/\*: pruebas de hook y componente.
118
+ - test/vue/\*: pruebas de composable y componente.
119
+ - test/svelte/\*: pruebas de helper, stores y action.
120
+
121
+ ## Arquitectura Reutilizable
122
+
123
+ La parte reusable no es IntersectionObserver en sí, sino la separación de responsabilidades.
124
+
125
+ ### Capa 1: Core compartido
126
+
127
+ El core debe contener la lógica del dominio sin dependencias de framework.
128
+
129
+ Ejemplos:
130
+
131
+ - visibilidad: observeVisibility
132
+ - fechas: parseDate, formatDate, convertTimezone, compareDates
133
+ - moneda: parseMoney, formatMoney, normalizeCurrency
134
+
135
+ Reglas:
136
+
137
+ 1. No depender de React, Vue ni Svelte.
138
+ 2. Exponer tipos reutilizables.
139
+ 3. Resolver el comportamiento principal del dominio.
140
+ 4. Ser la base de todas las variantes posteriores.
141
+
142
+ ### Capa 2: API vanilla o shared
143
+
144
+ Esta capa expone el core con la interfaz más simple posible.
145
+
146
+ Debe existir incluso si luego se agregan wrappers por framework, porque:
147
+
148
+ - define el contrato base
149
+ - simplifica pruebas unitarias
150
+ - facilita el uso en scripts y librerías
151
+ - evita duplicar lógica en wrappers
152
+
153
+ ### Capa 3: Variantes por framework
154
+
155
+ Solo deben existir si el framework gana una API idiomática real.
156
+
157
+ Ejemplos:
158
+
159
+ - React: hooks y componentes
160
+ - Vue: composables y componentes
161
+ - Svelte: stores y actions
162
+
163
+ No hay que forzar wrappers si el dominio no lo necesita. Si el paquete nuevo es puramente funcional, puede quedarse en core más vanilla.
164
+
165
+ ### Capa 4: Variante browser o CDN
166
+
167
+ Esta capa solo tiene sentido si el paquete debe funcionar en entornos sin bundler, como:
168
+
169
+ - Shopify
170
+ - WordPress
171
+ - plantillas HTML tradicionales
172
+ - scripts embebidos
173
+
174
+ Si el paquete nuevo va a vivir solo en entornos con build step, esta capa puede omitirse.
175
+
176
+ ## Árbol Recomendado Para Un Nuevo Paquete
177
+
178
+ ```text
179
+ package-name/
180
+ ├── .github/
181
+ │ └── workflows/
182
+ │ └── publish.yml
183
+ ├── LICENSE
184
+ ├── README.md
185
+ ├── package.json
186
+ ├── tsconfig.json
187
+ ├── tsup.config.ts
188
+ ├── docs/
189
+ │ ├── browser.md
190
+ │ ├── vanilla.md
191
+ │ ├── react.md
192
+ │ ├── svelte.md
193
+ │ └── vue.md
194
+ ├── src/
195
+ │ ├── index.ts
196
+ │ ├── browser/
197
+ │ │ └── global.ts
198
+ │ ├── core/
199
+ │ │ └── domain-core.ts
200
+ │ ├── react/
201
+ │ │ ├── index.ts
202
+ │ │ ├── use-domain.ts
203
+ │ │ └── domain-component.tsx
204
+ │ ├── svelte/
205
+ │ │ ├── index.ts
206
+ │ │ ├── types.ts
207
+ │ │ ├── use-domain.ts
208
+ │ │ └── domain-action.ts
209
+ │ ├── vanilla/
210
+ │ │ └── index.ts
211
+ │ └── vue/
212
+ │ ├── index.ts
213
+ │ ├── use-domain.ts
214
+ │ └── domain-component.ts
215
+ └── test/
216
+ ├── index.test.ts
217
+ ├── browser/
218
+ │ └── global.test.ts
219
+ ├── helpers/
220
+ │ └── environment-helper.ts
221
+ ├── react/
222
+ ├── svelte/
223
+ └── vue/
224
+ ```
225
+
226
+ Si el paquete no necesita frameworks o browser, ese árbol debe reducirse, no mantenerse por costumbre.
227
+
228
+ ## Entry Points Que Debes Decidir
229
+
230
+ Este paquete actual publica:
231
+
232
+ - paquete raíz
233
+ - /vanilla
234
+ - /react
235
+ - /vue
236
+ - /svelte
237
+ - bundle browser externo en dist/browser
238
+
239
+ Para un nuevo paquete, decide explícitamente cuáles de estos subpaths existen desde el día uno.
240
+
241
+ ### Regla de decisión
242
+
243
+ 1. Mantén el entrypoint raíz.
244
+ 2. Mantén vanilla si el paquete tiene una API utilitaria base.
245
+ 3. Añade React, Vue y Svelte solo si habrá integración idiomática, no solo reexportación vacía.
246
+ 4. Añade browser solo si el caso real sin bundler existe.
247
+
248
+ ## Build Y Publicación
249
+
250
+ ### Patrón actual que conviene replicar
251
+
252
+ 1. TypeScript estricto.
253
+ 2. Build con tsup.
254
+ 3. Salida ESM por subpath.
255
+ 4. Tipos generados para cada export.
256
+ 5. prepublishOnly con clean, build, typecheck y test.
257
+ 6. files en package.json limitado a dist.
258
+ 8. Workflow de GitHub Actions para publicar por tag cuando el paquete deba desplegarse en npm.
259
+ 9. Compatibilidad de engines y decisiones de implementación que no rompan soporte para Node 20 o superior salvo instrucción explícita.
260
+
261
+ ### Scripts mínimos recomendados
262
+
263
+ ```json
264
+ {
265
+ "clean": "rm -rf dist",
266
+ "build": "tsup --config tsup.config.ts",
267
+ "dev": "tsup --config tsup.config.ts --watch",
268
+ "format": "prettier --write .",
269
+ "format:check": "prettier --check .",
270
+ "typecheck": "tsc --noEmit",
271
+ "test": "vitest run",
272
+ "prepublishOnly": "npm run clean && npm run build && npm run typecheck && npm test"
273
+ }
274
+ ```
275
+
276
+ ### Decisiones que debes fijar al crear el nuevo paquete
277
+
278
+ 1. Nombre de los subpaths exportados.
279
+ 2. Si habrá peerDependencies opcionales.
280
+ 3. Si habrá bundle IIFE global para browser.
281
+ 4. Si el target seguirá siendo es2020 o cambiará.
282
+ 5. Si la variante root será equivalente a vanilla o a otro agregado.
283
+
284
+ ## Patrón De Documentación A Replicar
285
+
286
+ ### README principal
287
+
288
+ Debe contener:
289
+
290
+ 1. Descripción corta del paquete.
291
+ 2. Tabla de contenidos obligatoria para navegar las secciones principales.
292
+ 3. Instalación mínima con npm, pnpm, yarn y bun.
293
+ 4. Casos de uso reales.
294
+ 5. Tabla de entrypoints.
295
+ 6. Quick start del entrypoint principal.
296
+ 7. Índice hacia la documentación específica.
297
+ 8. Resumen de la API compartida.
298
+ 9. Notas de compatibilidad.
299
+ 10. Licencia.
300
+
301
+ ### Reglas mínimas del README de paquete
302
+
303
+ El README principal debe funcionar como puerta de entrada del paquete, no como reemplazo completo de la documentación por variante.
304
+
305
+ Reglas mínimas:
306
+
307
+ 1. La tabla de contenidos no es opcional. Debe existir siempre que el README tenga varias secciones de producto o API.
308
+ 2. La sección de instalación debe mostrar como mínimo comandos para npm, pnpm, yarn y bun.
309
+ 3. Si el paquete publica una variante browser sin bundler, el README debe documentar también una opción CDN pública o una estrategia de consumo remoto equivalente.
310
+ 4. La parte de CDN debe explicar de forma explícita cómo usar el paquete cuando el proyecto no puede compilar npm modules, por ejemplo en Shopify, WordPress o plantillas HTML sin bundler.
311
+ 5. La tabla de entrypoints debe basarse en exports reales del paquete y, cuando sea útil, indicar el nombre principal del hook, helper, store o global expuesto.
312
+ 6. El quick start debe mostrar el camino más simple para usar el paquete sin obligar al lector a abrir la documentación específica.
313
+ 7. El README principal debe enlazar a las guías de docs por entorno en lugar de duplicar toda la explicación allí.
314
+ 8. Si el paquete depende de otra librería base, conviene reconocerla y enlazarla cuando eso aclare el contexto técnico.
315
+ 9. El README debe seguir siendo compacto: suficiente para orientar, instalar y arrancar, sin inflarse con casos secundarios.
316
+
317
+ ### Regla condicional para CDN y browser build
318
+
319
+ Si existe browser build publicable, la documentación debe incluir:
320
+
321
+ 1. una URL de ejemplo usable desde CDN o servicio equivalente
322
+ 2. una recomendación de fijar versión en producción
323
+ 3. el nombre real del objeto global o módulo expuesto
324
+ 4. una nota breve de cuándo usar esa variante en lugar del paquete instalado por gestor
325
+ 5. un ejemplo simple de uso directo en la página para proyectos sin bundler
326
+ 6. lenguaje explícito para casos reales como Shopify, WordPress o plantillas sin compilación
327
+
328
+ ### Regla de sincronización de versión para referencias CDN
329
+
330
+ Antes de crear un commit de release o empujar un tag nuevo, la IA debe revisar README y docs que contengan URLs CDN versionadas del paquete.
331
+
332
+ Reglas:
333
+
334
+ 1. Si el tag cambia de versión, también deben cambiar las referencias CDN versionadas en la documentación antes del commit.
335
+ 2. La documentación no debe quedarse apuntando a una versión anterior si el release que se va a publicar usa otra versión.
336
+ 3. La revisión debe incluir como mínimo el README principal y cualquier guía browser o CDN en docs/.
337
+ 4. Ejemplo: si el README usa `@samline/date@2.1.1` en CDN y se va a publicar `v2.2.2`, primero hay que actualizar esas referencias a `2.2.2` y después crear el commit y el tag.
338
+ 5. Si todavía no existe una URL CDN estable para documentar, no debe inventarse; primero debe definirse la estrategia real de publicación.
339
+ 6. Si el objetivo es soportar proyectos sin bundler y sin `type="module"`, el paquete debe generar también un bundle browser clásico compatible con `<script src="..."></script>` y la documentación debe usar ese archivo.
340
+
341
+ ### Documentación por variante
342
+
343
+ Cada guía de docs/ debe seguir una estructura consistente:
344
+
345
+ 1. Cuándo usar esa variante.
346
+ 2. Cómo importar.
347
+ 3. Ejemplo mínimo funcional.
348
+ 4. API o contrato de retorno.
349
+ 5. Opciones disponibles.
350
+ 6. Ejemplos adicionales.
351
+ 7. Enlace a la API compartida si aplica.
352
+
353
+ ## Patrón De Testing A Replicar
354
+
355
+ ### Nivel mínimo obligatorio
356
+
357
+ 1. Tests del core compartido.
358
+ 2. Tests del wrapper base o vanilla.
359
+ 3. Tests del bundle browser si existe.
360
+ 4. Tests por framework para la integración idiomática.
361
+ 5. Helper compartido para mocks del entorno cuando el dominio lo requiera.
362
+
363
+ ### Qué debe validar cada capa
364
+
365
+ #### Core
366
+
367
+ - comportamiento base
368
+ - opciones principales
369
+ - edge cases
370
+ - errores previsibles
371
+ - cleanup o teardown si existe
372
+
373
+ #### Vanilla
374
+
375
+ - contrato público
376
+ - parámetros
377
+ - retorno
378
+ - comportamiento observable para el consumidor
379
+
380
+ #### Browser
381
+
382
+ - exposición global correcta
383
+ - nombres globales esperados
384
+ - compatibilidad del bundle en entorno sin importaciones
385
+
386
+ #### Frameworks
387
+
388
+ - React: hooks, estado, refs, cleanup, componentes si existen
389
+ - Vue: composables, refs, lifecycle, componentes si existen
390
+ - Svelte: stores, actions, cleanup y actualizaciones
391
+
392
+ ## Mapeo Del Dominio Actual A Un Paquete De Fechas
393
+
394
+ ### Equivalencia conceptual
395
+
396
+ | Este paquete | Paquete de fechas equivalente |
397
+ | -------------------- | ----------------------------------------------------- |
398
+ | core de visibilidad | core de parsing, conversión y formateo |
399
+ | wrapper vanilla | funciones utilitarias directas |
400
+ | React hook | hook para estado derivado o parsing reactivo |
401
+ | Vue composable | composable para fechas reactivas |
402
+ | Svelte helper/action | stores o helper reactivo para fechas |
403
+ | browser global | funciones globales para usar sin bundler |
404
+ | docs por framework | guías de integración por entorno |
405
+ | tests de observer | tests de parsing, zona horaria, formatos y edge cases |
406
+
407
+ ### Ejemplo de estructura para fechas
408
+
409
+ #### Core
410
+
411
+ - parseDate
412
+ - formatDate
413
+ - convertDateTimezone
414
+ - isValidDateInput
415
+ - compareDates
416
+
417
+ #### Vanilla
418
+
419
+ - exportación directa de funciones
420
+ - helpers utilitarios de alto nivel
421
+
422
+ #### React
423
+
424
+ - useParsedDate
425
+ - useFormattedDate
426
+ - componente opcional si el caso lo justifica
427
+
428
+ #### Vue
429
+
430
+ - useParsedDate
431
+ - useFormattedDate
432
+ - componente opcional si el caso lo justifica
433
+
434
+ #### Svelte
435
+
436
+ - helper o stores derivados
437
+ - action solo si existe un caso real basado en DOM
438
+
439
+ #### Browser
440
+
441
+ - window.DateToolkit o nombre equivalente
442
+
443
+ ## Lo Que Siempre Se Replica
444
+
445
+ 1. Separación entre core y adaptadores.
446
+ 2. Build reproducible con TypeScript estricto.
447
+ 3. Exports claros por subpath.
448
+ 4. Tipos generados.
449
+ 5. README principal más docs específicas.
450
+ 6. Tests por capa.
451
+ 7. Release protegido por prepublishOnly.
452
+
453
+ ## Lo Que Depende Del Dominio
454
+
455
+ 1. La necesidad de wrappers por framework.
456
+ 2. La necesidad del bundle browser.
457
+ 3. La forma de la API pública.
458
+ 4. Las dependencias runtime.
459
+ 5. Los edge cases críticos.
460
+ 6. Los ejemplos de documentación.
461
+ 7. Los mocks y helpers de testing.
462
+
463
+ ## Secuencia De Implementación Recomendada
464
+
465
+ 1. Definir nombre, objetivo y API pública.
466
+ 2. Definir qué entrypoints existirán realmente.
467
+ 3. Crear package.json, tsconfig.json y tsup.config.ts.
468
+ 4. Implementar el core compartido.
469
+ 5. Implementar el wrapper vanilla o root.
470
+ 6. Implementar wrappers de framework solo si agregan valor real.
471
+ 7. Implementar bundle browser si aplica.
472
+ 8. Escribir tests del core y luego de cada variante.
473
+ 9. Redactar README y docs específicas.
474
+ 10. Verificar build, typecheck y test.
475
+ 11. Preparar publicación.
476
+ 12. Crear el workflow correspondiente de release o publish en .github/workflows según la estrategia elegida.
477
+
478
+ ## Checklist Final Antes De Considerar El Paquete Listo
479
+
480
+ 1. El core resuelve el dominio sin dependencias de framework.
481
+ 2. Cada subpath exportado tiene implementación, tipos y tests.
482
+ 3. El README refleja exactamente los entrypoints reales.
483
+ 4. No hay docs para variantes que no existen.
484
+ 5. Los peer dependencies son opcionales solo cuando corresponde.
485
+ 6. El bundle browser existe solo si fue realmente solicitado.
486
+ 7. prepublishOnly pasa sin errores.
487
+ 8. package.json publica solo lo necesario.
488
+ 9. Existe el workflow de publicación correspondiente si el paquete debe liberarse por tags o CI.
489
+
490
+ ## Instrucción Operativa Para Futuras Conversaciones
491
+
492
+ Si voy a crear un paquete nuevo usando este blueprint, primero debo pedirte:
493
+
494
+ - el código fuente o la especificación funcional del paquete
495
+ - el nombre del paquete
496
+ - las dependencias a utilizar
497
+ - los frameworks o entornos a soportar
498
+ - si quieres variante browser o CDN
499
+ - el alcance inicial exacto
500
+
501
+ Solo después de eso conviene generar el scaffold definitivo.
package/.local/todo.md ADDED
@@ -0,0 +1,49 @@
1
+ # Todo
2
+
3
+ ## Instrucción Para La IA
4
+
5
+ Este archivo es el registro de tareas pendientes del proyecto.
6
+
7
+ La IA debe revisarlo para saber qué trabajo quedó explícitamente pendiente por decisión del usuario.
8
+
9
+ ## Regla De Uso
10
+
11
+ Solo deben agregarse elementos a este archivo cuando el usuario indique de forma explícita que algo queda pendiente, que debe hacerse después, que es una mejora futura o que existe un error por corregir más adelante.
12
+
13
+ La IA no debe inventar pendientes ni convertir sugerencias implícitas en tareas abiertas sin confirmación del usuario.
14
+
15
+ Si la IA anota en memoria de sesión un pendiente confirmado por el usuario, también debe registrarlo aquí en la misma tarea o antes de cerrar la sesión para que no dependa de memoria efímera.
16
+
17
+ ## Qué Debe Guardarse Aquí
18
+
19
+ 1. tareas pendientes solicitadas por el usuario
20
+ 2. mejoras a futuro indicadas expresamente
21
+ 3. bugs por corregir más adelante
22
+ 4. refactors aplazados por decisión del usuario
23
+ 5. ideas aprobadas para una fase posterior
24
+
25
+ ## Formato Recomendado Para Nuevos Ítems
26
+
27
+ Usar bloques breves con esta estructura:
28
+
29
+ ### Título
30
+
31
+ - estado: pendiente
32
+ - origen: solicitud explícita del usuario
33
+ - contexto: resumen corto del motivo
34
+ - siguiente acción: qué habría que hacer cuando se retome
35
+
36
+ ## Estado Actual
37
+
38
+ Actualmente no hay pendientes operativos registrados en este archivo.
39
+
40
+ ### Enforced action
41
+
42
+ - Pre-task read enforcement
43
+
44
+ - estado: pendiente
45
+ - origen: auditoría interna tras iniciar implementación sin leer `agent-index.md`
46
+ - contexto: asegurar que la IA lea `.local/agent-index.md` antes de comenzar tareas futuras
47
+ - siguiente acción: implementar un pequeño checklist en el flujo operativo (manual o automatizado) para verificar lectura de `agent-index.md` y confirmar en la sesión.
48
+
49
+ Cuando el usuario deje tareas explícitamente pendientes, deben añadirse aquí.
package/AGENTS.md ADDED
@@ -0,0 +1,55 @@
1
+ # AGENTS
2
+
3
+ ## Instrucción Principal
4
+
5
+ Antes de comenzar cualquier tarea en este repositorio, la IA debe leer primero .local/agent-index.md.
6
+
7
+ Ese archivo funciona como índice maestro de las instrucciones internas del proyecto y define qué otros documentos de .local deben revisarse según el tipo de trabajo.
8
+
9
+ ## Regla De Lectura Obligatoria
10
+
11
+ Al iniciar una nueva conversación o una nueva tarea dentro de este repositorio, la IA debe seguir este orden:
12
+
13
+ 1. Leer .local/agent-index.md.
14
+ 2. Determinar el tipo de tarea.
15
+ 3. Leer los documentos internos adicionales que .local/agent-index.md indique para ese contexto.
16
+
17
+ ## Documentos Internos Disponibles
18
+
19
+ La IA debe usar .local/agent-index.md como punto de entrada para localizar y revisar, cuando corresponda:
20
+
21
+ 1. .local/package-replication-guide.md
22
+ 2. .local/deploy-and-release-guide.md
23
+ 3. .local/todo.md
24
+ 4. .local/lessons.md
25
+ 5. .local/new-project.md
26
+
27
+ ## Regla De Interpretación
28
+
29
+ Los archivos dentro de .local son instrucciones internas para la IA y no documentación pública del paquete.
30
+
31
+ La IA debe tratarlos como contexto operativo del proyecto.
32
+
33
+ Además, tanto .local como AGENTS.md deben permanecer fuera de Git y estar incluidos en .gitignore.
34
+
35
+ ## Casos Mínimos
36
+
37
+ ### Tarea general
38
+
39
+ Leer .local/agent-index.md y, si aplica, revisar .local/todo.md y .local/lessons.md.
40
+
41
+ ### Nuevo paquete o nuevo scaffold
42
+
43
+ Leer .local/agent-index.md, .local/package-replication-guide.md, .local/new-project.md, .local/todo.md y .local/lessons.md.
44
+
45
+ ### Release, deploy o publicación
46
+
47
+ Leer .local/agent-index.md, .local/deploy-and-release-guide.md, .local/todo.md y .local/lessons.md.
48
+
49
+ ## Regla De Persistencia
50
+
51
+ Si el usuario agrega nuevas reglas internas, pendientes o lecciones, la IA debe mantener actualizados los documentos correspondientes dentro de .local.
52
+
53
+ Si durante una sesión la IA guarda contexto en memoria de sesión del chat y ese contenido corresponde a una regla interna, un pendiente, una lección o una preferencia operativa del proyecto, también debe persistirlo en el archivo adecuado de .local para no perder coherencia si la sesión se borra.
54
+
55
+ La IA también debe preservar la regla de que .local y AGENTS.md no se versionan.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  ## @samline/notify
2
- A Sileo-inspired notifications engine with a framework-agnostic core and adapters for Vanilla, React, Vue and Svelte.
2
+ A Sileo-inspired notifications engine providing a framework-agnostic core and lightweight adapters for Vanilla JS, React, Vue and Svelte.
3
+
4
+ Inspired by Sileo — see the original project: https://github.com/hiaaryan/sileo
3
5
 
4
6
  Table of Contents
5
7
 
@@ -45,8 +47,8 @@ CDN / Browser
45
47
  Use the browser build when your project loads scripts directly and cannot compile npm modules (Shopify, WordPress, plain HTML). Example CDN usage (replace version):
46
48
 
47
49
  ```html
48
- <script src="/path/to/dist/notify.umd.js"></script>
49
- <link rel="stylesheet" href="/path/to/dist/styles.css">
50
+ <script src="https://unpkg.com/@samline/notify@latest/dist/notify.umd.js"></script>
51
+ <link rel="stylesheet" href="https://unpkg.com/@samline/notify@latest/dist/styles.css">
50
52
  ```
51
53
 
52
54
  Entry Points
@@ -57,7 +59,7 @@ Choose the entrypoint matching your stack so you only import what you need.
57
59
  | --- | --- | --- |
58
60
  | Vanilla JS | `import { default as notifications } from '@samline/notify'` | [docs/vanilla.md](docs/vanilla.md) |
59
61
  | Vanilla explicit subpath | `import { sileo } from '@samline/notify/vanilla'` | [docs/vanilla.md](docs/vanilla.md) |
60
- | Browser / CDN | `<script src="/path/to/dist/notify.umd.js"></script>` | [docs/browser.md](docs/browser.md) |
62
+ | Browser / CDN | `<script src="https://unpkg.com/@samline/notify@latest/dist/notify.umd.js"></script>` | [docs/browser.md](docs/browser.md) |
61
63
  | React | `import { Toaster } from '@samline/notify/react'` | [docs/react.md](docs/react.md) |
62
64
  | Vue | `import Notifications from '@samline/notify/vue'` | [docs/vue.md](docs/vue.md) |
63
65
  | Svelte | `import Toaster from '@samline/notify/svelte'` | [docs/svelte.md](docs/svelte.md) |
@@ -67,12 +69,12 @@ Quick Start
67
69
  Vanilla example (UMD / modules):
68
70
 
69
71
  ```html
70
- <script src="/path/to/dist/notify.umd.js"></script>
71
- <link rel="stylesheet" href="/path/to/dist/styles.css">
72
+ <script src="https://unpkg.com/@samline/notify@latest/dist/notify.umd.js"></script>
73
+ <link rel="stylesheet" href="https://unpkg.com/@samline/notify@latest/dist/styles.css">
72
74
  <script>
73
75
  const api = window.notify || window.notifications;
74
76
  api.initToasters(document.body, ['top-right']);
75
- api.notify({ title: 'Guardado', description: 'Cambios guardados', type: 'success' });
77
+ api.notify({ title: 'Saved', description: 'Changes saved', type: 'success' });
76
78
  </script>
77
79
  ```
78
80
 
package/docs/browser.md CHANGED
@@ -5,8 +5,8 @@ Quick start
5
5
  Include the UMD bundle and stylesheet in a static page:
6
6
 
7
7
  ```html
8
- <link rel="stylesheet" href="/path/to/dist/styles.css">
9
- <script src="/path/to/dist/notify.umd.js"></script>
8
+ <link rel="stylesheet" href="https://unpkg.com/@samline/notify@latest/dist/styles.css">
9
+ <script src="https://unpkg.com/@samline/notify@latest/dist/notify.umd.js"></script>
10
10
  <script>
11
11
  const api = window.notify || window.notifications;
12
12
  api.initToasters(document.body, ['top-right']);
@@ -27,8 +27,8 @@ Use the browser build when your project loads scripts directly in the page and c
27
27
  Example using the UMD build (replace path/version as needed):
28
28
 
29
29
  ```html
30
- <link rel="stylesheet" href="/path/to/dist/styles.css">
31
- <script src="/path/to/dist/notify.umd.js"></script>
30
+ <link rel="stylesheet" href="https://unpkg.com/@samline/notify@latest/dist/styles.css">
31
+ <script src="https://unpkg.com/@samline/notify@latest/dist/notify.umd.js"></script>
32
32
  <script>
33
33
  document.addEventListener('DOMContentLoaded', () => {
34
34
  const api = window.notify || window.notifications;