From b715463be27fc65237cd0d4112080bd89cfd4118 Mon Sep 17 00:00:00 2001 From: Max Morgan Date: Fri, 29 Sep 2023 10:07:14 -0400 Subject: [PATCH 1/2] enable eslint, suppress warnings, add GH action to check format and lint --- .eslintrc.yml | 15 + .github/workflows/code-format-lint.yml | 19 + package.json | 7 + .../atoms/AccordionBody/AccordionBody.css | 2 +- .../atoms/AccordionBody/AccordionBody.js | 10 + .../atoms/AccordionHeader/AccordionHeader.css | 2 +- .../atoms/AccordionHeader/AccordionHeader.js | 22 + .../atoms/AccordionItem/AccordionItem.js | 26 + src/components/atoms/Alert/Alert.js | 22 + src/components/atoms/Badge/Badge.js | 20 + src/components/atoms/Breadcrumb/Breadcrumb.js | 16 + src/components/atoms/Button/Button.js | 76 ++ src/components/atoms/CardBody/CardBody.js | 4 + src/components/atoms/CardFooter/CardFooter.js | 4 + src/components/atoms/CardHeader/CardHeader.js | 4 + .../atoms/CardOverlay/CardOverlay.js | 4 + .../atoms/CarouselCaption/CarouselCaption.js | 10 + .../atoms/CarouselItem/CarouselItem.js | 4 + src/components/atoms/Container/Container.js | 12 + .../atoms/DropdownMenu/DropdownMenu.js | 30 + src/components/atoms/FormCheck/FormCheck.js | 51 +- .../atoms/FormControl/FormControl.js | 62 ++ src/components/atoms/FormLabel/FormLabel.js | 14 + src/components/atoms/FormSelect/FormSelect.js | 36 + src/components/atoms/Icon/Icon.js | 26 + src/components/atoms/Image/Image.js | 4 + .../atoms/ListGroupItem/ListGroupItem.js | 34 + src/components/atoms/Loader/Loader.js | 4 + src/components/atoms/ModalBody/ModalBody.js | 10 + .../atoms/ModalFooter/ModalFooter.js | 16 + .../atoms/ModalHeader/ModalHeader.js | 18 + .../atoms/NavbarBrand/NavbarBrand.js | 40 + .../atoms/NavbarCollapse/NavbarCollapse.js | 4 + .../atoms/NavbarOffcanvas/NavbarOffcanvas.js | 60 ++ .../atoms/NavbarToggle/NavbarToggle.js | 26 + .../atoms/OffcanvasBody/OffcanvasBody.js | 10 + .../atoms/OffcanvasHeader/OffcanvasHeader.js | 18 + .../atoms/PaginationItem/PaginationItem.js | 32 + src/components/atoms/Progress/Progress.js | 24 + src/components/atoms/Range/Range.js | 22 + src/components/atoms/Spinner/Spinner.js | 16 + src/components/atoms/TableBody/TableBody.js | 14 + src/components/atoms/TableCell/TableCell.js | 26 + .../atoms/TableCellHeader/TableCellHeader.js | 26 + .../atoms/TableHeader/TableHeader.js | 10 + src/components/atoms/TableRow/TableRow.js | 22 + .../molecules/Accordion/Accordion.css | 2 +- .../molecules/Accordion/Accordion.js | 18 + .../molecules/ButtonGroup/ButtonGroup.js | 18 + src/components/molecules/Dropdown/Dropdown.js | 20 + .../FormCheckGroup/FormCheckGroup.js | 20 + .../molecules/ListGroup/ListGroup.js | 18 + src/components/molecules/Nav/Nav.js | 42 + .../molecules/Pagination/Pagination.js | 30 + src/components/organisms/Card/Card.js | 52 ++ src/components/organisms/Carousel/Carousel.js | 86 ++ src/components/organisms/Form/Form.js | 12 + src/components/organisms/Geocoder/Geocoder.js | 43 +- src/components/organisms/Map/Map.js | 8 + src/components/organisms/Modal/Modal.js | 56 ++ src/components/organisms/Navbar/Navbar.js | 60 ++ .../organisms/Offcanvas/Offcanvas.js | 62 ++ src/components/organisms/Table/Table.js | 36 + src/scss/themed-bootstrap.scss | 2 +- src/stories/badge.stories.js | 6 + src/stories/button.stories.js | 4 + src/stories/container.stories.js | 2 + src/stories/formcheck.stories.js | 16 + src/stories/formcontrol.stories.js | 8 + src/stories/formselect.stories.js | 16 + src/stories/range.stories.js | 6 + yarn.lock | 850 +++++++++++++++++- 72 files changed, 2411 insertions(+), 16 deletions(-) create mode 100644 .eslintrc.yml create mode 100644 .github/workflows/code-format-lint.yml diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..48b626b3 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,15 @@ +env: + browser: true + commonjs: true + es2021: true +extends: [eslint:recommended, prettier] +parserOptions: + ecmaVersion: latest + sourceType: module +rules: { + eqeqeq: [error, always], + no-else-return: [error], + no-implicit-coercion: [warn], + prefer-const: [error], + no-console: [error] +} \ No newline at end of file diff --git a/.github/workflows/code-format-lint.yml b/.github/workflows/code-format-lint.yml new file mode 100644 index 00000000..1d4b3428 --- /dev/null +++ b/.github/workflows/code-format-lint.yml @@ -0,0 +1,19 @@ +name: "Prettier Format & ESLint" + +on: + push: + branches: [ dev ] + pull_request: + branches: [ dev ] + +jobs: + format_and_lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - run: yarn install --frozen-lockfile + - run: yarn check-lint-config + - run: yarn lint \ No newline at end of file diff --git a/package.json b/package.json index 20c9cf16..831a0189 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "readmeFilename": "README.md", "homepage": "https://jedgar1mx.github.io/COD-Design-System", "scripts": { + "check-lint-config": "npx eslint-config-prettier src/index.js", + "lint": "eslint src && prettier --check src/*", "build": "webpack --mode production", "build-package": "cross-env BABEL_ENV=production babel src -d dist", "start": "webpack-dev-server --mode development", @@ -69,6 +71,11 @@ "css-loader": "^6.5.0", "css-minimizer-webpack-plugin": "^3.4.1", "cypress": "^9.5.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0", "file-loader": "^6.2.0", "html-webpack-plugin": "^5.5.0", "jest": "27", diff --git a/src/components/atoms/AccordionBody/AccordionBody.css b/src/components/atoms/AccordionBody/AccordionBody.css index 7e2cea6a..7733fd28 100644 --- a/src/components/atoms/AccordionBody/AccordionBody.css +++ b/src/components/atoms/AccordionBody/AccordionBody.css @@ -1,4 +1,4 @@ .accordion-body.data-li { border-left: 3px solid; border-color: var(--color-1); -} \ No newline at end of file +} diff --git a/src/components/atoms/AccordionBody/AccordionBody.js b/src/components/atoms/AccordionBody/AccordionBody.js index 18424d0b..3d69cec2 100644 --- a/src/components/atoms/AccordionBody/AccordionBody.js +++ b/src/components/atoms/AccordionBody/AccordionBody.js @@ -16,7 +16,11 @@ export default class AccordionBody extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.accordionBody = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.accordionBody.append(node); @@ -38,11 +42,17 @@ export default class AccordionBody extends HTMLElement { connectedCallback() { // Nav attributes // TODO: Refactor attribute and class handling. + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let accordionBodyClasses = ['accordion-body']; if (this.getAttribute('data-li') !== null) { accordionBodyClasses.push('data-li'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? accordionBodyClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/AccordionHeader/AccordionHeader.css b/src/components/atoms/AccordionHeader/AccordionHeader.css index 7fbf06d9..62cec92e 100644 --- a/src/components/atoms/AccordionHeader/AccordionHeader.css +++ b/src/components/atoms/AccordionHeader/AccordionHeader.css @@ -11,4 +11,4 @@ .accordion-button.data-li { padding-right: 1rem; -} \ No newline at end of file +} diff --git a/src/components/atoms/AccordionHeader/AccordionHeader.js b/src/components/atoms/AccordionHeader/AccordionHeader.js index fab5f12d..6ee30df3 100644 --- a/src/components/atoms/AccordionHeader/AccordionHeader.js +++ b/src/components/atoms/AccordionHeader/AccordionHeader.js @@ -23,6 +23,8 @@ export default class AccordionHeader extends HTMLElement { this.accordionBtn = document.createElement('button'); this.accordionHeader.appendChild(this.accordionBtn); this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = ev.target.assignedElements(); tempElements.forEach((node) => { this.accordionBtn.append(node); @@ -43,9 +45,17 @@ export default class AccordionHeader extends HTMLElement { attributeChangedCallback(name, oldValue, newValue) { this.accordionBtn.setAttribute('aria-expanded', newValue); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.accordionBtn.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'collapsed' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'false') { tempClasses.push('collapsed'); } @@ -55,10 +65,18 @@ export default class AccordionHeader extends HTMLElement { connectedCallback() { // Nav attributes // TODO: Refactor attribute and class handling. + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let parentID = this.getAttribute('data-parent-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let expanded = this.getAttribute('data-expanded'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); const isListItem = this.getAttribute('data-li'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let accordionBtnClasses = ['accordion-button']; if (isListItem !== null) { accordionBtnClasses.push('data-li'); @@ -67,12 +85,16 @@ export default class AccordionHeader extends HTMLElement { this.accordionBtn.setAttribute('data-bs-toggle', 'collapse'); this.accordionBtn.setAttribute('aria-controls', parentID); this.accordionBtn.setAttribute('data-bs-target', `#${parentID}`); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (expanded == 'true') { this.accordionBtn.setAttribute('aria-expanded', 'true'); } else { accordionBtnClasses.push('collapsed'); this.accordionBtn.setAttribute('aria-expanded', 'false'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? accordionBtnClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/AccordionItem/AccordionItem.js b/src/components/atoms/AccordionItem/AccordionItem.js index fe54aa4d..460e29e5 100644 --- a/src/components/atoms/AccordionItem/AccordionItem.js +++ b/src/components/atoms/AccordionItem/AccordionItem.js @@ -22,6 +22,8 @@ export default class AccordionItem extends HTMLElement { this.accordionHeader = document.createElement('div'); this.accordionBody = document.createElement('div'); this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = ev.target.assignedElements(); tempElements.forEach((node) => { // TODO: Refactor attribute and class handling. @@ -31,9 +33,13 @@ export default class AccordionItem extends HTMLElement { 'data-index', )}`, ); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-expanded') == 'true' ? node.setAttribute('data-expanded', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.tagName == 'COD-ACCORDION-HEADER') { if (this.getAttribute('data-li') !== null) { node.setAttribute('data-li', ''); @@ -69,9 +75,17 @@ export default class AccordionItem extends HTMLElement { this.accordionBody .querySelector('cod-accordion-body') .setAttribute('data-expanded', newValue); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.accordionBody.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); } @@ -81,11 +95,21 @@ export default class AccordionItem extends HTMLElement { connectedCallback() { // Nav attributes // TODO: Refactor attribute and class handling. + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let parentID = this.getAttribute('data-parent-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let index = this.getAttribute('data-index'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let expanded = this.getAttribute('data-expanded'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let accordionHeaderClasses = ['accordion-header']; let accordionBodyClasses = ['accordion-collapse collapse']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq expanded == 'true' ? accordionBodyClasses.push('show') : 0; if (this.getAttribute('data-li') !== null) { accordionBodyClasses = accordionBodyClasses.concat( @@ -133,6 +157,8 @@ export default class AccordionItem extends HTMLElement { } _onClick(e) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (e.target.getAttribute('data-expanded') == 'true') { this.getRootNode().host.setAttribute('data-expanded', 'false'); } else { diff --git a/src/components/atoms/Alert/Alert.js b/src/components/atoms/Alert/Alert.js index 9cdb5940..17afa150 100644 --- a/src/components/atoms/Alert/Alert.js +++ b/src/components/atoms/Alert/Alert.js @@ -20,9 +20,15 @@ export default class Alert extends HTMLElement { const alertContent = document.createElement('div'); alertContent.id = 'alert-content'; this.alert.appendChild(alertContent); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -45,18 +51,34 @@ export default class Alert extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(alertStyles); // alert attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let icon = this.getAttribute('data-icon'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconOrder = this.getAttribute('data-icon-order'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconSize = this.getAttribute('data-icon-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); this.alert.role = 'alert'; let iconClass = ''; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (icon != undefined && icon != null) { this.alert.querySelector('#alert-content').className = 'col'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let activeIcon = document.createElement('cod-icon'); activeIcon.setAttribute('data-icon', icon); activeIcon.setAttribute('data-size', iconSize); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconContainer = document.createElement('div'); iconContainer.appendChild(activeIcon); iconClass = 'd-flex'; diff --git a/src/components/atoms/Badge/Badge.js b/src/components/atoms/Badge/Badge.js index 31b86979..7eec5537 100644 --- a/src/components/atoms/Badge/Badge.js +++ b/src/components/atoms/Badge/Badge.js @@ -6,6 +6,8 @@ export default class Badge extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } @@ -20,15 +22,31 @@ export default class Badge extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(badgeStyles); // badge attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tag = this.getAttribute('data-tag'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let hiddenText = this.getAttribute('data-hidden-text'); let pill = this.getAttribute('data-pill'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = this.getAttribute('data-url'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); let badge = null; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq pill == 'true' ? (pill = 'rounded-pill') : (pill = ''); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (url != undefined || url != null) { badge = document.createElement('a'); badge.href = url; @@ -36,6 +54,8 @@ export default class Badge extends HTMLElement { badge = document.createElement(tag); } badge.innerText = text; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (hiddenText != undefined || hiddenText != null) { const hiddenBadge = document.createElement('span'); hiddenBadge.className = 'visually-hidden'; diff --git a/src/components/atoms/Breadcrumb/Breadcrumb.js b/src/components/atoms/Breadcrumb/Breadcrumb.js index 5900f724..e4c9824f 100644 --- a/src/components/atoms/Breadcrumb/Breadcrumb.js +++ b/src/components/atoms/Breadcrumb/Breadcrumb.js @@ -21,13 +21,21 @@ export default class Container extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.nav = shadow.querySelector('nav'); this.breadcrumb = shadow.querySelector('ol'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); if (nodeClasses.includes('no-wc')) { node.remove(); } else { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let crumb = this.querySelector('li'); crumb && this.breadcrumb.append(crumb); } @@ -46,11 +54,19 @@ export default class Container extends HTMLElement { connectedCallback() { // Breadcrumb attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let noDivider = this.getAttribute('data-no-divider'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let svg = this.getAttribute('data-svg-divider'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (noDivider == 'true') { this.nav.style.cssText = "--bs-breadcrumb-divider: '';"; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (svg != undefined || svg != null) { this.nav.style.cssText = `--bs-breadcrumb-divider: url(${svg});`; } diff --git a/src/components/atoms/Button/Button.js b/src/components/atoms/Button/Button.js index 43a06e27..6479561f 100644 --- a/src/components/atoms/Button/Button.js +++ b/src/components/atoms/Button/Button.js @@ -7,69 +7,137 @@ export default class Button extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } connectedCallback() { // Button attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let close = this.getAttribute('data-close'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let link = this.getAttribute('data-link'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnID = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let ariaLabel = this.getAttribute('data-aria-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let primary = this.getAttribute('data-primary'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let shape = this.getAttribute('data-shape'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let icon = this.getAttribute('data-icon'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconSize = this.getAttribute('data-icon-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconOrder = this.getAttribute('data-icon-order'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let hiddenLabel = this.getAttribute('data-hidden-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let imgSrc = this.getAttribute('data-img'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let imgAlt = this.getAttribute('data-img-alt'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const, no-unused-vars, eqeqeq let img = imgAlt != '' ? 'img' : 'not-img'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = this.getAttribute('data-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disableStatus = this.getAttribute('data-disable'); // Building Button component const btn = document.createElement('button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnClasses = ['btn']; btn.type = 'button'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (btnID != null && btnID != undefined) { btn.id = btnID; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq disableStatus == 'true' ? (btn.disabled = true) : (btn.disabled = false); btn.setAttribute('aria-label', `${ariaLabel || ''}`); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (primary == 'true') { btnClasses.push(`btn-${backgroundColor}`); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq } else if (primary == 'false') { btnClasses.push(`btn-outline-${backgroundColor}`); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq shape == 'square' ? btnClasses.push('cod-button--square') : btnClasses.push('cod-button-fluid'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq size != undefined && size != null ? btnClasses.push(`btn-${size}`) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? btnClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq imgAlt != '' ? btnClasses.push('cod-button--img') : btnClasses.push('cod-button--not-img'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq close == 'true' ? btnClasses.push('btn-close') : 0; btn.className = btnClasses.join(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (icon != '') { // Loading icon + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let iconContainer = document.createElement('span'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let activeIcon = document.createElement('cod-icon'); activeIcon.setAttribute('data-icon', icon); activeIcon.setAttribute('data-size', iconSize); iconContainer.appendChild(activeIcon); btn.innerText = label; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (iconOrder == 'left') { btn.insertBefore(iconContainer, btn.firstChild); } else { btn.appendChild(iconContainer); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq } else if (imgAlt != '') { // Loading image btn.innerText = label; @@ -81,7 +149,11 @@ export default class Button extends HTMLElement { btn.innerText = label; } // Create hidden label + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (hiddenLabel != undefined && hiddenLabel != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let hLabel = document.createElement('span'); hLabel.className = 'visually-hidden'; hLabel.innerText = hiddenLabel; @@ -98,8 +170,12 @@ export default class Button extends HTMLElement { const btnStyles = document.createElement('style'); btnStyles.textContent = styles; this.shadowRoot.appendChild(btnStyles); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (link == undefined || link == null) { this.shadowRoot.appendChild(btn); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let ghostBtn = this.appendChild(document.createElement('button')); this.onclick = () => ghostBtn.click(); } else { diff --git a/src/components/atoms/CardBody/CardBody.js b/src/components/atoms/CardBody/CardBody.js index 973ad771..7c9446a1 100644 --- a/src/components/atoms/CardBody/CardBody.js +++ b/src/components/atoms/CardBody/CardBody.js @@ -16,7 +16,11 @@ export default class CardBody extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.cardBody = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.cardBody.append(node); diff --git a/src/components/atoms/CardFooter/CardFooter.js b/src/components/atoms/CardFooter/CardFooter.js index 4483bdf1..ec69a457 100644 --- a/src/components/atoms/CardFooter/CardFooter.js +++ b/src/components/atoms/CardFooter/CardFooter.js @@ -16,7 +16,11 @@ export default class CardFooter extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.cardFooter = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.cardFooter.append(node); diff --git a/src/components/atoms/CardHeader/CardHeader.js b/src/components/atoms/CardHeader/CardHeader.js index 29e3c21a..073dc3aa 100644 --- a/src/components/atoms/CardHeader/CardHeader.js +++ b/src/components/atoms/CardHeader/CardHeader.js @@ -16,7 +16,11 @@ export default class CardHeader extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.cardHeader = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.cardHeader.append(node); diff --git a/src/components/atoms/CardOverlay/CardOverlay.js b/src/components/atoms/CardOverlay/CardOverlay.js index 98731210..96b046d1 100644 --- a/src/components/atoms/CardOverlay/CardOverlay.js +++ b/src/components/atoms/CardOverlay/CardOverlay.js @@ -16,7 +16,11 @@ export default class CardOverlay extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.cardOverlay = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.cardOverlay.append(node); diff --git a/src/components/atoms/CarouselCaption/CarouselCaption.js b/src/components/atoms/CarouselCaption/CarouselCaption.js index 77c85c81..d9f8d81a 100644 --- a/src/components/atoms/CarouselCaption/CarouselCaption.js +++ b/src/components/atoms/CarouselCaption/CarouselCaption.js @@ -16,7 +16,11 @@ export default class CarouselCaption extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.carouselCaption = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.carouselCaption.append(node); @@ -37,8 +41,14 @@ export default class CarouselCaption extends HTMLElement { connectedCallback() { // Modal attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let carouselCaptionClasses = ['carousel-caption d-none d-md-block']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? carouselCaptionClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/CarouselItem/CarouselItem.js b/src/components/atoms/CarouselItem/CarouselItem.js index 3774a5b6..b4245a4d 100644 --- a/src/components/atoms/CarouselItem/CarouselItem.js +++ b/src/components/atoms/CarouselItem/CarouselItem.js @@ -16,7 +16,11 @@ export default class CarouselItem extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.carouselItem = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.carouselItem.append(node); diff --git a/src/components/atoms/Container/Container.js b/src/components/atoms/Container/Container.js index a80aa14d..0f7d6092 100644 --- a/src/components/atoms/Container/Container.js +++ b/src/components/atoms/Container/Container.js @@ -16,7 +16,11 @@ export default class Container extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.container = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.container.append(node); @@ -35,9 +39,17 @@ export default class Container extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(containerStyles); // container attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let type = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); this.container.className = [ type, diff --git a/src/components/atoms/DropdownMenu/DropdownMenu.js b/src/components/atoms/DropdownMenu/DropdownMenu.js index 1e58eb81..6ca43868 100644 --- a/src/components/atoms/DropdownMenu/DropdownMenu.js +++ b/src/components/atoms/DropdownMenu/DropdownMenu.js @@ -20,7 +20,11 @@ export default class DropdownMenu extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.dropdownMenu = document.createElement('ul'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.dropdownMenu.append(node); @@ -40,11 +44,23 @@ export default class DropdownMenu extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(newValue); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.dropdownMenu.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(tempClasses); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); } @@ -53,14 +69,28 @@ export default class DropdownMenu extends HTMLElement { connectedCallback() { // badge attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let darkMode = this.getAttribute('data-dark-mode'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let alignment = this.getAttribute('data-alignment'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let show = this.getAttribute('data-show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let classList = ['dropdown-menu']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq darkMode == 'true' ? classList.push('dropdown-menu-dark') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq alignment != undefined && alignment != null ? classList.push(`dropdown-menu-${alignment}`) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq show == 'true' ? classList.push('show') : 0; this.dropdownMenu.className = classList.join(' '); diff --git a/src/components/atoms/FormCheck/FormCheck.js b/src/components/atoms/FormCheck/FormCheck.js index c73216b0..5ae53fdf 100644 --- a/src/components/atoms/FormCheck/FormCheck.js +++ b/src/components/atoms/FormCheck/FormCheck.js @@ -12,6 +12,8 @@ export default class FormCheck extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); this.internals = this.attachInternals(); this.container = document.createElement('div'); @@ -22,8 +24,14 @@ export default class FormCheck extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.formCheck.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'is-invalid' ? tempClasses.push(popValue) : 0; switch (newValue) { @@ -77,18 +85,42 @@ export default class FormCheck extends HTMLElement { connectedCallback() { // Checkbox/Radio attributes setup + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let dataType = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let value = this.getAttribute('data-value'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let checkName = this.getAttribute('data-name'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let required = this.getAttribute('data-required'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let checked = this.getAttribute('data-checked'); let mode = this.getAttribute('data-mode'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let noLabel = this.getAttribute('data-nolabel'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let labelTxt = this.getAttribute('data-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnColor = this.getAttribute('data-btn-color'); // Set formcheck this.formCheck.id = id; @@ -96,21 +128,31 @@ export default class FormCheck extends HTMLElement { this.formCheck.value = value; this.formCheck.name = checkName; this.formCheck.setAttribute('autocomplete', 'off'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (required == 'true') { this.formCheck.setAttribute('required', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (checked == 'true') { this.formCheck.checked = true; this.formCheck.setAttribute('aria-checked', 'true'); } else { this.formCheck.setAttribute('aria-checked', 'false'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { this.formCheck.setAttribute('disabled', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (mode == 'switch') { this.formCheck.setAttribute('role', mode); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (mode == 'btn' || mode == 'btn-outline') { this.formCheck.className = 'btn-check'; mode = null; @@ -140,12 +182,17 @@ export default class FormCheck extends HTMLElement { this.container.appendChild(this.formCheck); // Adding label to check/radio + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (noLabel != 'true') { const checkLabel = document.createElement('label'); checkLabel.setAttribute('for', id); checkLabel.innerText = labelTxt; if ( - this.getAttribute('data-mode') == 'btn' || + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq + this.getAttribute('data-mode') == 'btn' || // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-mode') == 'btn-outline' ) { checkLabel.className = `btn ${this.getAttribute( @@ -217,6 +264,8 @@ export default class FormCheck extends HTMLElement { // if the input is invalid, show the correct error if (!validState.valid) { // loop through the error reasons + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const for (let state in validState) { // get the name of the data attribute that holds the //error message diff --git a/src/components/atoms/FormControl/FormControl.js b/src/components/atoms/FormControl/FormControl.js index e0987da1..4bf828d2 100644 --- a/src/components/atoms/FormControl/FormControl.js +++ b/src/components/atoms/FormControl/FormControl.js @@ -12,6 +12,8 @@ export default class FormControl extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); this.internals = this.attachInternals(); this.formControl = null; @@ -20,12 +22,20 @@ export default class FormControl extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.formControl.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'is-invalid' ? tempClasses.push(popValue) : 0; switch (newValue) { case 'true': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log('invalid input'); tempClasses.push('is-invalid'); this.formControl.className = tempClasses.join(' '); @@ -42,52 +52,102 @@ export default class FormControl extends HTMLElement { connectedCallback() { // progress attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let inputType = this.getAttribute('data-tag'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let dataType = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let minlength = this.getAttribute('data-minlength'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let maxlength = this.getAttribute('data-maxlength'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let pattern = this.getAttribute('data-pattern'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let placeholderTxt = this.getAttribute('data-placeholder-txt'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let readOnly = this.getAttribute('data-read-only'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let plainText = this.getAttribute('data-plain-txt'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let required = this.getAttribute('data-required'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let rows = this.getAttribute('data-rows'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let value = this.getAttribute('data-value'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); const formControl = document.createElement(inputType); formControl.id = id; formControl.placeholder = placeholderTxt; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (required == 'true') { formControl.setAttribute('required', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (inputType != 'textarea') { formControl.type = dataType; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (minlength != undefined && minlength != null) { formControl.setAttribute('minlength', minlength); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (maxlength != undefined && maxlength != null) { formControl.setAttribute('maxlength', maxlength); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (pattern != undefined && pattern != null) { formControl.setAttribute('pattern', pattern); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (rows != undefined && rows != null) { formControl.setAttribute('rows', rows); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (value != undefined && value != null) { formControl.value = value; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (readOnly == 'true') { formControl.setAttribute('readonly', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { formControl.setAttribute('disabled', true); } let colorPicker; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq dataType == 'color' ? (colorPicker = dataType) : (colorPicker = ''); formControl.className = [ 'form-control', @@ -170,6 +230,8 @@ export default class FormControl extends HTMLElement { // if the input is invalid, show the correct error if (!validState.valid) { // loop through the error reasons + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const for (let state in validState) { // get the name of the data attribute that holds the //error message diff --git a/src/components/atoms/FormLabel/FormLabel.js b/src/components/atoms/FormLabel/FormLabel.js index 8a42cb87..2afa213f 100644 --- a/src/components/atoms/FormLabel/FormLabel.js +++ b/src/components/atoms/FormLabel/FormLabel.js @@ -6,22 +6,36 @@ export default class FormLabel extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } connectedCallback() { // progress attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let inputID = this.getAttribute('data-input-id'); let hidden = this.getAttribute('data-hidden'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let textColor = this.getAttribute('data-color'); let required = this.getAttribute('data-required'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (hidden == 'true') { hidden = 'visually-hidden'; } else { hidden = ''; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (required == 'true') { required = 'required-field'; } diff --git a/src/components/atoms/FormSelect/FormSelect.js b/src/components/atoms/FormSelect/FormSelect.js index 9a713809..ee2a3751 100644 --- a/src/components/atoms/FormSelect/FormSelect.js +++ b/src/components/atoms/FormSelect/FormSelect.js @@ -25,15 +25,25 @@ export default class FormSelect extends HTMLElement { this.internals = this.attachInternals(); // Create select and move options from slot to select this.select = shadow.querySelector('select'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let node = this.querySelector('option'); node && this.select.append(node); }); } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.select.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'is-invalid' ? tempClasses.push(popValue) : 0; switch (newValue) { @@ -63,13 +73,29 @@ export default class FormSelect extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(formSelectStyles); // progress attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let multiple = this.getAttribute('data-multiple'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let displayMultiple = this.getAttribute('data-display-multiple'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let required = this.getAttribute('data-required'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let ariaLabel = this.getAttribute('data-aria-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); this.select.addEventListener('change', (e) => { @@ -99,15 +125,23 @@ export default class FormSelect extends HTMLElement { this.setAttribute('tabindex', '0'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (required == 'true') { this.select.setAttribute('required', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { this.select.setAttribute('disabled', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (multiple == 'true') { this.select.setAttribute('multiple', true); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (displayMultiple != undefined && displayMultiple != null) { this.select.setAttribute('size', displayMultiple); } @@ -148,6 +182,8 @@ export default class FormSelect extends HTMLElement { // if the input is invalid, show the correct error if (!validState.valid) { // loop through the error reasons + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const for (let state in validState) { // get the name of the data attribute that holds the //error message diff --git a/src/components/atoms/Icon/Icon.js b/src/components/atoms/Icon/Icon.js index 91ff2a66..2a386526 100644 --- a/src/components/atoms/Icon/Icon.js +++ b/src/components/atoms/Icon/Icon.js @@ -3,11 +3,15 @@ export default class Icon extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } connectedCallback() { // Icon attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let icon = this.getAttribute('data-icon'); let size = this.getAttribute('data-size'); switch (size) { @@ -42,6 +46,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'house-fill': @@ -50,6 +56,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'exclamation-circle': @@ -58,6 +66,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'exclamation-circle-fill': @@ -65,6 +75,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'exclamation-triangle': @@ -73,6 +85,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'check-circle': @@ -81,6 +95,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'check-circle-fill': @@ -88,6 +104,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'calendar': @@ -95,6 +113,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'calendar-fill': @@ -102,6 +122,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'calendar-date': @@ -110,6 +132,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; case 'calendar-date-fill': @@ -118,6 +142,8 @@ export default class Icon extends HTMLElement { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unreachable break; default: diff --git a/src/components/atoms/Image/Image.js b/src/components/atoms/Image/Image.js index 2e12462c..cbc20064 100644 --- a/src/components/atoms/Image/Image.js +++ b/src/components/atoms/Image/Image.js @@ -18,7 +18,11 @@ export default class Image extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); // Create select and move options from slot to select this.picture = shadow.querySelector('picture'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.picture.append(node); diff --git a/src/components/atoms/ListGroupItem/ListGroupItem.js b/src/components/atoms/ListGroupItem/ListGroupItem.js index 23030ffb..3987cc90 100644 --- a/src/components/atoms/ListGroupItem/ListGroupItem.js +++ b/src/components/atoms/ListGroupItem/ListGroupItem.js @@ -36,21 +36,31 @@ export default class ListGroupItem extends HTMLElement { attributeChangedCallback(name, oldValue, newValue) { switch (name) { case 'data-order': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue != null) { this.listGroupItem.className = `${this.listGroupItem.className} ${newValue}`; } break; case 'data-parent-classes': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue != null) { this.listGroupItem.className = `${this.listGroupItem.className} ${newValue}`; } break; case 'data-order-index': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(newValue); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue != null) { this.listGroupItem.innerHTML = `${newValue}. ${this.listGroupItem.innerHTML}`; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.listGroupItem.append(node); @@ -65,26 +75,46 @@ export default class ListGroupItem extends HTMLElement { connectedCallback() { // badge attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tag = this.getAttribute('data-tag'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); let current = this.getAttribute('data-current'); let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = this.getAttribute('data-url'); this.listGroupItem = document.createElement(tag); let actionItem = ''; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq tag == 'a' || tag == 'button' ? (actionItem = 'list-group-item-action') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (text != undefined || text != null) { this.listGroupItem.innerText = text; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (url != undefined || url != null) { this.listGroupItem.href = url; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (current == 'true') { this.listGroupItem.setAttribute('aria-current', 'true'); current = 'active'; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { this.listGroupItem.setAttribute('aria-disabled', 'true'); disabled = 'disabled'; @@ -99,7 +129,11 @@ export default class ListGroupItem extends HTMLElement { ].join(' '); if (!this.shadowRoot.querySelector(tag)) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.listGroupItem.append(node); diff --git a/src/components/atoms/Loader/Loader.js b/src/components/atoms/Loader/Loader.js index 7d13db57..57c80987 100644 --- a/src/components/atoms/Loader/Loader.js +++ b/src/components/atoms/Loader/Loader.js @@ -5,6 +5,8 @@ export default class Loader extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } @@ -17,6 +19,8 @@ export default class Loader extends HTMLElement { // Loader attributes this.shadowRoot.appendChild(loaderStyles); const loader = document.createElement('article'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let color = this.getAttribute('data-color'); loader.className = ['cod-loader', `cod-loader--${color || 'color-1'}`].join( ' ', diff --git a/src/components/atoms/ModalBody/ModalBody.js b/src/components/atoms/ModalBody/ModalBody.js index 0f6c3a27..675fd924 100644 --- a/src/components/atoms/ModalBody/ModalBody.js +++ b/src/components/atoms/ModalBody/ModalBody.js @@ -16,7 +16,11 @@ export default class ModalBody extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.body = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.body.append(node); @@ -37,8 +41,14 @@ export default class ModalBody extends HTMLElement { connectedCallback() { // OffcanvasBody attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let bodyClasses = ['modal-body']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? bodyClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/ModalFooter/ModalFooter.js b/src/components/atoms/ModalFooter/ModalFooter.js index 5c876bf4..5e60b09a 100644 --- a/src/components/atoms/ModalFooter/ModalFooter.js +++ b/src/components/atoms/ModalFooter/ModalFooter.js @@ -17,7 +17,11 @@ export default class ModalFooter extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.modalFooter = document.createElement('div'); this.closeBtn = document.createElement('cod-button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.modalFooter.appendChild(node); @@ -39,16 +43,26 @@ export default class ModalFooter extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnExtraClasses = this.getAttribute('data-button-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let modalFooterClasses = ['modal-footer']; this.closeBtn.setAttribute('data-img-alt', ''); this.closeBtn.setAttribute('data-icon', ''); this.closeBtn.setAttribute('data-label', 'Close'); this.closeBtn.setAttribute('data-bs-dismiss', 'modal'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? modalFooterClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq btnExtraClasses != undefined && btnExtraClasses != null ? this.closeBtn.setAttribute('data-extra-classes', btnExtraClasses) : 0; @@ -63,6 +77,8 @@ export default class ModalFooter extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode() .host.getRootNode() diff --git a/src/components/atoms/ModalHeader/ModalHeader.js b/src/components/atoms/ModalHeader/ModalHeader.js index f4f21a42..113c4098 100644 --- a/src/components/atoms/ModalHeader/ModalHeader.js +++ b/src/components/atoms/ModalHeader/ModalHeader.js @@ -18,7 +18,11 @@ export default class ModalHeader extends HTMLElement { this.modalHeader = document.createElement('div'); this.modalTitle = document.createElement('div'); this.closeBtn = document.createElement('cod-button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.modalTitle.appendChild(node); @@ -41,9 +45,17 @@ export default class ModalHeader extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let parentID = this.getAttribute('data-parent-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnDark = this.getAttribute('data-button-dark'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let modalHeaderClasses = ['modal-header']; this.modalTitle.className = 'modal-title'; this.modalTitle.id = `${parentID}-label`; @@ -51,9 +63,13 @@ export default class ModalHeader extends HTMLElement { this.closeBtn.setAttribute('data-icon', ''); this.closeBtn.setAttribute('data-close', 'true'); this.closeBtn.setAttribute('data-bs-dismiss', 'modal'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? modalHeaderClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq btnDark == 'true' ? this.closeBtn.setAttribute('data-extra-classes', 'btn-close-white') : 0; @@ -68,6 +84,8 @@ export default class ModalHeader extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode() .host.getRootNode() diff --git a/src/components/atoms/NavbarBrand/NavbarBrand.js b/src/components/atoms/NavbarBrand/NavbarBrand.js index ddfa6886..a83d5b8d 100644 --- a/src/components/atoms/NavbarBrand/NavbarBrand.js +++ b/src/components/atoms/NavbarBrand/NavbarBrand.js @@ -23,39 +23,79 @@ export default class NavbarBrand extends HTMLElement { connectedCallback() { // Navbar Brand attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = this.getAttribute('data-url'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandImgURL = this.getAttribute('data-img'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandImgAlt = this.getAttribute('data-img-alt'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let textClasses = this.getAttribute('data-text-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let imgClasses = this.getAttribute('data-img-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let imgSize = this.getAttribute('data-img-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandClasses = ['']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandLink = document.createElement('a'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let cleanURL = encodeURI(url); brandLink.href = decodeURI(cleanURL); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (brandImgURL != undefined && brandImgURL != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandImg = document.createElement('img'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let cleanImgURL = encodeURI(brandImgURL); brandImg.src = decodeURI(cleanImgURL); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq imgSize != undefined && imgSize != null ? brandImg.setAttribute('width', imgSize) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq imgClasses != undefined && imgClasses != null ? (brandImg.className = imgClasses) : 0; brandImg.setAttribute('alt', brandImgAlt); brandLink.appendChild(brandImg); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (text != undefined && text != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let brandText = document.createElement('span'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq textClasses != undefined && textClasses != null ? (brandText.className = textClasses) : 0; brandText.innerText = text; brandLink.appendChild(brandText); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? brandClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/NavbarCollapse/NavbarCollapse.js b/src/components/atoms/NavbarCollapse/NavbarCollapse.js index 2ad37d83..a857bf51 100644 --- a/src/components/atoms/NavbarCollapse/NavbarCollapse.js +++ b/src/components/atoms/NavbarCollapse/NavbarCollapse.js @@ -15,7 +15,11 @@ export default class Navbar extends HTMLElement { // Create a shadow root const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { shadow.appendChild(node); diff --git a/src/components/atoms/NavbarOffcanvas/NavbarOffcanvas.js b/src/components/atoms/NavbarOffcanvas/NavbarOffcanvas.js index 5238ac3d..bac2bf52 100644 --- a/src/components/atoms/NavbarOffcanvas/NavbarOffcanvas.js +++ b/src/components/atoms/NavbarOffcanvas/NavbarOffcanvas.js @@ -21,13 +21,23 @@ export default class NavbarOffcanvas extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.offcanvas = document.createElement('div'); this.offcanvasBackdrop = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-show') == 'true' ? node.setAttribute('data-show', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.tagName == 'COD-OFFCANVAS-HEADER') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-button-dark') == 'true' ? node.setAttribute('data-button-dark', true) : 0; @@ -50,12 +60,24 @@ export default class NavbarOffcanvas extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.offcanvas.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-backdrop') != 'false') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-static') != 'true') { this.offcanvasBackdrop.addEventListener('click', this._onClick); } @@ -71,35 +93,71 @@ export default class NavbarOffcanvas extends HTMLElement { connectedCallback() { // Offcanvas attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let show = this.getAttribute('data-show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let placement = this.getAttribute('data-placement'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdrop = this.getAttribute('data-backdrop'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdropExtraClasses = this.getAttribute('data-backdrop-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let scroll = this.getAttribute('data-scroll'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let bStatic = this.getAttribute('data-static'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let offcanvasClasses = ['offcanvas']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdropClasses = ['offcanvas-backdrop fade show']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq show == 'true' ? offcanvasClasses.push('show') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq backdrop == 'false' ? this.offcanvas.setAttribute('data-bs-backdrop', false) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq scroll == 'true' ? this.offcanvas.setAttribute('data-bs-scroll', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq bStatic == 'true' ? this.offcanvas.setAttribute('data-bs-backdrop', 'static') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq backdropExtraClasses != undefined && backdropExtraClasses != null ? backdropClasses.push(backdropExtraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? offcanvasClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (placement != undefined && placement != null) { offcanvasClasses.push(`offcanvas-${placement}`); } else { offcanvasClasses.push('offcanvas-start'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (id != undefined && id != null) { this.offcanvas.id = id; this.offcanvas.setAttribute('aria-labelledby', `${id}-label`); @@ -116,6 +174,8 @@ export default class NavbarOffcanvas extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode().host.setAttribute('data-show', 'false'); } diff --git a/src/components/atoms/NavbarToggle/NavbarToggle.js b/src/components/atoms/NavbarToggle/NavbarToggle.js index 40105375..0c0f102c 100644 --- a/src/components/atoms/NavbarToggle/NavbarToggle.js +++ b/src/components/atoms/NavbarToggle/NavbarToggle.js @@ -23,17 +23,35 @@ export default class NavbarToggle extends HTMLElement { connectedCallback() { // Navbar Brand attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let darkBtn = this.getAttribute('data-button-dark'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let mode = this.getAttribute('data-mode'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let toggleBtn = document.createElement('button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarToggleClasses = ['']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (mode == 'default') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq darkBtn == 'true' ? toggleBtn.setAttribute('data-bs-theme', 'dark') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let toggleIcon = document.createElement('span'); navbarToggleClasses.push('navbar-toggler-icon'); toggleBtn.appendChild(toggleIcon); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? navbarToggleClasses.push(extraClasses) : 0; @@ -48,14 +66,22 @@ export default class NavbarToggle extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-show') == 'true') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-target-toggle') == 'offcanvas' ? this.getRootNode() .querySelector('cod-offcanvas') .setAttribute('data-show', 'false') : this.getRootNode().host.setAttribute('data-show', 'false'); } else { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-target-toggle') == 'offcanvas' ? this.getRootNode() .querySelector('cod-offcanvas') diff --git a/src/components/atoms/OffcanvasBody/OffcanvasBody.js b/src/components/atoms/OffcanvasBody/OffcanvasBody.js index c40406b1..4926ce68 100644 --- a/src/components/atoms/OffcanvasBody/OffcanvasBody.js +++ b/src/components/atoms/OffcanvasBody/OffcanvasBody.js @@ -16,7 +16,11 @@ export default class OffcanvasBody extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.body = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.body.append(node); @@ -37,8 +41,14 @@ export default class OffcanvasBody extends HTMLElement { connectedCallback() { // OffcanvasBody attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let bodyClasses = ['offcanvas-body']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? bodyClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/OffcanvasHeader/OffcanvasHeader.js b/src/components/atoms/OffcanvasHeader/OffcanvasHeader.js index a0ce6718..0e33c627 100644 --- a/src/components/atoms/OffcanvasHeader/OffcanvasHeader.js +++ b/src/components/atoms/OffcanvasHeader/OffcanvasHeader.js @@ -18,7 +18,11 @@ export default class OffcanvasHeader extends HTMLElement { this.offcanvasHeader = document.createElement('div'); this.offcanvasTitle = document.createElement('div'); this.closeBtn = document.createElement('cod-button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { this.offcanvasTitle.appendChild(node); @@ -41,9 +45,17 @@ export default class OffcanvasHeader extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let parentID = this.getAttribute('data-parent-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btnDark = this.getAttribute('data-button-dark'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let offcanvasHeaderClasses = ['offcanvas-header']; this.offcanvasTitle.className = 'offcanvas-title'; this.offcanvasTitle.id = `${parentID}-label`; @@ -51,9 +63,13 @@ export default class OffcanvasHeader extends HTMLElement { this.closeBtn.setAttribute('data-icon', ''); this.closeBtn.setAttribute('data-close', 'true'); this.closeBtn.setAttribute('data-bs-dismiss', parentID); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? offcanvasHeaderClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq btnDark == 'true' ? this.closeBtn.setAttribute('data-extra-classes', 'btn-close-white') : 0; @@ -68,6 +84,8 @@ export default class OffcanvasHeader extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode() .host.getRootNode() diff --git a/src/components/atoms/PaginationItem/PaginationItem.js b/src/components/atoms/PaginationItem/PaginationItem.js index 9525f547..9d29769a 100644 --- a/src/components/atoms/PaginationItem/PaginationItem.js +++ b/src/components/atoms/PaginationItem/PaginationItem.js @@ -23,23 +23,45 @@ export default class PaginationItem extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = this.getAttribute('data-url'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let special = this.getAttribute('data-special'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = this.getAttribute('data-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let text = this.getAttribute('data-text'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let active = this.getAttribute('data-active'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let paginationItemClasses = ['page-link']; let paginationItem = null; let tag = null; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (url != undefined && url != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { paginationItemClasses.push('disabled'); paginationItem = document.createElement('span'); tag = 'span'; } else { paginationItem = document.createElement('a'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let cleanURL = encodeURI(url); paginationItem.href = decodeURI(cleanURL); tag = 'a'; @@ -48,14 +70,24 @@ export default class PaginationItem extends HTMLElement { paginationItem = document.createElement('span'); tag = 'span'; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq active == 'true' ? paginationItemClasses.push('active') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? paginationItemClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq special != undefined && special != null ? this.setSpecialItem(special, paginationItem) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq text != undefined && text != null ? (paginationItem.innerText = text) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq label != undefined && label != null ? paginationItem.setAttribute('aria-label', label) : 0; diff --git a/src/components/atoms/Progress/Progress.js b/src/components/atoms/Progress/Progress.js index 89c18f17..72b7f9a4 100644 --- a/src/components/atoms/Progress/Progress.js +++ b/src/components/atoms/Progress/Progress.js @@ -6,6 +6,8 @@ export default class Progress extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } @@ -21,14 +23,30 @@ export default class Progress extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(progressStyles); // progress attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let striped = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = this.getAttribute('data-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let ariaLabel = this.getAttribute('data-aria-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let animated = this.getAttribute('data-animated'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let value = this.getAttribute('data-value'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let stacked = this.getAttribute('data-multi-bars'); const progressContainer = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (stacked == 'undefined' || stacked == 'null') { const bar = document.createElement('div'); bar.role = 'progressbar'; @@ -37,6 +55,8 @@ export default class Progress extends HTMLElement { bar.className = 'progress'; const barBody = document.createElement('div'); barBody.style = `width: ${value}%`; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (label != 'undefined' && label != 'null') { barBody.innerText = label; } @@ -57,6 +77,8 @@ export default class Progress extends HTMLElement { buildBar(bars, barContainer) { bars.forEach((bar) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempBar = document.createElement('div'); tempBar.role = 'progressbar'; tempBar.setAttribute('aria-label', bar.ariaLabel); @@ -66,6 +88,8 @@ export default class Progress extends HTMLElement { tempBar.className = 'progress'; const barBody = document.createElement('div'); tempBar.style = `width: ${bar.value}%`; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq bar.label == undefined || bar.label == null ? '' : (barBody.innerText = bar.label); diff --git a/src/components/atoms/Range/Range.js b/src/components/atoms/Range/Range.js index 8bec9219..d5eafb9a 100644 --- a/src/components/atoms/Range/Range.js +++ b/src/components/atoms/Range/Range.js @@ -6,6 +6,8 @@ export default class Range extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } @@ -21,24 +23,44 @@ export default class Range extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(rangeStyles); // progress attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const, no-unused-vars let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let disabled = this.getAttribute('data-disabled'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let min = this.getAttribute('data-min'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let max = this.getAttribute('data-max'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let step = this.getAttribute('data-step'); const range = document.createElement('input'); range.type = 'range'; range.className = 'form-range'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (disabled == 'true') { range.disabled = true; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(min); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (min != undefined || min != null) { range.setAttribute('min', min); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (max != undefined || max != null) { range.setAttribute('max', max); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (step != undefined || step != null) { range.setAttribute('step', step); } diff --git a/src/components/atoms/Spinner/Spinner.js b/src/components/atoms/Spinner/Spinner.js index 6557f679..303bdc5d 100644 --- a/src/components/atoms/Spinner/Spinner.js +++ b/src/components/atoms/Spinner/Spinner.js @@ -6,6 +6,8 @@ export default class Image extends HTMLElement { // Always call super first in constructor super(); // Create a shadow root + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const shadow = this.attachShadow({ mode: 'open' }); } @@ -21,17 +23,29 @@ export default class Image extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(spinnerStyles); // image attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let spinnerType = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let spinnerSize = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let displayType = this.getAttribute('data-display-type'); let spinnerSizeClass; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (spinnerSize == 'sm') { spinnerSizeClass = `spinner-${spinnerType}-${spinnerSize}`; } else { spinnerSizeClass = ''; } let spinner; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq displayType == 'inline' ? (spinner = document.createElement('span')) : (spinner = document.createElement('div')); @@ -41,6 +55,8 @@ export default class Image extends HTMLElement { `text-${backgroundColor || ''}`, ].join(' '); spinner.role = 'status'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let pLoading = document.createElement('span'); pLoading.innerText = 'Loading...'; pLoading.className = 'visually-hidden'; diff --git a/src/components/atoms/TableBody/TableBody.js b/src/components/atoms/TableBody/TableBody.js index e149cb53..b55b5ef8 100644 --- a/src/components/atoms/TableBody/TableBody.js +++ b/src/components/atoms/TableBody/TableBody.js @@ -17,21 +17,35 @@ export default class TableBody extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.tableBody = document.createElement('div'); this.tableBody.role = 'rowgroup'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node, index) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-row') == 'true' && index % 2 == 0 ? node.setAttribute('data-striped-row', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-hover') == 'true' ? node.setAttribute('data-hover', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-col') == 'true' ? node.setAttribute('data-striped-col', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-vertical-align') == 'true' ? node.setAttribute('data-vertical-align', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-legacy-responsive') == 'true' ? node.setAttribute('data-legacy-responsive', 'true') : 0; diff --git a/src/components/atoms/TableCell/TableCell.js b/src/components/atoms/TableCell/TableCell.js index 7df1131f..da31001e 100644 --- a/src/components/atoms/TableCell/TableCell.js +++ b/src/components/atoms/TableCell/TableCell.js @@ -17,7 +17,11 @@ export default class TableCell extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.tableCell = document.createElement('div'); this.tableCell.role = 'cell'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.childNodes); tempElements.forEach((node) => { this.tableCell.appendChild(node); @@ -40,20 +44,42 @@ export default class TableCell extends HTMLElement { connectedCallback() { // TableCell attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let stripedRow = this.getAttribute('data-striped-row'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let stripedCol = this.getAttribute('data-striped-col'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let legacyResponsive = this.getAttribute('data-legacy-responsive'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let verticalAlign = this.getAttribute('data-vertical-align'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tableCellClasses = ['table-cell']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq verticalAlign != undefined && verticalAlign != null ? tableCellClasses.push(verticalAlign) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq legacyResponsive == 'true' ? tableCellClasses.push('table-legacy-responsive') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq stripedRow == 'true' ? tableCellClasses.push('table-striped') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq stripedCol == 'true' ? tableCellClasses.push('table-striped-columns') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? tableCellClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/TableCellHeader/TableCellHeader.js b/src/components/atoms/TableCellHeader/TableCellHeader.js index 9c4a0dff..feb535ab 100644 --- a/src/components/atoms/TableCellHeader/TableCellHeader.js +++ b/src/components/atoms/TableCellHeader/TableCellHeader.js @@ -17,7 +17,11 @@ export default class TableCellHeader extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.tableCellHeader = document.createElement('div'); this.tableCellHeader.role = 'columnheader'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.childNodes); tempElements.forEach((node) => { this.tableCellHeader.appendChild(node); @@ -40,22 +44,44 @@ export default class TableCellHeader extends HTMLElement { connectedCallback() { // tableCellHeader attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let stripedRow = this.getAttribute('data-striped-row'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let stripedCol = this.getAttribute('data-striped-col'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let legacyResponsive = this.getAttribute('data-legacy-responsive'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let verticalAlign = this.getAttribute('data-vertical-align'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tableCellHeaderClasses = ['table-cell-header']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq verticalAlign != undefined && verticalAlign != null ? tableCellHeaderClasses.push(verticalAlign) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq legacyResponsive == 'true' ? tableCellHeaderClasses.push('table-legacy-responsive') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq stripedRow == 'true' ? tableCellHeaderClasses.push('table-striped') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq stripedCol == 'true' ? tableCellHeaderClasses.push('table-striped-columns') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? tableCellHeaderClasses.push(extraClasses) : 0; diff --git a/src/components/atoms/TableHeader/TableHeader.js b/src/components/atoms/TableHeader/TableHeader.js index 46bc3bbe..6f389ce6 100644 --- a/src/components/atoms/TableHeader/TableHeader.js +++ b/src/components/atoms/TableHeader/TableHeader.js @@ -17,15 +17,25 @@ export default class TableHeader extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.tableHeader = document.createElement('div'); this.tableHeader.role = 'rowgroup'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-col') == 'true' ? node.setAttribute('data-striped-col', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-vertical-align') == 'true' ? node.setAttribute('data-vertical-align', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-legacy-responsive') == 'true' ? node.setAttribute('data-legacy-responsive', 'true') : 0; diff --git a/src/components/atoms/TableRow/TableRow.js b/src/components/atoms/TableRow/TableRow.js index 4660f42d..7d7542be 100644 --- a/src/components/atoms/TableRow/TableRow.js +++ b/src/components/atoms/TableRow/TableRow.js @@ -17,18 +17,30 @@ export default class TableBody extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.tableRow = document.createElement('div'); this.tableRow.role = 'row'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node, index) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-row') == 'true' ? node.setAttribute('data-striped-row', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-col') == 'true' && index % 2 != 0 ? node.setAttribute('data-striped-col', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-vertical-align') == 'true' ? node.setAttribute('data-vertical-align', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-legacy-responsive') == 'true' ? node.setAttribute('data-legacy-responsive', 'true') : 0; @@ -52,10 +64,20 @@ export default class TableBody extends HTMLElement { connectedCallback() { // TableRow attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let hover = this.getAttribute('data-hover'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tableRowClasses = ['table-row']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq hover == 'true' ? tableRowClasses.push('table-hover') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? tableRowClasses.push(extraClasses) : 0; diff --git a/src/components/molecules/Accordion/Accordion.css b/src/components/molecules/Accordion/Accordion.css index 8ca6b9b5..d5d0c51a 100644 --- a/src/components/molecules/Accordion/Accordion.css +++ b/src/components/molecules/Accordion/Accordion.css @@ -1,4 +1,4 @@ .accordion-ol { --bs-accordion-btn-padding-x: 0rem; --bs-accordion-btn-padding-y: 0rem; -} \ No newline at end of file +} diff --git a/src/components/molecules/Accordion/Accordion.js b/src/components/molecules/Accordion/Accordion.js index ce98869b..fd50bae3 100644 --- a/src/components/molecules/Accordion/Accordion.js +++ b/src/components/molecules/Accordion/Accordion.js @@ -17,11 +17,15 @@ export default class Accordion extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.accordion = document.createElement('div'); this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = ev.target.assignedElements(); tempElements.forEach((node, index) => { // TODO: Refactor attribute and class handling for children. switch (node.tagName) { case 'COD-ACCORDION-ITEM': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let accordionItem = document.createElement('div'); accordionItem.className = 'accordion-item'; node.setAttribute('data-parent-id', this.getAttribute('data-id')); @@ -34,6 +38,8 @@ export default class Accordion extends HTMLElement { break; default: + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -58,13 +64,25 @@ export default class Accordion extends HTMLElement { connectedCallback() { // Nav attributes // TODO: Refactor attribute and class handling. + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let flush = this.getAttribute('data-flush'); const isOrderedList = this.getAttribute('data-ol'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let accordionClasses = ['accordion']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq flush == 'true' ? accordionClasses.push('accordion-flush') : 0; isOrderedList !== null ? accordionClasses.push('accordion-ol') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? accordionClasses.push(extraClasses) : 0; diff --git a/src/components/molecules/ButtonGroup/ButtonGroup.js b/src/components/molecules/ButtonGroup/ButtonGroup.js index b733b7f7..a92a0d41 100644 --- a/src/components/molecules/ButtonGroup/ButtonGroup.js +++ b/src/components/molecules/ButtonGroup/ButtonGroup.js @@ -18,9 +18,15 @@ export default class FormCheckGroup extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.btnGroup = shadow.querySelector('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -41,19 +47,31 @@ export default class FormCheckGroup extends HTMLElement { connectedCallback() { // setting up styles + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let type = this.getAttribute('data-type'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = this.getAttribute('data-label'); let size = this.getAttribute('data-size'); let vertical = this.getAttribute('data-vertical'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (type == 'group') { this.btnGroup.role = 'group'; } else { this.btnGroup.role = 'toolbar'; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (size != undefined && size != null) { size = `btn-group-${size}`; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (vertical == 'true') { vertical = 'btn-group-vertical'; } diff --git a/src/components/molecules/Dropdown/Dropdown.js b/src/components/molecules/Dropdown/Dropdown.js index f2a1a944..2205f653 100644 --- a/src/components/molecules/Dropdown/Dropdown.js +++ b/src/components/molecules/Dropdown/Dropdown.js @@ -20,9 +20,15 @@ export default class Dropdown extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.dropdown = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -43,14 +49,22 @@ export default class Dropdown extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(newValue); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(this.dropdownMenu); } connectedCallback() { // badge attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const, no-unused-vars let show = this.getAttribute('data-show'); let split = this.getAttribute('data-split'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq split == 'true' ? (split = 'btn-group') : (split = 'dropdown'); this.dropdown.className = split; if (this.querySelector('cod-button[data-bs-toggle="dropdown"]')) { @@ -68,9 +82,15 @@ export default class Dropdown extends HTMLElement { } _onClick(e) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(this.parentElement.querySelector('cod-dropdown-menu')); if (e.target.getAttribute('data-bs-toggle') === 'dropdown') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log('changing dropdown state'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('aria-expanded') == 'true') { this.setAttribute('aria-expanded', 'false'); this.parentElement diff --git a/src/components/molecules/FormCheckGroup/FormCheckGroup.js b/src/components/molecules/FormCheckGroup/FormCheckGroup.js index 70b0061a..cb9b9f6c 100644 --- a/src/components/molecules/FormCheckGroup/FormCheckGroup.js +++ b/src/components/molecules/FormCheckGroup/FormCheckGroup.js @@ -27,12 +27,16 @@ export default class FormCheckGroup extends HTMLElement { connectedCallback() { // setting up styles if (!this.hasAttribute('role')) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-type') == 'radio') { this.setAttribute('role', 'radiogroup'); } else { this.setAttribute('role', 'group'); } } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let firstFormCheck = this.checkedFormCheck; if (firstFormCheck) { this._uncheckAll(); @@ -117,6 +121,8 @@ export default class FormCheckGroup extends HTMLElement { while (next) { if ( next.getAttribute('data-type') === 'radio' || + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-undef prev.getAttribute('data-type') === 'checkbox' ) { return next; @@ -127,6 +133,8 @@ export default class FormCheckGroup extends HTMLElement { } _setCheckedToPrevButton() { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let checkedButton = this.checkedFormCheck || this.firstFormCheck; if (checkedButton === this.firstFormCheck) { this._setChecked(this.lastFormCheck); @@ -136,6 +144,8 @@ export default class FormCheckGroup extends HTMLElement { } _setCheckedToNextButton() { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let checkedButton = this.checkedRadioButton || this.firstFormCheck; if (checkedButton === this.lastFormCheck) { this._setChecked(this.firstFormCheck); @@ -153,6 +163,8 @@ export default class FormCheckGroup extends HTMLElement { _uncheckAll() { const formCheck = this.querySelectorAll('cod-form-check'); for (let i = 0; i < formCheck.length; i++) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btn = formCheck[i]; btn.setAttribute('data-checked', 'false'); btn.setAttribute('data-required', 'false'); @@ -164,6 +176,8 @@ export default class FormCheckGroup extends HTMLElement { const formCheck = this.querySelectorAll('cod-form-check'); let isValid = false; for (let i = 0; i < formCheck.length; i++) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let checkbox = formCheck[i]; checkbox.formCheck.checked ? (isValid = true) : 0; } @@ -173,6 +187,8 @@ export default class FormCheckGroup extends HTMLElement { _requiredAll() { const formCheck = this.querySelectorAll('cod-form-check'); for (let i = 0; i < formCheck.length; i++) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btn = formCheck[i]; btn.setAttribute('data-required', 'true'); } @@ -181,6 +197,8 @@ export default class FormCheckGroup extends HTMLElement { _unRequiredAll() { const formCheck = this.querySelectorAll('cod-form-check'); for (let i = 0; i < formCheck.length; i++) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let btn = formCheck[i]; btn.setAttribute('data-required', 'false'); } @@ -201,6 +219,8 @@ export default class FormCheckGroup extends HTMLElement { this._setChecked(e.target); } if (e.target.getAttribute('data-type') === 'checkbox') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-required') == 'true') { this._validateRequired(e.target); } diff --git a/src/components/molecules/ListGroup/ListGroup.js b/src/components/molecules/ListGroup/ListGroup.js index ec1e9c72..eab575c4 100644 --- a/src/components/molecules/ListGroup/ListGroup.js +++ b/src/components/molecules/ListGroup/ListGroup.js @@ -30,14 +30,24 @@ export default class FormCheckGroup extends HTMLElement { connectedCallback() { // setting up styles + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tag = this.getAttribute('data-tag'); let flushed = this.getAttribute('data-flushed'); let numbered = this.getAttribute('data-numbered'); let horizontal = this.getAttribute('data-horizontal'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); this.listGroup = document.createElement(tag); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq flushed == 'true' ? (flushed = 'list-group-flush') : (flushed = null); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq numbered == 'true' ? (numbered = 'list-group-numbered') : (numbered = null); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq horizontal == 'true' ? (horizontal = 'list-group-horizontal') : (horizontal = null); @@ -50,8 +60,14 @@ export default class FormCheckGroup extends HTMLElement { ].join(' '); if (!this.shadowRoot.querySelector(tag)) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempLength = tempElements.length; tempElements.forEach((node, index) => { let pClasses = null; @@ -81,6 +97,8 @@ export default class FormCheckGroup extends HTMLElement { if (pClasses) { node.setAttribute('data-parent-classes', pClasses); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() diff --git a/src/components/molecules/Nav/Nav.js b/src/components/molecules/Nav/Nav.js index 137abe83..b718e0d9 100644 --- a/src/components/molecules/Nav/Nav.js +++ b/src/components/molecules/Nav/Nav.js @@ -16,13 +16,21 @@ export default class Nav extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.nav = document.createElement('ul'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navItem = document.createElement('li'); navItem.className = 'nav-item'; navItem.appendChild(node); this.nav.append(navItem); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -44,24 +52,58 @@ export default class Nav extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let vertical = this.getAttribute('data-vertical'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let hAlignment = this.getAttribute('data-horizontal-alignment'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tabs = this.getAttribute('data-tabs'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let pills = this.getAttribute('data-pills'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let underline = this.getAttribute('data-underline'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let fill = this.getAttribute('data-fill'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let justified = this.getAttribute('data-justified'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navClasses = ['nav']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq vertical == 'true' ? navClasses.push('flex-column') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq tabs == 'true' ? navClasses.push('nav-tabs') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq pills == 'true' ? navClasses.push('nav-pills') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq underline == 'true' ? navClasses.push('nav-underline') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq fill == 'true' ? navClasses.push('nav-fill') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq justified == 'true' ? navClasses.push('nav-justified') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq hAlignment != undefined && hAlignment != null ? navClasses.push(`justify-content-${hAlignment}`) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? navClasses.push(extraClasses) : 0; diff --git a/src/components/molecules/Pagination/Pagination.js b/src/components/molecules/Pagination/Pagination.js index 12ae3fb1..b8d1e2d0 100644 --- a/src/components/molecules/Pagination/Pagination.js +++ b/src/components/molecules/Pagination/Pagination.js @@ -17,15 +17,27 @@ export default class Pagination extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.paginationContainer = document.createElement('nav'); this.pagination = document.createElement('ul'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars this.shadowRoot.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node, index) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let paginationItem = document.createElement('li'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let paginationItemClasses = ['page-item']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.getAttribute('data-active') == 'true') { paginationItemClasses.push('active'); paginationItem.setAttribute('aria-current', 'page'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.getAttribute('data-disabled') == 'true') { paginationItemClasses.push('disabled'); paginationItem.setAttribute('tabindex', '-1'); @@ -33,6 +45,8 @@ export default class Pagination extends HTMLElement { paginationItem.className = paginationItemClasses.join(' '); node.setAttribute('data-index', index); paginationItem.appendChild(node); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -55,17 +69,33 @@ export default class Pagination extends HTMLElement { connectedCallback() { // Nav attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = this.getAttribute('data-label'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let paginationClasses = ['pagination']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq size != undefined && size != null ? paginationClasses.push(`pagination-${size}`) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? paginationClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq id != undefined && id != null ? (this.paginationContainer.id = id) : 0; this.paginationContainer.setAttribute('aria-label', label); this.pagination.className = paginationClasses.join(' '); diff --git a/src/components/organisms/Card/Card.js b/src/components/organisms/Card/Card.js index 4de4a8c4..5fe7a291 100644 --- a/src/components/organisms/Card/Card.js +++ b/src/components/organisms/Card/Card.js @@ -17,14 +17,26 @@ export default class Card extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.card = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { switch (node.tagName) { case 'COD-CARD-HEADER': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempHeader = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempHeaderClasses = ['card-header']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != undefined && + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != null ? tempHeaderClasses.push(node.getAttribute('data-extra-classes')) : 0; @@ -34,9 +46,17 @@ export default class Card extends HTMLElement { break; case 'COD-CARD-BODY': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempBody = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempBodyClasses = ['card-body']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != undefined && + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != null ? tempHeaderClasses.push(node.getAttribute('data-extra-classes')) : 0; @@ -46,9 +66,17 @@ export default class Card extends HTMLElement { break; case 'COD-CARD-FOOTER': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempFooter = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempFooterClasses = ['card-footer']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != undefined && + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != null ? tempFooterClasses.push(node.getAttribute('data-extra-classes')) : 0; @@ -58,9 +86,17 @@ export default class Card extends HTMLElement { break; case 'COD-CARD-OVERLAY': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempOverlay = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let tempOverlayClasses = ['card-img-overlay']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != undefined && + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-extra-classes') != null ? tempOverlayClasses.push(node.getAttribute('data-extra-classes')) : 0; @@ -70,6 +106,8 @@ export default class Card extends HTMLElement { break; default: + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -93,14 +131,28 @@ export default class Card extends HTMLElement { connectedCallback() { // Card attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let width = this.getAttribute('data-width'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let cardClasses = ['card']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? cardClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq width != undefined && width != null ? (this.card.style.width = width) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq id != undefined && id != null ? (this.card.id = id) : 0; this.card.className = cardClasses.join(' '); if (!this.shadowRoot.querySelector('div')) { diff --git a/src/components/organisms/Carousel/Carousel.js b/src/components/organisms/Carousel/Carousel.js index 749bd55a..4d0c7a8c 100644 --- a/src/components/organisms/Carousel/Carousel.js +++ b/src/components/organisms/Carousel/Carousel.js @@ -26,7 +26,11 @@ export default class Carousel extends HTMLElement { this.carouselInner.className = 'carousel-inner'; this.carouselPrev = document.createElement('button'); this.carouselNext = document.createElement('button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-no-controls') != 'true') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-external-controls') == 'true') { this.carouselPrev.className = 'carousel-control-prev position-relative'; this.carouselNext.className = 'carousel-control-next position-relative'; @@ -40,10 +44,14 @@ export default class Carousel extends HTMLElement { `#${this.getAttribute('data-id')}`, ); this.carouselPrev.setAttribute('data-bs-slide', 'prev'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let prevIcon = document.createElement('span'); prevIcon.className = 'carousel-control-prev-icon'; prevIcon.setAttribute('aria-hidden', 'true'); this.carouselPrev.appendChild(prevIcon); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let prevText = document.createElement('span'); prevText.className = 'visually-hidden'; prevText.innerText = 'Previous'; @@ -54,10 +62,14 @@ export default class Carousel extends HTMLElement { `#${this.getAttribute('data-id')}`, ); this.carouselNext.setAttribute('data-bs-slide', 'next'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nextIcon = document.createElement('span'); nextIcon.className = 'carousel-control-next-icon'; nextIcon.setAttribute('aria-hidden', 'true'); this.carouselNext.appendChild(nextIcon); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nextText = document.createElement('span'); nextText.className = 'visually-hidden'; nextText.innerText = 'Next'; @@ -73,21 +85,35 @@ export default class Carousel extends HTMLElement { this.carousel.appendChild(this.carouselInner); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); let tempElementsCount = 0; tempElements.forEach((node, index) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.tagName == 'COD-CAROUSEL-ITEM') { tempElementsCount += 1; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempItem = document.createElement('div'); tempItem.setAttribute('data-index', index); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.getAttribute('data-active') == 'true') { tempItem.className = 'carousel-item active'; this.setAttribute('data-active-item', index); } else { tempItem.className = 'carousel-item'; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-interval') != undefined && + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq node.getAttribute('data-interval') != null ? tempItem.setAttribute( 'data-bs-interval', @@ -96,7 +122,11 @@ export default class Carousel extends HTMLElement { : 0; tempItem.appendChild(node); this.carouselInner.appendChild(tempItem); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-indicator') == 'true') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempIndicator = document.createElement('button'); tempIndicator.type = 'button'; tempIndicator.setAttribute( @@ -105,6 +135,8 @@ export default class Carousel extends HTMLElement { ); tempIndicator.setAttribute('data-bs-slide-to', index); tempIndicator.setAttribute('aria-label', `Slide ${index}`); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.getAttribute('data-active') == 'true') { tempIndicator.className = 'active'; tempIndicator.setAttribute('aria-current', 'true'); @@ -117,6 +149,8 @@ export default class Carousel extends HTMLElement { tempElementsCount ? this.setAttribute('data-total-items', tempElementsCount) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() : 0; }); @@ -135,13 +169,21 @@ export default class Carousel extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (oldValue != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let oldItem = this.carouselInner.querySelector( `[data-index="${oldValue}"`, ); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let newItem = this.carouselInner.querySelector( `[data-index="${newValue}"`, ); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-indicator') == 'true') { this.carouselIndicators.querySelector( `[data-bs-slide-to="${oldValue}"`, @@ -150,6 +192,8 @@ export default class Carousel extends HTMLElement { `[data-bs-slide-to="${newValue}"`, ).className = 'active'; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-direction') == 'next') { oldItem.className = 'carousel-item active carousel-item-start'; newItem.className = @@ -168,26 +212,54 @@ export default class Carousel extends HTMLElement { connectedCallback() { // Modal attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let crossfade = this.getAttribute('data-crossfade'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let autoplay = this.getAttribute('data-autoplay'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let noTouch = this.getAttribute('data-no-touch'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let externalControls = this.getAttribute('data-external-controls'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let carouselClasses = ['carousel slide']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? carouselClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq crossfade == 'true' ? carouselClasses.push('carousel-fade') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq externalControls == 'true' ? carouselClasses.push('d-flex') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq noTouch == 'false' ? this.carousel.setAttribute('data-bs-touch', 'false') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (autoplay != undefined && autoplay != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq autoplay == 'true' ? this.carousel.setAttribute('data-bs-ride', autoplay) : this.carousel.setAttribute('data-bs-ride', 'carousel'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq id != undefined && id != null ? (this.carousel.id = id) : 0; this.carousel.className = carouselClasses.join(' '); if (!this.shadowRoot.querySelector('div')) { @@ -199,9 +271,17 @@ export default class Carousel extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let activeItem = this.getRootNode().host.getAttribute('data-active-item'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const, no-unused-vars let totalItems = this.getRootNode().host.getAttribute('data-total-items'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-bs-slide') == undefined) { if (this.getAttribute('data-bs-slide-to') > activeItem) { this.getRootNode().host.setAttribute('data-direction', 'prev'); @@ -217,8 +297,14 @@ export default class Carousel extends HTMLElement { ); } } else { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let activeItem = this.getRootNode().host.getAttribute('data-active-item'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let totalItems = this.getRootNode().host.getAttribute('data-total-items'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-bs-slide') == 'prev') { this.getRootNode().host.setAttribute('data-direction', 'prev'); parseInt(activeItem) - 1 >= 0 diff --git a/src/components/organisms/Form/Form.js b/src/components/organisms/Form/Form.js index a9e4b8d7..1bef6b98 100644 --- a/src/components/organisms/Form/Form.js +++ b/src/components/organisms/Form/Form.js @@ -17,7 +17,11 @@ export default class Form extends HTMLElement { const shadow = this.attachShadow({ mode: 'open' }); shadow.appendChild(template.content.cloneNode(true)); this.form = document.createElement('form'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); if (tempElements.length) { tempElements.forEach((node) => { @@ -39,11 +43,19 @@ export default class Form extends HTMLElement { this.shadowRoot.appendChild(variableStyles); this.shadowRoot.appendChild(formStyles); // form attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); let customValidation = this.getAttribute('data-custom-validate'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backgroundColor = this.getAttribute('data-background-color'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); this.form.id = id; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (customValidation == 'true') { this.form.novalidate = true; customValidation = 'needs-validation'; diff --git a/src/components/organisms/Geocoder/Geocoder.js b/src/components/organisms/Geocoder/Geocoder.js index 5bc99832..e2877fa7 100644 --- a/src/components/organisms/Geocoder/Geocoder.js +++ b/src/components/organisms/Geocoder/Geocoder.js @@ -23,13 +23,25 @@ export default class Geocoder extends HTMLElement { shadow.appendChild(this.styles); const geocoderWraper = document.createElement('article'); geocoderWraper.id = 'geocoder'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let form = document.createElement('form'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let label = document.createElement('label'); label.style.fontFamily = 'Montserrat, sans-serif'; label.style.fontWeight = 'bold'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let input = document.createElement('input'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const, no-unused-vars let suggestions = document.createElement('ul'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let list = document.createElement('datalist'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let icon = document.createElement('i'); form.addEventListener('submit', (ev) => { this.submit(ev, this); @@ -40,11 +52,16 @@ export default class Geocoder extends HTMLElement { label.innerText = 'Property Address:'; try { if (app[0].getAttribute('data-geocoder-label')) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (app[0].getAttribute('data-geocoder-label') != '') { label.innerText = app[0].getAttribute('data-geocoder-label'); } } - } catch (error) {} + } catch (error) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-empty + } label.setAttribute('for', 'geocoder-input'); input.type = 'text'; input.setAttribute('list', 'addresses-list'); @@ -72,11 +89,15 @@ export default class Geocoder extends HTMLElement { tempAddr = tempAddr[0]; tempAddr = tempAddr.split(' '); let newTempAddr = ''; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = tempAddr.length; tempAddr.forEach(function (item, index) { newTempAddr += item; index < size && index + 1 !== size ? (newTempAddr += '+') : 0; }); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = `https://opengis.detroitmi.gov/opengis/rest/services/BaseUnits/BaseUnitGeocoder/GeocodeServer/findAddressCandidates?Address=&Address2=&Address3=&Neighborhood=&City=&Subregion=&Region=&Postal=&PostalExt=&CountryCode=&SingleLine=${newTempAddr}&outFields=*&maxLocations=&matchOutOfRange=true&langCode=&locationType=&sourceCountry=&category=&location=&distance=&searchExtent=&outSR=&magicKey=&f=json`; try { @@ -86,6 +107,8 @@ export default class Geocoder extends HTMLElement { // console.log(data); if (type === 'suggestions') { data.candidates.forEach((item) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let sugg = document.createElement('option'); if (item.attributes.parcel_id === '') { sugg.value = item.address; @@ -102,6 +125,8 @@ export default class Geocoder extends HTMLElement { }); } else { if (data.candidates.length) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let url = `https://services2.arcgis.com/qvkbeam7Wirps6zC/arcgis/rest/services/City_of_Detroit_Boundary/FeatureServer/0/query?where=&objectIds=&time=&geometry=${data.candidates[0].location.x}%2C+${data.candidates[0].location.y}&geometryType=esriGeometryPoint&inSR=4326&spatialRel=esriSpatialRelIntersects&resultType=none&distance=0.0&units=esriSRUnit_Meter&returnGeodetic=false&outFields=4326&returnGeometry=true&returnCentroid=false&multipatchOption=xyFootprint&maxAllowableOffset=&geometryPrecision=&outSR=&datumTransformation=&applyVCSProjection=false&returnIdsOnly=false&returnUniqueIdsOnly=false&returnCountOnly=false&returnExtentOnly=false&returnDistinctValues=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&having=&resultOffset=&resultRecordCount=&returnZ=false&returnM=false&returnExceededLimitFeatures=true&quantizationParameters=&sqlFormat=none&f=geojson&token=`; try { fetch(url) @@ -119,6 +144,8 @@ export default class Geocoder extends HTMLElement { } } }); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq parcel == null ? (location = data.candidates[0].location) : (location = null); @@ -192,6 +219,8 @@ export default class Geocoder extends HTMLElement { inputChange(ev, geocoder) { switch (ev.key) { case 'Enter': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq ev.target.value != '' && ev.target.value != undefined ? geocoder.supplementGeocoder(ev.target.value, geocoder, 'submit') : 0; @@ -210,6 +239,8 @@ export default class Geocoder extends HTMLElement { break; case undefined: + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq ev.target.value != '' && ev.target.value != undefined ? geocoder.supplementGeocoder(ev.target.value, geocoder, 'submit') : 0; @@ -236,7 +267,11 @@ export default class Geocoder extends HTMLElement { ) .then((resp) => resp.json()) // Transform the data into json .then(function (data) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let cleanAddress = address.split(' RECOMMENDED')[0]; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let params = [ { attributes: { @@ -249,10 +284,14 @@ export default class Geocoder extends HTMLElement { }, }, ]; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (location != null) { params[0].geometry.x = location.x; params[0].geometry.y = location.y; } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let request = new Request( `https://services2.arcgis.com/qvkbeam7Wirps6zC/ArcGIS/rest/services/addressvalidator/FeatureServer/0/addFeatures?token=${ data.access_token @@ -265,6 +304,8 @@ export default class Geocoder extends HTMLElement { cache: 'default', }, ); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars fetch(request).then((res) => { // console.log(res); }); diff --git a/src/components/organisms/Map/Map.js b/src/components/organisms/Map/Map.js index bc1468a2..ce44a2af 100644 --- a/src/components/organisms/Map/Map.js +++ b/src/components/organisms/Map/Map.js @@ -32,6 +32,8 @@ export default class Map extends HTMLElement { mapContainer.id = 'map'; mapWrapper.appendChild(mapContainer); const closeMapBtn = document.createElement('cod-button'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars closeMapBtn.addEventListener('click', (ev) => { app[0].setAttribute('data-app-state', 'results'); }); @@ -55,6 +57,8 @@ export default class Map extends HTMLElement { app[0].setAttribute('data-map-state', 'init'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars attributeChangedCallback(name, oldValue, newValue) { const app = document.getElementsByTagName('my-home-info'); const parcel = JSON.parse(app[0].getAttribute('data-parcel-id')); @@ -64,6 +68,8 @@ export default class Map extends HTMLElement { this.map.addControl(new maplibregl.NavigationControl()); this.map.on('style.load', () => { this.map.resize(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars const marker = new maplibregl.Marker() .setLngLat(coord) .addTo(this.map); @@ -115,6 +121,8 @@ export default class Map extends HTMLElement { }); }); // Creating this temp variable for workaround with dealing with "this" encapsulation + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations const tempMap = this; this.map.on('click', 'data-points', function (e) { const app = document.getElementsByTagName('my-home-info'); diff --git a/src/components/organisms/Modal/Modal.js b/src/components/organisms/Modal/Modal.js index 005e941c..fa3068ed 100644 --- a/src/components/organisms/Modal/Modal.js +++ b/src/components/organisms/Modal/Modal.js @@ -28,14 +28,22 @@ export default class Modal extends HTMLElement { this.modalDialog.appendChild(this.modalContent); this.modal.appendChild(this.modalDialog); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { switch (node.tagName) { case 'COD-MODAL-HEADER': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-show') == 'true' ? node.setAttribute('data-show', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-button-dark') == 'true' ? node.setAttribute('data-button-dark', true) : 0; @@ -72,12 +80,22 @@ export default class Modal extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.modal.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); this.modal.style.display = 'block'; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-static') != 'true') { this.modal.addEventListener('click', this._onClick); } @@ -92,40 +110,76 @@ export default class Modal extends HTMLElement { connectedCallback() { // Modal attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let bStatic = this.getAttribute('data-static'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let show = this.getAttribute('data-show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let verticalCentered = this.getAttribute('data-vertical-centered'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let size = this.getAttribute('data-size'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let fullScreen = this.getAttribute('data-full-screen'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let modalClasses = ['modal fade']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let modalDialogClasses = ['modal-dialog']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let modalContentClasses = ['modal-content']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? modalClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq size != undefined && size != null ? modalDialogClasses.push(`modal-${size}`) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq verticalCentered == 'true' ? modalDialogClasses.push('modal-dialog-centered') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (fullScreen != undefined && fullScreen != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq fullScreen == 'always' ? modalDialogClasses.push('modal-fullscreen') : modalDialogClasses.push(`modal-fullscreen-${fullScreen}-down`); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (bStatic == 'true') { this.modal.setAttribute('data-bs-backdrop', 'static'); this.modal.setAttribute('data-bs-keyboard', 'false'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (show == 'true') { this.modalClasses.push('show'); this.modal.setAttribute('aria-modal', `true`); } else { this.modal.setAttribute('aria-modal', `false`); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq id != undefined && id != null ? (this.modal.id = id) : 0; this.modal.setAttribute('tabindex', -1); this.modal.className = modalClasses.join(' '); @@ -140,6 +194,8 @@ export default class Modal extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode().host.setAttribute('data-show', 'false'); } diff --git a/src/components/organisms/Navbar/Navbar.js b/src/components/organisms/Navbar/Navbar.js index 491fd872..6ca57cf8 100644 --- a/src/components/organisms/Navbar/Navbar.js +++ b/src/components/organisms/Navbar/Navbar.js @@ -25,17 +25,27 @@ export default class Navbar extends HTMLElement { this.navbarBrand = document.createElement('div'); this.navbarCollapse = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { switch (node.tagName) { case 'COD-NAVBAR-TOGGLE': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-target-toggle') == 'offcanvas' ? node.setAttribute('data-target-toggle', 'offcanvas') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-show') == 'true' ? node.setAttribute('data-show', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-button-dark') == 'true' ? node.setAttribute('data-button-dark', true) : 0; @@ -58,6 +68,8 @@ export default class Navbar extends HTMLElement { break; default: + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() : 0; break; @@ -84,9 +96,17 @@ export default class Navbar extends HTMLElement { .setAttribute('data-show', newValue); this.navbarToggle.setAttribute('aria-expanded', newValue); if (this.navbarCollapse.querySelector('cod-navbar-collapse')) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.navbarCollapse.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); } @@ -96,41 +116,81 @@ export default class Navbar extends HTMLElement { connectedCallback() { // Navbar attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let expand = this.getAttribute('data-expand'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let show = this.getAttribute('data-show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let placement = this.getAttribute('data-position'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let containerClasses = this.getAttribute('data-container-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let collapseClasses = this.getAttribute('data-collapse-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarClasses = ['navbar']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarContainerClasses = ['']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarCollapseClasses = ['collapse navbar-collapse']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarBrandClasses = ['navbar-brand']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let navbarToogleClasses = ['navbar-toggler']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq containerClasses != undefined && containerClasses != null ? navbarContainerClasses.push(containerClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? navbarClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq collapseClasses != undefined && collapseClasses != null ? navbarCollapseClasses.push(collapseClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq placement != undefined && placement != null ? navbarClasses.push(placement) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (expand != undefined && expand != null) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq expand == 'always' ? navbarClasses.push('navbar-expand') : navbarClasses.push(`navbar-expand-${expand}`); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (show == 'true') { this.navbarCollapseClasses.push('show'); this.navbarToggle.setAttribute('aria-expanded', `true`); } else { this.navbarToggle.setAttribute('aria-expanded', `false`); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (id != undefined && id != null) { this.navbar.id = id; this.navbarCollapse.id = `${id}-collapse`; diff --git a/src/components/organisms/Offcanvas/Offcanvas.js b/src/components/organisms/Offcanvas/Offcanvas.js index 4ed56c09..15e8c2ab 100644 --- a/src/components/organisms/Offcanvas/Offcanvas.js +++ b/src/components/organisms/Offcanvas/Offcanvas.js @@ -21,18 +21,30 @@ export default class Offcanvas extends HTMLElement { shadow.appendChild(template.content.cloneNode(true)); this.offcanvas = document.createElement('div'); this.offcanvasBackdrop = document.createElement('div'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (ev) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-show') == 'true' ? node.setAttribute('data-show', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (node.tagName == 'COD-OFFCANVAS-HEADER') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-button-dark') == 'true' ? node.setAttribute('data-button-dark', true) : 0; node.setAttribute('data-parent-id', this.getAttribute('data-id')); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() @@ -53,12 +65,24 @@ export default class Offcanvas extends HTMLElement { } attributeChangedCallback(name, oldValue, newValue) { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempClasses = this.offcanvas.className.split(' '); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let popValue = tempClasses.pop(); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq popValue != 'show' ? tempClasses.push(popValue) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (newValue == 'true') { tempClasses.push('show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-backdrop') != 'false') { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (this.getAttribute('data-static') != 'true') { this.offcanvasBackdrop.addEventListener('click', this._onClick); } @@ -74,35 +98,71 @@ export default class Offcanvas extends HTMLElement { connectedCallback() { // Offcanvas attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let show = this.getAttribute('data-show'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let placement = this.getAttribute('data-placement'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdrop = this.getAttribute('data-backdrop'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdropExtraClasses = this.getAttribute('data-backdrop-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let scroll = this.getAttribute('data-scroll'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let bStatic = this.getAttribute('data-static'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let offcanvasClasses = ['offcanvas']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let backdropClasses = ['offcanvas-backdrop fade show']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq show == 'true' ? offcanvasClasses.push('show') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq backdrop == 'false' ? this.offcanvas.setAttribute('data-bs-backdrop', false) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq scroll == 'true' ? this.offcanvas.setAttribute('data-bs-scroll', true) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq bStatic == 'true' ? this.offcanvas.setAttribute('data-bs-backdrop', 'static') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq backdropExtraClasses != undefined && backdropExtraClasses != null ? backdropClasses.push(backdropExtraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? offcanvasClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (placement != undefined && placement != null) { offcanvasClasses.push(`offcanvas-${placement}`); } else { offcanvasClasses.push('offcanvas-start'); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (id != undefined && id != null) { this.offcanvas.id = id; this.offcanvas.setAttribute('aria-labelledby', `${id}-label`); @@ -119,6 +179,8 @@ export default class Offcanvas extends HTMLElement { this.removeEventListener('click', this._onClick.bind(this)); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars _onClick(e) { this.getRootNode().host.setAttribute('data-show', 'false'); } diff --git a/src/components/organisms/Table/Table.js b/src/components/organisms/Table/Table.js index e1e00807..bb10c481 100644 --- a/src/components/organisms/Table/Table.js +++ b/src/components/organisms/Table/Table.js @@ -20,17 +20,27 @@ export default class Table extends HTMLElement { this.table.role = 'table'; this.tableContainer.appendChild(this.table); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-unused-vars shadow.addEventListener('slotchange', (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tempElements = Array.from(this.children); tempElements.forEach((node) => { switch (node.tagName) { case 'COD-TABLE-HEADER': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-col') == 'true' ? node.setAttribute('data-striped-col', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-vertical-align') == 'true' ? node.setAttribute('data-vertical-align', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-legacy-responsive') == 'true' ? node.setAttribute('data-legacy-responsive', 'true') : 0; @@ -38,18 +48,28 @@ export default class Table extends HTMLElement { break; case 'COD-TABLE-BODY': + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-hover') == 'true' ? node.setAttribute('data-hover', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-row') == 'true' ? node.setAttribute('data-striped-row', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-striped-col') == 'true' ? node.setAttribute('data-striped-col', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-vertical-align') == 'true' ? node.setAttribute('data-vertical-align', 'true') : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq this.getAttribute('data-legacy-responsive') == 'true' ? node.setAttribute('data-legacy-responsive', 'true') : 0; @@ -57,6 +77,8 @@ export default class Table extends HTMLElement { break; default: + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-case-declarations, prefer-const let nodeClasses = node.className.split(' '); nodeClasses.includes('no-wc') ? node.remove() : 0; break; @@ -78,14 +100,28 @@ export default class Table extends HTMLElement { connectedCallback() { // Table attributes + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let legacyResponsive = this.getAttribute('data-legacy-responsive'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let id = this.getAttribute('data-id'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let extraClasses = this.getAttribute('data-extra-classes'); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line prefer-const let tableClasses = ['table']; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq extraClasses != undefined && extraClasses != null ? tableClasses.push(extraClasses) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq id != undefined && id != null ? (this.table.id = id) : 0; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq legacyResponsive == 'true' ? (this.tableContainer.className = 'table-responsive') : 0; diff --git a/src/scss/themed-bootstrap.scss b/src/scss/themed-bootstrap.scss index 60cc6f13..7d92f08c 100644 --- a/src/scss/themed-bootstrap.scss +++ b/src/scss/themed-bootstrap.scss @@ -1,4 +1,4 @@ -// This SASS file customizes base bootstrap to meet the needs of the UXDS. The compiled output +// This SASS file customizes base bootstrap to meet the needs of the UXDS. The compiled output // should be stored in src/shared/themed-bootstrap.css. // The next comment line will be included in the compiled output and is only intended for readers diff --git a/src/stories/badge.stories.js b/src/stories/badge.stories.js index cceb4c46..64a70e3f 100644 --- a/src/stories/badge.stories.js +++ b/src/stories/badge.stories.js @@ -30,12 +30,18 @@ const Template = (args) => { const badge = document.createElement('cod-badge'); badge.setAttribute('data-tag', args.tag); badge.setAttribute('data-background-color', args.backgroundColor); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.url != null) { badge.setAttribute('data-url', args.url); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.hiddenText != null) { badge.setAttribute('data-hidden-text', args.hiddenText); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.pill != null) { badge.setAttribute('data-pill', args.pill); } diff --git a/src/stories/button.stories.js b/src/stories/button.stories.js index 059d16c4..76ffd371 100644 --- a/src/stories/button.stories.js +++ b/src/stories/button.stories.js @@ -1,4 +1,8 @@ +// TODO: See CityOfDetroit/detroitmi#1099 +// eslint-disable-next-line no-unused-vars import { userEvent, within } from '@storybook/testing-library'; +// TODO: See CityOfDetroit/detroitmi#1099 +// eslint-disable-next-line no-unused-vars import { expect } from '@storybook/jest'; import '../components/atoms/Button/cod-button'; import '../components/atoms/Icon/cod-icon'; diff --git a/src/stories/container.stories.js b/src/stories/container.stories.js index 641f880b..56feb5fd 100644 --- a/src/stories/container.stories.js +++ b/src/stories/container.stories.js @@ -33,6 +33,8 @@ export default { const Template = (args) => { const container = document.createElement('cod-container'); container.setAttribute('data-type', args.type); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.elements != null) { container.innerHTML = args.elements; } diff --git a/src/stories/formcheck.stories.js b/src/stories/formcheck.stories.js index 8a40cad3..0761daf7 100644 --- a/src/stories/formcheck.stories.js +++ b/src/stories/formcheck.stories.js @@ -61,24 +61,38 @@ const Template = (args) => { formCheck.setAttribute('data-type', args.type); formCheck.setAttribute('data-btn-color', args.btnColor); formCheck.setAttribute('data-checked', args.checked); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.extraClasses != null) { formCheck.setAttribute('data-extra-classes', args.extraClasses); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.backgroundColor != null) { formCheck.setAttribute('data-background-color', args.backgroundColor); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.label != null) { formCheck.setAttribute('data-label', args.label); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.nolabel != null) { formCheck.setAttribute('data-nolabel', args.nolabel); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.mode != null) { formCheck.setAttribute('data-mode', args.mode); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.disabled != null) { formCheck.setAttribute('data-disabled', args.disabled); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.required != null) { formCheck.setAttribute('data-required', args.required); } @@ -221,6 +235,8 @@ WithInteraction.args = { name: 'interaction-checkbox', value: 'interaction-checkbox', clicked: (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(e); }, }; diff --git a/src/stories/formcontrol.stories.js b/src/stories/formcontrol.stories.js index 24d42787..8da9795a 100644 --- a/src/stories/formcontrol.stories.js +++ b/src/stories/formcontrol.stories.js @@ -47,12 +47,18 @@ export default { const Template = (args) => { const fcontrol = document.createElement('cod-form-control'); fcontrol.setAttribute('data-tag', args.tag); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.size != null) { fcontrol.setAttribute('data-size', args.size); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.rows != null) { fcontrol.setAttribute('data-rows', args.rows); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.value != null) { fcontrol.setAttribute('data-value', args.value); } @@ -115,6 +121,8 @@ WithInteraction.args = { placeholder: 'enter text here', tag: 'input', keydown: (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(e); }, }; diff --git a/src/stories/formselect.stories.js b/src/stories/formselect.stories.js index 8418c3b2..a354e9e1 100644 --- a/src/stories/formselect.stories.js +++ b/src/stories/formselect.stories.js @@ -29,27 +29,41 @@ const Template = (args) => { `; + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.id != null) { select.setAttribute('data-id', args.id); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.value != null) { select.setAttribute('data-value', args.value); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.size != null) { select.setAttribute('data-size', args.size); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.multiple != null) { select.setAttribute('data-multiple', args.multiple); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.displayMultiple != null) { select.setAttribute('data-display-multiple', args.displayMultiple); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.extraClasses != null) { select.setAttribute('data-extra-classes', args.extraClasses); } select.setAttribute('data-aria-label', args.ariaLabel); select.setAttribute('data-disabled', args.disabled); select.setAttribute('data-required', args.required); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.selectChange != null) { select.addEventListener('click', (e) => { args.selectChange(e); @@ -85,6 +99,8 @@ WithInteraction.args = { id: 'interaction-input', ariaLabel: 'Interaction select example', selectChange: (e) => { + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line no-console console.log(e.target.shadowRoot.querySelector('select').value); }, }; diff --git a/src/stories/range.stories.js b/src/stories/range.stories.js index 7523716f..d5d9cb5b 100644 --- a/src/stories/range.stories.js +++ b/src/stories/range.stories.js @@ -15,12 +15,18 @@ const Template = (args) => { const range = document.createElement('cod-range'); range.setAttribute('data-id', args.id); range.setAttribute('data-disable', args.disable); + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.min != null) { range.setAttribute('data-min', args.min); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.max != null) { range.setAttribute('data-max', args.max); } + // TODO: See CityOfDetroit/detroitmi#1099 + // eslint-disable-next-line eqeqeq if (args.step != null) { range.setAttribute('data-step', args.step); } diff --git a/yarn.lock b/yarn.lock index f3144eee..01923145 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@adobe/css-tools@npm:^4.0.1": version: 4.2.0 resolution: "@adobe/css-tools@npm:4.2.0" @@ -3761,6 +3768,48 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.9.0 + resolution: "@eslint-community/regexpp@npm:4.9.0" + checksum: 82411f0643ab9bfd271bf12c8c75031266b13595d9371585ee3b0d680d918d4abf37c7e94d0da22e45817c9bbc59b79dfcbd672050dfb00af88fb89c80fd420f + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.50.0": + version: 8.50.0 + resolution: "@eslint/js@npm:8.50.0" + checksum: 302478f2acaaa7228729ec6a04f56641590185e1d8cd1c836a6db8a6b8009f80a57349341be9fbb9aa1721a7a569d1be3ffc598a33300d22816f11832095386c + languageName: node + linkType: hard + "@fal-works/esbuild-plugin-global-externals@npm:^2.1.2": version: 2.1.2 resolution: "@fal-works/esbuild-plugin-global-externals@npm:2.1.2" @@ -3822,6 +3871,31 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -4594,7 +4668,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -7304,6 +7378,13 @@ __metadata: languageName: node linkType: hard +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + "@types/lodash@npm:^4.14.167": version: 4.14.194 resolution: "@types/lodash@npm:4.14.194" @@ -7911,6 +7992,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + "acorn-walk@npm:^7.1.1": version: 7.2.0 resolution: "acorn-walk@npm:7.2.0" @@ -8285,6 +8375,19 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.6": + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-string: ^1.0.7 + checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc + languageName: node + linkType: hard + "array-union@npm:^1.0.1": version: 1.0.2 resolution: "array-union@npm:1.0.2" @@ -8308,6 +8411,43 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlastindex@npm:^1.2.2": + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + "array.prototype.reduce@npm:^1.0.5": version: 1.0.5 resolution: "array.prototype.reduce@npm:1.0.5" @@ -8321,6 +8461,21 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.2": + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-array-buffer: ^3.0.2 + is-shared-array-buffer: ^1.0.2 + checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 + languageName: node + linkType: hard + "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -9038,6 +9193,15 @@ __metadata: languageName: node linkType: hard +"builtins@npm:^5.0.1": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 + languageName: node + linkType: hard + "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -9471,6 +9635,11 @@ __metadata: css-loader: ^6.5.0 css-minimizer-webpack-plugin: ^3.4.1 cypress: ^9.5.0 + eslint: ^8.0.1 + eslint-config-prettier: ^9.0.0 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: "^15.0.0 || ^16.0.0 " + eslint-plugin-promise: ^6.0.0 file-loader: ^6.2.0 html-webpack-plugin: ^5.5.0 jest: 27 @@ -9908,7 +10077,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -10342,7 +10511,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.0": +"debug@npm:^3.1.0, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -10413,7 +10582,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -10464,6 +10633,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1": + version: 1.1.0 + resolution: "define-data-property@npm:1.1.0" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: 7ad4ee84cca8ad427a4831f5693526804b62ce9dfd4efac77214e95a4382aed930072251d4075dc8dc9fc949a353ed51f19f5285a84a788ba9216cc51472a093 + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -10681,6 +10861,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" @@ -11101,6 +11290,53 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.22.1": + version: 1.22.2 + resolution: "es-abstract@npm:1.22.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + arraybuffer.prototype.slice: ^1.0.2 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.1 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.12 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 + typed-array-buffer: ^1.0.0 + typed-array-byte-length: ^1.0.0 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.11 + checksum: cc70e592d360d7d729859013dee7a610c6b27ed8630df0547c16b0d16d9fe6505a70ee14d1af08d970fdd132b3f88c9ca7815ce72c9011608abf8ab0e55fc515 + languageName: node + linkType: hard + "es-array-method-boxes-properly@npm:^1.0.0": version: 1.0.0 resolution: "es-array-method-boxes-properly@npm:1.0.0" @@ -11143,6 +11379,15 @@ __metadata: languageName: node linkType: hard +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + "es-to-primitive@npm:^1.2.1": version: 1.2.1 resolution: "es-to-primitive@npm:1.2.1" @@ -11368,6 +11613,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + "escape-string-regexp@npm:^5.0.0": version: 5.0.0 resolution: "escape-string-regexp@npm:5.0.0" @@ -11394,6 +11646,107 @@ __metadata: languageName: node linkType: hard +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.8.0": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + languageName: node + linkType: hard + +"eslint-plugin-es-x@npm:^7.1.0": + version: 7.2.0 + resolution: "eslint-plugin-es-x@npm:7.2.0" + dependencies: + "@eslint-community/eslint-utils": ^4.1.2 + "@eslint-community/regexpp": ^4.6.0 + peerDependencies: + eslint: ">=8" + checksum: eece76ef6bcfce463659338b487e516e962ddf3ae34a8a65240ebd318fc991cabfe3573b1c3af5226474193b9c83f030c7900a8e5ffdbe731a3928ca8f2799c9 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.25.2": + version: 2.28.1 + resolution: "eslint-plugin-import@npm:2.28.1" + dependencies: + array-includes: ^3.1.6 + array.prototype.findlastindex: ^1.2.2 + array.prototype.flat: ^1.3.1 + array.prototype.flatmap: ^1.3.1 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.7 + eslint-module-utils: ^2.8.0 + has: ^1.0.3 + is-core-module: ^2.13.0 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.fromentries: ^2.0.6 + object.groupby: ^1.0.0 + object.values: ^1.1.6 + semver: ^6.3.1 + tsconfig-paths: ^3.14.2 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e8ae6dd8f06d8adf685f9c1cfd46ac9e053e344a05c4090767e83b63a85c8421ada389807a39e73c643b9bff156715c122e89778169110ed68d6428e12607edf + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^15.0.0 || ^16.0.0 ": + version: 16.1.0 + resolution: "eslint-plugin-n@npm:16.1.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + builtins: ^5.0.1 + eslint-plugin-es-x: ^7.1.0 + get-tsconfig: ^4.7.0 + ignore: ^5.2.4 + is-core-module: ^2.12.1 + minimatch: ^3.1.2 + resolve: ^1.22.2 + semver: ^7.5.3 + peerDependencies: + eslint: ">=7.0.0" + checksum: 6b70bf8eec74395a440ca585745eb19aba143ee00513f76893c44944675630bd898227d1b4e0ebef66fd0c84cdcf223d6613b2beee0727b5c572cd705fb50d3a + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:^6.0.0": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -11404,6 +11757,81 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.0.1": + version: 8.50.0 + resolution: "eslint@npm:8.50.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.50.0 + "@humanwhocodes/config-array": ^0.11.11 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 9ebfe5615dc84700000d218e32ddfdcfc227ca600f65f18e5541ec34f8902a00356a9a8804d9468fd6c8637a5ef6a3897291dad91ba6579d5b32ffeae5e31768 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -11414,6 +11842,15 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -11430,7 +11867,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.2.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b @@ -11723,7 +12160,7 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -11798,6 +12235,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + "file-loader@npm:^6.2.0": version: 6.2.0 resolution: "file-loader@npm:6.2.0" @@ -11964,6 +12410,24 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^3.0.4": + version: 3.1.0 + resolution: "flat-cache@npm:3.1.0" + dependencies: + flatted: ^3.2.7 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: 99312601d5b90f44aef403f17f056dc09be7e437703740b166cdc9386d99e681f74e6b6e8bd7d010bda66904ea643c9527276b1b80308a2119741d94108a4d8f + languageName: node + linkType: hard + +"flatted@npm:^3.2.7": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 + languageName: node + linkType: hard + "flow-parser@npm:0.*": version: 0.207.0 resolution: "flow-parser@npm:0.207.0" @@ -12247,6 +12711,18 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + "functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -12319,6 +12795,18 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.1": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + "get-monorepo-packages@npm:^1.1.0": version: 1.2.0 resolution: "get-monorepo-packages@npm:1.2.0" @@ -12383,6 +12871,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.0": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 + languageName: node + linkType: hard + "getos@npm:^3.2.1": version: 3.2.1 resolution: "getos@npm:3.2.1" @@ -12470,6 +12967,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-promise@npm:^6.0.2": version: 6.0.2 resolution: "glob-promise@npm:6.0.2" @@ -12579,6 +13085,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.22.0 + resolution: "globals@npm:13.22.0" + dependencies: + type-fest: ^0.20.2 + checksum: 64af5a09565341432770444085f7aa98b54331c3b69732e0de411003921fa2dd060222ae7b50bec0b98f29c4d00b4f49bf434049ba9f7c36ca4ee1773f60458c + languageName: node + linkType: hard + "globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -12632,6 +13147,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + "gunzip-maybe@npm:^1.4.2": version: 1.4.2 resolution: "gunzip-maybe@npm:1.4.2" @@ -13062,7 +13584,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.2.4 resolution: "ignore@npm:5.2.4" checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef @@ -13329,6 +13851,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.12.1, is-core-module@npm:^2.13.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: ^1.0.3 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -13384,7 +13915,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -13471,7 +14002,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -13588,6 +14119,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.12": + version: 1.1.12 + resolution: "is-typed-array@npm:1.1.12" + dependencies: + which-typed-array: ^1.1.11 + checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + languageName: node + linkType: hard + "is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" @@ -15057,6 +15597,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -15092,6 +15639,13 @@ __metadata: languageName: node linkType: hard +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + "json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -15099,6 +15653,17 @@ __metadata: languageName: node linkType: hard +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + "json5@npm:^2.1.2, json5@npm:^2.2.2": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -15147,6 +15712,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.3 + resolution: "keyv@npm:4.5.3" + dependencies: + json-buffer: 3.0.1 + checksum: 3ffb4d5b72b6b4b4af443bbb75ca2526b23c750fccb5ac4c267c6116888b4b65681015c2833cb20d26cf3e6e32dac6b988c77f7f022e1a571b7d90f1442257da + languageName: node + linkType: hard + "kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -15210,6 +15784,16 @@ __metadata: languageName: node linkType: hard +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + "levn@npm:~0.3.0": version: 0.3.0 resolution: "levn@npm:0.3.0" @@ -15405,6 +15989,13 @@ __metadata: languageName: node linkType: hard +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + "lodash.once@npm:^4.1.1": version: 4.1.1 resolution: "lodash.once@npm:4.1.1" @@ -16286,7 +16877,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -16844,6 +17435,17 @@ __metadata: languageName: node linkType: hard +"object.fromentries@npm:^2.0.6": + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 7341ce246e248b39a431b87a9ddd331ff52a454deb79afebc95609f94b1f8238966cf21f52188f2a353f0fdf83294f32f1ebf1f7826aae915ebad21fd0678065 + languageName: node + linkType: hard + "object.getownpropertydescriptors@npm:^2.1.0": version: 2.1.5 resolution: "object.getownpropertydescriptors@npm:2.1.5" @@ -16856,6 +17458,18 @@ __metadata: languageName: node linkType: hard +"object.groupby@npm:^1.0.0": + version: 1.0.1 + resolution: "object.groupby@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + checksum: d7959d6eaaba358b1608066fc67ac97f23ce6f573dc8fc661f68c52be165266fcb02937076aedb0e42722fdda0bdc0bbf74778196ac04868178888e9fd3b78b5 + languageName: node + linkType: hard + "object.values@npm:^1.1.0": version: 1.1.6 resolution: "object.values@npm:1.1.6" @@ -16867,6 +17481,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.1.6": + version: 1.1.7 + resolution: "object.values@npm:1.1.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: f3e4ae4f21eb1cc7cebb6ce036d4c67b36e1c750428d7b7623c56a0db90edced63d08af8a316d81dfb7c41a3a5fa81b05b7cc9426e98d7da986b1682460f0777 + languageName: node + linkType: hard + "objectorarray@npm:^1.0.5": version: 1.0.5 resolution: "objectorarray@npm:1.0.5" @@ -16940,6 +17565,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -18228,6 +18867,13 @@ __metadata: languageName: node linkType: hard +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + "prelude-ls@npm:~1.1.2": version: 1.1.2 resolution: "prelude-ls@npm:1.1.2" @@ -18934,6 +19580,17 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.1": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + set-function-name: ^2.0.0 + checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 + languageName: node + linkType: hard + "regexpu-core@npm:^5.3.1": version: 5.3.2 resolution: "regexpu-core@npm:5.3.2" @@ -19121,6 +19778,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + "resolve-protobuf-schema@npm:^2.1.0": version: 2.1.0 resolution: "resolve-protobuf-schema@npm:2.1.0" @@ -19150,6 +19814,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.2, resolve@npm:^1.22.4": + version: 1.22.6 + resolution: "resolve@npm:1.22.6" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: d13bf66d4e2ee30d291491f16f2fa44edd4e0cefb85d53249dd6f93e70b2b8c20ec62f01b18662e3cd40e50a7528f18c4087a99490048992a3bb954cf3201a5b + languageName: node + linkType: hard + "resolve@npm:~1.7.1": version: 1.7.1 resolution: "resolve@npm:1.7.1" @@ -19172,6 +19849,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.6 + resolution: "resolve@patch:resolve@npm%3A1.22.6#~builtin::version=1.22.6&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 9d3b3c67aefd12cecbe5f10ca4d1f51ea190891096497c43f301b086883b426466918c3a64f1bbf1788fabb52b579d58809614006c5d0b49186702b3b8fb746a + languageName: node + linkType: hard + "resolve@patch:resolve@~1.7.1#~builtin": version: 1.7.1 resolution: "resolve@patch:resolve@npm%3A1.7.1#~builtin::version=1.7.1&hash=3bafbf" @@ -19288,6 +19978,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.0.1": + version: 1.0.1 + resolution: "safe-array-concat@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 + languageName: node + linkType: hard + "safe-buffer@npm:5.1.1": version: 5.1.1 resolution: "safe-buffer@npm:5.1.1" @@ -19566,6 +20268,17 @@ __metadata: languageName: node linkType: hard +"set-function-name@npm:^2.0.0": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -20101,6 +20814,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trim@npm:^1.2.8": + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 49eb1a862a53aba73c3fb6c2a53f5463173cb1f4512374b623bcd6b43ad49dd559a06fb5789bdec771a40fc4d2a564411c0a75d35fb27e76bbe738c211ecff07 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.6": version: 1.0.6 resolution: "string.prototype.trimend@npm:1.0.6" @@ -20112,6 +20836,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimend@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 2375516272fd1ba75992f4c4aa88a7b5f3c7a9ca308d963bcd5645adf689eba6f8a04ebab80c33e30ec0aefc6554181a3a8416015c38da0aa118e60ec896310c + languageName: node + linkType: hard + "string.prototype.trimstart@npm:^1.0.6": version: 1.0.6 resolution: "string.prototype.trimstart@npm:1.0.6" @@ -20123,6 +20858,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimstart@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -20537,6 +21283,13 @@ __metadata: languageName: node linkType: hard +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + "throat@npm:^6.0.1": version: 6.0.2 resolution: "throat@npm:6.0.2" @@ -20762,6 +21515,18 @@ __metadata: languageName: node linkType: hard +"tsconfig-paths@npm:^3.14.2": + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + languageName: node + linkType: hard + "tslib@npm:1.10.0": version: 1.10.0 resolution: "tslib@npm:1.10.0" @@ -20820,6 +21585,15 @@ __metadata: languageName: node linkType: hard +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + "type-check@npm:~0.3.2": version: 0.3.2 resolution: "type-check@npm:0.3.2" @@ -20843,6 +21617,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + "type-fest@npm:^0.21.1, type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -20888,6 +21669,42 @@ __metadata: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-buffer@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + is-typed-array: ^1.1.10 + checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + languageName: node + linkType: hard + "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" @@ -21878,6 +22695,19 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.11": + version: 1.1.11 + resolution: "which-typed-array@npm:1.1.11" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "which-typed-array@npm:1.1.9" From ce1e50a820242764f84e19d57d772843453963cd Mon Sep 17 00:00:00 2001 From: Max Morgan Date: Fri, 29 Sep 2023 10:33:46 -0400 Subject: [PATCH 2/2] Update readme with lint/format instructions --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index d285ff99..c54cf81c 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,19 @@ Use Storybooks [built-in test-runner](https://storybook.js.org/docs/react/writin ``` $ yarn test-storybook ``` + +### Formatting and Linting + +The remote repository will enforce ESLint rules and Prettier formatting. + +To check ESLint and Prettier formatting locally: + +``` +$ yarn lint +``` + +To format the code in `./src/`: + +``` +$ yarn prettier -w ./src +```