{"_id":"@aiqfome-org/geraldo-ui","_rev":"5-660d1af50d2da0a9feea77b6f3031db8","name":"@aiqfome-org/geraldo-ui","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.1":{"name":"@aiqfome-org/geraldo-ui","version":"0.1.1","keywords":["design-system","web-components","lit","aiqfome","geraldo"],"license":"MIT","_id":"@aiqfome-org/geraldo-ui@0.1.1","maintainers":[{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"}],"homepage":"https://github.com/aiqfome/aiqfome-ui-sdk#readme","bugs":{"url":"https://github.com/aiqfome/aiqfome-ui-sdk/issues"},"dist":{"shasum":"2390a6af08ea4e48c62d0f3fe77475303ea5f923","tarball":"https://registry.npmjs.org/@aiqfome-org/geraldo-ui/-/geraldo-ui-0.1.1.tgz","fileCount":7,"integrity":"sha512-ubUT112Y8auQ8uhIqjxOiYug4HDN4TEgK4n2Aa4elWqUU0E0leNoD+VVlIu3tdWoelYLzXWfJ/k2nFMwRwEArg==","signatures":[{"sig":"MEYCIQCoTQ0t0PL2zp+EpMwvZPmIj6CJnhiD60F+3xIUZSmmSwIhAMJhCSE+mu3c7mTXWYUQ5wKZr7zZJQ4jYlKHqBW5gsUL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96227},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tokens.css":"./dist/geraldo-tokens.css","./package.json":"./package.json"},"gitHead":"72b3d629a0897d5cbadaeee2105dfac5301034af","scripts":{"build":"vite build && cp src/tokens/geraldo-tokens.css dist/geraldo-tokens.css","storybook":"storybook dev -p 6006","prepublishOnly":"npm run build","build-storybook":"storybook build","example:pedidos":"npm run dev --prefix examples/pedidos-app"},"_npmUser":{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},"repository":{"url":"git+https://github.com/aiqfome/aiqfome-ui-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Geraldo UI — Web Components design system for aiqfome (Lit + design tokens)","directories":{},"sideEffects":["*.css","./dist/*.css"],"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","vite":"^6.2.0","storybook":"^8.6.18","typescript":"^5.7.3","vite-plugin-dts":"^4.5.0","@storybook/addon-docs":"^8.6.18","@storybook/web-components":"^8.6.18","@storybook/addon-essentials":"^8.6.18","@storybook/web-components-vite":"^8.6.18"},"peerDependencies":{"lit":"^3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/geraldo-ui_0.1.1_1774984747108_0.18610601809075367","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aiqfome-org/geraldo-ui","version":"0.1.2","keywords":["design-system","web-components","lit","aiqfome","geraldo"],"license":"MIT","_id":"@aiqfome-org/geraldo-ui@0.1.2","maintainers":[{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"}],"homepage":"https://github.com/aiqfome/aiqfome-ui-sdk#readme","bugs":{"url":"https://github.com/aiqfome/aiqfome-ui-sdk/issues"},"dist":{"shasum":"bfef198e08a4a5924ab462ef312d89329fdda7e0","tarball":"https://registry.npmjs.org/@aiqfome-org/geraldo-ui/-/geraldo-ui-0.1.2.tgz","fileCount":8,"integrity":"sha512-cz+g9+INURY6mWPl4Jlp6rMMDyoqT0+dB6CxYEOTOcqkivvaUoNnQ+TbV6M6Bd4wWX4yykXu6Z1vnGHbNnDR7g==","signatures":[{"sig":"MEQCIHp5Q/FNHE6DtejXxzkjhLB2jmdlM3N6Fcyluw1mSM/3AiBFz7yeG4kD5n3RtaFKQm6bJSd4OqhO5jQvQYzW+2j+QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160767},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tokens.css":"./dist/geraldo-tokens.css","./package.json":"./package.json"},"gitHead":"47ba2ea1399e17a107f50f8c7e9a659b5fc9cad0","scripts":{"build":"vite build && cp src/tokens/geraldo-tokens.css dist/geraldo-tokens.css","storybook":"storybook dev -p 6006","prepublishOnly":"npm run build","build-storybook":"storybook build","example:pedidos":"npm run dev --prefix examples/pedidos-app"},"_npmUser":{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},"repository":{"url":"git+https://github.com/aiqfome/aiqfome-ui-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Geraldo UI — Web Components design system for aiqfome (Lit + design tokens)","directories":{},"sideEffects":["*.css","./dist/*.css"],"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","vite":"^6.2.0","storybook":"^8.6.18","typescript":"^5.7.3","vite-plugin-dts":"^4.5.0","@storybook/addon-docs":"^8.6.18","@storybook/web-components":"^8.6.18","@storybook/addon-essentials":"^8.6.18","@storybook/web-components-vite":"^8.6.18"},"peerDependencies":{"lit":"^3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/geraldo-ui_0.1.2_1774986936454_0.3529349804949693","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiqfome-org/geraldo-ui","version":"0.2.0","keywords":["design-system","web-components","lit","aiqfome","geraldo"],"license":"MIT","_id":"@aiqfome-org/geraldo-ui@0.2.0","maintainers":[{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},{"name":"bgouveia-aiq","email":"gouveia@aiqfome.com"}],"homepage":"https://github.com/aiqfome/aiqfome-ui-sdk#readme","bugs":{"url":"https://github.com/aiqfome/aiqfome-ui-sdk/issues"},"dist":{"shasum":"8d7dc9c7f6a6c6c98e55cca3b65b54b4789b79d7","tarball":"https://registry.npmjs.org/@aiqfome-org/geraldo-ui/-/geraldo-ui-0.2.0.tgz","fileCount":22,"integrity":"sha512-g+Z1c20KNmAlfAW9F7BVmsSv8EfNpNP2iSNHy2JEreJ2xOFAc8VYqZwqywGnYpebr4JC/s24z8j6PkFu16LQDQ==","signatures":[{"sig":"MEUCIHTIW5ITbQ2F9boy0U+1E8aiaN5jjqxzJxKDUIm0A46eAiEAiQmBrdkrx/06cU7eVAqp2MXWLaWegg0mJ7BhKHBbaM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178661},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","import":"./dist/auth/index.js"},"./tokens.css":"./dist/geraldo-tokens.css","./package.json":"./package.json"},"gitHead":"f0ab7fbaaecafe41410c7a9a095438d280d9b04f","scripts":{"test":"vitest run","build":"vite build && vite build --config vite.auth.config.ts && cp src/tokens/geraldo-tokens.css dist/geraldo-tokens.css","storybook":"storybook dev -p 6006","prepublishOnly":"npm run build","build-storybook":"storybook build","example:pedidos":"npm run dev --prefix examples/pedidos-app","example:magalu-auth":"npm run dev --prefix examples/magalu-auth-minimal","example:lojista-pedidos":"npm run dev --prefix examples/lojista-pedidos-app"},"_npmUser":{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},"repository":{"url":"git+https://github.com/aiqfome/aiqfome-ui-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"Geraldo UI — Web Components design system for aiqfome (Lit + design tokens)","directories":{},"sideEffects":["*.css","./dist/*.css"],"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"lit":"^3.2.1","vite":"^6.2.0","vitest":"^3.0.8","happy-dom":"^15.11.7","storybook":"^8.6.18","typescript":"^5.7.3","vite-plugin-dts":"^4.5.0","@storybook/addon-docs":"^8.6.18","@storybook/web-components":"^8.6.18","@storybook/addon-essentials":"^8.6.18","@storybook/web-components-vite":"^8.6.18"},"peerDependencies":{"lit":"^3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/geraldo-ui_0.2.0_1775831342931_0.3586549940479835","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiqfome-org/geraldo-ui","version":"0.3.0","description":"Geraldo UI — Web Components (Lit) + design tokens for aiqfome; optional @aiqfome-org/geraldo-ui/auth (Magalu ID + Geraldo OAuth/postMessage helpers, browser-only)","type":"module","sideEffects":["*.css","./dist/*.css"],"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tokens.css":"./dist/geraldo-tokens.css","./auth":{"types":"./dist/auth/index.d.ts","import":"./dist/auth/index.js"},"./package.json":"./package.json"},"engines":{"node":">=18"},"scripts":{"build":"vite build && vite build --config vite.auth.config.ts && cp src/tokens/geraldo-tokens.css dist/geraldo-tokens.css","test":"vitest run","prepublishOnly":"npm run build","storybook":"storybook dev -p 6006","build-storybook":"storybook build","example:pedidos":"npm run dev --prefix examples/pedidos-app","example:magalu-auth":"npm run dev --prefix examples/magalu-auth-minimal","example:lojista-pedidos":"npm run dev --prefix examples/lojista-pedidos-app"},"keywords":["aiqfome","geraldo","design-system","web-components","lit","magalu","oauth","marketplace","lojista"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aiqfome/aiqfome-ui-sdk.git"},"homepage":"https://github.com/aiqfome/aiqfome-ui-sdk#readme","bugs":{"url":"https://github.com/aiqfome/aiqfome-ui-sdk/issues"},"publishConfig":{"access":"public"},"peerDependencies":{"lit":"^3.2.0"},"devDependencies":{"@storybook/addon-docs":"^8.6.18","@storybook/addon-essentials":"^8.6.18","@storybook/web-components":"^8.6.18","@storybook/web-components-vite":"^8.6.18","happy-dom":"^15.11.7","lit":"^3.2.1","storybook":"^8.6.18","typescript":"^5.7.3","vite":"^6.2.0","vite-plugin-dts":"^4.5.0","vitest":"^3.0.8"},"gitHead":"f083acf11975e1d997f53062518414b206ea0ba0","_id":"@aiqfome-org/geraldo-ui@0.3.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-iF8U5gdoeP1PWJ6ZTGhl2+3tVXoj2Kwo9y+yuHHb08+DJLR49fgRnV8uBGSgJzVxGyzHjwa/XzP6jaSgvEb2UQ==","shasum":"6c6eaece55729b5ce82b3ab3dcd3ab845ab75e4d","tarball":"https://registry.npmjs.org/@aiqfome-org/geraldo-ui/-/geraldo-ui-0.3.0.tgz","fileCount":24,"unpackedSize":192319,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDdBVxZxqKAO7QYkEM/zP9GBBWmoU1Oj1GuBPi/Y/fiTAIgN/pMAOObRsqA7iAbBL7fM5OGA8qy2bT7l/q6vF4AP04="}]},"_npmUser":{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},"directories":{},"maintainers":[{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},{"name":"bgouveia-aiq","email":"gouveia@aiqfome.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/geraldo-ui_0.3.0_1776971952992_0.982802771066148"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-31T19:19:07.053Z","modified":"2026-04-23T19:19:13.344Z","0.1.1":"2026-03-31T19:19:07.253Z","0.1.2":"2026-03-31T19:55:36.624Z","0.2.0":"2026-04-10T14:29:03.086Z","0.3.0":"2026-04-23T19:19:13.166Z"},"bugs":{"url":"https://github.com/aiqfome/aiqfome-ui-sdk/issues"},"license":"MIT","homepage":"https://github.com/aiqfome/aiqfome-ui-sdk#readme","keywords":["aiqfome","geraldo","design-system","web-components","lit","magalu","oauth","marketplace","lojista"],"repository":{"type":"git","url":"git+https://github.com/aiqfome/aiqfome-ui-sdk.git"},"description":"Geraldo UI — Web Components (Lit) + design tokens for aiqfome; optional @aiqfome-org/geraldo-ui/auth (Magalu ID + Geraldo OAuth/postMessage helpers, browser-only)","maintainers":[{"name":"picoloto-aiqfome","email":"lucas.picoloto@aiqfome.com"},{"name":"bgouveia-aiq","email":"gouveia@aiqfome.com"}],"readme":"# Geraldo UI (`@aiqfome-org/geraldo-ui`)\n\n[![npm](https://img.shields.io/npm/v/@aiqfome-org/geraldo-ui.svg)](https://www.npmjs.com/package/@aiqfome-org/geraldo-ui)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n\nSDK de **Web Components** (Lit + TypeScript) com **tokens CSS** do guia **Geraldo**, para apps aiqfome (incluindo **Loja de APPs** no portal do lojista). O pacote é **ESM**, publicado no **npm** e consumível em qualquer stack web (React, Vue, Svelte, HTML estático).\n\n| Recurso | Descrição |\n| -------- | ----------- |\n| **Design system** | Tags `geraldo-*` (botões, tipografia, cartões, formulário, etc.) |\n| **Auth (opcional)** | Subpath `@aiqfome-org/geraldo-ui/auth` — Magalu ID + Geraldo (`postMessage`, popup OAuth `code`) |\n| **Repositório** | [github.com/aiqfome/aiqfome-ui-sdk](https://github.com/aiqfome/aiqfome-ui-sdk) |\n\n![Prévia: smoke test com o pacote via npm — botões, card, formulário, rádios e badges](docs/smoke-test-preview.png)\n\n## Índice\n\n1. [Requisitos](#requisitos)\n2. [Instalação e entrypoints](#instalação-e-entrypoints)\n4. [Autenticação Magalu e Geraldo](#autenticação-magalu-e-geraldo)\n5. [Uso rápido (design system)](#uso-rápido-design-system)\n6. [Registro dos custom elements](#registro-dos-custom-elements)\n7. [Ícones](#ícones)\n8. [Tema escuro](#tema-escuro)\n9. [Componentes exportados](#componentes-exportados)\n10. [Exemplos no repositório](#exemplos-no-repositório)\n11. [Desenvolvimento e Storybook](#desenvolvimento-e-storybook)\n12. [Publicação no npm (mantenedores)](#publicação-no-npm-mantenedores)\n13. [Histórico de versões (resumo)](#histórico-de-versões-resumo)\n14. [Licença](#licença)\n\n---\n\n## Requisitos\n\n- **Node** 18+\n- **`lit`** como dependência da aplicação (**peer dependency** deste pacote)\n\n---\n\n## Instalação e entrypoints\n\n```bash\nnpm install @aiqfome-org/geraldo-ui lit\n```\n\nO `package.json` do pacote expõe três superfícies principais:\n\n| Import | Conteúdo |\n| ------ | -------- |\n| `@aiqfome-org/geraldo-ui` | Bundle dos Web Components + `defineGeraldoUI` |\n| `@aiqfome-org/geraldo-ui/tokens.css` | Variáveis CSS (cores, tipografia, espaçamentos) |\n| `@aiqfome-org/geraldo-ui/auth` | Helpers **apenas browser** para OAuth Magalu + `postMessage` no Geraldo (**sem** `lit`) |\n\nTipos TypeScript: `dist/index.d.ts` e `dist/auth/index.d.ts` (resolvidos automaticamente pelos `exports` do npm).\n\n---\n\n## Autenticação Magalu e Geraldo\n\nImport: `@aiqfome-org/geraldo-ui/auth`.\n\n### O que o módulo faz (e o que não faz)\n\n| Faz | Não faz |\n| --- | ------- |\n| Monta a URL de autorização Magalu ID (`response_type=code`, escopos, `redirect_uri` do Geraldo quando aplicável) | Troca do `code` por access token (usa o teu servidor + `client_secret`) |\n| Abre o **popup** de login (`window.open`) | Validação de sessão ou refresh token |\n| Escuta `postMessage` com `authCode` e `magaluAuthDone` com lista de **origens permitidas** | Pedidos HTTP à API aiqfome |\n\n### APIs de baixo nível\n\nÚteis quando precisas de controlo fino (por exemplo só montar URL, ou subscrever mensagens sem abrir popup de imediato):\n\n- `buildGeraldoOAuthRedirectUri`, `buildMagaluAuthorizeUrl`\n- `openMagaluLoginWindow`\n- `parseAllowedOrigins`, `subscribeMagaluAuthMessages`, `isTrustedOrigin`\n- Constantes: `DEFAULT_GERALDO_BASE_URL`, `GERALDO_OAUTH_CALLBACK_PATH`, `MAGALU_ID_LOGIN_BASE`\n\nExemplo mínimo (listener + URL + popup):\n\n```ts\nimport {\n  buildGeraldoOAuthRedirectUri,\n  buildMagaluAuthorizeUrl,\n  openMagaluLoginWindow,\n  parseAllowedOrigins,\n  subscribeMagaluAuthMessages,\n} from '@aiqfome-org/geraldo-ui/auth';\n\nconst unsubscribe = subscribeMagaluAuthMessages(\n  (msg) => {\n    if (msg.kind === 'authCode') {\n      // POST msg.code + redirectUri para o teu servidor (mesmo redirect_uri usado no authorize)\n    }\n  },\n  { allowedOrigins: parseAllowedOrigins('https://geraldo-restaurantes.aiqfome.com,http://localhost:5175') }\n);\n\nconst url = buildMagaluAuthorizeUrl({\n  clientId: '…',\n  redirectUri: buildGeraldoOAuthRedirectUri(),\n  scopes: ['aqf:store:read'],\n});\nopenMagaluLoginWindow(url);\nunsubscribe();\n```\n\n### Preset recomendado: `createGeraldoMagaluAuth`\n\nOrquestra **subscrição** + **URL** + **popup** numa única API. Ideal para a maioria das integrações no iframe do Geraldo.\n\n**Opções (`CreateGeraldoMagaluAuthOptions`):**\n\n| Campo | Obrigatório | Descrição |\n| ----- | ----------- | --------- |\n| `clientId` | sim | `string` ou `() => string` (getter para estado reativo; lido em cada `openLogin`) |\n| `scopes` | sim | Lista de escopos Magalu / AIQFOME (ex.: `aqf:store:read`) |\n| `allowedOrigins` | sim | String CSV ou array — mesma regra que `parseAllowedOrigins` (ex.: Geraldo produção + `http://localhost:PORTA`) |\n| `onMessage` | sim | Callback com `MagaluAuthMessage` (`authCode` \\| `magaluAuthDone`) |\n| `geraldoBaseUrl` | não | Base do Geraldo para o `redirect_uri` (por omissão: produção `.com`) |\n| `state` | não | OAuth `state` opcional |\n| `chooseTenants` | não | Repasse para a URL Magalu (omissão alinhada ao fluxo lojista multi-tenant) |\n| `openWindowOptions` | não | `{ windowName?, features? }` para `window.open` |\n\n**Controller devolvido:**\n\n| Método / campo | Descrição |\n| -------------- | --------- |\n| `redirectUri` | Igual ao usado no authorize — envia ao backend na troca do `code` |\n| `openLogin()` | Resultado discriminado (ver tabela abaixo) |\n| `dispose()` | Remove o listener de `postMessage` (chamar ao desmontar a app / rota) |\n\n**Resultado de `openLogin()` (`GeraldoMagaluAuthOpenLoginResult`):**\n\n| Forma | Significado |\n| ----- | ----------- |\n| `{ ok: true, popup }` | Popup aberto (`Window`) |\n| `{ ok: false, reason: 'missing_client_id' }` | `clientId` vazio após `trim` |\n| `{ ok: false, reason: 'popup_blocked' }` | Browser bloqueou `window.open` |\n\n```ts\nimport { createGeraldoMagaluAuth, parseAllowedOrigins } from '@aiqfome-org/geraldo-ui/auth';\n\nconst auth = createGeraldoMagaluAuth({\n  clientId: '…',\n  scopes: ['aqf:store:read'],\n  allowedOrigins: parseAllowedOrigins(\n    'https://geraldo-restaurantes.aiqfome.com,http://localhost:5175'\n  ),\n  onMessage(msg) {\n    if (msg.kind === 'authCode') {\n      // POST msg.code + auth.redirectUri ao teu servidor\n    }\n  },\n});\n\nconst result = auth.openLogin();\nif (result.ok) {\n  // result.popup — janela do Magalu ID\n}\nauth.dispose();\n```\n\n### Origens e `postMessage`\n\nInclui nas **origens permitidas** o host do **Geraldo** em produção (`https://geraldo-restaurantes.aiqfome.com`) e, em desenvolvimento, a origem do teu app (ex.: `http://localhost:5180`). Mensagens de outras origens são ignoradas.\n\n---\n\n## Uso rápido (design system)\n\n1. Importa os **tokens** (CSS variables) uma vez na raiz do app (antes de qualquer componente).\n2. Importa o bundle JS para **registrar** os custom elements.\n\n### Vite / bundlers\n\n```ts\nimport '@aiqfome-org/geraldo-ui/tokens.css';\nimport '@aiqfome-org/geraldo-ui';\n```\n\n### Fonte Ubuntu\n\nInclui no HTML (recomendado):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n<link\n  href=\"https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,400;0,500;0,700&display=swap\"\n  rel=\"stylesheet\"\n/>\n```\n\n### HTML declarativo\n\n```html\n<geraldo-button variant=\"filled\" color=\"primary\">Salvar</geraldo-button>\n<geraldo-text variant=\"h3-section\" weight=\"medium\">Seção</geraldo-text>\n```\n\n### React (exemplo)\n\n```tsx\nimport '@aiqfome-org/geraldo-ui/tokens.css';\nimport '@aiqfome-org/geraldo-ui';\n\nexport function Example() {\n  return <geraldo-button variant=\"outline\">OK</geraldo-button>;\n}\n```\n\nDeclara os tipos JSX se necessário (ou estende `IntrinsicElements`).\n\n---\n\n## Registro dos custom elements\n\nImportar `@aiqfome-org/geraldo-ui` carrega os módulos dos componentes; o decorator `@customElement` do Lit regista cada tag. Para registo **explícito** e idempotente (útil com code-splitting):\n\n```ts\nimport { defineGeraldoUI } from '@aiqfome-org/geraldo-ui';\ndefineGeraldoUI();\n```\n\n---\n\n## Ícones\n\nO guia referencia [Material Symbols](https://fonts.google.com/icons) e [MDI](https://pictogrammers.com/library/mdi/). Este pacote **não** inclui ícones: usa SVG no slot `icon` de `geraldo-button` / `geraldo-badge`, ou bibliotecas como `@mdi/js` na tua app.\n\n---\n\n## Tema escuro\n\nDefine no ancestral (ex.: `<html data-geraldo-theme=\"dark\">`) ou usa a classe `.geraldo-theme-dark` no container. Tokens de superfície e seleção vêm de `geraldo-tokens.css`.\n\n---\n\n## Componentes exportados\n\n| Tag                    | Descrição                          |\n| ---------------------- | ---------------------------------- |\n| `geraldo-button`       | CTA: `variant`, `color`, `size`, `loading` |\n| `geraldo-text`         | Tipografia: `variant`, `weight`, `as` |\n| `geraldo-badge`        | `tone` (primary, developer, …)     |\n| `geraldo-card`         | `radius`, `elevation`; slots `header`, default, `footer` |\n| `geraldo-text-field`   | `label`, `description`, `error`, eventos `geraldo-input` / `geraldo-change` |\n| `geraldo-checkbox`     | `checked`, `disabled`; `geraldo-change` |\n| `geraldo-radio-group`  | `value`, `name`, `legend`          |\n| `geraldo-radio`        | `value`, `checked`, `name`         |\n| `geraldo-switch`       | `checked`, `disabled`; `geraldo-change` |\n\n---\n\n## Exemplos no repositório\n\nNa **raiz** do clone do `aiqfome-ui-sdk`:\n\n| Comando | Pasta | O que demonstra |\n| ------- | ----- | ----------------- |\n| `npm run example:pedidos` | [examples/pedidos-app](examples/pedidos-app) | Todos os componentes do DS; alias Vite → `src/` |\n| `npm run example:lojista-pedidos` | [examples/lojista-pedidos-app](examples/lojista-pedidos-app) | API V2 (proxy), Geraldo UI, **`createGeraldoMagaluAuth`**; dependência `file:../..` + alias para `src/` |\n| `npm run example:magalu-auth` | [examples/magalu-auth-minimal](examples/magalu-auth-minimal) | Só auth + `postMessage` (sem backend) |\n\n**Variáveis de ambiente (exemplos auth / API):**\n\n| Variável | Onde | Uso |\n| -------- | ----- | --- |\n| `VITE_MAGALU_CLIENT_ID` | `magalu-auth-minimal`, `lojista-pedidos-app` | Client ID do app no portal (OAuth) |\n| `VITE_POSTMESSAGE_ORIGINS` | idem | Lista CSV de origens confiáveis para `postMessage` |\n| `VITE_AIQFOME_ACCESS_TOKEN` | `lojista-pedidos-app` | Bearer da API V2 (demo manual) |\n\nCopia `env.sample` para `.env` em cada pasta de exemplo.\n\n---\n\n## Desenvolvimento e Storybook\n\n```bash\ngit clone https://github.com/aiqfome/aiqfome-ui-sdk.git\ncd aiqfome-ui-sdk\nnpm install\nnpm run build\nnpm test\nnpm run storybook\n```\n\nO repositório segue **Gitflow**: integração em **`develop`**, releases estáveis em **`main`**. Ramos `feature/*`, `release/*`, `hotfix/*` — ver [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n**Issues e PRs:** [github.com/aiqfome/aiqfome-ui-sdk](https://github.com/aiqfome/aiqfome-ui-sdk).\n\n---\n\n## Publicação no npm (mantenedores)\n\n### Pré-requisitos\n\n1. **Organização npm** — membro com publish em [@aiqfome-org](https://www.npmjs.com/org/aiqfome-org).\n2. **Autenticação** — `npm login` localmente, ou **GitHub Actions** com secret `NPM_TOKEN` (token npm tipo **Automation**, permissão de publish no scope).\n\n### Checklist antes de publicar\n\n1. `git pull` na branch de release (normalmente `main` após merge).\n2. `npm ci` (ou `npm install`) e **`npm run build`** — confirmar `dist/index.js`, `dist/index.d.ts`, `dist/geraldo-tokens.css`, `dist/auth/index.js`, `dist/auth/index.d.ts`.\n3. **`npm test`** — suite Vitest.\n4. Opcional: `npm pack --dry-run` — rever ficheiros incluídos (`files` em `package.json`: `dist`, `docs`, `LICENSE`).\n5. **`package.json` `version`** alinhada à release (ex.: `npm version patch|minor|major` gera commit/tag local; ou editar versão em branch `release/*` conforme Gitflow).\n6. **Tag Git** `vX.Y.Z` em `main` (ou fluxo da equipa) **igual** à versão do npm.\n7. **GitHub Release** “published” — dispara o workflow [.github/workflows/publish.yml](.github/workflows/publish.yml), que executa `npm ci` e **`npm publish`** (o script `prepublishOnly` corre `npm run build` outra vez).\n\n### Publicação manual\n\n```bash\nnpm publish\n```\n\nO pacote tem `publishConfig.access: \"public\"` no `package.json`; o scope `@aiqfome-org` fica público após a primeira publicação correta da org.\n\n### Depois do publish\n\n- Verifica a página do pacote: [npmjs.com/package/@aiqfome-org/geraldo-ui](https://www.npmjs.com/package/@aiqfome-org/geraldo-ui).\n- Atualiza o **Release** no GitHub com notas (breaking changes, novas APIs, exemplos).\n\n---\n\n## Histórico de versões (resumo)\n\n| Versão | Destaques |\n| ------ | ---------- |\n| **0.3.0** | Subpath `@aiqfome-org/geraldo-ui/auth`: preset **`createGeraldoMagaluAuth`** (`redirectUri`, `openLogin()` com `missing_client_id` / `popup_blocked`, `dispose()`); `clientId` como string ou getter; exemplos e README atualizados. |\n| 0.2.x e anteriores | Design system + helpers auth de baixo nível; ver tags Git e changelog de commits para detalhe. |\n\n---\n\n## Licença\n\nMIT — ver [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}