+ Use your account with many different apps, and on any devices you wish!
+ When opening an app for the first time, just enter your user address and
+ password to log in.
+
You can connect various wallet apps to your Kosmos account. This allows
diff --git a/app/views/services/mastodon/show.html.erb b/app/views/services/mastodon/show.html.erb
new file mode 100644
index 0000000..27a30e3
--- /dev/null
+++ b/app/views/services/mastodon/show.html.erb
@@ -0,0 +1,219 @@
+<%= render HeaderComponent.new(title: "Social") %>
+
+<%= render MainSimpleComponent.new do %>
+
+
+ Follow and interact with anyone on the open social web, from your Kosmos Mastodon account.
+
+ Use your Mastodon account with many different apps, and on any devices
+ you wish! When adding your account to an app, you will log in via
+ kosmos.social.
+
+
+<% end %>
diff --git a/app/views/shared/_admin_sidenav_settings_services.html.erb b/app/views/shared/_admin_sidenav_settings_services.html.erb
index 142f6fc..973777f 100644
--- a/app/views/shared/_admin_sidenav_settings_services.html.erb
+++ b/app/views/shared/_admin_sidenav_settings_services.html.erb
@@ -5,6 +5,13 @@
icon: Setting.discourse_enabled? ? "check" : "x",
active: current_page?(admin_settings_services_path(params: { s: "discourse" })),
) %>
+<%= render SidenavLinkComponent.new(
+ level: 2,
+ name: "Drone CI",
+ path: admin_settings_services_path(params: { s: "droneci" }),
+ icon: Setting.droneci_enabled? ? "check" : "x",
+ active: current_page?(admin_settings_services_path(params: { s: "droneci" })),
+) %>
<%= render SidenavLinkComponent.new(
level: 2,
name: "ejabberd",
diff --git a/config/importmap.rb b/config/importmap.rb
index 605cf26..2c52451 100644
--- a/config/importmap.rb
+++ b/config/importmap.rb
@@ -6,4 +6,4 @@ pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
pin "bech32" # @2.0.0
-pin "tailwindcss-stimulus-components" # @3.0.4
+pin "tailwindcss-stimulus-components" # @4.0.3
diff --git a/config/routes.rb b/config/routes.rb
index 7d51379..3dc922a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -21,12 +21,16 @@ Rails.application.routes.draw do
namespace :services do
get 'storage', to: 'remotestorage#dashboard'
+ resource :chat, only: [:show], controller: 'chat'
+
resources :lightning, only: [:index] do
collection do
get 'transactions'
get 'qr_lnurlp'
end
end
+
+ resource :mastodon, only: [:show], controller: 'mastodon'
end
resources :settings, param: 'section', only: ['index', 'show', 'update'] do
diff --git a/public/img/logos/icon_conversations.png b/public/img/logos/icon_conversations.png
new file mode 100644
index 0000000..df2d41b
Binary files /dev/null and b/public/img/logos/icon_conversations.png differ
diff --git a/public/img/logos/icon_dino.svg b/public/img/logos/icon_dino.svg
new file mode 100644
index 0000000..b62f8c3
--- /dev/null
+++ b/public/img/logos/icon_dino.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/icon_elk.svg b/public/img/logos/icon_elk.svg
new file mode 100644
index 0000000..3645460
--- /dev/null
+++ b/public/img/logos/icon_elk.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/public/img/logos/icon_fedilab.png b/public/img/logos/icon_fedilab.png
new file mode 100644
index 0000000..c329861
Binary files /dev/null and b/public/img/logos/icon_fedilab.png differ
diff --git a/public/img/logos/icon_gajim.png b/public/img/logos/icon_gajim.png
new file mode 100644
index 0000000..7f16c9c
Binary files /dev/null and b/public/img/logos/icon_gajim.png differ
diff --git a/public/img/logos/icon_icecubes.png b/public/img/logos/icon_icecubes.png
new file mode 100644
index 0000000..c5fdb98
Binary files /dev/null and b/public/img/logos/icon_icecubes.png differ
diff --git a/public/img/logos/icon_kaidan.svg b/public/img/logos/icon_kaidan.svg
new file mode 100644
index 0000000..6dddeae
--- /dev/null
+++ b/public/img/logos/icon_kaidan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/icon_mammoth.png b/public/img/logos/icon_mammoth.png
new file mode 100644
index 0000000..b5ee3fe
Binary files /dev/null and b/public/img/logos/icon_mammoth.png differ
diff --git a/public/img/logos/icon_mastodon-2.svg b/public/img/logos/icon_mastodon-2.svg
new file mode 100644
index 0000000..ba483a2
--- /dev/null
+++ b/public/img/logos/icon_mastodon-2.svg
@@ -0,0 +1,65 @@
+
+
diff --git a/public/img/logos/icon_mastonaut.png b/public/img/logos/icon_mastonaut.png
new file mode 100644
index 0000000..bcddf4a
Binary files /dev/null and b/public/img/logos/icon_mastonaut.png differ
diff --git a/public/img/logos/icon_megalodon.png b/public/img/logos/icon_megalodon.png
new file mode 100644
index 0000000..0ebe72f
Binary files /dev/null and b/public/img/logos/icon_megalodon.png differ
diff --git a/public/img/logos/icon_monal.svg b/public/img/logos/icon_monal.svg
new file mode 100644
index 0000000..e8c7d1c
--- /dev/null
+++ b/public/img/logos/icon_monal.svg
@@ -0,0 +1,149 @@
+
+
+
+
diff --git a/public/img/logos/icon_sengi.png b/public/img/logos/icon_sengi.png
new file mode 100644
index 0000000..6635416
Binary files /dev/null and b/public/img/logos/icon_sengi.png differ
diff --git a/public/img/logos/icon_tuba.svg b/public/img/logos/icon_tuba.svg
new file mode 100644
index 0000000..7f80313
--- /dev/null
+++ b/public/img/logos/icon_tuba.svg
@@ -0,0 +1,1123 @@
+
+
diff --git a/public/img/logos/logo_beagle.png b/public/img/logos/logo_beagle.png
new file mode 100644
index 0000000..e1515cf
Binary files /dev/null and b/public/img/logos/logo_beagle.png differ
diff --git a/public/img/logos/logo_siskin.png b/public/img/logos/logo_siskin.png
new file mode 100644
index 0000000..67c1945
Binary files /dev/null and b/public/img/logos/logo_siskin.png differ
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 8bd2382..a3e8051 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -12,6 +12,38 @@ RSpec.describe User, type: :model do
end
end
+ describe "#mastodon_address" do
+ let(:user) { build :user, cn: "jimmy", ou: "kosmos.org" }
+
+ context "Mastodon service not configured" do
+ it "returns nil" do
+ expect(user.mastodon_address).to be_nil
+ end
+ end
+
+ context "Mastodon service configured" do
+ before do
+ Setting.mastodon_enabled = true
+ end
+
+ describe "domain is the same as primary domain" do
+ it "returns the user address" do
+ expect(user.mastodon_address).to eq("jimmy@kosmos.org")
+ end
+ end
+
+ describe "domain is different from primary domain" do
+ before do
+ Setting.mastodon_address_domain = "kosmos.social"
+ end
+
+ it "returns the user address" do
+ expect(user.mastodon_address).to eq("jimmy@kosmos.social")
+ end
+ end
+ end
+ end
+
describe "#is_admin?" do
it "returns true when admin flag is set in LDAP" do
expect(Devise::LDAP::Adapter).to receive(:get_ldap_param)
diff --git a/vendor/javascript/tailwindcss-stimulus-components.js b/vendor/javascript/tailwindcss-stimulus-components.js
index e877767..8ed1612 100644
--- a/vendor/javascript/tailwindcss-stimulus-components.js
+++ b/vendor/javascript/tailwindcss-stimulus-components.js
@@ -1,2 +1 @@
-import{Controller as t}from"@hotwired/stimulus";class s extends t{initialize(){this.hide()}connect(){setTimeout((()=>{this.show()}),this.showDelayValue),this.hasDismissAfterValue&&setTimeout((()=>{this.close()}),this.dismissAfterValue)}close(){this.hide(),setTimeout((()=>{this.element.remove()}),this.removeDelayValue)}show(){this.element.classList.add(...this.showClasses),this.element.classList.remove(...this.hideClasses)}hide(){this.element.classList.add(...this.hideClasses),this.element.classList.remove(...this.showClasses)}}s.values={dismissAfter:Number,showDelay:{type:Number,default:200},removeDelay:{type:Number,default:1100}},s.classes=["show","hide"];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{constructor(...t){super(...t),this._onMenuButtonKeydown=t=>{switch(t.keyCode){case 13:case 32:t.preventDefault(),this.toggle()}}}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,this.hasButtonTarget&&this.buttonTarget.addEventListener("keydown",this._onMenuButtonKeydown),this.element.setAttribute("aria-haspopup","true")}disconnect(){this.hasButtonTarget&&this.buttonTarget.removeEventListener("keydown",this._onMenuButtonKeydown)}toggle(){this.openValue=!this.openValue}openValueChanged(){this.openValue?this._show():this._hide()}_show(t){setTimeout((()=>{this.menuTarget.classList.remove(this.toggleClass),this.element.setAttribute("aria-expanded","true"),this._enteringClassList[0].forEach((t=>{this.menuTarget.classList.add(t)}).bind(this)),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.element.setAttribute("aria-expanded","false"),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))}show(){this.openValue=!0}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","button"],i.values={open:Boolean};class a extends t{connect(){this.toggleClass=this.data.get("class")||"hidden",this.backgroundId=this.data.get("backgroundId")||"modal-background",this.backgroundHtml=this.data.get("backgroundHtml")||this._backgroundHTML(),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&&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.restoreScrollValue&&this.restoreScrollPosition(),document.body.style.top=null}saveScrollPosition(){this.scrollPosition=window.pageYOffset||document.body.scrollTop}restoreScrollPosition(){void 0!==this.scrollPosition&&(document.documentElement.scrollTop=this.scrollPosition)}}a.targets=["container"],a.values={backdropColor:{type:String,default:"rgba(0, 0, 0, 0.8)"},restoreScroll:{type:Boolean,default:!0}};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((d=>d.id==t.currentTarget.dataset.id)):this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))}showTab(){this.tabTargets.forEach(((t,d)=>{const c=this.panelTargets[d];d===this.index?(c.classList.remove("hidden"),t.classList.remove(...this.inactiveTabClasses),t.classList.add(...this.activeTabClasses),t.id&&(location.hash=t.id)):(c.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 o extends t{connect(){this.toggleClass=this.data.get("class")||"hidden"}toggle(t){t.preventDefault(),this.openValue=!this.openValue}hide(t){t.preventDefault(),this.openValue=!1}show(t){t.preventDefault(),this.openValue=!0}openValueChanged(){this.toggleClass&&this.toggleableTargets.forEach((t=>{t.classList.toggle(this.toggleClass)}))}}o.targets=["toggleable"],o.values={open:Boolean};class n 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")}toggle(){this.contentTarget.classList.contains("hidden")?this.contentTarget.classList.remove("hidden"):this.contentTarget.classList.add("hidden")}}n.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"];class h extends t{connect(){this.styleProperty=this.data.get("style")||"backgroundColor"}update(){this.preview=this.color}set preview(t){this.previewTarget.style[this.styleProperty]=t;const d=this._getContrastYIQ(t);"color"===this.styleProperty?this.previewTarget.style.backgroundColor=d:this.previewTarget.style.color=d}get color(){return this.colorTarget.value}_getContrastYIQ(t){return t=t.replace("#",""),(299*parseInt(t.substr(0,2),16)+587*parseInt(t.substr(2,2),16)+114*parseInt(t.substr(4,2),16))/1e3>=128?"#000":"#fff"}}h.targets=["preview","color"];export{s as Alert,e as Autosave,h as ColorPreview,i as Dropdown,a as Modal,n as Popover,r as Slideover,l as Tabs,o as Toggle};
-
+var I=Object.defineProperty;var S=(t,e,a)=>e in t?I(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a;var s=(t,e,a)=>(S(t,typeof e!="symbol"?e+"":e,a),a);import{Controller as L}from"@hotwired/stimulus";var f=new Map;async function o(t,e,a=null){e?await l(t,a):await u(t,a)}async function l(t,e=null){try{t.classList.remove("hidden"),await C("enter",t,e)}finally{y(t,e)}}async function u(t,e=null){try{await C("leave",t,e)}finally{t.classList.add("hidden"),y(t,e)}}async function C(t,e,a){y(e,a);let i=w(t,e,a);f.set(e,t),c(e,i.transition),c(e,i.start),await A(),b(e,i.start),c(e,i.end),await D(e),b(e,i.end),b(e,i.transition),"originalClass"in e.dataset&&e.dataset.originalClass!==""&&c(e,e.dataset.originalClass.split(" ")),f.delete(e)}function w(t,e,a){let i=e.dataset,d=a?`${a}-${t}`:t,r=`transition${t.charAt(0).toUpperCase()+t.slice(1)}`;return{transition:i[r]?i[r].split(" "):[d],start:i[`${r}From`]?i[`${r}From`].split(" "):[`${d}-from`],end:i[`${r}To`]?i[`${r}To`].split(" "):[`${d}-to`]}}function c(t,e){t.classList.add(...e)}function b(t,e){t.classList.remove(...e)}function A(){return new Promise(t=>{requestAnimationFrame(()=>{requestAnimationFrame(t)})})}function D(t){return Promise.all(t.getAnimations().map(e=>e.finished))}async function y(t,e=null){if("originalClass"in t.dataset||(t.dataset.originalClass=[...t.classList].filter(a=>a!=="hidden").join(" ")),f.has(t)){let a=f.get(t),i=w(a,t,e);b(t,i.transition+i.start+i.end),"originalClass"in t.dataset&&t.dataset.originalClass!==""&&c(t,t.dataset.originalClass.split(" ")),f.delete(t)}}var v=class extends L{connect(){setTimeout(()=>{l(this.element)},this.showDelayValue),this.hasDismissAfterValue&&setTimeout(()=>{this.close()},this.dismissAfterValue)}close(){u(this.element).then(()=>{this.element.remove()})}};s(v,"values",{dismissAfter:Number,showDelay:{type:Number,default:0},removeDelay:{type:Number,default:1100}});import{Controller as P}from"@hotwired/stimulus";var p=class extends P{connect(){this.timeout=null}save(){clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.statusTarget.textContent=this.submittingTextValue,this.formTarget.requestSubmit()},this.submitDurationValue)}success(){this.setStatus(this.successTextValue)}error(){this.setStatus(this.errorTextValue)}setStatus(t){this.statusTarget.textContent=t,this.timeout=setTimeout(()=>{this.statusTarget.textContent=""},this.statusDurationValue)}};s(p,"targets",["form","status"]),s(p,"values",{submitDuration:{type:Number,default:1e3},statusDuration:{type:Number,default:2e3},submittingText:{type:String,default:"Saving..."},successText:{type:String,default:"Saved!"},errorText:{type:String,default:"Unable to save."}});import{Controller as k}from"@hotwired/stimulus";var g=class extends k{update(){this.preview=this.colorTarget.value}set preview(t){this.previewTarget.style[this.styleValue]=t;let e=this._getContrastYIQ(t);this.styleValue==="color"?this.previewTarget.style.backgroundColor=e:this.previewTarget.style.color=e}_getContrastYIQ(t){t=t.replace("#","");let e=128,a=parseInt(t.substr(0,2),16),i=parseInt(t.substr(2,2),16),d=parseInt(t.substr(4,2),16);return(a*299+i*587+d*114)/1e3>=e?"#000":"#fff"}};s(g,"targets",["preview","color"]),s(g,"values",{style:{type:String,default:"backgroundColor"}});import{Controller as B}from"@hotwired/stimulus";var n=class extends B{connect(){this.hasButtonTarget&&(this.buttonTarget.addEventListener("keydown",this._onMenuButtonKeydown),this.buttonTarget.setAttribute("aria-haspopup","true"))}disconnect(){this.hasButtonTarget&&(this.buttonTarget.removeEventListener("keydown",this._onMenuButtonKeydown),this.buttonTarget.removeAttribute("aria-haspopup"))}openValueChanged(){o(this.menuTarget,this.openValue),this.openValue===!0&&this.hasMenuItemTarget&&this.menuItemTargets[0].focus()}show(){this.openValue=!0}hide(t){t.target.nodeType&&this.element.contains(t.target)===!1&&this.openValue&&(this.openValue=!1)}toggle(){this.openValue=!this.openValue}nextItem(){let t=Math.min(this.currentItemIndex+1,this.menuItemTargets.length-1);this.menuItemTargets[t].focus()}previousItem(){let t=Math.max(this.currentItemIndex-1,0);this.menuItemTargets[t].focus()}get currentItemIndex(){return this.menuItemTargets.indexOf(document.activeElement)}};s(n,"targets",["menu","button","menuItem"]),s(n,"values",{open:Boolean,default:!1});import{Controller as E}from"@hotwired/stimulus";var m=class extends E{disconnect(){this.close()}open(){this.openValue=!0}close(){this.openValue=!1}closeBackground(t){t.target===this.backgroundTarget&&this.close()}openValueChanged(){this.openValue?(this.containerTarget.focus(),this.lockScroll(),l(this.backgroundTarget),l(this.containerTarget)):(this.unlockScroll(),u(this.containerTarget),u(this.backgroundTarget))}lockScroll(){this.restoreScrollValue&&(this.saveScrollPosition(),console.log("scrollPosition",this.scrollPosition),document.body.style.top=`-${this.scrollPosition}px`);let t=window.innerWidth-document.documentElement.clientWidth;document.body.style.paddingRight=`${t}px`,document.body.classList.add("fixed","inset-x-0","overflow-hidden")}unlockScroll(){document.body.style.paddingRight=null,document.body.classList.remove("fixed","inset-x-0","overflow-hidden"),this.restoreScrollValue&&(this.restoreScrollPosition(),document.body.style.top=null)}saveScrollPosition(){this.scrollPosition=window.pageYOffset||document.body.scrollTop}restoreScrollPosition(){this.scrollPosition!==void 0&&(document.documentElement.scrollTop=this.scrollPosition)}};s(m,"targets",["container","background"]),s(m,"values",{open:{type:Boolean,default:!1},restoreScroll:{type:Boolean,default:!0}});import{Controller as $}from"@hotwired/stimulus";var T=class extends ${openValueChanged(){o(this.contentTarget,this.openValue),this.shouldAutoDismiss&&this.scheduleDismissal()}show(t){this.shouldAutoDismiss&&this.scheduleDismissal(),this.openValue=!0}hide(){this.openValue=!1}toggle(){this.openValue=!this.openValue}get shouldAutoDismiss(){return this.openValue&&this.hasDismissAfterValue}scheduleDismissal(){this.hasDismissAfterValue&&(this.cancelDismissal(),this.timeoutId=setTimeout(()=>{this.hide(),this.timeoutId=void 0},this.dismissAfterValue))}cancelDismissal(){typeof this.timeoutId=="number"&&(clearTimeout(this.timeoutId),this.timeoutId=void 0)}};s(T,"targets",["content"]),s(T,"values",{dismissAfter:Number,open:{type:Boolean,default:!1}});var V=class extends n{openValueChanged(){o(this.overlayTarget,this.openValue),o(this.menuTarget,this.openValue),this.hasCloseTarget&&o(this.closeTarget,this.openValue)}};s(V,"targets",["menu","overlay","close"]);import{Controller as M}from"@hotwired/stimulus";var h=class extends M{connect(){this.anchor&&(this.indexValue=this.tabTargets.findIndex(t=>t.id===this.anchor)),this.showTab()}change(t){t.currentTarget.tagName==="SELECT"?this.indexValue=t.currentTarget.selectedIndex:t.currentTarget.dataset.index?this.indexValue=t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.indexValue=this.tabTargets.findIndex(e=>e.id==t.currentTarget.dataset.id):this.indexValue=this.tabTargets.indexOf(t.currentTarget),window.dispatchEvent(new CustomEvent("tsc:tab-change"))}nextTab(){this.indexValue=Math.min(this.indexValue+1,this.tabsCount-1)}previousTab(){this.indexValue=Math.max(this.indexValue-1,0)}firstTab(){this.indexValue=0}lastTab(){this.indexValue=this.tabsCount-1}indexValueChanged(){this.showTab(),this.updateAnchorValue&&(location.hash=this.tabTargets[this.indexValue].id)}showTab(){this.panelTargets.forEach((t,e)=>{let a=this.tabTargets[e];e===this.indexValue?(t.classList.remove("hidden"),this.hasInactiveTabClass&&a?.classList?.remove(...this.inactiveTabClasses),this.hasActiveTabClass&&a?.classList?.add(...this.activeTabClasses)):(t.classList.add("hidden"),this.hasActiveTabClass&&a?.classList?.remove(...this.activeTabClasses),this.hasInactiveTabClass&&a?.classList?.add(...this.inactiveTabClasses))}),this.hasSelectTarget&&(this.selectTarget.selectedIndex=this.indexValue)}get tabsCount(){return this.tabTargets.length}get anchor(){return document.URL.split("#").length>1?document.URL.split("#")[1]:null}};s(h,"classes",["activeTab","inactiveTab"]),s(h,"targets",["tab","panel","select"]),s(h,"values",{index:0,updateAnchor:Boolean});import{Controller as W}from"@hotwired/stimulus";var x=class extends W{toggle(t){this.openValue=!this.openValue,this.animate()}hide(){this.openValue=!1,this.animate()}show(){this.openValue=!0,this.animate()}animate(){this.toggleableTargets.forEach(t=>{o(t,this.openValue)})}};s(x,"targets",["toggleable"]),s(x,"values",{open:{type:Boolean,default:!1}});export{v as Alert,p as Autosave,g as ColorPreview,n as Dropdown,m as Modal,T as Popover,V as Slideover,h as Tabs,x as Toggle};