{"_id":"@boltz.one/ui","_rev":"4-bfd5ca48d5cbd93b5bff8a1595080748","name":"@boltz.one/ui","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@boltz.one/ui","version":"0.1.0","license":"MIT","_id":"@boltz.one/ui@0.1.0","maintainers":[{"name":"dknguyen","email":"dknguyen2304@gmail.com"}],"homepage":"https://github.com/boltz-one/core#readme","bugs":{"url":"https://github.com/boltz-one/core/issues"},"dist":{"shasum":"db55029d0a13d50294ebf53e9bf6a235db035f80","tarball":"https://registry.npmjs.org/@boltz.one/ui/-/ui-0.1.0.tgz","fileCount":34,"integrity":"sha512-39yw/BkoFhjaD3cCrGweQXOgcs7y8MCY0XH9r2yE2pznHeMh0Dwo6h2m6wesBzbBrIeZRr7PDplVERXG3wiZCg==","signatures":[{"sig":"MEYCIQC1o1zQOeFajQH7u+AS5eXGan8793ERYgmG90jnCRKgOwIhAM5eBC2LMH/P3fCWfqN3cM44eeyQyjaLJGSqWI/Sxenu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":811084},"type":"module","exports":{".":"./src/index.ts","./hooks":"./src/hooks/index.ts","./icons":"./src/icons/index.ts","./theme":"./src/theme/index.ts","./utils":"./src/utils/index.ts","./layout":"./src/layout/index.ts","./providers":"./src/providers/index.ts","./components":"./src/components/index.ts","./tailwind-preset":"./tailwind-preset.ts","./styles/globals.css":"./src/styles/globals.css"},"gitHead":"542d20503d0b3ef447f17dd376c5a7f5f1126ff7","scripts":{"lint":"eslint . --max-warnings 0","check-types":"tsc --noEmit"},"_npmUser":{"name":"dknguyen","email":"dknguyen2304@gmail.com"},"repository":{"url":"git+https://github.com/boltz-one/core.git","type":"git","directory":"packages/ui"},"_npmVersion":"10.8.2","description":"UI kit dùng chung cho Shell và micro apps: theme, antd providers, components, layout, hooks, utils, icons","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"20.20.2","dependencies":{"clsx":"^2.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"antd":"^6.1.1","react":"^19.2.0","eslint":"^9.39.1","react-dom":"^19.2.0","typescript":"5.9.2","@types/node":"^22.15.3","tailwindcss":"^3.4.1","@types/react":"19.2.2","@types/react-dom":"19.2.2","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0","@repo/eslint-config":"*","@repo/typescript-config":"*"},"peerDependencies":{"antd":"^6.1.1","react":">=18","react-dom":">=18","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.1.0_1781868121652_0.7054116924601654","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@boltz.one/ui","version":"0.2.0","license":"MIT","_id":"@boltz.one/ui@0.2.0","maintainers":[{"name":"dknguyen","email":"dknguyen2304@gmail.com"}],"homepage":"https://github.com/boltz-one/core#readme","bugs":{"url":"https://github.com/boltz-one/core/issues"},"dist":{"shasum":"04db5054fc7de0283df6552ff77b9b242b11e1a6","tarball":"https://registry.npmjs.org/@boltz.one/ui/-/ui-0.2.0.tgz","fileCount":40,"integrity":"sha512-NIVF603dGzlwRycFJ4ejr0s2MRHnV4DTmhGNlrR6d1LX5kt6Al7pRIpEtI+TpF7rQ03W0oqrFHnpP6shxB8ldg==","signatures":[{"sig":"MEQCIBo8Cum7OYqO5ODtAedMxQWYxmvAbkCIliazqw8CH/+MAiAJE8QNOio35pvlsbby6bwJmKc42yVNSgdmDl2WDZXtYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":819208},"type":"module","exports":{".":"./src/index.ts","./hooks":"./src/hooks/index.ts","./icons":"./src/icons/index.ts","./theme":"./src/theme/index.ts","./utils":"./src/utils/index.ts","./layout":"./src/layout/index.ts","./providers":"./src/providers/index.ts","./components":"./src/components/index.ts","./tailwind-preset":"./tailwind-preset.ts","./styles/globals.css":"./src/styles/globals.css","./styles/micro-app.css":"./src/styles/micro-app.css"},"gitHead":"87c359a27758c6d24a3201c25675baa3d4613efa","scripts":{"lint":"eslint . --max-warnings 0","check-types":"tsc --noEmit"},"_npmUser":{"name":"dknguyen","email":"dknguyen2304@gmail.com"},"repository":{"url":"git+https://github.com/boltz-one/core.git","type":"git","directory":"packages/ui"},"_npmVersion":"10.9.8","description":"UI kit dùng chung cho Shell và micro apps: theme, antd providers, components, layout, hooks, utils, icons","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.22.3","dependencies":{"clsx":"^2.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"antd":"^6.1.1","react":"^19.2.0","eslint":"^9.39.1","react-dom":"^19.2.0","typescript":"5.9.2","@types/node":"^22.15.3","tailwindcss":"^3.4.1","@types/react":"19.2.2","@types/react-dom":"19.2.2","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0","@boltz.one/eslint-config":"*","@boltz.one/typescript-config":"*"},"peerDependencies":{"antd":"^6.1.1","react":">=18","react-dom":">=18","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.2.0_1782268069239_0.08662850422453494","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@boltz.one/ui","version":"0.3.0","license":"MIT","_id":"@boltz.one/ui@0.3.0","maintainers":[{"name":"dknguyen","email":"dknguyen2304@gmail.com"}],"homepage":"https://github.com/boltz-one/core#readme","bugs":{"url":"https://github.com/boltz-one/core/issues"},"dist":{"shasum":"871757ea940b68f5bd334c78351f4d2b9cfeb4c7","tarball":"https://registry.npmjs.org/@boltz.one/ui/-/ui-0.3.0.tgz","fileCount":41,"integrity":"sha512-IJUOOkuXSYd6QTNUjZ+WLc34EE5gCc54XR8dUBhwoP5G85jg+EzoPQKHCzboss6cIR6suY2TIFnAX30fuPuM4A==","signatures":[{"sig":"MEQCIF1aevoppRsEqLXxNcUqpJn4bLzBB5ia9CmYVS5x5fAbAiBprOUoFuMx44OcyOyzSS+TESd9qHt6+wc4ufKup8aIrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":820249},"type":"module","exports":{".":"./src/index.ts","./hooks":"./src/hooks/index.ts","./icons":"./src/icons/index.ts","./theme":"./src/theme/index.ts","./utils":"./src/utils/index.ts","./layout":"./src/layout/index.ts","./providers":"./src/providers/index.ts","./components":"./src/components/index.ts","./tailwind-preset":"./tailwind-preset.ts","./styles/globals.css":"./src/styles/globals.css","./styles/micro-app.css":"./src/styles/micro-app.css"},"gitHead":"d7c95c1c2afa44b009106f7d0bd557b8c77550a9","scripts":{"lint":"eslint . --max-warnings 0","check-types":"tsc --noEmit"},"_npmUser":{"name":"dknguyen","email":"dknguyen2304@gmail.com"},"repository":{"url":"git+https://github.com/boltz-one/core.git","type":"git","directory":"packages/ui"},"_npmVersion":"10.9.8","description":"UI kit dùng chung cho Shell và micro apps: theme, antd providers, components, layout, hooks, utils, icons","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"22.22.3","dependencies":{"clsx":"^2.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"antd":"^6.1.1","react":"^19.2.0","eslint":"^9.39.1","react-dom":"^19.2.0","typescript":"5.9.2","@types/node":"^22.15.3","tailwindcss":"^3.4.1","@types/react":"19.2.2","@types/react-dom":"19.2.2","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0","@boltz.one/eslint-config":"*","@boltz.one/typescript-config":"*"},"peerDependencies":{"antd":"^6.1.1","react":">=18","react-dom":">=18","@ant-design/cssinjs":"^2.0.2","@carbon/icons-react":"^11.71.0"},"_npmOperationalInternal":{"tmp":"tmp/ui_0.3.0_1782269150459_0.5817628762976259","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@boltz.one/ui","version":"0.4.0","description":"UI kit dùng chung cho Shell và micro apps: theme, antd providers, components, layout, hooks, utils, icons","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/boltz-one/core.git","directory":"packages/ui"},"sideEffects":["**/*.css"],"exports":{".":"./src/index.ts","./theme":"./src/theme/index.ts","./providers":"./src/providers/index.ts","./components":"./src/components/index.ts","./layout":"./src/layout/index.ts","./hooks":"./src/hooks/index.ts","./utils":"./src/utils/index.ts","./icons":"./src/icons/index.ts","./styles/globals.css":"./src/styles/globals.css","./styles/micro-app.css":"./src/styles/micro-app.css","./tailwind-preset":"./tailwind-preset.ts"},"scripts":{"lint":"eslint . --max-warnings 0","check-types":"tsc --noEmit"},"dependencies":{"clsx":"^2.1.0"},"peerDependencies":{"@ant-design/cssinjs":"^2.0.2","@ant-design/icons":"^6.0.0","@carbon/icons-react":"^11.71.0","antd":"^6.1.1","react":">=18","react-dom":">=18"},"devDependencies":{"@ant-design/cssinjs":"^2.0.2","@ant-design/icons":"^6.0.0","@carbon/icons-react":"^11.71.0","@boltz.one/eslint-config":"*","@boltz.one/typescript-config":"*","@types/node":"^22.15.3","@types/react":"19.2.2","@types/react-dom":"19.2.2","antd":"^6.1.1","eslint":"^9.39.1","react":"^19.2.0","react-dom":"^19.2.0","tailwindcss":"^3.4.1","typescript":"5.9.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_id":"@boltz.one/ui@0.4.0","gitHead":"724cc9de8bdfbd1e144ffd2ad7c78f917ee2ae89","bugs":{"url":"https://github.com/boltz-one/core/issues"},"homepage":"https://github.com/boltz-one/core#readme","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-jGFm2QRwu3waSzaxkyvmtqTn6rVvXS/3DFRp2HG9d0iN7lHXPibJEu3M66NaJSSDyO17bae3jsf5ADeo/DNOMw==","shasum":"3a765773df291f2329d1a778c932338e451f5a93","tarball":"https://registry.npmjs.org/@boltz.one/ui/-/ui-0.4.0.tgz","fileCount":44,"unpackedSize":823787,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICwdPmrC9/lgHsAmrvJNh/JcluthEvdpcwsDxWT8nLxiAiEA6qyDpnDVVqcbt4OsQvXemuBF4kWO6J7UNAuwTldkxxY="}]},"_npmUser":{"name":"dknguyen","email":"dknguyen2304@gmail.com"},"directories":{},"maintainers":[{"name":"dknguyen","email":"dknguyen2304@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui_0.4.0_1782270061364_0.040039569184794344"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-19T11:22:01.503Z","modified":"2026-06-24T03:01:01.628Z","0.1.0":"2026-06-19T11:22:01.815Z","0.2.0":"2026-06-24T02:27:49.434Z","0.3.0":"2026-06-24T02:45:50.638Z","0.4.0":"2026-06-24T03:01:01.528Z"},"bugs":{"url":"https://github.com/boltz-one/core/issues"},"license":"MIT","homepage":"https://github.com/boltz-one/core#readme","repository":{"type":"git","url":"git+https://github.com/boltz-one/core.git","directory":"packages/ui"},"description":"UI kit dùng chung cho Shell và micro apps: theme, antd providers, components, layout, hooks, utils, icons","maintainers":[{"name":"dknguyen","email":"dknguyen2304@gmail.com"}],"readme":"# @boltz.one/ui\n\nUI kit dùng chung cho **Super App Shell** và **mọi micro app**. Mục tiêu: đồng nhất\ngiao diện (theme, typography, antd overrides, components, helpers, icons) giữa core\nportal và các app con.\n\nPackage ship **source `.tsx`** (không build sẵn) — consumer (Vite + bundler\nresolution) tự biên dịch. Đây là pattern thống nhất với `@boltz.one/sdk-web`.\n\n## Cài đặt (trong monorepo)\n\n```jsonc\n// package.json của app\n{\n  \"dependencies\": {\n    \"@boltz.one/ui\": \"workspace:*\"\n  }\n}\n```\n\n`react`, `react-dom`, `antd`, `@ant-design/cssinjs`, `@carbon/icons-react` là\n**peerDependencies** — app phải tự cài. Lý do: React và antd context phải là\n**singleton** xuyên shell + micro app, nếu bị bundle nhiều bản thì theme, message,\nmodal toàn cục sẽ vỡ.\n\n## Cấu hình Tailwind (bắt buộc)\n\nUI kit dùng class Tailwind. Consumer phải nạp preset và thêm `src` của package vào\n`content`, nếu không class sẽ bị purge:\n\n```ts\n// tailwind.config.ts\nimport type { Config } from 'tailwindcss';\nimport { uiPreset } from '@boltz.one/ui/tailwind-preset';\n\nexport default {\n  presets: [uiPreset as Config],\n  content: [\n    './index.html',\n    './src/**/*.{ts,tsx}',\n    // đường dẫn tương đối tới @boltz.one/ui (điều chỉnh theo vị trí app)\n    '../../core/packages/ui/src/**/*.{ts,tsx}',\n  ],\n  plugins: [],\n} satisfies Config;\n```\n\nNạp stylesheet nền (Tailwind directives + antd overrides + font IBM Plex Sans):\n\n```css\n/* src/styles/globals.css */\n@import '@boltz.one/ui/styles/globals.css';\n/* override riêng của app đặt bên dưới */\n```\n\n## Bọc providers\n\n```tsx\nimport { AntdConfigProvider, resolveAntdLocale } from '@boltz.one/ui';\nimport { useTranslation } from 'react-i18next';\n\nfunction AppProviders({ children }) {\n  const { i18n } = useTranslation();\n  return (\n    <AntdConfigProvider locale={resolveAntdLocale(i18n.language)}>\n      {children}\n    </AntdConfigProvider>\n  );\n}\n```\n\n`AntdConfigProvider` đã gắn `globalTheme` mặc định + `App` context + extractor nạp\n`message`/`modal`/`notification` vào singleton.\n\n## Subpath exports\n\n| Import | Nội dung |\n|---|---|\n| `@boltz.one/ui` | Re-export tiện lợi: theme, providers, components, layout, hooks, utils |\n| `@boltz.one/ui/theme` | `globalTheme`, `ANTD_LOCALES`, `resolveAntdLocale` |\n| `@boltz.one/ui/providers` | `AntdConfigProvider`, `baseMessage/baseModal/baseNotification`, `setAntdStatic` |\n| `@boltz.one/ui/components` | `BaseTagStatus`, `BaseFullScreenSpin` |\n| `@boltz.one/ui/layout` | `SideNav` (headless), `computeMenuState` |\n| `@boltz.one/ui/hooks` | `useDisclosure` |\n| `@boltz.one/ui/utils` | `formatCurrency`, `capitalizeText`, `truncateDisplayValue`, `cn` |\n| `@boltz.one/ui/icons` | Icon SVG dùng chung (login/payment) — **yêu cầu `vite-plugin-svgr`** |\n| `@boltz.one/ui/styles/globals.css` | Stylesheet nền |\n| `@boltz.one/ui/tailwind-preset` | Preset Tailwind dùng chung |\n\n> `./icons` và `./styles` cố tình **không** nằm trong entry chính `@boltz.one/ui`\n> để app không bắt buộc phải có svgr / xử lý CSS chỉ vì import component.\n\n## Gọi message/notification ngoài React tree\n\n```ts\nimport { baseNotification } from '@boltz.one/ui/providers';\nbaseNotification.error({ title: 'Có lỗi xảy ra' });\n```\n\n## Nguyên tắc đóng góp\n\n- Component trong `components/` phải **thuần** — không import store/router/i18n của\n  app. Cần điều hướng/ text dịch → nhận qua props (xem `SideNav` headless).\n- Không kéo business logic, không gọi API, không phụ thuộc `apps/*`.\n- Theme là nguồn duy nhất (`theme/tokens.ts`) — không copy token sang app.\n","readmeFilename":"README.md"}