diff --git a/404.html b/404.html index b58f92504..876c9c76e 100644 --- a/404.html +++ b/404.html @@ -16,7 +16,7 @@ - + diff --git a/assets/js/c43ec111.8585fff0.js b/assets/js/c43ec111.2bb70eb4.js similarity index 64% rename from assets/js/c43ec111.8585fff0.js rename to assets/js/c43ec111.2bb70eb4.js index f3219a0cf..89a2e779a 100644 --- a/assets/js/c43ec111.8585fff0.js +++ b/assets/js/c43ec111.2bb70eb4.js @@ -1,4 +1,4 @@ -"use strict";(self.webpackChunkdwcj_documentation=self.webpackChunkdwcj_documentation||[]).push([[9332],{14922:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>l,metadata:()=>t,toc:()=>h});var t=o(24168),s=o(74848),i=o(28453),a=o(5943),r=o(92809);const l={title:"What's new in version 24.10?",description:"Get to know the features, fixes, and functionality new in webforJ version 24.10.",slug:"whats-new-24.10",date:new Date("2024-07-23T00:00:00.000Z"),authors:"webforJ",tags:["webforJ","v24.10","release"],image:"https://documentation.webforj.com/release_blog/_images/24.10-social.png",hide_table_of_contents:!1},d="24.10",c={authorsImageUrls:[void 0]},h=[{value:"New features and enhancements \ud83c\udf89",id:"new-features-and-enhancements-",level:2},{value:"TextArea and masked input component",id:"textarea-and-masked-input-component",level:3},{value:"MaskedDateField & MaskedDateFieldSpinner",id:"maskeddatefield--maskeddatefieldspinner",level:4},{value:"MaskedNumberField & MaskedNumberFieldSpinner",id:"maskednumberfield--maskednumberfieldspinner",level:4},{value:"MaskedTimeField & MaskedTimeFieldSpinner",id:"maskedtimefield--maskedtimefieldspinner",level:4},{value:"MaskedTextField & MaskedTextFieldSpinner",id:"maskedtextfield--maskedtextfieldspinner",level:4},{value:"TextArea",id:"textarea",level:4},{value:"BusyIndicator, Loading and Spinner components",id:"busyindicator-loading-and-spinner-components",level:3},{value:"Terminal emulator",id:"terminal-emulator",level:3},{value:"Column layout",id:"column-layout",level:3},{value:"Slider overhaul",id:"slider-overhaul",level:3},{value:"Toast component",id:"toast-component",level:3},{value:"Debugging tooling",id:"debugging-tooling",level:3},{value:"Breaking changes \ud83d\udee0",id:"breaking-changes-",level:2},{value:"Console logging",id:"console-logging",level:3},{value:"HTML container",id:"html-container",level:3},{value:"Rendering HTML in components",id:"rendering-html-in-components",level:3}];function m(e){const n={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"cover image",src:o(87105).A+"",width:"1200",height:"630"})}),"\n",(0,s.jsx)(n.p,{children:"webforJ version 24.10 is live and available for development. Learn more about what main features and fixes are included in this release."}),"\n",(0,s.jsxs)(n.p,{children:["As always, see the ",(0,s.jsx)(n.a,{href:"https://github.com/webforj/webforj/releases/tag/24.10",children:"GitHub release overview"})," for a more comprehensive list of changes."]}),"\n",(0,s.jsx)(n.h2,{id:"new-features-and-enhancements-",children:"New features and enhancements \ud83c\udf89"}),"\n",(0,s.jsx)(n.p,{children:"The following new components, features, and enhancements to various existing behavior have been introduced in this release:"}),"\n",(0,s.jsxs)(n.h3,{id:"textarea-and-masked-input-component",children:[(0,s.jsx)(n.code,{children:"TextArea"})," and masked input component"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"24.10"})," brings the addition of several new components to the webforJ library. This release introduces various masked fields and decorators that utilize masked input, allowing for specific input patterns. The following components have been made available for development:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskeddatefield--maskeddatefieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedDateField"})," & ",(0,s.jsx)(n.code,{children:"MaskedDateFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"These components allow users to input dates with a predefined format, with the spinner variant providing an intuitive way for users to increment or decrement date values."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskednumberfield--maskednumberfieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedNumberField"})," & ",(0,s.jsx)(n.code,{children:"MaskedNumberFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Designed for numerical input, these fields ensure that users can only enter valid numbers. The spinner variant adds convenience by allowing users to adjust the value using increment/decrement controls."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskedtimefield--maskedtimefieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedTimeField"})," & ",(0,s.jsx)(n.code,{children:"MaskedTimeFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"These components handle time inputs, enforcing a standard time format. The spinner variant provides controls for easily adjusting time values."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskedtextfield--maskedtextfieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedTextField"})," & ",(0,s.jsx)(n.code,{children:"MaskedTextFieldSpinner"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.h4,{id:"textarea",children:(0,s.jsx)(n.code,{children:"TextArea"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"A versatile, multi-line text input component ideal for larger text entries, such as comments or descriptions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"busyindicator-loading-and-spinner-components",children:[(0,s.jsx)(n.code,{children:"BusyIndicator"}),", ",(0,s.jsx)(n.code,{children:"Loading"})," and ",(0,s.jsx)(n.code,{children:"Spinner"})," components"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Spinner"})," and ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," components have both been added in this release to the core webforJ components. The ",(0,s.jsx)(n.code,{children:"Spinner"})," provides a simple, elegant way to display a loading animation, and can be used independently or as part of the ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," or ",(0,s.jsx)(n.code,{children:"Loading"})," components."]}),"\n",(0,s.jsxs)(n.p,{children:["Building on the ",(0,s.jsx)(n.code,{children:"Spinner"}),", the ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," is an app-level loading overlay that indicates when the app is busy or processing data. It blocks user interaction until the process is complete. This component displays both a ",(0,s.jsx)(n.code,{children:"Spinner"})," and a textual description while the process is occurring."]}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/busyindicator?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/busyindicator/BusyIndicatorView.java",height:"225px"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Loading"})," component uses the same client component, but allows the addition of children and can be attached to any parent component, making it scoped to its parent."]}),"\n",(0,s.jsx)(n.h3,{id:"terminal-emulator",children:"Terminal emulator"}),"\n",(0,s.jsxs)(n.p,{children:["The webforJ ",(0,s.jsx)(n.code,{children:"Terminal"})," component represents an exciting opportunity to emulate a terminal in a webforJ app. Based on ",(0,s.jsx)(n.code,{children:"xterm.js"}),", this tool allows for interactions with a terminal while running within a webforJ app, blending command line features with modern web app capabilities."]}),"\n",(0,s.jsx)("video",{width:"100%",height:"300px",controls:!0,children:(0,s.jsx)("source",{src:r.A,type:"video/mp4"})}),"\n",(0,s.jsx)(n.h3,{id:"column-layout",children:"Column layout"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," component has come to webforJ in ",(0,s.jsx)(n.code,{children:"24.10"}),", and is designed to offer a flexible and responsive layout solution in addition to the ",(0,s.jsx)(n.a,{href:"../../docs/components/flex-layout",children:"FlexLayout"})," component. The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," easily facilitates two-dimensional layouts by providing columns rather than just rows. It dynamically adjusts the number of columns based on the width of the layout and utilizes breakpoints to determine how many columns should be displayed at different viewport widths to help with responsiveness."]}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/columnslayout?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/columnslayout/ColumnsLayoutView.java",height:"300px"}),"\n",(0,s.jsxs)(n.p,{children:["In addition to dynamic column adjustments, ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," supports customizable alignment and spacing options. The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," component is designed to be intuitive and easy to use. It includes built-in methods for setting column spans and positions, making it simple to create complex layouts with minimal effort."]}),"\n",(0,s.jsx)(n.p,{children:"Next time you build a form, give this new component a try in your app!"}),"\n",(0,s.jsx)(n.h3,{id:"slider-overhaul",children:"Slider overhaul"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Slider"})," component has received on overhaul in this release. The appearance and use case for the component remains the same, ensuring that your applications have the same look and feel as they did prior to the updated API overhaul."]}),"\n",(0,s.jsx)(n.p,{children:"However, with this rework, a few of the methods have changed to better reflect modern standards. If you are using this component in your app, review the following methods to ensure you're using the updated API. An example of the various methods can be seen in the code demo below:"}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/sliderdemo?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/slider/SliderDemoView.java",height:"150px"}),"\n",(0,s.jsx)(n.h3,{id:"toast-component",children:"Toast component"}),"\n",(0,s.jsxs)(n.p,{children:["Another powerful component introduced in ",(0,s.jsx)(n.code,{children:"24.10"})," is the ",(0,s.jsx)(n.code,{children:"Toast"})," component, which offers a subtle notification system commonly used in modern applications to inform users about the completion of an operation, system messages, or other important updates."]}),"\n",(0,s.jsx)(n.p,{children:"Developers can set the display duration, choose from various themes, and configure the position of the toast on the screen. The component supports multiple placements, and also allows for setting custom text and HTML content, giving developers the ability to style the messages as needed."}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/toastdemo?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/toast/ToastDemoView.java",height:"300px"}),"\n",(0,s.jsx)(n.h3,{id:"debugging-tooling",children:"Debugging tooling"}),"\n",(0,s.jsxs)(n.p,{children:["Logging to the console has gotten much more powerful in ",(0,s.jsx)(n.code,{children:"24.10"}),". A dedicated utility class can now be accessed statically through the ",(0,s.jsx)(n.code,{children:"App"})," class to log styled messages to the browser console."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Types\nconsole().log("Log message");\nconsole().info("Info message");\nconsole().warn("Warn message");\nconsole().error("Error message");\nconsole().debug("Debug message");\n'})}),"\n",(0,s.jsx)(n.p,{children:"A variety of builder-patterned methods are available for more fine-grained control over the appearance of messages in the console. These include font weight, style, size, text color, background color, and other configurations."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// A variety of options for custom logging display\nconsole().weight().bolder().size().from("30px").color().red().style().italic().transform()\n .uppercase().background().cyan().warn("Mixing Styles");\n\n'})}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes-",children:"Breaking changes \ud83d\udee0"}),"\n",(0,s.jsx)(n.p,{children:"When updating an existing project using an older version of webforJ, keep an eye out for the following breaking changes:"}),"\n",(0,s.jsx)(n.h3,{id:"console-logging",children:"Console logging"}),"\n",(0,s.jsxs)(n.p,{children:["Using the browser's console to get valuable program information printed is an integral part of the development process. Previously, the ",(0,s.jsx)(n.code,{children:"App.consoleLog()"})," and ",(0,s.jsx)(n.code,{children:"App.consoleError()"})," methods enabled this behavior. In ",(0,s.jsx)(n.code,{children:"24.10"}),", these methods have been marked for deprecation. Going forward, use ",(0,s.jsx)(n.code,{children:"BrowserConsole"}),", which comes with a slough of new features to enhance logging capabilities. The new equivalent method to print to the console is ",(0,s.jsx)(n.a,{href:"#debugging-tooling",children:(0,s.jsx)(n.code,{children:"App.console().log()"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"html-container",children:"HTML container"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"HtmlContainer"})," component is marked for deprecation in ",(0,s.jsx)(n.code,{children:"24.10"}),". Going forward, use ",(0,s.jsx)(n.code,{children:"Element"})," instead for custom content or use the ",(0,s.jsx)(n.code,{children:"Iframe"})," component for embedding pages."]}),"\n",(0,s.jsx)(n.h3,{id:"rendering-html-in-components",children:"Rendering HTML in components"}),"\n",(0,s.jsxs)(n.p,{children:["Setting HTML text that's not specifically wrapped with ",(0,s.jsx)(n.code,{children:""})," tags using the ",(0,s.jsx)(n.code,{children:"setText"})," method is no longer possible. To set HTML, make sure to wrap your code with these tags to properly render the desired code."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Valid\nButton home = new Button("""\n \n \n \n""");\n'})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Not Valid\nButton home = new Button("""\n \n""");\n'})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},5943:(e,n,o)=>{o.d(n,{h:()=>f,A:()=>w});var t=o(96540),s=o(17437),i=o(5556),a=o.n(i),r=o(11470),l=o(19365),d=o(41622),c=o(61302);const h=o.p+"assets/images/expand-ba3f00f73da43d91e5b17663c4a7d108.png",m="data:image/png;base64,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",p="data:image/png;base64,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";var u=o(95293),g=o(52706),A=o(2445);function b(e){let{collapse:n,setCollapse:o}=e;b.propTypes={collapse:a().bool.isRequired,setCollapse:a().func.isRequired};const t=s.AH` +"use strict";(self.webpackChunkdwcj_documentation=self.webpackChunkdwcj_documentation||[]).push([[9332],{14922:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>l,metadata:()=>t,toc:()=>h});var t=o(24168),s=o(74848),i=o(28453),a=o(5943),r=o(92809);const l={title:"What's new in version 24.10?",description:"Get to know the features, fixes, and functionality new in webforJ version 24.10.",slug:"whats-new-24.10",date:new Date("2024-07-23T00:00:00.000Z"),authors:"webforJ",tags:["webforJ","v24.10","release"],image:"https://documentation.webforj.com/release_blog/_images/24.10-social.png",hide_table_of_contents:!1},d="24.10",c={authorsImageUrls:[void 0]},h=[{value:"New features and enhancements \ud83c\udf89",id:"new-features-and-enhancements-",level:2},{value:"TextArea and masked input component",id:"textarea-and-masked-input-component",level:3},{value:"MaskedDateField & MaskedDateFieldSpinner",id:"maskeddatefield--maskeddatefieldspinner",level:4},{value:"MaskedNumberField & MaskedNumberFieldSpinner",id:"maskednumberfield--maskednumberfieldspinner",level:4},{value:"MaskedTimeField & MaskedTimeFieldSpinner",id:"maskedtimefield--maskedtimefieldspinner",level:4},{value:"MaskedTextField & MaskedTextFieldSpinner",id:"maskedtextfield--maskedtextfieldspinner",level:4},{value:"TextArea",id:"textarea",level:4},{value:"BusyIndicator, Loading and Spinner components",id:"busyindicator-loading-and-spinner-components",level:3},{value:"Terminal emulator",id:"terminal-emulator",level:3},{value:"Column layout",id:"column-layout",level:3},{value:"Slider overhaul",id:"slider-overhaul",level:3},{value:"Toast component",id:"toast-component",level:3},{value:"Debugging tooling",id:"debugging-tooling",level:3},{value:"Breaking changes \ud83d\udee0",id:"breaking-changes-",level:2},{value:"Console logging",id:"console-logging",level:3},{value:"HTML container",id:"html-container",level:3},{value:"Rendering HTML in components",id:"rendering-html-in-components",level:3}];function m(e){const n={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"cover image",src:o(87105).A+"",width:"1200",height:"630"})}),"\n",(0,s.jsx)(n.p,{children:"webforJ version 24.10 is live and available for development. Learn more about what main features and fixes are included in this release."}),"\n",(0,s.jsxs)(n.p,{children:["As always, see the ",(0,s.jsx)(n.a,{href:"https://github.com/webforj/webforj/releases/tag/24.10",children:"GitHub release overview"})," for a more comprehensive list of changes."]}),"\n",(0,s.jsx)(n.h2,{id:"new-features-and-enhancements-",children:"New features and enhancements \ud83c\udf89"}),"\n",(0,s.jsx)(n.p,{children:"The following new components, features, and enhancements to various existing behavior have been introduced in this release:"}),"\n",(0,s.jsxs)(n.h3,{id:"textarea-and-masked-input-component",children:[(0,s.jsx)(n.code,{children:"TextArea"})," and masked input component"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"24.10"})," brings the addition of several new components to the webforJ library. This release introduces various masked fields and decorators that utilize masked input, allowing for specific input patterns. The following components have been made available for development:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskeddatefield--maskeddatefieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedDateField"})," & ",(0,s.jsx)(n.code,{children:"MaskedDateFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"These components allow users to input dates with a predefined format, with the spinner variant providing an intuitive way for users to increment or decrement date values."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskednumberfield--maskednumberfieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedNumberField"})," & ",(0,s.jsx)(n.code,{children:"MaskedNumberFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Designed for numerical input, these fields ensure that users can only enter valid numbers. The spinner variant adds convenience by allowing users to adjust the value using increment/decrement controls."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskedtimefield--maskedtimefieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedTimeField"})," & ",(0,s.jsx)(n.code,{children:"MaskedTimeFieldSpinner"})]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"These components handle time inputs, enforcing a standard time format. The spinner variant provides controls for easily adjusting time values."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.h4,{id:"maskedtextfield--maskedtextfieldspinner",children:[(0,s.jsx)(n.code,{children:"MaskedTextField"})," & ",(0,s.jsx)(n.code,{children:"MaskedTextFieldSpinner"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.h4,{id:"textarea",children:(0,s.jsx)(n.code,{children:"TextArea"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"A versatile, multi-line text input component ideal for larger text entries, such as comments or descriptions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"busyindicator-loading-and-spinner-components",children:[(0,s.jsx)(n.code,{children:"BusyIndicator"}),", ",(0,s.jsx)(n.code,{children:"Loading"})," and ",(0,s.jsx)(n.code,{children:"Spinner"})," components"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Spinner"})," and ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," components have both been added in this release to the core webforJ components. The ",(0,s.jsx)(n.code,{children:"Spinner"})," provides a simple, elegant way to display a loading animation, and can be used independently or as part of the ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," or ",(0,s.jsx)(n.code,{children:"Loading"})," components."]}),"\n",(0,s.jsxs)(n.p,{children:["Building on the ",(0,s.jsx)(n.code,{children:"Spinner"}),", the ",(0,s.jsx)(n.code,{children:"BusyIndicator"})," is an app-level loading overlay that indicates when the app is busy or processing data. It blocks user interaction until the process is complete. This component displays both a ",(0,s.jsx)(n.code,{children:"Spinner"})," and a textual description while the process is occurring."]}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/busyindicator?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/busyindicator/BusyIndicatorView.java",height:"225px"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Loading"})," component uses the same client component, but allows the addition of children and can be attached to any parent component, making it scoped to its parent."]}),"\n",(0,s.jsx)(n.h3,{id:"terminal-emulator",children:"Terminal emulator"}),"\n",(0,s.jsxs)(n.p,{children:["The webforJ ",(0,s.jsx)(n.code,{children:"Terminal"})," component represents an exciting opportunity to emulate a terminal in a webforJ app. Based on ",(0,s.jsx)(n.code,{children:"xterm.js"}),", this tool allows for interactions with a terminal while running within a webforJ app, blending command line features with modern web app capabilities."]}),"\n",(0,s.jsx)("video",{width:"100%",height:"300px",controls:!0,children:(0,s.jsx)("source",{src:r.A,type:"video/mp4"})}),"\n",(0,s.jsx)(n.h3,{id:"column-layout",children:"Column layout"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," component has come to webforJ in ",(0,s.jsx)(n.code,{children:"24.10"}),", and is designed to offer a flexible and responsive layout solution in addition to the ",(0,s.jsx)(n.a,{href:"../../docs/components/flex-layout",children:"FlexLayout"})," component. The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," easily facilitates two-dimensional layouts by providing columns rather than just rows. It dynamically adjusts the number of columns based on the width of the layout and utilizes breakpoints to determine how many columns should be displayed at different viewport widths to help with responsiveness."]}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/columnslayout?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/columnslayout/ColumnsLayoutView.java",height:"300px"}),"\n",(0,s.jsxs)(n.p,{children:["In addition to dynamic column adjustments, ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," supports customizable alignment and spacing options. The ",(0,s.jsx)(n.code,{children:"ColumnsLayout"})," component is designed to be intuitive and easy to use. It includes built-in methods for setting column spans and positions, making it simple to create complex layouts with minimal effort."]}),"\n",(0,s.jsx)(n.p,{children:"Next time you build a form, give this new component a try in your app!"}),"\n",(0,s.jsx)(n.h3,{id:"slider-overhaul",children:"Slider overhaul"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Slider"})," component has received on overhaul in this release. The appearance and use case for the component remains the same, ensuring that your applications have the same look and feel as they did prior to the updated API overhaul."]}),"\n",(0,s.jsx)(n.p,{children:"However, with this rework, a few of the methods have changed to better reflect modern standards. If you are using this component in your app, review the following methods to ensure you're using the updated API. An example of the various methods can be seen in the code demo below:"}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/sliderdemo?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/slider/SliderDemoView.java",height:"150px"}),"\n",(0,s.jsx)(n.h3,{id:"toast-component",children:"Toast component"}),"\n",(0,s.jsxs)(n.p,{children:["Another powerful component introduced in ",(0,s.jsx)(n.code,{children:"24.10"})," is the ",(0,s.jsx)(n.code,{children:"Toast"})," component, which offers a subtle notification system commonly used in modern applications to inform users about the completion of an operation, system messages, or other important updates."]}),"\n",(0,s.jsx)(n.p,{children:"Developers can set the display duration, choose from various themes, and configure the position of the toast on the screen. The component supports multiple placements, and also allows for setting custom text and HTML content, giving developers the ability to style the messages as needed."}),"\n",(0,s.jsx)(a.A,{path:"https://demo.webforj.com/webapp/controlsamples/toast?",javaE:"https://raw.githubusercontent.com/webforj/webforj-docs-samples/refs/heads/main/src/main/java/com/webforj/samples/views/toast/ToastView.java",height:"300px"}),"\n",(0,s.jsx)(n.h3,{id:"debugging-tooling",children:"Debugging tooling"}),"\n",(0,s.jsxs)(n.p,{children:["Logging to the console has gotten much more powerful in ",(0,s.jsx)(n.code,{children:"24.10"}),". A dedicated utility class can now be accessed statically through the ",(0,s.jsx)(n.code,{children:"App"})," class to log styled messages to the browser console."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Types\nconsole().log("Log message");\nconsole().info("Info message");\nconsole().warn("Warn message");\nconsole().error("Error message");\nconsole().debug("Debug message");\n'})}),"\n",(0,s.jsx)(n.p,{children:"A variety of builder-patterned methods are available for more fine-grained control over the appearance of messages in the console. These include font weight, style, size, text color, background color, and other configurations."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// A variety of options for custom logging display\nconsole().weight().bolder().size().from("30px").color().red().style().italic().transform()\n .uppercase().background().cyan().warn("Mixing Styles");\n\n'})}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes-",children:"Breaking changes \ud83d\udee0"}),"\n",(0,s.jsx)(n.p,{children:"When updating an existing project using an older version of webforJ, keep an eye out for the following breaking changes:"}),"\n",(0,s.jsx)(n.h3,{id:"console-logging",children:"Console logging"}),"\n",(0,s.jsxs)(n.p,{children:["Using the browser's console to get valuable program information printed is an integral part of the development process. Previously, the ",(0,s.jsx)(n.code,{children:"App.consoleLog()"})," and ",(0,s.jsx)(n.code,{children:"App.consoleError()"})," methods enabled this behavior. In ",(0,s.jsx)(n.code,{children:"24.10"}),", these methods have been marked for deprecation. Going forward, use ",(0,s.jsx)(n.code,{children:"BrowserConsole"}),", which comes with a slough of new features to enhance logging capabilities. The new equivalent method to print to the console is ",(0,s.jsx)(n.a,{href:"#debugging-tooling",children:(0,s.jsx)(n.code,{children:"App.console().log()"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"html-container",children:"HTML container"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"HtmlContainer"})," component is marked for deprecation in ",(0,s.jsx)(n.code,{children:"24.10"}),". Going forward, use ",(0,s.jsx)(n.code,{children:"Element"})," instead for custom content or use the ",(0,s.jsx)(n.code,{children:"Iframe"})," component for embedding pages."]}),"\n",(0,s.jsx)(n.h3,{id:"rendering-html-in-components",children:"Rendering HTML in components"}),"\n",(0,s.jsxs)(n.p,{children:["Setting HTML text that's not specifically wrapped with ",(0,s.jsx)(n.code,{children:""})," tags using the ",(0,s.jsx)(n.code,{children:"setText"})," method is no longer possible. To set HTML, make sure to wrap your code with these tags to properly render the desired code."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Valid\nButton home = new Button("""\n \n \n \n""");\n'})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'// Not Valid\nButton home = new Button("""\n \n""");\n'})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},5943:(e,n,o)=>{o.d(n,{h:()=>f,A:()=>w});var t=o(96540),s=o(17437),i=o(5556),a=o.n(i),r=o(11470),l=o(19365),d=o(41622),c=o(61302);const h=o.p+"assets/images/expand-ba3f00f73da43d91e5b17663c4a7d108.png",m="data:image/png;base64,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",p="data:image/png;base64,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";var u=o(95293),g=o(52706),A=o(2445);function b(e){let{collapse:n,setCollapse:o}=e;b.propTypes={collapse:a().bool.isRequired,setCollapse:a().func.isRequired};const t=s.AH` display: flex; justify-content: end; align-items: flex-end; diff --git a/assets/js/f81c1134.fdcf2dac.js b/assets/js/f81c1134.2603d27a.js similarity index 60% rename from assets/js/f81c1134.fdcf2dac.js rename to assets/js/f81c1134.2603d27a.js index f99577d05..d838c396c 100644 --- a/assets/js/f81c1134.fdcf2dac.js +++ b/assets/js/f81c1134.2603d27a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdwcj_documentation=self.webpackChunkdwcj_documentation||[]).push([[8130],{77735:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"whats-new-v24.20","metadata":{"permalink":"/blog/whats-new-v24.20","source":"@site/blog/2024-11-25-webforj-v24.20/24.20.md","title":"What\'s new in version 24.20?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.20.","date":"2024-11-25T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.20","permalink":"/blog/tags/v-24-20"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.415,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.20?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.20.","slug":"whats-new-v24.20","date":"2024-11-25T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.20","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.20.png","hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"What\'s new in version 24.12?","permalink":"/blog/whats-new-v24.12"}},"content":"![cover image](../../static/release_blog/_images/24.20.png)\\n\\nwebforJ version `24.20` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.20\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.20) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## New features and enhancements \ud83c\udf89\\n\\nWe\u2019re excited to introduce version `24.20` which brings a game-changing update to webforJ - the shift to **WAR deployment**.\\n\\n\x3c!-- vale off --\x3e\\n### WAR Deployment in webforJ\\n\x3c!-- vale on --\x3e\\n\\nIn `24.20`, webforJ fully embraces the WAR (Web Application Archive) pattern for packaging and deploying apps. WAR files are a tried-and-true standard in Java development, bundling everything your app needs - code, resources, and dependencies - into a single, deployable archive.\\n\\n\\n### Updating your project for WAR deployment\\n\\nSwitching your project to use WAR deployment in webforJ is straightforward. To do so, ensure the following components are in place:\\n\\n1. **Include the Maven Jetty Plugin**:\\n\\nAdd the Maven Jetty plugin to your pom.xml to handle the deployment process. The Jetty plugin allows you to package and deploy your app as a WAR file effortlessly.\\n\\n```xml\\n\\n org.eclipse.jetty.ee8\\n jetty-ee8-maven-plugin\\n 12.0.14\\n \\n \\n /\\n \\n \\n \\n```\\n\\n:::info Replacing the webforJ install plugin\\nIn projects using the webforJ install plugin, remove this plugin from your POM to ensure that it isn\'t triggered when running `mvn install`.\\n:::\\n\\n2. **Add the required configuration and resources:**\\n\\nInclude the following essential files in your project to ensure it runs as a WAR:\\n\\n- `webapp/WEB-INF/web.xml`:\\nDefines the app\'s deployment descriptor, specifying how the app should be deployed and managed by the server.\\n\\n- `resources/webforj.conf`:\\nCentralized configuration file for customizing your app\'s behavior.\\n\\n- `resources/certificate.bls`:\\nA license certificate file required to run your app. You\u2019ll receive this file when registering for a license.\\n\\n- `resources/blsclient.conf`:\\nConfiguration file for license properties.\\n\\nOnce added, an example project structure may look like this:\\n\\n```bash \\nsrc/main/\\n java/ # Java source files\\n resources/\\n webforj.conf # App configuration\\n blsclient.conf # License configuration\\n certificate.bls # License certificate\\n webapp/\\n WEB-INF/\\n web.xml # Deployment descriptor\\n```\\n### Configuration with `webforj.conf`\\n\\nThe `webforj.conf` file centralizes app configuration in HOCON format. With this file, you can tweak key settings for your app, such as the app\'s entry point, and whether or not to run in `DEBUG` mode.\\n\\nHere are some of the most useful settings you can define in `webforj.conf`:\\n| **Property** | **Description** | **Default** |\\n|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|\\n| `webforj.entry` | The fully qualified name of the class that extends `App`, acting as the entry point for your app. | *Not Set* |\\n| `webforj.debug` | Enables debug mode, showing detailed errors in the browser and printing debug logs to the console. | `false` |\\n| `webforj.reloadOnServerError` | Automatically reloads the app if the server temporarily becomes unavailable during development. | `on` |\\n| `webforj.clientHeartbeatRate` | Sets the interval for client pings to the server to query availability. Use shorter intervals in development and longer ones in production. | `50s` |\\n\\n### Configuring the `web.xml` file\\n\\nThe `web.xml` file is a crucial part of Java web app deployment, serving as the deployment descriptor for your app. In webforJ, it defines key settings like the servlet configuration and URL mappings. This file must be located in the `WEB-INF` directory of your project\u2019s deployment structure.\\n\\n| **Setting** | **Explanation** | **Default Value** |\\n|----------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------------------|\\n| `` | Sets the display name for the web app, typically derived from the project name. This name appears in app servers\' management consoles. | `${project.name}` |\\n| `` and `` | Defines the `WebforjServlet`, the core servlet for handling webforJ requests. This servlet is mapped to all URLs (`/*`), making it the main entry point for web requests. | `WebforjServlet` |\\n| `` | Specifies that `WebforjServlet` should be loaded when the app starts. Setting this to `1` ensures the servlet loads immediately, improving initial request handling. | `1` |\\n\\nTo learn more about the various configuration options available, as well as other options for configuring your webforJ project, browse [this article](../../docs/configuration/overview) detailing configuration in webforJ."},{"id":"whats-new-v24.12","metadata":{"permalink":"/blog/whats-new-v24.12","source":"@site/blog/2024-10-11-webforj-v24.12/24.12.md","title":"What\'s new in version 24.12?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.12.","date":"2024-10-14T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.12","permalink":"/blog/tags/v-24-12"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.255,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.12?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.12.","slug":"whats-new-v24.12","date":"2024-10-14T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.12","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.12.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.20?","permalink":"/blog/whats-new-v24.20"},"nextItem":{"title":"What\'s new in version 24.11?","permalink":"/blog/whats-new-v24.11"}},"content":"![cover image](../../static/release_blog/_images/24.12.png)\\n\\nwebforJ version `24.12` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.12\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.12) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## Breaking changes \ud83d\udee0\\n\\nWith the introduction of the routing overhaul outlined below, it\'s now necessary to restrict webforJ projects to contain **only one class extending `App`**. Read more below, and in the docs about the routing solution introduced in this release.\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### Routing support\\n\\nVersion `24.12` introduces Routing in webforJ, a critical feature that significantly enhances navigation within your web apps. Routing allows you to define different paths/routes within your app, enabling users to navigate between different views or pages, access crucial information, or manipulate the page without refreshing the entire app.\\n\\nTo start using routing in your project, include the `Routify` annotation in the class extending the `App` class:\\n\\n```java\\n@Routify(packages = \\"com.webforj.samples.views\\", debug = true)\\n@AppTitle(\\"webforJ Samples\\")\\npublic class Application extends App {\\n @Override\\n public void run() throws WebforjException {\\n console().log(\\"Test\\");\\n }\\n}\\n```\\n\\nTo register a `Route` in webforJ, developers can manually specify the route type by setting `Route.Type` in the `@Route` annotation, or omit the type if classes end in `View` or `Layout`. \\n\\n```java\\n@Route\\n@FrameTitle(\\"Example View\\")\\npublic class ExampleClassView extends Composite
{\\n //...\\n}\\n```\\nRouting in webforJ has many uses, and a [more comprehensive overview](../../docs/routing/overview) of these use cases, as well as the various features and capabilities available to developers. \\n\\n### `AppDrawerToggle` component\\n\\nThe `AppDrawerToggle` component has been added in `24.12`. This lightweight component has been included to allow developers to easily include a way to toggle the `AppLayout` component\'s drawer section if it\'s desired within an app.\\n\\nIncluding this within your `AppLayout` is simple - simply add the component to the layout, commonly done in the toolbar at the top, and the component will automatically take care of the toggling capability.\\n\\n```java\\nAppLayout layout = new AppLayout();\\nlayout.addToHeader(new AppDrawerToggle());\\n```\\n\\n### `Toolbar` component\\n\\nAnother addition with this release is the `Toolbar` component. `Toolbars` are a fundamental part of modern web applications, offering users quick access to core actions and navigation elements. Whether it\'s for managing page controls or housing key functionalities like search and notifications, the `Toolbar` is now available for webforJ projects.\\n\\n:::tip Using the `Toolbar`\\nThe `Toolbar` component is ideal for use within the [`AppLayout`](../../docs/components/app-layout) component.\\n:::\\n\\n```java\\nToolbar toolbar = new Toolbar();\\ntoolbar.addToStart(new AppDrawerToggle());\\ntoolbar.addToTitle(new H1(\\"DWC App\\"));\\ntoolbar.setTheme(Theme.PRIMARY);\\n\\nAppLayout layout = new AppLayout();\\nlayout.addToHeader(toolbar);\\n```"},{"id":"whats-new-v24.11","metadata":{"permalink":"/blog/whats-new-v24.11","source":"@site/blog/2024-09-05-webforj-v24.11/24.11.md","title":"What\'s new in version 24.11?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.11.","date":"2024-09-05T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.11","permalink":"/blog/tags/v-24-11"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":4.29,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.11?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.11.","slug":"whats-new-v24.11","date":"2024-09-05T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.11","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.11.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.12?","permalink":"/blog/whats-new-v24.12"},"nextItem":{"title":"What\'s new in version 24.10?","permalink":"/blog/whats-new-24.10"}},"content":"![cover image](../../static/release_blog/_images/24.11.png)\\n\\nwebforJ version 24.11 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.11\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.11) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### Using prefix and suffix slots\\n\\nIn order to streamline the use of many webforJ components, additional API methods have been added which allow utilization of prefix and suffix slots in various components. \\n\\nThese slots can be utilized in many different ways to best suit an app\'s behavior, such as adding icons, labels, loading spinners, clear/reset functionality, avatar/profile pictures, and many other useful behaviors. \\n\\nThe following components have had API methods added to support this behavior:\\n\\n- [Button](../../docs/components/button)\\n- [ChoiceBox](../../docs/components/lists/choicebox)\\n- [ComboBox](../../docs/components/lists/combobox)\\n- [TabbedPane](../../docs/components/tabbedpane)\\n- [All Field Types](../../docs/components/fields)\\n\\nTo utilize these slots, getter and setter methods for prefix and suffix slots have been added. Below is an example for a [`Button`](../../docs/components/button):\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\nButton contact = new Button(\\"Contact us\\", ButtonTheme.PRIMARY);\\ncontact.setPrefixComponent(FeatherIcon.MAIL.create());\\ncontact.onClick(e -> {\\n showMessageDialog(\\"Message has been sent!\\", \\"Sent Message\\");\\n});\\n\\nlayout.add(contact);\\n\\nFrame mainFrame = new Frame();\\nmainFrame.add(layout);\\n```\\n\\n\\n### Icon overhaul\\n\\nWith the addition of more fine-grained control over the slots of various components, the API of one of the most common use cases for slots has also been overhauled; icons now have a more streamlined and intuitive API for use within webforJ apps. \\n\\nUse the new `Icon` class to create an icon that can be added to a layout, or to a slot in a supporting component:\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n \\nFrame mainFrame = new Frame();\\n\\nIcon image = FeatherIcon.IMAGE.create();\\nIcon video = FeatherIcon.VIDEO.create();\\nIcon music = FeatherIcon.MUSIC.create();\\n\\nlayout.add(image, video, music);\\nmainFrame.add(layout);\\n```\\n\\n#### Icons across multiple collections\\n\\nThe new update allows developers to mix and match icons from different collections. With support for the icon libraries included by default with webforJ - [**Feather**](https://feathericons.com/), [**Tabler**](https://tabler.io/icons), and [**FontAwesome**](https://fontawesome.com/icons) - you can now select the perfect icon for your needs without being constrained to a single collection. This is especially useful for applications that require a variety of visual styles or specific icon designs.\\n\\nTo do this, use the factory methods provided to select the icon pool:\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\nFrame mainFrame = new Frame();\\n\\nIcon image = FeatherIcon.IMAGE.create();\\nIcon video = TablerIcon.create(\\"video\\");\\nIcon music = FontAwesomeIcon.create(\\"music\\", FontAwesomeIcon.Variate.SOLID);\\n\\nlayout.add(image, video, music);\\nmainFrame.add(layout);\\n```\\n\\n#### Adding a custom icon pool\\n\\n Icon Pools, which allows developers to organize and manage icons more effectively. Icons can be stored in a centralized directory or a context path and accessed through a pool, simplifying the icon management process. You can create icon pools from directories using a full directory path, or a context path as shown below:\\n\\n ```java\\nIconPoolBuilder.fromDirectory(\\"app-pool\\", \\"context://icons\\");\\n\\n FlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\n Frame mainFrame = new Frame();\\n\\n Icon bell = new Icon(\\"bell\\", \\"app-pool\\");\\n Icon dribbble = new Icon(\\"dribbble\\", \\"app-pool\\");\\n\\n layout.add(bell, dribbble);\\n mainFrame.add(layout);\\n ```\\n\\nFor developers looking for more integration of their custom icon pools, custom icon factories can now be created. This allows for defining reusable icon sets within an app, which makes creating your app more consistent and helps reduce maintenance across different components and modules.\\n\\n```java\\npublic enum AppPoolIcon implements IconFactory {\\n BELL, DRIBBBLE;\\n\\n public Icon create() {\\n return new Icon(String.valueOf(this), this.getPool());\\n }\\n\\n @Override\\n public String getPool() {\\n return \\"app-pool\\";\\n }\\n\\n @Override\\n public String toString() {\\n return this.name().toLowerCase(Locale.ENGLISH).replace(\'_\', \'-\');\\n }\\n}\\n```\\n#### Icon button\\n\\nFinally, the `IconButton` class has been added, and is ideal for actions that are best represented with just an icon, such as notifications or alerts.\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build().setMargin(\\"var(--dwc-space-m)\\");\\n\\nIconButton bell = new IconButton(FeatherIcon.BELL.create());\\nbell.onClick(e -> showMessageDialog(\\"You have a new message!\\", \\"Ding Dong!\\"));\\n\\nlayout.add(bell);\\n\\nFrame mainFrame = new Frame();\\nmainFrame.add(layout);\\n```\\n\\n### Void asynchronous JavaScript execution\\n\\nWith `24.11`, it\'s now possible to asynchronously call a specified JavaScript function or execute provided JavaScript code without returning a result to the server. This can be done on a specific [`Element`](../../docs/building-ui/element), or within the entire app by utilizing the `Page` instance. \\n\\n```java\\nFrame mainFrame = new Frame();\\n/* Executes async JS at the page level, independent of a specific element */\\nPage.getCurrent().executeJsVoidAsync(\\"{console.log(\'Printing information to the console\')}\\");\\n\\n/* Adds a click listener to the button which can be invoked programmatically */\\nElement button = new Element(\\"button\\", \\"Display User\\");\\nbutton.addEventListener(\\"click\\", e -> {App.console().log(\\"Button Clicked\\");});\\n\\n/* Will programmatically click the button */\\nbutton.callJsFunctionVoidAsync(\\"click\\");\\nmainFrame.add(button);\\n```\\n\\n### Using the `Page` for HTML event registration\\n\\nIn addition to using the `Page` class to execute JavaScript, support has been added to allow HTML events to be registered directly through the `Page` instance, without needing to use a specific [`Element`](../../docs/building-ui/element) as a bridge. This is particularly useful when an event should execute page-wide, broadening the scope of capability.\\n\\n```java\\nPageEventOptions pageEventOptions = new PageEventOptions();\\npageEventOptions.addData(\\"clientX\\", \\"event.clientX\\");\\npageEventOptions.addData(\\"clientY\\", \\"event.clientY\\");\\nListenerRegistration r1 = Page.getCurrent().addEventListener(\\"click\\", e -> {\\n int x = (int) e.getData().get(\\"clientX\\");\\n int y = (int) e.getData().get(\\"clientY\\");\\n\\n console().log(\\"x: \\" + x + \\", y: \\" + y);\\n}, pageEventOptions);\\n```"},{"id":"whats-new-24.10","metadata":{"permalink":"/blog/whats-new-24.10","source":"@site/blog/2024-07-23-webforj-v24.10/24.10.md","title":"What\'s new in version 24.10?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.10.","date":"2024-07-23T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.10","permalink":"/blog/tags/v-24-10"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":5.185,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.10?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.10.","slug":"whats-new-24.10","date":"2024-07-23T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.10","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.10-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.11?","permalink":"/blog/whats-new-v24.11"},"nextItem":{"title":"Whats new in version 24.02?","permalink":"/blog/whats-new-24.02"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\nimport terminalVideo from \'../../static/release_blog/terminal.mp4\';\\n\\n![cover image](../../static/release_blog/_images/24.10.png)\\n\\nwebforJ version 24.10 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.10\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.10) for a more comprehensive list of changes.\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### `TextArea` and masked input component\\n\\n`24.10` brings the addition of several new components to the webforJ library. This release introduces various masked fields and decorators that utilize masked input, allowing for specific input patterns. The following components have been made available for development:\\n\\n- #### `MaskedDateField` & `MaskedDateFieldSpinner`\\n\\n > These components allow users to input dates with a predefined format, with the spinner variant providing an intuitive way for users to increment or decrement date values. \\n\\n- #### `MaskedNumberField` & `MaskedNumberFieldSpinner`\\n\\n > Designed for numerical input, these fields ensure that users can only enter valid numbers. The spinner variant adds convenience by allowing users to adjust the value using increment/decrement controls.\\n\\n- #### `MaskedTimeField` & `MaskedTimeFieldSpinner`\\n\\n >These components handle time inputs, enforcing a standard time format. The spinner variant provides controls for easily adjusting time values.\\n\\n- #### `MaskedTextField` & `MaskedTextFieldSpinner`\\n\\n- #### `TextArea`\\n\\n > A versatile, multi-line text input component ideal for larger text entries, such as comments or descriptions.\\n\\n\\n### `BusyIndicator`, `Loading` and `Spinner` components\\n\\nThe `Spinner` and `BusyIndicator` components have both been added in this release to the core webforJ components. The `Spinner` provides a simple, elegant way to display a loading animation, and can be used independently or as part of the `BusyIndicator` or `Loading` components.\\n\\nBuilding on the `Spinner`, the `BusyIndicator` is an app-level loading overlay that indicates when the app is busy or processing data. It blocks user interaction until the process is complete. This component displays both a `Spinner` and a textual description while the process is occurring. \\n\\n\\n\\nThe `Loading` component uses the same client component, but allows the addition of children and can be attached to any parent component, making it scoped to its parent.\\n\\n### Terminal emulator\\n\\nThe webforJ `Terminal` component represents an exciting opportunity to emulate a terminal in a webforJ app. Based on `xterm.js`, this tool allows for interactions with a terminal while running within a webforJ app, blending command line features with modern web app capabilities. \\n\\n\\n\\n### Column layout\\n\\nThe `ColumnsLayout` component has come to webforJ in `24.10`, and is designed to offer a flexible and responsive layout solution in addition to the [FlexLayout](../../docs/components/flex-layout) component. The `ColumnsLayout` easily facilitates two-dimensional layouts by providing columns rather than just rows. It dynamically adjusts the number of columns based on the width of the layout and utilizes breakpoints to determine how many columns should be displayed at different viewport widths to help with responsiveness.\\n\\n\\n\\nIn addition to dynamic column adjustments, `ColumnsLayout` supports customizable alignment and spacing options. The `ColumnsLayout` component is designed to be intuitive and easy to use. It includes built-in methods for setting column spans and positions, making it simple to create complex layouts with minimal effort.\\n\\nNext time you build a form, give this new component a try in your app!\\n\\n### Slider overhaul\\n\\nThe `Slider` component has received on overhaul in this release. The appearance and use case for the component remains the same, ensuring that your applications have the same look and feel as they did prior to the updated API overhaul.\\n\\nHowever, with this rework, a few of the methods have changed to better reflect modern standards. If you are using this component in your app, review the following methods to ensure you\'re using the updated API. An example of the various methods can be seen in the code demo below:\\n\\n\\n\\n### Toast component\\n\\nAnother powerful component introduced in `24.10` is the `Toast` component, which offers a subtle notification system commonly used in modern applications to inform users about the completion of an operation, system messages, or other important updates.\\n\\nDevelopers can set the display duration, choose from various themes, and configure the position of the toast on the screen. The component supports multiple placements, and also allows for setting custom text and HTML content, giving developers the ability to style the messages as needed.\\n\\n\\n\\n### Debugging tooling\\n\\nLogging to the console has gotten much more powerful in `24.10`. A dedicated utility class can now be accessed statically through the `App` class to log styled messages to the browser console. \\n\\n```java\\n// Types\\nconsole().log(\\"Log message\\");\\nconsole().info(\\"Info message\\");\\nconsole().warn(\\"Warn message\\");\\nconsole().error(\\"Error message\\");\\nconsole().debug(\\"Debug message\\");\\n```\\n\\nA variety of builder-patterned methods are available for more fine-grained control over the appearance of messages in the console. These include font weight, style, size, text color, background color, and other configurations.\\n\\n```java\\n// A variety of options for custom logging display\\nconsole().weight().bolder().size().from(\\"30px\\").color().red().style().italic().transform()\\n .uppercase().background().cyan().warn(\\"Mixing Styles\\");\\n\\n```\\n\\n## Breaking changes \ud83d\udee0\\n\\nWhen updating an existing project using an older version of webforJ, keep an eye out for the following breaking changes:\\n\\n### Console logging\\n\\nUsing the browser\'s console to get valuable program information printed is an integral part of the development process. Previously, the `App.consoleLog()` and `App.consoleError()` methods enabled this behavior. In `24.10`, these methods have been marked for deprecation. Going forward, use `BrowserConsole`, which comes with a slough of new features to enhance logging capabilities. The new equivalent method to print to the console is [`App.console().log()`](#debugging-tooling). \\n\\n### HTML container\\nThe `HtmlContainer` component is marked for deprecation in `24.10`. Going forward, use `Element` instead for custom content or use the `Iframe` component for embedding pages.\\n\\n### Rendering HTML in components\\n\\nSetting HTML text that\'s not specifically wrapped with `` tags using the `setText` method is no longer possible. To set HTML, make sure to wrap your code with these tags to properly render the desired code.\\n\\n```java\\n// Valid\\nButton home = new Button(\\"\\"\\"\\n \\n \\n \\n\\"\\"\\");\\n```\\n\\n```java\\n// Not Valid\\nButton home = new Button(\\"\\"\\"\\n \\n\\"\\"\\");\\n```"},{"id":"whats-new-24.02","metadata":{"permalink":"/blog/whats-new-24.02","source":"@site/blog/2024-06-03-webforj-v24.02/24.02.md","title":"Whats new in version 24.02?","description":"Get to know the features, fixes and functionality new in webforJ version 24.02.","date":"2024-06-03T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.02","permalink":"/blog/tags/v-24-02"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.895,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.02?","description":"Get to know the features, fixes and functionality new in webforJ version 24.02.","slug":"whats-new-24.02","date":"2024-06-03T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.02","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.02-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.10?","permalink":"/blog/whats-new-24.10"},"nextItem":{"title":"Whats new in version 24.01?","permalink":"/blog/whats-new-24.01"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.02.png)\\n\\nwebforj version 24.02 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.02\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.01) for a more comprehensive list of changes.\\n\\n## Option dialogs\\n\\n\\n\\nWith 24.02, webforJ introduces a robust option dialog feature that allows applications to interact with users and gather input effectively. These dialogs are modal, meaning they halt app execution until the user provides input, ensuring critical messages are addressed before proceeding. These function similarly to `JOptionPane` in Swing, addressing the need for blocking dialogs in web applications.\\n\\nThere are multiple types of these dialogs:\\n\\n- **`Message`**: Display informative messages to users.\\n- **`Confirm`**: Request user confirmation for specific actions.\\n- **`Input`**: Gather textual input from users.\\n- **`File Chooser`**: Allow users to select files from their system.\\n- **`File Upload`**: Enable users to upload files directly.\\n\\nThe various dialog options are provided to help clarify and specify the type of interaction users should take throughout navigation of an app. \\n\\n## Progress bar overhaul\\n\\nThe `ProgressBar` in 24.02 has gotten a powerful, comprehensive overhaul. This component provides a visual representation of task progress, making it easy for users to monitor the completion status of ongoing tasks. The progress bar fills up as the task progresses, displaying the percentage of completion both visually and textually.\\n\\n\\n\\nThe following key features are included in the `ProgressBar` out of the box:\\n\\n- **Configurable Values**: Supports setting and getting current, minimum, and maximum values to accurately represent task progress.\\n\\n- **Indeterminate Mode**: Allows for an indeterminate state to indicate ongoing tasks without a definite end.\\n\\n- **Text Visibility**: Options to display the percentage of completion or the raw value as text.\\n\\n- **Orientation Support**: The `ProgressBar` can be oriented either horizontally or vertically, providing flexibility in how it is displayed in your app.\\n\\n- **Styling Options**: Includes themes, animation, and striped designs for enhanced visual feedback.\\n\\nThe `ProgressBar` component is highly versatile and can be used to visualize the completion status of various tasks. It allows configuration of minimum and maximum values, making it adaptable to different use cases.\\n\\n## Interval\\n\\n`24.02` introduces `Interval` capability in webforJ, providing a mechanism similar to the Swing `Timer`, which offers a way to execute code at fixed time intervals. This feature is essential for tasks that need periodic execution, such as updating UI elements, performing background operations, or polling for data.\\n\\nIn the above `ProgressBar` the start, pause and restart features were all implemented via webforJ\'s `Interval` class. In addition to these functions, it also allows developers to specify a timeout value in seconds, supporting fractional seconds for precise timing. For tasks with unknown completion times, the `Interval` can be set to an indeterminate state, allowing it to keep running until explicitly stopped.\\n\\nTo create, start, stop, and then restart an interval, the following code can be executed:\\n\\n```java\\n// Create a new Interval with a delay of 2.5 seconds\\nInterval interval = new Interval(2.5f, event -> {\\n System.out.println(\\"Interval elapsed!\\");\\n});\\n\\n// Start the interval\\ninterval.start();\\n\\n// Stop the interval\\ninterval.stop();\\n\\n// Restart the interval\\ninterval.restart();\\n```\\n\\nThe `Interval` helps manage periodic tasks - its ability to handle fixed time delays, support multiple event listeners, and provide robust performance makes it an essential feature for developers looking to implement timed events efficiently."},{"id":"whats-new-24.01","metadata":{"permalink":"/blog/whats-new-24.01","source":"@site/blog/2024-04-26-webforj-v24.01/24.01.md","title":"Whats new in version 24.01?","description":"Get to know the features, fixes and functionality new in webforJ version 24.01.","date":"2024-04-26T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.01","permalink":"/blog/tags/v-24-01"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.175,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.01?","description":"Get to know the features, fixes and functionality new in webforJ version 24.01.","slug":"whats-new-24.01","date":"2024-04-26T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.01","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.01-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Whats new in version 24.02?","permalink":"/blog/whats-new-24.02"},"nextItem":{"title":"Whats new in version 24.00?","permalink":"/blog/whats-new-24.00"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.01.png)\\n\\nwebforj version `24.01` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# `24.01`\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.01) for a more comprehensive list of changes.\\n\\n## New data binding feature in webforJ\\n\\nwebforJ `24.01` introduces a robust data binding capability, smoothly connecting UI components with backend data models in Java applications. This integration ensures that any changes made in the UI are immediately reflected in the data model and vice versa. This feature greatly simplifies data management and reduces time to completion. Below are some of the key features:\\n\\n- **Bidirectional Binding**: Automatically synchronizes changes between the data model and the UI, ensuring that updates in one are mirrored in the other.\\n\\n- **Comprehensive Validation**: Provides robust validation options that can be customized, allowing developers to implement custom rules or leverage existing validation frameworks like Jakarta Validation to maintain data accuracy.\\n\\n- **Extensibility**: Easily extendable to support a wide range of UI components, data transformations, and complex validation needs.\\n\\n- **Annotation-Based Configuration**: Reduces the need for repetitive code by using annotations to declare bindings, making the process more straightforward and easier to maintain.\\n\\nFor most cases, webforJ\'s data binding between UI component and data model can be done automatically. For more complex cases, tools have been provided to make the binding seamless and straightforward.\\n\\nFunctionality such as transformation and validation further enhance the binding capabilities to further simplify UI interaction with the data layer. For more information on this feature, see the [documentation entry](../../docs/data-binding/overview).\\n\\n\\n## Login component\\n\\n\\n\\nThe latest `Login` component in webforJ offers an intuitive and efficient interface for user authentication, enabling users to log in using their username and password. This component is highly customizable to enhance user experiences across various devices and locales.\\n\\nAll of the features you\'d expect from a `Login` component is included:\\n\\n- **Intuitive Interface**: Provides clear input fields for username and password, a toggle for password visibility, and validation feedback to ensure proper formatting before submission.\\n\\n- **Flexible and Extensible**: Easily extendable to include additional fields, such as Customer ID, and configurable to allow empty passwords if necessary.\\n\\n- **Localization Support**: Fully customizable titles, descriptions, labels, and messages through the LoginI18n class, allowing for precise localization and personalization.\\n\\nUsing the `Login` component can help shave off development time, and provides and attractive and powerful entry point into applications. For a more detailed overview on the `Login` components, take a look at the [docs entry here](../docs/components/login)."},{"id":"whats-new-24.00","metadata":{"permalink":"/blog/whats-new-24.00","source":"@site/blog/2024-04-08-webforj-v24.00/24.00.md","title":"Whats new in version 24.00?","description":"Get to know the features, fixes and functionality new in webforJ version 24.00.","date":"2024-04-08T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.00","permalink":"/blog/tags/v-24-00"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.14,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.00?","description":"Get to know the features, fixes and functionality new in webforJ version 24.00.","slug":"whats-new-24.00","date":"2024-04-08T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.00","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.00-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Whats new in version 24.01?","permalink":"/blog/whats-new-24.01"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.00.png)\\n\\nwebforJ version `24.00` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# `24.00`\\n\\n\\nSee the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.00) for a more comprehensive list of changes.\\n\\n## Table component\\n\\nThis release introduces a new [`Table` component](https://documentation.webforj.com/docs/components/table), allowing developers access to a lightweight, fast and optimized way to display their data. \\n\\n\\n\\nThis table supports tons of modern features, some of which include:\\n\\n- [Filtering](../docs/components/table/filtering)\\n- [Editing](../docs/components/table/refreshing)\\n- [Sorting](../docs/components/table/sorting)\\n- [Lodash rendering](../docs/components/table/rendering)\\n\\nUsing the `Table` in your app is simple, and follows a few easy steps outlined in [this user guide article](https://documentation.webforj.com/docs/components/table#creating-a-table). \\n\\n## Navigator component\\n\\n\\n\\nIn addition to the `Table` (and often in conjunction with), the new [`Navigator`](../docs/components/navigator) component is available to use in webforJ applications. Perfect for cases in which an app utilizes pagination, the customizable `Navigator` is the perfect pick to allow users to interact with implemented pagination.\\n\\nIt integrates nicely with the `Repository` class, an object of which can be passed in the constructor to take care of binding as soon as the Navigator object is constructed.\\n\\n```java\\nRepository repository = Service.getItemRecords();\\nNavigator nav = new Navigator(repository);\\n```\\n\\nThe `Navigator` can be customized with various settings that configure the text, tooltips, buttons, layouts, and other aspects of the component\'s appearance. To see a list of these settings, as well as their options, [review the docs](https://documentation.webforj.com/docs/components/navigator#customizing-buttons-text-and-tooltips) for more details. \\n\\n## Splitter component\\n\\n\\n\\nRounding out the newly introduced components is the `Splitter`, a tool that allows users to compartmentalize and dynamically resize your app. Whether dividing an entire page, or only a part of the app, the `Splitter` is a great tool with many uses within all types of modern apps.\\n\\nAmong the features included with this component is the ability to automatically save the layout configured by the user when an app is closed, so the splitter maintains its layout when the app is relaunched. Give it a try yourself over at [the docs article](https://documentation.webforj.com/docs/components/splitter#auto-save) which outlines this and many other features.\\n\\n## Package renaming\\n\\nVersion `24.00`, integrates the product\'s new official brand, webforJ, into the codebase. The previous alias, DWCJ, has been replaced within the framework\'s package structure. As a result, you need to update your import statements from org.dwcj to com.webforj when using webforJ. New code written shouldn\'t be affected by the change.\\n\\n```java\\n//For example:\\nimport com.webforj.App;\\nimport com.webforj.component.button.event.ButtonClickEvent;\\nimport com.webforj.component.field.TextField;\\nimport com.webforj.component.field.TextField.Type;\\n```"}]}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkdwcj_documentation=self.webpackChunkdwcj_documentation||[]).push([[8130],{77735:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"whats-new-v24.20","metadata":{"permalink":"/blog/whats-new-v24.20","source":"@site/blog/2024-11-25-webforj-v24.20/24.20.md","title":"What\'s new in version 24.20?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.20.","date":"2024-11-25T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.20","permalink":"/blog/tags/v-24-20"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":3.415,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.20?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.20.","slug":"whats-new-v24.20","date":"2024-11-25T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.20","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.20.png","hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"What\'s new in version 24.12?","permalink":"/blog/whats-new-v24.12"}},"content":"![cover image](../../static/release_blog/_images/24.20.png)\\n\\nwebforJ version `24.20` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.20\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.20) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## New features and enhancements \ud83c\udf89\\n\\nWe\u2019re excited to introduce version `24.20` which brings a game-changing update to webforJ - the shift to **WAR deployment**.\\n\\n\x3c!-- vale off --\x3e\\n### WAR Deployment in webforJ\\n\x3c!-- vale on --\x3e\\n\\nIn `24.20`, webforJ fully embraces the WAR (Web Application Archive) pattern for packaging and deploying apps. WAR files are a tried-and-true standard in Java development, bundling everything your app needs - code, resources, and dependencies - into a single, deployable archive.\\n\\n\\n### Updating your project for WAR deployment\\n\\nSwitching your project to use WAR deployment in webforJ is straightforward. To do so, ensure the following components are in place:\\n\\n1. **Include the Maven Jetty Plugin**:\\n\\nAdd the Maven Jetty plugin to your pom.xml to handle the deployment process. The Jetty plugin allows you to package and deploy your app as a WAR file effortlessly.\\n\\n```xml\\n\\n org.eclipse.jetty.ee8\\n jetty-ee8-maven-plugin\\n 12.0.14\\n \\n \\n /\\n \\n \\n \\n```\\n\\n:::info Replacing the webforJ install plugin\\nIn projects using the webforJ install plugin, remove this plugin from your POM to ensure that it isn\'t triggered when running `mvn install`.\\n:::\\n\\n2. **Add the required configuration and resources:**\\n\\nInclude the following essential files in your project to ensure it runs as a WAR:\\n\\n- `webapp/WEB-INF/web.xml`:\\nDefines the app\'s deployment descriptor, specifying how the app should be deployed and managed by the server.\\n\\n- `resources/webforj.conf`:\\nCentralized configuration file for customizing your app\'s behavior.\\n\\n- `resources/certificate.bls`:\\nA license certificate file required to run your app. You\u2019ll receive this file when registering for a license.\\n\\n- `resources/blsclient.conf`:\\nConfiguration file for license properties.\\n\\nOnce added, an example project structure may look like this:\\n\\n```bash \\nsrc/main/\\n java/ # Java source files\\n resources/\\n webforj.conf # App configuration\\n blsclient.conf # License configuration\\n certificate.bls # License certificate\\n webapp/\\n WEB-INF/\\n web.xml # Deployment descriptor\\n```\\n### Configuration with `webforj.conf`\\n\\nThe `webforj.conf` file centralizes app configuration in HOCON format. With this file, you can tweak key settings for your app, such as the app\'s entry point, and whether or not to run in `DEBUG` mode.\\n\\nHere are some of the most useful settings you can define in `webforj.conf`:\\n| **Property** | **Description** | **Default** |\\n|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|\\n| `webforj.entry` | The fully qualified name of the class that extends `App`, acting as the entry point for your app. | *Not Set* |\\n| `webforj.debug` | Enables debug mode, showing detailed errors in the browser and printing debug logs to the console. | `false` |\\n| `webforj.reloadOnServerError` | Automatically reloads the app if the server temporarily becomes unavailable during development. | `on` |\\n| `webforj.clientHeartbeatRate` | Sets the interval for client pings to the server to query availability. Use shorter intervals in development and longer ones in production. | `50s` |\\n\\n### Configuring the `web.xml` file\\n\\nThe `web.xml` file is a crucial part of Java web app deployment, serving as the deployment descriptor for your app. In webforJ, it defines key settings like the servlet configuration and URL mappings. This file must be located in the `WEB-INF` directory of your project\u2019s deployment structure.\\n\\n| **Setting** | **Explanation** | **Default Value** |\\n|----------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------------------|\\n| `` | Sets the display name for the web app, typically derived from the project name. This name appears in app servers\' management consoles. | `${project.name}` |\\n| `` and `` | Defines the `WebforjServlet`, the core servlet for handling webforJ requests. This servlet is mapped to all URLs (`/*`), making it the main entry point for web requests. | `WebforjServlet` |\\n| `` | Specifies that `WebforjServlet` should be loaded when the app starts. Setting this to `1` ensures the servlet loads immediately, improving initial request handling. | `1` |\\n\\nTo learn more about the various configuration options available, as well as other options for configuring your webforJ project, browse [this article](../../docs/configuration/overview) detailing configuration in webforJ."},{"id":"whats-new-v24.12","metadata":{"permalink":"/blog/whats-new-v24.12","source":"@site/blog/2024-10-11-webforj-v24.12/24.12.md","title":"What\'s new in version 24.12?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.12.","date":"2024-10-14T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.12","permalink":"/blog/tags/v-24-12"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.255,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.12?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.12.","slug":"whats-new-v24.12","date":"2024-10-14T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.12","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.12.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.20?","permalink":"/blog/whats-new-v24.20"},"nextItem":{"title":"What\'s new in version 24.11?","permalink":"/blog/whats-new-v24.11"}},"content":"![cover image](../../static/release_blog/_images/24.12.png)\\n\\nwebforJ version `24.12` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.12\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.12) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## Breaking changes \ud83d\udee0\\n\\nWith the introduction of the routing overhaul outlined below, it\'s now necessary to restrict webforJ projects to contain **only one class extending `App`**. Read more below, and in the docs about the routing solution introduced in this release.\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### Routing support\\n\\nVersion `24.12` introduces Routing in webforJ, a critical feature that significantly enhances navigation within your web apps. Routing allows you to define different paths/routes within your app, enabling users to navigate between different views or pages, access crucial information, or manipulate the page without refreshing the entire app.\\n\\nTo start using routing in your project, include the `Routify` annotation in the class extending the `App` class:\\n\\n```java\\n@Routify(packages = \\"com.webforj.samples.views\\", debug = true)\\n@AppTitle(\\"webforJ Samples\\")\\npublic class Application extends App {\\n @Override\\n public void run() throws WebforjException {\\n console().log(\\"Test\\");\\n }\\n}\\n```\\n\\nTo register a `Route` in webforJ, developers can manually specify the route type by setting `Route.Type` in the `@Route` annotation, or omit the type if classes end in `View` or `Layout`. \\n\\n```java\\n@Route\\n@FrameTitle(\\"Example View\\")\\npublic class ExampleClassView extends Composite
{\\n //...\\n}\\n```\\nRouting in webforJ has many uses, and a [more comprehensive overview](../../docs/routing/overview) of these use cases, as well as the various features and capabilities available to developers. \\n\\n### `AppDrawerToggle` component\\n\\nThe `AppDrawerToggle` component has been added in `24.12`. This lightweight component has been included to allow developers to easily include a way to toggle the `AppLayout` component\'s drawer section if it\'s desired within an app.\\n\\nIncluding this within your `AppLayout` is simple - simply add the component to the layout, commonly done in the toolbar at the top, and the component will automatically take care of the toggling capability.\\n\\n```java\\nAppLayout layout = new AppLayout();\\nlayout.addToHeader(new AppDrawerToggle());\\n```\\n\\n### `Toolbar` component\\n\\nAnother addition with this release is the `Toolbar` component. `Toolbars` are a fundamental part of modern web applications, offering users quick access to core actions and navigation elements. Whether it\'s for managing page controls or housing key functionalities like search and notifications, the `Toolbar` is now available for webforJ projects.\\n\\n:::tip Using the `Toolbar`\\nThe `Toolbar` component is ideal for use within the [`AppLayout`](../../docs/components/app-layout) component.\\n:::\\n\\n```java\\nToolbar toolbar = new Toolbar();\\ntoolbar.addToStart(new AppDrawerToggle());\\ntoolbar.addToTitle(new H1(\\"DWC App\\"));\\ntoolbar.setTheme(Theme.PRIMARY);\\n\\nAppLayout layout = new AppLayout();\\nlayout.addToHeader(toolbar);\\n```"},{"id":"whats-new-v24.11","metadata":{"permalink":"/blog/whats-new-v24.11","source":"@site/blog/2024-09-05-webforj-v24.11/24.11.md","title":"What\'s new in version 24.11?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.11.","date":"2024-09-05T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.11","permalink":"/blog/tags/v-24-11"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":4.29,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.11?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.11.","slug":"whats-new-v24.11","date":"2024-09-05T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.11","release"],"image":"https://documentation.webforj.com/release_blog/_images/social-cover-24.11.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.12?","permalink":"/blog/whats-new-v24.12"},"nextItem":{"title":"What\'s new in version 24.10?","permalink":"/blog/whats-new-24.10"}},"content":"![cover image](../../static/release_blog/_images/24.11.png)\\n\\nwebforJ version 24.11 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.11\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.11) for a more comprehensive list of changes. Highlighted below are some of the most exciting changes:\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### Using prefix and suffix slots\\n\\nIn order to streamline the use of many webforJ components, additional API methods have been added which allow utilization of prefix and suffix slots in various components. \\n\\nThese slots can be utilized in many different ways to best suit an app\'s behavior, such as adding icons, labels, loading spinners, clear/reset functionality, avatar/profile pictures, and many other useful behaviors. \\n\\nThe following components have had API methods added to support this behavior:\\n\\n- [Button](../../docs/components/button)\\n- [ChoiceBox](../../docs/components/lists/choicebox)\\n- [ComboBox](../../docs/components/lists/combobox)\\n- [TabbedPane](../../docs/components/tabbedpane)\\n- [All Field Types](../../docs/components/fields)\\n\\nTo utilize these slots, getter and setter methods for prefix and suffix slots have been added. Below is an example for a [`Button`](../../docs/components/button):\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\nButton contact = new Button(\\"Contact us\\", ButtonTheme.PRIMARY);\\ncontact.setPrefixComponent(FeatherIcon.MAIL.create());\\ncontact.onClick(e -> {\\n showMessageDialog(\\"Message has been sent!\\", \\"Sent Message\\");\\n});\\n\\nlayout.add(contact);\\n\\nFrame mainFrame = new Frame();\\nmainFrame.add(layout);\\n```\\n\\n\\n### Icon overhaul\\n\\nWith the addition of more fine-grained control over the slots of various components, the API of one of the most common use cases for slots has also been overhauled; icons now have a more streamlined and intuitive API for use within webforJ apps. \\n\\nUse the new `Icon` class to create an icon that can be added to a layout, or to a slot in a supporting component:\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n \\nFrame mainFrame = new Frame();\\n\\nIcon image = FeatherIcon.IMAGE.create();\\nIcon video = FeatherIcon.VIDEO.create();\\nIcon music = FeatherIcon.MUSIC.create();\\n\\nlayout.add(image, video, music);\\nmainFrame.add(layout);\\n```\\n\\n#### Icons across multiple collections\\n\\nThe new update allows developers to mix and match icons from different collections. With support for the icon libraries included by default with webforJ - [**Feather**](https://feathericons.com/), [**Tabler**](https://tabler.io/icons), and [**FontAwesome**](https://fontawesome.com/icons) - you can now select the perfect icon for your needs without being constrained to a single collection. This is especially useful for applications that require a variety of visual styles or specific icon designs.\\n\\nTo do this, use the factory methods provided to select the icon pool:\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\nFrame mainFrame = new Frame();\\n\\nIcon image = FeatherIcon.IMAGE.create();\\nIcon video = TablerIcon.create(\\"video\\");\\nIcon music = FontAwesomeIcon.create(\\"music\\", FontAwesomeIcon.Variate.SOLID);\\n\\nlayout.add(image, video, music);\\nmainFrame.add(layout);\\n```\\n\\n#### Adding a custom icon pool\\n\\n Icon Pools, which allows developers to organize and manage icons more effectively. Icons can be stored in a centralized directory or a context path and accessed through a pool, simplifying the icon management process. You can create icon pools from directories using a full directory path, or a context path as shown below:\\n\\n ```java\\nIconPoolBuilder.fromDirectory(\\"app-pool\\", \\"context://icons\\");\\n\\n FlexLayout layout = FlexLayout.create().horizontal().build()\\n .setMargin(\\"var(--dwc-space-m)\\");\\n\\n Frame mainFrame = new Frame();\\n\\n Icon bell = new Icon(\\"bell\\", \\"app-pool\\");\\n Icon dribbble = new Icon(\\"dribbble\\", \\"app-pool\\");\\n\\n layout.add(bell, dribbble);\\n mainFrame.add(layout);\\n ```\\n\\nFor developers looking for more integration of their custom icon pools, custom icon factories can now be created. This allows for defining reusable icon sets within an app, which makes creating your app more consistent and helps reduce maintenance across different components and modules.\\n\\n```java\\npublic enum AppPoolIcon implements IconFactory {\\n BELL, DRIBBBLE;\\n\\n public Icon create() {\\n return new Icon(String.valueOf(this), this.getPool());\\n }\\n\\n @Override\\n public String getPool() {\\n return \\"app-pool\\";\\n }\\n\\n @Override\\n public String toString() {\\n return this.name().toLowerCase(Locale.ENGLISH).replace(\'_\', \'-\');\\n }\\n}\\n```\\n#### Icon button\\n\\nFinally, the `IconButton` class has been added, and is ideal for actions that are best represented with just an icon, such as notifications or alerts.\\n\\n```java\\nFlexLayout layout = FlexLayout.create().horizontal().build().setMargin(\\"var(--dwc-space-m)\\");\\n\\nIconButton bell = new IconButton(FeatherIcon.BELL.create());\\nbell.onClick(e -> showMessageDialog(\\"You have a new message!\\", \\"Ding Dong!\\"));\\n\\nlayout.add(bell);\\n\\nFrame mainFrame = new Frame();\\nmainFrame.add(layout);\\n```\\n\\n### Void asynchronous JavaScript execution\\n\\nWith `24.11`, it\'s now possible to asynchronously call a specified JavaScript function or execute provided JavaScript code without returning a result to the server. This can be done on a specific [`Element`](../../docs/building-ui/element), or within the entire app by utilizing the `Page` instance. \\n\\n```java\\nFrame mainFrame = new Frame();\\n/* Executes async JS at the page level, independent of a specific element */\\nPage.getCurrent().executeJsVoidAsync(\\"{console.log(\'Printing information to the console\')}\\");\\n\\n/* Adds a click listener to the button which can be invoked programmatically */\\nElement button = new Element(\\"button\\", \\"Display User\\");\\nbutton.addEventListener(\\"click\\", e -> {App.console().log(\\"Button Clicked\\");});\\n\\n/* Will programmatically click the button */\\nbutton.callJsFunctionVoidAsync(\\"click\\");\\nmainFrame.add(button);\\n```\\n\\n### Using the `Page` for HTML event registration\\n\\nIn addition to using the `Page` class to execute JavaScript, support has been added to allow HTML events to be registered directly through the `Page` instance, without needing to use a specific [`Element`](../../docs/building-ui/element) as a bridge. This is particularly useful when an event should execute page-wide, broadening the scope of capability.\\n\\n```java\\nPageEventOptions pageEventOptions = new PageEventOptions();\\npageEventOptions.addData(\\"clientX\\", \\"event.clientX\\");\\npageEventOptions.addData(\\"clientY\\", \\"event.clientY\\");\\nListenerRegistration r1 = Page.getCurrent().addEventListener(\\"click\\", e -> {\\n int x = (int) e.getData().get(\\"clientX\\");\\n int y = (int) e.getData().get(\\"clientY\\");\\n\\n console().log(\\"x: \\" + x + \\", y: \\" + y);\\n}, pageEventOptions);\\n```"},{"id":"whats-new-24.10","metadata":{"permalink":"/blog/whats-new-24.10","source":"@site/blog/2024-07-23-webforj-v24.10/24.10.md","title":"What\'s new in version 24.10?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.10.","date":"2024-07-23T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.10","permalink":"/blog/tags/v-24-10"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":5.185,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"What\'s new in version 24.10?","description":"Get to know the features, fixes, and functionality new in webforJ version 24.10.","slug":"whats-new-24.10","date":"2024-07-23T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.10","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.10-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.11?","permalink":"/blog/whats-new-v24.11"},"nextItem":{"title":"Whats new in version 24.02?","permalink":"/blog/whats-new-24.02"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\nimport terminalVideo from \'../../static/release_blog/terminal.mp4\';\\n\\n![cover image](../../static/release_blog/_images/24.10.png)\\n\\nwebforJ version 24.10 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.10\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.10) for a more comprehensive list of changes.\\n\\n## New features and enhancements \ud83c\udf89\\n\\nThe following new components, features, and enhancements to various existing behavior have been introduced in this release:\\n\\n### `TextArea` and masked input component\\n\\n`24.10` brings the addition of several new components to the webforJ library. This release introduces various masked fields and decorators that utilize masked input, allowing for specific input patterns. The following components have been made available for development:\\n\\n- #### `MaskedDateField` & `MaskedDateFieldSpinner`\\n\\n > These components allow users to input dates with a predefined format, with the spinner variant providing an intuitive way for users to increment or decrement date values. \\n\\n- #### `MaskedNumberField` & `MaskedNumberFieldSpinner`\\n\\n > Designed for numerical input, these fields ensure that users can only enter valid numbers. The spinner variant adds convenience by allowing users to adjust the value using increment/decrement controls.\\n\\n- #### `MaskedTimeField` & `MaskedTimeFieldSpinner`\\n\\n >These components handle time inputs, enforcing a standard time format. The spinner variant provides controls for easily adjusting time values.\\n\\n- #### `MaskedTextField` & `MaskedTextFieldSpinner`\\n\\n- #### `TextArea`\\n\\n > A versatile, multi-line text input component ideal for larger text entries, such as comments or descriptions.\\n\\n\\n### `BusyIndicator`, `Loading` and `Spinner` components\\n\\nThe `Spinner` and `BusyIndicator` components have both been added in this release to the core webforJ components. The `Spinner` provides a simple, elegant way to display a loading animation, and can be used independently or as part of the `BusyIndicator` or `Loading` components.\\n\\nBuilding on the `Spinner`, the `BusyIndicator` is an app-level loading overlay that indicates when the app is busy or processing data. It blocks user interaction until the process is complete. This component displays both a `Spinner` and a textual description while the process is occurring. \\n\\n\\n\\nThe `Loading` component uses the same client component, but allows the addition of children and can be attached to any parent component, making it scoped to its parent.\\n\\n### Terminal emulator\\n\\nThe webforJ `Terminal` component represents an exciting opportunity to emulate a terminal in a webforJ app. Based on `xterm.js`, this tool allows for interactions with a terminal while running within a webforJ app, blending command line features with modern web app capabilities. \\n\\n\\n\\n### Column layout\\n\\nThe `ColumnsLayout` component has come to webforJ in `24.10`, and is designed to offer a flexible and responsive layout solution in addition to the [FlexLayout](../../docs/components/flex-layout) component. The `ColumnsLayout` easily facilitates two-dimensional layouts by providing columns rather than just rows. It dynamically adjusts the number of columns based on the width of the layout and utilizes breakpoints to determine how many columns should be displayed at different viewport widths to help with responsiveness.\\n\\n\\n\\nIn addition to dynamic column adjustments, `ColumnsLayout` supports customizable alignment and spacing options. The `ColumnsLayout` component is designed to be intuitive and easy to use. It includes built-in methods for setting column spans and positions, making it simple to create complex layouts with minimal effort.\\n\\nNext time you build a form, give this new component a try in your app!\\n\\n### Slider overhaul\\n\\nThe `Slider` component has received on overhaul in this release. The appearance and use case for the component remains the same, ensuring that your applications have the same look and feel as they did prior to the updated API overhaul.\\n\\nHowever, with this rework, a few of the methods have changed to better reflect modern standards. If you are using this component in your app, review the following methods to ensure you\'re using the updated API. An example of the various methods can be seen in the code demo below:\\n\\n\\n\\n### Toast component\\n\\nAnother powerful component introduced in `24.10` is the `Toast` component, which offers a subtle notification system commonly used in modern applications to inform users about the completion of an operation, system messages, or other important updates.\\n\\nDevelopers can set the display duration, choose from various themes, and configure the position of the toast on the screen. The component supports multiple placements, and also allows for setting custom text and HTML content, giving developers the ability to style the messages as needed.\\n\\n\\n\\n### Debugging tooling\\n\\nLogging to the console has gotten much more powerful in `24.10`. A dedicated utility class can now be accessed statically through the `App` class to log styled messages to the browser console. \\n\\n```java\\n// Types\\nconsole().log(\\"Log message\\");\\nconsole().info(\\"Info message\\");\\nconsole().warn(\\"Warn message\\");\\nconsole().error(\\"Error message\\");\\nconsole().debug(\\"Debug message\\");\\n```\\n\\nA variety of builder-patterned methods are available for more fine-grained control over the appearance of messages in the console. These include font weight, style, size, text color, background color, and other configurations.\\n\\n```java\\n// A variety of options for custom logging display\\nconsole().weight().bolder().size().from(\\"30px\\").color().red().style().italic().transform()\\n .uppercase().background().cyan().warn(\\"Mixing Styles\\");\\n\\n```\\n\\n## Breaking changes \ud83d\udee0\\n\\nWhen updating an existing project using an older version of webforJ, keep an eye out for the following breaking changes:\\n\\n### Console logging\\n\\nUsing the browser\'s console to get valuable program information printed is an integral part of the development process. Previously, the `App.consoleLog()` and `App.consoleError()` methods enabled this behavior. In `24.10`, these methods have been marked for deprecation. Going forward, use `BrowserConsole`, which comes with a slough of new features to enhance logging capabilities. The new equivalent method to print to the console is [`App.console().log()`](#debugging-tooling). \\n\\n### HTML container\\nThe `HtmlContainer` component is marked for deprecation in `24.10`. Going forward, use `Element` instead for custom content or use the `Iframe` component for embedding pages.\\n\\n### Rendering HTML in components\\n\\nSetting HTML text that\'s not specifically wrapped with `` tags using the `setText` method is no longer possible. To set HTML, make sure to wrap your code with these tags to properly render the desired code.\\n\\n```java\\n// Valid\\nButton home = new Button(\\"\\"\\"\\n \\n \\n \\n\\"\\"\\");\\n```\\n\\n```java\\n// Not Valid\\nButton home = new Button(\\"\\"\\"\\n \\n\\"\\"\\");\\n```"},{"id":"whats-new-24.02","metadata":{"permalink":"/blog/whats-new-24.02","source":"@site/blog/2024-06-03-webforj-v24.02/24.02.md","title":"Whats new in version 24.02?","description":"Get to know the features, fixes and functionality new in webforJ version 24.02.","date":"2024-06-03T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.02","permalink":"/blog/tags/v-24-02"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.895,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.02?","description":"Get to know the features, fixes and functionality new in webforJ version 24.02.","slug":"whats-new-24.02","date":"2024-06-03T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.02","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.02-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"What\'s new in version 24.10?","permalink":"/blog/whats-new-24.10"},"nextItem":{"title":"Whats new in version 24.01?","permalink":"/blog/whats-new-24.01"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.02.png)\\n\\nwebforj version 24.02 is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# 24.02\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.01) for a more comprehensive list of changes.\\n\\n## Option dialogs\\n\\n\\n\\nWith 24.02, webforJ introduces a robust option dialog feature that allows applications to interact with users and gather input effectively. These dialogs are modal, meaning they halt app execution until the user provides input, ensuring critical messages are addressed before proceeding. These function similarly to `JOptionPane` in Swing, addressing the need for blocking dialogs in web applications.\\n\\nThere are multiple types of these dialogs:\\n\\n- **`Message`**: Display informative messages to users.\\n- **`Confirm`**: Request user confirmation for specific actions.\\n- **`Input`**: Gather textual input from users.\\n- **`File Chooser`**: Allow users to select files from their system.\\n- **`File Upload`**: Enable users to upload files directly.\\n\\nThe various dialog options are provided to help clarify and specify the type of interaction users should take throughout navigation of an app. \\n\\n## Progress bar overhaul\\n\\nThe `ProgressBar` in 24.02 has gotten a powerful, comprehensive overhaul. This component provides a visual representation of task progress, making it easy for users to monitor the completion status of ongoing tasks. The progress bar fills up as the task progresses, displaying the percentage of completion both visually and textually.\\n\\n\\n\\nThe following key features are included in the `ProgressBar` out of the box:\\n\\n- **Configurable Values**: Supports setting and getting current, minimum, and maximum values to accurately represent task progress.\\n\\n- **Indeterminate Mode**: Allows for an indeterminate state to indicate ongoing tasks without a definite end.\\n\\n- **Text Visibility**: Options to display the percentage of completion or the raw value as text.\\n\\n- **Orientation Support**: The `ProgressBar` can be oriented either horizontally or vertically, providing flexibility in how it is displayed in your app.\\n\\n- **Styling Options**: Includes themes, animation, and striped designs for enhanced visual feedback.\\n\\nThe `ProgressBar` component is highly versatile and can be used to visualize the completion status of various tasks. It allows configuration of minimum and maximum values, making it adaptable to different use cases.\\n\\n## Interval\\n\\n`24.02` introduces `Interval` capability in webforJ, providing a mechanism similar to the Swing `Timer`, which offers a way to execute code at fixed time intervals. This feature is essential for tasks that need periodic execution, such as updating UI elements, performing background operations, or polling for data.\\n\\nIn the above `ProgressBar` the start, pause and restart features were all implemented via webforJ\'s `Interval` class. In addition to these functions, it also allows developers to specify a timeout value in seconds, supporting fractional seconds for precise timing. For tasks with unknown completion times, the `Interval` can be set to an indeterminate state, allowing it to keep running until explicitly stopped.\\n\\nTo create, start, stop, and then restart an interval, the following code can be executed:\\n\\n```java\\n// Create a new Interval with a delay of 2.5 seconds\\nInterval interval = new Interval(2.5f, event -> {\\n System.out.println(\\"Interval elapsed!\\");\\n});\\n\\n// Start the interval\\ninterval.start();\\n\\n// Stop the interval\\ninterval.stop();\\n\\n// Restart the interval\\ninterval.restart();\\n```\\n\\nThe `Interval` helps manage periodic tasks - its ability to handle fixed time delays, support multiple event listeners, and provide robust performance makes it an essential feature for developers looking to implement timed events efficiently."},{"id":"whats-new-24.01","metadata":{"permalink":"/blog/whats-new-24.01","source":"@site/blog/2024-04-26-webforj-v24.01/24.01.md","title":"Whats new in version 24.01?","description":"Get to know the features, fixes and functionality new in webforJ version 24.01.","date":"2024-04-26T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.01","permalink":"/blog/tags/v-24-01"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.175,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.01?","description":"Get to know the features, fixes and functionality new in webforJ version 24.01.","slug":"whats-new-24.01","date":"2024-04-26T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.01","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.01-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Whats new in version 24.02?","permalink":"/blog/whats-new-24.02"},"nextItem":{"title":"Whats new in version 24.00?","permalink":"/blog/whats-new-24.00"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.01.png)\\n\\nwebforj version `24.01` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# `24.01`\\n\\nAs always, see the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.01) for a more comprehensive list of changes.\\n\\n## New data binding feature in webforJ\\n\\nwebforJ `24.01` introduces a robust data binding capability, smoothly connecting UI components with backend data models in Java applications. This integration ensures that any changes made in the UI are immediately reflected in the data model and vice versa. This feature greatly simplifies data management and reduces time to completion. Below are some of the key features:\\n\\n- **Bidirectional Binding**: Automatically synchronizes changes between the data model and the UI, ensuring that updates in one are mirrored in the other.\\n\\n- **Comprehensive Validation**: Provides robust validation options that can be customized, allowing developers to implement custom rules or leverage existing validation frameworks like Jakarta Validation to maintain data accuracy.\\n\\n- **Extensibility**: Easily extendable to support a wide range of UI components, data transformations, and complex validation needs.\\n\\n- **Annotation-Based Configuration**: Reduces the need for repetitive code by using annotations to declare bindings, making the process more straightforward and easier to maintain.\\n\\nFor most cases, webforJ\'s data binding between UI component and data model can be done automatically. For more complex cases, tools have been provided to make the binding seamless and straightforward.\\n\\nFunctionality such as transformation and validation further enhance the binding capabilities to further simplify UI interaction with the data layer. For more information on this feature, see the [documentation entry](../../docs/data-binding/overview).\\n\\n\\n## Login component\\n\\n\\n\\nThe latest `Login` component in webforJ offers an intuitive and efficient interface for user authentication, enabling users to log in using their username and password. This component is highly customizable to enhance user experiences across various devices and locales.\\n\\nAll of the features you\'d expect from a `Login` component is included:\\n\\n- **Intuitive Interface**: Provides clear input fields for username and password, a toggle for password visibility, and validation feedback to ensure proper formatting before submission.\\n\\n- **Flexible and Extensible**: Easily extendable to include additional fields, such as Customer ID, and configurable to allow empty passwords if necessary.\\n\\n- **Localization Support**: Fully customizable titles, descriptions, labels, and messages through the LoginI18n class, allowing for precise localization and personalization.\\n\\nUsing the `Login` component can help shave off development time, and provides and attractive and powerful entry point into applications. For a more detailed overview on the `Login` components, take a look at the [docs entry here](../docs/components/login)."},{"id":"whats-new-24.00","metadata":{"permalink":"/blog/whats-new-24.00","source":"@site/blog/2024-04-08-webforj-v24.00/24.00.md","title":"Whats new in version 24.00?","description":"Get to know the features, fixes and functionality new in webforJ version 24.00.","date":"2024-04-08T00:00:00.000Z","tags":[{"inline":true,"label":"webforJ","permalink":"/blog/tags/webfor-j"},{"inline":true,"label":"v24.00","permalink":"/blog/tags/v-24-00"},{"inline":true,"label":"release","permalink":"/blog/tags/release"}],"readingTime":2.14,"hasTruncateMarker":true,"authors":[{"name":"webforJ Team","url":"https://github.com/webforj","title":"webforJ Development Team","imageURL":"/img/webforj_icon.svg","key":"webforJ","page":null}],"frontMatter":{"title":"Whats new in version 24.00?","description":"Get to know the features, fixes and functionality new in webforJ version 24.00.","slug":"whats-new-24.00","date":"2024-04-08T00:00:00.000Z","authors":"webforJ","tags":["webforJ","v24.00","release"],"image":"https://documentation.webforj.com/release_blog/_images/24.00-social.png","hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Whats new in version 24.01?","permalink":"/blog/whats-new-24.01"}},"content":"import ComponentDemo from \'@site/src/components/DocsTools/ComponentDemo\';\\n\\n![cover image](../../static/release_blog/_images/24.00.png)\\n\\nwebforJ version `24.00` is live and available for development. Learn more about what main features and fixes are included in this release.\\n\\n\x3c!-- ![cover image](../static/img/webforJ-release-banner.png) --\x3e\\n\\n\x3c!-- truncate --\x3e\\n\\n# `24.00`\\n\\n\\nSee the [GitHub release overview](https://github.com/webforj/webforj/releases/tag/24.00) for a more comprehensive list of changes.\\n\\n## Table component\\n\\nThis release introduces a new [`Table` component](https://documentation.webforj.com/docs/components/table), allowing developers access to a lightweight, fast and optimized way to display their data. \\n\\n\\n\\nThis table supports tons of modern features, some of which include:\\n\\n- [Filtering](../docs/components/table/filtering)\\n- [Editing](../docs/components/table/refreshing)\\n- [Sorting](../docs/components/table/sorting)\\n- [Lodash rendering](../docs/components/table/rendering)\\n\\nUsing the `Table` in your app is simple, and follows a few easy steps outlined in [this user guide article](https://documentation.webforj.com/docs/components/table#creating-a-table). \\n\\n## Navigator component\\n\\n\\n\\nIn addition to the `Table` (and often in conjunction with), the new [`Navigator`](../docs/components/navigator) component is available to use in webforJ applications. Perfect for cases in which an app utilizes pagination, the customizable `Navigator` is the perfect pick to allow users to interact with implemented pagination.\\n\\nIt integrates nicely with the `Repository` class, an object of which can be passed in the constructor to take care of binding as soon as the Navigator object is constructed.\\n\\n```java\\nRepository repository = Service.getItemRecords();\\nNavigator nav = new Navigator(repository);\\n```\\n\\nThe `Navigator` can be customized with various settings that configure the text, tooltips, buttons, layouts, and other aspects of the component\'s appearance. To see a list of these settings, as well as their options, [review the docs](https://documentation.webforj.com/docs/components/navigator#customizing-buttons-text-and-tooltips) for more details. \\n\\n## Splitter component\\n\\n\\n\\nRounding out the newly introduced components is the `Splitter`, a tool that allows users to compartmentalize and dynamically resize your app. Whether dividing an entire page, or only a part of the app, the `Splitter` is a great tool with many uses within all types of modern apps.\\n\\nAmong the features included with this component is the ability to automatically save the layout configured by the user when an app is closed, so the splitter maintains its layout when the app is relaunched. Give it a try yourself over at [the docs article](https://documentation.webforj.com/docs/components/splitter#auto-save) which outlines this and many other features.\\n\\n## Package renaming\\n\\nVersion `24.00`, integrates the product\'s new official brand, webforJ, into the codebase. The previous alias, DWCJ, has been replaced within the framework\'s package structure. As a result, you need to update your import statements from org.dwcj to com.webforj when using webforJ. New code written shouldn\'t be affected by the change.\\n\\n```java\\n//For example:\\nimport com.webforj.App;\\nimport com.webforj.component.button.event.ButtonClickEvent;\\nimport com.webforj.component.field.TextField;\\nimport com.webforj.component.field.TextField.Type;\\n```"}]}}')}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.9260fb08.js b/assets/js/runtime~main.8d46722f.js similarity index 99% rename from assets/js/runtime~main.9260fb08.js rename to assets/js/runtime~main.8d46722f.js index ca47f1d4c..f3c0a8d88 100644 --- a/assets/js/runtime~main.9260fb08.js +++ b/assets/js/runtime~main.8d46722f.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return b[e].call(c.exports,c,c.exports,r),c.exports}r.m=b,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({61:"dff4ff20",180:"c2934bd6",214:"925cbb6f",234:"ddcf2e52",306:"b3a8e8c5",329:"d9a7da59",339:"f9ce7370",366:"6c9ac209",372:"b32d54b9",582:"fab915fa",643:"db86db59",706:"246bb5e3",707:"93b4852a",710:"80ca66d9",841:"a97824ad",849:"0058b4c6",872:"cc4e31b6",898:"a9d2f8cf",957:"c141421f",1095:"9a4aa732",1235:"a7456010",1238:"53bc3d63",1294:"ee11ef75",1591:"ae9dd622",1617:"70c7c9e2",1680:"c9813911",1732:"ff6d8346",1785:"994640aa",1792:"d4a8c166",1903:"acecf23e",2059:"a7eec861",2060:"0d8bf7c5",2112:"ca6af521",2138:"1a4e3797",2143:"c58736f6",2188:"ccc292ba",2216:"c0d234de",2234:"1c9c0ba0",2239:"e49b36ef",2278:"c345521d",2311:"4479ab16",2381:"43c20042",2393:"0198994b",2485:"a608fec9",2531:"baa1f38d",2543:"b36e5588",2544:"f048ed9e",2634:"c4f5d8e4",2643:"03db97fc",2686:"7b4dc894",2702:"50801aa3",2711:"9e4087bc",2756:"65016876",2784:"12141a65",2870:"9eb89d33",3152:"a600e80a",3205:"fb9643b6",3293:"c6c0701f",3304:"bbfc7ea9",3399:"457e6a8f",3433:"9f8cd0e7",3467:"deef26b6",3469:"47e3da80",3474:"145075ef",3487:"b4366e06",3500:"3608c0af",3523:"adc14533",3657:"5d580183",3722:"30bd6853",3744:"cb1b5929",3913:"70bd0395",3923:"532a8e42",3942:"a59486c3",3959:"791a8ecf",3972:"7e5d93ec",3994:"8448e262",4015:"0aa1cec2",4091:"e5a16701",4170:"d03050a8",4212:"621db11d",4389:"4d4f9528",4441:"250499b1",4465:"7f139518",4480:"979b552b",4574:"83582f1b",4606:"31470bb2",4614:"017e1775",4675:"47f3d74a",4715:"87878b99",4813:"6875c492",4848:"134972eb",4880:"8aa8434b",4901:"b08e7a09",4918:"c9cac9d9",4931:"587d7f27",4942:"cfdcbc1c",5051:"700cec1a",5076:"7b2f26a3",5120:"3f624000",5168:"07849ef8",5219:"889d1d5c",5288:"fb1ca84d",5307:"7e2cd1ec",5328:"21ddc4a6",5423:"261b313d",5429:"ef0dd26c",5505:"a29acf59",5552:"87ab4e1c",5560:"fb368ab3",5641:"45758ec3",5742:"aba21aa0",5758:"098618c0",5829:"9901dcbd",5841:"d04339d1",5863:"0b1ac180",5871:"af08f1ee",5923:"b920a688",5947:"9de26170",6008:"0fb1df13",6033:"97ff83a2",6076:"9cd23e74",6080:"f10a4580",6128:"1ff3458b",6156:"3a3c1811",6167:"97bbbf00",6168:"bc3d2e31",6180:"4ffc7f07",6477:"dc652336",6555:"b201f757",6741:"33b18326",6769:"7616f23a",6885:"79697695",6933:"c44f1f93",6969:"14eb3368",6995:"57b3e824",7051:"e747ec83",7054:"5b7d89bf",7086:"89486910",7098:"a7bd4aaa",7155:"8d37c133",7194:"6f967c3d",7283:"2207bd01",7327:"feb48218",7399:"6d91d1eb",7472:"814f3328",7539:"12501979",7546:"726aba28",7587:"bd03097a",7591:"a709823f",7643:"a6aa9e1f",7737:"e908ab8e",7747:"1e29cefc",7759:"a227f5f9",7817:"ab2c0b4d",7848:"5f585644",7877:"44a2ffa8",7909:"a6f597c1",7911:"077efd0a",7947:"d503ef47",7980:"22b41514",7999:"a7ca0b77",8010:"29f5a473",8085:"e97f9a74",8121:"3a2db09e",8130:"f81c1134",8146:"c15d9823",8169:"c1ec0396",8191:"2ad235da",8209:"01a85c17",8223:"27fabcba",8332:"9e338a3c",8401:"17896441",8412:"20ad71ae",8475:"385302be",8604:"f3918844",8710:"0c9a7c3c",8732:"bd64da24",8741:"e9a7cc51",8812:"3091f280",8820:"636146f1",8822:"1b5c5c80",8930:"d5c2d681",8937:"00e0cf24",8947:"ef8b811a",8948:"2d1577e2",9048:"a94703ab",9060:"18b1068a",9079:"284ecaa8",9144:"52df7ca1",9155:"d2c2dbdc",9163:"1e789ed5",9234:"3bc16e1f",9281:"4f0b3e68",9311:"99266d2f",9332:"c43ec111",9361:"3d2d5d68",9414:"3dd38f09",9417:"5143509c",9419:"3590aca4",9423:"2a6db818",9463:"0f425520",9622:"c1f98019",9625:"c6e2414a",9647:"5e95c892",9656:"bed29139",9666:"97b693b7",9674:"b87a0e7c",9706:"f4a844dd",9773:"a266566d",9820:"bba6862f",9825:"d76d507e",9858:"36994c47",9883:"90027d71",9885:"ffba0f21",9895:"ba4df261",9945:"f5fa8e72",9985:"a50bea04",9989:"5ddd58e1"}[e]||e)+"."+{8:"5a3da794",61:"d6c0927d",180:"67990a34",214:"5e40f066",234:"ee6632a6",306:"c864d8da",329:"15f0b448",339:"a4d51311",366:"a85f4149",372:"9b8ccbca",416:"8051c311",582:"9241ba12",643:"db444bf6",706:"3cb1240b",707:"d0ddf055",710:"b4d20fc0",833:"01a014af",841:"a7c3a664",849:"84abb873",872:"b7b16780",898:"4c559889",957:"627de53a",1095:"fc029690",1235:"d6385e65",1238:"9aa2e196",1294:"8bd210b0",1531:"11a01dac",1591:"253295c7",1617:"75d6acf1",1633:"13eb5cd6",1680:"bd50cc23",1732:"2113d296",1785:"2877c2aa",1792:"cbc06c74",1903:"93c37582",2059:"e77f8031",2060:"f19b0385",2112:"31cce30e",2138:"bcd56aba",2143:"32d6d3c6",2188:"8d764441",2216:"665163cb",2234:"41d84f9c",2237:"8cf703b8",2239:"6d4ec3cd",2278:"32ebb33a",2311:"d19d3084",2381:"0173730b",2393:"f9531ab2",2485:"29ed8fa8",2531:"f0a05a67",2543:"eb1a9fed",2544:"861f89a1",2634:"9393f016",2643:"3739cabe",2686:"f09422d5",2702:"dbfbef06",2711:"38495ff0",2756:"ed059b7f",2784:"9db05768",2870:"08bce1a2",3152:"6ac15bd8",3205:"de9a0d63",3293:"440756d2",3304:"5cb8f6d5",3399:"2f31d132",3433:"43a37ed7",3467:"dedfa9f7",3469:"5b8269b7",3474:"0e996a2b",3487:"8c6a29cc",3500:"c52fa285",3523:"87c89d4f",3657:"d744958e",3722:"f748d566",3744:"a6d9b790",3858:"74886871",3913:"39d4fdab",3923:"d868cfe7",3942:"54b29009",3959:"701b1862",3972:"fa260145",3994:"f114ce67",4015:"ae10189e",4091:"12abcf97",4170:"2f6034d1",4212:"a8abd533",4389:"96c75173",4441:"159c0dd4",4465:"9f746a0f",4480:"e9e98e2f",4574:"777dd623",4606:"6c6d5b13",4614:"f3d7d4a2",4675:"546a5739",4715:"d2cb5bfa",4813:"20c3ea8f",4848:"7b2f3736",4880:"1b225259",4901:"2c13b213",4918:"b29e0847",4931:"46fbe083",4942:"81cbcbdb",5051:"da120ca2",5076:"2a246d32",5120:"82d29218",5168:"908c8c67",5219:"98286bcc",5247:"aafbd8ac",5288:"bd64fed1",5307:"6b7605e7",5328:"24bed198",5423:"736a7272",5429:"4a98ef10",5505:"d0b58819",5552:"a723fd46",5560:"1f90fe68",5641:"846831ad",5742:"dba3abf8",5758:"8bae4657",5829:"637d3280",5841:"69e51c88",5863:"dfbd2187",5871:"87011b34",5923:"cfb0fa75",5947:"e51e6080",6008:"c5f2a68e",6033:"02618903",6076:"8528c6dd",6080:"715a5b62",6128:"62efa5af",6156:"645299bf",6167:"15e2c67b",6168:"91c16683",6180:"a5fe181e",6289:"9fbb442d",6431:"593e9a01",6477:"db4e8266",6555:"e462dcd2",6741:"03ca2710",6769:"e2165045",6885:"8a395e4e",6933:"8e6dddd8",6969:"d15b934b",6995:"e8c3be3e",7051:"fb01ca8e",7054:"568b70d1",7086:"6315f0d7",7098:"5f03e42f",7155:"d20d7fe5",7194:"2a3d6c3a",7283:"2c507f51",7327:"844e9d06",7399:"e00b4b93",7472:"f9eb60d6",7539:"905253cd",7546:"4e1a38b5",7587:"792a7895",7591:"e5ebc920",7643:"ef165fcc",7737:"ab75e164",7747:"55014e03",7759:"21488346",7817:"ce2d8444",7848:"6d0bd5e5",7877:"ea3f0a69",7909:"7b6920ee",7911:"bea4e12a",7947:"7e52d618",7980:"a89e4ee0",7999:"d0eeb04f",8010:"7004125b",8085:"f14f3eb7",8121:"c8250175",8130:"fdcf2dac",8146:"f4636af2",8158:"b01b1d21",8169:"659b5b6f",8191:"6fe6b706",8209:"537c500f",8223:"13cb670d",8332:"f4d93cf8",8401:"d59451ae",8412:"53e7bfb3",8475:"cf369cf1",8604:"d6f9f5ce",8710:"dc9a4b50",8732:"7aa106eb",8741:"86811b37",8812:"6997c361",8820:"8b8cf3ca",8822:"7ccaf310",8913:"0a3ea71c",8930:"7b984e92",8937:"d157c858",8947:"2e10496c",8948:"ac852dbb",9048:"1a3b253e",9060:"7ff93230",9079:"7563dc00",9144:"c41a37b2",9155:"dbd5ca7c",9163:"b71db6ca",9234:"abcccd9b",9281:"24071bf5",9311:"98f0bde4",9332:"8585fff0",9361:"499d308d",9414:"1a6340ac",9417:"4ff21d57",9419:"9c49ca65",9423:"b9fe0713",9463:"f6e7830d",9622:"ca6d2195",9625:"ed60929c",9647:"6177a940",9656:"b148e4bc",9666:"a658680d",9674:"1c79051b",9706:"9fe8359c",9773:"544e95c4",9820:"10487be9",9825:"a117f5ea",9858:"7ebf5479",9883:"bda53267",9885:"b89e7df9",9895:"330d5660",9945:"5694cddc",9985:"2dff4e4a",9989:"5f86e1a5"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="dwcj-documentation:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={12501979:"7539",17896441:"8401",65016876:"2756",79697695:"6885",89486910:"7086",dff4ff20:"61",c2934bd6:"180","925cbb6f":"214",ddcf2e52:"234",b3a8e8c5:"306",d9a7da59:"329",f9ce7370:"339","6c9ac209":"366",b32d54b9:"372",fab915fa:"582",db86db59:"643","246bb5e3":"706","93b4852a":"707","80ca66d9":"710",a97824ad:"841","0058b4c6":"849",cc4e31b6:"872",a9d2f8cf:"898",c141421f:"957","9a4aa732":"1095",a7456010:"1235","53bc3d63":"1238",ee11ef75:"1294",ae9dd622:"1591","70c7c9e2":"1617",c9813911:"1680",ff6d8346:"1732","994640aa":"1785",d4a8c166:"1792",acecf23e:"1903",a7eec861:"2059","0d8bf7c5":"2060",ca6af521:"2112","1a4e3797":"2138",c58736f6:"2143",ccc292ba:"2188",c0d234de:"2216","1c9c0ba0":"2234",e49b36ef:"2239",c345521d:"2278","4479ab16":"2311","43c20042":"2381","0198994b":"2393",a608fec9:"2485",baa1f38d:"2531",b36e5588:"2543",f048ed9e:"2544",c4f5d8e4:"2634","03db97fc":"2643","7b4dc894":"2686","50801aa3":"2702","9e4087bc":"2711","12141a65":"2784","9eb89d33":"2870",a600e80a:"3152",fb9643b6:"3205",c6c0701f:"3293",bbfc7ea9:"3304","457e6a8f":"3399","9f8cd0e7":"3433",deef26b6:"3467","47e3da80":"3469","145075ef":"3474",b4366e06:"3487","3608c0af":"3500",adc14533:"3523","5d580183":"3657","30bd6853":"3722",cb1b5929:"3744","70bd0395":"3913","532a8e42":"3923",a59486c3:"3942","791a8ecf":"3959","7e5d93ec":"3972","8448e262":"3994","0aa1cec2":"4015",e5a16701:"4091",d03050a8:"4170","621db11d":"4212","4d4f9528":"4389","250499b1":"4441","7f139518":"4465","979b552b":"4480","83582f1b":"4574","31470bb2":"4606","017e1775":"4614","47f3d74a":"4675","87878b99":"4715","6875c492":"4813","134972eb":"4848","8aa8434b":"4880",b08e7a09:"4901",c9cac9d9:"4918","587d7f27":"4931",cfdcbc1c:"4942","700cec1a":"5051","7b2f26a3":"5076","3f624000":"5120","07849ef8":"5168","889d1d5c":"5219",fb1ca84d:"5288","7e2cd1ec":"5307","21ddc4a6":"5328","261b313d":"5423",ef0dd26c:"5429",a29acf59:"5505","87ab4e1c":"5552",fb368ab3:"5560","45758ec3":"5641",aba21aa0:"5742","098618c0":"5758","9901dcbd":"5829",d04339d1:"5841","0b1ac180":"5863",af08f1ee:"5871",b920a688:"5923","9de26170":"5947","0fb1df13":"6008","97ff83a2":"6033","9cd23e74":"6076",f10a4580:"6080","1ff3458b":"6128","3a3c1811":"6156","97bbbf00":"6167",bc3d2e31:"6168","4ffc7f07":"6180",dc652336:"6477",b201f757:"6555","33b18326":"6741","7616f23a":"6769",c44f1f93:"6933","14eb3368":"6969","57b3e824":"6995",e747ec83:"7051","5b7d89bf":"7054",a7bd4aaa:"7098","8d37c133":"7155","6f967c3d":"7194","2207bd01":"7283",feb48218:"7327","6d91d1eb":"7399","814f3328":"7472","726aba28":"7546",bd03097a:"7587",a709823f:"7591",a6aa9e1f:"7643",e908ab8e:"7737","1e29cefc":"7747",a227f5f9:"7759",ab2c0b4d:"7817","5f585644":"7848","44a2ffa8":"7877",a6f597c1:"7909","077efd0a":"7911",d503ef47:"7947","22b41514":"7980",a7ca0b77:"7999","29f5a473":"8010",e97f9a74:"8085","3a2db09e":"8121",f81c1134:"8130",c15d9823:"8146",c1ec0396:"8169","2ad235da":"8191","01a85c17":"8209","27fabcba":"8223","9e338a3c":"8332","20ad71ae":"8412","385302be":"8475",f3918844:"8604","0c9a7c3c":"8710",bd64da24:"8732",e9a7cc51:"8741","3091f280":"8812","636146f1":"8820","1b5c5c80":"8822",d5c2d681:"8930","00e0cf24":"8937",ef8b811a:"8947","2d1577e2":"8948",a94703ab:"9048","18b1068a":"9060","284ecaa8":"9079","52df7ca1":"9144",d2c2dbdc:"9155","1e789ed5":"9163","3bc16e1f":"9234","4f0b3e68":"9281","99266d2f":"9311",c43ec111:"9332","3d2d5d68":"9361","3dd38f09":"9414","5143509c":"9417","3590aca4":"9419","2a6db818":"9423","0f425520":"9463",c1f98019:"9622",c6e2414a:"9625","5e95c892":"9647",bed29139:"9656","97b693b7":"9666",b87a0e7c:"9674",f4a844dd:"9706",a266566d:"9773",bba6862f:"9820",d76d507e:"9825","36994c47":"9858","90027d71":"9883",ffba0f21:"9885",ba4df261:"9895",f5fa8e72:"9945",a50bea04:"9985","5ddd58e1":"9989"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return b[e].call(c.exports,c,c.exports,r),c.exports}r.m=b,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({61:"dff4ff20",180:"c2934bd6",214:"925cbb6f",234:"ddcf2e52",306:"b3a8e8c5",329:"d9a7da59",339:"f9ce7370",366:"6c9ac209",372:"b32d54b9",582:"fab915fa",643:"db86db59",706:"246bb5e3",707:"93b4852a",710:"80ca66d9",841:"a97824ad",849:"0058b4c6",872:"cc4e31b6",898:"a9d2f8cf",957:"c141421f",1095:"9a4aa732",1235:"a7456010",1238:"53bc3d63",1294:"ee11ef75",1591:"ae9dd622",1617:"70c7c9e2",1680:"c9813911",1732:"ff6d8346",1785:"994640aa",1792:"d4a8c166",1903:"acecf23e",2059:"a7eec861",2060:"0d8bf7c5",2112:"ca6af521",2138:"1a4e3797",2143:"c58736f6",2188:"ccc292ba",2216:"c0d234de",2234:"1c9c0ba0",2239:"e49b36ef",2278:"c345521d",2311:"4479ab16",2381:"43c20042",2393:"0198994b",2485:"a608fec9",2531:"baa1f38d",2543:"b36e5588",2544:"f048ed9e",2634:"c4f5d8e4",2643:"03db97fc",2686:"7b4dc894",2702:"50801aa3",2711:"9e4087bc",2756:"65016876",2784:"12141a65",2870:"9eb89d33",3152:"a600e80a",3205:"fb9643b6",3293:"c6c0701f",3304:"bbfc7ea9",3399:"457e6a8f",3433:"9f8cd0e7",3467:"deef26b6",3469:"47e3da80",3474:"145075ef",3487:"b4366e06",3500:"3608c0af",3523:"adc14533",3657:"5d580183",3722:"30bd6853",3744:"cb1b5929",3913:"70bd0395",3923:"532a8e42",3942:"a59486c3",3959:"791a8ecf",3972:"7e5d93ec",3994:"8448e262",4015:"0aa1cec2",4091:"e5a16701",4170:"d03050a8",4212:"621db11d",4389:"4d4f9528",4441:"250499b1",4465:"7f139518",4480:"979b552b",4574:"83582f1b",4606:"31470bb2",4614:"017e1775",4675:"47f3d74a",4715:"87878b99",4813:"6875c492",4848:"134972eb",4880:"8aa8434b",4901:"b08e7a09",4918:"c9cac9d9",4931:"587d7f27",4942:"cfdcbc1c",5051:"700cec1a",5076:"7b2f26a3",5120:"3f624000",5168:"07849ef8",5219:"889d1d5c",5288:"fb1ca84d",5307:"7e2cd1ec",5328:"21ddc4a6",5423:"261b313d",5429:"ef0dd26c",5505:"a29acf59",5552:"87ab4e1c",5560:"fb368ab3",5641:"45758ec3",5742:"aba21aa0",5758:"098618c0",5829:"9901dcbd",5841:"d04339d1",5863:"0b1ac180",5871:"af08f1ee",5923:"b920a688",5947:"9de26170",6008:"0fb1df13",6033:"97ff83a2",6076:"9cd23e74",6080:"f10a4580",6128:"1ff3458b",6156:"3a3c1811",6167:"97bbbf00",6168:"bc3d2e31",6180:"4ffc7f07",6477:"dc652336",6555:"b201f757",6741:"33b18326",6769:"7616f23a",6885:"79697695",6933:"c44f1f93",6969:"14eb3368",6995:"57b3e824",7051:"e747ec83",7054:"5b7d89bf",7086:"89486910",7098:"a7bd4aaa",7155:"8d37c133",7194:"6f967c3d",7283:"2207bd01",7327:"feb48218",7399:"6d91d1eb",7472:"814f3328",7539:"12501979",7546:"726aba28",7587:"bd03097a",7591:"a709823f",7643:"a6aa9e1f",7737:"e908ab8e",7747:"1e29cefc",7759:"a227f5f9",7817:"ab2c0b4d",7848:"5f585644",7877:"44a2ffa8",7909:"a6f597c1",7911:"077efd0a",7947:"d503ef47",7980:"22b41514",7999:"a7ca0b77",8010:"29f5a473",8085:"e97f9a74",8121:"3a2db09e",8130:"f81c1134",8146:"c15d9823",8169:"c1ec0396",8191:"2ad235da",8209:"01a85c17",8223:"27fabcba",8332:"9e338a3c",8401:"17896441",8412:"20ad71ae",8475:"385302be",8604:"f3918844",8710:"0c9a7c3c",8732:"bd64da24",8741:"e9a7cc51",8812:"3091f280",8820:"636146f1",8822:"1b5c5c80",8930:"d5c2d681",8937:"00e0cf24",8947:"ef8b811a",8948:"2d1577e2",9048:"a94703ab",9060:"18b1068a",9079:"284ecaa8",9144:"52df7ca1",9155:"d2c2dbdc",9163:"1e789ed5",9234:"3bc16e1f",9281:"4f0b3e68",9311:"99266d2f",9332:"c43ec111",9361:"3d2d5d68",9414:"3dd38f09",9417:"5143509c",9419:"3590aca4",9423:"2a6db818",9463:"0f425520",9622:"c1f98019",9625:"c6e2414a",9647:"5e95c892",9656:"bed29139",9666:"97b693b7",9674:"b87a0e7c",9706:"f4a844dd",9773:"a266566d",9820:"bba6862f",9825:"d76d507e",9858:"36994c47",9883:"90027d71",9885:"ffba0f21",9895:"ba4df261",9945:"f5fa8e72",9985:"a50bea04",9989:"5ddd58e1"}[e]||e)+"."+{8:"5a3da794",61:"d6c0927d",180:"67990a34",214:"5e40f066",234:"ee6632a6",306:"c864d8da",329:"15f0b448",339:"a4d51311",366:"a85f4149",372:"9b8ccbca",416:"8051c311",582:"9241ba12",643:"db444bf6",706:"3cb1240b",707:"d0ddf055",710:"b4d20fc0",833:"01a014af",841:"a7c3a664",849:"84abb873",872:"b7b16780",898:"4c559889",957:"627de53a",1095:"fc029690",1235:"d6385e65",1238:"9aa2e196",1294:"8bd210b0",1531:"11a01dac",1591:"253295c7",1617:"75d6acf1",1633:"13eb5cd6",1680:"bd50cc23",1732:"2113d296",1785:"2877c2aa",1792:"cbc06c74",1903:"93c37582",2059:"e77f8031",2060:"f19b0385",2112:"31cce30e",2138:"bcd56aba",2143:"32d6d3c6",2188:"8d764441",2216:"665163cb",2234:"41d84f9c",2237:"8cf703b8",2239:"6d4ec3cd",2278:"32ebb33a",2311:"d19d3084",2381:"0173730b",2393:"f9531ab2",2485:"29ed8fa8",2531:"f0a05a67",2543:"eb1a9fed",2544:"861f89a1",2634:"9393f016",2643:"3739cabe",2686:"f09422d5",2702:"dbfbef06",2711:"38495ff0",2756:"ed059b7f",2784:"9db05768",2870:"08bce1a2",3152:"6ac15bd8",3205:"de9a0d63",3293:"440756d2",3304:"5cb8f6d5",3399:"2f31d132",3433:"43a37ed7",3467:"dedfa9f7",3469:"5b8269b7",3474:"0e996a2b",3487:"8c6a29cc",3500:"c52fa285",3523:"87c89d4f",3657:"d744958e",3722:"f748d566",3744:"a6d9b790",3858:"74886871",3913:"39d4fdab",3923:"d868cfe7",3942:"54b29009",3959:"701b1862",3972:"fa260145",3994:"f114ce67",4015:"ae10189e",4091:"12abcf97",4170:"2f6034d1",4212:"a8abd533",4389:"96c75173",4441:"159c0dd4",4465:"9f746a0f",4480:"e9e98e2f",4574:"777dd623",4606:"6c6d5b13",4614:"f3d7d4a2",4675:"546a5739",4715:"d2cb5bfa",4813:"20c3ea8f",4848:"7b2f3736",4880:"1b225259",4901:"2c13b213",4918:"b29e0847",4931:"46fbe083",4942:"81cbcbdb",5051:"da120ca2",5076:"2a246d32",5120:"82d29218",5168:"908c8c67",5219:"98286bcc",5247:"aafbd8ac",5288:"bd64fed1",5307:"6b7605e7",5328:"24bed198",5423:"736a7272",5429:"4a98ef10",5505:"d0b58819",5552:"a723fd46",5560:"1f90fe68",5641:"846831ad",5742:"dba3abf8",5758:"8bae4657",5829:"637d3280",5841:"69e51c88",5863:"dfbd2187",5871:"87011b34",5923:"cfb0fa75",5947:"e51e6080",6008:"c5f2a68e",6033:"02618903",6076:"8528c6dd",6080:"715a5b62",6128:"62efa5af",6156:"645299bf",6167:"15e2c67b",6168:"91c16683",6180:"a5fe181e",6289:"9fbb442d",6431:"593e9a01",6477:"db4e8266",6555:"e462dcd2",6741:"03ca2710",6769:"e2165045",6885:"8a395e4e",6933:"8e6dddd8",6969:"d15b934b",6995:"e8c3be3e",7051:"fb01ca8e",7054:"568b70d1",7086:"6315f0d7",7098:"5f03e42f",7155:"d20d7fe5",7194:"2a3d6c3a",7283:"2c507f51",7327:"844e9d06",7399:"e00b4b93",7472:"f9eb60d6",7539:"905253cd",7546:"4e1a38b5",7587:"792a7895",7591:"e5ebc920",7643:"ef165fcc",7737:"ab75e164",7747:"55014e03",7759:"21488346",7817:"ce2d8444",7848:"6d0bd5e5",7877:"ea3f0a69",7909:"7b6920ee",7911:"bea4e12a",7947:"7e52d618",7980:"a89e4ee0",7999:"d0eeb04f",8010:"7004125b",8085:"f14f3eb7",8121:"c8250175",8130:"2603d27a",8146:"f4636af2",8158:"b01b1d21",8169:"659b5b6f",8191:"6fe6b706",8209:"537c500f",8223:"13cb670d",8332:"f4d93cf8",8401:"d59451ae",8412:"53e7bfb3",8475:"cf369cf1",8604:"d6f9f5ce",8710:"dc9a4b50",8732:"7aa106eb",8741:"86811b37",8812:"6997c361",8820:"8b8cf3ca",8822:"7ccaf310",8913:"0a3ea71c",8930:"7b984e92",8937:"d157c858",8947:"2e10496c",8948:"ac852dbb",9048:"1a3b253e",9060:"7ff93230",9079:"7563dc00",9144:"c41a37b2",9155:"dbd5ca7c",9163:"b71db6ca",9234:"abcccd9b",9281:"24071bf5",9311:"98f0bde4",9332:"2bb70eb4",9361:"499d308d",9414:"1a6340ac",9417:"4ff21d57",9419:"9c49ca65",9423:"b9fe0713",9463:"f6e7830d",9622:"ca6d2195",9625:"ed60929c",9647:"6177a940",9656:"b148e4bc",9666:"a658680d",9674:"1c79051b",9706:"9fe8359c",9773:"544e95c4",9820:"10487be9",9825:"a117f5ea",9858:"7ebf5479",9883:"bda53267",9885:"b89e7df9",9895:"330d5660",9945:"5694cddc",9985:"2dff4e4a",9989:"5f86e1a5"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="dwcj-documentation:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={12501979:"7539",17896441:"8401",65016876:"2756",79697695:"6885",89486910:"7086",dff4ff20:"61",c2934bd6:"180","925cbb6f":"214",ddcf2e52:"234",b3a8e8c5:"306",d9a7da59:"329",f9ce7370:"339","6c9ac209":"366",b32d54b9:"372",fab915fa:"582",db86db59:"643","246bb5e3":"706","93b4852a":"707","80ca66d9":"710",a97824ad:"841","0058b4c6":"849",cc4e31b6:"872",a9d2f8cf:"898",c141421f:"957","9a4aa732":"1095",a7456010:"1235","53bc3d63":"1238",ee11ef75:"1294",ae9dd622:"1591","70c7c9e2":"1617",c9813911:"1680",ff6d8346:"1732","994640aa":"1785",d4a8c166:"1792",acecf23e:"1903",a7eec861:"2059","0d8bf7c5":"2060",ca6af521:"2112","1a4e3797":"2138",c58736f6:"2143",ccc292ba:"2188",c0d234de:"2216","1c9c0ba0":"2234",e49b36ef:"2239",c345521d:"2278","4479ab16":"2311","43c20042":"2381","0198994b":"2393",a608fec9:"2485",baa1f38d:"2531",b36e5588:"2543",f048ed9e:"2544",c4f5d8e4:"2634","03db97fc":"2643","7b4dc894":"2686","50801aa3":"2702","9e4087bc":"2711","12141a65":"2784","9eb89d33":"2870",a600e80a:"3152",fb9643b6:"3205",c6c0701f:"3293",bbfc7ea9:"3304","457e6a8f":"3399","9f8cd0e7":"3433",deef26b6:"3467","47e3da80":"3469","145075ef":"3474",b4366e06:"3487","3608c0af":"3500",adc14533:"3523","5d580183":"3657","30bd6853":"3722",cb1b5929:"3744","70bd0395":"3913","532a8e42":"3923",a59486c3:"3942","791a8ecf":"3959","7e5d93ec":"3972","8448e262":"3994","0aa1cec2":"4015",e5a16701:"4091",d03050a8:"4170","621db11d":"4212","4d4f9528":"4389","250499b1":"4441","7f139518":"4465","979b552b":"4480","83582f1b":"4574","31470bb2":"4606","017e1775":"4614","47f3d74a":"4675","87878b99":"4715","6875c492":"4813","134972eb":"4848","8aa8434b":"4880",b08e7a09:"4901",c9cac9d9:"4918","587d7f27":"4931",cfdcbc1c:"4942","700cec1a":"5051","7b2f26a3":"5076","3f624000":"5120","07849ef8":"5168","889d1d5c":"5219",fb1ca84d:"5288","7e2cd1ec":"5307","21ddc4a6":"5328","261b313d":"5423",ef0dd26c:"5429",a29acf59:"5505","87ab4e1c":"5552",fb368ab3:"5560","45758ec3":"5641",aba21aa0:"5742","098618c0":"5758","9901dcbd":"5829",d04339d1:"5841","0b1ac180":"5863",af08f1ee:"5871",b920a688:"5923","9de26170":"5947","0fb1df13":"6008","97ff83a2":"6033","9cd23e74":"6076",f10a4580:"6080","1ff3458b":"6128","3a3c1811":"6156","97bbbf00":"6167",bc3d2e31:"6168","4ffc7f07":"6180",dc652336:"6477",b201f757:"6555","33b18326":"6741","7616f23a":"6769",c44f1f93:"6933","14eb3368":"6969","57b3e824":"6995",e747ec83:"7051","5b7d89bf":"7054",a7bd4aaa:"7098","8d37c133":"7155","6f967c3d":"7194","2207bd01":"7283",feb48218:"7327","6d91d1eb":"7399","814f3328":"7472","726aba28":"7546",bd03097a:"7587",a709823f:"7591",a6aa9e1f:"7643",e908ab8e:"7737","1e29cefc":"7747",a227f5f9:"7759",ab2c0b4d:"7817","5f585644":"7848","44a2ffa8":"7877",a6f597c1:"7909","077efd0a":"7911",d503ef47:"7947","22b41514":"7980",a7ca0b77:"7999","29f5a473":"8010",e97f9a74:"8085","3a2db09e":"8121",f81c1134:"8130",c15d9823:"8146",c1ec0396:"8169","2ad235da":"8191","01a85c17":"8209","27fabcba":"8223","9e338a3c":"8332","20ad71ae":"8412","385302be":"8475",f3918844:"8604","0c9a7c3c":"8710",bd64da24:"8732",e9a7cc51:"8741","3091f280":"8812","636146f1":"8820","1b5c5c80":"8822",d5c2d681:"8930","00e0cf24":"8937",ef8b811a:"8947","2d1577e2":"8948",a94703ab:"9048","18b1068a":"9060","284ecaa8":"9079","52df7ca1":"9144",d2c2dbdc:"9155","1e789ed5":"9163","3bc16e1f":"9234","4f0b3e68":"9281","99266d2f":"9311",c43ec111:"9332","3d2d5d68":"9361","3dd38f09":"9414","5143509c":"9417","3590aca4":"9419","2a6db818":"9423","0f425520":"9463",c1f98019:"9622",c6e2414a:"9625","5e95c892":"9647",bed29139:"9656","97b693b7":"9666",b87a0e7c:"9674",f4a844dd:"9706",a266566d:"9773",bba6862f:"9820",d76d507e:"9825","36994c47":"9858","90027d71":"9883",ffba0f21:"9885",ba4df261:"9895",f5fa8e72:"9945",a50bea04:"9985","5ddd58e1":"9989"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n