ariadne_view_components 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +68 -0
  4. data/app/assets/javascripts/ariadne_view_components.js +2 -0
  5. data/app/assets/javascripts/ariadne_view_components.js.map +1 -0
  6. data/app/assets/stylesheets/application.tailwind.css +3 -0
  7. data/app/components/ariadne/ariadne.ts +14 -0
  8. data/app/components/ariadne/base_button.rb +60 -0
  9. data/app/components/ariadne/base_component.rb +155 -0
  10. data/app/components/ariadne/button_component.html.erb +4 -0
  11. data/app/components/ariadne/button_component.rb +158 -0
  12. data/app/components/ariadne/clipboard_copy_component.html.erb +8 -0
  13. data/app/components/ariadne/clipboard_copy_component.rb +50 -0
  14. data/app/components/ariadne/clipboard_copy_component.ts +19 -0
  15. data/app/components/ariadne/component.rb +123 -0
  16. data/app/components/ariadne/content.rb +12 -0
  17. data/app/components/ariadne/counter_component.rb +100 -0
  18. data/app/components/ariadne/flash_component.html.erb +31 -0
  19. data/app/components/ariadne/flash_component.rb +125 -0
  20. data/app/components/ariadne/heading_component.rb +49 -0
  21. data/app/components/ariadne/heroicon_component.html.erb +7 -0
  22. data/app/components/ariadne/heroicon_component.rb +116 -0
  23. data/app/components/ariadne/image_component.rb +51 -0
  24. data/app/components/ariadne/text.rb +25 -0
  25. data/app/components/ariadne/tooltip_component.rb +105 -0
  26. data/app/lib/ariadne/audited/dsl.rb +32 -0
  27. data/app/lib/ariadne/class_name_helper.rb +22 -0
  28. data/app/lib/ariadne/fetch_or_fallback_helper.rb +100 -0
  29. data/app/lib/ariadne/icon_helper.rb +47 -0
  30. data/app/lib/ariadne/join_style_arguments_helper.rb +14 -0
  31. data/app/lib/ariadne/logger_helper.rb +23 -0
  32. data/app/lib/ariadne/status/dsl.rb +41 -0
  33. data/app/lib/ariadne/tab_nav_helper.rb +35 -0
  34. data/app/lib/ariadne/tabbed_component_helper.rb +39 -0
  35. data/app/lib/ariadne/test_selector_helper.rb +20 -0
  36. data/app/lib/ariadne/underline_nav_helper.rb +44 -0
  37. data/app/lib/ariadne/view_helper.rb +22 -0
  38. data/lib/ariadne/classify/utilities.rb +199 -0
  39. data/lib/ariadne/classify/utilities.yml +1817 -0
  40. data/lib/ariadne/classify/validation.rb +18 -0
  41. data/lib/ariadne/classify.rb +210 -0
  42. data/lib/ariadne/view_components/constants.rb +53 -0
  43. data/lib/ariadne/view_components/engine.rb +30 -0
  44. data/lib/ariadne/view_components/linters.rb +3 -0
  45. data/lib/ariadne/view_components/statuses.rb +14 -0
  46. data/lib/ariadne/view_components/version.rb +7 -0
  47. data/lib/ariadne/view_components.rb +59 -0
  48. data/lib/rubocop/config/default.yml +14 -0
  49. data/lib/rubocop/cop/ariadne/ariadne_heroicon.rb +252 -0
  50. data/lib/rubocop/cop/ariadne/base_cop.rb +26 -0
  51. data/lib/rubocop/cop/ariadne/component_name_migration.rb +35 -0
  52. data/lib/rubocop/cop/ariadne/no_tag_memoize.rb +43 -0
  53. data/lib/rubocop/cop/ariadne/system_argument_instead_of_class.rb +57 -0
  54. data/lib/rubocop/cop/ariadne.rb +3 -0
  55. data/lib/tasks/ariadne_view_components.rake +47 -0
  56. data/lib/tasks/coverage.rake +19 -0
  57. data/lib/tasks/custom_utilities.yml +310 -0
  58. data/lib/tasks/docs.rake +525 -0
  59. data/lib/tasks/helpers/ast_processor.rb +44 -0
  60. data/lib/tasks/helpers/ast_traverser.rb +77 -0
  61. data/lib/tasks/static.rake +15 -0
  62. data/lib/tasks/tailwind.rake +31 -0
  63. data/lib/tasks/utilities.rake +121 -0
  64. data/lib/yard/docs_helper.rb +83 -0
  65. data/lib/yard/renders_many_handler.rb +19 -0
  66. data/lib/yard/renders_one_handler.rb +19 -0
  67. data/static/arguments.yml +251 -0
  68. data/static/assets/view-components.svg +18 -0
  69. data/static/audited_at.json +14 -0
  70. data/static/classes.yml +89 -0
  71. data/static/constants.json +243 -0
  72. data/static/statuses.json +14 -0
  73. data/static/tailwindcss.yml +727 -0
  74. metadata +193 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0e98d0a1bac2bfeefda478d19704c850970c0c6126154cf7bb94fbd765fa3c8a
4
+ data.tar.gz: 0b1974157309284564597d1b627060e7b83b9af383ae1216673c6cd8d3d8361d
5
+ SHA512:
6
+ metadata.gz: 4a141106365f4d16060c6ff596290ea8d342234f096995c67af01c5384bae6006d8cae1517b769b0887703b55d00b4e07d4b9ea74a9bda8a7eb6c01b082cb990
7
+ data.tar.gz: 13426af9ca265bb6d0b350112d63e72ab5b58435807f2798b8b424df0f8cddd6a74df3f3858d456b8c51beb5024ef543ef1682b8e25d3c65cb1d8835345ba9f1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Yetto
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # ViewComponents
2
+
3
+ This repository contains the Ruby view components for the Ariadne design system. It is composed of several projects:
4
+
5
+ * [Tailwind CSS](https://tailwindcss.com)
6
+ * [Heroicons](https://heroicons.com)
7
+ * [ViewComponents](https://viewcomponent.org)
8
+ * [StimulusJS](https://stimulus.hotwired.dev)
9
+
10
+ This project is basically a fork and rewrite of [Primer's ViewComponents](https://primer.style/view-components/), except instead of Primer, it uses an open source stack we've found useful. **Our eternal gratitude to their design team for open sourcing that repo.**
11
+
12
+ ## Using the gem
13
+
14
+ todo, lol
15
+
16
+ ```ruby
17
+ <%= render(Ariadne::HeadingComponent.new(tag: :h1)) { "H1 Text" } %>
18
+ ```
19
+
20
+ ```ruby
21
+ def initialize(tag: nil, classes: "", options:)
22
+ @system_arguments = system_arguments
23
+ @system_arguments[:tag] = tag
24
+
25
+ @system_arguments[:classes] = class_names(*TAG_TO_CLASSES[tag], system_arguments[:classes])
26
+ )
27
+ end
28
+ ```
29
+
30
+ document schemes, fetch_or_raise, all that
31
+
32
+ ### Incorporating Rubocop and other linters
33
+
34
+ This gem comes with some standard linters to keep your code fresh and consistent. Refer to [the documentation](./docs/content/linting.md) for more information.
35
+
36
+ ## Getting started with development
37
+
38
+ So, you just cloned the repo, huh? Great. In addition to Ruby >= 2.7 (3.x preferred), install [Overmind](https://github.com/DarthSim/overmind) and Node/NPM. Then, run the following script to set up your local environment:
39
+
40
+ ```
41
+ script/setup
42
+ ```
43
+
44
+ This will install all the necessary dependencies, plus get you ready for viewing the components and generating the documentation.
45
+
46
+ If you then run `script/server`, this will build and run both the documentation site and launch Lookbook.
47
+
48
+ ### Adding new components
49
+
50
+ See [the documentation on adding new components](./docs/content/adding_components.md).
51
+
52
+ ### Running tests
53
+
54
+ See [the documentation on testing](./docs/content/testing.md).
55
+
56
+ ### Generating Documentation and Lookbook
57
+
58
+ Run `script/docs` to get a build of the documentation running at `localhost:5400`. The documentation comes from the YARD comments, and all of the markdowns files in `./docs`. You can define the TOC navigation in `docs/src/@primer/gatsby-theme-doctocat/nav.yml`.
59
+
60
+ You can generate and view a [Lookbook](https://github.com/allmarkedup/lookbook) site via the `script/lookbook` command.
61
+
62
+ For more information on writing documentation and presenting the components via Loobook, [here's more information](./docs/content/documentation.md)
63
+
64
+ ### Publishing a Release
65
+
66
+ To publish a release, you must have an account on [rubygems](https://rubygems.org/) and [npmjs](https://www.npmjs.com/). Additionally, you must have been added as a maintainer to the project. Please verify that you have 2FA enabled on both accounts.
67
+
68
+ 1. Once the changesets release PR has been approved and merged, run `script/publish`. This will build and publish the packages. You may be prompted to log into your rubygem and npm account.
@@ -0,0 +1,2 @@
1
+ class e{constructor(e,t,r){this.eventTarget=e,this.eventName=t,this.eventOptions=r,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}get bindings(){return Array.from(this.unorderedBindings).sort(((e,t)=>{const r=e.index,s=t.index;return r<s?-1:r>s?1:0}))}}class t{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach((e=>e.connect())))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach((e=>e.disconnect())))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce(((e,t)=>e.concat(Array.from(t.values()))),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)}handleError(e,t,r={}){this.application.handleError(e,`Error ${t}`,r)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:r,eventOptions:s}=e;return this.fetchEventListener(t,r,s)}fetchEventListener(e,t,r){const s=this.fetchEventListenerMapForEventTarget(e),n=this.cacheKey(t,r);let i=s.get(n);return i||(i=this.createEventListener(e,t,r),s.set(n,i)),i}createEventListener(t,r,s){const n=new e(t,r,s);return this.started&&n.connect(),n}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const r=[e];return Object.keys(t).sort().forEach((e=>{r.push(`${t[e]?"":"!"}${e}`)})),r.join(":")}}const r=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function s(e){return"window"==e?window:"document"==e?document:void 0}function n(e){return e.replace(/(?:[_-])([a-z0-9])/g,((e,t)=>t.toUpperCase()))}function i(e){return e.charAt(0).toUpperCase()+e.slice(1)}function o(e){return e.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}const a={a:e=>"click",button:e=>"click",form:e=>"submit",details:e=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:e=>"change",textarea:e=>"input"};function c(e){throw new Error(e)}function h(e){try{return JSON.parse(e)}catch(t){return e}}class l{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}invokeWithEvent(e){const{target:t,currentTarget:r}=e;try{const{params:s}=this.action,n=Object.assign(e,{params:s});this.method.call(this.controller,n),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:r,action:this.methodName})}catch(t){const{identifier:r,controller:s,element:n,index:i}=this,o={identifier:r,controller:s,element:n,index:i,event:e};this.context.handleError(t,`invoking action "${this.action}"`,o)}}willBeInvokedByEvent(e){const t=e.target;return this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class u{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){const r=e;this.elements.has(r)?this.delegate.elementAttributeChanged&&this.matchElement(r)?this.delegate.elementAttributeChanged(r,t):this.removeElement(r):this.matchElement(r)&&this.addElement(r)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const r of this.matchElementsInTree(e))t.call(this,r)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class d{constructor(e,t,r){this.attributeName=t,this.delegate=r,this.elementObserver=new u(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],r=Array.from(e.querySelectorAll(this.selector));return t.concat(r)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}class g{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const r=this.delegate.getStringMapKeyForAttribute(e);if(null!=r){this.stringMap.has(e)||this.stringMapKeyAdded(r,e);const s=this.element.getAttribute(e);if(this.stringMap.get(e)!=s&&this.stringMapValueChanged(s,r,t),null==s){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(r,e,t)}else this.stringMap.set(e,s)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,r){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,r)}stringMapKeyRemoved(e,t,r){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,r)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map((e=>e.name))}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}function m(e,t){let r=e.get(t);return r||(r=new Set,e.set(t,r)),r}class p{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e.concat(Array.from(t))),[])}get size(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e+t.size),0)}add(e,t){!function(e,t,r){m(e,t).add(r)}(this.valuesByKey,e,t)}delete(e,t){!function(e,t,r){m(e,t).delete(r),function(e,t){const r=e.get(t);null!=r&&0==r.size&&e.delete(t)}(e,t)}(this.valuesByKey,e,t)}has(e,t){const r=this.valuesByKey.get(e);return null!=r&&r.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some((t=>t.has(e)))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter((([t,r])=>r.has(e))).map((([e,t])=>e))}}class f{constructor(e,t,r){this.attributeObserver=new d(e,t,this),this.delegate=r,this.tokensByElement=new p}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,r]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(r)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach((e=>this.tokenMatched(e)))}tokensUnmatched(e){e.forEach((e=>this.tokenUnmatched(e)))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),r=this.readTokensForElement(e),s=function(e,t){const r=Math.max(e.length,t.length);return Array.from({length:r},((r,s)=>[e[s],t[s]]))}(t,r).findIndex((([e,t])=>{return s=t,!((r=e)&&s&&r.index==s.index&&r.content==s.content);var r,s}));return-1==s?[[],[]]:[t.slice(s),r.slice(s)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,r){return e.trim().split(/\s+/).filter((e=>e.length)).map(((e,s)=>({element:t,attributeName:r,content:e,index:s})))}(e.getAttribute(t)||"",e,t)}}class b{constructor(e,t,r){this.tokenListObserver=new f(e,t,this),this.delegate=r,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:r}=this.fetchParseResultForToken(e);r&&(this.fetchValuesByTokenForElement(t).set(e,r),this.delegate.elementMatchedValue(t,r))}tokenUnmatched(e){const{element:t}=e,{value:r}=this.fetchParseResultForToken(e);r&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,r))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class v{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new b(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new l(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach((e=>this.delegate.bindingDisconnected(e))),this.bindingsByAction.clear()}parseValueForToken(e){const t=class{constructor(e,t,r){this.element=e,this.index=t,this.eventTarget=r.eventTarget||e,this.eventName=r.eventName||function(e){const t=e.tagName.toLowerCase();if(t in a)return a[t](e)}(e)||c("missing event name"),this.eventOptions=r.eventOptions||{},this.identifier=r.identifier||c("missing identifier"),this.methodName=r.methodName||c("missing method name")}static forToken(e){return new this(e.element,e.index,function(e){const t=e.trim().match(r)||[];return{eventTarget:s(t[4]),eventName:t[2],eventOptions:t[9]?(n=t[9],n.split(":").reduce(((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)})),{})):{},identifier:t[5],methodName:t[7]};var n}(e.content))}toString(){const e=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}->${this.identifier}#${this.methodName}`}get params(){return this.eventTarget instanceof Element?this.getParamsFromEventTargetAttributes(this.eventTarget):{}}getParamsFromEventTargetAttributes(e){const t={},r=new RegExp(`^data-${this.identifier}-(.+)-param$`);return Array.from(e.attributes).forEach((({name:e,value:s})=>{const i=e.match(r),o=i&&i[1];o&&Object.assign(t,{[n(o)]:h(s)})})),t}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}}.forToken(e);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class y{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new g(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}start(){this.stringMapObserver.start()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const r=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,r.writer(this.receiver[e]),r.writer(r.defaultValue))}stringMapValueChanged(e,t,r){const s=this.valueDescriptorNameMap[t];null!==e&&(null===r&&(r=s.writer(s.defaultValue)),this.invokeChangedCallback(t,e,r))}stringMapKeyRemoved(e,t,r){const s=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,s.writer(this.receiver[e]),r):this.invokeChangedCallback(e,s.writer(s.defaultValue),r)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:r,writer:s}of this.valueDescriptors)null==r||this.controller.data.has(e)||this.invokeChangedCallback(t,s(r),void 0)}invokeChangedCallback(e,t,r){const s=`${e}Changed`,n=this.receiver[s];if("function"==typeof n){const s=this.valueDescriptorNameMap[e],i=s.reader(t);let o=r;r&&(o=s.reader(r)),n.call(this.receiver,i,o)}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map((t=>e[t]))}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach((t=>{const r=this.valueDescriptorMap[t];e[r.name]=r})),e}hasValue(e){const t=`has${i(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class A{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new p}start(){this.tokenListObserver||(this.tokenListObserver=new f(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var r;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(r=this.tokenListObserver)||void 0===r||r.pause((()=>this.delegate.targetConnected(e,t))))}disconnectTarget(e,t){var r;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(r=this.tokenListObserver)||void 0===r||r.pause((()=>this.delegate.targetDisconnected(e,t))))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}class E{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:r,controller:s,element:n}=this;t=Object.assign({identifier:r,controller:s,element:n},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new v(this,this.dispatcher),this.valueObserver=new y(this,this.controller),this.targetObserver=new A(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,r={}){const{identifier:s,controller:n,element:i}=this;r=Object.assign({identifier:s,controller:n,element:i},r),this.application.handleError(e,`Error ${t}`,r)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}invokeControllerMethod(e,...t){const r=this.controller;"function"==typeof r[e]&&r[e](...t)}}function O(e,t){const r=k(e);return Array.from(r.reduce(((e,r)=>(function(e,t){const r=e[t];return Array.isArray(r)?r:[]}(r,t).forEach((t=>e.add(t))),e)),new Set))}function w(e,t){return k(e).reduce(((e,r)=>(e.push(...function(e,t){const r=e[t];return r?Object.keys(r).map((e=>[e,r[e]])):[]}(r,t)),e)),[])}function k(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}function M(e){return function(e,t){const r=T(e),s=function(e,t){return N(t).reduce(((r,s)=>{const n=function(e,t,r){const s=Object.getOwnPropertyDescriptor(e,r);if(!s||!("value"in s)){const e=Object.getOwnPropertyDescriptor(t,r).value;return s&&(e.get=s.get||e.get,e.set=s.set||e.set),e}}(e,t,s);return n&&Object.assign(r,{[s]:n}),r}),{})}(e.prototype,t);return Object.defineProperties(r.prototype,s),r}(e,function(e){return O(e,"blessings").reduce(((t,r)=>{const s=r(e);for(const e in s){const r=t[e]||{};t[e]=Object.assign(r,s[e])}return t}),{})}(e))}const N="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,T=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e((function(){this.a.call(this)}));t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class C{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:M(e.controllerConstructor)}}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new E(this,e),this.contextsByScope.set(e,t)),t}}class B{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){const t=this.data.get(this.getDataKey(e))||"";return t.match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class x{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const r=this.getAttributeNameForKey(e);return this.element.setAttribute(r,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${o(e)}`}}class F{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,r){let s=this.warnedKeysByObject.get(e);s||(s=new Set,this.warnedKeysByObject.set(e,s)),s.has(t)||(s.add(t),this.logger.warn(r,e))}}function L(e,t){return`[${e}~="${t}"]`}class ${constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)]),[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return L(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map((t=>this.deprecate(t,e)))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return L(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:r}=this,s=this.schema.targetAttribute,n=this.schema.targetAttributeForScope(r);this.guide.warn(e,`target:${t}`,`Please replace ${s}="${r}.${t}" with ${n}="${t}". The ${s} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class S{constructor(e,t,r,s){this.targets=new $(this),this.classes=new B(this),this.data=new x(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=r,this.guide=new F(s)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return L(this.schema.controllerAttribute,this.identifier)}}class D{constructor(e,t,r){this.element=e,this.schema=t,this.delegate=r,this.valueListObserver=new b(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:r}=e,s=this.fetchScopesByIdentifierForElement(t);let n=s.get(r);return n||(n=this.delegate.createScopeForElementAndIdentifier(t,r),s.set(r,n)),n}elementMatchedValue(e,t){const r=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,r),1==r&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const r=this.scopeReferenceCounts.get(t);r&&(this.scopeReferenceCounts.set(t,r-1),1==r&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class K{constructor(e){this.application=e,this.scopeObserver=new D(this.element,this.schema,this),this.scopesByIdentifier=new p,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce(((e,t)=>e.concat(t.contexts)),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new C(this.application,e);this.connectModule(t)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const r=this.modulesByIdentifier.get(t);if(r)return r.contexts.find((t=>t.element==e))}handleError(e,t,r){this.application.handleError(e,t,r)}createScopeForElementAndIdentifier(e,t){return new S(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e);this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.connectContextForScope(t)))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier);this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.disconnectContextForScope(t)))}}const I={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`};class V{constructor(e=document.documentElement,r=I){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,r={})=>{this.debug&&this.logFormattedMessage(e,t,r)},this.element=e,this.schema=r,this.dispatcher=new t(this),this.router=new K(this)}static start(e,t){const r=new V(e,t);return r.start(),r}async start(){await new Promise((e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",(()=>e())):e()})),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){t.shouldLoad&&this.load({identifier:e,controllerConstructor:t})}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>this.router.loadDefinition(e)))}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>this.router.unloadIdentifier(e)))}get controllers(){return this.router.contexts.map((e=>e.controller))}getControllerForElementAndIdentifier(e,t){const r=this.router.getContextForElementAndIdentifier(e,t);return r?r.controller:null}handleError(e,t,r){var s;this.logger.error("%s\n\n%o\n\n%o",t,e,r),null===(s=window.onerror)||void 0===s||s.call(window,t,"",0,0,e)}logFormattedMessage(e,t,r={}){r=Object.assign({application:this},r),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},r)),this.logger.groupEnd()}}function j([e,t]){return function(e,t){const r=`${o(e)}-value`,s=function(e){const t=function(e){const t=R(e.type);if(t){const r=P(e.default);if(t!==r)throw new Error(`Type "${t}" must match the type of the default value. Given default value: "${e.default}" as "${r}"`);return t}}(e),r=P(e),s=R(e),n=t||r||s;if(n)return n;throw new Error(`Unknown value type "${e}"`)}(t);return{type:s,key:r,name:n(r),get defaultValue(){return function(e){const t=R(e);if(t)return U[t];const r=e.default;return void 0!==r?r:e}(t)},get hasCustomDefaultValue(){return void 0!==P(t)},reader:z[s],writer:W[s]||W.default}}(e,t)}function R(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function P(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const U={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},z={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError("Expected array");return t},boolean:e=>!("0"==e||"false"==e),number:e=>Number(e),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError("Expected object");return t},string:e=>e},W={default:function(e){return`${e}`},array:q,object:q};function q(e){return JSON.stringify(e)}class J{constructor(e){this.context=e}static get shouldLoad(){return!0}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:r={},prefix:s=this.identifier,bubbles:n=!0,cancelable:i=!0}={}){const o=new CustomEvent(s?`${s}:${e}`:e,{detail:r,bubbles:n,cancelable:i});return t.dispatchEvent(o),o}}J.blessings=[function(e){return O(e,"classes").reduce(((e,t)=>{return Object.assign(e,{[`${r=t}Class`]:{get(){const{classes:e}=this;if(e.has(r))return e.get(r);{const t=e.getAttributeName(r);throw new Error(`Missing attribute "${t}"`)}}},[`${r}Classes`]:{get(){return this.classes.getAll(r)}},[`has${i(r)}Class`]:{get(){return this.classes.has(r)}}});var r}),{})},function(e){return O(e,"targets").reduce(((e,t)=>{return Object.assign(e,{[`${r=t}Target`]:{get(){const e=this.targets.find(r);if(e)return e;throw new Error(`Missing target element "${r}" for "${this.identifier}" controller`)}},[`${r}Targets`]:{get(){return this.targets.findAll(r)}},[`has${i(r)}Target`]:{get(){return this.targets.has(r)}}});var r}),{})},function(e){const t=w(e,"values"),r={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const r=j(t),s=this.data.getAttributeNameForKey(r.key);return Object.assign(e,{[s]:r})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,function(e){const t=j(e),{key:r,name:s,reader:n,writer:o}=t;return{[s]:{get(){const e=this.data.get(r);return null!==e?n(e):t.defaultValue},set(e){void 0===e?this.data.delete(r):this.data.set(r,o(e))}},[`has${i(s)}`]:{get(){return this.data.has(r)||t.hasCustomDefaultValue}}}}(t))),r)}],J.targets=[],J.values={};V.start().register("clipboard_copy_component",class extends J{copy(){const e=this.element.attributes.getNamedItem("value"),t=this.element.attributes.getNamedItem("for");if(e)navigator.clipboard.writeText(e.value);else if(t){const e=document.getElementById(t.value);navigator.clipboard.writeText((null==e?void 0:e.textContent)||"")}else navigator.clipboard.writeText(this.element.textContent||"")}});
2
+ //# sourceMappingURL=ariadne_view_components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ariadne_view_components.js","sources":["../../../node_modules/@hotwired/stimulus/dist/stimulus.js","../../components/ariadne/ariadne.js","../../components/ariadne/clipboard_copy_component.js"],"sourcesContent":["/*\nStimulus 3.0.1\nCopyright © 2021 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n }\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map;\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(eventListener => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(eventListener => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values())\n .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map;\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions).sort().forEach(key => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n constructor(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n static forToken(token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n }\n toString() {\n const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n }\n get params() {\n if (this.eventTarget instanceof Element) {\n return this.getParamsFromEventTargetAttributes(this.eventTarget);\n }\n else {\n return {};\n }\n }\n getParamsFromEventTargetAttributes(eventTarget) {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n const attributes = Array.from(eventTarget.attributes);\n attributes.forEach(({ name, value }) => {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n Object.assign(params, { [camelize(key)]: typecast(value) });\n }\n });\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n}\nconst defaultEventNames = {\n \"a\": e => \"click\",\n \"button\": e => \"click\",\n \"form\": e => \"submit\",\n \"details\": e => \"toggle\",\n \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n \"select\": e => \"change\",\n \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n const { params } = this.action;\n const actionEvent = Object.assign(event, { params });\n this.method.call(this.controller, actionEvent);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set;\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(node, attributeName) {\n const element = node;\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map;\n this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map(attribute => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some(set => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([key, values]) => values.has(value))\n .map(([key, values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map;\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap;\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach(token => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach(token => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens)\n .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(content => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap;\n this.valuesByTokenByElement = new WeakMap;\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map;\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map;\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n this.invokeChangedCallbacksForDefaultValues();\n }\n start() {\n this.stringMapObserver.start();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach(key => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap;\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const 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}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\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}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [\n ...Object.getOwnPropertyNames(object),\n ...Object.getOwnPropertySymbols(object)\n ];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () { this.a.call(this); };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b;\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor)\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap;\n this.connectedContexts = new Set;\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap;\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set;\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target\n || this.findTarget(targetName)\n || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName)\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n }\n findElement(selector) {\n return this.element.matches(selector)\n ? this.element\n : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...this.element.matches(selector) ? [this.element] : [],\n ...this.queryElements(selector).filter(this.containsElement)\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap;\n this.scopeReferenceCounts = new WeakMap;\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map;\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap;\n this.modulesByIdentifier = new Map;\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find(context => context.element == element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(scope => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(scope => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n static start(element, schema) {\n const application = new Application(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n if (controllerConstructor.shouldLoad) {\n this.load({ identifier, controllerConstructor });\n }\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach(definition => this.router.loadDefinition(definition));\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map(context => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise(resolve => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n }\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n }\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n }\n }\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n }\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n }\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n }\n }\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n }\n }\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair) {\n const definition = parseValueDefinitionPair(valueDefinitionPair);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n }\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n }\n }\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition]) {\n return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array: return \"array\";\n case Boolean: return \"boolean\";\n case Number: return \"number\";\n case Object: return \"object\";\n case String: return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\": return \"boolean\";\n case \"number\": return \"number\";\n case \"string\": return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(typeObject) {\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n if (typeFromObject) {\n const defaultValueType = parseValueTypeDefault(typeObject.default);\n if (typeFromObject !== defaultValueType) {\n throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n }\n return typeFromObject;\n }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n const typeFromObject = parseValueTypeObject(typeDefinition);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const defaultValue = typeDefinition.default;\n if (defaultValue !== undefined)\n return defaultValue;\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(typeDefinition);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n reader: readers[type],\n writer: writers[type] || writers.default\n };\n}\nconst defaultValuesByType = {\n get array() { return []; },\n boolean: false,\n number: 0,\n get object() { return {}; },\n string: \"\"\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(\"Expected array\");\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || value == \"false\");\n },\n number(value) {\n return Number(value);\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(\"Expected object\");\n }\n return object;\n },\n string(value) {\n return value;\n }\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Application } from '@hotwired/stimulus';\nimport ClipboardCopyComponent from './clipboard_copy_component';\n// import './clipboard_copy_component'\n// import './tab_container_component'\n// import './time_ago_component'\n// import './local_time'\n// import './image_crop'\n// import './dropdown'\n// import './alpha/tool-tip-element'\nconst application = Application.start();\napplication.register('clipboard_copy_component', ClipboardCopyComponent);\n","import { Controller } from '@hotwired/stimulus';\nexport default class ClipboardCopyComponent extends Controller {\n copy() {\n const value = this.element.attributes.getNamedItem('value');\n const forNode = this.element.attributes.getNamedItem('for');\n if (value) {\n navigator.clipboard.writeText(value.value);\n }\n else if (forNode) {\n const node = document.getElementById(forNode.value);\n navigator.clipboard.writeText((node === null || node === void 0 ? void 0 : node.textContent) || '');\n }\n else {\n // just copy inner text\n navigator.clipboard.writeText(this.element.textContent || '');\n }\n }\n}\n"],"names":["EventListener","constructor","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","event","extendedEvent","stopImmediatePropagation","Object","assign","immediatePropagationStopped","call","extendEvent","bindings","Array","from","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","handleError","error","message","detail","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","get","createEventListener","set","parts","keys","key","push","join","descriptorPattern","parseEventTarget","eventTargetName","window","document","camelize","value","replace","_","char","toUpperCase","capitalize","charAt","slice","dasherize","toLowerCase","defaultEventNames","a","e","button","form","details","input","getAttribute","select","textarea","Error","typecast","JSON","parse","o_O","Binding","context","action","identifier","willBeInvokedByEvent","invokeWithEvent","method","controller","methodName","target","currentTarget","params","actionEvent","logDebugActivity","element","Element","contains","scope","containsElement","ElementObserver","delegate","mutationObserverInit","attributes","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","callback","takeRecords","matches","matchElementsInTree","has","removeElement","addElement","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","selector","hasAttribute","match","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","name","fetch","Multimap","valuesByKey","size","prune","del","hasKey","hasValue","some","getValuesForKey","getKeysForValue","filter","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","token","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","length","Math","max","zip","findIndex","previousToken","currentToken","content","tokenString","trim","split","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","descriptor","tagName","getDefaultEventNameForElement","static","descriptorString","options","test","parseActionDescriptorString","toString","eventNameSuffix","getParamsFromEventTargetAttributes","pattern","RegExp","forToken","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","undefined","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","Context","module","functionName","controllerConstructor","bindingObserver","dispatcher","valueObserver","targetObserver","initialize","parentElement","invokeControllerMethod","args","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","getPrototypeOf","reverse","bless","properties","shadowConstructor","extend","shadowProperties","prototype","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","object","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","arguments","create","setPrototypeOf","b","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","contexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","find","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","Scope","classes","closest","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","modules","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","Application","documentElement","console","debug","logFormattedMessage","router","async","Promise","resolve","readyState","register","shouldLoad","load","head","rest","unload","controllers","getControllerForElementAndIdentifier","onerror","groupCollapsed","log","groupEnd","parseValueDefinitionPair","typeDefinition","typeFromObject","typeObject","parseValueTypeConstant","defaultValueType","parseValueTypeDefault","default","parseValueTypeObject","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","array","boolean","number","string","TypeError","writeJSON","stringify","Controller","dispatch","prefix","bubbles","cancelable","CustomEvent","dispatchEvent","blessings","classDefinition","targetDefinition","valueDefinitionPairs","propertyDescriptorMap","result","valueDefinitionPair","valueDescriptor","read","write","propertiesForValueDefinitionPair","copy","getNamedItem","forNode","navigator","clipboard","writeText","getElementById","textContent"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
@@ -0,0 +1,14 @@
1
+ import {Application} from '@hotwired/stimulus'
2
+
3
+ import ClipboardCopyComponent from './clipboard_copy_component'
4
+
5
+ // import './clipboard_copy_component'
6
+ // import './tab_container_component'
7
+ // import './time_ago_component'
8
+ // import './local_time'
9
+ // import './image_crop'
10
+ // import './dropdown'
11
+ // import './alpha/tool-tip-element'
12
+
13
+ const application = Application.start()
14
+ application.register('clipboard_copy_component', ClipboardCopyComponent)
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ariadne
4
+ # Use `BaseButton` to render an unstyled `<button>` tag that can be customized.
5
+ class BaseButton < Ariadne::Component
6
+ DEFAULT_TAG = :button
7
+ TAG_OPTIONS = [DEFAULT_TAG, :a, :summary].freeze
8
+
9
+ DEFAULT_TYPE = :button
10
+ TYPE_OPTIONS = [DEFAULT_TYPE, :reset, :submit].freeze
11
+
12
+ SIZE_CLASS_MAPPINGS = {
13
+ xs: "inline-flex items-center px-2.5 py-1.5 text-xs font-medium rounded",
14
+ s: "inline-flex items-center px-3 py-2 text-sm leading-4 font-medium rounded-m",
15
+ m: "inline-flex items-center px-4 py-2 text-sm font-medium rounded-md",
16
+ l: "inline-flex items-center px-4 py-2 text-base font-medium rounded-md",
17
+ xl: "inline-flex items-center px-6 py-3 text-base font-medium rounded-md",
18
+ }.freeze
19
+ VALID_SIZES = SIZE_CLASS_MAPPINGS.keys.freeze
20
+
21
+ DEFAULT_CLASSES = "inline-flex items-center px-4 py-2 text-sm border border-gray-300 shadow-sm text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
22
+
23
+ DEFAULT_SIZE = :m
24
+
25
+ # @example Setting the size
26
+ # <%= render(Ariadne::BaseButton.new(size: :xs)) { "I am an extra small button!" } %>
27
+ # <%= render(Ariadne::BaseButton.new(size: :s)) { "I am a small button!" } %>
28
+ # <%= render(Ariadne::BaseButton.new(size: :m)) { "I am a medium button!" } %>
29
+ # <%= render(Ariadne::BaseButton.new(size: :l)) { "I am a large button!" } %>
30
+ # <%= render(Ariadne::BaseButton.new(size: :xl)) { "I am an extra large button!" } %>
31
+ #
32
+ # @param tag [Symbol] <%= one_of(Ariadne::BaseButton::TAG_OPTIONS) %>
33
+ # @param type [Symbol] <%= one_of(Ariadne::BaseButton::TYPE_OPTIONS) %>
34
+ # @param size [Symbol] <%= one_of(Ariadne::BaseButton::VALID_SIZES) %>
35
+ # @param classes [String] <%= link_to_classes_docs %>
36
+ # @param attributes [Hash] <%= link_to_attributes_docs %>
37
+ def initialize(
38
+ tag: DEFAULT_TAG,
39
+ type: DEFAULT_TYPE,
40
+ size: DEFAULT_SIZE,
41
+ classes: "",
42
+ attributes: {}
43
+ )
44
+ @attributes = attributes
45
+ @tag = fetch_or_raise(TAG_OPTIONS, tag)
46
+ @size = fetch_or_raise(VALID_SIZES, size)
47
+
48
+ @attributes[:type] = fetch_or_raise(TYPE_OPTIONS, type) if button?
49
+ @classes = class_names(DEFAULT_CLASSES, SIZE_CLASS_MAPPINGS[@size], classes)
50
+ end
51
+
52
+ def call
53
+ render(Ariadne::BaseComponent.new(tag: @tag, classes: @classes, attributes: @attributes)) { content }
54
+ end
55
+
56
+ private def button?
57
+ @tag == :button
58
+ end
59
+ end
60
+ end