smarthr-ui 87.0.0 → 87.1.0

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.
@@ -1,30 +1,43 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var jsxRuntime = require('react/jsx-runtime');
4
5
  var React = require('react');
5
6
  var components_Disclosure_useDisclosure = require('./useDisclosure.cjs');
6
7
 
7
- const DisclosureTrigger = ({ targetId, children, onClick, ...rest }) => {
8
+ const DisclosureTrigger = ({ targetId, children, onClick }) => {
8
9
  const [expanded, setExpanded] = components_Disclosure_useDisclosure.useDisclosure(targetId);
9
- const actualOnClick = React.useCallback((e) => {
10
+ const ref = React.useRef(null);
11
+ const actualOnClick = React.useMemo(() => {
10
12
  const toggleExpanded = () => {
11
13
  setExpanded((current) => !current);
12
14
  };
13
15
  if (onClick) {
14
- return onClick(toggleExpanded, e);
16
+ return (e) => {
17
+ onClick(toggleExpanded, e);
18
+ };
15
19
  }
16
- toggleExpanded();
20
+ return toggleExpanded;
17
21
  }, [onClick, setExpanded]);
18
- const actualTrigger = React.useMemo(() => {
19
- const actualChildren = children instanceof Function ? children({ expanded }) : children;
20
- return React.cloneElement(actualChildren, {
21
- ...rest,
22
- onClick: actualOnClick,
23
- 'aria-expanded': expanded.toString(),
24
- 'aria-controls': targetId,
25
- });
26
- }, [expanded, children, actualOnClick, targetId, rest]);
27
- return actualTrigger;
22
+ React.useEffect(() => {
23
+ if (!ref.current) {
24
+ return;
25
+ }
26
+ const button = ref.current.querySelector('button');
27
+ if (!button) {
28
+ throw new Error('DisclosureTriggerのchildrenにbutton要素を設置してください');
29
+ }
30
+ button.setAttribute('aria-expanded', expanded.toString());
31
+ button.setAttribute('aria-controls', targetId);
32
+ button.addEventListener('click', actualOnClick);
33
+ return () => {
34
+ button.removeEventListener('click', actualOnClick);
35
+ };
36
+ }, [expanded, children, actualOnClick, targetId]);
37
+ // HINT: 念の為spanに対して外部からstyleを当てられるようにしておく。
38
+ // Fragmentにrefが渡せるようになったタイミングでclassNameも不要になる
39
+ // TODO: 将来的にspan -> Fragmentに変更する
40
+ return (jsxRuntime.jsx("span", { className: "smarthr-ui-DisclosureTriggerWrapper", ref: ref, children: children instanceof Function ? children({ expanded }) : children }));
28
41
  };
29
42
 
30
43
  exports.DisclosureTrigger = DisclosureTrigger;
@@ -1 +1 @@
1
- {"version":3,"file":"DisclosureTrigger.cjs","sources":["../../../src/components/Disclosure/DisclosureTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type FC,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n useCallback,\n useMemo,\n} from 'react'\n\nimport { useDisclosure } from './useDisclosure'\n\ntype DisclosureTriggerNodeChildren = Omit<\n ReactElement,\n 'onClick' | 'aria-expanded' | 'aria-controls'\n>\ntype DisclosureTriggerFuncChildren = (args: { expanded: boolean }) => DisclosureTriggerNodeChildren\n\ntype DisclosureTriggerProps = {\n /** DisclosureContentのidと紐づける文字列 */\n targetId: string\n /** 開閉時のハンドラー */\n onClick?: (open: () => void, e: MouseEvent<HTMLButtonElement>) => void\n children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren\n}\n\nexport const DisclosureTrigger: FC<DisclosureTriggerProps> = ({\n targetId,\n children,\n onClick,\n ...rest\n}) => {\n const [expanded, setExpanded] = useDisclosure(targetId)\n\n const actualOnClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n const toggleExpanded = () => {\n setExpanded((current) => !current)\n }\n\n if (onClick) {\n return onClick(toggleExpanded, e)\n }\n\n toggleExpanded()\n },\n [onClick, setExpanded],\n )\n\n const actualTrigger = useMemo(() => {\n const actualChildren = children instanceof Function ? children({ expanded }) : children\n\n return cloneElement(actualChildren as ReactElement, {\n ...rest,\n onClick: actualOnClick,\n 'aria-expanded': expanded.toString(),\n 'aria-controls': targetId,\n })\n }, [expanded, children, actualOnClick, targetId, rest])\n\n return actualTrigger\n}\n"],"names":[],"mappings":";;;;;;AA2BO;;AAQL;;;AAII;;AAGE;;AAGF;AACF;AAIF;AACE;;AAGE;AACA;AACA;AACA;AACD;AACH;AAEA;AACF;;"}
1
+ {"version":3,"file":"DisclosureTrigger.cjs","sources":["../../../src/components/Disclosure/DisclosureTrigger.tsx"],"sourcesContent":["'use client'\n\nimport { type FC, type ReactElement, useEffect, useMemo, useRef } from 'react'\n\nimport { useDisclosure } from './useDisclosure'\n\ntype DisclosureTriggerNodeChildren = Omit<\n ReactElement,\n 'onClick' | 'aria-expanded' | 'aria-controls'\n>\ntype DisclosureTriggerFuncChildren = (args: { expanded: boolean }) => DisclosureTriggerNodeChildren\n\ntype DisclosureTriggerProps = {\n /** DisclosureContentのidと紐づける文字列 */\n targetId: string\n /** 開閉時のハンドラー */\n onClick?: (open: () => void, e: MouseEvent) => void\n children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren\n}\n\nexport const DisclosureTrigger: FC<DisclosureTriggerProps> = ({ targetId, children, onClick }) => {\n const [expanded, setExpanded] = useDisclosure(targetId)\n const ref = useRef<HTMLSpanElement | null>(null)\n\n const actualOnClick = useMemo(() => {\n const toggleExpanded = () => {\n setExpanded((current) => !current)\n }\n\n if (onClick) {\n return (e: MouseEvent) => {\n onClick(toggleExpanded, e)\n }\n }\n\n return toggleExpanded\n }, [onClick, setExpanded])\n\n useEffect(() => {\n if (!ref.current) {\n return\n }\n\n const button = ref.current.querySelector('button')\n\n if (!button) {\n throw new Error('DisclosureTriggerのchildrenにbutton要素を設置してください')\n }\n\n button.setAttribute('aria-expanded', expanded.toString())\n button.setAttribute('aria-controls', targetId)\n button.addEventListener('click', actualOnClick)\n\n return () => {\n button.removeEventListener('click', actualOnClick)\n }\n }, [expanded, children, actualOnClick, targetId])\n\n // HINT: 念の為spanに対して外部からstyleを当てられるようにしておく。\n // Fragmentにrefが渡せるようになったタイミングでclassNameも不要になる\n // TODO: 将来的にspan -> Fragmentに変更する\n return (\n <span className=\"smarthr-ui-DisclosureTriggerWrapper\" ref={ref}>\n {children instanceof Function ? children({ expanded }) : children}\n </span>\n )\n}\n"],"names":[],"mappings":";;;;;;;AAoBO;;AAEL;AAEA;;;AAGE;;;AAII;AACF;;AAGF;AACF;;AAGE;;;;;AAOE;;;AAIF;AACA;AAEA;AACE;AACF;;;;;AAMF;AAKF;;"}
@@ -1,4 +1,4 @@
1
- import { type FC, type MouseEvent, type ReactElement } from 'react';
1
+ import { type FC, type ReactElement } from 'react';
2
2
  type DisclosureTriggerNodeChildren = Omit<ReactElement, 'onClick' | 'aria-expanded' | 'aria-controls'>;
3
3
  type DisclosureTriggerFuncChildren = (args: {
4
4
  expanded: boolean;
@@ -7,7 +7,7 @@ type DisclosureTriggerProps = {
7
7
  /** DisclosureContentのidと紐づける文字列 */
8
8
  targetId: string;
9
9
  /** 開閉時のハンドラー */
10
- onClick?: (open: () => void, e: MouseEvent<HTMLButtonElement>) => void;
10
+ onClick?: (open: () => void, e: MouseEvent) => void;
11
11
  children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren;
12
12
  };
13
13
  export declare const DisclosureTrigger: FC<DisclosureTriggerProps>;
@@ -1,28 +1,41 @@
1
1
  "use client";
2
- import { useCallback, useMemo, cloneElement } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { useRef, useMemo, useEffect } from 'react';
3
4
  import { useDisclosure } from './useDisclosure.js';
4
5
 
5
- const DisclosureTrigger = ({ targetId, children, onClick, ...rest }) => {
6
+ const DisclosureTrigger = ({ targetId, children, onClick }) => {
6
7
  const [expanded, setExpanded] = useDisclosure(targetId);
7
- const actualOnClick = useCallback((e) => {
8
+ const ref = useRef(null);
9
+ const actualOnClick = useMemo(() => {
8
10
  const toggleExpanded = () => {
9
11
  setExpanded((current) => !current);
10
12
  };
11
13
  if (onClick) {
12
- return onClick(toggleExpanded, e);
14
+ return (e) => {
15
+ onClick(toggleExpanded, e);
16
+ };
13
17
  }
14
- toggleExpanded();
18
+ return toggleExpanded;
15
19
  }, [onClick, setExpanded]);
16
- const actualTrigger = useMemo(() => {
17
- const actualChildren = children instanceof Function ? children({ expanded }) : children;
18
- return cloneElement(actualChildren, {
19
- ...rest,
20
- onClick: actualOnClick,
21
- 'aria-expanded': expanded.toString(),
22
- 'aria-controls': targetId,
23
- });
24
- }, [expanded, children, actualOnClick, targetId, rest]);
25
- return actualTrigger;
20
+ useEffect(() => {
21
+ if (!ref.current) {
22
+ return;
23
+ }
24
+ const button = ref.current.querySelector('button');
25
+ if (!button) {
26
+ throw new Error('DisclosureTriggerのchildrenにbutton要素を設置してください');
27
+ }
28
+ button.setAttribute('aria-expanded', expanded.toString());
29
+ button.setAttribute('aria-controls', targetId);
30
+ button.addEventListener('click', actualOnClick);
31
+ return () => {
32
+ button.removeEventListener('click', actualOnClick);
33
+ };
34
+ }, [expanded, children, actualOnClick, targetId]);
35
+ // HINT: 念の為spanに対して外部からstyleを当てられるようにしておく。
36
+ // Fragmentにrefが渡せるようになったタイミングでclassNameも不要になる
37
+ // TODO: 将来的にspan -> Fragmentに変更する
38
+ return (jsx("span", { className: "smarthr-ui-DisclosureTriggerWrapper", ref: ref, children: children instanceof Function ? children({ expanded }) : children }));
26
39
  };
27
40
 
28
41
  export { DisclosureTrigger };
@@ -1 +1 @@
1
- {"version":3,"file":"DisclosureTrigger.js","sources":["../../../src/components/Disclosure/DisclosureTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n type FC,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n useCallback,\n useMemo,\n} from 'react'\n\nimport { useDisclosure } from './useDisclosure'\n\ntype DisclosureTriggerNodeChildren = Omit<\n ReactElement,\n 'onClick' | 'aria-expanded' | 'aria-controls'\n>\ntype DisclosureTriggerFuncChildren = (args: { expanded: boolean }) => DisclosureTriggerNodeChildren\n\ntype DisclosureTriggerProps = {\n /** DisclosureContentのidと紐づける文字列 */\n targetId: string\n /** 開閉時のハンドラー */\n onClick?: (open: () => void, e: MouseEvent<HTMLButtonElement>) => void\n children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren\n}\n\nexport const DisclosureTrigger: FC<DisclosureTriggerProps> = ({\n targetId,\n children,\n onClick,\n ...rest\n}) => {\n const [expanded, setExpanded] = useDisclosure(targetId)\n\n const actualOnClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n const toggleExpanded = () => {\n setExpanded((current) => !current)\n }\n\n if (onClick) {\n return onClick(toggleExpanded, e)\n }\n\n toggleExpanded()\n },\n [onClick, setExpanded],\n )\n\n const actualTrigger = useMemo(() => {\n const actualChildren = children instanceof Function ? children({ expanded }) : children\n\n return cloneElement(actualChildren as ReactElement, {\n ...rest,\n onClick: actualOnClick,\n 'aria-expanded': expanded.toString(),\n 'aria-controls': targetId,\n })\n }, [expanded, children, actualOnClick, targetId, rest])\n\n return actualTrigger\n}\n"],"names":[],"mappings":";;;;AA2BO;;AAQL;;;AAII;;AAGE;;AAGF;AACF;AAIF;AACE;;AAGE;AACA;AACA;AACA;AACD;AACH;AAEA;AACF;;"}
1
+ {"version":3,"file":"DisclosureTrigger.js","sources":["../../../src/components/Disclosure/DisclosureTrigger.tsx"],"sourcesContent":["'use client'\n\nimport { type FC, type ReactElement, useEffect, useMemo, useRef } from 'react'\n\nimport { useDisclosure } from './useDisclosure'\n\ntype DisclosureTriggerNodeChildren = Omit<\n ReactElement,\n 'onClick' | 'aria-expanded' | 'aria-controls'\n>\ntype DisclosureTriggerFuncChildren = (args: { expanded: boolean }) => DisclosureTriggerNodeChildren\n\ntype DisclosureTriggerProps = {\n /** DisclosureContentのidと紐づける文字列 */\n targetId: string\n /** 開閉時のハンドラー */\n onClick?: (open: () => void, e: MouseEvent) => void\n children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren\n}\n\nexport const DisclosureTrigger: FC<DisclosureTriggerProps> = ({ targetId, children, onClick }) => {\n const [expanded, setExpanded] = useDisclosure(targetId)\n const ref = useRef<HTMLSpanElement | null>(null)\n\n const actualOnClick = useMemo(() => {\n const toggleExpanded = () => {\n setExpanded((current) => !current)\n }\n\n if (onClick) {\n return (e: MouseEvent) => {\n onClick(toggleExpanded, e)\n }\n }\n\n return toggleExpanded\n }, [onClick, setExpanded])\n\n useEffect(() => {\n if (!ref.current) {\n return\n }\n\n const button = ref.current.querySelector('button')\n\n if (!button) {\n throw new Error('DisclosureTriggerのchildrenにbutton要素を設置してください')\n }\n\n button.setAttribute('aria-expanded', expanded.toString())\n button.setAttribute('aria-controls', targetId)\n button.addEventListener('click', actualOnClick)\n\n return () => {\n button.removeEventListener('click', actualOnClick)\n }\n }, [expanded, children, actualOnClick, targetId])\n\n // HINT: 念の為spanに対して外部からstyleを当てられるようにしておく。\n // Fragmentにrefが渡せるようになったタイミングでclassNameも不要になる\n // TODO: 将来的にspan -> Fragmentに変更する\n return (\n <span className=\"smarthr-ui-DisclosureTriggerWrapper\" ref={ref}>\n {children instanceof Function ? children({ expanded }) : children}\n </span>\n )\n}\n"],"names":[],"mappings":";;;;;AAoBO;;AAEL;AAEA;;;AAGE;;;AAII;AACF;;AAGF;AACF;;AAGE;;;;;AAOE;;;AAIF;AACA;AAEA;AACE;AACF;;;;;AAMF;AAKF;;"}
@@ -79,6 +79,14 @@ const classNameGenerator = index.tv({
79
79
  'pre-line': 'shr-whitespace-pre-line',
80
80
  'pre-wrap': 'shr-whitespace-pre-wrap',
81
81
  },
82
+ maxLines: {
83
+ 1: 'shr-inline-block shr-w-full shr-overflow-x-clip shr-overflow-ellipsis shr-whitespace-nowrap shr-align-middle',
84
+ 2: 'shr-line-clamp-[2]',
85
+ 3: 'shr-line-clamp-[3]',
86
+ 4: 'shr-line-clamp-[4]',
87
+ 5: 'shr-line-clamp-[5]',
88
+ 6: 'shr-line-clamp-[6]',
89
+ },
82
90
  },
83
91
  });
84
92
  const wrapperClassNameGenerator = index.tv({
@@ -125,7 +133,10 @@ const wrapperClassNameGenerator = index.tv({
125
133
  },
126
134
  });
127
135
  const iconObjectConverter = (icon) => (icon ? { prefix: icon } : undefined);
128
- const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'bold' : undefined, as: Component = emphasis ? 'em' : 'span', size, italic, color, leading, whiteSpace, className, children, ...rest }) => {
136
+ const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'bold' : undefined, as: Component = emphasis ? 'em' : 'span', size, italic, color, leading, whiteSpace, maxLines, className, children, ...rest }) => {
137
+ if (maxLines !== undefined && (maxLines < 1 || maxLines > 6)) {
138
+ throw new Error('"maxLines" は 1 ~ 6 の範囲で指定してください');
139
+ }
129
140
  const icon = hooks_useObjectAttributes.useObjectAttributes(orgIcon, iconObjectConverter);
130
141
  const actualClassName = React.useMemo(() => {
131
142
  const styleTypeValues = styleType
@@ -138,9 +149,10 @@ const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'b
138
149
  leading: leading || styleTypeValues.leading,
139
150
  italic,
140
151
  whiteSpace,
152
+ maxLines,
141
153
  className,
142
154
  });
143
- }, [size, weight, italic, color, leading, whiteSpace, className, styleType]);
155
+ }, [size, weight, italic, color, leading, whiteSpace, maxLines, className, styleType]);
144
156
  const wrapperClassName = React.useMemo(() => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''), [icon]);
145
157
  return (jsxRuntime.jsx(Component, { ...rest, className: actualClassName, children: icon ? (jsxRuntime.jsxs("span", { className: wrapperClassName, children: [icon.prefix, children, icon.suffix] })) : (children) }));
146
158
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Text.cjs","sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ElementType,\n type PropsWithChildren,\n type ReactNode,\n memo,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useObjectAttributes } from '../../hooks/useObjectAttributes'\n\nimport type { AbstractSize, CharRelativeSize } from '../../themes/createSpacing'\nimport type { Gap } from '../../types'\n\ntype StyleType =\n | 'screenTitle'\n | 'sectionTitle'\n | 'blockTitle'\n | 'subBlockTitle'\n | 'subSubBlockTitle'\n\nexport const STYLE_TYPE_MAP: { [key in StyleType]: VariantProps<typeof classNameGenerator> } = {\n screenTitle: {\n size: 'XL',\n leading: 'TIGHT',\n weight: 'normal',\n },\n sectionTitle: {\n size: 'L',\n leading: 'TIGHT',\n weight: 'normal',\n },\n blockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n },\n subBlockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n subSubBlockTitle: {\n size: 'S',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n}\nconst UNDEFINED_STYLE_VALUES = {\n size: undefined,\n leading: undefined,\n weight: undefined,\n color: undefined,\n}\n\nconst classNameGenerator = tv({\n variants: {\n size: {\n XXS: 'shr-text-2xs',\n XS: 'shr-text-xs',\n S: 'shr-text-sm',\n M: 'shr-text-base',\n L: 'shr-text-lg',\n XL: 'shr-text-xl',\n XXL: 'shr-text-2xl',\n },\n weight: {\n normal: 'shr-font-normal',\n bold: 'shr-font-bold',\n },\n italic: {\n true: 'shr-italic',\n },\n color: {\n TEXT_BLACK: 'shr-text-black',\n TEXT_WHITE: 'shr-text-white',\n TEXT_GREY: 'shr-text-grey',\n TEXT_DISABLED: 'shr-text-disabled',\n TEXT_LINK: 'shr-text-link',\n inherit: 'shr-text-color-inherit',\n },\n leading: {\n NONE: 'shr-leading-none',\n TIGHT: 'shr-leading-tight',\n NORMAL: 'shr-leading-normal',\n LOOSE: 'shr-leading-loose',\n },\n whiteSpace: {\n normal: 'shr-whitespace-normal',\n nowrap: 'shr-whitespace-nowrap',\n pre: 'shr-whitespace-pre',\n 'pre-line': 'shr-whitespace-pre-line',\n 'pre-wrap': 'shr-whitespace-pre-wrap',\n },\n },\n})\n\nconst wrapperClassNameGenerator = tv({\n base: [\n 'smarthr-ui-Icon-extended smarthr-ui-Icon-withText shr-group/iconWrapper shr-inline-flex shr-items-baseline',\n ],\n variants: {\n gap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n '-0.25': '-shr-gap-x-0.25',\n '-0.5': '-shr-gap-x-0.5',\n '-0.75': '-shr-gap-x-0.75',\n '-1': '-shr-gap-x-1',\n '-1.25': '-shr-gap-x-1.25',\n '-1.5': '-shr-gap-x-1.5',\n '-2': '-shr-gap-x-2',\n '-2.5': '-shr-gap-x-2.5',\n '-3': '-shr-gap-x-3',\n '-3.5': '-shr-gap-x-3.5',\n '-4': '-shr-gap-x-4',\n '-8': '-shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n },\n})\n\ntype ActualIconType =\n | undefined\n | {\n /** テキスト左に設置するアイコン */\n prefix?: ReactNode\n /** テキスト右に設置するアイコン */\n suffix?: ReactNode\n /** アイコンと並べるテキストとの溝 */\n gap?: CharRelativeSize | AbstractSize\n }\ntype IconType = ActualIconType | ReactNode\n\n// VariantProps を使うとコメントが書けない〜🥹\nexport type TextProps<T extends ElementType = 'span'> = VariantProps<typeof classNameGenerator> & {\n /** テキストコンポーネントの HTML タグ名。初期値は span */\n as?: T\n /** 強調するかどうかの真偽値。指定すると em 要素になる */\n emphasis?: boolean\n /** 見た目の種類 */\n styleType?: StyleType\n /** 設置するアイコン */\n icon?: IconType\n}\n\nconst iconObjectConverter = (icon: ReactNode) => (icon ? { prefix: icon } : undefined)\n\nconst ActualText = <T extends ElementType = 'span'>({\n emphasis,\n styleType,\n icon: orgIcon,\n weight = emphasis ? 'bold' : undefined,\n as: Component = emphasis ? 'em' : 'span',\n size,\n italic,\n color,\n leading,\n whiteSpace,\n className,\n children,\n ...rest\n}: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => {\n const icon = useObjectAttributes<IconType, ActualIconType>(orgIcon, iconObjectConverter)\n const actualClassName = useMemo(() => {\n const styleTypeValues = styleType\n ? STYLE_TYPE_MAP[styleType as StyleType]\n : UNDEFINED_STYLE_VALUES\n\n return classNameGenerator({\n size: size || styleTypeValues.size,\n weight: weight || styleTypeValues.weight,\n color: color || styleTypeValues.color,\n leading: leading || styleTypeValues.leading,\n italic,\n whiteSpace,\n className,\n })\n }, [size, weight, italic, color, leading, whiteSpace, className, styleType])\n const wrapperClassName = useMemo(\n () => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''),\n [icon],\n )\n\n return (\n <Component {...rest} className={actualClassName}>\n {icon ? (\n <span className={wrapperClassName}>\n {icon.prefix}\n {children}\n {icon.suffix}\n </span>\n ) : (\n children\n )}\n </Component>\n )\n}\n\nexport const Text = memo(ActualText) as typeof ActualText\n"],"names":["tv","useObjectAttributes","useMemo","_jsx","_jsxs","memo"],"mappings":";;;;;;;AAsBO,MAAM,cAAc,GAAoE;AAC7F,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,QAAQ;AACjB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,QAAQ;AACjB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,WAAW;AACnB,KAAA;;AAEH,MAAM,sBAAsB,GAAG;AAC7B,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,SAAS;CACjB;AAED,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,GAAG,EAAE,cAAc;AACnB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,GAAG,EAAE,cAAc;AACpB,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,iBAAiB;AACzB,YAAA,IAAI,EAAE,eAAe;AACtB,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,aAAa,EAAE,mBAAmB;AAClC,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,wBAAwB;AAClC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,MAAM,EAAE,oBAAoB;AAC5B,YAAA,KAAK,EAAE,mBAAmB;AAC3B,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,MAAM,EAAE,uBAAuB;AAC/B,YAAA,MAAM,EAAE,uBAAuB;AAC/B,YAAA,GAAG,EAAE,oBAAoB;AACzB,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,UAAU,EAAE,yBAAyB;AACtC,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AAEF,MAAM,yBAAyB,GAAGA,QAAE,CAAC;AACnC,IAAA,IAAI,EAAE;QACJ,4GAA4G;AAC7G,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,GAAG,EAAE;AACH,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,GAAG,EAAE,gBAAgB;AACrB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,GAAG,EAAE,aAAa;AACS,SAAA;AAC9B,KAAA;AACF,CAAA,CAAC;AA0BF,MAAM,mBAAmB,GAAG,CAAC,IAAe,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AAEtF,MAAM,UAAU,GAAG,CAAiC,EAClD,QAAQ,EACR,SAAS,EACT,IAAI,EAAE,OAAO,EACb,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,EACtC,EAAE,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,EACxC,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EAC6C,KAAI;IACxD,MAAM,IAAI,GAAGC,6CAAmB,CAA2B,OAAO,EAAE,mBAAmB,CAAC;AACxF,IAAA,MAAM,eAAe,GAAGC,aAAO,CAAC,MAAK;QACnC,MAAM,eAAe,GAAG;AACtB,cAAE,cAAc,CAAC,SAAsB;cACrC,sBAAsB;AAE1B,QAAA,OAAO,kBAAkB,CAAC;AACxB,YAAA,IAAI,EAAE,IAAI,IAAI,eAAe,CAAC,IAAI;AAClC,YAAA,MAAM,EAAE,MAAM,IAAI,eAAe,CAAC,MAAM;AACxC,YAAA,KAAK,EAAE,KAAK,IAAI,eAAe,CAAC,KAAK;AACrC,YAAA,OAAO,EAAE,OAAO,IAAI,eAAe,CAAC,OAAO;YAC3C,MAAM;YACN,UAAU;YACV,SAAS;AACV,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC5E,IAAA,MAAM,gBAAgB,GAAGA,aAAO,CAC9B,OAAO,IAAI,GAAG,yBAAyB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EACxE,CAAC,IAAI,CAAC,CACP;AAED,IAAA,QACEC,cAAA,CAAC,SAAS,EAAA,EAAA,GAAK,IAAI,EAAE,SAAS,EAAE,eAAe,EAAA,QAAA,EAC5C,IAAI,IACHC,eAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,gBAAgB,EAAA,QAAA,EAAA,CAC9B,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,IAAI,CAAC,MAAM,CAAA,EAAA,CACP,KAEP,QAAQ,CACT,EAAA,CACS;AAEhB,CAAC;MAEY,IAAI,GAAGC,UAAI,CAAC,UAAU;;;;;"}
1
+ {"version":3,"file":"Text.cjs","sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ElementType,\n type PropsWithChildren,\n type ReactNode,\n memo,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useObjectAttributes } from '../../hooks/useObjectAttributes'\n\nimport type { AbstractSize, CharRelativeSize } from '../../themes/createSpacing'\nimport type { Gap } from '../../types'\n\ntype StyleType =\n | 'screenTitle'\n | 'sectionTitle'\n | 'blockTitle'\n | 'subBlockTitle'\n | 'subSubBlockTitle'\n\nexport const STYLE_TYPE_MAP: { [key in StyleType]: VariantProps<typeof classNameGenerator> } = {\n screenTitle: {\n size: 'XL',\n leading: 'TIGHT',\n weight: 'normal',\n },\n sectionTitle: {\n size: 'L',\n leading: 'TIGHT',\n weight: 'normal',\n },\n blockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n },\n subBlockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n subSubBlockTitle: {\n size: 'S',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n}\nconst UNDEFINED_STYLE_VALUES = {\n size: undefined,\n leading: undefined,\n weight: undefined,\n color: undefined,\n}\n\nconst classNameGenerator = tv({\n variants: {\n size: {\n XXS: 'shr-text-2xs',\n XS: 'shr-text-xs',\n S: 'shr-text-sm',\n M: 'shr-text-base',\n L: 'shr-text-lg',\n XL: 'shr-text-xl',\n XXL: 'shr-text-2xl',\n },\n weight: {\n normal: 'shr-font-normal',\n bold: 'shr-font-bold',\n },\n italic: {\n true: 'shr-italic',\n },\n color: {\n TEXT_BLACK: 'shr-text-black',\n TEXT_WHITE: 'shr-text-white',\n TEXT_GREY: 'shr-text-grey',\n TEXT_DISABLED: 'shr-text-disabled',\n TEXT_LINK: 'shr-text-link',\n inherit: 'shr-text-color-inherit',\n },\n leading: {\n NONE: 'shr-leading-none',\n TIGHT: 'shr-leading-tight',\n NORMAL: 'shr-leading-normal',\n LOOSE: 'shr-leading-loose',\n },\n whiteSpace: {\n normal: 'shr-whitespace-normal',\n nowrap: 'shr-whitespace-nowrap',\n pre: 'shr-whitespace-pre',\n 'pre-line': 'shr-whitespace-pre-line',\n 'pre-wrap': 'shr-whitespace-pre-wrap',\n },\n maxLines: {\n 1: 'shr-inline-block shr-w-full shr-overflow-x-clip shr-overflow-ellipsis shr-whitespace-nowrap shr-align-middle',\n 2: 'shr-line-clamp-[2]',\n 3: 'shr-line-clamp-[3]',\n 4: 'shr-line-clamp-[4]',\n 5: 'shr-line-clamp-[5]',\n 6: 'shr-line-clamp-[6]',\n },\n },\n})\n\nconst wrapperClassNameGenerator = tv({\n base: [\n 'smarthr-ui-Icon-extended smarthr-ui-Icon-withText shr-group/iconWrapper shr-inline-flex shr-items-baseline',\n ],\n variants: {\n gap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n '-0.25': '-shr-gap-x-0.25',\n '-0.5': '-shr-gap-x-0.5',\n '-0.75': '-shr-gap-x-0.75',\n '-1': '-shr-gap-x-1',\n '-1.25': '-shr-gap-x-1.25',\n '-1.5': '-shr-gap-x-1.5',\n '-2': '-shr-gap-x-2',\n '-2.5': '-shr-gap-x-2.5',\n '-3': '-shr-gap-x-3',\n '-3.5': '-shr-gap-x-3.5',\n '-4': '-shr-gap-x-4',\n '-8': '-shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n },\n})\n\ntype ActualIconType =\n | undefined\n | {\n /** テキスト左に設置するアイコン */\n prefix?: ReactNode\n /** テキスト右に設置するアイコン */\n suffix?: ReactNode\n /** アイコンと並べるテキストとの溝 */\n gap?: CharRelativeSize | AbstractSize\n }\ntype IconType = ActualIconType | ReactNode\n\n// VariantProps を使うとコメントが書けない〜🥹\nexport type TextProps<T extends ElementType = 'span'> = VariantProps<typeof classNameGenerator> & {\n /** テキストコンポーネントの HTML タグ名。初期値は span */\n as?: T\n /** 強調するかどうかの真偽値。指定すると em 要素になる */\n emphasis?: boolean\n /** 見た目の種類 */\n styleType?: StyleType\n /** 設置するアイコン */\n icon?: IconType\n}\n\nconst iconObjectConverter = (icon: ReactNode) => (icon ? { prefix: icon } : undefined)\n\nconst ActualText = <T extends ElementType = 'span'>({\n emphasis,\n styleType,\n icon: orgIcon,\n weight = emphasis ? 'bold' : undefined,\n as: Component = emphasis ? 'em' : 'span',\n size,\n italic,\n color,\n leading,\n whiteSpace,\n maxLines,\n className,\n children,\n ...rest\n}: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => {\n if (maxLines !== undefined && (maxLines < 1 || maxLines > 6)) {\n throw new Error('\"maxLines\" は 1 ~ 6 の範囲で指定してください')\n }\n\n const icon = useObjectAttributes<IconType, ActualIconType>(orgIcon, iconObjectConverter)\n const actualClassName = useMemo(() => {\n const styleTypeValues = styleType\n ? STYLE_TYPE_MAP[styleType as StyleType]\n : UNDEFINED_STYLE_VALUES\n\n return classNameGenerator({\n size: size || styleTypeValues.size,\n weight: weight || styleTypeValues.weight,\n color: color || styleTypeValues.color,\n leading: leading || styleTypeValues.leading,\n italic,\n whiteSpace,\n maxLines,\n className,\n })\n }, [size, weight, italic, color, leading, whiteSpace, maxLines, className, styleType])\n const wrapperClassName = useMemo(\n () => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''),\n [icon],\n )\n\n return (\n <Component {...rest} className={actualClassName}>\n {icon ? (\n <span className={wrapperClassName}>\n {icon.prefix}\n {children}\n {icon.suffix}\n </span>\n ) : (\n children\n )}\n </Component>\n )\n}\n\nexport const Text = memo(ActualText) as typeof ActualText\n"],"names":["tv","useObjectAttributes","useMemo","_jsx","_jsxs","memo"],"mappings":"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"}
@@ -43,6 +43,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
43
43
  'pre-line': string;
44
44
  'pre-wrap': string;
45
45
  };
46
+ maxLines: {
47
+ 1: string;
48
+ 2: string;
49
+ 3: string;
50
+ 4: string;
51
+ 5: string;
52
+ 6: string;
53
+ };
46
54
  }, undefined, undefined, import("tailwind-variants/dist/config").TVConfig<{
47
55
  size: {
48
56
  XXS: string;
@@ -81,6 +89,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
81
89
  'pre-line': string;
82
90
  'pre-wrap': string;
83
91
  };
92
+ maxLines: {
93
+ 1: string;
94
+ 2: string;
95
+ 3: string;
96
+ 4: string;
97
+ 5: string;
98
+ 6: string;
99
+ };
84
100
  }, {
85
101
  size: {
86
102
  XXS: string;
@@ -119,6 +135,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
119
135
  'pre-line': string;
120
136
  'pre-wrap': string;
121
137
  };
138
+ maxLines: {
139
+ 1: string;
140
+ 2: string;
141
+ 3: string;
142
+ 4: string;
143
+ 5: string;
144
+ 6: string;
145
+ };
122
146
  }>, {
123
147
  size: {
124
148
  XXS: string;
@@ -157,6 +181,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
157
181
  'pre-line': string;
158
182
  'pre-wrap': string;
159
183
  };
184
+ maxLines: {
185
+ 1: string;
186
+ 2: string;
187
+ 3: string;
188
+ 4: string;
189
+ 5: string;
190
+ 6: string;
191
+ };
160
192
  }, undefined, import("tailwind-variants").TVReturnType<{
161
193
  size: {
162
194
  XXS: string;
@@ -195,6 +227,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
195
227
  'pre-line': string;
196
228
  'pre-wrap': string;
197
229
  };
230
+ maxLines: {
231
+ 1: string;
232
+ 2: string;
233
+ 3: string;
234
+ 4: string;
235
+ 5: string;
236
+ 6: string;
237
+ };
198
238
  }, undefined, undefined, import("tailwind-variants/dist/config").TVConfig<{
199
239
  size: {
200
240
  XXS: string;
@@ -233,6 +273,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
233
273
  'pre-line': string;
234
274
  'pre-wrap': string;
235
275
  };
276
+ maxLines: {
277
+ 1: string;
278
+ 2: string;
279
+ 3: string;
280
+ 4: string;
281
+ 5: string;
282
+ 6: string;
283
+ };
236
284
  }, {
237
285
  size: {
238
286
  XXS: string;
@@ -271,6 +319,14 @@ declare const classNameGenerator: import("tailwind-variants").TVReturnType<{
271
319
  'pre-line': string;
272
320
  'pre-wrap': string;
273
321
  };
322
+ maxLines: {
323
+ 1: string;
324
+ 2: string;
325
+ 3: string;
326
+ 4: string;
327
+ 5: string;
328
+ 6: string;
329
+ };
274
330
  }>, unknown, unknown, undefined>>;
275
331
  type ActualIconType = undefined | {
276
332
  /** テキスト左に設置するアイコン */
@@ -291,6 +347,6 @@ export type TextProps<T extends ElementType = 'span'> = VariantProps<typeof clas
291
347
  /** 設置するアイコン */
292
348
  icon?: IconType;
293
349
  };
294
- declare const ActualText: <T extends ElementType = "span">({ emphasis, styleType, icon: orgIcon, weight, as: Component, size, italic, color, leading, whiteSpace, className, children, ...rest }: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => import("react/jsx-runtime").JSX.Element;
350
+ declare const ActualText: <T extends ElementType = "span">({ emphasis, styleType, icon: orgIcon, weight, as: Component, size, italic, color, leading, whiteSpace, maxLines, className, children, ...rest }: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => import("react/jsx-runtime").JSX.Element;
295
351
  export declare const Text: typeof ActualText;
296
352
  export {};
@@ -77,6 +77,14 @@ const classNameGenerator = ce({
77
77
  'pre-line': 'shr-whitespace-pre-line',
78
78
  'pre-wrap': 'shr-whitespace-pre-wrap',
79
79
  },
80
+ maxLines: {
81
+ 1: 'shr-inline-block shr-w-full shr-overflow-x-clip shr-overflow-ellipsis shr-whitespace-nowrap shr-align-middle',
82
+ 2: 'shr-line-clamp-[2]',
83
+ 3: 'shr-line-clamp-[3]',
84
+ 4: 'shr-line-clamp-[4]',
85
+ 5: 'shr-line-clamp-[5]',
86
+ 6: 'shr-line-clamp-[6]',
87
+ },
80
88
  },
81
89
  });
82
90
  const wrapperClassNameGenerator = ce({
@@ -123,7 +131,10 @@ const wrapperClassNameGenerator = ce({
123
131
  },
124
132
  });
125
133
  const iconObjectConverter = (icon) => (icon ? { prefix: icon } : undefined);
126
- const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'bold' : undefined, as: Component = emphasis ? 'em' : 'span', size, italic, color, leading, whiteSpace, className, children, ...rest }) => {
134
+ const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'bold' : undefined, as: Component = emphasis ? 'em' : 'span', size, italic, color, leading, whiteSpace, maxLines, className, children, ...rest }) => {
135
+ if (maxLines !== undefined && (maxLines < 1 || maxLines > 6)) {
136
+ throw new Error('"maxLines" は 1 ~ 6 の範囲で指定してください');
137
+ }
127
138
  const icon = useObjectAttributes(orgIcon, iconObjectConverter);
128
139
  const actualClassName = useMemo(() => {
129
140
  const styleTypeValues = styleType
@@ -136,9 +147,10 @@ const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'b
136
147
  leading: leading || styleTypeValues.leading,
137
148
  italic,
138
149
  whiteSpace,
150
+ maxLines,
139
151
  className,
140
152
  });
141
- }, [size, weight, italic, color, leading, whiteSpace, className, styleType]);
153
+ }, [size, weight, italic, color, leading, whiteSpace, maxLines, className, styleType]);
142
154
  const wrapperClassName = useMemo(() => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''), [icon]);
143
155
  return (jsx(Component, { ...rest, className: actualClassName, children: icon ? (jsxs("span", { className: wrapperClassName, children: [icon.prefix, children, icon.suffix] })) : (children) }));
144
156
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ElementType,\n type PropsWithChildren,\n type ReactNode,\n memo,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useObjectAttributes } from '../../hooks/useObjectAttributes'\n\nimport type { AbstractSize, CharRelativeSize } from '../../themes/createSpacing'\nimport type { Gap } from '../../types'\n\ntype StyleType =\n | 'screenTitle'\n | 'sectionTitle'\n | 'blockTitle'\n | 'subBlockTitle'\n | 'subSubBlockTitle'\n\nexport const STYLE_TYPE_MAP: { [key in StyleType]: VariantProps<typeof classNameGenerator> } = {\n screenTitle: {\n size: 'XL',\n leading: 'TIGHT',\n weight: 'normal',\n },\n sectionTitle: {\n size: 'L',\n leading: 'TIGHT',\n weight: 'normal',\n },\n blockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n },\n subBlockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n subSubBlockTitle: {\n size: 'S',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n}\nconst UNDEFINED_STYLE_VALUES = {\n size: undefined,\n leading: undefined,\n weight: undefined,\n color: undefined,\n}\n\nconst classNameGenerator = tv({\n variants: {\n size: {\n XXS: 'shr-text-2xs',\n XS: 'shr-text-xs',\n S: 'shr-text-sm',\n M: 'shr-text-base',\n L: 'shr-text-lg',\n XL: 'shr-text-xl',\n XXL: 'shr-text-2xl',\n },\n weight: {\n normal: 'shr-font-normal',\n bold: 'shr-font-bold',\n },\n italic: {\n true: 'shr-italic',\n },\n color: {\n TEXT_BLACK: 'shr-text-black',\n TEXT_WHITE: 'shr-text-white',\n TEXT_GREY: 'shr-text-grey',\n TEXT_DISABLED: 'shr-text-disabled',\n TEXT_LINK: 'shr-text-link',\n inherit: 'shr-text-color-inherit',\n },\n leading: {\n NONE: 'shr-leading-none',\n TIGHT: 'shr-leading-tight',\n NORMAL: 'shr-leading-normal',\n LOOSE: 'shr-leading-loose',\n },\n whiteSpace: {\n normal: 'shr-whitespace-normal',\n nowrap: 'shr-whitespace-nowrap',\n pre: 'shr-whitespace-pre',\n 'pre-line': 'shr-whitespace-pre-line',\n 'pre-wrap': 'shr-whitespace-pre-wrap',\n },\n },\n})\n\nconst wrapperClassNameGenerator = tv({\n base: [\n 'smarthr-ui-Icon-extended smarthr-ui-Icon-withText shr-group/iconWrapper shr-inline-flex shr-items-baseline',\n ],\n variants: {\n gap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n '-0.25': '-shr-gap-x-0.25',\n '-0.5': '-shr-gap-x-0.5',\n '-0.75': '-shr-gap-x-0.75',\n '-1': '-shr-gap-x-1',\n '-1.25': '-shr-gap-x-1.25',\n '-1.5': '-shr-gap-x-1.5',\n '-2': '-shr-gap-x-2',\n '-2.5': '-shr-gap-x-2.5',\n '-3': '-shr-gap-x-3',\n '-3.5': '-shr-gap-x-3.5',\n '-4': '-shr-gap-x-4',\n '-8': '-shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n },\n})\n\ntype ActualIconType =\n | undefined\n | {\n /** テキスト左に設置するアイコン */\n prefix?: ReactNode\n /** テキスト右に設置するアイコン */\n suffix?: ReactNode\n /** アイコンと並べるテキストとの溝 */\n gap?: CharRelativeSize | AbstractSize\n }\ntype IconType = ActualIconType | ReactNode\n\n// VariantProps を使うとコメントが書けない〜🥹\nexport type TextProps<T extends ElementType = 'span'> = VariantProps<typeof classNameGenerator> & {\n /** テキストコンポーネントの HTML タグ名。初期値は span */\n as?: T\n /** 強調するかどうかの真偽値。指定すると em 要素になる */\n emphasis?: boolean\n /** 見た目の種類 */\n styleType?: StyleType\n /** 設置するアイコン */\n icon?: IconType\n}\n\nconst iconObjectConverter = (icon: ReactNode) => (icon ? { prefix: icon } : undefined)\n\nconst ActualText = <T extends ElementType = 'span'>({\n emphasis,\n styleType,\n icon: orgIcon,\n weight = emphasis ? 'bold' : undefined,\n as: Component = emphasis ? 'em' : 'span',\n size,\n italic,\n color,\n leading,\n whiteSpace,\n className,\n children,\n ...rest\n}: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => {\n const icon = useObjectAttributes<IconType, ActualIconType>(orgIcon, iconObjectConverter)\n const actualClassName = useMemo(() => {\n const styleTypeValues = styleType\n ? STYLE_TYPE_MAP[styleType as StyleType]\n : UNDEFINED_STYLE_VALUES\n\n return classNameGenerator({\n size: size || styleTypeValues.size,\n weight: weight || styleTypeValues.weight,\n color: color || styleTypeValues.color,\n leading: leading || styleTypeValues.leading,\n italic,\n whiteSpace,\n className,\n })\n }, [size, weight, italic, color, leading, whiteSpace, className, styleType])\n const wrapperClassName = useMemo(\n () => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''),\n [icon],\n )\n\n return (\n <Component {...rest} className={actualClassName}>\n {icon ? (\n <span className={wrapperClassName}>\n {icon.prefix}\n {children}\n {icon.suffix}\n </span>\n ) : (\n children\n )}\n </Component>\n )\n}\n\nexport const Text = memo(ActualText) as typeof ActualText\n"],"names":["tv","_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Text.js","sources":["../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n type ComponentProps,\n type ElementType,\n type PropsWithChildren,\n type ReactNode,\n memo,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useObjectAttributes } from '../../hooks/useObjectAttributes'\n\nimport type { AbstractSize, CharRelativeSize } from '../../themes/createSpacing'\nimport type { Gap } from '../../types'\n\ntype StyleType =\n | 'screenTitle'\n | 'sectionTitle'\n | 'blockTitle'\n | 'subBlockTitle'\n | 'subSubBlockTitle'\n\nexport const STYLE_TYPE_MAP: { [key in StyleType]: VariantProps<typeof classNameGenerator> } = {\n screenTitle: {\n size: 'XL',\n leading: 'TIGHT',\n weight: 'normal',\n },\n sectionTitle: {\n size: 'L',\n leading: 'TIGHT',\n weight: 'normal',\n },\n blockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n },\n subBlockTitle: {\n size: 'M',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n subSubBlockTitle: {\n size: 'S',\n leading: 'TIGHT',\n weight: 'bold',\n color: 'TEXT_GREY',\n },\n}\nconst UNDEFINED_STYLE_VALUES = {\n size: undefined,\n leading: undefined,\n weight: undefined,\n color: undefined,\n}\n\nconst classNameGenerator = tv({\n variants: {\n size: {\n XXS: 'shr-text-2xs',\n XS: 'shr-text-xs',\n S: 'shr-text-sm',\n M: 'shr-text-base',\n L: 'shr-text-lg',\n XL: 'shr-text-xl',\n XXL: 'shr-text-2xl',\n },\n weight: {\n normal: 'shr-font-normal',\n bold: 'shr-font-bold',\n },\n italic: {\n true: 'shr-italic',\n },\n color: {\n TEXT_BLACK: 'shr-text-black',\n TEXT_WHITE: 'shr-text-white',\n TEXT_GREY: 'shr-text-grey',\n TEXT_DISABLED: 'shr-text-disabled',\n TEXT_LINK: 'shr-text-link',\n inherit: 'shr-text-color-inherit',\n },\n leading: {\n NONE: 'shr-leading-none',\n TIGHT: 'shr-leading-tight',\n NORMAL: 'shr-leading-normal',\n LOOSE: 'shr-leading-loose',\n },\n whiteSpace: {\n normal: 'shr-whitespace-normal',\n nowrap: 'shr-whitespace-nowrap',\n pre: 'shr-whitespace-pre',\n 'pre-line': 'shr-whitespace-pre-line',\n 'pre-wrap': 'shr-whitespace-pre-wrap',\n },\n maxLines: {\n 1: 'shr-inline-block shr-w-full shr-overflow-x-clip shr-overflow-ellipsis shr-whitespace-nowrap shr-align-middle',\n 2: 'shr-line-clamp-[2]',\n 3: 'shr-line-clamp-[3]',\n 4: 'shr-line-clamp-[4]',\n 5: 'shr-line-clamp-[5]',\n 6: 'shr-line-clamp-[6]',\n },\n },\n})\n\nconst wrapperClassNameGenerator = tv({\n base: [\n 'smarthr-ui-Icon-extended smarthr-ui-Icon-withText shr-group/iconWrapper shr-inline-flex shr-items-baseline',\n ],\n variants: {\n gap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n '-0.25': '-shr-gap-x-0.25',\n '-0.5': '-shr-gap-x-0.5',\n '-0.75': '-shr-gap-x-0.75',\n '-1': '-shr-gap-x-1',\n '-1.25': '-shr-gap-x-1.25',\n '-1.5': '-shr-gap-x-1.5',\n '-2': '-shr-gap-x-2',\n '-2.5': '-shr-gap-x-2.5',\n '-3': '-shr-gap-x-3',\n '-3.5': '-shr-gap-x-3.5',\n '-4': '-shr-gap-x-4',\n '-8': '-shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n },\n})\n\ntype ActualIconType =\n | undefined\n | {\n /** テキスト左に設置するアイコン */\n prefix?: ReactNode\n /** テキスト右に設置するアイコン */\n suffix?: ReactNode\n /** アイコンと並べるテキストとの溝 */\n gap?: CharRelativeSize | AbstractSize\n }\ntype IconType = ActualIconType | ReactNode\n\n// VariantProps を使うとコメントが書けない〜🥹\nexport type TextProps<T extends ElementType = 'span'> = VariantProps<typeof classNameGenerator> & {\n /** テキストコンポーネントの HTML タグ名。初期値は span */\n as?: T\n /** 強調するかどうかの真偽値。指定すると em 要素になる */\n emphasis?: boolean\n /** 見た目の種類 */\n styleType?: StyleType\n /** 設置するアイコン */\n icon?: IconType\n}\n\nconst iconObjectConverter = (icon: ReactNode) => (icon ? { prefix: icon } : undefined)\n\nconst ActualText = <T extends ElementType = 'span'>({\n emphasis,\n styleType,\n icon: orgIcon,\n weight = emphasis ? 'bold' : undefined,\n as: Component = emphasis ? 'em' : 'span',\n size,\n italic,\n color,\n leading,\n whiteSpace,\n maxLines,\n className,\n children,\n ...rest\n}: PropsWithChildren<TextProps<T> & ComponentProps<T>>) => {\n if (maxLines !== undefined && (maxLines < 1 || maxLines > 6)) {\n throw new Error('\"maxLines\" は 1 ~ 6 の範囲で指定してください')\n }\n\n const icon = useObjectAttributes<IconType, ActualIconType>(orgIcon, iconObjectConverter)\n const actualClassName = useMemo(() => {\n const styleTypeValues = styleType\n ? STYLE_TYPE_MAP[styleType as StyleType]\n : UNDEFINED_STYLE_VALUES\n\n return classNameGenerator({\n size: size || styleTypeValues.size,\n weight: weight || styleTypeValues.weight,\n color: color || styleTypeValues.color,\n leading: leading || styleTypeValues.leading,\n italic,\n whiteSpace,\n maxLines,\n className,\n })\n }, [size, weight, italic, color, leading, whiteSpace, maxLines, className, styleType])\n const wrapperClassName = useMemo(\n () => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''),\n [icon],\n )\n\n return (\n <Component {...rest} className={actualClassName}>\n {icon ? (\n <span className={wrapperClassName}>\n {icon.prefix}\n {children}\n {icon.suffix}\n </span>\n ) : (\n children\n )}\n </Component>\n )\n}\n\nexport const Text = memo(ActualText) as typeof ActualText\n"],"names":["tv","_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var components_Icon_FaIcon = require('../components/Icon/FaIcon.cjs');
5
+ require('../components/Icon/generateIcon.cjs');
6
+ require('../components/Icon/OpenInNewTabIcon.cjs');
7
+
8
+ const pictParser = (pict, formatter) => {
9
+ const lines = pict.split('\n');
10
+ const header = lines.shift().split('\t');
11
+ const reducer = (prev, c, i) => {
12
+ prev[header[i]] = valueConverter(i === 0 ? c.replace(/^(\s|\t)+/, '') : c);
13
+ return prev;
14
+ };
15
+ return lines.map((line) => formatter(line.split('\t').reduce(reducer, {})));
16
+ };
17
+ const NUM_REGEX = /^([0-9]+|[0-9]+\.[0-9]+)$/;
18
+ const valueConverter = (v) => {
19
+ switch (v) {
20
+ case 'undefined':
21
+ return undefined;
22
+ case 'null':
23
+ return null;
24
+ case 'true':
25
+ return true;
26
+ case 'false':
27
+ return false;
28
+ case '<Icon />':
29
+ return jsxRuntime.jsx(components_Icon_FaIcon.FaAddressBookIcon, {});
30
+ }
31
+ // HINT: 整数 or 少数含む数値の場合数値変換
32
+ if (NUM_REGEX.test(v)) {
33
+ return parseFloat(v);
34
+ }
35
+ return v;
36
+ };
37
+
38
+ exports.pictParser = pictParser;
39
+ //# sourceMappingURL=pictParser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pictParser.cjs","sources":["../../src/libs/pictParser.tsx"],"sourcesContent":["import { FaAddressBookIcon } from '../components/Icon'\n\ntype AnyObjectType = { [key: string]: any }\n\nexport const pictParser = <T extends AnyObjectType>(\n pict: string,\n formatter: (vs: { [key: string]: any }) => T,\n) => {\n const lines = pict.split('\\n')\n const header = lines.shift()!.split('\\t')\n const reducer = (prev: AnyObjectType, c: string, i: number) => {\n prev[header[i]] = valueConverter(i === 0 ? c.replace(/^(\\s|\\t)+/, '') : c)\n\n return prev\n }\n\n return lines.map((line) => formatter(line.split('\\t').reduce(reducer, {} as T)))\n}\n\nconst NUM_REGEX = /^([0-9]+|[0-9]+\\.[0-9]+)$/\nconst valueConverter = (v: string): any => {\n switch (v) {\n case 'undefined':\n return undefined\n case 'null':\n return null\n case 'true':\n return true\n case 'false':\n return false\n case '<Icon />':\n return <FaAddressBookIcon />\n }\n\n // HINT: 整数 or 少数含む数値の場合数値変換\n if (NUM_REGEX.test(v)) {\n return parseFloat(v)\n }\n\n return v\n}\n"],"names":["_jsx","FaAddressBookIcon"],"mappings":";;;;;;;MAIa,UAAU,GAAG,CACxB,IAAY,EACZ,SAA4C,KAC1C;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,CAAS,EAAE,CAAS,KAAI;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAE1E,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAO,CAAC,CAAC,CAAC;AAClF;AAEA,MAAM,SAAS,GAAG,2BAA2B;AAC7C,MAAM,cAAc,GAAG,CAAC,CAAS,KAAS;IACxC,QAAQ,CAAC;AACP,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,KAAK;AACd,QAAA,KAAK,UAAU;YACb,OAAOA,cAAA,CAACC,wCAAiB,EAAA,EAAA,CAAG;;;AAIhC,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,QAAA,OAAO,UAAU,CAAC,CAAC,CAAC;IACtB;AAEA,IAAA,OAAO,CAAC;AACV,CAAC;;;;"}
@@ -0,0 +1,7 @@
1
+ type AnyObjectType = {
2
+ [key: string]: any;
3
+ };
4
+ export declare const pictParser: <T extends AnyObjectType>(pict: string, formatter: (vs: {
5
+ [key: string]: any;
6
+ }) => T) => T[];
7
+ export {};
@@ -0,0 +1,37 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { FaAddressBookIcon } from '../components/Icon/FaIcon.js';
3
+ import '../components/Icon/generateIcon.js';
4
+ import '../components/Icon/OpenInNewTabIcon.js';
5
+
6
+ const pictParser = (pict, formatter) => {
7
+ const lines = pict.split('\n');
8
+ const header = lines.shift().split('\t');
9
+ const reducer = (prev, c, i) => {
10
+ prev[header[i]] = valueConverter(i === 0 ? c.replace(/^(\s|\t)+/, '') : c);
11
+ return prev;
12
+ };
13
+ return lines.map((line) => formatter(line.split('\t').reduce(reducer, {})));
14
+ };
15
+ const NUM_REGEX = /^([0-9]+|[0-9]+\.[0-9]+)$/;
16
+ const valueConverter = (v) => {
17
+ switch (v) {
18
+ case 'undefined':
19
+ return undefined;
20
+ case 'null':
21
+ return null;
22
+ case 'true':
23
+ return true;
24
+ case 'false':
25
+ return false;
26
+ case '<Icon />':
27
+ return jsx(FaAddressBookIcon, {});
28
+ }
29
+ // HINT: 整数 or 少数含む数値の場合数値変換
30
+ if (NUM_REGEX.test(v)) {
31
+ return parseFloat(v);
32
+ }
33
+ return v;
34
+ };
35
+
36
+ export { pictParser };
37
+ //# sourceMappingURL=pictParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pictParser.js","sources":["../../src/libs/pictParser.tsx"],"sourcesContent":["import { FaAddressBookIcon } from '../components/Icon'\n\ntype AnyObjectType = { [key: string]: any }\n\nexport const pictParser = <T extends AnyObjectType>(\n pict: string,\n formatter: (vs: { [key: string]: any }) => T,\n) => {\n const lines = pict.split('\\n')\n const header = lines.shift()!.split('\\t')\n const reducer = (prev: AnyObjectType, c: string, i: number) => {\n prev[header[i]] = valueConverter(i === 0 ? c.replace(/^(\\s|\\t)+/, '') : c)\n\n return prev\n }\n\n return lines.map((line) => formatter(line.split('\\t').reduce(reducer, {} as T)))\n}\n\nconst NUM_REGEX = /^([0-9]+|[0-9]+\\.[0-9]+)$/\nconst valueConverter = (v: string): any => {\n switch (v) {\n case 'undefined':\n return undefined\n case 'null':\n return null\n case 'true':\n return true\n case 'false':\n return false\n case '<Icon />':\n return <FaAddressBookIcon />\n }\n\n // HINT: 整数 or 少数含む数値の場合数値変換\n if (NUM_REGEX.test(v)) {\n return parseFloat(v)\n }\n\n return v\n}\n"],"names":["_jsx"],"mappings":";;;;;MAIa,UAAU,GAAG,CACxB,IAAY,EACZ,SAA4C,KAC1C;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,CAAS,EAAE,CAAS,KAAI;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAE1E,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAO,CAAC,CAAC,CAAC;AAClF;AAEA,MAAM,SAAS,GAAG,2BAA2B;AAC7C,MAAM,cAAc,GAAG,CAAC,CAAS,KAAS;IACxC,QAAQ,CAAC;AACP,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,KAAK;AACd,QAAA,KAAK,UAAU;YACb,OAAOA,GAAA,CAAC,iBAAiB,EAAA,EAAA,CAAG;;;AAIhC,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrB,QAAA,OAAO,UAAU,CAAC,CAAC,CAAC;IACtB;AAEA,IAAA,OAAO,CAAC;AACV,CAAC;;;;"}