@ilokesto/utilinent 1.0.11 → 1.0.13
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/components/For.js +25 -1
- package/dist/components/Repeat.js +24 -1
- package/dist/components/Show.js +24 -1
- package/dist/constants/htmlTags.d.ts +2 -1
- package/dist/core/PluginManager.d.ts +88 -0
- package/dist/core/PluginManager.js +116 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/types/for.d.ts +14 -89
- package/dist/types/index.d.ts +1 -1
- package/dist/types/register.d.ts +14 -0
- package/dist/types/register.js +1 -0
- package/dist/types/repeat.d.ts +14 -89
- package/dist/types/show.d.ts +15 -89
- package/package.json +1 -1
package/dist/components/For.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { createElement, forwardRef } from "react";
|
|
3
3
|
import { htmlTags } from "../constants/htmlTags";
|
|
4
|
+
import { PluginManager } from "../core/PluginManager";
|
|
4
5
|
function BaseFor({ each, children, fallback = null, before, after, }) {
|
|
5
6
|
const content = each && each.length > 0 ? each.map(children) : fallback;
|
|
6
7
|
return (_jsxs(_Fragment, { children: [before, content, after] }));
|
|
@@ -11,8 +12,31 @@ forwardRef(({ each, children, fallback = null, before, after, ...props }, ref) =
|
|
|
11
12
|
const content = each && each.length > 0 ? each.map(children) : fallback;
|
|
12
13
|
return createElement(tag, { ...props, ref }, before, content, after);
|
|
13
14
|
});
|
|
15
|
+
// HTML 태그들을 등록
|
|
14
16
|
const tagEntries = htmlTags.reduce((acc, tag) => {
|
|
15
17
|
acc[tag] = renderForTag(tag);
|
|
16
18
|
return acc;
|
|
17
19
|
}, {});
|
|
18
|
-
|
|
20
|
+
// Proxy를 사용하여 동적으로 플러그인 조회
|
|
21
|
+
export const For = new Proxy(Object.assign(BaseFor, tagEntries), {
|
|
22
|
+
get(target, prop) {
|
|
23
|
+
// 기존 속성이 있으면 반환
|
|
24
|
+
if (prop in target) {
|
|
25
|
+
return target[prop];
|
|
26
|
+
}
|
|
27
|
+
// 플러그인에서 동적으로 조회
|
|
28
|
+
const propName = String(prop);
|
|
29
|
+
// 'for' 카테고리에서 먼저 찾기
|
|
30
|
+
if (PluginManager.has('for', propName)) {
|
|
31
|
+
const component = PluginManager.get('for', propName);
|
|
32
|
+
return renderForTag(component);
|
|
33
|
+
}
|
|
34
|
+
// 'base' 카테고리에서 찾기
|
|
35
|
+
if (PluginManager.has('base', propName)) {
|
|
36
|
+
const component = PluginManager.get('base', propName);
|
|
37
|
+
return renderForTag(component);
|
|
38
|
+
}
|
|
39
|
+
// 찾지 못하면 undefined 반환
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createElement, forwardRef } from "react";
|
|
3
3
|
import { htmlTags } from "../constants/htmlTags";
|
|
4
|
+
import { PluginManager } from "../core/PluginManager";
|
|
4
5
|
import { For } from "./For";
|
|
5
6
|
function BaseRepeat({ times, children, fallback = null }) {
|
|
6
7
|
if (!times || times <= 0 || !Number.isInteger(times)) {
|
|
@@ -16,8 +17,30 @@ forwardRef(({ times, children, fallback = null, ...props }, ref) => {
|
|
|
16
17
|
: fallback ?? null;
|
|
17
18
|
return createElement(tag, { ...props, ref }, content);
|
|
18
19
|
});
|
|
20
|
+
// HTML 태그들을 등록
|
|
19
21
|
const tagEntries = htmlTags.reduce((acc, tag) => {
|
|
20
22
|
acc[tag] = renderForTag(tag);
|
|
21
23
|
return acc;
|
|
22
24
|
}, {});
|
|
23
|
-
export const Repeat = Object.assign(BaseRepeat, tagEntries)
|
|
25
|
+
export const Repeat = new Proxy(Object.assign(BaseRepeat, tagEntries), {
|
|
26
|
+
get(target, prop) {
|
|
27
|
+
// 기존 속성이 있으면 반환
|
|
28
|
+
if (prop in target) {
|
|
29
|
+
return target[prop];
|
|
30
|
+
}
|
|
31
|
+
// 플러그인에서 동적으로 조회
|
|
32
|
+
const propName = String(prop);
|
|
33
|
+
// 'repeat' 카테고리에서 먼저 찾기
|
|
34
|
+
if (PluginManager.has('repeat', propName)) {
|
|
35
|
+
const component = PluginManager.get('repeat', propName);
|
|
36
|
+
return renderForTag(component);
|
|
37
|
+
}
|
|
38
|
+
// 'base' 카테고리에서 찾기
|
|
39
|
+
if (PluginManager.has('base', propName)) {
|
|
40
|
+
const component = PluginManager.get('base', propName);
|
|
41
|
+
return renderForTag(component);
|
|
42
|
+
}
|
|
43
|
+
// 찾지 못하면 undefined 반환
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
});
|
package/dist/components/Show.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createElement, forwardRef } from "react";
|
|
2
2
|
import { htmlTags } from "../constants/htmlTags";
|
|
3
|
+
import { PluginManager } from "../core/PluginManager";
|
|
3
4
|
const BaseShow = ({ when, children, fallback = null }) => {
|
|
4
5
|
const shouldRender = Array.isArray(when) ? when.every(Boolean) : !!when;
|
|
5
6
|
return shouldRender
|
|
@@ -19,8 +20,30 @@ forwardRef(function Render({ when, children, fallback = null, ...props }, ref) {
|
|
|
19
20
|
: fallback;
|
|
20
21
|
return createElement(tag, { ...props, ref }, content);
|
|
21
22
|
});
|
|
23
|
+
// HTML 태그들을 등록
|
|
22
24
|
const tagEntries = htmlTags.reduce((acc, tag) => {
|
|
23
25
|
acc[tag] = renderForTag(tag);
|
|
24
26
|
return acc;
|
|
25
27
|
}, {});
|
|
26
|
-
export const Show = Object.assign(BaseShow, tagEntries)
|
|
28
|
+
export const Show = new Proxy(Object.assign(BaseShow, tagEntries), {
|
|
29
|
+
get(target, prop) {
|
|
30
|
+
// 기존 속성이 있으면 반환
|
|
31
|
+
if (prop in target) {
|
|
32
|
+
return target[prop];
|
|
33
|
+
}
|
|
34
|
+
// 플러그인에서 동적으로 조회
|
|
35
|
+
const propName = String(prop);
|
|
36
|
+
// 'show' 카테고리에서 먼저 찾기
|
|
37
|
+
if (PluginManager.has('show', propName)) {
|
|
38
|
+
const component = PluginManager.get('show', propName);
|
|
39
|
+
return renderForTag(component);
|
|
40
|
+
}
|
|
41
|
+
// 'base' 카테고리에서 찾기
|
|
42
|
+
if (PluginManager.has('base', propName)) {
|
|
43
|
+
const component = PluginManager.get('base', propName);
|
|
44
|
+
return renderForTag(component);
|
|
45
|
+
}
|
|
46
|
+
// 찾지 못하면 undefined 반환
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export declare const htmlTags:
|
|
1
|
+
export declare const htmlTags: readonly ["a", "abbr", "address", "article", "aside", "b", "bdi", "bdo", "blockquote", "button", "canvas", "cite", "code", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hr", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "menu", "meter", "nav", "ol", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "small", "span", "strong", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "tr", "u", "ul", "var", "video"];
|
|
2
|
+
export type HtmlTag = (typeof htmlTags)[number];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 플러그인 등록을 위한 타입
|
|
3
|
+
* Register 인터페이스의 각 카테고리에 대해 부분적으로 등록 가능
|
|
4
|
+
*/
|
|
5
|
+
type PluginRegistration = {
|
|
6
|
+
[K in "show" | "for" | "repeat" | "base"]?: Record<string, any>;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 플러그인 컴포넌트를 등록하고 관리하는 싱글턴 클래스
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { UtilinentPluginManager } from '@ilokesto/utilinent';
|
|
14
|
+
* import Link from 'next/link';
|
|
15
|
+
* import { motion } from 'framer-motion';
|
|
16
|
+
*
|
|
17
|
+
* // 컴포넌트 등록
|
|
18
|
+
* UtilinentPluginManager.register({
|
|
19
|
+
* show: {
|
|
20
|
+
* Link: Link,
|
|
21
|
+
* },
|
|
22
|
+
* base: {
|
|
23
|
+
* motionButton: motion.button,
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // 타입 등록 (별도 파일에서)
|
|
28
|
+
* declare module '@ilokesto/utilinent' {
|
|
29
|
+
* interface Register {
|
|
30
|
+
* show: {
|
|
31
|
+
* Link: typeof Link;
|
|
32
|
+
* };
|
|
33
|
+
* base: {
|
|
34
|
+
* motionButton: typeof motion.button;
|
|
35
|
+
* };
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare class PluginManager {
|
|
41
|
+
private static instance;
|
|
42
|
+
private plugins;
|
|
43
|
+
private constructor();
|
|
44
|
+
/**
|
|
45
|
+
* PluginManager 인스턴스를 가져옵니다
|
|
46
|
+
*/
|
|
47
|
+
private static getInstance;
|
|
48
|
+
/**
|
|
49
|
+
* 플러그인 컴포넌트들을 객체 형태로 등록합니다
|
|
50
|
+
*
|
|
51
|
+
* @param plugins - 카테고리별 컴포넌트 객체
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* UtilinentPluginManager.register({
|
|
56
|
+
* show: {
|
|
57
|
+
* Link: Link,
|
|
58
|
+
* Button: CustomButton,
|
|
59
|
+
* },
|
|
60
|
+
* base: {
|
|
61
|
+
* motionDiv: motion.div,
|
|
62
|
+
* }
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
static register(plugins: PluginRegistration): void;
|
|
67
|
+
/**
|
|
68
|
+
* 단일 플러그인 컴포넌트를 등록합니다 (내부용)
|
|
69
|
+
*/
|
|
70
|
+
private registerOne;
|
|
71
|
+
/**
|
|
72
|
+
* 등록된 플러그인 컴포넌트를 가져옵니다 (내부용)
|
|
73
|
+
*/
|
|
74
|
+
static get<K extends "show" | "for" | "repeat" | "base">(category: K, name: string): any;
|
|
75
|
+
/**
|
|
76
|
+
* 특정 카테고리의 모든 플러그인을 가져옵니다 (내부용)
|
|
77
|
+
*/
|
|
78
|
+
static getAll<K extends "show" | "for" | "repeat" | "base">(category: K): Map<string, any>;
|
|
79
|
+
/**
|
|
80
|
+
* 플러그인이 등록되어 있는지 확인합니다
|
|
81
|
+
*/
|
|
82
|
+
static has<K extends "show" | "for" | "repeat" | "base">(category: K, name: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* 플러그인을 제거합니다
|
|
85
|
+
*/
|
|
86
|
+
static unregister<K extends "show" | "for" | "repeat" | "base">(category: K, name: string): boolean;
|
|
87
|
+
}
|
|
88
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 플러그인 컴포넌트를 등록하고 관리하는 싱글턴 클래스
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { UtilinentPluginManager } from '@ilokesto/utilinent';
|
|
7
|
+
* import Link from 'next/link';
|
|
8
|
+
* import { motion } from 'framer-motion';
|
|
9
|
+
*
|
|
10
|
+
* // 컴포넌트 등록
|
|
11
|
+
* UtilinentPluginManager.register({
|
|
12
|
+
* show: {
|
|
13
|
+
* Link: Link,
|
|
14
|
+
* },
|
|
15
|
+
* base: {
|
|
16
|
+
* motionButton: motion.button,
|
|
17
|
+
* }
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // 타입 등록 (별도 파일에서)
|
|
21
|
+
* declare module '@ilokesto/utilinent' {
|
|
22
|
+
* interface Register {
|
|
23
|
+
* show: {
|
|
24
|
+
* Link: typeof Link;
|
|
25
|
+
* };
|
|
26
|
+
* base: {
|
|
27
|
+
* motionButton: typeof motion.button;
|
|
28
|
+
* };
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class PluginManager {
|
|
34
|
+
static instance;
|
|
35
|
+
plugins = {
|
|
36
|
+
show: new Map(),
|
|
37
|
+
for: new Map(),
|
|
38
|
+
repeat: new Map(),
|
|
39
|
+
base: new Map(),
|
|
40
|
+
};
|
|
41
|
+
constructor() {
|
|
42
|
+
// 싱글턴 패턴: private constructor
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* PluginManager 인스턴스를 가져옵니다
|
|
46
|
+
*/
|
|
47
|
+
static getInstance() {
|
|
48
|
+
if (!PluginManager.instance) {
|
|
49
|
+
PluginManager.instance = new PluginManager();
|
|
50
|
+
}
|
|
51
|
+
return PluginManager.instance;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 플러그인 컴포넌트들을 객체 형태로 등록합니다
|
|
55
|
+
*
|
|
56
|
+
* @param plugins - 카테고리별 컴포넌트 객체
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* UtilinentPluginManager.register({
|
|
61
|
+
* show: {
|
|
62
|
+
* Link: Link,
|
|
63
|
+
* Button: CustomButton,
|
|
64
|
+
* },
|
|
65
|
+
* base: {
|
|
66
|
+
* motionDiv: motion.div,
|
|
67
|
+
* }
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
static register(plugins) {
|
|
72
|
+
const instance = PluginManager.getInstance();
|
|
73
|
+
Object.keys(plugins).forEach((category) => {
|
|
74
|
+
const components = plugins[category];
|
|
75
|
+
if (components) {
|
|
76
|
+
Object.entries(components).forEach(([name, component]) => {
|
|
77
|
+
instance.registerOne(category, name, component);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 단일 플러그인 컴포넌트를 등록합니다 (내부용)
|
|
84
|
+
*/
|
|
85
|
+
registerOne(category, name, component) {
|
|
86
|
+
this.plugins[category].set(name, component);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 등록된 플러그인 컴포넌트를 가져옵니다 (내부용)
|
|
90
|
+
*/
|
|
91
|
+
static get(category, name) {
|
|
92
|
+
const instance = PluginManager.getInstance();
|
|
93
|
+
return instance.plugins[category].get(name);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 특정 카테고리의 모든 플러그인을 가져옵니다 (내부용)
|
|
97
|
+
*/
|
|
98
|
+
static getAll(category) {
|
|
99
|
+
const instance = PluginManager.getInstance();
|
|
100
|
+
return instance.plugins[category];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 플러그인이 등록되어 있는지 확인합니다
|
|
104
|
+
*/
|
|
105
|
+
static has(category, name) {
|
|
106
|
+
const instance = PluginManager.getInstance();
|
|
107
|
+
return instance.plugins[category].has(name);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 플러그인을 제거합니다
|
|
111
|
+
*/
|
|
112
|
+
static unregister(category, name) {
|
|
113
|
+
const instance = PluginManager.getInstance();
|
|
114
|
+
return instance.plugins[category].delete(name);
|
|
115
|
+
}
|
|
116
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,3 +6,5 @@ export * from './components/Show';
|
|
|
6
6
|
export * from './components/Slacker';
|
|
7
7
|
export * from './components/Slot';
|
|
8
8
|
export * from './hooks/useIntersectionObserver';
|
|
9
|
+
export { PluginManager } from './core/PluginManager';
|
|
10
|
+
export { UtilinentRegister } from './types/register';
|
package/dist/index.js
CHANGED
package/dist/types/for.d.ts
CHANGED
|
@@ -1,100 +1,25 @@
|
|
|
1
1
|
import { Fallback } from ".";
|
|
2
|
+
import { HtmlTag } from "../constants/htmlTags";
|
|
3
|
+
import { UtilinentRegisterBase, UtilinentRegisterFor } from "./register";
|
|
2
4
|
export interface ForProps<T extends Array<unknown>> extends Fallback {
|
|
3
5
|
each: T | null | undefined;
|
|
4
6
|
children: (item: T[number], index: number) => React.ReactNode;
|
|
5
7
|
before?: React.ReactNode;
|
|
6
8
|
after?: React.ReactNode;
|
|
7
9
|
}
|
|
8
|
-
type ForTagHelper<K extends
|
|
10
|
+
type ForTagHelper<K extends HtmlTag> = {
|
|
9
11
|
<const T extends Array<unknown>>(props: ForProps<T> & Omit<React.ComponentPropsWithRef<K>, 'children'>): React.ReactNode;
|
|
10
12
|
};
|
|
11
|
-
|
|
13
|
+
type ForRegisterHelper<C> = C extends React.ComponentType<infer P> ? {
|
|
14
|
+
<const T extends Array<unknown>>(props: Omit<P, "children"> & ForProps<T>): React.ReactNode;
|
|
15
|
+
} : C;
|
|
16
|
+
export type ForType = {
|
|
12
17
|
<const T extends Array<unknown>>(props: ForProps<T>): React.ReactNode;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
bdo: ForTagHelper<"bdo">;
|
|
21
|
-
blockquote: ForTagHelper<"blockquote">;
|
|
22
|
-
button: ForTagHelper<"button">;
|
|
23
|
-
canvas: ForTagHelper<"canvas">;
|
|
24
|
-
cite: ForTagHelper<"cite">;
|
|
25
|
-
code: ForTagHelper<"code">;
|
|
26
|
-
data: ForTagHelper<"data">;
|
|
27
|
-
datalist: ForTagHelper<"datalist">;
|
|
28
|
-
dd: ForTagHelper<"dd">;
|
|
29
|
-
del: ForTagHelper<"del">;
|
|
30
|
-
details: ForTagHelper<"details">;
|
|
31
|
-
dfn: ForTagHelper<"dfn">;
|
|
32
|
-
dialog: ForTagHelper<"dialog">;
|
|
33
|
-
div: ForTagHelper<"div">;
|
|
34
|
-
dl: ForTagHelper<"dl">;
|
|
35
|
-
dt: ForTagHelper<"dt">;
|
|
36
|
-
em: ForTagHelper<"em">;
|
|
37
|
-
fieldset: ForTagHelper<"fieldset">;
|
|
38
|
-
figcaption: ForTagHelper<"figcaption">;
|
|
39
|
-
figure: ForTagHelper<"figure">;
|
|
40
|
-
footer: ForTagHelper<"footer">;
|
|
41
|
-
form: ForTagHelper<"form">;
|
|
42
|
-
h1: ForTagHelper<"h1">;
|
|
43
|
-
h2: ForTagHelper<"h2">;
|
|
44
|
-
h3: ForTagHelper<"h3">;
|
|
45
|
-
h4: ForTagHelper<"h4">;
|
|
46
|
-
h5: ForTagHelper<"h5">;
|
|
47
|
-
h6: ForTagHelper<"h6">;
|
|
48
|
-
header: ForTagHelper<"header">;
|
|
49
|
-
hr: ForTagHelper<"hr">;
|
|
50
|
-
i: ForTagHelper<"i">;
|
|
51
|
-
img: ForTagHelper<"img">;
|
|
52
|
-
input: ForTagHelper<"input">;
|
|
53
|
-
ins: ForTagHelper<"ins">;
|
|
54
|
-
kbd: ForTagHelper<"kbd">;
|
|
55
|
-
label: ForTagHelper<"label">;
|
|
56
|
-
legend: ForTagHelper<"legend">;
|
|
57
|
-
li: ForTagHelper<"li">;
|
|
58
|
-
main: ForTagHelper<"main">;
|
|
59
|
-
map: ForTagHelper<"map">;
|
|
60
|
-
mark: ForTagHelper<"mark">;
|
|
61
|
-
menu: ForTagHelper<"menu">;
|
|
62
|
-
meter: ForTagHelper<"meter">;
|
|
63
|
-
nav: ForTagHelper<"nav">;
|
|
64
|
-
ol: ForTagHelper<"ol">;
|
|
65
|
-
option: ForTagHelper<"option">;
|
|
66
|
-
output: ForTagHelper<"output">;
|
|
67
|
-
p: ForTagHelper<"p">;
|
|
68
|
-
picture: ForTagHelper<"picture">;
|
|
69
|
-
pre: ForTagHelper<"pre">;
|
|
70
|
-
progress: ForTagHelper<"progress">;
|
|
71
|
-
q: ForTagHelper<"q">;
|
|
72
|
-
rp: ForTagHelper<"rp">;
|
|
73
|
-
rt: ForTagHelper<"rt">;
|
|
74
|
-
ruby: ForTagHelper<"ruby">;
|
|
75
|
-
s: ForTagHelper<"s">;
|
|
76
|
-
samp: ForTagHelper<"samp">;
|
|
77
|
-
section: ForTagHelper<"section">;
|
|
78
|
-
select: ForTagHelper<"select">;
|
|
79
|
-
small: ForTagHelper<"small">;
|
|
80
|
-
span: ForTagHelper<"span">;
|
|
81
|
-
strong: ForTagHelper<"strong">;
|
|
82
|
-
sub: ForTagHelper<"sub">;
|
|
83
|
-
summary: ForTagHelper<"summary">;
|
|
84
|
-
sup: ForTagHelper<"sup">;
|
|
85
|
-
table: ForTagHelper<"table">;
|
|
86
|
-
tbody: ForTagHelper<"tbody">;
|
|
87
|
-
td: ForTagHelper<"td">;
|
|
88
|
-
textarea: ForTagHelper<"textarea">;
|
|
89
|
-
tfoot: ForTagHelper<"tfoot">;
|
|
90
|
-
th: ForTagHelper<"th">;
|
|
91
|
-
thead: ForTagHelper<"thead">;
|
|
92
|
-
time: ForTagHelper<"time">;
|
|
93
|
-
tr: ForTagHelper<"tr">;
|
|
94
|
-
u: ForTagHelper<"u">;
|
|
95
|
-
ul: ForTagHelper<"ul">;
|
|
96
|
-
var: ForTagHelper<"var">;
|
|
97
|
-
video: ForTagHelper<"video">;
|
|
98
|
-
[x: string]: ForTagHelper<any>;
|
|
99
|
-
}
|
|
18
|
+
} & {
|
|
19
|
+
[K in HtmlTag]: ForTagHelper<K>;
|
|
20
|
+
} & {
|
|
21
|
+
[K in keyof UtilinentRegisterFor]: ForRegisterHelper<UtilinentRegisterFor[K]>;
|
|
22
|
+
} & {
|
|
23
|
+
[K in keyof UtilinentRegisterBase]: ForRegisterHelper<UtilinentRegisterBase[K]>;
|
|
24
|
+
};
|
|
100
25
|
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
|
+
export type { UtilinentRegister } from "./register";
|
|
2
3
|
export interface Fallback {
|
|
3
4
|
fallback?: React.ReactNode;
|
|
4
5
|
}
|
|
@@ -48,4 +49,3 @@ export type SlackerProps<T = any> = {
|
|
|
48
49
|
maxRetries?: number;
|
|
49
50
|
retryDelay?: number;
|
|
50
51
|
};
|
|
51
|
-
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface UtilinentRegister {
|
|
2
|
+
}
|
|
3
|
+
export type UtilinentRegisterShow = UtilinentRegister extends {
|
|
4
|
+
show: infer Show;
|
|
5
|
+
} ? Show : never;
|
|
6
|
+
export type UtilinentRegisterBase = UtilinentRegister extends {
|
|
7
|
+
base: infer Base;
|
|
8
|
+
} ? Base : never;
|
|
9
|
+
export type UtilinentRegisterFor = UtilinentRegister extends {
|
|
10
|
+
for: infer For;
|
|
11
|
+
} ? For : never;
|
|
12
|
+
export type UtilinentRegisterRepeat = UtilinentRegister extends {
|
|
13
|
+
repeat: infer Repeat;
|
|
14
|
+
} ? Repeat : never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/types/repeat.d.ts
CHANGED
|
@@ -1,99 +1,24 @@
|
|
|
1
1
|
import { ComponentPropsWithRef } from "react";
|
|
2
2
|
import { Fallback } from ".";
|
|
3
|
+
import { HtmlTag } from "../constants/htmlTags";
|
|
4
|
+
import { UtilinentRegisterBase, UtilinentRegisterRepeat } from "./register";
|
|
3
5
|
export interface RepeatProps extends Fallback {
|
|
4
6
|
times: number;
|
|
5
7
|
children: (index: number) => React.ReactNode;
|
|
6
8
|
}
|
|
7
|
-
type RepeatTagHelper<K extends
|
|
9
|
+
type RepeatTagHelper<K extends HtmlTag> = {
|
|
8
10
|
(props: RepeatProps & Omit<ComponentPropsWithRef<K>, "children">): React.ReactNode;
|
|
9
11
|
};
|
|
10
|
-
|
|
12
|
+
type RepeatRegisterHelper<C> = C extends React.ComponentType<infer P> ? {
|
|
13
|
+
(props: Omit<P, "children"> & RepeatProps): React.ReactNode;
|
|
14
|
+
} : C;
|
|
15
|
+
export type RepeatType = {
|
|
11
16
|
(props: RepeatProps): React.ReactNode;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
bdo: RepeatTagHelper<"bdo">;
|
|
20
|
-
blockquote: RepeatTagHelper<"blockquote">;
|
|
21
|
-
button: RepeatTagHelper<"button">;
|
|
22
|
-
canvas: RepeatTagHelper<"canvas">;
|
|
23
|
-
cite: RepeatTagHelper<"cite">;
|
|
24
|
-
code: RepeatTagHelper<"code">;
|
|
25
|
-
data: RepeatTagHelper<"data">;
|
|
26
|
-
datalist: RepeatTagHelper<"datalist">;
|
|
27
|
-
dd: RepeatTagHelper<"dd">;
|
|
28
|
-
del: RepeatTagHelper<"del">;
|
|
29
|
-
details: RepeatTagHelper<"details">;
|
|
30
|
-
dfn: RepeatTagHelper<"dfn">;
|
|
31
|
-
dialog: RepeatTagHelper<"dialog">;
|
|
32
|
-
div: RepeatTagHelper<"div">;
|
|
33
|
-
dl: RepeatTagHelper<"dl">;
|
|
34
|
-
dt: RepeatTagHelper<"dt">;
|
|
35
|
-
em: RepeatTagHelper<"em">;
|
|
36
|
-
fieldset: RepeatTagHelper<"fieldset">;
|
|
37
|
-
figcaption: RepeatTagHelper<"figcaption">;
|
|
38
|
-
figure: RepeatTagHelper<"figure">;
|
|
39
|
-
footer: RepeatTagHelper<"footer">;
|
|
40
|
-
form: RepeatTagHelper<"form">;
|
|
41
|
-
h1: RepeatTagHelper<"h1">;
|
|
42
|
-
h2: RepeatTagHelper<"h2">;
|
|
43
|
-
h3: RepeatTagHelper<"h3">;
|
|
44
|
-
h4: RepeatTagHelper<"h4">;
|
|
45
|
-
h5: RepeatTagHelper<"h5">;
|
|
46
|
-
h6: RepeatTagHelper<"h6">;
|
|
47
|
-
header: RepeatTagHelper<"header">;
|
|
48
|
-
hr: RepeatTagHelper<"hr">;
|
|
49
|
-
i: RepeatTagHelper<"i">;
|
|
50
|
-
img: RepeatTagHelper<"img">;
|
|
51
|
-
input: RepeatTagHelper<"input">;
|
|
52
|
-
ins: RepeatTagHelper<"ins">;
|
|
53
|
-
kbd: RepeatTagHelper<"kbd">;
|
|
54
|
-
label: RepeatTagHelper<"label">;
|
|
55
|
-
legend: RepeatTagHelper<"legend">;
|
|
56
|
-
li: RepeatTagHelper<"li">;
|
|
57
|
-
main: RepeatTagHelper<"main">;
|
|
58
|
-
map: RepeatTagHelper<"map">;
|
|
59
|
-
mark: RepeatTagHelper<"mark">;
|
|
60
|
-
menu: RepeatTagHelper<"menu">;
|
|
61
|
-
meter: RepeatTagHelper<"meter">;
|
|
62
|
-
nav: RepeatTagHelper<"nav">;
|
|
63
|
-
ol: RepeatTagHelper<"ol">;
|
|
64
|
-
option: RepeatTagHelper<"option">;
|
|
65
|
-
output: RepeatTagHelper<"output">;
|
|
66
|
-
p: RepeatTagHelper<"p">;
|
|
67
|
-
picture: RepeatTagHelper<"picture">;
|
|
68
|
-
pre: RepeatTagHelper<"pre">;
|
|
69
|
-
progress: RepeatTagHelper<"progress">;
|
|
70
|
-
q: RepeatTagHelper<"q">;
|
|
71
|
-
rp: RepeatTagHelper<"rp">;
|
|
72
|
-
rt: RepeatTagHelper<"rt">;
|
|
73
|
-
ruby: RepeatTagHelper<"ruby">;
|
|
74
|
-
s: RepeatTagHelper<"s">;
|
|
75
|
-
samp: RepeatTagHelper<"samp">;
|
|
76
|
-
section: RepeatTagHelper<"section">;
|
|
77
|
-
select: RepeatTagHelper<"select">;
|
|
78
|
-
small: RepeatTagHelper<"small">;
|
|
79
|
-
span: RepeatTagHelper<"span">;
|
|
80
|
-
strong: RepeatTagHelper<"strong">;
|
|
81
|
-
sub: RepeatTagHelper<"sub">;
|
|
82
|
-
summary: RepeatTagHelper<"summary">;
|
|
83
|
-
sup: RepeatTagHelper<"sup">;
|
|
84
|
-
table: RepeatTagHelper<"table">;
|
|
85
|
-
tbody: RepeatTagHelper<"tbody">;
|
|
86
|
-
td: RepeatTagHelper<"td">;
|
|
87
|
-
textarea: RepeatTagHelper<"textarea">;
|
|
88
|
-
tfoot: RepeatTagHelper<"tfoot">;
|
|
89
|
-
th: RepeatTagHelper<"th">;
|
|
90
|
-
thead: RepeatTagHelper<"thead">;
|
|
91
|
-
time: RepeatTagHelper<"time">;
|
|
92
|
-
tr: RepeatTagHelper<"tr">;
|
|
93
|
-
u: RepeatTagHelper<"u">;
|
|
94
|
-
ul: RepeatTagHelper<"ul">;
|
|
95
|
-
var: RepeatTagHelper<"var">;
|
|
96
|
-
video: RepeatTagHelper<"video">;
|
|
97
|
-
[x: string]: RepeatTagHelper<any>;
|
|
98
|
-
}
|
|
17
|
+
} & {
|
|
18
|
+
[K in HtmlTag]: RepeatTagHelper<K>;
|
|
19
|
+
} & {
|
|
20
|
+
[K in keyof UtilinentRegisterRepeat]: RepeatRegisterHelper<UtilinentRegisterRepeat[K]>;
|
|
21
|
+
} & {
|
|
22
|
+
[K in keyof UtilinentRegisterBase]: RepeatRegisterHelper<UtilinentRegisterBase[K]>;
|
|
23
|
+
};
|
|
99
24
|
export {};
|
package/dist/types/show.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ComponentPropsWithRef } from "react";
|
|
2
|
+
import { HtmlTag } from "../constants/htmlTags";
|
|
2
3
|
import { Fallback, NonNullableElements } from "./";
|
|
4
|
+
import { UtilinentRegisterBase, UtilinentRegisterShow } from "./register";
|
|
3
5
|
export interface ShowPropsArray<T extends unknown[]> extends Fallback {
|
|
4
6
|
when: T;
|
|
5
7
|
children: React.ReactNode | ((item: NonNullableElements<T>) => React.ReactNode);
|
|
@@ -8,98 +10,22 @@ export interface ShowProps<T = unknown> extends Fallback {
|
|
|
8
10
|
when: T;
|
|
9
11
|
children: React.ReactNode | ((item: NonNullable<T>) => React.ReactNode);
|
|
10
12
|
}
|
|
11
|
-
type ShowTagHelper<K extends
|
|
13
|
+
type ShowTagHelper<K extends HtmlTag> = {
|
|
12
14
|
<const T extends unknown[]>(props: Omit<ComponentPropsWithRef<K>, "children"> & ShowPropsArray<T>): React.ReactNode;
|
|
13
15
|
<const T extends unknown>(props: Omit<ComponentPropsWithRef<K>, "children"> & ShowProps<T>): React.ReactNode;
|
|
14
16
|
};
|
|
15
|
-
|
|
17
|
+
type ShowRegisterHelper<C> = C extends React.ComponentType<infer P> ? {
|
|
18
|
+
<const T extends unknown[]>(props: Omit<P, "children"> & ShowPropsArray<T>): React.ReactNode;
|
|
19
|
+
<const T extends unknown>(props: Omit<P, "children"> & ShowProps<T>): React.ReactNode;
|
|
20
|
+
} : C;
|
|
21
|
+
export type ShowType = {
|
|
16
22
|
<const T extends unknown[]>(props: ShowPropsArray<T>): React.ReactNode;
|
|
17
23
|
<const T extends unknown>(props: ShowProps<T>): React.ReactNode;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
bdo: ShowTagHelper<"bdo">;
|
|
26
|
-
blockquote: ShowTagHelper<"blockquote">;
|
|
27
|
-
button: ShowTagHelper<"button">;
|
|
28
|
-
canvas: ShowTagHelper<"canvas">;
|
|
29
|
-
cite: ShowTagHelper<"cite">;
|
|
30
|
-
code: ShowTagHelper<"code">;
|
|
31
|
-
data: ShowTagHelper<"data">;
|
|
32
|
-
datalist: ShowTagHelper<"datalist">;
|
|
33
|
-
dd: ShowTagHelper<"dd">;
|
|
34
|
-
del: ShowTagHelper<"del">;
|
|
35
|
-
details: ShowTagHelper<"details">;
|
|
36
|
-
dfn: ShowTagHelper<"dfn">;
|
|
37
|
-
dialog: ShowTagHelper<"dialog">;
|
|
38
|
-
div: ShowTagHelper<"div">;
|
|
39
|
-
dl: ShowTagHelper<"dl">;
|
|
40
|
-
dt: ShowTagHelper<"dt">;
|
|
41
|
-
em: ShowTagHelper<"em">;
|
|
42
|
-
fieldset: ShowTagHelper<"fieldset">;
|
|
43
|
-
figcaption: ShowTagHelper<"figcaption">;
|
|
44
|
-
figure: ShowTagHelper<"figure">;
|
|
45
|
-
footer: ShowTagHelper<"footer">;
|
|
46
|
-
form: ShowTagHelper<"form">;
|
|
47
|
-
h1: ShowTagHelper<"h1">;
|
|
48
|
-
h2: ShowTagHelper<"h2">;
|
|
49
|
-
h3: ShowTagHelper<"h3">;
|
|
50
|
-
h4: ShowTagHelper<"h4">;
|
|
51
|
-
h5: ShowTagHelper<"h5">;
|
|
52
|
-
h6: ShowTagHelper<"h6">;
|
|
53
|
-
header: ShowTagHelper<"header">;
|
|
54
|
-
hr: ShowTagHelper<"hr">;
|
|
55
|
-
i: ShowTagHelper<"i">;
|
|
56
|
-
img: ShowTagHelper<"img">;
|
|
57
|
-
input: ShowTagHelper<"input">;
|
|
58
|
-
ins: ShowTagHelper<"ins">;
|
|
59
|
-
kbd: ShowTagHelper<"kbd">;
|
|
60
|
-
label: ShowTagHelper<"label">;
|
|
61
|
-
legend: ShowTagHelper<"legend">;
|
|
62
|
-
li: ShowTagHelper<"li">;
|
|
63
|
-
main: ShowTagHelper<"main">;
|
|
64
|
-
map: ShowTagHelper<"map">;
|
|
65
|
-
mark: ShowTagHelper<"mark">;
|
|
66
|
-
menu: ShowTagHelper<"menu">;
|
|
67
|
-
meter: ShowTagHelper<"meter">;
|
|
68
|
-
nav: ShowTagHelper<"nav">;
|
|
69
|
-
ol: ShowTagHelper<"ol">;
|
|
70
|
-
option: ShowTagHelper<"option">;
|
|
71
|
-
output: ShowTagHelper<"output">;
|
|
72
|
-
p: ShowTagHelper<"p">;
|
|
73
|
-
picture: ShowTagHelper<"picture">;
|
|
74
|
-
pre: ShowTagHelper<"pre">;
|
|
75
|
-
progress: ShowTagHelper<"progress">;
|
|
76
|
-
q: ShowTagHelper<"q">;
|
|
77
|
-
rp: ShowTagHelper<"rp">;
|
|
78
|
-
rt: ShowTagHelper<"rt">;
|
|
79
|
-
ruby: ShowTagHelper<"ruby">;
|
|
80
|
-
s: ShowTagHelper<"s">;
|
|
81
|
-
samp: ShowTagHelper<"samp">;
|
|
82
|
-
section: ShowTagHelper<"section">;
|
|
83
|
-
select: ShowTagHelper<"select">;
|
|
84
|
-
small: ShowTagHelper<"small">;
|
|
85
|
-
span: ShowTagHelper<"span">;
|
|
86
|
-
strong: ShowTagHelper<"strong">;
|
|
87
|
-
sub: ShowTagHelper<"sub">;
|
|
88
|
-
summary: ShowTagHelper<"summary">;
|
|
89
|
-
sup: ShowTagHelper<"sup">;
|
|
90
|
-
table: ShowTagHelper<"table">;
|
|
91
|
-
tbody: ShowTagHelper<"tbody">;
|
|
92
|
-
td: ShowTagHelper<"td">;
|
|
93
|
-
textarea: ShowTagHelper<"textarea">;
|
|
94
|
-
tfoot: ShowTagHelper<"tfoot">;
|
|
95
|
-
th: ShowTagHelper<"th">;
|
|
96
|
-
thead: ShowTagHelper<"thead">;
|
|
97
|
-
time: ShowTagHelper<"time">;
|
|
98
|
-
tr: ShowTagHelper<"tr">;
|
|
99
|
-
u: ShowTagHelper<"u">;
|
|
100
|
-
ul: ShowTagHelper<"ul">;
|
|
101
|
-
var: ShowTagHelper<"var">;
|
|
102
|
-
video: ShowTagHelper<"video">;
|
|
103
|
-
[x: string]: ShowTagHelper<any>;
|
|
104
|
-
}
|
|
24
|
+
} & {
|
|
25
|
+
[K in HtmlTag]: ShowTagHelper<K>;
|
|
26
|
+
} & {
|
|
27
|
+
[K in keyof UtilinentRegisterShow]: ShowRegisterHelper<UtilinentRegisterShow[K]>;
|
|
28
|
+
} & {
|
|
29
|
+
[K in keyof UtilinentRegisterBase]: ShowRegisterHelper<UtilinentRegisterBase[K]>;
|
|
30
|
+
};
|
|
105
31
|
export {};
|