{"id":46026434,"url":"https://github.com/snapchat/valdi_widgets","last_synced_at":"2026-03-01T03:01:45.421Z","repository":{"id":324100184,"uuid":"1092032267","full_name":"Snapchat/Valdi_Widgets","owner":"Snapchat","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-09T23:36:06.000Z","size":246,"stargazers_count":41,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-10T02:36:03.251Z","etag":null,"topics":["typescript","valdi"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Snapchat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-07T22:12:51.000Z","updated_at":"2026-02-09T23:28:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Snapchat/Valdi_Widgets","commit_stats":null,"previous_names":["snapchat/valdi_widgets"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Snapchat/Valdi_Widgets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snapchat%2FValdi_Widgets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snapchat%2FValdi_Widgets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snapchat%2FValdi_Widgets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snapchat%2FValdi_Widgets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Snapchat","download_url":"https://codeload.github.com/Snapchat/Valdi_Widgets/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snapchat%2FValdi_Widgets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29959284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["typescript","valdi"],"created_at":"2026-03-01T03:01:44.745Z","updated_at":"2026-03-01T03:01:45.406Z","avatar_url":"https://github.com/Snapchat.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Valdi Widgets\n\nUI widgets, styles, and patterns for apps built with [Valdi](https://github.com/Snapchat/Valdi). This repo depends on Valdi via Bazel and provides reusable components (buttons, cells, navigation, sheets, inputs, etc.) and a playground app.\n\n## Repo structure\n\n| Path | Description |\n|------|-------------|\n| `valdi_modules/widgets/` | Widget components (buttons, cells, inputs, pickers, scroll, tabs, etc.) |\n| `valdi_modules/navigation/` | Navigation APIs and page components |\n| `valdi_modules/navigation_internal/` | Internal navigation support |\n| `valdi_modules/valdi_standalone_ui/` | Standalone UI (modals, split view, etc.) |\n| `valdi_modules/playground/` | Example app (playground) |\n| `scripts/` | Helper scripts to build and run the playground |\n| `.cursor/rules/` | Cursor/IDE rules for Valdi (TypeScript, Bazel, testing) |\n| `docs/` | Additional documentation |\n\nThe Valdi framework (compiler, runtimes) is pulled in as an external dependency in `WORKSPACE` (e.g. `beta-0.0.2`).\n\n## Using Valdi Widgets in your Valdi app\n\nAdd to your project’s `WORKSPACE`:\n\n```python\nhttp_archive(\n    name = \"valdi_widgets\",\n    strip_prefix = \"Valdi_Widgets-\u003cTAG\u003e\",  # e.g. Valdi_Widgets-beta-0.0.1\n    url = \"https://github.com/Snapchat/Valdi_Widgets/archive/refs/tags/\u003cTAG\u003e.tar.gz\",\n)\n```\n\nIn your module’s `BUILD.bazel`, add to `valdi_module` `deps`:\n\n```python\n\"@valdi_widgets//valdi_modules/widgets\",\n# and optionally:\n# \"@valdi_widgets//valdi_modules/navigation\",\n# \"@valdi_widgets//valdi_modules/valdi_standalone_ui\",\n```\n\nImport in TypeScript:\n\n```typescript\nimport { CoreButton } from 'widgets/src/components/button/CoreButton';\n```\n\n## Development\n\n### Requirements\n\n- [Bazel](https://bazel.build/) (or Bazelisk); see `.bazelversion`\n- Valdi is fetched automatically via `WORKSPACE` (`http_archive`)\n\n### Run tests\n\nAll tests (Bazel):\n\n```bash\nbazel test //valdi_modules/widgets:test //valdi_modules/navigation:test //valdi_modules/valdi_standalone_ui:test //valdi_modules/navigation_internal:test //valdi_modules/playground:test\n```\n\n### Run the playground\n\n- **macOS:** `./scripts/bazel_macos_run.sh` — builds and runs the macOS app\n- **iOS Simulator:** `./scripts/bazel_ios_install.sh` — builds and installs the iOS app on the booted simulator\n- **Android:** `./scripts/bazel_android_install.sh` — builds the APK and installs via adb\n- **Hot reload:** `./scripts/bazel_hotreload.sh` — builds and runs the hot-reload runner\n\n### CI\n\nTests run on GitHub Actions (`.github/workflows/test.yml`) on:\n\n- Pull requests and pushes to `main`\n- Publishing a release or pre-release\n\n## Documentation\n\n- **[AGENTS.md](AGENTS.md)** — Guide for AI assistants (Valdi patterns, anti-React, build/test)\n- **[.cursor/rules/](.cursor/rules/README.md)** — Cursor rules (TypeScript/TSX, Bazel, testing)\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** — How to contribute\n- **Valdi framework** — [Valdi](https://github.com/Snapchat/Valdi), [Valdi docs](https://github.com/Snapchat/Valdi/tree/main/docs)\n\n## License\n\nSee [LICENSE.md](LICENSE.md). Code of conduct: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnapchat%2Fvaldi_widgets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnapchat%2Fvaldi_widgets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnapchat%2Fvaldi_widgets/lists"}