init component

This commit is contained in:
Robin COuret
2026-02-16 17:28:37 +01:00
parent 460c7a25e0
commit e0e50af706
4557 changed files with 666911 additions and 8 deletions

View File

@@ -0,0 +1,2 @@
export * from './providePopupController';
export * from './usePopupController';

View File

@@ -0,0 +1,3 @@
export * from './providePopupController';
export * from './usePopupController';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/composables/popupController/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAAd;AACA,cAAc,sBAAd","sourcesContent":["export * from './providePopupController';\nexport * from './usePopupController';\n"],"sourceRoot":"","file":"index.js"}

View File

@@ -0,0 +1,14 @@
import { IO } from 'fp-ts/lib/IO';
import { VNode } from 'vue';
import { Transition } from '../../types/Transition';
import { Remove } from '../shared';
export declare const POPUP_CONTROLLER_SYMBOL: unique symbol;
export interface ShowPopupOptions {
render: IO<VNode[]>;
transition?: Transition;
}
export interface PopupControllerInjection {
showPopup: (options: ShowPopupOptions) => Remove;
}
export declare const DEFAULT_POPUP_CONTROLLER_INJECTION: PopupControllerInjection;
export declare function providePopupController(showPopup: (options: ShowPopupOptions) => Remove): PopupControllerInjection;

View File

@@ -0,0 +1,14 @@
import { constant, constVoid } from 'fp-ts/lib/function';
import { provide } from 'vue';
export const POPUP_CONTROLLER_SYMBOL = Symbol('popup-controller');
export const DEFAULT_POPUP_CONTROLLER_INJECTION = {
showPopup: constant(constVoid)
};
export function providePopupController(showPopup) {
const injection = {
showPopup
};
provide(POPUP_CONTROLLER_SYMBOL, injection);
return injection;
}
//# sourceMappingURL=providePopupController.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/composables/popupController/providePopupController.ts"],"names":[],"mappings":"AAAA,SAAS,QAAT,EAAmB,SAAnB,QAAoC,oBAApC;AAEA,SAAS,OAAT,QAA+B,KAA/B;AAIA,OAAO,MAAM,uBAAuB,GAAG,MAAM,CAAC,kBAAD,CAAtC;AAWP,OAAO,MAAM,kCAAkC,GAA6B;AAC1E,EAAA,SAAS,EAAE,QAAQ,CAAC,SAAD;AADuD,CAArE;AAIP,OAAM,SAAU,sBAAV,CAAiC,SAAjC,EAAiF;AACrF,QAAM,SAAS,GAA6B;AAC1C,IAAA;AAD0C,GAA5C;AAIA,EAAA,OAAO,CAAC,uBAAD,EAA0B,SAA1B,CAAP;AACA,SAAO,SAAP;AACD","sourcesContent":["import { constant, constVoid } from 'fp-ts/lib/function';\nimport { IO } from 'fp-ts/lib/IO';\nimport { provide, VNode } from 'vue';\nimport { Transition } from '../../types/Transition';\nimport { Remove } from '../shared';\n\nexport const POPUP_CONTROLLER_SYMBOL = Symbol('popup-controller');\n\nexport interface ShowPopupOptions {\n render: IO<VNode[]>;\n transition?: Transition;\n}\n\nexport interface PopupControllerInjection {\n showPopup: (options: ShowPopupOptions) => Remove;\n}\n\nexport const DEFAULT_POPUP_CONTROLLER_INJECTION: PopupControllerInjection = {\n showPopup: constant(constVoid)\n};\n\nexport function providePopupController(showPopup: (options: ShowPopupOptions) => Remove) {\n const injection: PopupControllerInjection = {\n showPopup\n };\n\n provide(POPUP_CONTROLLER_SYMBOL, injection);\n return injection;\n}\n"],"sourceRoot":"","file":"providePopupController.js"}

View File

@@ -0,0 +1,58 @@
import { IO } from 'fp-ts/lib/IO';
import { VNode, ExtractPropTypes, Ref } from 'vue';
export declare const UsePopupControllerPropsDefinition: {
onToggle: {
type: import("vue").PropType<import("fp-ts/lib/function").FunctionN<[boolean], void>>;
required: false;
};
onSetOn: {
type: import("vue").PropType<IO<void>>;
required: false;
};
onSetOff: {
type: import("vue").PropType<IO<void>>;
required: false;
};
isActive: {
type: import("vue").PropType<boolean>;
default: boolean;
};
hasPopup: {
type: import("vue").PropType<boolean>;
default: boolean;
};
transition: {
type: import("vue").PropType<import("../..").Transition>;
default: import("fp-ts/lib/function").Lazy<import("../..").Transition>;
};
};
export declare type UsePopupProps = ExtractPropTypes<typeof UsePopupControllerPropsDefinition>;
export declare function usePopupController(props: UsePopupProps, render: Ref<IO<VNode[]>>): {
isOpen: import("vue").ComputedRef<boolean>;
attrs: import("vue").ComputedRef<{
'aria-haspopup'?: boolean;
tabindex: number;
role: string;
type: string;
'aria-pressed': boolean;
'aria-expanded': boolean;
}>;
listeners: {
onClick: IO<void>;
onKeydown: (e: KeyboardEvent) => void;
};
props: import("vue").ComputedRef<{
onClick: IO<void>;
onKeydown: (e: KeyboardEvent) => void;
'aria-haspopup'?: boolean;
tabindex: number;
role: string;
type: string;
'aria-pressed': boolean;
'aria-expanded': boolean;
}>;
open: (e?: Event | undefined) => void;
close: (e?: Event | undefined) => void;
toggle: (e?: Event | undefined) => void;
};
export declare type PopupController = ReturnType<typeof usePopupController>;

View File

@@ -0,0 +1,58 @@
import { constVoid } from 'fp-ts/lib/function';
import { inject, shallowRef, onMounted, computed, watchEffect, toRef, onUnmounted } from 'vue';
import { getToggleAttrs, getUseTogglePropsDefinition, useToggle } from '../toggle';
import { FadeTransitionPropsDefinition } from '../transition';
import { DEFAULT_POPUP_CONTROLLER_INJECTION, POPUP_CONTROLLER_SYMBOL } from './providePopupController';
export const UsePopupControllerPropsDefinition = { ...FadeTransitionPropsDefinition,
...getUseTogglePropsDefinition('isActive')
};
export function usePopupController(props, render) {
const hasMounted = shallowRef(false);
onMounted(() => {
hasMounted.value = true;
});
let remove = constVoid;
const {
isOn,
setOn,
setOff,
toggle,
listeners
} = useToggle(props, 'isActive');
const {
showPopup
} = inject(POPUP_CONTROLLER_SYMBOL, DEFAULT_POPUP_CONTROLLER_INJECTION);
const isOpen = computed(() => {
return hasMounted.value && isOn.value;
});
const attrs = getToggleAttrs(isOpen, toRef(props, 'hasPopup'));
watchEffect(() => {
if (isOpen.value) {
remove();
remove = showPopup({
render: render.value,
transition: props.transition
});
} else {
remove();
remove = constVoid;
}
}, {
flush: 'sync'
});
onUnmounted(() => {
remove();
});
return {
isOpen,
attrs,
listeners,
props: computed(() => ({ ...attrs.value,
...listeners
})),
open: setOn,
close: setOff,
toggle: toggle
};
}
//# sourceMappingURL=usePopupController.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/composables/popupController/usePopupController.ts"],"names":[],"mappings":"AAAA,SAAS,SAAT,QAA0B,oBAA1B;AAEA,SACE,MADF,EAIE,UAJF,EAKE,SALF,EAME,QANF,EAOE,WAPF,EAQE,KARF,EASE,WATF,QAWO,KAXP;AAYA,SAAS,cAAT,EAAyB,2BAAzB,EAAsD,SAAtD,QAAuE,WAAvE;AACA,SAAS,6BAAT,QAA8C,eAA9C;AACA,SAAS,kCAAT,EAA6C,uBAA7C,QAA4E,0BAA5E;AAEA,OAAO,MAAM,iCAAiC,GAAG,EAC/C,GAAG,6BAD4C;AAE/C,KAAG,2BAA2B,CAAC,UAAD;AAFiB,CAA1C;AAOP,OAAM,SAAU,kBAAV,CAA6B,KAA7B,EAAmD,MAAnD,EAA2E;AAC/E,QAAM,UAAU,GAAG,UAAU,CAAC,KAAD,CAA7B;AACA,EAAA,SAAS,CAAC,MAAK;AACb,IAAA,UAAU,CAAC,KAAX,GAAmB,IAAnB;AACD,GAFQ,CAAT;AAGA,MAAI,MAAM,GAAG,SAAb;AACA,QAAM;AAAE,IAAA,IAAF;AAAQ,IAAA,KAAR;AAAe,IAAA,MAAf;AAAuB,IAAA,MAAvB;AAA+B,IAAA;AAA/B,MAA6C,SAAS,CAAC,KAAD,EAAQ,UAAR,CAA5D;AACA,QAAM;AAAE,IAAA;AAAF,MAAgB,MAAM,CAAC,uBAAD,EAA0B,kCAA1B,CAA5B;AACA,QAAM,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC3B,WAAO,UAAU,CAAC,KAAX,IAAoB,IAAI,CAAC,KAAhC;AACD,GAFsB,CAAvB;AAGA,QAAM,KAAK,GAAG,cAAc,CAAC,MAAD,EAAS,KAAK,CAAC,KAAD,EAAQ,UAAR,CAAd,CAA5B;AACA,EAAA,WAAW,CACT,MAAK;AACH,QAAI,MAAM,CAAC,KAAX,EAAkB;AAChB,MAAA,MAAM;AACN,MAAA,MAAM,GAAG,SAAS,CAAC;AACjB,QAAA,MAAM,EAAE,MAAM,CAAC,KADE;AAEjB,QAAA,UAAU,EAAE,KAAK,CAAC;AAFD,OAAD,CAAlB;AAID,KAND,MAMO;AACL,MAAA,MAAM;AACN,MAAA,MAAM,GAAG,SAAT;AACD;AACF,GAZQ,EAaT;AACE,IAAA,KAAK,EAAE;AADT,GAbS,CAAX;AAkBA,EAAA,WAAW,CAAC,MAAK;AACf,IAAA,MAAM;AACP,GAFU,CAAX;AAIA,SAAO;AACL,IAAA,MADK;AAEL,IAAA,KAFK;AAGL,IAAA,SAHK;AAIL,IAAA,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,KAAX;AAAkB,SAAG;AAArB,KAAP,CAAD,CAJV;AAKL,IAAA,IAAI,EAAE,KALD;AAML,IAAA,KAAK,EAAE,MANF;AAOL,IAAA,MAAM,EAAE;AAPH,GAAP;AASD","sourcesContent":["import { constVoid } from 'fp-ts/lib/function';\nimport { IO } from 'fp-ts/lib/IO';\nimport {\n inject,\n VNode,\n ExtractPropTypes,\n shallowRef,\n onMounted,\n computed,\n watchEffect,\n toRef,\n onUnmounted,\n Ref\n} from 'vue';\nimport { getToggleAttrs, getUseTogglePropsDefinition, useToggle } from '../toggle';\nimport { FadeTransitionPropsDefinition } from '../transition';\nimport { DEFAULT_POPUP_CONTROLLER_INJECTION, POPUP_CONTROLLER_SYMBOL } from './providePopupController';\n\nexport const UsePopupControllerPropsDefinition = {\n ...FadeTransitionPropsDefinition,\n ...getUseTogglePropsDefinition('isActive')\n};\n\nexport type UsePopupProps = ExtractPropTypes<typeof UsePopupControllerPropsDefinition>;\n\nexport function usePopupController(props: UsePopupProps, render: Ref<IO<VNode[]>>) {\n const hasMounted = shallowRef(false);\n onMounted(() => {\n hasMounted.value = true;\n });\n let remove = constVoid;\n const { isOn, setOn, setOff, toggle, listeners } = useToggle(props, 'isActive');\n const { showPopup } = inject(POPUP_CONTROLLER_SYMBOL, DEFAULT_POPUP_CONTROLLER_INJECTION);\n const isOpen = computed(() => {\n return hasMounted.value && isOn.value;\n });\n const attrs = getToggleAttrs(isOpen, toRef(props, 'hasPopup'));\n watchEffect(\n () => {\n if (isOpen.value) {\n remove();\n remove = showPopup({\n render: render.value,\n transition: props.transition\n });\n } else {\n remove();\n remove = constVoid;\n }\n },\n {\n flush: 'sync'\n }\n );\n\n onUnmounted(() => {\n remove();\n });\n\n return {\n isOpen,\n attrs,\n listeners,\n props: computed(() => ({ ...attrs.value, ...listeners })),\n open: setOn,\n close: setOff,\n toggle: toggle\n };\n}\n\nexport type PopupController = ReturnType<typeof usePopupController>;\n"],"sourceRoot":"","file":"usePopupController.js"}