{"bugs":{"url":"https://github.com/material-components/material-components-web/issues"},"dist":{"shasum":"9ccf30875b08856bd0a1415c4dd88779f5952bdc","tarball":"https://registry.npmjs.org/@material/auto-init/-/auto-init-4.0.0-canary.1.tgz","fileCount":14,"integrity":"sha512-H/NXdJgmOdxY3BvmKcAoQxlhiNmQ6OhruLRwsoyKHBYqKHZQk3XbxQa+wsVrmVoA9c9PH4wRtZriH7vPKvTzPQ==","signatures":[{"sig":"MEQCICGYJrXHxYrSai7oslH2vjVJrmvQOIMcKGRiGQikTXFYAiAb1W89t459jLBrWL78i4vCG+um6gIJOqiVOE2N/5MMHQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddrQSCRA9TVsSAnZWagAA/M8P/2a7Cr/akc0tu69jjGCp\ng1rYP4y6m6kDG9eXy8PMfEAyR4z5o50fVodF39iz8hlrRgGO/OfWn1d2RUcb\n4oho8fgdjZuIBT7DtkEKJLVy9hSiv38ezVlCWhV4x9F7+t5rgob2FGefHyEz\nADEnpKvF5gSOZJ/bGsYP4zcI5C+N4Gf8008OvSlXqMvz6EMMhSympsTo9NHc\ne/3zIoktX1yFCxojWacnXwgxginNjdcNoKZYHLIFt2evULG0vmkWYIaB6xmf\ncJOxNCDloMs3NSFjJFhR1G0D2umT2ltDtazaWLf0l+B9UAgF04KhnU+DUSpU\nO8+U7f9vkPj28IC6izVphVtiJNH2wwq1IoBO72zwVNt/2a7INJfkwz70JMIj\nCZWD+HmuHh+dvXVMVKotecmYyHPt8MAyr3TZXVyB3BXSYr9HjoiMs9dEmVjr\n0NK6oJEzrw9c946mN1NvkKFBvYkC6ZCHexRJ1idqafaAcQ3FBUOgSLfULqI2\npCPa0LF+89FQj0gPKvu/k74FOFeGK468PtDRusShmFufJOOHCIvs0P4S8AKH\nglkhoHv3Sfa6Qw0xhq/Mh6vNorrcSVpRYwuooM0m2jQ/T3QV+1Jp1CllAnsL\nDHXtLnj8ZTUs7zu/8XJcvE0WYTQWRlec1HzL6+S2F63zRdbZClhTEkcuxHvH\nvKR+\r\n=QcEt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/mdc.autoInit.js","name":"@material/auto-init","types":"dist/mdc.autoInit.d.ts","module":"index.js","readme":"<!--docs:\ntitle: \"Auto Init\"\nlayout: detail\nsection: components\nexcerpt: \"Utilities for declarative, DOM-based initialization of components on simple web sites.\"\npath: /catalog/auto-init/\n-->\n\n# Auto Init\n\n`mdc-auto-init` is a utility package that provides declarative, DOM-based method of initialization\nfor MDC Web components on simple web sites. Note that for more advanced use-cases and complex sites,\nmanual instantiation of components will give you more flexibility. However, `mdc-auto-init` is great\nfor static websites, prototypes, and other use-cases where simplicity and convenience is most\nappropriate.\n\n## Installation\n\n```\nnpm install @material/auto-init\n```\n\n## Usage\n\n### Using as part of `material-components-web`\n\nIf you are using mdc-auto-init as part of the [material-components-web](../material-components-web)\npackage, simply write the necessary DOM needed for a component, and attach a `data-mdc-auto-init`\nattribute to the root element with its value set to the component's JavaScript class name (e.g.,\n`MDCTextField`). Then, after writing the markup, simply insert a script tag that calls\n`mdc.autoInit()`. Make sure you call `mdc.autoInit()` after all scripts are loaded so it works\nproperly.\n\n```html\n<div class=\"mdc-text-field\" data-mdc-auto-init=\"MDCTextField\">\n  <input class=\"mdc-text-field__input\" type=\"text\" id=\"input\">\n  <label for=\"input\" class=\"mdc-floating-label\">Input Label</label>\n  <div class=\"mdc-line-ripple\"></div>\n</div>\n\n<!-- at the bottom of the page -->\n<script type=\"text/javascript\">\n  window.mdc.autoInit();\n</script>\n```\n\nThis will attach an [MDCTextField](../mdc-textfield) instance to the root `<div>` element.\n\n#### Accessing the component instance\n\nWhen `mdc-auto-init` attaches a component to an element, it assign that instance to the element\nusing a property whose name is the value of `data-mdc-auto-init`. For example, given\n\n```html\n<div class=\"mdc-text-field\" data-mdc-auto-init=\"MDCTextField\">\n  <input class=\"mdc-text-field__input\" type=\"text\" id=\"input\">\n  <label for=\"input\" class=\"mdc-floating-label\">Input Label</label>\n  <div class=\"mdc-line-ripple\"></div>\n</div>\n```\n\nOnce `mdc.autoInit()` is called, you can access the component instance via an `MDCTextField`\nproperty on that element.\n\n```js\ndocument.querySelector('.mdc-text-field').MDCTextField.disabled = true;\n```\n\n#### Calling subsequent `mdc.autoInit()`\n\nIf you decide to add new components into the DOM after the initial `mdc.autoInit()`, you can make subsequent calls to `mdc.autoInit()`. This will not reinitialize existing components. This works since mdc-auto-init will add the `data-mdc-auto-init-state=\"initialized\"` attribute, which tracks if the component has already been initialized. After calling `mdc.autoInit()` your component will then look like:\n\n```html\n<div class=\"mdc-text-field\" data-mdc-auto-init=\"MDCTextField\" data-mdc-auto-init-state=\"initialized\">\n  ...\n</div>\n```\n\n### Using as a standalone module\n\n#### Registering Components\n\nIf you are using `mdc-auto-init` outside of `material-components-web`, you must manually provide a\nmapping between `data-mdc-auto-init` attribute values and the components which they map to. This can\nbe achieved via `mdcAutoInit.register`.\n\n```js\nimport mdcAutoInit from '@material/auto-init';\nimport {MDCTextField} from '@material/textfield';\n\nmdcAutoInit.register('MDCTextField', MDCTextField);\n```\n\n`mdcAutoInit.register()` tells `mdc-auto-init` that when it comes across an element with a\n`data-mdc-auto-init` attribute set to `\"MDCTextField\"`, it should initialize an `MDCTextField`\ninstance on that element. The `material-components-web` package does this for all components for\nconvenience.\n\nAlso note that a component can be mapped to any string, not necessarily the name of its constructor.\n\n```js\nimport mdcAutoInit from '@material/auto-init';\nimport {MDCTextField} from '@material/textfield';\n\nmdcAutoInit.register('My amazing text field!!!', MDCTextField);\n```\n\n```html\n<div class=\"mdc-text-field\" data-mdc-auto-init=\"My amazing text field!!!\">\n  <!-- ... -->\n</div>\n<script>window.mdc.autoInit();</script>\n```\n\n### De-registering components\n\nAny component can be deregistered by calling `mdcAutoInit.deregister` with the name used to register\nthe component.\n\n```js\nmdcAutoInit.deregister('MDCTextField');\n```\n\nThis will simply remove the name -> component mapping. It will _not_ affect any already-instantiated\ncomponents on the page.\n\nTo unregister all name -> component mappings, you can use `mdcAutoInit.deregisterAll()`.\n\n## How `mdc-auto-init` works\n\n`mdc-auto-init` maintains a registry object which maps string identifiers, or **names**, to\ncomponent constructors. When the default exported function - `mdcAutoInit()` - is called,\n`mdc-auto-init` queries the DOM for all elements with a `data-mdc-auto-init` attribute. For each\nelement returned, the following steps are taken:\n\n1. If the `data-mdc-auto-init` attribute does not have a value associated with it, throw an error\n2. If the value of `data-mdc-auto-init` cannot be found in the registry, throw an error\n3. If the element has an existing property whose name is the value of `data-mdc-auto-init`, it is\n   assumed to have already been initialized. Therefore it is skipped, and a warning will be logged\n   to the console (this behavior can be overridden).\n4. Let `Ctor` be the component constructor associated with the given name in the register\n5. Let `instance` be the result of calling `Ctor.attachTo()` and passing in the element as an\n   argument.\n6. Create a non-writable, non-enumerable property on the node whose name is the value of\n   `data-mdc-auto-init` and whose value is `instance`.\n\n### Initializing only a certain part of the page\n\nBy default, `mdc-auto-init` will query the entire document to figure out which components to\ninitialize. To override this behavior, you can pass in an optional `root` first argument specifying\nthe root node whose children will be queried for instantiation.\n\n```html\n<div id=\"mdc-section\">\n  <!-- MDC Web Components, etc. -->\n</div>\n<script>window.mdc.autoInit(document.getElementById('mdc-section'));</script>\n```\n\nIn the above example, only elements within `<div id=\"mdc-section\">` will be queried.\n\n### Calling autoInit() multiple times\n\nBy default, `mdc-auto-init` only expects to be called once, at page-load time. However, there may be\ncertain scenarios where one may want to use `mdc-auto-init` and may still need to call it multiple\ntimes, such as on a Wordpress site that contains an infinitely-scrolling list of new blog post\nelements containing MDC Web components. `mdcAutoInit()` takes an optional second argument which is the\nfunction used to warn users when a component is initialized multiple times. By default, this is just\n`console.warn()`. However, to skip over already-initialized components without logging a\nwarning, you could simply pass in a nop.\n\n```html\n<script>window.mdc.autoInit(/* root */ document, () => {});</script>\n```\n\nThis will suppress any warnings about already initialized elements.\n\n### Events\n\n#### MDCAutoInit:End\nTriggered when initialization of all components is complete.\n\n`document.addEventListener(\"MDCAutoInit:End\", () => {...});`\n","gitHead":"edc72a4d7d6a61d61620fd05a80e2491e518bccf","license":"MIT","_npmUser":{"name":"abhiomkar","email":"abhiomkar@gmail.com"},"homepage":"https://github.com/material-components/material-components-web#readme","repository":{"url":"git+https://github.com/material-components/material-components-web.git","type":"git","directory":"packages/mdc-auto-init"},"_npmVersion":"lerna/3.14.1/node@v8.16.0+x64 (darwin)","description":"Declarative, easy-to-use auto-initialization for Material Components for the web","directories":{},"maintainers":[{"name":"abhiomkar","email":"abhiomkar@gmail.com"},{"name":"acdvorak","email":"acdvorak@gmail.com"},{"name":"allanchen","email":"allanchen@google.com"},{"name":"aomarks","email":"aomarks@google.com"},{"name":"aprigogin","email":"andrey.prigogin@gmail.com"},{"name":"azakus","email":"dfreedm2@gmail.com"},{"name":"bicknellr","email":"bicknellr@gmail.com"},{"name":"bonniez","email":"bonniez@google.com"},{"name":"bwobrien","email":"obrien.test@gmail.com"},{"name":"emarquez","email":"emarquez@google.com"},{"name":"esgonzalez","email":"esgonzalez@google.com"},{"name":"kfranqueiro","email":"kenneth.franqueiro@gmail.com"},{"name":"lynnjepsen","email":"lynnjepsen@google.com"},{"name":"material-admin","email":"aprigogin+npm@google.com"},{"name":"moog16","email":"mattgoo@gmail.com"},{"name":"patrickrodee","email":"prodee@google.com"},{"name":"williamernest","email":"williamernest@google.com"}],"sideEffects":false,"_nodeVersion":"8.16.0","dependencies":{"tslib":"^1.9.3","@material/base":"^4.0.0-canary.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/auto-init_4.0.0-canary.1_1568060433788_0.22483855769873928","host":"s3://npm-registry-packages"},"_id":"@material/auto-init@4.0.0-canary.1","version":"4.0.0-canary.1"}