@twreporter/react-typescript-components 0.1.0-beta.6 → 0.1.0-beta.7

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.
Files changed (57) hide show
  1. package/lib/button/components/text-button/index.js +59 -13
  2. package/lib/button/components/text-button/index.js.map +1 -1
  3. package/lib/button/components/text-button/index.mjs +2 -1
  4. package/lib/button/components/text-button/theme.d.mts +11 -0
  5. package/lib/button/components/text-button/theme.d.ts +11 -0
  6. package/lib/button/components/text-button/theme.js +65 -0
  7. package/lib/button/components/text-button/theme.js.map +1 -0
  8. package/lib/button/components/text-button/theme.mjs +5 -0
  9. package/lib/button/components/text-button/theme.mjs.map +1 -0
  10. package/lib/button/index.js +59 -13
  11. package/lib/button/index.js.map +1 -1
  12. package/lib/button/index.mjs +3 -2
  13. package/lib/button/stories/text-button.stories.js +59 -13
  14. package/lib/button/stories/text-button.stories.js.map +1 -1
  15. package/lib/button/stories/text-button.stories.mjs +2 -1
  16. package/lib/button/stories/text-button.stories.mjs.map +1 -1
  17. package/lib/{chunk-R4F4LGAY.mjs → chunk-7NJDHQ2X.mjs} +3 -3
  18. package/lib/{chunk-R4F4LGAY.mjs.map → chunk-7NJDHQ2X.mjs.map} +1 -1
  19. package/lib/chunk-ELECTE3D.mjs +8 -0
  20. package/lib/{chunk-7DK5MO62.mjs.map → chunk-ELECTE3D.mjs.map} +1 -1
  21. package/lib/{chunk-GRCEZABQ.mjs → chunk-FF422IYY.mjs} +3 -3
  22. package/lib/{chunk-GRCEZABQ.mjs.map → chunk-FF422IYY.mjs.map} +1 -1
  23. package/lib/chunk-FVKIUNIP.mjs +58 -0
  24. package/lib/chunk-FVKIUNIP.mjs.map +1 -0
  25. package/lib/{chunk-QE5LVT7A.mjs → chunk-U22UKMAJ.mjs} +9 -15
  26. package/lib/chunk-U22UKMAJ.mjs.map +1 -0
  27. package/lib/{chunk-CZVB2Y6O.mjs → chunk-ZALXWB2J.mjs} +3 -3
  28. package/lib/{chunk-CZVB2Y6O.mjs.map → chunk-ZALXWB2J.mjs.map} +1 -1
  29. package/lib/styles.css +27 -6
  30. package/lib/styles.css.map +1 -1
  31. package/lib/title-bar/components/title-tab/index.js +59 -13
  32. package/lib/title-bar/components/title-tab/index.js.map +1 -1
  33. package/lib/title-bar/components/title-tab/index.mjs +5 -4
  34. package/lib/title-bar/components/title-tab/tab-item.js +59 -13
  35. package/lib/title-bar/components/title-tab/tab-item.js.map +1 -1
  36. package/lib/title-bar/components/title-tab/tab-item.mjs +4 -3
  37. package/lib/title-bar/components/title1.js +1 -1
  38. package/lib/title-bar/components/title1.js.map +1 -1
  39. package/lib/title-bar/components/title1.mjs +1 -1
  40. package/lib/title-bar/index.js +60 -14
  41. package/lib/title-bar/index.js.map +1 -1
  42. package/lib/title-bar/index.mjs +9 -8
  43. package/lib/title-bar/index.mjs.map +1 -1
  44. package/lib/title-bar/stories/title-tab.stories.js +59 -13
  45. package/lib/title-bar/stories/title-tab.stories.js.map +1 -1
  46. package/lib/title-bar/stories/title-tab.stories.mjs +5 -4
  47. package/lib/title-bar/stories/title-tab.stories.mjs.map +1 -1
  48. package/lib/title-bar/stories/title1.stories.js +1 -1
  49. package/lib/title-bar/stories/title1.stories.js.map +1 -1
  50. package/lib/title-bar/stories/title1.stories.mjs +1 -1
  51. package/lib/title-bar/stories/title2.stories.js +59 -13
  52. package/lib/title-bar/stories/title2.stories.js.map +1 -1
  53. package/lib/title-bar/stories/title2.stories.mjs +3 -2
  54. package/lib/title-bar/stories/title2.stories.mjs.map +1 -1
  55. package/package.json +2 -2
  56. package/lib/chunk-7DK5MO62.mjs +0 -8
  57. package/lib/chunk-QE5LVT7A.mjs.map +0 -1
@@ -1,14 +1,15 @@
1
- import { title_tab_default } from '../chunk-R4F4LGAY.mjs';
2
- export { title_tab_default as TitleTab } from '../chunk-R4F4LGAY.mjs';
3
- import '../chunk-GRCEZABQ.mjs';
4
- import { title1_default } from '../chunk-CZVB2Y6O.mjs';
5
- export { title1_default as Title1 } from '../chunk-CZVB2Y6O.mjs';
1
+ import { title_tab_default } from '../chunk-7NJDHQ2X.mjs';
2
+ export { title_tab_default as TitleTab } from '../chunk-7NJDHQ2X.mjs';
3
+ import '../chunk-GQWO45DN.mjs';
4
+ import '../chunk-FF422IYY.mjs';
5
+ import { title1_default } from '../chunk-ZALXWB2J.mjs';
6
+ export { title1_default as Title1 } from '../chunk-ZALXWB2J.mjs';
6
7
  import { title2_default } from '../chunk-6DXA3EX7.mjs';
7
8
  export { title2_default as Title2 } from '../chunk-6DXA3EX7.mjs';
8
- import '../chunk-GQWO45DN.mjs';
9
9
  import '../chunk-JHLT5GDV.mjs';
10
- import '../chunk-7DK5MO62.mjs';
11
- import '../chunk-QE5LVT7A.mjs';
10
+ import '../chunk-ELECTE3D.mjs';
11
+ import '../chunk-U22UKMAJ.mjs';
12
+ import '../chunk-FVKIUNIP.mjs';
12
13
  import '../chunk-HQG6Q2EY.mjs';
13
14
  import '../chunk-UM7RNC2Y.mjs';
14
15
  import '../chunk-JB4TYHDE.mjs';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/title-bar/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAMA,IAAO,iBAAA,GAAQ;AAAA,EACb,MAAA,EAAA,cAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,QAAA,EAAA;AACF","file":"index.mjs","sourcesContent":["import Title2 from './components/title2'\nimport Title1 from './components/title1'\nimport TitleTab from './components/title-tab'\n\nexport { Title2, Title1, TitleTab }\n\nexport default {\n Title2,\n Title1,\n TitleTab,\n}\n"]}
1
+ {"version":3,"sources":["../../src/title-bar/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAMA,IAAO,iBAAA,GAAQ;AAAA,EACb,MAAA,EAAA,cAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,QAAA,EAAA;AACF","file":"index.mjs","sourcesContent":["import Title2 from './components/title2'\nimport Title1 from './components/title1'\nimport TitleTab from './components/title-tab'\n\nexport { Title2, Title1, TitleTab }\n\nexport default {\n Title2,\n Title1,\n TitleTab,\n}\n"]}
@@ -123,6 +123,59 @@ var THEME = {
123
123
  transparent: "transparent",
124
124
  index: "index"
125
125
  };
126
+
127
+ // src/button/components/text-button/theme.ts
128
+ var getDisabledContainerTheme = (theme) => {
129
+ return [
130
+ // default theme
131
+ "text-gray-400 hover:text-gray-400",
132
+ // photography & transparent theme
133
+ {
134
+ "text-gray-500 hover:text-gray-500": theme === THEME.photography || theme === THEME.transparent
135
+ }
136
+ ];
137
+ };
138
+ var getActiveContainerTheme = (theme, style) => {
139
+ return [
140
+ // default theme
141
+ {
142
+ "text-gray-800 hover:text-gray-800": style === 2 /* LIGHT */,
143
+ "text-brand-heavy hover:text-brand-heavy": style === 1 /* DARK */,
144
+ "text-brand-dark hover:text-brand-dark": style === 0 /* BRAND */
145
+ },
146
+ // photography theme
147
+ {
148
+ "text-gray-400 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
149
+ "text-supportive-pastel hover:text-supportive-pastel": theme === THEME.photography && style !== 2 /* LIGHT */
150
+ },
151
+ // transparent theme
152
+ {
153
+ "text-gray-black hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
154
+ "text-gray-200 hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
155
+ }
156
+ ];
157
+ };
158
+ var getContainerTheme = (theme, style) => {
159
+ return [
160
+ // default theme
161
+ {
162
+ "text-gray-600 hover:text-gray-800": style === 2 /* LIGHT */,
163
+ "text-gray-800 hover:text-brand-heavy": style === 1 /* DARK */,
164
+ "text-brand-heavy hover:text-brand-dark": style === 0 /* BRAND */
165
+ },
166
+ // photography
167
+ {
168
+ "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
169
+ "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */,
170
+ "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */
171
+ },
172
+ // transparent theme
173
+ {
174
+ "text-gray-800 hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
175
+ "text-gray-white hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
176
+ }
177
+ ];
178
+ };
126
179
  var TextButton = ({
127
180
  text,
128
181
  leftIconComponent,
@@ -136,9 +189,13 @@ var TextButton = ({
136
189
  className = ""
137
190
  }) => {
138
191
  const TextJSX = React.useMemo(
139
- () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text }),
192
+ () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text, weight: P2.Weight.bold }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text, weight: P1.Weight.bold }),
140
193
  [size, text]
141
194
  );
195
+ const themeClass = React.useMemo(() => {
196
+ const themeFunc = disabled ? getDisabledContainerTheme : active ? getActiveContainerTheme : getContainerTheme;
197
+ return themeFunc(theme, style);
198
+ }, [disabled, active, theme, style]);
142
199
  return /* @__PURE__ */ jsxRuntime.jsx(
143
200
  "div",
144
201
  {
@@ -148,18 +205,7 @@ var TextButton = ({
148
205
  "cursor-default": disabled,
149
206
  "cursor-pointer": !disabled
150
207
  },
151
- {
152
- "text-gray-500 hover:text-gray-500": disabled && (theme === THEME.photography || theme === THEME.transparent),
153
- "text-gray-400 hover:text-gray-400": disabled || theme === THEME.photography && style === 2 /* LIGHT */ && !active && !disabled,
154
- "text-gray-200 hover:text-supportive-pastel": theme === THEME.photography && !active && !disabled,
155
- "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */ && active && !disabled,
156
- "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */ && active && !disabled,
157
- "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */ && active && !disabled,
158
- "text-gray-100 hover:text-gray-200": theme === THEME.transparent && !active && !disabled,
159
- "text-gray-white hover:text-gray-white": theme === THEME.transparent && active && !disabled,
160
- "text-gray-600 hover:text-brand-heavy": theme === THEME.normal && !active && !disabled,
161
- "text-brand-heavy hover:text-brand-heavy": theme === THEME.normal && active && !disabled
162
- },
208
+ themeClass,
163
209
  className
164
210
  ),
165
211
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex justify-center items-center", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/title-bar/components/title-tab/hook.ts","../../../src/customized-link/external-link.tsx","../../../src/customized-link/internal-link.tsx","../../../src/text/enum/index.ts","../../../src/text/paragraph.tsx","../../../src/button/enum.ts","../../../src/button/constant.ts","../../../src/button/components/text-button/index.tsx","../../../src/title-bar/components/title-tab/tab-item.tsx","../../../src/text/heading.tsx","../../../src/title-bar/components/title-tab/index.tsx","../../../src/title-bar/stories/title-tab.stories.tsx"],"names":["useRef","useEffect","jsx","Link","clsx","Size","Style","useMemo","jsxs","baseClass","variantClass","React","useState","createElement"],"mappings":"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","file":"title-tab.stories.js","sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport const useScrollStatus = (setShowNext: (show: boolean) => void) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!ref.current) return\n\n if (ref.current.scrollWidth > ref.current.clientWidth) {\n // scrollbar occur\n setShowNext(true)\n }\n }, [setShowNext])\n\n useEffect(() => {\n if (!ref.current) return\n\n const refEle = ref.current\n const handleScroll: EventListener = () => {\n if (refEle.offsetWidth + refEle.scrollLeft >= refEle.scrollWidth) {\n // scroll to end\n setShowNext(false)\n } else {\n setShowNext(true)\n }\n }\n\n refEle.addEventListener('scroll', handleScroll)\n\n return () => {\n refEle.removeEventListener('scroll', handleScroll)\n }\n }, [setShowNext])\n\n return ref\n}\n","import type { FC } from 'react'\nimport type { CustomizedLinkProps } from './type'\n\ntype ExternalLinkProps = CustomizedLinkProps\nconst ExternalLink: FC<ExternalLinkProps> = ({\n to,\n target = '_self',\n className = '',\n children,\n}) => {\n return (\n <a href={to} target={target} className={className}>\n {children}\n </a>\n )\n}\n\nexport default ExternalLink\n","'use client'\n\nimport Link from 'next/link'\nimport type { FC } from 'react'\nimport type { CustomizedLinkProps } from './type'\n\ntype InternalLinkProps = CustomizedLinkProps\nconst InternalLink: FC<InternalLinkProps> = ({\n to,\n target = '_self',\n className = '',\n children,\n}) => {\n return (\n <Link href={to} target={target} className={className}>\n {children}\n </Link>\n )\n}\n\nexport default InternalLink\n","import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} /> : <P1 text={text} />),\n [size, text]\n )\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n {\n 'text-gray-500 hover:text-gray-500':\n disabled &&\n (theme === THEME.photography || theme === THEME.transparent),\n 'text-gray-400 hover:text-gray-400':\n disabled ||\n (theme === THEME.photography &&\n style === Style.LIGHT &&\n !active &&\n !disabled),\n 'text-gray-200 hover:text-supportive-pastel':\n theme === THEME.photography && !active && !disabled,\n 'text-gray-300 hover:text-gray-400':\n theme === THEME.photography &&\n style === Style.LIGHT &&\n active &&\n !disabled,\n 'text-gray-white hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.DARK &&\n active &&\n !disabled,\n 'text-supportive-faded hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.BRAND &&\n active &&\n !disabled,\n 'text-gray-100 hover:text-gray-200':\n theme === THEME.transparent && !active && !disabled,\n 'text-gray-white hover:text-gray-white':\n theme === THEME.transparent && active && !disabled,\n 'text-gray-600 hover:text-brand-heavy':\n theme === THEME.normal && !active && !disabled,\n 'text-brand-heavy hover:text-brand-heavy':\n theme === THEME.normal && active && !disabled,\n },\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import clsx from 'clsx'\nimport type { FC } from 'react'\n// type\nimport type { Tab } from './type'\n// component\nimport { ExternalLink, InternalLink } from '../../../customized-link'\nimport { TextButton } from '../../../button'\n\ntype TabItemProps = Tab & {\n onClick: () => void\n className?: string\n}\nconst TabItem: FC<TabItemProps> = ({\n text,\n link,\n isExternal = false,\n isActive = false,\n onClick,\n className = '',\n}) => {\n const CustomizedLink = isExternal ? ExternalLink : InternalLink\n return (\n <button\n className={clsx('flex shrink-0 mr-[24px] last:mr-0', className)}\n onClick={onClick}\n type=\"button\"\n >\n <CustomizedLink to={link}>\n <TextButton\n text={text}\n active={isActive}\n size={TextButton.Size.L}\n className=\"py-[16px]\"\n />\n </CustomizedLink>\n </button>\n )\n}\n\nexport default TabItem\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport { type FC, useState, useEffect } from 'react'\n// hook\nimport { useScrollStatus } from './hook'\n// components\nimport TabItem from './tab-item'\nimport { H1 } from '../../../text/heading'\n// type\nimport type { Tab } from './type'\n\ntype TitleTabProps = {\n title: string\n tabs: Tab[]\n activeTabIndex?: number\n}\nconst TitleTab: FC<TitleTabProps> = ({\n title,\n tabs = [],\n activeTabIndex = 0,\n}) => {\n const [activeIndex, setActiveIndex] = useState(activeTabIndex)\n const [showGradientMask, setShowGradientMask] = useState(false)\n\n const ref = useScrollStatus(setShowGradientMask)\n\n useEffect(() => {\n setActiveIndex(activeTabIndex)\n }, [activeTabIndex])\n\n return (\n <div className=\"flex flex-col w-full text-gray-800\">\n <H1 text={title} />\n {tabs.length > 0 ? (\n <div\n ref={ref}\n className={clsx(\n 'flex items-center',\n 'overflow-x-scroll scrollbar:!w-0',\n {\n '[mask-image:linear-gradient(to_left,rgba(241,241,241,0),#f1f1f1_48px)] [-webkit-mask-image:linear-gradient(to_left,rgba(241,241,241,0),#f1f1f1_48px)]':\n showGradientMask,\n }\n )}\n >\n {tabs.map((tab, index) => {\n const tabProps = { ...tab, isActive: index === activeIndex }\n const handleClick = () => {\n setActiveIndex(index)\n }\n return (\n <TabItem {...tabProps} key={`tab-${tab.text}-${index}`} onClick={handleClick} />\n )\n })}\n </div>\n ) : null}\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-300 mt-[0px]',\n 'desktop:mt-[0px]'\n )}\n />\n </div>\n )\n}\n\nexport default TitleTab\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport TitleTab from '../components/title-tab'\n\nconst meta = {\n title: 'Title Bar/Title Tab',\n component: TitleTab,\n} satisfies Meta<typeof TitleTab>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '主分類',\n tabs: [\n { text: '子分類1', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類2', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類3', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類4', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類5', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類6', isExternal: true, link: 'https://www.google.com' },\n ],\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
1
+ {"version":3,"sources":["../../../src/title-bar/components/title-tab/hook.ts","../../../src/customized-link/external-link.tsx","../../../src/customized-link/internal-link.tsx","../../../src/text/enum/index.ts","../../../src/text/paragraph.tsx","../../../src/button/enum.ts","../../../src/button/constant.ts","../../../src/button/components/text-button/theme.ts","../../../src/button/components/text-button/index.tsx","../../../src/title-bar/components/title-tab/tab-item.tsx","../../../src/text/heading.tsx","../../../src/title-bar/components/title-tab/index.tsx","../../../src/title-bar/stories/title-tab.stories.tsx"],"names":["useRef","useEffect","jsx","Link","clsx","Size","Style","useMemo","jsxs","baseClass","variantClass","React","useState","createElement"],"mappings":"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","file":"title-tab.stories.js","sourcesContent":["import { useRef, useEffect } from 'react'\n\nexport const useScrollStatus = (setShowNext: (show: boolean) => void) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!ref.current) return\n\n if (ref.current.scrollWidth > ref.current.clientWidth) {\n // scrollbar occur\n setShowNext(true)\n }\n }, [setShowNext])\n\n useEffect(() => {\n if (!ref.current) return\n\n const refEle = ref.current\n const handleScroll: EventListener = () => {\n if (refEle.offsetWidth + refEle.scrollLeft >= refEle.scrollWidth) {\n // scroll to end\n setShowNext(false)\n } else {\n setShowNext(true)\n }\n }\n\n refEle.addEventListener('scroll', handleScroll)\n\n return () => {\n refEle.removeEventListener('scroll', handleScroll)\n }\n }, [setShowNext])\n\n return ref\n}\n","import type { FC } from 'react'\nimport type { CustomizedLinkProps } from './type'\n\ntype ExternalLinkProps = CustomizedLinkProps\nconst ExternalLink: FC<ExternalLinkProps> = ({\n to,\n target = '_self',\n className = '',\n children,\n}) => {\n return (\n <a href={to} target={target} className={className}>\n {children}\n </a>\n )\n}\n\nexport default ExternalLink\n","'use client'\n\nimport Link from 'next/link'\nimport type { FC } from 'react'\nimport type { CustomizedLinkProps } from './type'\n\ntype InternalLinkProps = CustomizedLinkProps\nconst InternalLink: FC<InternalLinkProps> = ({\n to,\n target = '_self',\n className = '',\n children,\n}) => {\n return (\n <Link href={to} target={target} className={className}>\n {children}\n </Link>\n )\n}\n\nexport default InternalLink\n","import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","// constants\nimport { THEME } from '../../constant'\n// type\nimport type { Theme } from '../../constant'\nimport type { ClassArray } from 'clsx'\n// enum\nimport { Style } from '../../enum'\n\ntype ThemeFunc = (theme: Theme, style?: Style) => ClassArray\n\nexport const getDisabledContainerTheme: ThemeFunc = (theme) => {\n return [\n // default theme\n 'text-gray-400 hover:text-gray-400',\n // photography & transparent theme\n {\n 'text-gray-500 hover:text-gray-500': theme === THEME.photography || theme === THEME.transparent,\n }\n ]\n}\n\nexport const getActiveContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-800 hover:text-gray-800': style === Style.LIGHT,\n 'text-brand-heavy hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-dark hover:text-brand-dark': style === Style.BRAND,\n },\n // photography theme\n {\n 'text-gray-400 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-supportive-pastel hover:text-supportive-pastel': theme === THEME.photography && style !== Style.LIGHT,\n },\n // transparent theme\n {\n 'text-gray-black hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-200 hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}\n\nexport const getContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-600 hover:text-gray-800': style === Style.LIGHT,\n 'text-gray-800 hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-heavy hover:text-brand-dark': style === Style.BRAND,\n },\n // photography\n {\n 'text-gray-300 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-gray-white hover:text-supportive-pastel': theme === THEME.photography && style === Style.DARK,\n 'text-supportive-faded hover:text-supportive-pastel': theme === THEME.photography && style === Style.BRAND,\n },\n // transparent theme\n {\n 'text-gray-800 hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-white hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n// utils\nimport { getContainerTheme, getActiveContainerTheme, getDisabledContainerTheme } from './theme'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} weight={P2.Weight.bold} /> : <P1 text={text} weight={P1.Weight.bold} />),\n [size, text]\n )\n const themeClass = useMemo(() => {\n const themeFunc = disabled ? getDisabledContainerTheme : (active ? getActiveContainerTheme : getContainerTheme)\n return themeFunc(theme, style)\n }, [disabled, active, theme, style])\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n themeClass,\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import clsx from 'clsx'\nimport type { FC } from 'react'\n// type\nimport type { Tab } from './type'\n// component\nimport { ExternalLink, InternalLink } from '../../../customized-link'\nimport { TextButton } from '../../../button'\n\ntype TabItemProps = Tab & {\n onClick: () => void\n className?: string\n}\nconst TabItem: FC<TabItemProps> = ({\n text,\n link,\n isExternal = false,\n isActive = false,\n onClick,\n className = '',\n}) => {\n const CustomizedLink = isExternal ? ExternalLink : InternalLink\n return (\n <button\n className={clsx('flex shrink-0 mr-[24px] last:mr-0', className)}\n onClick={onClick}\n type=\"button\"\n >\n <CustomizedLink to={link}>\n <TextButton\n text={text}\n active={isActive}\n size={TextButton.Size.L}\n className=\"py-[16px]\"\n />\n </CustomizedLink>\n </button>\n )\n}\n\nexport default TabItem\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport { type FC, useState, useEffect } from 'react'\n// hook\nimport { useScrollStatus } from './hook'\n// components\nimport TabItem from './tab-item'\nimport { H1 } from '../../../text/heading'\n// type\nimport type { Tab } from './type'\n\ntype TitleTabProps = {\n title: string\n tabs: Tab[]\n activeTabIndex?: number\n}\nconst TitleTab: FC<TitleTabProps> = ({\n title,\n tabs = [],\n activeTabIndex = 0,\n}) => {\n const [activeIndex, setActiveIndex] = useState(activeTabIndex)\n const [showGradientMask, setShowGradientMask] = useState(false)\n\n const ref = useScrollStatus(setShowGradientMask)\n\n useEffect(() => {\n setActiveIndex(activeTabIndex)\n }, [activeTabIndex])\n\n return (\n <div className=\"flex flex-col w-full text-gray-800\">\n <H1 text={title} />\n {tabs.length > 0 ? (\n <div\n ref={ref}\n className={clsx(\n 'flex items-center',\n 'overflow-x-scroll scrollbar:!w-0',\n {\n '[mask-image:linear-gradient(to_left,rgba(241,241,241,0),#f1f1f1_48px)] [-webkit-mask-image:linear-gradient(to_left,rgba(241,241,241,0),#f1f1f1_48px)]':\n showGradientMask,\n }\n )}\n >\n {tabs.map((tab, index) => {\n const tabProps = { ...tab, isActive: index === activeIndex }\n const handleClick = () => {\n setActiveIndex(index)\n }\n return (\n <TabItem {...tabProps} key={`tab-${tab.text}-${index}`} onClick={handleClick} />\n )\n })}\n </div>\n ) : null}\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-300 mt-[0px]',\n 'desktop:mt-[0px]'\n )}\n />\n </div>\n )\n}\n\nexport default TitleTab\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport TitleTab from '../components/title-tab'\n\nconst meta = {\n title: 'Title Bar/Title Tab',\n component: TitleTab,\n} satisfies Meta<typeof TitleTab>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '主分類',\n tabs: [\n { text: '子分類1', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類2', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類3', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類4', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類5', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類6', isExternal: true, link: 'https://www.google.com' },\n ],\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
@@ -1,9 +1,10 @@
1
- import { title_tab_default } from '../../chunk-R4F4LGAY.mjs';
2
- import '../../chunk-GRCEZABQ.mjs';
1
+ import { title_tab_default } from '../../chunk-7NJDHQ2X.mjs';
3
2
  import '../../chunk-GQWO45DN.mjs';
3
+ import '../../chunk-FF422IYY.mjs';
4
4
  import '../../chunk-JHLT5GDV.mjs';
5
- import '../../chunk-7DK5MO62.mjs';
6
- import '../../chunk-QE5LVT7A.mjs';
5
+ import '../../chunk-ELECTE3D.mjs';
6
+ import '../../chunk-U22UKMAJ.mjs';
7
+ import '../../chunk-FVKIUNIP.mjs';
7
8
  import '../../chunk-HQG6Q2EY.mjs';
8
9
  import '../../chunk-UM7RNC2Y.mjs';
9
10
  import '../../chunk-JB4TYHDE.mjs';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/title-bar/stories/title-tab.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,IAAM,IAAA,GAAO;AAAA,EACX,KAAA,EAAO,qBAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAO,yBAAA,GAAQ;AAGR,IAAM,KAAA,GAAe;AAAA,EAC1B,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,oBAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA;AAAyB;AACnE,GACF;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAW,GAAE;AACnD","file":"title-tab.stories.mjs","sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport TitleTab from '../components/title-tab'\n\nconst meta = {\n title: 'Title Bar/Title Tab',\n component: TitleTab,\n} satisfies Meta<typeof TitleTab>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '主分類',\n tabs: [\n { text: '子分類1', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類2', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類3', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類4', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類5', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類6', isExternal: true, link: 'https://www.google.com' },\n ],\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
1
+ {"version":3,"sources":["../../../src/title-bar/stories/title-tab.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,IAAM,IAAA,GAAO;AAAA,EACX,KAAA,EAAO,qBAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAO,yBAAA,GAAQ;AAGR,IAAM,KAAA,GAAe;AAAA,EAC1B,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,oBAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA,EAAyB;AAAA,MACjE,EAAE,IAAA,EAAM,qBAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,wBAAA;AAAyB;AACnE,GACF;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAW,GAAE;AACnD","file":"title-tab.stories.mjs","sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport TitleTab from '../components/title-tab'\n\nconst meta = {\n title: 'Title Bar/Title Tab',\n component: TitleTab,\n} satisfies Meta<typeof TitleTab>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '主分類',\n tabs: [\n { text: '子分類1', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類2', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類3', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類4', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類5', isExternal: true, link: 'https://www.google.com' },\n { text: '子分類6', isExternal: true, link: 'https://www.google.com' },\n ],\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
@@ -111,7 +111,7 @@ var Title1 = ({ title, subtitle = "", className = "" }) => {
111
111
  "div",
112
112
  {
113
113
  className: clsx3__default.default(
114
- "w-full h-[1px] bg-gray-800 mt-[8px]",
114
+ "w-full h-[1px] bg-gray-300 mt-[8px]",
115
115
  "desktop:mt-[16px]"
116
116
  )
117
117
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/text/enum/index.ts","../../../src/text/heading.tsx","../../../src/text/paragraph.tsx","../../../src/title-bar/components/title1.tsx","../../../src/title-bar/stories/title1.stories.ts"],"names":["React","clsx","baseClass","variantClass","jsx","jsxs"],"mappings":"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","file":"title1.stories.js","sourcesContent":["import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","import clsx from 'clsx'\nimport type { FC } from 'react'\n// components\nimport { H2 } from '../../text/heading'\nimport { P1 } from '../../text/paragraph'\n\ntype Title1Props = {\n title: string\n subtitle?: string\n className?: string\n}\n\nconst Title1: FC<Title1Props> = ({ title, subtitle = '', className = '' }) => {\n return (\n <div className={clsx('flex justify-between flex-col', className)}>\n <div className={clsx('flex items-baseline gap-[16px]')}>\n <H2 className=\"text-gray-800\" text={title} />\n {subtitle ? <P1 className=\"text-gray-600\" text={subtitle} /> : null}\n </div>\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-800 mt-[8px]',\n 'desktop:mt-[16px]'\n )}\n />\n </div>\n )\n}\n\nexport default Title1\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title1 from '../components/title1'\n\nconst meta = {\n title: 'Title Bar/Title1',\n component: Title1,\n} satisfies Meta<typeof Title1>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const TagBar: Story = {\n args: {\n title: '#報導者',\n },\n parameters: { controls: { exclude: ['subtitle', 'className'] } },\n}\n\nexport const BookmarkBar: Story = {\n args: {\n title: '我的書籤',\n subtitle: '全部 55',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
1
+ {"version":3,"sources":["../../../src/text/enum/index.ts","../../../src/text/heading.tsx","../../../src/text/paragraph.tsx","../../../src/title-bar/components/title1.tsx","../../../src/title-bar/stories/title1.stories.ts"],"names":["React","clsx","baseClass","variantClass","jsx","jsxs"],"mappings":"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","file":"title1.stories.js","sourcesContent":["import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","import clsx from 'clsx'\nimport type { FC } from 'react'\n// components\nimport { H2 } from '../../text/heading'\nimport { P1 } from '../../text/paragraph'\n\ntype Title1Props = {\n title: string\n subtitle?: string\n className?: string\n}\n\nconst Title1: FC<Title1Props> = ({ title, subtitle = '', className = '' }) => {\n return (\n <div className={clsx('flex justify-between flex-col', className)}>\n <div className={clsx('flex items-baseline gap-[16px]')}>\n <H2 className=\"text-gray-800\" text={title} />\n {subtitle ? <P1 className=\"text-gray-600\" text={subtitle} /> : null}\n </div>\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-300 mt-[8px]',\n 'desktop:mt-[16px]'\n )}\n />\n </div>\n )\n}\n\nexport default Title1\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title1 from '../components/title1'\n\nconst meta = {\n title: 'Title Bar/Title1',\n component: Title1,\n} satisfies Meta<typeof Title1>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: '標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const TagBar: Story = {\n args: {\n title: '#報導者',\n },\n parameters: { controls: { exclude: ['subtitle', 'className'] } },\n}\n\nexport const BookmarkBar: Story = {\n args: {\n title: '我的書籤',\n subtitle: '全部 55',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { title1_default } from '../../chunk-CZVB2Y6O.mjs';
1
+ import { title1_default } from '../../chunk-ZALXWB2J.mjs';
2
2
  import '../../chunk-JHLT5GDV.mjs';
3
3
  import '../../chunk-HQG6Q2EY.mjs';
4
4
  import '../../chunk-UM7RNC2Y.mjs';
@@ -148,6 +148,59 @@ var THEME = {
148
148
  transparent: "transparent",
149
149
  index: "index"
150
150
  };
151
+
152
+ // src/button/components/text-button/theme.ts
153
+ var getDisabledContainerTheme = (theme) => {
154
+ return [
155
+ // default theme
156
+ "text-gray-400 hover:text-gray-400",
157
+ // photography & transparent theme
158
+ {
159
+ "text-gray-500 hover:text-gray-500": theme === THEME.photography || theme === THEME.transparent
160
+ }
161
+ ];
162
+ };
163
+ var getActiveContainerTheme = (theme, style) => {
164
+ return [
165
+ // default theme
166
+ {
167
+ "text-gray-800 hover:text-gray-800": style === 2 /* LIGHT */,
168
+ "text-brand-heavy hover:text-brand-heavy": style === 1 /* DARK */,
169
+ "text-brand-dark hover:text-brand-dark": style === 0 /* BRAND */
170
+ },
171
+ // photography theme
172
+ {
173
+ "text-gray-400 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
174
+ "text-supportive-pastel hover:text-supportive-pastel": theme === THEME.photography && style !== 2 /* LIGHT */
175
+ },
176
+ // transparent theme
177
+ {
178
+ "text-gray-black hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
179
+ "text-gray-200 hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
180
+ }
181
+ ];
182
+ };
183
+ var getContainerTheme = (theme, style) => {
184
+ return [
185
+ // default theme
186
+ {
187
+ "text-gray-600 hover:text-gray-800": style === 2 /* LIGHT */,
188
+ "text-gray-800 hover:text-brand-heavy": style === 1 /* DARK */,
189
+ "text-brand-heavy hover:text-brand-dark": style === 0 /* BRAND */
190
+ },
191
+ // photography
192
+ {
193
+ "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */,
194
+ "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */,
195
+ "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */
196
+ },
197
+ // transparent theme
198
+ {
199
+ "text-gray-800 hover:text-gray-black": theme === THEME.transparent && style === 2 /* LIGHT */,
200
+ "text-gray-white hover:text-gray-200": theme === THEME.transparent && style !== 2 /* LIGHT */
201
+ }
202
+ ];
203
+ };
151
204
  var TextButton = ({
152
205
  text,
153
206
  leftIconComponent,
@@ -161,9 +214,13 @@ var TextButton = ({
161
214
  className = ""
162
215
  }) => {
163
216
  const TextJSX = React.useMemo(
164
- () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text }),
217
+ () => size === 0 /* S */ ? /* @__PURE__ */ jsxRuntime.jsx(P2, { text, weight: P2.Weight.bold }) : /* @__PURE__ */ jsxRuntime.jsx(P1, { text, weight: P1.Weight.bold }),
165
218
  [size, text]
166
219
  );
220
+ const themeClass = React.useMemo(() => {
221
+ const themeFunc = disabled ? getDisabledContainerTheme : active ? getActiveContainerTheme : getContainerTheme;
222
+ return themeFunc(theme, style);
223
+ }, [disabled, active, theme, style]);
167
224
  return /* @__PURE__ */ jsxRuntime.jsx(
168
225
  "div",
169
226
  {
@@ -173,18 +230,7 @@ var TextButton = ({
173
230
  "cursor-default": disabled,
174
231
  "cursor-pointer": !disabled
175
232
  },
176
- {
177
- "text-gray-500 hover:text-gray-500": disabled && (theme === THEME.photography || theme === THEME.transparent),
178
- "text-gray-400 hover:text-gray-400": disabled || theme === THEME.photography && style === 2 /* LIGHT */ && !active && !disabled,
179
- "text-gray-200 hover:text-supportive-pastel": theme === THEME.photography && !active && !disabled,
180
- "text-gray-300 hover:text-gray-400": theme === THEME.photography && style === 2 /* LIGHT */ && active && !disabled,
181
- "text-gray-white hover:text-supportive-pastel": theme === THEME.photography && style === 1 /* DARK */ && active && !disabled,
182
- "text-supportive-faded hover:text-supportive-pastel": theme === THEME.photography && style === 0 /* BRAND */ && active && !disabled,
183
- "text-gray-100 hover:text-gray-200": theme === THEME.transparent && !active && !disabled,
184
- "text-gray-white hover:text-gray-white": theme === THEME.transparent && active && !disabled,
185
- "text-gray-600 hover:text-brand-heavy": theme === THEME.normal && !active && !disabled,
186
- "text-brand-heavy hover:text-brand-heavy": theme === THEME.normal && active && !disabled
187
- },
233
+ themeClass,
188
234
  className
189
235
  ),
190
236
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex justify-center items-center", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/text/enum/index.ts","../../../src/text/heading.tsx","../../../src/text/paragraph.tsx","../../../src/title-bar/components/title2.tsx","../../../src/button/enum.ts","../../../src/button/constant.ts","../../../src/button/components/text-button/index.tsx","../../../src/title-bar/stories/title2.stories.tsx"],"names":["React","clsx","baseClass","variantClass","jsx","jsxs","Size","Style","useMemo"],"mappings":"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","file":"title2.stories.js","sourcesContent":["import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","import clsx from 'clsx'\nimport type React from 'react'\n// components\nimport { H5 } from '../../text/heading'\nimport { P2 } from '../../text/paragraph'\n\ntype Title2Props = {\n title: string\n subtitle?: string\n renderButton?: React.ReactNode\n className?: string\n}\n\nconst Title2: React.FC<Title2Props> = ({\n title,\n subtitle = '',\n renderButton = null,\n className = '',\n}) => {\n return (\n <div className={clsx('flex justify-between flex-col', className)}>\n <div className=\"flex flex-row justify-between\">\n <div className={clsx('flex items-baseline gap-[16px]')}>\n <H5 className=\"text-gray-800\" text={title} />\n {subtitle ? <P2 className=\"text-gray-600\" text={subtitle} /> : null}\n </div>\n {renderButton || null}\n </div>\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-800 mt-[8px]',\n 'desktop:mt-[16px]'\n )}\n />\n </div>\n )\n}\n\nexport default Title2\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} /> : <P1 text={text} />),\n [size, text]\n )\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n {\n 'text-gray-500 hover:text-gray-500':\n disabled &&\n (theme === THEME.photography || theme === THEME.transparent),\n 'text-gray-400 hover:text-gray-400':\n disabled ||\n (theme === THEME.photography &&\n style === Style.LIGHT &&\n !active &&\n !disabled),\n 'text-gray-200 hover:text-supportive-pastel':\n theme === THEME.photography && !active && !disabled,\n 'text-gray-300 hover:text-gray-400':\n theme === THEME.photography &&\n style === Style.LIGHT &&\n active &&\n !disabled,\n 'text-gray-white hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.DARK &&\n active &&\n !disabled,\n 'text-supportive-faded hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.BRAND &&\n active &&\n !disabled,\n 'text-gray-100 hover:text-gray-200':\n theme === THEME.transparent && !active && !disabled,\n 'text-gray-white hover:text-gray-white':\n theme === THEME.transparent && active && !disabled,\n 'text-gray-600 hover:text-brand-heavy':\n theme === THEME.normal && !active && !disabled,\n 'text-brand-heavy hover:text-brand-heavy':\n theme === THEME.normal && active && !disabled,\n },\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title2 from '../components/title2'\nimport { TextButton } from '../../button'\n\nconst meta = {\n title: 'Title Bar/Title2',\n component: Title2,\n} satisfies Meta<typeof Title2>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const WithButton: Story = {\n render: (args) => {\n const buttonJSX = <TextButton text=\"NOT RWD 按鈕\" />\n return <Title2 {...args} renderButton={buttonJSX} />\n },\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className', 'renderButton'] } },\n}\n"]}
1
+ {"version":3,"sources":["../../../src/text/enum/index.ts","../../../src/text/heading.tsx","../../../src/text/paragraph.tsx","../../../src/title-bar/components/title2.tsx","../../../src/button/enum.ts","../../../src/button/constant.ts","../../../src/button/components/text-button/theme.ts","../../../src/button/components/text-button/index.tsx","../../../src/title-bar/stories/title2.stories.tsx"],"names":["React","clsx","baseClass","variantClass","jsx","jsxs","Size","Style","useMemo"],"mappings":"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","file":"title2.stories.js","sourcesContent":["import type { ValuesOf } from '../../types'\n\nexport const TYPE = {\n default: 'default',\n article: 'article',\n} as const\n\nexport type Type = ValuesOf<typeof TYPE>\n\nexport const WEIGHT = {\n extraLight: 'extra-light',\n normal: 'normal',\n bold: 'bold',\n} as const\n\nexport type Weight = ValuesOf<typeof WEIGHT>\n","import clsx from 'clsx'\nimport React from 'react'\nimport { TYPE, type Type } from './enum'\n\ntype HeadingProps = React.HTMLAttributes<HTMLHeadingElement> & {\n text?: string\n type?: Type\n className?: string\n}\n\nconst baseClass = 'font-bold'\n\nconst variantClass = {\n H1: 'text-[28px] leading-[125%] tablet:text-[36px]',\n H2: 'text-[24px] leading-[125%] tablet:text-[32px]',\n H3: 'text-[22px] leading-[150%] tablet:text-[28px]',\n H4: 'text-[18px] leading-[150%] tablet:text-[22px]',\n H5: 'text-[17px] leading-[150%] tablet:text-[18px]',\n H6: 'text-[16px] leading-[150%] tablet:text-[16px]',\n}\n\nconst HeadingVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<HeadingProps> & { Type: typeof TYPE } = ({\n text = '',\n type = TYPE.default,\n className = '',\n ...props\n }) => {\n const htmlTag = variant.toLowerCase() // 產生 'h1', 'h2', ...\n const fontFamily = type === TYPE.article ? 'font-title' : 'font-default'\n return React.createElement(\n htmlTag,\n {\n className: clsx(\n fontFamily,\n baseClass,\n variantClass[variant],\n className\n ),\n ...props,\n },\n text\n )\n }\n Component.displayName = variant\n Component.Type = TYPE\n return Component\n}\n\nconst H1 = HeadingVariant('H1')\nconst H2 = HeadingVariant('H2')\nconst H3 = HeadingVariant('H3')\nconst H4 = HeadingVariant('H4')\nconst H5 = HeadingVariant('H5')\nconst H6 = HeadingVariant('H6')\n\nexport { H1, H2, H3, H4, H5, H6 }\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { WEIGHT, type Weight } from './enum'\n\ntype ParagraphProps = React.HTMLAttributes<HTMLParagraphElement> & {\n text?: string\n weight?: Weight\n className?: string\n}\n\nconst baseClass = 'font-default leading-[150%] flex items-center m-0'\n\nconst variantClass = {\n P1: 'text-[16px]',\n P2: 'text-[14px]',\n P3: 'text-[12px]',\n P4: 'text-[10px]',\n}\n\nconst ParagraphVariant = (variant: keyof typeof variantClass) => {\n const Component: React.FC<ParagraphProps> & { Weight: typeof WEIGHT } = ({\n text = '',\n weight = WEIGHT.normal,\n className = '',\n ...props\n }) => (\n <p\n className={clsx(\n baseClass,\n variantClass[variant],\n `font-${weight}`,\n className\n )}\n {...props}\n >\n {text}\n </p>\n )\n Component.displayName = variant\n Component.Weight = WEIGHT\n return Component\n}\n\nconst P1 = ParagraphVariant('P1')\nconst P2 = ParagraphVariant('P2')\nconst P3 = ParagraphVariant('P3')\nconst P4 = ParagraphVariant('P4')\n\nexport { P1, P2, P3, P4 }\n","import clsx from 'clsx'\nimport type React from 'react'\n// components\nimport { H5 } from '../../text/heading'\nimport { P2 } from '../../text/paragraph'\n\ntype Title2Props = {\n title: string\n subtitle?: string\n renderButton?: React.ReactNode\n className?: string\n}\n\nconst Title2: React.FC<Title2Props> = ({\n title,\n subtitle = '',\n renderButton = null,\n className = '',\n}) => {\n return (\n <div className={clsx('flex justify-between flex-col', className)}>\n <div className=\"flex flex-row justify-between\">\n <div className={clsx('flex items-baseline gap-[16px]')}>\n <H5 className=\"text-gray-800\" text={title} />\n {subtitle ? <P2 className=\"text-gray-600\" text={subtitle} /> : null}\n </div>\n {renderButton || null}\n </div>\n <div\n className={clsx(\n 'w-full h-[1px] bg-gray-800 mt-[8px]',\n 'desktop:mt-[16px]'\n )}\n />\n </div>\n )\n}\n\nexport default Title2\n","export enum Size {\n S,\n L,\n}\n\nexport enum Style {\n BRAND,\n DARK,\n LIGHT,\n}\n","import type { ValuesOf } from '../types'\n\nexport const THEME = {\n normal: 'normal',\n photography: 'photography',\n transparent: 'transparent',\n index: 'index',\n} as const\n\nexport type Theme = ValuesOf<typeof THEME>\n","// constants\nimport { THEME } from '../../constant'\n// type\nimport type { Theme } from '../../constant'\nimport type { ClassArray } from 'clsx'\n// enum\nimport { Style } from '../../enum'\n\ntype ThemeFunc = (theme: Theme, style?: Style) => ClassArray\n\nexport const getDisabledContainerTheme: ThemeFunc = (theme) => {\n return [\n // default theme\n 'text-gray-400 hover:text-gray-400',\n // photography & transparent theme\n {\n 'text-gray-500 hover:text-gray-500': theme === THEME.photography || theme === THEME.transparent,\n }\n ]\n}\n\nexport const getActiveContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-800 hover:text-gray-800': style === Style.LIGHT,\n 'text-brand-heavy hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-dark hover:text-brand-dark': style === Style.BRAND,\n },\n // photography theme\n {\n 'text-gray-400 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-supportive-pastel hover:text-supportive-pastel': theme === THEME.photography && style !== Style.LIGHT,\n },\n // transparent theme\n {\n 'text-gray-black hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-200 hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}\n\nexport const getContainerTheme: ThemeFunc = (theme, style) => {\n return [\n // default theme\n {\n 'text-gray-600 hover:text-gray-800': style === Style.LIGHT,\n 'text-gray-800 hover:text-brand-heavy': style === Style.DARK,\n 'text-brand-heavy hover:text-brand-dark': style === Style.BRAND,\n },\n // photography\n {\n 'text-gray-300 hover:text-gray-400': theme === THEME.photography && style === Style.LIGHT,\n 'text-gray-white hover:text-supportive-pastel': theme === THEME.photography && style === Style.DARK,\n 'text-supportive-faded hover:text-supportive-pastel': theme === THEME.photography && style === Style.BRAND,\n },\n // transparent theme\n {\n 'text-gray-800 hover:text-gray-black': theme === THEME.transparent && style === Style.LIGHT,\n 'text-gray-white hover:text-gray-200': theme === THEME.transparent && style !== Style.LIGHT,\n },\n ]\n}","import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n// utils\nimport { getContainerTheme, getActiveContainerTheme, getDisabledContainerTheme } from './theme'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} weight={P2.Weight.bold} /> : <P1 text={text} weight={P1.Weight.bold} />),\n [size, text]\n )\n const themeClass = useMemo(() => {\n const themeFunc = disabled ? getDisabledContainerTheme : (active ? getActiveContainerTheme : getContainerTheme)\n return themeFunc(theme, style)\n }, [disabled, active, theme, style])\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n themeClass,\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n","import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title2 from '../components/title2'\nimport { TextButton } from '../../button'\n\nconst meta = {\n title: 'Title Bar/Title2',\n component: Title2,\n} satisfies Meta<typeof Title2>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const WithButton: Story = {\n render: (args) => {\n const buttonJSX = <TextButton text=\"NOT RWD 按鈕\" />\n return <Title2 {...args} renderButton={buttonJSX} />\n },\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className', 'renderButton'] } },\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { title2_default } from '../../chunk-6DXA3EX7.mjs';
2
2
  import '../../chunk-JHLT5GDV.mjs';
3
- import '../../chunk-7DK5MO62.mjs';
4
- import { text_button_default } from '../../chunk-QE5LVT7A.mjs';
3
+ import '../../chunk-ELECTE3D.mjs';
4
+ import { text_button_default } from '../../chunk-U22UKMAJ.mjs';
5
+ import '../../chunk-FVKIUNIP.mjs';
5
6
  import '../../chunk-HQG6Q2EY.mjs';
6
7
  import '../../chunk-UM7RNC2Y.mjs';
7
8
  import '../../chunk-JB4TYHDE.mjs';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/title-bar/stories/title2.stories.tsx"],"names":[],"mappings":";;;;;;;;;;AAKA,IAAM,IAAA,GAAO;AAAA,EACX,KAAA,EAAO,kBAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAO,sBAAA,GAAQ;AAGR,IAAM,KAAA,GAAe;AAAA,EAC1B,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAW,GAAE;AACnD;AAEO,IAAM,UAAA,GAAoB;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChB,IAAA,MAAM,SAAA,mBAAY,GAAA,CAAC,mBAAA,EAAA,EAAW,IAAA,EAAK,sBAAA,EAAa,CAAA;AAChD,IAAA,uBAAO,GAAA,CAAC,cAAA,EAAA,EAAQ,GAAG,IAAA,EAAM,cAAc,SAAA,EAAW,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAA,EAAa,cAAc,CAAA,EAAE;AACnE","file":"title2.stories.mjs","sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title2 from '../components/title2'\nimport { TextButton } from '../../button'\n\nconst meta = {\n title: 'Title Bar/Title2',\n component: Title2,\n} satisfies Meta<typeof Title2>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const WithButton: Story = {\n render: (args) => {\n const buttonJSX = <TextButton text=\"NOT RWD 按鈕\" />\n return <Title2 {...args} renderButton={buttonJSX} />\n },\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className', 'renderButton'] } },\n}\n"]}
1
+ {"version":3,"sources":["../../../src/title-bar/stories/title2.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;AAKA,IAAM,IAAA,GAAO;AAAA,EACX,KAAA,EAAO,kBAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAO,sBAAA,GAAQ;AAGR,IAAM,KAAA,GAAe;AAAA,EAC1B,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAW,GAAE;AACnD;AAEO,IAAM,UAAA,GAAoB;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChB,IAAA,MAAM,SAAA,mBAAY,GAAA,CAAC,mBAAA,EAAA,EAAW,IAAA,EAAK,sBAAA,EAAa,CAAA;AAChD,IAAA,uBAAO,GAAA,CAAC,cAAA,EAAA,EAAQ,GAAG,IAAA,EAAM,cAAc,SAAA,EAAW,CAAA;AAAA,EACpD,CAAA;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,SAAS,CAAC,WAAA,EAAa,cAAc,CAAA,EAAE;AACnE","file":"title2.stories.mjs","sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite'\n// components\nimport Title2 from '../components/title2'\nimport { TextButton } from '../../button'\n\nconst meta = {\n title: 'Title Bar/Title2',\n component: Title2,\n} satisfies Meta<typeof Title2>\n\nexport default meta\ntype Story = StoryObj<typeof meta>\n\nexport const Basic: Story = {\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className'] } },\n}\n\nexport const WithButton: Story = {\n render: (args) => {\n const buttonJSX = <TextButton text=\"NOT RWD 按鈕\" />\n return <Title2 {...args} renderButton={buttonJSX} />\n },\n args: {\n title: 'RWD 標題',\n subtitle: '副標',\n },\n parameters: { controls: { exclude: ['className', 'renderButton'] } },\n}\n"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "React components using TypeScript and Tailwind CSS",
4
4
  "author": "twreporter <developer@twreporter.org>",
5
5
  "license": "MIT",
6
- "version": "0.1.0-beta.6",
6
+ "version": "0.1.0-beta.7",
7
7
  "type": "commonjs",
8
8
  "scripts": {
9
9
  "clean": "rm -rf lib",
@@ -44,5 +44,5 @@
44
44
  "url": "git+https://github.com/twreporter/www-public-monorepo.git",
45
45
  "directory": "packages/react-typescript-components"
46
46
  },
47
- "gitHead": "e6324b04c86a7c94d16137e9198358f0c26e2888"
47
+ "gitHead": "80c85301804c9dae5cdb00017c32c8f895e672da"
48
48
  }
@@ -1,8 +0,0 @@
1
- import { text_button_default } from './chunk-QE5LVT7A.mjs';
2
-
3
- // src/button/index.ts
4
- var button_default = { TextButton: text_button_default };
5
-
6
- export { button_default };
7
- //# sourceMappingURL=chunk-7DK5MO62.mjs.map
8
- //# sourceMappingURL=chunk-7DK5MO62.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/button/components/text-button/index.tsx"],"names":[],"mappings":"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","file":"chunk-QE5LVT7A.mjs","sourcesContent":["import { type FC, type ReactElement, useMemo } from 'react'\nimport clsx from 'clsx'\n// components\nimport { P1, P2 } from '../../../text/paragraph'\n// enums\nimport { Size, Style } from '../../enum'\n// type\nimport type { Theme } from '../../constant'\n// constants\nimport { THEME } from '../../constant'\n\ntype TextButtonProps = {\n text: string\n leftIconComponent?: ReactElement\n rightIconComponent?: ReactElement\n size?: Size\n style?: Style\n theme?: Theme\n active?: boolean\n disabled?: boolean\n loading?: boolean\n className?: string\n}\nconst TextButton: FC<TextButtonProps> & {\n Size: typeof Size\n Style: typeof Style\n THEME: typeof THEME\n} = ({\n text,\n leftIconComponent,\n rightIconComponent,\n size = Size.S,\n theme = THEME.normal,\n style = Style.DARK,\n active = false,\n disabled = false,\n loading = false,\n className = '',\n}) => {\n const TextJSX = useMemo(\n () => (size === Size.S ? <P2 text={text} /> : <P1 text={text} />),\n [size, text]\n )\n\n return (\n <div\n className={clsx(\n 'flex items-center',\n {\n 'cursor-default': disabled,\n 'cursor-pointer': !disabled,\n },\n {\n 'text-gray-500 hover:text-gray-500':\n disabled &&\n (theme === THEME.photography || theme === THEME.transparent),\n 'text-gray-400 hover:text-gray-400':\n disabled ||\n (theme === THEME.photography &&\n style === Style.LIGHT &&\n !active &&\n !disabled),\n 'text-gray-200 hover:text-supportive-pastel':\n theme === THEME.photography && !active && !disabled,\n 'text-gray-300 hover:text-gray-400':\n theme === THEME.photography &&\n style === Style.LIGHT &&\n active &&\n !disabled,\n 'text-gray-white hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.DARK &&\n active &&\n !disabled,\n 'text-supportive-faded hover:text-supportive-pastel':\n theme === THEME.photography &&\n style === Style.BRAND &&\n active &&\n !disabled,\n 'text-gray-100 hover:text-gray-200':\n theme === THEME.transparent && !active && !disabled,\n 'text-gray-white hover:text-gray-white':\n theme === THEME.transparent && active && !disabled,\n 'text-gray-600 hover:text-brand-heavy':\n theme === THEME.normal && !active && !disabled,\n 'text-brand-heavy hover:text-brand-heavy':\n theme === THEME.normal && active && !disabled,\n },\n className\n )}\n >\n <div className=\"relative flex justify-center items-center\">\n <div\n className={clsx('flex justify-center items-center', {\n 'opacity-0': loading,\n 'opacity-100': !loading,\n })}\n >\n <div className=\"flex items-center mr-[4px]\">{leftIconComponent}</div>\n {TextJSX}\n <div className=\"flex items-center ml-[4px]\">{rightIconComponent}</div>\n </div>\n <span\n className={clsx(\n 'inline-block absolute box-border animation-spin',\n 'border-2 border-solid border-gray-400 border-t-gray-600 rounded-[50%]',\n {\n 'size-[18px]': size === Size.S,\n 'size-[24px]': size === Size.L,\n },\n {\n 'opacity-0': !loading,\n 'opacity-100': loading,\n }\n )}\n />\n </div>\n </div>\n )\n}\nTextButton.Size = Size\nTextButton.Style = Style\nTextButton.THEME = THEME\n\nexport default TextButton\n"]}