{"_id":"@bikeindex/time-localizer","_rev":"6-74a56f4c27314e2e4497a255b171f3f1","name":"@bikeindex/time-localizer","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@bikeindex/time-localizer","version":"0.1.0","license":"MIT","_id":"@bikeindex/time-localizer@0.1.0","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"homepage":"https://github.com/bikeindex/binxtils#readme","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"dist":{"shasum":"0ac74dd34a0c688c614434bcd23c8deab9216ad3","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.1.0.tgz","fileCount":4,"integrity":"sha512-cZ6YWq1d6q4Mn0msLX88bk5qemaS6+Z5wdMabIGO2viIJgDnUrRrV1zFkSeBJRncC4vkJCxKY9wPDRSqLkuk2Q==","signatures":[{"sig":"MEUCIGj/MIH4VGnJsYZzny5sttMoJLOoFYUvU8/WTq4aYx2nAiEAqrbczcGalgr971z3zVscxCJm1nPyo+a3WcNLF3VqFHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10975},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"9bfe479b03f09b23f429316b3f0707bb653e9f5d","scripts":{"test":"vitest run"},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"repository":{"url":"git+https://github.com/bikeindex/binxtils.git","type":"git"},"_npmVersion":"11.7.0","description":"Localizes time elements to the user's timezone using Luxon","directories":{},"_nodeVersion":"22.17.1","dependencies":{"luxon":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","vitest":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/time-localizer_0.1.0_1774320608989_0.22172633615848003","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bikeindex/time-localizer","version":"0.1.1","license":"MIT","_id":"@bikeindex/time-localizer@0.1.1","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"homepage":"https://github.com/bikeindex/binxtils#readme","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"dist":{"shasum":"589933b845a442e4cda45314c7d47fcc40e838f5","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.1.1.tgz","fileCount":4,"integrity":"sha512-xf41hmvx8CY2LVmEiOmcp5gm2WieMw/5foRc1Cp++Pv/W7sBNawhXtK6ZgYpztvxtnIE7hSyELqarwDMKRpZpg==","signatures":[{"sig":"MEUCIQDsqdS4add8tOrHETJ+wG2ridWi2hK0bKN60IDdVsEUBwIgc3sbyD723dgkwXfjYPEso/onPdrZlHUOAsuuN75mmO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10463},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"f35843e7d59a1d1f2fe2571a3a1608617b6f936e","scripts":{"test":"vitest run"},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"repository":{"url":"git+https://github.com/bikeindex/binxtils.git","type":"git"},"_npmVersion":"11.7.0","description":"Localizes time elements to the user's timezone using Luxon","directories":{},"_nodeVersion":"22.17.1","dependencies":{"luxon":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","vitest":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/time-localizer_0.1.1_1774321196300_0.7554493735411747","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bikeindex/time-localizer","version":"0.2.0","license":"MIT","_id":"@bikeindex/time-localizer@0.2.0","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"homepage":"https://github.com/bikeindex/binxtils#readme","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"dist":{"shasum":"9ea4b21fac5854a9f196232973715428b4773d7e","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.2.0.tgz","fileCount":4,"integrity":"sha512-BqY9qnvt8j1TPORW3+/vxCA5XKtFDga4A7Nbua70nkXoYvZOzpleWuB3qNegavZ7kXrFK0BzXyujQ9nmeB6P1w==","signatures":[{"sig":"MEUCIEKn8MK56PYr3ZjRKHok9/NAr+BmeFza6udbW3B4jxUaAiEAjguY7+C42Pj08zmT8jMhMtbu/XuhWgYJvklYvody1UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76870},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"d6b6f67a44b038a7f4d65f3eb83e2bc454ecbedc","scripts":{"test":"vitest run","build":"esbuild index.js --bundle --format=esm --minify --outfile=dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"repository":{"url":"git+https://github.com/bikeindex/binxtils.git","type":"git"},"_npmVersion":"11.12.1","description":"Localizes time elements to the user's timezone using Luxon","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","luxon":"^3.0.0","vitest":"^3.0.0","esbuild":"^0.28.0"},"_npmOperationalInternal":{"tmp":"tmp/time-localizer_0.2.0_1776203367655_0.09593940210596874","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bikeindex/time-localizer","version":"0.2.1","license":"MIT","_id":"@bikeindex/time-localizer@0.2.1","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"homepage":"https://github.com/bikeindex/binxtils#readme","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"dist":{"shasum":"b24b1aa506bcd01f40c657bb37c28de66359893d","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.2.1.tgz","fileCount":4,"integrity":"sha512-QuXUgbwasGQexF4/WgGVHO8tIXDNZpK3g8jZwmOyazns8eIitBxeXa2P8UGBIEIbYZgMhULUlhiYrWUuo4hIuw==","signatures":[{"sig":"MEYCIQCJUYAbsjtCraDqGuvSgZYFtj+FLs5IVfrXFGv+q/nosgIhAJga5f5XN+t/VEIXArv3mXXGFz98/JlpEZB68e8Hbukr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78443},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"d1d6286ac28cd7260544387b6ddba56037f2dd93","scripts":{"test":"vitest run","build":"esbuild index.js --bundle --format=esm --minify --outfile=dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"repository":{"url":"git+https://github.com/bikeindex/binxtils.git","type":"git"},"_npmVersion":"11.12.1","description":"Localizes time elements to the user's timezone using Luxon","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","luxon":"^3.0.0","vitest":"^3.0.0","esbuild":"^0.28.0"},"_npmOperationalInternal":{"tmp":"tmp/time-localizer_0.2.1_1777152375848_0.6760059942182781","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bikeindex/time-localizer","version":"0.3.0","license":"MIT","_id":"@bikeindex/time-localizer@0.3.0","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"homepage":"https://github.com/bikeindex/binxtils#readme","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"dist":{"shasum":"68d77120a945129f8984470ff5d21805aec583bb","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.3.0.tgz","fileCount":4,"integrity":"sha512-thdcX1z81DrD5Y11iIDUUXUn1XElRqNSmT0M1BDW/be8yzl+/FqxOpcqJexXmOO/WwzEx/3joO/GXzbtheIZ3w==","signatures":[{"sig":"MEUCIQCR/g6IPIqDDTU9BqXxJgUQ3u/YwQFH5IUgs/DR9bC7awIgWRUiGRx6QA9or7UskyFL9pUM13BavGDQ9b7Pj3YgCAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7754},"main":"dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"30876b0217415ce12e346e28823c4da76e65ffd5","scripts":{"test":"vitest run","build":"esbuild index.js --bundle --format=esm --minify --external:luxon --outfile=dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"repository":{"url":"git+https://github.com/bikeindex/binxtils.git","type":"git"},"_npmVersion":"11.12.1","description":"Localizes time elements to the user's timezone using Luxon","directories":{},"_nodeVersion":"22.17.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^26.0.0","luxon":"^3.0.0","vitest":"^3.0.0","esbuild":"^0.28.0"},"peerDependencies":{"luxon":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/time-localizer_0.3.0_1781118136719_0.4960556265831819","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bikeindex/time-localizer","version":"0.4.0","description":"Localizes time elements to the user's timezone using Luxon","type":"module","main":"dist/index.js","exports":{".":"./dist/index.js","./bundle":"./dist/index.bundle.js"},"scripts":{"build":"npm run build:esm && npm run build:bundle","build:esm":"esbuild index.js --bundle --format=esm --minify --external:luxon --outfile=dist/index.js","build:bundle":"esbuild index.js --bundle --format=esm --minify --outfile=dist/index.bundle.js","prepublishOnly":"npm run build","test":"vitest run"},"peerDependencies":{"luxon":"^3.0.0"},"devDependencies":{"esbuild":"^0.28.0","jsdom":"^26.0.0","luxon":"^3.0.0","vitest":"^3.0.0"},"publishConfig":{"access":"public"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bikeindex/binxtils.git"},"gitHead":"7c81df5cbf81df62ae5f2ba575d622ba32afa4af","_id":"@bikeindex/time-localizer@0.4.0","bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"homepage":"https://github.com/bikeindex/binxtils#readme","_nodeVersion":"22.17.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-aOSEBIYHSflCzk7vfFwXD6VEXvjbR0KQ3yr3kfv+tUCGL8f0zU4+LzinFNP6SHtjdirmZCw8dp0O/nOug4KRYA==","shasum":"61494eb111b958300841867aef02db92364e9aa3","tarball":"https://registry.npmjs.org/@bikeindex/time-localizer/-/time-localizer-0.4.0.tgz","fileCount":5,"unpackedSize":82799,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEmxGNaU74zcxsot3xLxWgSSuaOzwv2gjdZQ8ELjdTcQAiAqgHNiRW0ndby5LKz4503FcStsrb77/T6Ou1BbRCiktA=="}]},"_npmUser":{"name":"sethherr","email":"seth.william.herr@gmail.com"},"directories":{},"maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/time-localizer_0.4.0_1784997576795_0.15016880414439404"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-24T02:50:08.908Z","modified":"2026-07-25T16:39:37.099Z","0.1.0":"2026-03-24T02:50:09.136Z","0.1.1":"2026-03-24T02:59:56.426Z","0.2.0":"2026-04-14T21:49:27.782Z","0.2.1":"2026-04-25T21:26:15.997Z","0.3.0":"2026-06-10T19:02:16.889Z","0.4.0":"2026-07-25T16:39:36.924Z"},"bugs":{"url":"https://github.com/bikeindex/binxtils/issues"},"license":"MIT","homepage":"https://github.com/bikeindex/binxtils#readme","repository":{"type":"git","url":"git+https://github.com/bikeindex/binxtils.git"},"description":"Localizes time elements to the user's timezone using Luxon","maintainers":[{"name":"sethherr","email":"seth.william.herr@gmail.com"}],"readme":"# Binxtils\n\nBike Index utility modules. Install it by adding the following line to your Gemfile\n\n```ruby\ngem \"binxtils\"\n```\n\n## Modules\n\n- **Binxtils::InputNormalizer** - Sanitize and normalize user input strings\n- **Binxtils::TimeParser** - Parse fuzzy time/date strings into `Time` objects\n- **Binxtils::TimeZoneParser** - Parse and resolve time zone strings\n\n### Functionable modules\n\nThese modules use [Functionable](https://github.com/sethherr/functionable) and are called as class methods:\n\n```ruby\nBinxtils::TimeParser.parse(\"next thursday\")\nBinxtils::InputNormalizer.string(\"  Some Input  \")\nBinxtils::TimeZoneParser.parse(\"Eastern Time\")\n```\n\n### Rails concerns\n\n- **Binxtils::SetPeriod** - Controller concern for time period filtering (hour, day, week, month, year, all, custom). Parses period params, manages timezones, and sets `@time_range`.\n- **Binxtils::SortableTable** - Controller concern providing `sort_column` and `sort_direction` helpers with configurable defaults.\n- **Binxtils::SortableHelper** - View helper for rendering sortable column header links with active-state indicators.\n\nInclude them in your controllers and helpers:\n\n```ruby\nclass ApplicationController < ActionController::Base\n  include Binxtils::SetPeriod\n  include Binxtils::SortableTable\n\n  # Optionally configure the earliest date for the \"all\" period\n  self.default_earliest_time = Time.at(1714460400).freeze\nend\n\nmodule ApplicationHelper\n  include Binxtils::SortableHelper\nend\n\n# Optionally extend the permitted search params (e.g. in an initializer)\nBinxtils::SortableHelper.extra_search_keys = [:organization_id, query_items: []]\n```\n\n`SortableTable` requires a `sortable_columns` method in your controller:\n\n```ruby\nclass BikesController < ApplicationController\n  def sortable_columns\n    %w[created_at updated_at manufacturer_id]\n  end\nend\n```\n\n## npm package\n\nThis repo also publishes `@bikeindex/time-localizer`, an npm package for localizing time elements in the browser. It ships two builds of the same source:\n\n| Build | Luxon | Use when |\n| --- | --- | --- |\n| `dist/index.js` (default) | external — install it yourself | You have a bundler. Luxon stays deduped with your own copy, so `Settings.defaultLocale`, `Settings.now` etc. apply to both. |\n| `dist/index.bundle.js` | bundled in | You have no bundler (e.g. importmap-rails). One request, nothing to resolve. |\n\nImport the default as `@bikeindex/time-localizer` and the standalone as `@bikeindex/time-localizer/bundle`, or reference either file path directly over a CDN.\n\nDon't use the bundled build alongside your own Luxon: you'd ship two copies, and because Luxon's `Settings` are module-scoped, your global config would silently apply to only one of them.\n\nTo publish a new version: update the version in `package.json`, then run `npm publish` from the repo root (requires npm login with access to the `@bikeindex` scope). The `prepublishOnly` script builds both artifacts before publishing.\n\n## Releasing\n\nFrom the `main` branch, run `bin/release` with a version number:\n\n```\nbin/release 0.3.0\n```\n\nThis bumps the version, commits, tags, pushes, builds and publishes the gem to RubyGems, and creates a GitHub release.\n","readmeFilename":"README.md"}