From 36b6daa53bd8f1b485362a0c14884445a936b754 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 14:06:58 +0100 Subject: [PATCH 1/7] added codemod for removing the `gap` value in the `{{style}}` modifier and replaced with `@gap` argument --- showcase/codemods/.gitignore | 2 + showcase/codemods/README.md | 8 +++ showcase/codemods/bin/cli.js | 13 ++++ .../transforms/layout-component-gap/index.js | 71 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 showcase/codemods/.gitignore create mode 100644 showcase/codemods/README.md create mode 100755 showcase/codemods/bin/cli.js create mode 100644 showcase/codemods/transforms/layout-component-gap/index.js diff --git a/showcase/codemods/.gitignore b/showcase/codemods/.gitignore new file mode 100644 index 0000000000..568cda7371 --- /dev/null +++ b/showcase/codemods/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/.eslintcache \ No newline at end of file diff --git a/showcase/codemods/README.md b/showcase/codemods/README.md new file mode 100644 index 0000000000..1686bd0a37 --- /dev/null +++ b/showcase/codemods/README.md @@ -0,0 +1,8 @@ +# codemods + +To run this codemod: + +```bash +cd showcase/ +node ./codemods/bin/cli.js layout-component-gap app/templates/**/*.hbs +``` diff --git a/showcase/codemods/bin/cli.js b/showcase/codemods/bin/cli.js new file mode 100755 index 0000000000..2fc8b09137 --- /dev/null +++ b/showcase/codemods/bin/cli.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: MPL-2.0 + */ + +'use strict'; + +require('codemod-cli').runTransform( + __dirname, + process.argv[2] /* transform name */, + process.argv.slice(3) /* paths or globs */ +); diff --git a/showcase/codemods/transforms/layout-component-gap/index.js b/showcase/codemods/transforms/layout-component-gap/index.js new file mode 100644 index 0000000000..699cb267bb --- /dev/null +++ b/showcase/codemods/transforms/layout-component-gap/index.js @@ -0,0 +1,71 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: MPL-2.0 + */ + +module.exports = function ({ source /*, path*/ }, { parse, visit }) { + const ast = parse(source); + + return visit(ast, (env) => { + let { builders: b } = env.syntax; + + return { + ElementNode(node) { + if (node.tag === 'Shw::Grid' || node.tag === 'Shw::Flex') { + // look up for `@gap` (it means it's already been processed) + const gapAttr = node.attributes.find((a) => a.name === '@gap'); + + if (!gapAttr) { + // look up for `{{style}}` + const styleModifier = node.modifiers.find( + (m) => m.path.original === 'style' + ); + + if (styleModifier) { + // look up for `{{style gap}}` + const styleModifierGapEntry = styleModifier.hash.pairs.find( + (p) => p.key === 'gap' + ); + + if (styleModifierGapEntry) { + // add the `@gap` argument + node.attributes.push( + b.attr('@gap', styleModifierGapEntry.value) + ); + + // remove the `gap` value from the `{{style}}` modifier + const outputStyleModifierPairs = + styleModifier.hash.pairs.filter((p) => p.key !== 'gap'); + + // re-assign the filtered pairs to the `{{style}}` modifier + styleModifier.hash.pairs = outputStyleModifierPairs; + + // remove entirely the `{{style}}` modifier if it doesn't have pairs left + const outputModifiers = node.modifiers.filter( + (m) => m?.hash?.pairs?.length > 0 + ); + + // re-assign the filtered modifiers to the element + node.modifiers = outputModifiers; + + return [ + b.element( + { name: node.tag, selfClosing: false }, + { + attrs: node.attributes, + children: node.children, + modifiers: node.modifiers, + blockParams: node.blockParams, + } + ), + ]; + } + } + } + } + }, + }; + }); +}; + +module.exports.type = 'hbs'; From 63d9f71776d8e04815f57fe16aba9d3395398511 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 14:13:59 +0100 Subject: [PATCH 2/7] removed extra parenthesis in declarations/computations (otherwise the `codemods/bin/cli.js` runner would complain) --- .../app/templates/components/app-footer.hbs | 6 ++--- .../app/templates/components/code-block.hbs | 4 ++-- .../components/form/super-select.hbs | 24 +++++++++---------- .../app/templates/components/rich-tooltip.hbs | 4 ++-- showcase/app/templates/components/table.hbs | 22 ++++++++--------- .../templates/utilities/popover-primitive.hbs | 12 +++++----- 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/showcase/app/templates/components/app-footer.hbs b/showcase/app/templates/components/app-footer.hbs index 711f6ef0c2..373f031d75 100644 --- a/showcase/app/templates/components/app-footer.hbs +++ b/showcase/app/templates/components/app-footer.hbs @@ -142,7 +142,7 @@ {{#let (array "desktop" "tablet" "mobile-large" "mobile-small") as |layouts|}} {{#each layouts as |layout|}} -
+
{{#each @model.LINK_STATES as |state|}} -
    +
      Link
    @@ -232,7 +232,7 @@ {{#each-in @model.STATUS_LINK_STATUSES as |status|}} -
      +
      diff --git a/showcase/app/templates/components/code-block.hbs b/showcase/app/templates/components/code-block.hbs index febe47b7e1..f52e88c2ae 100644 --- a/showcase/app/templates/components/code-block.hbs +++ b/showcase/app/templates/components/code-block.hbs @@ -509,7 +509,7 @@ end' {{#each @model.STATES as |state|}} - + + {{#each @model.STATES as |state|}} - +
      @@ -1049,7 +1049,7 @@ {{#each @model.STATES as |state|}} - +
      @@ -1208,21 +1208,21 @@ {{#let (array "single" "multiple") as |variants|}} {{#each variants as |variant|}} - +
        {{! template-lint-disable require-context-role }}
      • @@ -1237,17 +1237,17 @@
      - +
        - + {{! template-lint-disable require-context-role }}
      • Level 1 - Option 1A
      • - + {{! template-lint-disable require-context-role }}
      • Level 2 - Option 2A @@ -1255,7 +1255,7 @@
      • Level 2 - Option 2B
      • - + {{! template-lint-disable require-context-role }}
      • Level 3 - Option 3A @@ -1266,7 +1266,7 @@ @@ -1387,7 +1387,7 @@
          - + {{! template-lint-disable require-context-role }}
        • Option 1 diff --git a/showcase/app/templates/components/rich-tooltip.hbs b/showcase/app/templates/components/rich-tooltip.hbs index 536edd24f0..9056437990 100644 --- a/showcase/app/templates/components/rich-tooltip.hbs +++ b/showcase/app/templates/components/rich-tooltip.hbs @@ -179,7 +179,7 @@ - + @@ -187,7 +187,7 @@ - + diff --git a/showcase/app/templates/components/table.hbs b/showcase/app/templates/components/table.hbs index c26c45e7ef..ec27e7e3ab 100644 --- a/showcase/app/templates/components/table.hbs +++ b/showcase/app/templates/components/table.hbs @@ -559,7 +559,7 @@ {{#if this.multiSelectToggleDebug__demo1}} {{#each this.multiSelectModelData__demo1 as |row|}} -
          row{{row.id}} = {{(if row.isSelected "✅")}}
          +
          row{{row.id}} = {{if row.isSelected "✅"}}
          {{/each}} {{/if}}
          @@ -605,10 +605,10 @@ {{#if this.multiSelectToggleDebug__demo1}} -
          row1 = {{(if (get this.multiSelectNoModelState__demo1 "row1") "✅")}}
          -
          row2 = {{(if (get this.multiSelectNoModelState__demo1 "row2") "✅")}}
          -
          row3 = {{(if (get this.multiSelectNoModelState__demo1 "row3") "✅")}}
          -
          row4 = {{(if (get this.multiSelectNoModelState__demo1 "row4") "✅")}}
          +
          row1 = {{if (get this.multiSelectNoModelState__demo1 "row1") "✅"}}
          +
          row2 = {{if (get this.multiSelectNoModelState__demo1 "row2") "✅"}}
          +
          row3 = {{if (get this.multiSelectNoModelState__demo1 "row3") "✅"}}
          +
          row4 = {{if (get this.multiSelectNoModelState__demo1 "row4") "✅"}}
          {{/if}}
          @@ -670,7 +670,7 @@ /> {{#if this.multiSelectToggleDebug__demo2}} {{#each this.multiSelectModelData__demo2 as |row|}} -
          row{{row.id}} = {{(if row.isSelected "✅")}}
          +
          row{{row.id}} = {{if row.isSelected "✅"}}
          {{/each}} {{/if}}
        @@ -739,7 +739,7 @@ /> {{#if this.multiSelectToggleDebug__demo3}} {{#each this.multiSelectModelData__demo3 as |row|}} -
        row{{row.id}} = {{(if row.isSelected "✅")}}
        +
        row{{row.id}} = {{if row.isSelected "✅"}}
        {{/each}} {{/if}}
        @@ -795,7 +795,7 @@ {{#let (array false true) as |booleans|}} {{#each booleans as |bool|}} - + <:head as |H|> Lorem @@ -1423,7 +1423,7 @@ {{#let (array false true) as |booleans|}} {{#each booleans as |bool|}} - + <:head as |H|> @@ -1756,7 +1756,7 @@ {{#each @model.STATES as |state|}} - + {{/each}} @@ -1768,7 +1768,7 @@ {{#each @model.STATES as |state|}} - + diff --git a/showcase/app/templates/utilities/popover-primitive.hbs b/showcase/app/templates/utilities/popover-primitive.hbs index 66c6cc66c9..f8e75d4ad6 100644 --- a/showcase/app/templates/utilities/popover-primitive.hbs +++ b/showcase/app/templates/utilities/popover-primitive.hbs @@ -140,7 +140,7 @@ as |offsetOptionsVariants| }} {{#each offsetOptionsVariants as |offsetOptionsVariant count|}} - +
        - +
        +
        @@ -129,7 +129,7 @@ {{#let (array false true) as |booleans|}} {{#each booleans as |popoverHasArrow|}} - + {{#let (array (hash label="not set" offset=0) @@ -175,7 +175,7 @@ arrowPadding - + {{#let (array (hash label="not set") (hash label="32" arrowPadding=32)) as |arrowPaddingVariants|}} {{#each arrowPaddingVariants as |arrowPaddingVariant count|}} @@ -212,7 +212,7 @@ Strategy - + {{#let (array "absolute" "fixed") as |strategies|}} {{#each strategies as |strategy|}} @@ -247,7 +247,7 @@ Scroll within the boxes to see the collision detection in action - + {{#let (array false true null null "flip" "shift" "auto" null) as |detections|}} {{#each detections as |detection|}} {{#if (eq detection null)}} @@ -293,7 +293,7 @@ Interaction - + {{#let (array "soft" "click") as |interactionVariants|}} {{#each interactionVariants as |interaction|}} @@ -350,7 +350,7 @@ {{#let (array false true) as |booleans|}} {{#each booleans as |isOpen|}} - + {{#let (array "none" "soft" "click") as |interactionVariants|}} {{#each interactionVariants as |interaction|}} From 65e94d30cd4dfdd870b82e244ba433601f807247 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 14:58:36 +0100 Subject: [PATCH 4/7] converted `@gap` value from `px` to `rem` --- showcase/app/templates/components/form/base-elements.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/showcase/app/templates/components/form/base-elements.hbs b/showcase/app/templates/components/form/base-elements.hbs index 7e5b68030b..b8c3c87d8b 100644 --- a/showcase/app/templates/components/form/base-elements.hbs +++ b/showcase/app/templates/components/form/base-elements.hbs @@ -703,7 +703,7 @@
        Layout - + {{#let (array "vertical" "horizontal") as |layouts|}} {{#each layouts as |layout|}} From 1bec001819e7975bcfcf3d25d34581b74ca015f8 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 15:18:56 +0100 Subject: [PATCH 5/7] updated `Shw:Flex` and `Shw::Grid` components to support `@gap` argument --- showcase/app/components/shw/flex/index.hbs | 2 +- showcase/app/components/shw/flex/index.js | 10 ++++++++++ showcase/app/components/shw/grid/index.hbs | 2 +- showcase/app/components/shw/grid/index.js | 10 ++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/showcase/app/components/shw/flex/index.hbs b/showcase/app/components/shw/flex/index.hbs index a14352a96f..288e32cfee 100644 --- a/showcase/app/components/shw/flex/index.hbs +++ b/showcase/app/components/shw/flex/index.hbs @@ -8,7 +8,7 @@ {{@label}} {{/if}} {{yield (hash Label=(component "shw/label"))}} -
        +
        {{yield (hash Item=(component "shw/flex/item"))}}
        \ No newline at end of file diff --git a/showcase/app/components/shw/flex/index.js b/showcase/app/components/shw/flex/index.js index cb7c42fb3e..c7251d6dbf 100644 --- a/showcase/app/components/shw/flex/index.js +++ b/showcase/app/components/shw/flex/index.js @@ -4,10 +4,20 @@ */ import Component from '@glimmer/component'; +import { htmlSafe } from '@ember/template'; export default class FlexIndexComponent extends Component { direction = this.args.direction ?? 'row'; + get itemsStyle() { + let styles = []; + if (this.args.gap) { + styles.push(`gap: ${this.args.gap}`); + } + + return styles.length > 0 ? htmlSafe(styles.join('; ')) : undefined; + } + get classNames() { let classes = ['shw-flex']; diff --git a/showcase/app/components/shw/grid/index.hbs b/showcase/app/components/shw/grid/index.hbs index 68f2cf1745..d2ea866532 100644 --- a/showcase/app/components/shw/grid/index.hbs +++ b/showcase/app/components/shw/grid/index.hbs @@ -8,7 +8,7 @@ {{@label}} {{/if}} {{yield (hash Label=(component "shw/label"))}} -
        +
        {{yield (hash Item=(component "shw/grid/item"))}}
        \ No newline at end of file diff --git a/showcase/app/components/shw/grid/index.js b/showcase/app/components/shw/grid/index.js index f0584f7a63..b25f21343b 100644 --- a/showcase/app/components/shw/grid/index.js +++ b/showcase/app/components/shw/grid/index.js @@ -4,6 +4,7 @@ */ import Component from '@glimmer/component'; +import { htmlSafe } from '@ember/template'; import { assert } from '@ember/debug'; export default class GridIndexComponent extends Component { @@ -15,6 +16,15 @@ export default class GridIndexComponent extends Component { return columns; } + get itemsStyle() { + let styles = []; + if (this.args.gap) { + styles.push(`gap: ${this.args.gap}`); + } + + return styles.length > 0 ? htmlSafe(styles.join('; ')) : undefined; + } + get classNames() { let classes = ['shw-grid']; From 7a6f179b8a20278641126f9a05d00c2bb5c0b271 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 15:20:00 +0100 Subject: [PATCH 6/7] removed codemod (not needed anymore) --- showcase/codemods/.gitignore | 2 - showcase/codemods/README.md | 8 --- showcase/codemods/bin/cli.js | 13 ---- .../transforms/layout-component-gap/index.js | 71 ------------------- 4 files changed, 94 deletions(-) delete mode 100644 showcase/codemods/.gitignore delete mode 100644 showcase/codemods/README.md delete mode 100755 showcase/codemods/bin/cli.js delete mode 100644 showcase/codemods/transforms/layout-component-gap/index.js diff --git a/showcase/codemods/.gitignore b/showcase/codemods/.gitignore deleted file mode 100644 index 568cda7371..0000000000 --- a/showcase/codemods/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/.eslintcache \ No newline at end of file diff --git a/showcase/codemods/README.md b/showcase/codemods/README.md deleted file mode 100644 index 1686bd0a37..0000000000 --- a/showcase/codemods/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# codemods - -To run this codemod: - -```bash -cd showcase/ -node ./codemods/bin/cli.js layout-component-gap app/templates/**/*.hbs -``` diff --git a/showcase/codemods/bin/cli.js b/showcase/codemods/bin/cli.js deleted file mode 100755 index 2fc8b09137..0000000000 --- a/showcase/codemods/bin/cli.js +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: MPL-2.0 - */ - -'use strict'; - -require('codemod-cli').runTransform( - __dirname, - process.argv[2] /* transform name */, - process.argv.slice(3) /* paths or globs */ -); diff --git a/showcase/codemods/transforms/layout-component-gap/index.js b/showcase/codemods/transforms/layout-component-gap/index.js deleted file mode 100644 index 699cb267bb..0000000000 --- a/showcase/codemods/transforms/layout-component-gap/index.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: MPL-2.0 - */ - -module.exports = function ({ source /*, path*/ }, { parse, visit }) { - const ast = parse(source); - - return visit(ast, (env) => { - let { builders: b } = env.syntax; - - return { - ElementNode(node) { - if (node.tag === 'Shw::Grid' || node.tag === 'Shw::Flex') { - // look up for `@gap` (it means it's already been processed) - const gapAttr = node.attributes.find((a) => a.name === '@gap'); - - if (!gapAttr) { - // look up for `{{style}}` - const styleModifier = node.modifiers.find( - (m) => m.path.original === 'style' - ); - - if (styleModifier) { - // look up for `{{style gap}}` - const styleModifierGapEntry = styleModifier.hash.pairs.find( - (p) => p.key === 'gap' - ); - - if (styleModifierGapEntry) { - // add the `@gap` argument - node.attributes.push( - b.attr('@gap', styleModifierGapEntry.value) - ); - - // remove the `gap` value from the `{{style}}` modifier - const outputStyleModifierPairs = - styleModifier.hash.pairs.filter((p) => p.key !== 'gap'); - - // re-assign the filtered pairs to the `{{style}}` modifier - styleModifier.hash.pairs = outputStyleModifierPairs; - - // remove entirely the `{{style}}` modifier if it doesn't have pairs left - const outputModifiers = node.modifiers.filter( - (m) => m?.hash?.pairs?.length > 0 - ); - - // re-assign the filtered modifiers to the element - node.modifiers = outputModifiers; - - return [ - b.element( - { name: node.tag, selfClosing: false }, - { - attrs: node.attributes, - children: node.children, - modifiers: node.modifiers, - blockParams: node.blockParams, - } - ), - ]; - } - } - } - } - }, - }; - }); -}; - -module.exports.type = 'hbs'; From 7a2f505f90d149b84e9bd08657bd2cbe6c49a616 Mon Sep 17 00:00:00 2001 From: Cristiano Rastelli Date: Mon, 24 Jun 2024 16:39:01 +0100 Subject: [PATCH 7/7] fixed linting --- showcase/app/templates/components/accordion.hbs | 7 ++++++- showcase/app/templates/components/form/super-select.hbs | 4 +--- showcase/app/templates/components/link/inline.hbs | 7 ++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/showcase/app/templates/components/accordion.hbs b/showcase/app/templates/components/accordion.hbs index a2b0f3f11d..4f6d42e36c 100644 --- a/showcase/app/templates/components/accordion.hbs +++ b/showcase/app/templates/components/accordion.hbs @@ -375,7 +375,12 @@ {{#let (array false true) as |booleans|}} {{#each booleans as |bool|}} - + {{#each @model.STATES as |state|}}
        diff --git a/showcase/app/templates/components/form/super-select.hbs b/showcase/app/templates/components/form/super-select.hbs index aad16b5160..543db2d23c 100644 --- a/showcase/app/templates/components/form/super-select.hbs +++ b/showcase/app/templates/components/form/super-select.hbs @@ -1221,9 +1221,7 @@ > - + {{! template-lint-disable require-context-role }}
      • Option 1 diff --git a/showcase/app/templates/components/link/inline.hbs b/showcase/app/templates/components/link/inline.hbs index 6ca867bb67..e7fe008a5b 100644 --- a/showcase/app/templates/components/link/inline.hbs +++ b/showcase/app/templates/components/link/inline.hbs @@ -38,7 +38,12 @@ Content - +
        Lorem ipsum dolor