@rendra-ui/web 2.3.0 → 2.4.0
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 +83 -60
- package/bin/rendra.mjs +19 -7
- package/dist/base.css +1 -1
- package/dist/{button-DWhICtIG.js → button-C6rjowQi.js} +4 -4
- package/dist/{button-DWhICtIG.js.map → button-C6rjowQi.js.map} +1 -1
- package/dist/chart.js +5 -5
- package/dist/cli/auditar.js +66 -16
- package/dist/cli/auditar.js.map +1 -1
- package/dist/cli/codigos.js +2 -2
- package/dist/cli/executar-auditar.js +634 -0
- package/dist/cli/executar-auditar.js.map +1 -0
- package/dist/cli/help.js +7 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/trocar.js +2 -2
- package/dist/cli/typescript-loader.js +1 -1
- package/dist/{cn-DDZQKUVV.js → cn-DXDpTGsu.js} +2 -2
- package/dist/{cn-DDZQKUVV.js.map → cn-DXDpTGsu.js.map} +1 -1
- package/dist/{components-Cq_PmN4y.js → components-hp7iWioq.js} +21 -4
- package/dist/components-hp7iWioq.js.map +1 -0
- package/dist/components.css +107 -1
- package/dist/document-viewer.js +4 -4
- package/dist/{empty-state-C491qfzf.js → empty-state-CdaDLcsB.js} +50 -30
- package/dist/empty-state-CdaDLcsB.js.map +1 -0
- package/dist/index.js +120 -63
- package/dist/index.js.map +1 -1
- package/dist/{rendra-provider-BRtk5Qa1.js → rendra-provider-7jUgUHzR.js} +2 -2
- package/dist/{rendra-provider-BRtk5Qa1.js.map → rendra-provider-7jUgUHzR.js.map} +1 -1
- package/dist/rich-text-editor.js +3 -3
- package/dist/router-bridge.js +2 -2
- package/dist/tokens.css +11 -1
- package/dist/{tooltip-DsNlnBSY.js → tooltip-bdmbX6vC.js} +3 -3
- package/dist/{tooltip-DsNlnBSY.js.map → tooltip-bdmbX6vC.js.map} +1 -1
- package/dist/types/components/app-shell/app-shell.d.ts +22 -2
- package/dist/types/components/app-shell/shell-context.d.ts +7 -1
- package/dist/types/components/app-shell/types.d.ts +23 -0
- package/dist/types/components/layout/page-header.d.ts +17 -1
- package/dist/types/components/ui/brand-feedback-icon.d.ts +20 -3
- package/dist/types/components/ui/button-group.d.ts +8 -1
- package/dist/types/components/ui/empty-state.d.ts +4 -0
- package/dist/types/components/ui/error-page.d.ts +6 -1
- package/dist/types/components/ui/modal.d.ts +4 -0
- package/dist/types/components/ui/wizard.d.ts +14 -1
- package/dist/types/lib/initials.d.ts +2 -0
- package/dist/{use-breakpoint-C3ivDt2R.js → use-breakpoint-Dyp-0E_c.js} +2 -2
- package/dist/{use-breakpoint-C3ivDt2R.js.map → use-breakpoint-Dyp-0E_c.js.map} +1 -1
- package/dist/widget-grid.js +2 -2
- package/package.json +2 -1
- package/dist/components-Cq_PmN4y.js.map +0 -1
- package/dist/empty-state-C491qfzf.js.map +0 -1
package/dist/cli/auditar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditar.js","names":[],"sources":["../../src/cli/auditar.ts"],"sourcesContent":["/*\n * Regras genéricas de design (DESIGN_RULES.md) que não são específicas deste repositório:\n * qualquer projeto que use o Rendra pode ter cor fixa, valor arbitrário do Tailwind, estilo\n * inline, fonte fixa, 100vh ou raio fixo. Módulo único: `scripts/check-design-rules.mjs` (as\n * regras deste repositório, mais as específicas: var-inline, svg-marca, classe-dinamica,\n * texto-estreito, primaria-como-texto, componente-duplicado, css-fora-do-lugar, botao-solto)\n * e `rendra auditar` (a CLI publicada, para qualquer projeto de destino) importam daqui, para\n * nunca divergir.\n *\n * Duas camadas:\n * - `auditLines(text)`: pura, sem acesso a arquivo. Recebe o texto de UM arquivo e devolve\n * as violações das sete regras (linha, regra, mensagem, trecho). `check-design-rules.mjs`\n * chama isso por arquivo, porque ele já tem sua própria varredura de diretório com a\n * exceção `src/brand`/`src/styles` (regras próprias do tema deste repositório, que não\n * fazem sentido num projeto de destino qualquer).\n * - `auditar(cwd)`: varre `cwd` (ou `cwd/src`, quando existir) sozinha, sem exceção de\n * diretório, e devolve a lista completa. É o que `rendra auditar` chama.\n */\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'\nimport { join, relative, sep } from 'node:path'\n\nexport interface AuditViolation {\n line: number\n rule: string\n message: string\n source: string\n}\n\nexport interface FileAuditViolation extends AuditViolation {\n file: string\n}\n\ninterface LineRule {\n id: string\n test: RegExp\n message: string\n skipLine?: (line: string) => boolean\n}\n\nconst isCommentLine = (line: string) => /^\\s*(\\/\\/|\\*|\\/\\*)/.test(line)\n\n/** As seis regras genéricas mais simples: um regex por linha. */\nexport const LINE_RULES: LineRule[] = [\n {\n id: 'cor-fixa',\n test: /#[0-9a-fA-F]{3,8}\\b|\\b(?:rgba?|hsla?|oklch|oklab)\\(/g,\n message: 'Cor fixa em componente. Use um token semântico (bg-primary, text-muted-foreground).',\n skipLine: (line) => isCommentLine(line) || /&#\\d+;/.test(line),\n },\n {\n id: 'valor-arbitrario',\n // Valor arbitrário (p-[13px]). Variantes de estado (data-[state=open]:) terminam em ':' e são\n // permitidas; transition-[...] só lista propriedades, também permitido.\n test: /(?<![\\w-])(?:[a-z]+:)*-?(?!transition-)[a-z][a-z-]*-\\[[^\\]\\s]+\\](?!(?:\\/[\\w-]+)?:)/g,\n message: 'Valor arbitrário do Tailwind. Use a escala de tokens ou crie um token nomeado.',\n skipLine: isCommentLine,\n },\n {\n id: 'estilo-inline',\n // Qualquer style= que não seja só variável CSS (--x) é estilo inline.\n test: /style=\\{(?![^}]*['\"]--)(?!\\s*$)/g,\n message: 'Estilo inline. Use classes; para valor dinâmico use variável CSS (--x).',\n },\n {\n id: 'fonte-fixa',\n // Só em contexto de fonte (declaração ou nome entre aspas numa pilha de fontes): a\n // palavra \"Inter\" num texto da interface não é violação.\n test: /font-family|fontFamily|['\"](?:Poppins|Inter|Roboto|Arial|Helvetica)(?:['\",]| sans| serif)/g,\n message:\n 'Nome de fonte fixo. A fonte vem da variável de tema da marca (ex.: --rendra-brand-font).',\n },\n {\n id: '100vh',\n test: /100vh|\\bh-screen\\b|\\bmin-h-screen\\b/g,\n message: 'Use 100dvh (h-dvh / min-h-dvh), nunca 100vh.',\n },\n {\n id: 'raio-fixo',\n // border-radius fixo em CSS ou em estilo inline (borderRadius): nunca em px/rem/% direto,\n // sempre por um token de raio por papel (rounded-control, rounded-surface, rounded-item...)\n // ou uma variável de tema (--rendra-shape-*, --rendra-radius).\n test: /border-radius\\s*:\\s*(?!var\\()\\d|borderRadius\\s*:\\s*(?!['\"`]?var\\()['\"`]?\\d/g,\n message:\n 'Raio fixo. Use um token de raio por papel (rounded-control, rounded-surface, rounded-item...) ou uma variável de tema.',\n skipLine: isCommentLine,\n },\n]\n\n// Degraus fora da escala não geram CSS (o Tailwind ignora em silêncio e o layout quebra).\nconst ALLOWED_STEPS = new Set(['0', '1', '2', '3', '4', '6', '8', '12', '16', '24'])\nconst STEP_CLASS =\n /(?<![\\w-])-?(?:p[xytrbl]?|m[xytrbl]?|gap(?:-[xy])?|w|h|size|min-[wh]|max-[wh]|inset(?:-[xy])?|top|left|right|bottom|space-[xy]|translate-[xy]|scroll-[mp][xytrbl]?)-(\\d+(?:\\.\\d+)?)(?![\\d/.\\w-])/g\n\n/** Sétima regra (\"fora-da-escala\"): olha todos os degraus da linha, não só o primeiro. */\nfunction checkForaDaEscala(line: string): boolean {\n for (const m of line.matchAll(STEP_CLASS)) if (!ALLOWED_STEPS.has(m[1]!)) return true\n return false\n}\n\n/**\n * Varre o texto de um arquivo (linha a linha) contra as sete regras genéricas de\n * DESIGN_RULES.md. Pura: não lê arquivo, não decide o que é escopo do projeto (isso é de quem\n * chama, como `auditar` abaixo ou o `walk`/`ALLOWED_DIRS` de check-design-rules.mjs).\n */\nexport function auditLines(text: string): AuditViolation[] {\n const found: AuditViolation[] = []\n const lines = text.split('\\n')\n lines.forEach((line, i) => {\n for (const rule of LINE_RULES) {\n if (rule.skipLine?.(line)) continue\n rule.test.lastIndex = 0\n if (rule.test.test(line)) {\n found.push({ line: i + 1, rule: rule.id, message: rule.message, source: line.trim() })\n }\n }\n if (!isCommentLine(line) && checkForaDaEscala(line)) {\n found.push({\n line: i + 1,\n rule: 'fora-da-escala',\n message:\n 'Degrau fora da escala (permitidos: 0, 1, 2, 3, 4, 6, 8, 12, 16, 24). Use a escala ou um token nomeado.',\n source: line.trim(),\n })\n }\n })\n return found\n}\n\nconst SKIP_DIR_NAMES = new Set(['node_modules', 'dist', 'build', '.git', '.storybook-static'])\n\nfunction walk(dir: string): string[] {\n return readdirSync(dir).flatMap((name) => {\n if (SKIP_DIR_NAMES.has(name)) return []\n const full = join(dir, name)\n return statSync(full).isDirectory() ? walk(full) : [full]\n })\n}\n\n/**\n * Varre `cwd` (ou `cwd/src`, quando existir: a convenção deste boilerplate e da maioria dos\n * projetos React) por arquivos `.ts`/`.tsx`/`.js`/`.jsx`/`.css`, ignorando teste e story, e\n * devolve toda violação das sete regras genéricas. É o que `rendra auditar [cwd]` chama; não\n * imprime nada e não lança (a CLI decide o formato de saída e o código de saída).\n */\nexport function auditar(cwd: string): FileAuditViolation[] {\n const root = existsSync(join(cwd, 'src')) ? join(cwd, 'src') : cwd\n if (!existsSync(root)) return []\n const files = walk(root).filter(\n (f) => /\\.(tsx?|jsx?|css)$/.test(f) && !f.includes('.test.') && !f.includes('.stories.'),\n )\n const problems: FileAuditViolation[] = []\n for (const file of files) {\n const rel = relative(cwd, file).split(sep).join('/')\n const text = readFileSync(file, 'utf8')\n for (const violation of auditLines(text)) problems.push({ file: rel, ...violation })\n }\n return problems.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line)\n}\n"],"mappings":";;;;AAuCA,IAAM,iBAAiB,SAAiB,qBAAqB,KAAK,IAAI;;AAGtE,IAAa,aAAyB;CACpC;EACE,IAAI;EACJ,MAAM;EACN,SAAS;EACT,WAAW,SAAS,cAAc,IAAI,KAAK,SAAS,KAAK,IAAI;CAC/D;CACA;EACE,IAAI;EAGJ,MAAM;EACN,SAAS;EACT,UAAU;CACZ;CACA;EACE,IAAI;EAEJ,MAAM;EACN,SAAS;CACX;CACA;EACE,IAAI;EAGJ,MAAM;EACN,SACE;CACJ;CACA;EACE,IAAI;EACJ,MAAM;EACN,SAAS;CACX;CACA;EACE,IAAI;EAIJ,MAAM;EACN,SACE;EACF,UAAU;CACZ;AACF;AAGA,IAAM,gCAAgB,IAAI,IAAI;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAM;CAAM;AAAI,CAAC;AACnF,IAAM,aACJ;;AAGF,SAAS,kBAAkB,MAAuB;CAChD,KAAK,MAAM,KAAK,KAAK,SAAS,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,EAAG,GAAG,OAAO;CACjF,OAAO;AACT;;;;;;AAOA,SAAgB,WAAW,MAAgC;CACzD,MAAM,QAA0B,CAAC;CAEjC,KADmB,MAAM,IACzB,CAAA,CAAM,SAAS,MAAM,MAAM;EACzB,KAAK,MAAM,QAAQ,YAAY;GAC7B,IAAI,KAAK,WAAW,IAAI,GAAG;GAC3B,KAAK,KAAK,YAAY;GACtB,IAAI,KAAK,KAAK,KAAK,IAAI,GACrB,MAAM,KAAK;IAAE,MAAM,IAAI;IAAG,MAAM,KAAK;IAAI,SAAS,KAAK;IAAS,QAAQ,KAAK,KAAK;GAAE,CAAC;EAEzF;EACA,IAAI,CAAC,cAAc,IAAI,KAAK,kBAAkB,IAAI,GAChD,MAAM,KAAK;GACT,MAAM,IAAI;GACV,MAAM;GACN,SACE;GACF,QAAQ,KAAK,KAAK;EACpB,CAAC;CAEL,CAAC;CACD,OAAO;AACT;AAEA,IAAM,iCAAiB,IAAI,IAAI;CAAC;CAAgB;CAAQ;CAAS;CAAQ;AAAmB,CAAC;AAE7F,SAAS,KAAK,KAAuB;CACnC,OAAO,YAAY,GAAG,CAAC,CAAC,SAAS,SAAS;EACxC,IAAI,eAAe,IAAI,IAAI,GAAG,OAAO,CAAC;EACtC,MAAM,OAAO,KAAK,KAAK,IAAI;EAC3B,OAAO,SAAS,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI;CAC1D,CAAC;AACH;;;;;;;AAQA,SAAgB,QAAQ,KAAmC;CACzD,MAAM,OAAO,WAAW,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,IAAI;CAC/D,IAAI,CAAC,WAAW,IAAI,GAAG,OAAO,CAAC;CAC/B,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,QACtB,MAAM,qBAAqB,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,KAAK,CAAC,EAAE,SAAS,WAAW,CACzF;CACA,MAAM,WAAiC,CAAC;CACxC,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;EACnD,MAAM,OAAO,aAAa,MAAM,MAAM;EACtC,KAAK,MAAM,aAAa,WAAW,IAAI,GAAG,SAAS,KAAK;GAAE,MAAM;GAAK,GAAG;EAAU,CAAC;CACrF;CACA,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE,IAAI;AAChF"}
|
|
1
|
+
{"version":3,"file":"auditar.js","names":[],"sources":["../../src/cli/auditar.ts"],"sourcesContent":["/*\n * Regras genéricas de design (DESIGN_RULES.md) que não são específicas deste repositório:\n * qualquer projeto que use o Rendra pode ter cor fixa, valor arbitrário do Tailwind, estilo\n * inline, fonte fixa, 100vh ou raio fixo. Módulo único: `scripts/check-design-rules.mjs` (as\n * regras deste repositório, mais as específicas: var-inline, svg-marca, classe-dinamica,\n * texto-estreito, primaria-como-texto, componente-duplicado, css-fora-do-lugar, botao-solto)\n * e `rendra auditar` (a CLI publicada, para qualquer projeto de destino) importam daqui, para\n * nunca divergir.\n *\n * Duas camadas:\n * - `auditLines(text)`: pura, sem acesso a arquivo. Recebe o texto de UM arquivo e devolve\n * as violações das sete regras (linha, regra, mensagem, trecho). `check-design-rules.mjs`\n * chama isso por arquivo, porque ele já tem sua própria varredura de diretório com a\n * exceção `src/brand`/`src/styles` (regras próprias do tema deste repositório, que não\n * fazem sentido num projeto de destino qualquer).\n * - `auditar(cwd, opcoes?)`: varre `cwd` (ou `cwd/src`, quando existir) sozinha e devolve a\n * lista completa. Por padrão, sem exceção de diretório; `opcoes` (`pastas`, `ignorar`,\n * `regras`) são opt-in e, sem elas, o resultado é o de sempre. É o que `rendra auditar`\n * chama. As regras do vocabulário do Rendra (as dez extras) ficam em `auditar-tudo.ts`.\n */\nimport { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'\nimport { join, relative, sep } from 'node:path'\n\nexport interface AuditViolation {\n line: number\n rule: string\n message: string\n source: string\n}\n\nexport interface FileAuditViolation extends AuditViolation {\n file: string\n}\n\ninterface LineRule {\n id: string\n test: RegExp\n message: string\n skipLine?: (line: string) => boolean\n}\n\nconst isCommentLine = (line: string) => /^\\s*(\\/\\/|\\*|\\/\\*)/.test(line)\n\n/** As seis regras genéricas mais simples: um regex por linha. */\nexport const LINE_RULES: LineRule[] = [\n {\n id: 'cor-fixa',\n test: /#[0-9a-fA-F]{3,8}\\b|\\b(?:rgba?|hsla?|oklch|oklab)\\(/g,\n message: 'Cor fixa em componente. Use um token semântico (bg-primary, text-muted-foreground).',\n skipLine: (line) => isCommentLine(line) || /&#\\d+;/.test(line),\n },\n {\n id: 'valor-arbitrario',\n // Valor arbitrário (p-[13px]). Variantes de estado (data-[state=open]:) terminam em ':' e são\n // permitidas; transition-[...] só lista propriedades, também permitido.\n test: /(?<![\\w-])(?:[a-z]+:)*-?(?!transition-)[a-z][a-z-]*-\\[[^\\]\\s]+\\](?!(?:\\/[\\w-]+)?:)/g,\n message: 'Valor arbitrário do Tailwind. Use a escala de tokens ou crie um token nomeado.',\n skipLine: isCommentLine,\n },\n {\n id: 'estilo-inline',\n // Qualquer style= que não seja só variável CSS (--x) é estilo inline.\n test: /style=\\{(?![^}]*['\"]--)(?!\\s*$)/g,\n message: 'Estilo inline. Use classes; para valor dinâmico use variável CSS (--x).',\n },\n {\n id: 'fonte-fixa',\n // Só em contexto de fonte (declaração ou nome entre aspas numa pilha de fontes): a\n // palavra \"Inter\" num texto da interface não é violação.\n test: /font-family|fontFamily|['\"](?:Poppins|Inter|Roboto|Arial|Helvetica)(?:['\",]| sans| serif)/g,\n message:\n 'Nome de fonte fixo. A fonte vem da variável de tema da marca (ex.: --rendra-brand-font).',\n },\n {\n id: '100vh',\n test: /100vh|\\bh-screen\\b|\\bmin-h-screen\\b/g,\n message: 'Use 100dvh (h-dvh / min-h-dvh), nunca 100vh.',\n },\n {\n id: 'raio-fixo',\n // border-radius fixo em CSS ou em estilo inline (borderRadius): nunca em px/rem/% direto,\n // sempre por um token de raio por papel (rounded-control, rounded-surface, rounded-item...)\n // ou uma variável de tema (--rendra-shape-*, --rendra-radius).\n test: /border-radius\\s*:\\s*(?!var\\()\\d|borderRadius\\s*:\\s*(?!['\"`]?var\\()['\"`]?\\d/g,\n message:\n 'Raio fixo. Use um token de raio por papel (rounded-control, rounded-surface, rounded-item...) ou uma variável de tema.',\n skipLine: isCommentLine,\n },\n]\n\n/** Identificadores das sete regras genéricas (as seis de linha e `fora-da-escala`). */\nexport const IDS_REGRAS_GENERICAS = [...LINE_RULES.map((r) => r.id), 'fora-da-escala']\n\n// Degraus fora da escala não geram CSS (o Tailwind ignora em silêncio e o layout quebra).\nconst ALLOWED_STEPS = new Set(['0', '1', '2', '3', '4', '6', '8', '12', '16', '24'])\nconst STEP_CLASS =\n /(?<![\\w-])-?(?:p[xytrbl]?|m[xytrbl]?|gap(?:-[xy])?|w|h|size|min-[wh]|max-[wh]|inset(?:-[xy])?|top|left|right|bottom|space-[xy]|translate-[xy]|scroll-[mp][xytrbl]?)-(\\d+(?:\\.\\d+)?)(?![\\d/.\\w-])/g\n\n/** Sétima regra (\"fora-da-escala\"): olha todos os degraus da linha, não só o primeiro. */\nfunction checkForaDaEscala(line: string): boolean {\n for (const m of line.matchAll(STEP_CLASS)) if (!ALLOWED_STEPS.has(m[1]!)) return true\n return false\n}\n\n/**\n * Varre o texto de um arquivo (linha a linha) contra as sete regras genéricas de\n * DESIGN_RULES.md. Pura: não lê arquivo, não decide o que é escopo do projeto (isso é de quem\n * chama, como `auditar` abaixo ou o `walk`/`ALLOWED_DIRS` de check-design-rules.mjs).\n */\nexport function auditLines(text: string): AuditViolation[] {\n const found: AuditViolation[] = []\n const lines = text.split('\\n')\n lines.forEach((line, i) => {\n for (const rule of LINE_RULES) {\n if (rule.skipLine?.(line)) continue\n rule.test.lastIndex = 0\n if (rule.test.test(line)) {\n found.push({ line: i + 1, rule: rule.id, message: rule.message, source: line.trim() })\n }\n }\n if (!isCommentLine(line) && checkForaDaEscala(line)) {\n found.push({\n line: i + 1,\n rule: 'fora-da-escala',\n message:\n 'Degrau fora da escala (permitidos: 0, 1, 2, 3, 4, 6, 8, 12, 16, 24). Use a escala ou um token nomeado.',\n source: line.trim(),\n })\n }\n })\n return found\n}\n\nexport const NOMES_PULADOS = new Set(['node_modules', 'dist', 'build', '.git', '.storybook-static'])\n\n/** Opções de `auditar`. Todas opcionais: sem elas, o comportamento é o de sempre. */\nexport interface OpcoesAuditar {\n /** Pastas a varrer, relativas a `cwd`. Valem como estão (sem o atalho para `src`). */\n pastas?: string[]\n /** Pastas a pular, relativas a `cwd`: prefixo de pasta, nunca glob nem prefixo de texto. */\n ignorar?: string[]\n /** `{ \"<id>\": false }` desliga a regra de identificador `<id>`. */\n regras?: Record<string, boolean>\n}\n\n/** `./src/brand/` e `src\\\\brand` viram `src/brand`; o que sobrar vazio (`.`, `./`) é descartado. */\nfunction normalizarPrefixo(prefixo: string): string {\n let p = prefixo.replace(/\\\\/g, '/')\n while (p.startsWith('./')) p = p.slice(2)\n p = p.replace(/\\/+$/, '')\n return p === '.' ? '' : p\n}\n\n/**\n * `file` (relativo a `cwd`, com `/`) está numa das pastas de `prefixos`? Prefixo de pasta:\n * `src/brand` casa `src/brand` e `src/brand/x.ts`, nunca `src/brand-novo/x.ts` nem, com\n * `src/br`, `src/brand`.\n */\nexport function casaPrefixo(file: string, prefixos: string[]): boolean {\n return prefixos.some((bruto) => {\n const p = normalizarPrefixo(bruto)\n return p !== '' && (file === p || file.startsWith(p + '/'))\n })\n}\n\n/**\n * Lista os arquivos sob `dir`. `pular(nome, caminho)` decide por pasta ou arquivo se a entrada\n * fica de fora (a pasta pulada não é aberta). Ordem: a do sistema de arquivos, como sempre.\n */\nexport function percorrer(\n dir: string,\n pular: (nome: string, caminho: string) => boolean,\n): string[] {\n return readdirSync(dir).flatMap((name) => {\n const full = join(dir, name)\n if (pular(name, full)) return []\n return statSync(full).isDirectory() ? percorrer(full, pular) : [full]\n })\n}\n\nexport const EXTENSAO_VARRIDA = /\\.(tsx?|jsx?|css)$/\n\n/**\n * Arquivos que `auditar` (e `auditarTudo`, no modo `cli`) examinam: `.ts`/`.tsx`/`.js`/`.jsx`/\n * `.css`, sem teste nem story, sem `NOMES_PULADOS` e sem as pastas de `ignorar`. Caminhos\n * absolutos, na ordem do sistema de arquivos, sem repetição. Sem `pastas`, a raiz é\n * `cwd/src` (quando existe) ou `cwd`; com `pastas`, são exatamente essas, relativas a `cwd`.\n */\nexport function coletarArquivos(\n cwd: string,\n opcoes: Pick<OpcoesAuditar, 'pastas' | 'ignorar'> = {},\n): string[] {\n const ignorar = opcoes.ignorar ?? []\n const raizes =\n opcoes.pastas && opcoes.pastas.length > 0\n ? opcoes.pastas.map((p) => join(cwd, p))\n : [existsSync(join(cwd, 'src')) ? join(cwd, 'src') : cwd]\n const pular = (nome: string, caminho: string) =>\n NOMES_PULADOS.has(nome) || casaPrefixo(relativoA(cwd, caminho), ignorar)\n const arquivos = new Set<string>()\n for (const raiz of raizes) {\n if (!existsSync(raiz)) continue\n for (const f of percorrer(raiz, pular)) arquivos.add(f)\n }\n return [...arquivos].filter(\n (f) => EXTENSAO_VARRIDA.test(f) && !f.includes('.test.') && !f.includes('.stories.'),\n )\n}\n\n/** Caminho relativo a `base`, com `/` em qualquer sistema. */\nexport function relativoA(base: string, caminho: string): string {\n return relative(base, caminho).split(sep).join('/')\n}\n\n/**\n * Varre `cwd` (ou `cwd/src`, quando existir: a convenção deste boilerplate e da maioria dos\n * projetos React) por arquivos `.ts`/`.tsx`/`.js`/`.jsx`/`.css`, ignorando teste e story, e\n * devolve toda violação das sete regras genéricas. É o que `rendra auditar [cwd]` chama; não\n * imprime nada e não lança (a CLI decide o formato de saída e o código de saída).\n *\n * Com `opcoes.pastas`, varre exatamente essas pastas (relativas a `cwd`, sem o atalho para\n * `src`); com `opcoes.ignorar`, pula as pastas dadas; `opcoes.regras` desliga regras por id.\n * `file` sai sempre relativo a `cwd`, com `/`, ordenado por arquivo e linha.\n */\nexport function auditar(cwd: string, opcoes: OpcoesAuditar = {}): FileAuditViolation[] {\n const problems: FileAuditViolation[] = []\n for (const file of coletarArquivos(cwd, opcoes)) {\n const rel = relativoA(cwd, file)\n const text = readFileSync(file, 'utf8')\n for (const violation of auditLines(text)) {\n if (opcoes.regras?.[violation.rule] === false) continue\n problems.push({ file: rel, ...violation })\n }\n }\n return problems.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line)\n}\n"],"mappings":"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"}
|
package/dist/cli/codigos.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! Rendra Design System v2.
|
|
2
|
-
import { t as CATALOG } from "../components-
|
|
1
|
+
/*! Rendra Design System v2.4.0 | MIT | © 2026 Bruno Magalhaes | brunomagalhaes.me */
|
|
2
|
+
import { t as CATALOG } from "../components-hp7iWioq.js";
|
|
3
3
|
//#region src/cli/codigos.ts
|
|
4
4
|
/** Todo o catálogo, na ordem cadastrada. Sem duplicata: garantido por assertCatalogIntegrity. */
|
|
5
5
|
function codigos() {
|