{"version":3,"names":["Entry","LivelyMenu","__SystemJSRewritingHack","FILTER_KEY_BLACKLIST","_export","setters","_reactiveJsx","_addSourceLocation","addSourceLocation","_childExpression","childExpression","_childText","childText","_children","children","_attributeStringLiteral","attributeStringLiteral","_attributes","attributes","_element","element","_srcComponentsWidgetsLivelyMorphJs","Morph","default","_srcClientGraphicsJs","pt","_srcClientHtmlJs","html","execute","_recorder_","_src_components_widgets_lively_menu_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","fromDescription","desc","Array","isArray","fromArray","String","fromObject","name","callbackOrChildren","right","icon","options","onSelect","onDeselect","onClick","entry","Function","callback","Promise","selectHandler","deselectHandler","asItem","menu","file","end","column","line","start","HTMLElement","append","innerHTML","replace","item","appendChild","addEventListener","evt","matchingItems","includes","selectItem","matchesFilter","filter","textContent","toLowerCase","selected","deselected","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","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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"}