{"id":23709914,"url":"https://github.com/nxtlvlsoftware/alpine-typescript","last_synced_at":"2025-10-26T04:14:13.329Z","repository":{"id":194264193,"uuid":"685422663","full_name":"NxtLvLSoftware/alpine-typescript","owner":"NxtLvLSoftware","description":"Write your Alpine.js components in Typescript","archived":false,"fork":false,"pushed_at":"2024-12-11T03:15:14.000Z","size":1066,"stargazers_count":3,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2024-12-11T03:18:21.182Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://nxtlvlsoftware.github.io/alpine-typescript/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NxtLvLSoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-31T07:37:53.000Z","updated_at":"2024-12-11T03:15:18.000Z","dependencies_parsed_at":"2024-12-11T03:18:26.305Z","dependency_job_id":"f238435e-afdf-4282-908b-a0e7ff3dc8b9","html_url":"https://github.com/NxtLvLSoftware/alpine-typescript","commit_stats":null,"previous_names":["nxtlvlsoftware/alpine-typescript"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NxtLvLSoftware%2Falpine-typescript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NxtLvLSoftware%2Falpine-typescript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NxtLvLSoftware%2Falpine-typescript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NxtLvLSoftware%2Falpine-typescript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NxtLvLSoftware","download_url":"https://codeload.github.com/NxtLvLSoftware/alpine-typescript/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231902080,"owners_count":18443330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-12-30T18:58:54.491Z","updated_at":"2025-10-26T04:14:08.300Z","avatar_url":"https://github.com/NxtLvLSoftware.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://nxtlvlsoftware.github.io/alpine-typescript/\"\u003e\u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/NxtLvLSoftware/alpine-typescript/dist/.github/banner-dark.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/NxtLvLSoftware/alpine-typescript/dist/.github/banner-light.png\"\u003e\n    \u003cimg alt=\"Project Banner (@nxtlvlsoftware/alpine-typescript)\" src=\"https://raw.githubusercontent.com/NxtLvLSoftware/alpine-typescript/dist/.github/banner-light.png\" width=\"350\" height=\"160\" style=\"max-width: 100%;\"\u003e\n  \u003c/picture\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n  Alpine.js Typescript Components\n\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003e\n  Define your component logic in classes with added type safety.\n\u003c/h4\u003e\n\n\u003ch6 align=\"center\"\u003e\n  Inspired by \u003ca href=\"https://github.com/archtechx/alpine-typescript\"\u003earchtechx/alpine-typescript\u003c/a\u003e.\n\u003c/h6\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/NxtLvlSoftware/alpine-typescript/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/NxtLvlSoftware/alpine-typescript/ci.yml?branch=dev\" alt=\"Build Status\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@nxtlvlsoftware/alpine-typescript\"\u003e\u003cimg src=\"https://img.shields.io/npm/dt/%40nxtlvlsoftware/alpine-typescript\" alt=\"Total Downloads\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/NxtLvlSoftware/alpine-typescript/releases\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/%40nxtlvlsoftware/alpine-typescript\" alt=\"Latest Release\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/NxtLvlSoftware/alpine-typescript/blob/dev/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/%40nxtlvlsoftware%2Falpine-typescript\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n\u003cdetails\u003e\n  \u003csummary align=\"center\"\u003e\n    Table of Contents\n  \u003c/summary\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n      \u003ca href=\"https://nxtlvlsoftware.github.io/alpine-typescript\"\u003e\n        Documentation\n      \u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"https://nxtlvlsoftware.github.io/alpine-typescript/example/\"\u003e\n        Example\n      \u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#installation\"\u003e\n        Installation\n      \u003c/a\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#usage\"\u003e\n        Usage\n      \u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n          \u003ca href=\"#in-projects\"\u003e\n            Projects\n          \u003c/a\u003e\n          \u003cul\u003e\n            \u003cli\u003e\n              \u003ca href=\"#project-setup\"\u003e\n                Setup\n              \u003c/a\u003e\n            \u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\n          \u003ca href=\"#in-packages\"\u003e\n            Packages\n          \u003c/a\u003e\n          \u003cul\u003e\n            \u003cli\u003e\n              \u003ca href=\"#packages-setup\"\u003e\n                Setup\n              \u003c/a\u003e\n            \u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\n          \u003ca href=\"#defining-components\"\u003e\n            Defining Components\n          \u003c/a\u003e\n          \u003cul\u003e\n            \u003cli\u003e\n              \u003ca href=\"#generic-types\"\u003e\n                Any Types\n              \u003c/a\u003e\n            \u003c/li\u003e\n            \u003cli\u003e\n              \u003ca href=\"#typescript-classes\"\u003e\n                Classes\n              \u003c/a\u003e\n            \u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\n          \u003ca href=\"#using-components\"\u003e\n            Using Components\n          \u003c/a\u003e\n        \u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#contributing\"\u003e\n        Contributing\n      \u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n          \u003ca href=\"#issues\"\u003e\n            Issues\n          \u003c/a\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\n          \u003ca href=\"#pull-requests\"\u003e\n            Pull Requests\n          \u003c/a\u003e\n        \u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#license-information\"\u003e\n        License\n      \u003c/a\u003e\n    \u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/details\u003e\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n## About\nThis package provides support for writing reusable Alpine.js components in Typescript.\nSupporting Alpine's existing model of registering any generic object/type and user-defined\nclasses inheriting from the [AlpineComponent class](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Component.ts) which provides type\ndefinitions for Alpine's magics. This enables your IDE to give useful auto-completion without\nany extra plugins/extensions and gives Typescript a better understanding of your component\ncode, producing useful compilation/transpilation errors before testing.\n\n### Installation\n```\n$ pnpm install --save @nxtlvlsoftware/alpine-typescript\n```\nThe package requires manual initialization in the browser as we don't assume a specific use-case:\n\nUsing `Alpine.plugin()` (ESModule syntax):\n```typescript\nimport Alpine from \"alpinejs\";\n\nwindow.Alpine = Alpine;\n\n// { default as componentPlugin } also works\nimport { componentPlugin } from \"@nxtlvlsoftware/alpine-typescript\";\n\nwindow.addEventListener('alpine-components:init', () =\u003e {\n  window.Alpine.Components.registerAll({\n    //\n  });\n});\n\nwindow.Alpine.plugin(componentPlugin);\nwindow.Alpine.start();\n```\nUsing the default export (CommonJS syntax):\n```typescript\nconst Alpine = require(\"alpinejs\");\n\nwindow.Alpine = Alpine;\n\nwindow.addEventListener('alpine-components:init', () =\u003e {\n  window.Alpine.Components.registerAll({\n    //\n  });\n});\n\nwindow.Alpine.plugin(require(\"@nxtlvlsoftware/alpine-typescript\"));\nwindow.Alpine.start();\n```\nThis is the easiest way to get started in existing projects but doesn't offer a way to modify the\ndefault options provided the package.\n\nUsing `AlpineComponents.bootstrap()` (all examples in ESModule syntax):\n```typescript\nimport { AlpineComponents } from \"@nxtlvlsoftware/alpine-typescript\";\n\nAlpineComponents.bootstrap({\n  bootstrapAlpine: true,\n  components: {\n    //\n  }\n});\n```\nThe default options are best suited to new projects as `Alpine.start()` will be called for you.\nTo integrate into existing projects seamlessly, just set `startAlpine` to `false` on the options\nobject:\n```typescript\nimport Alpine from \"alpinejs\";\n\nwindow.Alpine = Alpine;\n\nimport { AlpineComponents } from \"@nxtlvlsoftware/alpine-typescript\";\n\nAlpineComponents.bootstrap({\n  startAlpine: false,\n  logErrors: true, // should only enable this in dev enviroments for debugging\n  components: {\n    //\n  }\n});\n\nwindow.Alpine.start();\n```\nIf you aren't following the default convention of defining `window.Alpine` after importing Alpine,\njust pass it as the second argument to the `AlpineComponents.bootstrap()` call:\n```typescript\nimport Alpine from \"alpinejs\";\n\nlet myAlpine = Alpine;\n\nimport { AlpineComponents } from \"@nxtlvlsoftware/alpine-typescript\";\n\nconst isProduction = () =\u003e false; // equivelent would be injected/definied server-side by your framework\nAlpineComponents.bootstrap({\n  components: {\n    //\n  },\n  logErrors: !isProduction()\n}, myAlpine);\n\n// might break alpine or other packages by defining after init but we support it ¯\\_(ツ)_/¯\nwindow.Alpine = myAlpine;\n```\n\n### Usage\nThis package can be used to define components directly in projects or to distribute components\nin their own package.\n\n#### In Projects\nThis package is designed to be easily integrated into existing projects. You can start by\nmigrating complex, logic heavy components into classes without worrying about the simple stuff\nthat makes Alpine so powerful.\n\nTake a look at the provided example project [here.](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/examples/project)\n\n##### Project Setup\nYou'll want to start by [installing](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/README.md#installation) the package then add these lines to your\nclient script:\n```typescript\nimport { AlpineComponents } from \"@nxtlvlsoftware/alpine-typescript\";\n\nAlpineComponents.bootstrap({\n  components: {\n    //\n  },\n  startAlpine: false,\n  logErrors: true\n});\n```\n\nNow create a directory for your components, something like `components` and create a new\nTypescript file `components/MyComponent.ts` containing:\n```typescript\nimport { AlpineComponent } from \"@nxtlvlsoftware/alpine-typescript\";\n\nexport class MyComponent extends AlpineComponent {\n\n  constructor(\n    public required: string,\n    public optional: boolean = false\n  ) {\n    super();\n  }\n\n  init(): void {\n    //\n  }\n\n}\n```\nRegister your new component in the `AlpineComponents.bootstrap()` method call:\n```typescript\nimport { MyComponent } from \"./components/MyComponent\";\n\nAlpineComponents.bootstrap({\n  components: {\n    myComponent: MyComponent\n  },\n  ...\n});\n```\nYou can now use the component in your HTML with `x-data=\"myComponent('Hello World!')\"`.\n#### In Packages\nThe main purpose of this package is to easily distribute components in their own package.\n\nTake a look at the provided example components package [here.](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/examples/package)\n\n##### Package Setup\nThe easiest way to start distributing your components is to copy everything from the [package example](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/examples/package)\ndirectory and start writing your components.\n\nManual setup requires a project with `typescript` installed to compile the code to javascript:\n```\n$ pnpm i --save-dev typescript\n```\nThen add the following scripts to `package.json` for running `tsc`:\n```json\n  \"scripts\": {\n    \"clean\": \"rm -rf ./dist \u0026\u0026 rm -rf ./types\",\n    \"build\": \"pnpm run clean \u0026\u0026 tsc --build tsconfig.json --inlineSourceMap\",\n    \"dev\": \"pnpm run build -- --watch\",\n    \"build-dist\": \"pnpm run build -- --inlineSourceMap --listEmittedFiles\",\n  }\n```\nYou'll need to tell `tsc` about the target on which the javascript it produces will be\nexecuted in a `tsconfig.json` file:\n```json\n{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"include\": [\n    \"src/**/*.ts\"\n  ],\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"module\": \"ESNext\",\n    \"outDir\": \"dist\",\n    \"declarationDir\": \"types\",\n    \"declaration\": true,\n    \"noEmit\": false,\n    \"lib\": [\n        \"ESNext\",\n        \"DOM\"\n    ]\n  }\n}\n```\nNow create a `src` directory, `src/index.ts` file and `src/components` directory:\n```\n$ mkdir src \u0026\u0026 touch src/index.ts \u0026\u0026 mkdir src/components\n```\nYou'll want to export all types, classes and global variables from your `index.ts` file so\nthey're available with a simple `import { Type, Type2, Var } from \"@org/package-name\";` call.\n\nFor convenient consumption of your components you'll want to define a bootstrap method similar\nto this package:\n```\n$ touch src/Plugin.ts\n```\nCopy the following and change the namespace to the name of your package:\n```typescript\nimport type Alpine from \"alpinejs\";\n\nimport {\n  AlpineComponents,\n  makeAlpineConstructor,\n  Globals\n} from \"@nxtlvlsoftware/alpine-typescript\";\n\nimport {\n  MyComponent,\n  DefaultMyComponentName\n} from \"./components/MyComponent\";\n\nexport namespace MyComponents {\n\n  export interface Options extends AlpineComponents.Options {\n    myComponentName: string;\n\n    bootstrapComponents: boolean;\n  }\n\n  export const defaultOptions = {\n    ...AlpineComponents.defaultOptions,\n\n    myComponentName: DefaultMyComponentName,\n\n    bootstrapComponents: true\n  } satisfies Options;\n\n  export function bootstrap(\n    options: Partial\u003cOptions\u003e = defaultOptions,\n    alpine: typeof Alpine = window.Alpine\n  ): void {\n    const opts: Options = {\n      ...defaultOptions,\n      ...options\n    };\n\n    document.addEventListener('alpine:init', () =\u003e {\n      // Register any alpine stores your components rely on here.\n      // const alpine = window.Alpine;\n      // alpine.store(opts.myStoreName, new MyStore(...));\n    });\n\n    document.addEventListener('alpine-components:init', () =\u003e {\n      const alpine = window.Alpine;\n\n      // Basic registration with support for consumers to provide their own\n      // name for use with x-data.\n      alpine.Components.register(MyComponent, opts.myComponentName);\n    });\n\n\n    // Allow booting alpine and the components package.\n    if (opts.bootstrapComponents) {\n      AlpineComponents.bootstrap(opts, alpine);\n    }\n  }\n\n}\n\n// Support loading our components with a standardized call to Alpine.plugin().\nexport function myPlugin(alpine: typeof Alpine): void {\n  MyComponents.bootstrap({\n    // can't assume we're the only ones using the component library\n    bootstrapComponents: false,\n    // definitely not the only ones using alpine if we're being used as a plugin here\n    startAlpine: false\n  }, alpine);\n}\n```\nExport the `MyComponent` namespace and `myPlugin()` function as default from `index.ts`:\n```typescript\nexport {\n  MyComponents,\n  myPlugin\n} from './src/Plugin';\n\n/**\n * Alpine plugin as default export.\n */\nimport {myPlugin} from './src/Plugin';\nexport default myPlugin;\n```\nNow you can start writing your components. Remember to create the `src/components/MyComponent.ts`\nfile before running `pnpm run dev` or `pnpm run build`.\n\n#### Defining Components\nAlpine itself is very flexible with what it considers a component so this package tries not to impose any\nlimitations. The only requirement imposed is the initial state of your component must be returned by some\nkind of constructor function.\n\nSee Alpine's [Alpine.data() documentation](https://alpinejs.dev/globals/alpine-data) for more information.\n\n##### Generic Types\nAny function that satisfies this type requirement:\n```typescript\ntype KnownGenericConstructor\u003cT\u003e = (...args: any[]) =\u003e T;\n```\nWill be accepted as a component constructor. The [signature](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Store.ts#L101) for registering components of this type is:\n```typescript\n/**\n * Register a generic object (alpine data) as a component.\n *\n * @param name The name of the component (registered to alpine for use with x-data.)\n * @param component The function that returns component data.\n */\nregister\u003cT\u003e(name: string, component: Impl.KnownConstructor\u003cT\u003e): void;\n```\n\nInline objects:\n```typescript\nconst noArgsComponent = () =\u003e {\n  return { i: 'have', no: 'arguments' };\n}\n```\nOr just returning a single value:\n```typescript\nconst singleValueComponent = (arg1: boolean = false) =\u003e {\n  return arg1 ? 'cond1' : 'cond2';\n}\n```\n\nBoth these functions can be registered to Alpine directly with `Alpine.data()` but for packaging and reuse\nthey can be registered through this packages API with the `bootstrap()` call:\n```typescript\nAlpineComponents.bootstrap({\n  components: {\n    noArgs: noArgsComponent,\n    singleValue: singleValueComponent\n  }\n});\n```\nOr by listening for the `alpine-components:init` on the `document` global:\n```typescript\ndocument.addEventListener('alpine-components:init', () =\u003e {\n  window.Alpine.Components.register('noArgs', noArgsComponent);\n  window.Alpine.Components.register('singleValue', singleValueComponent);\n  // or registerAll() when component names are hardcoded\n  window.Alpine.Components.registerAll({\n    noArgs: noArgsComponent,\n    singleValue: singleValueComponent\n  });\n});\n```\n\n##### Typescript Classes\nThe main purpose of this package is to use class definitions as Alpine components. Any class\ninheriting from [AlpineComponent](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Component#L45) is accepted.\n\nBoth register function definitions accept constructor functions for these classes.\n\nExplicit register class constructor [signature](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Store.ts#L109):\n```typescript\n/**\n * Register a class inheriting from {@link Impl.AlpineComponent} as a component.\n *\n * @param component The name/symbol of the class to register as a component.\n * @param name The name of the component (registered to alpine for use with x-data.)\n */\nregister\u003cT extends Impl.AlpineComponent\u003e(component: Impl.KnownClassConstructor\u003cT\u003e, name?: string): void;\n```\nIf no name is provided it will fall back to the name of the class (prototype name.)\n\nYou can also register classes with the generic [signature](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Store.ts#L101):\n```typescript\n/**\n * Register a generic object (alpine data) as a component.\n *\n * @param name The name of the component (registered to alpine for use with x-data.)\n * @param component The function that returns component data.\n */\nregister\u003cT\u003e(name: string, component: Impl.KnownConstructor\u003cT\u003e): void;\n```\nThe component parameters prototype is checked for inheritance from the [AlpineComponent](https://github.com/NxtLvLSoftware/alpine-typescript/blob/dev/src/Component#L45)\nclass and handled accordingly.\n\n#### Using Components\nUsing components works the same way as registering with the normal [`alpine.data()`](https://alpinejs.dev/globals/alpine-data),\njust provide the component name to the `x-data` attribute in a HTML element. The name\nprovided to the `AlpineComponents.register()` call is forwarded to Alpine and your\ncomponent will work as if you were using in-line JavaScript objects.\n\nHere's the contrived `dropdown` example re-written to use a class:\n```html\n\u003cdiv x-data=\"dropdown\"\u003e\n  \u003cbutton @click=\"toggle\"\u003e...\u003c/button\u003e\n\n  \u003cdiv x-show=\"open\"\u003e...\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cscript\u003e\n  import { AlpineComponents, AlpineComponent } from \"@nxtlvlsoftware/alpine-typescript\";\n\n  class DropdownComponent extends AlpineComponent {\n    constructor(\n      public open: boolean = false\n    ) { super(); }\n\n    toggle(): void { this.open = !this.open; }\n  }\n\n  AlpineComponents.bootstrap({\n    bootstrapAlpine: true,\n    components: {\n      dropdown: ToggleComponent\n    },\n    logErrors: true\n  });\n\u003c/script\u003e\n```\nThe main drawback of using this library is the added compilation step needed to use TypeScript.\nAlpine is an elegant library that provides a thin layer on-top of vanilla JavaScript. Using\nAlpine the way it was intended is the way to go until your list of components grows and you\nneed a way to organise them. If you're not already using a bundler in your project (webpack,\nVite, Rollup, etc.) then this probably isn't for you.\n\n## Contributing\n#### Issues\nFound a problem with this project? Make sure to open an issue on the [issue tracker](https://github.com/NxtLvLSoftware/alpine-typescript/issues)\nand we'll do our best to get it sorted!\n\n#### Pull Requests\nPull requests will be reviewed by maintainers when they are available.\n\nDepending on the changes, maintainers might ask you to make changes to the PR to fix problems\nor to improve the code. Do not delete your fork while your pull request remains open, otherwise\nyou won't be able to make any requested changes and the PR will end up being declined.\n\nBy proposing a pull request, you agree to your code being distributed under [this projects license](https://github.com/NxtLvlSoftware/alpine-typescript/blob/dev/LICENSE).\n\n\n## License Information\n\n[`nxtlvlsoftware/alpine-typescript`](https://github.com/NxtLvlSoftware/alpine-typescript) is open-sourced software,\nfreely available to use under the terms of the\n[MIT License](https://www.techtarget.com/whatis/definition/MIT-License-X11-license-or-MIT-X-license).\n\n__A full copy of the license is available [here](https://github.com/NxtLvlSoftware/alpine-typescript/blob/dev/LICENSE).__\n\n\u003e THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\u003e IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\u003e FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\u003e AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\u003e LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\u003e OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\u003e SOFTWARE.\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\u003ch4 align=\"center\"\u003e\n  A \u003ca href=\"https://github.com/NxtLvlSoftware\"\u003eNxtLvL Software Solutions\u003c/a\u003e product.\n\u003c/h4\u003e\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnxtlvlsoftware%2Falpine-typescript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnxtlvlsoftware%2Falpine-typescript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnxtlvlsoftware%2Falpine-typescript/lists"}