---
name: month_grid
kind: function
lang: ts
domain: core
version: "1.0.0"
purity: pure
signature: "monthGrid(year: number, month: number): { date: string | null; inMonth: boolean }[]"
description: "Genera la cuadricula mensual con inicio en lunes (Mon-first ISO). Retorna array de celdas multiplo de 7 con padding nulo al inicio y final. Util para calendarios y vistas de mes."
tags: [calendar, date, grid, month, utility]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: year
    desc: "Ano completo del mes a generar (ej: 2026). Rango valido: cualquier ano soportado por Date nativo."
  - name: month
    desc: "Mes 1-12 donde 1=Enero y 12=Diciembre."
output: "Array de MonthGridCell ({ date: string|null; inMonth: boolean }) con longitud siempre multiplo de 7. Celdas de padding tienen date=null e inMonth=false. Celdas del mes tienen date en formato YYYY-MM-DD e inMonth=true."
tested: true
tests:
  - "enero 2026 empieza en jueves (dow=3)"
  - "febrero 2024 bisiesto tiene 29 dias"
  - "longitud siempre multiplo de 7"
  - "primer dia inMonth es el primero del mes"
  - "ultimo dia inMonth es el ultimo del mes"
  - "celdas de padding tienen date null"
  - "mes que empieza en lunes no tiene padding inicial"
test_file_path: "frontend/functions/core/month_grid.test.ts"
file_path: "frontend/functions/core/month_grid.ts"
---

## Ejemplo

```typescript
const cells = monthGrid(2026, 5); // Mayo 2026 (1 mayo = viernes => firstDow=4)
// cells.length es multiplo de 7 (ej: 35)
// cells[0..3] => { date: null, inMonth: false }  (padding lun-jue)
// cells[4]    => { date: "2026-05-01", inMonth: true }
// cells[34]   => { date: "2026-05-31", inMonth: true }

monthGrid(2026, 1); // Enero 2026: jueves=dow 3, 3 celdas padding inicial
```

## Notas

Extraida de `apps/kanban/frontend/src/components/CalendarView.tsx` lineas 72-84.
Reemplaza la dependencia de `dayjs` por `Date` nativo para mantener la funcion sin dependencias externas.
Algoritmo: `firstDow = (new Date(year, month-1, 1).getDay() + 6) % 7` convierte domingo=0 de JS a lunes=0 ISO.
`new Date(year, month, 0).getDate()` obtiene el ultimo dia del mes (dia 0 del mes siguiente = ultimo del actual).
Exporta tambien el tipo `MonthGridCell` para uso con TypeScript estricto.
