@sectile/vue 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/form.js +1 -1
- package/dist/form.js.map +1 -1
- package/dist/grid.js +1 -1
- package/dist/grid.js.map +1 -1
- package/dist/internal/collection.d.ts +2 -0
- package/dist/internal/collection.js +1 -1
- package/dist/internal/collection.js.map +1 -1
- package/dist/internal/date-picker.js +1 -1
- package/dist/internal/date-picker.js.map +1 -1
- package/dist/internal/native-field.js +1 -1
- package/dist/internal/native-field.js.map +1 -1
- package/dist/internal/popup.js +1 -1
- package/dist/internal/popup.js.map +1 -1
- package/dist/internal/virtual-core.js +1 -1
- package/dist/internal/virtual-core.js.map +1 -1
- package/dist/listbox.js +1 -1
- package/dist/listbox.js.map +1 -1
- package/dist/menu.js +1 -1
- package/dist/menu.js.map +1 -1
- package/dist/range-calendar.js +1 -1
- package/dist/range-calendar.js.map +1 -1
- package/package.json +11 -11
package/dist/form.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{computed,defineComponent,h,mergeProps,nextTick,onBeforeUnmount,onMounted,onScopeDispose,provide,shallowRef,watch}from"vue";import{createForm}from"@sectile/dom/form";import{getFormFieldIDByPath}from"@sectile/form/state";import{appendFormFieldPath,encodeFormFieldPath,tryCreateFormFieldPath}from"@sectile/form/path";import{compositeControlCapabilities,hiddenInputSubmissionCapabilities,hiddenSelectSubmissionCapabilities,hiddenValueSubmissionCapabilities,nativeInputControlCapabilities,provideFormControlFieldContext,provideFormControlOwner,useCompositeFormControl,useFormControl,useNativeInputFormControl}from"./internal/form-control.js";import{useNextTickTask}from"./internal/scheduled-task.js";import{Primitive}from"./primitive.js";import{useHostId}from"./host-provider.js";import{formContextKey,formFieldContextKey,useFormContext,useFormFieldContext,useFormSelectorFromContext}from"./internal/form-context.js";function defineFormSubmission(definition){return Object.freeze({...definition})}const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const FormRootImpl=defineComponent({name:"SectileFormRoot",inheritAttrs:false,props:{issues:{type:Array,default:()=>[]},schema:{type:Object,default:void 0},validate:{type:Function,default:void 0},validateOn:{type:Array,default:()=>[]},revalidateOn:{type:Array,default:()=>["input"]},onSubmit:{type:Function,default:void 0},mapSubmitError:{type:Function,default:void 0}},emits:{reset:()=>true,stateChange:_state=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const root=shallowRef(null);const summary=shallowRef(null);const summaryId=`${useHostId()}-summary`;const connection=shallowRef(null);const participants=new Map;const fieldDiagnostics=new Map;let syncConfiguredIssues=()=>{};let syncFieldDiagnostics=()=>{};const register=participant=>{const existing=participants.get(participant.id);existing?.unregister?.();const registered={participant};participants.set(participant.id,registered);if(connection.value!==null)registered.unregister=connection.value.registerParticipant(participant);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()});return()=>{if(participants.get(participant.id)!==registered)return;registered.unregister?.();participants.delete(participant.id);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()})}};const setFieldDiagnostic=(id,issue)=>{if(issue===null)fieldDiagnostics.delete(id);else fieldDiagnostics.set(id,issue);void nextTick(syncFieldDiagnostics)};const submit=payload=>{const handler=props.onSubmit;if(handler===void 0)return;const target=connection.value;if(target===null)return;let result;try{result=handler(toFormSubmitEvent(payload))}catch(error){return{ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}}const settle=resolved=>{if(typeof resolved!=="object"||resolved===null||resolved.ok!==false){return{ok:true}}const issues=resolveIssueInputs(target,"server",resolved.issues??[]);const failure=resolved.failure??(issues.length===0?submissionErrorFailure():void 0);return{ok:false,...failure===void 0?{}:{failure},...issues.length===0?{}:{issues}}};if(isPromiseLike(result)){return Promise.resolve(result).then(settle,error=>({ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}))}return settle(result)};const configuration=()=>({...summary.value===null?{}:{summary:summary.value},renderSummaryContent:false,manageSummaryVisibility:false,...props.schema===void 0?{}:{schema:props.schema},...props.validate===void 0?{}:{validate:props.validate},validateOn:props.validateOn,revalidateOn:props.revalidateOn,...props.onSubmit===void 0?{}:{onSubmit:submit},onReset:()=>{emit("reset");void nextTick(syncFieldDiagnostics)},onStateChange:next=>{emit("stateChange",next)}});syncConfiguredIssues=()=>{const target=connection.value;if(target===null)return;target.replaceIssues("form",resolveIssueInputs(target,"form",props.issues))};syncFieldDiagnostics=()=>{connection.value?.replaceIssues("field",[...fieldDiagnostics.values()])};const mount=()=>{if(root.value===null)return;connection.value?.destroy();connection.value=createForm({form:root.value,...configuration()});for(const registered of participants.values()){registered.unregister=connection.value.registerParticipant(registered.participant)}syncConfiguredIssues();syncFieldDiagnostics();emit("stateChange",connection.value.state)};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{mountTask.cancel();connection.value?.destroy();connection.value=null});watch([summary,()=>props.schema,()=>props.validate,()=>[...props.validateOn],()=>[...props.revalidateOn],()=>props.onSubmit,()=>props.mapSubmitError],()=>{void nextTick(()=>connection.value?.reconfigure(configuration()))});watch(()=>props.issues,()=>{void nextTick(syncConfiguredIssues)},{deep:true});const actions={submitStarted:()=>connection.value?.submitStarted()??null,submitSucceeded:generation=>connection.value?.submitSucceeded(generation)??false,submitFailed:(generation,result)=>connection.value?.submitFailed(generation,result)??false,replaceIssues:(source,issues)=>connection.value?.replaceIssues(source,issues)??false,reinitialize:options=>connection.value?.reinitialize(options),reset:()=>connection.value?.reset()};const formContext={summary,summaryId,register,setFieldDiagnostic,connection};provide(formContextKey,formContext);const validation=useFormSelectorFromContext(formContext,()=>current=>current.validation);const submission=useFormSelectorFromContext(formContext,()=>current=>current.submission);const selectedState=useFormSelectorFromContext(formContext,()=>current=>current);const valid=useFormSelectorFromContext(formContext,()=>current=>current.valid);const touched=useFormSelectorFromContext(formContext,()=>current=>current.touched);const dirty=useFormSelectorFromContext(formContext,()=>current=>current.dirty);const slotProps=Object.freeze({get state(){return selectedState.value},get validation(){return validation.value},get submission(){return submission.value},get valid(){return valid.value},get touched(){return touched.value},get dirty(){return dirty.value},get submitted(){return submission.value.count>0},get submitCount(){return submission.value.count},...actions});expose(actions);return()=>h("form",mergeProps(attrs,{ref:element=>{root.value=element},"data-scope":"form","data-part":"root","data-validation-status":validation.value.status,"data-submission-status":submission.value.status}),slots["default"]?.(slotProps)??[])}});const FormRoot=FormRootImpl;function toFormSubmitEvent(payload){return Object.freeze({formData:payload.formData,values:payload.values,submitter:payload.submitter,state:payload.state,reinitialize:payload.reinitialize,nativeEvent:payload.event,get defaultPrevented(){return payload.event.defaultPrevented},preventDefault:()=>payload.event.preventDefault(),stopPropagation:()=>payload.event.stopPropagation(),stopImmediatePropagation:()=>payload.event.stopImmediatePropagation()})}function isPromiseLike(value){return typeof value==="object"&&value!==null&&"then"in value&&typeof value.then==="function"}function resolveIssueInputs(target,source,input){const state=target.getSnapshot().state;return Object.freeze(input.map((issue,index)=>{const owner=issue.path===void 0?null:getFormFieldIDByPath(state,issue.path);const relatedFieldIds=new Set;for(const path of issue.relatedPaths??[]){const related2=getFormFieldIDByPath(state,path);if(related2!==null&&related2!==owner)relatedFieldIds.add(related2)}const related=Object.freeze([...relatedFieldIds]);return Object.freeze({id:issue.id??`form-${source}-issue-${index+1}`,message:issue.message,source,...owner===null?{}:{fieldId:owner},...related.length===0?{}:{relatedFieldIds:related}})}))}function safeEncodeFormFieldPath(path){const result=tryCreateFormFieldPath(path);return result.ok?encodeFormFieldPath(result.value):null}function mapSubmissionError(mapper,reason){if(mapper!==void 0){try{const mapped=mapper(reason);if(mapped!==void 0)return Object.freeze({message:mapped.message})}catch{}}return submissionErrorFailure()}function submissionErrorFailure(){return Object.freeze({message:"Form submission failed."})}function useFormFieldSelectorFromContext(context,idSource,selectorSource,equalsSource=()=>Object.is){const initialSelector=selectorSource();const selected=shallowRef(initialSelector(context.connection.value?.getField(idSource())??null));let unsubscribe;const stop=watch([context.connection,idSource,selectorSource,equalsSource],([target,id,selector,equals])=>{unsubscribe?.();unsubscribe=void 0;const next=selector(target?.getField(id)??null);if(!equals(selected.value,next))selected.value=next;if(target!==null){unsubscribe=target.subscribeField(id,selector,value=>{selected.value=value},{equals})}},{immediate:true,flush:"sync"});onScopeDispose(()=>{unsubscribe?.();stop()});return selected}function useFormSelector(selector,options={}){const context=useFormContext("useFormSelector");return useFormSelectorFromContext(context,()=>selector,()=>options.equals??Object.is)}function useFormFieldSelector(id,selector,options={}){const context=useFormContext("useFormFieldSelector");return useFormFieldSelectorFromContext(context,()=>id,()=>selector,()=>options.equals??Object.is)}function useFormFieldController(id){const context=useFormContext("useFormFieldController");const state=useFormFieldSelectorFromContext(context,()=>id,()=>field=>field);return Object.freeze({state,setMeta:meta=>context.connection.value?.setFieldMeta(id,meta)??false,replaceIssues:(source,issues)=>context.connection.value?.replaceFieldIssues(id,source,issues)??false,upsertIssue:issue=>context.connection.value?.upsertFieldIssue(id,issue)??false,removeIssue:issueId=>context.connection.value?.removeFieldIssue(id,issueId)??false,clearIssues:source=>context.connection.value?.clearFieldIssues(id,source)??false})}const FormSelectorRuntime=defineComponent({name:"SectileFormSelector",props:{select:{type:Function,required:true},equals:{type:Function,default:Object.is}},slots:Object,setup(props,{slots}){const context=useFormContext("FormSelector");const selected=useFormSelectorFromContext(context,()=>props.select,()=>props.equals);return()=>slots["default"]?.({selected:selected.value})??[]}});const FormSelector=FormSelectorRuntime;const FormFieldSelectorRuntime=defineComponent({name:"SectileFormFieldSelector",props:{id:{type:String,required:true},select:{type:Function,required:true},equals:{type:Function,default:Object.is}},slots:Object,setup(props,{slots}){const context=useFormContext("FormFieldSelector");const selected=useFormFieldSelectorFromContext(context,()=>props.id,()=>props.select,()=>props.equals);return()=>slots["default"]?.({selected:selected.value})??[]}});const FormFieldSelector=FormFieldSelectorRuntime;const FormField=defineComponent({name:"SectileFormField",inheritAttrs:false,props:{id:{type:String,default:void 0},name:{type:[String,Array],default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},readonly:{type:Boolean,default:void 0},...partProps},slots:Object,setup(props,{attrs,slots}){const formContext=useFormContext("FormField");const generatedId=useHostId();const id=computed(()=>props.id??`form-field-${generatedId}`);const nameKey=computed(()=>props.name===void 0?void 0:safeEncodeFormFieldPath(props.name)??void 0);const root=shallowRef(null);const controls=shallowRef([]);const fallback=shallowRef(null);const nativeFallbackProblem=shallowRef(null);const appliedAttributes=new Map;let observer;let unregister;let diagnosticId;let observedTargets=[];let warnedMultipleControls=false;const activeRegistrations=computed(()=>controls.value.filter(registration=>resolveElement(registration.element)!==null));const activeControl=computed(()=>activeRegistrations.value.length===1?activeRegistrations.value[0]:controls.value.length===0?fallback.value:null);const labelMode=computed(()=>activeControl.value?.labelMode??"for");const semanticControl=()=>{const registration=activeControl.value;if(registration===void 0||registration===null)return null;return resolveElement(registration.semanticControl??registration.element)};const effectiveControlId=computed(()=>semanticControl()?.getAttribute("id")?.trim()||`${id.value}-control`);const fieldState=useFormFieldSelectorFromContext(formContext,()=>id.value,()=>field=>field);const fieldActions=Object.freeze({setMeta:meta=>formContext.connection.value?.setFieldMeta(id.value,meta)??false,replaceIssues:(source,issues)=>formContext.connection.value?.replaceFieldIssues(id.value,source,issues)??false,upsertIssue:issue=>formContext.connection.value?.upsertFieldIssue(id.value,issue)??false,removeIssue:issueId=>formContext.connection.value?.removeFieldIssue(id.value,issueId)??false,clearIssues:source=>formContext.connection.value?.clearFieldIssues(id.value,source)??false});const slotProps=computed(()=>{const current=fieldState.value;const descriptionId=`${id.value}-description`;const messageId=`${id.value}-message`;const relatedIssues=current?.relatedIssues??[];const describedBy=`${descriptionId} ${messageId}${relatedIssues.length===0?"":` ${formContext.summaryId}`}`;const valid=current?.valid??true;return Object.freeze({id:id.value,controlId:effectiveControlId.value,labelId:`${id.value}-label`,descriptionId,messageId,describedBy,valid,touched:current?.touched??false,dirty:current?.dirty??false,issues:current?.issues??[],relatedIssues,...fieldActions})});const attributesFor=registration=>{const explicit=new Set(registration.explicit??[]);const capabilities=registration.capabilities??{};const attributes={};const assign=(attribute,value)=>{if(!explicit.has(attribute)&&value!==void 0)attributes[attribute]=value};if(capabilities.id===true)assign("id",slotProps.value.controlId);if(capabilities.describedBy===true){assign("aria-describedby",slotProps.value.describedBy);assign("aria-errormessage",slotProps.value.issues.length>0?slotProps.value.messageId:slotProps.value.relatedIssues.length>0?formContext.summaryId:slotProps.value.messageId)}if(capabilities.invalid===true&&!slotProps.value.valid)assign("aria-invalid","true");if(capabilities.labelledBy===true&&labelMode.value==="labelledby"){assign("aria-labelledby",slotProps.value.labelId)}if(capabilities.required===true&&props.required===true)assign("required",true);else if(labelMode.value!=="for"&&props.required===true)assign("aria-required","true");if(capabilities.disabled===true&&props.disabled===true)assign("disabled",true);else if(labelMode.value!=="for"&&props.disabled===true)assign("aria-disabled","true");if(capabilities.readonly===true&&props.readonly===true)assign("readonly",true);else if(labelMode.value!=="for"&&props.readonly===true)assign("aria-readonly","true");if(labelMode.value!=="for"){const refreshValue=()=>{queueMicrotask(()=>formContext.connection.value?.refreshParticipant(id.value))};attributes["onClick"]=refreshValue;attributes["onKeydown"]=refreshValue}return Object.freeze(attributes)};const restoreControlAttributes=()=>{for(const[element,attributes]of appliedAttributes){for(const[name,previous]of attributes){if(previous===null)element.removeAttribute(name);else element.setAttribute(name,previous)}}appliedAttributes.clear()};const applyControlAttributes=()=>{restoreControlAttributes();const registration=activeControl.value;if(registration===void 0||registration===null)return;const semantic=resolveElement(registration.semanticControl??registration.element);if(semantic!==null){applyMetadata(semantic,attributesFor(registration),registration.explicit,appliedAttributes)}for(const submission of resolveSubmissionRegistrations(registration)){const element=resolveElement(submission.element);if(element===null)continue;const capabilities=submission.capabilities??nativeSubmissionCapabilities(element);const explicit=submission.explicit??registration.explicit;const attributes={};if(capabilities.name===true&&nameKey.value!==void 0){const submissionName=safeEncodeSubmissionName(nameKey.value,submission.relativeName);if(submissionName!==null)attributes["name"]=submissionName}if(capabilities.form===true&&props.form!==void 0)attributes["form"]=props.form;if(capabilities.required===true&&props.required===true)attributes["required"]=true;if(capabilities.disabled===true&&props.disabled===true)attributes["disabled"]=true;if(capabilities.readonly===true&&props.readonly===true)attributes["readonly"]=true;applyMetadata(element,attributes,explicit,appliedAttributes)}};const discoverNativeFallback=()=>{if(controls.value.length>0||root.value===null){fallback.value=null;nativeFallbackProblem.value=null;return}const candidates=nativeCandidates(root.value);const discovered=createNativeFallbackRegistration(root.value,candidates);nativeFallbackProblem.value=discovered.problem;if(discovered.registration===null){fallback.value=null;return}const next=discovered.registration;const current=fallback.value;if(current!==null&&resolveElement(current.semanticControl??current.element)===resolveElement(next.semanticControl??next.element)&&sameSubmissionElements(resolveSubmissionRegistrations(current),resolveSubmissionRegistrations(next)))return;fallback.value=next};const syncDiagnostic=()=>{const currentId=id.value;if(diagnosticId!==void 0&&diagnosticId!==currentId){formContext.setFieldDiagnostic(diagnosticId,null)}diagnosticId=currentId;let message=null;if(props.name!==void 0&&nameKey.value===void 0){message="FormField received an invalid field path."}else if(activeRegistrations.value.length>1){message="FormField received multiple active controls. Register one composite control with explicit targets."}else if(controls.value.length>0&&activeRegistrations.value.length===0){message="FormField has no mounted control target."}else if(nativeFallbackProblem.value!==null){message=nativeFallbackProblem.value}else{const registration=activeControl.value;if(registration!==null&®istration!==void 0){const invalidRelativeName=resolveSubmissionRegistrations(registration).some(submission=>submission.relativeName!==void 0&&nameKey.value!==void 0&&safeEncodeSubmissionName(nameKey.value,submission.relativeName)===null);if(invalidRelativeName)message="FormField received an invalid relative submission path."}}formContext.setFieldDiagnostic(currentId,message===null?null:Object.freeze({id:`${currentId}:composition`,fieldId:currentId,message,source:"field"}))};const refreshParticipantTargets=()=>{const registration=activeControl.value;const next=registration===null||registration===void 0?root.value===null?[]:[root.value]:[root.value,resolveElement(registration.semanticControl??registration.element),resolveElement(registration.focusTarget??registration.element),resolveElement(registration.validationTarget??registration.element),...resolveSubmissionRegistrations(registration).map(submission=>resolveElement(submission.element))].filter(element=>element!==null);if(next.length===observedTargets.length&&next.every((element,index)=>element===observedTargets[index]))return;observedTargets=Object.freeze([...next]);formContext.connection.value?.refreshParticipant(id.value)};const registerControl=registration=>{controls.value=[...controls.value,registration];fallback.value=null;void nextTick(()=>{if(!warnedMultipleControls&&activeRegistrations.value.length>1){warnedMultipleControls=true;console.warn("[Sectile] FormField received multiple active control registrations. Register one composite control with explicit semantic, focus, and submission targets.")}applyControlAttributes();syncDiagnostic();refreshParticipantTargets()});return()=>{controls.value=controls.value.filter(candidate=>candidate!==registration);discoverNativeFallback();void nextTick(()=>{applyControlAttributes();syncDiagnostic();refreshParticipantTargets()})}};const mount=()=>{unregister?.();unregister=void 0;if(root.value===null)return;discoverNativeFallback();observer?.disconnect();observer=new MutationObserver(()=>{discoverNativeFallback();applyControlAttributes();syncDiagnostic();refreshParticipantTargets()});observer.observe(root.value,{childList:true,subtree:true});applyControlAttributes();const participant={id:id.value,get element(){return root.value},get semanticControl(){return semanticControl()??root.value},get focusTarget(){const registration=activeControl.value;return registration===void 0||registration===null?root.value:resolveElement(registration.focusTarget??registration.semanticControl??registration.element)??root.value},get validationTarget(){const registration=activeControl.value;return registration===void 0||registration===null?root.value:resolveElement(registration.validationTarget??registration.semanticControl??registration.element)??root.value},get submissionElements(){const registration=activeControl.value;if(registration===void 0||registration===null)return[];return resolveSubmissionRegistrations(registration).map(submission=>resolveElement(submission.element)).filter(element=>element!==null)},focus:()=>{const registration=activeControl.value;const control=registration===void 0||registration===null?null:resolveElement(registration.focusTarget??registration.semanticControl??registration.element);control?.focus();return control!==null&&document.activeElement===control},reset:()=>activeControl.value?.reset?.(),get getValue(){return activeControl.value?.getValue},get isValueEqual(){return activeControl.value?.isValueEqual},...nameKey.value===void 0?{}:{name:nameKey.value}};unregister=formContext.register(participant);observedTargets=Object.freeze([participant.element,participant.semanticControl??participant.element,participant.focusTarget??participant.element,participant.validationTarget??participant.element,...participant.submissionElements??[]]);syncDiagnostic()};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{mountTask.cancel();observer?.disconnect();observer=void 0;restoreControlAttributes();if(diagnosticId!==void 0)formContext.setFieldDiagnostic(diagnosticId,null);unregister?.();unregister=void 0});watch([id,nameKey],mountTask.schedule);watch([activeControl,effectiveControlId,labelMode,nameKey,()=>props.form,()=>props.required,()=>props.disabled,()=>props.readonly,()=>slotProps.value.valid],()=>{applyControlAttributes();syncDiagnostic()},{flush:"post"});provide(formFieldContextKey,{slotProps,labelMode,registerControl,attributesFor});provideFormControlFieldContext({registerControl,attributesFor});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element},"data-scope":"form","data-part":"field","data-valid":slotProps.value.valid?"":void 0,"data-invalid":slotProps.value.valid?void 0:"","data-touched":slotProps.value.touched?"":void 0,"data-dirty":slotProps.value.dirty?"":void 0}),{default:()=>slots["default"]?.(slotProps.value)})}});const FormLabel=defineComponent({name:"SectileFormLabel",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:void 0},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const field=useFormFieldContext("FormLabel");return()=>{const mode=field.labelMode.value;return renderFieldPart({as:props.as??(mode==="legend"?"legend":mode==="for"?"label":"span"),asChild:props.asChild},attrs,slots,"label",{id:field.slotProps.value.labelId,...mode==="for"?{for:field.slotProps.value.controlId}:{}})}}});const FormDescription=defineComponent({name:"SectileFormDescription",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"p"}},setup(props,{attrs,slots}){const field=useFormFieldContext("FormDescription");return()=>renderFieldPart(props,attrs,slots,"description",{id:field.slotProps.value.descriptionId})}});import{FormMessage,FormSummary}from"./internal/form-presence-parts.js";const FormReset=defineComponent({name:"SectileFormReset",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"button"}},setup(props,{attrs,slots}){return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,...props.as==="button"&&!props.asChild?{type:"reset"}:{},"data-scope":"form","data-part":"reset"}),{default:()=>slots["default"]?.()})}});const FormSubmit=defineComponent({name:"SectileFormSubmit",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"button"}},slots:Object,setup(props,{attrs,slots}){const form=useFormContext("FormSubmit");const valid=useFormSelectorFromContext(form,()=>state=>state.valid);const submission=useFormSelectorFromContext(form,()=>state=>state.submission);const slotProps=computed(()=>{const submitting=submission.value.status==="submitting";return Object.freeze({valid:valid.value,submitting,canSubmit:valid.value&&!submitting,submission:submission.value})});const blockPendingSubmit=event=>{if(!slotProps.value.submitting)return;event.preventDefault();event.stopImmediatePropagation()};return()=>h(Primitive,mergeProps({onClickCapture:blockPendingSubmit},attrs,{as:props.as,asChild:props.asChild,...props.as==="button"&&!props.asChild?{type:"submit"}:{},...props.as==="button"&&!props.asChild&&slotProps.value.submitting?{disabled:true}:{},...props.asChild&&slotProps.value.submitting?{"aria-disabled":"true"}:{},"data-scope":"form","data-part":"submit","data-submission-status":slotProps.value.submission.status}),{default:()=>slots["default"]?.(slotProps.value)})}});function renderFieldPart(props,attrs,slots,part,attributes){return h(Primitive,mergeProps(attributes,attrs,{as:props.as,asChild:props.asChild,"data-scope":"form","data-part":part}),{default:()=>slots.default?.()})}function resolveElement(source){return typeof source==="function"?source():source.value??null}function resolveSubmissionRegistrations(registration){if(registration.submissions!==void 0){return typeof registration.submissions==="function"?registration.submissions():registration.submissions}const element=resolveElement(registration.element);if(element===null||!isFormSubmissionElement(element))return[];return[{element:()=>element,capabilities:nativeSubmissionCapabilities(element),...registration.explicit===void 0?{}:{explicit:registration.explicit}}]}function sameSubmissionElements(left,right){return left.length===right.length&&left.every((submission,index)=>resolveElement(submission.element)===resolveElement(right[index].element))}function nativeCandidates(root){const selector="fieldset, input, select, textarea";const candidates=[...root.matches(selector)?[root]:[],...root.querySelectorAll(selector)];return candidates.filter(candidate=>candidate.closest('[data-scope="form"][data-part="field"]')===root)}function createNativeFallbackRegistration(root,candidates){const semantic=nativeSemanticControl(candidates);if(semantic===void 0||isHiddenInput(semantic)){return{registration:null,problem:"FormField has no visible native semantic or focus target."}}const submissions=candidates.filter(isFormSubmissionElement);const visible=candidates.filter(candidate=>!isHiddenInput(candidate));const fieldset=visible.find(candidate=>candidate.tagName==="FIELDSET");if(fieldset!==void 0){return{registration:nativeFallbackForFieldset(fieldset,submissions),problem:null}}if(visible.length===1){return{registration:nativeFallbackForElement(semantic,submissions),problem:null}}if(isNativeCheckedGroup(visible)){const focusTarget=visible.find(candidate=>!candidate.disabled)??visible[0];return{registration:{element:()=>root,semanticControl:()=>root,focusTarget:()=>focusTarget,validationTarget:()=>root,submissions:submissions.map(element=>({element:()=>element,capabilities:Object.freeze({...nativeSubmissionCapabilities(element),required:false})})),labelMode:"labelledby",capabilities:compositeControlCapabilities},problem:null}}return{registration:null,problem:"FormField contains multiple unrelated native controls. Use a fieldset or one composite registration."}}function nativeFallbackForFieldset(fieldset,submissions){const visibleSubmissions=submissions.filter(element=>!isHiddenInput(element));const checkboxGroup=isNativeCheckedGroup(visibleSubmissions)&&visibleSubmissions[0]?.tagName==="INPUT"&&visibleSubmissions[0].type.toLowerCase()==="checkbox";return{element:()=>fieldset,semanticControl:()=>fieldset,focusTarget:()=>fieldsetFocusTarget(submissions)??fieldset,validationTarget:()=>fieldset,submissions:submissions.map(element=>({element:()=>element,capabilities:Object.freeze({...nativeSubmissionCapabilities(element),...checkboxGroup?{required:false}:{}})})),labelMode:"legend",capabilities:nativeControlCapabilities(fieldset)}}function fieldsetFocusTarget(submissions){const enabled=submissions.filter(element=>!isHiddenInput(element)&&!element.disabled&&!element.matches(":disabled"));const invalid=enabled.find(element=>element.willValidate&&!element.validity.valid);if(invalid!==void 0)return invalid;return enabled.find(element=>element.tagName==="INPUT"&&element.type.toLowerCase()==="radio"&&element.checked)??enabled[0]}function nativeFallbackForElement(semantic,submissions){return{element:()=>semantic,semanticControl:()=>semantic,focusTarget:()=>semantic,validationTarget:()=>semantic,submissions:submissions.map(element=>({element:()=>element,capabilities:nativeSubmissionCapabilities(element)})),labelMode:nativeLabelMode(semantic),capabilities:nativeControlCapabilities(semantic)}}function isHiddenInput(element){return element.tagName==="INPUT"&&element.getAttribute("type")?.toLowerCase()==="hidden"}function isNativeCheckedGroup(candidates){if(candidates.length<2)return false;const types=candidates.map(candidate=>candidate.tagName==="INPUT"?candidate.type.toLowerCase():null);return types.every(type=>type===types[0])&&(types[0]==="checkbox"||types[0]==="radio")}function nativeSemanticControl(candidates){return candidates.find(candidate=>!isHiddenInput(candidate))??candidates[0]}function isFormSubmissionElement(element){return["INPUT","SELECT","TEXTAREA"].includes(element.tagName)}function nativeLabelMode(element){if(element.tagName==="FIELDSET")return"legend";if(element.tagName==="INPUT"&&element.getAttribute("type")?.toLowerCase()==="hidden"){return"labelledby"}return["BUTTON","INPUT","SELECT","TEXTAREA"].includes(element.tagName)?"for":"labelledby"}function nativeControlCapabilities(element){const tag=element.tagName;const labelable=nativeLabelMode(element)==="for";return Object.freeze({id:true,describedBy:true,invalid:true,labelledBy:!labelable,required:["INPUT","SELECT","TEXTAREA"].includes(tag),disabled:["BUTTON","FIELDSET","INPUT","SELECT","TEXTAREA"].includes(tag),readonly:tag==="TEXTAREA"||tag==="INPUT"&&supportsReadonly(element)})}function nativeSubmissionCapabilities(element){const tag=element.tagName;return Object.freeze({name:true,form:true,required:["INPUT","SELECT","TEXTAREA"].includes(tag),disabled:true,readonly:tag==="TEXTAREA"||tag==="INPUT"&&supportsReadonly(element)})}function safeEncodeSubmissionName(base,relative){try{if(relative===void 0)return safeEncodeFormFieldPath(base);return safeEncodeFormFieldPath(appendFormFieldPath(base,relative))}catch{return null}}function applyMetadata(element,attributes,explicitAttributes,applied){const explicit=new Set(explicitAttributes??[]);for(const[name,value]of Object.entries(attributes)){if(name.startsWith("on")&&typeof value==="function")continue;if(value===void 0||value===false||explicit.has(name))continue;const previous=element.getAttribute(name);const mergeTokens=name==="aria-describedby"||name==="aria-labelledby";if(previous!==null&&!mergeTokens)continue;let changes=applied.get(element);if(changes===void 0){changes=new Map;applied.set(element,changes)}if(!changes.has(name))changes.set(name,previous);const next=mergeTokens&&previous!==null?[...new Set([...previous.split(/\s+/u),...String(value).split(/\s+/u)])].join(" "):value===true?"":String(value);element.setAttribute(name,next)}}function supportsReadonly(element){return!new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]).has(element.type.toLowerCase())}export{FormDescription,FormField,FormFieldSelector,FormLabel,FormMessage,FormReset,FormRoot,FormSelector,FormSubmit,FormSummary,compositeControlCapabilities,defineFormSubmission,hiddenInputSubmissionCapabilities,hiddenSelectSubmissionCapabilities,hiddenValueSubmissionCapabilities,nativeInputControlCapabilities,provideFormControlOwner,useCompositeFormControl,useFormControl,useFormFieldController,useFormFieldSelector,useFormSelector,useNativeInputFormControl};
|
|
1
|
+
import{computed,defineComponent,h,mergeProps,nextTick,onBeforeUnmount,onMounted,onScopeDispose,provide,shallowRef,watch}from"vue";import{createForm}from"@sectile/dom/form";import{getFormFieldIDByPath}from"@sectile/form/state";import{appendFormFieldPath,encodeFormFieldPath,tryCreateFormFieldPath}from"@sectile/form/path";import{compositeControlCapabilities,hiddenInputSubmissionCapabilities,hiddenSelectSubmissionCapabilities,hiddenValueSubmissionCapabilities,nativeInputControlCapabilities,provideFormControlFieldContext,provideFormControlOwner,useCompositeFormControl,useFormControl,useNativeInputFormControl}from"./internal/form-control.js";import{useNextTickTask}from"./internal/scheduled-task.js";import{Primitive}from"./primitive.js";import{useHostId}from"./host-provider.js";import{formContextKey,formFieldContextKey,useFormContext,useFormFieldContext,useFormSelectorFromContext}from"./internal/form-context.js";function defineFormSubmission(definition){return Object.freeze({...definition})}const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const FormRootImpl=defineComponent({name:"SectileFormRoot",inheritAttrs:false,props:{issues:{type:Array,default:()=>[]},schema:{type:Object,default:void 0},validate:{type:Function,default:void 0},validateOn:{type:Array,default:()=>[]},revalidateOn:{type:Array,default:()=>["input"]},onSubmit:{type:Function,default:void 0},mapSubmitError:{type:Function,default:void 0}},emits:{reset:()=>true,stateChange:_state=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const root=shallowRef(null);const summary=shallowRef(null);const summaryId=`${useHostId()}-summary`;const connection=shallowRef(null);const participants=new Map;const fieldDiagnostics=new Map;let syncConfiguredIssues=()=>{};let syncFieldDiagnostics=()=>{};const register=participant=>{const existing=participants.get(participant.id);existing?.unregister?.();const registered={participant};participants.set(participant.id,registered);if(connection.value!==null)registered.unregister=connection.value.registerParticipant(participant);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()});return()=>{if(participants.get(participant.id)!==registered)return;registered.unregister?.();participants.delete(participant.id);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()})}};const setFieldDiagnostic=(id,issue)=>{if(issue===null)fieldDiagnostics.delete(id);else fieldDiagnostics.set(id,issue);void nextTick(syncFieldDiagnostics)};const submit=payload=>{const handler=props.onSubmit;if(handler===void 0)return;const target=connection.value;if(target===null)return;const settle=resolved=>{if(typeof resolved!=="object"||resolved===null||resolved.ok!==false){return{ok:true}}const issues=resolveIssueInputs(target,"server",resolved.issues??[]);const failure=resolved.failure??(issues.length===0?submissionErrorFailure():void 0);return{ok:false,...failure===void 0?{}:{failure},...issues.length===0?{}:{issues}}};let result;try{const candidate=handler(toFormSubmitEvent(payload));if(isPromiseLike(candidate)){return Promise.resolve(candidate).then(settle,error=>({ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}))}result=candidate}catch(error){return{ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}}return settle(result)};const configuration=()=>({...summary.value===null?{}:{summary:summary.value},renderSummaryContent:false,manageSummaryVisibility:false,...props.schema===void 0?{}:{schema:props.schema},...props.validate===void 0?{}:{validate:props.validate},validateOn:props.validateOn,revalidateOn:props.revalidateOn,...props.onSubmit===void 0?{}:{onSubmit:submit},onReset:()=>{emit("reset");void nextTick(syncFieldDiagnostics)},onStateChange:next=>{emit("stateChange",next)}});syncConfiguredIssues=()=>{const target=connection.value;if(target===null)return;target.replaceIssues("form",resolveIssueInputs(target,"form",props.issues))};syncFieldDiagnostics=()=>{connection.value?.replaceIssues("field",[...fieldDiagnostics.values()])};const mount=()=>{if(root.value===null)return;connection.value?.destroy();connection.value=createForm({form:root.value,...configuration()});for(const registered of participants.values()){registered.unregister=connection.value.registerParticipant(registered.participant)}syncConfiguredIssues();syncFieldDiagnostics();emit("stateChange",connection.value.state)};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{mountTask.cancel();connection.value?.destroy();connection.value=null});watch([summary,()=>props.schema,()=>props.validate,()=>[...props.validateOn],()=>[...props.revalidateOn],()=>props.onSubmit,()=>props.mapSubmitError],()=>{void nextTick(()=>connection.value?.reconfigure(configuration()))});watch(()=>props.issues,()=>{void nextTick(syncConfiguredIssues)},{deep:true});const actions={submitStarted:()=>connection.value?.submitStarted()??null,submitSucceeded:generation=>connection.value?.submitSucceeded(generation)??false,submitFailed:(generation,result)=>connection.value?.submitFailed(generation,result)??false,replaceIssues:(source,issues)=>connection.value?.replaceIssues(source,issues)??false,reinitialize:options=>connection.value?.reinitialize(options),reset:()=>connection.value?.reset()};const formContext={summary,summaryId,register,setFieldDiagnostic,connection};provide(formContextKey,formContext);const validation=useFormSelectorFromContext(formContext,()=>current=>current.validation);const submission=useFormSelectorFromContext(formContext,()=>current=>current.submission);const selectedState=useFormSelectorFromContext(formContext,()=>current=>current);const valid=useFormSelectorFromContext(formContext,()=>current=>current.valid);const touched=useFormSelectorFromContext(formContext,()=>current=>current.touched);const dirty=useFormSelectorFromContext(formContext,()=>current=>current.dirty);const slotProps=Object.freeze({get state(){return selectedState.value},get validation(){return validation.value},get submission(){return submission.value},get valid(){return valid.value},get touched(){return touched.value},get dirty(){return dirty.value},get submitted(){return submission.value.count>0},get submitCount(){return submission.value.count},...actions});expose(actions);return()=>h("form",mergeProps(attrs,{ref:element=>{root.value=element},"data-scope":"form","data-part":"root","data-validation-status":validation.value.status,"data-submission-status":submission.value.status}),slots["default"]?.(slotProps)??[])}});const FormRoot=FormRootImpl;function toFormSubmitEvent(payload){return Object.freeze({formData:payload.formData,values:payload.values,submitter:payload.submitter,state:payload.state,reinitialize:payload.reinitialize,nativeEvent:payload.event,get defaultPrevented(){return payload.event.defaultPrevented},preventDefault:()=>payload.event.preventDefault(),stopPropagation:()=>payload.event.stopPropagation(),stopImmediatePropagation:()=>payload.event.stopImmediatePropagation()})}function isPromiseLike(value){return typeof value==="object"&&value!==null&&"then"in value&&typeof value.then==="function"}function resolveIssueInputs(target,source,input){const state=target.getSnapshot().state;return Object.freeze(input.map((issue,index)=>{const owner=issue.path===void 0?null:getFormFieldIDByPath(state,issue.path);const relatedFieldIds=new Set;for(const path of issue.relatedPaths??[]){const related2=getFormFieldIDByPath(state,path);if(related2!==null&&related2!==owner)relatedFieldIds.add(related2)}const related=Object.freeze([...relatedFieldIds]);return Object.freeze({id:issue.id??`form-${source}-issue-${index+1}`,message:issue.message,source,...owner===null?{}:{fieldId:owner},...related.length===0?{}:{relatedFieldIds:related}})}))}function safeEncodeFormFieldPath(path){const result=tryCreateFormFieldPath(path);return result.ok?encodeFormFieldPath(result.value):null}function mapSubmissionError(mapper,reason){if(mapper!==void 0){try{const mapped=mapper(reason);if(mapped!==void 0)return Object.freeze({message:mapped.message})}catch{}}return submissionErrorFailure()}function submissionErrorFailure(){return Object.freeze({message:"Form submission failed."})}function useFormFieldSelectorFromContext(context,idSource,selectorSource,equalsSource=()=>Object.is){const initialSelector=selectorSource();const selected=shallowRef(initialSelector(context.connection.value?.getField(idSource())??null));let unsubscribe;const stop=watch([context.connection,idSource,selectorSource,equalsSource],([target,id,selector,equals])=>{unsubscribe?.();unsubscribe=void 0;const next=selector(target?.getField(id)??null);if(!equals(selected.value,next))selected.value=next;if(target!==null){unsubscribe=target.subscribeField(id,selector,value=>{selected.value=value},{equals})}},{immediate:true,flush:"sync"});onScopeDispose(()=>{unsubscribe?.();stop()});return selected}function useFormSelector(selector,options={}){const context=useFormContext("useFormSelector");return useFormSelectorFromContext(context,()=>selector,()=>options.equals??Object.is)}function useFormFieldSelector(id,selector,options={}){const context=useFormContext("useFormFieldSelector");return useFormFieldSelectorFromContext(context,()=>id,()=>selector,()=>options.equals??Object.is)}function useFormFieldController(id){const context=useFormContext("useFormFieldController");const state=useFormFieldSelectorFromContext(context,()=>id,()=>field=>field);return Object.freeze({state,setMeta:meta=>context.connection.value?.setFieldMeta(id,meta)??false,replaceIssues:(source,issues)=>context.connection.value?.replaceFieldIssues(id,source,issues)??false,upsertIssue:issue=>context.connection.value?.upsertFieldIssue(id,issue)??false,removeIssue:issueId=>context.connection.value?.removeFieldIssue(id,issueId)??false,clearIssues:source=>context.connection.value?.clearFieldIssues(id,source)??false})}const FormSelectorRuntime=defineComponent({name:"SectileFormSelector",props:{select:{type:Function,required:true},equals:{type:Function,default:Object.is}},slots:Object,setup(props,{slots}){const context=useFormContext("FormSelector");const selected=useFormSelectorFromContext(context,()=>props.select,()=>props.equals);return()=>slots["default"]?.({selected:selected.value})??[]}});const FormSelector=FormSelectorRuntime;const FormFieldSelectorRuntime=defineComponent({name:"SectileFormFieldSelector",props:{id:{type:String,required:true},select:{type:Function,required:true},equals:{type:Function,default:Object.is}},slots:Object,setup(props,{slots}){const context=useFormContext("FormFieldSelector");const selected=useFormFieldSelectorFromContext(context,()=>props.id,()=>props.select,()=>props.equals);return()=>slots["default"]?.({selected:selected.value})??[]}});const FormFieldSelector=FormFieldSelectorRuntime;const FormField=defineComponent({name:"SectileFormField",inheritAttrs:false,props:{id:{type:String,default:void 0},name:{type:[String,Array],default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},readonly:{type:Boolean,default:void 0},...partProps},slots:Object,setup(props,{attrs,slots}){const formContext=useFormContext("FormField");const generatedId=useHostId();const id=computed(()=>props.id??`form-field-${generatedId}`);const nameKey=computed(()=>props.name===void 0?void 0:safeEncodeFormFieldPath(props.name)??void 0);const root=shallowRef(null);const controls=shallowRef([]);const fallback=shallowRef(null);const nativeFallbackProblem=shallowRef(null);const appliedAttributes=new Map;let observer;let unregister;let diagnosticId;let observedTargets=[];let warnedMultipleControls=false;const activeRegistrations=computed(()=>controls.value.filter(registration=>resolveElement(registration.element)!==null));const activeControl=computed(()=>activeRegistrations.value.length===1?activeRegistrations.value[0]:controls.value.length===0?fallback.value:null);const labelMode=computed(()=>activeControl.value?.labelMode??"for");const semanticControl=()=>{const registration=activeControl.value;if(registration===void 0||registration===null)return null;return resolveElement(registration.semanticControl??registration.element)};const effectiveControlId=computed(()=>semanticControl()?.getAttribute("id")?.trim()||`${id.value}-control`);const fieldState=useFormFieldSelectorFromContext(formContext,()=>id.value,()=>field=>field);const fieldActions=Object.freeze({setMeta:meta=>formContext.connection.value?.setFieldMeta(id.value,meta)??false,replaceIssues:(source,issues)=>formContext.connection.value?.replaceFieldIssues(id.value,source,issues)??false,upsertIssue:issue=>formContext.connection.value?.upsertFieldIssue(id.value,issue)??false,removeIssue:issueId=>formContext.connection.value?.removeFieldIssue(id.value,issueId)??false,clearIssues:source=>formContext.connection.value?.clearFieldIssues(id.value,source)??false});const slotProps=computed(()=>{const current=fieldState.value;const descriptionId=`${id.value}-description`;const messageId=`${id.value}-message`;const relatedIssues=current?.relatedIssues??[];const describedBy=`${descriptionId} ${messageId}${relatedIssues.length===0?"":` ${formContext.summaryId}`}`;const valid=current?.valid??true;return Object.freeze({id:id.value,controlId:effectiveControlId.value,labelId:`${id.value}-label`,descriptionId,messageId,describedBy,valid,touched:current?.touched??false,dirty:current?.dirty??false,issues:current?.issues??[],relatedIssues,...fieldActions})});const attributesFor=registration=>{const explicit=new Set(registration.explicit??[]);const capabilities=registration.capabilities??{};const attributes={};const assign=(attribute,value)=>{if(!explicit.has(attribute)&&value!==void 0)attributes[attribute]=value};if(capabilities.id===true)assign("id",slotProps.value.controlId);if(capabilities.describedBy===true){assign("aria-describedby",slotProps.value.describedBy);assign("aria-errormessage",slotProps.value.issues.length>0?slotProps.value.messageId:slotProps.value.relatedIssues.length>0?formContext.summaryId:slotProps.value.messageId)}if(capabilities.invalid===true&&!slotProps.value.valid)assign("aria-invalid","true");if(capabilities.labelledBy===true&&labelMode.value==="labelledby"){assign("aria-labelledby",slotProps.value.labelId)}if(capabilities.required===true&&props.required===true)assign("required",true);else if(labelMode.value!=="for"&&props.required===true)assign("aria-required","true");if(capabilities.disabled===true&&props.disabled===true)assign("disabled",true);else if(labelMode.value!=="for"&&props.disabled===true)assign("aria-disabled","true");if(capabilities.readonly===true&&props.readonly===true)assign("readonly",true);else if(labelMode.value!=="for"&&props.readonly===true)assign("aria-readonly","true");if(labelMode.value!=="for"){const refreshValue=()=>{queueMicrotask(()=>formContext.connection.value?.refreshParticipant(id.value))};attributes["onClick"]=refreshValue;attributes["onKeydown"]=refreshValue}return Object.freeze(attributes)};const restoreControlAttributes=()=>{for(const[element,attributes]of appliedAttributes){for(const[name,previous]of attributes){if(previous===null)element.removeAttribute(name);else element.setAttribute(name,previous)}}appliedAttributes.clear()};const applyControlAttributes=()=>{restoreControlAttributes();const registration=activeControl.value;if(registration===void 0||registration===null)return;const semantic=resolveElement(registration.semanticControl??registration.element);if(semantic!==null){applyMetadata(semantic,attributesFor(registration),registration.explicit,appliedAttributes)}for(const submission of resolveSubmissionRegistrations(registration)){const element=resolveElement(submission.element);if(element===null)continue;const capabilities=submission.capabilities??nativeSubmissionCapabilities(element);const explicit=submission.explicit??registration.explicit;const attributes={};if(capabilities.name===true&&nameKey.value!==void 0){const submissionName=safeEncodeSubmissionName(nameKey.value,submission.relativeName);if(submissionName!==null)attributes["name"]=submissionName}if(capabilities.form===true&&props.form!==void 0)attributes["form"]=props.form;if(capabilities.required===true&&props.required===true)attributes["required"]=true;if(capabilities.disabled===true&&props.disabled===true)attributes["disabled"]=true;if(capabilities.readonly===true&&props.readonly===true)attributes["readonly"]=true;applyMetadata(element,attributes,explicit,appliedAttributes)}};const discoverNativeFallback=()=>{if(controls.value.length>0||root.value===null){fallback.value=null;nativeFallbackProblem.value=null;return}const candidates=nativeCandidates(root.value);const discovered=createNativeFallbackRegistration(root.value,candidates);nativeFallbackProblem.value=discovered.problem;if(discovered.registration===null){fallback.value=null;return}const next=discovered.registration;const current=fallback.value;if(current!==null&&resolveElement(current.semanticControl??current.element)===resolveElement(next.semanticControl??next.element)&&sameSubmissionElements(resolveSubmissionRegistrations(current),resolveSubmissionRegistrations(next)))return;fallback.value=next};const syncDiagnostic=()=>{const currentId=id.value;if(diagnosticId!==void 0&&diagnosticId!==currentId){formContext.setFieldDiagnostic(diagnosticId,null)}diagnosticId=currentId;let message=null;if(props.name!==void 0&&nameKey.value===void 0){message="FormField received an invalid field path."}else if(activeRegistrations.value.length>1){message="FormField received multiple active controls. Register one composite control with explicit targets."}else if(controls.value.length>0&&activeRegistrations.value.length===0){message="FormField has no mounted control target."}else if(nativeFallbackProblem.value!==null){message=nativeFallbackProblem.value}else{const registration=activeControl.value;if(registration!==null&®istration!==void 0){const invalidRelativeName=resolveSubmissionRegistrations(registration).some(submission=>submission.relativeName!==void 0&&nameKey.value!==void 0&&safeEncodeSubmissionName(nameKey.value,submission.relativeName)===null);if(invalidRelativeName)message="FormField received an invalid relative submission path."}}formContext.setFieldDiagnostic(currentId,message===null?null:Object.freeze({id:`${currentId}:composition`,fieldId:currentId,message,source:"field"}))};const refreshParticipantTargets=()=>{const registration=activeControl.value;const next=registration===null||registration===void 0?root.value===null?[]:[root.value]:[root.value,resolveElement(registration.semanticControl??registration.element),resolveElement(registration.focusTarget??registration.element),resolveElement(registration.validationTarget??registration.element),...resolveSubmissionRegistrations(registration).map(submission=>resolveElement(submission.element))].filter(element=>element!==null);if(next.length===observedTargets.length&&next.every((element,index)=>element===observedTargets[index]))return;observedTargets=Object.freeze([...next]);formContext.connection.value?.refreshParticipant(id.value)};const registerControl=registration=>{controls.value=[...controls.value,registration];fallback.value=null;void nextTick(()=>{if(!warnedMultipleControls&&activeRegistrations.value.length>1){warnedMultipleControls=true;console.warn("[Sectile] FormField received multiple active control registrations. Register one composite control with explicit semantic, focus, and submission targets.")}applyControlAttributes();syncDiagnostic();refreshParticipantTargets()});return()=>{controls.value=controls.value.filter(candidate=>candidate!==registration);discoverNativeFallback();void nextTick(()=>{applyControlAttributes();syncDiagnostic();refreshParticipantTargets()})}};const mount=()=>{unregister?.();unregister=void 0;if(root.value===null)return;discoverNativeFallback();observer?.disconnect();observer=new MutationObserver(()=>{discoverNativeFallback();applyControlAttributes();syncDiagnostic();refreshParticipantTargets()});observer.observe(root.value,{childList:true,subtree:true});applyControlAttributes();const participant={id:id.value,get element(){return root.value},get semanticControl(){return semanticControl()??root.value},get focusTarget(){const registration=activeControl.value;return registration===void 0||registration===null?root.value:resolveElement(registration.focusTarget??registration.semanticControl??registration.element)??root.value},get validationTarget(){const registration=activeControl.value;return registration===void 0||registration===null?root.value:resolveElement(registration.validationTarget??registration.semanticControl??registration.element)??root.value},get submissionElements(){const registration=activeControl.value;if(registration===void 0||registration===null)return[];return resolveSubmissionRegistrations(registration).map(submission=>resolveElement(submission.element)).filter(element=>element!==null)},focus:()=>{const registration=activeControl.value;const control=registration===void 0||registration===null?null:resolveElement(registration.focusTarget??registration.semanticControl??registration.element);control?.focus();return control!==null&&document.activeElement===control},reset:()=>activeControl.value?.reset?.(),get getValue(){return activeControl.value?.getValue},get isValueEqual(){return activeControl.value?.isValueEqual},...nameKey.value===void 0?{}:{name:nameKey.value}};unregister=formContext.register(participant);observedTargets=Object.freeze([participant.element,participant.semanticControl??participant.element,participant.focusTarget??participant.element,participant.validationTarget??participant.element,...participant.submissionElements??[]]);syncDiagnostic()};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{mountTask.cancel();observer?.disconnect();observer=void 0;restoreControlAttributes();if(diagnosticId!==void 0)formContext.setFieldDiagnostic(diagnosticId,null);unregister?.();unregister=void 0});watch([id,nameKey],mountTask.schedule);watch([activeControl,effectiveControlId,labelMode,nameKey,()=>props.form,()=>props.required,()=>props.disabled,()=>props.readonly,()=>slotProps.value.valid],()=>{applyControlAttributes();syncDiagnostic()},{flush:"post"});provide(formFieldContextKey,{slotProps,labelMode,registerControl,attributesFor});provideFormControlFieldContext({registerControl,attributesFor});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element},"data-scope":"form","data-part":"field","data-valid":slotProps.value.valid?"":void 0,"data-invalid":slotProps.value.valid?void 0:"","data-touched":slotProps.value.touched?"":void 0,"data-dirty":slotProps.value.dirty?"":void 0}),{default:()=>slots["default"]?.(slotProps.value)})}});const FormLabel=defineComponent({name:"SectileFormLabel",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:void 0},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const field=useFormFieldContext("FormLabel");return()=>{const mode=field.labelMode.value;return renderFieldPart({as:props.as??(mode==="legend"?"legend":mode==="for"?"label":"span"),asChild:props.asChild},attrs,slots,"label",{id:field.slotProps.value.labelId,...mode==="for"?{for:field.slotProps.value.controlId}:{}})}}});const FormDescription=defineComponent({name:"SectileFormDescription",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"p"}},setup(props,{attrs,slots}){const field=useFormFieldContext("FormDescription");return()=>renderFieldPart(props,attrs,slots,"description",{id:field.slotProps.value.descriptionId})}});import{FormMessage,FormSummary}from"./internal/form-presence-parts.js";const FormReset=defineComponent({name:"SectileFormReset",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"button"}},setup(props,{attrs,slots}){return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,...props.as==="button"&&!props.asChild?{type:"reset"}:{},"data-scope":"form","data-part":"reset"}),{default:()=>slots["default"]?.()})}});const FormSubmit=defineComponent({name:"SectileFormSubmit",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"button"}},slots:Object,setup(props,{attrs,slots}){const form=useFormContext("FormSubmit");const valid=useFormSelectorFromContext(form,()=>state=>state.valid);const submission=useFormSelectorFromContext(form,()=>state=>state.submission);const slotProps=computed(()=>{const submitting=submission.value.status==="submitting";return Object.freeze({valid:valid.value,submitting,canSubmit:valid.value&&!submitting,submission:submission.value})});const blockPendingSubmit=event=>{if(!slotProps.value.submitting)return;event.preventDefault();event.stopImmediatePropagation()};return()=>h(Primitive,mergeProps({onClickCapture:blockPendingSubmit},attrs,{as:props.as,asChild:props.asChild,...props.as==="button"&&!props.asChild?{type:"submit"}:{},...props.as==="button"&&!props.asChild&&slotProps.value.submitting?{disabled:true}:{},...props.asChild&&slotProps.value.submitting?{"aria-disabled":"true"}:{},"data-scope":"form","data-part":"submit","data-submission-status":slotProps.value.submission.status}),{default:()=>slots["default"]?.(slotProps.value)})}});function renderFieldPart(props,attrs,slots,part,attributes){return h(Primitive,mergeProps(attributes,attrs,{as:props.as,asChild:props.asChild,"data-scope":"form","data-part":part}),{default:()=>slots.default?.()})}function resolveElement(source){return typeof source==="function"?source():source.value??null}function resolveSubmissionRegistrations(registration){if(registration.submissions!==void 0){return typeof registration.submissions==="function"?registration.submissions():registration.submissions}const element=resolveElement(registration.element);if(element===null||!isFormSubmissionElement(element))return[];return[{element:()=>element,capabilities:nativeSubmissionCapabilities(element),...registration.explicit===void 0?{}:{explicit:registration.explicit}}]}function sameSubmissionElements(left,right){return left.length===right.length&&left.every((submission,index)=>resolveElement(submission.element)===resolveElement(right[index].element))}function nativeCandidates(root){const selector="fieldset, input, select, textarea";const candidates=[...root.matches(selector)?[root]:[],...root.querySelectorAll(selector)];return candidates.filter(candidate=>candidate.closest('[data-scope="form"][data-part="field"]')===root)}function createNativeFallbackRegistration(root,candidates){const semantic=nativeSemanticControl(candidates);if(semantic===void 0||isHiddenInput(semantic)){return{registration:null,problem:"FormField has no visible native semantic or focus target."}}const submissions=candidates.filter(isFormSubmissionElement);const visible=candidates.filter(candidate=>!isHiddenInput(candidate));const fieldset=visible.find(candidate=>candidate.tagName==="FIELDSET");if(fieldset!==void 0){return{registration:nativeFallbackForFieldset(fieldset,submissions),problem:null}}if(visible.length===1){return{registration:nativeFallbackForElement(semantic,submissions),problem:null}}if(isNativeCheckedGroup(visible)){const focusTarget=visible.find(candidate=>!candidate.disabled)??visible[0];return{registration:{element:()=>root,semanticControl:()=>root,focusTarget:()=>focusTarget,validationTarget:()=>root,submissions:submissions.map(element=>({element:()=>element,capabilities:Object.freeze({...nativeSubmissionCapabilities(element),required:false})})),labelMode:"labelledby",capabilities:compositeControlCapabilities},problem:null}}return{registration:null,problem:"FormField contains multiple unrelated native controls. Use a fieldset or one composite registration."}}function nativeFallbackForFieldset(fieldset,submissions){const visibleSubmissions=submissions.filter(element=>!isHiddenInput(element));const checkboxGroup=isNativeCheckedGroup(visibleSubmissions)&&visibleSubmissions[0]?.tagName==="INPUT"&&visibleSubmissions[0].type.toLowerCase()==="checkbox";return{element:()=>fieldset,semanticControl:()=>fieldset,focusTarget:()=>fieldsetFocusTarget(submissions)??fieldset,validationTarget:()=>fieldset,submissions:submissions.map(element=>({element:()=>element,capabilities:Object.freeze({...nativeSubmissionCapabilities(element),...checkboxGroup?{required:false}:{}})})),labelMode:"legend",capabilities:nativeControlCapabilities(fieldset)}}function fieldsetFocusTarget(submissions){const enabled=submissions.filter(element=>!isHiddenInput(element)&&!element.disabled&&!element.matches(":disabled"));const invalid=enabled.find(element=>element.willValidate&&!element.validity.valid);if(invalid!==void 0)return invalid;return enabled.find(element=>element.tagName==="INPUT"&&element.type.toLowerCase()==="radio"&&element.checked)??enabled[0]}function nativeFallbackForElement(semantic,submissions){return{element:()=>semantic,semanticControl:()=>semantic,focusTarget:()=>semantic,validationTarget:()=>semantic,submissions:submissions.map(element=>({element:()=>element,capabilities:nativeSubmissionCapabilities(element)})),labelMode:nativeLabelMode(semantic),capabilities:nativeControlCapabilities(semantic)}}function isHiddenInput(element){return element.tagName==="INPUT"&&element.getAttribute("type")?.toLowerCase()==="hidden"}function isNativeCheckedGroup(candidates){if(candidates.length<2)return false;const types=candidates.map(candidate=>candidate.tagName==="INPUT"?candidate.type.toLowerCase():null);return types.every(type=>type===types[0])&&(types[0]==="checkbox"||types[0]==="radio")}function nativeSemanticControl(candidates){return candidates.find(candidate=>!isHiddenInput(candidate))??candidates[0]}function isFormSubmissionElement(element){return["INPUT","SELECT","TEXTAREA"].includes(element.tagName)}function nativeLabelMode(element){if(element.tagName==="FIELDSET")return"legend";if(element.tagName==="INPUT"&&element.getAttribute("type")?.toLowerCase()==="hidden"){return"labelledby"}return["BUTTON","INPUT","SELECT","TEXTAREA"].includes(element.tagName)?"for":"labelledby"}function nativeControlCapabilities(element){const tag=element.tagName;const labelable=nativeLabelMode(element)==="for";return Object.freeze({id:true,describedBy:true,invalid:true,labelledBy:!labelable,required:["INPUT","SELECT","TEXTAREA"].includes(tag),disabled:["BUTTON","FIELDSET","INPUT","SELECT","TEXTAREA"].includes(tag),readonly:tag==="TEXTAREA"||tag==="INPUT"&&supportsReadonly(element)})}function nativeSubmissionCapabilities(element){const tag=element.tagName;return Object.freeze({name:true,form:true,required:["INPUT","SELECT","TEXTAREA"].includes(tag),disabled:true,readonly:tag==="TEXTAREA"||tag==="INPUT"&&supportsReadonly(element)})}function safeEncodeSubmissionName(base,relative){try{if(relative===void 0)return safeEncodeFormFieldPath(base);return safeEncodeFormFieldPath(appendFormFieldPath(base,relative))}catch{return null}}function applyMetadata(element,attributes,explicitAttributes,applied){const explicit=new Set(explicitAttributes??[]);for(const[name,value]of Object.entries(attributes)){if(name.startsWith("on")&&typeof value==="function")continue;if(value===void 0||value===false||explicit.has(name))continue;const previous=element.getAttribute(name);const mergeTokens=name==="aria-describedby"||name==="aria-labelledby";if(previous!==null&&!mergeTokens)continue;let changes=applied.get(element);if(changes===void 0){changes=new Map;applied.set(element,changes)}if(!changes.has(name))changes.set(name,previous);const next=mergeTokens&&previous!==null?[...new Set([...previous.split(/\s+/u),...String(value).split(/\s+/u)])].join(" "):value===true?"":String(value);element.setAttribute(name,next)}}function supportsReadonly(element){return!new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]).has(element.type.toLowerCase())}export{FormDescription,FormField,FormFieldSelector,FormLabel,FormMessage,FormReset,FormRoot,FormSelector,FormSubmit,FormSummary,compositeControlCapabilities,defineFormSubmission,hiddenInputSubmissionCapabilities,hiddenSelectSubmissionCapabilities,hiddenValueSubmissionCapabilities,nativeInputControlCapabilities,provideFormControlOwner,useCompositeFormControl,useFormControl,useFormFieldController,useFormFieldSelector,useFormSelector,useNativeInputFormControl};
|
|
2
2
|
//# sourceMappingURL=form.js.map
|
package/dist/form.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/form.ts"],"mappings":"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","names":["related"],"file":"form.js"}
|
|
1
|
+
{"version":3,"sources":["../src/form.ts"],"mappings":"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","names":["related"],"file":"form.js"}
|
package/dist/grid.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{createGridControl}from"@sectile/dom/grid";import{Primitive}from"./primitive.js";import{reconcileCollectionState,sameIDs}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";const key=Symbol("SectileGridRoot");const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const GridRoot=defineComponent({name:"SectileGridRoot",inheritAttrs:false,props:{rows:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},highlightedValue:{type:String,default:void 0},defaultHighlightedValue:{type:String,default:null},editMode:{type:String,default:void 0},defaultEditMode:{type:String,default:"navigation"},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:highlightedValue":_value=>true,"update:editMode":_value=>true,editStart:_value=>true,editCommit:_value=>true,editCancel:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const element=shallowRef();const connection=shallowRef();let connectionOwner;const localValue=shallowRef(props.modelValue!==void 0?props.modelValue:props.defaultValue);const localHighlight=shallowRef(props.highlightedValue!==void 0?props.highlightedValue:props.defaultHighlightedValue);const localEditMode=shallowRef(props.editMode??props.defaultEditMode);const controlled={value:useControlledStateInvariant("GridRoot","modelValue",()=>props.modelValue),highlighted:useControlledStateInvariant("GridRoot","highlightedValue",()=>props.highlightedValue),editMode:useControlledStateInvariant("GridRoot","editMode",()=>props.editMode)};const state=computed(()=>Object.freeze({value:props.modelValue!==void 0?props.modelValue:localValue.value,highlightedValue:props.highlightedValue!==void 0?props.highlightedValue:localHighlight.value,editMode:props.editMode??localEditMode.value,disabled:props.disabled,readonly:props.readonly}));const refreshParts=()=>{if(element.value===void 0||connection.value===void 0)return;element.value.querySelectorAll("[data-sectile-grid-cell]").forEach(node=>{const id=node.dataset["sectileGridCell"];if(id!==void 0)connection.value?.setCellAttributes(node,id,{disabled:node.dataset["sectileGridItemDisabled"]!==void 0})})};const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot===void 0)return;localValue.value=snapshot.selection.selected[0]??null;localHighlight.value=snapshot.cursor.current;localEditMode.value=snapshot.editMode};const connect=()=>{const nextOwner=snapshotGridConnectionOwner(props);if(connection.value!==void 0&&connectionOwner!==void 0&&sameGridConnectionOwner(connectionOwner,nextOwner))return;connection.value?.disconnect();if(element.value===void 0)return;const items=nextOwner.rows.flatMap(row=>row.filter(id=>id!==null));const requestedValue=controlled.value?props.modelValue:localValue.value;const requestedHighlight=controlled.highlighted?props.highlightedValue:localHighlight.value;const reconciled=reconcileCollectionState(items,requestedValue===null?[]:[requestedValue],requestedHighlight,nextOwner.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;const requestedEditMode=controlled.editMode?props.editMode:localEditMode.value;const editMode=reconciled.current===null&&requestedEditMode==="editing"?"navigation":requestedEditMode;localValue.value=value;localHighlight.value=reconciled.current;localEditMode.value=editMode;if(controlled.value&&requestedValue!==value)emit("update:modelValue",value);if(controlled.highlighted&&requestedHighlight!==reconciled.current)emit("update:highlightedValue",reconciled.current);if(controlled.editMode&&props.editMode!==editMode)emit("update:editMode",editMode);connection.value=createGridControl({root:element.value,rows:nextOwner.rows,...controlled.value?{value}:{defaultValue:value},...controlled.highlighted?{highlightedValue:reconciled.current}:{defaultHighlightedValue:reconciled.current},...controlled.editMode?{editMode}:{defaultEditMode:editMode},disabledItems:nextOwner.disabledItems,disabled:nextOwner.disabled,readOnly:nextOwner.readonly,...nextOwner.label===void 0?{}:{label:nextOwner.label},...props.policies===void 0?{}:{policies:props.policies},onValueChange:value2=>{localValue.value=value2;emit("update:modelValue",value2)},onHighlightedValueChange:value2=>{localHighlight.value=value2;emit("update:highlightedValue",value2)},onEditModeChange:value2=>{localEditMode.value=value2;emit("update:editMode",value2)},onEditStart:id=>emit("editStart",id),onEditCommit:id=>emit("editCommit",id),onEditCancel:id=>emit("editCancel",id),onUpdate:refresh});connectionOwner=nextOwner;refreshParts();refresh()};const disabledItems=computed(()=>new Set(props.disabledItems));provide(key,{state,disabledItems,registerCell:(node,id,disabled)=>connection.value?.setCellAttributes(node,id,{disabled})});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.rows,()=>props.disabledItems,()=>props.disabled,()=>props.readonly,()=>props.label,()=>props.policies],connect);watch([()=>props.modelValue,()=>props.highlightedValue,()=>props.editMode],()=>{if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...controlled.value?{value:props.modelValue}:{},...controlled.highlighted?{highlightedValue:props.highlightedValue}:{},...controlled.editMode?{editMode:props.editMode}:{}});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{element.value=node instanceof HTMLElement?node:void 0},"data-scope":"grid","data-part":"root","data-edit-mode":state.value.editMode}),{default:()=>slots["default"]?.(state.value)})}});const GridRow=defineComponent({name:"SectileGridRow",inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot("GridRow");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,role:"row","data-scope":"grid","data-part":"row"}),{default:()=>slots["default"]?.(root.state.value)})}});const GridCell=defineComponent({name:"SectileGridCell",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("GridCell");let registeredID=props.value;const register=node=>{if(registeredID!==props.value){root.registerCell(void 0,registeredID,false);registeredID=props.value}root.registerCell(node instanceof HTMLElement?node:void 0,registeredID,props.disabled)};onBeforeUnmount(()=>root.registerCell(void 0,registeredID,false));const state=computed(()=>({...root.state.value,value:props.value,selected:root.state.value.value===props.value,highlighted:root.state.value.highlightedValue===props.value,disabled:root.state.value.disabled||props.disabled||root.disabledItems.value.has(props.value)}));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:register,"data-sectile-grid-cell":props.value,"data-sectile-grid-item-disabled":props.disabled?"":void 0,"data-scope":"grid","data-part":"cell","data-selected":state.value.selected?"":void 0,"data-highlighted":state.value.highlighted?"":void 0,"data-disabled":state.value.disabled?"":void 0}),{default:()=>slots["default"]?.(state.value)})}});function useRoot(part){const root=inject(key);if(root===void 0)throw new TypeError(`${part} must be used inside GridRoot.`);return root}function snapshotGridConnectionOwner(props){return Object.freeze({rows:Object.freeze(props.rows.map(row=>Object.freeze([...row]))),disabledItems:Object.freeze([...props.disabledItems]),disabled:props.disabled,readonly:props.readonly,label:props.label,eligible:props.policies?.eligible,boundary:props.policies?.boundary,maxScan:props.policies?.maxScan})}function sameGridConnectionOwner(left,right){if(left.rows.length!==right.rows.length||!sameIDRows(left.rows,right.rows)||!sameIDs(left.disabledItems,right.disabledItems)||left.disabled!==right.disabled||left.readonly!==right.readonly||left.label!==right.label||left.eligible!==right.eligible||left.boundary!==right.boundary||left.maxScan!==right.maxScan)return false;return true}function sameIDRows(left,right){for(let row=0;row<left.length;row+=1){const leftRow=left[row];const rightRow=right[row];if(leftRow.length!==rightRow.length)return false;for(let column=0;column<leftRow.length;column+=1){if(leftRow[column]!==rightRow[column])return false}}return true}export{GridCell,GridRoot,GridRow};
|
|
1
|
+
import{defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowReactive,shallowReadonly,shallowRef,toRaw,watch}from"vue";import{createGridControl}from"@sectile/dom/grid";import{Primitive}from"./primitive.js";import{invalidateItemProjection,reconcileCollectionState,sameIDs}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";const key=Symbol("SectileGridRoot");const partProps={as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const GridRoot=defineComponent({name:"SectileGridRoot",inheritAttrs:false,props:{rows:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},highlightedValue:{type:String,default:void 0},defaultHighlightedValue:{type:String,default:null},editMode:{type:String,default:void 0},defaultEditMode:{type:String,default:"navigation"},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:highlightedValue":_value=>true,"update:editMode":_value=>true,editStart:_value=>true,editCommit:_value=>true,editCancel:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const element=shallowRef();const connection=shallowRef();let connectionOwner;let disabledItemSet=new Set(props.disabledItems);const itemProjection=shallowReactive(new Map);const mutableState=shallowReactive({value:props.modelValue!==void 0?props.modelValue:props.defaultValue,highlightedValue:props.highlightedValue!==void 0?props.highlightedValue:props.defaultHighlightedValue,editMode:props.editMode??props.defaultEditMode,disabled:props.disabled,readonly:props.readonly});const state=shallowReadonly(mutableState);const controlled={value:useControlledStateInvariant("GridRoot","modelValue",()=>props.modelValue),highlighted:useControlledStateInvariant("GridRoot","highlightedValue",()=>props.highlightedValue),editMode:useControlledStateInvariant("GridRoot","editMode",()=>props.editMode)};const invalidateIdentityChange=(previous,next)=>{if(previous===next)return;invalidateItemProjection(itemProjection,previous);invalidateItemProjection(itemProjection,next)};const updateValue=value=>{const previous=mutableState.value;if(previous===value)return;mutableState.value=value;invalidateIdentityChange(previous,value)};const updateHighlight=value=>{const previous=mutableState.highlightedValue;if(previous===value)return;mutableState.highlightedValue=value;invalidateIdentityChange(previous,value)};const updateEditMode=value=>{if(mutableState.editMode!==value)mutableState.editMode=value};const updateOwnerProjection=owner=>{const nextDisabledItems=new Set(owner.disabledItems);if(mutableState.disabled===owner.disabled){for(const id of disabledItemSet)if(!nextDisabledItems.has(id))invalidateItemProjection(itemProjection,id);for(const id of nextDisabledItems)if(!disabledItemSet.has(id))invalidateItemProjection(itemProjection,id)}else mutableState.disabled=owner.disabled;disabledItemSet=nextDisabledItems;mutableState.readonly=owner.readonly};const publishSnapshot=snapshot=>{updateValue(snapshot.selection.selected[0]??null);updateHighlight(snapshot.cursor.current);updateEditMode(snapshot.editMode)};const refreshParts=()=>{if(element.value===void 0||connection.value===void 0)return;element.value.querySelectorAll("[data-sectile-grid-cell]").forEach(node=>{const id=node.dataset["sectileGridCell"];if(id!==void 0)connection.value?.setCellAttributes(node,id,{disabled:node.dataset["sectileGridItemDisabled"]!==void 0})})};const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot!==void 0)publishSnapshot(snapshot)};const connect=()=>{const nextOwner=snapshotGridConnectionOwner(props);if(connection.value!==void 0&&connectionOwner!==void 0&&sameGridConnectionOwner(connectionOwner,nextOwner))return;connection.value?.disconnect();updateOwnerProjection(nextOwner);if(element.value===void 0)return;const items=nextOwner.rows.flatMap(row=>row.filter(id=>id!==null));const requestedValue=controlled.value?props.modelValue:mutableState.value;const requestedHighlight=controlled.highlighted?props.highlightedValue:mutableState.highlightedValue;const reconciled=reconcileCollectionState(items,requestedValue===null?[]:[requestedValue],requestedHighlight,nextOwner.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;const requestedEditMode=controlled.editMode?props.editMode:mutableState.editMode;const editMode=reconciled.current===null&&requestedEditMode==="editing"?"navigation":requestedEditMode;updateValue(value);updateHighlight(reconciled.current);updateEditMode(editMode);if(controlled.value&&requestedValue!==value)emit("update:modelValue",value);if(controlled.highlighted&&requestedHighlight!==reconciled.current)emit("update:highlightedValue",reconciled.current);if(controlled.editMode&&props.editMode!==editMode)emit("update:editMode",editMode);connection.value=createGridControl({root:element.value,rows:nextOwner.rows,...controlled.value?{value}:{defaultValue:value},...controlled.highlighted?{highlightedValue:reconciled.current}:{defaultHighlightedValue:reconciled.current},...controlled.editMode?{editMode}:{defaultEditMode:editMode},disabledItems:nextOwner.disabledItems,disabled:nextOwner.disabled,readOnly:nextOwner.readonly,...nextOwner.label===void 0?{}:{label:nextOwner.label},...props.policies===void 0?{}:{policies:props.policies},onValueChange:value2=>{updateValue(value2);emit("update:modelValue",value2)},onHighlightedValueChange:value2=>{updateHighlight(value2);emit("update:highlightedValue",value2)},onEditModeChange:value2=>{updateEditMode(value2);emit("update:editMode",value2)},onEditStart:id=>emit("editStart",id),onEditCommit:id=>emit("editCommit",id),onEditCancel:id=>emit("editCancel",id),onUpdate:refresh});connectionOwner=nextOwner;refreshParts();refresh()};provide(key,{state,itemProjection,isItemDisabled:id=>disabledItemSet.has(id),registerCell:(node,id,disabled)=>connection.value?.setCellAttributes(node,id,{disabled})});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.rows,()=>props.disabledItems,()=>props.disabled,()=>props.readonly,()=>props.label,()=>props.policies],connect);watch([()=>props.modelValue,()=>props.highlightedValue,()=>props.editMode],()=>{if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...controlled.value?{value:props.modelValue}:{},...controlled.highlighted?{highlightedValue:props.highlightedValue}:{},...controlled.editMode?{editMode:props.editMode}:{}});if(!result.ok)throw new TypeError(result.error.message);publishSnapshot(result.value.state)});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{element.value=node instanceof HTMLElement?node:void 0},"data-scope":"grid","data-part":"root","data-edit-mode":state.editMode}),{default:()=>slots["default"]?.(state)})}});const GridRow=defineComponent({name:"SectileGridRow",inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot("GridRow");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,role:"row","data-scope":"grid","data-part":"row"}),{default:()=>slots["default"]?.(root.state)})}});const GridCell=defineComponent({name:"SectileGridCell",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("GridCell");let registeredID=props.value;const register=node=>{if(registeredID!==props.value){root.registerCell(void 0,registeredID,false);registeredID=props.value}root.registerCell(node instanceof HTMLElement?node:void 0,registeredID,props.disabled)};onBeforeUnmount(()=>root.registerCell(void 0,registeredID,false));const state=Object.freeze({get value(){return props.value},get selected(){root.itemProjection.get(props.value);return toRaw(root.state).value===props.value},get highlighted(){root.itemProjection.get(props.value);return toRaw(root.state).highlightedValue===props.value},get disabled(){root.itemProjection.get(props.value);return root.state.disabled||props.disabled||root.isItemDisabled(props.value)},get highlightedValue(){return root.state.highlightedValue},get editMode(){return root.state.editMode},get readonly(){return root.state.readonly}});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:register,"data-sectile-grid-cell":props.value,"data-sectile-grid-item-disabled":props.disabled?"":void 0,"data-scope":"grid","data-part":"cell","data-selected":state.selected?"":void 0,"data-highlighted":state.highlighted?"":void 0,"data-disabled":state.disabled?"":void 0}),{default:()=>slots["default"]?.(state)})}});function useRoot(part){const root=inject(key);if(root===void 0)throw new TypeError(`${part} must be used inside GridRoot.`);return root}function snapshotGridConnectionOwner(props){return Object.freeze({rows:Object.freeze(props.rows.map(row=>Object.freeze([...row]))),disabledItems:Object.freeze([...props.disabledItems]),disabled:props.disabled,readonly:props.readonly,label:props.label,eligible:props.policies?.eligible,boundary:props.policies?.boundary,maxScan:props.policies?.maxScan})}function sameGridConnectionOwner(left,right){if(left.rows.length!==right.rows.length||!sameIDRows(left.rows,right.rows)||!sameIDs(left.disabledItems,right.disabledItems)||left.disabled!==right.disabled||left.readonly!==right.readonly||left.label!==right.label||left.eligible!==right.eligible||left.boundary!==right.boundary||left.maxScan!==right.maxScan)return false;return true}function sameIDRows(left,right){for(let row=0;row<left.length;row+=1){const leftRow=left[row];const rightRow=right[row];if(leftRow.length!==rightRow.length)return false;for(let column=0;column<leftRow.length;column+=1){if(leftRow[column]!==rightRow[column])return false}}return true}export{GridCell,GridRoot,GridRow};
|
|
2
2
|
//# sourceMappingURL=grid.js.map
|
package/dist/grid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/grid.ts"],"mappings":"AAAA,OACE,
|
|
1
|
+
{"version":3,"sources":["../src/grid.ts"],"mappings":"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","names":["value"],"file":"grid.js"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type CollectionSelectionMode, type ReconciledCollectionIdentities } from '@sectile/core/adapter-runtime';
|
|
2
2
|
export type { CollectionSelectionMode } from '@sectile/core/adapter-runtime';
|
|
3
3
|
export type ReconciledCollectionState = ReconciledCollectionIdentities<string>;
|
|
4
|
+
export type ItemProjection = Map<string, true>;
|
|
4
5
|
export interface ReconcileCollectionOptions {
|
|
5
6
|
readonly preserveNullCurrent?: boolean;
|
|
6
7
|
}
|
|
@@ -10,6 +11,7 @@ export interface ReconcileCollectionOptions {
|
|
|
10
11
|
*/
|
|
11
12
|
export declare function reconcileCollectionState(items: readonly string[], selected: readonly string[], current: string | null, disabledItems: readonly string[], mode: CollectionSelectionMode, options?: ReconcileCollectionOptions): ReconciledCollectionState;
|
|
12
13
|
export declare function sameIDs(left: readonly string[], right: readonly string[]): boolean;
|
|
14
|
+
export declare function invalidateItemProjection(projection: ItemProjection, id: string | null | undefined): void;
|
|
13
15
|
export declare function collectionBranchIDs(nodes: readonly Readonly<{
|
|
14
16
|
id: string;
|
|
15
17
|
parentID: string | null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{tryReconcileCollectionIdentities}from"@sectile/core/adapter-runtime";import{sameStableIDOrder}from"@sectile/core/identity";import{tryCreateTree}from"@sectile/core/tree";function reconcileCollectionState(items,selected,current,disabledItems,mode,options={}){const result=tryReconcileCollectionIdentities(items,selected,current,disabledItems,mode,options);if(!result.ok)throw new TypeError(result.error.message);return result.value}function sameIDs(left,right){return sameStableIDOrder(left,right)}function collectionBranchIDs(nodes){const tree=tryCreateTree(nodes);if(!tree.ok)throw new TypeError(tree.error.message);return Object.freeze(nodes.filter(node=>tree.value.isLeaf(node.id)===false).map(node=>node.id))}export{collectionBranchIDs,reconcileCollectionState,sameIDs};
|
|
1
|
+
import{tryReconcileCollectionIdentities}from"@sectile/core/adapter-runtime";import{sameStableIDOrder}from"@sectile/core/identity";import{tryCreateTree}from"@sectile/core/tree";function reconcileCollectionState(items,selected,current,disabledItems,mode,options={}){const result=tryReconcileCollectionIdentities(items,selected,current,disabledItems,mode,options);if(!result.ok)throw new TypeError(result.error.message);return result.value}function sameIDs(left,right){return sameStableIDOrder(left,right)}function invalidateItemProjection(projection,id){if(id===null||id===void 0)return;projection.set(id,true);projection.delete(id)}function collectionBranchIDs(nodes){const tree=tryCreateTree(nodes);if(!tree.ok)throw new TypeError(tree.error.message);return Object.freeze(nodes.filter(node=>tree.value.isLeaf(node.id)===false).map(node=>node.id))}export{collectionBranchIDs,invalidateItemProjection,reconcileCollectionState,sameIDs};
|
|
2
2
|
//# sourceMappingURL=collection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/internal/collection.ts"],"mappings":"AAAA,OACE,qCAGK,gCACP,OAAS,sBAAyB,yBAClC,OAAS,kBAAqB,
|
|
1
|
+
{"version":3,"sources":["../../src/internal/collection.ts"],"mappings":"AAAA,OACE,qCAGK,gCACP,OAAS,sBAAyB,yBAClC,OAAS,kBAAqB,qBAexB,SAAU,yBACd,MACA,SACA,QACA,cACA,KACA,QAAsC,CAAA,EAAE,CAExC,MAAM,OAAS,iCACb,MACA,SACA,QACA,cACA,KACA,OAAO,EAET,GAAI,CAAC,OAAO,GAAI,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,EACxD,OAAO,OAAO,KAChB,CAEM,SAAU,QAAQ,KAAyB,MAAwB,CACvE,OAAO,kBAAkB,KAAM,KAAK,CACtC,CAEM,SAAU,yBACd,WACA,GAA6B,CAE7B,GAAI,KAAO,MAAQ,KAAO,OAAW,OACrC,WAAW,IAAI,GAAI,IAAI,EACvB,WAAW,OAAO,EAAE,CACtB,CAEM,SAAU,oBACd,MAAmE,CAEnE,MAAM,KAAO,cAAc,KAAK,EAChC,GAAI,CAAC,KAAK,GAAI,MAAM,IAAI,UAAU,KAAK,MAAM,OAAO,EACpD,OAAO,OAAO,OAAO,MAClB,OAAQ,MAAS,KAAK,MAAM,OAAO,KAAK,EAAE,IAAM,KAAK,EACrD,IAAK,MAAS,KAAK,EAAE,CAAC,CAC3B","names":[],"file":"collection.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Fragment,Teleport,computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,nextTick,provide,shallowRef,watch}from'vue';import{formatDateValue,parseDateValue}from'@sectile/dom/temporal/date-field';import{createCalendarMonth,createCalendarYear,isCalendarValueAvailable}from'@sectile/temporal/calendar';import{createMonthPickerValue,tryCreateMonthPickerValue}from'@sectile/temporal/month-picker';import{createYearPickerValue,tryCreateYearPickerValue}from'@sectile/temporal/year-picker';import{hiddenInputSubmissionCapabilities,useCompositeFormControl}from'./form-control.js';import{Primitive}from'../primitive.js';import{useControlledStateInvariant}from'./controlled-state.js';import{usePresence}from'./presence.js';import{useHostPortalTarget}from'../host-provider.js';import{useTemporalReferenceDate}from'../temporal-provider.js';export function specializePickerRootPart(_kind,component){return component}const key=Symbol('SectileDatePickerRoot');const noPendingPickerValue=Symbol('no-pending-picker-value');const partProps={as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};export function createPickerRoot(capability,name,config={}){const kind=capability.kind;const scope=config.scope??kind;const granularity=config.granularity??'day';const defaultView=config.defaultView??(granularity==='day'?'month':'year');const defaultOpen=config.defaultOpen??false;const yearPageSize=config.yearPageSize??12;const inline=config.inline??false;const component=defineComponent({name,inheritAttrs:false,props:{modelValue:{type:Object,default:undefined},defaultValue:{type:Object,default:null},open:{type:Boolean,default:undefined},defaultOpen:{type:Boolean,default:defaultOpen},highlightedValue:{type:Object,default:undefined},defaultHighlightedValue:{type:Object,default:undefined},referenceDate:{type:Object,default:undefined},defaultView:{type:String,default:defaultView},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},required:{type:Boolean,default:false},label:{type:String,default:undefined},policies:{type:Object,default:undefined},position:{type:Boolean,default:true},side:{type:String,default:'bottom'},align:{type:String,default:'center'},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:undefined},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:'absolute'},tracking:{type:String,default:'events'},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},emits:{'update:modelValue':_value=>true,'update:open':_value=>true,'update:highlightedValue':_value=>true},slots:Object,setup(props,{emit,slots}){const runtimeProps=props;const elements=new Map;const connection=shallowRef();const hostReferenceDate=useTemporalReferenceDate();const referenceDate=computed(()=>runtimeProps.referenceDate??hostReferenceDate.value);const inlineTrigger=typeof document==='undefined'||!inline||kind==='calendar'?undefined:document.createElement('button');const localValue=shallowRef(runtimeProps.modelValue!==undefined?runtimeProps.modelValue:runtimeProps.defaultValue);const localOpen=shallowRef(runtimeProps.open??runtimeProps.defaultOpen);const localHighlight=shallowRef(runtimeProps.highlightedValue??runtimeProps.defaultHighlightedValue??dateOf(localValue.value)??referenceDate.value);const periodReferenceYear=localHighlight.value.year;const yearPageStart=shallowRef(localHighlight.value.year-Math.floor(yearPageSize/2));const dates=shallowRef(monthFor(localHighlight.value));const months=shallowRef(yearFor(localHighlight.value.year));const years=shallowRef(yearsFrom(yearPageStart.value,yearPageSize));const localView=shallowRef(Object.freeze({year:localHighlight.value.year,month:localHighlight.value.month}));const localViewMode=shallowRef(runtimeProps.defaultView);const controlled={value:useControlledStateInvariant(`${kind}PickerRoot`,'modelValue',()=>runtimeProps.modelValue),open:useControlledStateInvariant(`${kind}PickerRoot`,'open',()=>runtimeProps.open),highlighted:useControlledStateInvariant(`${kind}PickerRoot`,'highlightedValue',()=>runtimeProps.highlightedValue)};const pendingValue=shallowRef(noPendingPickerValue);const state=computed(()=>{const highlighted=runtimeProps.highlightedValue??localHighlight.value;const value=controlled.value&&pendingValue.value!==noPendingPickerValue?pendingValue.value:runtimeProps.modelValue!==undefined?runtimeProps.modelValue:localValue.value;return Object.freeze({value,highlightedValue:highlighted,open:runtimeProps.open??localOpen.value,dates:dates.value,months:months.value,years:years.value,view:localView.value,viewMode:localViewMode.value,disabled:runtimeProps.disabled,readonly:runtimeProps.readonly})});useCompositeFormControl({root:()=>elements.get('content')??elements.get('grid')??null,focusTarget:()=>elements.get('trigger')??(kind==='calendar'?null:firstPickerInput(elements,kind))??elements.get('grid')??null,submissions:()=>pickerFormSubmissions(elements,kind)});const periodAvailable=value=>{const policies=runtimeProps.policies;if(granularity!=='day'){const canonical='month'in value?tryCreateMonthPickerValue(value.year,value.month):tryCreateYearPickerValue(value.year);return canonical.ok&&isCalendarValueAvailable(canonical.value,policies)}if('month'in value)return monthAvailable(value,policies);return Array.from({length:12},(_entry,index)=>index+1).some(month=>monthAvailable({year:value.year,month},policies))};const refreshCells=()=>{const grid=elements.get('grid');if(grid===undefined||connection.value===undefined)return;grid.querySelectorAll('[data-sectile-picker-date]').forEach(element=>{const parsed=parseDateValue(element.dataset['sectilePickerDate']??'');if(parsed.ok)connection.value?.setCellAttributes(element,parsed.value)})};const refresh=()=>{const raw=connection.value?.getSnapshot().state;if(raw===undefined)return;const picked=extractState(kind,raw);localValue.value=picked.value;localHighlight.value=picked.highlighted;localOpen.value=picked.open;localView.value=picked.view;localViewMode.value=picked.viewMode;if(connection.value!==undefined){dates.value=picked.viewMode==='week'?[connection.value.getWeek()]:picked.viewMode==='month'?connection.value.getMonth():[];months.value=picked.viewMode==='year'?connection.value.getYear():[];if(granularity==='year'){yearPageStart.value=pageStartContaining(picked.highlighted.year,yearPageStart.value,yearPageSize);years.value=yearsFrom(yearPageStart.value,yearPageSize)}}refreshCells();void nextTick(refreshCells)};const connect=()=>{connection.value?.disconnect();const content=elements.get('content');const grid=elements.get('grid');const trigger=elements.get('trigger')??inlineTrigger;if(content===undefined||grid===undefined||kind!=='calendar'&&trigger===undefined)return;const base={root:content,grid,disabled:runtimeProps.disabled,readOnly:runtimeProps.readonly,required:runtimeProps.required,referenceDate:referenceDate.value,...runtimeProps.label===undefined?{}:{label:runtimeProps.label},...runtimeProps.policies===undefined?{}:{policies:runtimeProps.policies},...controlled.value?{value:runtimeProps.modelValue}:{defaultValue:localValue.value},...controlled.highlighted?{highlightedValue:runtimeProps.highlightedValue}:{defaultHighlightedValue:localHighlight.value},onValueChange:value=>{localValue.value=value;if(controlled.value)pendingValue.value=value;emit('update:modelValue',value)},onHighlightedValueChange:value=>{localHighlight.value=value;emit('update:highlightedValue',value)},onUpdate:refresh};if(kind!=='calendar'){base['trigger']=trigger;const anchor=elements.get('anchor');if(anchor!==undefined)base['anchor']=anchor;Object.assign(base,{manageVisibility:false,position:runtimeProps.position,side:runtimeProps.side,align:runtimeProps.align,sideOffset:runtimeProps.sideOffset,collisionPadding:runtimeProps.collisionPadding,avoidCollisions:runtimeProps.avoidCollisions,hideWhenDetached:runtimeProps.hideWhenDetached,strategy:runtimeProps.strategy,tracking:runtimeProps.tracking});if(runtimeProps.collisionBoundary!==undefined)base['collisionBoundary']=runtimeProps.collisionBoundary;if(controlled.open)base['open']=runtimeProps.open;else base['defaultOpen']=localOpen.value;base['onOpenChange']=value=>{localOpen.value=value;emit('update:open',value)}}if(granularity==='day'){for(const part of inputParts(kind)){const element=elements.get(part);if(element!==undefined)base[toDOMInputKey(part)]=element}}connection.value=capability.connect(base);if(runtimeProps.defaultView!=='month')connection.value.handleEvent({type:'set-view-mode',value:runtimeProps.defaultView});refreshCells();refresh()};let mounted=false;let connectQueued=false;const scheduleConnect=()=>{if(!mounted||connectQueued)return;connectQueued=true;void nextTick(()=>{connectQueued=false;if(mounted)connect()})};const moveBy=(unit,delta)=>{const direction=delta<0?-1:1;for(let index=0;index<Math.abs(delta);index+=1){connection.value?.handleEvent(`${direction<0?'previous':'next'}-${unit}`)}refresh()};const selectMonth=value=>{connection.value?.handleEvent(granularity==='month'?{type:kind==='calendar'||kind==='date'||kind==='date-range'?'select':'select-date',value:createMonthPickerValue(value.year,value.month)}:{type:'select-month',value});refresh()};const selectYear=value=>{connection.value?.handleEvent({type:kind==='calendar'||kind==='date'||kind==='date-range'?'select':'select-date',value:createYearPickerValue(value.year)});refresh()};provide(key,{kind,scope,granularity,inline,state,dayAvailable:value=>isCalendarValueAvailable(value,kind==='date-time'||kind==='date-time-range'?runtimeProps.policies?.date:runtimeProps.policies),periodAvailable,formatInput:capability.formatInput,position:computed(()=>runtimeProps.position),strategy:computed(()=>runtimeProps.strategy),register:(part,element)=>{if(elements.get(part)===element||element===undefined&&!elements.has(part))return;if(element===undefined)elements.delete(part);else elements.set(part,element);scheduleConnect()},refresh:()=>connection.value?.refresh(),registerCell:(element,value)=>connection.value?.setCellAttributes(element,value),move:(unit,direction)=>{if(granularity!=='day'&&unit==='year'){connection.value?.handleEvent({type:'navigate-period',unit:granularity,direction:direction<0?'previous-page':'next-page',referenceYear:periodReferenceYear});refresh();return}moveBy(unit,direction)},handleGridKey:event=>{if(granularity==='day'&&state.value.viewMode!=='year'||event.altKey||event.ctrlKey||event.metaKey)return;const highlighted=state.value.highlightedValue;if(event.key==='Enter'||event.key===' '){event.preventDefault();event.stopImmediatePropagation();if(granularity==='year')selectYear({year:highlighted.year});else selectMonth({year:highlighted.year,month:highlighted.month});return}if(granularity!=='day'){const direction=event.key==='ArrowLeft'?'previous':event.key==='ArrowRight'?'next':event.key==='ArrowUp'?'above':event.key==='ArrowDown'?'below':event.key==='PageUp'?'previous-page':event.key==='PageDown'?'next-page':event.key==='Home'?'start':event.key==='End'?'end':null;if(direction===null)return;event.preventDefault();event.stopImmediatePropagation();connection.value?.handleEvent({type:'navigate-period',unit:granularity,direction,referenceYear:periodReferenceYear});refresh();return}let movement;if(event.key==='ArrowLeft')movement={unit:'month',delta:-1};else if(event.key==='ArrowRight')movement={unit:'month',delta:1};else if(event.key==='ArrowUp')movement={unit:'month',delta:-3};else if(event.key==='ArrowDown')movement={unit:'month',delta:3};else if(event.key==='PageUp')movement={unit:'year',delta:-1};else if(event.key==='PageDown')movement={unit:'year',delta:1};else if(event.key==='Home')movement={unit:'month',delta:1-highlighted.month};else if(event.key==='End')movement={unit:'month',delta:12-highlighted.month};else return;event.preventDefault();event.stopImmediatePropagation();if(movement.delta!==0)moveBy(movement.unit,movement.delta)},setViewMode:value=>{connection.value?.handleEvent({type:'set-view-mode',value});refresh()},selectDate:value=>{const type=kind==='calendar'||kind==='date'||kind==='date-range'?'select':'select-date';connection.value?.handleEvent({type,value});refresh()},selectMonth,selectYear});onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{mounted=false;connectQueued=false;connection.value?.disconnect();connection.value=undefined});watch([()=>runtimeProps.disabled,()=>runtimeProps.readonly,()=>runtimeProps.required,()=>runtimeProps.label,()=>runtimeProps.policies,()=>runtimeProps.position,()=>runtimeProps.side,()=>runtimeProps.align,()=>runtimeProps.sideOffset,()=>runtimeProps.collisionPadding,()=>runtimeProps.collisionBoundary,()=>runtimeProps.avoidCollisions,()=>runtimeProps.hideWhenDetached,()=>runtimeProps.strategy,()=>runtimeProps.tracking],connect);watch(referenceDate,value=>{if(runtimeProps.highlightedValue===undefined&&runtimeProps.defaultHighlightedValue===undefined&&dateOf(runtimeProps.modelValue??runtimeProps.defaultValue)===null)localHighlight.value=value;connect()});watch([()=>runtimeProps.modelValue,()=>runtimeProps.open,()=>runtimeProps.highlightedValue],(values,previousValues)=>{if(connection.value===undefined)return;if(values[0]!==previousValues[0])pendingValue.value=noPendingPickerValue;const result=connection.value.syncControlledValues({...controlled.value?{value:runtimeProps.modelValue}:{},...kind!=='calendar'&&controlled.open?{open:runtimeProps.open}:{},...controlled.highlighted?{highlightedValue:runtimeProps.highlightedValue}:{}});if(!result.ok)throw new TypeError(result.error?.message??'Could not synchronize picker values.');refresh()});return()=>h(Fragment,null,slots['default']?.(state.value)??[])}});return component}export const PickerTrigger=/* @__PURE__ */defineComponent({name:'SectilePickerTrigger',inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerTrigger');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('trigger',node instanceof HTMLElement?node:undefined),type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,'aria-haspopup':'dialog','aria-expanded':String(root.state.value.open),'data-scope':root.scope,'data-part':'trigger'}),{default:()=>slots['default']?.(root.state.value)})}});export const PickerAnchor=/* @__PURE__ */defineComponent({name:'SectilePickerAnchor',inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){const root=useRoot('PickerAnchor');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('anchor',node instanceof HTMLElement?node:undefined),'data-scope':root.scope,'data-part':'anchor'}),slots)}});export const PickerContent=/* @__PURE__ */defineComponent({name:'SectilePickerContent',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerContent');const element=shallowRef();const open=computed(()=>root.inline||root.state.value.open);const present=usePresence(open,element);watch(present,async()=>{await nextTick();root.refresh()},{flush:'post'});return()=>{const exiting=!root.inline&&!open.value&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:undefined;element.value=content;root.register('content',content)},role:root.inline?'group':'dialog','aria-modal':root.inline?undefined:'false',hidden:root.inline?false:!present.value,...exiting?{inert:true,'aria-hidden':'true'}:{},'data-scope':root.scope,'data-part':'content','data-state':root.state.value.open?'open':'closed',style:!root.inline&&root.position.value?{position:root.strategy.value}:undefined}),{default:()=>slots['default']?.(root.state.value)})}}});export const PickerPortal=/* @__PURE__ */defineComponent({name:'SectilePickerPortal',inheritAttrs:false,props:{to:{type:[String,Object],default:undefined},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot('PickerPortal');const portalTarget=useHostPortalTarget();return()=>h(Teleport,{to:props.to??portalTarget.value??'body',disabled:props.disabled,defer:props.defer},slots['default']?.())}});export const PickerGrid=/* @__PURE__ */defineComponent({name:'SectilePickerGrid',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerGrid');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('grid',node instanceof HTMLElement?node:undefined),role:'grid',onKeydown:root.handleGridKey,'data-scope':root.scope,'data-part':'grid'}),{default:()=>slots['default']?.(root.state.value)})}});export const PickerCell=/* @__PURE__ */defineComponent({name:'SectilePickerCell',inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerCell');const state=computed(()=>cellState(root.state.value,props.value,root.dayAvailable(props.value)));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,elementRef:node=>{if(node instanceof HTMLElement)root.registerCell(node,props.value)},disabled:state.value.disabled,onClick:event=>{event.stopPropagation();root.selectDate(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'data-sectile-picker-date':formatDateValue(props.value),'data-scope':root.scope,'data-part':'cell','data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined,'data-outside-month':state.value.outsideMonth?'':undefined}),{default:()=>slots['default']?.(state.value)})}});export function createPickerMonthCell(part='month-cell',name='SectilePickerMonthCell'){return defineComponent({name,inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);const state=computed(()=>({value:props.value,selected:monthContainsValue(root.state.value.value,props.value),inRange:periodInRange(root.state.value.value,{...props.value,day:1},{...props.value,day:31}),highlighted:root.state.value.highlightedValue.year===props.value.year&&root.state.value.highlightedValue.month===props.value.month,disabled:root.state.value.disabled||!root.periodAvailable(props.value)}));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:state.value.disabled,tabIndex:state.value.highlighted?0:-1,onClick:event=>{event.stopPropagation();if(!state.value.disabled)root.selectMonth(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'data-sectile-picker-month':`${String(props.value.year).padStart(4,'0')}-${String(props.value.month).padStart(2,'0')}`,'data-scope':root.scope,'data-part':part,'data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined}),{default:()=>slots['default']?.(state.value)})}})}export function createPickerYearCell(part='year-cell',name='SectilePickerYearCell'){return defineComponent({name,inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);const currentYear=(new Date).getFullYear();const state=computed(()=>({value:props.value,selected:yearContainsValue(root.state.value.value,props.value),inRange:periodInRange(root.state.value.value,{year:props.value.year,month:1,day:1},{year:props.value.year,month:12,day:31}),highlighted:root.state.value.highlightedValue.year===props.value.year,current:props.value.year===currentYear,disabled:root.state.value.disabled||!root.periodAvailable(props.value)}));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:state.value.disabled,tabIndex:state.value.highlighted?0:-1,onClick:event=>{event.stopPropagation();if(!state.value.disabled)root.selectYear(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'aria-current':state.value.current?'date':undefined,'data-sectile-picker-year':String(props.value.year),'data-scope':root.scope,'data-part':part,'data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined,'data-current':state.value.current?'':undefined}),{default:()=>slots['default']?.(state.value)})}})}export const PickerMonthCell=/* @__PURE__ */createPickerMonthCell();export const PickerYearCell=/* @__PURE__ */createPickerYearCell();export function createPickerInput(part,name,type='text'){return defineComponent({name,inheritAttrs:false,props:{name:{type:String,default:undefined},form:{type:String,default:undefined},as:{type:[String,Object,Function],default:'input'},asChild:{type:Boolean,default:false}},setup(props,{attrs}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register(part,node instanceof HTMLInputElement?node:undefined),type,name:props.name,form:props.form,disabled:root.state.value.disabled,readOnly:root.granularity!=='day'||root.state.value.readonly||part==='start-input'||part==='end-input'||part==='start-date-time-input'||part==='end-date-time-input',required:false,value:root.state.value.value===null?'':root.formatInput(root.granularity,part,root.state.value.value),'data-scope':root.scope,'data-part':part}))}})}export function createPickerMove(unit,direction,name,part){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,onClick:()=>root.move(unit,direction),'data-scope':root.scope,'data-part':part??`${direction<0?'previous':'next'}-${unit}`}),{default:()=>slots['default']?.(root.state.value)})}})}export function createPickerViewTrigger(view,name){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,onClick:()=>root.setViewMode(view),'aria-pressed':String(root.state.value.viewMode===view),'data-scope':root.scope,'data-part':`${view}-view-trigger`,'data-state':root.state.value.viewMode===view?'active':'inactive'}),{default:()=>slots['default']?.(root.state.value)})}})}function useRoot(part){const root=inject(key);if(root===undefined)throw new TypeError(`${part} must be used inside a date picker root.`);return root}function firstPickerInput(elements,kind){for(const part of inputParts(kind)){const element=elements.get(part);if(element instanceof HTMLInputElement)return element}return null}function pickerFormSubmissions(elements,kind){const submission=(part,relativeName)=>{const element=elements.get(part);if(!(element instanceof HTMLInputElement))return null;return{element:()=>element,...relativeName===undefined?{}:{relativeName},capabilities:hiddenInputSubmissionCapabilities}};if(kind==='calendar'||kind==='date')return compactSubmissions(submission('input'));if(kind==='date-range'){return compactSubmissions(submission('start-input','start'),submission('end-input','end'))}if(kind==='date-time'){const combined=submission('date-time-input');return combined===null?compactSubmissions(submission('date-input','date'),submission('time-input','time')):[combined]}const combinedStart=submission('start-date-time-input','start');const combinedEnd=submission('end-date-time-input','end');return compactSubmissions(combinedStart??submission('start-date-input','start.date'),combinedStart===null?submission('start-time-input','start.time'):null,combinedEnd??submission('end-date-input','end.date'),combinedEnd===null?submission('end-time-input','end.time'):null)}function compactSubmissions(...submissions){return submissions.filter(submission=>submission!==null)}function monthFor(value){return createCalendarMonth({year:value.year,month:value.month})}function yearFor(year){return createCalendarYear(year)}function yearsFrom(start,pageSize){const columns=4;return Array.from({length:Math.ceil(pageSize/columns)},(_row,rowIndex)=>Array.from({length:columns},(_column,columnIndex)=>Object.freeze({year:start+rowIndex*columns+columnIndex})))}function pageStartContaining(year,currentStart,pageSize){if(year<currentStart)return currentStart-Math.ceil((currentStart-year)/pageSize)*pageSize;if(year>=currentStart+pageSize)return currentStart+Math.floor((year-currentStart)/pageSize)*pageSize;return currentStart}function monthAvailable(value,policies){const days=daysInMonth(value.year,value.month);for(let day=1;day<=days;day+=1){if(isCalendarValueAvailable({year:value.year,month:value.month,day},policies))return true}return false}function daysInMonth(year,month){if(month===2)return year%4===0&&(year%100!==0||year%400===0)?29:28;return[4,6,9,11].includes(month)?30:31}function dateOf(value){if(value===null)return null;if('year'in value)return value;if('date'in value)return value.date;const start=value.start;return'date'in start?start.date:start}function extractState(kind,raw){const state=raw;if(kind==='calendar')return{value:state['value'],highlighted:state['highlighted'],open:true,view:state['view'],viewMode:state['viewMode']};if(kind==='date')return{value:state['value'],highlighted:state['highlighted'],open:state['open'],view:state['view'],viewMode:state['viewMode']};const calendar=state['calendar'];return{value:state['value'],highlighted:calendar['highlighted'],open:calendar['open'],view:calendar['view'],viewMode:calendar['viewMode']}}function compare(left,right){return left.year-right.year||left.month-right.month||left.day-right.day}function cellState(state,value,available){const selectedDate=dateOf(state.value);let selected=selectedDate!==null&&compare(selectedDate,value)===0;let inRange=false;if(state.value!==null&&!('year'in state.value)&&!('date'in state.value)){const start='date'in state.value.start?state.value.start.date:state.value.start;const end='date'in state.value.end?state.value.end.date:state.value.end;inRange=compare(start,value)<=0&&compare(value,end)<=0;selected=compare(start,value)===0||compare(end,value)===0}return{value,selected,inRange,highlighted:compare(state.highlightedValue,value)===0,disabled:state.disabled||!available,outsideMonth:value.month!==state.view.month||value.year!==state.view.year}}function monthContainsValue(value,month){const date=dateOf(value);return date!==null&&date.year===month.year&&date.month===month.month}function yearContainsValue(value,year){const date=dateOf(value);return date!==null&&date.year===year.year}function periodInRange(value,start,end){if(value===null||'year'in value||'date'in value)return false;const rangeStart='date'in value.start?value.start.date:value.start;const rangeEnd='date'in value.end?value.end.date:value.end;return compare(rangeStart,end)<=0&&compare(start,rangeEnd)<=0}function inputParts(kind){return kind==='calendar'||kind==='date'?['input']:kind==='date-range'?['start-input','end-input']:kind==='date-time'?['date-time-input','date-input','time-input']:['start-date-time-input','end-date-time-input','start-date-input','end-date-input','start-time-input','end-time-input']}function toDOMInputKey(part){if(part==='date-time-input')return'dateTimeInput';if(part==='start-date-time-input')return'startDateTimeInput';if(part==='end-date-time-input')return'endDateTimeInput';return part.replace(/-([a-z])/g,(_match,letter)=>letter.toUpperCase())}
|
|
1
|
+
import{Fragment,Teleport,computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,nextTick,provide,shallowRef,watch}from'vue';import{formatDateValue,parseDateValue}from'@sectile/dom/temporal/date-field';import{createCalendarMonth,createCalendarYear,isCalendarValueAvailable}from'@sectile/temporal/calendar';import{createDateValue,tryCreateDateValue}from'@sectile/temporal/date-field';import{hiddenInputSubmissionCapabilities,useCompositeFormControl}from'./form-control.js';import{Primitive}from'../primitive.js';import{useControlledStateInvariant}from'./controlled-state.js';import{usePresence}from'./presence.js';import{useHostPortalTarget}from'../host-provider.js';import{useTemporalReferenceDate}from'../temporal-provider.js';export function specializePickerRootPart(_kind,component){return component}const key=Symbol('SectileDatePickerRoot');const noPendingPickerValue=Symbol('no-pending-picker-value');const partProps={as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};export function createPickerRoot(capability,name,config={}){const kind=capability.kind;const scope=config.scope??kind;const granularity=config.granularity??'day';const defaultView=config.defaultView??(granularity==='day'?'month':'year');const defaultOpen=config.defaultOpen??false;const yearPageSize=config.yearPageSize??12;const inline=config.inline??false;const selectionEventType=kind==='calendar'||kind==='date'||kind==='date-range'?'select':'select-date';const component=defineComponent({name,inheritAttrs:false,props:{modelValue:{type:Object,default:undefined},defaultValue:{type:Object,default:null},open:{type:Boolean,default:undefined},defaultOpen:{type:Boolean,default:defaultOpen},highlightedValue:{type:Object,default:undefined},defaultHighlightedValue:{type:Object,default:undefined},referenceDate:{type:Object,default:undefined},defaultView:{type:String,default:defaultView},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},required:{type:Boolean,default:false},label:{type:String,default:undefined},policies:{type:Object,default:undefined},position:{type:Boolean,default:true},side:{type:String,default:'bottom'},align:{type:String,default:'center'},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:undefined},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:'absolute'},tracking:{type:String,default:'events'},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},emits:{'update:modelValue':_value=>true,'update:open':_value=>true,'update:highlightedValue':_value=>true},slots:Object,setup(props,{emit,slots}){const runtimeProps=props;const elements=new Map;const connection=shallowRef();const hostReferenceDate=useTemporalReferenceDate();const referenceDate=computed(()=>runtimeProps.referenceDate??hostReferenceDate.value);const inlineTrigger=typeof document==='undefined'||!inline||kind==='calendar'?undefined:document.createElement('button');const localValue=shallowRef(runtimeProps.modelValue!==undefined?runtimeProps.modelValue:runtimeProps.defaultValue);const localOpen=shallowRef(runtimeProps.open??runtimeProps.defaultOpen);const localHighlight=shallowRef(runtimeProps.highlightedValue??runtimeProps.defaultHighlightedValue??dateOf(localValue.value)??referenceDate.value);const periodReferenceYear=localHighlight.value.year;const yearPageStart=shallowRef(localHighlight.value.year-Math.floor(yearPageSize/2));const dates=shallowRef(monthFor(localHighlight.value));const months=shallowRef(yearFor(localHighlight.value.year));const years=shallowRef(yearsFrom(yearPageStart.value,yearPageSize));const localView=shallowRef(Object.freeze({year:localHighlight.value.year,month:localHighlight.value.month}));const localViewMode=shallowRef(runtimeProps.defaultView);const controlled={value:useControlledStateInvariant(`${kind}PickerRoot`,'modelValue',()=>runtimeProps.modelValue),open:useControlledStateInvariant(`${kind}PickerRoot`,'open',()=>runtimeProps.open),highlighted:useControlledStateInvariant(`${kind}PickerRoot`,'highlightedValue',()=>runtimeProps.highlightedValue)};const pendingValue=shallowRef(noPendingPickerValue);const state=computed(()=>{const highlighted=runtimeProps.highlightedValue??localHighlight.value;const value=controlled.value&&pendingValue.value!==noPendingPickerValue?pendingValue.value:runtimeProps.modelValue!==undefined?runtimeProps.modelValue:localValue.value;return Object.freeze({value,highlightedValue:highlighted,open:runtimeProps.open??localOpen.value,dates:dates.value,months:months.value,years:years.value,view:localView.value,viewMode:localViewMode.value,disabled:runtimeProps.disabled,readonly:runtimeProps.readonly})});useCompositeFormControl({root:()=>elements.get('content')??elements.get('grid')??null,focusTarget:()=>elements.get('trigger')??(kind==='calendar'?null:firstPickerInput(elements,kind))??elements.get('grid')??null,submissions:()=>pickerFormSubmissions(elements,kind)});const periodAvailable=value=>{const policies=runtimeProps.policies;if(granularity!=='day'){const canonical='month'in value?tryCreateDateValue(value.year,value.month,1):tryCreateDateValue(value.year,1,1);return canonical.ok&&isCalendarValueAvailable(canonical.value,policies)}if('month'in value)return monthAvailable(value,policies);return Array.from({length:12},(_entry,index)=>index+1).some(month=>monthAvailable({year:value.year,month},policies))};const refreshCells=()=>{const grid=elements.get('grid');if(grid===undefined||connection.value===undefined)return;grid.querySelectorAll('[data-sectile-picker-date]').forEach(element=>{const parsed=parseDateValue(element.dataset['sectilePickerDate']??'');if(parsed.ok)connection.value?.setCellAttributes(element,parsed.value)})};const refresh=()=>{const raw=connection.value?.getSnapshot().state;if(raw===undefined)return;const picked=extractState(kind,raw);localValue.value=picked.value;localHighlight.value=picked.highlighted;localOpen.value=picked.open;localView.value=picked.view;localViewMode.value=picked.viewMode;if(connection.value!==undefined){dates.value=picked.viewMode==='week'?[connection.value.getWeek()]:picked.viewMode==='month'?connection.value.getMonth():[];months.value=picked.viewMode==='year'?connection.value.getYear():[];if(granularity==='year'){yearPageStart.value=pageStartContaining(picked.highlighted.year,yearPageStart.value,yearPageSize);years.value=yearsFrom(yearPageStart.value,yearPageSize)}}refreshCells();void nextTick(refreshCells)};const connect=()=>{connection.value?.disconnect();const content=elements.get('content');const grid=elements.get('grid');const trigger=elements.get('trigger')??inlineTrigger;if(content===undefined||grid===undefined||kind!=='calendar'&&trigger===undefined)return;const base={root:content,grid,disabled:runtimeProps.disabled,readOnly:runtimeProps.readonly,required:runtimeProps.required,referenceDate:referenceDate.value,...runtimeProps.label===undefined?{}:{label:runtimeProps.label},...runtimeProps.policies===undefined?{}:{policies:runtimeProps.policies},...controlled.value?{value:runtimeProps.modelValue}:{defaultValue:localValue.value},...controlled.highlighted?{highlightedValue:runtimeProps.highlightedValue}:{defaultHighlightedValue:localHighlight.value},onValueChange:value=>{localValue.value=value;if(controlled.value)pendingValue.value=value;emit('update:modelValue',value)},onHighlightedValueChange:value=>{localHighlight.value=value;emit('update:highlightedValue',value)},onUpdate:refresh};if(kind!=='calendar'){base['trigger']=trigger;const anchor=elements.get('anchor');if(anchor!==undefined)base['anchor']=anchor;Object.assign(base,{manageVisibility:false,position:runtimeProps.position,side:runtimeProps.side,align:runtimeProps.align,sideOffset:runtimeProps.sideOffset,collisionPadding:runtimeProps.collisionPadding,avoidCollisions:runtimeProps.avoidCollisions,hideWhenDetached:runtimeProps.hideWhenDetached,strategy:runtimeProps.strategy,tracking:runtimeProps.tracking});if(runtimeProps.collisionBoundary!==undefined)base['collisionBoundary']=runtimeProps.collisionBoundary;if(controlled.open)base['open']=runtimeProps.open;else base['defaultOpen']=localOpen.value;base['onOpenChange']=value=>{localOpen.value=value;emit('update:open',value)}}if(granularity==='day'){for(const part of inputParts(kind)){const element=elements.get(part);if(element!==undefined)base[toDOMInputKey(part)]=element}}connection.value=capability.connect(base);if(runtimeProps.defaultView!=='month')connection.value.handleEvent({type:'set-view-mode',value:runtimeProps.defaultView});refreshCells();refresh()};let mounted=false;let connectQueued=false;const scheduleConnect=()=>{if(!mounted||connectQueued)return;connectQueued=true;void nextTick(()=>{connectQueued=false;if(mounted)connect()})};const moveBy=(unit,delta)=>{const direction=delta<0?-1:1;for(let index=0;index<Math.abs(delta);index+=1){connection.value?.handleEvent(`${direction<0?'previous':'next'}-${unit}`)}refresh()};const selectMonth=value=>{connection.value?.handleEvent(granularity==='month'?{type:selectionEventType,value:createDateValue(value.year,value.month,1)}:{type:'select-month',value});refresh()};const selectYear=value=>{connection.value?.handleEvent({type:selectionEventType,value:createDateValue(value.year,1,1)});refresh()};provide(key,{kind,scope,granularity,inline,state,dayAvailable:value=>isCalendarValueAvailable(value,kind==='date-time'||kind==='date-time-range'?runtimeProps.policies?.date:runtimeProps.policies),periodAvailable,formatInput:capability.formatInput,position:computed(()=>runtimeProps.position),strategy:computed(()=>runtimeProps.strategy),register:(part,element)=>{if(elements.get(part)===element||element===undefined&&!elements.has(part))return;if(element===undefined)elements.delete(part);else elements.set(part,element);scheduleConnect()},refresh:()=>connection.value?.refresh(),registerCell:(element,value)=>connection.value?.setCellAttributes(element,value),move:(unit,direction)=>{if(granularity!=='day'&&unit==='year'){connection.value?.handleEvent({type:'navigate-period',unit:granularity,direction:direction<0?'previous-page':'next-page',referenceYear:periodReferenceYear});refresh();return}moveBy(unit,direction)},handleGridKey:event=>{if(granularity==='day'&&state.value.viewMode!=='year'||event.altKey||event.ctrlKey||event.metaKey)return;const highlighted=state.value.highlightedValue;if(event.key==='Enter'||event.key===' '){event.preventDefault();event.stopImmediatePropagation();if(granularity==='year')selectYear({year:highlighted.year});else selectMonth({year:highlighted.year,month:highlighted.month});return}if(granularity!=='day'){const direction=event.key==='ArrowLeft'?'previous':event.key==='ArrowRight'?'next':event.key==='ArrowUp'?'above':event.key==='ArrowDown'?'below':event.key==='PageUp'?'previous-page':event.key==='PageDown'?'next-page':event.key==='Home'?'start':event.key==='End'?'end':null;if(direction===null)return;event.preventDefault();event.stopImmediatePropagation();connection.value?.handleEvent({type:'navigate-period',unit:granularity,direction,referenceYear:periodReferenceYear});refresh();return}let movement;if(event.key==='ArrowLeft')movement={unit:'month',delta:-1};else if(event.key==='ArrowRight')movement={unit:'month',delta:1};else if(event.key==='ArrowUp')movement={unit:'month',delta:-3};else if(event.key==='ArrowDown')movement={unit:'month',delta:3};else if(event.key==='PageUp')movement={unit:'year',delta:-1};else if(event.key==='PageDown')movement={unit:'year',delta:1};else if(event.key==='Home')movement={unit:'month',delta:1-highlighted.month};else if(event.key==='End')movement={unit:'month',delta:12-highlighted.month};else return;event.preventDefault();event.stopImmediatePropagation();if(movement.delta!==0)moveBy(movement.unit,movement.delta)},setViewMode:value=>{connection.value?.handleEvent({type:'set-view-mode',value});refresh()},selectDate:value=>{connection.value?.handleEvent({type:selectionEventType,value});refresh()},selectMonth,selectYear});onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{mounted=false;connectQueued=false;connection.value?.disconnect();connection.value=undefined});watch([()=>runtimeProps.disabled,()=>runtimeProps.readonly,()=>runtimeProps.required,()=>runtimeProps.label,()=>runtimeProps.policies,()=>runtimeProps.position,()=>runtimeProps.side,()=>runtimeProps.align,()=>runtimeProps.sideOffset,()=>runtimeProps.collisionPadding,()=>runtimeProps.collisionBoundary,()=>runtimeProps.avoidCollisions,()=>runtimeProps.hideWhenDetached,()=>runtimeProps.strategy,()=>runtimeProps.tracking],connect);watch(referenceDate,value=>{if(runtimeProps.highlightedValue===undefined&&runtimeProps.defaultHighlightedValue===undefined&&dateOf(runtimeProps.modelValue??runtimeProps.defaultValue)===null)localHighlight.value=value;connect()});watch([()=>runtimeProps.modelValue,()=>runtimeProps.open,()=>runtimeProps.highlightedValue],(values,previousValues)=>{if(connection.value===undefined)return;if(values[0]!==previousValues[0])pendingValue.value=noPendingPickerValue;const result=connection.value.syncControlledValues({...controlled.value?{value:runtimeProps.modelValue}:{},...kind!=='calendar'&&controlled.open?{open:runtimeProps.open}:{},...controlled.highlighted?{highlightedValue:runtimeProps.highlightedValue}:{}});if(!result.ok)throw new TypeError(result.error?.message??'Could not synchronize picker values.');refresh()});return()=>h(Fragment,null,slots['default']?.(state.value)??[])}});return component}export const PickerTrigger=/* @__PURE__ */defineComponent({name:'SectilePickerTrigger',inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerTrigger');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('trigger',node instanceof HTMLElement?node:undefined),type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,'aria-haspopup':'dialog','aria-expanded':String(root.state.value.open),'data-scope':root.scope,'data-part':'trigger'}),{default:()=>slots['default']?.(root.state.value)})}});export const PickerAnchor=/* @__PURE__ */defineComponent({name:'SectilePickerAnchor',inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){const root=useRoot('PickerAnchor');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('anchor',node instanceof HTMLElement?node:undefined),'data-scope':root.scope,'data-part':'anchor'}),slots)}});export const PickerContent=/* @__PURE__ */defineComponent({name:'SectilePickerContent',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerContent');const element=shallowRef();const open=computed(()=>root.inline||root.state.value.open);const present=usePresence(open,element);watch(present,async()=>{await nextTick();root.refresh()},{flush:'post'});return()=>{const exiting=!root.inline&&!open.value&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:undefined;element.value=content;root.register('content',content)},role:root.inline?'group':'dialog','aria-modal':root.inline?undefined:'false',hidden:root.inline?false:!present.value,...exiting?{inert:true,'aria-hidden':'true'}:{},'data-scope':root.scope,'data-part':'content','data-state':root.state.value.open?'open':'closed',style:!root.inline&&root.position.value?{position:root.strategy.value}:undefined}),{default:()=>slots['default']?.(root.state.value)})}}});export const PickerPortal=/* @__PURE__ */defineComponent({name:'SectilePickerPortal',inheritAttrs:false,props:{to:{type:[String,Object],default:undefined},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot('PickerPortal');const portalTarget=useHostPortalTarget();return()=>h(Teleport,{to:props.to??portalTarget.value??'body',disabled:props.disabled,defer:props.defer},slots['default']?.())}});export const PickerGrid=/* @__PURE__ */defineComponent({name:'SectilePickerGrid',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerGrid');return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register('grid',node instanceof HTMLElement?node:undefined),role:'grid',onKeydown:root.handleGridKey,'data-scope':root.scope,'data-part':'grid'}),{default:()=>slots['default']?.(root.state.value)})}});export const PickerCell=/* @__PURE__ */defineComponent({name:'SectilePickerCell',inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot('PickerCell');const state=computed(()=>cellState(root.state.value,props.value,root.dayAvailable(props.value)));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,elementRef:node=>{if(node instanceof HTMLElement)root.registerCell(node,props.value)},disabled:state.value.disabled,onClick:event=>{event.stopPropagation();root.selectDate(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'data-sectile-picker-date':formatDateValue(props.value),'data-scope':root.scope,'data-part':'cell','data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined,'data-outside-month':state.value.outsideMonth?'':undefined}),{default:()=>slots['default']?.(state.value)})}});export function createPickerMonthCell(part='month-cell',name='SectilePickerMonthCell'){return defineComponent({name,inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);const state=computed(()=>({value:props.value,selected:monthContainsValue(root.state.value.value,props.value),inRange:periodInRange(root.state.value.value,{...props.value,day:1},{...props.value,day:31}),highlighted:root.state.value.highlightedValue.year===props.value.year&&root.state.value.highlightedValue.month===props.value.month,disabled:root.state.value.disabled||!root.periodAvailable(props.value)}));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:state.value.disabled,tabIndex:state.value.highlighted?0:-1,onClick:event=>{event.stopPropagation();if(!state.value.disabled)root.selectMonth(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'data-sectile-picker-month':`${String(props.value.year).padStart(4,'0')}-${String(props.value.month).padStart(2,'0')}`,'data-scope':root.scope,'data-part':part,'data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined}),{default:()=>slots['default']?.(state.value)})}})}export function createPickerYearCell(part='year-cell',name='SectilePickerYearCell'){return defineComponent({name,inheritAttrs:false,props:{value:{type:Object,required:true},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);const currentYear=(new Date).getFullYear();const state=computed(()=>({value:props.value,selected:yearContainsValue(root.state.value.value,props.value),inRange:periodInRange(root.state.value.value,{year:props.value.year,month:1,day:1},{year:props.value.year,month:12,day:31}),highlighted:root.state.value.highlightedValue.year===props.value.year,current:props.value.year===currentYear,disabled:root.state.value.disabled||!root.periodAvailable(props.value)}));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:state.value.disabled,tabIndex:state.value.highlighted?0:-1,onClick:event=>{event.stopPropagation();if(!state.value.disabled)root.selectYear(props.value)},role:'gridcell','aria-selected':String(state.value.selected||state.value.inRange),'aria-disabled':String(state.value.disabled),'aria-current':state.value.current?'date':undefined,'data-sectile-picker-year':String(props.value.year),'data-scope':root.scope,'data-part':part,'data-selected':state.value.selected?'':undefined,'data-in-range':state.value.inRange?'':undefined,'data-highlighted':state.value.highlighted?'':undefined,'data-current':state.value.current?'':undefined}),{default:()=>slots['default']?.(state.value)})}})}export const PickerMonthCell=/* @__PURE__ */createPickerMonthCell();export const PickerYearCell=/* @__PURE__ */createPickerYearCell();export function createPickerInput(part,name,type='text'){return defineComponent({name,inheritAttrs:false,props:{name:{type:String,default:undefined},form:{type:String,default:undefined},as:{type:[String,Object,Function],default:'input'},asChild:{type:Boolean,default:false}},setup(props,{attrs}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.register(part,node instanceof HTMLInputElement?node:undefined),type,name:props.name,form:props.form,disabled:root.state.value.disabled,readOnly:root.granularity!=='day'||root.state.value.readonly||part==='start-input'||part==='end-input'||part==='start-date-time-input'||part==='end-date-time-input',required:false,value:root.state.value.value===null?'':root.formatInput(root.granularity,part,root.state.value.value),'data-scope':root.scope,'data-part':part}))}})}export function createPickerMove(unit,direction,name,part){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,onClick:()=>root.move(unit,direction),'data-scope':root.scope,'data-part':part??`${direction<0?'previous':'next'}-${unit}`}),{default:()=>slots['default']?.(root.state.value)})}})}export function createPickerViewTrigger(view,name){return defineComponent({name,inheritAttrs:false,props:{as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:root.state.value.disabled,onClick:()=>root.setViewMode(view),'aria-pressed':String(root.state.value.viewMode===view),'data-scope':root.scope,'data-part':`${view}-view-trigger`,'data-state':root.state.value.viewMode===view?'active':'inactive'}),{default:()=>slots['default']?.(root.state.value)})}})}function useRoot(part){const root=inject(key);if(root===undefined)throw new TypeError(`${part} must be used inside a date picker root.`);return root}function firstPickerInput(elements,kind){for(const part of inputParts(kind)){const element=elements.get(part);if(element instanceof HTMLInputElement)return element}return null}function pickerFormSubmissions(elements,kind){const submission=(part,relativeName)=>{const element=elements.get(part);if(!(element instanceof HTMLInputElement))return null;return{element:()=>element,...relativeName===undefined?{}:{relativeName},capabilities:hiddenInputSubmissionCapabilities}};if(kind==='calendar'||kind==='date')return compactSubmissions(submission('input'));if(kind==='date-range'){return compactSubmissions(submission('start-input','start'),submission('end-input','end'))}if(kind==='date-time'){const combined=submission('date-time-input');return combined===null?compactSubmissions(submission('date-input','date'),submission('time-input','time')):[combined]}const combinedStart=submission('start-date-time-input','start');const combinedEnd=submission('end-date-time-input','end');return compactSubmissions(combinedStart??submission('start-date-input','start.date'),combinedStart===null?submission('start-time-input','start.time'):null,combinedEnd??submission('end-date-input','end.date'),combinedEnd===null?submission('end-time-input','end.time'):null)}function compactSubmissions(...submissions){return submissions.filter(submission=>submission!==null)}function monthFor(value){return createCalendarMonth({year:value.year,month:value.month})}function yearFor(year){return createCalendarYear(year)}function yearsFrom(start,pageSize){const columns=4;return Array.from({length:Math.ceil(pageSize/columns)},(_row,rowIndex)=>Array.from({length:columns},(_column,columnIndex)=>Object.freeze({year:start+rowIndex*columns+columnIndex})))}function pageStartContaining(year,currentStart,pageSize){if(year<currentStart)return currentStart-Math.ceil((currentStart-year)/pageSize)*pageSize;if(year>=currentStart+pageSize)return currentStart+Math.floor((year-currentStart)/pageSize)*pageSize;return currentStart}function monthAvailable(value,policies){const days=daysInMonth(value.year,value.month);for(let day=1;day<=days;day+=1){if(isCalendarValueAvailable({year:value.year,month:value.month,day},policies))return true}return false}function daysInMonth(year,month){if(month===2)return year%4===0&&(year%100!==0||year%400===0)?29:28;return[4,6,9,11].includes(month)?30:31}function dateOf(value){if(value===null)return null;if('year'in value)return value;if('date'in value)return value.date;const start=value.start;return'date'in start?start.date:start}function extractState(kind,raw){const state=raw;if(kind==='calendar')return{value:state['value'],highlighted:state['highlighted'],open:true,view:state['view'],viewMode:state['viewMode']};if(kind==='date')return{value:state['value'],highlighted:state['highlighted'],open:state['open'],view:state['view'],viewMode:state['viewMode']};const calendar=state['calendar'];return{value:state['value'],highlighted:calendar['highlighted'],open:calendar['open'],view:calendar['view'],viewMode:calendar['viewMode']}}function compare(left,right){return left.year-right.year||left.month-right.month||left.day-right.day}function cellState(state,value,available){const selectedDate=dateOf(state.value);let selected=selectedDate!==null&&compare(selectedDate,value)===0;let inRange=false;if(state.value!==null&&!('year'in state.value)&&!('date'in state.value)){const start='date'in state.value.start?state.value.start.date:state.value.start;const end='date'in state.value.end?state.value.end.date:state.value.end;inRange=compare(start,value)<=0&&compare(value,end)<=0;selected=compare(start,value)===0||compare(end,value)===0}return{value,selected,inRange,highlighted:compare(state.highlightedValue,value)===0,disabled:state.disabled||!available,outsideMonth:value.month!==state.view.month||value.year!==state.view.year}}function monthContainsValue(value,month){const date=dateOf(value);return date!==null&&date.year===month.year&&date.month===month.month}function yearContainsValue(value,year){const date=dateOf(value);return date!==null&&date.year===year.year}function periodInRange(value,start,end){if(value===null||'year'in value||'date'in value)return false;const rangeStart='date'in value.start?value.start.date:value.start;const rangeEnd='date'in value.end?value.end.date:value.end;return compare(rangeStart,end)<=0&&compare(start,rangeEnd)<=0}function inputParts(kind){return kind==='calendar'||kind==='date'?['input']:kind==='date-range'?['start-input','end-input']:kind==='date-time'?['date-time-input','date-input','time-input']:['start-date-time-input','end-date-time-input','start-date-input','end-date-input','start-time-input','end-time-input']}function toDOMInputKey(part){if(part==='date-time-input')return'dateTimeInput';if(part==='start-date-time-input')return'startDateTimeInput';if(part==='end-date-time-input')return'endDateTimeInput';return part.replace(/-([a-z])/g,(_match,letter)=>letter.toUpperCase())}
|
|
2
2
|
//# sourceMappingURL=date-picker.js.map
|