consul/ui/packages/consul-ui/app/components/menu-panel
John Cowen 73b6687c5b
ui: Transition App Chrome to use new Disclosure Menus (#12334)
* Add %panel CSS component

* Deprecate old menu-panel component

* Various smallish tweaks to disclosure-menu

* Move all menus in the app chrome to use new DisclosureMenu

* Follow up CSS to move all app chrome menus to new components

* Don't prevent default any events from anchors

* Add a tick to click steps
2022-02-21 12:22:59 +00:00
..
README.mdx ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00
deprecated.scss ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00
index.hbs ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00
index.js ui: Add an isDestroyed check for the MenuPanel component (#11104) 2021-09-22 18:33:31 +01:00
index.scss ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00
layout.scss ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00
skin.scss ui: Transition App Chrome to use new Disclosure Menus (#12334) 2022-02-21 12:22:59 +00:00

README.mdx

# MenuPanel

```hbs preview-template

{{#each
  (array 'light' 'dark')
as |theme|}}
  <figure>
    <figcaption>Without a header</figcaption>
    <div
      class={{class-map
        'menu-panel'
        (array (concat 'theme-' theme))
      }}
    >
      <ul role="menu">
        <li aria-current="true" role="none">
          <Action role="menuitem">Item 1<span>Label</span><span>Label 2</span></Action>
        </li>
        <li role="separator">
          Item some title text
        </li>
        <li role="none">
          <Action role="menuitem">Item 2</Action>
        </li>
        <li role="separator"></li>
        <li role="none">
          <Action role="menuitem">Item 3</Action>
        </li>
      </ul>
    </div>
  </figure>
  <figure>
    <figcaption>With a header</figcaption>
    <div
      class={{class-map
        'menu-panel'
        (array (concat 'theme-' theme))
      }}
    >
      <div>
        <p>Some content explaining what the menu is about</p>
      </div>
      <ul role="menu">
        <li aria-current="true" role="none">
          <Action role="menuitem">Item 1<span>Label</span><span>Label 2</span></Action>
        </li>
        <li role="separator">
          Item some title text
        </li>
        <li role="none">
          <Action role="menuitem">Item 2</Action>
        </li>
        <li role="separator"></li>
        <li role="none">
          <Action role="menuitem">Item 3</Action>
        </li>
      </ul>
    </div>
  </figure>

  <figure>
    <StateChart
      @src={{state-chart 'boolean'}}
    as |State Guard StateAction dispatch state|>
      <Action>Focus Left</Action>
      <DisclosureMenu as |disclosure|>
        <disclosure.Action
          {{on 'click' disclosure.toggle}}
        >
          {{if disclosure.expanded 'Close' 'Open'}}
        </disclosure.Action>
        <disclosure.Menu
          style={{style-map
            (array 'max-height' (if (state-matches state 'true') (add 0 this.rect.height)) 'px')
          }}
          class={{class-map
            (array 'menu-panel')
            (array 'menu-panel-confirming' (state-matches state 'true'))
            (array (concat 'theme-' theme))
          }}

        as |panel|>
          <div
            {{on-resize
              (dom-position (set this 'header'))
            }}
          >
            <p>Some text in here</p>
          </div>
          <panel.Menu as |menu|>
            <menu.Item
              aria-current="true"
            >
              <menu.Action>
                Item 1
                <span>Label</span>
                <span>Label 2</span>
              </menu.Action>
            </menu.Item>
            <menu.Separator>
              Item some title text
            </menu.Separator>
            <menu.Item>
              <menu.Action>
                Item 2
              </menu.Action>
            </menu.Item>
            <menu.Separator />
            <menu.Item
              class="dangerous"
            >
              <menu.Action
                {{on "click" (fn dispatch 'TOGGLE')}}
              >
                Item 3
              </menu.Action>

              <div
                {{on-resize
                  (dom-position (set this 'rect'))
                }}
                style={{style-map
                  (array 'top' (if (state-matches state 'true') (sub 0 this.header.height)) 'px')
                }}
                class={{class-map
                  'menu-panel-confirmation'
                  'informed-action'
                  'confirmation-alert'
                  'warning'
                }}
              >
                <div>
                  <header>Hi</header>
                  <p>Body</p>
                </div>
                <ul>
                  <li>
                    <Action
                      @tabindex="-1"
                      {{on "click" (queue disclosure.close (fn dispatch 'TOGGLE'))}}
                    >
                      Confirm
                    </Action>
                  </li>
                  <li>
                    <Action
                      @tabindex="-1"
                      {{on "click" (fn dispatch 'TOGGLE')}}
                    >
                      Cancel
                    </Action>
                  </li>
                </ul>
              </div>

            </menu.Item>
          </panel.Menu>

        </disclosure.Menu>

      </DisclosureMenu>

      <Action>Focus Right</Action>
    </StateChart>
  </figure>

{{/each}}
```