From 21be36d84a3f9243afb44647b31f6c9761344e6f Mon Sep 17 00:00:00 2001 From: Julian Rubisch Date: Tue, 15 Dec 2020 15:50:28 +0100 Subject: [PATCH] Dropdown stimulus values (#51) * Require stimulus 2 as peerDependency * Introduce openValue instead of this.hidden * Fix callback guard * Use valueChangeListener to switch state * Use modified behavior in docs/index.html * added @babel/plugin-transform-runtime and promise.resolve to resolve promises * added fallback so @babel/plugin-transform-runtime is only set in NODE_ENV=test * remove .babelrc as its now redundant Co-authored-by: William Kennedy --- .babelrc | 3 --- __tests__/dropdown_test.js | 7 ++++-- babel.config.js | 10 ++++++++ dist/tailwindcss-stimulus-components.js | 2 +- dist/tailwindcss-stimulus-components.js.map | 2 +- dist/tailwindcss-stimulus-components.m.js | 2 +- dist/tailwindcss-stimulus-components.m.js.map | 2 +- .../tailwindcss-stimulus-components.modern.js | 2 +- ...lwindcss-stimulus-components.modern.js.map | 2 +- dist/tailwindcss-stimulus-components.umd.js | 2 +- ...tailwindcss-stimulus-components.umd.js.map | 2 +- docs/index.html | 4 +++- package.json | 5 ++-- src/dropdown.js | 23 ++++++++++--------- yarn.lock | 11 ++++++++- 15 files changed, 51 insertions(+), 28 deletions(-) delete mode 100644 .babelrc create mode 100644 babel.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index bf55bf3..0000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ "presets": ["@babel/env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/__tests__/dropdown_test.js b/__tests__/dropdown_test.js index 4c781dd..bea4c04 100644 --- a/__tests__/dropdown_test.js +++ b/__tests__/dropdown_test.js @@ -11,6 +11,7 @@ describe("DropdownController", () => { data-dropdown-active-target='#active_target' data-controller="dropdown" data-action="click->dropdown#toggle click@window->dropdown#hide" data-dropdown-active-target="#dropdown-button" + data-dropdown-open-value="false" data-dropdown-active-class="bg-teal-600" data-dropdown-invisible-class="opacity-0 scale-95" data-dropdown-visible-class="opacity-100 scale-100" @@ -32,11 +33,13 @@ describe("DropdownController", () => { application.register("dropdown", Dropdown); }); - it('applies visible class to target ', () => { + it('applies visible class to target ', async () => { const target = document.querySelector('[data-dropdown-target="menu"]'); const action = document.querySelector('[data-action]'); action.click() - jest.runAllTimers() + expect(setTimeout).toHaveBeenCalledTimes(1); + await Promise.resolve(); + jest.runOnlyPendingTimers(); expect(target.className).toMatch('opacity-100 scale-100') }) }); diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..d6e18ae --- /dev/null +++ b/babel.config.js @@ -0,0 +1,10 @@ +module.exports = + process.env.NODE_ENV === 'test' + ? { + "presets": ["@babel/env"], + "plugins": [ + "@babel/plugin-proposal-class-properties", + "@babel/plugin-transform-runtime" + ] + } + : {} diff --git a/dist/tailwindcss-stimulus-components.js b/dist/tailwindcss-stimulus-components.js index 20f642a..144845c 100644 --- a/dist/tailwindcss-stimulus-components.js +++ b/dist/tailwindcss-stimulus-components.js @@ -1,2 +1,2 @@ -var t=require("stimulus");function e(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(t.Controller);r.targets=["container"];var l=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var n=e.prototype;return n.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},n.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},n.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},s(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(t.Controller);l.targets=["tab","panel"];var c=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(t.Controller);c.targets=["toggleable"];var u=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(t.Controller);u.targets=["content"];var h=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(o);h.targets=["menu","overlay"],exports.Alert=n,exports.Autosave=a,exports.Dropdown=o,exports.Modal=r,exports.Popover=u,exports.Slideover=h,exports.Tabs=l,exports.Toggle=c; +var t=require("stimulus");function e(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(t.Controller);r.targets=["container"];var l=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var n=e.prototype;return n.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},n.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},n.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},s(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(t.Controller);l.targets=["tab","panel"];var c=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(t.Controller);c.targets=["toggleable"];var u=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(t.Controller);u.targets=["content"];var h=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(o);h.targets=["menu","overlay"],exports.Alert=n,exports.Autosave=a,exports.Dropdown=o,exports.Modal=r,exports.Popover=u,exports.Slideover=h,exports.Tabs=l,exports.Toggle=c; //# sourceMappingURL=tailwindcss-stimulus-components.js.map diff --git a/dist/tailwindcss-stimulus-components.js.map b/dist/tailwindcss-stimulus-components.js.map index 0ce190d..546f843 100644 --- a/dist/tailwindcss-stimulus-components.js.map +++ b/dist/tailwindcss-stimulus-components.js.map @@ -1 +1 @@ -{"version":3,"file":"tailwindcss-stimulus-components.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n if (this.hidden) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (cb) cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (cb) cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && !this.hidden) {\n this._hide()\n }\n }\n\n get hidden() {\n return this.menuTarget.classList.contains(this.toggleClass)\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","hidden","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","open","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tailwindcss-stimulus-components.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n static values = { open: Boolean }\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n this.openValue = !this.openValue\n }\n\n openValueChanged() {\n if (this.openValue) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (typeof cb == 'function') cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (typeof cb == 'function') cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && this.openValue) {\n this.openValue = false\n }\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","openValue","openValueChanged","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","values","open","Boolean","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"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"} \ No newline at end of file diff --git a/dist/tailwindcss-stimulus-components.m.js b/dist/tailwindcss-stimulus-components.m.js index 7ddb757..a6266f4 100644 --- a/dist/tailwindcss-stimulus-components.m.js +++ b/dist/tailwindcss-stimulus-components.m.js @@ -1,2 +1,2 @@ -import{Controller as t}from"stimulus";function e(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(t);r.targets=["container"];var l=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var n=e.prototype;return n.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},n.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},n.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},s(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(t);l.targets=["tab","panel"];var c=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(t);c.targets=["toggleable"];var u=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(t);u.targets=["content"];var h=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(o);h.targets=["menu","overlay"];export{n as Alert,a as Autosave,o as Dropdown,r as Modal,u as Popover,h as Slideover,l as Tabs,c as Toggle}; +import{Controller as t}from"stimulus";function e(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(t);r.targets=["container"];var l=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var n=e.prototype;return n.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},n.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},n.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},s(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(t);l.targets=["tab","panel"];var c=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(t);c.targets=["toggleable"];var u=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(t);u.targets=["content"];var h=function(t){function e(){return t.apply(this,arguments)||this}i(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(o);h.targets=["menu","overlay"];export{n as Alert,a as Autosave,o as Dropdown,r as Modal,u as Popover,h as Slideover,l as Tabs,c as Toggle}; //# sourceMappingURL=tailwindcss-stimulus-components.m.js.map diff --git a/dist/tailwindcss-stimulus-components.m.js.map b/dist/tailwindcss-stimulus-components.m.js.map index f4f3045..f479de4 100644 --- a/dist/tailwindcss-stimulus-components.m.js.map +++ b/dist/tailwindcss-stimulus-components.m.js.map @@ -1 +1 @@ -{"version":3,"file":"tailwindcss-stimulus-components.m.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n if (this.hidden) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (cb) cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (cb) cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && !this.hidden) {\n this._hide()\n }\n }\n\n get hidden() {\n return this.menuTarget.classList.contains(this.toggleClass)\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","hidden","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","open","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tailwindcss-stimulus-components.m.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n static values = { open: Boolean }\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n this.openValue = !this.openValue\n }\n\n openValueChanged() {\n if (this.openValue) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (typeof cb == 'function') cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (typeof cb == 'function') cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && this.openValue) {\n this.openValue = false\n }\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","openValue","openValueChanged","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","values","open","Boolean","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"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"} \ No newline at end of file diff --git a/dist/tailwindcss-stimulus-components.modern.js b/dist/tailwindcss-stimulus-components.modern.js index e7fd0ca..f85cdf2 100644 --- a/dist/tailwindcss-stimulus-components.modern.js +++ b/dist/tailwindcss-stimulus-components.modern.js @@ -1,2 +1,2 @@ -import{Controller as t}from"stimulus";class s extends t{initialize(){this.hide()}connect(){setTimeout(()=>{this.show()},200)}close(){this.hide(),setTimeout(()=>{this.element.remove()},1100)}show(){this.element.setAttribute("style","transition: 1s; transform:translate(0, 0);")}hide(){this.element.setAttribute("style","transition: 1s; transform:translate(400px, 0);")}}class e extends t{connect(){this.timeout=null,this.duration=this.data.get("duration")||1e3}save(){clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.statusTarget.textContent="Saving...",Rails.fire(this.formTarget,"submit")},this.duration)}success(){this.setStatus("Saved!")}error(){this.setStatus("Unable to save!")}setStatus(t){this.statusTarget.textContent=t,this.timeout=setTimeout(()=>{this.statusTarget.textContent=""},2e3)}}e.targets=["form","status"];class i extends t{connect(){this.toggleClass=this.data.get("class")||"hidden",this.visibleClass=this.data.get("visibleClass")||null,this.invisibleClass=this.data.get("invisibleClass")||null,this.activeClass=this.data.get("activeClass")||null,this.enteringClass=this.data.get("enteringClass")||null,this.leavingClass=this.data.get("leavingClass")||null}toggle(){this.hidden?this._show():this._hide()}_show(t){this.menuTarget.classList.remove(this.toggleClass),this._enteringClassList[0].forEach((t=>{this.menuTarget.classList.add(t)}).bind(this)),setTimeout((()=>{this._activeClassList[0].forEach(t=>{this.activeTarget.classList.add(t)}),this._invisibleClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),this._visibleClassList[0].forEach(t=>{this.menuTarget.classList.add(t)}),setTimeout((()=>{this._enteringClassList[0].forEach(t=>this.menuTarget.classList.remove(t))}).bind(this),this.enterTimeout[0]),t&&t()}).bind(this))}_hide(t){setTimeout((()=>{this._invisibleClassList[0].forEach(t=>this.menuTarget.classList.add(t)),this._visibleClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),this._activeClassList[0].forEach(t=>this.activeTarget.classList.remove(t)),this._leavingClassList[0].forEach(t=>this.menuTarget.classList.add(t)),setTimeout((()=>{this._leavingClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),t&&t(),this.menuTarget.classList.add(this.toggleClass)}).bind(this),this.leaveTimeout[0])}).bind(this))}hide(t){!1!==this.element.contains(t.target)||this.hidden||this._hide()}get hidden(){return this.menuTarget.classList.contains(this.toggleClass)}get activeTarget(){return this.data.has("activeTarget")?document.querySelector(this.data.get("activeTarget")):this.element}get _activeClassList(){return this.activeClass?this.activeClass.split(",").map(t=>t.split(" ")):[[],[]]}get _visibleClassList(){return this.visibleClass?this.visibleClass.split(",").map(t=>t.split(" ")):[[],[]]}get _invisibleClassList(){return this.invisibleClass?this.invisibleClass.split(",").map(t=>t.split(" ")):[[],[]]}get _enteringClassList(){return this.enteringClass?this.enteringClass.split(",").map(t=>t.split(" ")):[[],[]]}get _leavingClassList(){return this.leavingClass?this.leavingClass.split(",").map(t=>t.split(" ")):[[],[]]}get enterTimeout(){return(this.data.get("enterTimeout")||"0,0").split(",").map(t=>parseInt(t))}get leaveTimeout(){return(this.data.get("leaveTimeout")||"0,0").split(",").map(t=>parseInt(t))}}i.targets=["menu"];class a extends t{connect(){this.toggleClass=this.data.get("class")||"hidden",this.backgroundHtml=this.data.get("backgroundHtml")||this._backgroundHTML(),this.backgroundId=this.data.get("backgroundId")||"modal-background",this.allowBackgroundClose="true"===(this.data.get("allowBackgroundClose")||"true"),this.preventDefaultActionOpening="true"===(this.data.get("preventDefaultActionOpening")||"true"),this.preventDefaultActionClosing="true"===(this.data.get("preventDefaultActionClosing")||"true")}disconnect(){this.close()}open(t){this.preventDefaultActionOpening&&t.preventDefault(),t.target.blur(),this.lockScroll(),this.containerTarget.classList.remove(this.toggleClass),this.data.get("disable-backdrop")||(document.body.insertAdjacentHTML("beforeend",this.backgroundHtml),this.background=document.querySelector("#"+this.backgroundId))}close(t){t&&this.preventDefaultActionClosing&&t.preventDefault(),this.unlockScroll(),this.containerTarget.classList.add(this.toggleClass),this.background&&this.background.remove()}closeBackground(t){this.allowBackgroundClose&&t.target===this.containerTarget&&this.close(t)}closeWithKeyboard(t){27!==t.keyCode||this.containerTarget.classList.contains(this.toggleClass)||this.close(t)}_backgroundHTML(){return''}lockScroll(){const t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top=`-${this.scrollPosition}px`}unlockScroll(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null}saveScrollPosition(){this.scrollPosition=window.pageYOffset||document.body.scrollTop}restoreScrollPosition(){document.documentElement.scrollTop=this.scrollPosition}}a.targets=["container"];class l extends t{connect(){this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(t=>t.id===this.anchor)),this.showTab()}change(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(s=>s.id==t.currentTarget.dataset.id):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))}showTab(){this.tabTargets.forEach((t,s)=>{const e=this.panelTargets[s];s===this.index?(e.classList.remove("hidden"),t.classList.remove(...this.inactiveTabClasses),t.classList.add(...this.activeTabClasses),t.id&&(location.hash=t.id)):(e.classList.add("hidden"),t.classList.remove(...this.activeTabClasses),t.classList.add(...this.inactiveTabClasses))})}get index(){return parseInt(this.data.get("index")||0)}set index(t){this.data.set("index",t>=0?t:0),this.showTab()}get anchor(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}l.targets=["tab","panel"];class n extends t{connect(){this.toggleClass=this.data.get("class")||"hidden"}toggle(t){t.preventDefault(),this.toggleableTargets.forEach(t=>{t.classList.toggle(this.toggleClass)})}}n.targets=["toggleable"];class o extends t{initialize(){this.contentTarget.setAttribute("style",`transform:translate(${this.data.get("translateX")}, ${this.data.get("translateY")});`)}mouseOver(){this.contentTarget.classList.remove("hidden")}mouseOut(){this.contentTarget.classList.add("hidden")}}o.targets=["content"];class r extends i{_show(){this.overlayTarget.classList.remove(this.toggleClass),super._show((()=>{this._activeClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),this._invisibleClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._visibleClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),setTimeout((()=>{this._enteringClassList[1].forEach(t=>this.overlayTarget.classList.remove(t))}).bind(this),this.enterTimeout[1])}).bind(this))}_hide(){this._leavingClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),super._hide((()=>{setTimeout((()=>{this._visibleClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._invisibleClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),this._activeClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._leavingClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this.overlayTarget.classList.add(this.toggleClass)}).bind(this),this.leaveTimeout[1])}).bind(this))}}r.targets=["menu","overlay"];export{s as Alert,e as Autosave,i as Dropdown,a as Modal,o as Popover,r as Slideover,l as Tabs,n as Toggle}; +import{Controller as t}from"stimulus";class s extends t{initialize(){this.hide()}connect(){setTimeout(()=>{this.show()},200)}close(){this.hide(),setTimeout(()=>{this.element.remove()},1100)}show(){this.element.setAttribute("style","transition: 1s; transform:translate(0, 0);")}hide(){this.element.setAttribute("style","transition: 1s; transform:translate(400px, 0);")}}class e extends t{connect(){this.timeout=null,this.duration=this.data.get("duration")||1e3}save(){clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.statusTarget.textContent="Saving...",Rails.fire(this.formTarget,"submit")},this.duration)}success(){this.setStatus("Saved!")}error(){this.setStatus("Unable to save!")}setStatus(t){this.statusTarget.textContent=t,this.timeout=setTimeout(()=>{this.statusTarget.textContent=""},2e3)}}e.targets=["form","status"];class i extends t{connect(){this.toggleClass=this.data.get("class")||"hidden",this.visibleClass=this.data.get("visibleClass")||null,this.invisibleClass=this.data.get("invisibleClass")||null,this.activeClass=this.data.get("activeClass")||null,this.enteringClass=this.data.get("enteringClass")||null,this.leavingClass=this.data.get("leavingClass")||null}toggle(){this.openValue=!this.openValue}openValueChanged(){this.openValue?this._show():this._hide()}_show(t){this.menuTarget.classList.remove(this.toggleClass),this._enteringClassList[0].forEach((t=>{this.menuTarget.classList.add(t)}).bind(this)),setTimeout((()=>{this._activeClassList[0].forEach(t=>{this.activeTarget.classList.add(t)}),this._invisibleClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),this._visibleClassList[0].forEach(t=>{this.menuTarget.classList.add(t)}),setTimeout((()=>{this._enteringClassList[0].forEach(t=>this.menuTarget.classList.remove(t))}).bind(this),this.enterTimeout[0]),"function"==typeof t&&t()}).bind(this))}_hide(t){setTimeout((()=>{this._invisibleClassList[0].forEach(t=>this.menuTarget.classList.add(t)),this._visibleClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),this._activeClassList[0].forEach(t=>this.activeTarget.classList.remove(t)),this._leavingClassList[0].forEach(t=>this.menuTarget.classList.add(t)),setTimeout((()=>{this._leavingClassList[0].forEach(t=>this.menuTarget.classList.remove(t)),"function"==typeof t&&t(),this.menuTarget.classList.add(this.toggleClass)}).bind(this),this.leaveTimeout[0])}).bind(this))}hide(t){!1===this.element.contains(t.target)&&this.openValue&&(this.openValue=!1)}get activeTarget(){return this.data.has("activeTarget")?document.querySelector(this.data.get("activeTarget")):this.element}get _activeClassList(){return this.activeClass?this.activeClass.split(",").map(t=>t.split(" ")):[[],[]]}get _visibleClassList(){return this.visibleClass?this.visibleClass.split(",").map(t=>t.split(" ")):[[],[]]}get _invisibleClassList(){return this.invisibleClass?this.invisibleClass.split(",").map(t=>t.split(" ")):[[],[]]}get _enteringClassList(){return this.enteringClass?this.enteringClass.split(",").map(t=>t.split(" ")):[[],[]]}get _leavingClassList(){return this.leavingClass?this.leavingClass.split(",").map(t=>t.split(" ")):[[],[]]}get enterTimeout(){return(this.data.get("enterTimeout")||"0,0").split(",").map(t=>parseInt(t))}get leaveTimeout(){return(this.data.get("leaveTimeout")||"0,0").split(",").map(t=>parseInt(t))}}i.targets=["menu"],i.values={open:Boolean};class a extends t{connect(){this.toggleClass=this.data.get("class")||"hidden",this.backgroundHtml=this.data.get("backgroundHtml")||this._backgroundHTML(),this.backgroundId=this.data.get("backgroundId")||"modal-background",this.allowBackgroundClose="true"===(this.data.get("allowBackgroundClose")||"true"),this.preventDefaultActionOpening="true"===(this.data.get("preventDefaultActionOpening")||"true"),this.preventDefaultActionClosing="true"===(this.data.get("preventDefaultActionClosing")||"true")}disconnect(){this.close()}open(t){this.preventDefaultActionOpening&&t.preventDefault(),t.target.blur(),this.lockScroll(),this.containerTarget.classList.remove(this.toggleClass),this.data.get("disable-backdrop")||(document.body.insertAdjacentHTML("beforeend",this.backgroundHtml),this.background=document.querySelector("#"+this.backgroundId))}close(t){t&&this.preventDefaultActionClosing&&t.preventDefault(),this.unlockScroll(),this.containerTarget.classList.add(this.toggleClass),this.background&&this.background.remove()}closeBackground(t){this.allowBackgroundClose&&t.target===this.containerTarget&&this.close(t)}closeWithKeyboard(t){27!==t.keyCode||this.containerTarget.classList.contains(this.toggleClass)||this.close(t)}_backgroundHTML(){return''}lockScroll(){const t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top=`-${this.scrollPosition}px`}unlockScroll(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null}saveScrollPosition(){this.scrollPosition=window.pageYOffset||document.body.scrollTop}restoreScrollPosition(){document.documentElement.scrollTop=this.scrollPosition}}a.targets=["container"];class l extends t{connect(){this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(t=>t.id===this.anchor)),this.showTab()}change(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(s=>s.id==t.currentTarget.dataset.id):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))}showTab(){this.tabTargets.forEach((t,s)=>{const e=this.panelTargets[s];s===this.index?(e.classList.remove("hidden"),t.classList.remove(...this.inactiveTabClasses),t.classList.add(...this.activeTabClasses),t.id&&(location.hash=t.id)):(e.classList.add("hidden"),t.classList.remove(...this.activeTabClasses),t.classList.add(...this.inactiveTabClasses))})}get index(){return parseInt(this.data.get("index")||0)}set index(t){this.data.set("index",t>=0?t:0),this.showTab()}get anchor(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}l.targets=["tab","panel"];class n extends t{connect(){this.toggleClass=this.data.get("class")||"hidden"}toggle(t){t.preventDefault(),this.toggleableTargets.forEach(t=>{t.classList.toggle(this.toggleClass)})}}n.targets=["toggleable"];class o extends t{initialize(){this.contentTarget.setAttribute("style",`transform:translate(${this.data.get("translateX")}, ${this.data.get("translateY")});`)}mouseOver(){this.contentTarget.classList.remove("hidden")}mouseOut(){this.contentTarget.classList.add("hidden")}}o.targets=["content"];class r extends i{_show(){this.overlayTarget.classList.remove(this.toggleClass),super._show((()=>{this._activeClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),this._invisibleClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._visibleClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),setTimeout((()=>{this._enteringClassList[1].forEach(t=>this.overlayTarget.classList.remove(t))}).bind(this),this.enterTimeout[1])}).bind(this))}_hide(){this._leavingClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),super._hide((()=>{setTimeout((()=>{this._visibleClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._invisibleClassList[1].forEach(t=>this.overlayTarget.classList.add(t)),this._activeClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this._leavingClassList[1].forEach(t=>this.overlayTarget.classList.remove(t)),this.overlayTarget.classList.add(this.toggleClass)}).bind(this),this.leaveTimeout[1])}).bind(this))}}r.targets=["menu","overlay"];export{s as Alert,e as Autosave,i as Dropdown,a as Modal,o as Popover,r as Slideover,l as Tabs,n as Toggle}; //# sourceMappingURL=tailwindcss-stimulus-components.modern.js.map diff --git a/dist/tailwindcss-stimulus-components.modern.js.map b/dist/tailwindcss-stimulus-components.modern.js.map index 4012265..9dfb9e9 100644 --- a/dist/tailwindcss-stimulus-components.modern.js.map +++ b/dist/tailwindcss-stimulus-components.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"tailwindcss-stimulus-components.modern.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n if (this.hidden) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (cb) cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (cb) cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && !this.hidden) {\n this._hide()\n }\n }\n\n get hidden() {\n return this.menuTarget.classList.contains(this.toggleClass)\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["Controller","initialize","this","hide","connect","setTimeout","show","close","element","remove","setAttribute","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","hidden","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","open","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","Dropdown","overlayTarget","super"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tailwindcss-stimulus-components.modern.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n static values = { open: Boolean }\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n this.openValue = !this.openValue\n }\n\n openValueChanged() {\n if (this.openValue) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (typeof cb == 'function') cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (typeof cb == 'function') cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && this.openValue) {\n this.openValue = false\n }\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["Controller","initialize","this","hide","connect","setTimeout","show","close","element","remove","setAttribute","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","openValue","openValueChanged","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","values","open","Boolean","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","Dropdown","overlayTarget","super"],"mappings":"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"} \ No newline at end of file diff --git a/dist/tailwindcss-stimulus-components.umd.js b/dist/tailwindcss-stimulus-components.umd.js index c8aff03..97bd47f 100644 --- a/dist/tailwindcss-stimulus-components.umd.js +++ b/dist/tailwindcss-stimulus-components.umd.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("stimulus")):"function"==typeof define&&define.amd?define(["exports","stimulus"],e):e((t=t||self).TailwindcssStimulusComponents={},t.Stimulus)}(this,function(t,e){function s(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(e.Controller);l.targets=["container"];var c=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},s.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},s.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},i(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(e.Controller);c.targets=["tab","panel"];var u=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(e.Controller);u.targets=["toggleable"];var h=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(e.Controller);h.targets=["content"];var d=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(r);d.targets=["menu","overlay"],t.Alert=a,t.Autosave=o,t.Dropdown=r,t.Modal=l,t.Popover=h,t.Slideover=d,t.Tabs=c,t.Toggle=u}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("stimulus")):"function"==typeof define&&define.amd?define(["exports","stimulus"],e):e((t=t||self).TailwindcssStimulusComponents={},t.Stimulus)}(this,function(t,e){function s(t,e){for(var s=0;s'},s.lockScroll=function(){var t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=t+"px",this.saveScrollPosition(),document.body.classList.add("fixed","inset-x-0","overflow-hidden"),document.body.style.top="-"+this.scrollPosition+"px"},s.unlockScroll=function(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollPosition(),document.body.style.top=null},s.saveScrollPosition=function(){this.scrollPosition=window.pageYOffset||document.body.scrollTop},s.restoreScrollPosition=function(){document.documentElement.scrollTop=this.scrollPosition},e}(e.Controller);l.targets=["container"];var c=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.connect=function(){var t=this;this.activeTabClasses=(this.data.get("activeTab")||"active").split(" "),this.inactiveTabClasses=(this.data.get("inactiveTab")||"inactive").split(" "),this.anchor&&(this.index=this.tabTargets.findIndex(function(e){return e.id===t.anchor})),this.showTab()},s.change=function(t){t.preventDefault(),this.index=t.currentTarget.dataset.index?t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.tabTargets.findIndex(function(e){return e.id==t.currentTarget.dataset.id}):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))},s.showTab=function(){var t=this;this.tabTargets.forEach(function(e,s){var i,n,a,o,r=t.panelTargets[s];s===t.index?(r.classList.remove("hidden"),(i=e.classList).remove.apply(i,t.inactiveTabClasses),(n=e.classList).add.apply(n,t.activeTabClasses),e.id&&(location.hash=e.id)):(r.classList.add("hidden"),(a=e.classList).remove.apply(a,t.activeTabClasses),(o=e.classList).add.apply(o,t.inactiveTabClasses))})},i(e,[{key:"index",get:function(){return parseInt(this.data.get("index")||0)},set:function(t){this.data.set("index",t>=0?t:0),this.showTab()}},{key:"anchor",get:function(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}}]),e}(e.Controller);c.targets=["tab","panel"];var u=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.connect=function(){this.toggleClass=this.data.get("class")||"hidden"},s.toggle=function(t){var e=this;t.preventDefault(),this.toggleableTargets.forEach(function(t){t.classList.toggle(e.toggleClass)})},e}(e.Controller);u.targets=["toggleable"];var h=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s.initialize=function(){this.contentTarget.setAttribute("style","transform:translate("+this.data.get("translateX")+", "+this.data.get("translateY")+");")},s.mouseOver=function(){this.contentTarget.classList.remove("hidden")},s.mouseOut=function(){this.contentTarget.classList.add("hidden")},e}(e.Controller);h.targets=["content"];var d=function(t){function e(){return t.apply(this,arguments)||this}n(e,t);var s=e.prototype;return s._show=function(){var e=this;this.overlayTarget.classList.remove(this.toggleClass),t.prototype._show.call(this,function(){e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),setTimeout(function(){e._enteringClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)})}.bind(e),e.enterTimeout[1])}.bind(this))},s._hide=function(){var e=this;this._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),t.prototype._hide.call(this,function(){setTimeout(function(){e._visibleClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._invisibleClassList[1].forEach(function(t){return e.overlayTarget.classList.add(t)}),e._activeClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e._leavingClassList[1].forEach(function(t){return e.overlayTarget.classList.remove(t)}),e.overlayTarget.classList.add(e.toggleClass)}.bind(e),e.leaveTimeout[1])}.bind(this))},e}(r);d.targets=["menu","overlay"],t.Alert=a,t.Autosave=o,t.Dropdown=r,t.Modal=l,t.Popover=h,t.Slideover=d,t.Tabs=c,t.Toggle=u}); //# sourceMappingURL=tailwindcss-stimulus-components.umd.js.map diff --git a/dist/tailwindcss-stimulus-components.umd.js.map b/dist/tailwindcss-stimulus-components.umd.js.map index a64ba16..14c2fed 100644 --- a/dist/tailwindcss-stimulus-components.umd.js.map +++ b/dist/tailwindcss-stimulus-components.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"tailwindcss-stimulus-components.umd.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n if (this.hidden) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (cb) cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (cb) cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && !this.hidden) {\n this._hide()\n }\n }\n\n get hidden() {\n return this.menuTarget.classList.contains(this.toggleClass)\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || \"0,0\"\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","hidden","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","open","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"6pBAgCEA,WAAA,WACEC,KAAKC,UAGPC,QAAA,sBACEC,WAAW,WACTC,EAAKC,QACJ,QAGLC,MAAA,sBACEN,KAAKC,OACLE,WAAW,WACTI,EAAKC,QAAQC,UACZ,SAILJ,KAAA,WACEL,KAAKQ,QAAQE,aACX,QACA,iDAIJT,KAAA,WACED,KAAKQ,QAAQE,aACX,QACA,sDA9BuBC,gHCzB3BT,QAAA,WACEF,KAAKY,QAAU,KACfZ,KAAKa,SAAWb,KAAKc,KAAKC,IAAI,aAAe,OAG/CC,KAAA,sBACEC,aAAajB,KAAKY,SAElBZ,KAAKY,QAAUT,WAAW,WACxBC,EAAKc,aAAaC,YAAc,YAChCC,MAAMC,KAAKjB,EAAKkB,WAAY,WAC3BtB,KAAKa,aAGVU,QAAA,WACEvB,KAAKwB,UAAU,aAGjBC,MAAA,WACEzB,KAAKwB,UAAU,sBAGjBA,UAAA,SAAUE,cACR1B,KAAKkB,aAAaC,YAAcO,EAEhC1B,KAAKY,QAAUT,WAAW,WACxBI,EAAKW,aAAaC,YAAc,IAC/B,SA9BsBR,gBACpBgB,QAAU,CAAC,OAAQ,gHC4B1BzB,QAAA,WACEF,KAAK4B,YAAc5B,KAAKc,KAAKC,IAAI,UAAY,SAC7Cf,KAAK6B,aAAe7B,KAAKc,KAAKC,IAAI,iBAAmB,KACrDf,KAAK8B,eAAiB9B,KAAKc,KAAKC,IAAI,mBAAqB,KACzDf,KAAK+B,YAAc/B,KAAKc,KAAKC,IAAI,gBAAkB,KACnDf,KAAKgC,cAAgBhC,KAAKc,KAAKC,IAAI,kBAAoB,KACvDf,KAAKiC,aAAejC,KAAKc,KAAKC,IAAI,iBAAmB,QAGvDmB,OAAA,WACMlC,KAAKmC,OACPnC,KAAKoC,QAELpC,KAAKqC,WAITD,MAAA,SAAME,cACJtC,KAAKuC,WAAWC,UAAU/B,OAAOT,KAAK4B,aACtC5B,KAAKyC,mBAAmB,GAAGC,QACxB,SAAAC,GACCvC,EAAKmC,WAAWC,UAAUI,IAAID,IAC7BE,KAAK7C,OAGVG,WACG,WACCC,EAAK0C,iBAAiB,GAAGJ,QAAQ,SAAAC,GAC/BvC,EAAK2C,aAAaP,UAAUI,IAAID,KAElCvC,EAAK4C,oBAAoB,GAAGN,QAAQ,SAAAC,UAASvC,EAAKmC,WAAWC,UAAU/B,OAAOkC,KAC9EvC,EAAK6C,kBAAkB,GAAGP,QAAQ,SAAAC,GAChCvC,EAAKmC,WAAWC,UAAUI,IAAID,KAEhCxC,WACG,WACCC,EAAKqC,mBAAmB,GAAGC,QAAQ,SAAAC,UAASvC,EAAKmC,WAAWC,UAAU/B,OAAOkC,MAC5EE,KAAKzC,GACRA,EAAK8C,aAAa,IAGhBZ,GAAIA,KACPO,KAAK7C,UAIZqC,MAAA,SAAMC,cACJnC,WACG,WACCI,EAAKyC,oBAAoB,GAAGN,QAAQ,SAAAC,UAASpC,EAAKgC,WAAWC,UAAUI,IAAID,KAC3EpC,EAAK0C,kBAAkB,GAAGP,QAAQ,SAAAC,UAASpC,EAAKgC,WAAWC,UAAU/B,OAAOkC,KAC5EpC,EAAKuC,iBAAiB,GAAGJ,QAAQ,SAAAC,UAASpC,EAAKwC,aAAaP,UAAU/B,OAAOkC,KAC7EpC,EAAK4C,kBAAkB,GAAGT,QAAQ,SAAAC,UAASpC,EAAKgC,WAAWC,UAAUI,IAAID,KACzExC,WACG,WACCI,EAAK4C,kBAAkB,GAAGT,QAAQ,SAAAC,UAASpC,EAAKgC,WAAWC,UAAU/B,OAAOkC,KACxEL,GAAIA,IAER/B,EAAKgC,WAAWC,UAAUI,IAAIrC,EAAKqB,cAClCiB,KAAKtC,GACRA,EAAK6C,aAAa,KAEnBP,KAAK7C,UAIZC,KAAA,SAAKoD,IACyC,IAAxCrD,KAAKQ,QAAQ8C,SAASD,EAAME,SAAsBvD,KAAKmC,QACzDnC,KAAKqC,2CAKP,YAAYE,WAAWC,UAAUc,SAAStD,KAAK4B,kDAI/C,YAAYd,KAAK0C,IAAI,gBACjBC,SAASC,cAAc1D,KAAKc,KAAKC,IAAI,iBACrCf,KAAKQ,iDAIT,OAAQR,KAAK+B,YAET/B,KAAK+B,YAAY4B,MAAM,KAAKC,IAAI,SAAApB,UAAaA,EAAUmB,MAAM,OAD7D,CAAC,GAAI,8CAKT,OAAQ3D,KAAK6B,aAET7B,KAAK6B,aAAa8B,MAAM,KAAKC,IAAI,SAAApB,UAAaA,EAAUmB,MAAM,OAD9D,CAAC,GAAI,gDAKT,OAAQ3D,KAAK8B,eAET9B,KAAK8B,eAAe6B,MAAM,KAAKC,IAAI,SAAApB,UAAaA,EAAUmB,MAAM,OADhE,CAAC,GAAI,+CAKT,OAAQ3D,KAAKgC,cAEThC,KAAKgC,cAAc2B,MAAM,KAAKC,IAAI,SAAApB,UAAaA,EAAUmB,MAAM,OAD/D,CAAC,GAAI,8CAKT,OAAQ3D,KAAKiC,aAETjC,KAAKiC,aAAa0B,MAAM,KAAKC,IAAI,SAAApB,UAAaA,EAAUmB,MAAM,OAD9D,CAAC,GAAI,yCAMT,OADc3D,KAAKc,KAAKC,IAAI,iBAAmB,OAChC4C,MAAM,KAAKC,IAAI,SAAAC,UAAKC,SAASD,0CAK5C,OADc7D,KAAKc,KAAKC,IAAI,iBAAmB,OAChC4C,MAAM,KAAKC,IAAI,SAAAC,UAAKC,SAASD,YA1HnBlD,gBACpBgB,QAAU,CAAC,8GCKlBzB,QAAA,WAEEF,KAAK4B,YAAc5B,KAAKc,KAAKC,IAAI,UAAY,SAG7Cf,KAAK+D,eAAiB/D,KAAKc,KAAKC,IAAI,mBAAqBf,KAAKgE,kBAG9DhE,KAAKiE,aAAejE,KAAKc,KAAKC,IAAI,iBAAmB,mBAGrDf,KAAKkE,qBAA6E,UAArDlE,KAAKc,KAAKC,IAAI,yBAA2B,QAGtEf,KAAKmE,4BAA2F,UAA5DnE,KAAKc,KAAKC,IAAI,gCAAkC,QAGpFf,KAAKoE,4BAA2F,UAA5DpE,KAAKc,KAAKC,IAAI,gCAAkC,WAGtFsD,WAAA,WACErE,KAAKM,WAGPgE,KAAA,SAAKC,GACCvE,KAAKmE,6BACPI,EAAEC,iBAGJD,EAAEhB,OAAOkB,OAGTzE,KAAK0E,aAGL1E,KAAK2E,gBAAgBnC,UAAU/B,OAAOT,KAAK4B,aAGtC5B,KAAKc,KAAKC,IAAI,sBACjB0C,SAASmB,KAAKC,mBAAmB,YAAa7E,KAAK+D,gBACnD/D,KAAK8E,WAAarB,SAASC,kBAAkB1D,KAAKiE,kBAItD3D,MAAA,SAAMiE,GACAA,GAAKvE,KAAKoE,6BACZG,EAAEC,iBAIJxE,KAAK+E,eAGL/E,KAAK2E,gBAAgBnC,UAAUI,IAAI5C,KAAK4B,aAGpC5B,KAAK8E,YAAc9E,KAAK8E,WAAWrE,YAGzCuE,gBAAA,SAAgBT,GACVvE,KAAKkE,sBAAwBK,EAAEhB,SAAWvD,KAAK2E,iBACjD3E,KAAKM,MAAMiE,MAIfU,kBAAA,SAAkBV,GACE,KAAdA,EAAEW,SAAmBlF,KAAK2E,gBAAgBnC,UAAUc,SAAStD,KAAK4B,cACpE5B,KAAKM,MAAMiE,MAIfP,gBAAA,WACE,MAAO,6IAGTU,WAAA,WAGE,IAAMS,EAAiBC,OAAOC,WAAa5B,SAAS6B,gBAAgBC,YACpE9B,SAASmB,KAAKY,MAAMC,aAAkBN,OAGtCnF,KAAK0F,qBAGLjC,SAASmB,KAAKpC,UAAUI,IAAI,QAAS,YAAa,mBAGlDa,SAASmB,KAAKY,MAAMG,QAAU3F,KAAK4F,uBAGrCb,aAAA,WAEEtB,SAASmB,KAAKY,MAAMC,aAAe,KAGnChC,SAASmB,KAAKpC,UAAU/B,OAAO,QAAS,YAAa,mBAGrDT,KAAK6F,wBAGLpC,SAASmB,KAAKY,MAAMG,IAAM,QAG5BD,mBAAA,WACE1F,KAAK4F,eAAiBR,OAAOU,aAAerC,SAASmB,KAAKmB,aAG5DF,sBAAA,WACEpC,SAAS6B,gBAAgBS,UAAY/F,KAAK4F,mBAjHjBjF,gBACpBgB,QAAU,CAAC,mHC3BlBzB,QAAA,sBACEF,KAAKgG,kBAAoBhG,KAAKc,KAAKC,IAAI,cAAgB,UAAU4C,MAAM,KACvE3D,KAAKiG,oBAAsBjG,KAAKc,KAAKC,IAAI,gBAAkB,YAAY4C,MAAM,KACzE3D,KAAKkG,SAAQlG,KAAKmG,MAAQnG,KAAKoG,WAAWC,UAAU,SAACC,UAAQA,EAAIC,KAAOnG,EAAK8F,UACjFlG,KAAKwG,aAGPC,OAAA,SAAOpD,GACLA,EAAMmB,iBAIJxE,KAAKmG,MADH9C,EAAMqD,cAAcC,QAAQR,MACjB9C,EAAMqD,cAAcC,QAAQR,MAGhC9C,EAAMqD,cAAcC,QAAQJ,GACxBvG,KAAKoG,WAAWC,UAAU,SAACC,UAAQA,EAAIC,IAAMlD,EAAMqD,cAAcC,QAAQJ,KAIzEvG,KAAKoG,WAAWQ,QAAQvD,EAAMqD,eAG7CtB,OAAOyB,cAAc,IAAIC,YAAY,sBAGvCN,QAAA,sBACExG,KAAKoG,WAAW1D,QAAQ,SAAC4D,EAAKH,GAC5B,YAAMY,EAAQxG,EAAKyG,aAAab,GAE5BA,IAAU5F,EAAK4F,OACjBY,EAAMvE,UAAU/B,OAAO,aACvB6F,EAAI9D,WAAU/B,eAAUF,EAAK0F,uBAC7BK,EAAI9D,WAAUI,YAAOrC,EAAKyF,kBAItBM,EAAIC,KACNU,SAASC,KAAOZ,EAAIC,MAGtBQ,EAAMvE,UAAUI,IAAI,aACpB0D,EAAI9D,WAAU/B,eAAUF,EAAKyF,qBAC7BM,EAAI9D,WAAUI,YAAOrC,EAAK0F,yDAM9B,OAAOnC,SAAS9D,KAAKc,KAAKC,IAAI,UAAY,iBAGlCoG,GACRnH,KAAKc,KAAKsG,IAAI,QAAUD,GAAS,EAAIA,EAAQ,GAC7CnH,KAAKwG,yCAIL,OAAQ/C,SAAS4D,IAAI1D,MAAM,KAAK2D,OAAS,EAAK7D,SAAS4D,IAAI1D,MAAM,KAAK,GAAK,YA7DlDhD,gBACpBgB,QAAU,CAAC,MAAO,+GCEzBzB,QAAA,WACEF,KAAK4B,YAAc5B,KAAKc,KAAKC,IAAI,UAAY,YAG/CmB,OAAA,SAAOmB,cACLA,EAAMmB,iBAENxE,KAAKuH,kBAAkB7E,QAAQ,SAAAa,GAC7BA,EAAOf,UAAUN,OAAO9B,EAAKwB,mBAXNjB,gBACpBgB,QAAU,CAAC,oHCoBlB5B,WAAA,WACEC,KAAKwH,cAAc9G,aACjB,+BACuBV,KAAKc,KAAKC,IAAI,mBAAkBf,KAAKc,KAAKC,IAAI,uBAKzE0G,UAAA,WACEzH,KAAKwH,cAAchF,UAAU/B,OAAO,aAGtCiH,SAAA,WACE1H,KAAKwH,cAAchF,UAAUI,IAAI,cAjBRjC,gBACpBgB,QAAU,CAAC,iHCiBlBS,MAAA,sBACEpC,KAAK2H,cAAcnF,UAAU/B,OAAOT,KAAK4B,aAEzCgG,YAAMxF,gBACH,WACChC,EAAK0C,iBAAiB,GAAGJ,QAAQ,SAAAC,UAASvC,EAAKuH,cAAcnF,UAAUI,IAAID,KAC3EvC,EAAK4C,oBAAoB,GAAGN,QAAQ,SAAAC,UAASvC,EAAKuH,cAAcnF,UAAU/B,OAAOkC,KACjFvC,EAAK6C,kBAAkB,GAAGP,QAAQ,SAAAC,UAASvC,EAAKuH,cAAcnF,UAAUI,IAAID,KAC5ExC,WACG,WACCC,EAAKqC,mBAAmB,GAAGC,QAAQ,SAAAC,UAASvC,EAAKuH,cAAcnF,UAAU/B,OAAOkC,MAC/EE,KAAKzC,GACRA,EAAK8C,aAAa,KAEnBL,KAAK7C,UAIZqC,MAAA,sBACErC,KAAKmD,kBAAkB,GAAGT,QAAQ,SAAAC,UAASpC,EAAKoH,cAAcnF,UAAUI,IAAID,KAE5EiF,YAAMvF,gBACH,WACClC,WACG,WACCI,EAAK0C,kBAAkB,GAAGP,QAAQ,SAAAC,UAASpC,EAAKoH,cAAcnF,UAAU/B,OAAOkC,KAC/EpC,EAAKyC,oBAAoB,GAAGN,QAAQ,SAAAC,UAASpC,EAAKoH,cAAcnF,UAAUI,IAAID,KAC9EpC,EAAKuC,iBAAiB,GAAGJ,QAAQ,SAAAC,UAASpC,EAAKoH,cAAcnF,UAAU/B,OAAOkC,KAC9EpC,EAAK4C,kBAAkB,GAAGT,QAAQ,SAAAC,UAASpC,EAAKoH,cAAcnF,UAAU/B,OAAOkC,KAC/EpC,EAAKoH,cAAcnF,UAAUI,IAAIrC,EAAKqB,cACrCiB,KAAKtC,GACRA,EAAK6C,aAAa,KAEnBP,KAAK7C,WApCe6H,KACpBlG,QAAU,CAAC,OAAQ"} \ No newline at end of file +{"version":3,"file":"tailwindcss-stimulus-components.umd.js","sources":["../src/alert.js","../src/autosave.js","../src/dropdown.js","../src/modal.js","../src/tabs.js","../src/toggle.js","../src/popover.js","../src/slideover.js"],"sourcesContent":["// A Growl-style alert that slides into view at the top of the screen when rendered,\n// and slides back out of view when the \"X\" button is clicked/pressed.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n//
\n//
\n//
\n//
\n//

\n// Stimulus is the JS of the future!\n//

\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n initialize() {\n this.hide()\n }\n\n connect() {\n setTimeout(() => {\n this.show()\n }, 200)\n }\n\n close() {\n this.hide()\n setTimeout(() => {\n this.element.remove()\n }, 1100)\n\n }\n\n show() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(0, 0);\",\n )\n }\n\n hide() {\n this.element.setAttribute(\n 'style',\n \"transition: 1s; transform:translate(400px, 0);\",\n )\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['form', 'status']\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n }\n\n save() {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = 'Saving...'\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n\n success() {\n this.setStatus('Saved!')\n }\n\n error() {\n this.setStatus('Unable to save!')\n }\n\n setStatus(message) {\n this.statusTarget.textContent = message\n\n this.timeout = setTimeout(() => {\n this.statusTarget.textContent = ''\n }, 2000)\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
dropdown#toggle click@window->dropdown#hide\"\n// data-dropdown-active-target=\"#dropdown-button\"\n// data-dropdown-active-class=\"bg-teal-600\"\n// data-dropdown-invisible-class=\"opacity-0 scale-95\"\n// data-dropdown-visible-class=\"opacity-100 scale-100\"\n// data-dropdown-entering-class=\"ease-out duration-100\"\n// data-dropdown-enter-timeout=\"100\"\n// data-dropdown-leaving-class=\"ease-in duration-75\"\n// data-dropdown-leave-timeout=\"75\">\n//
dropdown#toggle click@window->dropdown#hide\" role=\"button\" class=\"inline-block select-none\">\n// Open Dropdown\n//
\n// \n//
\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['menu']\n static values = { open: Boolean }\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n this.visibleClass = this.data.get('visibleClass') || null\n this.invisibleClass = this.data.get('invisibleClass') || null\n this.activeClass = this.data.get('activeClass') || null\n this.enteringClass = this.data.get('enteringClass') || null\n this.leavingClass = this.data.get('leavingClass') || null\n }\n\n toggle() {\n this.openValue = !this.openValue\n }\n\n openValueChanged() {\n if (this.openValue) {\n this._show()\n } else {\n this._hide()\n }\n }\n\n _show(cb) {\n this.menuTarget.classList.remove(this.toggleClass)\n this._enteringClassList[0].forEach(\n (klass => {\n this.menuTarget.classList.add(klass)\n }).bind(this),\n )\n\n setTimeout(\n (() => {\n this._activeClassList[0].forEach(klass => {\n this.activeTarget.classList.add(klass)\n })\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._visibleClassList[0].forEach(klass => {\n this.menuTarget.classList.add(klass)\n })\n setTimeout(\n (() => {\n this._enteringClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[0],\n )\n\n if (typeof cb == 'function') cb()\n }).bind(this),\n )\n }\n\n _hide(cb) {\n setTimeout(\n (() => {\n this._invisibleClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n this._visibleClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n this._activeClassList[0].forEach(klass => this.activeTarget.classList.remove(klass))\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._leavingClassList[0].forEach(klass => this.menuTarget.classList.remove(klass))\n if (typeof cb == 'function') cb()\n\n this.menuTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[0],\n )\n }).bind(this),\n )\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false && this.openValue) {\n this.openValue = false\n }\n }\n\n get activeTarget() {\n return this.data.has('activeTarget')\n ? document.querySelector(this.data.get('activeTarget'))\n : this.element\n }\n\n get _activeClassList() {\n return !this.activeClass\n ? [[], []]\n : this.activeClass.split(',').map(classList => classList.split(' '))\n }\n\n get _visibleClassList() {\n return !this.visibleClass\n ? [[], []]\n : this.visibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _invisibleClassList() {\n return !this.invisibleClass\n ? [[], []]\n : this.invisibleClass.split(',').map(classList => classList.split(' '))\n }\n\n get _enteringClassList() {\n return !this.enteringClass\n ? [[], []]\n : this.enteringClass.split(',').map(classList => classList.split(' '))\n }\n\n get _leavingClassList() {\n return !this.leavingClass\n ? [[], []]\n : this.leavingClass.split(',').map(classList => classList.split(' '))\n }\n\n get enterTimeout() {\n let timeout = this.data.get('enterTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n\n get leaveTimeout() {\n let timeout = this.data.get('leaveTimeout') || '0,0'\n return timeout.split(',').map(t => parseInt(t))\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//
\n //modal#open\" class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded\">\n //Open Modal\n //\n\n //\n //
modal#closeBackground keyup@window->modal#closeWithKeyboard\" class=\"hidden animated fadeIn fixed inset-0 overflow-y-auto flex items-center justify-center\" style=\"z-index: 9999;\">\n //\n //
\n //\n //
\n //
\n //

Large Modal Content

\n //

This is an example modal dialog box.

\n\n //
\n //\n //
\n //
\n //
\n //
\n //
\n//
\n\nimport { Controller } from 'stimulus';\n\nexport default class extends Controller {\n static targets = ['container'];\n\n connect() {\n // The class we should toggle on the container\n this.toggleClass = this.data.get('class') || 'hidden';\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get('backgroundHtml') || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get('backgroundId') || 'modal-background';\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get('allowBackgroundClose') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when opening the modal\n this.preventDefaultActionOpening = (this.data.get('preventDefaultActionOpening') || 'true') === 'true';\n\n // Prevent the default action of the clicked element (following a link for example) when closing the modal\n this.preventDefaultActionClosing = (this.data.get('preventDefaultActionClosing') || 'true') === 'true';\n }\n\n disconnect() {\n this.close();\n }\n\n open(e) {\n if (this.preventDefaultActionOpening) {\n e.preventDefault();\n }\n\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML('beforeend', this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e && this.preventDefaultActionClosing) {\n e.preventDefault();\n }\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove('fixed', 'inset-x-0', 'overflow-hidden');\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['tab', 'panel']\n\n connect() {\n this.activeTabClasses = (this.data.get('activeTab') || 'active').split(' ')\n this.inactiveTabClasses = (this.data.get('inactiveTab') || 'inactive').split(' ')\n if (this.anchor) this.index = this.tabTargets.findIndex((tab) => tab.id === this.anchor)\n this.showTab()\n }\n\n change(event) {\n event.preventDefault()\n\n // If target specifies an index, use that\n if (event.currentTarget.dataset.index) {\n this.index = event.currentTarget.dataset.index\n\n // If target specifies an index, use that\n } else if (event.currentTarget.dataset.id) {\n this.index = this.tabTargets.findIndex((tab) => tab.id == event.currentTarget.dataset.id)\n\n // Otherwise, use the index of the current target\n } else {\n this.index = this.tabTargets.indexOf(event.currentTarget)\n }\n\n window.dispatchEvent(new CustomEvent('tsc:tab-change'))\n }\n\n showTab() {\n this.tabTargets.forEach((tab, index) => {\n const panel = this.panelTargets[index]\n\n if (index === this.index) {\n panel.classList.remove('hidden')\n tab.classList.remove(...this.inactiveTabClasses)\n tab.classList.add(...this.activeTabClasses)\n\n // Update URL with the tab ID if it has one\n // This will be automatically selected on page load\n if (tab.id) {\n location.hash = tab.id\n }\n } else {\n panel.classList.add('hidden')\n tab.classList.remove(...this.activeTabClasses)\n tab.classList.add(...this.inactiveTabClasses)\n }\n })\n }\n\n get index() {\n return parseInt(this.data.get('index') || 0)\n }\n\n set index(value) {\n this.data.set('index', (value >= 0 ? value : 0))\n this.showTab()\n }\n\n get anchor() {\n return (document.URL.split('#').length > 1) ? document.URL.split('#')[1] : null;\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['toggleable']\n\n connect() {\n this.toggleClass = this.data.get('class') || 'hidden'\n }\n\n toggle(event) {\n event.preventDefault()\n\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass)\n })\n }\n}\n","// A simple inline popover to be used wherever needed, with a configurable offset.\n// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//

\n// Beginning in 2015, Google introduced what is called the\n//

popover#mouseOver mouseout->popover#mouseOut\">\n// 'local snack pack',\n// \n//
\n// which shows you local search results before normal organic results.\n//

\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['content']\n\n // Sets the popover offset using Stimulus data map objects.\n initialize() {\n this.contentTarget.setAttribute(\n 'style',\n `transform:translate(${this.data.get('translateX')}, ${this.data.get('translateY')});`,\n )\n }\n\n // Show the popover\n mouseOver() {\n this.contentTarget.classList.remove('hidden')\n }\n // Hide the popover\n mouseOut() {\n this.contentTarget.classList.add('hidden')\n }\n}\n","// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n\n// This example controller works with specially annotated HTML like:\n\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n//
\n// \n//
\n//
\n//
\n//
\n//
\n\nimport Dropdown from './dropdown.js'\n\nexport default class extends Dropdown {\n static targets = ['menu', 'overlay']\n\n _show() {\n this.overlayTarget.classList.remove(this.toggleClass)\n\n super._show(\n (() => {\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n setTimeout(\n (() => {\n this._enteringClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n }).bind(this),\n this.enterTimeout[1],\n )\n }).bind(this),\n )\n }\n\n _hide() {\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n\n super._hide(\n (() => {\n setTimeout(\n (() => {\n this._visibleClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._invisibleClassList[1].forEach(klass => this.overlayTarget.classList.add(klass))\n this._activeClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this._leavingClassList[1].forEach(klass => this.overlayTarget.classList.remove(klass))\n this.overlayTarget.classList.add(this.toggleClass)\n }).bind(this),\n this.leaveTimeout[1],\n )\n }).bind(this),\n )\n }\n}\n"],"names":["initialize","this","hide","connect","setTimeout","_this","show","close","_this2","element","remove","setAttribute","Controller","timeout","duration","data","get","save","clearTimeout","statusTarget","textContent","Rails","fire","formTarget","success","setStatus","error","message","targets","toggleClass","visibleClass","invisibleClass","activeClass","enteringClass","leavingClass","toggle","openValue","openValueChanged","_show","_hide","cb","menuTarget","classList","_enteringClassList","forEach","klass","add","bind","_activeClassList","activeTarget","_invisibleClassList","_visibleClassList","enterTimeout","_leavingClassList","leaveTimeout","event","contains","target","has","document","querySelector","split","map","t","parseInt","values","open","Boolean","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","preventDefaultActionOpening","preventDefaultActionClosing","disconnect","e","preventDefault","blur","lockScroll","containerTarget","body","insertAdjacentHTML","background","unlockScroll","closeBackground","closeWithKeyboard","keyCode","scrollbarWidth","window","innerWidth","documentElement","clientWidth","style","paddingRight","saveScrollPosition","top","scrollPosition","restoreScrollPosition","pageYOffset","scrollTop","activeTabClasses","inactiveTabClasses","anchor","index","tabTargets","findIndex","tab","id","showTab","change","currentTarget","dataset","indexOf","dispatchEvent","CustomEvent","panel","panelTargets","location","hash","value","set","URL","length","toggleableTargets","contentTarget","mouseOver","mouseOut","overlayTarget","_Dropdown","Dropdown"],"mappings":"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"} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index b533390..e32203a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -12,6 +12,7 @@