{"_id":"@dgithiomi/sports-betting-ui","_rev":"3-3baf4d99472e8a40f9b5acb808bacdde","name":"@dgithiomi/sports-betting-ui","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@dgithiomi/sports-betting-ui","version":"1.0.0","author":"","license":"ISC","_id":"@dgithiomi/sports-betting-ui@1.0.0","maintainers":[{"name":"dgithiomi","email":"dg@uniicy.com"}],"dist":{"shasum":"34da69e4757d85fa1670aae70ef459cae0d7a3ad","tarball":"https://registry.npmjs.org/@dgithiomi/sports-betting-ui/-/sports-betting-ui-1.0.0.tgz","fileCount":80,"integrity":"sha512-yp2IacrEkp9nkvhSfZghqxjO3rqDPiM+SfkQKf2QsQv9QZR7dYnjoCcDngCa4n71q3Y5m2SHsalcFva7ewD07A==","signatures":[{"sig":"MEQCIEK28HVzs8hQV3YhW6FBkg54O+OcbWC5zk9TOsgMuOBDAiA2Rq4w6ZMMSyyEbbvefeU6NmGJ1VBFsGL9ckgss8oLAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83411},"main":"postcss.config.js","type":"module","gitHead":"40a48c4daf55823dfcb8717622693427eda6a1f3","private":false,"scripts":{"build":"npm run clean && npm run build:css:generated && tsup --config tsup.config.ts && npm run build:web:css","clean":"node -e \"const fs = require('node:fs'); for (const dir of ['.generated', 'web/dist', 'native/dist']) fs.rmSync(dir, { recursive: true, force: true })\"","pack:web":"npm pack --workspace sport-betting-ui-web","build:web":"npm run clean:web && npm run build:css:generated && cross-env TARGET=web tsup --config tsup.config.ts && npm run build:web:css","clean:web":"node -e \"require('node:fs').rmSync('web/dist', { recursive: true, force: true }); require('node:fs').rmSync('.generated', { recursive: true, force: true })\"","pack:native":"npm pack --workspace sport-betting-ui-native","publish:web":"npm publish --workspace sport-betting-ui-web","build:native":"npm run clean:native && cross-env TARGET=native tsup --config tsup.config.ts","clean:native":"node -e \"require('node:fs').rmSync('native/dist', { recursive: true, force: true })\"","build:web:css":"tailwindcss -i ../packages/styles/index.css -o ./web/dist/css/index.css","publish:native":"npm publish --workspace sport-betting-ui-native","build:css:generated":"tailwindcss -i ../packages/styles/index.css -o ./.generated/index.css"},"_npmUser":{"name":"dgithiomi","email":"dg@uniicy.com"},"workspaces":["web","native"],"_npmVersion":"11.18.0","description":"The web and React Native distributions are separate npm packages.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ms":"^2.1.3","mz":"^2.7.0","cac":"^6.7.14","mri":"^1.2.0","sax":"^1.6.0","ufo":"^1.6.4","clsx":"^2.1.1","fdir":"^6.5.0","gopd":"^1.2.0","jiti":"^2.7.0","mlly":"^1.8.2","once":"^1.4.0","util":"^0.12.5","uuid":"^7.0.3","acorn":"^8.16.0","chalk":"^4.1.2","color":"^4.2.3","debug":"^4.4.3","isexe":"^2.0.0","jsesc":"^3.1.0","json5":"^2.2.3","pathe":"^2.0.3","plist":"^3.1.1","slash":"^3.0.0","tempy":"^0.3.0","tslib":"^2.8.1","which":"^2.0.2","xcode":"^3.0.1","assert":"^2.1.0","badgin":"^1.2.3","cookie":"^1.1.1","dotenv":"^16.4.7","hasown":"^2.0.4","is-nan":"^1.3.2","joycon":"^3.1.1","lodash":"^4.18.1","motion":"^12.40.0","nanoid":"^3.3.12","rollup":"^4.60.4","semver":"^7.8.1","stylis":"^4.4.0","wrappy":"^1.0.2","xml2js":"^0.6.0","confbox":"^0.1.8","consola":"^3.4.2","csstype":"^3.2.3","esbuild":"^0.27.7","esprima":"^4.0.1","expo-av":"^14.0.7","flairup":"^1.0.0","is-glob":"^4.0.3","pirates":"^4.0.7","slugify":"^1.6.9","sucrase":"^3.35.1","tapable":"^2.3.3","thenify":"^3.3.1","zustand":"^5.0.14","boolbase":"^1.0.0","chokidar":"^4.0.3","css-what":"^6.2.2","domutils":"^3.2.2","escalade":"^3.2.0","for-each":"^0.3.5","fs-extra":"^9.1.0","fsevents":"^2.3.2","has-flag":"^4.0.0","inflight":"^1.0.6","inherits":"^2.0.4","is-regex":"^1.2.1","jsonfile":"^6.2.1","nano-css":"^5.6.2","path-key":"^3.1.1","react-is":"^16.13.1","readdirp":"^4.1.2","temp-dir":"^1.0.0","tinyexec":"^0.3.2","base64-js":"^1.5.1","call-bind":"^1.0.9","commander":"^4.1.1","es-errors":"^1.3.0","expo-font":"^12.0.10","get-proto":"^1.0.1","invariant":"^2.2.4","js-cookie":"^2.2.1","js-tokens":"^4.0.0","lilconfig":"^3.1.3","nth-check":"^2.1.1","object-is":"^1.1.6","parse-png":"^2.1.0","picomatch":"^4.0.4","pkg-types":"^1.3.1","react-use":"^17.6.0","tree-kill":"^1.2.2","ts-easing":"^0.2.0","warn-once":"^0.1.1","call-bound":"^1.0.4","classnames":"^2.5.1","color-name":"^1.1.4","concat-map":"^0.0.1","css-select":"^5.2.2","diacritics":"^1.3.0","domhandler":"^5.0.3","filter-obj":"^1.1.0","is-extglob":"^2.1.1","motion-dom":"^12.40.0","node-fetch":"^2.7.0","picocolors":"^1.1.1","prop-types":"^15.8.1","rtl-css-js":"^1.16.1","screenfull":"^5.2.0","source-map":"^0.7.6","stackframe":"^1.3.4","tinyglobby":"^0.2.16","xmlbuilder":"^15.1.1","ansi-styles":"^4.3.0","any-promise":"^1.3.0","big-integer":"^1.6.52","cross-spawn":"^7.0.6","detect-libc":"^2.1.2","expo-device":"^6.0.2","fraction.js":"^5.3.4","fs.realpath":"^1.0.0","graceful-fs":"^4.2.11","has-symbols":"^1.1.0","imurmurhash":"^0.1.4","is-arrayish":"^0.3.4","is-callable":"^1.2.7","object-keys":"^1.1.1","path-exists":"^4.0.0","signal-exit":"^3.0.7","thenify-all":"^1.6.0","yocto-queue":"^0.1.0","browserslist":"^4.28.2","caniuse-lite":"^1.0.30001793","color-string":"^1.9.1","comment-json":"^4.6.2","dunder-proto":"^1.0.1","is-arguments":"^1.2.0","is-plain-obj":"^2.1.0","jimp-compact":"^0.16.1","lightningcss":"^1.32.0","loose-envify":"^1.4.0","magic-string":"^0.30.21","motion-utils":"^12.39.0","query-string":"^7.1.3","react-freeze":"^1.0.4","react-router":"^7.17.0","resolve-from":"^5.0.0","simple-plist":"^1.3.1","ua-parser-js":"^0.7.41","undici-types":"^7.24.6","universalify":"^2.0.1","array-timsort":"^1.0.3","at-least-node":"^1.0.0","bplist-parser":"^0.3.1","color-convert":"^2.0.1","dotenv-expand":"^11.0.7","framer-motion":"^12.40.0","function-bind":"^1.1.2","get-intrinsic":"^1.3.0","load-tsconfig":"^0.2.5","merge-options":"^3.0.4","node-releases":"^2.0.46","object-assign":"^4.1.1","object.assign":"^4.1.7","shebang-regex":"^3.0.0","source-map-js":"^1.2.1","stacktrace-js":"^2.0.2","unique-string":"^1.0.0","bplist-creator":"^0.1.0","bundle-require":"^5.1.0","dom-serializer":"^2.0.0","domelementtype":"^2.3.0","expo-constants":"^16.0.2","is-typed-array":"^1.1.15","node-addon-api":"^7.1.1","simple-swizzle":"^0.2.4","split-on-first":"^1.1.0","stacktrace-gps":"^3.1.2","stream-buffers":"^2.2.0","supports-color":"^7.2.0","tailwind-merge":"^3.6.0","css-in-js-utils":"^3.1.0","es-object-atoms":"^1.1.2","fast-deep-equal":"^3.1.3","has-tostringtag":"^1.0.2","math-intrinsics":"^1.1.0","react-draggable":"^4.6.0","rn-emoji-picker":"^1.1.6","safe-regex-test":"^1.1.0","shebang-command":"^2.0.0","stack-generator":"^2.0.10","abort-controller":"^3.0.0","enhanced-resolve":"^5.22.0","expo-application":"^5.9.1","fontfaceobserver":"^2.3.0","path-is-absolute":"^1.0.1","react-native-svg":"^15.15.5","react-router-dom":"^7.17.0","toggle-selection":"^1.0.6","copy-to-clipboard":"^3.3.3","define-properties":"^1.2.1","event-target-shim":"^5.0.1","expo-image-loader":"^4.7.0","expo-image-picker":"^15.1.0","lines-and-columns":"^1.2.4","set-cookie-parser":"^2.7.2","strict-uri-encode":"^2.0.0","throttle-debounce":"^3.0.1","which-typed-array":"^1.1.22","convert-source-map":"^2.0.0","country-flag-icons":"^1.6.17","emoji-picker-react":"^4.19.1","error-stack-parser":"^2.1.4","es-define-property":"^1.0.1","expo-notifications":"^0.28.19","fast-shallow-equal":"^1.0.0","generator-function":"^2.0.1","i18n-iso-countries":"^7.14.0","postcss-load-config":"^6.0.1","require-from-string":"^2.0.2","set-function-length":"^1.2.2","use-latest-callback":"^0.2.6","crypto-random-string":"^1.0.0","decode-uri-component":"^0.2.2","define-data-property":"^1.1.4","electron-to-chromium":"^1.5.361","escape-string-regexp":"^4.0.0","hyphenate-style-name":"^1.1.0","postcss-value-parser":"^4.2.0","react-native-screens":"^3.31.1","react-native-webview":"^13.8.6","sport-betting-ui-web":"^1.3.5","ts-interface-checker":"^0.1.13","inline-style-prefixer":"^7.0.1","is-generator-function":"^1.1.2","set-harmonic-interval":"^1.0.1","available-typed-arrays":"^1.0.7","react-native-portalize":"^1.0.7","update-browserslist-db":"^1.2.3","call-bind-apply-helpers":"^1.0.2","hoist-non-react-statics":"^3.3.2","react-native-reanimated":"^3.10.1","sport-betting-ui-native":"^1.3.5","baseline-browser-mapping":"^2.10.32","fastest-stable-stringify":"^2.0.2","has-property-descriptors":"^1.0.2","resize-observer-polyfill":"^1.5.1","lightningcss-darwin-arm64":"^1.32.0","react-universal-interface":"^0.6.2","possible-typed-array-names":"^1.1.0","fix-dts-default-cjs-exports":"^1.0.1","react-native-gesture-handler":"^2.16.2","react-native-safe-area-context":"^4.10.5"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","postcss":"^8.5.12","cross-env":"^7.0.3","nativewind":"^4.1.23","typescript":"^5.9.3","@types/node":"^25.6.2","tailwindcss":"^4.2.4","@types/react":"^19.2.2","autoprefixer":"^10.5.0","@tailwindcss/cli":"^4.2.4","@types/react-dom":"^19.2.3","react-native-css-interop":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/sports-betting-ui_1.0.0_1786000750749_0.48629900494877676","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dgithiomi/sports-betting-ui","version":"1.0.1","license":"ISC","_id":"@dgithiomi/sports-betting-ui@1.0.1","maintainers":[{"name":"dgithiomi","email":"dg@uniicy.com"}],"bin":{"sports-betting-ui":"native/bin/sb-ui.mjs"},"dist":{"shasum":"76ffb26a26399a305919acdbe6bd3335a74fde9b","tarball":"https://registry.npmjs.org/@dgithiomi/sports-betting-ui/-/sports-betting-ui-1.0.1.tgz","fileCount":512,"integrity":"sha512-cdkvgL/rsOmx2Y8k+ZWApV6JwdV7YnpaNboU1n8ouwSG0hxUyg0INegTFmDPksj0vUq0e8EEucn9qi+KPIaRuw==","signatures":[{"sig":"MEUCIQCdWhWCShecfhycKZ7KRHsnYIOqTyv8AWMLh8VsnIl95AIgCqZJMdgnzJi+ATCWKcHxPe5ddmm11DT6yk1kTzloBYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14469079},"main":"./dist/web/index.mjs","type":"module","types":"./dist/web/index.d.ts","module":"./dist/web/index.mjs","browser":"./dist/web/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/web/index.d.ts","import":"./dist/web/index.mjs","default":"./dist/web/index.mjs","react-native":{"types":"./dist/native/index.d.ts","import":"./dist/native/index.mjs","require":"./dist/native/index.cjs"}},"./web":{"types":"./dist/web/index.d.ts","import":"./dist/web/index.mjs","default":"./dist/web/index.mjs"},"./web/*":{"types":"./dist/web/*.d.ts","import":"./dist/web/*.mjs","default":"./dist/web/*.mjs"},"./native":{"types":"./dist/native/index.d.ts","import":"./dist/native/index.mjs","require":"./dist/native/index.cjs"},"./native/*":{"types":"./dist/native/*.d.ts","import":"./dist/native/*.mjs","require":"./dist/native/*.cjs"},"./style.css":{"types":"./dist/web/style.d.ts","default":"./dist/web/style.css"},"./package.json":"./package.json","./nativewind-preset":"./native/nativewind-preset.cjs","./nativewind-content":"./native/nativewind-content.js","./nativewind-content.js":"./native/nativewind-content.js","./nativewind-preset.cjs":"./native/nativewind-preset.cjs"},"gitHead":"40a48c4daf55823dfcb8717622693427eda6a1f3","scripts":{"build":"npm run clean && npm run build:web:bundle && npm run build:native:bundle && npm run build:web:types && npm run build:css && npm run validate","check":"npm run build && npm run pack:check","clean":"node -e \"const fs = require('node:fs'); for (const dir of ['.generated', 'dist']) fs.rmSync(dir, { recursive: true, force: true })\"","prepack":"npm run build","validate":"node ./scripts/validate-package.mjs","build:css":"node ./scripts/prepare-css.mjs && tailwindcss -i ./.generated/library.css -o ./dist/web/style.css --minify","build:web":"npm run clean:web && npm run build:web:bundle && npm run build:web:types && npm run build:css","clean:web":"node -e \"require('node:fs').rmSync('dist/web', { recursive: true, force: true }); require('node:fs').rmSync('.generated', { recursive: true, force: true })\"","pack:check":"npm pack --dry-run --ignore-scripts","build:native":"npm run clean:native && npm run build:native:bundle","clean:native":"node -e \"require('node:fs').rmSync('dist/native', { recursive: true, force: true })\"","prepublishOnly":"npm run validate","build:web:types":"node ./scripts/generate-web-type-shims.mjs","build:web:bundle":"cross-env TARGET=web tsup --config tsup.config.ts","build:native:bundle":"cross-env TARGET=native tsup --config tsup.config.ts"},"_npmUser":{"name":"dgithiomi","email":"dg@uniicy.com"},"_npmVersion":"11.18.0","description":"Sports betting UI components for React web and React Native/Expo applications.","directories":{},"sideEffects":["./dist/web/style.css"],"_nodeVersion":"25.9.0","dependencies":{"zod":"^3.25.23","zustand":"^5.0.3","classnames":"^2.5.1","tailwind-merge":"^3.5.0","i18n-iso-countries":"^7.14.0","@tanstack/react-query":"^5.90.2"},"react-native":"./dist/native/index.mjs","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"expo":"^51.0.32","tsup":"^8.5.1","react":"18.2.0","motion":"^12.4.4","cross-env":"^7.0.3","react-dom":"18.2.0","react-use":"^17.6.0","nativewind":"^4.1.23","typescript":"^5.9.3","@types/node":"^22.0.0","expo-device":"~6.0.2","tailwindcss":"^4.2.4","@types/react":"^18.2.0","lucide-react":"^0.475.0","react-native":"0.74.5","framer-motion":"^12.4.4","react-draggable":"^4.5.0","rn-emoji-picker":"^1.1.6","@tailwindcss/cli":"^4.2.4","@types/react-dom":"^18.2.0","react-native-svg":"15.2.0","react-responsive":"^10.0.1","expo-image-picker":"~15.1.0","@expo/vector-icons":"^14.0.3","country-flag-icons":"^1.5.19","emoji-picker-react":"^4.12.0","react-helmet-async":"^3.0.0","@gorhom/bottom-sheet":"^4.6.4","react-native-portalize":"^1.0.7","react-native-reanimated":"~3.10.1","@react-navigation/drawer":"^6.7.2","@react-navigation/native":"^6.1.18","react-native-css-interop":"^0.2.1","react-native-gesture-handler":"~2.16.1","react-native-safe-area-context":"4.10.5","@forward-software/react-native-flags-kit":"^1.0.0","@react-native-async-storage/async-storage":"1.23.1"},"peerDependencies":{"react":"^18.2.0 || ^19.0.0","react-dom":"^18.2.0 || ^19.0.0","nativewind":"^4.1.23","expo-device":">=6 <58","react-native":">=0.74 <0.87","rn-emoji-picker":"^1.1.6","react-native-svg":">=15.2 <16","expo-image-picker":">=15 <58","@expo/vector-icons":"^14.0.3 || ^15.0.2","react-helmet-async":"^2.0.5 || ^3.0.0","@gorhom/bottom-sheet":"^4.6.4 || ^5.0.0","react-native-portalize":"^1.0.7","react-native-reanimated":"^3.10.1 || ^4.0.0","@react-navigation/drawer":"^6.7.2 || ^7.0.0","@react-navigation/native":"^6.1.18 || ^7.0.0","react-native-gesture-handler":">=2.16 <3","react-native-safe-area-context":">=4.10 <6","@forward-software/react-native-flags-kit":"^1.0.0","@react-native-async-storage/async-storage":"^1.23.1 || ^2.0.0"},"peerDependenciesMeta":{"react-dom":{"optional":true},"nativewind":{"optional":true},"expo-device":{"optional":true},"react-native":{"optional":true},"rn-emoji-picker":{"optional":true},"react-native-svg":{"optional":true},"expo-image-picker":{"optional":true},"@expo/vector-icons":{"optional":true},"react-helmet-async":{"optional":true},"@gorhom/bottom-sheet":{"optional":true},"react-native-portalize":{"optional":true},"react-native-reanimated":{"optional":true},"@react-navigation/drawer":{"optional":true},"@react-navigation/native":{"optional":true},"react-native-gesture-handler":{"optional":true},"react-native-safe-area-context":{"optional":true},"@forward-software/react-native-flags-kit":{"optional":true},"@react-native-async-storage/async-storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sports-betting-ui_1.0.1_1786021198810_0.10158054030417496","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dgithiomi/sports-betting-ui","version":"1.0.2","description":"Sports betting UI components for React web and React Native/Expo applications.","license":"ISC","type":"module","main":"./dist/web/index.mjs","module":"./dist/web/index.mjs","browser":"./dist/web/index.mjs","react-native":"./dist/native/index.mjs","types":"./dist/web/index.d.ts","exports":{".":{"react-native":{"types":"./dist/native/index.d.ts","import":"./dist/native/index.mjs","require":"./dist/native/index.cjs"},"types":"./dist/web/index.d.ts","import":"./dist/web/index.mjs","default":"./dist/web/index.mjs"},"./web":{"types":"./dist/web/index.d.ts","import":"./dist/web/index.mjs","default":"./dist/web/index.mjs"},"./web/*":{"types":"./dist/web/*.d.ts","import":"./dist/web/*.mjs","default":"./dist/web/*.mjs"},"./native":{"types":"./dist/native/index.d.ts","import":"./dist/native/index.mjs","require":"./dist/native/index.cjs"},"./native/*":{"types":"./dist/native/*.d.ts","import":"./dist/native/*.mjs","require":"./dist/native/*.cjs"},"./style.css":{"types":"./dist/web/style.d.ts","default":"./dist/web/style.css"},"./nativewind-content":"./native/nativewind-content.js","./nativewind-content.js":"./native/nativewind-content.js","./nativewind-preset":"./native/nativewind-preset.cjs","./nativewind-preset.cjs":"./native/nativewind-preset.cjs","./package.json":"./package.json"},"bin":{"sports-betting-ui":"native/bin/sb-ui.mjs"},"sideEffects":["./dist/web/style.css"],"publishConfig":{"access":"public"},"engines":{"node":">=18"},"scripts":{"clean":"node -e \"const fs = require('node:fs'); for (const dir of ['.generated', 'dist']) fs.rmSync(dir, { recursive: true, force: true })\"","clean:web":"node -e \"require('node:fs').rmSync('dist/web', { recursive: true, force: true }); require('node:fs').rmSync('.generated', { recursive: true, force: true })\"","clean:native":"node -e \"require('node:fs').rmSync('dist/native', { recursive: true, force: true })\"","build":"npm run clean && npm run build:web:bundle && npm run build:native:bundle && npm run build:web:types && npm run build:css && npm run validate","build:web":"npm run clean:web && npm run build:web:bundle && npm run build:web:types && npm run build:css","build:native":"npm run clean:native && npm run build:native:bundle","build:web:bundle":"cross-env TARGET=web tsup --config tsup.config.ts","build:native:bundle":"cross-env TARGET=native tsup --config tsup.config.ts","build:web:types":"node ./scripts/generate-web-type-shims.mjs","build:css":"node ./scripts/prepare-css.mjs && tailwindcss -i ./.generated/library.css -o ./dist/web/style.css --minify","validate":"node ./scripts/validate-package.mjs","check":"npm run build && npm run pack:check","pack:check":"npm pack --dry-run --ignore-scripts","prepack":"npm run build","prepublishOnly":"npm run validate"},"dependencies":{"@tanstack/react-query":"^5.90.2","classnames":"^2.5.1","i18n-iso-countries":"^7.14.0","tailwind-merge":"^3.5.0","zod":"^3.25.23","zustand":"^5.0.3"},"peerDependencies":{"@expo/vector-icons":"^14.0.3 || ^15.0.2","@forward-software/react-native-flags-kit":"^1.0.0","@gorhom/bottom-sheet":"^4.6.4 || ^5.0.0","@react-native-async-storage/async-storage":"^1.23.1 || ^2.0.0","@react-navigation/drawer":"^6.7.2 || ^7.0.0","@react-navigation/native":"^6.1.18 || ^7.0.0","expo-device":">=6 <58","expo-image-picker":">=15 <58","nativewind":"^4.1.23","react":"^18.2.0 || ^19.0.0","react-dom":"^18.2.0 || ^19.0.0","react-native":">=0.74 <0.87","react-native-gesture-handler":">=2.16 <3","react-native-portalize":"^1.0.7","react-native-reanimated":"^3.10.1 || ^4.0.0","react-native-safe-area-context":">=4.10 <6","react-native-svg":">=15.2 <16","rn-emoji-picker":"^1.1.6"},"peerDependenciesMeta":{"@expo/vector-icons":{"optional":true},"@forward-software/react-native-flags-kit":{"optional":true},"@gorhom/bottom-sheet":{"optional":true},"@react-native-async-storage/async-storage":{"optional":true},"@react-navigation/drawer":{"optional":true},"@react-navigation/native":{"optional":true},"expo-device":{"optional":true},"expo-image-picker":{"optional":true},"nativewind":{"optional":true},"react-dom":{"optional":true},"react-native":{"optional":true},"react-native-gesture-handler":{"optional":true},"react-native-portalize":{"optional":true},"react-native-reanimated":{"optional":true},"react-native-safe-area-context":{"optional":true},"react-native-svg":{"optional":true},"rn-emoji-picker":{"optional":true}},"devDependencies":{"@expo/vector-icons":"^14.0.3","@forward-software/react-native-flags-kit":"^1.0.0","@gorhom/bottom-sheet":"^4.6.4","@react-native-async-storage/async-storage":"1.23.1","@react-navigation/drawer":"^6.7.2","@react-navigation/native":"^6.1.18","@tailwindcss/cli":"^4.2.4","@types/node":"^22.0.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","cross-env":"^7.0.3","country-flag-icons":"^1.5.19","emoji-picker-react":"^4.12.0","expo":"^51.0.32","expo-device":"~6.0.2","expo-image-picker":"~15.1.0","framer-motion":"^12.4.4","lucide-react":"^0.475.0","motion":"^12.4.4","nativewind":"^4.1.23","react":"18.2.0","react-dom":"18.2.0","react-draggable":"^4.5.0","react-helmet-async":"^3.0.0","react-native":"0.74.5","react-native-css-interop":"^0.2.1","react-native-gesture-handler":"~2.16.1","react-native-portalize":"^1.0.7","react-native-reanimated":"~3.10.1","react-native-safe-area-context":"4.10.5","react-native-svg":"15.2.0","react-responsive":"^10.0.1","react-use":"^17.6.0","rn-emoji-picker":"^1.1.6","tailwindcss":"^4.2.4","tsup":"^8.5.1","typescript":"^5.9.3"},"gitHead":"40a48c4daf55823dfcb8717622693427eda6a1f3","_id":"@dgithiomi/sports-betting-ui@1.0.2","_nodeVersion":"25.9.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-8fdwunoBaENU2o1DnP5o6HIoX7DPoOQVuwpoaKsZcKxsIeN1kHc79kRx+LFA8Fiig+DOg8J3JhxPVG7FWHn00A==","shasum":"3370d28e0567a49b88342559e3b7943a63e985b3","tarball":"https://registry.npmjs.org/@dgithiomi/sports-betting-ui/-/sports-betting-ui-1.0.2.tgz","fileCount":512,"unpackedSize":14506629,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCEfFR5DgQlJeAzPIGO7/mZkWUP/VXNqop6Az6gLKGKUgIhAIVMtZwgEr13O4Gsth/1fF6fp+EByEQtmBKtO5r8R9Ft"}]},"_npmUser":{"name":"dgithiomi","email":"dg@uniicy.com"},"directories":{},"maintainers":[{"name":"dgithiomi","email":"dg@uniicy.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sports-betting-ui_1.0.2_1786109805261_0.48670634210322694"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T07:19:10.559Z","modified":"2026-08-07T13:36:45.675Z","1.0.0":"2026-08-06T07:19:10.894Z","1.0.1":"2026-08-06T12:59:59.027Z","1.0.2":"2026-08-07T13:36:45.489Z"},"license":"ISC","description":"Sports betting UI components for React web and React Native/Expo applications.","maintainers":[{"name":"dgithiomi","email":"dg@uniicy.com"}],"readme":"# @dgithiomi/sports-betting-ui\n\nReusable sports-betting UI components for React web and React Native/Expo applications.\n\nThis is one npm package with platform-specific entry points. It does not publish or install the old `sport-betting-ui-web` and `sport-betting-ui-native` packages.\n\n## Install\n\n```bash\nnpm install @dgithiomi/sports-betting-ui\n```\n\nReact is the only required peer. Web- and native-only packages are optional peers so installing the web build cannot force React Native or an incompatible Expo SDK into an application.\n\n## Web\n\nImport the stylesheet once from the web application entry:\n\n`DynamicHelmet` includes its small Helmet implementation dependency in the web bundle. Consumers do not install `react-helmet-async` separately; React itself remains a peer so the application and library share one React instance.\n\n```tsx\nimport '@dgithiomi/sports-betting-ui/style.css';\nimport { Button, ThemeProvider } from '@dgithiomi/sports-betting-ui/web';\n\nexport function Example() {\n    return (\n        <ThemeProvider theme=\"light\">\n            <Button label=\"Continue\" variant=\"primary\" size=\"medium\" />\n        </ThemeProvider>\n    );\n}\n```\n\nThe package root also defaults to the web build, but the `/web` entry is recommended because it makes the target unambiguous.\n\nFor production applications, prefer an individual component entry when possible:\n\n```tsx\nimport { Button } from '@dgithiomi/sports-betting-ui/web/button';\n```\n\nThe individual web entries share internal ESM chunks and keep unrelated components out of the consuming application's bundle.\n\n`DynamicHelmet` accepts an optional `pathname` and no longer requires React Router. `NavMenu` renders standard links and no longer owns routing. Applications can therefore choose their own router without receiving a second or conflicting router version.\n\n## React Native and Expo\n\nUse the explicit native entry point:\n\n```tsx\nimport { Button, ThemeProvider } from '@dgithiomi/sports-betting-ui/native';\n```\n\nFor smaller dependency and startup surfaces, prefer individual component entries:\n\n```tsx\nimport { Button } from '@dgithiomi/sports-betting-ui/native/button';\nimport { Post } from '@dgithiomi/sports-betting-ui/native/post';\n```\n\nInstall NativeWind and the optional peers required by the components you use. Let `npx expo install` select versions compatible with the application's Expo SDK; do not copy the library's development versions into a consuming application.\n\nThe styled native components require NativeWind. Components that draw icons or progress graphics—including `Button`, `ProgressBar`, and `SplitLoader`—also require `react-native-svg`:\n\n```bash\nnpm install nativewind\nnpx expo install react-native-svg\n```\n\nOther integrations remain component-specific. For example, install React Navigation only when using navigation components, Async Storage only when using persisted state, and the emoji picker only when using the picker. npm reports these integrations as optional peers instead of installing a second copy of the host application's native stack.\n\nThen run the opt-in setup tool from the Expo application root:\n\n```bash\nnpx sports-betting-ui setup-native\nnpx sports-betting-ui setup-native --write\nnpx expo start -c\n```\n\nThe first command is a dry run. The `--write` command can create or patch Tailwind, Babel, Metro, `global.css`, and the application CSS import. It does not run during installation.\n\nManual Tailwind configuration uses the scoped package name:\n\n```js\nmodule.exports = {\n    content: [\n        './App.{js,jsx,ts,tsx}',\n        './app/**/*.{js,jsx,ts,tsx}',\n        './components/**/*.{js,jsx,ts,tsx}',\n        './src/**/*.{js,jsx,ts,tsx}',\n        './node_modules/@dgithiomi/sports-betting-ui/nativewind-content.js',\n    ],\n    presets: [\n        require('nativewind/preset'),\n        require('@dgithiomi/sports-betting-ui/nativewind-preset'),\n    ],\n    theme: { extend: {} },\n    plugins: [],\n};\n```\n\nDo not scan `dist/native` in Tailwind content. The small `nativewind-content.js` manifest exists to avoid generating an unnecessarily large NativeWind registry.\n\n## Native video rendering\n\nThe library does not depend on `expo-av` or select a video package for the host application. Supply the native `Post` component with a renderer using the video library supported by your Expo SDK:\n\n```tsx\nimport { VideoView, useVideoPlayer } from 'expo-video';\nimport type { PostNativeVideoRenderProps } from '@dgithiomi/sports-betting-ui/native/post';\n\nfunction PostVideo({ uri, aspectRatio, accessibilityLabel }: PostNativeVideoRenderProps) {\n    const player = useVideoPlayer(uri, (instance) => {\n        instance.loop = true;\n        instance.muted = true;\n        instance.play();\n    });\n\n    return (\n        <VideoView\n            player={player}\n            contentFit=\"cover\"\n            nativeControls={false}\n            accessibilityLabel={accessibilityLabel}\n            style={{ width: '100%', height: '100%', aspectRatio }}\n        />\n    );\n}\n\n<Post {...postProps} renderVideo={(props) => <PostVideo {...props} />} />;\n```\n\n## Maintainer workflow\n\nThe package is a root npm workspace and uses the monorepo's single lockfile.\n\n```bash\nnpm install\nnpm run check:package\nnpm run pack:package\n```\n\nInspect the tarball produced by `pack:package`, then publish from the repository root:\n\n```bash\nnpm publish --workspace @dgithiomi/sports-betting-ui --access public\n```\n\nThe build creates `dist/web` and `dist/native`, validates all declared exports and external imports, and runs automatically before packing or publishing.\n","readmeFilename":"README.md"}