@skdx/docs-kit 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{accordionContract as t}from"./accordion.js";import{alertContract as o}from"./alert.js";import{angleSliderContract as r}from"./angle-slider.js";import{aspectRatioContract as m}from"./aspect-ratio.js";import{autocompleteContract as a}from"./autocomplete.js";import{avatarContract as i}from"./avatar.js";import{badgeContract as n}from"./badge.js";import{boxContract as c}from"./box.js";import{breadcrumbContract as p}from"./breadcrumb.js";import{buttonContract as C}from"./button.js";import{calendarContract as f}from"./calendar.js";import{cardContract as e}from"./card.js";import{carouselContract as l}from"./carousel.js";import{chatComposerContract as s}from"./chat-composer.js";import{chatMessageContract as d}from"./chat-message.js";import{checkboxContract as g}from"./checkbox.js";import{checkboxCardContract as b}from"./checkbox-card.js";import{checkboxGroupContract as u}from"./checkbox-group.js";import{clipboardContract as h}from"./clipboard.js";import{collapsibleContract as k}from"./collapsible.js";import{colorPickerContract as x}from"./color-picker.js";import{comboboxContract as P}from"./combobox.js";import{commandContract as v}from"./command.js";import{commentContract as w}from"./comment.js";import{commentThreadContract as y}from"./comment-thread.js";import{confirmDialogContract as S}from"./confirm-dialog.js";import{conversationListContract as F}from"./conversation-list.js";import{dashboardLayoutContract as G}from"./dashboard-layout.js";import{dateFieldContract as I}from"./date-field.js";import{datePickerContract as M}from"./date-picker.js";import{dialogContract as T}from"./dialog.js";import{dividerContract as A}from"./divider.js";import{drawerContract as B}from"./drawer.js";import{editableContract as D}from"./editable.js";import{emptyStateContract as L}from"./empty-state.js";import{fieldContract as O}from"./field.js";import{fileUploadContract as R}from"./file-upload.js";import{filterBarContract as U}from"./filter-bar.js";import{floatingPanelContract as q}from"./floating-panel.js";import{forgotPasswordPageContract as z}from"./forgot-password-page.js";import{formContract as N}from"./form.js";import{formSectionContract as j}from"./form-section.js";import{headingContract as E}from"./heading.js";import{imageContract as H}from"./image.js";import{kbdContract as J}from"./kbd.js";import{labelContract as K}from"./label.js";import{linkContract as Q}from"./link.js";import{listContract as V}from"./list.js";import{listboxContract as W}from"./listbox.js";import{loadingOverlayContract as X}from"./loading-overlay.js";import{mentionsContract as Y}from"./mentions.js";import{menuContract as Z}from"./menu.js";import{menubarContract as _}from"./menubar.js";import{navigationMenuContract as $}from"./navigation-menu.js";import{notificationCenterContract as tt}from"./notification-center.js";import{numberFieldContract as ot}from"./number-field.js";import{onboardingChecklistContract as rt}from"./onboarding-checklist.js";import{pageContainerContract as mt}from"./page-container.js";import{paginationContract as at}from"./pagination.js";import{passwordInputContract as it}from"./password-input.js";import{pinInputContract as nt}from"./pin-input.js";import{popoverContract as ct}from"./popover.js";import{progressContract as pt}from"./progress.js";import{qrCodeContract as Ct}from"./qr-code.js";import{radioCardContract as ft}from"./radio-card.js";import{radioGroupContract as et}from"./radio-group.js";import{ratingContract as lt}from"./rating.js";import{resetPasswordPageContract as st}from"./reset-password-page.js";import{resizableContract as dt}from"./resizable.js";import{scrollAreaContract as gt}from"./scroll-area.js";import{selectContract as bt}from"./select.js";import{signInPageContract as ut}from"./sign-in-page.js";import{signUpPageContract as ht}from"./sign-up-page.js";import{skeletonContract as kt}from"./skeleton.js";import{sliderContract as xt}from"./slider.js";import{speedDialContract as Pt}from"./speed-dial.js";import{spinnerContract as vt}from"./spinner.js";import{splitButtonContract as wt}from"./split-button.js";import{statCardContract as yt}from"./stat-card.js";import{stepperContract as St}from"./stepper.js";import{switchContract as Ft}from"./switch.js";import{tableContract as Gt}from"./table.js";import{tabsContract as It}from"./tabs.js";import{tagGroupContract as Mt}from"./tag-group.js";import{tagsInputContract as Tt}from"./tags-input.js";import{textContract as At}from"./text.js";import{textFieldContract as Bt}from"./text-field.js";import{textareaContract as Dt}from"./textarea.js";import{timeContract as Lt}from"./time.js";import{timeFieldContract as Ot}from"./time-field.js";import{timelineContract as Rt}from"./timeline.js";import{toastContract as Ut}from"./toast.js";import{toggleContract as qt}from"./toggle.js";import{toggleGroupContract as zt}from"./toggle-group.js";import{toolbarContract as Nt}from"./toolbar.js";import{tourContract as jt}from"./tour.js";import{transferContract as Et}from"./transfer.js";import{treeContract as Ht}from"./tree.js";import{treeSelectContract as Jt}from"./tree-select.js";import{usageCardContract as Kt}from"./usage-card.js";import{userMenuContract as Qt}from"./user-menu.js";import{verificationPageContract as Vt}from"./verification-page.js";import{workspaceSwitcherContract as Wt}from"./workspace-switcher.js";var Kr=[t,o,r,m,a,i,n,c,p,C,f,e,G,mt,ut,L,yt,s,d,w,y,S,F,U,j,tt,rt,Kt,Qt,Wt,ht,z,st,Vt,l,b,g,u,h,k,x,P,v,I,M,T,B,Z,D,O,R,q,N,E,H,J,K,Q,V,W,X,Y,_,$,ot,at,it,nt,ct,pt,Ct,ft,et,lt,dt,gt,bt,A,kt,xt,Pt,vt,wt,St,Ft,Gt,It,Mt,Tt,At,Bt,Dt,Lt,Ot,Rt,Ut,qt,zt,Nt,jt,Et,Ht,Jt];export{Kr as CONTRACTS};
1
+ import{accordionContract as t}from"./accordion.js";import{alertContract as o}from"./alert.js";import{angleSliderContract as r}from"./angle-slider.js";import{aspectRatioContract as m}from"./aspect-ratio.js";import{autocompleteContract as a}from"./autocomplete.js";import{avatarContract as i}from"./avatar.js";import{badgeContract as n}from"./badge.js";import{boxContract as c}from"./box.js";import{breadcrumbContract as p}from"./breadcrumb.js";import{buttonContract as C}from"./button.js";import{calendarContract as f}from"./calendar.js";import{cardContract as e}from"./card.js";import{carouselContract as l}from"./carousel.js";import{chatComposerContract as s}from"./chat-composer.js";import{chatMessageContract as d}from"./chat-message.js";import{checkboxContract as g}from"./checkbox.js";import{checkboxCardContract as b}from"./checkbox-card.js";import{checkboxGroupContract as u}from"./checkbox-group.js";import{clipboardContract as h}from"./clipboard.js";import{collapsibleContract as k}from"./collapsible.js";import{colorPickerContract as x}from"./color-picker.js";import{comboboxContract as P}from"./combobox.js";import{commandContract as v}from"./command.js";import{commentContract as w}from"./comment.js";import{commentThreadContract as y}from"./comment-thread.js";import{conversationListContract as S}from"./conversation-list.js";import{dashboardLayoutContract as F}from"./dashboard-layout.js";import{dateFieldContract as G}from"./date-field.js";import{datePickerContract as I}from"./date-picker.js";import{dialogContract as M}from"./dialog.js";import{dividerContract as T}from"./divider.js";import{drawerContract as A}from"./drawer.js";import{editableContract as B}from"./editable.js";import{emptyStateContract as L}from"./empty-state.js";import{fieldContract as O}from"./field.js";import{fileUploadContract as R}from"./file-upload.js";import{filterBarContract as U}from"./filter-bar.js";import{floatingPanelContract as q}from"./floating-panel.js";import{forgotPasswordPageContract as z}from"./forgot-password-page.js";import{formContract as D}from"./form.js";import{formSectionContract as N}from"./form-section.js";import{headingContract as j}from"./heading.js";import{imageContract as E}from"./image.js";import{kbdContract as H}from"./kbd.js";import{labelContract as J}from"./label.js";import{linkContract as K}from"./link.js";import{listContract as Q}from"./list.js";import{listboxContract as V}from"./listbox.js";import{loadingOverlayContract as W}from"./loading-overlay.js";import{mentionsContract as X}from"./mentions.js";import{menuContract as Y}from"./menu.js";import{menubarContract as Z}from"./menubar.js";import{navigationMenuContract as _}from"./navigation-menu.js";import{notificationCenterContract as $}from"./notification-center.js";import{numberFieldContract as tt}from"./number-field.js";import{onboardingChecklistContract as ot}from"./onboarding-checklist.js";import{pageContainerContract as rt}from"./page-container.js";import{paginationContract as mt}from"./pagination.js";import{passwordInputContract as at}from"./password-input.js";import{pinInputContract as it}from"./pin-input.js";import{popoverContract as nt}from"./popover.js";import{progressContract as ct}from"./progress.js";import{qrCodeContract as pt}from"./qr-code.js";import{radioCardContract as Ct}from"./radio-card.js";import{radioGroupContract as ft}from"./radio-group.js";import{ratingContract as et}from"./rating.js";import{resetPasswordPageContract as lt}from"./reset-password-page.js";import{resizableContract as st}from"./resizable.js";import{scrollAreaContract as dt}from"./scroll-area.js";import{selectContract as gt}from"./select.js";import{signInPageContract as bt}from"./sign-in-page.js";import{signUpPageContract as ut}from"./sign-up-page.js";import{skeletonContract as ht}from"./skeleton.js";import{sliderContract as kt}from"./slider.js";import{speedDialContract as xt}from"./speed-dial.js";import{spinnerContract as Pt}from"./spinner.js";import{splitButtonContract as vt}from"./split-button.js";import{statCardContract as wt}from"./stat-card.js";import{stepperContract as yt}from"./stepper.js";import{switchContract as St}from"./switch.js";import{tableContract as Ft}from"./table.js";import{tabsContract as Gt}from"./tabs.js";import{tagGroupContract as It}from"./tag-group.js";import{tagsInputContract as Mt}from"./tags-input.js";import{textContract as Tt}from"./text.js";import{textFieldContract as At}from"./text-field.js";import{textareaContract as Bt}from"./textarea.js";import{timeContract as Lt}from"./time.js";import{timeFieldContract as Ot}from"./time-field.js";import{timelineContract as Rt}from"./timeline.js";import{toastContract as Ut}from"./toast.js";import{toggleContract as qt}from"./toggle.js";import{toggleGroupContract as zt}from"./toggle-group.js";import{toolbarContract as Dt}from"./toolbar.js";import{tourContract as Nt}from"./tour.js";import{transferContract as jt}from"./transfer.js";import{treeContract as Et}from"./tree.js";import{treeSelectContract as Ht}from"./tree-select.js";import{usageCardContract as Jt}from"./usage-card.js";import{userMenuContract as Kt}from"./user-menu.js";import{verificationPageContract as Qt}from"./verification-page.js";import{workspaceSwitcherContract as Vt}from"./workspace-switcher.js";var Hr=[t,o,r,m,a,i,n,c,p,C,f,e,F,rt,bt,L,wt,s,d,w,y,S,U,N,$,ot,Jt,Kt,Vt,ut,z,lt,Qt,l,b,g,u,h,k,x,P,v,G,I,M,A,Y,B,O,R,q,D,j,E,H,J,K,Q,V,W,X,Z,_,tt,mt,at,it,nt,ct,pt,Ct,ft,et,st,dt,gt,T,ht,kt,xt,Pt,vt,yt,St,Ft,Gt,It,Mt,Tt,At,Bt,Lt,Ot,Rt,Ut,qt,zt,Dt,Nt,jt,Et,Ht];export{Hr as CONTRACTS};
@@ -1 +1 @@
1
- import{changeDetail as e}from"./change-reason.js";import{ROOT_DATA_ATTRIBUTES as t}from"./styling-hooks.js";var o={name:"VerificationPage",purpose:"A one-time-code block composing Heading, Text, Alert, Form, Field, PinInput and Button. It collects a code of a fixed length, reports it through a verify event once it is complete, and offers a resend control whose cooldown the consumer owns. Ships in the blocks package of each framework, not the core package.",props:[{name:"title",type:"string",defaultValue:"'Enter your verification code'",required:!1,description:"Heading text, rendered into a derived <h1> that names the section."},{name:"description",type:"string",required:!1,description:"Supporting copy rendered into a derived Text below the title, naming where the code was sent. No description region renders when omitted."},{name:"error",type:"string",required:!1,description:"Message rendered into a derived error Alert above the form. The block never clears it: set it from the verify handler and reset it when the next attempt starts."},{name:"pending",type:"boolean",defaultValue:"false",required:!1,description:"Marks the request in flight, making the submit button busy and unusable while the code boxes stay editable, so the user can still correct a digit."},{name:"codeLabel",type:"string",defaultValue:"'Verification code'",required:!1,description:"Field label and accessible name of the derived pin input holding the code, so the group of boxes is announced as one control."},{name:"length",type:"number",defaultValue:"6",required:!1,description:"How many character boxes the code is entered into, and how long a complete code is before it may be submitted."},{name:"value",type:"string",required:!1,description:"Current code, for controlled usage; pair it with the value-change event. Uncontrolled, the pin input tracks the code itself."},{name:"defaultValue",type:"string",required:!1,description:"Initial code, for uncontrolled usage \u2014 seeds the boxes on first render and leaves the rest empty."},{name:"submitLabel",type:"string",defaultValue:"'Verify'",required:!1,description:"Text of the form submit button."},{name:"resendLabel",type:"string",defaultValue:"'Resend code'",required:!1,description:"Text of the resend button, which renders only alongside a resend event handler."},{name:"resendDisabled",type:"boolean",defaultValue:"false",required:!1,description:"Makes the resend button unusable, for a consumer running its own cooldown between requests."},{name:"resendHint",type:"string",required:!1,description:"Note rendered beside the resend button, such as how long the cooldown has left. The block runs no timer of its own."},{name:"footer",type:"unknown",required:!1,frameworks:["react","svelte","angular"],exception:"render-prop",frameworksReason:"Vue and Web Components take this as a named slot rather than a prop \u2014 Vue because a renderable region is a slot in Vue's own idiom, Web Components because a custom element attribute carries a string and cannot carry a node. Both slot spellings are declared under `slots`.",description:"Navigation rendered below the resend region, such as a link back to the sign-in page. No footer region renders when omitted. A prop in React, Svelte, and Angular; Vue and Web Components use the `footer` slot."}],events:[{name:"verify",detail:"{ code: string }",description:"Fires when the form is submitted with a code of exactly the declared length, carrying that code. The native submit is prevented, so the consumer performs the check and sets error on failure."},{name:"resend",detail:"void",description:"Fires when the resend button is activated. Handling it is what renders the resend region at all; the cooldown between requests belongs to the consumer."},{name:"value-change",detail:e("string"),description:"Fires with the new code whenever any box changes, controlled or not, so a consumer can mirror the code or clear a stale error."}],slots:[{name:"default",description:"Extra fields rendered inside the form, above the submit button."},{name:"footer",description:"Navigation below the resend region, such as a link back to the sign-in page."}],states:["default"],controlledUncontrolled:"The code is controllable through value with the value-change event, or seeded with defaultValue and tracked by the pin input; error and pending are always controlled by the consumer.",formBehavior:"The form is a core Form root whose pin input submits the joined code as one required entry with a length pattern, so a short code is refused by constraint validation and emits nothing.",validationBehavior:"The code is required and only satisfies its constraint once every box is filled; the block adds no validators and never times the resend cooldown.",accessibility:{role:"region (native <section> named by its heading through aria-labelledby)",keyboard:[{key:"ArrowLeft/ArrowRight",behavior:"Moves between the code boxes, which the pin input wires itself."},{key:"Enter",behavior:"Submits the form while a code box has focus (native form submission)."}],ariaAttributes:["aria-labelledby on the <section> points at the derived heading","the pin input group carries aria-label from codeLabel, so the boxes are announced as one named control","the derived error Alert is a live region, so a new error is announced without moving focus"],focusManagement:"Focus follows the code boxes as the pin input advances them; a refused submit reports through constraint validation rather than a jump of the block's own."},styling:{cssParts:["verification-page","panel","title","description","error","form","field","code","submit","resend","resend-hint","footer"],dataAttributes:[...t,{name:"data-skdx-verification-page-generated",frameworks:["webComponents"],exception:"wc-marker",frameworksReason:'Marks a node the element generated for itself rather than one the consumer authored. React, Vue, Svelte and Angular re-render their derived anatomy declaratively, so "mine or theirs" is answered by the framework and no marker is needed.'},{name:"data-skdx-verification-page-content",frameworks:["webComponents"],exception:"wc-marker",frameworksReason:'Marks a node the element generated for itself rather than one the consumer authored. React, Vue, Svelte and Angular re-render their derived anatomy declaratively, so "mine or theirs" is answered by the framework and no marker is needed.'}],cssCustomProperties:[]},publicMethods:[]};export{o as verificationPageContract};
1
+ import{changeDetail as e}from"./change-reason.js";import{ROOT_DATA_ATTRIBUTES as t}from"./styling-hooks.js";var o={name:"VerificationPage",purpose:"A one-time-code block composing Heading, Text, Alert, Form, Fieldset, PinInput and Button. It collects a code of a fixed length, reports it through a verify event once it is complete, and offers a resend control whose cooldown the consumer owns. Ships in the blocks package of each framework, not the core package.",props:[{name:"title",type:"string",defaultValue:"'Enter your verification code'",required:!1,description:"Heading text, rendered into a derived <h1> that names the section."},{name:"description",type:"string",required:!1,description:"Supporting copy rendered into a derived Text below the title, naming where the code was sent. No description region renders when omitted."},{name:"error",type:"string",required:!1,description:"Message rendered into a derived error Alert above the form. The block never clears it: set it from the verify handler and reset it when the next attempt starts."},{name:"pending",type:"boolean",defaultValue:"false",required:!1,description:"Marks the request in flight, making the submit button busy and unusable while the code boxes stay editable, so the user can still correct a digit."},{name:"codeLabel",type:"string",defaultValue:"'Verification code'",required:!1,description:"Legend of the code fieldset and accessible name of the derived pin input holding the code, so the group of boxes is announced as one control."},{name:"length",type:"number",defaultValue:"6",required:!1,description:"How many character boxes the code is entered into, and how long a complete code is before it may be submitted."},{name:"value",type:"string",required:!1,description:"Current code, for controlled usage; pair it with the value-change event. Uncontrolled, the pin input tracks the code itself."},{name:"defaultValue",type:"string",required:!1,description:"Initial code, for uncontrolled usage \u2014 seeds the boxes on first render and leaves the rest empty."},{name:"submitLabel",type:"string",defaultValue:"'Verify'",required:!1,description:"Text of the form submit button."},{name:"resendLabel",type:"string",defaultValue:"'Resend code'",required:!1,description:"Text of the resend button, which renders only alongside a resend event handler."},{name:"resendDisabled",type:"boolean",defaultValue:"false",required:!1,description:"Makes the resend button unusable, for a consumer running its own cooldown between requests."},{name:"resendHint",type:"string",required:!1,description:"Note rendered beside the resend button, such as how long the cooldown has left. The block runs no timer of its own."},{name:"footer",type:"unknown",required:!1,frameworks:["react","svelte","angular"],exception:"render-prop",frameworksReason:"Vue and Web Components take this as a named slot rather than a prop \u2014 Vue because a renderable region is a slot in Vue's own idiom, Web Components because a custom element attribute carries a string and cannot carry a node. Both slot spellings are declared under `slots`.",description:"Navigation rendered below the resend region, such as a link back to the sign-in page. No footer region renders when omitted. A prop in React, Svelte, and Angular; Vue and Web Components use the `footer` slot."}],events:[{name:"verify",detail:"{ code: string }",description:"Fires when the form is submitted with a code of exactly the declared length, carrying that code. The native submit is prevented, so the consumer performs the check and sets error on failure."},{name:"resend",detail:"void",description:"Fires when the resend button is activated. Handling it is what renders the resend region at all; the cooldown between requests belongs to the consumer."},{name:"value-change",detail:e("string"),description:"Fires with the new code whenever any box changes, controlled or not, so a consumer can mirror the code or clear a stale error."}],slots:[{name:"default",description:"Extra fields rendered inside the form, above the submit button."},{name:"footer",description:"Navigation below the resend region, such as a link back to the sign-in page."}],states:["default"],controlledUncontrolled:"The code is controllable through value with the value-change event, or seeded with defaultValue and tracked by the pin input; error and pending are always controlled by the consumer.",formBehavior:"The form is a core Form root whose pin input submits the joined code as one required entry with a length pattern, so a short code is refused by constraint validation and emits nothing.",validationBehavior:"The code is required and only satisfies its constraint once every box is filled; the block adds no validators and never times the resend cooldown.",accessibility:{role:"region (native <section> named by its heading through aria-labelledby)",keyboard:[{key:"ArrowLeft/ArrowRight",behavior:"Moves between the code boxes, which the pin input wires itself."},{key:"Enter",behavior:"Submits the form while a code box has focus (native form submission)."}],ariaAttributes:["aria-labelledby on the <section> points at the derived heading","the pin input group carries aria-label from codeLabel, so the boxes are announced as one named control","the derived error Alert is a live region, so a new error is announced without moving focus"],focusManagement:"Focus follows the code boxes as the pin input advances them; a refused submit reports through constraint validation rather than a jump of the block's own."},styling:{cssParts:["verification-page","panel","title","description","error","form","field","code","submit","resend","resend-hint","footer"],dataAttributes:[...t,{name:"data-skdx-verification-page-generated",frameworks:["webComponents"],exception:"wc-marker",frameworksReason:'Marks a node the element generated for itself rather than one the consumer authored. React, Vue, Svelte and Angular re-render their derived anatomy declaratively, so "mine or theirs" is answered by the framework and no marker is needed.'},{name:"data-skdx-verification-page-content",frameworks:["webComponents"],exception:"wc-marker",frameworksReason:'Marks a node the element generated for itself rather than one the consumer authored. React, Vue, Svelte and Angular re-render their derived anatomy declaratively, so "mine or theirs" is answered by the framework and no marker is needed.'}],cssCustomProperties:[]},publicMethods:[]};export{o as verificationPageContract};
@@ -1 +1 @@
1
- import{dateToFormValue as c,parseDateFormValue as m}from"./date-segments.js";var g=/^(\d{4,})-(\d{2})$/,p=/^(\d{4,}-\d{2}-\d{2})/,d=!1;function M(){d=!1}function f(e,n){d||(d=!0,console.warn(`[skdx] ${n?`\`${n}\``:"A date property"} was given ${JSON.stringify(e)}, which is not an ISO-8601 date. Expected \`YYYY-MM-DD\`, \`YYYY-MM-DDTHH:mm[:ss]\`, or a bare \`YYYY-MM\` for a month. The value is ignored \u2014 the property behaves as if it had not been supplied \u2014 rather than being coerced to today, to the epoch, or to an \`Invalid Date\` that would then poison every comparison after it.`))}function i(e,n){if(e==null)return null;if(e instanceof Date)return Number.isNaN(e.getTime())?null:e;if(typeof e!="string")return null;let t=e.trim();if(t==="")return null;let r=m(t);if(r!==null){let l=p.exec(t)?.[1];return l!==void 0&&o(r)!==l?(f(t,n),null):r}let a=y(t);return a||(f(t,n),null)}function y(e){let n=g.exec(e);if(!n)return null;let t=Number(n[2])-1;if(t<0||t>11)return null;let r=Number(n[1]),a=new Date(r,t,1);return r<100&&a.setFullYear(r),Number.isNaN(a.getTime())?null:a}function o(e,n="day"){return c(e,n)}function I(e,n,t){if(e===void 0)return;if(e===null)return n==="multiple"?[]:null;if(typeof e=="string"){let l=h(e,t);return s(l,n)}if(Array.isArray(e)){let l=e.map(u=>i(u,t)).filter(u=>u!==null);return s(l,n)}if(e instanceof Date)return s(i(e,t),n);let r=e,a=i(r.start,t);return a===null?n==="multiple"?[]:null:{start:a,end:i(r.end,t)}}function s(e,n){return n!=="multiple"?e:e===null?[]:Array.isArray(e)?e:e instanceof Date?[e]:[]}function h(e,n){let t=e.trim();if(t==="")return null;if(t.includes("/")){let[r="",a=""]=t.split("/"),l=i(r,n);return l===null?null:{start:l,end:a===""?null:i(a,n)}}return t.includes(",")?t.split(",").map(r=>i(r,n)).filter(r=>r!==null):i(t,n)}function Y(e){return e==null?null:Array.isArray(e)?e.length===0?null:e.map(n=>o(n)).join(","):e instanceof Date?o(e):`${o(e.start)}/${e.end===null?"":o(e.end)}`}var N=/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/;function b(e,n){if(e==null)return null;if(e instanceof Date){if(Number.isNaN(e.getTime()))return null;let a=D=>String(D).padStart(2,"0"),l=e.getSeconds(),u=`${a(e.getHours())}:${a(e.getMinutes())}`;return l===0?u:`${u}:${a(l)}`}if(typeof e!="string")return null;let t=e.trim();if(t==="")return null;let r=N.exec(t);return!r||Number(r[1])>23||Number(r[2])>59||r[3]!==void 0&&Number(r[3])>59?(f(t,n),null):t}export{M as resetMalformedDateWarning,Y as toCalendarString,I as toCalendarValue,i as toDate,o as toISODateValue,b as toTimeValue};
1
+ import{dateToFormValue as c,parseDateFormValue as m}from"./date-segments.js";var g=/^(\d{4,})-(\d{2})$/,p=/^(\d{4,}-\d{2}-\d{2})/,y=/^\d{4,}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:?\d{2})$/,s=!1;function M(){s=!1}function f(e,n){s||(s=!0,console.warn(`[skdx] ${n?`\`${n}\``:"A date property"} was given ${JSON.stringify(e)}, which is not an ISO-8601 date. Expected \`YYYY-MM-DD\`, \`YYYY-MM-DDTHH:mm[:ss]\`, an instant with \`Z\` or a \`\xB1HH:mm\` offset, or a bare \`YYYY-MM\` for a month. The value is ignored \u2014 the property behaves as if it had not been supplied \u2014 rather than being coerced to today, to the epoch, or to an \`Invalid Date\` that would then poison every comparison after it.`))}function l(e,n){if(e==null)return null;if(e instanceof Date)return Number.isNaN(e.getTime())?null:e;if(typeof e!="string")return null;let t=e.trim();if(t==="")return null;let r=m(t);if(r!==null){let i=p.exec(t)?.[1];return i!==void 0&&o(r)!==i?(f(t,n),null):r}if(y.test(t)){let i=new Date(t);if(!Number.isNaN(i.getTime()))return i}let a=N(t);return a||(f(t,n),null)}function N(e){let n=g.exec(e);if(!n)return null;let t=Number(n[2])-1;if(t<0||t>11)return null;let r=Number(n[1]),a=new Date(r,t,1);return r<100&&a.setFullYear(r),Number.isNaN(a.getTime())?null:a}function o(e,n="day"){return c(e,n)}function b(e,n,t){if(e===void 0)return;if(e===null)return n==="multiple"?[]:null;if(typeof e=="string"){let i=h(e,t);return d(i,n)}if(Array.isArray(e)){let i=e.map(u=>l(u,t)).filter(u=>u!==null);return d(i,n)}if(e instanceof Date)return d(l(e,t),n);let r=e,a=l(r.start,t);return a===null?n==="multiple"?[]:null:{start:a,end:l(r.end,t)}}function d(e,n){return n!=="multiple"?e:e===null?[]:Array.isArray(e)?e:e instanceof Date?[e]:[]}function h(e,n){let t=e.trim();if(t==="")return null;if(t.includes("/")){let[r="",a=""]=t.split("/"),i=l(r,n);return i===null?null:{start:i,end:a===""?null:l(a,n)}}return t.includes(",")?t.split(",").map(r=>l(r,n)).filter(r=>r!==null):l(t,n)}function Y(e){return e==null?null:Array.isArray(e)?e.length===0?null:e.map(n=>o(n)).join(","):e instanceof Date?o(e):`${o(e.start)}/${e.end===null?"":o(e.end)}`}var I=/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/;function T(e,n){if(e==null)return null;if(e instanceof Date){if(Number.isNaN(e.getTime()))return null;let a=D=>String(D).padStart(2,"0"),i=e.getSeconds(),u=`${a(e.getHours())}:${a(e.getMinutes())}`;return i===0?u:`${u}:${a(i)}`}if(typeof e!="string")return null;let t=e.trim();if(t==="")return null;let r=I.exec(t);return!r||Number(r[1])>23||Number(r[2])>59||r[3]!==void 0&&Number(r[3])>59?(f(t,n),null):t}export{M as resetMalformedDateWarning,Y as toCalendarString,b as toCalendarValue,l as toDate,o as toISODateValue,T as toTimeValue};
@@ -0,0 +1 @@
1
+ export declare function activateLabelledButton(label: HTMLElement, event: Event): void;
@@ -0,0 +1 @@
1
+ var l='a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])',i="radio, checkbox, switch, menuitemcheckbox, menuitemradio",u='button, [role="radio"], [role="checkbox"], [role="switch"]';function s(t){let e=t instanceof HTMLButtonElement||i.split(", ").includes(t.getAttribute("role")??"")?t:t.querySelector(u);return!(e instanceof HTMLElement)||e instanceof HTMLInputElement||e.disabled||e.getAttribute("aria-disabled")==="true"?null:e}function a(t,n){let e=`#${CSS.escape(n)}`;for(let o=t.parentElement;o;o=o.parentElement){let r=o.querySelector(e);if(r)return r}return t.getRootNode().getElementById(n)}function f(t,n){if(n.defaultPrevented)return;let e=t.getAttribute("for");if(!e)return;let o=n.target instanceof Element?n.target:null;if(o&&o!==t&&o.closest(l)!==t.closest(l))return;let r=a(t,e),c=r&&s(r);c&&(n.preventDefault(),c.focus(),c.click())}export{f as activateLabelledButton};
@@ -6,3 +6,12 @@ export declare const TABBABLE_SELECTOR: string;
6
6
  * small subtrees only in the DOM while open.
7
7
  */
8
8
  export declare function tabbablesWithin(container: Element): HTMLElement[];
9
+ /**
10
+ * Keeps Tab cycling inside `container` while it is the modal surface: Tab from the last tabbable
11
+ * lands on the first and Shift+Tab from the first on the last. A native `showModal()` leaves the
12
+ * loop through the browser chrome instead, which assistive technology reads as focus escaping.
13
+ *
14
+ * @param container the modal surface, typically the open `<dialog>`
15
+ * @param event the keydown to act on; anything but an unhandled Tab is ignored
16
+ */
17
+ export declare function wrapTabWithin(container: Element, event: KeyboardEvent): void;
@@ -1 +1 @@
1
- var e=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");function n(t){return Array.from(t.querySelectorAll(e))}export{e as TABBABLE_SELECTOR,n as tabbablesWithin};
1
+ var r=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");function d(e){return Array.from(e.querySelectorAll("*")).filter(t=>t.matches(r)||t.shadowRoot?.delegatesFocus===!0)}function u(e,t){if(t.key!=="Tab"||t.defaultPrevented)return;let o=d(e);if(o.length===0){t.preventDefault();return}let a=o[0],s=o[o.length-1],n=document.activeElement,i=n===null||n===e||!e.contains(n),l=t.shiftKey?n===a:n===s;!i&&!l||(t.preventDefault(),(t.shiftKey?s:a).focus())}export{r as TABBABLE_SELECTOR,d as tabbablesWithin,u as wrapTabWithin};
@@ -44,7 +44,6 @@ export { chatComposerContract } from './contracts/chat-composer.js';
44
44
  export { chatMessageContract } from './contracts/chat-message.js';
45
45
  export { commentContract } from './contracts/comment.js';
46
46
  export { commentThreadContract } from './contracts/comment-thread.js';
47
- export { confirmDialogContract } from './contracts/confirm-dialog.js';
48
47
  export { conversationListContract } from './contracts/conversation-list.js';
49
48
  export { filterBarContract } from './contracts/filter-bar.js';
50
49
  export { formSectionContract } from './contracts/form-section.js';
@@ -1 +1 @@
1
- import{CONTRACTS as r}from"./contracts/index.js";import{memberId as a,contractMemberIds as n,ROOT_PART as c}from"./contracts/member-id.js";import{CHANGE_REASONS as m,changeDescription as C,changeDetail as f}from"./contracts/change-reason.js";import{AS_PROP_DESCRIPTION as i,POLYMORPHIC_TAGS as s}from"./contracts/polymorphic.js";import{VIRTUAL_FOCUS_RULE as d}from"./contracts/rules.js";import{DATE_CHANGE_VALUE_TYPE as E,DATE_INPUT_RULE as T,DATE_MALFORMED_RULE as b,DATE_OUTPUT_RULE as u,DATE_PARSE_RULE as A}from"./contracts/date-value.js";import{SELECTION_ATTRIBUTE_RULE as R,SELECTION_INPUT_RULE as _,SELECTION_OUTPUT_RULE as S}from"./contracts/selection-value.js";import{nextSelection as U,parseSelectionAttribute as h,sameSelection as I,selectedValueOf as O,toSelectionValues as L,toValues as M}from"./core/selection.js";import{caretAnchor as D,DEFAULT_MENTION_TRIGGER as N,findMentionToken as w,insertMention as F,isMentionDismissed as G}from"./core/mentions.js";import{buttonContract as V}from"./contracts/button.js";import{checkboxContract as B}from"./contracts/checkbox.js";import{checkboxGroupContract as Y}from"./contracts/checkbox-group.js";import{switchContract as z}from"./contracts/switch.js";import{alertContract as J}from"./contracts/alert.js";import{badgeContract as W}from"./contracts/badge.js";import{textContract as Z}from"./contracts/text.js";import{headingContract as tt}from"./contracts/heading.js";import{timeContract as rt}from"./contracts/time.js";import{tabsContract as at}from"./contracts/tabs.js";import{textFieldContract as ct}from"./contracts/text-field.js";import{listboxContract as mt}from"./contracts/listbox.js";import{selectContract as ft}from"./contracts/select.js";import{dialogContract as it}from"./contracts/dialog.js";import{drawerContract as lt}from"./contracts/drawer.js";import{labelContract as gt}from"./contracts/label.js";import{dividerContract as Tt}from"./contracts/divider.js";import{boxContract as ut}from"./contracts/box.js";import{listContract as Pt}from"./contracts/list.js";import{linkContract as _t}from"./contracts/link.js";import{imageContract as yt}from"./contracts/image.js";import{kbdContract as ht}from"./contracts/kbd.js";import{skeletonContract as Ot}from"./contracts/skeleton.js";import{spinnerContract as Mt}from"./contracts/spinner.js";import{avatarContract as Dt}from"./contracts/avatar.js";import{progressContract as wt}from"./contracts/progress.js";import{cardContract as Gt}from"./contracts/card.js";import{dashboardLayoutContract as Vt}from"./contracts/dashboard-layout.js";import{pageContainerContract as Bt}from"./contracts/page-container.js";import{signInPageContract as Yt}from"./contracts/sign-in-page.js";import{emptyStateContract as zt}from"./contracts/empty-state.js";import{statCardContract as Jt}from"./contracts/stat-card.js";import{chatComposerContract as Wt}from"./contracts/chat-composer.js";import{chatMessageContract as Zt}from"./contracts/chat-message.js";import{commentContract as to}from"./contracts/comment.js";import{commentThreadContract as ro}from"./contracts/comment-thread.js";import{confirmDialogContract as ao}from"./contracts/confirm-dialog.js";import{conversationListContract as co}from"./contracts/conversation-list.js";import{filterBarContract as mo}from"./contracts/filter-bar.js";import{formSectionContract as fo}from"./contracts/form-section.js";import{notificationCenterContract as io}from"./contracts/notification-center.js";import{onboardingChecklistContract as lo}from"./contracts/onboarding-checklist.js";import{usageCardContract as Eo}from"./contracts/usage-card.js";import{userMenuContract as bo}from"./contracts/user-menu.js";import{workspaceSwitcherContract as Ao}from"./contracts/workspace-switcher.js";import{signUpPageContract as Ro}from"./contracts/sign-up-page.js";import{forgotPasswordPageContract as So}from"./contracts/forgot-password-page.js";import{resetPasswordPageContract as Uo}from"./contracts/reset-password-page.js";import{verificationPageContract as Io}from"./contracts/verification-page.js";import{splitButtonContract as Lo}from"./contracts/split-button.js";import{aspectRatioContract as ko}from"./contracts/aspect-ratio.js";import{toggleContract as No}from"./contracts/toggle.js";import{toggleGroupContract as Fo}from"./contracts/toggle-group.js";import{radioGroupContract as vo}from"./contracts/radio-group.js";import{textareaContract as Ho}from"./contracts/textarea.js";import{numberFieldContract as Ko}from"./contracts/number-field.js";import{dateFieldContract as qo}from"./contracts/date-field.js";import{timeFieldContract as jo}from"./contracts/time-field.js";import{formContract as Qo}from"./contracts/form.js";import{fieldContract as Xo}from"./contracts/field.js";import{ratingContract as $o}from"./contracts/rating.js";import{pinInputContract as or}from"./contracts/pin-input.js";import{tagsInputContract as er}from"./contracts/tags-input.js";import{tagGroupContract as nr}from"./contracts/tag-group.js";import{fileUploadContract as pr}from"./contracts/file-upload.js";import{sliderContract as Cr}from"./contracts/slider.js";import{collapsibleContract as xr}from"./contracts/collapsible.js";import{accordionContract as sr}from"./contracts/accordion.js";import{navigationMenuContract as dr}from"./contracts/navigation-menu.js";import{paginationContract as Er}from"./contracts/pagination.js";import{toolbarContract as br}from"./contracts/toolbar.js";import{breadcrumbContract as Ar}from"./contracts/breadcrumb.js";import{tableContract as Rr}from"./contracts/table.js";import{timelineContract as Sr}from"./contracts/timeline.js";import{stepperContract as Ur}from"./contracts/stepper.js";import{calendarContract as Ir}from"./contracts/calendar.js";import{treeContract as Lr}from"./contracts/tree.js";import{popoverContract as kr}from"./contracts/popover.js";import{menuContract as Nr}from"./contracts/menu.js";import{menubarContract as Fr}from"./contracts/menubar.js";import{toastContract as vr}from"./contracts/toast.js";import{comboboxContract as Hr}from"./contracts/combobox.js";import{commandContract as Kr}from"./contracts/command.js";import{datePickerContract as qr}from"./contracts/date-picker.js";import{scrollAreaContract as jr}from"./contracts/scroll-area.js";import{resizableContract as Qr}from"./contracts/resizable.js";import{carouselContract as Xr}from"./contracts/carousel.js";import{angleSliderContract as $r}from"./contracts/angle-slider.js";import{autocompleteContract as oe}from"./contracts/autocomplete.js";import{checkboxCardContract as ee}from"./contracts/checkbox-card.js";import{clipboardContract as ne}from"./contracts/clipboard.js";import{colorPickerContract as pe}from"./contracts/color-picker.js";import{editableContract as Ce}from"./contracts/editable.js";import{loadingOverlayContract as xe}from"./contracts/loading-overlay.js";import{passwordInputContract as se}from"./contracts/password-input.js";import{qrCodeContract as de}from"./contracts/qr-code.js";import{radioCardContract as Ee}from"./contracts/radio-card.js";import{floatingPanelContract as be}from"./contracts/floating-panel.js";import{speedDialContract as Ae}from"./contracts/speed-dial.js";import{tourContract as Re}from"./contracts/tour.js";import{transferContract as Se}from"./contracts/transfer.js";import{treeSelectContract as Ue}from"./contracts/tree-select.js";import{mentionsContract as Ie}from"./contracts/mentions.js";export{i as AS_PROP_DESCRIPTION,m as CHANGE_REASONS,r as CONTRACTS,E as DATE_CHANGE_VALUE_TYPE,T as DATE_INPUT_RULE,b as DATE_MALFORMED_RULE,u as DATE_OUTPUT_RULE,A as DATE_PARSE_RULE,N as DEFAULT_MENTION_TRIGGER,s as POLYMORPHIC_TAGS,c as ROOT_PART,R as SELECTION_ATTRIBUTE_RULE,_ as SELECTION_INPUT_RULE,S as SELECTION_OUTPUT_RULE,d as VIRTUAL_FOCUS_RULE,sr as accordionContract,J as alertContract,$r as angleSliderContract,ko as aspectRatioContract,oe as autocompleteContract,Dt as avatarContract,W as badgeContract,ut as boxContract,Ar as breadcrumbContract,V as buttonContract,Ir as calendarContract,Gt as cardContract,D as caretAnchor,Xr as carouselContract,C as changeDescription,f as changeDetail,Wt as chatComposerContract,Zt as chatMessageContract,ee as checkboxCardContract,B as checkboxContract,Y as checkboxGroupContract,ne as clipboardContract,xr as collapsibleContract,pe as colorPickerContract,Hr as comboboxContract,Kr as commandContract,to as commentContract,ro as commentThreadContract,ao as confirmDialogContract,n as contractMemberIds,co as conversationListContract,Vt as dashboardLayoutContract,qo as dateFieldContract,qr as datePickerContract,it as dialogContract,Tt as dividerContract,lt as drawerContract,Ce as editableContract,zt as emptyStateContract,Xo as fieldContract,pr as fileUploadContract,mo as filterBarContract,w as findMentionToken,be as floatingPanelContract,So as forgotPasswordPageContract,Qo as formContract,fo as formSectionContract,tt as headingContract,yt as imageContract,F as insertMention,G as isMentionDismissed,ht as kbdContract,gt as labelContract,_t as linkContract,Pt as listContract,mt as listboxContract,xe as loadingOverlayContract,a as memberId,Ie as mentionsContract,Nr as menuContract,Fr as menubarContract,dr as navigationMenuContract,U as nextSelection,io as notificationCenterContract,Ko as numberFieldContract,lo as onboardingChecklistContract,Bt as pageContainerContract,Er as paginationContract,h as parseSelectionAttribute,se as passwordInputContract,or as pinInputContract,kr as popoverContract,wt as progressContract,de as qrCodeContract,Ee as radioCardContract,vo as radioGroupContract,$o as ratingContract,Uo as resetPasswordPageContract,Qr as resizableContract,I as sameSelection,jr as scrollAreaContract,ft as selectContract,O as selectedValueOf,Yt as signInPageContract,Ro as signUpPageContract,Ot as skeletonContract,Cr as sliderContract,Ae as speedDialContract,Mt as spinnerContract,Lo as splitButtonContract,Jt as statCardContract,Ur as stepperContract,z as switchContract,Rr as tableContract,at as tabsContract,nr as tagGroupContract,er as tagsInputContract,Z as textContract,ct as textFieldContract,Ho as textareaContract,rt as timeContract,jo as timeFieldContract,Sr as timelineContract,L as toSelectionValues,M as toValues,vr as toastContract,No as toggleContract,Fo as toggleGroupContract,br as toolbarContract,Re as tourContract,Se as transferContract,Lr as treeContract,Ue as treeSelectContract,Eo as usageCardContract,bo as userMenuContract,Io as verificationPageContract,Ao as workspaceSwitcherContract};
1
+ import{CONTRACTS as r}from"./contracts/index.js";import{memberId as a,contractMemberIds as n,ROOT_PART as c}from"./contracts/member-id.js";import{CHANGE_REASONS as m,changeDescription as C,changeDetail as f}from"./contracts/change-reason.js";import{AS_PROP_DESCRIPTION as i,POLYMORPHIC_TAGS as s}from"./contracts/polymorphic.js";import{VIRTUAL_FOCUS_RULE as d}from"./contracts/rules.js";import{DATE_CHANGE_VALUE_TYPE as E,DATE_INPUT_RULE as T,DATE_MALFORMED_RULE as b,DATE_OUTPUT_RULE as u,DATE_PARSE_RULE as A}from"./contracts/date-value.js";import{SELECTION_ATTRIBUTE_RULE as R,SELECTION_INPUT_RULE as _,SELECTION_OUTPUT_RULE as S}from"./contracts/selection-value.js";import{nextSelection as U,parseSelectionAttribute as h,sameSelection as I,selectedValueOf as O,toSelectionValues as L,toValues as M}from"./core/selection.js";import{caretAnchor as D,DEFAULT_MENTION_TRIGGER as N,findMentionToken as w,insertMention as F,isMentionDismissed as G}from"./core/mentions.js";import{buttonContract as V}from"./contracts/button.js";import{checkboxContract as B}from"./contracts/checkbox.js";import{checkboxGroupContract as Y}from"./contracts/checkbox-group.js";import{switchContract as z}from"./contracts/switch.js";import{alertContract as J}from"./contracts/alert.js";import{badgeContract as W}from"./contracts/badge.js";import{textContract as Z}from"./contracts/text.js";import{headingContract as tt}from"./contracts/heading.js";import{timeContract as rt}from"./contracts/time.js";import{tabsContract as at}from"./contracts/tabs.js";import{textFieldContract as ct}from"./contracts/text-field.js";import{listboxContract as mt}from"./contracts/listbox.js";import{selectContract as ft}from"./contracts/select.js";import{dialogContract as it}from"./contracts/dialog.js";import{drawerContract as lt}from"./contracts/drawer.js";import{labelContract as gt}from"./contracts/label.js";import{dividerContract as Tt}from"./contracts/divider.js";import{boxContract as ut}from"./contracts/box.js";import{listContract as Pt}from"./contracts/list.js";import{linkContract as _t}from"./contracts/link.js";import{imageContract as yt}from"./contracts/image.js";import{kbdContract as ht}from"./contracts/kbd.js";import{skeletonContract as Ot}from"./contracts/skeleton.js";import{spinnerContract as Mt}from"./contracts/spinner.js";import{avatarContract as Dt}from"./contracts/avatar.js";import{progressContract as wt}from"./contracts/progress.js";import{cardContract as Gt}from"./contracts/card.js";import{dashboardLayoutContract as Vt}from"./contracts/dashboard-layout.js";import{pageContainerContract as Bt}from"./contracts/page-container.js";import{signInPageContract as Yt}from"./contracts/sign-in-page.js";import{emptyStateContract as zt}from"./contracts/empty-state.js";import{statCardContract as Jt}from"./contracts/stat-card.js";import{chatComposerContract as Wt}from"./contracts/chat-composer.js";import{chatMessageContract as Zt}from"./contracts/chat-message.js";import{commentContract as to}from"./contracts/comment.js";import{commentThreadContract as ro}from"./contracts/comment-thread.js";import{conversationListContract as ao}from"./contracts/conversation-list.js";import{filterBarContract as co}from"./contracts/filter-bar.js";import{formSectionContract as mo}from"./contracts/form-section.js";import{notificationCenterContract as fo}from"./contracts/notification-center.js";import{onboardingChecklistContract as io}from"./contracts/onboarding-checklist.js";import{usageCardContract as lo}from"./contracts/usage-card.js";import{userMenuContract as Eo}from"./contracts/user-menu.js";import{workspaceSwitcherContract as bo}from"./contracts/workspace-switcher.js";import{signUpPageContract as Ao}from"./contracts/sign-up-page.js";import{forgotPasswordPageContract as Ro}from"./contracts/forgot-password-page.js";import{resetPasswordPageContract as So}from"./contracts/reset-password-page.js";import{verificationPageContract as Uo}from"./contracts/verification-page.js";import{splitButtonContract as Io}from"./contracts/split-button.js";import{aspectRatioContract as Lo}from"./contracts/aspect-ratio.js";import{toggleContract as ko}from"./contracts/toggle.js";import{toggleGroupContract as No}from"./contracts/toggle-group.js";import{radioGroupContract as Fo}from"./contracts/radio-group.js";import{textareaContract as vo}from"./contracts/textarea.js";import{numberFieldContract as Ho}from"./contracts/number-field.js";import{dateFieldContract as Ko}from"./contracts/date-field.js";import{timeFieldContract as qo}from"./contracts/time-field.js";import{formContract as jo}from"./contracts/form.js";import{fieldContract as Qo}from"./contracts/field.js";import{ratingContract as Xo}from"./contracts/rating.js";import{pinInputContract as $o}from"./contracts/pin-input.js";import{tagsInputContract as or}from"./contracts/tags-input.js";import{tagGroupContract as er}from"./contracts/tag-group.js";import{fileUploadContract as nr}from"./contracts/file-upload.js";import{sliderContract as pr}from"./contracts/slider.js";import{collapsibleContract as Cr}from"./contracts/collapsible.js";import{accordionContract as xr}from"./contracts/accordion.js";import{navigationMenuContract as sr}from"./contracts/navigation-menu.js";import{paginationContract as dr}from"./contracts/pagination.js";import{toolbarContract as Er}from"./contracts/toolbar.js";import{breadcrumbContract as br}from"./contracts/breadcrumb.js";import{tableContract as Ar}from"./contracts/table.js";import{timelineContract as Rr}from"./contracts/timeline.js";import{stepperContract as Sr}from"./contracts/stepper.js";import{calendarContract as Ur}from"./contracts/calendar.js";import{treeContract as Ir}from"./contracts/tree.js";import{popoverContract as Lr}from"./contracts/popover.js";import{menuContract as kr}from"./contracts/menu.js";import{menubarContract as Nr}from"./contracts/menubar.js";import{toastContract as Fr}from"./contracts/toast.js";import{comboboxContract as vr}from"./contracts/combobox.js";import{commandContract as Hr}from"./contracts/command.js";import{datePickerContract as Kr}from"./contracts/date-picker.js";import{scrollAreaContract as qr}from"./contracts/scroll-area.js";import{resizableContract as jr}from"./contracts/resizable.js";import{carouselContract as Qr}from"./contracts/carousel.js";import{angleSliderContract as Xr}from"./contracts/angle-slider.js";import{autocompleteContract as $r}from"./contracts/autocomplete.js";import{checkboxCardContract as oe}from"./contracts/checkbox-card.js";import{clipboardContract as ee}from"./contracts/clipboard.js";import{colorPickerContract as ne}from"./contracts/color-picker.js";import{editableContract as pe}from"./contracts/editable.js";import{loadingOverlayContract as Ce}from"./contracts/loading-overlay.js";import{passwordInputContract as xe}from"./contracts/password-input.js";import{qrCodeContract as se}from"./contracts/qr-code.js";import{radioCardContract as de}from"./contracts/radio-card.js";import{floatingPanelContract as Ee}from"./contracts/floating-panel.js";import{speedDialContract as be}from"./contracts/speed-dial.js";import{tourContract as Ae}from"./contracts/tour.js";import{transferContract as Re}from"./contracts/transfer.js";import{treeSelectContract as Se}from"./contracts/tree-select.js";import{mentionsContract as Ue}from"./contracts/mentions.js";export{i as AS_PROP_DESCRIPTION,m as CHANGE_REASONS,r as CONTRACTS,E as DATE_CHANGE_VALUE_TYPE,T as DATE_INPUT_RULE,b as DATE_MALFORMED_RULE,u as DATE_OUTPUT_RULE,A as DATE_PARSE_RULE,N as DEFAULT_MENTION_TRIGGER,s as POLYMORPHIC_TAGS,c as ROOT_PART,R as SELECTION_ATTRIBUTE_RULE,_ as SELECTION_INPUT_RULE,S as SELECTION_OUTPUT_RULE,d as VIRTUAL_FOCUS_RULE,xr as accordionContract,J as alertContract,Xr as angleSliderContract,Lo as aspectRatioContract,$r as autocompleteContract,Dt as avatarContract,W as badgeContract,ut as boxContract,br as breadcrumbContract,V as buttonContract,Ur as calendarContract,Gt as cardContract,D as caretAnchor,Qr as carouselContract,C as changeDescription,f as changeDetail,Wt as chatComposerContract,Zt as chatMessageContract,oe as checkboxCardContract,B as checkboxContract,Y as checkboxGroupContract,ee as clipboardContract,Cr as collapsibleContract,ne as colorPickerContract,vr as comboboxContract,Hr as commandContract,to as commentContract,ro as commentThreadContract,n as contractMemberIds,ao as conversationListContract,Vt as dashboardLayoutContract,Ko as dateFieldContract,Kr as datePickerContract,it as dialogContract,Tt as dividerContract,lt as drawerContract,pe as editableContract,zt as emptyStateContract,Qo as fieldContract,nr as fileUploadContract,co as filterBarContract,w as findMentionToken,Ee as floatingPanelContract,Ro as forgotPasswordPageContract,jo as formContract,mo as formSectionContract,tt as headingContract,yt as imageContract,F as insertMention,G as isMentionDismissed,ht as kbdContract,gt as labelContract,_t as linkContract,Pt as listContract,mt as listboxContract,Ce as loadingOverlayContract,a as memberId,Ue as mentionsContract,kr as menuContract,Nr as menubarContract,sr as navigationMenuContract,U as nextSelection,fo as notificationCenterContract,Ho as numberFieldContract,io as onboardingChecklistContract,Bt as pageContainerContract,dr as paginationContract,h as parseSelectionAttribute,xe as passwordInputContract,$o as pinInputContract,Lr as popoverContract,wt as progressContract,se as qrCodeContract,de as radioCardContract,Fo as radioGroupContract,Xo as ratingContract,So as resetPasswordPageContract,jr as resizableContract,I as sameSelection,qr as scrollAreaContract,ft as selectContract,O as selectedValueOf,Yt as signInPageContract,Ao as signUpPageContract,Ot as skeletonContract,pr as sliderContract,be as speedDialContract,Mt as spinnerContract,Io as splitButtonContract,Jt as statCardContract,Sr as stepperContract,z as switchContract,Ar as tableContract,at as tabsContract,er as tagGroupContract,or as tagsInputContract,Z as textContract,ct as textFieldContract,vo as textareaContract,rt as timeContract,qo as timeFieldContract,Rr as timelineContract,L as toSelectionValues,M as toValues,Fr as toastContract,ko as toggleContract,No as toggleGroupContract,Er as toolbarContract,Ae as tourContract,Re as transferContract,Ir as treeContract,Se as treeSelectContract,lo as usageCardContract,Eo as userMenuContract,Uo as verificationPageContract,bo as workspaceSwitcherContract};
@@ -79,6 +79,7 @@
79
79
  --skdx-border-width-thick: 2px;
80
80
  --skdx-border-width-thicker: 4px;
81
81
  --skdx-opacity-disabled: 0.5;
82
+ --skdx-opacity-muted: 0.7;
82
83
  --skdx-opacity-scrim: 0.6;
83
84
  --skdx-control-height-sm: 1.875rem;
84
85
  --skdx-control-height-md: 2.25rem;
@@ -75,8 +75,9 @@
75
75
  text-align: center;
76
76
  }
77
77
 
78
+ /* Muted, not disabled: the text is still meant to be read while the send is in flight. */
78
79
  :where(.skdx-chat-message)[data-status='pending'] :where(.skdx-chat-message__content) {
79
- opacity: var(--skdx-opacity-disabled);
80
+ opacity: var(--skdx-opacity-muted);
80
81
  }
81
82
 
82
83
  :where(.skdx-chat-message__attachments) {
@@ -52,6 +52,12 @@
52
52
  color: var(--skdx-color-text-muted);
53
53
  }
54
54
 
55
+ /* A composition that gives the content a display of its own (CommentThread's replies are a
56
+ flex column) outranks the element's `[hidden]` on origin alone. */
57
+ :where(.skdx-collapsible__content)[hidden]:not([hidden='until-found']) {
58
+ display: none;
59
+ }
60
+
55
61
  :where(.skdx-collapsible__indicator) {
56
62
  display: inline-flex;
57
63
  color: var(--skdx-color-text-muted);
@@ -67,6 +67,11 @@
67
67
  inline-size: 100%;
68
68
  }
69
69
 
70
+ /* Angular projects into the region unconditionally; empty, it must not cost a gap. */
71
+ :where(.skdx-empty-state__content):empty {
72
+ display: none;
73
+ }
74
+
70
75
  :where(.skdx-empty-state__actions) {
71
76
  display: flex;
72
77
  flex-wrap: wrap;
@@ -19,6 +19,17 @@
19
19
  min-inline-size: 0;
20
20
  }
21
21
 
22
+ /* A grouping Field is a <fieldset>; the UA's box and legend inset are not the skin's. */
23
+ :where(fieldset.skdx-field) {
24
+ padding: 0;
25
+ border: 0;
26
+ min-inline-size: 0;
27
+ }
28
+
29
+ :where(legend.skdx-field__label) {
30
+ padding: 0;
31
+ }
32
+
22
33
  :where(.skdx-field)[data-orientation='horizontal'] {
23
34
  flex-direction: row;
24
35
  align-items: center;
@@ -29,6 +29,11 @@
29
29
  min-inline-size: 0;
30
30
  }
31
31
 
32
+ /* Angular projects into the region unconditionally; empty, it must not cost a gap. */
33
+ :where(.skdx-filter-bar__filters):empty {
34
+ display: none;
35
+ }
36
+
32
37
  :where(.skdx-filter-bar__actions) {
33
38
  display: flex;
34
39
  align-items: center;
@@ -54,9 +54,15 @@
54
54
  gap: var(--skdx-space-3);
55
55
  }
56
56
 
57
- :where(.skdx-onboarding-checklist__item)[data-state='disabled'] {
57
+ /* The indicator and action fade as disabled controls; the title stays readable text, muted. */
58
+ :where(.skdx-onboarding-checklist__item)[data-state='disabled']
59
+ :where(.skdx-onboarding-checklist__indicator, .skdx-onboarding-checklist__action) {
58
60
  opacity: var(--skdx-opacity-disabled);
59
61
  }
62
+ :where(.skdx-onboarding-checklist__item)[data-state='disabled']
63
+ :where(.skdx-onboarding-checklist__item-title) {
64
+ color: var(--skdx-color-text-muted);
65
+ }
60
66
 
61
67
  :where(.skdx-onboarding-checklist__indicator) {
62
68
  position: relative;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skdx/docs-kit",
3
- "version": "0.35.0",
3
+ "version": "0.37.0",
4
4
  "description": "Build-time toolkit for the SKDX documentation site: the shared contracts, the framework table, generated manifests and the source files the docs measure. Not a public API — no semver guarantees, may change in any release.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/SkandaDX/ui.skdx/tree/main/internal/docs-kit#readme",
@@ -36,19 +36,19 @@
36
36
  "access": "public"
37
37
  },
38
38
  "devDependencies": {
39
- "@skdx/angular": "0.35.0",
40
- "@skdx/angular-blocks": "0.35.0",
41
- "@skdx/react-blocks": "0.35.0",
42
- "@skdx/shared": "0.35.0",
43
- "@skdx/svelte": "0.35.0",
44
- "@skdx/react": "0.35.0",
45
- "@skdx/vue": "0.35.0",
46
- "@skdx/skins": "0.35.0",
47
- "@skdx/vue-blocks": "0.35.0",
48
- "@skdx/tokens": "0.35.0",
49
- "@skdx/web-components": "0.35.0",
50
- "@skdx/svelte-blocks": "0.35.0",
51
- "@skdx/web-components-blocks": "0.35.0"
39
+ "@skdx/angular": "0.37.0",
40
+ "@skdx/angular-blocks": "0.37.0",
41
+ "@skdx/react": "0.37.0",
42
+ "@skdx/react-blocks": "0.37.0",
43
+ "@skdx/shared": "0.37.0",
44
+ "@skdx/skins": "0.37.0",
45
+ "@skdx/svelte-blocks": "0.37.0",
46
+ "@skdx/tokens": "0.37.0",
47
+ "@skdx/svelte": "0.37.0",
48
+ "@skdx/vue": "0.37.0",
49
+ "@skdx/vue-blocks": "0.37.0",
50
+ "@skdx/web-components": "0.37.0",
51
+ "@skdx/web-components-blocks": "0.37.0"
52
52
  },
53
53
  "nx": {
54
54
  "targets": {
@@ -1,3 +0,0 @@
1
- import type { ComponentContract } from './types.js';
2
- /** Contract for the ConfirmDialog block: an alert dialog with a pending state for a confirmed request in flight. */
3
- export declare const confirmDialogContract: ComponentContract;
@@ -1 +0,0 @@
1
- import{autoFocusEvents as e,dismissalEvents as t,openChangeCompleteEvent as n}from"./overlay-parts.js";import{ROOT_DATA_ATTRIBUTES as o}from"./styling-hooks.js";var r={name:"ConfirmDialog",purpose:"A confirmation dialog block composing the core DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogCancel, DialogAction and Button as an alert dialog for a destructive, irreversible or sensitive action. Adds an externally controlled pending state that disables both buttons and blocks dismissal while the confirmed request is in flight, and a destructive switch that colours the confirm button and the panel. Ships in the blocks package of each framework, not the core package.",props:[{name:"open",type:"boolean",required:!1,description:"Whether the dialog is open, for controlled usage."},{name:"defaultOpen",type:"boolean",defaultValue:"false",required:!1,description:"Whether the dialog starts open, for uncontrolled usage."},{name:"trigger",type:"unknown",required:!1,frameworks:["react","svelte","angular"],exception:"render-prop",frameworksReason:"Vue and Web Components take this as a named slot rather than a prop \u2014 Vue because a renderable region is a slot in Vue's own idiom, Web Components because a custom element attribute carries a string and cannot carry a node. Both slot spellings are declared under `slots`.",description:"Element that opens the dialog, decorated with the trigger behavior. No trigger renders when omitted, and the dialog opens only through `open`/`onOpenChange`. A prop in React, Svelte, and Angular; Vue and Web Components use the `trigger` slot."},{name:"title",type:"string",required:!0,description:"Heading text rendered into the panel's title, naming and labelling the dialog."},{name:"description",type:"string",required:!1,description:"Supporting sentence rendered into the panel's description, read alongside the title. No description region renders when omitted."},{name:"confirmLabel",type:"string",defaultValue:"'Confirm'",required:!1,description:"Text of the button that carries out the confirmed action."},{name:"cancelLabel",type:"string",defaultValue:"'Cancel'",required:!1,description:"Text of the button that abandons the action."},{name:"destructive",type:"boolean",defaultValue:"false",required:!1,description:'Renders the confirm button in the danger weight and marks the panel data-status="danger", for an irreversible or destructive action.'},{name:"pending",type:"boolean",defaultValue:"false",required:!1,description:"Marks the confirmed request as in flight: disables both buttons, renders the confirm button loading, and blocks Escape dismissal until it clears."},{name:"disabled",type:"boolean",defaultValue:"false",required:!1,description:"Disables the confirm button on its own, independent of pending, for example until a typed confirmation matches."},{name:"size",type:"'sm' | 'md' | 'lg' | string",required:!1,description:"Panel width rung, fed to the underlying dialog panel; the skin's own default width when omitted."}],events:[...t("dialog",{outsideDismisses:!1,outsideNote:"An alert dialog demands an explicit choice, so outside interaction never closes it; while pending, Escape is withheld as well."}),...e("dialog"),n("dialog"),{name:"open-change",detail:"boolean",description:"Fires with the new open state whenever the dialog opens or closes, controlled or not."},{name:"confirm",detail:"MouseEvent",description:"Fires when the confirm button is activated, before the dialog closes. Calling preventDefault() on the event holds the panel open, typically paired with pending for an async confirmation."},{name:"cancel",detail:"MouseEvent",description:"Fires when the cancel button is activated, before the dialog closes. Calling preventDefault() on the event keeps the panel open."}],slots:[{name:"default",description:"Extra content rendered between the description and the footer buttons."},{name:"trigger",description:"Element that opens the dialog, decorated with the trigger behavior."}],states:["default"],controlledUncontrolled:"Open state works controlled through open/onOpenChange or uncontrolled through defaultOpen. pending is always controlled by the consumer, driving the dismiss policy and both buttons.",formBehavior:"Not applicable \u2014 ConfirmDialog participates in no form.",validationBehavior:"Not applicable \u2014 ConfirmDialog carries no value and participates in no validation.",accessibility:{role:"alertdialog (from the core DialogContent; modal, named by its title, described by its description)",keyboard:[{key:"Escape",behavior:"Closes the dialog unless pending is true."},{key:"Tab",behavior:"Cycles focus between the cancel and confirm buttons and any content in between."},{key:"Enter/Space",behavior:"Activates the focused button."}],ariaAttributes:['role="alertdialog" and aria-modal="true" on the panel, from the core DialogContent',"aria-labelledby points at the title and aria-describedby at the description, both wired automatically once each part mounts"],focusManagement:"The core alert dialog focuses the cancel button on open (the least destructive choice) and returns focus to the trigger on close."},styling:{cssParts:["confirm-dialog","title","description","body","footer","cancel","confirm"],dataAttributes:[...o,{name:"data-skdx-confirm-dialog-generated",frameworks:["webComponents"],exception:"wc-marker",frameworksReason:'Marks a node the element generated for itself rather than one the consumer authored. React, Vue, Svelte and Angular re-render their derived anatomy declaratively, so "mine or theirs" is answered by the framework and no marker is needed.'},"data-variant","data-loading","data-status"],cssCustomProperties:[]},publicMethods:[]};export{r as confirmDialogContract};
@@ -1,43 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 SkandaDX
3
- * This file is part of the SkandaDX organization.
4
- * Licensed under the MIT License. See LICENSE in the repository root.
5
- */
6
-
7
- @import '../base.css';
8
-
9
- /** ConfirmDialog — an alert dialog panel with a body region and a cancel/confirm footer. */
10
- @layer skdx-components {
11
- :where(.skdx-confirm-dialog__body) {
12
- min-inline-size: 0;
13
- margin-block-start: var(--skdx-space-3);
14
- overflow-wrap: anywhere;
15
- }
16
-
17
- :where(.skdx-confirm-dialog__footer) {
18
- display: flex;
19
- flex-wrap: wrap;
20
- justify-content: flex-end;
21
- gap: var(--skdx-space-2);
22
- margin-block-start: var(--skdx-space-4);
23
- }
24
-
25
- /* Narrow viewports: a two-button end-aligned row gets cramped, so the
26
- footer stacks and each button spans the panel, keeping DOM order (cancel
27
- then confirm) so tab order and reading order stay unchanged. */
28
- @media (max-width: 30rem) {
29
- :where(.skdx-confirm-dialog__footer) {
30
- flex-direction: column;
31
- }
32
-
33
- :where(.skdx-confirm-dialog__cancel),
34
- :where(.skdx-confirm-dialog__confirm) {
35
- inline-size: 100%;
36
- }
37
- }
38
-
39
- /* Angular cannot omit the wrapper around unprojected content, so an empty one collapses. */
40
- :where(.skdx-confirm-dialog__body:empty) {
41
- display: none;
42
- }
43
- }