{"version":3,"names":["Entry","LivelyMenu","Morph","pt","html","fromDescription","desc","Array","isArray","fromArray","String","fromObject","name","callbackOrChildren","right","icon","options","onSelect","onDeselect","onClick","entry","Function","callback","Promise","children","selectHandler","deselectHandler","asItem","menu","HTMLElement","append","innerHTML","replace","item","appendChild","addEventListener","evt","matchingItems","includes","selectItem","matchesFilter","filter","textContent","toLowerCase","selected","deselected","FILTER_KEY_BLACKLIST","initialize","setAttribute","registerKeys","moveInsideWindow","w","window","innerWidth","innerHeight","b","lively","getClientBounds","original","topLeft","bottom","y","x","left","top","delta","subPt","parentMenu","getExtent","moveBy","topLevelMenu","_filter","value","onKeyDown","key","get","items","forEach","classList","remove","nonMatchingItems","add","currentItem","length","from","querySelectorAll","matchFilter","onSpaceDown","warn","onUpDown","selectUpOrDown","onDownDown","onEscDown","closeWindow","notify","onEscape","offset","targetIndex","indexOf","onLeftDown","focusWithoutScroll","onRightDown","enterSubmenu","onTabDown","shiftKey","submenu","onEnterUp","openOn","optEvt","optPos","container","console","log","resolve","ea","match","inner","setPosition","selectFirstItem","first","focus","subitems","document","createElement","components","openIn","bounds","getBoundingClientRect","menuBounds"],"sources":["lively-menu.js"],"sourcesContent":["/*MD # Lively Menu\n\n![](lively-menu.png){height=200}\n\n\nMD*/\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport { pt } from 'src/client/graphics.js';\nimport html from 'src/client/html.js';\n\nclass Entry {\n  static fromDescription(desc) {\n    if (Array.isArray(desc)) {\n      return this.fromArray(desc);\n    } else if (desc instanceof String) {\n      // #TODO: convert the String '---' into a <hl />\n    } else {\n      return this.fromObject(desc)\n    }\n  }\n  \n  static fromArray([name, callbackOrChildren, right, icon, options = {}]) {\n    const { onSelect, onDeselect, onClick } = options;\n    const entry = new Entry();\n\n    entry.name = name;\n    entry.callbackOrChildren = callbackOrChildren;\n    if (callbackOrChildren instanceof Function) {\n      entry.callback = callbackOrChildren;\n    } else if(callbackOrChildren instanceof Array || callbackOrChildren instanceof Promise) {\n      entry.children = callbackOrChildren;\n    }\n    if(onClick) {\n      entry.callback = onClick;\n    }\n    entry.icon = icon;\n    entry.right = right;\n    entry.selectHandler = onSelect;\n    entry.deselectHandler = onDeselect;\n\n    return entry;\n  }\n\n  static fromObject({ name, callback, children, right, icon, onSelect, onDeselect, onClick }) {\n    const entry = new Entry();\n\n    entry.name = name;\n    if(callback) {\n      entry.callback = callback;\n    }\n    if(children) {\n      entry.children = children;\n    }\n    // #TODO: remove this duplicitz of callback and onClick\n    if(onClick) {\n      entry.callback = onClick;\n    }\n    entry.icon = icon;\n    entry.right = right;\n    entry.selectHandler = onSelect;\n    entry.deselectHandler = onDeselect;\n\n    return entry;\n  }\n\n  asItem(menu) {\n    const icon = <div class='icon'></div>;\n    if (this.icon instanceof HTMLElement) {\n      icon.append(this.icon)\n    } else {\n      icon.innerHTML = this.icon ||  \"\"\n    }\n\n    const right = <label></label>;\n    if (this.right) {\n      if (this.right instanceof HTMLElement) {\n        right.append(this.right)\n      } else {\n        right.innerHTML = typeof this.right === 'string' ? this.right.replace(\"CMD\", \"Ctrl\") : this.right;\n      }\n    }\n    if (this.children && !this.right) {\n      right.append(<span class=\"submenuindicator\">►</span>);\n    }\n\n    const item = <li>{icon}{this.name}</li>;\n    item.entry = this;\n    item.appendChild(right);\n\n    if (this.callback) {\n      item.addEventListener(\"click\", evt => this.callback(evt, item));\n    }\n\n    item.addEventListener(\"mouseenter\", async evt => {\n      if (menu.matchingItems.includes(item)) {\n        menu.selectItem(item);\n      }\n    });\n\n    return item;\n  }\n\n  matchesFilter(filter) {\n    if (this.name instanceof HTMLElement) {\n      return this.name.textContent.toLowerCase().includes(filter.toLowerCase());\n    }\n    return typeof this.name === 'string' && this.name.toLowerCase().includes(filter.toLowerCase());\n  }\n\n  selected() {\n    if (this.selectHandler) {\n      this.selectHandler();\n    }\n  }\n  deselected() {\n    if (this.deselectHandler) {\n      this.deselectHandler();\n    }\n  }\n}\n\nconst FILTER_KEY_BLACKLIST = ['Control', 'Shift', 'Capslock', 'Alt', ' ', 'Enter', 'Escape', 'ArrowUp', 'ArrowRight', 'ArrowDown', 'ArrowLeft', 'Tab'];\n\nexport default class LivelyMenu extends Morph {\n  initialize() {\n    this.setAttribute(\"tabindex\", 0);\n    html.registerKeys(this, \"Menu\", this, true);\n  }\n\n  moveInsideWindow() {\n    var w = pt(window.innerWidth - 12, window.innerHeight - 12);\n    var b = lively.getClientBounds(this);\n    var original = b.topLeft();\n\n    if (b.bottom() > w.y) {\n      b.y -= b.bottom() - w.y;\n    }\n    if (b.right() > w.x) {\n      b.x -= b.right() - w.x;\n    }\n    if (b.left() < 0) {\n      b.x -= b.left();\n    }\n    if (b.top() < 0) {\n      b.y -= b.top();\n    }\n\n    var delta = b.topLeft().subPt(original\n    // lively.moveBy(this.topLevelMenu(), delta)\n    );if (this.parentMenu) {\n      if (delta.x < 0) {\n        delta.x -= lively.getExtent(this.parentMenu).x;\n      }\n    }\n    lively.moveBy(this, delta);\n\n    return delta;\n  }\n\n  topLevelMenu() {\n    if (!this.parentMenu) {\n      return this;\n    } else {\n      return this.parentMenu.topLevelMenu();\n    }\n  }\n\n  // lazy filter property\n  get filter() {\n    return this._filter = this._filter || '';\n  }\n  set filter(value) {\n    return this._filter = value;\n  }\n\n  onKeyDown(evt) {\n    if (FILTER_KEY_BLACKLIST.includes(evt.key)) {\n      return;\n    }\n\n    if (['Backspace', 'Delete'].includes(evt.key)) {\n      this.filter = '';\n    } else {\n      this.filter += evt.key;\n    }\n\n    this.get('#filter-hint').innerHTML = this.filter;\n\n    // lively.warn(evt.key, this.filter)\n\n    this.items.forEach(item => item.classList.remove('filtered-out'));\n    this.nonMatchingItems.forEach(item => item.classList.add('filtered-out'));\n\n    // lively.notify(this.matchingItems.length, this.nonMatchingItems.length)\n    if (!this.currentItem || this.nonMatchingItems.includes(this.currentItem) && this.matchingItems.length > 0) {\n      this.selectItem(this.matchingItems[0]);\n    }\n  }\n\n  get items() {\n    return Array.from(this.get(\".container\").querySelectorAll(\"li\"));\n  }\n\n  matchFilter(item) {\n    return item && item.entry && item.entry.matchesFilter(this.filter);\n  }\n\n  get matchingItems() {\n    return this.items.filter(item => this.matchFilter(item));\n  }\n\n  get nonMatchingItems() {\n    return this.items.filter(item => !this.matchFilter(item));\n  }\n\n  onSpaceDown(evt) {\n    lively.warn('should toggle binary Preferences');\n  }\n\n  onUpDown(evt) {\n    this.selectUpOrDown(evt, -1);\n  }\n\n  onDownDown(evt) {\n    this.selectUpOrDown(evt, 1);\n  }\n\n  onEscDown(evt) {\n    // #TODO: check if we are in a submenu\n    if (this.parentMenu) {\n      this.parentMenu.onEscDown(evt);\n    }\n    \n    this.closeWindow();\n\n    lively.notify('esc down')\n\n    if (this.onEscape) {\n      this.onEscape()\n    }\n  }\n\n  selectUpOrDown(evt, offset = 0) {\n    if (!this.currentItem) {\n      this.selectItem(this.items[0]);\n    } else {\n      var matchingItems = this.matchingItems;\n      var targetIndex = (matchingItems.indexOf(this.currentItem) + offset + matchingItems.length) % matchingItems.length; //cycling through menu items\n      this.selectItem(matchingItems[targetIndex]);\n    }\n  }\n\n  onLeftDown(evt) {\n    if (this.parentMenu) {\n      lively.focusWithoutScroll(this.parentMenu);\n      this.parentMenu.selectUpOrDown(evt);\n    }\n  }\n\n  async onRightDown(evt) {\n    if (!this.currentItem) {\n      return;\n    }\n\n    var entry = this.currentItem.entry;\n\n    if ((await entry.children) instanceof Array) {\n      this.enterSubmenu(evt);\n    }\n  }\n\n  onTabDown(evt) {\n    if (evt.shiftKey) {\n      this.onLeftDown(evt);\n    } else {\n      this.onRightDown(evt);\n    }\n  }\n\n  enterSubmenu(evt) {\n    lively.focusWithoutScroll(this.submenu);\n    this.submenu.selectUpOrDown(evt);\n  }\n\n  async onEnterUp(evt) {\n    if (!this.currentItem) return;\n\n    var entry = this.currentItem.entry;\n    if (entry.callback) {\n      entry.callback(evt, this.currentItem);\n    } else if ((await entry.children) instanceof Array) {\n      this.enterSubmenu(evt);\n    }\n  }\n\n  async openOn(items, optEvt, optPos, options = {}) {\n    var container = this.get(\".container\");\n    container.innerHTML = \"\"; // clear\n\n    // create a radio button for each tool\n    if (!items) {\n      console.log(\"WARNING: no items to open\");\n      return Promise.resolve();\n    }\n    \n    /* general config */\n    if (options.onEscape) {\n      this.onEscape = options.onEscape;\n    }\n    \n    /* item list */\n    for (let ea of items) {\n      if (typeof ea === 'string') {\n        const match = ea.match(/^---(.+)---$/)\n        if (match) {\n          const inner = <span></span>;\n          inner.innerHTML = match[1];\n          container.append(<hr class='separator-with-text'>{inner}</hr>)\n        } else {\n          container.append(<hr class='separator'></hr>)\n        }\n        continue\n      }\n\n      const entry = Entry.fromDescription(ea);\n      const item = entry.asItem(this);\n      container.appendChild(item);\n    }\n\n    /* positioning */\n    if (optPos) lively.setPosition(this, optPos);\n    this.moveInsideWindow();\n\n    return Promise.resolve(container);\n  }\n  \n  closeWindow() {\n    if(this.currentItem) {\n      this.currentItem.entry.deselected();\n    }\n    this.remove();\n  }\n\n  selectFirstItem() {\n    this.selectItem(this.items.first)\n  }\n  \n  async selectItem(item) {\n    if (this.currentItem) {\n      this.currentItem.classList.remove(\"current\");\n      this.currentItem.entry.deselected();\n    }\n    if (!item) return;\n    // lively.showElement(item)\n    item.classList.add(\"current\");\n    this.currentItem = item;\n\n    // scroll item into view\n    item.setAttribute('tabindex', 0);\n    item.focus();\n\n    var ea = item.entry;\n    var menu = this.get(\".container\");\n    if (this.submenu) this.submenu.closeWindow();\n    item.entry.selected();\n    const subitems = await ea.children; // resolve Promise\n    if (subitems instanceof Array) {\n      this.submenu = document.createElement(\"lively-menu\");\n      this.submenu.parentMenu = this;\n      await lively.components.openIn(menu, this.submenu);\n      var bounds = item.getBoundingClientRect();\n      var menuBounds = menu.getBoundingClientRect();\n      this.submenu.openOn(subitems, null, pt(bounds.right, bounds.top).subPt(pt(menuBounds.left, menuBounds.top\n      // lively.moveBy(this, delta)\n      )));\n    }\n  }\n\n}"],"mappings":"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"}