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 './provideNoticeController';
export * from './useNoticeController';

View File

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

View File

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

View File

@@ -0,0 +1,18 @@
import { IO } from 'fp-ts/lib/IO';
import { VNode } from 'vue';
import { NoticePlacement } from '../../types/NoticePlacement';
import { Transition } from '../../types/Transition';
import { Remove } from '../shared';
export declare const NOTICE_CONTROLLER_SYMBOL: unique symbol;
export interface ShowNoticeOptions {
render: IO<VNode[]>;
placement: NoticePlacement;
duration: number;
shouldQueue: boolean;
transition?: Transition;
}
export interface NoticeControllerInjection {
showNotice: (options: ShowNoticeOptions) => Remove;
}
export declare const DEFAULT_NOTICE_CONTROLLER_INJECTION: NoticeControllerInjection;
export declare function provideNoticeController(showNotice: (options: ShowNoticeOptions) => Remove): NoticeControllerInjection;

View File

@@ -0,0 +1,14 @@
import { constant, constVoid } from 'fp-ts/lib/function';
import { provide } from 'vue';
export const NOTICE_CONTROLLER_SYMBOL = Symbol('notice-controller');
export const DEFAULT_NOTICE_CONTROLLER_INJECTION = {
showNotice: constant(constVoid)
};
export function provideNoticeController(showNotice) {
const injection = {
showNotice
};
provide(NOTICE_CONTROLLER_SYMBOL, injection);
return injection;
}
//# sourceMappingURL=provideNoticeController.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/composables/noticeController/provideNoticeController.ts"],"names":[],"mappings":"AAAA,SAAS,QAAT,EAAmB,SAAnB,QAAoC,oBAApC;AAEA,SAAS,OAAT,QAA+B,KAA/B;AAKA,OAAO,MAAM,wBAAwB,GAAG,MAAM,CAAC,mBAAD,CAAvC;AAcP,OAAO,MAAM,mCAAmC,GAA8B;AAC5E,EAAA,UAAU,EAAE,QAAQ,CAAC,SAAD;AADwD,CAAvE;AAIP,OAAM,SAAU,uBAAV,CAAkC,UAAlC,EAAoF;AACxF,QAAM,SAAS,GAA8B;AAC3C,IAAA;AAD2C,GAA7C;AAIA,EAAA,OAAO,CAAC,wBAAD,EAA2B,SAA3B,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 { NoticePlacement } from '../../types/NoticePlacement';\nimport { Transition } from '../../types/Transition';\nimport { Remove } from '../shared';\n\nexport const NOTICE_CONTROLLER_SYMBOL = Symbol('notice-controller');\n\nexport interface ShowNoticeOptions {\n render: IO<VNode[]>;\n placement: NoticePlacement;\n duration: number;\n shouldQueue: boolean;\n transition?: Transition;\n}\n\nexport interface NoticeControllerInjection {\n showNotice: (options: ShowNoticeOptions) => Remove;\n}\n\nexport const DEFAULT_NOTICE_CONTROLLER_INJECTION: NoticeControllerInjection = {\n showNotice: constant(constVoid)\n};\n\nexport function provideNoticeController(showNotice: (options: ShowNoticeOptions) => Remove) {\n const injection: NoticeControllerInjection = {\n showNotice\n };\n\n provide(NOTICE_CONTROLLER_SYMBOL, injection);\n return injection;\n}\n"],"sourceRoot":"","file":"provideNoticeController.js"}

View File

@@ -0,0 +1,55 @@
import { FunctionN } from 'fp-ts/lib/function';
import { IO } from 'fp-ts/lib/IO';
import { PropType, ExtractPropTypes, VNode, Ref } from 'vue';
import { AllColorsVariant, ColorVariant } from '../../types/ColorVariants';
import { PositionVariant } from '../../types/PositionVariant';
import { Transition } from '../../types/Transition';
export declare const UseNoticePropsDefinition: {
transition: {
type: PropType<Transition>;
required: boolean;
};
position: {
type: PropType<PositionVariant>;
default: "is-bottom";
};
duration: {
type: PropType<number>;
default: number;
};
message: {
type: PropType<string>;
};
shouldQueue: {
type: PropType<boolean>;
default: boolean;
};
variant: {
type: PropType<ColorVariant>;
default: "";
};
isIndefinite: {
type: PropType<boolean>;
default: boolean;
};
};
export interface UseNoticeProps extends ExtractPropTypes<typeof UseNoticePropsDefinition> {
}
export declare const DEFAULT_USE_NOTICE_PROPS: UseNoticeProps;
export interface RenderNoticeOptions {
variant?: AllColorsVariant;
message?: string;
position?: PositionVariant;
}
export interface OpenNoticeOptions extends RenderNoticeOptions {
duration?: number;
shouldQueue?: boolean;
transition?: Transition;
isIndefinite?: boolean;
onAction?: IO<void>;
}
export declare function useNoticeController(props: UseNoticeProps, render: Ref<FunctionN<[RenderNoticeOptions], IO<VNode[]>>>): {
open: (options: OpenNoticeOptions) => void;
close: () => void;
};
export declare type NoticeController = ReturnType<typeof useNoticeController>;

View File

@@ -0,0 +1,98 @@
import { constVoid } from 'fp-ts/lib/function';
import { inject, shallowRef, onUnmounted, computed } from 'vue';
import { formatTransition } from '../transition';
import { DEFAULT_NOTICE_CONTROLLER_INJECTION, NOTICE_CONTROLLER_SYMBOL } from './provideNoticeController';
export const UseNoticePropsDefinition = {
transition: {
type: [Object, String],
required: false
},
position: {
type: String,
default: 'is-bottom'
},
duration: {
type: Number,
default: 2000
},
message: {
type: String
},
shouldQueue: {
type: Boolean,
default: true
},
variant: {
type: String,
default: ''
},
isIndefinite: {
type: Boolean,
default: false
}
};
export const DEFAULT_USE_NOTICE_PROPS = {
position: UseNoticePropsDefinition.position.default,
duration: UseNoticePropsDefinition.duration.default,
shouldQueue: UseNoticePropsDefinition.shouldQueue.default,
variant: UseNoticePropsDefinition.variant.default,
isIndefinite: UseNoticePropsDefinition.isIndefinite.default
};
function useNoticeTransition(props = DEFAULT_USE_NOTICE_PROPS) {
return computed(() => {
if (props.transition) {
return formatTransition(props.transition);
} else {
switch (props.position) {
case 'is-top-right':
case 'is-top':
case 'is-top-left':
return {
'enter-active-class': 'fadeInDown',
'leave-active-class': 'fadeOutUp'
};
case 'is-bottom-right':
case 'is-bottom':
case 'is-bottom-left':
return {
'enter-active-class': 'fadeInUp',
'leave-active-class': 'fadeOutDown'
};
}
}
});
}
export function useNoticeController(props, render) {
const remove = shallowRef(constVoid);
const {
showNotice
} = inject(NOTICE_CONTROLLER_SYMBOL, DEFAULT_NOTICE_CONTROLLER_INJECTION);
const transition = useNoticeTransition(props);
onUnmounted(() => {
remove.value();
});
function open(options) {
const position = options.position ?? props.position;
remove.value();
remove.value = showNotice({
placement: position.includes('top') ? 'top' : 'bottom',
render: render.value(options),
transition: options.transition ?? transition.value,
shouldQueue: options.shouldQueue ?? props.shouldQueue,
duration: options.isIndefinite || props.isIndefinite ? 0 : options.duration ?? props.duration
});
}
return {
open: open,
close: () => {
remove.value();
remove.value = constVoid;
}
};
}
//# sourceMappingURL=useNoticeController.js.map

File diff suppressed because one or more lines are too long