{"version":3,"file":"index.module.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","ancestors","add","push","Object","getPrototypeOf","reverse","getAncestorsForConstructor","Array","from","reduce","values","propertyName","isArray","getOwnStaticArrayValues","forEach","Set","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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"}