@gjsify/example-gtk-adwaita-storybook 0.53.0 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/gjs.node.mjs CHANGED
@@ -70,7 +70,7 @@ import{createRequire as e}from"node:module";import"@gjsify/node-gi/globals";impo
70
70
  </method>${e.length>0?`\n${e.join(`
71
71
  `)}`:``}
72
72
  </interface>
73
- </node>`}const ee=e(import.meta.url);let b;function load$3(){return b===void 0&&(b=ee(`@gjsify/node-gi/gi`).requireGi(`Gio`,`2.0`)),b}__name(load$3,`load`);var x=new Proxy(Object.create(null),{get(e,t){return load$3()[t]},has(e,t){return t in load$3()}});function isWin32(){return l.DIR_SEPARATOR===92}function defaultListenAddress(){return isWin32()?`nonce-tcp:host=127.0.0.1`:`unix:tmpdir=${l.get_tmp_dir()}`}var DevtoolsPeerServerError=class extends Error{constructor(e,t,n,r){super(e),this.address=t,this.reason=n,this.name=`DevtoolsPeerServerError`,this.cause=r}};function isAddressInUse(e){return e instanceof l.Error&&e.matches(x.io_error_quark(),x.IOErrorEnum.ADDRESS_IN_USE)}function unixSocketPath(e){if(!e.startsWith(`unix:`))return null;for(let t of e.slice(5).split(`,`)){let e=t.indexOf(`=`);if(!(e<0||t.slice(0,e)!==`path`))try{return decodeURIComponent(t.slice(e+1))}catch{return null}}return null}function inspectExistingSocket(e){try{if((x.File.new_for_path(e).query_info(`unix::mode`,x.FileQueryInfoFlags.NONE,null).get_attribute_uint32(`unix::mode`)&61440)!=49152)return`not-a-socket`}catch{return`not-a-socket`}let t=new x.SocketClient;t.set_timeout(2);let n;try{n=t.connect(x.UnixSocketAddress.new(e),null)}catch{return`dead`}return n.close(null),`live`}function clearReclaimableSocket(e){let t=unixSocketPath(e);if(!t||!l.file_test(t,l.FileTest.EXISTS))return;let n=inspectExistingSocket(t);if(n===`live`)throw new DevtoolsPeerServerError(`cannot listen on ${e}: another process is already listening there. Stop it, or point ${y} (or options.address) at a different socket — GJSIFY_DEVTOOLS_INSTANCE=<label> lets two devtools-enabled apps run side by side.`,e,`address-in-use`);if(n===`not-a-socket`)throw new DevtoolsPeerServerError(`cannot listen on ${e}: ${t} already exists and is not a socket, so it will NOT be removed. Point ${y} (or options.address) at a free path.`,e,`occupied-by-other-file`);try{x.File.new_for_path(t).delete(null)}catch(n){throw new DevtoolsPeerServerError(`cannot listen on ${e}: ${t} is a socket nothing listens on, but removing it failed (${n}). Delete it by hand, or point ${y} at a free path.`,e,`address-in-use`,n)}console.log(`[gjsify-devtools] reclaimed the stale socket ${t}: nothing was listening on it (an abnormal exit — Ctrl-C, SIGKILL, a crash — leaves the inode behind).`)}function flagsForAddress(e){return e.startsWith(`tcp:`)||e.startsWith(`nonce-tcp:`)?x.DBusServerFlags.NONE:x.DBusServerFlags.AUTHENTICATION_REQUIRE_SAME_USER}function startDevtoolsPeerServer(e,t,n){let r=n&&n!==``?n:defaultListenAddress();clearReclaimableSocket(r);let i;try{i=x.DBusServer.new_sync(r,flagsForAddress(r),x.dbus_generate_guid(),null,null)}catch(e){let t=isAddressInUse(e);throw new DevtoolsPeerServerError(t?`cannot listen on ${r}: the address is already in use (${e}). Stop whatever holds it, or point ${y} (or options.address) at a different address.`:`cannot listen on ${r}: ${e}. Check the address form — \`unix:path=/tmp/app.sock\`, \`unix:tmpdir=/tmp\` or \`nonce-tcp:host=127.0.0.1\`.`,r,t?`address-in-use`:`listen-failed`,e)}let a=new Set;i.connect(`new-connection`,(n,r)=>(a.add(r),r.connect(`closed`,()=>{e.unexport(r),a.delete(r)}),e.export(r,t),!0)),i.start();let o=!1;return{address:i.get_client_address(),objectPath:t,get connectionCount(){return a.size},stop(){if(!o){o=!0,i.stop();for(let t of a)e.unexport(t),!t.is_closed()&&t.close(null,(e,t)=>{try{e.close_finish(t)}catch{}});a.clear()}}}}function writeDevtoolsAddressFile(e,t){try{if(l.mkdir_with_parents(l.path_get_dirname(e),448),!l.file_set_contents(e,`${t}\n`))return null}catch(t){return console.error(`[gjsify-devtools] could not publish the peer address to ${e}: ${t}`),null}try{x.File.new_for_path(e).set_attribute_uint32(`unix::mode`,384,x.FileQueryInfoFlags.NONE,null)}catch(t){console.error(`[gjsify-devtools] could not restrict ${e} to the current user: ${t}`)}return e}function removeDevtoolsAddressFile(e){try{x.File.new_for_path(e).delete(null)}catch{}}const te=e(import.meta.url);let ne;function load$2(){return ne===void 0&&(ne=te(`@gjsify/node-gi/gi`).requireGi(`Graphene`,`1.0`)),ne}__name(load$2,`load`);var re=new Proxy(Object.create(null),{get(e,t){return load$2()[t]},has(e,t){return t in load$2()}});function captureWidget(e){let t=e.get_native()?.get_renderer();if(!t)return{png:null,blocker:`no-renderer`};let n=e.get_width(),r=e.get_height();if(n<=0||r<=0)return{png:null,blocker:`zero-size`};let i=h.WidgetPaintable.new(e),a=h.Snapshot.new();i.snapshot(a,n,r);let o=a.to_node();if(!o)return{png:null,blocker:`empty-snapshot`};let s=new re.Rect;s.init(0,0,n,r);let c=t.render_texture(o,s).save_to_png_bytes().get_data();return c?{png:new Uint8Array(c)}:{png:null,blocker:`empty-png`}}function captureWidgetPng(e){return captureWidget(e).png}function dumpGSettings(e){let t=x.SettingsSchemaSource.get_default()?.lookup(e,!0);if(!t)throw Error(formatDbusErrorMessage(`not-found`,`GSettings schema '${e}' is not installed`));let n=new x.Settings({settings_schema:t}),r={};for(let e of t.list_keys())r[e]=n.get_value(e).recursiveUnpack();return r}const ie=e(import.meta.url);let S;function load$1(){return S===void 0&&(S=ie(`@gjsify/node-gi/gi`).requireGi(`GObject`,`2.0`)),S}__name(load$1,`load`);var C=new Proxy(Object.create(null),{get(e,t){return load$1()[t]},has(e,t){return t in load$1()}});function parseWidgetPath(e){let t=e.split(`/`).filter(e=>e.length>0);if(t.length===0)return null;let n=t[0].match(/^toplevel:(\d+)$/);if(!n)return null;let r=[];for(let e of t.slice(1)){let t=e.match(/^child:(\d+)$/);if(!t)return null;r.push(Number(t[1]))}return{toplevel:Number(n[1]),children:r}}function buildWidgetPath(e,t){return[`toplevel:${e}`,...t.map(e=>`child:${e}`)].join(`/`)}function widgetType(e){return gtypeName(e)??`GtkWidget`}function gtypeName(e){let t=e;return typeof t?.$typeName==`string`&&t.$typeName.length>0?t.$typeName:t?.constructor?.$gtype?.name??null}function widgetIsA(e,t){let n=gtypeName(e);if(n===null||!t)return!1;if(n===t)return!0;let r=C.type_from_name(n),i=C.type_from_name(t);return!r||!i?!1:C.type_is_a(r,i)}function activateWidget(e){let t=e;if(typeof t.activate==`function`&&t.activate()===!0)return!0;let n=typeof t.get_parent==`function`?t.get_parent():null;if(n&&widgetIsA(n,`GtkListBox`)){let t=n,r=!1;return typeof t.select_row==`function`&&(t.select_row(e),r=!0),typeof t.emit==`function`&&(t.emit(`row-activated`,e),r=!0),r}return!1}function sendKeyToWidget(e,t,n){let r=e.observe_controllers(),i=!1;for(let e=0;e<r.get_n_items();e++){let a=r.get_item(e);widgetIsA(a,`GtkEventControllerKey`)&&(a.emit(`key-pressed`,t,0,n),i=!0)}return i}function nthChild(e,t){let n=e.get_first_child(),r=0;for(;n&&r<t;)n=n.get_next_sibling(),r++;return r===t?n:null}function listToplevels(){let e=h.Window.get_toplevels(),t=e.get_n_items(),n=[];for(let r=0;r<t;r++){let t=e.get_item(r);t&&n.push({path:`toplevel:${r}`,type:widgetType(t),title:t.get_title?.()??null,mapped:t.get_mapped(),focused:t.is_active??!1})}return n}function resolveWidgetPath(e){let t=parseWidgetPath(e);if(!t)return null;let n=h.Window.get_toplevels().get_item(t.toplevel);if(!n)return null;for(let e of t.children)if(n=nthChild(n,e),!n)return null;return n}function parseWidgetSelector(e){let t=e.indexOf(`:`),n=(t<0?e:e.slice(0,t)).trim(),r=(t<0?``:e.slice(t+1)).trim();return!n&&!r?null:{type:n,cssClass:r}}function findWidgetPath(e,t,n){let r={path:null};return walkForSelector(e,t,n,r)??r.path}function walkForSelector(e,t,n,r){if(!e.get_visible()||!e.get_mapped())return null;if(!t.cssClass||e.get_css_classes().includes(t.cssClass)){if(!t.type||widgetType(e)===t.type)return n;r.path===null&&widgetIsA(e,t.type)&&(r.path=n)}let i=e.get_first_child(),a=0;for(;i;){let e=walkForSelector(i,t,`${n}/child:${a}`,r);if(e)return e;i=i.get_next_sibling(),a++}return null}function geometryOf(e){if(!e.get_mapped())return;let t=e.get_allocation(),n=t.width+e.get_margin_start()+e.get_margin_end(),r=t.height+e.get_margin_top()+e.get_margin_bottom(),[i,a]=e.measure(h.Orientation.HORIZONTAL,-1),o=n>0?Math.max(n,i):-1,[s,c]=e.measure(h.Orientation.VERTICAL,o),l={width:n,height:r,widthRequest:[i,a],heightRequest:[s,c]};return(n<i||r<s)&&(l.short=!0),l}function dumpTree(e,t,n){let r={path:n,type:widgetType(e),name:e.get_name()||null,cssClasses:e.get_css_classes(),mapped:e.get_mapped(),visible:e.get_visible(),children:[]},i=geometryOf(e);if(i!==void 0&&(r.geometry=i),t<=0)return e.get_first_child()&&(r.truncated=!0),r;let a=e.get_first_child(),o=0;for(;a;)r.children.push(dumpTree(a,t-1,`${n}/child:${o}`)),a=a.get_next_sibling(),o++;return r}function jsonSafe(e){let t=typeof e;return e==null||t===`string`||t===`number`||t===`boolean`?e??null:`[${t}]`}function getWidgetProperty(e,t){let n=e,r=t.replace(/-/g,`_`),i=t.replace(/[-_]([a-z])/g,(e,t)=>t.toUpperCase());for(let e of[t,r,i])if(e in n)return jsonSafe(n[e])}function childIndex(e,t){let n=e.get_first_child(),r=0;for(;n;){if(n===t)return r;n=n.get_next_sibling(),r++}return-1}function pathOfWidget(e){let t=[],n=e,r=n.get_parent();for(;r;){let e=childIndex(r,n);if(e<0)return null;t.unshift(e),n=r,r=n.get_parent()}let i=h.Window.get_toplevels(),a=i.get_n_items();for(let e=0;e<a;e++)if(i.get_item(e)===n)return buildWidgetPath(e,t);return null}function isActiveWindowScope(e){return!e||e===`window`||e===`active`}function frameDelay(e){return new Promise(t=>{l.timeout_add(l.PRIORITY_DEFAULT,e,()=>(t(),l.SOURCE_REMOVE))})}async function captureWidgetWhenRenderable(e,t=12,n=50){let r=null;for(let i=0;i<t;i++){let t=captureWidget(e);if(t.png)return{png:t.png,blocker:null};r=t.blocker,await frameDelay(n)}let i=captureWidget(e);return{png:i.png,blocker:i.png?null:i.blocker??r}}var DevtoolsService=class{constructor(e,t){this._app=e,this._options=t,this._exported=new Map,this._peer=null,this._addressFile=null,this._kinds=new Map,this._extensions=t.extend??[];for(let[e,t]of Object.entries(v))this._kinds.set(e,t);for(let e of this._extensions){for(let[t,n]of Object.entries(e.methodKinds))this._kinds.set(t,n);for(let[t,n]of Object.entries(e.handlers)){let e=n;this[t]=(...n)=>(this._guard(t),e(...n))}}}export(e,t){if(this._exported.has(e))return;let n=buildDevtoolsIfaceXml(this._extensions.flatMap(e=>e.methodsXml??[])),r=x.DBusExportedObject.wrapJSObject(n,this);r.export(e,t),this._exported.set(e,r)}unexport(e){if(e){this._exported.get(e)?.unexport(),this._exported.delete(e);return}for(let e of this._exported.values())e.unexport();this._exported.clear(),this._peer?.stop(),this._peer=null,this._addressFile&&=(removeDevtoolsAddressFile(this._addressFile),null)}attachPeerServer(e,t){this._peer=e,this._addressFile=t??null}get peerAddress(){return this._peer?.address??null}get addressFile(){return this._addressFile}GetStatus(){let e=this._app.get_active_window(),t={appId:this._app.get_application_id()??`unknown`,instance:this._options.instance??`default`,activeWindow:e?{id:e.get_name()||`window`,title:e.get_title()??``,mapped:e.get_mapped()}:null,toplevelCount:h.Window.get_toplevels().get_n_items(),focusedWidget:null,paused:this._isPaused()};for(let e of this._extensions){let n=e.contributeStatus?.();n&&Object.assign(t,n)}return JSON.stringify(t)}async ScreenshotAsync(e,t){try{let n=typeof e?.[0]==`string`?e[0]:``,r=await this._captureScopePng(n);t.return_value(new l.Variant(`(ay)`,[r]))}catch(e){t.return_dbus_error(`org.gjsify.Devtools.Error.Screenshot`,e instanceof Error?e.message:String(e))}}async _captureScopePng(e){let t=this._resolveRootWidget(e);if(!t){if(isActiveWindowScope(e))return new Uint8Array;throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`))}let n=captureWidget(t.widget);if(n.png)return n.png;let r=t.widget.get_root();r instanceof h.Window&&r.present();let i=await captureWidgetWhenRenderable(t.widget);return i.png?i.png:(console.warn(`[devtools] Screenshot('${e}') has no image: ${i.blocker??`unknown`} after 12 tries. Empty bytes follow.`),new Uint8Array)}ListActions(){let e={app:describeActions(this._actionGroup(`app`)),win:describeActions(this._actionGroup(`win`))};return JSON.stringify(e)}ActivateAction(e,t,n){this._guard(`ActivateAction`);let r=this._scope(e);activateAction(this._requireGroup(r,t),t,this._parseValue(n))}ChangeActionState(e,t,n){this._guard(`ChangeActionState`);let r=this._scope(e);changeActionState(this._requireGroup(r,t),t,this._parseValue(n))}PresentWindow(){this._app.get_active_window()?.present()}ResizeWindow(e,t){this._guard(`ResizeWindow`);let n=this._app.get_active_window();if(!n)throw Error(formatDbusErrorMessage(`unavailable`,`no active window to resize`));let r=Math.max(1,Math.round(e)),i=Math.max(1,Math.round(t));return n.is_maximized()&&n.unmaximize(),n.is_fullscreen()&&n.unfullscreen(),n.set_default_size(r,i),[r,i]}ListToplevels(){return JSON.stringify(listToplevels())}DumpTree(e,t){let n=this._resolveRootWidget(e);if(!n)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e||`active window`}'`));return JSON.stringify(dumpTree(n.widget,t>0?t:40,n.path))}GetProperty(e,t){let n=this._resolveRootWidget(e);if(!n)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`));let r=getWidgetProperty(n.widget,t);if(r===void 0)throw Error(formatDbusErrorMessage(`not-found`,`widget has no property '${t}'`));return JSON.stringify(r)}GetFocused(){let e=this._app.get_active_window(),t=e?e.get_focus():null;return JSON.stringify(t?{path:pathOfWidget(t),name:t.get_name()||null,type:widgetType(t)}:null)}ActivateWidget(e){this._guard(`ActivateWidget`);let t=this._resolveRootWidget(e);if(!t)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`));return activateWidget(t.widget)}FindWidget(e){let t=parseWidgetSelector(e);if(!t)throw Error(formatDbusErrorMessage(`invalid-params`,`empty selector '${e}'`));let n=this._resolveRootWidget(``);return n?findWidgetPath(n.widget,t,n.path)??``:``}SendKey(e,t){this._guard(`SendKey`);let[n,r,i]=h.accelerator_parse(e);if(!n)throw Error(formatDbusErrorMessage(`invalid-params`,`cannot parse accelerator '${e}'`));let a;if(a=t?this._resolveRootWidget(t)?.widget??null:this._app.get_active_window()?.get_focus()??null,!a)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${t||`focus`}'`));return sendKeyToWidget(a,r,i??0)}DumpGSettings(e){return JSON.stringify(dumpGSettings(e))}DumpCss(){return JSON.stringify(dumpCss())}SwapCss(e,t){return this._guard(`SwapCss`),swapCss(e,t)}_resolveRootWidget(e){if(isActiveWindowScope(e)){let e=this._app.get_active_window();return e?{widget:e,path:pathOfWidget(e)??`toplevel:0`}:null}let t=resolveWidgetPath(e);return t?{widget:t,path:e}:null}_isPaused(){return this._options.paused?.()??!1}_guard(e){let t=this._kinds.get(e);if(!t)throw Error(formatDbusErrorMessage(`internal`,`unclassified devtools method '${e}'`));if(t===`mutating`&&this._isPaused())throw Error(formatDbusErrorMessage(`paused`,`${e} rejected — external control is paused. Read-only methods keep working.`))}_scope(e){return e===`app`?`app`:`win`}_actionGroup(e){if(e===`app`)return this._app;if(this._options.winActionGroup)return this._options.winActionGroup;let t=this._app.get_active_window();return t instanceof h.ApplicationWindow?t:null}_requireGroup(e,t){let n=this._actionGroup(e);if(!n)throw Error(formatDbusErrorMessage(`unavailable`,`no '${e}' action group`));if(!n.has_action(t))throw Error(formatDbusErrorMessage(`not-found`,`unknown action ${e}.${t}`));return n}_parseValue(e){if(!e||e===`null`)return null;try{return JSON.parse(e)}catch{throw Error(formatDbusErrorMessage(`invalid-params`,`value_json is not valid JSON: ${e}`))}}};const w=`DBUS_SESSION_BUS_ADDRESS`,ae=new Set;function envEnabled(){return isDevtoolsEnabledValue(l.getenv(`GJSIFY_DEVTOOLS`))}function envValue(e){let t=l.getenv(e);return t&&t!==``?t:null}function sessionBusUsable(){if(!envValue(w))return!1;try{return x.bus_get_sync(x.BusType.SESSION,null),!0}catch{return!1}}function chooseDevtoolsTransport(e){return e.requestedAddress?{kind:`peer`,address:e.requestedAddress,reason:`requested`}:e.hasAppConnection?{kind:`session-bus`}:e.sessionBusUsable?{kind:`unregistered`}:{kind:`peer`,address:null,reason:`no-session-bus`}}function describeMissingConnection(e,t){return e?t?`[gjsify-devtools] the session bus answers but this application is not registered on it yet — call installDevtools() from the GtkApplication "startup" handler (the bus connection and object path exist only after registration).`:`[gjsify-devtools] ${w} is set (${e}) but no bus answers there — using the bus-less peer transport instead. On macOS this is the usual state: Homebrew's dbus listens on launchd, so the advertised address only works while that socket is live.`:`[gjsify-devtools] this machine has no session bus (${w} is unset) — using the bus-less peer transport instead. Point the bridge at the address below, or set ${y} on both the app and \`gjsify debug\` to pin it yourself.`}function installDevtools(e,t={}){if(!(t.enabled??envEnabled()))return null;let n=t.instance??envValue(`GJSIFY_DEVTOOLS_INSTANCE`)??void 0,r=new DevtoolsService(e,{...t,instance:n});try{return exportDevtools(e,r,t,n)}catch(e){return r.unexport(),console.error(`[gjsify-devtools] devtools stayed OFF, the app is unaffected — ${describeInstallFailure(e)}`),null}}function describeInstallFailure(e){return e instanceof DevtoolsPeerServerError||e instanceof Error?e.message:String(e)}function exportDevtools(e,t,n,r){let i=e.get_is_registered(),a=i?e.get_dbus_connection():null,o=i?e.get_dbus_object_path():null,s=envValue(w),c=!!(a&&o),u=c||sessionBusUsable(),d=chooseDevtoolsTransport({requestedAddress:n.address??envValue(y),hasAppConnection:c,sessionBusUsable:u}),f=e.get_application_id()??`unknown`,p=`${o??appIdToObjectPath(f)}/devtools`;if((d.kind===`unregistered`||d.kind===`peer`&&d.reason===`no-session-bus`)&&console.error(describeMissingConnection(s,u)),d.kind===`session-bus`&&a)t.export(a,p),console.log(`[gjsify-devtools] exported ${_} at ${p} (dest ${f})`);else if(d.kind===`peer`){let n=startDevtoolsPeerServer(t,p,d.address??void 0),i=writeDevtoolsAddressFile(devtoolsAddressFilePath(l.get_user_runtime_dir(),f,r),n.address);t.attachPeerServer(n,i),console.log(`[gjsify-devtools] exported ${_} at ${p} (peer address ${n.address}${i?`, published to ${i}`:``})`),i&&e.connect(`shutdown`,()=>removeDevtoolsAddressFile(i))}return ae.add(t),t}const oe=[`AdwNavigationSplitView`,`GtkListBox`,`AdwOverlaySplitView`];function probeEnabled(){let e=l.getenv(`GJSIFY_STORYBOOK_PROBE`);if(e==null)return!1;let t=e.toLowerCase();return t!==``&&t!==`0`&&t!==`false`}function collectTypes(e,t){t.add(e.type);for(let n of e.children)collectTypes(n,t)}function installStorybookProbe(e,t,n={}){let r=n.requireChrome??oe,i=n.out??l.getenv(`GJSIFY_STORYBOOK_PROBE_OUT`)??void 0,a=n.timeoutMs??8e3,o=n.storyWidget??l.getenv(`GJSIFY_STORYBOOK_PROBE_STORY_WIDGET`)??void 0,s=t.controller.listStories(),c=[...new Set(s.map(e=>e.category))],u=n.story??l.getenv(`GJSIFY_STORYBOOK_PROBE_STORY`)??s[0]?.title,d=u?t.openStoryByTitle(u):!1,f=t.activeStory,p=new Set;collectTypes(dumpTree(t,60,`toplevel:0`),p);let m=r.filter(e=>!p.has(e)),h=new Set;f&&collectTypes(dumpTree(f,60,`story`),h);let g=h.size,_=o?h.has(o):null,finish=t=>{let n=JSON.stringify(t);if(t.ok)console.log(`STORYBOOK PROBE: PASS ${n}`);else{console.error(`STORYBOOK PROBE: FAIL ${n}`);try{typeof process<`u`&&(process.exitCode=1)}catch{}}if(i)try{l.file_set_contents(i,JSON.stringify(t,null,2))}catch{}e.quit()},v=0;l.timeout_add(l.PRIORITY_DEFAULT,100,()=>{v+=100;let e=captureWidgetPng(t),n=t.get_width()>0&&t.get_height()>0;if(!e&&!(v>=a))return l.SOURCE_CONTINUE;let i=f?captureWidgetPng(f):null,p=s.length>=1&&c.length>=1&&m.length===0&&d&&f!=null&&g>1,y;return s.length<1?y=`no stories registered`:c.length<1?y=`no categories`:m.length>0?y=`chrome missing: ${m.join(`, `)}`:!d||f==null?y=`could not open story: ${u??`(none)`}`:g<=1&&(y=`opened story rendered an empty subtree`),p&&o&&!h.has(o)&&(p=!1,y=`story widget ${o} not found in the opened story subtree`),p&&n&&(!e||e.length===0)&&(p=!1,y=`window realized (${t.get_width()}x${t.get_height()}) but the GSK capture was empty`),finish({ok:p,reason:y,stories:s.length,categories:c,opened:d,activeStory:f?f.meta.title:null,requiredChrome:r,missingChrome:m,storySubtreeWidgets:g,storyWidgetPresent:_,windowRealized:n,windowPngBytes:e?e.length:0,storyPngBytes:i?i.length:0}),l.SOURCE_REMOVE})}const se=e(import.meta.url);let ce;function load(){return ce===void 0&&(ce=se("@gjsify/node-gi/gi").requireGi(`Adw`,`1`)),ce}var T=new Proxy(Object.create(null),{get(e,t){return load()[t]},has(e,t){return t in load()}});const le={UNKNOWN:0,CUSTOM:1,GPL_2_0:2,GPL_3_0:3,LGPL_2_1:4,LGPL_3_0:5,BSD:6,MIT_X11:7,ARTISTIC:8,GPL_2_0_ONLY:9,GPL_3_0_ONLY:10,LGPL_2_1_ONLY:11,LGPL_3_0_ONLY:12,AGPL_3_0:13,AGPL_3_0_ONLY:14,BSD_3:15,APACHE_2_0:16,MPL_2_0:17,"0BSD":18};le.GPL_2_0_ONLY,le.GPL_3_0_ONLY,le.UNKNOWN;const ue=[`blue`,`teal`,`green`,`yellow`,`orange`,`red`,`pink`,`purple`,`slate`],de={blue:`#3584e4`,teal:`#2190a4`,green:`#3a944a`,yellow:`#c88800`,orange:`#ed5b00`,red:`#e62d42`,pink:`#d56199`,purple:`#9141ac`,slate:`#6f8396`};function parseHex(e){let t=/^#([0-9a-f]{6})$/i.exec(e.trim());if(!t)return null;let n=Number.parseInt(t[1],16);return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255]}function toHex(e,t,n){let channel=e=>Math.round(Math.min(1,Math.max(0,e))*255).toString(16).padStart(2,`0`);return`#${channel(e)}${channel(t)}${channel(n)}`}const toLinear=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4,fromLinear=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055;function linearToOklab(e,t,n){let r=Math.cbrt(.4122214708*e+.5363325363*t+.0514459929*n),i=Math.cbrt(.2119034982*e+.6806995451*t+.1073969566*n),a=Math.cbrt(.0883024619*e+.2817188376*t+.6299787005*n);return[.2104542553*r+.793617785*i-.0040720468*a,1.9779984951*r-2.428592205*i+.4505937099*a,.0259040371*r+.7827717662*i-.808675766*a]}function oklabToLinear(e,t,n){let r=(e+.3963377774*t+.2158037573*n)**3,i=(e-.1055613458*t-.0638541728*n)**3,a=(e-.0894841775*t-1.291485548*n)**3;return[4.0767416621*r-3.3077115913*i+.2309699292*a,-1.2684380046*r+2.6097574011*i-.3413193965*a,-.0041960863*r-.7034186147*i+1.707614701*a]}function adwaitaStandaloneColor(e,t){let n=parseHex(e);if(!n)return e;let[r,i,a]=linearToOklab(toLinear(n[0]),toLinear(n[1]),toLinear(n[2])),[o,s,c]=oklabToLinear(t?Math.max(r,.85):Math.min(r,.5),i,a);return toHex(fromLinear(o),fromLinear(s),fromLinear(c))}function adwaitaAccentBgColor(e){return de[e]}function adwaitaAccentColor(e,t){return adwaitaStandaloneColor(de[e],t)}Math.PI*.35,Math.PI*.015,Math.PI*.9;const fe=Math.PI*.9,pe=Math.PI*.7,me=Math.PI*1.1,he=Math.PI*1.35,ge=fe+me+he-pe;53*Math.PI*2/ge,me-pe/2,new Set(`ADC.AND.ASL.BCC.BCS.BEQ.BIT.BMI.BNE.BPL.BRK.BVC.BVS.CLC.CLD.CLI.CLV.CMP.CPX.CPY.DEC.DEX.DEY.EOR.INC.INX.INY.JMP.JSR.LDA.LDX.LDY.LSR.NOP.ORA.PHA.PHP.PLA.PLP.ROL.ROR.RTI.RTS.SBC.SEC.SED.SEI.STA.STX.STY.TAX.TAY.TSX.TXA.TXS.TYA`.split(`.`));const _e={system:`Follow system`,light:`Light`,dark:`Dark`},ve={blue:`Blue`,teal:`Teal`,green:`Green`,yellow:`Yellow`,orange:`Orange`,red:`Red`,pink:`Pink`,purple:`Purple`,slate:`Slate`};var StorybookAppearance=class{constructor(){this._provider=null,this._applying=!1,this._styleManager=T.StyleManager.get_default(),this.settings=new StorybookSettings(()=>this._styleManager.get_dark()),this.settings.subscribe(e=>this._apply(e)),this._styleManager.connect(`notify::dark`,()=>this.settings.systemChanged()),this._apply(this.settings.state)}_apply(e){if(!this._applying){this._applying=!0;try{this._styleManager.set_color_scheme(e.colorScheme===`light`?T.ColorScheme.FORCE_LIGHT:e.colorScheme===`dark`?T.ColorScheme.FORCE_DARK:T.ColorScheme.DEFAULT),this._applyAccent(this.settings.resolvedAccent)}finally{this._applying=!1}}}_applyAccent(e){let t=f.Display.get_default();if(!t)return;if(!this._provider){if(!e)return;this._provider=new h.CssProvider,h.StyleContext.add_provider_for_display(t,this._provider,h.STYLE_PROVIDER_PRIORITY_APPLICATION)}if(!e){this._provider.load_from_string(``);return}let n=adwaitaAccentBgColor(e),r=adwaitaAccentColor(e,this.settings.resolvedDark);this._provider.load_from_string(`:root { --accent-bg-color: ${n}; --accent-color: ${r}; }`)}};function buildSwatch(e,t,n){let r=new h.CheckButton({tooltip_text:t,halign:h.Align.CENTER,valign:h.Align.CENTER,focus_on_click:!1});for(let t of e)r.add_css_class(t);return r.update_property([h.AccessibleProperty.LABEL],[t]),n&&r.set_group(n),r}function buildSwatchCard(e=!1){let t=new T.WrapBox({align:.5,child_spacing:8,line_spacing:8,margin_top:12,margin_bottom:12,margin_start:12,margin_end:12}),n=new T.Bin({child:t,hexpand:!0});return n.add_css_class(`card`),e&&n.add_css_class(`storybook-card-attached`),{card:n,row:t}}function buildAppearanceDialog(e){let t=e.settings,n=new T.PreferencesPage,r=new T.PreferencesGroup({title:`Style`}),{card:i,row:o}=buildSwatchCard(),s=null,c=new Map;for(let e of a){let n=buildSwatch([`storybook-swatch`,`storybook-scheme-swatch`,`storybook-scheme-${e}`],_e[e],s);s??=n,n.set_active(t.colorScheme===e),n.connect(`toggled`,()=>{n.get_active()&&(t.colorScheme=e)}),c.set(e,n),o.append(n)}r.add(i),n.add(r);let l=new T.PreferencesGroup({title:`Accent colour`});l.add_css_class(`storybook-attached-group`);let u=new T.SwitchRow({title:`Use a custom accent colour`,subtitle:`Off follows the desktop, which owns the accent`,active:t.accentMode===`custom`});l.add(u);let{card:d,row:f}=buildSwatchCard(!0),p=null,m=new Map;for(let e of ue){let n=buildSwatch([`storybook-swatch`],ve[e],p);p??=n,n.set_active(t.accent===e);let r=new h.CssProvider;r.load_from_string(`checkbutton { background-color: ${adwaitaAccentBgColor(e)}; }`),n.get_style_context().add_provider(r,h.STYLE_PROVIDER_PRIORITY_APPLICATION),n.connect(`toggled`,()=>{n.get_active()&&(t.accent=e)}),m.set(e,n),f.append(n)}f.set_sensitive(t.accentMode===`custom`),u.connect(`notify::active`,()=>{t.accentMode=u.get_active()?`custom`:`system`}),l.add(d),n.add(l),t.subscribe(e=>{let t=c.get(e.colorScheme);t&&!t.get_active()&&t.set_active(!0);let n=m.get(e.accent);n&&!n.get_active()&&n.set_active(!0);let r=e.accentMode===`custom`;u.get_active()!==r&&u.set_active(r),f.set_sensitive(r)});let g=new T.PreferencesDialog({title:`Appearance`});return g.add(n),g}var ye=`<?xml version="1.0" encoding="UTF-8"?>
73
+ </node>`}const ee=e(import.meta.url);let b;function load$3(){return b===void 0&&(b=ee(`@gjsify/node-gi/gi`).requireGi(`Gio`,`2.0`)),b}__name(load$3,`load`);var x=new Proxy(Object.create(null),{get(e,t){return load$3()[t]},has(e,t){return t in load$3()}});function isWin32(){return l.DIR_SEPARATOR===92}function defaultListenAddress(){return isWin32()?`nonce-tcp:host=127.0.0.1`:`unix:tmpdir=${l.get_tmp_dir()}`}var DevtoolsPeerServerError=class extends Error{constructor(e,t,n,r){super(e),this.address=t,this.reason=n,this.name=`DevtoolsPeerServerError`,this.cause=r}};function isAddressInUse(e){return e instanceof l.Error&&e.matches(x.io_error_quark(),x.IOErrorEnum.ADDRESS_IN_USE)}function unixSocketPath(e){if(!e.startsWith(`unix:`))return null;for(let t of e.slice(5).split(`,`)){let e=t.indexOf(`=`);if(!(e<0||t.slice(0,e)!==`path`))try{return decodeURIComponent(t.slice(e+1))}catch{return null}}return null}function inspectExistingSocket(e){try{if((x.File.new_for_path(e).query_info(`unix::mode`,x.FileQueryInfoFlags.NONE,null).get_attribute_uint32(`unix::mode`)&61440)!=49152)return`not-a-socket`}catch{return`not-a-socket`}let t=new x.SocketClient;t.set_timeout(2);let n;try{n=t.connect(x.UnixSocketAddress.new(e),null)}catch{return`dead`}return n.close(null),`live`}function clearReclaimableSocket(e){let t=unixSocketPath(e);if(!t||!l.file_test(t,l.FileTest.EXISTS))return;let n=inspectExistingSocket(t);if(n===`live`)throw new DevtoolsPeerServerError(`cannot listen on ${e}: another process is already listening there. Stop it, or point ${y} (or options.address) at a different socket — GJSIFY_DEVTOOLS_INSTANCE=<label> lets two devtools-enabled apps run side by side.`,e,`address-in-use`);if(n===`not-a-socket`)throw new DevtoolsPeerServerError(`cannot listen on ${e}: ${t} already exists and is not a socket, so it will NOT be removed. Point ${y} (or options.address) at a free path.`,e,`occupied-by-other-file`);try{x.File.new_for_path(t).delete(null)}catch(n){throw new DevtoolsPeerServerError(`cannot listen on ${e}: ${t} is a socket nothing listens on, but removing it failed (${n}). Delete it by hand, or point ${y} at a free path.`,e,`address-in-use`,n)}console.log(`[gjsify-devtools] reclaimed the stale socket ${t}: nothing was listening on it (an abnormal exit — Ctrl-C, SIGKILL, a crash — leaves the inode behind).`)}function flagsForAddress(e){return e.startsWith(`tcp:`)||e.startsWith(`nonce-tcp:`)?x.DBusServerFlags.NONE:x.DBusServerFlags.AUTHENTICATION_REQUIRE_SAME_USER}function startDevtoolsPeerServer(e,t,n){let r=n&&n!==``?n:defaultListenAddress();clearReclaimableSocket(r);let i;try{i=x.DBusServer.new_sync(r,flagsForAddress(r),x.dbus_generate_guid(),null,null)}catch(e){let t=isAddressInUse(e);throw new DevtoolsPeerServerError(t?`cannot listen on ${r}: the address is already in use (${e}). Stop whatever holds it, or point ${y} (or options.address) at a different address.`:`cannot listen on ${r}: ${e}. Check the address form — \`unix:path=/tmp/app.sock\`, \`unix:tmpdir=/tmp\` or \`nonce-tcp:host=127.0.0.1\`.`,r,t?`address-in-use`:`listen-failed`,e)}let a=new Set;i.connect(`new-connection`,(n,r)=>(a.add(r),r.connect(`closed`,()=>{e.unexport(r),a.delete(r)}),e.export(r,t),!0)),i.start();let o=!1;return{address:i.get_client_address(),objectPath:t,get connectionCount(){return a.size},stop(){if(!o){o=!0,i.stop();for(let t of a)e.unexport(t),!t.is_closed()&&t.close(null,(e,t)=>{try{e.close_finish(t)}catch{}});a.clear()}}}}function writeDevtoolsAddressFile(e,t){try{if(l.mkdir_with_parents(l.path_get_dirname(e),448),!l.file_set_contents(e,`${t}\n`))return null}catch(t){return console.error(`[gjsify-devtools] could not publish the peer address to ${e}: ${t}`),null}try{x.File.new_for_path(e).set_attribute_uint32(`unix::mode`,384,x.FileQueryInfoFlags.NONE,null)}catch(t){console.error(`[gjsify-devtools] could not restrict ${e} to the current user: ${t}`)}return e}function removeDevtoolsAddressFile(e){try{x.File.new_for_path(e).delete(null)}catch{}}const te=e(import.meta.url);let ne;function load$2(){return ne===void 0&&(ne=te(`@gjsify/node-gi/gi`).requireGi(`Graphene`,`1.0`)),ne}__name(load$2,`load`);var re=new Proxy(Object.create(null),{get(e,t){return load$2()[t]},has(e,t){return t in load$2()}});function captureWidget(e){let t=e.get_native()?.get_renderer();if(!t)return{png:null,blocker:`no-renderer`};let n=e.get_width(),r=e.get_height();if(n<=0||r<=0)return{png:null,blocker:`zero-size`};let i=h.WidgetPaintable.new(e),a=h.Snapshot.new();i.snapshot(a,n,r);let o=a.to_node();if(!o)return{png:null,blocker:`empty-snapshot`};let s=new re.Rect;s.init(0,0,n,r);let c=t.render_texture(o,s).save_to_png_bytes().get_data();return c?{png:new Uint8Array(c)}:{png:null,blocker:`empty-png`}}function captureWidgetPng(e){return captureWidget(e).png}function dumpGSettings(e){let t=x.SettingsSchemaSource.get_default()?.lookup(e,!0);if(!t)throw Error(formatDbusErrorMessage(`not-found`,`GSettings schema '${e}' is not installed`));let n=new x.Settings({settings_schema:t}),r={};for(let e of t.list_keys())r[e]=n.get_value(e).recursiveUnpack();return r}const ie=e(import.meta.url);let S;function load$1(){return S===void 0&&(S=ie(`@gjsify/node-gi/gi`).requireGi(`GObject`,`2.0`)),S}__name(load$1,`load`);var C=new Proxy(Object.create(null),{get(e,t){return load$1()[t]},has(e,t){return t in load$1()}});function parseWidgetPath(e){let t=e.split(`/`).filter(e=>e.length>0);if(t.length===0)return null;let n=t[0].match(/^toplevel:(\d+)$/);if(!n)return null;let r=[];for(let e of t.slice(1)){let t=e.match(/^child:(\d+)$/);if(!t)return null;r.push(Number(t[1]))}return{toplevel:Number(n[1]),children:r}}function buildWidgetPath(e,t){return[`toplevel:${e}`,...t.map(e=>`child:${e}`)].join(`/`)}function widgetType(e){return gtypeName(e)??`GtkWidget`}function gtypeName(e){let t=e;return typeof t?.$typeName==`string`&&t.$typeName.length>0?t.$typeName:t?.constructor?.$gtype?.name??null}function widgetIsA(e,t){let n=gtypeName(e);if(n===null||!t)return!1;if(n===t)return!0;let r=C.type_from_name(n),i=C.type_from_name(t);return!r||!i?!1:C.type_is_a(r,i)}function activateWidget(e){let t=e;if(typeof t.activate==`function`&&t.activate()===!0)return!0;let n=typeof t.get_parent==`function`?t.get_parent():null;if(n&&widgetIsA(n,`GtkListBox`)){let t=n,r=!1;return typeof t.select_row==`function`&&(t.select_row(e),r=!0),typeof t.emit==`function`&&(t.emit(`row-activated`,e),r=!0),r}return!1}function sendKeyToWidget(e,t,n){let r=e.observe_controllers(),i=!1;for(let e=0;e<r.get_n_items();e++){let a=r.get_item(e);widgetIsA(a,`GtkEventControllerKey`)&&(a.emit(`key-pressed`,t,0,n),i=!0)}return i}function nthChild(e,t){let n=e.get_first_child(),r=0;for(;n&&r<t;)n=n.get_next_sibling(),r++;return r===t?n:null}function listToplevels(){let e=h.Window.get_toplevels(),t=e.get_n_items(),n=[];for(let r=0;r<t;r++){let t=e.get_item(r);t&&n.push({path:`toplevel:${r}`,type:widgetType(t),title:t.get_title?.()??null,mapped:t.get_mapped(),focused:t.is_active??!1})}return n}function resolveWidgetPath(e){let t=parseWidgetPath(e);if(!t)return null;let n=h.Window.get_toplevels().get_item(t.toplevel);if(!n)return null;for(let e of t.children)if(n=nthChild(n,e),!n)return null;return n}function parseWidgetSelector(e){let t=e.indexOf(`:`),n=(t<0?e:e.slice(0,t)).trim(),r=(t<0?``:e.slice(t+1)).trim();return!n&&!r?null:{type:n,cssClass:r}}function findWidgetPath(e,t,n){let r={path:null};return walkForSelector(e,t,n,r)??r.path}function walkForSelector(e,t,n,r){if(!e.get_visible()||!e.get_mapped())return null;if(!t.cssClass||e.get_css_classes().includes(t.cssClass)){if(!t.type||widgetType(e)===t.type)return n;r.path===null&&widgetIsA(e,t.type)&&(r.path=n)}let i=e.get_first_child(),a=0;for(;i;){let e=walkForSelector(i,t,`${n}/child:${a}`,r);if(e)return e;i=i.get_next_sibling(),a++}return null}function geometryOf(e){if(!e.get_mapped())return;let t=e.get_allocation(),n=t.width+e.get_margin_start()+e.get_margin_end(),r=t.height+e.get_margin_top()+e.get_margin_bottom(),[i,a]=e.measure(h.Orientation.HORIZONTAL,-1),o=n>0?Math.max(n,i):-1,[s,c]=e.measure(h.Orientation.VERTICAL,o),l={width:n,height:r,widthRequest:[i,a],heightRequest:[s,c]};return(n<i||r<s)&&(l.short=!0),l}function dumpTree(e,t,n){let r={path:n,type:widgetType(e),name:e.get_name()||null,cssClasses:e.get_css_classes(),mapped:e.get_mapped(),visible:e.get_visible(),children:[]},i=geometryOf(e);if(i!==void 0&&(r.geometry=i),t<=0)return e.get_first_child()&&(r.truncated=!0),r;let a=e.get_first_child(),o=0;for(;a;)r.children.push(dumpTree(a,t-1,`${n}/child:${o}`)),a=a.get_next_sibling(),o++;return r}function jsonSafe(e){let t=typeof e;return e==null||t===`string`||t===`number`||t===`boolean`?e??null:`[${t}]`}function getWidgetProperty(e,t){let n=e,r=t.replace(/-/g,`_`),i=t.replace(/[-_]([a-z])/g,(e,t)=>t.toUpperCase());for(let e of[t,r,i])if(e in n)return jsonSafe(n[e])}function childIndex(e,t){let n=e.get_first_child(),r=0;for(;n;){if(n===t)return r;n=n.get_next_sibling(),r++}return-1}function pathOfWidget(e){let t=[],n=e,r=n.get_parent();for(;r;){let e=childIndex(r,n);if(e<0)return null;t.unshift(e),n=r,r=n.get_parent()}let i=h.Window.get_toplevels(),a=i.get_n_items();for(let e=0;e<a;e++)if(i.get_item(e)===n)return buildWidgetPath(e,t);return null}function isActiveWindowScope(e){return!e||e===`window`||e===`active`}function frameDelay(e){return new Promise(t=>{l.timeout_add(l.PRIORITY_DEFAULT,e,()=>(t(),l.SOURCE_REMOVE))})}async function captureWidgetWhenRenderable(e,t=12,n=50){let r=null;for(let i=0;i<t;i++){let t=captureWidget(e);if(t.png)return{png:t.png,blocker:null};r=t.blocker,await frameDelay(n)}let i=captureWidget(e);return{png:i.png,blocker:i.png?null:i.blocker??r}}var DevtoolsService=class{constructor(e,t){this._app=e,this._options=t,this._exported=new Map,this._peer=null,this._addressFile=null,this._kinds=new Map,this._extensions=t.extend??[];for(let[e,t]of Object.entries(v))this._kinds.set(e,t);for(let e of this._extensions){for(let[t,n]of Object.entries(e.methodKinds))this._kinds.set(t,n);for(let[t,n]of Object.entries(e.handlers)){let e=n;this[t]=(...n)=>(this._guard(t),e(...n))}}}export(e,t){if(this._exported.has(e))return;let n=buildDevtoolsIfaceXml(this._extensions.flatMap(e=>e.methodsXml??[])),r=x.DBusExportedObject.wrapJSObject(n,this);r.export(e,t),this._exported.set(e,r)}unexport(e){if(e){this._exported.get(e)?.unexport(),this._exported.delete(e);return}for(let e of this._exported.values())e.unexport();this._exported.clear(),this._peer?.stop(),this._peer=null,this._addressFile&&=(removeDevtoolsAddressFile(this._addressFile),null)}attachPeerServer(e,t){this._peer=e,this._addressFile=t??null}get peerAddress(){return this._peer?.address??null}get addressFile(){return this._addressFile}GetStatus(){let e=this._app.get_active_window(),t={appId:this._app.get_application_id()??`unknown`,instance:this._options.instance??`default`,activeWindow:e?{id:e.get_name()||`window`,title:e.get_title()??``,mapped:e.get_mapped()}:null,toplevelCount:h.Window.get_toplevels().get_n_items(),focusedWidget:null,paused:this._isPaused()};for(let e of this._extensions){let n=e.contributeStatus?.();n&&Object.assign(t,n)}return JSON.stringify(t)}async ScreenshotAsync(e,t){try{let n=typeof e?.[0]==`string`?e[0]:``,r=await this._captureScopePng(n);t.return_value(new l.Variant(`(ay)`,[r]))}catch(e){t.return_dbus_error(`org.gjsify.Devtools.Error.Screenshot`,e instanceof Error?e.message:String(e))}}async _captureScopePng(e){let t=this._resolveRootWidget(e);if(!t){if(isActiveWindowScope(e))return new Uint8Array;throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`))}let n=captureWidget(t.widget);if(n.png)return n.png;let r=t.widget.get_root();r instanceof h.Window&&r.present();let i=await captureWidgetWhenRenderable(t.widget);return i.png?i.png:(console.warn(`[devtools] Screenshot('${e}') has no image: ${i.blocker??`unknown`} after 12 tries. Empty bytes follow.`),new Uint8Array)}ListActions(){let e={app:describeActions(this._actionGroup(`app`)),win:describeActions(this._actionGroup(`win`))};return JSON.stringify(e)}ActivateAction(e,t,n){this._guard(`ActivateAction`);let r=this._scope(e);activateAction(this._requireGroup(r,t),t,this._parseValue(n))}ChangeActionState(e,t,n){this._guard(`ChangeActionState`);let r=this._scope(e);changeActionState(this._requireGroup(r,t),t,this._parseValue(n))}PresentWindow(){this._app.get_active_window()?.present()}ResizeWindow(e,t){this._guard(`ResizeWindow`);let n=this._app.get_active_window();if(!n)throw Error(formatDbusErrorMessage(`unavailable`,`no active window to resize`));let r=Math.max(1,Math.round(e)),i=Math.max(1,Math.round(t));return n.is_maximized()&&n.unmaximize(),n.is_fullscreen()&&n.unfullscreen(),n.set_default_size(r,i),[r,i]}ListToplevels(){return JSON.stringify(listToplevels())}DumpTree(e,t){let n=this._resolveRootWidget(e);if(!n)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e||`active window`}'`));return JSON.stringify(dumpTree(n.widget,t>0?t:40,n.path))}GetProperty(e,t){let n=this._resolveRootWidget(e);if(!n)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`));let r=getWidgetProperty(n.widget,t);if(r===void 0)throw Error(formatDbusErrorMessage(`not-found`,`widget has no property '${t}'`));return JSON.stringify(r)}GetFocused(){let e=this._app.get_active_window(),t=e?e.get_focus():null;return JSON.stringify(t?{path:pathOfWidget(t),name:t.get_name()||null,type:widgetType(t)}:null)}ActivateWidget(e){this._guard(`ActivateWidget`);let t=this._resolveRootWidget(e);if(!t)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${e}'`));return activateWidget(t.widget)}FindWidget(e){let t=parseWidgetSelector(e);if(!t)throw Error(formatDbusErrorMessage(`invalid-params`,`empty selector '${e}'`));let n=this._resolveRootWidget(``);return n?findWidgetPath(n.widget,t,n.path)??``:``}SendKey(e,t){this._guard(`SendKey`);let[n,r,i]=h.accelerator_parse(e);if(!n)throw Error(formatDbusErrorMessage(`invalid-params`,`cannot parse accelerator '${e}'`));let a;if(a=t?this._resolveRootWidget(t)?.widget??null:this._app.get_active_window()?.get_focus()??null,!a)throw Error(formatDbusErrorMessage(`not-found`,`no widget at '${t||`focus`}'`));return sendKeyToWidget(a,r,i??0)}DumpGSettings(e){return JSON.stringify(dumpGSettings(e))}DumpCss(){return JSON.stringify(dumpCss())}SwapCss(e,t){return this._guard(`SwapCss`),swapCss(e,t)}_resolveRootWidget(e){if(isActiveWindowScope(e)){let e=this._app.get_active_window();return e?{widget:e,path:pathOfWidget(e)??`toplevel:0`}:null}let t=resolveWidgetPath(e);return t?{widget:t,path:e}:null}_isPaused(){return this._options.paused?.()??!1}_guard(e){let t=this._kinds.get(e);if(!t)throw Error(formatDbusErrorMessage(`internal`,`unclassified devtools method '${e}'`));if(t===`mutating`&&this._isPaused())throw Error(formatDbusErrorMessage(`paused`,`${e} rejected — external control is paused. Read-only methods keep working.`))}_scope(e){return e===`app`?`app`:`win`}_actionGroup(e){if(e===`app`)return this._app;if(this._options.winActionGroup)return this._options.winActionGroup;let t=this._app.get_active_window();return t instanceof h.ApplicationWindow?t:null}_requireGroup(e,t){let n=this._actionGroup(e);if(!n)throw Error(formatDbusErrorMessage(`unavailable`,`no '${e}' action group`));if(!n.has_action(t))throw Error(formatDbusErrorMessage(`not-found`,`unknown action ${e}.${t}`));return n}_parseValue(e){if(!e||e===`null`)return null;try{return JSON.parse(e)}catch{throw Error(formatDbusErrorMessage(`invalid-params`,`value_json is not valid JSON: ${e}`))}}};const w=`DBUS_SESSION_BUS_ADDRESS`,ae=new Set;function envEnabled(){return isDevtoolsEnabledValue(l.getenv(`GJSIFY_DEVTOOLS`))}function envValue(e){let t=l.getenv(e);return t&&t!==``?t:null}function sessionBusUsable(){if(!envValue(w))return!1;try{return x.bus_get_sync(x.BusType.SESSION,null),!0}catch{return!1}}function chooseDevtoolsTransport(e){return e.requestedAddress?{kind:`peer`,address:e.requestedAddress,reason:`requested`}:e.hasAppConnection?{kind:`session-bus`}:e.sessionBusUsable?{kind:`unregistered`}:{kind:`peer`,address:null,reason:`no-session-bus`}}function describeMissingConnection(e,t){return e?t?`[gjsify-devtools] the session bus answers but this application is not registered on it yet — call installDevtools() from the GtkApplication "startup" handler (the bus connection and object path exist only after registration).`:`[gjsify-devtools] ${w} is set (${e}) but no bus answers there — using the bus-less peer transport instead. On macOS this is the usual state: Homebrew's dbus listens on launchd, so the advertised address only works while that socket is live.`:`[gjsify-devtools] this machine has no session bus (${w} is unset) — using the bus-less peer transport instead. Point the bridge at the address below, or set ${y} on both the app and \`gjsify debug\` to pin it yourself.`}function installDevtools(e,t={}){if(!(t.enabled??envEnabled()))return null;let n=t.instance??envValue(`GJSIFY_DEVTOOLS_INSTANCE`)??void 0,r=new DevtoolsService(e,{...t,instance:n});try{return exportDevtools(e,r,t,n)}catch(e){return r.unexport(),console.error(`[gjsify-devtools] devtools stayed OFF, the app is unaffected — ${describeInstallFailure(e)}`),null}}function describeInstallFailure(e){return e instanceof DevtoolsPeerServerError||e instanceof Error?e.message:String(e)}function exportDevtools(e,t,n,r){let i=e.get_is_registered(),a=i?e.get_dbus_connection():null,o=i?e.get_dbus_object_path():null,s=envValue(w),c=!!(a&&o),u=c||sessionBusUsable(),d=chooseDevtoolsTransport({requestedAddress:n.address??envValue(y),hasAppConnection:c,sessionBusUsable:u}),f=e.get_application_id()??`unknown`,p=`${o??appIdToObjectPath(f)}/devtools`;if((d.kind===`unregistered`||d.kind===`peer`&&d.reason===`no-session-bus`)&&console.error(describeMissingConnection(s,u)),d.kind===`session-bus`&&a)t.export(a,p),console.log(`[gjsify-devtools] exported ${_} at ${p} (dest ${f})`);else if(d.kind===`peer`){let n=startDevtoolsPeerServer(t,p,d.address??void 0),i=writeDevtoolsAddressFile(devtoolsAddressFilePath(l.get_user_runtime_dir(),f,r),n.address);t.attachPeerServer(n,i),console.log(`[gjsify-devtools] exported ${_} at ${p} (peer address ${n.address}${i?`, published to ${i}`:``})`),i&&e.connect(`shutdown`,()=>removeDevtoolsAddressFile(i))}return ae.add(t),t}const oe=`&(?![a-zA-Z][a-zA-Z0-9]*;|#\\d+;|#x[0-9a-fA-F]+;)|<(?![a-zA-Z/!?])`;RegExp(oe),RegExp(oe,`g`);const se=[`AdwNavigationSplitView`,`GtkListBox`,`AdwOverlaySplitView`];function probeEnabled(){let e=l.getenv(`GJSIFY_STORYBOOK_PROBE`);if(e==null)return!1;let t=e.toLowerCase();return t!==``&&t!==`0`&&t!==`false`}function collectTypes(e,t){t.add(e.type);for(let n of e.children)collectTypes(n,t)}function installStorybookProbe(e,t,n={}){let r=n.requireChrome??se,i=n.out??l.getenv(`GJSIFY_STORYBOOK_PROBE_OUT`)??void 0,a=n.timeoutMs??8e3,o=n.storyWidget??l.getenv(`GJSIFY_STORYBOOK_PROBE_STORY_WIDGET`)??void 0,s=t.controller.listStories(),c=[...new Set(s.map(e=>e.category))],u=n.story??l.getenv(`GJSIFY_STORYBOOK_PROBE_STORY`)??s[0]?.title,d=u?t.openStoryByTitle(u):!1,f=t.activeStory,p=new Set;collectTypes(dumpTree(t,60,`toplevel:0`),p);let m=r.filter(e=>!p.has(e)),h=new Set;f&&collectTypes(dumpTree(f,60,`story`),h);let g=h.size,_=o?h.has(o):null,finish=t=>{let n=JSON.stringify(t);if(t.ok)console.log(`STORYBOOK PROBE: PASS ${n}`);else{console.error(`STORYBOOK PROBE: FAIL ${n}`);try{typeof process<`u`&&(process.exitCode=1)}catch{}}if(i)try{l.file_set_contents(i,JSON.stringify(t,null,2))}catch{}e.quit()},v=0;l.timeout_add(l.PRIORITY_DEFAULT,100,()=>{v+=100;let e=captureWidgetPng(t),n=t.get_width()>0&&t.get_height()>0;if(!e&&!(v>=a))return l.SOURCE_CONTINUE;let i=f?captureWidgetPng(f):null,p=s.length>=1&&c.length>=1&&m.length===0&&d&&f!=null&&g>1,y;return s.length<1?y=`no stories registered`:c.length<1?y=`no categories`:m.length>0?y=`chrome missing: ${m.join(`, `)}`:!d||f==null?y=`could not open story: ${u??`(none)`}`:g<=1&&(y=`opened story rendered an empty subtree`),p&&o&&!h.has(o)&&(p=!1,y=`story widget ${o} not found in the opened story subtree`),p&&n&&(!e||e.length===0)&&(p=!1,y=`window realized (${t.get_width()}x${t.get_height()}) but the GSK capture was empty`),finish({ok:p,reason:y,stories:s.length,categories:c,opened:d,activeStory:f?f.meta.title:null,requiredChrome:r,missingChrome:m,storySubtreeWidgets:g,storyWidgetPresent:_,windowRealized:n,windowPngBytes:e?e.length:0,storyPngBytes:i?i.length:0}),l.SOURCE_REMOVE})}const ce=e(import.meta.url);let le;function load(){return le===void 0&&(le=ce("@gjsify/node-gi/gi").requireGi(`Adw`,`1`)),le}var T=new Proxy(Object.create(null),{get(e,t){return load()[t]},has(e,t){return t in load()}});const ue={UNKNOWN:0,CUSTOM:1,GPL_2_0:2,GPL_3_0:3,LGPL_2_1:4,LGPL_3_0:5,BSD:6,MIT_X11:7,ARTISTIC:8,GPL_2_0_ONLY:9,GPL_3_0_ONLY:10,LGPL_2_1_ONLY:11,LGPL_3_0_ONLY:12,AGPL_3_0:13,AGPL_3_0_ONLY:14,BSD_3:15,APACHE_2_0:16,MPL_2_0:17,"0BSD":18};ue.GPL_2_0_ONLY,ue.GPL_3_0_ONLY,ue.UNKNOWN;const de=[`blue`,`teal`,`green`,`yellow`,`orange`,`red`,`pink`,`purple`,`slate`],fe={blue:`#3584e4`,teal:`#2190a4`,green:`#3a944a`,yellow:`#c88800`,orange:`#ed5b00`,red:`#e62d42`,pink:`#d56199`,purple:`#9141ac`,slate:`#6f8396`};function parseHex(e){let t=/^#([0-9a-f]{6})$/i.exec(e.trim());if(!t)return null;let n=Number.parseInt(t[1],16);return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255]}function toHex(e,t,n){let channel=e=>Math.round(Math.min(1,Math.max(0,e))*255).toString(16).padStart(2,`0`);return`#${channel(e)}${channel(t)}${channel(n)}`}const toLinear=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4,fromLinear=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055;function linearToOklab(e,t,n){let r=Math.cbrt(.4122214708*e+.5363325363*t+.0514459929*n),i=Math.cbrt(.2119034982*e+.6806995451*t+.1073969566*n),a=Math.cbrt(.0883024619*e+.2817188376*t+.6299787005*n);return[.2104542553*r+.793617785*i-.0040720468*a,1.9779984951*r-2.428592205*i+.4505937099*a,.0259040371*r+.7827717662*i-.808675766*a]}function oklabToLinear(e,t,n){let r=(e+.3963377774*t+.2158037573*n)**3,i=(e-.1055613458*t-.0638541728*n)**3,a=(e-.0894841775*t-1.291485548*n)**3;return[4.0767416621*r-3.3077115913*i+.2309699292*a,-1.2684380046*r+2.6097574011*i-.3413193965*a,-.0041960863*r-.7034186147*i+1.707614701*a]}function adwaitaStandaloneColor(e,t){let n=parseHex(e);if(!n)return e;let[r,i,a]=linearToOklab(toLinear(n[0]),toLinear(n[1]),toLinear(n[2])),[o,s,c]=oklabToLinear(t?Math.max(r,.85):Math.min(r,.5),i,a);return toHex(fromLinear(o),fromLinear(s),fromLinear(c))}function adwaitaAccentBgColor(e){return fe[e]}function adwaitaAccentColor(e,t){return adwaitaStandaloneColor(fe[e],t)}Math.PI*.35,Math.PI*.015,Math.PI*.9;const pe=Math.PI*.9,me=Math.PI*.7,he=Math.PI*1.1,ge=Math.PI*1.35,_e=pe+he+ge-me;53*Math.PI*2/_e,he-me/2,new Set(`ADC.AND.ASL.BCC.BCS.BEQ.BIT.BMI.BNE.BPL.BRK.BVC.BVS.CLC.CLD.CLI.CLV.CMP.CPX.CPY.DEC.DEX.DEY.EOR.INC.INX.INY.JMP.JSR.LDA.LDX.LDY.LSR.NOP.ORA.PHA.PHP.PLA.PLP.ROL.ROR.RTI.RTS.SBC.SEC.SED.SEI.STA.STX.STY.TAX.TAY.TSX.TXA.TXS.TYA`.split(`.`));const ve={system:`Follow system`,light:`Light`,dark:`Dark`},ye={blue:`Blue`,teal:`Teal`,green:`Green`,yellow:`Yellow`,orange:`Orange`,red:`Red`,pink:`Pink`,purple:`Purple`,slate:`Slate`};var StorybookAppearance=class{constructor(){this._provider=null,this._applying=!1,this._styleManager=T.StyleManager.get_default(),this.settings=new StorybookSettings(()=>this._styleManager.get_dark()),this.settings.subscribe(e=>this._apply(e)),this._styleManager.connect(`notify::dark`,()=>this.settings.systemChanged()),this._apply(this.settings.state)}_apply(e){if(!this._applying){this._applying=!0;try{this._styleManager.set_color_scheme(e.colorScheme===`light`?T.ColorScheme.FORCE_LIGHT:e.colorScheme===`dark`?T.ColorScheme.FORCE_DARK:T.ColorScheme.DEFAULT),this._applyAccent(this.settings.resolvedAccent)}finally{this._applying=!1}}}_applyAccent(e){let t=f.Display.get_default();if(!t)return;if(!this._provider){if(!e)return;this._provider=new h.CssProvider,h.StyleContext.add_provider_for_display(t,this._provider,h.STYLE_PROVIDER_PRIORITY_APPLICATION)}if(!e){this._provider.load_from_string(``);return}let n=adwaitaAccentBgColor(e),r=adwaitaAccentColor(e,this.settings.resolvedDark);this._provider.load_from_string(`:root { --accent-bg-color: ${n}; --accent-color: ${r}; }`)}};function buildSwatch(e,t,n){let r=new h.CheckButton({tooltip_text:t,halign:h.Align.CENTER,valign:h.Align.CENTER,focus_on_click:!1});for(let t of e)r.add_css_class(t);return r.update_property([h.AccessibleProperty.LABEL],[t]),n&&r.set_group(n),r}function buildSwatchCard(e=!1){let t=new T.WrapBox({align:.5,child_spacing:8,line_spacing:8,margin_top:12,margin_bottom:12,margin_start:12,margin_end:12}),n=new T.Bin({child:t,hexpand:!0});return n.add_css_class(`card`),e&&n.add_css_class(`storybook-card-attached`),{card:n,row:t}}function buildAppearanceDialog(e){let t=e.settings,n=new T.PreferencesPage,r=new T.PreferencesGroup({title:`Style`}),{card:i,row:o}=buildSwatchCard(),s=null,c=new Map;for(let e of a){let n=buildSwatch([`storybook-swatch`,`storybook-scheme-swatch`,`storybook-scheme-${e}`],ve[e],s);s??=n,n.set_active(t.colorScheme===e),n.connect(`toggled`,()=>{n.get_active()&&(t.colorScheme=e)}),c.set(e,n),o.append(n)}r.add(i),n.add(r);let l=new T.PreferencesGroup({title:`Accent colour`});l.add_css_class(`storybook-attached-group`);let u=new T.SwitchRow({title:`Use a custom accent colour`,subtitle:`Off follows the desktop, which owns the accent`,active:t.accentMode===`custom`});l.add(u);let{card:d,row:f}=buildSwatchCard(!0),p=null,m=new Map;for(let e of de){let n=buildSwatch([`storybook-swatch`],ye[e],p);p??=n,n.set_active(t.accent===e);let r=new h.CssProvider;r.load_from_string(`checkbutton { background-color: ${adwaitaAccentBgColor(e)}; }`),n.get_style_context().add_provider(r,h.STYLE_PROVIDER_PRIORITY_APPLICATION),n.connect(`toggled`,()=>{n.get_active()&&(t.accent=e)}),m.set(e,n),f.append(n)}f.set_sensitive(t.accentMode===`custom`),u.connect(`notify::active`,()=>{t.accentMode=u.get_active()?`custom`:`system`}),l.add(d),n.add(l),t.subscribe(e=>{let t=c.get(e.colorScheme);t&&!t.get_active()&&t.set_active(!0);let n=m.get(e.accent);n&&!n.get_active()&&n.set_active(!0);let r=e.accentMode===`custom`;u.get_active()!==r&&u.set_active(r),f.set_sensitive(r)});let g=new T.PreferencesDialog({title:`Appearance`});return g.add(n),g}function adwControlWidgetFactory(){return{text(e,t){let n=new T.EntryRow({title:e});t&&n.set_tooltip_text(t);let r=null;return n.connect(`changed`,()=>r?.(n.get_text())),{node:n,get:()=>n.get_text(),set:e=>n.set_text(e),onChange:e=>{r=e}}},boolean(e,t){let n=new T.SwitchRow({title:e,subtitle:t??``}),r=null;return n.connect(`notify::active`,()=>r?.(n.get_active())),{node:n,get:()=>n.get_active(),set:e=>n.set_active(e),onChange:e=>{r=e}}},number(e){let t=T.SpinRow.new_with_range(e.min??0,e.max??100,e.step??1);t.set_title(e.label||e.name),e.description&&t.set_subtitle(e.description);let n=null;return t.connect(`changed`,()=>n?.(t.get_value())),{node:t,get:()=>t.get_value(),set:e=>t.set_value(e),onChange:e=>{n=e}}},range(e){return buildRangeWidget(e)},select(e){return buildSelectWidget(e)},color(e,t){return buildColorWidget(e,t)}}}function buildRangeWidget(e){let t=e.min??0,n=e.max??100,r=e.step??1,i=typeof e.min==`number`?e.min:0,a=Number.isInteger(r)&&Number.isInteger(i),o=new h.Adjustment({lower:t,upper:n,step_increment:r,value:i});o.step_increment=r;let s=new h.ListBoxRow({selectable:!1,activatable:!1});s.add_css_class(`story-range-row`);let c=new h.Box({orientation:h.Orientation.VERTICAL,spacing:6,margin_top:12,margin_bottom:12,margin_start:12,margin_end:12}),l=new h.Box({orientation:h.Orientation.HORIZONTAL,spacing:12}),u=new h.Label({label:e.label||e.name,halign:h.Align.START,hexpand:!0,ellipsize:3});u.add_css_class(`heading`);let formatValue=e=>a?String(Math.round(e)):e.toFixed(2),d=new h.Label({label:formatValue(i),halign:h.Align.END});if(d.add_css_class(`numeric`),d.add_css_class(`dim-label`),l.append(u),l.append(d),c.append(l),e.description){let t=new h.Label({label:e.description,halign:h.Align.START,xalign:0,wrap:!0,max_width_chars:32});t.add_css_class(`caption`),t.add_css_class(`dim-label`),c.append(t)}let f=new h.Scale({orientation:h.Orientation.HORIZONTAL,adjustment:o,draw_value:!1,hexpand:!0}),p=null,m=!1;return f.connect(`value-changed`,()=>{if(m)return;let e=f.get_value();if(a){let t=Math.round(e);if(t!==e){f.set_value(t);return}e=t}d.set_label(formatValue(e)),p?.(e)}),c.append(f),s.set_child(c),{node:s,get:()=>f.get_value(),set:e=>{m=!0,f.set_value(e),m=!1,d.set_label(formatValue(e))},onChange:e=>{p=e}}}function buildSelectWidget(e){let t=e.options??[],n=h.StringList.new(t.map(e=>e.label)),r=new T.ComboRow({title:e.label||e.name,subtitle:e.description??``,model:n}),i=null;return r.connect(`notify::selected`,()=>i?.(r.get_selected())),{node:r,get:()=>r.get_selected(),set:e=>r.set_selected(e),onChange:e=>{i=e}}}function buildColorWidget(e,t){let n=new T.ActionRow({title:e,subtitle:t??``}),r=new h.ColorDialogButton({dialog:new h.ColorDialog({title:e}),valign:h.Align.CENTER});n.add_suffix(r),n.set_activatable_widget(r);let channel=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,`0`),rgbaToHex=e=>`#${channel(e.red)}${channel(e.green)}${channel(e.blue)}`,i=null,a=!1;return r.connect(`notify::rgba`,()=>{a||i?.(rgbaToHex(r.get_rgba()))}),{node:n,get:()=>rgbaToHex(r.get_rgba()),set:e=>{let t=new f.RGBA;t.parse(e)&&(a=!0,r.set_rgba(t),a=!1)},onChange:e=>{i=e}}}var be=class StorybookWindow extends T.ApplicationWindow{static{C.registerClass({GTypeName:`StorybookWindow`,Template:`<?xml version="1.0" encoding="UTF-8"?>
74
74
  <!--
75
75
  DO NOT EDIT!
76
76
  This file was @generated by blueprint-compiler. Instead, edit the
@@ -210,7 +210,7 @@ corresponding .blp file and regenerate this file with blueprint-compiler.
210
210
  </child>
211
211
  </template>
212
212
  </interface>
213
- `;function adwControlWidgetFactory(){return{text(e,t){let n=new T.EntryRow({title:e});t&&n.set_tooltip_text(t);let r=null;return n.connect(`changed`,()=>r?.(n.get_text())),{node:n,get:()=>n.get_text(),set:e=>n.set_text(e),onChange:e=>{r=e}}},boolean(e,t){let n=new T.SwitchRow({title:e,subtitle:t??``}),r=null;return n.connect(`notify::active`,()=>r?.(n.get_active())),{node:n,get:()=>n.get_active(),set:e=>n.set_active(e),onChange:e=>{r=e}}},number(e){let t=T.SpinRow.new_with_range(e.min??0,e.max??100,e.step??1);t.set_title(e.label||e.name),e.description&&t.set_subtitle(e.description);let n=null;return t.connect(`changed`,()=>n?.(t.get_value())),{node:t,get:()=>t.get_value(),set:e=>t.set_value(e),onChange:e=>{n=e}}},range(e){return buildRangeWidget(e)},select(e){return buildSelectWidget(e)},color(e,t){return buildColorWidget(e,t)}}}function buildRangeWidget(e){let t=e.min??0,n=e.max??100,r=e.step??1,i=typeof e.min==`number`?e.min:0,a=Number.isInteger(r)&&Number.isInteger(i),o=new h.Adjustment({lower:t,upper:n,step_increment:r,value:i});o.step_increment=r;let s=new h.ListBoxRow({selectable:!1,activatable:!1});s.add_css_class(`story-range-row`);let c=new h.Box({orientation:h.Orientation.VERTICAL,spacing:6,margin_top:12,margin_bottom:12,margin_start:12,margin_end:12}),l=new h.Box({orientation:h.Orientation.HORIZONTAL,spacing:12}),u=new h.Label({label:e.label||e.name,halign:h.Align.START,hexpand:!0,ellipsize:3});u.add_css_class(`heading`);let formatValue=e=>a?String(Math.round(e)):e.toFixed(2),d=new h.Label({label:formatValue(i),halign:h.Align.END});if(d.add_css_class(`numeric`),d.add_css_class(`dim-label`),l.append(u),l.append(d),c.append(l),e.description){let t=new h.Label({label:e.description,halign:h.Align.START,xalign:0,wrap:!0,max_width_chars:32});t.add_css_class(`caption`),t.add_css_class(`dim-label`),c.append(t)}let f=new h.Scale({orientation:h.Orientation.HORIZONTAL,adjustment:o,draw_value:!1,hexpand:!0}),p=null,m=!1;return f.connect(`value-changed`,()=>{if(m)return;let e=f.get_value();if(a){let t=Math.round(e);if(t!==e){f.set_value(t);return}e=t}d.set_label(formatValue(e)),p?.(e)}),c.append(f),s.set_child(c),{node:s,get:()=>f.get_value(),set:e=>{m=!0,f.set_value(e),m=!1,d.set_label(formatValue(e))},onChange:e=>{p=e}}}function buildSelectWidget(e){let t=e.options??[],n=h.StringList.new(t.map(e=>e.label)),r=new T.ComboRow({title:e.label||e.name,subtitle:e.description??``,model:n}),i=null;return r.connect(`notify::selected`,()=>i?.(r.get_selected())),{node:r,get:()=>r.get_selected(),set:e=>r.set_selected(e),onChange:e=>{i=e}}}function buildColorWidget(e,t){let n=new T.ActionRow({title:e,subtitle:t??``}),r=new h.ColorDialogButton({dialog:new h.ColorDialog({title:e}),valign:h.Align.CENTER});n.add_suffix(r),n.set_activatable_widget(r);let channel=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,`0`),rgbaToHex=e=>`#${channel(e.red)}${channel(e.green)}${channel(e.blue)}`,i=null,a=!1;return r.connect(`notify::rgba`,()=>{a||i?.(rgbaToHex(r.get_rgba()))}),{node:n,get:()=>rgbaToHex(r.get_rgba()),set:e=>{let t=new f.RGBA;t.parse(e)&&(a=!0,r.set_rgba(t),a=!1)},onChange:e=>{i=e}}}var be=class StorybookWindow extends T.ApplicationWindow{static{C.registerClass({GTypeName:`StorybookWindow`,Template:ye,InternalChildren:[`sidebar_list`,`content_area`,`control_panel`,`preview_title`,`show_controls_button`,`controls_split_view`,`main_split_view`]},StorybookWindow)}constructor(e){super(e),this._appearance=new StorybookAppearance,this._controlRows=[],this._rowByTitle=new Map,this._onSelect=null,this._suppressSelect=!1,this._controller=new StorybookController(this,e=>this._buildControls(e))}_onRowSelected(e,t){if(this._suppressSelect||!t)return;let n=t;n.storyWidget&&this._onSelect?.(n.storyWidget)}get controller(){return this._controller}_buildControls(e){let t=e.meta.controls;if(!Array.isArray(t))return[];let n=adwControlWidgetFactory(),r=[];for(let i of t){if(!i?.name||!i?.type){console.warn(`Invalid control configuration:`,i);continue}let t=bindControl(e,i,n);t&&r.push(t)}return r}_onAppearanceClicked(){buildAppearanceDialog(this._appearance).present(this)}_onToggleControls(e){this._controls_split_view.set_show_sidebar(e.get_active())}populateSidebar(e){this._controller.mount(e,!0)}renderSidebar(e,t){this._onSelect=t,this._suppressSelect=!0,this._clearSidebar(),this._rowByTitle.clear();for(let t of e){this._addCategoryToSidebar(t.category);for(let{instance:e,name:n}of t.stories)this._addStoryToSidebar(e,n)}this._suppressSelect=!1}markSelected(e){let t=this._rowByTitle.get(e);t&&this._sidebar_list.get_selected_row()!==t&&(this._suppressSelect=!0,this._sidebar_list.select_row(t),this._suppressSelect=!1)}setPreviewTitle(e){this._preview_title.set_title(e)}showPreview(e){this._content_area.set_child(e),this._main_split_view.get_collapsed()&&this._main_split_view.set_show_content(!0)}renderControls(e){this._clearControlPanel();for(let t of e){let e=t.view;e instanceof T.PreferencesRow&&e.set_use_markup(!1),this._control_panel.add(e),this._controlRows.push(e)}this._show_controls_button.set_active(!0)}_clearSidebar(){let e=this._sidebar_list.get_first_child();for(;e;){let t=e.get_next_sibling();e.unparent(),e=t}}_addCategoryToSidebar(e){let t=new h.ListBoxRow({selectable:!1}),n=new h.Label({label:e,halign:h.Align.START,margin_top:10,margin_bottom:4,margin_start:12,margin_end:12});n.add_css_class(`heading`),n.add_css_class(`dim-label`),t.set_child(n),this._sidebar_list.append(t)}_addStoryToSidebar(e,t){let n=new h.ListBoxRow,r=new h.Label({label:t||`Unnamed Story`,halign:h.Align.START,margin_start:20,margin_top:6,margin_bottom:6});n.set_child(r),this._sidebar_list.append(n),n.storyWidget=e,this._rowByTitle.set(e.meta.title,n)}_clearControlPanel(){for(let e of this._controlRows)this._control_panel.remove(e);this._controlRows=[]}get activeStory(){return this._controller.activeStory}openStoryByTitle(e){return this._controller.openStoryByTitle(e)}setActiveArg(e,t){return this._controller.setActiveArg(e,t)}};C.type_ensure(be.$gtype);var xe=class StorybookApplication extends T.Application{static{C.registerClass({GTypeName:`StorybookApplication`},StorybookApplication)}constructor(e){super({application_id:e.applicationId,flags:x.ApplicationFlags.DEFAULT_FLAGS}),this._window=null,this._options=e,this.connect(`startup`,()=>this._initStyles()),this.connect(`activate`,()=>this._onActivate())}_initStyles(){let e=new h.CssProvider;e.load_from_string(`
213
+ `,InternalChildren:[`sidebar_list`,`content_area`,`control_panel`,`preview_title`,`show_controls_button`,`controls_split_view`,`main_split_view`]},StorybookWindow)}constructor(e){super(e),this._appearance=new StorybookAppearance,this._controlRows=[],this._rowByTitle=new Map,this._onSelect=null,this._suppressSelect=!1,this._controller=new StorybookController(this,e=>this._buildControls(e))}_onRowSelected(e,t){if(this._suppressSelect||!t)return;let n=t;n.storyWidget&&this._onSelect?.(n.storyWidget)}get controller(){return this._controller}_buildControls(e){let t=e.meta.controls;if(!Array.isArray(t))return[];let n=adwControlWidgetFactory(),r=[];for(let i of t){if(!i?.name||!i?.type){console.warn(`Invalid control configuration:`,i);continue}let t=bindControl(e,i,n);t&&r.push(t)}return r}_onAppearanceClicked(){buildAppearanceDialog(this._appearance).present(this)}_onToggleControls(e){this._controls_split_view.set_show_sidebar(e.get_active())}populateSidebar(e){this._controller.mount(e,!0)}renderSidebar(e,t){this._onSelect=t,this._suppressSelect=!0,this._clearSidebar(),this._rowByTitle.clear();for(let t of e){this._addCategoryToSidebar(t.category);for(let{instance:e,name:n}of t.stories)this._addStoryToSidebar(e,n)}this._suppressSelect=!1}markSelected(e){let t=this._rowByTitle.get(e);t&&this._sidebar_list.get_selected_row()!==t&&(this._suppressSelect=!0,this._sidebar_list.select_row(t),this._suppressSelect=!1)}setPreviewTitle(e){this._preview_title.set_title(e)}showPreview(e){this._content_area.set_child(e),this._main_split_view.get_collapsed()&&this._main_split_view.set_show_content(!0)}renderControls(e){this._clearControlPanel();for(let t of e){let e=t.view;e instanceof T.PreferencesRow&&e.set_use_markup(!1),this._control_panel.add(e),this._controlRows.push(e)}this._show_controls_button.set_active(!0)}_clearSidebar(){let e=this._sidebar_list.get_first_child();for(;e;){let t=e.get_next_sibling();e.unparent(),e=t}}_addCategoryToSidebar(e){let t=new h.ListBoxRow({selectable:!1}),n=new h.Label({label:e,halign:h.Align.START,margin_top:10,margin_bottom:4,margin_start:12,margin_end:12});n.add_css_class(`heading`),n.add_css_class(`dim-label`),t.set_child(n),this._sidebar_list.append(t)}_addStoryToSidebar(e,t){let n=new h.ListBoxRow,r=new h.Label({label:t||`Unnamed Story`,halign:h.Align.START,margin_start:20,margin_top:6,margin_bottom:6});n.set_child(r),this._sidebar_list.append(n),n.storyWidget=e,this._rowByTitle.set(e.meta.title,n)}_clearControlPanel(){for(let e of this._controlRows)this._control_panel.remove(e);this._controlRows=[]}get activeStory(){return this._controller.activeStory}openStoryByTitle(e){return this._controller.openStoryByTitle(e)}setActiveArg(e,t){return this._controller.setActiveArg(e,t)}};C.type_ensure(be.$gtype);var xe=class StorybookApplication extends T.Application{static{C.registerClass({GTypeName:`StorybookApplication`},StorybookApplication)}constructor(e){super({application_id:e.applicationId,flags:x.ApplicationFlags.DEFAULT_FLAGS}),this._window=null,this._options=e,this.connect(`startup`,()=>this._initStyles()),this.connect(`activate`,()=>this._onActivate())}_initStyles(){let e=new h.CssProvider;e.load_from_string(`
214
214
  /* Appearance dialog — round swatches with a selection ring, the shape GNOME's own
215
215
  appearance switcher uses. Adapted from Learn6502's theme-mode-selector.css and
216
216
  accent-color-selector.css (JumpLink/easy6502, MIT).
@@ -331,4 +331,4 @@ corresponding .blp file and regenerate this file with blueprint-compiler.
331
331
  padding: 18px;
332
332
  }
333
333
  \n${this._options.css??``}`);let t=f.Display.get_default();if(!t){console.error(`No display found`);return}h.StyleContext.add_provider_for_display(t,e,h.STYLE_PROVIDER_PRIORITY_APPLICATION)}_onActivate(){if(!this._window){this._window=new be({application:this}),this._options.title&&this._window.set_title(this._options.title);try{this._window.populateSidebar(this._options.stories)}catch(e){console.error(`Failed to create story instances:`,e)}installDevtools(this,{enabled:this._options.devtools||void 0,extend:[storybookDevtoolsExtension(this._window)]}),probeEnabled()&&installStorybookProbe(this,this._window,this._options.probe)}this._window.present()}};C.type_ensure(xe.$gtype);function collectStoryModules(e){return collectStoryModules$1(e)}function buildGtkChrome(e){let t=new T.PreferencesPage,n=new T.PreferencesGroup,r=new h.Box({orientation:h.Orientation.VERTICAL,halign:h.Align.CENTER,valign:h.Align.CENTER,margin_top:12,margin_bottom:12,spacing:12,hexpand:!0});return r.add_css_class(`story-stage`),n.add(r),t.add(n),e.set_child(t),{root:e,hasStage:!0,setStageContent(e){let t=r.get_first_child();for(;t;)t.unparent(),t=r.get_first_child();r.append(e)},setChromeText(e,t){n.set_title(l.markup_escape_text(e,-1)),n.set_description(l.markup_escape_text(t,-1))}}}var StoryCore=class extends StoryViewBase{constructor(e,t,n){super(),this._widget=e,this.initBase(t,n)}createChrome(e){return buildGtkChrome(this._widget)}initialize(){this._widget.initialize()}updateArgs(e){this._widget.updateArgs(e)}teardown(){this._widget.teardown()}emitArgs(e){super.emitArgs(e),this._widget.notify(`args`)}},E=class StoryWidget extends T.Bin{static{C.registerClass({GTypeName:`StoryWidget`,Properties:{meta:C.ParamSpec.object(`meta`,`Meta`,`Story metadata`,C.ParamFlags.READWRITE,C.Object),story:C.ParamSpec.string(`story`,`Story Name`,`Story name`,C.ParamFlags.READWRITE,``),args:C.ParamSpec.object(`args`,`Args`,`Story arguments`,C.ParamFlags.READWRITE,C.Object)}},StoryWidget)}constructor(e,t={}){super(t),this._core=new StoryCore(this,e.meta,e.story)}static fromMeta(e,t){return{meta:e,story:t,args:argsFromControls(e.controls)}}get meta(){return this._core.meta}get story(){return this._core.story}get args(){return this._core.args}set args(e){this._core.args=e}onArgsChanged(e){return this._core.onArgsChanged(e)}setArg(e,t){this._core.setArg(e,t)}initialize(){}updateArgs(e){}teardown(){}addContent(e){this._core.addContent(e)}};C.type_ensure(E.$gtype);const Se={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function decodeXmlEntities(e){return e.includes(`&`)?e.replace(/&(#[Xx][0-9A-Fa-f]+|#[0-9]+|[A-Za-z][A-Za-z0-9]*);/g,(e,t)=>{if(t.charAt(0)!==`#`)return Se[t]??e;let n=t.charAt(1)===`x`||t.charAt(1)===`X`,r=Number.parseInt(n?t.slice(2):t.slice(1),n?16:10);return!Number.isFinite(r)||r<1||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}):e}function findTagEnd(e,t){let n=``;for(let r=t+1;r<e.length;r++){let t=e.charAt(r);if(n)t===n&&(n=``);else if(t===`"`||t===`'`)n=t;else if(t===`>`)return r}return-1}const D=/([^\s=/<>]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;function parseAttributes(e){let t={};D.lastIndex=0;let n=D.exec(e);for(;n!==null;)n[1]in t||(t[n[1]]=decodeXmlEntities(n[2]??n[3]??``)),n=D.exec(e);return t}function scanXml(e){let t=[],pushText=e=>{t.push({kind:`text`,text:decodeXmlEntities(e)})},n=0;for(;n<e.length;){let r=e.indexOf(`<`,n);if(r<0){pushText(e.slice(n));break}if(r>n&&pushText(e.slice(n,r)),e.startsWith(`<!--`,r)){let t=e.indexOf(`-->`,r+4);n=t<0?e.length:t+3;continue}if(e.startsWith(`<![CDATA[`,r)){let i=e.indexOf(`]]>`,r+9);t.push({kind:`text`,text:e.slice(r+9,i<0?e.length:i)}),n=i<0?e.length:i+3;continue}if(e.startsWith(`<?`,r)){let t=e.indexOf(`?>`,r+2);n=t<0?e.length:t+2;continue}if(e.startsWith(`<!`,r)){let t=e.indexOf(`>`,r+2);n=t<0?e.length:t+1;continue}let i=findTagEnd(e,r);if(i<0){pushText(e.slice(r));break}let a=e.slice(r+1,i);if(n=i+1,a.charAt(0)===`/`){let e=a.slice(1).trim();e!==``&&t.push({kind:`close`,name:e});continue}let o=a,s=!1;o.endsWith(`/`)&&(s=!0,o=o.slice(0,-1));let c=/^([^\s/<>]+)/.exec(o);if(c===null)continue;let l=c[1];t.push({kind:`open`,name:l,attributes:parseAttributes(o.slice(l.length)),selfClosing:s})}return t}const Ce={applicationId:null,applicationName:null,developerName:null,version:null,website:null,supportUrl:null,issueUrl:null,license:null,releaseNotes:null};function localeScore(e,t){let n=0;for(let r=0;;r++){let i=r<e.length?e.charAt(r):`\0`,a=r<t.length?t.charAt(r):`\0`;if((i===`-`||i===`\0`)&&(a===`-`||a===`\0`)&&n++,i===`\0`||a===`\0`)break;if(i!==a)return 0}return n}function appdataLocale(e,t={}){let n,r=e[0];r!==void 0&&!r.includes(`_`)&&t.LANG!==void 0&&t.LANG.includes(`_`)&&(n=t.LANG),n=n??r??`C`,n.endsWith(`.UTF-8`)&&(n=n.slice(0,-6));let i=``,a=n.indexOf(`@`);if(a>=0){let e=n.slice(a);e.startsWith(`@cyrillic`)?i=`-Cyrl`:e.startsWith(`@devanagari`)?i=`-Deva`:e.startsWith(`@latin`)?i=`-Latn`:e.startsWith(`@shaw`)?i=`-Shaw`:e.startsWith(`@euro`)||(i=`-euro`),n=n.slice(0,a)}return n.replace(/_/g,`-`)+i}function childElements(e,t,n){let r=[],i=t;for(;i<n;){let t=e[i];if(t.kind!==`open`){i+=1;continue}let a=t;if(a.selfClosing){r.push({name:a.name,attributes:a.attributes,start:i+1,end:i+1}),i+=1;continue}let o=1,s=i+1;for(;s<n&&o>0;){let t=e[s];t.kind===`open`?t.selfClosing||(o+=1):t.kind===`close`&&--o,s+=1}let c=o===0?s-1:n;r.push({name:a.name,attributes:a.attributes,start:i+1,end:c}),i=o===0?s:n}return r}function elementText(e,t){let n=0,r=``;for(let i=t.start;i<t.end;i++){let t=e[i];t.kind===`open`?t.selfClosing||(n+=1):t.kind===`close`?--n:n===0&&(r+=t.text)}return r.trim()}const lang=e=>e.attributes[`xml:lang`]??`C`;function considerTranslatable(e,t,n,r){(e.value===null&&lang(t)===`C`||r>e.score)&&(e.score=r,e.value=n)}function escapeMarkup(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/'/g,`&#39;`).replace(/"/g,`&quot;`)}function inlineMarkup(e,t){let n=``,r=!0,i=0,a=0;for(let o=t.start;o<t.end;o++){let t=e[o];if(t.kind===`open`){let e=t,r=!e.selfClosing;if(r&&(a+=1),i>0)continue;e.name===`em`||e.name===`code`?n+=`<${e.name}>`:r&&(i=a)}else if(t.kind===`close`)i>0&&a===i?i=0:i===0&&(t.name===`em`||t.name===`code`)&&(n+=`</${t.name}>`),--a;else if(i===0){let e=``;for(let n of t.text){if(n===`
334
- `||n===` `||n===` `){if(r)continue;e+=` `,r=!0;continue}e+=n,r=!1}n+=escapeMarkup(e)}}return n}function parseDescription(e,t,n){let r=new Map,bucketFor=(e,t)=>{if(localeScore(n,e)===0&&e!==`C`)return null;let i=r.get(e);return i===void 0&&(i=[],r.set(e,i),t!==void 0&&i.push(`<${t}>\n`)),i};for(let n of childElements(e,t.start,t.end))if(n.name===`p`)bucketFor(lang(n))?.push(`<p>${inlineMarkup(e,n)}</p>\n`);else if(n.name===`ul`||n.name===`ol`){for(let e of r.values())e.push(`<${n.name}>\n`);for(let t of childElements(e,n.start,n.end))t.name===`li`&&bucketFor(lang(t),n.name)?.push(`<li>${inlineMarkup(e,t)}</li>\n`);for(let e of r.values())e.push(`</${n.name}>\n`)}let i=r.get(`C`),a=0;for(let[e,t]of r){let r=localeScore(n,e);r>a&&(a=r,i=t)}return i===void 0?null:i.join(``)}function parseAppdata(e,t={}){let n=t.locale??`C`,r=scanXml(e),i=childElements(r,0,r.length).find(e=>e.name===`component`||e.name===`application`);if(i===void 0)return{...Ce};let a={...Ce},o={value:null,score:0},s={value:null,score:0},c=[],l=null;for(let e of childElements(r,i.start,i.end))switch(e.name){case`id`:a.applicationId===null&&(a.applicationId=elementText(r,e));break;case`name`:considerTranslatable(o,e,elementText(r,e),localeScore(n,lang(e)));break;case`developer`:for(let t of childElements(r,e.start,e.end)){if(t.name!==`name`)continue;let e=localeScore(n,lang(t))+1024;e>s.score&&(lang(t)===`C`||e>1024)&&(s.score=e,s.value=elementText(r,t))}break;case`developer_name`:considerTranslatable(s,e,elementText(r,e),localeScore(n,lang(e)));break;case`url`:{let t=elementText(r,e);e.attributes.type===`homepage`?a.website=t:e.attributes.type===`bugtracker`?a.issueUrl=t:e.attributes.type===`help`&&(a.supportUrl=t);break}case`launchable`:e.attributes.type===`desktop-id`&&c.push(elementText(r,e));break;case`project_license`:a.license===null&&(a.license=elementText(r,e));break;case`releases`:l===null&&(l=e);break;default:break}if(a.applicationName=o.value,a.developerName=s.value,l!==null){let e=childElements(r,l.start,l.end).filter(e=>e.name===`release`);a.version=e[0]?.attributes.version??null;let i=t.releaseNotesVersion;if(i!==void 0&&i!==``){let t=e.find(e=>e.attributes.version===i),o=t&&childElements(r,t.start,t.end).find(e=>e.name===`description`);o&&(a.releaseNotes=parseDescription(r,o,n))}}a.applicationId!==null&&a.applicationId.endsWith(`.desktop`)&&(c.includes(`${a.applicationId}.desktop`)||(a.applicationId=a.applicationId.slice(0,-8)));for(let e of Object.keys(a))a[e]===``&&(a[e]=null);return a}const we={"GPL-2.0-or-later":h.License.GPL_2_0,"GPL-3.0-or-later":h.License.GPL_3_0,"LGPL-2.1-or-later":h.License.LGPL_2_1,"LGPL-3.0-or-later":h.License.LGPL_3_0,"BSD-2-Clause":h.License.BSD,MIT:h.License.MIT_X11,"Artistic-2.0":h.License.ARTISTIC,"GPL-2.0-only":h.License.GPL_2_0_ONLY,"GPL-3.0-only":h.License.GPL_3_0_ONLY,"LGPL-2.1-only":h.License.LGPL_2_1_ONLY,"LGPL-3.0-only":h.License.LGPL_3_0_ONLY,"AGPL-3.0-or-later":h.License.AGPL_3_0,"AGPL-3.0-only":h.License.AGPL_3_0_ONLY,"BSD-3-Clause":h.License.BSD_3,"Apache-2.0":h.License.APACHE_2_0,"MPL-2.0":h.License.MPL_2_0,"0BSD":h.License[`0BSD`],"GPL-2.0":h.License.GPL_2_0_ONLY,"GPL-3.0":h.License.GPL_3_0_ONLY};function licenseTypeFor(e){return we[e]??h.License.CUSTOM}function hasAppdataConstructor(e=T){try{return typeof e?.AboutDialog?.new_from_appdata==`function`}catch{return!1}}function applyAppdataFields(e,t,n){return t.applicationId!==null&&(e.applicationIcon=t.applicationId),t.applicationName!==null&&(e.applicationName=t.applicationName),t.developerName!==null&&(e.developerName=t.developerName),t.website!==null&&(e.website=t.website),t.supportUrl!==null&&(e.supportUrl=t.supportUrl),t.issueUrl!==null&&(e.issueUrl=t.issueUrl),t.license!==null&&(e.licenseType=licenseTypeFor(t.license)),n!==void 0&&n!==``&&(e.releaseNotesVersion=n),t.releaseNotes!==null&&(e.releaseNotes=t.releaseNotes),t.version!==null&&(e.version=t.version),e}function buildAboutDialogFromAppdata(e,t={}){let n=parseAppdata(e,{locale:t.locale??appdataLocale(l.get_language_names(),{LANG:l.getenv(`LANG`)??void 0}),releaseNotesVersion:t.releaseNotesVersion});return applyAppdataFields(new T.AboutDialog,n,t.releaseNotesVersion)}function resourceExists(e){try{return x.resources_get_info(e,x.ResourceLookupFlags.NONE),!0}catch{return!1}}function readResource(e){try{let t=x.resources_lookup_data(e,x.ResourceLookupFlags.NONE);return new TextDecoder().decode(t.toArray())}catch{return null}}function readFile(e){try{let[t,n]=l.file_get_contents(e);return t?new TextDecoder().decode(n):null}catch{return null}}let Te=!1;function createAboutDialog(e={}){let{appdataResource:t,appdataPath:n,releaseNotesVersion:r}=e,i=t!==void 0&&resourceExists(t),a;if(!e.forceParsedAppdata&&i&&hasAppdataConstructor())a=T.AboutDialog.new_from_appdata(t,r??``);else{let o=(i?readResource(t):null)??(n===void 0?null:readFile(n));o===null?(console.error(`@gjsify/adwaita-app: no AppStream metainfo found for the About dialog; looked at resource ${t??`(none given)`} and file ${n??`(none given)`}`),a=new T.AboutDialog):(!Te&&!e.forceParsedAppdata&&i&&(Te=!0,console.log(`@gjsify/adwaita-app: Adw.AboutDialog.new_from_appdata is not in this GTK runtime (expected on Windows — gjsify/gjsify#1662); building the About dialog from the AppStream metainfo directly.`)),a=buildAboutDialogFromAppdata(o,{releaseNotesVersion:r}))}return e.applicationIcon!==void 0&&(a.applicationIcon=e.applicationIcon),e.version!==void 0&&(a.version=e.version),a}`application-x-executable.avatar-default.camera-photo.contact-new.document-edit.document-open.document-save.edit-copy.emblem-system.folder.folder-documents.folder-download.folder-music.go-down.go-home.go-next.go-previous.image-missing.list-add.list-remove.mail-reply-sender.mail-send.mail-unread.network-wireless.open-menu.preferences-system.send-to.sidebar-show.starred.system-search.user-trash.view-conceal.view-grid.view-list.view-more.view-paged.view-refresh.view-reveal.window-close.window-maximize.window-minimize`.split(`.`);let O=null;function registerBundledIconResource(){if(O)return O;let e=l.base64_decode(`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`);return O=x.Resource.new_from_data(new l.Bytes(e)),x.resources_register(O),O}function addBundledIconsToTheme(e){registerBundledIconResource(),e.add_resource_path(`/eu/jumplink/gjsify/adwaita-app/icons`)}function installBundledIconTheme(e={}){let t=e.prefer??`fallback`;if(t===`host`)return!1;let n=e.display===void 0?f.Display.get_default():e.display;return n?(addBundledIconsToTheme(h.IconTheme.get_for_display(n)),t===`bundled`&&h.Settings.get_for_display(n).set_property(`gtk-icon-theme-name`,`gjsify-adwaita-bundled`),!0):!1}var Ee=class AdwaitaApp extends T.Application{static{C.registerClass({GTypeName:`GjsifyAdwaitaApp`},AdwaitaApp)}constructor(e){super({application_id:e.applicationId,flags:e.flags??x.ApplicationFlags.DEFAULT_FLAGS}),this._window=null,this._options=e,this._initActions(),this.connect(`startup`,()=>this._onStartup()),this.connect(`activate`,()=>this._onActivate())}_initActions(){if(this._options.quitAction!==!1){let e=new x.SimpleAction({name:`quit`});e.connect(`activate`,()=>this.quit()),this.add_action(e),this.set_accels_for_action(`app.quit`,[`<primary>q`])}if(this._options.about||this._options.aboutAppdata){let e=new x.SimpleAction({name:`about`});e.connect(`activate`,()=>this._showAbout()),this.add_action(e)}}_onStartup(){this._installBundledIcons(),this._options.css&&this._loadCss(this._options.css),this._installDevtools(),this._options.onStartup?.(this)}_installBundledIcons(){let e=this._options.bundledIcons;e!==!1&&installBundledIconTheme(typeof e==`object`?e:{})}_loadCss(e){let t=f.Display.get_default();if(!t){console.error(`@gjsify/adwaita-app: no default display; CSS not applied`);return}let n=new h.CssProvider;n.load_from_string(e),h.StyleContext.add_provider_for_display(t,n,h.STYLE_PROVIDER_PRIORITY_APPLICATION)}_installDevtools(){let e=this._options.devtools;if(e===!1)return;let t=typeof e==`object`?e:{enabled:e||void 0};installDevtools(this,t)}_onActivate(){this._window||=this._options.createWindow(this),this._window.present()}_showAbout(){let e=this._options.aboutAppdata;if(e){createAboutDialog(e).present(this.get_active_window());return}let t=this._options.about;if(!t)return;let n=new T.AboutDialog({application_name:t.applicationName,application_icon:t.applicationIcon??this._options.applicationId});t.version&&(n.version=t.version),t.developerName&&(n.developer_name=t.developerName),t.website&&(n.website=t.website),t.issueUrl&&(n.issue_url=t.issueUrl),t.license&&(n.license=t.license),t.comments&&(n.comments=t.comments),t.copyright&&(n.copyright=t.copyright),t.developers?.length&&n.set_developers(t.developers),n.present(this.get_active_window())}};async function runApplication(e,t){let n=!1;try{e.register(null),n=e.get_is_remote()}catch{n=!1}let r=await e.runAsync(t);return n&&console.error(`${e.applicationId??`This application`} is already running — brought the existing instance to the front instead of opening a second window.`),r}C.type_ensure(Ee.$gtype);var De=class LoadingStack extends h.Stack{static{C.registerClass({GTypeName:`GjsifyLoadingStack`},LoadingStack)}constructor(e={}){super(e);let t=new h.Box({orientation:h.Orientation.VERTICAL,halign:h.Align.CENTER,valign:h.Align.CENTER,hexpand:!0,vexpand:!0});t.append(new T.Spinner),this.add_named(t,`loading`),this._content=new T.Bin({hexpand:!0,vexpand:!0}),this.add_named(this._content,`content`),this._error=new T.StatusPage({iconName:`dialog-error-symbolic`,title:`Something went wrong`}),this.add_named(this._error,`error`),this.set_visible_child_name(`loading`)}setContent(e){this._content.set_child(e)}setError(e,t){this._error.set_title(e),this._error.set_description(t??``)}showLoading(){this.set_visible_child_name(`loading`)}showContent(){this.set_visible_child_name(`content`)}showError(){this.set_visible_child_name(`error`)}};C.type_ensure(De.$gtype);async function runStorybook(e){return runApplication(new xe(e),[t.programInvocationName,...t.programArgs])}const Oe={title:`Buttons/Button Content`,description:`Adw.ButtonContent — pairs a symbolic icon with a label inside a Gtk.Button.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Download`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Download`,value:`folder-download-symbolic`},{label:`Add`,value:`list-add-symbolic`},{label:`Send`,value:`mail-send-symbolic`},{label:`Star`,value:`starred-symbolic`}],defaultValue:`folder-download-symbolic`},{name:`canShrink`,label:`Can shrink`,type:i.BOOLEAN,defaultValue:!1}]};var ke=__exportAll({ButtonContentStories:()=>Ae,ButtonContentStory:()=>k}),k=class ButtonContentStory extends E{_content=null;_button=null;static{C.registerClass({GTypeName:`AdwStorybookButtonContent`},ButtonContentStory)}constructor(){super(E.fromMeta(ButtonContentStory.getMetadata(),`Default`))}static getMetadata(){return{...Oe,component:T.ButtonContent.$gtype}}initialize(){this._content=new T.ButtonContent({label:this.args.label,iconName:this.args.iconName,canShrink:this.args.canShrink}),this._button=new h.Button({child:this._content}),this._button.add_css_class(`suggested-action`),this._button.add_css_class(`pill`),this.addContent(this._button)}updateArgs(e){this._content&&(this._content.label=this.args.label,this._content.iconName=this.args.iconName,this._content.canShrink=this.args.canShrink)}};C.type_ensure(k.$gtype);const Ae={stories:[k]},je={title:`Buttons/Button Styles`,description:`Buttons with Adwaita style classes: .pill, .circular, .suggested-action, .destructive-action, .flat.`,controls:[{name:`label`,label:`Demo label`,type:i.TEXT,defaultValue:`Click me`},{name:`style`,label:`Demo style`,type:i.SELECT,options:[{label:`Pill`,value:`pill`},{label:`Circular (icon)`,value:`circular`},{label:`Suggested`,value:`suggested-action`},{label:`Destructive`,value:`destructive-action`},{label:`Flat`,value:`flat`}],defaultValue:`suggested-action`}]};var Me=__exportAll({ButtonStylesStories:()=>Pe,ButtonStylesStory:()=>A});const Ne=[`pill`,`circular`,`suggested-action`,`destructive-action`,`flat`];var A=class ButtonStylesStory extends E{_demo=null;static{C.registerClass({GTypeName:`AdwStorybookButtonStyles`},ButtonStylesStory)}constructor(){super(E.fromMeta(ButtonStylesStory.getMetadata(),`Default`))}static getMetadata(){return{...je,component:h.Button.$gtype}}initialize(){let e=new T.WrapBox({childSpacing:12,lineSpacing:12,halign:h.Align.CENTER}),t=new h.Button({label:`Pill`});t.add_css_class(`pill`),e.append(t);let n=new h.Button({iconName:`list-add-symbolic`});n.add_css_class(`circular`),e.append(n);let r=new h.Button({label:`Suggested`});r.add_css_class(`suggested-action`),e.append(r);let i=new h.Button({label:`Delete`});i.add_css_class(`destructive-action`),e.append(i);let a=new h.Button({label:`Flat`});a.add_css_class(`flat`),e.append(a),this._demo=new h.Button({label:this.args.label}),this._applyStyle(this.args.style),e.append(this._demo),this.addContent(e)}_applyStyle(e){if(this._demo){for(let e of Ne)this._demo.remove_css_class(e);this._demo.add_css_class(e)}}updateArgs(e){this._demo&&(this._demo.label=this.args.label,this._applyStyle(this.args.style))}};C.type_ensure(A.$gtype);const Pe={stories:[A]},Fe=[`Save as…`,`Export`,`Print`],Ie={title:`Buttons/Menu Button`,description:`Gtk.MenuButton — a button whose only action is to open a menu. Where a Split Button has a primary action beside its arrow, this one has none: every choice lives in the popover.`,controls:[{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Hamburger`,value:`open-menu-symbolic`},{label:`More`,value:`view-more-symbolic`},{label:`Open`,value:`document-open-symbolic`}],defaultValue:`open-menu-symbolic`},{name:`menuTitle`,label:`Menu title`,type:i.TEXT,defaultValue:`Document`}]};var Le=__exportAll({MenuButtonStories:()=>Re,MenuButtonStory:()=>j}),j=class MenuButtonStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookMenuButton`},MenuButtonStory)}constructor(){super(E.fromMeta(MenuButtonStory.getMetadata(),`Default`))}static getMetadata(){return{...Ie,component:h.MenuButton.$gtype}}initialize(){this._widget=new h.MenuButton({halign:h.Align.CENTER}),this._apply(),this.addContent(this._widget)}updateArgs(e){this._apply()}_buildMenu(e){let t=new x.Menu;for(let e of Fe)t.append(e,`app.${e.toLowerCase().replace(/[^a-z]+/g,`-`)}`);let n=new x.Menu;return n.append_section(e.length>0?e:null,t),n}_apply(){this._widget&&(this._widget.iconName=this.args.iconName,this._widget.menuModel=this._buildMenu(this.args.menuTitle))}};C.type_ensure(j.$gtype);const Re={stories:[j]},ze={title:`Buttons/Split Button`,description:`Adw.SplitButton — a primary action button paired with a dropdown menu of related actions.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Save`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`None`,value:``},{label:`Save`,value:`document-save-symbolic`},{label:`Send`,value:`mail-send-symbolic`},{label:`Add`,value:`list-add-symbolic`}],defaultValue:`document-save-symbolic`}]},Be={title:`Buttons/Split Button Flat`,description:`Adw.SplitButton with the .flat style class, as used inside header bars and toolbars.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Reply`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`None`,value:``},{label:`Reply`,value:`mail-reply-sender-symbolic`},{label:`Edit`,value:`document-edit-symbolic`},{label:`Open`,value:`document-open-symbolic`}],defaultValue:`mail-reply-sender-symbolic`}]};var Ve=__exportAll({SplitButtonFlatStory:()=>N,SplitButtonStories:()=>He,SplitButtonStory:()=>M});function buildMenu(){let e=new x.Menu;return e.append(`Save as…`,`app.save-as`),e.append(`Export`,`app.export`),e.append(`Print`,`app.print`),e}var M=class SplitButtonStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookSplitButton`},SplitButtonStory)}constructor(){super(E.fromMeta(SplitButtonStory.getMetadata(),`Default`))}static getMetadata(){return{...ze,component:T.SplitButton.$gtype}}initialize(){this._widget=new T.SplitButton({label:this.args.label,menuModel:buildMenu()});let e=this.args.iconName;e&&(this._widget.iconName=e),this.addContent(this._widget)}updateArgs(e){if(!this._widget)return;let t=this.args.iconName;t?this._widget.iconName=t:this._widget.label=this.args.label}};C.type_ensure(M.$gtype);var N=class SplitButtonFlatStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookSplitButtonFlat`},SplitButtonFlatStory)}constructor(){super(E.fromMeta(SplitButtonFlatStory.getMetadata(),`Default`))}static getMetadata(){return{...Be,component:T.SplitButton.$gtype}}initialize(){this._widget=new T.SplitButton({label:this.args.label,menuModel:buildMenu()}),this._widget.add_css_class(`flat`);let e=this.args.iconName;e&&(this._widget.iconName=e),this.addContent(this._widget)}updateArgs(e){if(!this._widget)return;let t=this.args.iconName;t?this._widget.iconName=t:this._widget.label=this.args.label}};C.type_ensure(N.$gtype);const He={stories:[M,N]},Ue={title:`Buttons/Toggle Group`,description:`Adw.ToggleGroup — a linked group of Adw.Toggle buttons where exactly one is active.`,controls:[{name:`active`,label:`Active toggle`,type:i.SELECT,options:[{label:`List`,value:0},{label:`Grid`,value:1},{label:`Columns`,value:2}],defaultValue:0},{name:`style`,label:`Style`,type:i.SELECT,options:[{label:`Default`,value:`default`},{label:`Flat`,value:`flat`},{label:`Round`,value:`round`}],defaultValue:`default`}]};var We=__exportAll({ToggleGroupStories:()=>Ke,ToggleGroupStory:()=>P});const Ge=[`flat`,`round`];var P=class ToggleGroupStory extends E{_toggleGroup=null;static{C.registerClass({GTypeName:`AdwStorybookToggleGroup`},ToggleGroupStory)}constructor(){super(E.fromMeta(ToggleGroupStory.getMetadata(),`Default`))}static getMetadata(){return{...Ue,component:T.ToggleGroup.$gtype}}initialize(){this._toggleGroup=new T.ToggleGroup,this._toggleGroup.add(new T.Toggle({label:`List`,iconName:`view-list-symbolic`})),this._toggleGroup.add(new T.Toggle({label:`Grid`,iconName:`view-grid-symbolic`})),this._toggleGroup.add(new T.Toggle({label:`Columns`,iconName:`view-columns-symbolic`})),this._toggleGroup.active=this.args.active,this._applyStyle(this.args.style),this.addContent(this._toggleGroup)}_applyStyle(e){if(this._toggleGroup){for(let e of Ge)this._toggleGroup.remove_css_class(e);e!=="default"&&this._toggleGroup.add_css_class(e)}}updateArgs(e){this._toggleGroup&&(this._toggleGroup.active=this.args.active,this._applyStyle(this.args.style))}};C.type_ensure(P.$gtype);const Ke={stories:[P]},qe=[`Automatic`,`Always`,`Never`,`When busy`],Je={title:`Controls/Drop Down`,description:`Gtk.DropDown — pick one value from a list. The button shows the selection; the list opens in a popover. Adw.ComboRow is the same choice presented as a boxed-list row.`,controls:[{name:`selected`,label:`Selected`,type:i.SELECT,options:qe.map((e,t)=>({label:e,value:t})),defaultValue:0},{name:`enableSearch`,label:`Search field`,type:i.BOOLEAN,defaultValue:!1}]};var Ye=__exportAll({DropDownStories:()=>Xe,DropDownStory:()=>F}),F=class DropDownStory extends E{_dropDown=null;static{C.registerClass({GTypeName:`AdwStorybookDropDown`},DropDownStory)}constructor(){super(E.fromMeta(DropDownStory.getMetadata(),`Default`))}static getMetadata(){return{...Je,component:h.DropDown.$gtype}}initialize(){this._dropDown=h.DropDown.new_from_strings([...qe]),this._dropDown.expression=h.PropertyExpression.new(h.StringObject.$gtype,null,`string`),this._dropDown.halign=h.Align.CENTER,this._apply(),this.addContent(this._dropDown)}updateArgs(e){this._apply()}_apply(){this._dropDown&&(this._dropDown.selected=this.args.selected,this._dropDown.enableSearch=this.args.enableSearch)}};C.type_ensure(F.$gtype);const Xe={stories:[F]},Ze={title:`Controls/Entry`,description:`Gtk.Entry — a single-line text field. Libadwaita ships no AdwEntry; the Adwaita look is the GTK entry styled by the stylesheet, which is why the row variants (Entry Row, Password Entry Row) are the widgets with an Adw prefix.`,controls:[{name:`text`,label:`Text`,type:i.TEXT,defaultValue:``},{name:`placeholder`,label:`Placeholder`,type:i.TEXT,defaultValue:`Search files…`},{name:`editable`,label:`Editable`,type:i.BOOLEAN,defaultValue:!0}]};var Qe=__exportAll({EntryStories:()=>$e,EntryStory:()=>I}),I=class EntryStory extends E{_entry=null;static{C.registerClass({GTypeName:`AdwStorybookEntry`},EntryStory)}constructor(){super(E.fromMeta(EntryStory.getMetadata(),`Default`))}static getMetadata(){return{...Ze,component:h.Entry.$gtype}}initialize(){this._entry=new h.Entry({widthRequest:280,halign:h.Align.CENTER}),this._apply(),this.addContent(this._entry)}updateArgs(e){this._apply()}_apply(){this._entry&&(this._entry.text=this.args.text,this._entry.placeholderText=this.args.placeholder,this._entry.editable=this.args.editable)}};C.type_ensure(I.$gtype);const $e={stories:[I]},et={title:`Feedback/About Dialog`,description:`Adw.AboutDialog — the standard Adwaita about window with application name, version, credits and license.`,controls:[{name:`applicationName`,label:`Application name`,type:i.TEXT,defaultValue:`Adwaita Storybook`},{name:`version`,label:`Version`,type:i.TEXT,defaultValue:`0.11.0`}]};var tt=__exportAll({AboutDialogStories:()=>nt,AboutDialogStory:()=>L}),L=class AboutDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookAboutDialog`},AboutDialogStory)}constructor(){super(E.fromMeta(AboutDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...et,component:T.AboutDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){new T.AboutDialog({applicationName:this.args.applicationName,applicationIcon:`application-x-executable-symbolic`,developerName:`A GJSify Project`,version:this.args.version,comments:`A live catalogue of native GTK and Adwaita widgets, rendered under GJS.`,website:`https://github.com/gjsify/gjsify`,issueUrl:`https://github.com/gjsify/gjsify/issues`,licenseType:h.License.MIT_X11,developers:[`Ada Lovelace`,`Grace Hopper`],designers:[`Margaret Hamilton`],copyright:`© 2026 The GJSify Project`}).present(this)}updateArgs(e){}};C.type_ensure(L.$gtype);const nt={stories:[L]},rt={title:`Feedback/Alert Dialog`,description:`Adw.AlertDialog — a modal dialog with a heading, body text and responses, including a destructive action.`,controls:[{name:`heading`,label:`Heading`,type:i.TEXT,defaultValue:`Delete Project?`},{name:`body`,label:`Body`,type:i.TEXT,defaultValue:`This will permanently remove the project and all of its files. This action cannot be undone.`}]};var it=__exportAll({AlertDialogStories:()=>at,AlertDialogStory:()=>R}),R=class AlertDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookAlertDialog`},AlertDialogStory)}constructor(){super(E.fromMeta(AlertDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...rt,component:T.AlertDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){let e=new T.AlertDialog({heading:this.args.heading,body:this.args.body});e.add_response(`cancel`,`Cancel`),e.add_response(`delete`,`Delete`),e.set_response_appearance(`delete`,T.ResponseAppearance.DESTRUCTIVE),e.set_default_response(`cancel`),e.set_close_response(`cancel`),e.present(this)}updateArgs(e){}};C.type_ensure(R.$gtype);const at={stories:[R]},ot={title:`Feedback/Preferences Dialog`,description:`Adw.PreferencesDialog — a preferences window with a page, a group and a handful of boxed-list rows.`,controls:[{name:`pageTitle`,label:`Page title`,type:i.TEXT,defaultValue:`General`},{name:`groupTitle`,label:`Group title`,type:i.TEXT,defaultValue:`Appearance`}]};var st=__exportAll({PreferencesDialogStories:()=>ct,PreferencesDialogStory:()=>z}),z=class PreferencesDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookPreferencesDialog`},PreferencesDialogStory)}constructor(){super(E.fromMeta(PreferencesDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...ot,component:T.PreferencesDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){let e=new T.PreferencesDialog,t=new T.PreferencesPage({title:this.args.pageTitle,iconName:`preferences-system-symbolic`}),n=new T.PreferencesGroup({title:this.args.groupTitle,description:`Control how the application looks and behaves.`});n.add(new T.SwitchRow({title:`Dark style`,subtitle:`Use a dark colour scheme`,active:!0})),n.add(new T.ComboRow({title:`Accent colour`,model:new h.StringList({strings:[`Blue`,`Teal`,`Green`,`Orange`,`Purple`]}),selected:0})),n.add(new T.SpinRow({title:`Font size`,adjustment:new h.Adjustment({lower:8,upper:24,value:12,stepIncrement:1,pageIncrement:4})})),t.add(n),e.add(t),e.present(this)}updateArgs(e){}};C.type_ensure(z.$gtype);const ct={stories:[z]},lt={title:`Feedback/Toast`,description:`Adw.Toast — a transient notification, with an optional action button, shown over an Adw.ToastOverlay.`,controls:[{name:`title`,label:`Toast text`,type:i.TEXT,defaultValue:`File moved to Trash`},{name:`timeout`,label:`Timeout (s)`,type:i.NUMBER,min:0,max:10,step:1,defaultValue:3},{name:`hasButton`,label:`Action button`,type:i.BOOLEAN,defaultValue:!0},{name:`buttonLabel`,label:`Button label`,type:i.TEXT,defaultValue:`Undo`}]};var ut=__exportAll({ToastStories:()=>dt,ToastStory:()=>B}),B=class ToastStory extends E{_overlay=null;static{C.registerClass({GTypeName:`AdwStorybookToast`},ToastStory)}constructor(){super(E.fromMeta(ToastStory.getMetadata(),`Default`))}static getMetadata(){return{...lt,component:T.Toast.$gtype}}initialize(){let e=new h.Button({label:`Show toast`,halign:h.Align.CENTER,valign:h.Align.CENTER});e.add_css_class(`pill`),e.add_css_class(`suggested-action`),e.connect(`clicked`,()=>this._showToast()),this._overlay=new T.ToastOverlay({child:e,widthRequest:360,heightRequest:220}),this.addContent(this._overlay)}_showToast(){if(!this._overlay)return;let e=new T.Toast({title:this.args.title,timeout:this.args.timeout});this.args.hasButton&&(e.buttonLabel=this.args.buttonLabel),this._overlay.add_toast(e)}updateArgs(e){}};C.type_ensure(B.$gtype);const dt={stories:[B]},ft={title:`Layout/Clamp`,description:`Adw.Clamp limits its child to a maximum width and centres it, tightening the layout as space shrinks.`,controls:[{name:`maximumSize`,label:`Maximum size`,type:i.RANGE,min:200,max:600,step:10,defaultValue:400},{name:`tighteningThreshold`,label:`Tightening threshold`,type:i.RANGE,min:100,max:600,step:10,defaultValue:300}]};var pt=__exportAll({ClampStories:()=>mt,ClampStory:()=>V}),V=class ClampStory extends E{_clamp=null;static{C.registerClass({GTypeName:`AdwStorybookClamp`},ClampStory)}constructor(){super(E.fromMeta(ClampStory.getMetadata(),`Default`))}static getMetadata(){return{...ft,component:T.Clamp.$gtype}}initialize(){let e=new h.Box({orientation:h.Orientation.HORIZONTAL,widthRequest:520});e.add_css_class(`card`);let t=new h.Label({label:`This content is clamped — it stops growing past the maximum size and stays centred.`,wrap:!0,xalign:0,hexpand:!0,marginTop:18,marginBottom:18,marginStart:18,marginEnd:18});e.append(t),this._clamp=new T.Clamp({maximumSize:this.args.maximumSize,tighteningThreshold:this.args.tighteningThreshold,child:e}),this.addContent(this._clamp)}updateArgs(e){this._clamp&&(this._clamp.maximumSize=this.args.maximumSize,this._clamp.tighteningThreshold=this.args.tighteningThreshold)}};C.type_ensure(V.$gtype);const mt={stories:[V]},ht={title:`Layout/Header Bar`,description:`Adw.HeaderBar hosts a custom title widget with start and end controls — the standard top chrome of an Adwaita window.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Text Editor`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`notes.md`},{name:`showTitle`,label:`Show title`,type:i.BOOLEAN,defaultValue:!0}]};var gt=__exportAll({HeaderBarStories:()=>_t,HeaderBarStory:()=>H}),H=class HeaderBarStory extends E{_headerBar=null;_title=null;static{C.registerClass({GTypeName:`AdwStorybookHeaderBar`},HeaderBarStory)}constructor(){super(E.fromMeta(HeaderBarStory.getMetadata(),`Default`))}static getMetadata(){return{...ht,component:T.HeaderBar.$gtype}}initialize(){this._title=new T.WindowTitle({title:this.args.title,subtitle:this.args.subtitle}),this._headerBar=new T.HeaderBar({titleWidget:this._title,showTitle:this.args.showTitle,widthRequest:460});let e=new h.Button({iconName:`go-previous-symbolic`});e.add_css_class(`flat`),this._headerBar.pack_start(e);let t=new x.Menu;t.append(`New Window`,`app.new-window`),t.append(`Preferences`,`app.preferences`),t.append(`About`,`app.about`);let n=new h.MenuButton({iconName:`open-menu-symbolic`,menuModel:t});n.add_css_class(`flat`),this._headerBar.pack_end(n),this.addContent(this._headerBar)}updateArgs(e){!this._headerBar||!this._title||(this._title.title=this.args.title,this._title.subtitle=this.args.subtitle,this._headerBar.showTitle=this.args.showTitle)}};C.type_ensure(H.$gtype);const _t={stories:[H]},vt={title:`Layout/Toolbar View`,description:`Adw.ToolbarView pins a top header bar and a bottom toolbar around its content, each independently revealable.`,controls:[{name:`revealTopBars`,label:`Reveal top bars`,type:i.BOOLEAN,defaultValue:!0},{name:`revealBottomBars`,label:`Reveal bottom bars`,type:i.BOOLEAN,defaultValue:!0}]};var yt=__exportAll({ToolbarViewStories:()=>bt,ToolbarViewStory:()=>U}),U=class ToolbarViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookToolbarView`},ToolbarViewStory)}constructor(){super(E.fromMeta(ToolbarViewStory.getMetadata(),`Default`))}static getMetadata(){return{...vt,component:T.ToolbarView.$gtype}}initialize(){this._view=new T.ToolbarView({widthRequest:460,heightRequest:320,revealTopBars:this.args.revealTopBars,revealBottomBars:this.args.revealBottomBars});let e=new T.HeaderBar({titleWidget:new T.WindowTitle({title:`Documents`,subtitle:`12 items`})});this._view.add_top_bar(e);let t=new T.StatusPage({iconName:`folder-documents-symbolic`,title:`Your library`,description:`Content sits between the toolbars and scrolls independently of them.`});this._view.content=t;let n=new h.ActionBar,r=new h.Button({iconName:`list-add-symbolic`});r.add_css_class(`flat`);let i=new h.Button({iconName:`list-remove-symbolic`});i.add_css_class(`flat`),n.pack_start(r),n.pack_start(i),n.set_center_widget(new h.Label({label:`Selection: none`}));let a=new h.Button({iconName:`send-to-symbolic`});a.add_css_class(`flat`),n.pack_end(a),this._view.add_bottom_bar(n),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.revealTopBars=this.args.revealTopBars,this._view.revealBottomBars=this.args.revealBottomBars)}};C.type_ensure(U.$gtype);const bt={stories:[U]},xt={title:`Layout/Wrap Box`,description:`Adw.WrapBox flows its children horizontally and wraps them onto new lines when they run out of room.`,controls:[{name:`childSpacing`,label:`Child spacing`,type:i.RANGE,min:0,max:36,step:1,defaultValue:8},{name:`lineSpacing`,label:`Line spacing`,type:i.RANGE,min:0,max:36,step:1,defaultValue:8}]};var St=__exportAll({WrapBoxStories:()=>Ct,WrapBoxStory:()=>W}),W=class WrapBoxStory extends E{_wrap=null;static{C.registerClass({GTypeName:`AdwStorybookWrapBox`},WrapBoxStory)}constructor(){super(E.fromMeta(WrapBoxStory.getMetadata(),`Default`))}static getMetadata(){return{...xt,component:T.WrapBox.$gtype}}initialize(){this._wrap=new T.WrapBox({childSpacing:this.args.childSpacing,lineSpacing:this.args.lineSpacing,widthRequest:460});for(let e of[`Design`,`Adwaita`,`GNOME`,`GTK`,`TypeScript`,`Storybook`,`Wrapping`,`Layout`]){let t=new h.Button({label:e});t.add_css_class(`pill`),this._wrap.append(t)}this.addContent(this._wrap)}updateArgs(e){this._wrap&&(this._wrap.childSpacing=this.args.childSpacing,this._wrap.lineSpacing=this.args.lineSpacing)}};C.type_ensure(W.$gtype);const Ct={stories:[W]},wt={title:`Navigation/Bottom Sheet`,description:`Adw.BottomSheet — a sheet that slides up over the content. Toggle "Open" to reveal it.`,controls:[{name:`open`,label:`Open`,type:i.BOOLEAN,defaultValue:!0},{name:`modal`,label:`Modal`,type:i.BOOLEAN,defaultValue:!0},{name:`canClose`,label:`Can close`,type:i.BOOLEAN,defaultValue:!0}]};var Tt=__exportAll({BottomSheetStories:()=>Et,BottomSheetStory:()=>G}),G=class BottomSheetStory extends E{_sheet=null;static{C.registerClass({GTypeName:`AdwStorybookBottomSheet`},BottomSheetStory)}constructor(){super(E.fromMeta(BottomSheetStory.getMetadata(),`Default`))}static getMetadata(){return{...wt,component:T.BottomSheet.$gtype}}buildContent(){let e=new h.Button({label:`Toggle sheet`,halign:h.Align.CENTER,valign:h.Align.CENTER,vexpand:!0});return e.add_css_class(`pill`),e.add_css_class(`suggested-action`),e.connect(`clicked`,()=>{this._sheet&&(this._sheet.open=!this._sheet.open)}),e}buildSheet(){let e=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,marginTop:18,marginBottom:24,marginStart:18,marginEnd:18});e.append(new h.Label({label:`Share track`,halign:h.Align.START,cssClasses:[`title-2`]}));let t=new T.PreferencesGroup;for(let[e,n]of[[`Copy link`,`edit-copy-symbolic`],[`Send to a friend`,`mail-send-symbolic`],[`Add to playlist`,`list-add-symbolic`]]){let r=new T.ActionRow({title:e});r.add_prefix(new h.Image({iconName:n})),r.activatable=!0,t.add(r)}return e.append(t),e}initialize(){this._sheet=new T.BottomSheet({content:this.buildContent(),sheet:this.buildSheet(),open:this.args.open,modal:this.args.modal,canClose:this.args.canClose,widthRequest:480,heightRequest:340}),this.addContent(this._sheet)}updateArgs(e){this._sheet&&(this._sheet.open=this.args.open,this._sheet.modal=this.args.modal,this._sheet.canClose=this.args.canClose)}};C.type_ensure(G.$gtype);const Et={stories:[G]},Dt={title:`Navigation/Navigation Split View`,description:`Adw.NavigationSplitView — a resizable sidebar beside a content pane. When collapsed it folds into a navigation stack.`,controls:[{name:`showContent`,label:`Show content`,type:i.BOOLEAN,defaultValue:!0},{name:`collapsed`,label:`Collapsed`,type:i.BOOLEAN,defaultValue:!1}]};var Ot=__exportAll({NavigationSplitViewStories:()=>kt,NavigationSplitViewStory:()=>K}),K=class NavigationSplitViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookNavigationSplitView`},NavigationSplitViewStory)}constructor(){super(E.fromMeta(NavigationSplitViewStory.getMetadata(),`Default`))}static getMetadata(){return{...Dt,component:T.NavigationSplitView.$gtype}}buildSidebar(){let e=new T.PreferencesGroup;for(let[t,n,r]of[[`All Mail`,`128 messages`,`mail-unread-symbolic`],[`Starred`,`6 messages`,`starred-symbolic`],[`Drafts`,`2 messages`,`document-edit-symbolic`],[`Archive`,`512 messages`,`folder-symbolic`]]){let i=new T.ActionRow({title:t,subtitle:n});i.add_prefix(new h.Image({iconName:r})),i.activatable=!0,e.add(i)}let t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,new T.NavigationPage({title:`Mailboxes`,child:t})}buildContent(){let e=new T.StatusPage({iconName:`mail-unread-symbolic`,title:`All Mail`,description:`Select a conversation from the list to read it here.`,vexpand:!0}),t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,new T.NavigationPage({title:`All Mail`,child:t})}initialize(){this._view=new T.NavigationSplitView({sidebar:this.buildSidebar(),content:this.buildContent(),showContent:this.args.showContent,collapsed:this.args.collapsed,widthRequest:480,heightRequest:340}),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.showContent=this.args.showContent,this._view.collapsed=this.args.collapsed)}};C.type_ensure(K.$gtype);const kt={stories:[K]},At={title:`Navigation/Navigation View`,description:`Adw.NavigationView — a navigation stack. The root page pushes a detail page, which gets an automatic back button.`,controls:[{name:`rootTitle`,label:`Root title`,type:i.TEXT,defaultValue:`Contacts`},{name:`detailTitle`,label:`Detail title`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`animateTransitions`,label:`Animate transitions`,type:i.BOOLEAN,defaultValue:!0}]};var jt=__exportAll({NavigationViewStories:()=>Nt,NavigationViewStory:()=>Mt}),Mt=class NavigationViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookNavigationView`},NavigationViewStory)}constructor(){super(E.fromMeta(NavigationViewStory.getMetadata(),`Default`))}static getMetadata(){return{...At,component:T.NavigationView.$gtype}}buildPage(e,t){let n=new T.ToolbarView;return n.add_top_bar(new T.HeaderBar),n.content=t,new T.NavigationPage({title:e,child:n})}initialize(){this._view=new T.NavigationView({animateTransitions:this.args.animateTransitions,widthRequest:480,heightRequest:340});let e=this.buildPage(this.args.detailTitle,new T.StatusPage({iconName:`avatar-default-symbolic`,title:this.args.detailTitle,description:`Mathematician and writer, the first computer programmer.`,vexpand:!0})),t=new h.Button({label:`Open contact`,halign:h.Align.CENTER,valign:h.Align.CENTER,vexpand:!0});t.add_css_class(`pill`),t.add_css_class(`suggested-action`),t.connect(`clicked`,()=>{this._view?.push(e)});let n=this.buildPage(this.args.rootTitle,t);this._view.add(n),this._view.add(e),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.animateTransitions=this.args.animateTransitions)}};C.type_ensure(Mt.$gtype);const Nt={stories:[Mt]},Pt={title:`Navigation/Overlay Split View`,description:`Adw.OverlaySplitView — a sidebar shown beside the content, or overlaid on top of it when collapsed.`,controls:[{name:`showSidebar`,label:`Show sidebar`,type:i.BOOLEAN,defaultValue:!0},{name:`collapsed`,label:`Collapsed`,type:i.BOOLEAN,defaultValue:!1}]};var Ft=__exportAll({OverlaySplitViewStories:()=>It,OverlaySplitViewStory:()=>q}),q=class OverlaySplitViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookOverlaySplitView`},OverlaySplitViewStory)}constructor(){super(E.fromMeta(OverlaySplitViewStory.getMetadata(),`Default`))}static getMetadata(){return{...Pt,component:T.OverlaySplitView.$gtype}}buildSidebar(){let e=new T.PreferencesGroup;for(let[t,n]of[[`Home`,`go-home-symbolic`],[`Discover`,`system-search-symbolic`],[`Library`,`folder-music-symbolic`],[`Settings`,`emblem-system-symbolic`]]){let r=new T.ActionRow({title:t});r.add_prefix(new h.Image({iconName:n})),r.activatable=!0,e.add(r)}let t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar({showTitle:!1})),t.content=e,t.add_css_class(`sidebar`),t}buildContent(){let e=new T.StatusPage({iconName:`folder-music-symbolic`,title:`Your Library`,description:`Toggle the sidebar to browse sections. Collapse it to overlay the content.`,vexpand:!0}),t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,t}initialize(){this._view=new T.OverlaySplitView({sidebar:this.buildSidebar(),content:this.buildContent(),showSidebar:this.args.showSidebar,collapsed:this.args.collapsed,widthRequest:480,heightRequest:340}),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.showSidebar=this.args.showSidebar,this._view.collapsed=this.args.collapsed)}};C.type_ensure(q.$gtype);const It={stories:[q]},Lt={title:`Navigation/Sidebar`,description:`Adw.Sidebar — a selectable list of Adw.SidebarItem grouped into sections. Selecting an item updates the content.`,controls:[{name:`mode`,label:`Mode`,type:i.SELECT,options:[{label:`Sidebar`,value:`sidebar`},{label:`Page`,value:`page`}],defaultValue:`sidebar`},{name:`selected`,label:`Selected index`,type:i.NUMBER,min:0,max:3,step:1,defaultValue:0}]};var Rt=__exportAll({SidebarStories:()=>zt,SidebarStory:()=>J}),J=class SidebarStory extends E{_sidebar=null;_status=null;static{C.registerClass({GTypeName:`AdwStorybookSidebar`},SidebarStory)}constructor(){super(E.fromMeta(SidebarStory.getMetadata(),`Default`))}static getMetadata(){return{...Lt,component:T.Sidebar.$gtype}}items=[{title:`Inbox`,subtitle:`3 unread`,icon:`mail-unread-symbolic`},{title:`Starred`,subtitle:`Favourites`,icon:`starred-symbolic`},{title:`Sent`,subtitle:`Outgoing mail`,icon:`mail-send-symbolic`},{title:`Archive`,subtitle:`Older mail`,icon:`folder-symbolic`}];modeFromArg(e){return e===`page`?T.SidebarMode.PAGE:T.SidebarMode.SIDEBAR}syncContent(){if(!this._sidebar||!this._status)return;let e=this.items[this._sidebar.selected]??this.items[0];this._status.title=e.title,this._status.iconName=e.icon,this._status.description=e.subtitle}initialize(){let e=new T.SidebarSection({title:`Mailboxes`});for(let t of this.items)e.append(new T.SidebarItem({title:t.title,subtitle:t.subtitle,iconName:t.icon}));this._sidebar=new T.Sidebar({mode:this.modeFromArg(this.args.mode),selected:this.args.selected,widthRequest:220}),this._sidebar.append(e),this._sidebar.connect(`notify::selected`,()=>this.syncContent()),this._status=new T.StatusPage({hexpand:!0,vexpand:!0});let t=new h.Box({orientation:h.Orientation.HORIZONTAL,widthRequest:480,heightRequest:340});t.append(this._sidebar),t.append(new h.Separator({orientation:h.Orientation.VERTICAL})),t.append(this._status),this.syncContent(),this.addContent(t)}updateArgs(e){this._sidebar&&(this._sidebar.mode=this.modeFromArg(this.args.mode),this._sidebar.selected=this.args.selected,this.syncContent())}};C.type_ensure(J.$gtype);const zt={stories:[J]},Bt=[{title:`Sync`,kind:`switch`,active:!0},{title:`Export`,kind:`action`}],Vt=[`Blue`,`Teal`,`Green`,`Orange`],Y={appearance:`Appearance`,account:`Account`,shortcuts:`Shortcuts`,actions:`Actions`},X={bannerTitle:`You have unsaved changes`,bannerButton:`Save`,darkMode:`Dark mode`,darkModeSubtitle:`Use the dark Adwaita palette`,notifications:`Notifications`,notificationsSubtitle:`Show toasts for events`,accentColor:`Accent color`,name:`Name`,nameValue:`Ada Lovelace`,email:`Email`,emailValue:`ada@example.com`,devices:`Devices`,advanced:`Advanced`,advancedSubtitle:`More options`,save:`Save changes`,delete:`Delete account`},Z={value:3,lower:1,upper:10,step:1},Ht=[{title:`Copy`,accelerator:`<Control>C`},{title:`Select all`,accelerator:`<Shift><Control>a`},{title:`Switch tab`,accelerator:`<Alt>1...9`}],Ut={title:`Overview/Widgets`,description:`Many widgets at once, the way an app composes them: a banner, preference groups of rows, an expander, buttons and shortcut labels. Use it to judge spacing, alignment and the theme as a whole rather than one widget in isolation.`,controls:[{name:`revealed`,label:`Show banner`,type:i.BOOLEAN,description:`Adw.Banner:revealed — animates in and out`,defaultValue:!0}]};var Wt=__exportAll({OverviewWidgetsStories:()=>Kt,OverviewWidgetsStory:()=>Gt}),Gt=class OverviewWidgetsStory extends E{_banner=null;static{C.registerClass({GTypeName:`AdwStorybookOverviewWidgets`},OverviewWidgetsStory)}constructor(){super(E.fromMeta(OverviewWidgetsStory.getMetadata(),`Default`))}static getMetadata(){return Ut}initialize(){let e=new h.Box({orientation:h.Orientation.VERTICAL,hexpand:!0});this._banner=new T.Banner({title:X.bannerTitle,button_label:X.bannerButton,revealed:this.args.revealed}),e.append(this._banner);let t=new T.PreferencesPage({hexpand:!0}),n=new T.PreferencesGroup({title:Y.appearance});n.add(new T.SwitchRow({title:X.darkMode,subtitle:X.darkModeSubtitle,active:!1})),n.add(new T.SwitchRow({title:X.notifications,subtitle:X.notificationsSubtitle,active:!0})),n.add(new T.ComboRow({title:X.accentColor,model:h.StringList.new([...Vt]),selected:0})),t.add(n);let r=new T.PreferencesGroup({title:Y.account}),i=new T.EntryRow({title:X.name});i.set_text(X.nameValue),r.add(i);let a=new T.EntryRow({title:X.email});a.set_text(X.emailValue),r.add(a);let o=new T.SpinRow({title:X.devices,adjustment:new h.Adjustment({value:Z.value,lower:Z.lower,upper:Z.upper,step_increment:Z.step,page_increment:Z.step})});o.set_value(Z.value),r.add(o);let s=new T.ExpanderRow({title:X.advanced,subtitle:X.advancedSubtitle,expanded:!0});for(let e of Bt)s.add_row(e.kind===`switch`?new T.SwitchRow({title:e.title,active:e.active??!1}):new T.ActionRow({title:e.title}));r.add(s),t.add(r);let c=new T.PreferencesGroup({title:Y.shortcuts});for(let e of Ht){let t=new T.ActionRow({title:e.title});t.add_suffix(new T.ShortcutLabel({accelerator:e.accelerator,valign:h.Align.CENTER})),c.add(t)}t.add(c);let l=new T.PreferencesGroup({title:Y.actions}),u=new h.Box({orientation:h.Orientation.HORIZONTAL,spacing:12,homogeneous:!0,margin_top:6,margin_bottom:6}),d=new h.Button({label:X.save});d.add_css_class(`suggested-action`),u.append(d);let f=new h.Button({label:X.delete});f.add_css_class(`destructive-action`),u.append(f),l.add(u),t.add(l),e.append(t),this.addContent(e)}updateArgs(e){this._banner?.set_revealed(this.args.revealed)}};C.type_ensure(Gt.$gtype);const Kt={stories:[Gt]},qt={title:`Presentation/Avatar`,description:`A circular avatar that derives initials (and a colour) from a name, or shows a symbolic icon.`,controls:[{name:`text`,label:`Name`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`size`,label:`Size`,type:i.RANGE,min:24,max:160,step:8,defaultValue:96},{name:`showInitials`,label:`Show initials`,type:i.BOOLEAN,defaultValue:!0},{name:`iconName`,label:`Fallback icon`,type:i.SELECT,options:[{label:`Person`,value:`avatar-default-symbolic`},{label:`Contact`,value:`contact-new-symbolic`},{label:`Camera`,value:`camera-photo-symbolic`}],defaultValue:`avatar-default-symbolic`}]};var Jt=__exportAll({AvatarStories:()=>Xt,AvatarStory:()=>Yt}),Yt=class AvatarStory extends E{_avatar=null;static{C.registerClass({GTypeName:`AdwStorybookAvatar`},AvatarStory)}constructor(){super(E.fromMeta(AvatarStory.getMetadata(),`Default`))}static getMetadata(){return{...qt,component:T.Avatar.$gtype}}initialize(){this._avatar=new T.Avatar({size:this.args.size,text:this.args.text,showInitials:this.args.showInitials,iconName:this.args.iconName}),this.addContent(this._avatar)}updateArgs(e){this._avatar&&(this._avatar.size=this.args.size,this._avatar.text=this.args.text,this._avatar.showInitials=this.args.showInitials,this._avatar.iconName=this.args.iconName)}};C.type_ensure(Yt.$gtype);const Xt={stories:[Yt]},Zt={title:`Presentation/Banner`,description:`Adw.Banner — a full-width strip carrying a status message and an optional action button.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Metered connection — updates paused`},{name:`buttonLabel`,label:`Button label`,type:i.TEXT,defaultValue:`Resume`},{name:`revealed`,label:`Revealed`,type:i.BOOLEAN,defaultValue:!0},{name:`useMarkup`,label:`Use markup`,type:i.BOOLEAN,defaultValue:!1}]};var Qt=__exportAll({BannerStories:()=>en,BannerStory:()=>$t}),$t=class BannerStory extends E{_banner=null;static{C.registerClass({GTypeName:`AdwStorybookBanner`},BannerStory)}constructor(){super(E.fromMeta(BannerStory.getMetadata(),`Default`))}static getMetadata(){return{...Zt,component:T.Banner.$gtype}}initialize(){this._banner=new T.Banner({title:this.args.title,buttonLabel:this.args.buttonLabel,revealed:this.args.revealed,useMarkup:this.args.useMarkup});let e=new h.Box({orientation:h.Orientation.VERTICAL,widthRequest:460});e.append(this._banner),this.addContent(e)}updateArgs(e){this._banner&&(this._banner.title=this.args.title,this._banner.buttonLabel=this.args.buttonLabel,this._banner.revealed=this.args.revealed,this._banner.useMarkup=this.args.useMarkup)}};C.type_ensure($t.$gtype);const en={stories:[$t]},tn=[{label:`Single`,accelerator:`<Control>C`},{label:`Modifier order`,accelerator:`<Shift><Control>a`},{label:`Alternatives`,accelerator:`<Shift>A Home`},{label:`Range`,accelerator:`<Alt>1...9`},{label:`In sequence`,accelerator:`<Control>C+<Control>X`},{label:`Together`,accelerator:`Control_L&Control_R`},{label:`Nested`,accelerator:`<Alt>1...9 <Alt>0`},{label:`Unset`,accelerator:``}],nn={title:`Presentation/Shortcut Label`,description:`Adw.ShortcutLabel — an accelerator drawn as keycaps. The four grammar levels: alternatives (space), a range (...), pressed in sequence (+), and pressed together (&).`,controls:[{name:`accelerator`,label:`Accelerator`,type:i.SELECT,options:[{label:`Ctrl+C`,value:`<Control>C`},{label:`Modifier order (Shift+Ctrl+A)`,value:`<Shift><Control>a`},{label:`Alternatives (Shift+A / Home)`,value:`<Shift>A Home`},{label:`Range (Alt+1…9)`,value:`<Alt>1...9`},{label:`In sequence (Ctrl+C → Ctrl+X)`,value:`<Control>C+<Control>X`},{label:`Together (Ctrl L + Ctrl R)`,value:`Control_L&Control_R`},{label:`Nested (Alt+1…9 / Alt+0)`,value:`<Alt>1...9 <Alt>0`},{label:`Glyph key (Ctrl+Space)`,value:`<Control>space`},{label:`Arrow key (Left)`,value:`Left`},{label:`Unset — shows the placeholder`,value:``}],defaultValue:`<Control>C`},{name:`disabledText`,label:`Placeholder`,type:i.TEXT,defaultValue:`Disabled`}]},rn={title:`Presentation/Shortcut Label (All Levels)`,description:`Every Adw.ShortcutLabel grammar level at once: alternatives (space), a range (...), pressed in sequence (+), pressed together (&) — plus GTK's fixed keycap order and the disabled placeholder.`,controls:[{name:`disabledText`,label:`Placeholder`,type:i.TEXT,defaultValue:`Disabled`}]};var an=__exportAll({ShortcutLabelLevelsStory:()=>sn,ShortcutLabelStories:()=>cn,ShortcutLabelStory:()=>on}),on=class ShortcutLabelStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookShortcutLabel`},ShortcutLabelStory)}constructor(){super(E.fromMeta(ShortcutLabelStory.getMetadata(),`Default`))}static getMetadata(){return{...nn,component:T.ShortcutLabel.$gtype}}initialize(){this._widget=new T.ShortcutLabel({accelerator:this.args.accelerator,disabledText:this.args.disabledText,halign:h.Align.CENTER,valign:h.Align.CENTER}),this.addContent(this._widget)}updateArgs(e){this._widget&&(this._widget.disabledText=this.args.disabledText,this._widget.accelerator=this.args.accelerator)}};C.type_ensure(on.$gtype);var sn=class ShortcutLabelLevelsStory extends E{_widgets=[];static{C.registerClass({GTypeName:`AdwStorybookShortcutLabelLevels`},ShortcutLabelLevelsStory)}constructor(){super(E.fromMeta(ShortcutLabelLevelsStory.getMetadata(),`Default`))}static getMetadata(){return{...rn,component:T.ShortcutLabel.$gtype}}initialize(){let e=new h.Grid({row_spacing:12,column_spacing:24});for(let[t,n]of tn.entries()){let r=new h.Label({label:n.label,halign:h.Align.START});r.add_css_class(`dimmed`),e.attach(r,0,t,1,1);let i=new T.ShortcutLabel({accelerator:n.accelerator,disabledText:this.args.disabledText,halign:h.Align.END,hexpand:!0});e.attach(i,1,t,1,1),this._widgets.push(i)}this.addContent(e)}updateArgs(e){for(let e of this._widgets)e.disabledText=this.args.disabledText}};C.type_ensure(sn.$gtype);const cn={stories:[on,sn]},ln={title:`Presentation/Spinner`,description:`Adw.Spinner — a lightweight loading indicator that spins continuously while visible.`,controls:[{name:`size`,label:`Size`,type:i.RANGE,min:16,max:64,step:4,defaultValue:48}]};var un=__exportAll({SpinnerStories:()=>fn,SpinnerStory:()=>dn}),dn=class SpinnerStory extends E{_spinner=null;static{C.registerClass({GTypeName:`AdwStorybookSpinner`},SpinnerStory)}constructor(){super(E.fromMeta(SpinnerStory.getMetadata(),`Default`))}static getMetadata(){return{...ln,component:T.Spinner.$gtype}}initialize(){let e=this.args.size;this._spinner=new T.Spinner({widthRequest:e,heightRequest:e,halign:h.Align.CENTER,valign:h.Align.CENTER}),this.addContent(this._spinner)}updateArgs(e){if(!this._spinner)return;let t=this.args.size;this._spinner.widthRequest=t,this._spinner.heightRequest=t}};C.type_ensure(dn.$gtype);const fn={stories:[dn]},pn={title:`Presentation/Status Page`,description:`Adw.StatusPage — a full-page empty state with an icon, title, description and optional action.`,controls:[{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Folder`,value:`folder-symbolic`},{label:`Mail`,value:`mail-unread-symbolic`},{label:`Search`,value:`system-search-symbolic`},{label:`Star`,value:`starred-symbolic`}],defaultValue:`folder-symbolic`},{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`No Documents`},{name:`description`,label:`Description`,type:i.TEXT,defaultValue:`Documents you create or open will appear here.`}]};var mn=__exportAll({StatusPageStories:()=>gn,StatusPageStory:()=>hn}),hn=class StatusPageStory extends E{_statusPage=null;static{C.registerClass({GTypeName:`AdwStorybookStatusPage`},StatusPageStory)}constructor(){super(E.fromMeta(StatusPageStory.getMetadata(),`Default`))}static getMetadata(){return{...pn,component:T.StatusPage.$gtype}}initialize(){let e=new h.Button({label:`New Document`,halign:h.Align.CENTER,cssClasses:[`pill`,`suggested-action`]});this._statusPage=new T.StatusPage({iconName:this.args.iconName,title:this.args.title,description:this.args.description,child:e,widthRequest:460,heightRequest:320}),this.addContent(this._statusPage)}updateArgs(e){this._statusPage&&(this._statusPage.iconName=this.args.iconName,this._statusPage.title=this.args.title,this._statusPage.description=this.args.description)}};C.type_ensure(hn.$gtype);const gn={stories:[hn]},_n={title:`Presentation/Window Title`,description:`Adw.WindowTitle — a compact title/subtitle widget intended for a window or header bar.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Inbox`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`3 unread messages`}]};var vn=__exportAll({WindowTitleStories:()=>bn,WindowTitleStory:()=>yn}),yn=class WindowTitleStory extends E{_windowTitle=null;static{C.registerClass({GTypeName:`AdwStorybookWindowTitle`},WindowTitleStory)}constructor(){super(E.fromMeta(WindowTitleStory.getMetadata(),`Default`))}static getMetadata(){return{..._n,component:T.WindowTitle.$gtype}}initialize(){this._windowTitle=new T.WindowTitle({title:this.args.title,subtitle:this.args.subtitle}),this.addContent(this._windowTitle)}updateArgs(e){this._windowTitle&&(this._windowTitle.title=this.args.title,this._windowTitle.subtitle=this.args.subtitle)}};C.type_ensure(yn.$gtype);const bn={stories:[yn]},xn={title:`Boxed Lists/Action Row`,description:`Adw.ActionRow — a preferences row with a title/subtitle, a prefix icon and a suffix button, shown inside a boxed list.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Wi-Fi`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Connected to Highgarden 5GHz`},{name:`iconName`,label:`Prefix icon`,type:i.SELECT,options:[{label:`Network`,value:`network-wireless-symbolic`},{label:`Folder`,value:`folder-symbolic`},{label:`Starred`,value:`starred-symbolic`}],defaultValue:`network-wireless-symbolic`},{name:`activatable`,label:`Activatable`,type:i.BOOLEAN,defaultValue:!0}]};var Sn=__exportAll({ActionRowStories:()=>wn,ActionRowStory:()=>Cn}),Cn=class ActionRowStory extends E{_row=null;_icon=null;_button=null;static{C.registerClass({GTypeName:`AdwStorybookActionRow`},ActionRowStory)}constructor(){super(E.fromMeta(ActionRowStory.getMetadata(),`Default`))}static getMetadata(){return{...xn,component:T.ActionRow.$gtype}}initialize(){this._row=new T.ActionRow({title:this.args.title,subtitle:this.args.subtitle}),this._icon=new h.Image({iconName:this.args.iconName}),this._row.add_prefix(this._icon),this._button=new h.Button({iconName:`go-next-symbolic`,valign:h.Align.CENTER}),this._button.add_css_class(`flat`),this._row.add_suffix(this._button),this._row.activatableWidget=this._button,this._row.activatable=this.args.activatable;let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){!this._row||!this._icon||(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._icon.iconName=this.args.iconName,this._row.activatable=this.args.activatable)}};C.type_ensure(Cn.$gtype);const wn={stories:[Cn]},Tn={title:`Boxed Lists/Button Row`,description:`Adw.ButtonRow — a full-width row that acts as a button, with an optional icon and style class.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Add account`},{name:`startIconName`,label:`Start icon`,type:i.SELECT,options:[{label:`Add`,value:`list-add-symbolic`},{label:`Trash`,value:`user-trash-symbolic`},{label:`None`,value:``}],defaultValue:`list-add-symbolic`},{name:`style`,label:`Style`,type:i.SELECT,options:[{label:`None`,value:`none`},{label:`Suggested`,value:`suggested-action`},{label:`Destructive`,value:`destructive-action`}],defaultValue:`suggested-action`}]};var En=__exportAll({ButtonRowStories:()=>kn,ButtonRowStory:()=>On});const Dn=[`suggested-action`,`destructive-action`];var On=class ButtonRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookButtonRow`},ButtonRowStory)}constructor(){super(E.fromMeta(ButtonRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Tn,component:T.ButtonRow.$gtype}}initialize(){this._row=new T.ButtonRow({title:this.args.title,startIconName:this.args.startIconName}),this._applyStyle(this.args.style);let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}_applyStyle(e){if(this._row){for(let e of Dn)this._row.remove_css_class(e);e!==`none`&&this._row.add_css_class(e)}}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.startIconName=this.args.startIconName,this._applyStyle(this.args.style))}};C.type_ensure(On.$gtype);const kn={stories:[On]},An=[`Blue`,`Teal`,`Green`,`Orange`,`Purple`],jn={title:`Boxed Lists/Combo Row`,description:`Adw.ComboRow — a preferences row with an inline drop-down backed by a Gtk.StringList.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Accent colour`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Used to highlight selected items`},{name:`selected`,label:`Selected`,type:i.NUMBER,min:0,max:4,step:1,defaultValue:1}]};var Mn=__exportAll({ComboRowStories:()=>Pn,ComboRowStory:()=>Nn}),Nn=class ComboRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookComboRow`},ComboRowStory)}constructor(){super(E.fromMeta(ComboRowStory.getMetadata(),`Default`))}static getMetadata(){return{...jn,component:T.ComboRow.$gtype}}initialize(){this._row=new T.ComboRow({title:this.args.title,subtitle:this.args.subtitle,model:new h.StringList({strings:[...An]}),selected:this.args.selected});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.selected=this.args.selected)}};C.type_ensure(Nn.$gtype);const Pn={stories:[Nn]},Fn={title:`Boxed Lists/Entry Row`,description:`Adw.EntryRow — a preferences row whose title doubles as placeholder text for an inline entry.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Display name`},{name:`text`,label:`Text`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`showApplyButton`,label:`Show apply button`,type:i.BOOLEAN,defaultValue:!0}]};var In=__exportAll({EntryRowStories:()=>Rn,EntryRowStory:()=>Ln}),Ln=class EntryRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookEntryRow`},EntryRowStory)}constructor(){super(E.fromMeta(EntryRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Fn,component:T.EntryRow.$gtype}}initialize(){this._row=new T.EntryRow({title:this.args.title,text:this.args.text,showApplyButton:this.args.showApplyButton});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.text=this.args.text,this._row.showApplyButton=this.args.showApplyButton)}};C.type_ensure(Ln.$gtype);const Rn={stories:[Ln]},zn={title:`Boxed Lists/Expander Row`,description:`Adw.ExpanderRow — a preferences row that discloses nested rows and can carry an enable switch.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Proxy settings`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Route traffic through a custom proxy`},{name:`expanded`,label:`Expanded`,type:i.BOOLEAN,defaultValue:!0},{name:`showEnableSwitch`,label:`Show enable switch`,type:i.BOOLEAN,defaultValue:!1}]};var Bn=__exportAll({ExpanderRowStories:()=>Hn,ExpanderRowStory:()=>Vn}),Vn=class ExpanderRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookExpanderRow`},ExpanderRowStory)}constructor(){super(E.fromMeta(ExpanderRowStory.getMetadata(),`Default`))}static getMetadata(){return{...zn,component:T.ExpanderRow.$gtype}}initialize(){this._row=new T.ExpanderRow({title:this.args.title,subtitle:this.args.subtitle,expanded:this.args.expanded,showEnableSwitch:this.args.showEnableSwitch}),this._row.add_row(new T.EntryRow({title:`Host`,text:`proxy.example.com`})),this._row.add_row(new T.SwitchRow({title:`Use authentication`,active:!1}));let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.expanded=this.args.expanded,this._row.showEnableSwitch=this.args.showEnableSwitch)}};C.type_ensure(Vn.$gtype);const Hn={stories:[Vn]},Un={title:`Boxed Lists/Password Entry Row`,description:`Adw.PasswordEntryRow — an entry row that masks its contents and shows a peek toggle.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Password`},{name:`text`,label:`Text`,type:i.TEXT,defaultValue:`correct-horse-battery`}]};var Wn=__exportAll({PasswordEntryRowStories:()=>Kn,PasswordEntryRowStory:()=>Gn}),Gn=class PasswordEntryRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookPasswordEntryRow`},PasswordEntryRowStory)}constructor(){super(E.fromMeta(PasswordEntryRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Un,component:T.PasswordEntryRow.$gtype}}initialize(){this._row=new T.PasswordEntryRow({title:this.args.title,text:this.args.text});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.text=this.args.text)}};C.type_ensure(Gn.$gtype);const Kn={stories:[Gn]},qn={title:`Boxed Lists/Preferences Group`,description:`Adw.PreferencesGroup — the boxed-list container that gathers a title, description, header-suffix widget and rows.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Account`},{name:`description`,label:`Description`,type:i.TEXT,defaultValue:`Manage how this device signs in and syncs.`}]};var Jn=__exportAll({PreferencesGroupStories:()=>Yn,PreferencesGroupStory:()=>Q}),Q=class PreferencesGroupStory extends E{_prefsGroup=null;static{C.registerClass({GTypeName:`AdwStorybookPreferencesGroup`},PreferencesGroupStory)}constructor(){super(E.fromMeta(PreferencesGroupStory.getMetadata(),`Default`))}static getMetadata(){return{...qn,component:T.PreferencesGroup.$gtype}}initialize(){let e=new h.Button({label:`Sign out`,valign:h.Align.CENTER});e.add_css_class(`flat`),this._prefsGroup=new T.PreferencesGroup({title:this.args.title,description:this.args.description,headerSuffix:e});let t=new T.EntryRow({title:`Display name`,text:`Grace Hopper`});this._prefsGroup.add(t);let n=new T.SwitchRow({title:`Sync over Wi-Fi only`,subtitle:`Avoid using mobile data for backups`,active:!0});this._prefsGroup.add(n);let r=new T.ComboRow({title:`Region`,model:new h.StringList({strings:[`Europe`,`Americas`,`Asia`,`Oceania`]}),selected:0});this._prefsGroup.add(r);let i=new T.Clamp({maximumSize:400,child:this._prefsGroup});this.addContent(i)}updateArgs(e){this._prefsGroup&&(this._prefsGroup.title=this.args.title,this._prefsGroup.description=this.args.description)}};C.type_ensure(Q.$gtype);const Yn={stories:[Q]},Xn={title:`Boxed Lists/Spin Row`,description:`Adw.SpinRow — a preferences row with an inline spin button over a numeric adjustment.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Font size`},{name:`value`,label:`Value`,type:i.NUMBER,min:0,max:100,step:1,defaultValue:16},{name:`digits`,label:`Digits`,type:i.NUMBER,min:0,max:4,step:1,defaultValue:0}]};var Zn=__exportAll({SpinRowStories:()=>$n,SpinRowStory:()=>Qn}),Qn=class SpinRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookSpinRow`},SpinRowStory)}constructor(){super(E.fromMeta(SpinRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Xn,component:T.SpinRow.$gtype}}initialize(){this._row=new T.SpinRow({title:this.args.title,adjustment:new h.Adjustment({lower:0,upper:100,value:this.args.value,stepIncrement:1,pageIncrement:10}),digits:this.args.digits});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.value=this.args.value,this._row.digits=this.args.digits)}};C.type_ensure(Qn.$gtype);const $n={stories:[Qn]},er={title:`Boxed Lists/Switch Row`,description:`Adw.SwitchRow — a preferences row with a trailing switch, shown inside a boxed list.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Automatic updates`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Download and install updates without asking`},{name:`active`,label:`Active`,type:i.BOOLEAN,defaultValue:!0}]};var tr=__exportAll({SwitchRowStories:()=>rr,SwitchRowStory:()=>nr}),nr=class SwitchRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookSwitchRow`},SwitchRowStory)}constructor(){super(E.fromMeta(SwitchRowStory.getMetadata(),`Default`))}static getMetadata(){return{...er,component:T.SwitchRow.$gtype}}initialize(){this._row=new T.SwitchRow({title:this.args.title,subtitle:this.args.subtitle,active:this.args.active});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.active=this.args.active)}};C.type_ensure(nr.$gtype);const rr={stories:[nr]},ir=[{name:`allowScrollWheel`,label:`Allow scroll wheel`,type:i.BOOLEAN,defaultValue:!0},{name:`allowLongSwipes`,label:`Allow long swipes`,type:i.BOOLEAN,defaultValue:!1}],ar={title:`View Switching/Carousel (Dots)`,description:`Adw.Carousel — a horizontally swipeable pager with three pages, paired with Adw.CarouselIndicatorDots.`,controls:ir},or={title:`View Switching/Carousel (Lines)`,description:`Adw.Carousel — the same swipeable pager paired with Adw.CarouselIndicatorLines instead of dots.`,controls:ir};var sr=__exportAll({CarouselDotsStory:()=>lr,CarouselLinesStory:()=>ur,CarouselStories:()=>dr});const cr=[{title:`Welcome`,css:`accent`},{title:`Discover`,css:`success`},{title:`Get started`,css:`warning`}];function buildPage(e,t){let n=new h.Box({orientation:h.Orientation.VERTICAL,halign:h.Align.CENTER,valign:h.Align.CENTER,widthRequest:440,heightRequest:260});n.add_css_class(`card`),n.add_css_class(t);let r=new h.Label({label:e,vexpand:!0,valign:h.Align.CENTER});return r.add_css_class(`title-1`),n.append(r),n}var lr=class CarouselDotsStory extends E{_carousel=null;static{C.registerClass({GTypeName:`AdwStorybookCarouselDots`},CarouselDotsStory)}constructor(){super(E.fromMeta(CarouselDotsStory.getMetadata(),`Default`))}static getMetadata(){return{...ar,component:T.Carousel.$gtype}}initialize(){this._carousel=new T.Carousel({allowScrollWheel:this.args.allowScrollWheel,allowLongSwipes:this.args.allowLongSwipes,vexpand:!0});for(let e of cr)this._carousel.append(buildPage(e.title,e.css));let e=new T.CarouselIndicatorDots({carousel:this._carousel}),t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._carousel),t.append(e),this.addContent(t)}updateArgs(e){this._carousel&&(this._carousel.allowScrollWheel=this.args.allowScrollWheel,this._carousel.allowLongSwipes=this.args.allowLongSwipes)}};C.type_ensure(lr.$gtype);var ur=class CarouselLinesStory extends E{_carousel=null;static{C.registerClass({GTypeName:`AdwStorybookCarouselLines`},CarouselLinesStory)}constructor(){super(E.fromMeta(CarouselLinesStory.getMetadata(),`Default`))}static getMetadata(){return{...or,component:T.Carousel.$gtype}}initialize(){this._carousel=new T.Carousel({allowScrollWheel:this.args.allowScrollWheel,allowLongSwipes:this.args.allowLongSwipes,vexpand:!0});for(let e of cr)this._carousel.append(buildPage(e.title,e.css));let e=new T.CarouselIndicatorLines({carousel:this._carousel}),t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._carousel),t.append(e),this.addContent(t)}updateArgs(e){this._carousel&&(this._carousel.allowScrollWheel=this.args.allowScrollWheel,this._carousel.allowLongSwipes=this.args.allowLongSwipes)}};C.type_ensure(ur.$gtype);const dr={stories:[lr,ur]},fr={title:`View Switching/Inline View Switcher`,description:`Adw.InlineViewSwitcher — a compact inline switcher that can show labels, icons, or both for an Adw.ViewStack.`,controls:[{name:`displayMode`,label:`Display mode`,type:i.SELECT,options:[{label:`Labels`,value:`labels`},{label:`Icons`,value:`icons`},{label:`Both`,value:`both`}],defaultValue:`both`}]};var pr=__exportAll({InlineViewSwitcherStories:()=>hr,InlineViewSwitcherStory:()=>mr}),mr=class InlineViewSwitcherStory extends E{_switcher=null;static{C.registerClass({GTypeName:`AdwStorybookInlineViewSwitcher`},InlineViewSwitcherStory)}constructor(){super(E.fromMeta(InlineViewSwitcherStory.getMetadata(),`Default`))}static getMetadata(){return{...fr,component:T.InlineViewSwitcher.$gtype}}buildPage(e,t,n){return new T.StatusPage({iconName:t,title:e,description:n,vexpand:!0})}initialize(){let e=new T.ViewStack({vexpand:!0});e.add_titled_with_icon(this.buildPage(`Overview`,`view-grid-symbolic`,`A quick summary of your project.`),`overview`,`Overview`,`view-grid-symbolic`),e.add_titled_with_icon(this.buildPage(`Activity`,`document-edit-symbolic`,`Recent edits and changes.`),`activity`,`Activity`,`document-edit-symbolic`),e.add_titled_with_icon(this.buildPage(`Settings`,`emblem-system-symbolic`,`Configure how things behave.`),`settings`,`Settings`,`emblem-system-symbolic`),this._switcher=new T.InlineViewSwitcher({stack:e,displayMode:this.modeFromArg(this.args.displayMode),halign:h.Align.CENTER});let t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._switcher),t.append(e),this.addContent(t)}modeFromArg(e){return e===`labels`?T.InlineViewSwitcherDisplayMode.LABELS:e===`icons`?T.InlineViewSwitcherDisplayMode.ICONS:T.InlineViewSwitcherDisplayMode.BOTH}updateArgs(e){this._switcher&&(this._switcher.displayMode=this.modeFromArg(this.args.displayMode))}};C.type_ensure(mr.$gtype);const hr={stories:[mr]},gr={title:`View Switching/Tab View`,description:`Adw.TabView with an Adw.TabBar header — three tabbed pages; the tab bar can auto-hide when only one tab remains.`,controls:[{name:`autohide`,label:`Autohide tab bar`,type:i.BOOLEAN,defaultValue:!1}]};var _r=__exportAll({TabViewStories:()=>br,TabViewStory:()=>yr});const vr=[{title:`Overview`,body:`A summary of everything at a glance.`},{title:`Details`,body:`The specifics, broken down line by line.`},{title:`History`,body:`A log of every change made so far.`}];var yr=class TabViewStory extends E{_tabBar=null;static{C.registerClass({GTypeName:`AdwStorybookTabView`},TabViewStory)}constructor(){super(E.fromMeta(TabViewStory.getMetadata(),`Default`))}static getMetadata(){return{...gr,component:T.TabView.$gtype}}buildPageBody(e,t){return new T.StatusPage({iconName:`view-paged-symbolic`,title:e,description:t,vexpand:!0})}initialize(){let e=new T.TabView({vexpand:!0});for(let t of vr){let n=e.append(this.buildPageBody(t.title,t.body));n.title=t.title}this._tabBar=new T.TabBar({view:e,autohide:this.args.autohide});let t=new h.Box({orientation:h.Orientation.VERTICAL,widthRequest:480,heightRequest:340});t.append(this._tabBar),t.append(e),this.addContent(t)}updateArgs(e){this._tabBar&&(this._tabBar.autohide=this.args.autohide)}};C.type_ensure(yr.$gtype);const br={stories:[yr]},xr=[{name:`inbox`,title:`Inbox`,icon:`mail-unread-symbolic`},{name:`starred`,title:`Starred`,icon:`starred-symbolic`},{name:`archive`,title:`Archive`,icon:`folder-symbolic`}],Sr={title:`View Switching/View Switcher Bar`,description:"Adw.ViewSwitcherBar — the narrow-window switcher, pinned to the bottom of a toolbar view. `reveal` is a REQUEST, not a state: a stack with fewer than two pages stays collapsed however loudly it is asked.",controls:[{name:`reveal`,label:`Reveal`,type:i.BOOLEAN,defaultValue:!0}]};var Cr=__exportAll({ViewSwitcherBarStories:()=>Tr,ViewSwitcherBarStory:()=>wr}),wr=class ViewSwitcherBarStory extends E{_bar=null;static{C.registerClass({GTypeName:`AdwStorybookViewSwitcherBar`},ViewSwitcherBarStory)}constructor(){super(E.fromMeta(ViewSwitcherBarStory.getMetadata(),`Default`))}static getMetadata(){return{...Sr,component:T.ViewSwitcherBar.$gtype}}initialize(){let e=new T.ViewStack({vexpand:!0});for(let t of xr){let n=new T.StatusPage({iconName:t.icon,title:t.title,description:`The ${t.title.toLowerCase()} page.`,vexpand:!0});e.add_titled_with_icon(n,t.name,t.title,t.icon)}this._bar=new T.ViewSwitcherBar({stack:e}),this._apply();let t=new T.ToolbarView({content:e,widthRequest:360,heightRequest:360});t.add_bottom_bar(this._bar),this.addContent(t)}updateArgs(e){this._apply()}_apply(){this._bar&&(this._bar.reveal=this.args.reveal)}};C.type_ensure(wr.$gtype);const Tr={stories:[wr]},Er={title:`View Switching/View Switcher`,description:`Adw.ViewSwitcher — a segmented switcher whose buttons select pages in a paired Adw.ViewStack.`,controls:[{name:`policy`,label:`Policy`,type:i.SELECT,options:[{label:`Wide`,value:`wide`},{label:`Narrow`,value:`narrow`}],defaultValue:`wide`}]};var Dr=__exportAll({ViewSwitcherStories:()=>Or,ViewSwitcherStory:()=>$}),$=class ViewSwitcherStory extends E{_switcher=null;static{C.registerClass({GTypeName:`AdwStorybookViewSwitcher`},ViewSwitcherStory)}constructor(){super(E.fromMeta(ViewSwitcherStory.getMetadata(),`Default`))}static getMetadata(){return{...Er,component:T.ViewSwitcher.$gtype}}buildPage(e,t,n){return new T.StatusPage({iconName:t,title:e,description:n,vexpand:!0})}initialize(){let e=new T.ViewStack({vexpand:!0});e.add_titled_with_icon(this.buildPage(`Inbox`,`mail-unread-symbolic`,`You have three unread conversations.`),`inbox`,`Inbox`,`mail-unread-symbolic`),e.add_titled_with_icon(this.buildPage(`Starred`,`starred-symbolic`,`Messages you have marked as important.`),`starred`,`Starred`,`starred-symbolic`),e.add_titled_with_icon(this.buildPage(`Archive`,`folder-symbolic`,`Older conversations kept for reference.`),`archive`,`Archive`,`folder-symbolic`),this._switcher=new T.ViewSwitcher({stack:e,policy:this.policyFromArg(this.args.policy),halign:h.Align.CENTER});let t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._switcher),t.append(e),this.addContent(t)}policyFromArg(e){return e===`narrow`?T.ViewSwitcherPolicy.NARROW:T.ViewSwitcherPolicy.WIDE}updateArgs(e){this._switcher&&(this._switcher.policy=this.policyFromArg(this.args.policy))}};C.type_ensure($.$gtype);const Or={stories:[$]};await runStorybook({applicationId:`org.gjsify.AdwaitaStorybook`,title:`Adwaita Storybook`,stories:collectStoryModules([ke,Me,Le,Ve,We,Ye,Qe,tt,it,st,ut,pt,gt,yt,St,Tt,Ot,jt,Ft,Rt,Wt,Jt,Qt,an,un,mn,vn,Sn,En,Mn,In,Bn,Wn,Jn,Zn,tr,sr,pr,_r,Cr,Dr])});export{};
334
+ `||n===` `||n===` `){if(r)continue;e+=` `,r=!0;continue}e+=n,r=!1}n+=escapeMarkup(e)}}return n}function parseDescription(e,t,n){let r=new Map,bucketFor=(e,t)=>{if(localeScore(n,e)===0&&e!==`C`)return null;let i=r.get(e);return i===void 0&&(i=[],r.set(e,i),t!==void 0&&i.push(`<${t}>\n`)),i};for(let n of childElements(e,t.start,t.end))if(n.name===`p`)bucketFor(lang(n))?.push(`<p>${inlineMarkup(e,n)}</p>\n`);else if(n.name===`ul`||n.name===`ol`){for(let e of r.values())e.push(`<${n.name}>\n`);for(let t of childElements(e,n.start,n.end))t.name===`li`&&bucketFor(lang(t),n.name)?.push(`<li>${inlineMarkup(e,t)}</li>\n`);for(let e of r.values())e.push(`</${n.name}>\n`)}let i=r.get(`C`),a=0;for(let[e,t]of r){let r=localeScore(n,e);r>a&&(a=r,i=t)}return i===void 0?null:i.join(``)}function parseAppdata(e,t={}){let n=t.locale??`C`,r=scanXml(e),i=childElements(r,0,r.length).find(e=>e.name===`component`||e.name===`application`);if(i===void 0)return{...Ce};let a={...Ce},o={value:null,score:0},s={value:null,score:0},c=[],l=null;for(let e of childElements(r,i.start,i.end))switch(e.name){case`id`:a.applicationId===null&&(a.applicationId=elementText(r,e));break;case`name`:considerTranslatable(o,e,elementText(r,e),localeScore(n,lang(e)));break;case`developer`:for(let t of childElements(r,e.start,e.end)){if(t.name!==`name`)continue;let e=localeScore(n,lang(t))+1024;e>s.score&&(lang(t)===`C`||e>1024)&&(s.score=e,s.value=elementText(r,t))}break;case`developer_name`:considerTranslatable(s,e,elementText(r,e),localeScore(n,lang(e)));break;case`url`:{let t=elementText(r,e);e.attributes.type===`homepage`?a.website=t:e.attributes.type===`bugtracker`?a.issueUrl=t:e.attributes.type===`help`&&(a.supportUrl=t);break}case`launchable`:e.attributes.type===`desktop-id`&&c.push(elementText(r,e));break;case`project_license`:a.license===null&&(a.license=elementText(r,e));break;case`releases`:l===null&&(l=e);break;default:break}if(a.applicationName=o.value,a.developerName=s.value,l!==null){let e=childElements(r,l.start,l.end).filter(e=>e.name===`release`);a.version=e[0]?.attributes.version??null;let i=t.releaseNotesVersion;if(i!==void 0&&i!==``){let t=e.find(e=>e.attributes.version===i),o=t&&childElements(r,t.start,t.end).find(e=>e.name===`description`);o&&(a.releaseNotes=parseDescription(r,o,n))}}a.applicationId!==null&&a.applicationId.endsWith(`.desktop`)&&(c.includes(`${a.applicationId}.desktop`)||(a.applicationId=a.applicationId.slice(0,-8)));for(let e of Object.keys(a))a[e]===``&&(a[e]=null);return a}const we={"GPL-2.0-or-later":h.License.GPL_2_0,"GPL-3.0-or-later":h.License.GPL_3_0,"LGPL-2.1-or-later":h.License.LGPL_2_1,"LGPL-3.0-or-later":h.License.LGPL_3_0,"BSD-2-Clause":h.License.BSD,MIT:h.License.MIT_X11,"Artistic-2.0":h.License.ARTISTIC,"GPL-2.0-only":h.License.GPL_2_0_ONLY,"GPL-3.0-only":h.License.GPL_3_0_ONLY,"LGPL-2.1-only":h.License.LGPL_2_1_ONLY,"LGPL-3.0-only":h.License.LGPL_3_0_ONLY,"AGPL-3.0-or-later":h.License.AGPL_3_0,"AGPL-3.0-only":h.License.AGPL_3_0_ONLY,"BSD-3-Clause":h.License.BSD_3,"Apache-2.0":h.License.APACHE_2_0,"MPL-2.0":h.License.MPL_2_0,"0BSD":h.License[`0BSD`],"GPL-2.0":h.License.GPL_2_0_ONLY,"GPL-3.0":h.License.GPL_3_0_ONLY};function licenseTypeFor(e){return we[e]??h.License.CUSTOM}function hasAppdataConstructor(e=T){try{return typeof e?.AboutDialog?.new_from_appdata==`function`}catch{return!1}}function applyAppdataFields(e,t,n){return t.applicationId!==null&&(e.applicationIcon=t.applicationId),t.applicationName!==null&&(e.applicationName=t.applicationName),t.developerName!==null&&(e.developerName=t.developerName),t.website!==null&&(e.website=t.website),t.supportUrl!==null&&(e.supportUrl=t.supportUrl),t.issueUrl!==null&&(e.issueUrl=t.issueUrl),t.license!==null&&(e.licenseType=licenseTypeFor(t.license)),n!==void 0&&n!==``&&(e.releaseNotesVersion=n),t.releaseNotes!==null&&(e.releaseNotes=t.releaseNotes),t.version!==null&&(e.version=t.version),e}function buildAboutDialogFromAppdata(e,t={}){let n=parseAppdata(e,{locale:t.locale??appdataLocale(l.get_language_names(),{LANG:l.getenv(`LANG`)??void 0}),releaseNotesVersion:t.releaseNotesVersion});return applyAppdataFields(new T.AboutDialog,n,t.releaseNotesVersion)}function resourceExists(e){try{return x.resources_get_info(e,x.ResourceLookupFlags.NONE),!0}catch{return!1}}function readResource(e){try{let t=x.resources_lookup_data(e,x.ResourceLookupFlags.NONE);return new TextDecoder().decode(t.toArray())}catch{return null}}function readFile(e){try{let[t,n]=l.file_get_contents(e);return t?new TextDecoder().decode(n):null}catch{return null}}let Te=!1;function createAboutDialog(e={}){let{appdataResource:t,appdataPath:n,releaseNotesVersion:r}=e,i=t!==void 0&&resourceExists(t),a;if(!e.forceParsedAppdata&&i&&hasAppdataConstructor())a=T.AboutDialog.new_from_appdata(t,r??``);else{let o=(i?readResource(t):null)??(n===void 0?null:readFile(n));o===null?(console.error(`@gjsify/adwaita-app: no AppStream metainfo found for the About dialog; looked at resource ${t??`(none given)`} and file ${n??`(none given)`}`),a=new T.AboutDialog):(!Te&&!e.forceParsedAppdata&&i&&(Te=!0,console.log(`@gjsify/adwaita-app: Adw.AboutDialog.new_from_appdata is not in this GTK runtime (expected on Windows — gjsify/gjsify#1662); building the About dialog from the AppStream metainfo directly.`)),a=buildAboutDialogFromAppdata(o,{releaseNotesVersion:r}))}return e.applicationIcon!==void 0&&(a.applicationIcon=e.applicationIcon),e.version!==void 0&&(a.version=e.version),a}`application-x-executable.avatar-default.camera-photo.contact-new.document-edit.document-open.document-save.edit-copy.emblem-system.folder.folder-documents.folder-download.folder-music.go-down.go-home.go-next.go-previous.image-missing.list-add.list-remove.mail-reply-sender.mail-send.mail-unread.network-wireless.open-menu.preferences-system.send-to.sidebar-show.starred.system-search.user-trash.view-conceal.view-grid.view-list.view-more.view-paged.view-refresh.view-reveal.window-close.window-maximize.window-minimize`.split(`.`);let O=null;function registerBundledIconResource(){if(O)return O;let e=l.base64_decode(`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`);return O=x.Resource.new_from_data(new l.Bytes(e)),x.resources_register(O),O}function addBundledIconsToTheme(e){registerBundledIconResource(),e.add_resource_path(`/eu/jumplink/gjsify/adwaita-app/icons`)}function installBundledIconTheme(e={}){let t=e.prefer??`fallback`;if(t===`host`)return!1;let n=e.display===void 0?f.Display.get_default():e.display;return n?(addBundledIconsToTheme(h.IconTheme.get_for_display(n)),t===`bundled`&&h.Settings.get_for_display(n).set_property(`gtk-icon-theme-name`,`gjsify-adwaita-bundled`),!0):!1}var Ee=class AdwaitaApp extends T.Application{static{C.registerClass({GTypeName:`GjsifyAdwaitaApp`},AdwaitaApp)}constructor(e){super({application_id:e.applicationId,flags:e.flags??x.ApplicationFlags.DEFAULT_FLAGS}),this._window=null,this._options=e,this._initActions(),this.connect(`startup`,()=>this._onStartup()),this.connect(`activate`,()=>this._onActivate())}_initActions(){if(this._options.quitAction!==!1){let e=new x.SimpleAction({name:`quit`});e.connect(`activate`,()=>this.quit()),this.add_action(e),this.set_accels_for_action(`app.quit`,[`<primary>q`])}if(this._options.about||this._options.aboutAppdata){let e=new x.SimpleAction({name:`about`});e.connect(`activate`,()=>this._showAbout()),this.add_action(e)}}_onStartup(){this._installBundledIcons(),this._options.css&&this._loadCss(this._options.css),this._installDevtools(),this._options.onStartup?.(this)}_installBundledIcons(){let e=this._options.bundledIcons;e!==!1&&installBundledIconTheme(typeof e==`object`?e:{})}_loadCss(e){let t=f.Display.get_default();if(!t){console.error(`@gjsify/adwaita-app: no default display; CSS not applied`);return}let n=new h.CssProvider;n.load_from_string(e),h.StyleContext.add_provider_for_display(t,n,h.STYLE_PROVIDER_PRIORITY_APPLICATION)}_installDevtools(){let e=this._options.devtools;if(e===!1)return;let t=typeof e==`object`?e:{enabled:e||void 0};installDevtools(this,t)}_onActivate(){this._window||=this._options.createWindow(this),this._window.present()}_showAbout(){let e=this._options.aboutAppdata;if(e){createAboutDialog(e).present(this.get_active_window());return}let t=this._options.about;if(!t)return;let n=new T.AboutDialog({application_name:t.applicationName,application_icon:t.applicationIcon??this._options.applicationId});t.version&&(n.version=t.version),t.developerName&&(n.developer_name=t.developerName),t.website&&(n.website=t.website),t.issueUrl&&(n.issue_url=t.issueUrl),t.license&&(n.license=t.license),t.comments&&(n.comments=t.comments),t.copyright&&(n.copyright=t.copyright),t.developers?.length&&n.set_developers(t.developers),n.present(this.get_active_window())}};async function runApplication(e,t){let n=!1;try{e.register(null),n=e.get_is_remote()}catch{n=!1}let r=await e.runAsync(t);return n&&console.error(`${e.applicationId??`This application`} is already running — brought the existing instance to the front instead of opening a second window.`),r}C.type_ensure(Ee.$gtype);var De=class LoadingStack extends h.Stack{static{C.registerClass({GTypeName:`GjsifyLoadingStack`},LoadingStack)}constructor(e={}){super(e);let t=new h.Box({orientation:h.Orientation.VERTICAL,halign:h.Align.CENTER,valign:h.Align.CENTER,hexpand:!0,vexpand:!0});t.append(new T.Spinner),this.add_named(t,`loading`),this._content=new T.Bin({hexpand:!0,vexpand:!0}),this.add_named(this._content,`content`),this._error=new T.StatusPage({iconName:`dialog-error-symbolic`,title:`Something went wrong`}),this.add_named(this._error,`error`),this.set_visible_child_name(`loading`)}setContent(e){this._content.set_child(e)}setError(e,t){this._error.set_title(e),this._error.set_description(t??``)}showLoading(){this.set_visible_child_name(`loading`)}showContent(){this.set_visible_child_name(`content`)}showError(){this.set_visible_child_name(`error`)}};C.type_ensure(De.$gtype);async function runStorybook(e){return runApplication(new xe(e),[t.programInvocationName,...t.programArgs])}const Oe={title:`Buttons/Button Content`,description:`Adw.ButtonContent — pairs a symbolic icon with a label inside a Gtk.Button.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Download`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Download`,value:`folder-download-symbolic`},{label:`Add`,value:`list-add-symbolic`},{label:`Send`,value:`mail-send-symbolic`},{label:`Star`,value:`starred-symbolic`}],defaultValue:`folder-download-symbolic`},{name:`canShrink`,label:`Can shrink`,type:i.BOOLEAN,defaultValue:!1}]};var ke=__exportAll({ButtonContentStories:()=>Ae,ButtonContentStory:()=>k}),k=class ButtonContentStory extends E{_content=null;_button=null;static{C.registerClass({GTypeName:`AdwStorybookButtonContent`},ButtonContentStory)}constructor(){super(E.fromMeta(ButtonContentStory.getMetadata(),`Default`))}static getMetadata(){return{...Oe,component:T.ButtonContent.$gtype}}initialize(){this._content=new T.ButtonContent({label:this.args.label,iconName:this.args.iconName,canShrink:this.args.canShrink}),this._button=new h.Button({child:this._content}),this._button.add_css_class(`suggested-action`),this._button.add_css_class(`pill`),this.addContent(this._button)}updateArgs(e){this._content&&(this._content.label=this.args.label,this._content.iconName=this.args.iconName,this._content.canShrink=this.args.canShrink)}};C.type_ensure(k.$gtype);const Ae={stories:[k]},je={title:`Buttons/Button Styles`,description:`Buttons with Adwaita style classes: .pill, .circular, .suggested-action, .destructive-action, .flat.`,controls:[{name:`label`,label:`Demo label`,type:i.TEXT,defaultValue:`Click me`},{name:`style`,label:`Demo style`,type:i.SELECT,options:[{label:`Pill`,value:`pill`},{label:`Circular (icon)`,value:`circular`},{label:`Suggested`,value:`suggested-action`},{label:`Destructive`,value:`destructive-action`},{label:`Flat`,value:`flat`}],defaultValue:`suggested-action`}]};var Me=__exportAll({ButtonStylesStories:()=>Pe,ButtonStylesStory:()=>A});const Ne=[`pill`,`circular`,`suggested-action`,`destructive-action`,`flat`];var A=class ButtonStylesStory extends E{_demo=null;static{C.registerClass({GTypeName:`AdwStorybookButtonStyles`},ButtonStylesStory)}constructor(){super(E.fromMeta(ButtonStylesStory.getMetadata(),`Default`))}static getMetadata(){return{...je,component:h.Button.$gtype}}initialize(){let e=new T.WrapBox({childSpacing:12,lineSpacing:12,halign:h.Align.CENTER}),t=new h.Button({label:`Pill`});t.add_css_class(`pill`),e.append(t);let n=new h.Button({iconName:`list-add-symbolic`});n.add_css_class(`circular`),e.append(n);let r=new h.Button({label:`Suggested`});r.add_css_class(`suggested-action`),e.append(r);let i=new h.Button({label:`Delete`});i.add_css_class(`destructive-action`),e.append(i);let a=new h.Button({label:`Flat`});a.add_css_class(`flat`),e.append(a),this._demo=new h.Button({label:this.args.label}),this._applyStyle(this.args.style),e.append(this._demo),this.addContent(e)}_applyStyle(e){if(this._demo){for(let e of Ne)this._demo.remove_css_class(e);this._demo.add_css_class(e)}}updateArgs(e){this._demo&&(this._demo.label=this.args.label,this._applyStyle(this.args.style))}};C.type_ensure(A.$gtype);const Pe={stories:[A]},Fe=[`Save as…`,`Export`,`Print`],Ie={title:`Buttons/Menu Button`,description:`Gtk.MenuButton — a button whose only action is to open a menu. Where a Split Button has a primary action beside its arrow, this one has none: every choice lives in the popover.`,controls:[{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Hamburger`,value:`open-menu-symbolic`},{label:`More`,value:`view-more-symbolic`},{label:`Open`,value:`document-open-symbolic`}],defaultValue:`open-menu-symbolic`},{name:`menuTitle`,label:`Menu title`,type:i.TEXT,defaultValue:`Document`}]};var Le=__exportAll({MenuButtonStories:()=>Re,MenuButtonStory:()=>j}),j=class MenuButtonStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookMenuButton`},MenuButtonStory)}constructor(){super(E.fromMeta(MenuButtonStory.getMetadata(),`Default`))}static getMetadata(){return{...Ie,component:h.MenuButton.$gtype}}initialize(){this._widget=new h.MenuButton({halign:h.Align.CENTER}),this._apply(),this.addContent(this._widget)}updateArgs(e){this._apply()}_buildMenu(e){let t=new x.Menu;for(let e of Fe)t.append(e,`app.${e.toLowerCase().replace(/[^a-z]+/g,`-`)}`);let n=new x.Menu;return n.append_section(e.length>0?e:null,t),n}_apply(){this._widget&&(this._widget.iconName=this.args.iconName,this._widget.menuModel=this._buildMenu(this.args.menuTitle))}};C.type_ensure(j.$gtype);const Re={stories:[j]},ze={title:`Buttons/Split Button`,description:`Adw.SplitButton — a primary action button paired with a dropdown menu of related actions.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Save`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`None`,value:``},{label:`Save`,value:`document-save-symbolic`},{label:`Send`,value:`mail-send-symbolic`},{label:`Add`,value:`list-add-symbolic`}],defaultValue:`document-save-symbolic`}]},Be={title:`Buttons/Split Button Flat`,description:`Adw.SplitButton with the .flat style class, as used inside header bars and toolbars.`,controls:[{name:`label`,label:`Label`,type:i.TEXT,defaultValue:`Reply`},{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`None`,value:``},{label:`Reply`,value:`mail-reply-sender-symbolic`},{label:`Edit`,value:`document-edit-symbolic`},{label:`Open`,value:`document-open-symbolic`}],defaultValue:`mail-reply-sender-symbolic`}]};var Ve=__exportAll({SplitButtonFlatStory:()=>N,SplitButtonStories:()=>He,SplitButtonStory:()=>M});function buildMenu(){let e=new x.Menu;return e.append(`Save as…`,`app.save-as`),e.append(`Export`,`app.export`),e.append(`Print`,`app.print`),e}var M=class SplitButtonStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookSplitButton`},SplitButtonStory)}constructor(){super(E.fromMeta(SplitButtonStory.getMetadata(),`Default`))}static getMetadata(){return{...ze,component:T.SplitButton.$gtype}}initialize(){this._widget=new T.SplitButton({label:this.args.label,menuModel:buildMenu()});let e=this.args.iconName;e&&(this._widget.iconName=e),this.addContent(this._widget)}updateArgs(e){if(!this._widget)return;let t=this.args.iconName;t?this._widget.iconName=t:this._widget.label=this.args.label}};C.type_ensure(M.$gtype);var N=class SplitButtonFlatStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookSplitButtonFlat`},SplitButtonFlatStory)}constructor(){super(E.fromMeta(SplitButtonFlatStory.getMetadata(),`Default`))}static getMetadata(){return{...Be,component:T.SplitButton.$gtype}}initialize(){this._widget=new T.SplitButton({label:this.args.label,menuModel:buildMenu()}),this._widget.add_css_class(`flat`);let e=this.args.iconName;e&&(this._widget.iconName=e),this.addContent(this._widget)}updateArgs(e){if(!this._widget)return;let t=this.args.iconName;t?this._widget.iconName=t:this._widget.label=this.args.label}};C.type_ensure(N.$gtype);const He={stories:[M,N]},Ue={title:`Buttons/Toggle Group`,description:`Adw.ToggleGroup — a linked group of Adw.Toggle buttons where exactly one is active.`,controls:[{name:`active`,label:`Active toggle`,type:i.SELECT,options:[{label:`List`,value:0},{label:`Grid`,value:1},{label:`Columns`,value:2}],defaultValue:0},{name:`style`,label:`Style`,type:i.SELECT,options:[{label:`Default`,value:`default`},{label:`Flat`,value:`flat`},{label:`Round`,value:`round`}],defaultValue:`default`}]};var We=__exportAll({ToggleGroupStories:()=>Ke,ToggleGroupStory:()=>P});const Ge=[`flat`,`round`];var P=class ToggleGroupStory extends E{_toggleGroup=null;static{C.registerClass({GTypeName:`AdwStorybookToggleGroup`},ToggleGroupStory)}constructor(){super(E.fromMeta(ToggleGroupStory.getMetadata(),`Default`))}static getMetadata(){return{...Ue,component:T.ToggleGroup.$gtype}}initialize(){this._toggleGroup=new T.ToggleGroup,this._toggleGroup.add(new T.Toggle({label:`List`,iconName:`view-list-symbolic`})),this._toggleGroup.add(new T.Toggle({label:`Grid`,iconName:`view-grid-symbolic`})),this._toggleGroup.add(new T.Toggle({label:`Columns`,iconName:`view-columns-symbolic`})),this._toggleGroup.active=this.args.active,this._applyStyle(this.args.style),this.addContent(this._toggleGroup)}_applyStyle(e){if(this._toggleGroup){for(let e of Ge)this._toggleGroup.remove_css_class(e);e!=="default"&&this._toggleGroup.add_css_class(e)}}updateArgs(e){this._toggleGroup&&(this._toggleGroup.active=this.args.active,this._applyStyle(this.args.style))}};C.type_ensure(P.$gtype);const Ke={stories:[P]},qe=[`Automatic`,`Always`,`Never`,`When busy`],Je={title:`Controls/Drop Down`,description:`Gtk.DropDown — pick one value from a list. The button shows the selection; the list opens in a popover. Adw.ComboRow is the same choice presented as a boxed-list row.`,controls:[{name:`selected`,label:`Selected`,type:i.SELECT,options:qe.map((e,t)=>({label:e,value:t})),defaultValue:0},{name:`enableSearch`,label:`Search field`,type:i.BOOLEAN,defaultValue:!1}]};var Ye=__exportAll({DropDownStories:()=>Xe,DropDownStory:()=>F}),F=class DropDownStory extends E{_dropDown=null;static{C.registerClass({GTypeName:`AdwStorybookDropDown`},DropDownStory)}constructor(){super(E.fromMeta(DropDownStory.getMetadata(),`Default`))}static getMetadata(){return{...Je,component:h.DropDown.$gtype}}initialize(){this._dropDown=h.DropDown.new_from_strings([...qe]),this._dropDown.expression=h.PropertyExpression.new(h.StringObject.$gtype,null,`string`),this._dropDown.halign=h.Align.CENTER,this._apply(),this.addContent(this._dropDown)}updateArgs(e){this._apply()}_apply(){this._dropDown&&(this._dropDown.selected=this.args.selected,this._dropDown.enableSearch=this.args.enableSearch)}};C.type_ensure(F.$gtype);const Xe={stories:[F]},Ze={title:`Controls/Entry`,description:`Gtk.Entry — a single-line text field. Libadwaita ships no AdwEntry; the Adwaita look is the GTK entry styled by the stylesheet, which is why the row variants (Entry Row, Password Entry Row) are the widgets with an Adw prefix.`,controls:[{name:`text`,label:`Text`,type:i.TEXT,defaultValue:``},{name:`placeholder`,label:`Placeholder`,type:i.TEXT,defaultValue:`Search files…`},{name:`editable`,label:`Editable`,type:i.BOOLEAN,defaultValue:!0}]};var Qe=__exportAll({EntryStories:()=>$e,EntryStory:()=>I}),I=class EntryStory extends E{_entry=null;static{C.registerClass({GTypeName:`AdwStorybookEntry`},EntryStory)}constructor(){super(E.fromMeta(EntryStory.getMetadata(),`Default`))}static getMetadata(){return{...Ze,component:h.Entry.$gtype}}initialize(){this._entry=new h.Entry({widthRequest:280,halign:h.Align.CENTER}),this._apply(),this.addContent(this._entry)}updateArgs(e){this._apply()}_apply(){this._entry&&(this._entry.text=this.args.text,this._entry.placeholderText=this.args.placeholder,this._entry.editable=this.args.editable)}};C.type_ensure(I.$gtype);const $e={stories:[I]},et={title:`Feedback/About Dialog`,description:`Adw.AboutDialog — the standard Adwaita about window with application name, version, credits and license.`,controls:[{name:`applicationName`,label:`Application name`,type:i.TEXT,defaultValue:`Adwaita Storybook`},{name:`version`,label:`Version`,type:i.TEXT,defaultValue:`0.11.0`}]};var tt=__exportAll({AboutDialogStories:()=>nt,AboutDialogStory:()=>L}),L=class AboutDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookAboutDialog`},AboutDialogStory)}constructor(){super(E.fromMeta(AboutDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...et,component:T.AboutDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){new T.AboutDialog({applicationName:this.args.applicationName,applicationIcon:`application-x-executable-symbolic`,developerName:`A GJSify Project`,version:this.args.version,comments:`A live catalogue of native GTK and Adwaita widgets, rendered under GJS.`,website:`https://github.com/gjsify/gjsify`,issueUrl:`https://github.com/gjsify/gjsify/issues`,licenseType:h.License.MIT_X11,developers:[`Ada Lovelace`,`Grace Hopper`],designers:[`Margaret Hamilton`],copyright:`© 2026 The GJSify Project`}).present(this)}updateArgs(e){}};C.type_ensure(L.$gtype);const nt={stories:[L]},rt={title:`Feedback/Alert Dialog`,description:`Adw.AlertDialog — a modal dialog with a heading, body text and responses, including a destructive action.`,controls:[{name:`heading`,label:`Heading`,type:i.TEXT,defaultValue:`Delete Project?`},{name:`body`,label:`Body`,type:i.TEXT,defaultValue:`This will permanently remove the project and all of its files. This action cannot be undone.`}]};var it=__exportAll({AlertDialogStories:()=>at,AlertDialogStory:()=>R}),R=class AlertDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookAlertDialog`},AlertDialogStory)}constructor(){super(E.fromMeta(AlertDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...rt,component:T.AlertDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){let e=new T.AlertDialog({heading:this.args.heading,body:this.args.body});e.add_response(`cancel`,`Cancel`),e.add_response(`delete`,`Delete`),e.set_response_appearance(`delete`,T.ResponseAppearance.DESTRUCTIVE),e.set_default_response(`cancel`),e.set_close_response(`cancel`),e.present(this)}updateArgs(e){}};C.type_ensure(R.$gtype);const at={stories:[R]},ot={title:`Feedback/Preferences Dialog`,description:`Adw.PreferencesDialog — a preferences window with a page, a group and a handful of boxed-list rows.`,controls:[{name:`pageTitle`,label:`Page title`,type:i.TEXT,defaultValue:`General`},{name:`groupTitle`,label:`Group title`,type:i.TEXT,defaultValue:`Appearance`}]};var st=__exportAll({PreferencesDialogStories:()=>ct,PreferencesDialogStory:()=>z}),z=class PreferencesDialogStory extends E{_button=null;static{C.registerClass({GTypeName:`AdwStorybookPreferencesDialog`},PreferencesDialogStory)}constructor(){super(E.fromMeta(PreferencesDialogStory.getMetadata(),`Default`))}static getMetadata(){return{...ot,component:T.PreferencesDialog.$gtype}}initialize(){this._button=new h.Button({label:`Show dialog`,halign:h.Align.CENTER,valign:h.Align.CENTER}),this._button.add_css_class(`pill`),this._button.add_css_class(`suggested-action`),this._button.connect(`clicked`,()=>this._present()),this.addContent(this._button)}_present(){let e=new T.PreferencesDialog,t=new T.PreferencesPage({title:this.args.pageTitle,iconName:`preferences-system-symbolic`}),n=new T.PreferencesGroup({title:this.args.groupTitle,description:`Control how the application looks and behaves.`});n.add(new T.SwitchRow({title:`Dark style`,subtitle:`Use a dark colour scheme`,active:!0})),n.add(new T.ComboRow({title:`Accent colour`,model:new h.StringList({strings:[`Blue`,`Teal`,`Green`,`Orange`,`Purple`]}),selected:0})),n.add(new T.SpinRow({title:`Font size`,adjustment:new h.Adjustment({lower:8,upper:24,value:12,stepIncrement:1,pageIncrement:4})})),t.add(n),e.add(t),e.present(this)}updateArgs(e){}};C.type_ensure(z.$gtype);const ct={stories:[z]},lt={title:`Feedback/Toast`,description:`Adw.Toast — a transient notification, with an optional action button, shown over an Adw.ToastOverlay.`,controls:[{name:`title`,label:`Toast text`,type:i.TEXT,defaultValue:`File moved to Trash`},{name:`timeout`,label:`Timeout (s)`,type:i.NUMBER,min:0,max:10,step:1,defaultValue:3},{name:`hasButton`,label:`Action button`,type:i.BOOLEAN,defaultValue:!0},{name:`buttonLabel`,label:`Button label`,type:i.TEXT,defaultValue:`Undo`}]};var ut=__exportAll({ToastStories:()=>dt,ToastStory:()=>B}),B=class ToastStory extends E{_overlay=null;static{C.registerClass({GTypeName:`AdwStorybookToast`},ToastStory)}constructor(){super(E.fromMeta(ToastStory.getMetadata(),`Default`))}static getMetadata(){return{...lt,component:T.Toast.$gtype}}initialize(){let e=new h.Button({label:`Show toast`,halign:h.Align.CENTER,valign:h.Align.CENTER});e.add_css_class(`pill`),e.add_css_class(`suggested-action`),e.connect(`clicked`,()=>this._showToast()),this._overlay=new T.ToastOverlay({child:e,widthRequest:360,heightRequest:220}),this.addContent(this._overlay)}_showToast(){if(!this._overlay)return;let e=new T.Toast({title:this.args.title,timeout:this.args.timeout});this.args.hasButton&&(e.buttonLabel=this.args.buttonLabel),this._overlay.add_toast(e)}updateArgs(e){}};C.type_ensure(B.$gtype);const dt={stories:[B]},ft={title:`Layout/Clamp`,description:`Adw.Clamp limits its child to a maximum width and centres it, tightening the layout as space shrinks.`,controls:[{name:`maximumSize`,label:`Maximum size`,type:i.RANGE,min:200,max:600,step:10,defaultValue:400},{name:`tighteningThreshold`,label:`Tightening threshold`,type:i.RANGE,min:100,max:600,step:10,defaultValue:300}]};var pt=__exportAll({ClampStories:()=>mt,ClampStory:()=>V}),V=class ClampStory extends E{_clamp=null;static{C.registerClass({GTypeName:`AdwStorybookClamp`},ClampStory)}constructor(){super(E.fromMeta(ClampStory.getMetadata(),`Default`))}static getMetadata(){return{...ft,component:T.Clamp.$gtype}}initialize(){let e=new h.Box({orientation:h.Orientation.HORIZONTAL,widthRequest:520});e.add_css_class(`card`);let t=new h.Label({label:`This content is clamped — it stops growing past the maximum size and stays centred.`,wrap:!0,xalign:0,hexpand:!0,marginTop:18,marginBottom:18,marginStart:18,marginEnd:18});e.append(t),this._clamp=new T.Clamp({maximumSize:this.args.maximumSize,tighteningThreshold:this.args.tighteningThreshold,child:e}),this.addContent(this._clamp)}updateArgs(e){this._clamp&&(this._clamp.maximumSize=this.args.maximumSize,this._clamp.tighteningThreshold=this.args.tighteningThreshold)}};C.type_ensure(V.$gtype);const mt={stories:[V]},ht={title:`Layout/Header Bar`,description:`Adw.HeaderBar hosts a custom title widget with start and end controls — the standard top chrome of an Adwaita window.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Text Editor`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`notes.md`},{name:`showTitle`,label:`Show title`,type:i.BOOLEAN,defaultValue:!0}]};var gt=__exportAll({HeaderBarStories:()=>_t,HeaderBarStory:()=>H}),H=class HeaderBarStory extends E{_headerBar=null;_title=null;static{C.registerClass({GTypeName:`AdwStorybookHeaderBar`},HeaderBarStory)}constructor(){super(E.fromMeta(HeaderBarStory.getMetadata(),`Default`))}static getMetadata(){return{...ht,component:T.HeaderBar.$gtype}}initialize(){this._title=new T.WindowTitle({title:this.args.title,subtitle:this.args.subtitle}),this._headerBar=new T.HeaderBar({titleWidget:this._title,showTitle:this.args.showTitle,widthRequest:460});let e=new h.Button({iconName:`go-previous-symbolic`});e.add_css_class(`flat`),this._headerBar.pack_start(e);let t=new x.Menu;t.append(`New Window`,`app.new-window`),t.append(`Preferences`,`app.preferences`),t.append(`About`,`app.about`);let n=new h.MenuButton({iconName:`open-menu-symbolic`,menuModel:t});n.add_css_class(`flat`),this._headerBar.pack_end(n),this.addContent(this._headerBar)}updateArgs(e){!this._headerBar||!this._title||(this._title.title=this.args.title,this._title.subtitle=this.args.subtitle,this._headerBar.showTitle=this.args.showTitle)}};C.type_ensure(H.$gtype);const _t={stories:[H]},vt={title:`Layout/Toolbar View`,description:`Adw.ToolbarView pins a top header bar and a bottom toolbar around its content, each independently revealable.`,controls:[{name:`revealTopBars`,label:`Reveal top bars`,type:i.BOOLEAN,defaultValue:!0},{name:`revealBottomBars`,label:`Reveal bottom bars`,type:i.BOOLEAN,defaultValue:!0}]};var yt=__exportAll({ToolbarViewStories:()=>bt,ToolbarViewStory:()=>U}),U=class ToolbarViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookToolbarView`},ToolbarViewStory)}constructor(){super(E.fromMeta(ToolbarViewStory.getMetadata(),`Default`))}static getMetadata(){return{...vt,component:T.ToolbarView.$gtype}}initialize(){this._view=new T.ToolbarView({widthRequest:460,heightRequest:320,revealTopBars:this.args.revealTopBars,revealBottomBars:this.args.revealBottomBars});let e=new T.HeaderBar({titleWidget:new T.WindowTitle({title:`Documents`,subtitle:`12 items`})});this._view.add_top_bar(e);let t=new T.StatusPage({iconName:`folder-documents-symbolic`,title:`Your library`,description:`Content sits between the toolbars and scrolls independently of them.`});this._view.content=t;let n=new h.ActionBar,r=new h.Button({iconName:`list-add-symbolic`});r.add_css_class(`flat`);let i=new h.Button({iconName:`list-remove-symbolic`});i.add_css_class(`flat`),n.pack_start(r),n.pack_start(i),n.set_center_widget(new h.Label({label:`Selection: none`}));let a=new h.Button({iconName:`send-to-symbolic`});a.add_css_class(`flat`),n.pack_end(a),this._view.add_bottom_bar(n),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.revealTopBars=this.args.revealTopBars,this._view.revealBottomBars=this.args.revealBottomBars)}};C.type_ensure(U.$gtype);const bt={stories:[U]},xt={title:`Layout/Wrap Box`,description:`Adw.WrapBox flows its children horizontally and wraps them onto new lines when they run out of room.`,controls:[{name:`childSpacing`,label:`Child spacing`,type:i.RANGE,min:0,max:36,step:1,defaultValue:8},{name:`lineSpacing`,label:`Line spacing`,type:i.RANGE,min:0,max:36,step:1,defaultValue:8}]};var St=__exportAll({WrapBoxStories:()=>Ct,WrapBoxStory:()=>W}),W=class WrapBoxStory extends E{_wrap=null;static{C.registerClass({GTypeName:`AdwStorybookWrapBox`},WrapBoxStory)}constructor(){super(E.fromMeta(WrapBoxStory.getMetadata(),`Default`))}static getMetadata(){return{...xt,component:T.WrapBox.$gtype}}initialize(){this._wrap=new T.WrapBox({childSpacing:this.args.childSpacing,lineSpacing:this.args.lineSpacing,widthRequest:460});for(let e of[`Design`,`Adwaita`,`GNOME`,`GTK`,`TypeScript`,`Storybook`,`Wrapping`,`Layout`]){let t=new h.Button({label:e});t.add_css_class(`pill`),this._wrap.append(t)}this.addContent(this._wrap)}updateArgs(e){this._wrap&&(this._wrap.childSpacing=this.args.childSpacing,this._wrap.lineSpacing=this.args.lineSpacing)}};C.type_ensure(W.$gtype);const Ct={stories:[W]},wt={title:`Navigation/Bottom Sheet`,description:`Adw.BottomSheet — a sheet that slides up over the content. Toggle "Open" to reveal it.`,controls:[{name:`open`,label:`Open`,type:i.BOOLEAN,defaultValue:!0},{name:`modal`,label:`Modal`,type:i.BOOLEAN,defaultValue:!0},{name:`canClose`,label:`Can close`,type:i.BOOLEAN,defaultValue:!0}]};var Tt=__exportAll({BottomSheetStories:()=>Et,BottomSheetStory:()=>G}),G=class BottomSheetStory extends E{_sheet=null;static{C.registerClass({GTypeName:`AdwStorybookBottomSheet`},BottomSheetStory)}constructor(){super(E.fromMeta(BottomSheetStory.getMetadata(),`Default`))}static getMetadata(){return{...wt,component:T.BottomSheet.$gtype}}buildContent(){let e=new h.Button({label:`Toggle sheet`,halign:h.Align.CENTER,valign:h.Align.CENTER,vexpand:!0});return e.add_css_class(`pill`),e.add_css_class(`suggested-action`),e.connect(`clicked`,()=>{this._sheet&&(this._sheet.open=!this._sheet.open)}),e}buildSheet(){let e=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,marginTop:18,marginBottom:24,marginStart:18,marginEnd:18});e.append(new h.Label({label:`Share track`,halign:h.Align.START,cssClasses:[`title-2`]}));let t=new T.PreferencesGroup;for(let[e,n]of[[`Copy link`,`edit-copy-symbolic`],[`Send to a friend`,`mail-send-symbolic`],[`Add to playlist`,`list-add-symbolic`]]){let r=new T.ActionRow({title:e});r.add_prefix(new h.Image({iconName:n})),r.activatable=!0,t.add(r)}return e.append(t),e}initialize(){this._sheet=new T.BottomSheet({content:this.buildContent(),sheet:this.buildSheet(),open:this.args.open,modal:this.args.modal,canClose:this.args.canClose,widthRequest:480,heightRequest:340}),this.addContent(this._sheet)}updateArgs(e){this._sheet&&(this._sheet.open=this.args.open,this._sheet.modal=this.args.modal,this._sheet.canClose=this.args.canClose)}};C.type_ensure(G.$gtype);const Et={stories:[G]},Dt={title:`Navigation/Navigation Split View`,description:`Adw.NavigationSplitView — a resizable sidebar beside a content pane. When collapsed it folds into a navigation stack.`,controls:[{name:`showContent`,label:`Show content`,type:i.BOOLEAN,defaultValue:!0},{name:`collapsed`,label:`Collapsed`,type:i.BOOLEAN,defaultValue:!1}]};var Ot=__exportAll({NavigationSplitViewStories:()=>At,NavigationSplitViewStory:()=>kt}),kt=class NavigationSplitViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookNavigationSplitView`},NavigationSplitViewStory)}constructor(){super(E.fromMeta(NavigationSplitViewStory.getMetadata(),`Default`))}static getMetadata(){return{...Dt,component:T.NavigationSplitView.$gtype}}buildSidebar(){let e=new T.PreferencesGroup;for(let[t,n,r]of[[`All Mail`,`128 messages`,`mail-unread-symbolic`],[`Starred`,`6 messages`,`starred-symbolic`],[`Drafts`,`2 messages`,`document-edit-symbolic`],[`Archive`,`512 messages`,`folder-symbolic`]]){let i=new T.ActionRow({title:t,subtitle:n});i.add_prefix(new h.Image({iconName:r})),i.activatable=!0,e.add(i)}let t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,new T.NavigationPage({title:`Mailboxes`,child:t})}buildContent(){let e=new T.StatusPage({iconName:`mail-unread-symbolic`,title:`All Mail`,description:`Select a conversation from the list to read it here.`,vexpand:!0}),t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,new T.NavigationPage({title:`All Mail`,child:t})}initialize(){this._view=new T.NavigationSplitView({sidebar:this.buildSidebar(),content:this.buildContent(),showContent:this.args.showContent,collapsed:this.args.collapsed,widthRequest:480,heightRequest:340}),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.showContent=this.args.showContent,this._view.collapsed=this.args.collapsed)}};C.type_ensure(kt.$gtype);const At={stories:[kt]},jt={title:`Navigation/Navigation View`,description:`Adw.NavigationView — a navigation stack. The root page pushes a detail page, which gets an automatic back button.`,controls:[{name:`rootTitle`,label:`Root title`,type:i.TEXT,defaultValue:`Contacts`},{name:`detailTitle`,label:`Detail title`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`animateTransitions`,label:`Animate transitions`,type:i.BOOLEAN,defaultValue:!0}]};var Mt=__exportAll({NavigationViewStories:()=>Nt,NavigationViewStory:()=>K}),K=class NavigationViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookNavigationView`},NavigationViewStory)}constructor(){super(E.fromMeta(NavigationViewStory.getMetadata(),`Default`))}static getMetadata(){return{...jt,component:T.NavigationView.$gtype}}buildPage(e,t){let n=new T.ToolbarView;return n.add_top_bar(new T.HeaderBar),n.content=t,new T.NavigationPage({title:e,child:n})}initialize(){this._view=new T.NavigationView({animateTransitions:this.args.animateTransitions,widthRequest:480,heightRequest:340});let e=this.buildPage(this.args.detailTitle,new T.StatusPage({iconName:`avatar-default-symbolic`,title:this.args.detailTitle,description:`Mathematician and writer, the first computer programmer.`,vexpand:!0})),t=new h.Button({label:`Open contact`,halign:h.Align.CENTER,valign:h.Align.CENTER,vexpand:!0});t.add_css_class(`pill`),t.add_css_class(`suggested-action`),t.connect(`clicked`,()=>{this._view?.push(e)});let n=this.buildPage(this.args.rootTitle,t);this._view.add(n),this._view.add(e),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.animateTransitions=this.args.animateTransitions)}};C.type_ensure(K.$gtype);const Nt={stories:[K]},Pt={title:`Navigation/Overlay Split View`,description:`Adw.OverlaySplitView — a sidebar shown beside the content, or overlaid on top of it when collapsed.`,controls:[{name:`showSidebar`,label:`Show sidebar`,type:i.BOOLEAN,defaultValue:!0},{name:`collapsed`,label:`Collapsed`,type:i.BOOLEAN,defaultValue:!1}]};var Ft=__exportAll({OverlaySplitViewStories:()=>It,OverlaySplitViewStory:()=>q}),q=class OverlaySplitViewStory extends E{_view=null;static{C.registerClass({GTypeName:`AdwStorybookOverlaySplitView`},OverlaySplitViewStory)}constructor(){super(E.fromMeta(OverlaySplitViewStory.getMetadata(),`Default`))}static getMetadata(){return{...Pt,component:T.OverlaySplitView.$gtype}}buildSidebar(){let e=new T.PreferencesGroup;for(let[t,n]of[[`Home`,`go-home-symbolic`],[`Discover`,`system-search-symbolic`],[`Library`,`folder-music-symbolic`],[`Settings`,`emblem-system-symbolic`]]){let r=new T.ActionRow({title:t});r.add_prefix(new h.Image({iconName:n})),r.activatable=!0,e.add(r)}let t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar({showTitle:!1})),t.content=e,t.add_css_class(`sidebar`),t}buildContent(){let e=new T.StatusPage({iconName:`folder-music-symbolic`,title:`Your Library`,description:`Toggle the sidebar to browse sections. Collapse it to overlay the content.`,vexpand:!0}),t=new T.ToolbarView;return t.add_top_bar(new T.HeaderBar),t.content=e,t}initialize(){this._view=new T.OverlaySplitView({sidebar:this.buildSidebar(),content:this.buildContent(),showSidebar:this.args.showSidebar,collapsed:this.args.collapsed,widthRequest:480,heightRequest:340}),this.addContent(this._view)}updateArgs(e){this._view&&(this._view.showSidebar=this.args.showSidebar,this._view.collapsed=this.args.collapsed)}};C.type_ensure(q.$gtype);const It={stories:[q]},Lt={title:`Navigation/Sidebar`,description:`Adw.Sidebar — a selectable list of Adw.SidebarItem grouped into sections. Selecting an item updates the content.`,controls:[{name:`mode`,label:`Mode`,type:i.SELECT,options:[{label:`Sidebar`,value:`sidebar`},{label:`Page`,value:`page`}],defaultValue:`sidebar`},{name:`selected`,label:`Selected index`,type:i.NUMBER,min:0,max:3,step:1,defaultValue:0}]};var Rt=__exportAll({SidebarStories:()=>zt,SidebarStory:()=>J}),J=class SidebarStory extends E{_sidebar=null;_status=null;static{C.registerClass({GTypeName:`AdwStorybookSidebar`},SidebarStory)}constructor(){super(E.fromMeta(SidebarStory.getMetadata(),`Default`))}static getMetadata(){return{...Lt,component:T.Sidebar.$gtype}}items=[{title:`Inbox`,subtitle:`3 unread`,icon:`mail-unread-symbolic`},{title:`Starred`,subtitle:`Favourites`,icon:`starred-symbolic`},{title:`Sent`,subtitle:`Outgoing mail`,icon:`mail-send-symbolic`},{title:`Archive`,subtitle:`Older mail`,icon:`folder-symbolic`}];modeFromArg(e){return e===`page`?T.SidebarMode.PAGE:T.SidebarMode.SIDEBAR}syncContent(){if(!this._sidebar||!this._status)return;let e=this.items[this._sidebar.selected]??this.items[0];this._status.title=e.title,this._status.iconName=e.icon,this._status.description=e.subtitle}initialize(){let e=new T.SidebarSection({title:`Mailboxes`});for(let t of this.items)e.append(new T.SidebarItem({title:t.title,subtitle:t.subtitle,iconName:t.icon}));this._sidebar=new T.Sidebar({mode:this.modeFromArg(this.args.mode),selected:this.args.selected,widthRequest:220}),this._sidebar.append(e),this._sidebar.connect(`notify::selected`,()=>this.syncContent()),this._status=new T.StatusPage({hexpand:!0,vexpand:!0});let t=new h.Box({orientation:h.Orientation.HORIZONTAL,widthRequest:480,heightRequest:340});t.append(this._sidebar),t.append(new h.Separator({orientation:h.Orientation.VERTICAL})),t.append(this._status),this.syncContent(),this.addContent(t)}updateArgs(e){this._sidebar&&(this._sidebar.mode=this.modeFromArg(this.args.mode),this._sidebar.selected=this.args.selected,this.syncContent())}};C.type_ensure(J.$gtype);const zt={stories:[J]},Bt=[{title:`Sync`,kind:`switch`,active:!0},{title:`Export`,kind:`action`}],Vt=[`Blue`,`Teal`,`Green`,`Orange`],Y={appearance:`Appearance`,account:`Account`,shortcuts:`Shortcuts`,actions:`Actions`},X={bannerTitle:`You have unsaved changes`,bannerButton:`Save`,darkMode:`Dark mode`,darkModeSubtitle:`Use the dark Adwaita palette`,notifications:`Notifications`,notificationsSubtitle:`Show toasts for events`,accentColor:`Accent color`,name:`Name`,nameValue:`Ada Lovelace`,email:`Email`,emailValue:`ada@example.com`,devices:`Devices`,advanced:`Advanced`,advancedSubtitle:`More options`,save:`Save changes`,delete:`Delete account`},Z={value:3,lower:1,upper:10,step:1},Ht=[{title:`Copy`,accelerator:`<Control>C`},{title:`Select all`,accelerator:`<Shift><Control>a`},{title:`Switch tab`,accelerator:`<Alt>1...9`}],Ut={title:`Overview/Widgets`,description:`Many widgets at once, the way an app composes them: a banner, preference groups of rows, an expander, buttons and shortcut labels. Use it to judge spacing, alignment and the theme as a whole rather than one widget in isolation.`,controls:[{name:`revealed`,label:`Show banner`,type:i.BOOLEAN,description:`Adw.Banner:revealed — animates in and out`,defaultValue:!0}]};var Wt=__exportAll({OverviewWidgetsStories:()=>Kt,OverviewWidgetsStory:()=>Gt}),Gt=class OverviewWidgetsStory extends E{_banner=null;static{C.registerClass({GTypeName:`AdwStorybookOverviewWidgets`},OverviewWidgetsStory)}constructor(){super(E.fromMeta(OverviewWidgetsStory.getMetadata(),`Default`))}static getMetadata(){return Ut}initialize(){let e=new h.Box({orientation:h.Orientation.VERTICAL,hexpand:!0});this._banner=new T.Banner({title:X.bannerTitle,button_label:X.bannerButton,revealed:this.args.revealed}),e.append(this._banner);let t=new T.PreferencesPage({hexpand:!0}),n=new T.PreferencesGroup({title:Y.appearance});n.add(new T.SwitchRow({title:X.darkMode,subtitle:X.darkModeSubtitle,active:!1})),n.add(new T.SwitchRow({title:X.notifications,subtitle:X.notificationsSubtitle,active:!0})),n.add(new T.ComboRow({title:X.accentColor,model:h.StringList.new([...Vt]),selected:0})),t.add(n);let r=new T.PreferencesGroup({title:Y.account}),i=new T.EntryRow({title:X.name});i.set_text(X.nameValue),r.add(i);let a=new T.EntryRow({title:X.email});a.set_text(X.emailValue),r.add(a);let o=new T.SpinRow({title:X.devices,adjustment:new h.Adjustment({value:Z.value,lower:Z.lower,upper:Z.upper,step_increment:Z.step,page_increment:Z.step})});o.set_value(Z.value),r.add(o);let s=new T.ExpanderRow({title:X.advanced,subtitle:X.advancedSubtitle,expanded:!0});for(let e of Bt)s.add_row(e.kind===`switch`?new T.SwitchRow({title:e.title,active:e.active??!1}):new T.ActionRow({title:e.title}));r.add(s),t.add(r);let c=new T.PreferencesGroup({title:Y.shortcuts});for(let e of Ht){let t=new T.ActionRow({title:e.title});t.add_suffix(new T.ShortcutLabel({accelerator:e.accelerator,valign:h.Align.CENTER})),c.add(t)}t.add(c);let l=new T.PreferencesGroup({title:Y.actions}),u=new h.Box({orientation:h.Orientation.HORIZONTAL,spacing:12,homogeneous:!0,margin_top:6,margin_bottom:6}),d=new h.Button({label:X.save});d.add_css_class(`suggested-action`),u.append(d);let f=new h.Button({label:X.delete});f.add_css_class(`destructive-action`),u.append(f),l.add(u),t.add(l),e.append(t),this.addContent(e)}updateArgs(e){this._banner?.set_revealed(this.args.revealed)}};C.type_ensure(Gt.$gtype);const Kt={stories:[Gt]},qt={title:`Presentation/Avatar`,description:`A circular avatar that derives initials (and a colour) from a name, or shows a symbolic icon.`,controls:[{name:`text`,label:`Name`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`size`,label:`Size`,type:i.RANGE,min:24,max:160,step:8,defaultValue:96},{name:`showInitials`,label:`Show initials`,type:i.BOOLEAN,defaultValue:!0},{name:`iconName`,label:`Fallback icon`,type:i.SELECT,options:[{label:`Person`,value:`avatar-default-symbolic`},{label:`Contact`,value:`contact-new-symbolic`},{label:`Camera`,value:`camera-photo-symbolic`}],defaultValue:`avatar-default-symbolic`}]};var Jt=__exportAll({AvatarStories:()=>Xt,AvatarStory:()=>Yt}),Yt=class AvatarStory extends E{_avatar=null;static{C.registerClass({GTypeName:`AdwStorybookAvatar`},AvatarStory)}constructor(){super(E.fromMeta(AvatarStory.getMetadata(),`Default`))}static getMetadata(){return{...qt,component:T.Avatar.$gtype}}initialize(){this._avatar=new T.Avatar({size:this.args.size,text:this.args.text,showInitials:this.args.showInitials,iconName:this.args.iconName}),this.addContent(this._avatar)}updateArgs(e){this._avatar&&(this._avatar.size=this.args.size,this._avatar.text=this.args.text,this._avatar.showInitials=this.args.showInitials,this._avatar.iconName=this.args.iconName)}};C.type_ensure(Yt.$gtype);const Xt={stories:[Yt]},Zt={title:`Presentation/Banner`,description:`Adw.Banner — a full-width strip carrying a status message and an optional action button.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Metered connection — updates paused`},{name:`buttonLabel`,label:`Button label`,type:i.TEXT,defaultValue:`Resume`},{name:`revealed`,label:`Revealed`,type:i.BOOLEAN,defaultValue:!0},{name:`useMarkup`,label:`Use markup`,type:i.BOOLEAN,defaultValue:!1}]};var Qt=__exportAll({BannerStories:()=>en,BannerStory:()=>$t}),$t=class BannerStory extends E{_banner=null;static{C.registerClass({GTypeName:`AdwStorybookBanner`},BannerStory)}constructor(){super(E.fromMeta(BannerStory.getMetadata(),`Default`))}static getMetadata(){return{...Zt,component:T.Banner.$gtype}}initialize(){this._banner=new T.Banner({title:this.args.title,buttonLabel:this.args.buttonLabel,revealed:this.args.revealed,useMarkup:this.args.useMarkup});let e=new h.Box({orientation:h.Orientation.VERTICAL,widthRequest:460});e.append(this._banner),this.addContent(e)}updateArgs(e){this._banner&&(this._banner.title=this.args.title,this._banner.buttonLabel=this.args.buttonLabel,this._banner.revealed=this.args.revealed,this._banner.useMarkup=this.args.useMarkup)}};C.type_ensure($t.$gtype);const en={stories:[$t]},tn=[{label:`Single`,accelerator:`<Control>C`},{label:`Modifier order`,accelerator:`<Shift><Control>a`},{label:`Alternatives`,accelerator:`<Shift>A Home`},{label:`Range`,accelerator:`<Alt>1...9`},{label:`In sequence`,accelerator:`<Control>C+<Control>X`},{label:`Together`,accelerator:`Control_L&Control_R`},{label:`Nested`,accelerator:`<Alt>1...9 <Alt>0`},{label:`Unset`,accelerator:``}],nn={title:`Presentation/Shortcut Label`,description:`Adw.ShortcutLabel — an accelerator drawn as keycaps. The four grammar levels: alternatives (space), a range (...), pressed in sequence (+), and pressed together (&).`,controls:[{name:`accelerator`,label:`Accelerator`,type:i.SELECT,options:[{label:`Ctrl+C`,value:`<Control>C`},{label:`Modifier order (Shift+Ctrl+A)`,value:`<Shift><Control>a`},{label:`Alternatives (Shift+A / Home)`,value:`<Shift>A Home`},{label:`Range (Alt+1…9)`,value:`<Alt>1...9`},{label:`In sequence (Ctrl+C → Ctrl+X)`,value:`<Control>C+<Control>X`},{label:`Together (Ctrl L + Ctrl R)`,value:`Control_L&Control_R`},{label:`Nested (Alt+1…9 / Alt+0)`,value:`<Alt>1...9 <Alt>0`},{label:`Glyph key (Ctrl+Space)`,value:`<Control>space`},{label:`Arrow key (Left)`,value:`Left`},{label:`Unset — shows the placeholder`,value:``}],defaultValue:`<Control>C`},{name:`disabledText`,label:`Placeholder`,type:i.TEXT,defaultValue:`Disabled`}]},rn={title:`Presentation/Shortcut Label (All Levels)`,description:`Every Adw.ShortcutLabel grammar level at once: alternatives (space), a range (...), pressed in sequence (+), pressed together (&) — plus GTK's fixed keycap order and the disabled placeholder.`,controls:[{name:`disabledText`,label:`Placeholder`,type:i.TEXT,defaultValue:`Disabled`}]};var an=__exportAll({ShortcutLabelLevelsStory:()=>sn,ShortcutLabelStories:()=>cn,ShortcutLabelStory:()=>on}),on=class ShortcutLabelStory extends E{_widget=null;static{C.registerClass({GTypeName:`AdwStorybookShortcutLabel`},ShortcutLabelStory)}constructor(){super(E.fromMeta(ShortcutLabelStory.getMetadata(),`Default`))}static getMetadata(){return{...nn,component:T.ShortcutLabel.$gtype}}initialize(){this._widget=new T.ShortcutLabel({accelerator:this.args.accelerator,disabledText:this.args.disabledText,halign:h.Align.CENTER,valign:h.Align.CENTER}),this.addContent(this._widget)}updateArgs(e){this._widget&&(this._widget.disabledText=this.args.disabledText,this._widget.accelerator=this.args.accelerator)}};C.type_ensure(on.$gtype);var sn=class ShortcutLabelLevelsStory extends E{_widgets=[];static{C.registerClass({GTypeName:`AdwStorybookShortcutLabelLevels`},ShortcutLabelLevelsStory)}constructor(){super(E.fromMeta(ShortcutLabelLevelsStory.getMetadata(),`Default`))}static getMetadata(){return{...rn,component:T.ShortcutLabel.$gtype}}initialize(){let e=new h.Grid({row_spacing:12,column_spacing:24});for(let[t,n]of tn.entries()){let r=new h.Label({label:n.label,halign:h.Align.START});r.add_css_class(`dimmed`),e.attach(r,0,t,1,1);let i=new T.ShortcutLabel({accelerator:n.accelerator,disabledText:this.args.disabledText,halign:h.Align.END,hexpand:!0});e.attach(i,1,t,1,1),this._widgets.push(i)}this.addContent(e)}updateArgs(e){for(let e of this._widgets)e.disabledText=this.args.disabledText}};C.type_ensure(sn.$gtype);const cn={stories:[on,sn]},ln={title:`Presentation/Spinner`,description:`Adw.Spinner — a lightweight loading indicator that spins continuously while visible.`,controls:[{name:`size`,label:`Size`,type:i.RANGE,min:16,max:64,step:4,defaultValue:48}]};var un=__exportAll({SpinnerStories:()=>fn,SpinnerStory:()=>dn}),dn=class SpinnerStory extends E{_spinner=null;static{C.registerClass({GTypeName:`AdwStorybookSpinner`},SpinnerStory)}constructor(){super(E.fromMeta(SpinnerStory.getMetadata(),`Default`))}static getMetadata(){return{...ln,component:T.Spinner.$gtype}}initialize(){let e=this.args.size;this._spinner=new T.Spinner({widthRequest:e,heightRequest:e,halign:h.Align.CENTER,valign:h.Align.CENTER}),this.addContent(this._spinner)}updateArgs(e){if(!this._spinner)return;let t=this.args.size;this._spinner.widthRequest=t,this._spinner.heightRequest=t}};C.type_ensure(dn.$gtype);const fn={stories:[dn]},pn={title:`Presentation/Status Page`,description:`Adw.StatusPage — a full-page empty state with an icon, title, description and optional action.`,controls:[{name:`iconName`,label:`Icon`,type:i.SELECT,options:[{label:`Folder`,value:`folder-symbolic`},{label:`Mail`,value:`mail-unread-symbolic`},{label:`Search`,value:`system-search-symbolic`},{label:`Star`,value:`starred-symbolic`}],defaultValue:`folder-symbolic`},{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`No Documents`},{name:`description`,label:`Description`,type:i.TEXT,defaultValue:`Documents you create or open will appear here.`}]};var mn=__exportAll({StatusPageStories:()=>gn,StatusPageStory:()=>hn}),hn=class StatusPageStory extends E{_statusPage=null;static{C.registerClass({GTypeName:`AdwStorybookStatusPage`},StatusPageStory)}constructor(){super(E.fromMeta(StatusPageStory.getMetadata(),`Default`))}static getMetadata(){return{...pn,component:T.StatusPage.$gtype}}initialize(){let e=new h.Button({label:`New Document`,halign:h.Align.CENTER,cssClasses:[`pill`,`suggested-action`]});this._statusPage=new T.StatusPage({iconName:this.args.iconName,title:this.args.title,description:this.args.description,child:e,widthRequest:460,heightRequest:320}),this.addContent(this._statusPage)}updateArgs(e){this._statusPage&&(this._statusPage.iconName=this.args.iconName,this._statusPage.title=this.args.title,this._statusPage.description=this.args.description)}};C.type_ensure(hn.$gtype);const gn={stories:[hn]},_n={title:`Presentation/Window Title`,description:`Adw.WindowTitle — a compact title/subtitle widget intended for a window or header bar.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Inbox`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`3 unread messages`}]};var vn=__exportAll({WindowTitleStories:()=>bn,WindowTitleStory:()=>yn}),yn=class WindowTitleStory extends E{_windowTitle=null;static{C.registerClass({GTypeName:`AdwStorybookWindowTitle`},WindowTitleStory)}constructor(){super(E.fromMeta(WindowTitleStory.getMetadata(),`Default`))}static getMetadata(){return{..._n,component:T.WindowTitle.$gtype}}initialize(){this._windowTitle=new T.WindowTitle({title:this.args.title,subtitle:this.args.subtitle}),this.addContent(this._windowTitle)}updateArgs(e){this._windowTitle&&(this._windowTitle.title=this.args.title,this._windowTitle.subtitle=this.args.subtitle)}};C.type_ensure(yn.$gtype);const bn={stories:[yn]},xn={title:`Boxed Lists/Action Row`,description:`Adw.ActionRow — a preferences row with a title/subtitle, a prefix icon and a suffix button, shown inside a boxed list.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Wi-Fi`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Connected to Highgarden 5GHz`},{name:`iconName`,label:`Prefix icon`,type:i.SELECT,options:[{label:`Network`,value:`network-wireless-symbolic`},{label:`Folder`,value:`folder-symbolic`},{label:`Starred`,value:`starred-symbolic`}],defaultValue:`network-wireless-symbolic`},{name:`activatable`,label:`Activatable`,type:i.BOOLEAN,defaultValue:!0}]};var Sn=__exportAll({ActionRowStories:()=>wn,ActionRowStory:()=>Cn}),Cn=class ActionRowStory extends E{_row=null;_icon=null;_button=null;static{C.registerClass({GTypeName:`AdwStorybookActionRow`},ActionRowStory)}constructor(){super(E.fromMeta(ActionRowStory.getMetadata(),`Default`))}static getMetadata(){return{...xn,component:T.ActionRow.$gtype}}initialize(){this._row=new T.ActionRow({title:this.args.title,subtitle:this.args.subtitle}),this._icon=new h.Image({iconName:this.args.iconName}),this._row.add_prefix(this._icon),this._button=new h.Button({iconName:`go-next-symbolic`,valign:h.Align.CENTER}),this._button.add_css_class(`flat`),this._row.add_suffix(this._button),this._row.activatableWidget=this._button,this._row.activatable=this.args.activatable;let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){!this._row||!this._icon||(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._icon.iconName=this.args.iconName,this._row.activatable=this.args.activatable)}};C.type_ensure(Cn.$gtype);const wn={stories:[Cn]},Tn={title:`Boxed Lists/Button Row`,description:`Adw.ButtonRow — a full-width row that acts as a button, with an optional icon and style class.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Add account`},{name:`startIconName`,label:`Start icon`,type:i.SELECT,options:[{label:`Add`,value:`list-add-symbolic`},{label:`Trash`,value:`user-trash-symbolic`},{label:`None`,value:``}],defaultValue:`list-add-symbolic`},{name:`style`,label:`Style`,type:i.SELECT,options:[{label:`None`,value:`none`},{label:`Suggested`,value:`suggested-action`},{label:`Destructive`,value:`destructive-action`}],defaultValue:`suggested-action`}]};var En=__exportAll({ButtonRowStories:()=>kn,ButtonRowStory:()=>On});const Dn=[`suggested-action`,`destructive-action`];var On=class ButtonRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookButtonRow`},ButtonRowStory)}constructor(){super(E.fromMeta(ButtonRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Tn,component:T.ButtonRow.$gtype}}initialize(){this._row=new T.ButtonRow({title:this.args.title,startIconName:this.args.startIconName}),this._applyStyle(this.args.style);let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}_applyStyle(e){if(this._row){for(let e of Dn)this._row.remove_css_class(e);e!==`none`&&this._row.add_css_class(e)}}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.startIconName=this.args.startIconName,this._applyStyle(this.args.style))}};C.type_ensure(On.$gtype);const kn={stories:[On]},An=[`Blue`,`Teal`,`Green`,`Orange`,`Purple`],jn={title:`Boxed Lists/Combo Row`,description:`Adw.ComboRow — a preferences row with an inline drop-down backed by a Gtk.StringList.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Accent colour`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Used to highlight selected items`},{name:`selected`,label:`Selected`,type:i.NUMBER,min:0,max:4,step:1,defaultValue:1}]};var Mn=__exportAll({ComboRowStories:()=>Pn,ComboRowStory:()=>Nn}),Nn=class ComboRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookComboRow`},ComboRowStory)}constructor(){super(E.fromMeta(ComboRowStory.getMetadata(),`Default`))}static getMetadata(){return{...jn,component:T.ComboRow.$gtype}}initialize(){this._row=new T.ComboRow({title:this.args.title,subtitle:this.args.subtitle,model:new h.StringList({strings:[...An]}),selected:this.args.selected});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.selected=this.args.selected)}};C.type_ensure(Nn.$gtype);const Pn={stories:[Nn]},Fn={title:`Boxed Lists/Entry Row`,description:`Adw.EntryRow — a preferences row whose title doubles as placeholder text for an inline entry.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Display name`},{name:`text`,label:`Text`,type:i.TEXT,defaultValue:`Ada Lovelace`},{name:`showApplyButton`,label:`Show apply button`,type:i.BOOLEAN,defaultValue:!0}]};var In=__exportAll({EntryRowStories:()=>Rn,EntryRowStory:()=>Ln}),Ln=class EntryRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookEntryRow`},EntryRowStory)}constructor(){super(E.fromMeta(EntryRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Fn,component:T.EntryRow.$gtype}}initialize(){this._row=new T.EntryRow({title:this.args.title,text:this.args.text,showApplyButton:this.args.showApplyButton});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.text=this.args.text,this._row.showApplyButton=this.args.showApplyButton)}};C.type_ensure(Ln.$gtype);const Rn={stories:[Ln]},zn={title:`Boxed Lists/Expander Row`,description:`Adw.ExpanderRow — a preferences row that discloses nested rows and can carry an enable switch.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Proxy settings`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Route traffic through a custom proxy`},{name:`expanded`,label:`Expanded`,type:i.BOOLEAN,defaultValue:!0},{name:`showEnableSwitch`,label:`Show enable switch`,type:i.BOOLEAN,defaultValue:!1}]};var Bn=__exportAll({ExpanderRowStories:()=>Hn,ExpanderRowStory:()=>Vn}),Vn=class ExpanderRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookExpanderRow`},ExpanderRowStory)}constructor(){super(E.fromMeta(ExpanderRowStory.getMetadata(),`Default`))}static getMetadata(){return{...zn,component:T.ExpanderRow.$gtype}}initialize(){this._row=new T.ExpanderRow({title:this.args.title,subtitle:this.args.subtitle,expanded:this.args.expanded,showEnableSwitch:this.args.showEnableSwitch}),this._row.add_row(new T.EntryRow({title:`Host`,text:`proxy.example.com`})),this._row.add_row(new T.SwitchRow({title:`Use authentication`,active:!1}));let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.expanded=this.args.expanded,this._row.showEnableSwitch=this.args.showEnableSwitch)}};C.type_ensure(Vn.$gtype);const Hn={stories:[Vn]},Un={title:`Boxed Lists/Password Entry Row`,description:`Adw.PasswordEntryRow — an entry row that masks its contents and shows a peek toggle.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Password`},{name:`text`,label:`Text`,type:i.TEXT,defaultValue:`correct-horse-battery`}]};var Wn=__exportAll({PasswordEntryRowStories:()=>Gn,PasswordEntryRowStory:()=>Q}),Q=class PasswordEntryRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookPasswordEntryRow`},PasswordEntryRowStory)}constructor(){super(E.fromMeta(PasswordEntryRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Un,component:T.PasswordEntryRow.$gtype}}initialize(){this._row=new T.PasswordEntryRow({title:this.args.title,text:this.args.text});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.text=this.args.text)}};C.type_ensure(Q.$gtype);const Gn={stories:[Q]},Kn={title:`Boxed Lists/Preferences Group`,description:`Adw.PreferencesGroup — the boxed-list container that gathers a title, description, header-suffix widget and rows.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Account`},{name:`description`,label:`Description`,type:i.TEXT,defaultValue:`Manage how this device signs in and syncs.`}]};var qn=__exportAll({PreferencesGroupStories:()=>Yn,PreferencesGroupStory:()=>Jn}),Jn=class PreferencesGroupStory extends E{_prefsGroup=null;static{C.registerClass({GTypeName:`AdwStorybookPreferencesGroup`},PreferencesGroupStory)}constructor(){super(E.fromMeta(PreferencesGroupStory.getMetadata(),`Default`))}static getMetadata(){return{...Kn,component:T.PreferencesGroup.$gtype}}initialize(){let e=new h.Button({label:`Sign out`,valign:h.Align.CENTER});e.add_css_class(`flat`),this._prefsGroup=new T.PreferencesGroup({title:this.args.title,description:this.args.description,headerSuffix:e});let t=new T.EntryRow({title:`Display name`,text:`Grace Hopper`});this._prefsGroup.add(t);let n=new T.SwitchRow({title:`Sync over Wi-Fi only`,subtitle:`Avoid using mobile data for backups`,active:!0});this._prefsGroup.add(n);let r=new T.ComboRow({title:`Region`,model:new h.StringList({strings:[`Europe`,`Americas`,`Asia`,`Oceania`]}),selected:0});this._prefsGroup.add(r);let i=new T.Clamp({maximumSize:400,child:this._prefsGroup});this.addContent(i)}updateArgs(e){this._prefsGroup&&(this._prefsGroup.title=this.args.title,this._prefsGroup.description=this.args.description)}};C.type_ensure(Jn.$gtype);const Yn={stories:[Jn]},Xn={title:`Boxed Lists/Spin Row`,description:`Adw.SpinRow — a preferences row with an inline spin button over a numeric adjustment.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Font size`},{name:`value`,label:`Value`,type:i.NUMBER,min:0,max:100,step:1,defaultValue:16},{name:`digits`,label:`Digits`,type:i.NUMBER,min:0,max:4,step:1,defaultValue:0}]};var Zn=__exportAll({SpinRowStories:()=>$n,SpinRowStory:()=>Qn}),Qn=class SpinRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookSpinRow`},SpinRowStory)}constructor(){super(E.fromMeta(SpinRowStory.getMetadata(),`Default`))}static getMetadata(){return{...Xn,component:T.SpinRow.$gtype}}initialize(){this._row=new T.SpinRow({title:this.args.title,adjustment:new h.Adjustment({lower:0,upper:100,value:this.args.value,stepIncrement:1,pageIncrement:10}),digits:this.args.digits});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.value=this.args.value,this._row.digits=this.args.digits)}};C.type_ensure(Qn.$gtype);const $n={stories:[Qn]},er={title:`Boxed Lists/Switch Row`,description:`Adw.SwitchRow — a preferences row with a trailing switch, shown inside a boxed list.`,controls:[{name:`title`,label:`Title`,type:i.TEXT,defaultValue:`Automatic updates`},{name:`subtitle`,label:`Subtitle`,type:i.TEXT,defaultValue:`Download and install updates without asking`},{name:`active`,label:`Active`,type:i.BOOLEAN,defaultValue:!0}]};var tr=__exportAll({SwitchRowStories:()=>rr,SwitchRowStory:()=>nr}),nr=class SwitchRowStory extends E{_row=null;static{C.registerClass({GTypeName:`AdwStorybookSwitchRow`},SwitchRowStory)}constructor(){super(E.fromMeta(SwitchRowStory.getMetadata(),`Default`))}static getMetadata(){return{...er,component:T.SwitchRow.$gtype}}initialize(){this._row=new T.SwitchRow({title:this.args.title,subtitle:this.args.subtitle,active:this.args.active});let e=new T.PreferencesGroup;e.add(this._row);let t=new T.Clamp({maximumSize:400,child:e});this.addContent(t)}updateArgs(e){this._row&&(this._row.title=this.args.title,this._row.subtitle=this.args.subtitle,this._row.active=this.args.active)}};C.type_ensure(nr.$gtype);const rr={stories:[nr]},ir=[{name:`allowScrollWheel`,label:`Allow scroll wheel`,type:i.BOOLEAN,defaultValue:!0},{name:`allowLongSwipes`,label:`Allow long swipes`,type:i.BOOLEAN,defaultValue:!1}],ar={title:`View Switching/Carousel (Dots)`,description:`Adw.Carousel — a horizontally swipeable pager with three pages, paired with Adw.CarouselIndicatorDots.`,controls:ir},or={title:`View Switching/Carousel (Lines)`,description:`Adw.Carousel — the same swipeable pager paired with Adw.CarouselIndicatorLines instead of dots.`,controls:ir};var sr=__exportAll({CarouselDotsStory:()=>lr,CarouselLinesStory:()=>ur,CarouselStories:()=>dr});const cr=[{title:`Welcome`,css:`accent`},{title:`Discover`,css:`success`},{title:`Get started`,css:`warning`}];function buildPage(e,t){let n=new h.Box({orientation:h.Orientation.VERTICAL,halign:h.Align.CENTER,valign:h.Align.CENTER,widthRequest:440,heightRequest:260});n.add_css_class(`card`),n.add_css_class(t);let r=new h.Label({label:e,vexpand:!0,valign:h.Align.CENTER});return r.add_css_class(`title-1`),n.append(r),n}var lr=class CarouselDotsStory extends E{_carousel=null;static{C.registerClass({GTypeName:`AdwStorybookCarouselDots`},CarouselDotsStory)}constructor(){super(E.fromMeta(CarouselDotsStory.getMetadata(),`Default`))}static getMetadata(){return{...ar,component:T.Carousel.$gtype}}initialize(){this._carousel=new T.Carousel({allowScrollWheel:this.args.allowScrollWheel,allowLongSwipes:this.args.allowLongSwipes,vexpand:!0});for(let e of cr)this._carousel.append(buildPage(e.title,e.css));let e=new T.CarouselIndicatorDots({carousel:this._carousel}),t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._carousel),t.append(e),this.addContent(t)}updateArgs(e){this._carousel&&(this._carousel.allowScrollWheel=this.args.allowScrollWheel,this._carousel.allowLongSwipes=this.args.allowLongSwipes)}};C.type_ensure(lr.$gtype);var ur=class CarouselLinesStory extends E{_carousel=null;static{C.registerClass({GTypeName:`AdwStorybookCarouselLines`},CarouselLinesStory)}constructor(){super(E.fromMeta(CarouselLinesStory.getMetadata(),`Default`))}static getMetadata(){return{...or,component:T.Carousel.$gtype}}initialize(){this._carousel=new T.Carousel({allowScrollWheel:this.args.allowScrollWheel,allowLongSwipes:this.args.allowLongSwipes,vexpand:!0});for(let e of cr)this._carousel.append(buildPage(e.title,e.css));let e=new T.CarouselIndicatorLines({carousel:this._carousel}),t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._carousel),t.append(e),this.addContent(t)}updateArgs(e){this._carousel&&(this._carousel.allowScrollWheel=this.args.allowScrollWheel,this._carousel.allowLongSwipes=this.args.allowLongSwipes)}};C.type_ensure(ur.$gtype);const dr={stories:[lr,ur]},fr={title:`View Switching/Inline View Switcher`,description:`Adw.InlineViewSwitcher — a compact inline switcher that can show labels, icons, or both for an Adw.ViewStack.`,controls:[{name:`displayMode`,label:`Display mode`,type:i.SELECT,options:[{label:`Labels`,value:`labels`},{label:`Icons`,value:`icons`},{label:`Both`,value:`both`}],defaultValue:`both`}]};var pr=__exportAll({InlineViewSwitcherStories:()=>hr,InlineViewSwitcherStory:()=>mr}),mr=class InlineViewSwitcherStory extends E{_switcher=null;static{C.registerClass({GTypeName:`AdwStorybookInlineViewSwitcher`},InlineViewSwitcherStory)}constructor(){super(E.fromMeta(InlineViewSwitcherStory.getMetadata(),`Default`))}static getMetadata(){return{...fr,component:T.InlineViewSwitcher.$gtype}}buildPage(e,t,n){return new T.StatusPage({iconName:t,title:e,description:n,vexpand:!0})}initialize(){let e=new T.ViewStack({vexpand:!0});e.add_titled_with_icon(this.buildPage(`Overview`,`view-grid-symbolic`,`A quick summary of your project.`),`overview`,`Overview`,`view-grid-symbolic`),e.add_titled_with_icon(this.buildPage(`Activity`,`document-edit-symbolic`,`Recent edits and changes.`),`activity`,`Activity`,`document-edit-symbolic`),e.add_titled_with_icon(this.buildPage(`Settings`,`emblem-system-symbolic`,`Configure how things behave.`),`settings`,`Settings`,`emblem-system-symbolic`),this._switcher=new T.InlineViewSwitcher({stack:e,displayMode:this.modeFromArg(this.args.displayMode),halign:h.Align.CENTER});let t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._switcher),t.append(e),this.addContent(t)}modeFromArg(e){return e===`labels`?T.InlineViewSwitcherDisplayMode.LABELS:e===`icons`?T.InlineViewSwitcherDisplayMode.ICONS:T.InlineViewSwitcherDisplayMode.BOTH}updateArgs(e){this._switcher&&(this._switcher.displayMode=this.modeFromArg(this.args.displayMode))}};C.type_ensure(mr.$gtype);const hr={stories:[mr]},gr={title:`View Switching/Tab View`,description:`Adw.TabView with an Adw.TabBar header — three tabbed pages; the tab bar can auto-hide when only one tab remains.`,controls:[{name:`autohide`,label:`Autohide tab bar`,type:i.BOOLEAN,defaultValue:!1}]};var _r=__exportAll({TabViewStories:()=>br,TabViewStory:()=>yr});const vr=[{title:`Overview`,body:`A summary of everything at a glance.`},{title:`Details`,body:`The specifics, broken down line by line.`},{title:`History`,body:`A log of every change made so far.`}];var yr=class TabViewStory extends E{_tabBar=null;static{C.registerClass({GTypeName:`AdwStorybookTabView`},TabViewStory)}constructor(){super(E.fromMeta(TabViewStory.getMetadata(),`Default`))}static getMetadata(){return{...gr,component:T.TabView.$gtype}}buildPageBody(e,t){return new T.StatusPage({iconName:`view-paged-symbolic`,title:e,description:t,vexpand:!0})}initialize(){let e=new T.TabView({vexpand:!0});for(let t of vr){let n=e.append(this.buildPageBody(t.title,t.body));n.title=t.title}this._tabBar=new T.TabBar({view:e,autohide:this.args.autohide});let t=new h.Box({orientation:h.Orientation.VERTICAL,widthRequest:480,heightRequest:340});t.append(this._tabBar),t.append(e),this.addContent(t)}updateArgs(e){this._tabBar&&(this._tabBar.autohide=this.args.autohide)}};C.type_ensure(yr.$gtype);const br={stories:[yr]},xr=[{name:`inbox`,title:`Inbox`,icon:`mail-unread-symbolic`},{name:`starred`,title:`Starred`,icon:`starred-symbolic`},{name:`archive`,title:`Archive`,icon:`folder-symbolic`}],Sr={title:`View Switching/View Switcher Bar`,description:"Adw.ViewSwitcherBar — the narrow-window switcher, pinned to the bottom of a toolbar view. `reveal` is a REQUEST, not a state: a stack with fewer than two pages stays collapsed however loudly it is asked.",controls:[{name:`reveal`,label:`Reveal`,type:i.BOOLEAN,defaultValue:!0}]};var Cr=__exportAll({ViewSwitcherBarStories:()=>Tr,ViewSwitcherBarStory:()=>wr}),wr=class ViewSwitcherBarStory extends E{_bar=null;static{C.registerClass({GTypeName:`AdwStorybookViewSwitcherBar`},ViewSwitcherBarStory)}constructor(){super(E.fromMeta(ViewSwitcherBarStory.getMetadata(),`Default`))}static getMetadata(){return{...Sr,component:T.ViewSwitcherBar.$gtype}}initialize(){let e=new T.ViewStack({vexpand:!0});for(let t of xr){let n=new T.StatusPage({iconName:t.icon,title:t.title,description:`The ${t.title.toLowerCase()} page.`,vexpand:!0});e.add_titled_with_icon(n,t.name,t.title,t.icon)}this._bar=new T.ViewSwitcherBar({stack:e}),this._apply();let t=new T.ToolbarView({content:e,widthRequest:360,heightRequest:360});t.add_bottom_bar(this._bar),this.addContent(t)}updateArgs(e){this._apply()}_apply(){this._bar&&(this._bar.reveal=this.args.reveal)}};C.type_ensure(wr.$gtype);const Tr={stories:[wr]},Er={title:`View Switching/View Switcher`,description:`Adw.ViewSwitcher — a segmented switcher whose buttons select pages in a paired Adw.ViewStack.`,controls:[{name:`policy`,label:`Policy`,type:i.SELECT,options:[{label:`Wide`,value:`wide`},{label:`Narrow`,value:`narrow`}],defaultValue:`wide`}]};var Dr=__exportAll({ViewSwitcherStories:()=>Or,ViewSwitcherStory:()=>$}),$=class ViewSwitcherStory extends E{_switcher=null;static{C.registerClass({GTypeName:`AdwStorybookViewSwitcher`},ViewSwitcherStory)}constructor(){super(E.fromMeta(ViewSwitcherStory.getMetadata(),`Default`))}static getMetadata(){return{...Er,component:T.ViewSwitcher.$gtype}}buildPage(e,t,n){return new T.StatusPage({iconName:t,title:e,description:n,vexpand:!0})}initialize(){let e=new T.ViewStack({vexpand:!0});e.add_titled_with_icon(this.buildPage(`Inbox`,`mail-unread-symbolic`,`You have three unread conversations.`),`inbox`,`Inbox`,`mail-unread-symbolic`),e.add_titled_with_icon(this.buildPage(`Starred`,`starred-symbolic`,`Messages you have marked as important.`),`starred`,`Starred`,`starred-symbolic`),e.add_titled_with_icon(this.buildPage(`Archive`,`folder-symbolic`,`Older conversations kept for reference.`),`archive`,`Archive`,`folder-symbolic`),this._switcher=new T.ViewSwitcher({stack:e,policy:this.policyFromArg(this.args.policy),halign:h.Align.CENTER});let t=new h.Box({orientation:h.Orientation.VERTICAL,spacing:12,widthRequest:480,heightRequest:340});t.append(this._switcher),t.append(e),this.addContent(t)}policyFromArg(e){return e===`narrow`?T.ViewSwitcherPolicy.NARROW:T.ViewSwitcherPolicy.WIDE}updateArgs(e){this._switcher&&(this._switcher.policy=this.policyFromArg(this.args.policy))}};C.type_ensure($.$gtype);const Or={stories:[$]};await runStorybook({applicationId:`org.gjsify.AdwaitaStorybook`,title:`Adwaita Storybook`,stories:collectStoryModules([ke,Me,Le,Ve,We,Ye,Qe,tt,it,st,ut,pt,gt,yt,St,Tt,Ot,Mt,Ft,Rt,Wt,Jt,Qt,an,un,mn,vn,Sn,En,Mn,In,Bn,Wn,qn,Zn,tr,sr,pr,_r,Cr,Dr])});export{};