{"_id":"@adatechnology/web-booking-widget","_rev":"2-9a2ade59dccf1b8a619d21bda2b51945","name":"@adatechnology/web-booking-widget","dist-tags":{"rc":"0.1.0-rc.1","latest":"0.1.0"},"versions":{"0.1.0-rc.1":{"name":"@adatechnology/web-booking-widget","version":"0.1.0-rc.1","license":"MIT","_id":"@adatechnology/web-booking-widget@0.1.0-rc.1","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"54a9e308ae01ddd411bf290bab80c0fd7d891b54","tarball":"https://registry.npmjs.org/@adatechnology/web-booking-widget/-/web-booking-widget-0.1.0-rc.1.tgz","fileCount":4,"integrity":"sha512-cTjbfAMAqpJMQUp02HMqE3D2eCqKtVfHzyDyufvKTZ7aIqv2wuWWhL2gxJpL3uOrdHX3UrPHxi1fYiyNa+6XwQ==","signatures":[{"sig":"MEUCIQCipHUhYzQ+KMLZ68/2axYk3A3V2ziDndDCGLEysGOLXAIgE/YwZYBVZp0xviLLg3CwhW3ns+Rjf5ohBkDqjPk75/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42678},"main":"dist/index.js","type":"module","_from":"file:adatechnology-web-booking-widget-0.1.0-rc.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --clean --format esm","check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/c7ba6cece5682a34e03a938b47e1ae46/adatechnology-web-booking-widget-0.1.0-rc.1.tgz","_integrity":"sha512-cTjbfAMAqpJMQUp02HMqE3D2eCqKtVfHzyDyufvKTZ7aIqv2wuWWhL2gxJpL3uOrdHX3UrPHxi1fYiyNa+6XwQ==","_npmVersion":"10.9.8","description":"Agendamento de serviço como Web Component nativo — sem framework, plugável em qualquer página","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","@types/bun":"1.3.14","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/web-booking-widget_0.1.0-rc.1_1787008173601_0.22919890957944022","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@adatechnology/web-booking-widget","version":"0.1.0","description":"Agendamento de serviço como Web Component nativo — sem framework, plugável em qualquer página","license":"MIT","publishConfig":{"access":"public"},"type":"module","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"main":"dist/index.js","types":"dist/index.d.ts","devDependencies":{"@types/bun":"1.3.14","tsup":"^8.5.1","typescript":"^5.9.3"},"scripts":{"build":"tsup src/index.ts --dts --clean --format esm","check":"tsc -p tsconfig.json --noEmit","test":"bun test"},"_id":"@adatechnology/web-booking-widget@0.1.0","_integrity":"sha512-+/prifSQLKuEYjeAq532yQgLu/SGRYIFn04d4yckJOyaVn7vdbZD/TbryhnE+oeCpoZTTpqXqODYgMi5CiIrnw==","_resolved":"/tmp/5a5a54a7e20602d5bfc2b35ad93749d2/adatechnology-web-booking-widget-0.1.0.tgz","_from":"file:adatechnology-web-booking-widget-0.1.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-+/prifSQLKuEYjeAq532yQgLu/SGRYIFn04d4yckJOyaVn7vdbZD/TbryhnE+oeCpoZTTpqXqODYgMi5CiIrnw==","shasum":"6295c14d3ee9d61817efcdc61055a23690d5a91d","tarball":"https://registry.npmjs.org/@adatechnology/web-booking-widget/-/web-booking-widget-0.1.0.tgz","fileCount":4,"unpackedSize":42728,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICJ/kPTIRaMhaDI0sM3LThshipoVjpPp2/RCrBgdS+inAiEAxPFyxkIQWgBYet0Bh+ZRvftEk8WRU+JU0908EbdQPqQ="}]},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"directories":{},"maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/web-booking-widget_0.1.0_1788318111663_0.3620896333179857"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T23:09:33.484Z","modified":"2026-09-02T03:01:51.971Z","0.1.0-rc.1":"2026-08-17T23:09:33.766Z","0.1.0":"2026-09-02T03:01:51.792Z"},"license":"MIT","description":"Agendamento de serviço como Web Component nativo — sem framework, plugável em qualquer página","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"readme":"# @adatechnology/web-booking-widget\n\nAgendamento de serviço como Web Component nativo (`<ada-booking-widget>`), sem framework —\nplugável em qualquer página, no molde do `@adatechnology/web-chat-widget`.\n\n## Uso\n\n```html\n<script type=\"module\">\n  import '@adatechnology/web-booking-widget'\n</script>\n\n<ada-booking-widget\n  api-base=\"https://sua-api.com\"\n  theme='{\"primaryColor\":\"#0f766e\",\"primaryContrastColor\":\"#ffffff\"}'\n></ada-booking-widget>\n```\n\n- `api-base` (obrigatório): origem da API do **produto hospedeiro**. O widget lança erro no\n  `connectedCallback` se o atributo faltar — nunca assume uma origem padrão.\n- `theme` (opcional): JSON com tokens de cor/raio. Sem o atributo, o widget usa um fallback\n  neutro (cinza/preto) — ele não carrega cor de marca própria (ver `widget.style.ts`).\n\n### Tokens de tema aceitos\n\n| Token | Variável CSS |\n|---|---|\n| `primaryColor` | `--ada-booking-primary` |\n| `primaryContrastColor` | `--ada-booking-primary-contrast` |\n| `surfaceColor` | `--ada-booking-surface` |\n| `backgroundColor` | `--ada-booking-bg` |\n| `textColor` | `--ada-booking-text` |\n| `mutedColor` | `--ada-booking-muted` |\n| `borderColor` | `--ada-booking-border` |\n| `radius` | `--ada-booking-radius` |\n\nChave desconhecida ou JSON inválido é ignorado silenciosamente — o restante do tema aplica normal.\n\n## O contrato HTTP que o host precisa servir\n\nO widget **nunca fala com `@adatechnology/scheduling-module` diretamente** — só com rotas da\nAPI do produto, que decide autenticação, rate limit e captcha na borda (spec do\n`scheduling-trio`, decisão Q2). O host implementa as quatro rotas abaixo, delegando para o\nmódulo por trás da própria API:\n\n| Rota | Método | Descrição |\n|---|---|---|\n| `/v1/booking-widget/services` | `GET` | Lista serviços agendáveis |\n| `/v1/booking-widget/resources?serviceId=` | `GET` | Lista profissionais/recursos do serviço |\n| `/v1/booking-widget/availability?serviceId=&resourceId=&from=&to=` | `GET` | Lista horários livres na janela |\n| `/v1/booking-widget/bookings` | `POST` | Cria o agendamento |\n\nToda resposta segue o envelope padrão (`apis.md`): sucesso `{ data }`, erro\n`{ error: { code, message } }`.\n\n### `GET /v1/booking-widget/services`\n\n```json\n{ \"data\": [{ \"id\": \"svc_1\", \"name\": \"Corte\", \"description\": null, \"durationMinutes\": 30, \"priceInCents\": 5000 }] }\n```\n\n### `GET /v1/booking-widget/resources`\n\n```json\n{ \"data\": [{ \"id\": \"res_1\", \"name\": \"Ana\", \"timezone\": \"America/Manaus\" }] }\n```\n\n`timezone` é o fuso IANA do recurso (não da empresa) — ver `Resource.timezone` em\n`scheduling-contracts`. É o que permite ao widget mostrar o horário do profissional ao lado do\nhorário do visitante quando os fusos divergem.\n\n### `GET /v1/booking-widget/availability`\n\n```json\n{ \"data\": [{ \"resourceId\": \"res_1\", \"startsAt\": \"2026-08-20T14:00:00Z\", \"endsAt\": \"2026-08-20T14:30:00Z\" }] }\n```\n\n### `POST /v1/booking-widget/bookings`\n\nCorpo:\n\n```json\n{\n  \"serviceId\": \"svc_1\",\n  \"resourceId\": \"res_1\",\n  \"startsAt\": \"2026-08-20T14:00:00Z\",\n  \"endsAt\": \"2026-08-20T14:30:00Z\",\n  \"customerName\": \"Maria\",\n  \"customerContact\": \"maria@example.com\"\n}\n```\n\nResposta:\n\n```json\n{ \"data\": { \"bookingId\": \"bkg_1\", \"status\": \"confirmed\" } }\n```\n\n## Fuso horário\n\nO widget mostra os horários de disponibilidade no fuso do **visitante**\n(`Intl.DateTimeFormat().resolvedOptions().timeZone`), não no fuso do recurso — evita o erro\nclássico de o cliente ler \"14:00\" no próprio horário e o profissional estar num fuso diferente.\nQuando os fusos divergem, o fuso do recurso aparece como nota secundária ao lado do horário.\n\n## Ainda não parametrizado\n\n- Locale fixo em pt-BR (`widget.locale.json`), sem suporte a outro idioma ainda.\n- Sem paginação na listagem de disponibilidade — a janela é fixa em\n  `AVAILABILITY_WINDOW_DAYS` (14 dias).\n","readmeFilename":"README.md"}