This commit is contained in:
nik
2025-10-03 22:27:28 +03:00
parent 829fad0e17
commit 871cf7e792
16520 changed files with 2967597 additions and 3 deletions

View File

@@ -0,0 +1,8 @@
/// <reference types="react" />
import { PopoverMachine } from './popover-machine.js';
export declare const PopoverContext: import("react").Context<PopoverMachine | null>;
export declare function usePopoverMachineContext(component: string): PopoverMachine;
export declare function usePopoverMachine({ id, __demoMode, }: {
id: string;
__demoMode?: boolean;
}): PopoverMachine;

View File

@@ -0,0 +1 @@
import{createContext as t,useContext as n,useMemo as i}from"react";import{useOnUnmount as c}from'../../hooks/use-on-unmount.js';import{PopoverMachine as p}from'./popover-machine.js';const a=t(null);function u(r){let o=n(a);if(o===null){let e=new Error(`<${r} /> is missing a parent <Popover /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,u),e}return o}function f({id:r,__demoMode:o=!1}){let e=i(()=>p.new({id:r,__demoMode:o}),[]);return c(()=>e.dispose()),e}export{a as PopoverContext,f as usePopoverMachine,u as usePopoverMachineContext};

View File

@@ -0,0 +1,76 @@
import { type MouseEventHandler } from 'react';
import { Machine } from '../../machine.js';
type MouseEvent<T> = Parameters<MouseEventHandler<T>>[0];
export declare enum PopoverStates {
Open = 0,
Closed = 1
}
interface State {
id: string;
popoverState: PopoverStates;
buttons: {
current: Symbol[];
};
button: HTMLElement | null;
buttonId: string | null;
panel: HTMLElement | null;
panelId: string | null;
beforePanelSentinel: {
current: HTMLButtonElement | null;
};
afterPanelSentinel: {
current: HTMLButtonElement | null;
};
afterButtonSentinel: {
current: HTMLButtonElement | null;
};
__demoMode: boolean;
}
export declare enum ActionTypes {
OpenPopover = 0,
ClosePopover = 1,
SetButton = 2,
SetButtonId = 3,
SetPanel = 4,
SetPanelId = 5
}
export type Actions = {
type: ActionTypes.OpenPopover;
} | {
type: ActionTypes.ClosePopover;
} | {
type: ActionTypes.SetButton;
button: HTMLElement | null;
} | {
type: ActionTypes.SetButtonId;
buttonId: string | null;
} | {
type: ActionTypes.SetPanel;
panel: HTMLElement | null;
} | {
type: ActionTypes.SetPanelId;
panelId: string | null;
};
export declare class PopoverMachine extends Machine<State, Actions> {
static new({ id, __demoMode }: {
id: string;
__demoMode?: boolean;
}): PopoverMachine;
constructor(initialState: State);
reduce(state: Readonly<State>, action: Actions): State;
actions: {
close: () => void;
refocusableClose: (focusableElement?: HTMLElement | {
current: HTMLElement | null;
} | MouseEvent<HTMLElement>) => void;
open: () => void;
setButtonId: (id: string | null) => void;
setButton: (button: HTMLElement | null) => void;
setPanelId: (id: string | null) => void;
setPanel: (panel: HTMLElement | null) => void;
};
selectors: {
isPortalled: (state: State) => boolean;
};
}
export {};

View File

@@ -0,0 +1 @@
var f=Object.defineProperty;var b=(t,n,e)=>n in t?f(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e;var p=(t,n,e)=>(b(t,typeof n!="symbol"?n+"":n,e),e);import{Machine as P}from'../../machine.js';import{stackMachines as y}from'../../machines/stack-machine.js';import*as a from'../../utils/dom.js';import{getFocusableElements as I}from'../../utils/focus-management.js';import{match as M}from'../../utils/match.js';import{getOwnerDocument as T}from'../../utils/owner.js';var v=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(v||{}),h=(r=>(r[r.OpenPopover=0]="OpenPopover",r[r.ClosePopover=1]="ClosePopover",r[r.SetButton=2]="SetButton",r[r.SetButtonId=3]="SetButtonId",r[r.SetPanel=4]="SetPanel",r[r.SetPanelId=5]="SetPanelId",r))(h||{});let E={[0]:t=>t.popoverState===0?t:{...t,popoverState:0,__demoMode:!1},[1](t){return t.popoverState===1?t:{...t,popoverState:1,__demoMode:!1}},[2](t,n){return t.button===n.button?t:{...t,button:n.button}},[3](t,n){return t.buttonId===n.buttonId?t:{...t,buttonId:n.buttonId}},[4](t,n){return t.panel===n.panel?t:{...t,panel:n.panel}},[5](t,n){return t.panelId===n.panelId?t:{...t,panelId:n.panelId}}};class d extends P{constructor(e){super(e);p(this,"actions",{close:()=>this.send({type:1}),refocusableClose:e=>{this.actions.close();let o=(()=>e?a.isHTMLElement(e)?e:"current"in e&&a.isHTMLElement(e.current)?e.current:this.state.button:this.state.button)();o==null||o.focus()},open:()=>this.send({type:0}),setButtonId:e=>this.send({type:3,buttonId:e}),setButton:e=>this.send({type:2,button:e}),setPanelId:e=>this.send({type:5,panelId:e}),setPanel:e=>this.send({type:4,panel:e})});p(this,"selectors",{isPortalled:e=>{var i;if(!e.button||!e.panel)return!1;let o=(i=T(e.button))!=null?i:document;for(let u of o.querySelectorAll("body > *"))if(Number(u==null?void 0:u.contains(e.button))^Number(u==null?void 0:u.contains(e.panel)))return!0;let l=I(o),s=l.indexOf(e.button),r=(s+l.length-1)%l.length,c=(s+1)%l.length,S=l[r],m=l[c];return!e.panel.contains(S)&&!e.panel.contains(m)}});{let o=this.state.id,l=y.get(null);this.on(0,()=>l.actions.push(o)),this.on(1,()=>l.actions.pop(o))}}static new({id:e,__demoMode:o=!1}){return new d({id:e,__demoMode:o,popoverState:o?0:1,buttons:{current:[]},button:null,buttonId:null,panel:null,panelId:null,beforePanelSentinel:{current:null},afterPanelSentinel:{current:null},afterButtonSentinel:{current:null}})}reduce(e,o){return M(o.type,E,e,o)}}export{h as ActionTypes,d as PopoverMachine,v as PopoverStates};

View File

@@ -0,0 +1,96 @@
import React, { type ElementType, type MouseEventHandler, type MutableRefObject, type Ref } from 'react';
import { type AnchorProps } from '../../internal/floating.js';
import type { Props } from '../../types.js';
import { type HasDisplayName, type PropsForFeatures, type RefProp } from '../../utils/render.js';
type MouseEvent<T> = Parameters<MouseEventHandler<T>>[0];
declare let DEFAULT_POPOVER_TAG: "div";
type PopoverRenderPropArg = {
open: boolean;
close: (focusableElement?: HTMLElement | MutableRefObject<HTMLElement | null> | MouseEvent<HTMLElement>) => void;
};
type PopoverPropsWeControl = never;
export type PopoverProps<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> = Props<TTag, PopoverRenderPropArg, PopoverPropsWeControl, {
__demoMode?: boolean;
}>;
declare function PopoverFn<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG>(props: PopoverProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element;
declare let DEFAULT_BUTTON_TAG: "button";
type ButtonRenderPropArg = {
open: boolean;
active: boolean;
hover: boolean;
focus: boolean;
disabled: boolean;
autofocus: boolean;
};
type ButtonPropsWeControl = 'aria-controls' | 'aria-expanded';
export type PopoverButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<TTag, ButtonRenderPropArg, ButtonPropsWeControl, {
disabled?: boolean;
autoFocus?: boolean;
}>;
declare function ButtonFn<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(props: PopoverButtonProps<TTag>, ref: Ref<HTMLButtonElement>): React.JSX.Element;
declare let DEFAULT_BACKDROP_TAG: "div";
type BackdropRenderPropArg = {
open: boolean;
};
type BackdropPropsWeControl = 'aria-hidden';
declare let BackdropRenderFeatures: number;
export type PopoverBackdropProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = Props<TTag, BackdropRenderPropArg, BackdropPropsWeControl, {
transition?: boolean;
} & PropsForFeatures<typeof BackdropRenderFeatures>>;
export type PopoverOverlayProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = PopoverBackdropProps<TTag>;
declare function BackdropFn<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(props: PopoverBackdropProps<TTag>, ref: Ref<HTMLElement>): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
declare let DEFAULT_PANEL_TAG: "div";
type PanelRenderPropArg = {
open: boolean;
close: (focusableElement?: HTMLElement | MutableRefObject<HTMLElement | null>) => void;
};
type PanelPropsWeControl = 'tabIndex';
export type PopoverPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg, PanelPropsWeControl, {
focus?: boolean;
anchor?: AnchorProps;
portal?: boolean;
modal?: boolean;
transition?: boolean;
static?: boolean;
unmount?: boolean;
}>;
declare function PanelFn<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: PopoverPanelProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element;
declare let DEFAULT_GROUP_TAG: "div";
type GroupRenderPropArg = {};
type GroupPropsWeControl = never;
export type PopoverGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<TTag, GroupRenderPropArg, GroupPropsWeControl>;
declare function GroupFn<TTag extends ElementType = typeof DEFAULT_GROUP_TAG>(props: PopoverGroupProps<TTag>, ref: Ref<HTMLElement>): React.JSX.Element;
export interface _internal_ComponentPopover extends HasDisplayName {
<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG>(props: PopoverProps<TTag> & RefProp<typeof PopoverFn>): React.JSX.Element;
}
export interface _internal_ComponentPopoverButton extends HasDisplayName {
<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(props: PopoverButtonProps<TTag> & RefProp<typeof ButtonFn>): React.JSX.Element;
}
export interface _internal_ComponentPopoverBackdrop extends HasDisplayName {
<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(props: PopoverBackdropProps<TTag> & RefProp<typeof BackdropFn>): React.JSX.Element;
}
export interface _internal_ComponentPopoverPanel extends HasDisplayName {
<TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(props: PopoverPanelProps<TTag> & RefProp<typeof PanelFn>): React.JSX.Element;
}
export interface _internal_ComponentPopoverGroup extends HasDisplayName {
<TTag extends ElementType = typeof DEFAULT_GROUP_TAG>(props: PopoverGroupProps<TTag> & RefProp<typeof GroupFn>): React.JSX.Element;
}
export declare let PopoverButton: _internal_ComponentPopoverButton;
/** @deprecated use `<PopoverBackdrop>` instead of `<PopoverOverlay>` */
export declare let PopoverOverlay: _internal_ComponentPopoverBackdrop;
export declare let PopoverBackdrop: _internal_ComponentPopoverBackdrop;
export declare let PopoverPanel: _internal_ComponentPopoverPanel;
export declare let PopoverGroup: _internal_ComponentPopoverGroup;
export declare let Popover: _internal_ComponentPopover & {
/** @deprecated use `<PopoverButton>` instead of `<Popover.Button>` */
Button: _internal_ComponentPopoverButton;
/** @deprecated use `<PopoverBackdrop>` instead of `<Popover.Backdrop>` */
Backdrop: _internal_ComponentPopoverBackdrop;
/** @deprecated use `<PopoverOverlay>` instead of `<Popover.Overlay>` */
Overlay: _internal_ComponentPopoverBackdrop;
/** @deprecated use `<PopoverPanel>` instead of `<Popover.Panel>` */
Panel: _internal_ComponentPopoverPanel;
/** @deprecated use `<PopoverGroup>` instead of `<Popover.Group>` */
Group: _internal_ComponentPopoverGroup;
};
export {};

File diff suppressed because one or more lines are too long