diff --git a/.gitattributes b/.gitattributes
index 4c92aac46b..75dc684942 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,3 +2,4 @@ elements/*/*.umd.js -diff -merge
elements/*/*.umd.js.map -diff -merge
themes/*/*.umd.js -diff -merge
themes/*/*.umd.js.map -diff -merge
+package-lock.json -diff -merge
diff --git a/.github/pull_request_templates/feature-branch.md b/.github/pull_request_templates/feature-branch.md
new file mode 100644
index 0000000000..cb637c66d1
--- /dev/null
+++ b/.github/pull_request_templates/feature-branch.md
@@ -0,0 +1,23 @@
+## Feature Branch: Title
+
+* Appendix doc:
+ -
+* Link(s) to demo pages_ where this element can be viewed:
+ -
+
+### Ready-for-merge Checklist
+
+- [ ] Expected files: all files in the merge request related to one feature request?
+- [ ] Is your branch up-to-date with the master branch?
+- [ ] Did automated tests pass?
+- [ ] Was it [browser-tested](https://docs.google.com/spreadsheets/d/1luriPYswlGcKdcbKhQfW6kxIgj7tjNjnBVP7yZ4onwA/edit#gid=1660273076)?
+- [ ] Was this feature demo'd and the design review task marked as complete?
+- [ ] Did it get a LGTM *after the last commit*? (changelog updates are exempt from this rule)
+- [ ] Changelog: consider this your postage stamp, it can’t go out without one! Stories should be in alphabetical/numerical order under the tag release.
+
+
+---
+
+### What's in this branch?
+Summarize files edited as part of this MR along with a brief description of what was changed/why.
+
diff --git a/README.md b/README.md
index fd53b8e0aa..9e57f9e031 100644
--- a/README.md
+++ b/README.md
@@ -1,105 +1,37 @@
-# RHElements
+**[Getting Started][start] | [Element Catalog][storybook] | [Creating Components][develop] | [Theming Components][theming]**
-Welcome to the RHElements project! Let's get started.
+![RHElements logo](./brand/logo/png/rhelements-logo-red.png)
-## Quick-start
-
-*Notice: You will need to use [Node](https://nodejs.org/en/) v.7 or higher. These components are written in [ES6](http://es6-features.org/).*
-
-```
-$ git clone git@github.com:RHElements/rhelements.git
-$ cd rhelements
-$ npm install # this will take a while due to lerna bootstrap
-$ npm rebuild node-sass # this may be necessary
-$ npm start
-```
-
-## Scripts
-
-- `$ npm start`
- - Launch a demo server. This should be continuously running as you develop.
-- `$ npm run new`
- - Create a new component.
-- `$ npm test`
- - Run tests on ALL RHElements.
-- `$ npm run build`
- - Run build on ALL RHElements.
-- `$ npm run bootstrap`
- - Update ALL rhelements' dependencies and interlink them with [lerna bootstrap][lerna-bs].
-- `$ npm run storybook`
- - Run storybook
-- `$ npm run build-storybook`
- - Build storybook for deployment
-
-[lerna]: https://github.com/lerna/lerna
-[lerna-bs]: https://github.com/lerna/lerna#bootstrap
-
-## Component development
-
-Because this is a monorepo, each component will need to be independently built in order to actively work on and preview the changes. Every component has its own Gulp file and NPM script.
-
-While still running `npm start` in one terminal window (which runs the local server), you will need to open another terminal window, drill into the directory of the component you'd like to work on, and execute the `npm run dev` command. This command will use gulp tasks to watch the files within that component directory and will automatically re-run the build command and refresh the browser when you make changes to the component.
-
-### Example development on a component
-
-```
-$ cd /Sites/rhelement
-$ npm start
+[RHElements][rhe] is a collection of flexible and lightweight [Web Components][wc], and the tools to build them. RHElements are...
-# SHIFT + CTRL + T to open a new tab in Terminal
+ - **Lightweight**: small file size, minimal boilerplate, no "framework-like" features.
+ - **Universal**: write once, use everywhere. RHElements work in React, Vue, Angular, vanilla JS, anywhere HTML elements are used.
-$ cd elements/rh-card # or any other component
-$ npm run dev
-```
+The result of these two principles is plugging one set of comopnents into a wide variety of applications, bringing UX consistency and developer familiarity to any web project.
-Make a change to the component and save. The gulpfile will handle transpiling the element down to ES5 and will bring in the HTML and Sass into the template in the component.
+A Yeoman generator is included for creating Web Components that meets these goals.
-## Test
+Let's get started!
-To test all RHElements, run `npm test` from the root of the repo. If you only want to test the component you're working on:
-
-```
-$ cd elements/rh-card
-$ npm test
-```
-
-Also, if your tests are failing and you want access to a live browser to investigate why, the following flag will keep the browser open.
-
-```
-$ npm test -- -p
-```
-
-Then open the URL that will be printed in the terminal. It looks something like this: `http://localhost:8081/components/@rhelements/rhelements/generated-index.html?cli_browser_id=0`.
-
-## Storybook
-
-We've added [Storybook](https://storybook.js.org/) to RHElements as a way to preview our components as they are being developed. We'll also use Storybook to export a static site that will be the demo site for RHElements.
-
-To run storybook
-
-```
-$ npm run storybook
-```
-
-This will start a web server on port 9001. Navigate in your browser to `http://localhost:9001` to see Storybook in action. Storybook will watch for file changes and reload the browser automatically for you. This is a little slow at the moment, but we'll look into speeding this up.
-
-To export the storybook static site
+## Quick-start
-```
-$ npm run build-storybook
-```
+ git clone git@github.com:RHElements/rhelements.git
+ cd rhelements
+ npm install # this will take a while due to lerna bootstrap
+ npm start
-This places a build of the storybook site in the .storybook_out directory.
+The `start` script will launch the demo pages. Demo pages are static showcases of each element, and also serve as scratchpads for experimenting while working on an element.
-### Known Issues with Storybook
+*Notice: You will need to use [Node](https://nodejs.org/en/) v.7 or higher. Storybook _may_ not work with Node v.10.*
-For any component that has a third-party dependency you will need to update the `/.storybook/webpack.config.js` file. You will need to create an alias for your depedency.
+---
-For example:
+**[Getting Started][start] | [Developing Components][develop] | [Theming][theming]**
-```
-"../../whatwg-fetch/fetch.js": path.join( // this is the third-party dependency in the rhelement
- __dirname,
- "../node_modules/whatwg-fetch/fetch.js" // this is where it lives in node_modules
-)
-```
+[rhe]: https://github.com/RHElements/rhelements
+[wc]: https://developer.mozilla.org/en-US/docs/Web/Web_Components
+[home]: https://rhelements.github.io/
+[start]: https://rhelements.github.io/getting-started/
+[develop]: https://rhelements.github.io/develop/
+[theming]: https://rhelements.github.io/theme/
+[storybook]: https://rhelements.github.io/rhelements/
diff --git a/elements/all/LICENSE.txt b/elements/all/LICENSE.txt
deleted file mode 100644
index 83ccc2fd8f..0000000000
--- a/elements/all/LICENSE.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright 2018 Red Hat, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/elements/all/README.md b/elements/all/README.md
deleted file mode 100644
index 423e376753..0000000000
--- a/elements/all/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ALL the RHElements!
-
-This element is a figment of our collective imaginations. It exists solely to depend on all other RHElements. The primary reason is so that [Lerna][lerna] will hoist the elements themselves into the root node_modules directory, giving us a place to point Web Component Tester where all relative paths line up the same way they would in a real deployment scenario.
-
-A secondary reason is that eventually, we will probably want an easy way to install all the RHElements in a single package, for example: `npm install @rhelements/all`. Not yet, though; **all** is marked as private and cannot be published.
-
-When an element is created or removed, `all/package.json` will be updated with the new list, via the [test suite injector script][script].
-
-[lerna]: https://lernajs.io/
-[script]: ../../scripts/test-suite-inject.js
diff --git a/elements/all/package.json b/elements/all/package.json
deleted file mode 100644
index 148d65f5bf..0000000000
--- a/elements/all/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "@rhelements/all",
- "version": "1.0.0-prerelease.6",
- "publishConfig": {
- "access": "public"
- },
- "description": "All the RHElements.",
- "scripts": {
- "test": "../../node_modules/.bin/wct --configFile ../../wct.conf.json elements/all/test/"
- },
- "private": true,
- "license": "MIT",
- "dependencies": {
- "@rhelements/rh-accordion": "file:elements/rh-accordion",
- "@rhelements/rh-card": "file:elements/rh-card",
- "@rhelements/rh-cta": "file:elements/rh-cta",
- "@rhelements/rh-datetime": "file:elements/rh-datetime",
- "@rhelements/rh-health-index": "file:elements/rh-health-index",
- "@rhelements/rh-icon": "file:elements/rh-icon",
- "@rhelements/rh-icon-panel": "file:elements/rh-icon-panel",
- "@rhelements/rh-number": "file:elements/rh-number",
- "@rhelements/rh-tabs": "file:elements/rh-tabs",
- "@rhelements/rhelement": "file:elements/rhelement"
- }
-}
\ No newline at end of file
diff --git a/elements/all/test/index.html b/elements/all/test/index.html
deleted file mode 100644
index 69eddf95c8..0000000000
--- a/elements/all/test/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
diff --git a/elements/rh-accordion/rh-accordion.js.map b/elements/rh-accordion/rh-accordion.js.map
index 8b4de3d344..c570d7cd63 100644
--- a/elements/rh-accordion/rh-accordion.js.map
+++ b/elements/rh-accordion/rh-accordion.js.map
@@ -1 +1 @@
-{"version":3,"file":"rh-accordion.js","sources":["rh-accordion.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.js\";\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, \"findIndex\", {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== \"function\") {\n throw new TypeError(\"predicate must be a function\");\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return -1.\n return -1;\n }\n });\n}\n\nfunction generateId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n}\n\nclass RhAccordion extends RHElement {\n get html() {\n return `\n\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion\";\n }\n\n get styleUrl() {\n return \"rh-accordion.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion.html\";\n }\n\n static get observedAttributes() {\n return [\"theme\", \"color\"];\n }\n\n static get cascadingAttributes() {\n return {\n color: \"rh-accordion-header\"\n };\n }\n\n constructor() {\n super(RhAccordion);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"presentation\");\n this.setAttribute(\"defined\", \"\");\n\n this.addEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.addEventListener(\"keydown\", this._keydownHandler);\n\n Promise.all([\n customElements.whenDefined(RhAccordionHeader.tag),\n customElements.whenDefined(RhAccordionPanel.tag)\n ]).then(this._linkPanels());\n }\n\n disconnectedCallback() {\n this.removeEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.removeEventListener(\"keydown\", this._keydownHandler);\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n super.attributeChangedCallback(attr, oldVal, newVal);\n\n if (attr === \"color\") {\n const headers = this.querySelectorAll(RhAccordionHeader.tag);\n\n if (newVal === \"striped\") {\n [...headers].forEach((header, index) => {\n const headerClass = index % 2 ? \"even\" : \"odd\";\n header.classList.add(headerClass);\n });\n } else {\n [...headers].forEach((header, index) => {\n header.classList.remove(\"even\", \"odd\");\n });\n }\n }\n }\n\n toggle(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n if (!header.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n expand(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._expandHeader(header);\n this._expandPanel(panel);\n }\n\n expandAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._expandHeader(header));\n panels.forEach(panel => this._expandPanel(panel));\n }\n\n collapse(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n\n collapseAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._collapseHeader(header));\n panels.forEach(panel => this._collapsePanel(panel));\n }\n\n _linkPanels() {\n const headers = this._allHeaders();\n headers.forEach(header => {\n const panel = this._panelForHeader(header);\n\n header.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"aria-labelledby\", header.id);\n });\n }\n\n _changeHandler(evt) {\n if (this.classList.contains(\"animating\")) {\n return;\n }\n\n const header = evt.target;\n const panel = evt.target.nextElementSibling;\n\n if (evt.detail.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n _toggle(header, panel) {}\n\n _expandHeader(header) {\n header.expanded = true;\n }\n\n _expandPanel(panel) {\n if (panel.expanded) {\n return;\n }\n\n panel.expanded = true;\n\n const height = panel.getBoundingClientRect().height;\n this._animate(panel, 0, height);\n }\n\n _collapseHeader(header) {\n header.expanded = false;\n }\n\n _collapsePanel(panel) {\n if (!panel.expanded) {\n return;\n }\n\n const height = panel.getBoundingClientRect().height;\n panel.expanded = false;\n\n this._animate(panel, height, 0);\n }\n\n _animate(panel, start, end) {\n panel.classList.add(\"animating\");\n panel.style.height = `${start}px`;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n panel.style.height = `${end}px`;\n panel.classList.add(\"animating\");\n panel.addEventListener(\"transitionend\", this._transitionEndHandler);\n });\n });\n }\n\n _keydownHandler(evt) {\n const currentHeader = evt.target;\n\n if (!this._isHeader(currentHeader)) {\n return;\n }\n\n let newHeader;\n\n switch (evt.key) {\n case \"ArrowDown\":\n case \"Down\":\n case \"ArrowRight\":\n case \"Right\":\n newHeader = this._nextHeader();\n break;\n case \"ArrowUp\":\n case \"Up\":\n case \"ArrowLeft\":\n case \"Left\":\n newHeader = this._previousHeader();\n break;\n case \"Home\":\n newHeader = this._firstHeader();\n break;\n case \"End\":\n newHeader = this._lastHeader();\n break;\n default:\n return;\n }\n\n newHeader.shadowRoot.querySelector(\"button\").focus();\n }\n\n _transitionEndHandler(evt) {\n evt.target.style.height = \"\";\n evt.target.classList.remove(\"animating\");\n evt.target.removeEventListener(\"transitionend\", this._transitionEndHandler);\n }\n\n _allHeaders() {\n return [...this.querySelectorAll(RhAccordionHeader.tag)];\n }\n\n _allPanels() {\n return [...this.querySelectorAll(RhAccordionPanel.tag)];\n }\n\n _panelForHeader(header) {\n const next = header.nextElementSibling;\n\n if (next.tagName.toLowerCase() !== RhAccordionPanel.tag) {\n console.error(\n `${RhAccordion.tag}: Sibling element to a header needs to be a panel`\n );\n return;\n }\n\n return next;\n }\n\n _previousHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) - 1;\n return headers[(newIndex + headers.length) % headers.length];\n }\n\n _nextHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) + 1;\n return headers[newIndex % headers.length];\n }\n\n _firstHeader() {\n const headers = this._allHeaders();\n return headers[0];\n }\n\n _lastHeader() {\n const headers = this._allHeaders();\n return headers[headers.length - 1];\n }\n\n _isHeader(element) {\n return element.tagName.toLowerCase() === RhAccordionHeader.tag;\n }\n}\n\nclass RhAccordionHeader extends RHElement {\n get html() {\n return `\n\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion-header\";\n }\n\n get styleUrl() {\n return \"rh-accordion-header.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-header.html\";\n }\n\n static get observedAttributes() {\n return [\"aria-expanded\"];\n }\n\n constructor() {\n super(RhAccordionHeader);\n this._clickHandler = this._clickHandler.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"header\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionHeader.tag}-${generateId()}`;\n }\n\n this.button = this.shadowRoot.querySelector(\"button\");\n\n const child = this.children[0];\n let isHeaderTag = false;\n\n if (child) {\n switch (child.tagName) {\n case \"H1\":\n case \"H2\":\n case \"H3\":\n case \"H4\":\n case \"H5\":\n case \"H6\":\n isHeaderTag = true;\n break;\n }\n\n const wrapperTag = document.createElement(child.tagName);\n this.button.innerText = child.innerText;\n\n wrapperTag.appendChild(this.button);\n this.shadowRoot.appendChild(wrapperTag);\n } else {\n this.button.innerText = this.textContent.trim();\n }\n\n if (!isHeaderTag) {\n console.warn(\n `${\n RhAccordionHeader.tag\n }: The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)`\n );\n }\n\n this.addEventListener(\"click\", this._clickHandler);\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"click\", this._clickHandler);\n }\n\n get expanded() {\n return this.hasAttribute(\"aria-expanded\");\n }\n\n set expanded(val) {\n val = Boolean(val);\n\n if (val) {\n this.setAttribute(\"aria-expanded\", true);\n this.button.setAttribute(\"aria-expanded\", true);\n } else {\n this.removeAttribute(\"aria-expanded\");\n this.button.setAttribute(\"aria-expanded\", false);\n }\n }\n\n _clickHandler(event) {\n this.dispatchEvent(\n new CustomEvent(`${RhAccordion.tag}:change`, {\n detail: { expanded: !this.expanded },\n bubbles: true\n })\n );\n }\n}\n\nclass RhAccordionPanel extends RHElement {\n get html() {\n return `\n\n\n
\n
\n \n
\n
`;\n }\n\n static get tag() {\n return \"rh-accordion-panel\";\n }\n\n get styleUrl() {\n return \"rh-accordion-panel.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-panel.html\";\n }\n\n constructor() {\n super(RhAccordionPanel);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"region\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionPanel.tag}-${generateId()}`;\n }\n }\n\n get expanded() {\n return this.hasAttribute(\"expanded\");\n }\n\n set expanded(val) {\n const value = Boolean(val);\n\n if (value) {\n this.setAttribute(\"expanded\", \"\");\n } else {\n this.removeAttribute(\"expanded\");\n }\n }\n}\n\nRHElement.create(RhAccordionHeader);\nRHElement.create(RhAccordionPanel);\nRHElement.create(RhAccordion);\n"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"rh-accordion.js","sources":["rh-accordion.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.js\";\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, \"findIndex\", {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== \"function\") {\n throw new TypeError(\"predicate must be a function\");\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return -1.\n return -1;\n }\n });\n}\n\nfunction generateId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n}\n\nclass RhAccordion extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion\";\n }\n\n get styleUrl() {\n return \"rh-accordion.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion.html\";\n }\n\n static get observedAttributes() {\n return [\"theme\", \"color\"];\n }\n\n static get cascadingAttributes() {\n return {\n color: \"rh-accordion-header\"\n };\n }\n\n constructor() {\n super(RhAccordion);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"presentation\");\n this.setAttribute(\"defined\", \"\");\n\n this.addEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.addEventListener(\"keydown\", this._keydownHandler);\n\n Promise.all([\n customElements.whenDefined(RhAccordionHeader.tag),\n customElements.whenDefined(RhAccordionPanel.tag)\n ]).then(this._linkPanels());\n }\n\n disconnectedCallback() {\n this.removeEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.removeEventListener(\"keydown\", this._keydownHandler);\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n super.attributeChangedCallback(attr, oldVal, newVal);\n\n if (attr === \"color\") {\n const headers = this.querySelectorAll(RhAccordionHeader.tag);\n\n if (newVal === \"striped\") {\n [...headers].forEach((header, index) => {\n const headerClass = index % 2 ? \"even\" : \"odd\";\n header.classList.add(headerClass);\n });\n } else {\n [...headers].forEach((header, index) => {\n header.classList.remove(\"even\", \"odd\");\n });\n }\n }\n }\n\n toggle(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n if (!header.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n expand(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._expandHeader(header);\n this._expandPanel(panel);\n }\n\n expandAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._expandHeader(header));\n panels.forEach(panel => this._expandPanel(panel));\n }\n\n collapse(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n\n collapseAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._collapseHeader(header));\n panels.forEach(panel => this._collapsePanel(panel));\n }\n\n _linkPanels() {\n const headers = this._allHeaders();\n headers.forEach(header => {\n const panel = this._panelForHeader(header);\n\n header.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"aria-labelledby\", header.id);\n });\n }\n\n _changeHandler(evt) {\n if (this.classList.contains(\"animating\")) {\n return;\n }\n\n const header = evt.target;\n const panel = evt.target.nextElementSibling;\n\n if (evt.detail.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n _toggle(header, panel) {}\n\n _expandHeader(header) {\n header.expanded = true;\n }\n\n _expandPanel(panel) {\n if (panel.expanded) {\n return;\n }\n\n panel.expanded = true;\n\n const height = panel.getBoundingClientRect().height;\n this._animate(panel, 0, height);\n }\n\n _collapseHeader(header) {\n header.expanded = false;\n }\n\n _collapsePanel(panel) {\n if (!panel.expanded) {\n return;\n }\n\n const height = panel.getBoundingClientRect().height;\n panel.expanded = false;\n\n this._animate(panel, height, 0);\n }\n\n _animate(panel, start, end) {\n panel.classList.add(\"animating\");\n panel.style.height = `${start}px`;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n panel.style.height = `${end}px`;\n panel.classList.add(\"animating\");\n panel.addEventListener(\"transitionend\", this._transitionEndHandler);\n });\n });\n }\n\n _keydownHandler(evt) {\n const currentHeader = evt.target;\n\n if (!this._isHeader(currentHeader)) {\n return;\n }\n\n let newHeader;\n\n switch (evt.key) {\n case \"ArrowDown\":\n case \"Down\":\n case \"ArrowRight\":\n case \"Right\":\n newHeader = this._nextHeader();\n break;\n case \"ArrowUp\":\n case \"Up\":\n case \"ArrowLeft\":\n case \"Left\":\n newHeader = this._previousHeader();\n break;\n case \"Home\":\n newHeader = this._firstHeader();\n break;\n case \"End\":\n newHeader = this._lastHeader();\n break;\n default:\n return;\n }\n\n newHeader.shadowRoot.querySelector(\"button\").focus();\n }\n\n _transitionEndHandler(evt) {\n evt.target.style.height = \"\";\n evt.target.classList.remove(\"animating\");\n evt.target.removeEventListener(\"transitionend\", this._transitionEndHandler);\n }\n\n _allHeaders() {\n return [...this.querySelectorAll(RhAccordionHeader.tag)];\n }\n\n _allPanels() {\n return [...this.querySelectorAll(RhAccordionPanel.tag)];\n }\n\n _panelForHeader(header) {\n const next = header.nextElementSibling;\n\n if (next.tagName.toLowerCase() !== RhAccordionPanel.tag) {\n console.error(\n `${RhAccordion.tag}: Sibling element to a header needs to be a panel`\n );\n return;\n }\n\n return next;\n }\n\n _previousHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) - 1;\n return headers[(newIndex + headers.length) % headers.length];\n }\n\n _nextHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) + 1;\n return headers[newIndex % headers.length];\n }\n\n _firstHeader() {\n const headers = this._allHeaders();\n return headers[0];\n }\n\n _lastHeader() {\n const headers = this._allHeaders();\n return headers[headers.length - 1];\n }\n\n _isHeader(element) {\n return element.tagName.toLowerCase() === RhAccordionHeader.tag;\n }\n}\n\nclass RhAccordionHeader extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion-header\";\n }\n\n get styleUrl() {\n return \"rh-accordion-header.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-header.html\";\n }\n\n static get observedAttributes() {\n return [\"aria-expanded\"];\n }\n\n constructor() {\n super(RhAccordionHeader);\n this._clickHandler = this._clickHandler.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"header\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionHeader.tag}-${generateId()}`;\n }\n\n this.button = this.shadowRoot.querySelector(\"button\");\n\n const child = this.children[0];\n let isHeaderTag = false;\n\n if (child) {\n switch (child.tagName) {\n case \"H1\":\n case \"H2\":\n case \"H3\":\n case \"H4\":\n case \"H5\":\n case \"H6\":\n isHeaderTag = true;\n break;\n }\n\n const wrapperTag = document.createElement(child.tagName);\n this.button.innerText = child.innerText;\n\n wrapperTag.appendChild(this.button);\n this.shadowRoot.appendChild(wrapperTag);\n } else {\n this.button.innerText = this.textContent.trim();\n }\n\n if (!isHeaderTag) {\n console.warn(\n `${\n RhAccordionHeader.tag\n }: The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)`\n );\n }\n\n this.addEventListener(\"click\", this._clickHandler);\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"click\", this._clickHandler);\n }\n\n get expanded() {\n return this.hasAttribute(\"aria-expanded\");\n }\n\n set expanded(val) {\n val = Boolean(val);\n\n if (val) {\n this.setAttribute(\"aria-expanded\", true);\n this.button.setAttribute(\"aria-expanded\", true);\n } else {\n this.removeAttribute(\"aria-expanded\");\n this.button.setAttribute(\"aria-expanded\", false);\n }\n }\n\n _clickHandler(event) {\n this.dispatchEvent(\n new CustomEvent(`${RhAccordion.tag}:change`, {\n detail: { expanded: !this.expanded },\n bubbles: true\n })\n );\n }\n}\n\nclass RhAccordionPanel extends RHElement {\n get html() {\n return `\n\n
\n
\n \n
\n
`;\n }\n\n static get tag() {\n return \"rh-accordion-panel\";\n }\n\n get styleUrl() {\n return \"rh-accordion-panel.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-panel.html\";\n }\n\n constructor() {\n super(RhAccordionPanel);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"region\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionPanel.tag}-${generateId()}`;\n }\n }\n\n get expanded() {\n return this.hasAttribute(\"expanded\");\n }\n\n set expanded(val) {\n const value = Boolean(val);\n\n if (value) {\n this.setAttribute(\"expanded\", \"\");\n } else {\n this.removeAttribute(\"expanded\");\n }\n }\n}\n\nRHElement.create(RhAccordionHeader);\nRHElement.create(RhAccordionPanel);\nRHElement.create(RhAccordion);\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/elements/rh-accordion/rh-accordion.umd.js b/elements/rh-accordion/rh-accordion.umd.js
index fd69dcccd1..f9371813c1 100644
--- a/elements/rh-accordion/rh-accordion.umd.js
+++ b/elements/rh-accordion/rh-accordion.umd.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("../rhelement/rhelement.umd.js")):"function"==typeof define&&define.amd?define(["../rhelement/rhelement.umd.js"],t):t(e.RHElement)}(this,function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=function(){function r(e,t){for(var n=0;n>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],a=0;a\n:host {\n display: block;\n position: relative;\n overflow: hidden;\n margin: 0; }\n\n\n"}},{key:"styleUrl",get:function(){return"rh-accordion.scss"}},{key:"templateUrl",get:function(){return"rh-accordion.html"}}],[{key:"tag",get:function(){return"rh-accordion"}},{key:"observedAttributes",get:function(){return["theme","color"]}},{key:"cascadingAttributes",get:function(){return{color:"rh-accordion-header"}}}]),i(a,[{key:"connectedCallback",value:function(){c(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),"connectedCallback",this).call(this),this.setAttribute("role","presentation"),this.setAttribute("defined",""),this.addEventListener(a.tag+":change",this._changeHandler),this.addEventListener("keydown",this._keydownHandler),Promise.all([customElements.whenDefined(d.tag),customElements.whenDefined(r.tag)]).then(this._linkPanels())}},{key:"disconnectedCallback",value:function(){this.removeEventListener(a.tag+":change",this._changeHandler),this.removeEventListener("keydown",this._keydownHandler)}},{key:"attributeChangedCallback",value:function(e,t,n){if(c(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),"attributeChangedCallback",this).call(this,e,t,n),"color"===e){var r=this.querySelectorAll(d.tag);"striped"===n?[].concat(h(r)).forEach(function(e,t){var n=t%2?"even":"odd";e.classList.add(n)}):[].concat(h(r)).forEach(function(e,t){e.classList.remove("even","odd")})}}},{key:"toggle",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(r.expanded?(this._collapseHeader(r),this._collapsePanel(a)):(this._expandHeader(r),this._expandPanel(a)))}},{key:"expand",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(this._expandHeader(r),this._expandPanel(a))}},{key:"expandAll",value:function(){var t=this,e=this._allHeaders(),n=this._allPanels();e.forEach(function(e){return t._expandHeader(e)}),n.forEach(function(e){return t._expandPanel(e)})}},{key:"collapse",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(this._collapseHeader(r),this._collapsePanel(a))}},{key:"collapseAll",value:function(){var t=this,e=this._allHeaders(),n=this._allPanels();e.forEach(function(e){return t._collapseHeader(e)}),n.forEach(function(e){return t._collapsePanel(e)})}},{key:"_linkPanels",value:function(){var n=this;this._allHeaders().forEach(function(e){var t=n._panelForHeader(e);e.setAttribute("aria-controls",t.id),t.setAttribute("aria-labelledby",e.id)})}},{key:"_changeHandler",value:function(e){if(!this.classList.contains("animating")){var t=e.target,n=e.target.nextElementSibling;e.detail.expanded?(this._expandHeader(t),this._expandPanel(n)):(this._collapseHeader(t),this._collapsePanel(n))}}},{key:"_toggle",value:function(e,t){}},{key:"_expandHeader",value:function(e){e.expanded=!0}},{key:"_expandPanel",value:function(e){if(!e.expanded){e.expanded=!0;var t=e.getBoundingClientRect().height;this._animate(e,0,t)}}},{key:"_collapseHeader",value:function(e){e.expanded=!1}},{key:"_collapsePanel",value:function(e){if(e.expanded){var t=e.getBoundingClientRect().height;e.expanded=!1,this._animate(e,t,0)}}},{key:"_animate",value:function(e,t,n){var r=this;e.classList.add("animating"),e.style.height=t+"px",requestAnimationFrame(function(){requestAnimationFrame(function(){e.style.height=n+"px",e.classList.add("animating"),e.addEventListener("transitionend",r._transitionEndHandler)})})}},{key:"_keydownHandler",value:function(e){var t=e.target;if(this._isHeader(t)){var n=void 0;switch(e.key){case"ArrowDown":case"Down":case"ArrowRight":case"Right":n=this._nextHeader();break;case"ArrowUp":case"Up":case"ArrowLeft":case"Left":n=this._previousHeader();break;case"Home":n=this._firstHeader();break;case"End":n=this._lastHeader();break;default:return}n.shadowRoot.querySelector("button").focus()}}},{key:"_transitionEndHandler",value:function(e){e.target.style.height="",e.target.classList.remove("animating"),e.target.removeEventListener("transitionend",this._transitionEndHandler)}},{key:"_allHeaders",value:function(){return[].concat(h(this.querySelectorAll(d.tag)))}},{key:"_allPanels",value:function(){return[].concat(h(this.querySelectorAll(r.tag)))}},{key:"_panelForHeader",value:function(e){var t=e.nextElementSibling;if(t.tagName.toLowerCase()===r.tag)return t;console.error(a.tag+": Sibling element to a header needs to be a panel")}},{key:"_previousHeader",value:function(){var e=this._allHeaders(),t=e.findIndex(function(e){return e===document.activeElement})-1;return e[(t+e.length)%e.length]}},{key:"_nextHeader",value:function(){var e=this._allHeaders(),t=e.findIndex(function(e){return e===document.activeElement})+1;return e[t%e.length]}},{key:"_firstHeader",value:function(){return this._allHeaders()[0]}},{key:"_lastHeader",value:function(){var e=this._allHeaders();return e[e.length-1]}},{key:"_isHeader",value:function(e){return e.tagName.toLowerCase()===d.tag}}]),a}(),d=function(e){function r(){o(this,r);var e=s(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,r));return e._clickHandler=e._clickHandler.bind(e),e}return l(r,n),i(r,[{key:"html",get:function(){return'\n\n\n'}},{key:"styleUrl",get:function(){return"rh-accordion-header.scss"}},{key:"templateUrl",get:function(){return"rh-accordion-header.html"}}],[{key:"tag",get:function(){return"rh-accordion-header"}},{key:"observedAttributes",get:function(){return["aria-expanded"]}}]),i(r,[{key:"connectedCallback",value:function(){c(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"connectedCallback",this).call(this),this.hasAttribute("role")||this.setAttribute("role","header"),this.id||(this.id=r.tag+"-"+a()),this.button=this.shadowRoot.querySelector("button");var e=this.children[0],t=!1;if(e){switch(e.tagName){case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":t=!0}var n=document.createElement(e.tagName);this.button.innerText=e.innerText,n.appendChild(this.button),this.shadowRoot.appendChild(n)}else this.button.innerText=this.textContent.trim();t||console.warn(r.tag+": The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)"),this.addEventListener("click",this._clickHandler)}},{key:"disconnectedCallback",value:function(){this.removeEventListener("click",this._clickHandler)}},{key:"_clickHandler",value:function(e){this.dispatchEvent(new CustomEvent(t.tag+":change",{detail:{expanded:!this.expanded},bubbles:!0}))}},{key:"expanded",get:function(){return this.hasAttribute("aria-expanded")},set:function(e){(e=Boolean(e))?(this.setAttribute("aria-expanded",!0),this.button.setAttribute("aria-expanded",!0)):(this.removeAttribute("aria-expanded"),this.button.setAttribute("aria-expanded",!1))}}]),r}(),r=function(e){function t(){return o(this,t),s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,t))}return l(t,n),i(t,[{key:"html",get:function(){return'\n\n\n
\n
\n \n
\n
'}},{key:"styleUrl",get:function(){return"rh-accordion-panel.scss"}},{key:"templateUrl",get:function(){return"rh-accordion-panel.html"}}],[{key:"tag",get:function(){return"rh-accordion-panel"}}]),i(t,[{key:"connectedCallback",value:function(){c(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"connectedCallback",this).call(this),this.hasAttribute("role")||this.setAttribute("role","region"),this.id||(this.id=t.tag+"-"+a())}},{key:"expanded",get:function(){return this.hasAttribute("expanded")},set:function(e){Boolean(e)?this.setAttribute("expanded",""):this.removeAttribute("expanded")}}]),t}();n.create(d),n.create(r),n.create(t)});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("../rhelement/rhelement.umd.js")):"function"==typeof define&&define.amd?define(["../rhelement/rhelement.umd.js"],t):t(e.RHElement)}(this,function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=function(){function r(e,t){for(var n=0;n>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],a=0;a\n:host {\n display: block;\n position: relative;\n overflow: hidden;\n margin: 0; }\n\n"}},{key:"styleUrl",get:function(){return"rh-accordion.scss"}},{key:"templateUrl",get:function(){return"rh-accordion.html"}}],[{key:"tag",get:function(){return"rh-accordion"}},{key:"observedAttributes",get:function(){return["theme","color"]}},{key:"cascadingAttributes",get:function(){return{color:"rh-accordion-header"}}}]),i(a,[{key:"connectedCallback",value:function(){c(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),"connectedCallback",this).call(this),this.setAttribute("role","presentation"),this.setAttribute("defined",""),this.addEventListener(a.tag+":change",this._changeHandler),this.addEventListener("keydown",this._keydownHandler),Promise.all([customElements.whenDefined(d.tag),customElements.whenDefined(r.tag)]).then(this._linkPanels())}},{key:"disconnectedCallback",value:function(){this.removeEventListener(a.tag+":change",this._changeHandler),this.removeEventListener("keydown",this._keydownHandler)}},{key:"attributeChangedCallback",value:function(e,t,n){if(c(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),"attributeChangedCallback",this).call(this,e,t,n),"color"===e){var r=this.querySelectorAll(d.tag);"striped"===n?[].concat(h(r)).forEach(function(e,t){var n=t%2?"even":"odd";e.classList.add(n)}):[].concat(h(r)).forEach(function(e,t){e.classList.remove("even","odd")})}}},{key:"toggle",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(r.expanded?(this._collapseHeader(r),this._collapsePanel(a)):(this._expandHeader(r),this._expandPanel(a)))}},{key:"expand",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(this._expandHeader(r),this._expandPanel(a))}},{key:"expandAll",value:function(){var t=this,e=this._allHeaders(),n=this._allPanels();e.forEach(function(e){return t._expandHeader(e)}),n.forEach(function(e){return t._expandPanel(e)})}},{key:"collapse",value:function(e){var t=this._allHeaders(),n=this._allPanels(),r=t[e],a=n[e];r&&a&&(this._collapseHeader(r),this._collapsePanel(a))}},{key:"collapseAll",value:function(){var t=this,e=this._allHeaders(),n=this._allPanels();e.forEach(function(e){return t._collapseHeader(e)}),n.forEach(function(e){return t._collapsePanel(e)})}},{key:"_linkPanels",value:function(){var n=this;this._allHeaders().forEach(function(e){var t=n._panelForHeader(e);e.setAttribute("aria-controls",t.id),t.setAttribute("aria-labelledby",e.id)})}},{key:"_changeHandler",value:function(e){if(!this.classList.contains("animating")){var t=e.target,n=e.target.nextElementSibling;e.detail.expanded?(this._expandHeader(t),this._expandPanel(n)):(this._collapseHeader(t),this._collapsePanel(n))}}},{key:"_toggle",value:function(e,t){}},{key:"_expandHeader",value:function(e){e.expanded=!0}},{key:"_expandPanel",value:function(e){if(!e.expanded){e.expanded=!0;var t=e.getBoundingClientRect().height;this._animate(e,0,t)}}},{key:"_collapseHeader",value:function(e){e.expanded=!1}},{key:"_collapsePanel",value:function(e){if(e.expanded){var t=e.getBoundingClientRect().height;e.expanded=!1,this._animate(e,t,0)}}},{key:"_animate",value:function(e,t,n){var r=this;e.classList.add("animating"),e.style.height=t+"px",requestAnimationFrame(function(){requestAnimationFrame(function(){e.style.height=n+"px",e.classList.add("animating"),e.addEventListener("transitionend",r._transitionEndHandler)})})}},{key:"_keydownHandler",value:function(e){var t=e.target;if(this._isHeader(t)){var n=void 0;switch(e.key){case"ArrowDown":case"Down":case"ArrowRight":case"Right":n=this._nextHeader();break;case"ArrowUp":case"Up":case"ArrowLeft":case"Left":n=this._previousHeader();break;case"Home":n=this._firstHeader();break;case"End":n=this._lastHeader();break;default:return}n.shadowRoot.querySelector("button").focus()}}},{key:"_transitionEndHandler",value:function(e){e.target.style.height="",e.target.classList.remove("animating"),e.target.removeEventListener("transitionend",this._transitionEndHandler)}},{key:"_allHeaders",value:function(){return[].concat(h(this.querySelectorAll(d.tag)))}},{key:"_allPanels",value:function(){return[].concat(h(this.querySelectorAll(r.tag)))}},{key:"_panelForHeader",value:function(e){var t=e.nextElementSibling;if(t.tagName.toLowerCase()===r.tag)return t;console.error(a.tag+": Sibling element to a header needs to be a panel")}},{key:"_previousHeader",value:function(){var e=this._allHeaders(),t=e.findIndex(function(e){return e===document.activeElement})-1;return e[(t+e.length)%e.length]}},{key:"_nextHeader",value:function(){var e=this._allHeaders(),t=e.findIndex(function(e){return e===document.activeElement})+1;return e[t%e.length]}},{key:"_firstHeader",value:function(){return this._allHeaders()[0]}},{key:"_lastHeader",value:function(){var e=this._allHeaders();return e[e.length-1]}},{key:"_isHeader",value:function(e){return e.tagName.toLowerCase()===d.tag}}]),a}(),d=function(e){function r(){o(this,r);var e=s(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,r));return e._clickHandler=e._clickHandler.bind(e),e}return l(r,n),i(r,[{key:"html",get:function(){return'\n\n'}},{key:"styleUrl",get:function(){return"rh-accordion-header.scss"}},{key:"templateUrl",get:function(){return"rh-accordion-header.html"}}],[{key:"tag",get:function(){return"rh-accordion-header"}},{key:"observedAttributes",get:function(){return["aria-expanded"]}}]),i(r,[{key:"connectedCallback",value:function(){c(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"connectedCallback",this).call(this),this.hasAttribute("role")||this.setAttribute("role","header"),this.id||(this.id=r.tag+"-"+a()),this.button=this.shadowRoot.querySelector("button");var e=this.children[0],t=!1;if(e){switch(e.tagName){case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":t=!0}var n=document.createElement(e.tagName);this.button.innerText=e.innerText,n.appendChild(this.button),this.shadowRoot.appendChild(n)}else this.button.innerText=this.textContent.trim();t||console.warn(r.tag+": The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)"),this.addEventListener("click",this._clickHandler)}},{key:"disconnectedCallback",value:function(){this.removeEventListener("click",this._clickHandler)}},{key:"_clickHandler",value:function(e){this.dispatchEvent(new CustomEvent(t.tag+":change",{detail:{expanded:!this.expanded},bubbles:!0}))}},{key:"expanded",get:function(){return this.hasAttribute("aria-expanded")},set:function(e){(e=Boolean(e))?(this.setAttribute("aria-expanded",!0),this.button.setAttribute("aria-expanded",!0)):(this.removeAttribute("aria-expanded"),this.button.setAttribute("aria-expanded",!1))}}]),r}(),r=function(e){function t(){return o(this,t),s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,t))}return l(t,n),i(t,[{key:"html",get:function(){return'\n\n
\n
\n \n
\n
'}},{key:"styleUrl",get:function(){return"rh-accordion-panel.scss"}},{key:"templateUrl",get:function(){return"rh-accordion-panel.html"}}],[{key:"tag",get:function(){return"rh-accordion-panel"}}]),i(t,[{key:"connectedCallback",value:function(){c(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"connectedCallback",this).call(this),this.hasAttribute("role")||this.setAttribute("role","region"),this.id||(this.id=t.tag+"-"+a())}},{key:"expanded",get:function(){return this.hasAttribute("expanded")},set:function(e){Boolean(e)?this.setAttribute("expanded",""):this.removeAttribute("expanded")}}]),t}();n.create(d),n.create(r),n.create(t)});
//# sourceMappingURL=rh-accordion.umd.js.map
diff --git a/elements/rh-accordion/rh-accordion.umd.js.map b/elements/rh-accordion/rh-accordion.umd.js.map
index 9853511af1..63fcbabc06 100644
--- a/elements/rh-accordion/rh-accordion.umd.js.map
+++ b/elements/rh-accordion/rh-accordion.umd.js.map
@@ -1 +1 @@
-{"version":3,"file":"rh-accordion.umd.js","sources":["rh-accordion.umd.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.umd.js\";\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, \"findIndex\", {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== \"function\") {\n throw new TypeError(\"predicate must be a function\");\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return -1.\n return -1;\n }\n });\n}\n\nfunction generateId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n}\n\nclass RhAccordion extends RHElement {\n get html() {\n return `\n\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion\";\n }\n\n get styleUrl() {\n return \"rh-accordion.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion.html\";\n }\n\n static get observedAttributes() {\n return [\"theme\", \"color\"];\n }\n\n static get cascadingAttributes() {\n return {\n color: \"rh-accordion-header\"\n };\n }\n\n constructor() {\n super(RhAccordion);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"presentation\");\n this.setAttribute(\"defined\", \"\");\n\n this.addEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.addEventListener(\"keydown\", this._keydownHandler);\n\n Promise.all([\n customElements.whenDefined(RhAccordionHeader.tag),\n customElements.whenDefined(RhAccordionPanel.tag)\n ]).then(this._linkPanels());\n }\n\n disconnectedCallback() {\n this.removeEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.removeEventListener(\"keydown\", this._keydownHandler);\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n super.attributeChangedCallback(attr, oldVal, newVal);\n\n if (attr === \"color\") {\n const headers = this.querySelectorAll(RhAccordionHeader.tag);\n\n if (newVal === \"striped\") {\n [...headers].forEach((header, index) => {\n const headerClass = index % 2 ? \"even\" : \"odd\";\n header.classList.add(headerClass);\n });\n } else {\n [...headers].forEach((header, index) => {\n header.classList.remove(\"even\", \"odd\");\n });\n }\n }\n }\n\n toggle(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n if (!header.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n expand(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._expandHeader(header);\n this._expandPanel(panel);\n }\n\n expandAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._expandHeader(header));\n panels.forEach(panel => this._expandPanel(panel));\n }\n\n collapse(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n\n collapseAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._collapseHeader(header));\n panels.forEach(panel => this._collapsePanel(panel));\n }\n\n _linkPanels() {\n const headers = this._allHeaders();\n headers.forEach(header => {\n const panel = this._panelForHeader(header);\n\n header.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"aria-labelledby\", header.id);\n });\n }\n\n _changeHandler(evt) {\n if (this.classList.contains(\"animating\")) {\n return;\n }\n\n const header = evt.target;\n const panel = evt.target.nextElementSibling;\n\n if (evt.detail.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n _toggle(header, panel) {}\n\n _expandHeader(header) {\n header.expanded = true;\n }\n\n _expandPanel(panel) {\n if (panel.expanded) {\n return;\n }\n\n panel.expanded = true;\n\n const height = panel.getBoundingClientRect().height;\n this._animate(panel, 0, height);\n }\n\n _collapseHeader(header) {\n header.expanded = false;\n }\n\n _collapsePanel(panel) {\n if (!panel.expanded) {\n return;\n }\n\n const height = panel.getBoundingClientRect().height;\n panel.expanded = false;\n\n this._animate(panel, height, 0);\n }\n\n _animate(panel, start, end) {\n panel.classList.add(\"animating\");\n panel.style.height = `${start}px`;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n panel.style.height = `${end}px`;\n panel.classList.add(\"animating\");\n panel.addEventListener(\"transitionend\", this._transitionEndHandler);\n });\n });\n }\n\n _keydownHandler(evt) {\n const currentHeader = evt.target;\n\n if (!this._isHeader(currentHeader)) {\n return;\n }\n\n let newHeader;\n\n switch (evt.key) {\n case \"ArrowDown\":\n case \"Down\":\n case \"ArrowRight\":\n case \"Right\":\n newHeader = this._nextHeader();\n break;\n case \"ArrowUp\":\n case \"Up\":\n case \"ArrowLeft\":\n case \"Left\":\n newHeader = this._previousHeader();\n break;\n case \"Home\":\n newHeader = this._firstHeader();\n break;\n case \"End\":\n newHeader = this._lastHeader();\n break;\n default:\n return;\n }\n\n newHeader.shadowRoot.querySelector(\"button\").focus();\n }\n\n _transitionEndHandler(evt) {\n evt.target.style.height = \"\";\n evt.target.classList.remove(\"animating\");\n evt.target.removeEventListener(\"transitionend\", this._transitionEndHandler);\n }\n\n _allHeaders() {\n return [...this.querySelectorAll(RhAccordionHeader.tag)];\n }\n\n _allPanels() {\n return [...this.querySelectorAll(RhAccordionPanel.tag)];\n }\n\n _panelForHeader(header) {\n const next = header.nextElementSibling;\n\n if (next.tagName.toLowerCase() !== RhAccordionPanel.tag) {\n console.error(\n `${RhAccordion.tag}: Sibling element to a header needs to be a panel`\n );\n return;\n }\n\n return next;\n }\n\n _previousHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) - 1;\n return headers[(newIndex + headers.length) % headers.length];\n }\n\n _nextHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) + 1;\n return headers[newIndex % headers.length];\n }\n\n _firstHeader() {\n const headers = this._allHeaders();\n return headers[0];\n }\n\n _lastHeader() {\n const headers = this._allHeaders();\n return headers[headers.length - 1];\n }\n\n _isHeader(element) {\n return element.tagName.toLowerCase() === RhAccordionHeader.tag;\n }\n}\n\nclass RhAccordionHeader extends RHElement {\n get html() {\n return `\n\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion-header\";\n }\n\n get styleUrl() {\n return \"rh-accordion-header.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-header.html\";\n }\n\n static get observedAttributes() {\n return [\"aria-expanded\"];\n }\n\n constructor() {\n super(RhAccordionHeader);\n this._clickHandler = this._clickHandler.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"header\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionHeader.tag}-${generateId()}`;\n }\n\n this.button = this.shadowRoot.querySelector(\"button\");\n\n const child = this.children[0];\n let isHeaderTag = false;\n\n if (child) {\n switch (child.tagName) {\n case \"H1\":\n case \"H2\":\n case \"H3\":\n case \"H4\":\n case \"H5\":\n case \"H6\":\n isHeaderTag = true;\n break;\n }\n\n const wrapperTag = document.createElement(child.tagName);\n this.button.innerText = child.innerText;\n\n wrapperTag.appendChild(this.button);\n this.shadowRoot.appendChild(wrapperTag);\n } else {\n this.button.innerText = this.textContent.trim();\n }\n\n if (!isHeaderTag) {\n console.warn(\n `${\n RhAccordionHeader.tag\n }: The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)`\n );\n }\n\n this.addEventListener(\"click\", this._clickHandler);\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"click\", this._clickHandler);\n }\n\n get expanded() {\n return this.hasAttribute(\"aria-expanded\");\n }\n\n set expanded(val) {\n val = Boolean(val);\n\n if (val) {\n this.setAttribute(\"aria-expanded\", true);\n this.button.setAttribute(\"aria-expanded\", true);\n } else {\n this.removeAttribute(\"aria-expanded\");\n this.button.setAttribute(\"aria-expanded\", false);\n }\n }\n\n _clickHandler(event) {\n this.dispatchEvent(\n new CustomEvent(`${RhAccordion.tag}:change`, {\n detail: { expanded: !this.expanded },\n bubbles: true\n })\n );\n }\n}\n\nclass RhAccordionPanel extends RHElement {\n get html() {\n return `\n\n\n
\n
\n \n
\n
`;\n }\n\n static get tag() {\n return \"rh-accordion-panel\";\n }\n\n get styleUrl() {\n return \"rh-accordion-panel.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-panel.html\";\n }\n\n constructor() {\n super(RhAccordionPanel);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"region\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionPanel.tag}-${generateId()}`;\n }\n }\n\n get expanded() {\n return this.hasAttribute(\"expanded\");\n }\n\n set expanded(val) {\n const value = Boolean(val);\n\n if (value) {\n this.setAttribute(\"expanded\", \"\");\n } else {\n this.removeAttribute(\"expanded\");\n }\n }\n}\n\nRHElement.create(RhAccordionHeader);\nRHElement.create(RhAccordionPanel);\nRHElement.create(RhAccordion);\n"],"names":["generateId","Math","random","toString","substr","Array","prototype","findIndex","defineProperty","predicate","this","TypeError","o","Object","len","length","thisArg","arguments","k","kValue","call","RhAccordion","RHElement","setAttribute","addEventListener","tag","_changeHandler","_keydownHandler","all","customElements","whenDefined","RhAccordionHeader","RhAccordionPanel","then","_linkPanels","removeEventListener","attr","oldVal","newVal","headers","querySelectorAll","forEach","header","index","headerClass","classList","add","remove","_allHeaders","panels","_allPanels","panel","expanded","_collapseHeader","_collapsePanel","_expandHeader","_expandPanel","_this2","_this3","_this4","_panelForHeader","id","evt","contains","target","nextElementSibling","detail","height","getBoundingClientRect","_animate","start","end","style","_this5","_transitionEndHandler","currentHeader","_isHeader","newHeader","key","_nextHeader","_previousHeader","_firstHeader","_lastHeader","shadowRoot","querySelector","focus","next","tagName","toLowerCase","error","newIndex","document","activeElement","element","_clickHandler","_this6","bind","hasAttribute","button","child","children","isHeaderTag","wrapperTag","createElement","innerText","appendChild","textContent","trim","warn","event","dispatchEvent","CustomEvent","val","Boolean","removeAttribute","create"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"rh-accordion.umd.js","sources":["rh-accordion.umd.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.umd.js\";\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, \"findIndex\", {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== \"function\") {\n throw new TypeError(\"predicate must be a function\");\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n\n // 5. Let k be 0.\n var k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return -1.\n return -1;\n }\n });\n}\n\nfunction generateId() {\n return Math.random()\n .toString(36)\n .substr(2, 9);\n}\n\nclass RhAccordion extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion\";\n }\n\n get styleUrl() {\n return \"rh-accordion.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion.html\";\n }\n\n static get observedAttributes() {\n return [\"theme\", \"color\"];\n }\n\n static get cascadingAttributes() {\n return {\n color: \"rh-accordion-header\"\n };\n }\n\n constructor() {\n super(RhAccordion);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"presentation\");\n this.setAttribute(\"defined\", \"\");\n\n this.addEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.addEventListener(\"keydown\", this._keydownHandler);\n\n Promise.all([\n customElements.whenDefined(RhAccordionHeader.tag),\n customElements.whenDefined(RhAccordionPanel.tag)\n ]).then(this._linkPanels());\n }\n\n disconnectedCallback() {\n this.removeEventListener(`${RhAccordion.tag}:change`, this._changeHandler);\n this.removeEventListener(\"keydown\", this._keydownHandler);\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n super.attributeChangedCallback(attr, oldVal, newVal);\n\n if (attr === \"color\") {\n const headers = this.querySelectorAll(RhAccordionHeader.tag);\n\n if (newVal === \"striped\") {\n [...headers].forEach((header, index) => {\n const headerClass = index % 2 ? \"even\" : \"odd\";\n header.classList.add(headerClass);\n });\n } else {\n [...headers].forEach((header, index) => {\n header.classList.remove(\"even\", \"odd\");\n });\n }\n }\n }\n\n toggle(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n if (!header.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n expand(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._expandHeader(header);\n this._expandPanel(panel);\n }\n\n expandAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._expandHeader(header));\n panels.forEach(panel => this._expandPanel(panel));\n }\n\n collapse(index) {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n const header = headers[index];\n const panel = panels[index];\n\n if (!header || !panel) {\n return;\n }\n\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n\n collapseAll() {\n const headers = this._allHeaders();\n const panels = this._allPanels();\n\n headers.forEach(header => this._collapseHeader(header));\n panels.forEach(panel => this._collapsePanel(panel));\n }\n\n _linkPanels() {\n const headers = this._allHeaders();\n headers.forEach(header => {\n const panel = this._panelForHeader(header);\n\n header.setAttribute(\"aria-controls\", panel.id);\n panel.setAttribute(\"aria-labelledby\", header.id);\n });\n }\n\n _changeHandler(evt) {\n if (this.classList.contains(\"animating\")) {\n return;\n }\n\n const header = evt.target;\n const panel = evt.target.nextElementSibling;\n\n if (evt.detail.expanded) {\n this._expandHeader(header);\n this._expandPanel(panel);\n } else {\n this._collapseHeader(header);\n this._collapsePanel(panel);\n }\n }\n\n _toggle(header, panel) {}\n\n _expandHeader(header) {\n header.expanded = true;\n }\n\n _expandPanel(panel) {\n if (panel.expanded) {\n return;\n }\n\n panel.expanded = true;\n\n const height = panel.getBoundingClientRect().height;\n this._animate(panel, 0, height);\n }\n\n _collapseHeader(header) {\n header.expanded = false;\n }\n\n _collapsePanel(panel) {\n if (!panel.expanded) {\n return;\n }\n\n const height = panel.getBoundingClientRect().height;\n panel.expanded = false;\n\n this._animate(panel, height, 0);\n }\n\n _animate(panel, start, end) {\n panel.classList.add(\"animating\");\n panel.style.height = `${start}px`;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n panel.style.height = `${end}px`;\n panel.classList.add(\"animating\");\n panel.addEventListener(\"transitionend\", this._transitionEndHandler);\n });\n });\n }\n\n _keydownHandler(evt) {\n const currentHeader = evt.target;\n\n if (!this._isHeader(currentHeader)) {\n return;\n }\n\n let newHeader;\n\n switch (evt.key) {\n case \"ArrowDown\":\n case \"Down\":\n case \"ArrowRight\":\n case \"Right\":\n newHeader = this._nextHeader();\n break;\n case \"ArrowUp\":\n case \"Up\":\n case \"ArrowLeft\":\n case \"Left\":\n newHeader = this._previousHeader();\n break;\n case \"Home\":\n newHeader = this._firstHeader();\n break;\n case \"End\":\n newHeader = this._lastHeader();\n break;\n default:\n return;\n }\n\n newHeader.shadowRoot.querySelector(\"button\").focus();\n }\n\n _transitionEndHandler(evt) {\n evt.target.style.height = \"\";\n evt.target.classList.remove(\"animating\");\n evt.target.removeEventListener(\"transitionend\", this._transitionEndHandler);\n }\n\n _allHeaders() {\n return [...this.querySelectorAll(RhAccordionHeader.tag)];\n }\n\n _allPanels() {\n return [...this.querySelectorAll(RhAccordionPanel.tag)];\n }\n\n _panelForHeader(header) {\n const next = header.nextElementSibling;\n\n if (next.tagName.toLowerCase() !== RhAccordionPanel.tag) {\n console.error(\n `${RhAccordion.tag}: Sibling element to a header needs to be a panel`\n );\n return;\n }\n\n return next;\n }\n\n _previousHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) - 1;\n return headers[(newIndex + headers.length) % headers.length];\n }\n\n _nextHeader() {\n const headers = this._allHeaders();\n let newIndex =\n headers.findIndex(header => header === document.activeElement) + 1;\n return headers[newIndex % headers.length];\n }\n\n _firstHeader() {\n const headers = this._allHeaders();\n return headers[0];\n }\n\n _lastHeader() {\n const headers = this._allHeaders();\n return headers[headers.length - 1];\n }\n\n _isHeader(element) {\n return element.tagName.toLowerCase() === RhAccordionHeader.tag;\n }\n}\n\nclass RhAccordionHeader extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-accordion-header\";\n }\n\n get styleUrl() {\n return \"rh-accordion-header.scss\";\n }\n\n get templateUrl() {\n return \"rh-accordion-header.html\";\n }\n\n static get observedAttributes() {\n return [\"aria-expanded\"];\n }\n\n constructor() {\n super(RhAccordionHeader);\n this._clickHandler = this._clickHandler.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"header\");\n }\n\n if (!this.id) {\n this.id = `${RhAccordionHeader.tag}-${generateId()}`;\n }\n\n this.button = this.shadowRoot.querySelector(\"button\");\n\n const child = this.children[0];\n let isHeaderTag = false;\n\n if (child) {\n switch (child.tagName) {\n case \"H1\":\n case \"H2\":\n case \"H3\":\n case \"H4\":\n case \"H5\":\n case \"H6\":\n isHeaderTag = true;\n break;\n }\n\n const wrapperTag = document.createElement(child.tagName);\n this.button.innerText = child.innerText;\n\n wrapperTag.appendChild(this.button);\n this.shadowRoot.appendChild(wrapperTag);\n } else {\n this.button.innerText = this.textContent.trim();\n }\n\n if (!isHeaderTag) {\n console.warn(\n `${\n RhAccordionHeader.tag\n }: The first child in the light DOM must be a Header level tag (h1, h2, h3, h4, h5, or h6)`\n );\n }\n\n this.addEventListener(\"click\", this._clickHandler);\n }\n\n disconnectedCallback() {\n this.removeEventListener(\"click\", this._clickHandler);\n }\n\n get expanded() {\n return this.hasAttribute(\"aria-expanded\");\n }\n\n set expanded(val) {\n val = Boolean(val);\n\n if (val) {\n this.setAttribute(\"aria-expanded\", true);\n this.button.setAttribute(\"aria-expanded\", true);\n } else {\n this.removeAttribute(\"aria-expanded\");\n this.button.setAttribute(\"aria-expanded\", false);\n }\n }\n\n _clickHandler(event) {\n this.dispatchEvent(\n new CustomEvent(`${RhAccordion.tag}:change`, {\n detail: { expanded: !this.expanded },\n bubbles: true\n })\n );\n }\n}\n\nclass RhAccordionPanel extends RHElement {\n get html() {\n return `\n\n
diff --git a/elements/rh-datetime/README.md b/elements/rh-datetime/README.md
index 4e07dc783d..e836c86b7c 100644
--- a/elements/rh-datetime/README.md
+++ b/elements/rh-datetime/README.md
@@ -65,6 +65,10 @@ You can use any locale here.
The value of this should be the same timestamp that you add to the light DOM.
+### timestamp (observed)
+
+A unix timestamp that will be converted for use in displaying the appropriate date. You would not use both datetime and timestamp, and the last updated will take precedence.
+
### type (observed)
The options for type are:
diff --git a/elements/rh-datetime/demo/index.html b/elements/rh-datetime/demo/index.html
index 34caaa6a1b..acae4175bf 100644
--- a/elements/rh-datetime/demo/index.html
+++ b/elements/rh-datetime/demo/index.html
@@ -53,6 +53,19 @@
Local
Mon Jan 2 15:04:05 EST 2006
+
+ Just date (unix timestamp):
+
+ Mon Jan 2 15:04:05 EST 2006
+
+
+
With time: {
- return gulp
- .src("./rh-datetime.js")
- .pipe(
- replace(
- /^(import .*?)(['"]\.\.\/(?!\.\.\/).*)(\.js['"];)$/gm,
- "$1$2.umd$3"
- )
- )
- .pipe(
- rename({
- suffix: ".umd"
- })
- )
- .pipe(gulp.dest("./"));
-});
-
-gulp.task("merge", () => {
- return gulp
- .src("./src/rh-datetime.js")
- .pipe(
- replace(
- /extends\s+RHElement\s+{/g,
- (classStatement, character, jsFile) => {
- // extract the templateUrl and styleUrl with regex. Would prefer to do
- // this by require'ing rh-something.js and asking it directly, but without
- // node.js support for ES modules, we're stuck with this.
- const oneLineFile = jsFile
- .slice(character)
- .split("\n")
- .join(" ");
- const [
- ,
- templateUrl
- ] = /get\s+templateUrl\([^)]*\)\s*{\s*return\s+"([^"]+)"/.exec(
- oneLineFile
- );
-
- let html = fs
- .readFileSync(path.join("./src", templateUrl))
- .toString()
- .trim();
-
- html = decomment(html);
-
- const [
- ,
- styleUrl
- ] = /get\s+styleUrl\([^)]*\)\s*{\s*return\s+"([^"]+)"/.exec(
- oneLineFile
- );
-
- const styleFilePath = path.join("./src", styleUrl);
-
- let cssResult = sass.renderSync({
- file: styleFilePath
- }).css;
-
- cssResult = stripCssComments(cssResult).trim();
-
- return `${classStatement}
- get html() {
- return \`
-
-${html}\`;
- }
-`;
- }
- )
- )
- .pipe(gulp.dest("./"));
-});
-
-gulp.task("watch", () => {
- return gulp.watch("./src/*", gulp.series("merge", "compile", "bundle"));
-});
-
-gulp.task("bundle", shell.task("../../node_modules/.bin/rollup -c"));
-
-gulp.task("default", gulp.series("merge", "compile", "bundle"));
-
-gulp.task("dev", gulp.series("merge", "compile", "bundle", "watch"));
+gulpFactory(rhelementPackage.rhelement);
diff --git a/elements/rh-datetime/package.json b/elements/rh-datetime/package.json
index b66272b02b..c95d329117 100644
--- a/elements/rh-datetime/package.json
+++ b/elements/rh-datetime/package.json
@@ -17,7 +17,7 @@
"scripts": {
"build": "../../node_modules/.bin/gulp && ../../node_modules/.bin/prettier --ignore-path ../../.prettierignore --write '**/*.{js,json}'",
"dev": "../../node_modules/.bin/gulp dev",
- "test": "../../node_modules/.bin/wct --configFile ../../wct.conf.json node_modules/@rhelements/rh-datetime/test/"
+ "test": "../../node_modules/.bin/wct --configFile ../../wct.conf.json elements/rh-datetime/test/"
},
"author": {
"name": "Luke Dary"
diff --git a/elements/rh-datetime/rh-datetime.js b/elements/rh-datetime/rh-datetime.js
index 4b08225662..c06d5cd924 100644
--- a/elements/rh-datetime/rh-datetime.js
+++ b/elements/rh-datetime/rh-datetime.js
@@ -50,45 +50,62 @@ class RhDatetime extends RHElement {
this.type = this.getAttribute("type") || "local";
}
- get datetime() {
- return this._datetime;
+ get type() {
+ return this._type;
}
- set datetime(val) {
- if (!Date.parse(val)) {
+ set type(val) {
+ if (this._type === val) {
return;
}
- if (Date.parse(val) && this._datetime === Date.parse(val)) {
+ this._type = val;
+ }
+
+ get timestamp() {
+ return this._timestamp;
+ }
+
+ set timestamp(val) {
+ if (this._timestamp === val) {
return;
}
- this._datetime = Date.parse(val);
- this.shadowRoot.querySelector("span").innerText = window.Intl
- ? this._getTypeString()
- : val;
+ this._timestamp = val;
+ this.setDate(new Date(val * 1000));
}
- get type() {
- return this._type;
+ get datetime() {
+ return this._datetime;
}
- set type(val) {
- if (this._type === val) {
+ set datetime(val) {
+ if (!Date.parse(val)) {
return;
}
- this._type = val;
+ if (Date.parse(val) && this._datetime === Date.parse(val)) {
+ return;
+ }
+
+ this.setDate(Date.parse(val));
}
static get observedAttributes() {
- return ["datetime", "type"];
+ return ["datetime", "type", "timestamp"];
}
attributeChangedCallback(attr, oldVal, newVal) {
this[attr] = newVal;
}
+ setDate(date) {
+ this._datetime = date;
+ this.shadowRoot.querySelector("span").innerText = window.Intl
+ ? this._getTypeString()
+ : date.toLocaleString();
+ }
+
_getOptions() {
const props = {
weekday: {
diff --git a/elements/rh-datetime/rh-datetime.js.map b/elements/rh-datetime/rh-datetime.js.map
index fd9e28e58a..78af300162 100644
--- a/elements/rh-datetime/rh-datetime.js.map
+++ b/elements/rh-datetime/rh-datetime.js.map
@@ -1 +1 @@
-{"version":3,"file":"rh-datetime.js","sources":["rh-datetime.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.js\";\n\nclass RhDatetime extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-datetime\";\n }\n\n get styleUrl() {\n return \"rh-datetime.scss\";\n }\n\n get templateUrl() {\n return \"rh-datetime.html\";\n }\n\n constructor() {\n super(RhDatetime);\n\n this.type = this.getAttribute(\"type\") || \"local\";\n }\n\n get datetime() {\n return this._datetime;\n }\n\n set datetime(val) {\n if (!Date.parse(val)) {\n return;\n }\n\n if (Date.parse(val) && this._datetime === Date.parse(val)) {\n return;\n }\n\n this._datetime = Date.parse(val);\n this.shadowRoot.querySelector(\"span\").innerText = window.Intl\n ? this._getTypeString()\n : val;\n }\n\n get type() {\n return this._type;\n }\n\n set type(val) {\n if (this._type === val) {\n return;\n }\n\n this._type = val;\n }\n\n static get observedAttributes() {\n return [\"datetime\", \"type\"];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n this[attr] = newVal;\n }\n\n _getOptions() {\n const props = {\n weekday: {\n short: \"short\",\n long: \"long\"\n },\n day: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n month: {\n short: \"short\",\n long: \"long\"\n },\n year: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n hour: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n minute: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n second: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n timeZoneName: {\n short: \"short\",\n long: \"long\"\n }\n };\n\n let options = {};\n\n for (const prop in props) {\n const value = props[prop][this.getAttribute(prop)];\n if (value) {\n options[prop] = value;\n }\n }\n\n return options;\n }\n\n _getTypeString() {\n const options = this._getOptions();\n const locale = this.getAttribute(\"locale\") || navigator.language;\n let dt = \"\";\n switch (this.type) {\n case \"local\":\n dt = new Intl.DateTimeFormat(locale, options).format(this._datetime);\n break;\n case \"relative\":\n dt = this._getTimeRelative(this._datetime - Date.now());\n break;\n default:\n dt = this._datetime;\n }\n return dt;\n }\n\n _getTimeRelative(ms) {\n const tense = ms > 0 ? \"until\" : \"ago\";\n let str = \"just now\";\n // Based off of Github Relative Time\n // https://github.com/github/time-elements/blob/master/src/relative-time.js\n const s = Math.round(Math.abs(ms) / 1000);\n const min = Math.round(s / 60);\n const h = Math.round(min / 60);\n const d = Math.round(h / 24);\n const m = Math.round(d / 30);\n const y = Math.round(m / 12);\n if (m >= 18) {\n str = y + \" years\";\n } else if (m >= 12) {\n str = \"a year\";\n } else if (d >= 45) {\n str = m + \" months\";\n } else if (d >= 30) {\n str = \"a month\";\n } else if (h >= 36) {\n str = d + \" days\";\n } else if (h >= 24) {\n str = \"a day\";\n } else if (min >= 90) {\n str = h + \" hours\";\n } else if (min >= 45) {\n str = \"an hour\";\n } else if (s >= 90) {\n str = min + \" minutes\";\n } else if (s >= 45) {\n str = \"a minute\";\n } else if (s >= 10) {\n str = s + \" seconds\";\n }\n return str !== \"just now\" ? `${str} ${tense}` : str;\n }\n}\n\nRHElement.create(RhDatetime);\n"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"rh-datetime.js","sources":["rh-datetime.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.js\";\n\nclass RhDatetime extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-datetime\";\n }\n\n get styleUrl() {\n return \"rh-datetime.scss\";\n }\n\n get templateUrl() {\n return \"rh-datetime.html\";\n }\n\n constructor() {\n super(RhDatetime);\n\n this.type = this.getAttribute(\"type\") || \"local\";\n }\n\n get type() {\n return this._type;\n }\n\n set type(val) {\n if (this._type === val) {\n return;\n }\n\n this._type = val;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(val) {\n if (this._timestamp === val) {\n return;\n }\n\n this._timestamp = val;\n this.setDate(new Date(val * 1000));\n }\n\n get datetime() {\n return this._datetime;\n }\n\n set datetime(val) {\n if (!Date.parse(val)) {\n return;\n }\n\n if (Date.parse(val) && this._datetime === Date.parse(val)) {\n return;\n }\n\n this.setDate(Date.parse(val));\n }\n\n static get observedAttributes() {\n return [\"datetime\", \"type\", \"timestamp\"];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n this[attr] = newVal;\n }\n\n setDate(date) {\n this._datetime = date;\n this.shadowRoot.querySelector(\"span\").innerText = window.Intl\n ? this._getTypeString()\n : date.toLocaleString();\n }\n\n _getOptions() {\n const props = {\n weekday: {\n short: \"short\",\n long: \"long\"\n },\n day: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n month: {\n short: \"short\",\n long: \"long\"\n },\n year: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n hour: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n minute: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n second: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n timeZoneName: {\n short: \"short\",\n long: \"long\"\n }\n };\n\n let options = {};\n\n for (const prop in props) {\n const value = props[prop][this.getAttribute(prop)];\n if (value) {\n options[prop] = value;\n }\n }\n\n return options;\n }\n\n _getTypeString() {\n const options = this._getOptions();\n const locale = this.getAttribute(\"locale\") || navigator.language;\n let dt = \"\";\n switch (this.type) {\n case \"local\":\n dt = new Intl.DateTimeFormat(locale, options).format(this._datetime);\n break;\n case \"relative\":\n dt = this._getTimeRelative(this._datetime - Date.now());\n break;\n default:\n dt = this._datetime;\n }\n return dt;\n }\n\n _getTimeRelative(ms) {\n const tense = ms > 0 ? \"until\" : \"ago\";\n let str = \"just now\";\n // Based off of Github Relative Time\n // https://github.com/github/time-elements/blob/master/src/relative-time.js\n const s = Math.round(Math.abs(ms) / 1000);\n const min = Math.round(s / 60);\n const h = Math.round(min / 60);\n const d = Math.round(h / 24);\n const m = Math.round(d / 30);\n const y = Math.round(m / 12);\n if (m >= 18) {\n str = y + \" years\";\n } else if (m >= 12) {\n str = \"a year\";\n } else if (d >= 45) {\n str = m + \" months\";\n } else if (d >= 30) {\n str = \"a month\";\n } else if (h >= 36) {\n str = d + \" days\";\n } else if (h >= 24) {\n str = \"a day\";\n } else if (min >= 90) {\n str = h + \" hours\";\n } else if (min >= 45) {\n str = \"an hour\";\n } else if (s >= 90) {\n str = min + \" minutes\";\n } else if (s >= 45) {\n str = \"a minute\";\n } else if (s >= 10) {\n str = s + \" seconds\";\n }\n return str !== \"just now\" ? `${str} ${tense}` : str;\n }\n}\n\nRHElement.create(RhDatetime);\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/elements/rh-datetime/rh-datetime.umd.js b/elements/rh-datetime/rh-datetime.umd.js
index ddc7a8d1d8..39c962643c 100644
--- a/elements/rh-datetime/rh-datetime.umd.js
+++ b/elements/rh-datetime/rh-datetime.umd.js
@@ -1,2 +1,2 @@
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("../rhelement/rhelement.umd.js")):"function"==typeof define&&define.amd?define(["../rhelement/rhelement.umd.js"],e):e(t.RHElement)}(this,function(n){"use strict";n=n&&n.hasOwnProperty("default")?n.default:n;var r=function(){function r(t,e){for(var n=0;n\n:host {\n display: inline; }\n\n"}},{key:"styleUrl",get:function(){return"rh-datetime.scss"}},{key:"templateUrl",get:function(){return"rh-datetime.html"}}],[{key:"tag",get:function(){return"rh-datetime"}}]),r(e,[{key:"attributeChangedCallback",value:function(t,e,n){this[t]=n}},{key:"_getOptions",value:function(){var t={weekday:{short:"short",long:"long"},day:{numeric:"numeric","2-digit":"2-digit"},month:{short:"short",long:"long"},year:{numeric:"numeric","2-digit":"2-digit"},hour:{numeric:"numeric","2-digit":"2-digit"},minute:{numeric:"numeric","2-digit":"2-digit"},second:{numeric:"numeric","2-digit":"2-digit"},timeZoneName:{short:"short",long:"long"}},e={};for(var n in t){var r=t[n][this.getAttribute(n)];r&&(e[n]=r)}return e}},{key:"_getTypeString",value:function(){var t=this._getOptions(),e=this.getAttribute("locale")||navigator.language,n="";switch(this.type){case"local":n=new Intl.DateTimeFormat(e,t).format(this._datetime);break;case"relative":n=this._getTimeRelative(this._datetime-Date.now());break;default:n=this._datetime}return n}},{key:"_getTimeRelative",value:function(t){var e=0\n:host {\n display: inline; }\n\n"}},{key:"styleUrl",get:function(){return"rh-datetime.scss"}},{key:"templateUrl",get:function(){return"rh-datetime.html"}}],[{key:"tag",get:function(){return"rh-datetime"}}]),i(e,[{key:"attributeChangedCallback",value:function(t,e,n){this[t]=n}},{key:"setDate",value:function(t){this._datetime=t,this.shadowRoot.querySelector("span").innerText=window.Intl?this._getTypeString():t.toLocaleString()}},{key:"_getOptions",value:function(){var t={weekday:{short:"short",long:"long"},day:{numeric:"numeric","2-digit":"2-digit"},month:{short:"short",long:"long"},year:{numeric:"numeric","2-digit":"2-digit"},hour:{numeric:"numeric","2-digit":"2-digit"},minute:{numeric:"numeric","2-digit":"2-digit"},second:{numeric:"numeric","2-digit":"2-digit"},timeZoneName:{short:"short",long:"long"}},e={};for(var n in t){var i=t[n][this.getAttribute(n)];i&&(e[n]=i)}return e}},{key:"_getTypeString",value:function(){var t=this._getOptions(),e=this.getAttribute("locale")||navigator.language,n="";switch(this.type){case"local":n=new Intl.DateTimeFormat(e,t).format(this._datetime);break;case"relative":n=this._getTimeRelative(this._datetime-Date.now());break;default:n=this._datetime}return n}},{key:"_getTimeRelative",value:function(t){var e=0\n:host {\n display: inline; }\n\n`;\n }\n\n static get tag() {\n return \"rh-datetime\";\n }\n\n get styleUrl() {\n return \"rh-datetime.scss\";\n }\n\n get templateUrl() {\n return \"rh-datetime.html\";\n }\n\n constructor() {\n super(RhDatetime);\n\n this.type = this.getAttribute(\"type\") || \"local\";\n }\n\n get datetime() {\n return this._datetime;\n }\n\n set datetime(val) {\n if (!Date.parse(val)) {\n return;\n }\n\n if (Date.parse(val) && this._datetime === Date.parse(val)) {\n return;\n }\n\n this._datetime = Date.parse(val);\n this.shadowRoot.querySelector(\"span\").innerText = window.Intl\n ? this._getTypeString()\n : val;\n }\n\n get type() {\n return this._type;\n }\n\n set type(val) {\n if (this._type === val) {\n return;\n }\n\n this._type = val;\n }\n\n static get observedAttributes() {\n return [\"datetime\", \"type\"];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n this[attr] = newVal;\n }\n\n _getOptions() {\n const props = {\n weekday: {\n short: \"short\",\n long: \"long\"\n },\n day: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n month: {\n short: \"short\",\n long: \"long\"\n },\n year: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n hour: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n minute: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n second: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n timeZoneName: {\n short: \"short\",\n long: \"long\"\n }\n };\n\n let options = {};\n\n for (const prop in props) {\n const value = props[prop][this.getAttribute(prop)];\n if (value) {\n options[prop] = value;\n }\n }\n\n return options;\n }\n\n _getTypeString() {\n const options = this._getOptions();\n const locale = this.getAttribute(\"locale\") || navigator.language;\n let dt = \"\";\n switch (this.type) {\n case \"local\":\n dt = new Intl.DateTimeFormat(locale, options).format(this._datetime);\n break;\n case \"relative\":\n dt = this._getTimeRelative(this._datetime - Date.now());\n break;\n default:\n dt = this._datetime;\n }\n return dt;\n }\n\n _getTimeRelative(ms) {\n const tense = ms > 0 ? \"until\" : \"ago\";\n let str = \"just now\";\n // Based off of Github Relative Time\n // https://github.com/github/time-elements/blob/master/src/relative-time.js\n const s = Math.round(Math.abs(ms) / 1000);\n const min = Math.round(s / 60);\n const h = Math.round(min / 60);\n const d = Math.round(h / 24);\n const m = Math.round(d / 30);\n const y = Math.round(m / 12);\n if (m >= 18) {\n str = y + \" years\";\n } else if (m >= 12) {\n str = \"a year\";\n } else if (d >= 45) {\n str = m + \" months\";\n } else if (d >= 30) {\n str = \"a month\";\n } else if (h >= 36) {\n str = d + \" days\";\n } else if (h >= 24) {\n str = \"a day\";\n } else if (min >= 90) {\n str = h + \" hours\";\n } else if (min >= 45) {\n str = \"an hour\";\n } else if (s >= 90) {\n str = min + \" minutes\";\n } else if (s >= 45) {\n str = \"a minute\";\n } else if (s >= 10) {\n str = s + \" seconds\";\n }\n return str !== \"just now\" ? `${str} ${tense}` : str;\n }\n}\n\nRHElement.create(RhDatetime);\n"],"names":["RhDatetime","type","_this","getAttribute","RHElement","attr","oldVal","newVal","props","options","prop","value","this","_getOptions","locale","navigator","language","dt","Intl","DateTimeFormat","format","_datetime","_getTimeRelative","Date","now","ms","tense","str","s","Math","round","abs","min","h","d","m","y","val","parse","shadowRoot","querySelector","innerText","window","_getTypeString","_type","create"],"mappings":"shBAwBMA,gWAuBIA,aAEDC,KAAOC,EAAKC,aAAa,SAAW,6UAzBpBC,oJAed,6DAIA,uDARA,sEAoDgBC,EAAMC,EAAQC,QAChCF,GAAQE,4CAIPC,EAAQ,SACH,OACA,aACD,YAEH,SACM,oBACE,iBAEN,OACE,aACD,aAEF,SACK,oBACE,gBAEP,SACK,oBACE,kBAEL,SACG,oBACE,kBAEL,SACG,oBACE,wBAEC,OACL,aACD,SAINC,EAAU,OAET,IAAMC,KAAQF,EAAO,KAClBG,EAAQH,EAAME,GAAME,KAAKT,aAAaO,IACxCC,MACMD,GAAQC,UAIbF,+CAIDA,EAAUG,KAAKC,cACfC,EAASF,KAAKT,aAAa,WAAaY,UAAUC,SACpDC,EAAK,UACDL,KAAKX,UACN,UACE,IAAIiB,KAAKC,eAAeL,EAAQL,GAASW,OAAOR,KAAKS,qBAEvD,aACET,KAAKU,iBAAiBV,KAAKS,UAAYE,KAAKC,uBAG5CZ,KAAKS,iBAEPJ,2CAGQQ,OACTC,EAAa,EAALD,EAAS,QAAU,MAC7BE,EAAM,WAGJC,EAAIC,KAAKC,MAAMD,KAAKE,IAAIN,GAAM,KAC9BO,EAAMH,KAAKC,MAAMF,EAAI,IACrBK,EAAIJ,KAAKC,MAAME,EAAM,IACrBE,EAAIL,KAAKC,MAAMG,EAAI,IACnBE,EAAIN,KAAKC,MAAMI,EAAI,IACnBE,EAAIP,KAAKC,MAAMK,EAAI,WAChB,IAALA,IACIC,EAAI,SACI,IAALD,IACH,SACQ,IAALD,IACHC,EAAI,UACI,IAALD,IACH,UACQ,IAALD,IACHC,EAAI,QACI,IAALD,IACH,QACU,IAAPD,IACHC,EAAI,SACM,IAAPD,IACH,UACQ,IAALJ,IACHI,EAAM,WACE,IAALJ,IACH,WACQ,IAALA,MACHA,EAAI,YAEG,aAARD,EAAwBA,MAAOD,EAAUC,0CAzIzCf,KAAKS,wBAGDgB,GACNd,KAAKe,MAAMD,KAIZd,KAAKe,MAAMD,IAAQzB,KAAKS,YAAcE,KAAKe,MAAMD,UAIhDhB,UAAYE,KAAKe,MAAMD,QACvBE,WAAWC,cAAc,QAAQC,UAAYC,OAAOxB,KACrDN,KAAK+B,iBACLN,wCAIGzB,KAAKgC,oBAGLP,GACHzB,KAAKgC,QAAUP,SAIdO,MAAQP,sDAIN,CAAC,WAAY,iBA8GxBjC,EAAUyC,OAAO7C"}
\ No newline at end of file
+{"version":3,"file":"rh-datetime.umd.js","sources":["rh-datetime.umd.js"],"sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RHElement from \"../rhelement/rhelement.umd.js\";\n\nclass RhDatetime extends RHElement {\n get html() {\n return `\n\n`;\n }\n\n static get tag() {\n return \"rh-datetime\";\n }\n\n get styleUrl() {\n return \"rh-datetime.scss\";\n }\n\n get templateUrl() {\n return \"rh-datetime.html\";\n }\n\n constructor() {\n super(RhDatetime);\n\n this.type = this.getAttribute(\"type\") || \"local\";\n }\n\n get type() {\n return this._type;\n }\n\n set type(val) {\n if (this._type === val) {\n return;\n }\n\n this._type = val;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(val) {\n if (this._timestamp === val) {\n return;\n }\n\n this._timestamp = val;\n this.setDate(new Date(val * 1000));\n }\n\n get datetime() {\n return this._datetime;\n }\n\n set datetime(val) {\n if (!Date.parse(val)) {\n return;\n }\n\n if (Date.parse(val) && this._datetime === Date.parse(val)) {\n return;\n }\n\n this.setDate(Date.parse(val));\n }\n\n static get observedAttributes() {\n return [\"datetime\", \"type\", \"timestamp\"];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n this[attr] = newVal;\n }\n\n setDate(date) {\n this._datetime = date;\n this.shadowRoot.querySelector(\"span\").innerText = window.Intl\n ? this._getTypeString()\n : date.toLocaleString();\n }\n\n _getOptions() {\n const props = {\n weekday: {\n short: \"short\",\n long: \"long\"\n },\n day: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n month: {\n short: \"short\",\n long: \"long\"\n },\n year: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n hour: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n minute: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n second: {\n numeric: \"numeric\",\n \"2-digit\": \"2-digit\"\n },\n timeZoneName: {\n short: \"short\",\n long: \"long\"\n }\n };\n\n let options = {};\n\n for (const prop in props) {\n const value = props[prop][this.getAttribute(prop)];\n if (value) {\n options[prop] = value;\n }\n }\n\n return options;\n }\n\n _getTypeString() {\n const options = this._getOptions();\n const locale = this.getAttribute(\"locale\") || navigator.language;\n let dt = \"\";\n switch (this.type) {\n case \"local\":\n dt = new Intl.DateTimeFormat(locale, options).format(this._datetime);\n break;\n case \"relative\":\n dt = this._getTimeRelative(this._datetime - Date.now());\n break;\n default:\n dt = this._datetime;\n }\n return dt;\n }\n\n _getTimeRelative(ms) {\n const tense = ms > 0 ? \"until\" : \"ago\";\n let str = \"just now\";\n // Based off of Github Relative Time\n // https://github.com/github/time-elements/blob/master/src/relative-time.js\n const s = Math.round(Math.abs(ms) / 1000);\n const min = Math.round(s / 60);\n const h = Math.round(min / 60);\n const d = Math.round(h / 24);\n const m = Math.round(d / 30);\n const y = Math.round(m / 12);\n if (m >= 18) {\n str = y + \" years\";\n } else if (m >= 12) {\n str = \"a year\";\n } else if (d >= 45) {\n str = m + \" months\";\n } else if (d >= 30) {\n str = \"a month\";\n } else if (h >= 36) {\n str = d + \" days\";\n } else if (h >= 24) {\n str = \"a day\";\n } else if (min >= 90) {\n str = h + \" hours\";\n } else if (min >= 45) {\n str = \"an hour\";\n } else if (s >= 90) {\n str = min + \" minutes\";\n } else if (s >= 45) {\n str = \"a minute\";\n } else if (s >= 10) {\n str = s + \" seconds\";\n }\n return str !== \"just now\" ? `${str} ${tense}` : str;\n }\n}\n\nRHElement.create(RhDatetime);\n"],"names":["RhDatetime","type","_this","getAttribute","RHElement","attr","oldVal","newVal","date","_datetime","shadowRoot","querySelector","innerText","window","Intl","this","_getTypeString","toLocaleString","props","options","prop","value","_getOptions","locale","navigator","language","dt","DateTimeFormat","format","_getTimeRelative","Date","now","ms","tense","str","s","Math","round","abs","min","h","d","m","y","_type","val","_timestamp","setDate","parse","create"],"mappings":"shBAwBMA,gWAuBIA,aAEDC,KAAOC,EAAKC,aAAa,SAAW,6UAzBpBC,oJAed,6DAIA,uDARA,sEA8DgBC,EAAMC,EAAQC,QAChCF,GAAQE,kCAGPC,QACDC,UAAYD,OACZE,WAAWC,cAAc,QAAQC,UAAYC,OAAOC,KACrDC,KAAKC,iBACLR,EAAKS,2DAIHC,EAAQ,SACH,OACA,aACD,YAEH,SACM,oBACE,iBAEN,OACE,aACD,aAEF,SACK,oBACE,gBAEP,SACK,oBACE,kBAEL,SACG,oBACE,kBAEL,SACG,oBACE,wBAEC,OACL,aACD,SAINC,EAAU,OAET,IAAMC,KAAQF,EAAO,KAClBG,EAAQH,EAAME,GAAML,KAAKZ,aAAaiB,IACxCC,MACMD,GAAQC,UAIbF,+CAIDA,EAAUJ,KAAKO,cACfC,EAASR,KAAKZ,aAAa,WAAaqB,UAAUC,SACpDC,EAAK,UACDX,KAAKd,UACN,UACE,IAAIa,KAAKa,eAAeJ,EAAQJ,GAASS,OAAOb,KAAKN,qBAEvD,aACEM,KAAKc,iBAAiBd,KAAKN,UAAYqB,KAAKC,uBAG5ChB,KAAKN,iBAEPiB,2CAGQM,OACTC,EAAa,EAALD,EAAS,QAAU,MAC7BE,EAAM,WAGJC,EAAIC,KAAKC,MAAMD,KAAKE,IAAIN,GAAM,KAC9BO,EAAMH,KAAKC,MAAMF,EAAI,IACrBK,EAAIJ,KAAKC,MAAME,EAAM,IACrBE,EAAIL,KAAKC,MAAMG,EAAI,IACnBE,EAAIN,KAAKC,MAAMI,EAAI,IACnBE,EAAIP,KAAKC,MAAMK,EAAI,WAChB,IAALA,IACIC,EAAI,SACI,IAALD,IACH,SACQ,IAALD,IACHC,EAAI,UACI,IAALD,IACH,UACQ,IAALD,IACHC,EAAI,QACI,IAALD,IACH,QACU,IAAPD,IACHC,EAAI,SACM,IAAPD,IACH,UACQ,IAALJ,IACHI,EAAM,WACE,IAALJ,IACH,WACQ,IAALA,MACHA,EAAI,YAEG,aAARD,EAAwBA,MAAOD,EAAUC,sCA1JzCnB,KAAK6B,oBAGLC,GACH9B,KAAK6B,QAAUC,SAIdD,MAAQC,4CAIN9B,KAAK+B,yBAGAD,GACR9B,KAAK+B,aAAeD,SAInBC,WAAaD,OACbE,QAAQ,IAAIjB,KAAW,IAANe,6CAIf9B,KAAKN,wBAGDoC,GACNf,KAAKkB,MAAMH,KAIZf,KAAKkB,MAAMH,IAAQ9B,KAAKN,YAAcqB,KAAKkB,MAAMH,SAIhDE,QAAQjB,KAAKkB,MAAMH,wDAIjB,CAAC,WAAY,OAAQ,sBAqHhCzC,EAAU6C,OAAOjD"}
\ No newline at end of file
diff --git a/elements/rh-datetime/src/rh-datetime.js b/elements/rh-datetime/src/rh-datetime.js
index d99b9f9c6f..5d4e83e364 100644
--- a/elements/rh-datetime/src/rh-datetime.js
+++ b/elements/rh-datetime/src/rh-datetime.js
@@ -41,45 +41,62 @@ class RhDatetime extends RHElement {
this.type = this.getAttribute("type") || "local";
}
- get datetime() {
- return this._datetime;
+ get type() {
+ return this._type;
}
- set datetime(val) {
- if (!Date.parse(val)) {
+ set type(val) {
+ if (this._type === val) {
return;
}
- if (Date.parse(val) && this._datetime === Date.parse(val)) {
+ this._type = val;
+ }
+
+ get timestamp() {
+ return this._timestamp;
+ }
+
+ set timestamp(val) {
+ if (this._timestamp === val) {
return;
}
- this._datetime = Date.parse(val);
- this.shadowRoot.querySelector("span").innerText = window.Intl
- ? this._getTypeString()
- : val;
+ this._timestamp = val;
+ this.setDate(new Date(val * 1000));
}
- get type() {
- return this._type;
+ get datetime() {
+ return this._datetime;
}
- set type(val) {
- if (this._type === val) {
+ set datetime(val) {
+ if (!Date.parse(val)) {
return;
}
- this._type = val;
+ if (Date.parse(val) && this._datetime === Date.parse(val)) {
+ return;
+ }
+
+ this.setDate(Date.parse(val));
}
static get observedAttributes() {
- return ["datetime", "type"];
+ return ["datetime", "type", "timestamp"];
}
attributeChangedCallback(attr, oldVal, newVal) {
this[attr] = newVal;
}
+ setDate(date) {
+ this._datetime = date;
+ this.shadowRoot.querySelector("span").innerText = window.Intl
+ ? this._getTypeString()
+ : date.toLocaleString();
+ }
+
_getOptions() {
const props = {
weekday: {
diff --git a/elements/rh-datetime/test/rh-datetime_test.html b/elements/rh-datetime/test/rh-datetime_test.html
index 9568f41d4b..7b5ab5da3e 100644
--- a/elements/rh-datetime/test/rh-datetime_test.html
+++ b/elements/rh-datetime/test/rh-datetime_test.html
@@ -60,9 +60,6 @@
month="short"
day="2-digit"
year="numeric"
- hour="2-digit"
- minute="2-digit"
- second="2-digit"
locale="es">
Mon Jan 2 15:04:05 EST 2006
@@ -84,6 +81,12 @@
Mon Jan 2 15:04:05 EST 2006
+
+ Mon Jan 2 15:04:05 EST 2006
+
+