{"version":3,"file":"index.modern.mjs","sources":["../src/action.js","../src/action_set.js","../src/inheritable_statics.js","../src/index.js"],"sourcesContent":["export default class Action {\n  constructor(identifier, definition) {\n    this.identifier = identifier;\n    this.name = definition[0];\n    this.descriptor = definition[1];\n    this.options = definition[2] || {};\n  };\n\n  get description() {\n    let descriptor = this.descriptor;\n    if (descriptor.match(/^:/)) {\n      descriptor = descriptor.replace(/^:/, `${this.identifier}:`)\n    }\n    if (descriptor.includes('->')) {\n      return descriptor.replace(/->/, `->${this.identifier}#`);\n    } else {\n      return `${this.identifier}#${descriptor}`;\n    }\n  }\n}\n","import Action from './action';\nimport { readInheritableStaticArrayValues } from './inheritable_statics';\n\nexport default class ActionSet {\n  constructor(context) {\n    this.context = context;\n    this.controller = context.controller;\n    this.actions = [];\n  }\n\n  run() {\n    this.add(readInheritableStaticArrayValues(this.controller.constructor, 'actions'));\n  }\n\n  add(definitions) {\n    let actions = definitions.map((definition) => new Action(this.controller.identifier, definition));\n\n    actions.forEach((action) => {\n      let targets = this.resolveTargets(action);\n      targets.forEach((target) => {\n        this.addAction(target, action);\n      });\n      this.actions.push(action);\n    });\n  }\n\n  remove(definitions) {\n    let actions = definitions.map((definition) => new Action(this.controller.identifier, definition));\n\n    actions.forEach((action) => {\n      let targets = this.resolveTargets(action);\n      targets.forEach((target) => {\n        this.removeAction(target, action);\n      });\n      this.actions = this.actions.filter((a) => a.description != action.description);\n    });\n  }\n\n  resolveTargets(action) {\n    let targets = this.findTargets(action.name);\n\n    if (action.options.if) {\n      return this.filterTargets(targets, action.options.if);\n    } else {\n      return targets;\n    }\n  }\n\n  findTargets(name) {\n    if (name == 'element') {\n      return [this.controller.element];\n    } else if (this.controller[`${name}Targets`]) {\n      return [].concat(this.controller[`${name}Targets`]);\n    } else {\n      return [];\n    }\n  }\n\n  filterTargets(targets, ifvalue) {\n    return targets.filter((target) => {\n      let property = this.controller[ifvalue];\n      if (typeof(property) == 'function') {\n        property = property.apply(this.controller, target);\n      }\n      return property != false\n    });\n  }\n\n  addAction(target, action) {\n    let description = action.description;\n    let currentDescriptions = (target.dataset['action'] || '').split(' ');\n    if (!currentDescriptions.some((currentDescription) => currentDescription == description)) {\n      currentDescriptions.push(description);\n    }\n    target.dataset['action'] = currentDescriptions.join(' ').trim();\n  }\n\n  removeAction(target, action) {\n    let description = action.description;\n    let currentDescriptions = (target.dataset['action'] || '').split(' ');\n    currentDescriptions = currentDescriptions.filter((currentDescription) => currentDescription != description);\n    target.dataset['action'] = currentDescriptions.join(' ').trim();\n  }\n}\n","export function readInheritableStaticArrayValues(constructor, propertyName) {\n  let ancestors = getAncestorsForConstructor(constructor);\n  return Array.from(ancestors.reduce((values, constructor) => {\n    getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n    return values;\n  }, new Set));\n}\n\nfunction getAncestorsForConstructor(constructor) {\n  const ancestors = [];\n  while (constructor) {\n    ancestors.push(constructor);\n    constructor = Object.getPrototypeOf(constructor);\n  }\n  return ancestors.reverse();\n}\n\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n  const definition = constructor[propertyName];\n  return Array.isArray(definition) ? definition : [];\n}\n","import { Context } from '@hotwired/stimulus';\nimport ActionSet from './action_set';\n\nlet oConnect = Context.prototype.connect;\nlet oTargetConnected = Context.prototype.targetConnected;\n\nContext.prototype.connect = function() {\n  this.actionSet = new ActionSet(this);\n  this.actionSet.run();\n  return oConnect.apply(this, arguments);\n};\n\nContext.prototype.targetConnected = function() {\n  this.actionSet.run();\n  return oTargetConnected.apply(this, arguments);\n}\n"],"names":["Action","constructor","identifier","definition","this","name","descriptor","options","description","match","replace","includes","ActionSet","context","controller","actions","run","add","propertyName","ancestors","push","Object","getPrototypeOf","reverse","getAncestorsForConstructor","Array","from","reduce","values","isArray","getOwnStaticArrayValues","forEach","Set","readInheritableStaticArrayValues","definitions","map","action","resolveTargets","target","addAction","remove","removeAction","filter","a","targets","findTargets","if","filterTargets","element","concat","ifvalue","property","apply","currentDescriptions","dataset","split","some","currentDescription","join","trim","oConnect","Context","prototype","connect","oTargetConnected","targetConnected","actionSet","arguments"],"mappings":"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"}