From 12c2e197896a30c36b45b83235a19b77cf107332 Mon Sep 17 00:00:00 2001 From: y09n Date: Wed, 13 Nov 2024 22:19:23 +0900 Subject: [PATCH 01/17] feat: add CODEOWNERS (#18) --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..4b453f8 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @kimdaeyeobbb @hy57in @developerjhp @bae-sh @noahluftyang @froggy1014 @heeji289 @synuns From 14584d5cec1846ac2005fe859ae239375fc1413c Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 17 Nov 2024 21:29:46 +0900 Subject: [PATCH 02/17] =?UTF-8?q?feat(typography):=20Typography=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#1?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(typography): add test scenario * feat(typography): implement test & component * feat(typography): add typography story * fix: lower level - noExplicitAny * fix(typography): exclude dist from typecheck --- biome.json | 5 +- packages/typography/package.json | 5 ++ packages/typography/src/Typography.module.css | 5 ++ .../typography/src/Typography.stories.tsx | 46 +++++++++- packages/typography/src/Typography.test.tsx | 85 +++++++++++++++++++ packages/typography/src/Typography.tsx | 71 +++++++++++++++- packages/typography/src/env.d.ts | 1 + packages/typography/tsconfig.json | 3 +- packages/typography/vitest.config.ts | 3 + packages/typography/vitest.setup.ts | 1 + pnpm-lock.yaml | 79 +++++++++++++++++ 11 files changed, 299 insertions(+), 5 deletions(-) create mode 100644 packages/typography/src/Typography.module.css create mode 100644 packages/typography/src/Typography.test.tsx create mode 100644 packages/typography/src/env.d.ts create mode 100644 packages/typography/vitest.setup.ts diff --git a/biome.json b/biome.json index 1426946..6f0643a 100644 --- a/biome.json +++ b/biome.json @@ -10,7 +10,10 @@ "linter": { "enabled": true, "rules": { - "recommended": true + "recommended": true, + "suspicious": { + "noExplicitAny": "warn" + } } }, "javascript": { diff --git a/packages/typography/package.json b/packages/typography/package.json index 90990b3..1be1418 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -19,6 +19,9 @@ "typecheck": "tsc", "prepack": "pnpm run build" }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0" + }, "devDependencies": { "@biomejs/biome": "catalog:", "@storybook/addon-essentials": "catalog:", @@ -28,6 +31,8 @@ "@storybook/react": "catalog:", "@storybook/react-vite": "catalog:", "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", "@types/react": "^18.3.12", "happy-dom": "catalog:", "react": "^18.3.1", diff --git a/packages/typography/src/Typography.module.css b/packages/typography/src/Typography.module.css new file mode 100644 index 0000000..2edfccc --- /dev/null +++ b/packages/typography/src/Typography.module.css @@ -0,0 +1,5 @@ +.typography { + font-size: var(--font-size); + font-weight: var(--font-weight); + line-height: var(--line-height); +} diff --git a/packages/typography/src/Typography.stories.tsx b/packages/typography/src/Typography.stories.tsx index 56c3871..0fffbe5 100644 --- a/packages/typography/src/Typography.stories.tsx +++ b/packages/typography/src/Typography.stories.tsx @@ -11,4 +11,48 @@ export default meta; type Story = StoryObj; -export const Basic: Story = {}; +export const Basic: Story = { + render() { + return ( +
+ +

Weight

+
+ + [기본 값] regular(400) - 사이프 디자인 시스템 + + + medium(500) - 사이프 디자인 시스템 + + + semiBold(600) - 사이프 디자인 시스템 + + bold(700) - 사이프 디자인 시스템 + + +

Size

+
+ 12 - 사이프 디자인 시스템 + [기본 값] 14 - 사이프 디자인 시스템 + 16 - 사이프 디자인 시스템 + 18 - 사이프 디자인 시스템 + 20 - 사이프 디자인 시스템 + 24 - 사이프 디자인 시스템 + 28 - 사이프 디자인 시스템 + 32 - 사이프 디자인 시스템 + 36 - 사이프 디자인 시스템 + 48 - 사이프 디자인 시스템 + + +

Line Height

+
+ + [기본 값] regular(1.5) - 사이프 디자인 시스템 + + + compact(1.3) - 사이프 디자인 시스템 + +
+ ); + }, +}; diff --git a/packages/typography/src/Typography.test.tsx b/packages/typography/src/Typography.test.tsx new file mode 100644 index 0000000..00b2d8b --- /dev/null +++ b/packages/typography/src/Typography.test.tsx @@ -0,0 +1,85 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import { expect, test } from 'vitest'; +import { + type FontSize, + type FontWeight, + type LineHeight, + Typography, +} from './Typography'; + +test('weight를 주입하지 않으면 기본 값 regular(400)로 글꼴의 두께를 설정한다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ fontWeight: 400 }); +}); + +test.each([ + { weight: 'regular', numericWeight: 400 }, + { weight: 'medium', numericWeight: 500 }, + { weight: 'semiBold', numericWeight: 600 }, + { weight: 'bold', numericWeight: 700 }, +] satisfies Array<{ weight: FontWeight; numericWeight: number }>)( + '주입한 $weight($numericWeight) weight을 기준으로 글꼴의 두께를 설정한다.', + ({ weight, numericWeight }) => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ + fontWeight: numericWeight, + }); + }, +); + +test('size를 주입하지 않으면 기본 값 14로 글꼴의 크기를 설정한다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ fontSize: '14px' }); +}); + +test.each([12, 14, 16, 18, 20, 24, 28, 32, 36, 48] satisfies FontSize[])( + '주입한 %i size를 기준으로 글꼴의 크기를 설정한다.', + (size) => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ fontSize: `${size}px` }); + }, +); + +test('lineHeight을 주입하지 않으면 기본 값 regular(1.5)로 줄 높이를 설정한다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ lineHeight: 1.5 }); +}); + +test.each([ + { lineHeight: 'regular', numericLineHeight: 1.5 }, + { lineHeight: 'compact', numericLineHeight: 1.3 }, +] satisfies Array<{ lineHeight: LineHeight; numericLineHeight: number }>)( + '주입한 %s lineHeight을 기준으로 줄 높이를 설정한다.', + ({ lineHeight, numericLineHeight }) => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ + lineHeight: numericLineHeight, + }); + }, +); + +test('asChild를 주입하지 않으면 p 태그로 요소를 그린다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveProperty('tagName', 'P'); +}); + +test('asChild가 true일 때, children으로 전달된 요소에 Typography 스타일을 적용한다.', async () => { + render( + +

테스트

+
, + ); + + await waitFor(() => { + expect(screen.queryByRole('paragraph')).not.toBeInTheDocument(); + }); + + expect(screen.getByText('테스트')).toHaveProperty('tagName', 'H1'); +}); diff --git a/packages/typography/src/Typography.tsx b/packages/typography/src/Typography.tsx index 65e10c3..6ee29cf 100644 --- a/packages/typography/src/Typography.tsx +++ b/packages/typography/src/Typography.tsx @@ -1,3 +1,70 @@ -export function Typography() { - return
Component
; +import { Slot } from '@radix-ui/react-slot'; +import { + type CSSProperties, + type ComponentProps, + type ForwardedRef, + forwardRef, +} from 'react'; +import styles from './Typography.module.css'; + +export type FontSize = 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 36 | 48; + +export type FontWeight = 'regular' | 'medium' | 'semiBold' | 'bold'; + +export type LineHeight = 'regular' | 'compact'; + +export interface TypographyProps extends ComponentProps<'p'> { + asChild?: boolean; + lineHeight?: LineHeight; + size?: FontSize; + weight?: FontWeight; +} + +export const Typography = forwardRef(function Typography( + { + asChild, + lineHeight = 'regular', + size = 14, + weight = 'regular', + ...props + }: TypographyProps, + ref: ForwardedRef, +) { + const Component = asChild ? Slot : 'p'; + const numericLineHeight = getNumericLineHeight(lineHeight); + const numericWeight = getNumericWeight(weight); + const style = { + '--font-size': `${size}px`, + '--font-weight': numericWeight, + '--line-height': numericLineHeight, + } as CSSProperties; + + return ( + + ); +}); + +function getNumericLineHeight(lineHeight: LineHeight) { + const lineHeightMap = { + regular: 1.5, + compact: 1.3, + }; + + return lineHeightMap[lineHeight]; +} + +function getNumericWeight(weight: FontWeight) { + const weightMap = { + regular: 400, + medium: 500, + semiBold: 600, + bold: 700, + }; + + return weightMap[weight]; } diff --git a/packages/typography/src/env.d.ts b/packages/typography/src/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/typography/src/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/typography/tsconfig.json b/packages/typography/tsconfig.json index 4082f16..4f0f179 100644 --- a/packages/typography/tsconfig.json +++ b/packages/typography/tsconfig.json @@ -1,3 +1,4 @@ { - "extends": "../../tsconfig.json" + "extends": "../../tsconfig.json", + "exclude": ["dist"] } diff --git a/packages/typography/vitest.config.ts b/packages/typography/vitest.config.ts index 7bfa9a8..bd5bbd3 100644 --- a/packages/typography/vitest.config.ts +++ b/packages/typography/vitest.config.ts @@ -3,7 +3,10 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { environment: 'happy-dom', + globals: true, passWithNoTests: true, + setupFiles: './vitest.setup.ts', watch: false, + css: true, }, }); diff --git a/packages/typography/vitest.setup.ts b/packages/typography/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/typography/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb8b470..fa67371 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,6 +121,10 @@ importers: version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) packages/typography: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.12)(react@18.3.1) devDependencies: '@biomejs/biome': specifier: 'catalog:' @@ -146,6 +150,12 @@ importers: '@storybook/test': specifier: 'catalog:' version: 8.3.6(storybook@8.3.6) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -840,6 +850,24 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -1126,6 +1154,25 @@ packages: resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.0.1': + resolution: {integrity: sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@testing-library/user-event@14.5.2': resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} engines: {node: '>=12', npm: '>=6'} @@ -3453,6 +3500,19 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + '@rollup/pluginutils@5.1.3(rollup@4.24.2)': dependencies: '@types/estree': 1.0.6 @@ -3817,6 +3877,25 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.0 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 From d4b4fefd628eb82643a5a07624953fd820c535bf Mon Sep 17 00:00:00 2001 From: y09n Date: Mon, 18 Nov 2024 23:12:23 +0900 Subject: [PATCH 03/17] fix(ci): run build after typecheck (#27) --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a3e746c..01d02be 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,7 +27,7 @@ jobs: run: pnpm --filter="...[origin/${{ github.base_ref }}]" lint - name: 테스트 run: pnpm --filter="...[origin/${{ github.base_ref }}]" test - - name: 빌드 - run: pnpm --filter="...[origin/${{ github.base_ref }}]" build - name: 타입 체크 run: pnpm --filter="...[origin/${{ github.base_ref }}]" typecheck + - name: 빌드 + run: pnpm --filter="...[origin/${{ github.base_ref }}]" build From 75333b1b6336246fb1da6bd4ab3f043b9b391e3d Mon Sep 17 00:00:00 2001 From: y09n Date: Mon, 18 Nov 2024 23:16:53 +0900 Subject: [PATCH 04/17] =?UTF-8?q?fix(typography):=20color=20prop=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EC=8A=A4=ED=83=80=EC=9D=BC=EC=9D=84=20?= =?UTF-8?q?=ED=99=95=EC=9E=A5=20=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=8C=80=EC=9D=91=ED=95=A9=EB=8B=88=EB=8B=A4.=20(#?= =?UTF-8?q?24)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/typography/package.json | 4 ++- packages/typography/src/Typography.module.css | 1 + packages/typography/src/Typography.test.tsx | 28 +++++++++++++++++++ packages/typography/src/Typography.tsx | 8 +++++- pnpm-lock.yaml | 20 ++++++++++++- 5 files changed, 58 insertions(+), 3 deletions(-) diff --git a/packages/typography/package.json b/packages/typography/package.json index 1be1418..61ef253 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -20,10 +20,12 @@ "prepack": "pnpm run build" }, "dependencies": { - "@radix-ui/react-slot": "^1.1.0" + "@radix-ui/react-slot": "^1.1.0", + "clsx": "^2.1.1" }, "devDependencies": { "@biomejs/biome": "catalog:", + "@faker-js/faker": "^9.2.0", "@storybook/addon-essentials": "catalog:", "@storybook/addon-interactions": "catalog:", "@storybook/addon-links": "catalog:", diff --git a/packages/typography/src/Typography.module.css b/packages/typography/src/Typography.module.css index 2edfccc..f536561 100644 --- a/packages/typography/src/Typography.module.css +++ b/packages/typography/src/Typography.module.css @@ -1,4 +1,5 @@ .typography { + color: var(--font-color); font-size: var(--font-size); font-weight: var(--font-weight); line-height: var(--line-height); diff --git a/packages/typography/src/Typography.test.tsx b/packages/typography/src/Typography.test.tsx index 00b2d8b..a2ebd36 100644 --- a/packages/typography/src/Typography.test.tsx +++ b/packages/typography/src/Typography.test.tsx @@ -1,3 +1,4 @@ +import { faker } from '@faker-js/faker'; import { render, screen, waitFor } from '@testing-library/react'; import { expect, test } from 'vitest'; import { @@ -64,6 +65,14 @@ test.each([ }, ); +test('주입한 color를 기준으로 글꼴의 색상을 설정한다.', () => { + const color = faker.color.rgb(); + + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ color }); +}); + test('asChild를 주입하지 않으면 p 태그로 요소를 그린다.', () => { render(테스트); @@ -83,3 +92,22 @@ test('asChild가 true일 때, children으로 전달된 요소에 Typography 스 expect(screen.getByText('테스트')).toHaveProperty('tagName', 'H1'); }); + +test('className을 주입하면 추가로 전달한다.', () => { + const customClassName = faker.word.noun(); + + render(테스트); + + expect(screen.getByText('테스트')).toHaveClass(customClassName); +}); + +test('style을 주입하면 추가로 전달한다.', () => { + const customStyle = { + display: faker.helpers.arrayElement(['block', 'flex', 'grid']), + margin: `${faker.number.int()}px`, + }; + + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle(customStyle); +}); diff --git a/packages/typography/src/Typography.tsx b/packages/typography/src/Typography.tsx index 6ee29cf..62226bd 100644 --- a/packages/typography/src/Typography.tsx +++ b/packages/typography/src/Typography.tsx @@ -1,4 +1,5 @@ import { Slot } from '@radix-ui/react-slot'; +import { clsx as cx } from 'clsx'; import { type CSSProperties, type ComponentProps, @@ -23,8 +24,11 @@ export interface TypographyProps extends ComponentProps<'p'> { export const Typography = forwardRef(function Typography( { asChild, + className, + color, lineHeight = 'regular', size = 14, + style: _style, weight = 'regular', ...props }: TypographyProps, @@ -34,6 +38,8 @@ export const Typography = forwardRef(function Typography( const numericLineHeight = getNumericLineHeight(lineHeight); const numericWeight = getNumericWeight(weight); const style = { + ..._style, + '--font-color': color, '--font-size': `${size}px`, '--font-weight': numericWeight, '--line-height': numericLineHeight, @@ -41,7 +47,7 @@ export const Typography = forwardRef(function Typography( return ( =18.0.0', npm: '>=9.0.0'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -798,7 +808,7 @@ packages: '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: - typescript: ^5.6.3 + typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: typescript: @@ -1497,6 +1507,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -3427,6 +3441,8 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true + '@faker-js/faker@9.2.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -4238,6 +4254,8 @@ snapshots: clone@1.0.4: optional: true + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 From 2ae6bd3eeeb2b55719908720c9e4ffed1513809d Mon Sep 17 00:00:00 2001 From: SeongHyeon Bae Date: Tue, 19 Nov 2024 21:52:00 +0900 Subject: [PATCH 05/17] =?UTF-8?q?feat(skeleton):=20skeleton=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(skeleton): implement component * test(skeleton): implement skeleton storybook * test(skeleton): implement skeleton unit test * chore(skeleton): add a skeleton css property * chore(skeleton): modify the default size values * test(skeleton): add a text skeleton component storybook * fix(ci): pnpm dependency install * chore: modify package.json name and desc * chore: use faker lib for using ramdom string * test(skeleton): modify the skeleton test desc and aria-label --- packages/skeleton/.storybook/main.ts | 16 +++++ packages/skeleton/.storybook/preview.ts | 5 ++ packages/skeleton/package.json | 66 ++++++++++++++++++ packages/skeleton/src/Skeleton.module.css | 30 +++++++++ packages/skeleton/src/Skeleton.stories.tsx | 78 ++++++++++++++++++++++ packages/skeleton/src/Skeleton.test.tsx | 55 +++++++++++++++ packages/skeleton/src/Skeleton.tsx | 39 +++++++++++ packages/skeleton/src/env.d.ts | 1 + packages/skeleton/src/index.ts | 1 + packages/skeleton/tsconfig.json | 3 + packages/skeleton/tsup.config.ts | 8 +++ packages/skeleton/vitest.config.ts | 12 ++++ packages/skeleton/vitest.setup.ts | 1 + pnpm-lock.yaml | 61 +++++++++++++++++ 14 files changed, 376 insertions(+) create mode 100644 packages/skeleton/.storybook/main.ts create mode 100644 packages/skeleton/.storybook/preview.ts create mode 100644 packages/skeleton/package.json create mode 100644 packages/skeleton/src/Skeleton.module.css create mode 100644 packages/skeleton/src/Skeleton.stories.tsx create mode 100644 packages/skeleton/src/Skeleton.test.tsx create mode 100644 packages/skeleton/src/Skeleton.tsx create mode 100644 packages/skeleton/src/env.d.ts create mode 100644 packages/skeleton/src/index.ts create mode 100644 packages/skeleton/tsconfig.json create mode 100644 packages/skeleton/tsup.config.ts create mode 100644 packages/skeleton/vitest.config.ts create mode 100644 packages/skeleton/vitest.setup.ts diff --git a/packages/skeleton/.storybook/main.ts b/packages/skeleton/.storybook/main.ts new file mode 100644 index 0000000..83a7f10 --- /dev/null +++ b/packages/skeleton/.storybook/main.ts @@ -0,0 +1,16 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/skeleton/.storybook/preview.ts b/packages/skeleton/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/skeleton/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json new file mode 100644 index 0000000..4791629 --- /dev/null +++ b/packages/skeleton/package.json @@ -0,0 +1,66 @@ +{ + "name": "@sipe-team/skeleton", + "description": "Skeleton component for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@faker-js/faker": "^9.2.0", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0" + } +} diff --git a/packages/skeleton/src/Skeleton.module.css b/packages/skeleton/src/Skeleton.module.css new file mode 100644 index 0000000..8658c15 --- /dev/null +++ b/packages/skeleton/src/Skeleton.module.css @@ -0,0 +1,30 @@ +@keyframes fadeInOut { + 0% { + opacity: 1; + } + 50% { + opacity: 0.8; + } + 100% { + opacity: 1; + } +} + + +.skeleton{ + animation: fadeInOut 1.5s infinite !important; + width: var(--width); + height: var(--height); + background-color: rgb(155, 155, 155); + + background-image: none !important; + background-clip: border-box !important; + border: none !important; + box-shadow: none !important; + box-decoration-break: clone !important; + color: transparent !important; + outline: none !important; + pointer-events: none !important; + user-select: none !important; + cursor: default !important; +} \ No newline at end of file diff --git a/packages/skeleton/src/Skeleton.stories.tsx b/packages/skeleton/src/Skeleton.stories.tsx new file mode 100644 index 0000000..9082bad --- /dev/null +++ b/packages/skeleton/src/Skeleton.stories.tsx @@ -0,0 +1,78 @@ +import { faker } from '@faker-js/faker'; +// Skeleton.stories.tsx +import type { Meta, StoryObj } from '@storybook/react'; +import { Skeleton } from './Skeleton'; + +const meta = { + component: Skeleton, + parameters: { + layout: 'centered', + }, + argTypes: { + variant: { + control: 'select', + options: ['circle', 'rectangular'], + }, + width: { + control: { type: 'number', min: 20, max: 200, step: 10 }, + }, + height: { + control: { type: 'number', min: 20, max: 200, step: 10 }, + }, + loading: { + control: 'boolean', + }, + asChild: { + control: 'boolean', + }, + }, +} satisfies Meta; + +export default meta; + +type Story = StoryObj; + +export const Basic: Story = { + args: { + loading: true, + variant: 'rectangular', + width: 100, + height: 100, + }, +}; + +export const CircleSkeleton: Story = { + args: { + loading: true, + variant: 'circle', + width: 80, + height: 80, + }, +}; + +export const RectangularSkeleton: Story = { + args: { + loading: true, + variant: 'rectangular', + width: 80, + height: 30, + }, +}; + +export const SkeletonWithChildren: Story = { + args: { + loading: true, + asChild: true, + children: , + variant: 'rectangular', + }, +}; + +export const SkeletonWithText: Story = { + args: { + loading: true, + asChild: true, + children: {faker.lorem.lines(2)}, + variant: 'rectangular', + }, +}; diff --git a/packages/skeleton/src/Skeleton.test.tsx b/packages/skeleton/src/Skeleton.test.tsx new file mode 100644 index 0000000..3c62561 --- /dev/null +++ b/packages/skeleton/src/Skeleton.test.tsx @@ -0,0 +1,55 @@ +import { render, screen } from '@testing-library/react'; +import { expect, test } from 'vitest'; +import { Skeleton } from './Skeleton'; + +test('loading이 true 일 때 스켈레톤이 렌더링 된다.', () => { + render(); + + const skeleton = screen.getByLabelText('skeleton'); + expect(skeleton).toBeInTheDocument(); +}); + +test('loading이 false 일 때 children이 렌더링 된다.', () => { + render(Childrun); + + expect(screen.getByText('Childrun')).toBeInTheDocument(); +}); + +test('variant가 circle일 때 borderRadius가 50%로 설정된다.', () => { + render(); + + const skeleton = screen.getByLabelText('skeleton'); + expect(skeleton).toHaveStyle({ borderRadius: '50%' }); +}); +test('variant가 rectangular일 때 borderRadius가 기본값 4px으로 설정된다.', () => { + render( + , + ); + + const skeleton = screen.getByLabelText('skeleton'); + expect(skeleton).toHaveStyle({ borderRadius: '4px' }); +}); +test('width와 height가 props로 전달될 때 올바르게 스타일이 적용된다.', () => { + render( + , + ); + + const skeleton = screen.getByLabelText('skeleton'); + expect(skeleton).toHaveStyle({ width: '150px', height: '50px' }); +}); + +test('asChild가 true일 때, children으로 전달된 요소에 Skeleton 스타일을 적용한다.', () => { + render( + + Child Content + , + ); + + const child = screen.getByTestId('child'); + expect(child).toBeInTheDocument(); + expect(child).toHaveStyle({ + 'background-color': 'rgb(155, 155, 155)', + width: '120px', + height: '30px', + }); +}); diff --git a/packages/skeleton/src/Skeleton.tsx b/packages/skeleton/src/Skeleton.tsx new file mode 100644 index 0000000..32db98b --- /dev/null +++ b/packages/skeleton/src/Skeleton.tsx @@ -0,0 +1,39 @@ +import { Slot } from '@radix-ui/react-slot'; +import { + type CSSProperties, + type ComponentProps, + type ForwardedRef, + forwardRef, +} from 'react'; +import styles from './Skeleton.module.css'; + +type Variant = 'circle' | 'rectangular'; + +interface SkeletonProps extends ComponentProps<'div'> { + asChild?: boolean; + loading: boolean; + variant?: Variant; + width?: number; + height?: number; +} +export const Skeleton = forwardRef(function Skeleton( + { asChild, loading, children, ...props }: SkeletonProps, + ref: ForwardedRef, +) { + if (!loading) return children; + + const Component = asChild ? Slot : 'div'; + + const style = { + '--width': props.width ? `${props.width}px` : 'auto', + '--height': props.height ? `${props.height}px` : 'auto', + borderRadius: props.variant === 'circle' ? '50%' : '4px', + } as CSSProperties; + + return ( + + {children} + + ); +}); +Skeleton.displayName = 'Skeleton'; diff --git a/packages/skeleton/src/env.d.ts b/packages/skeleton/src/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/skeleton/src/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/skeleton/src/index.ts b/packages/skeleton/src/index.ts new file mode 100644 index 0000000..66bc08d --- /dev/null +++ b/packages/skeleton/src/index.ts @@ -0,0 +1 @@ +export * from './Skeleton'; diff --git a/packages/skeleton/tsconfig.json b/packages/skeleton/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/skeleton/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/skeleton/tsup.config.ts b/packages/skeleton/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/skeleton/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/skeleton/vitest.config.ts b/packages/skeleton/vitest.config.ts new file mode 100644 index 0000000..bd5bbd3 --- /dev/null +++ b/packages/skeleton/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'happy-dom', + globals: true, + passWithNoTests: true, + setupFiles: './vitest.setup.ts', + watch: false, + css: true, + }, +}); diff --git a/packages/skeleton/vitest.setup.ts b/packages/skeleton/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/skeleton/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a93fa6..6dd90ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,67 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/skeleton: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@faker-js/faker': + specifier: ^9.2.0 + version: 9.2.0 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.3.6(react@18.3.1)(storybook@8.3.6) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + '@storybook/react': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + happy-dom: + specifier: 'catalog:' + version: 15.7.4 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.3.6 + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + vitest: + specifier: 'catalog:' + version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/typography: dependencies: '@radix-ui/react-slot': From a4cfd342926bffe8b1e9e042387d93e465fca863 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 20 Nov 2024 20:08:29 +0900 Subject: [PATCH 06/17] =?UTF-8?q?feat(input):=20Input=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20=20(#23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(typography): add test scenario * feat(typography): implement test & component * feat(typography): add typography story * fix: lower level - noExplicitAny * fix(typography): exclude dist from typecheck * chore: create Input component folder #7 * chore: add compose-refs util function from radix-ui #7 * feat(input): add utility functions for font size, weight, and line height #7 * test(input): setup and install jest and rtl related packages * chore(input): define constant object and types based on design system * feat(input): write test scenario * feat(input): implement input component and add test code * feat(input): add storybook case * chore: move constants, utils folder into src/ * feat(config): update biome.json to organize imports and ignore dist files * fix(input): correct test case syntax and update className style reference * fix(input): exclude dist folder in tsconfig * fix(input): remove redundant import statement in vitest.setup.ts * fix(input): update test code based on feedback * fix(input): enhance storybook input examples with additional props and ref handling --------- Co-authored-by: noahluftyang --- biome.json | 4 + packages/Input/.storybook/main.ts | 16 +++ packages/Input/.storybook/preview.ts | 5 + packages/Input/package.json | 67 ++++++++++ packages/Input/src/Input.module.css | 81 +++++++++++++ packages/Input/src/Input.module.css.d.ts | 7 ++ packages/Input/src/Input.stories.tsx | 94 ++++++++++++++ packages/Input/src/Input.test.tsx | 128 ++++++++++++++++++++ packages/Input/src/Input.tsx | 111 +++++++++++++++++ packages/Input/src/constants/colors.ts | 6 + packages/Input/src/constants/spacing.ts | 6 + packages/Input/src/constants/typhography.ts | 12 ++ packages/Input/src/index.ts | 1 + packages/Input/tsconfig.json | 4 + packages/Input/tsup.config.ts | 8 ++ packages/Input/vitest.config.ts | 12 ++ packages/Input/vitest.setup.ts | 1 + pnpm-lock.yaml | 69 +++++++++++ 18 files changed, 632 insertions(+) create mode 100644 packages/Input/.storybook/main.ts create mode 100644 packages/Input/.storybook/preview.ts create mode 100644 packages/Input/package.json create mode 100644 packages/Input/src/Input.module.css create mode 100644 packages/Input/src/Input.module.css.d.ts create mode 100644 packages/Input/src/Input.stories.tsx create mode 100644 packages/Input/src/Input.test.tsx create mode 100644 packages/Input/src/Input.tsx create mode 100644 packages/Input/src/constants/colors.ts create mode 100644 packages/Input/src/constants/spacing.ts create mode 100644 packages/Input/src/constants/typhography.ts create mode 100644 packages/Input/src/index.ts create mode 100644 packages/Input/tsconfig.json create mode 100644 packages/Input/tsup.config.ts create mode 100644 packages/Input/vitest.config.ts create mode 100644 packages/Input/vitest.setup.ts diff --git a/biome.json b/biome.json index 6f0643a..147b52a 100644 --- a/biome.json +++ b/biome.json @@ -4,6 +4,7 @@ "enabled": true, "indentStyle": "space" }, + "organizeImports": { "enabled": true }, @@ -20,5 +21,8 @@ "formatter": { "quoteStyle": "single" } + }, + "files": { + "ignore": ["dist/*.*"] } } diff --git a/packages/Input/.storybook/main.ts b/packages/Input/.storybook/main.ts new file mode 100644 index 0000000..83a7f10 --- /dev/null +++ b/packages/Input/.storybook/main.ts @@ -0,0 +1,16 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/Input/.storybook/preview.ts b/packages/Input/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/Input/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/Input/package.json b/packages/Input/package.json new file mode 100644 index 0000000..c5a4d69 --- /dev/null +++ b/packages/Input/package.json @@ -0,0 +1,67 @@ +{ + "name": "@sipe-team/component", + "description": "component for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "classnames": "^2.5.1" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "@testing-library/user-event": "^14.5.2", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false +} diff --git a/packages/Input/src/Input.module.css b/packages/Input/src/Input.module.css new file mode 100644 index 0000000..013d816 --- /dev/null +++ b/packages/Input/src/Input.module.css @@ -0,0 +1,81 @@ +.input-wrapper { + display: flex; + flex: 1; + align-items: center; + font-style: normal; + text-align: start; + + padding: var(--input-padding); + border-radius: var(--input-border-radius); + outline: 1px solid var(--input-ring-color); + + @supports selector(:has(*)) { + &:where(:has(.input:focus)) { + outline: 2px solid var(--input-ring-color); + outline-offset: -1px; + } + + &:where(:has(.input:disabled)) { + background-color: var(--input-disabled-color); + } + } + @supports not selector(:has(*)) { + &:where(:focus-within) { + outline: 2px solid var(--input-ring-color); + outline-offset: -1px; + } + } +} + +.input { + width: 100%; + display: flex; + align-items: center; + text-align: inherit; + + outline: 1px solid transparent; + border: none; + + font-size: var(--font-size); + font-weight: var(--font-weight); + + /* 기본 취소 버튼 제거 */ + &::-webkit-search-cancel-button { + appearance: none; + } + + @supports selector(:has(*)) { + &:where(:autofill, [data-com-onepassword-filled]) { + background-clip: text; + -webkit-text-fill-color: var(--gray-12); + } + } + + @supports selector(:has(*)) { + &:where(:disabled) { + background-color: transparent; + } + } +} + + + +.input-action { + all: unset; + + width: var(--action-size); + height: var(--action-size); + + display: flex; + justify-content: center; + align-items: center; + border-radius: var(--input-border-radius); + + @supports selector(:has(*)) { + + &:focus { + outline: 2px solid var(--input-ring-color); + outline-offset: 3px; + } + } +} \ No newline at end of file diff --git a/packages/Input/src/Input.module.css.d.ts b/packages/Input/src/Input.module.css.d.ts new file mode 100644 index 0000000..3db1a61 --- /dev/null +++ b/packages/Input/src/Input.module.css.d.ts @@ -0,0 +1,7 @@ + +declare const styles: { + readonly "input-wrapper": string; + readonly "input": string; + readonly "input-action": string; +}; +export default styles; \ No newline at end of file diff --git a/packages/Input/src/Input.stories.tsx b/packages/Input/src/Input.stories.tsx new file mode 100644 index 0000000..36ad949 --- /dev/null +++ b/packages/Input/src/Input.stories.tsx @@ -0,0 +1,94 @@ +import type { StoryObj } from '@storybook/react'; +import { useRef, useState } from 'react'; +import { Action, Input } from './Input'; + +const meta = { + component: Input, + parameters: { + layout: 'centered', + }, + args: { + disabled: false, + fontSize: 16, + fontWeight: 'regular', + placeholder: 'placeholder', + type: 'text', + }, + argTypes: { + type: { + options: ['email', 'password', 'search', 'tel', 'text', 'url'], + control: { type: 'radio' }, + }, + }, +}; +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { + type: 'password', + fontWeight: 'regular', + fontSize: 20, + }, + + render: (args) => { + const [value, setValue] = useState('value'); + return ( + setValue(e.target.value)} + {...args} + /> + ); + }, +}; + +export const disabled: Story = { + render: (args) => { + const [value, setValue] = useState(args.value); + return ( + setValue(e.target.value)} + {...args} + /> + ); + }, + args: { + disabled: true, + value: 'test', + }, +}; + +export const WithActionButton: Story = { + render: (args) => { + const ref = useRef(null); + const handleReset = () => { + if (ref.current) { + ref.current.value = ''; + } + }; + return ( + + + + + + ); + }, +}; diff --git a/packages/Input/src/Input.test.tsx b/packages/Input/src/Input.test.tsx new file mode 100644 index 0000000..c4347a8 --- /dev/null +++ b/packages/Input/src/Input.test.tsx @@ -0,0 +1,128 @@ +import '@testing-library/jest-dom'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { createRef } from 'react'; +import { describe, expect, test } from 'vitest'; +import { Action, Input } from './Input'; +import { colors } from './constants/colors'; +import { + Weight, + defaultFontSize, + defaultFontWeight, +} from './constants/typhography'; + +describe('Input 컴포넌트', () => { + describe('렌더링', () => { + test('올바른 타입으로 렌더링된다', () => { + render(); + expect(screen.getByRole('textbox')).toHaveAttribute('type', 'email'); + }); + + test('커스텀 스타일이 input에 적용된다', () => { + render(); + expect(screen.getByRole('textbox')).toHaveStyle({ color: 'red' }); + }); + + test('ref가 올바르게 전달된다', () => { + const ref = createRef(); + render(); + expect(ref.current).toBeInstanceOf(HTMLInputElement); + }); + + test(`disabled일 때 배경색이 정의된 비활성화 색상(${colors.disabledBackground})으로 설정된다`, () => { + const disableColor = colors.disabledBackground; + const { container } = render(); + const element = container.firstChild as HTMLElement; + const styles = getComputedStyle(element); + expect(styles.getPropertyValue('--input-disabled-color')).toBe( + disableColor, + ); + }); + + test('classNames가 올바르게 적용된다', () => { + const { container } = render(); + expect(container.firstChild).toHaveClass('custom-class'); + }); + + test('기본적으로 맞춤법 검사가 비활성화된다', () => { + render(); + expect(screen.getByRole('textbox')).toHaveAttribute( + 'spellCheck', + 'false', + ); + }); + + test(`fontWeight가 미지정시 ${defaultFontWeight}, fontSize가 미지정시 ${defaultFontSize}px이 기본값으로 적용된다`, () => { + const { container } = render(); + const element = container.firstChild as HTMLElement; + const styles = getComputedStyle(element); + expect(styles.getPropertyValue('--font-size')).toBe( + `${defaultFontSize}px`, + ); + expect(styles.getPropertyValue('--font-weight')).toBe( + `${Weight[defaultFontWeight]}`, + ); + }); + + test('변경 폰트 사이즈, 폰트 웨이트 적용된다.', () => { + const fontSize = 24; + const fontWeight = 'semiBold'; + const { container } = render( + , + ); + const element = container.firstChild as HTMLElement; + const styles = getComputedStyle(element); + expect(styles.getPropertyValue('--font-size')).toBe(`${fontSize}px`); + expect(styles.getPropertyValue('--font-weight')).toBe( + `${Weight[fontWeight]}`, + ); + }); + }); + + describe('상호작용', () => { + test('사용자 입력', async () => { + render(); + const input = screen.getByRole('textbox'); + await userEvent.type(input, '테스트 입력'); + expect(input).toHaveValue('테스트 입력'); + }); + }); + + describe('액션 버튼', () => { + test('Action 버튼이 올바르게 렌더링된다', () => { + render( + + 버튼 + , + ); + expect(screen.getByRole('button')).toBeInTheDocument(); + }); + + test('Action 버튼에 커스텀 클래스가 적용된다', () => { + render( + + 버튼 + , + ); + expect(screen.getByRole('button')).toHaveClass('custom-action'); + }); + + test('asChild prop으로 렌더링된 엘리먼트가 slot으로 대체된다', () => { + render( + + + 커스텀 엘리먼트 + + , + ); + expect(screen.getByText('커스텀 엘리먼트').tagName).toBe('SPAN'); + }); + }); + + describe('접근성', () => { + test('Input 컴포넌트가 textbox role을 가진다', () => { + render(); + expect(screen.getByRole('textbox')).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/Input/src/Input.tsx b/packages/Input/src/Input.tsx new file mode 100644 index 0000000..276dd68 --- /dev/null +++ b/packages/Input/src/Input.tsx @@ -0,0 +1,111 @@ +import classNames from 'classnames'; +import { + type CSSProperties, + type ComponentPropsWithoutRef, + type ElementRef, + forwardRef, +} from 'react'; + +import { Slot } from '@radix-ui/react-slot'; + +import styles from './Input.module.css'; +import { colors } from './constants/colors'; +import { spacing } from './constants/spacing'; +import { + type FontSize, + type FontWeight, + Weight, + defaultFontSize, + defaultFontWeight, +} from './constants/typhography'; + +type AllowedInputTypes = + | 'email' + | 'password' + | 'search' + | 'tel' + | 'text' + | 'url'; +type InputFieldElement = ElementRef<'input'>; +interface InputProps extends Omit, 'type'> { + type?: AllowedInputTypes; + fontSize?: FontSize; + fontWeight?: FontWeight; +} + +const Input = forwardRef( + (props, forwardedRef) => { + const { + children, + type = 'text', + fontWeight = defaultFontWeight, + fontSize = defaultFontSize, + className, + name, + ...inputProps + } = props; + + return ( +
+ + {children} +
+ ); + }, +); +Input.displayName = 'Input'; + +// * **************************************** +// * Input Action +// * **************************************** + +type InputFieldActionElement = ElementRef<'button'>; +type InputFieldActionType = 'button' | 'reset'; + +interface InputFieldActionProps + extends Omit, 'type'> { + asChild?: boolean; + type?: InputFieldActionType; +} + +const InputFieldAction = forwardRef< + InputFieldActionElement, + InputFieldActionProps +>((props, forwardedRef) => { + const { className, asChild, type = 'button', ...slotProps } = props; + + const Comp = asChild ? Slot : 'button'; + return ( + + ); +}); +InputFieldAction.displayName = 'Input.Action'; + +export { InputFieldAction as Action, Input }; + +export type { InputProps, InputFieldActionProps as SlotProps }; diff --git a/packages/Input/src/constants/colors.ts b/packages/Input/src/constants/colors.ts new file mode 100644 index 0000000..3490406 --- /dev/null +++ b/packages/Input/src/constants/colors.ts @@ -0,0 +1,6 @@ +export type ColorKeys = keyof typeof colors; +export const colors = { + inputRing: '#2B2B2B', + defaultInputOutline: '#adadad', + disabledBackground: '#BBBBBB', +} as const; \ No newline at end of file diff --git a/packages/Input/src/constants/spacing.ts b/packages/Input/src/constants/spacing.ts new file mode 100644 index 0000000..abab81e --- /dev/null +++ b/packages/Input/src/constants/spacing.ts @@ -0,0 +1,6 @@ +export type SpacingKeys = keyof typeof spacing; +export const spacing = { + defaultInputPadding: '8px', + defaultBorderRadius: '8px', + defaultActionSize: '24px', +} as const; \ No newline at end of file diff --git a/packages/Input/src/constants/typhography.ts b/packages/Input/src/constants/typhography.ts new file mode 100644 index 0000000..8dbab86 --- /dev/null +++ b/packages/Input/src/constants/typhography.ts @@ -0,0 +1,12 @@ +export type FontSize = 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 36 | 48; +export type FontWeight = keyof typeof Weight; + +export const defaultFontSize: FontSize = 16; +export const defaultFontWeight: FontWeight = 'regular'; + +export const Weight = { + regular: 400, + medium: 500, + semiBold: 600, + bold: 700, +} as const; diff --git a/packages/Input/src/index.ts b/packages/Input/src/index.ts new file mode 100644 index 0000000..ba9fe7e --- /dev/null +++ b/packages/Input/src/index.ts @@ -0,0 +1 @@ +export * from './Input'; diff --git a/packages/Input/tsconfig.json b/packages/Input/tsconfig.json new file mode 100644 index 0000000..4f0f179 --- /dev/null +++ b/packages/Input/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "exclude": ["dist"] +} diff --git a/packages/Input/tsup.config.ts b/packages/Input/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/Input/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/Input/vitest.config.ts b/packages/Input/vitest.config.ts new file mode 100644 index 0000000..bd5bbd3 --- /dev/null +++ b/packages/Input/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'happy-dom', + globals: true, + passWithNoTests: true, + setupFiles: './vitest.setup.ts', + watch: false, + css: true, + }, +}); diff --git a/packages/Input/vitest.setup.ts b/packages/Input/vitest.setup.ts new file mode 100644 index 0000000..331666c --- /dev/null +++ b/packages/Input/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6dd90ea..38eb343 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,6 +181,70 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/Input: + dependencies: + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + classnames: + specifier: ^2.5.1 + version: 2.5.1 + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.3.6(react@18.3.1)(storybook@8.3.6) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + '@storybook/react': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.0) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + happy-dom: + specifier: 'catalog:' + version: 15.7.4 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.3.6 + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + vitest: + specifier: 'catalog:' + version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/typography: dependencies: '@radix-ui/react-slot': @@ -1560,6 +1624,9 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -4310,6 +4377,8 @@ snapshots: ci-info@3.9.0: {} + classnames@2.5.1: {} + clean-stack@2.2.0: {} clone@1.0.4: From e3a1a7d33a2ae3b701493ba0c17ba70868892391 Mon Sep 17 00:00:00 2001 From: heeji Date: Wed, 27 Nov 2024 21:03:47 +0900 Subject: [PATCH 07/17] =?UTF-8?q?feat(divider):=20Divider=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#28)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(divider): initialize divider component * feat(divider): add test scenario * feat(divider): add test code and implementation * feat(divider): add story * fix(divider): test 코드에서 모듈css 잘못 import하는 부분을 수정 * fix(divider): 테스트 코드 수정 (class 포함 여부가 아닌 style 그 자체로) * chore(divider): add package 'clsx' * fix(divider): forwardRef 추가 & className 활용해 스타일링 가능케 변경 --------- Co-authored-by: limhizy15 --- packages/divider/.storybook/main.ts | 16 +++++ packages/divider/.storybook/preview.ts | 5 ++ packages/divider/env.d.ts | 1 + packages/divider/package.json | 66 +++++++++++++++++++++ packages/divider/src/Divider.module.css | 16 +++++ packages/divider/src/Divider.stories.tsx | 74 ++++++++++++++++++++++++ packages/divider/src/Divider.test.tsx | 45 ++++++++++++++ packages/divider/src/Divider.tsx | 22 +++++++ packages/divider/src/index.ts | 1 + packages/divider/tsconfig.json | 3 + packages/divider/tsup.config.ts | 8 +++ packages/divider/vitest.config.ts | 12 ++++ packages/divider/vitest.setup.ts | 1 + pnpm-lock.yaml | 61 +++++++++++++++++++ 14 files changed, 331 insertions(+) create mode 100644 packages/divider/.storybook/main.ts create mode 100644 packages/divider/.storybook/preview.ts create mode 100644 packages/divider/env.d.ts create mode 100644 packages/divider/package.json create mode 100644 packages/divider/src/Divider.module.css create mode 100644 packages/divider/src/Divider.stories.tsx create mode 100644 packages/divider/src/Divider.test.tsx create mode 100644 packages/divider/src/Divider.tsx create mode 100644 packages/divider/src/index.ts create mode 100644 packages/divider/tsconfig.json create mode 100644 packages/divider/tsup.config.ts create mode 100644 packages/divider/vitest.config.ts create mode 100644 packages/divider/vitest.setup.ts diff --git a/packages/divider/.storybook/main.ts b/packages/divider/.storybook/main.ts new file mode 100644 index 0000000..83a7f10 --- /dev/null +++ b/packages/divider/.storybook/main.ts @@ -0,0 +1,16 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/divider/.storybook/preview.ts b/packages/divider/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/divider/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/divider/env.d.ts b/packages/divider/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/divider/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/divider/package.json b/packages/divider/package.json new file mode 100644 index 0000000..319499c --- /dev/null +++ b/packages/divider/package.json @@ -0,0 +1,66 @@ +{ + "name": "@sipe-team/divider", + "description": "divider component for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@sipe-team/typography": "workspace:*", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "@types/react": "^18.3.12", + "happy-dom": "catalog:", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false, + "dependencies": { + "clsx": "^2.1.1" + } +} diff --git a/packages/divider/src/Divider.module.css b/packages/divider/src/Divider.module.css new file mode 100644 index 0000000..97610b6 --- /dev/null +++ b/packages/divider/src/Divider.module.css @@ -0,0 +1,16 @@ +.divider { + border: 0; + margin: 0; + flex-shrink: 0; + background-color: black; +} + +.horizontal.divider { + width: 100%; + height: 1px; +} + +.vertical.divider { + width: 1px; + height: 100%; +} diff --git a/packages/divider/src/Divider.stories.tsx b/packages/divider/src/Divider.stories.tsx new file mode 100644 index 0000000..ea376f1 --- /dev/null +++ b/packages/divider/src/Divider.stories.tsx @@ -0,0 +1,74 @@ +import { Typography } from '@sipe-team/typography'; +import type { Meta, StoryObj } from '@storybook/react'; +import { Divider } from './Divider'; + +const meta = { + component: Divider, + parameters: { + layout: 'centered', + }, +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +export const Basic: Story = { + render: () => ( +
+ {/* 기본 가로 방향 */} +
+ +

가로 구분선

+
+ +
+ +
+
+ + {/* 기본 세로 방향 */} +
+ +

세로 구분선

+
+ +
+ + + +
+
+ + {/* 스타일 섹션 */} +
+ +

스타일링

+
+ +
+
+ default + +
+ +
+ colored + +
+ +
+ thick + +
+
+
+
+ ), +}; diff --git a/packages/divider/src/Divider.test.tsx b/packages/divider/src/Divider.test.tsx new file mode 100644 index 0000000..e2d7dcb --- /dev/null +++ b/packages/divider/src/Divider.test.tsx @@ -0,0 +1,45 @@ +import { render, screen } from '@testing-library/react'; +import { describe, expect, test } from 'vitest'; +import { Divider } from './Divider'; + +describe('Divider', () => { + test('orientation 속성이 없으면 가로 방향으로 그린다.', () => { + render(); + + const divider = screen.getByRole('separator'); + + expect(divider).toHaveAttribute('aria-orientation', 'horizontal'); + expect(divider).toHaveStyle({ + width: '100%', + height: '1px', + }); + }); + + test('orientation이 vertical이면 세로 방향으로 그린다.', () => { + render(); + + const divider = screen.getByRole('separator'); + + expect(divider).toHaveAttribute('aria-orientation', 'vertical'); + expect(divider).toHaveStyle({ + width: '1px', + height: '100%', + }); + }); + + test('전달받은 style 속성이 컴포넌트에 적용된다.', () => { + const testStyle = { + backgroundColor: 'red', + margin: '8px', + }; + + render(); + + const divider = screen.getByRole('separator'); + + expect(divider).toHaveStyle({ + backgroundColor: 'red', + margin: '8px', + }); + }); +}); diff --git a/packages/divider/src/Divider.tsx b/packages/divider/src/Divider.tsx new file mode 100644 index 0000000..5b002cd --- /dev/null +++ b/packages/divider/src/Divider.tsx @@ -0,0 +1,22 @@ +import { clsx as cx } from 'clsx'; +import { type ComponentProps, forwardRef } from 'react'; +import styles from './Divider.module.css'; + +interface DividerProps extends ComponentProps<'hr'> { + orientation?: 'horizontal' | 'vertical'; +} + +export const Divider = forwardRef(function Divider({ + orientation = 'horizontal', + ...props +}: DividerProps) { + return ( +
+ ); +}); + +Divider.displayName = 'Divider'; diff --git a/packages/divider/src/index.ts b/packages/divider/src/index.ts new file mode 100644 index 0000000..1f84888 --- /dev/null +++ b/packages/divider/src/index.ts @@ -0,0 +1 @@ +export * from './Divider'; diff --git a/packages/divider/tsconfig.json b/packages/divider/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/divider/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/divider/tsup.config.ts b/packages/divider/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/divider/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/divider/vitest.config.ts b/packages/divider/vitest.config.ts new file mode 100644 index 0000000..bd5bbd3 --- /dev/null +++ b/packages/divider/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'happy-dom', + globals: true, + passWithNoTests: true, + setupFiles: './vitest.setup.ts', + watch: false, + css: true, + }, +}); diff --git a/packages/divider/vitest.setup.ts b/packages/divider/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/divider/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38eb343..135dcca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,6 +120,67 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/divider: + dependencies: + clsx: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@sipe-team/typography': + specifier: workspace:* + version: link:../typography + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.3.6(react@18.3.1)(storybook@8.3.6) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + '@storybook/react': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.3.6(storybook@8.3.6) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + happy-dom: + specifier: 'catalog:' + version: 15.7.4 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.3.6 + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + vitest: + specifier: 'catalog:' + version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/skeleton: dependencies: '@radix-ui/react-slot': From af574c7532864ebbe5a7c8875237cac76df877b6 Mon Sep 17 00:00:00 2001 From: y09n Date: Thu, 28 Nov 2024 00:50:39 +0900 Subject: [PATCH 08/17] =?UTF-8?q?fix:=20useSemanticElements=20=EA=B7=9C?= =?UTF-8?q?=EC=B9=99=EC=9D=98=20=EB=A1=9C=EA=B7=B8=20=EB=A0=88=EB=B2=A8=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: lower level - useSemanticElements * chore: no new line --- biome.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/biome.json b/biome.json index 147b52a..e5c27a0 100644 --- a/biome.json +++ b/biome.json @@ -4,7 +4,6 @@ "enabled": true, "indentStyle": "space" }, - "organizeImports": { "enabled": true }, @@ -12,6 +11,9 @@ "enabled": true, "rules": { "recommended": true, + "a11y": { + "useSemanticElements": "warn" + }, "suspicious": { "noExplicitAny": "warn" } From eeb9568c0e28cbd669bb981d08be25b48b4e6800 Mon Sep 17 00:00:00 2001 From: y09n Date: Thu, 28 Nov 2024 01:30:02 +0900 Subject: [PATCH 09/17] feat: setup changeset release (#33) --- .changeset/config.json | 2 +- .github/workflows/release.yaml | 35 +++++++++++++++++++++++++++++++ .templates/component/package.json | 1 + packages/Input/package.json | 9 ++++---- packages/skeleton/package.json | 5 ++--- packages/typography/CHANGELOG.md | 7 +++++++ packages/typography/package.json | 3 ++- 7 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/release.yaml create mode 100644 packages/typography/CHANGELOG.md diff --git a/.changeset/config.json b/.changeset/config.json index edef2eb..72688a6 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -7,5 +7,5 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": [] + "ignore": ["@sipe-team/component"] } diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..84fa47b --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,35 @@ +name: Release + +on: + push: + branches: + - main + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: pnpm 설치 + uses: pnpm/action-setup@v4 + with: + run_install: false + - name: Node.js 환경 설정 + uses: actions/setup-node@v4 + with: + cache: pnpm + node-version-file: .nvmrc + registry-url: https://npm.pkg.github.com + scope: "@sipe-team" + - name: 의존성 설치 + run: pnpm install + - name: Create Release Pull Request or Publish to Github Package Registry + id: changesets + uses: changesets/action@v1 + with: + version: pnpm changeset version + publish: pnpm changeset publish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.templates/component/package.json b/.templates/component/package.json index 6afba89..1a8034b 100644 --- a/.templates/component/package.json +++ b/.templates/component/package.json @@ -41,6 +41,7 @@ }, "publishConfig": { "access": "public", + "registry": "https://npm.pkg.github.com", "exports": { ".": { "import": { diff --git a/packages/Input/package.json b/packages/Input/package.json index c5a4d69..99bbc5a 100644 --- a/packages/Input/package.json +++ b/packages/Input/package.json @@ -1,6 +1,6 @@ { - "name": "@sipe-team/component", - "description": "component for Sipe Design System", + "name": "@sipe-team/input", + "description": "Input component for Sipe Design System", "version": "0.0.0", "license": "MIT", "repository": { @@ -9,9 +9,7 @@ }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", @@ -50,6 +48,7 @@ }, "publishConfig": { "access": "public", + "registry": "https://npm.pkg.github.com", "exports": { ".": { "import": { diff --git a/packages/skeleton/package.json b/packages/skeleton/package.json index 4791629..2bf2fb6 100644 --- a/packages/skeleton/package.json +++ b/packages/skeleton/package.json @@ -9,9 +9,7 @@ }, "type": "module", "exports": "./src/index.ts", - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:storybook": "storybook build", @@ -46,6 +44,7 @@ }, "publishConfig": { "access": "public", + "registry": "https://npm.pkg.github.com", "exports": { ".": { "import": { diff --git a/packages/typography/CHANGELOG.md b/packages/typography/CHANGELOG.md new file mode 100644 index 0000000..da54faf --- /dev/null +++ b/packages/typography/CHANGELOG.md @@ -0,0 +1,7 @@ +# @sipe-team/typography + +## 0.0.1 + +### Patch Changes + +- chore: bump version diff --git a/packages/typography/package.json b/packages/typography/package.json index 61ef253..8699108 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/typography", "description": "Typography component for Sipe Design System", - "version": "0.0.0", + "version": "0.0.1", "license": "MIT", "repository": { "type": "git", @@ -48,6 +48,7 @@ }, "publishConfig": { "access": "public", + "registry": "https://npm.pkg.github.com", "exports": { ".": { "import": { From c06c5046cbcd116893c128bf2f0c4487a7f751aa Mon Sep 17 00:00:00 2001 From: y09n Date: Thu, 28 Nov 2024 01:33:26 +0900 Subject: [PATCH 10/17] =?UTF-8?q?feat:=20chromatic=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?(#32)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: setup chromatic * chore: new line --- .github/workflows/chromatic.yaml | 28 + .gitignore | 4 +- .storybook/main.ts | 17 + .storybook/preview.ts | 7 + chromatic.config.json | 4 + package.json | 14 + packages/Input/src/Input.stories.tsx | 1 + packages/skeleton/src/Skeleton.stories.tsx | 1 + .../typography/src/Typography.stories.tsx | 1 + pnpm-lock.yaml | 1628 +++-------------- pnpm-workspace.yaml | 16 +- 11 files changed, 386 insertions(+), 1335 deletions(-) create mode 100644 .github/workflows/chromatic.yaml create mode 100644 .storybook/main.ts create mode 100644 .storybook/preview.ts create mode 100644 chromatic.config.json diff --git a/.github/workflows/chromatic.yaml b/.github/workflows/chromatic.yaml new file mode 100644 index 0000000..aecb5ef --- /dev/null +++ b/.github/workflows/chromatic.yaml @@ -0,0 +1,28 @@ +name: Chromatic + +on: + push: + +jobs: + chromatic: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: pnpm 설치 + uses: pnpm/action-setup@v4 + with: + run_install: false + - name: Node.js 환경 설정 + uses: actions/setup-node@v4 + with: + cache: pnpm + node-version-file: .nvmrc + - name: 의존성 설치 + run: pnpm install + - name: Run Chromatic + uses: chromaui/action@latest + with: + projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} diff --git a/.gitignore b/.gitignore index 40a9506..03641af 100644 --- a/.gitignore +++ b/.gitignore @@ -174,4 +174,6 @@ dist # Finder (MacOS) folder config .DS_Store -*storybook.log \ No newline at end of file +# Storybook +*storybook.log +storybook-static diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 0000000..e459f19 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,17 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: [ + '../packages/**/*.mdx', + '../packages/**/*.stories.@(js|jsx|mjs|ts|tsx)', + ], + addons: [ + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 0000000..836149d --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,7 @@ +import 'sanitize.css'; +import 'sanitize.css/typography.css'; +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/chromatic.config.json b/chromatic.config.json new file mode 100644 index 0000000..2ed4407 --- /dev/null +++ b/chromatic.config.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://www.chromatic.com/config-file.schema.json", + "buildScriptName": "build:storybook" +} diff --git a/package.json b/package.json index c6c2d28..85cc414 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,26 @@ "name": "sipe-design-system", "private": true, "type": "module", + "scripts": { + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006" + }, "devDependencies": { "@biomejs/biome": "catalog:", "@changesets/cli": "^2.27.9", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", "@tsconfig/strictest": "^2.0.5", "@types/node": "^22.8.1", + "chromatic": "^11.19.0", "knip": "catalog:", + "sanitize.css": "^13.0.0", + "storybook": "catalog:", "typescript": "catalog:" }, "packageManager": "pnpm@9.7.1" diff --git a/packages/Input/src/Input.stories.tsx b/packages/Input/src/Input.stories.tsx index 36ad949..ef0b3b6 100644 --- a/packages/Input/src/Input.stories.tsx +++ b/packages/Input/src/Input.stories.tsx @@ -3,6 +3,7 @@ import { useRef, useState } from 'react'; import { Action, Input } from './Input'; const meta = { + title: 'Input', component: Input, parameters: { layout: 'centered', diff --git a/packages/skeleton/src/Skeleton.stories.tsx b/packages/skeleton/src/Skeleton.stories.tsx index 9082bad..ec8d50c 100644 --- a/packages/skeleton/src/Skeleton.stories.tsx +++ b/packages/skeleton/src/Skeleton.stories.tsx @@ -4,6 +4,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Skeleton } from './Skeleton'; const meta = { + title: 'Skeleton', component: Skeleton, parameters: { layout: 'centered', diff --git a/packages/typography/src/Typography.stories.tsx b/packages/typography/src/Typography.stories.tsx index 0fffbe5..a331c40 100644 --- a/packages/typography/src/Typography.stories.tsx +++ b/packages/typography/src/Typography.stories.tsx @@ -2,6 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react'; import { Typography } from './Typography'; const meta = { + title: 'Typography', component: Typography, parameters: { layout: 'centered', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 135dcca..ea902d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,26 +10,26 @@ catalogs: specifier: ^1.9.4 version: 1.9.4 '@storybook/addon-essentials': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/addon-interactions': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/addon-links': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/blocks': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/react': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/react-vite': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 '@storybook/test': - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 happy-dom: specifier: ^15.7.4 version: 15.7.4 @@ -37,8 +37,8 @@ catalogs: specifier: ^5.34.1 version: 5.34.1 storybook: - specifier: ^8.3.6 - version: 8.3.6 + specifier: ^8.4.5 + version: 8.4.5 tsup: specifier: ^8.3.5 version: 8.3.5 @@ -59,15 +59,45 @@ importers: '@changesets/cli': specifier: ^2.27.9 version: 2.27.9 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@tsconfig/strictest': specifier: ^2.0.5 version: 2.0.5 '@types/node': specifier: ^22.8.1 version: 22.8.1 + chromatic: + specifier: ^11.19.0 + version: 11.19.0 knip: specifier: 'catalog:' version: 5.34.1(@types/node@22.8.1)(typescript@5.6.3) + sanitize.css: + specifier: ^13.0.0 + version: 13.0.0 + storybook: + specifier: 'catalog:' + version: 8.4.5(prettier@2.8.8) typescript: specifier: 'catalog:' version: 5.6.3 @@ -79,25 +109,25 @@ importers: version: 1.9.4 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.3.6(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@storybook/test': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -109,7 +139,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.3.6 + version: 8.4.5(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) @@ -120,45 +150,48 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) - packages/divider: + packages/Input: dependencies: - clsx: - specifier: ^2.1.1 - version: 2.1.1 + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + classnames: + specifier: ^2.5.1 + version: 2.5.1 devDependencies: '@biomejs/biome': specifier: 'catalog:' version: 1.9.4 - '@sipe-team/typography': - specifier: workspace:* - version: link:../typography '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.3.6(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@storybook/test': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.0) '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -170,7 +203,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.3.6 + version: 8.4.5(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) @@ -181,39 +214,39 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) - packages/skeleton: + packages/divider: dependencies: - '@radix-ui/react-slot': - specifier: ^1.1.0 - version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + clsx: + specifier: ^2.1.1 + version: 2.1.1 devDependencies: '@biomejs/biome': specifier: 'catalog:' version: 1.9.4 - '@faker-js/faker': - specifier: ^9.2.0 - version: 9.2.0 + '@sipe-team/typography': + specifier: workspace:* + version: link:../typography '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.3.6(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@storybook/test': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -231,7 +264,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.3.6 + version: 8.4.5(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) @@ -242,48 +275,45 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) - packages/Input: + packages/skeleton: dependencies: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.12)(react@18.3.1) - classnames: - specifier: ^2.5.1 - version: 2.5.1 devDependencies: '@biomejs/biome': specifier: 'catalog:' version: 1.9.4 + '@faker-js/faker': + specifier: ^9.2.0 + version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.3.6(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@storybook/test': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@testing-library/user-event': - specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.4.0) '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -295,7 +325,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.3.6 + version: 8.4.5(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) @@ -323,25 +353,25 @@ importers: version: 9.2.0 '@storybook/addon-essentials': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-interactions': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/addon-links': specifier: 'catalog:' - version: 8.3.6(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/blocks': specifier: 'catalog:' - version: 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) '@storybook/react': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) '@storybook/react-vite': specifier: 'catalog:' - version: 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@storybook/test': specifier: 'catalog:' - version: 8.3.6(storybook@8.3.6) + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -359,7 +389,7 @@ importers: version: 18.3.1 storybook: specifier: 'catalog:' - version: 8.3.6 + version: 8.4.5(prettier@2.8.8) tsup: specifier: 'catalog:' version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) @@ -446,9 +476,6 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@base2/pretty-print-object@1.0.1': - resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -563,12 +590,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.23.1': - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.24.0': resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} @@ -581,12 +602,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.23.1': - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.24.0': resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} engines: {node: '>=18'} @@ -599,12 +614,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.23.1': - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.24.0': resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} engines: {node: '>=18'} @@ -617,12 +626,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.23.1': - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.24.0': resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} engines: {node: '>=18'} @@ -635,12 +638,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.23.1': - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.24.0': resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} engines: {node: '>=18'} @@ -653,12 +650,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.23.1': - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.24.0': resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} engines: {node: '>=18'} @@ -671,12 +662,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.24.0': resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} engines: {node: '>=18'} @@ -689,12 +674,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.24.0': resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} engines: {node: '>=18'} @@ -707,12 +686,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.23.1': - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.24.0': resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} engines: {node: '>=18'} @@ -725,12 +698,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.23.1': - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.24.0': resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} engines: {node: '>=18'} @@ -743,12 +710,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.23.1': - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.24.0': resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} engines: {node: '>=18'} @@ -761,12 +722,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.23.1': - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.24.0': resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} engines: {node: '>=18'} @@ -779,12 +734,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.23.1': - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.24.0': resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} engines: {node: '>=18'} @@ -797,12 +746,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.23.1': - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.24.0': resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} engines: {node: '>=18'} @@ -815,12 +758,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.23.1': - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.24.0': resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} engines: {node: '>=18'} @@ -833,12 +770,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.23.1': - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.24.0': resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} engines: {node: '>=18'} @@ -851,12 +782,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.23.1': - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.24.0': resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} engines: {node: '>=18'} @@ -869,24 +794,12 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.24.0': resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.23.1': - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.24.0': resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} engines: {node: '>=18'} @@ -899,12 +812,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.24.0': resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} engines: {node: '>=18'} @@ -917,12 +824,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.23.1': - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.24.0': resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} engines: {node: '>=18'} @@ -935,12 +836,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.23.1': - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.24.0': resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} engines: {node: '>=18'} @@ -953,12 +848,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.23.1': - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.24.0': resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} engines: {node: '>=18'} @@ -971,12 +860,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.23.1': - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.24.0': resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} engines: {node: '>=18'} @@ -994,7 +877,7 @@ packages: '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: - typescript: '>= 4.3.x' + typescript: ^5.6.3 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: typescript: @@ -1168,110 +1051,105 @@ packages: engines: {node: '>=8.10'} hasBin: true - '@storybook/addon-actions@8.3.6': - resolution: {integrity: sha512-nOqgl0WoZK2KwjaABaXMoIgrIHOQl9inOzJvqQau0HOtsvnXGXYfJXYnpjZenoZDoZXKbUDl0U2haDFx2a2fJw==} + '@storybook/addon-actions@8.4.5': + resolution: {integrity: sha512-rbB19uiGJ61XHbKIbS1a9bUS6re5L8rT5NMNeEJhCxXRpFUPrlTXMSoD/Pgcn3ENeEMVZsm8/eCzxAVgAP3Mgg==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-backgrounds@8.3.6': - resolution: {integrity: sha512-yBn+a8i5OJzJaX6Bx5MAkfei7c2nvq+RRmvuyvxw11rtDGR6Nz4OBBe56reWxo868wVUggpRTPJCMVe5tDYgVg==} + '@storybook/addon-backgrounds@8.4.5': + resolution: {integrity: sha512-FeMt4qHCMYDQiLGGDKiRuSPXFup2WXOaZSdL137v1W36wEL/vGkK1A5iQt1qJ8MZzL5WZQuedox8rSybFy7eow==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-controls@8.3.6': - resolution: {integrity: sha512-9IMLHgtWPuFoRCt3hDsIk1FbkK5SlCMDW1DDwtTBIeWYYZLvptS42+vGVTeQ8v5SejmVzZkzuUdzu3p4sb3IcA==} + '@storybook/addon-controls@8.4.5': + resolution: {integrity: sha512-RVTtDDuESLYc1+SJQv2kI7wzBddzAS9uoEe8P75quN6S4pC0GxAB6xirWZ2+WOcba4eHosY+PxMwuBXQfH78Ew==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-docs@8.3.6': - resolution: {integrity: sha512-31Rk1TOhDIzGM2wNCUIB1xKuWtArW0D2Puua9warEXlQ3FtvwmxnPrwbIzw6ufYZDWPwl9phDYTcRh8WqZIoGg==} + '@storybook/addon-docs@8.4.5': + resolution: {integrity: sha512-zPELIl7wXormOylVaaSpkUIuuCCxrO+OFPMKZnlENt6zSReyy0dJu4V0tzfV8FCw+V4D6Y4wrLRk/TIG951Ojw==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-essentials@8.3.6': - resolution: {integrity: sha512-MQPFvThlGU7wlda1xhBPQCmDh90cSSZ31OsVs1uC5kJh0aLbY2gYXPurq1G54kzrYo8SMfBxsXrCplz8Ir6UTg==} + '@storybook/addon-essentials@8.4.5': + resolution: {integrity: sha512-AxetQo/zSPIu3RZqWG2opwAz22Bb+jpf1nWbHp0kEpCrBemcWd8X2gonVmXNOC1PDKNl3jcWyc3lmg/+3mxjYg==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-highlight@8.3.6': - resolution: {integrity: sha512-A7uU+1OPVXGpkklEUJjSl2VEEDLCSNvmffUJlvW1GjajsNFIHOW2CSD+KnfFlQyPxyVbnWAYLqUP4XJxoqrvDw==} + '@storybook/addon-highlight@8.4.5': + resolution: {integrity: sha512-sMA7v+4unaKY+5RDhow6lLncJqNX9ZLUnBIt3vzY1ntUsOYVwykAY1Hq4Ysj0luCBXjJJdJ6223ylrycnb7Ilw==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-interactions@8.3.6': - resolution: {integrity: sha512-Y0YUJj0oE1+6DFkaTPXM/8+dwTSoy0ltj2Sn2KOTJYzxKQYXBp8TlUv0QOQiGH7o/GKXIWek/VlTuvG/JEeiWw==} + '@storybook/addon-interactions@8.4.5': + resolution: {integrity: sha512-s6R8XVD8LTp+LQTDbhtDjDLE6S44I7FtMLxPdMNwN9VEJjBk01NONLDuGDpNq5o/0bnybA3rMHk9+3afsgzidQ==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-links@8.3.6': - resolution: {integrity: sha512-EGEH/kEjndEldbqyiJ8XSASkxqwzL/lgA/+6mHpa6Ljxhk1s5IMGcdA1ymJYJ2BpNdkUxRj/uxAa38eGcQiJ/g==} + '@storybook/addon-links@8.4.5': + resolution: {integrity: sha512-ac3OtplFdrPw/2jtLnteuVllwu2yCe3sgKJS9AbdYMT/65OW47M7oDnzcpRPsDGufrKlDMBJXXEv4SfTtlT+rg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.6 + storybook: ^8.4.5 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.3.6': - resolution: {integrity: sha512-VHWeGgYjhzhwb2WAqYW/qyEPqg5pwKR/XqFfd+3tEirUs/64olL1l3lzLwZ8Cm07cJ81T8Z4myywb9kObZfQlw==} + '@storybook/addon-measure@8.4.5': + resolution: {integrity: sha512-+sNjew991YaoXQyWWloFybjEGrDO40Jk6w8BgZs2X7oc3D5t/6oFzvyC862U++LGqKFA3quXDeBjEb92CI9cRA==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-outline@8.3.6': - resolution: {integrity: sha512-+VXpM8SIHX2cn30qLlMvER9/6iioFRSn2sAfLniqy4RrcQmcMP+qgE7ZzbzExt7cneJh3VFsYqBS/HElu14Vgg==} + '@storybook/addon-outline@8.4.5': + resolution: {integrity: sha512-XlpN98AUDnWQWNFSFVm+HkRUzm3xIUMjBGTkv6HsL6zt6XoJ+LsQMca+PPtYqlBJA+5CU41xMDaG8HC/p+sd3A==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-toolbars@8.3.6': - resolution: {integrity: sha512-FJH+lRoZXENfpMR/G09ZqB0TmL/k6bv07GN1ysoVs420tKRgjfz6uXaZz5COrhcdISr5mTNmG+mw9x7xXTfX3Q==} + '@storybook/addon-toolbars@8.4.5': + resolution: {integrity: sha512-hOq5560ONOU/qrslrwosWzxnC4nrF8HZWD43ciKwtethm8HuptU2M+Jrui1CRsMScEZLopWWVE9o0vJMdKpIFQ==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/addon-viewport@8.3.6': - resolution: {integrity: sha512-bL51v837W1cng/+0pypkoLsWKWmvux96zLOzqLCpcWAQ4OSMhW3foIWpCiFwMG/KY+GanoOocTx6i7j5hLtuTA==} + '@storybook/addon-viewport@8.4.5': + resolution: {integrity: sha512-l7Y41gIbJAsIN/QCg1QJ9sr61FLz1C/imUotcDej41tOHxUTSQOlXpNtVnfhUM1vGQc0yNpP3pVxj8BpXi0cAw==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/blocks@8.3.6': - resolution: {integrity: sha512-Oc5jU6EzfsENjrd91KcKyEKBh60RT+8uyLi1RIrymC2C/mzZMTEoNIrbnQt0eIqbjlHxn6y9JMJxHu4NJ4EmZg==} + '@storybook/blocks@8.4.5': + resolution: {integrity: sha512-Z+LHauSqm3A4HBR9pUEf9KQhD3/3xYMt0FXgA+GHCAyDa6lFeD1C6r9Y2nlT+9dt8gv9B9oygTZvV6GqFVyRSQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.6 + storybook: ^8.4.5 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.3.6': - resolution: {integrity: sha512-AF4+oFe1mvIHrLvaYsv8B0YSlXQtSlKTKwrXnUbcAbeGRwMmFKA1t3VyAcXV0yB9MtZ8YJsA/uKRkgGEaN7wJQ==} + '@storybook/builder-vite@8.4.5': + resolution: {integrity: sha512-fZXWQcG5ccHCAS8NbyUwu8/5aVlZr4zmWbvKxoyvcVeuxJIsWa9RUS8Mtu7hdi+r/Wk8AlpckqhHo6go0iaDcA==} peerDependencies: - '@preact/preset-vite': '*' - storybook: ^8.3.6 - typescript: '>= 4.3.x' + storybook: ^8.4.5 vite: ^4.0.0 || ^5.0.0 - vite-plugin-glimmerx: '*' - peerDependenciesMeta: - '@preact/preset-vite': - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true - '@storybook/components@8.3.6': - resolution: {integrity: sha512-TXuoGZY7X3iixF45lXkYOFk8k2q9OHcqHyHyem1gATLLQXgyOvDgzm+VB7uKBNzssRQPEE+La70nfG8bq/viRw==} + '@storybook/components@8.4.5': + resolution: {integrity: sha512-2PdnKfqNNv3sO7qILgWXiNvmLOi503oN9OMemNCQjTIvdvySc5JpS9/eClwcl/JfmE4qHdSHZr8dLLkBM9S7+Q==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.3.6': - resolution: {integrity: sha512-frwfgf0EJ7QL29DWZ5bla/g0eOOWqJGd14t+VUBlpP920zB6sdDfo7+p9JoCjD9u08lGeFDqbPNKayUk+0qDag==} + '@storybook/core@8.4.5': + resolution: {integrity: sha512-aB1sQNX5nRoUAqg5u1py0MuR/VPd6c6PhECa4rW6pmr7kZcfyP4PP6UFpXuN71ypTQlkRE3Vc5PQZ3gLhE9o3g==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true - '@storybook/csf-plugin@8.3.6': - resolution: {integrity: sha512-TJyJPFejO6Gyr3+bXqE/+LomQbivvfHEbee/GwtlRj0XF4KQlqnvuEdEdcK25JbD0NXT8AbyncEUmjoxE7ojQw==} + '@storybook/csf-plugin@8.4.5': + resolution: {integrity: sha512-qd2rQTglOTS+phQmTbNTXNjNyxdGvolaqHqDNMw3Vf6h9o3U+mLkwnDWNVnQ9oqvOoUEAqpBthgwzU9FhkIk+A==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 '@storybook/csf@0.1.11': resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} @@ -1286,45 +1164,45 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/instrumenter@8.3.6': - resolution: {integrity: sha512-0RowbKwoB/s7rtymlnKNiyWN1Z3ZK5mwgzVjlRmzxDL8hrdi5KDjTNExuJTRR3ZaBP2RR0/I3m/n0p9JhHAZvg==} + '@storybook/instrumenter@8.4.5': + resolution: {integrity: sha512-8qM35FkueuRpJr0zA6ENvhQICbo+iKL1ln450DwV1kKJtc41KdbA3CuCvtZ/FnoPsFnwdtPjhhICFtRt8LRTSg==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/manager-api@8.3.6': - resolution: {integrity: sha512-Xt5VFZcL+G/9uzaHjzWFhxRNrP+4rPhSRKEvCZorAbC9+Hv+ZDs1JSZS5wMb4WKpXBZ0rwDVOLwngqbVtfRHuQ==} + '@storybook/manager-api@8.4.5': + resolution: {integrity: sha512-t39JaMy3UX4StbUH/tIDcaflBDxTcyIq853wQtBMhVL3e1+Dw3MIiiG/5bw79HU4R7kSmPVLXIIbV3FmXkq7KQ==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.3.6': - resolution: {integrity: sha512-/Wxvb7wbI2O2iH63arRQQyyojA630vibdshkFjuC/u1nYdptEV1jkxa0OYmbZbKCn4/ze6uH4hfsKOpDPV9SWg==} + '@storybook/preview-api@8.4.5': + resolution: {integrity: sha512-MKIZ2jQO/3cUdsT57eq8jRgB6inALo9BxrQ88f7mqzltOkMvADvTAY6y8JZqTUoDzWTH/ny/8SGGdtpqlxRuiQ==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.3.6': - resolution: {integrity: sha512-9BO6VXIdli4GHSfiP/Z0gwAf7oQig3D/yWK2U1+91UWDV8nIAgnNBAi76U4ORC6MiK5MdkDfIikIxnLLeLnahA==} + '@storybook/react-dom-shim@8.4.5': + resolution: {integrity: sha512-YTWTfPagptEYXJsnxAl3zP97Ev0zebtaEV0WgjGaEeumr+zsfgKKwzzHxgrtumBmDzwkuKlzFwlQB5A8keOIGA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/react-vite@8.3.6': - resolution: {integrity: sha512-KXi4ZT4X7DsB4OOIWeR1XMH/Oz6Rp4TlWBNx/TgSEDGYEkPooqZK/O0S+G+VIsrRGQUf/57YqO73mP6kNluxTA==} + '@storybook/react-vite@8.4.5': + resolution: {integrity: sha512-b62gapvUmyfR8W4g/eDkqJUtgRDz28LdLyJMeAN+MpPiqZ6ethfJc8/GseVXapVtIaRmqcEQ+Ix99hYfVK4ksw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.6 + storybook: ^8.4.5 vite: ^4.0.0 || ^5.0.0 - '@storybook/react@8.3.6': - resolution: {integrity: sha512-s3COryqIOYK7urgZaCPb77zlxGjPKr6dIsYmblQJcsFY2ZlG2x0Ysm8b5oRgD8Pv71hCJ0PKYA4RzDgBVYJS9A==} + '@storybook/react@8.4.5': + resolution: {integrity: sha512-2+p4aGEdGOnu2XNhnMi1B8GPeszm34P905HgqGD1cuz9gMt7x/bgZQaVxs6kpHZ3Hb6V9qp62La2dbAYatHdSw==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.3.6 + '@storybook/test': 8.4.5 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.3.6 + storybook: ^8.4.5 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -1332,15 +1210,15 @@ packages: typescript: optional: true - '@storybook/test@8.3.6': - resolution: {integrity: sha512-WIc8LzK9jaEw+e3OiweEM2j3cppPzsWod59swuf6gDBf176EQLIyjtVc+Kh3qO4NNkcL+lwmqaLPjOxlBLaDbg==} + '@storybook/test@8.4.5': + resolution: {integrity: sha512-mHsRc6m60nfcEBsjvUkKz+Jnz0or4WH5jmJ1VL2pGKO4VzESCPqAwDnwDqP2YyeSQ0b/MAKUT5kdoLE2RE2eVw==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.4.5 - '@storybook/theming@8.3.6': - resolution: {integrity: sha512-LQjUk6GXRW9ELkoBKuqzQKFUW+ajfGPfVELcfs3/VQX61VhthJ4olov4bGPc04wsmmFMgN/qODxT485IwOHfPQ==} + '@storybook/theming@8.4.5': + resolution: {integrity: sha512-45e/jeG4iuqdZcHg3PbB6dwXQTwlnnEB7r/QcVExyC7ibrkTnjUfvxzyUw4mmU3CXETFGD5EcUobFkgK+/aPxQ==} peerDependencies: - storybook: ^8.3.6 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} @@ -1393,51 +1271,18 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - '@types/escodegen@0.0.6': - resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - - '@types/estree@0.0.51': - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - - '@types/find-cache-dir@3.2.1': - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - - '@types/lodash@4.17.12': - resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} - '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -1450,33 +1295,15 @@ packages: '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react@18.3.12': resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/resolve@1.20.6': resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -1518,24 +1345,6 @@ packages: '@vitest/utils@2.1.4': resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -1585,9 +1394,6 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1615,10 +1421,6 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1643,10 +1445,6 @@ packages: peerDependencies: esbuild: '>=0.18' - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1681,6 +1479,18 @@ packages: resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} engines: {node: '>= 14.16.0'} + chromatic@11.19.0: + resolution: {integrity: sha512-3JZ1Tt26N2uDok6nXApsvHmTnkrgE0HClq1bmfF5WmCJ61bMN80CObhuFc7kiBCv5QbE7GOe3rpy3MiuZ4h9IA==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -1711,9 +1521,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1721,24 +1528,9 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -1752,14 +1544,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -1784,18 +1568,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -1820,9 +1596,6 @@ packages: easy-table@1.2.0: resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.47: resolution: {integrity: sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==} @@ -1832,14 +1605,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -1860,9 +1625,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -1873,11 +1635,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.24.0: resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} engines: {node: '>=18'} @@ -1887,23 +1644,11 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -1914,18 +1659,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} - express@4.21.1: - resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} - engines: {node: '>= 0.10.0'} - extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -1952,14 +1689,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} - - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1975,18 +1704,6 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -2014,9 +1731,6 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2076,23 +1790,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-heading-rank@3.0.0: - resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-to-string@3.0.1: - resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} - - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} @@ -2115,14 +1812,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-absolute-url@4.0.1: - resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -2160,10 +1849,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -2222,9 +1907,6 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - knip@5.34.1: resolution: {integrity: sha512-MwQjEWBxsi7MnTL3JpLJwYRhqD1262Fv+TylMYDyZRAVJMmEs4y0qie5zv8VjU5DBSGoEs35Ssu7I/2klNOQgw==} engines: {node: '>=18.6.0'} @@ -2288,56 +1970,22 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - markdown-to-jsx@7.5.0: - resolution: {integrity: sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==} - engines: {node: '>= 10'} - peerDependencies: - react: '>= 0.14.0' - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} minimatch@3.1.2: @@ -2358,9 +2006,6 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2372,10 +2017,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -2383,14 +2024,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2447,10 +2080,6 @@ packages: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2470,9 +2099,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2503,10 +2129,6 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - polished@4.3.1: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} @@ -2554,13 +2176,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -2568,27 +2183,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - - react-colorful@5.6.1: - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -2603,21 +2200,9 @@ packages: peerDependencies: react: ^18.3.1 - react-element-to-jsx-string@15.0.0: - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -2641,12 +2226,6 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - rehype-external-links@3.0.0: - resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} - - rehype-slug@6.0.0: - resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2667,12 +2246,12 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sanitize.css@13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -2685,21 +2264,10 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -2716,10 +2284,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2750,9 +2314,6 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -2762,16 +2323,17 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - storybook@8.3.6: - resolution: {integrity: sha512-9GVbtej6ZzPRUM7KRQ7848506FfHrUiJGqPuIQdoSJd09EmuEoLjmLAgEOmrHBQKgGYMaM7Vh9GsTLim6vwZTQ==} + storybook@8.4.5: + resolution: {integrity: sha512-9tfgabXnMibYp3SvoaJXXMD63Pw0SA9Hnf5v6TxysCYZs4DZ/04fAkK+9RW+K4C5JkV83qXMMlrsPj766R47fg==} hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -2825,9 +2387,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - telejson@7.2.0: - resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -2872,10 +2431,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -2920,10 +2475,6 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} @@ -2932,27 +2483,10 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - unplugin@1.15.0: resolution: {integrity: sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==} engines: {node: '>=14.0.0'} @@ -2968,24 +2502,13 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - vite-node@2.1.4: resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3238,8 +2761,6 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@base2/pretty-print-object@1.0.1': {} - '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -3420,213 +2941,141 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.23.1': - optional: true - '@esbuild/aix-ppc64@0.24.0': optional: true '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.23.1': - optional: true - '@esbuild/android-arm64@0.24.0': optional: true '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.23.1': - optional: true - '@esbuild/android-arm@0.24.0': optional: true '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.23.1': - optional: true - '@esbuild/android-x64@0.24.0': optional: true '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.23.1': - optional: true - '@esbuild/darwin-arm64@0.24.0': optional: true '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.23.1': - optional: true - '@esbuild/darwin-x64@0.24.0': optional: true '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.23.1': - optional: true - '@esbuild/freebsd-arm64@0.24.0': optional: true '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.23.1': - optional: true - '@esbuild/freebsd-x64@0.24.0': optional: true '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.23.1': - optional: true - '@esbuild/linux-arm64@0.24.0': optional: true '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.23.1': - optional: true - '@esbuild/linux-arm@0.24.0': optional: true '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.23.1': - optional: true - '@esbuild/linux-ia32@0.24.0': optional: true '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.23.1': - optional: true - '@esbuild/linux-loong64@0.24.0': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.23.1': - optional: true - '@esbuild/linux-mips64el@0.24.0': optional: true '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.23.1': - optional: true - '@esbuild/linux-ppc64@0.24.0': optional: true '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.23.1': - optional: true - '@esbuild/linux-riscv64@0.24.0': optional: true '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.23.1': - optional: true - '@esbuild/linux-s390x@0.24.0': optional: true '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.23.1': - optional: true - '@esbuild/linux-x64@0.24.0': optional: true '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.23.1': - optional: true - '@esbuild/netbsd-x64@0.24.0': optional: true - '@esbuild/openbsd-arm64@0.23.1': - optional: true - '@esbuild/openbsd-arm64@0.24.0': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.23.1': - optional: true - '@esbuild/openbsd-x64@0.24.0': optional: true '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.23.1': - optional: true - '@esbuild/sunos-x64@0.24.0': optional: true '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.23.1': - optional: true - '@esbuild/win32-arm64@0.24.0': optional: true '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.23.1': - optional: true - '@esbuild/win32-ia32@0.24.0': optional: true '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.23.1': - optional: true - '@esbuild/win32-x64@0.24.0': optional: true @@ -3786,175 +3235,151 @@ snapshots: ignore: 5.3.2 p-map: 4.0.0 - '@storybook/addon-actions@8.3.6(storybook@8.3.6)': + '@storybook/addon-actions@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.3.6(storybook@8.3.6)': + '@storybook/addon-backgrounds@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.3.6(storybook@8.3.6)': + '@storybook/addon-controls@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - lodash: 4.17.21 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.3.6(storybook@8.3.6)': + '@storybook/addon-docs@8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) - '@storybook/blocks': 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) - '@storybook/csf-plugin': 8.3.6(storybook@8.3.6) - '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) - '@types/react': 18.3.12 - fs-extra: 11.2.0 + '@storybook/blocks': 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/csf-plugin': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rehype-external-links: 3.0.0 - rehype-slug: 6.0.0 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: + - '@types/react' - webpack-sources - '@storybook/addon-essentials@8.3.6(storybook@8.3.6)': - dependencies: - '@storybook/addon-actions': 8.3.6(storybook@8.3.6) - '@storybook/addon-backgrounds': 8.3.6(storybook@8.3.6) - '@storybook/addon-controls': 8.3.6(storybook@8.3.6) - '@storybook/addon-docs': 8.3.6(storybook@8.3.6) - '@storybook/addon-highlight': 8.3.6(storybook@8.3.6) - '@storybook/addon-measure': 8.3.6(storybook@8.3.6) - '@storybook/addon-outline': 8.3.6(storybook@8.3.6) - '@storybook/addon-toolbars': 8.3.6(storybook@8.3.6) - '@storybook/addon-viewport': 8.3.6(storybook@8.3.6) - storybook: 8.3.6 + '@storybook/addon-essentials@8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8))': + dependencies: + '@storybook/addon-actions': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-backgrounds': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-controls': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-docs': 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-highlight': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-measure': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-outline': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-toolbars': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-viewport': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 transitivePeerDependencies: + - '@types/react' - webpack-sources - '@storybook/addon-highlight@8.3.6(storybook@8.3.6)': + '@storybook/addon-highlight@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/addon-interactions@8.3.6(storybook@8.3.6)': + '@storybook/addon-interactions@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.3.6(storybook@8.3.6) - '@storybook/test': 8.3.6(storybook@8.3.6) + '@storybook/instrumenter': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/test': 8.4.5(storybook@8.4.5(prettier@2.8.8)) polished: 4.3.1 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-links@8.3.6(react@18.3.1)(storybook@8.3.6)': + '@storybook/addon-links@8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.3.6(storybook@8.3.6)': + '@storybook/addon-measure@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.3.6(storybook@8.3.6)': + '@storybook/addon-outline@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.3.6(storybook@8.3.6)': + '@storybook/addon-toolbars@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/addon-viewport@8.3.6(storybook@8.3.6)': + '@storybook/addon-viewport@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: memoizerific: 1.11.3 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/blocks@8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)': + '@storybook/blocks@8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.11 - '@storybook/global': 5.0.0 '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/lodash': 4.17.12 - color-convert: 2.0.1 - dequal: 2.0.3 - lodash: 4.17.21 - markdown-to-jsx: 7.5.0(react@18.3.1) - memoizerific: 1.11.3 - polished: 4.3.1 - react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.3.6 - telejson: 7.2.0 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 - util-deprecate: 1.0.2 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.3.6(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1))': + '@storybook/builder-vite@8.4.5(storybook@8.4.5(prettier@2.8.8))(vite@5.4.10(@types/node@22.8.1))': dependencies: - '@storybook/csf-plugin': 8.3.6(storybook@8.3.6) - '@types/find-cache-dir': 3.2.1 + '@storybook/csf-plugin': 8.4.5(storybook@8.4.5(prettier@2.8.8)) browser-assert: 1.2.1 - es-module-lexer: 1.5.4 - express: 4.21.1 - find-cache-dir: 3.3.2 - fs-extra: 11.2.0 - magic-string: 0.30.12 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) ts-dedent: 2.2.0 vite: 5.4.10(@types/node@22.8.1) - optionalDependencies: - typescript: 5.6.3 transitivePeerDependencies: - - supports-color - webpack-sources - '@storybook/components@8.3.6(storybook@8.3.6)': + '@storybook/components@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/core@8.3.6': + '@storybook/core@8.4.5(prettier@2.8.8)': dependencies: '@storybook/csf': 0.1.11 - '@types/express': 4.17.21 better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.23.1 - esbuild-register: 3.6.0(esbuild@0.23.1) - express: 4.21.1 + esbuild: 0.24.0 + esbuild-register: 3.6.0(esbuild@0.24.0) jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.9 semver: 7.6.3 util: 0.12.5 ws: 8.18.0 + optionalDependencies: + prettier: 2.8.8 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@storybook/csf-plugin@8.3.6(storybook@8.3.6)': + '@storybook/csf-plugin@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) unplugin: 1.15.0 transitivePeerDependencies: - webpack-sources @@ -3970,96 +3395,78 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.3.6(storybook@8.3.6)': + '@storybook/instrumenter@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.4 - storybook: 8.3.6 - util: 0.12.5 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/manager-api@8.3.6(storybook@8.3.6)': + '@storybook/manager-api@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/preview-api@8.3.6(storybook@8.3.6)': + '@storybook/preview-api@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/react-dom-shim@8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)': + '@storybook/react-dom-shim@8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/react-vite@8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1))': + '@storybook/react-vite@8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) '@rollup/pluginutils': 5.1.3(rollup@4.24.2) - '@storybook/builder-vite': 8.3.6(storybook@8.3.6)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) - '@storybook/react': 8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3) + '@storybook/builder-vite': 8.4.5(storybook@8.4.5(prettier@2.8.8))(vite@5.4.10(@types/node@22.8.1)) + '@storybook/react': 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.12 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) tsconfig-paths: 4.2.0 vite: 5.4.10(@types/node@22.8.1) transitivePeerDependencies: - - '@preact/preset-vite' - '@storybook/test' - rollup - supports-color - typescript - - vite-plugin-glimmerx - webpack-sources - '@storybook/react@8.3.6(@storybook/test@8.3.6(storybook@8.3.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6)(typescript@5.6.3)': + '@storybook/react@8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)': dependencies: - '@storybook/components': 8.3.6(storybook@8.3.6) + '@storybook/components': 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.3.6(storybook@8.3.6) - '@storybook/preview-api': 8.3.6(storybook@8.3.6) - '@storybook/react-dom-shim': 8.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.3.6) - '@storybook/theming': 8.3.6(storybook@8.3.6) - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 22.8.1 - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - acorn-walk: 7.2.0 - escodegen: 2.1.0 - html-tags: 3.3.1 - prop-types: 15.8.1 + '@storybook/manager-api': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/preview-api': 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react-dom-shim': 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/theming': 8.4.5(storybook@8.4.5(prettier@2.8.8)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - semver: 7.6.3 - storybook: 8.3.6 - ts-dedent: 2.2.0 - type-fest: 2.19.0 - util-deprecate: 1.0.2 + storybook: 8.4.5(prettier@2.8.8) optionalDependencies: - '@storybook/test': 8.3.6(storybook@8.3.6) + '@storybook/test': 8.4.5(storybook@8.4.5(prettier@2.8.8)) typescript: 5.6.3 - '@storybook/test@8.3.6(storybook@8.3.6)': + '@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.3.6(storybook@8.3.6) + '@storybook/instrumenter': 8.4.5(storybook@8.4.5(prettier@2.8.8)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.3.6 - util: 0.12.5 + storybook: 8.4.5(prettier@2.8.8) - '@storybook/theming@8.3.6(storybook@8.3.6)': + '@storybook/theming@8.4.5(storybook@8.4.5(prettier@2.8.8))': dependencies: - storybook: 8.3.6 + storybook: 8.4.5(prettier@2.8.8) '@testing-library/dom@10.4.0': dependencies: @@ -4130,56 +3537,17 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 22.8.1 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 22.8.1 - '@types/doctrine@0.0.9': {} - '@types/escodegen@0.0.6': {} - - '@types/estree@0.0.51': {} - '@types/estree@1.0.6': {} - '@types/express-serve-static-core@4.19.6': - dependencies: - '@types/node': 22.8.1 - '@types/qs': 6.9.16 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - - '@types/express@4.17.21': - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.16 - '@types/serve-static': 1.15.7 - - '@types/find-cache-dir@3.2.1': {} - '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 22.8.1 - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/http-errors@2.0.4': {} - - '@types/lodash@4.17.12': {} - '@types/mdx@2.0.13': {} - '@types/mime@1.3.5': {} - '@types/minimatch@5.1.2': {} '@types/node@12.20.55': {} @@ -4190,10 +3558,6 @@ snapshots: '@types/prop-types@15.7.13': {} - '@types/qs@6.9.16': {} - - '@types/range-parser@1.2.7': {} - '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 @@ -4201,23 +3565,8 @@ snapshots: '@types/resolve@1.20.6': {} - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.8.1 - - '@types/serve-static@1.15.7': - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 22.8.1 - '@types/send': 0.17.4 - - '@types/unist@3.0.3': {} - '@types/uuid@9.0.8': {} - '@ungap/structured-clone@1.2.0': {} - '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -4280,19 +3629,6 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-jsx@5.3.2(acorn@7.4.1): - dependencies: - acorn: 7.4.1 - - acorn-walk@7.2.0: {} - - acorn@7.4.1: {} - acorn@8.14.0: {} aggregate-error@3.1.0: @@ -4328,8 +3664,6 @@ snapshots: aria-query@5.3.2: {} - array-flatten@1.1.1: {} - array-union@2.1.0: {} assertion-error@2.0.1: {} @@ -4352,23 +3686,6 @@ snapshots: dependencies: is-windows: 1.0.2 - body-parser@1.20.3: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -4396,8 +3713,6 @@ snapshots: esbuild: 0.24.0 load-tsconfig: 0.2.5 - bytes@3.1.2: {} - cac@6.7.14: {} call-bind@1.0.7: @@ -4436,6 +3751,8 @@ snapshots: dependencies: readdirp: 4.0.2 + chromatic@11.19.0: {} + ci-info@3.9.0: {} classnames@2.5.1: {} @@ -4455,24 +3772,12 @@ snapshots: commander@4.1.1: {} - commondir@1.0.1: {} - concat-map@0.0.1: {} consola@3.2.3: {} - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} - - cookie@0.7.1: {} - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -4489,10 +3794,6 @@ snapshots: csstype@3.1.3: {} - debug@2.6.9: - dependencies: - ms: 2.0.0 - debug@4.3.7: dependencies: ms: 2.1.3 @@ -4512,12 +3813,8 @@ snapshots: define-lazy-prop@2.0.0: {} - depd@2.0.0: {} - dequal@2.0.3: {} - destroy@1.2.0: {} - detect-indent@6.1.0: {} dir-glob@3.0.1: @@ -4540,18 +3837,12 @@ snapshots: optionalDependencies: wcwidth: 1.0.1 - ee-first@1.1.1: {} - electron-to-chromium@1.5.47: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -4570,12 +3861,10 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.5.4: {} - - esbuild-register@3.6.0(esbuild@0.23.1): + esbuild-register@3.6.0(esbuild@0.24.0): dependencies: debug: 4.3.7 - esbuild: 0.23.1 + esbuild: 0.24.0 transitivePeerDependencies: - supports-color @@ -4605,33 +3894,6 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 - esbuild@0.24.0: optionalDependencies: '@esbuild/aix-ppc64': 0.24.0 @@ -4661,20 +3923,8 @@ snapshots: escalade@3.2.0: {} - escape-html@1.0.3: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - esprima@4.0.1: {} - estraverse@5.3.0: {} - estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -4683,46 +3933,8 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} - expect-type@1.1.0: {} - express@4.21.1: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.10 - proxy-addr: 2.0.7 - qs: 6.13.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - extendable-error@0.1.7: {} external-editor@3.1.0: @@ -4751,24 +3963,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.1: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - find-cache-dir@3.3.2: - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -4788,16 +3982,6 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fs-extra@11.2.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -4827,8 +4011,6 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - github-slugger@2.0.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4897,28 +4079,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-heading-rank@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-to-string@3.0.1: - dependencies: - '@types/hast': 3.0.4 - - html-tags@3.3.1: {} - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - human-id@1.0.2: {} iconv-lite@0.4.24: @@ -4936,10 +4096,6 @@ snapshots: inherits@2.0.4: {} - ipaddr.js@1.9.1: {} - - is-absolute-url@4.0.1: {} - is-arguments@1.1.1: dependencies: call-bind: 1.0.7 @@ -4967,8 +4123,6 @@ snapshots: is-number@7.0.0: {} - is-plain-object@5.0.0: {} - is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -5016,12 +4170,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - knip@5.34.1(@types/node@22.8.1)(typescript@5.6.3): dependencies: '@nodelib/fs.walk': 1.2.8 @@ -5090,41 +4238,19 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - map-or-similar@1.5.0: {} - markdown-to-jsx@7.5.0(react@18.3.1): - dependencies: - react: 18.3.1 - - media-typer@0.3.0: {} - memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 - merge-descriptors@1.0.3: {} - merge2@1.4.1: {} - methods@1.1.2: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - min-indent@1.0.1: {} minimatch@3.1.2: @@ -5141,8 +4267,6 @@ snapshots: mri@1.2.0: {} - ms@2.0.0: {} - ms@2.1.3: {} mz@2.7.0: @@ -5153,18 +4277,10 @@ snapshots: nanoid@3.3.7: {} - negotiator@0.6.3: {} - node-releases@2.0.18: {} object-assign@4.1.1: {} - object-inspect@1.13.2: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -5213,8 +4329,6 @@ snapshots: parse-ms@4.0.0: {} - parseurl@1.3.3: {} - path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -5228,8 +4342,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.10: {} - path-type@4.0.0: {} pathe@1.1.2: {} @@ -5246,10 +4358,6 @@ snapshots: pirates@4.0.6: {} - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - polished@4.3.1: dependencies: '@babel/runtime': 7.26.0 @@ -5283,41 +4391,12 @@ snapshots: process@0.11.10: {} - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - pseudomap@1.0.2: {} punycode@2.3.1: {} - qs@6.13.0: - dependencies: - side-channel: 1.0.6 - queue-microtask@1.2.3: {} - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-docgen-typescript@2.2.2(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -5343,20 +4422,8 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-element-to-jsx-string@15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@base2/pretty-print-object': 1.0.1 - is-plain-object: 5.0.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.1.0 - - react-is@16.13.1: {} - react-is@17.0.2: {} - react-is@18.1.0: {} - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -5385,23 +4452,6 @@ snapshots: regenerator-runtime@0.14.1: {} - rehype-external-links@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 - hast-util-is-element: 3.0.0 - is-absolute-url: 4.0.1 - space-separated-tokens: 2.0.2 - unist-util-visit: 5.0.0 - - rehype-slug@6.0.0: - dependencies: - '@types/hast': 3.0.4 - github-slugger: 2.0.0 - hast-util-heading-rank: 3.0.0 - hast-util-to-string: 3.0.1 - unist-util-visit: 5.0.0 - resolve-from@5.0.0: {} resolve@1.22.8: @@ -5440,10 +4490,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-buffer@5.2.1: {} - safer-buffer@2.1.2: {} + sanitize.css@13.0.0: {} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -5452,33 +4502,6 @@ snapshots: semver@7.6.3: {} - send@0.19.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0 - transitivePeerDependencies: - - supports-color - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -5488,8 +4511,6 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - setprototypeof@1.2.0: {} - shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -5502,13 +4523,6 @@ snapshots: shebang-regex@3.0.0: {} - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -5527,8 +4541,6 @@ snapshots: dependencies: whatwg-url: 7.1.0 - space-separated-tokens@2.0.2: {} - spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -5538,13 +4550,13 @@ snapshots: stackback@0.0.2: {} - statuses@2.0.1: {} - std-env@3.7.0: {} - storybook@8.3.6: + storybook@8.4.5(prettier@2.8.8): dependencies: - '@storybook/core': 8.3.6 + '@storybook/core': 8.4.5(prettier@2.8.8) + optionalDependencies: + prettier: 2.8.8 transitivePeerDependencies: - bufferutil - supports-color @@ -5602,10 +4614,6 @@ snapshots: tapable@2.2.1: {} - telejson@7.2.0: - dependencies: - memoizerific: 1.11.3 - term-size@2.2.1: {} thenify-all@1.6.0: @@ -5641,8 +4649,6 @@ snapshots: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} - tr46@1.0.1: dependencies: punycode: 2.3.1 @@ -5690,36 +4696,12 @@ snapshots: type-fest@2.19.0: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - typescript@5.6.3: {} undici-types@6.19.8: {} - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - universalify@0.1.2: {} - universalify@2.0.1: {} - - unpipe@1.0.0: {} - unplugin@1.15.0: dependencies: acorn: 8.14.0 @@ -5731,8 +4713,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - util-deprecate@1.0.2: {} - util@0.12.5: dependencies: inherits: 2.0.4 @@ -5741,12 +4721,8 @@ snapshots: is-typed-array: 1.1.13 which-typed-array: 1.1.15 - utils-merge@1.0.1: {} - uuid@9.0.1: {} - vary@1.1.2: {} - vite-node@2.1.4(@types/node@22.8.1): dependencies: cac: 6.7.14 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 74fe7a8..2e11c05 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,16 +4,16 @@ packages: catalog: '@biomejs/biome': ^1.9.4 - '@storybook/addon-essentials': ^8.3.6 - '@storybook/addon-interactions': ^8.3.6 - '@storybook/addon-links': ^8.3.6 - '@storybook/blocks': ^8.3.6 - '@storybook/react': ^8.3.6 - '@storybook/react-vite': ^8.3.6 - '@storybook/test': ^8.3.6 + '@storybook/addon-essentials': ^8.4.5 + '@storybook/addon-interactions': ^8.4.5 + '@storybook/addon-links': ^8.4.5 + '@storybook/blocks': ^8.4.5 + '@storybook/react': ^8.4.5 + '@storybook/react-vite': ^8.4.5 + '@storybook/test': ^8.4.5 happy-dom: ^15.7.4 knip: ^5.34.1 - storybook: ^8.3.6 + storybook: ^8.4.5 tsup: ^8.3.5 typescript: ^5.6.3 vitest: ^2.1.4 From 66b81c7a5205ca45a3f881ea7e434f8d32112029 Mon Sep 17 00:00:00 2001 From: y09n Date: Thu, 28 Nov 2024 02:20:27 +0900 Subject: [PATCH 11/17] =?UTF-8?q?feat(badge):=20Badge=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20(#30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(typography): implement test & component * feat(badge): scaffold package * feat(badge): add test scenario * feat(badge): implement test * feat(badge): implement component * fix(badge): add args --- .changeset/little-suits-dress.md | 5 + packages/badge/.storybook/main.ts | 14 +++ packages/badge/.storybook/preview.ts | 7 ++ packages/badge/package.json | 67 +++++++++++ packages/badge/src/Badge.module.css | 6 + packages/badge/src/Badge.stories.tsx | 19 +++ packages/badge/src/Badge.test.tsx | 85 +++++++++++++ packages/badge/src/Badge.tsx | 94 +++++++++++++++ packages/badge/src/env.d.ts | 1 + packages/badge/src/index.ts | 1 + packages/badge/tsconfig.json | 3 + packages/badge/tsup.config.ts | 8 ++ packages/badge/vitest.config.ts | 16 +++ packages/badge/vitest.setup.ts | 1 + pnpm-lock.yaml | 174 +++++++++++++++++++++++++++ 15 files changed, 501 insertions(+) create mode 100644 .changeset/little-suits-dress.md create mode 100644 packages/badge/.storybook/main.ts create mode 100644 packages/badge/.storybook/preview.ts create mode 100644 packages/badge/package.json create mode 100644 packages/badge/src/Badge.module.css create mode 100644 packages/badge/src/Badge.stories.tsx create mode 100644 packages/badge/src/Badge.test.tsx create mode 100644 packages/badge/src/Badge.tsx create mode 100644 packages/badge/src/env.d.ts create mode 100644 packages/badge/src/index.ts create mode 100644 packages/badge/tsconfig.json create mode 100644 packages/badge/tsup.config.ts create mode 100644 packages/badge/vitest.config.ts create mode 100644 packages/badge/vitest.setup.ts diff --git a/.changeset/little-suits-dress.md b/.changeset/little-suits-dress.md new file mode 100644 index 0000000..75720f3 --- /dev/null +++ b/.changeset/little-suits-dress.md @@ -0,0 +1,5 @@ +--- +"@sipe-team/badge": patch +--- + +chore: bump version diff --git a/packages/badge/.storybook/main.ts b/packages/badge/.storybook/main.ts new file mode 100644 index 0000000..846b85c --- /dev/null +++ b/packages/badge/.storybook/main.ts @@ -0,0 +1,14 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: [ + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-links', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/badge/.storybook/preview.ts b/packages/badge/.storybook/preview.ts new file mode 100644 index 0000000..836149d --- /dev/null +++ b/packages/badge/.storybook/preview.ts @@ -0,0 +1,7 @@ +import 'sanitize.css'; +import 'sanitize.css/typography.css'; +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/badge/package.json b/packages/badge/package.json new file mode 100644 index 0000000..c0546f2 --- /dev/null +++ b/packages/badge/package.json @@ -0,0 +1,67 @@ +{ + "name": "@sipe-team/badge", + "description": "Badge component for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": ["dist"], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "test": "vitest", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "dependencies": { + "@sipe-team/typography": "workspace:*", + "clsx": "^2.1.1" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@storybook/addon-essentials": "catalog:", + "@storybook/addon-interactions": "catalog:", + "@storybook/addon-links": "catalog:", + "@storybook/blocks": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@storybook/test": "catalog:", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.0.1", + "@types/react": "^18.3.12", + "@vitest/coverage-v8": "2.1.4", + "happy-dom": "catalog:", + "react": "^18.3.1", + "sanitize.css": "^13.0.0", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + }, + "peerDependencies": { + "react": ">= 18" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false +} diff --git a/packages/badge/src/Badge.module.css b/packages/badge/src/Badge.module.css new file mode 100644 index 0000000..e04e667 --- /dev/null +++ b/packages/badge/src/Badge.module.css @@ -0,0 +1,6 @@ +.root { + background-color: var(--background-color); + border: var(--border); + border-radius: 8px; + padding: var(--padding); +} diff --git a/packages/badge/src/Badge.stories.tsx b/packages/badge/src/Badge.stories.tsx new file mode 100644 index 0000000..3b54862 --- /dev/null +++ b/packages/badge/src/Badge.stories.tsx @@ -0,0 +1,19 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Badge } from './Badge'; + +const meta = { + title: 'Badge', + component: Badge, + parameters: { + layout: 'centered', + }, +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +export const Basic: Story = { + args: { + children: '사이프', + }, +}; diff --git a/packages/badge/src/Badge.test.tsx b/packages/badge/src/Badge.test.tsx new file mode 100644 index 0000000..791c778 --- /dev/null +++ b/packages/badge/src/Badge.test.tsx @@ -0,0 +1,85 @@ +import { render, screen } from '@testing-library/react'; +import { expect, test } from 'vitest'; +import { Badge } from './Badge'; + +test('children으로 입력한 텍스트를 표시한다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toBeInTheDocument(); +}); + +test('모서리가 8px radius 형태이다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ borderRadius: '8px' }); +}); + +test('글꼴 색상은 teal(#00FFFF)이다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ color: '#00FFFF' }); +}); + +test('글꼴 두께는 semiBold(600)이다.', () => { + render(테스트); + + expect(screen.getByText('테스트')).toHaveStyle({ fontWeight: 600 }); +}); + +test('variant를 주입하지 않으면 filled(배경색 #2D3748)를 기본 형태로 설정한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + backgroundColor: '#2D3748', + }); +}); + +test('variant가 weak인 경우 배경색 #EDF2F7로 형태를 적용한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + backgroundColor: '#EDF2F7', + }); +}); + +test('variant가 outline인 경우 배경색은 투명, 테두리는 2px 두께의 #2D3748 색상 형태를 적용한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + backgroundColor: 'transparent', + border: '2px solid #2D3748', + }); +}); + +test('size를 주입하지 않으면 medium(상하 패딩 8px, 좌우 패딩 16px)을 기본 크기로 설정한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + paddingTop: '8px', + paddingBottom: '8px', + paddingLeft: '16px', + paddingRight: '16px', + }); +}); + +test('size가 small인 경우 상하 패딩 4px, 좌우 패딩 8px 형태를 적용한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + paddingTop: '4px', + paddingBottom: '4px', + paddingLeft: '8px', + paddingRight: '8px', + }); +}); + +test('size가 large인 경우 상하 패딩 12px, 좌우 패딩 24px 형태를 적용한다.', () => { + render(테스트); + + expect(screen.getByRole('status')).toHaveStyle({ + paddingTop: '12px', + paddingBottom: '12px', + paddingLeft: '24px', + paddingRight: '24px', + }); +}); diff --git a/packages/badge/src/Badge.tsx b/packages/badge/src/Badge.tsx new file mode 100644 index 0000000..568a029 --- /dev/null +++ b/packages/badge/src/Badge.tsx @@ -0,0 +1,94 @@ +import { Typography } from '@sipe-team/typography'; +import { clsx as cx } from 'clsx'; +import { + type CSSProperties, + type ComponentProps, + type ForwardedRef, + forwardRef, +} from 'react'; +import styles from './Badge.module.css'; + +type BadgeSize = 'small' | 'medium' | 'large'; + +type BadgeVariant = 'filled' | 'outline' | 'weak'; + +export interface BadgeProps extends ComponentProps<'div'> { + size?: BadgeSize; + variant?: BadgeVariant; +} + +export const Badge = forwardRef(function Badge( + { + className, + children, + size = 'medium', + style: _style, + variant = 'filled', + ...props + }: BadgeProps, + ref: ForwardedRef, +) { + const backgroundColor = getBackgroundColor(variant); + const border = variant === 'outline' ? '2px solid #2D3748' : undefined; + const padding = getPadding(size); + const style = { + ..._style, + '--background-color': backgroundColor, + '--border': border, + '--padding': padding, + } as CSSProperties; + + const fontSize = getFontSize(size); + + return ( +
+ + {children} + +
+ ); +}); + +function getBackgroundColor(variant: BadgeVariant) { + switch (variant) { + case 'weak': + return '#EDF2F7'; + case 'outline': + return 'transparent'; + default: + return '#2D3748'; + } +} + +function getPadding(size: BadgeSize) { + switch (size) { + case 'small': + return '4px 8px'; + case 'large': + return '12px 24px'; + default: + return '8px 16px'; + } +} + +function getFontSize(size: BadgeSize) { + switch (size) { + case 'small': + return 12; + case 'large': + return 18; + default: + return 14; + } +} diff --git a/packages/badge/src/env.d.ts b/packages/badge/src/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/badge/src/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/badge/src/index.ts b/packages/badge/src/index.ts new file mode 100644 index 0000000..9c8edca --- /dev/null +++ b/packages/badge/src/index.ts @@ -0,0 +1 @@ +export * from './Badge'; diff --git a/packages/badge/tsconfig.json b/packages/badge/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/badge/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/badge/tsup.config.ts b/packages/badge/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/badge/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/badge/vitest.config.ts b/packages/badge/vitest.config.ts new file mode 100644 index 0000000..2e5a4f7 --- /dev/null +++ b/packages/badge/vitest.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + coverage: { + include: ['./src/**/*.{ts,tsx}'], + exclude: ['./src/**/*.stories.tsx', './src/env.d.ts', './src/index.ts'], + }, + css: true, + environment: 'happy-dom', + globals: true, + passWithNoTests: true, + setupFiles: './vitest.setup.ts', + watch: false, + }, +}); diff --git a/packages/badge/vitest.setup.ts b/packages/badge/vitest.setup.ts new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/badge/vitest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea902d9..e566478 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -214,6 +214,73 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/badge: + dependencies: + '@sipe-team/typography': + specifier: workspace:* + version: link:../typography + clsx: + specifier: ^2.1.1 + version: 2.1.1 + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-interactions': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@storybook/addon-links': + specifier: 'catalog:' + version: 8.4.5(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/blocks': + specifier: 'catalog:' + version: 8.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@storybook/test': + specifier: 'catalog:' + version: 8.4.5(storybook@8.4.5(prettier@2.8.8)) + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + '@vitest/coverage-v8': + specifier: 2.1.4 + version: 2.1.4(vitest@2.1.4(@types/node@22.8.1)(happy-dom@15.7.4)) + happy-dom: + specifier: 'catalog:' + version: 15.7.4 + react: + specifier: ^18.3.1 + version: 18.3.1 + sanitize.css: + specifier: ^13.0.0 + version: 13.0.0 + storybook: + specifier: 'catalog:' + version: 8.4.5(prettier@2.8.8) + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + vitest: + specifier: 'catalog:' + version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/divider: dependencies: clsx: @@ -476,6 +543,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -874,6 +944,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: @@ -1304,6 +1378,15 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@vitest/coverage-v8@2.1.4': + resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==} + peerDependencies: + '@vitest/browser': 2.1.4 + vitest: 2.1.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} @@ -1790,6 +1873,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} @@ -1868,6 +1954,22 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -1970,6 +2072,13 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} @@ -2391,6 +2500,10 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -2761,6 +2874,8 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} + '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -3090,6 +3205,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1))': dependencies: glob: 7.2.3 @@ -3567,6 +3684,24 @@ snapshots: '@types/uuid@9.0.8': {} + '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.8.1)(happy-dom@15.7.4))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.12 + magicast: 0.3.5 + std-env: 3.7.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + transitivePeerDependencies: + - supports-color + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 @@ -4079,6 +4214,8 @@ snapshots: dependencies: function-bind: 1.1.2 + html-escaper@2.0.2: {} + human-id@1.0.2: {} iconv-lite@0.4.24: @@ -4139,6 +4276,27 @@ snapshots: isexe@2.0.0: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -4238,6 +4396,16 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.26.1 + '@babel/types': 7.26.0 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + map-or-similar@1.5.0: {} memoizerific@1.11.3: @@ -4616,6 +4784,12 @@ snapshots: term-size@2.2.1: {} + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 From e43c989ba49e8da5a4d38b060dd2dac860fa974d Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 1 Dec 2024 21:07:34 +0900 Subject: [PATCH 12/17] fix(ci): change into custom release bot token (#39) --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 84fa47b..5208152 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -31,5 +31,5 @@ jobs: version: pnpm changeset version publish: pnpm changeset publish env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.RELEASE_BOT_TOKEN }} From 9c93399775a6131db8b90d3eefc22569d58a96d3 Mon Sep 17 00:00:00 2001 From: y09n Date: Sun, 1 Dec 2024 21:07:50 +0900 Subject: [PATCH 13/17] =?UTF-8?q?feat(tokens,typography):=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94=EA=B0=80,?= =?UTF-8?q?=20typography=EC=97=90=EC=84=9C=20=ED=86=A0=ED=81=B0=EC=9D=84?= =?UTF-8?q?=20=EA=B3=B5=EC=9C=A0=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20(#38)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(tokens): add tokens package * fix(typography): reuse sipe-team/tokens * chore: add changesets * fix(tokens): css module type error --- .changeset/shaggy-news-laugh.md | 7 ++ packages/tokens/.storybook/main.ts | 10 ++ packages/tokens/.storybook/preview.ts | 5 + packages/tokens/env.d.ts | 1 + packages/tokens/package.json | 51 ++++++++++ packages/tokens/src/Tokens.stories.tsx | 131 +++++++++++++++++++++++++ packages/tokens/src/colors.ts | 124 +++++++++++++++++++++++ packages/tokens/src/fonts.ts | 24 +++++ packages/tokens/src/index.ts | 2 + packages/tokens/tsconfig.json | 3 + packages/tokens/tsup.config.ts | 8 ++ packages/typography/package.json | 1 + packages/typography/src/Typography.tsx | 39 +++----- pnpm-lock.yaml | 41 +++++++- 14 files changed, 418 insertions(+), 29 deletions(-) create mode 100644 .changeset/shaggy-news-laugh.md create mode 100644 packages/tokens/.storybook/main.ts create mode 100644 packages/tokens/.storybook/preview.ts create mode 100644 packages/tokens/env.d.ts create mode 100644 packages/tokens/package.json create mode 100644 packages/tokens/src/Tokens.stories.tsx create mode 100644 packages/tokens/src/colors.ts create mode 100644 packages/tokens/src/fonts.ts create mode 100644 packages/tokens/src/index.ts create mode 100644 packages/tokens/tsconfig.json create mode 100644 packages/tokens/tsup.config.ts diff --git a/.changeset/shaggy-news-laugh.md b/.changeset/shaggy-news-laugh.md new file mode 100644 index 0000000..06e7e42 --- /dev/null +++ b/.changeset/shaggy-news-laugh.md @@ -0,0 +1,7 @@ +--- +"@sipe-team/tokens": minor +"@sipe-team/typography": patch +--- + +feat(tokens): add tokens package +fix(typography): reuse `@sipe-team/tokens` diff --git a/packages/tokens/.storybook/main.ts b/packages/tokens/.storybook/main.ts new file mode 100644 index 0000000..e8b17c9 --- /dev/null +++ b/packages/tokens/.storybook/main.ts @@ -0,0 +1,10 @@ +import type { StorybookConfig } from '@storybook/react-vite'; + +export default { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + addons: ['@storybook/addon-essentials'], + framework: { + name: '@storybook/react-vite', + options: {}, + }, +} satisfies StorybookConfig; diff --git a/packages/tokens/.storybook/preview.ts b/packages/tokens/.storybook/preview.ts new file mode 100644 index 0000000..82ec7ed --- /dev/null +++ b/packages/tokens/.storybook/preview.ts @@ -0,0 +1,5 @@ +import type { Preview } from '@storybook/react'; + +export default { + tags: ['autodocs'], +} satisfies Preview; diff --git a/packages/tokens/env.d.ts b/packages/tokens/env.d.ts new file mode 100644 index 0000000..60260a3 --- /dev/null +++ b/packages/tokens/env.d.ts @@ -0,0 +1 @@ +declare module '*.module.css'; diff --git a/packages/tokens/package.json b/packages/tokens/package.json new file mode 100644 index 0000000..69890ae --- /dev/null +++ b/packages/tokens/package.json @@ -0,0 +1,51 @@ +{ + "name": "@sipe-team/tokens", + "description": "Design tokens for Sipe Design System", + "version": "0.0.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sipe-team/3-1_sds" + }, + "type": "module", + "exports": "./src/index.ts", + "files": ["dist"], + "scripts": { + "build": "tsup", + "build:storybook": "storybook build", + "dev:storybook": "storybook dev -p 6006", + "lint": "biome lint .", + "typecheck": "tsc", + "prepack": "pnpm run build" + }, + "devDependencies": { + "@biomejs/biome": "catalog:", + "@faker-js/faker": "^9.2.0", + "@sipe-team/typography": "workspace:*", + "@storybook/addon-essentials": "catalog:", + "@storybook/react": "catalog:", + "@storybook/react-vite": "catalog:", + "@types/react": "^18.3.12", + "react": "^18.3.1", + "storybook": "catalog:", + "tsup": "catalog:", + "typescript": "catalog:" + }, + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + } + }, + "sideEffects": false +} diff --git a/packages/tokens/src/Tokens.stories.tsx b/packages/tokens/src/Tokens.stories.tsx new file mode 100644 index 0000000..39fc90d --- /dev/null +++ b/packages/tokens/src/Tokens.stories.tsx @@ -0,0 +1,131 @@ +import { faker } from '@faker-js/faker'; +import { Typography } from '@sipe-team/typography'; +import type { Meta, StoryObj } from '@storybook/react'; +import { color } from './colors'; +import { fontSize, fontWeight, lineHeight } from './fonts'; + +const meta = { + title: 'Tokens', +} satisfies Meta; +export default meta; + +type Story = StoryObj; + +export const Colors: Story = { + render: () => { + return ( +
+ + 색상 + +
+ {[ + 'gray', + 'red', + 'pink', + 'purple', + 'cyan', + 'blue', + 'teal', + 'green', + 'yellow', + 'orange', + ].map((name) => ( + + ))} +
+
+ ); + }, +}; + +function ColorCardGroup({ groupName }: { groupName: string }) { + return ( +
+ {groupName} +
+ {Object.entries(color) + .filter(([key]) => key.startsWith(groupName)) + .map(([key, value]) => ( + + ))} +
+
+ ); +} + +function ColorCard({ name, value }: { name: string; value: string }) { + return ( +
+
+ + {name} + + + {value} + +
+ ); +} + +export const Fonts: Story = { + render: () => { + return ( +
+ + 글꼴 크기 + +
+ {Object.entries(fontSize).map(([key, value]) => ( + + {value} / 사이프 디자인 시스템 + + ))} +
+ + 글꼴 두께 + +
+ {Object.entries(fontWeight).map(([key, value]) => ( + + {key} / {value} / 사이프 디자인 시스템 + + ))} +
+ + 줄 높이 + +
+ {Object.entries(lineHeight).map(([key, value]) => ( +
+ + {key} / {value} + + + {faker.lorem.paragraphs(4)} + +
+ ))} +
+
+ ); + }, +}; diff --git a/packages/tokens/src/colors.ts b/packages/tokens/src/colors.ts new file mode 100644 index 0000000..1308b1c --- /dev/null +++ b/packages/tokens/src/colors.ts @@ -0,0 +1,124 @@ +export const color = { + black: '#000000', + white: '#ffffff', + + gray50: '#fafafa', + gray100: '#f4f4f5', + gray200: '#e4e4e7', + gray300: '#d4d4d8', + gray400: '#a1a1aa', + gray500: '#71717a', + gray600: '#52525b', + gray700: '#3f3f46', + gray800: '#27272a', + gray900: '#18181b', + gray950: '#111111', + + red50: '#fef2f2', + red100: '#fee2e2', + red200: '#fecaca', + red300: '#fca5a5', + red400: '#f87171', + red500: '#ef4444', + red600: '#dc2626', + red700: '#991919', + red800: '#511111', + red900: '#300c0c', + red950: '#1f0808', + + orange50: '#fff7ed', + orange100: '#ffedd5', + orange200: '#fed7aa', + orange300: '#fdba74', + orange400: '#fb923c', + orange500: '#f97316', + orange600: '#ea580c', + orange700: '#92310a', + orange800: '#6c2710', + orange900: '#3b1106', + orange950: '#220a04', + + yellow50: '#fefce8', + yellow100: '#fef9c3', + yellow200: '#fef08a', + yellow300: '#fde047', + yellow400: '#facc15', + yellow500: '#eab308', + yellow600: '#ca8a04', + yellow700: '#845209', + yellow800: '#713f12', + yellow900: '#422006', + yellow950: '#281304', + + green50: '#f0fdf4', + green100: '#dcfce7', + green200: '#bbf7d0', + green300: '#86efac', + green400: '#4ade80', + green500: '#22c55e', + green600: '#16a34a', + green700: '#116932', + green800: '#124a28', + green900: '#042713', + green950: '#03190c', + + teal50: '#f0fdfa', + teal100: '#ccfbf1', + teal200: '#99f6e4', + teal300: '#5eead4', + teal400: '#2dd4bf', + teal500: '#14b8a6', + teal600: '#0d9488', + teal700: '#0c5d56', + teal800: '#114240', + teal900: '#032726', + teal950: '#021716', + + blue50: '#eff6ff', + blue100: '#dbeafe', + blue200: '#bfdbfe', + blue300: '#a3cfff', + blue400: '#60a5fa', + blue500: '#3b82f6', + blue600: '#2563eb', + blue700: '#173da6', + blue800: '#1a3478', + blue900: '#14204a', + blue950: '#0c142e', + + cyan50: '#ecfeff', + cyan100: '#cffafe', + cyan200: '#a5f3fc', + cyan300: '#67e8f9', + cyan400: '#22d3ee', + cyan500: '#06b6d4', + cyan600: '#0891b2', + cyan700: '#0c5c72', + cyan800: '#134152', + cyan900: '#072a38', + cyan950: '#051b24', + + purple50: '#faf5ff', + purple100: '#f3e8ff', + purple200: '#e9d5ff', + purple300: '#d8b4fe', + purple400: '#c084fc', + purple500: '#a855f7', + purple600: '#9333ea', + purple700: '#641ba3', + purple800: '#4a1772', + purple900: '#2f0553', + purple950: '#1a032e', + + pink50: '#fdf2f8', + pink100: '#fce7f3', + pink200: '#fbcfe8', + pink300: '#f9a8d4', + pink400: '#f472b6', + pink500: '#ec4899', + pink600: '#db2777', + pink700: '#a41752', + pink800: '#6d0e34', + pink900: '#45061f', + pink950: '#2c0514', +} as const; diff --git a/packages/tokens/src/fonts.ts b/packages/tokens/src/fonts.ts new file mode 100644 index 0000000..3509cc6 --- /dev/null +++ b/packages/tokens/src/fonts.ts @@ -0,0 +1,24 @@ +export const fontSize = { + 12: 12, + 14: 14, + 16: 16, + 18: 18, + 20: 20, + 24: 24, + 28: 28, + 32: 32, + 36: 36, + 48: 48, +} as const; + +export const fontWeight = { + regular: 400, + medium: 500, + semiBold: 600, + bold: 700, +} as const; + +export const lineHeight = { + regular: 1.5, + compact: 1.3, +} as const; diff --git a/packages/tokens/src/index.ts b/packages/tokens/src/index.ts new file mode 100644 index 0000000..69da695 --- /dev/null +++ b/packages/tokens/src/index.ts @@ -0,0 +1,2 @@ +export * from './colors'; +export * from './fonts'; diff --git a/packages/tokens/tsconfig.json b/packages/tokens/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/tokens/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/tokens/tsup.config.ts b/packages/tokens/tsup.config.ts new file mode 100644 index 0000000..c533199 --- /dev/null +++ b/packages/tokens/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + clean: true, + dts: true, + format: ['esm', 'cjs'], +}); diff --git a/packages/typography/package.json b/packages/typography/package.json index 8699108..2ab314a 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "@radix-ui/react-slot": "^1.1.0", + "@sipe-team/tokens": "workspace:^", "clsx": "^2.1.1" }, "devDependencies": { diff --git a/packages/typography/src/Typography.tsx b/packages/typography/src/Typography.tsx index 62226bd..91f5cc7 100644 --- a/packages/typography/src/Typography.tsx +++ b/packages/typography/src/Typography.tsx @@ -1,4 +1,9 @@ import { Slot } from '@radix-ui/react-slot'; +import { + fontSize as fontSizeToken, + fontWeight as fontWeightToken, + lineHeight as lineHeightToken, +} from '@sipe-team/tokens'; import { clsx as cx } from 'clsx'; import { type CSSProperties, @@ -8,11 +13,11 @@ import { } from 'react'; import styles from './Typography.module.css'; -export type FontSize = 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 36 | 48; +export type FontSize = keyof typeof fontSizeToken; -export type FontWeight = 'regular' | 'medium' | 'semiBold' | 'bold'; +export type FontWeight = keyof typeof fontWeightToken; -export type LineHeight = 'regular' | 'compact'; +export type LineHeight = keyof typeof lineHeightToken; export interface TypographyProps extends ComponentProps<'p'> { asChild?: boolean; @@ -35,14 +40,12 @@ export const Typography = forwardRef(function Typography( ref: ForwardedRef, ) { const Component = asChild ? Slot : 'p'; - const numericLineHeight = getNumericLineHeight(lineHeight); - const numericWeight = getNumericWeight(weight); const style = { ..._style, '--font-color': color, - '--font-size': `${size}px`, - '--font-weight': numericWeight, - '--line-height': numericLineHeight, + '--font-size': `${fontSizeToken[size]}px`, + '--font-weight': fontWeightToken[weight], + '--line-height': lineHeightToken[lineHeight], } as CSSProperties; return ( @@ -54,23 +57,3 @@ export const Typography = forwardRef(function Typography( /> ); }); - -function getNumericLineHeight(lineHeight: LineHeight) { - const lineHeightMap = { - regular: 1.5, - compact: 1.3, - }; - - return lineHeightMap[lineHeight]; -} - -function getNumericWeight(weight: FontWeight) { - const weightMap = { - regular: 400, - medium: 500, - semiBold: 600, - bold: 700, - }; - - return weightMap[weight]; -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e566478..432bbc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -403,11 +403,50 @@ importers: specifier: 'catalog:' version: 2.1.4(@types/node@22.8.1)(happy-dom@15.7.4) + packages/tokens: + devDependencies: + '@biomejs/biome': + specifier: 'catalog:' + version: 1.9.4 + '@faker-js/faker': + specifier: ^9.2.0 + version: 9.2.0 + '@sipe-team/typography': + specifier: workspace:* + version: link:../typography + '@storybook/addon-essentials': + specifier: 'catalog:' + version: 8.4.5(@types/react@18.3.12)(storybook@8.4.5(prettier@2.8.8)) + '@storybook/react': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3) + '@storybook/react-vite': + specifier: 'catalog:' + version: 8.4.5(@storybook/test@8.4.5(storybook@8.4.5(prettier@2.8.8)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.2)(storybook@8.4.5(prettier@2.8.8))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) + '@types/react': + specifier: ^18.3.12 + version: 18.3.12 + react: + specifier: ^18.3.1 + version: 18.3.1 + storybook: + specifier: 'catalog:' + version: 8.4.5(prettier@2.8.8) + tsup: + specifier: 'catalog:' + version: 8.3.5(jiti@2.3.3)(postcss@8.4.47)(typescript@5.6.3) + typescript: + specifier: 'catalog:' + version: 5.6.3 + packages/typography: dependencies: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@sipe-team/tokens': + specifier: workspace:^ + version: link:../tokens clsx: specifier: ^2.1.1 version: 2.1.1 @@ -951,7 +990,7 @@ packages: '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: - typescript: ^5.6.3 + typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: typescript: From 80f5a5b6c5f95e0a8d7366b2fe05a86b4c138f42 Mon Sep 17 00:00:00 2001 From: y09n Date: Tue, 3 Dec 2024 13:11:51 +0900 Subject: [PATCH 14/17] Version Packages (#41) Co-authored-by: github-actions[bot] --- .changeset/little-suits-dress.md | 5 ----- .changeset/shaggy-news-laugh.md | 7 ------- packages/badge/CHANGELOG.md | 9 +++++++++ packages/badge/package.json | 6 ++++-- packages/tokens/CHANGELOG.md | 8 ++++++++ packages/tokens/package.json | 6 ++++-- packages/typography/CHANGELOG.md | 9 +++++++++ packages/typography/package.json | 6 ++++-- 8 files changed, 38 insertions(+), 18 deletions(-) delete mode 100644 .changeset/little-suits-dress.md delete mode 100644 .changeset/shaggy-news-laugh.md create mode 100644 packages/badge/CHANGELOG.md create mode 100644 packages/tokens/CHANGELOG.md diff --git a/.changeset/little-suits-dress.md b/.changeset/little-suits-dress.md deleted file mode 100644 index 75720f3..0000000 --- a/.changeset/little-suits-dress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sipe-team/badge": patch ---- - -chore: bump version diff --git a/.changeset/shaggy-news-laugh.md b/.changeset/shaggy-news-laugh.md deleted file mode 100644 index 06e7e42..0000000 --- a/.changeset/shaggy-news-laugh.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@sipe-team/tokens": minor -"@sipe-team/typography": patch ---- - -feat(tokens): add tokens package -fix(typography): reuse `@sipe-team/tokens` diff --git a/packages/badge/CHANGELOG.md b/packages/badge/CHANGELOG.md new file mode 100644 index 0000000..e9c0244 --- /dev/null +++ b/packages/badge/CHANGELOG.md @@ -0,0 +1,9 @@ +# @sipe-team/badge + +## 0.0.1 + +### Patch Changes + +- 66b81c7: chore: bump version +- Updated dependencies [9c93399] + - @sipe-team/typography@0.0.2 diff --git a/packages/badge/package.json b/packages/badge/package.json index c0546f2..c775fb0 100644 --- a/packages/badge/package.json +++ b/packages/badge/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/badge", "description": "Badge component for Sipe Design System", - "version": "0.0.0", + "version": "0.0.1", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/tokens/CHANGELOG.md b/packages/tokens/CHANGELOG.md new file mode 100644 index 0000000..1c37642 --- /dev/null +++ b/packages/tokens/CHANGELOG.md @@ -0,0 +1,8 @@ +# @sipe-team/tokens + +## 0.1.0 + +### Minor Changes + +- 9c93399: feat(tokens): add tokens package + fix(typography): reuse `@sipe-team/tokens` diff --git a/packages/tokens/package.json b/packages/tokens/package.json index 69890ae..0909cc2 100644 --- a/packages/tokens/package.json +++ b/packages/tokens/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/tokens", "description": "Design tokens for Sipe Design System", - "version": "0.0.0", + "version": "0.1.0", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", diff --git a/packages/typography/CHANGELOG.md b/packages/typography/CHANGELOG.md index da54faf..9684116 100644 --- a/packages/typography/CHANGELOG.md +++ b/packages/typography/CHANGELOG.md @@ -1,5 +1,14 @@ # @sipe-team/typography +## 0.0.2 + +### Patch Changes + +- 9c93399: feat(tokens): add tokens package + fix(typography): reuse `@sipe-team/tokens` +- Updated dependencies [9c93399] + - @sipe-team/tokens@0.1.0 + ## 0.0.1 ### Patch Changes diff --git a/packages/typography/package.json b/packages/typography/package.json index 2ab314a..bf1a0f0 100644 --- a/packages/typography/package.json +++ b/packages/typography/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/typography", "description": "Typography component for Sipe Design System", - "version": "0.0.1", + "version": "0.0.2", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build", From 939c773e5dee57660e9ebd790c86ead48ee0caa6 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 3 Dec 2024 20:25:32 +0900 Subject: [PATCH 15/17] =?UTF-8?q?docs(readme):=20README=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20(#42)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(readme): README 업데이트 * chore: add codecov badge * chore: replace og-image to new --- .github/CONTRIBUTING.md | 18 ++++++++++++++++++ README.md | 33 ++++++++++++++++++++++++++++++++- public/assets/og-image.png | Bin 0 -> 234473 bytes 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .github/CONTRIBUTING.md create mode 100644 public/assets/og-image.png diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..c907ff5 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing to Sipe Design System + +We love your input! We want to make contributing to this project as easy and transparent as possible. This document outlines the process for contributing to our component library. + +## Getting Started + +1. Fork the repository +2. Clone your fork: `git clone https://github.com/your-username/3-1_sds.git` +3. Install dependencies: `pnpm install` + +## Creating a New Component + +1. Copy the [.templates/component](.templates/component) folder to `packages/your-component-name` +2. Follow the test-driven development process: + - Write test cases first in `src/Component.test.tsx` + - Implement the component to pass the tests + - Create stories in Storybook for documentation +3. Run the test suite: `pnpm test` \ No newline at end of file diff --git a/README.md b/README.md index 90517ce..9fa8f04 100644 --- a/README.md +++ b/README.md @@ -1 +1,32 @@ -# sipe-design-system +![](./public/assets/og-image.png) + +# Sipe Design System +[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/slash/blob/main/LICENSE) ![Package Manager](https://img.shields.io/badge/pnpm-9.7.1-orange?logo=pnpm) [![Storybook](https://img.shields.io/badge/Storybook-8.4.5-ff4785?logo=storybook)](https://67417e47644abe8d4e63f82f-xvhdismwhu.chromatic.com/?path=/story/input--default) ![Tests](https://img.shields.io/badge/Vitest-2.1.4-green?logo=vitest) [![codecov](https://codecov.io/github/sipe-team/3-1_sds/graph/badge.svg?token=1TNLVUFPXC)](https://codecov.io/github/sipe-team/3-1_sds) Github Stars + +Sipe Design System is a monorepo-based component library built to modernize and standardize the official Sipe website. Drawing inspiration from our existing design patterns, we're creating a robust, type-safe, and accessible component system that can be used across all Sipe projects. + +This design system is built with: +- 📦 Monorepo structure for better package management +- 🎨 Consistent design tokens and patterns +- 💪 TypeScript for type safety +- 📚 Storybook for component documentation +- 🧪 Vitest for testing +- 🛠️ Modern build tooling + +## Contributing + +We maintain our component development roadmap in our [GitHub Project Board](https://github.com/orgs/sipe-team/projects/4). Before contributing, please check: + +We warmly welcome contributions from the community, whether you're a Sipe team member or not! Your input helps make this design system better for everyone please read [contributing guidelines](https://github.com/sipe-team/3-1_sds/tree/main/.github/CONTRIBUTING.md) for more details. + +## Contributors + + + + + +## License + +Copyright (c) 2024 SIPE, Inc. See [LICENSE](./LICENSE) for details. + + \ No newline at end of file diff --git a/public/assets/og-image.png b/public/assets/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc4209e8a87a167ccde27f7aad412c4b894a16c GIT binary patch literal 234473 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 z®1LdlpL(D*DgB!m_UUSnzmX!HF|4*1-kTcl-QPLx=jRJYfBv~RWzRi$q8=Oy2_ zKsRkKT6}m*Vbkrk!POIx(u2pEXeK`$lMZ>M_ek*~i;p)d(TyJdcxS5;rmD zi=-19pJ;x7vQV?>?+Q*64#M3RLSVYUto|zV3g1D?mAwx(l#&Z{&^Di`uI{_8#}dtP ztuP&)&N+rxQQZA}PfzZLN&r$jpb?FS&6RlFq0|?-_lT45iP;sBDJ9j_Q^5Q$8k5ts zSic`~YNquGNJMzGnKdqOOxYWoa~k5k8rV|EP#Nej;}7Piskh7I6f}M{W5Q~ug}+Gs zEsG>3MG~Swc`rs-coevdr}rG0<30|B!W=O08=7dcc3`|y2)dO5O0DCuV(X^Kkp;`QKdi|FkRLZk>n zL`bNsQ_bLPC0zTjpsoy5wWCw@ROX}e&QMs=*43d=g0EGV=giXCWD6CQ(2KZ%w;ClM zQ>lBDv!Xs*bJ)tv(8*lo+{mP|Yw7vPP}Q|sQKU5E3`c9Py!$cK#;wL%Gq3LwgP%fh zY$(F+T9P|1Z=RfONfV>)%G5gE%Um-aIUlbMO)&e6KS-_e81zr;>bndVRzUh>Mvli2 zcgtwq*U*+4Li)na6!Ji4lMW(3CRqB-{gi2qafn#v*0aKGXo-QdFtXToot*PUo7TGl zlkXIFx#_Zp+*B3MpICZ$&SCuReKtAxhB|rgB^2!)Xh%j|X?6xwsyW?*t& z9I4OYsXSTASq=ww^an?v8-@I-=4i})Kr<}yhsQR6Lnm;*aT}P!1Otiuw*b<=$xZNO zZ$IoNv@1Q+@5&CKpm%fdE?=^m6#zWGxh~QqCu$)_H%d4+_U0JO1{Ve^S_H!M>8k6{ zJ0Iy>prrIU^L3fx@4>2j*LlMe1o1DKvQ{5YBaID4L>nmXnmj_Ql{e%EK~`-=elI!l zgxr**Epsmn^Pf5*6LszoR*q<({k45`3Z9lwcg=(7GI)M8pzG5fj{Lab2K0k@%)DR6 zH@kVS4L-}yit4XgB$fRq^dVYE=q>JZFpK5YcP6Sp>n1)|;cl?9Jksgm&ESoH2dV3? zXBW2iugla}$#Kqq*#>+qh|X6DH{<^)O#*jx1E;2!7HVB?C{Y-&dmZuzn@Rd9)bdTW zmL*>&>XEOzeiRnMK7Y`fQ&kuGO0N#q&EDHz%V!YtK^EW}W)0;J@C2Xc2UQB7FV_Ru zY^|(5C|Tw|+J`4NC~~Q@I?Cb%)y^-|Jp2|PqFsW0?HxX)W&INs7Di5*p*n|rxU+%L zePt#psadLLs)L)m6?Z6;Z^NBtc})tGV)+E;h;I|ZRiLA`U+$G-2`xVqlxfxP(x=WV zO~5=W*ULdVbFfW#mOVW$lHh} zH$V|t^;XF!R18I7BR7^I`da8)j*X@P{w{0P(7rakXVe0Wrj49vd3s)sXFe%Uv-JGk zeT}H(&owXL4Vb(ISiX8~xUxC;k@3n^nc&_6@xQ4WE~hh#qIP_+Ui5lLc|R^E&Awj? zTa4b;Z1?EK7XDJOylfBOl{U@lpMWKaxxf_BrX7LXj2&ob%CW3FbnZen&$pw1ZW!Jkyq~4o+-f z#Qg{|SJAMsTw)%8hl?wIfs`BU7{Ja`43M!?F^|A3@o}3g4eFO}Nf}RkmPtz3><&jL zFXHwK@1lEa79!PSYOkrtBDIk!30Y}tW%Kdcn`Lu9RzJxr;wRIn(ES+q^b(Nw?lfZ< z(z^TR_Z&VY?PN^u127j#bT(x;QFCI4M$qdEtP_$oV_KD&78Lz^w4Tz{*L1H3CL|a= za`G4o)*_H_jw_QM+tdCsM;Gs0m(!Bh+cNyGs1BwxBe;O5IoUk~*#UnD{cNK)F|OTF z)k=|f1od?QXOWCa0)|7_We$^m2(kv;kCCcT!;lQO@A~m!$Y@z`Q-tm-f`8U=8S`=d z38m(oQ;bca_XU}0h0kwi#{Uw}akMj1QYB4SO#6>3Ct*E~cp$KbatgafV96*)FaM^I z50Y^Q{VP};TaM%tKo42N|KCSM z>3ZabA#|oK#TL(I5qz_V7l@tir%kZhn<+=<3z?We;x)2MR`1sr@yNNHfS({EYx;~G z?!B<4h836SF=v7;BAyDChUg3g7mN|D9F~R2?oeiSaw$J0JC%+Ch{Ugf-9xDKtf}2g zAaMkf_zUo->FXMz;Z*!4duTqpPhUoL{+#}IS(tVGJWMv-l__!f;tI9OYD^Kp>`REWmzCA(q!JZGkXyKxukLntqN~MGThIjD z`#kIc^y-j9Szac??h%6|6U*JBT@Lm0)Ro6zysYQtz?(yLLHzFIfs6v!XX5*~RaC6H zTqYj562VAM_<;Ee5p{O-ORny@H*?E9gtiXqTY8*B z96!<_3y2Z*;Pm*6ai7b-a(|VsZJHF`1Zbg!>HxNnEu0Nhv+W`Ft$D0Zz9JJ zUiGZr&35p+!*IY+OU?oq-P@^+`NJ8#;$aP3qO^;8=P(09PM5TLI)fKXNvvt#ks$Pe z4eL3>CAi7!-+k&j>FqX-m^0Cje%~%cs`E#`$3s%&RI;)u=v)h&Xd0hYs=3f>Y7G$C zwY}WmS;jmxwxVnDq%EfcND zO;^MlY8K@08j&v6&&uxw^$-{N!Q^;&crsC7+0OIyRN|Zc)|Cxvx<^cF1Kj1rPTy964E32qEy$=Jt~F?}Kqym?=v z?W#bW%sJ9%o-L0_qo`-2iG=mUln04^9D)5<@JE|h(5{pmaATu zH@$RRay)Nnlg&+$McOKY(&rr(B(E${)dab2UKEnr0X()f|LqPN|{xg(2}leGDt zzhq86ehq!o#slLMv~bt?A|Lxv4=g8&$jCI1O958uuxkY|Kwr_)k81!esrlH~o%}NL zU)K ztE=nrhY1rqyO<;n+&&2BQShA7d5z;f3j0RQ#s=a6y310dCy(ZZj{T++54%WzQk3>m zbg%-xd0XN@t9*tC|Jhd4uB>1Jht>EWI2X5z#coin#jY|mUAsV9pC?OkBN{inSY`jm zU@z@_q%E>UIyqEe*^ZpN5irc)Tf3qheQ3;Zb!#MkHyNxZuiu+Tqes+P+Nmk-A8Joc z9!9`3)V7Q)_kDUBar6^&Ad)poSfj{g8NaYqLq?u+pzO6*bSUY3ge@Qg$WUddR;RCF ziQj`5$NJ>`Ct1=Hy-Pm+oqgjR^|t5fpbw_eycvc~!G-j2IAkybtkv9Nf*@|_c(+}w z&gpQkzB5zxdpRkAQ8jGHbO*O_bcauNBBbBj_RlOTP1Px9DY_q-s(&w`$9OFva|V-q z{^%s~+RD`%#Eg_9!)+T|jyi-dWIt$Ys9V`*oUcLctPC!>RhkFvG zH5O`^FQZEBH)~_b-)|&r5Af<;12l~5eJ0u$2VIUbU5oN-;u{WuWbQ@xGobZ1MgfDc zsI~*}@Sdi99jGmFWt8Bo-TM}k8up9hnVI*)YPBB9P9)puR`9+U*8LVfQe#&z-tmDq zRp{5gvT{6*ERIQ3dB7LBSyRME>PnTQ5>+2+pZUC~7{u4J^Hc2pxzYR42=`xOBq?Qj znU*)7koHVImj4$4DYfHdZM%)<5St$;rG%M zI`(Fuhb9O#xg2O(oqpMneiBAp;?*pav0;kfk{SHvY|%3vkDtQqbk}- z7w=P|x55g0!y~WNE`pC(sh>vS<0K>$J|>;RI9K9kCdxN;klAxF5C^PCJX6ms36uLL zLd|iFc*6v#vI%9stvi7gKyKe3Y7Qje(1Ep6w?9UK!IcfNa#1u$y~lx|7q`a~vq0Z3 zjW+eteKgDiFg*o`5cNXG{&Zd!aH2Oiqz#s4&nEd;OP#uXF)Jgi z7}yap?!0>!{V5+J?Os{zy{wz;NcWh({6$s#tKUH;Cgx&KYD{jf#II$xQ4MvP_{O761>D8LvjA?;;f-?aBLwgQwIFHVel46ZcwWi*CXDraS9&oIpM!ZVyFRhAnUD8JY0so)EWJS z+?PRK(EMqMMjmx$9BIXLbq=a0p?Cd%^gq)kb}6qs5Ya+#$46FN8i0$$i3LPo2&gm? zPqk8Mv+po5YTzC{d8yMvl%*0Vbkc3fc1buHb(&` zD)A)6yNsBj_g}-AQ|UFa;*X)ee-_G`o;Io~aCu4HfAYuJ&i~Za>%b9JhB**w zf*sIjqeN`UOj&1!RP7sXh!=gW*mG`8B|C>4s`q>Yz?>9eID+*3M9W&}@VVVxNa{8( zUNx+Sj@u*m5I&JWTXIc-en%<#dP_$pMd1w8 z%$p3lOD%7YMBv0E2-{V>75_F`oR^`RnU3|OY7#8C66rmPBhdLZG)r}4ViXsiw|(Q- zXMrug`reBeTE10y$fhN_*|PJyrF2F31HHvp#R8HfJ=q9bI$SNrL2TcEdp>ShVfkT- zT<+@CL$;yvw6*u$2giPH=1GfBNs_lTv{CHAyRQFhYdN21oHV<6SvmT>wD7bLqy@Wr zS?I-sDzOQhpyeo&I}&YbO+{61YgJeikb&O@H)__ID%0{WuP=-G@i0f*KMyS>8 zr?XC}AB_o}Ar4re<@Mk5>E`K^k2G=9;_Rz0LQ9$PP%HR1r_2$c8_NR!JJ#o5Zm4+g zKykz&f?Q$wCu%BhCdO*uV+b{3Fl zk#p|9fI8=UqQe|&rhoVIe~{-I)Fr-yN3br329pk4Rb2-PQFSmKF#d1m9ddO67akCO5>m>qQei2)bDN4BOQx(#WF;H zEKB65G#IFerk1=KZnCB8LGd+^;V%O@ zxH55D108_gJ6BQ+q6vFj4+}F^&q@nbKbBNH zuXwudeZznKUdc9QIwHbW#h9v2nT-yowtd72Ii)vrNdBqg5f{#RO<#fst6+~~OfNRS zF2}lN+5Kryc^mR?EjkjLV7nf_|3R8k6{w>9Z&c?IFr|jY@Pw)l^f8_npETlRQI{=G z`Kgla1Ef9t3E0JkDfB+#4Frol$v_fFo#o`UUb?=D`fG!hmKyR>ysRHF1lpm>bs6c<7hmC zS^4>*M%RR-Q&ICS;!FGC5*xbv|41;jq4SkB(t$Y=I6bDVA+x}54YTrfJLBnw=v0&5 z0qoI`AZ?qH;|{B-7G;~^Dz{v@p3?hHw)mPXmN z6m*k_pA954QDdau4Zi*Tr2)|%FV+>&XDHv6?4Im6QYEUS>c+ zM2&~Q58H%30CESbh52CMZm$xi0n-K2IY1f!efvE7xQ<9)8c1BmP;I0`pcqS@7qQnO+egWj2)Xnp(1qx85qE%q}XrHY=TBO1ezI48K;SOWX3kd&cLc3X< zXmi?JCf+EZZsBVj(s|J-JV){1!C@HfM-wn)w5Dt)`{$FPTKPMU)4SOJpgf%Bqs&4g zC|L_eXEik9ezYq%IWEJJbUVJ1bNzj^SMVo!D%W{Cm6+hH_IHj7wYh9t_IA0cGTFuc zB8*>IZ)i%GscfmYDxFPlIEtR#)-uMx!+e_B?e(N>Sd4o!hc%=i;CK0{%96LC(|Xga zDW-5BPY5Em7p6dy8dLu?D7zT19gQN6$6LW&JS7TG)P{SYvu3@$*sLEuGA_{0pWh`f z5>@++U+C0WR@a8#9#xy1#m>WX%enS|<>SMlWzR`g>aoYKxRQB*xKlD|<^uIthClo7 zg;P>pY)kWhk5$>uu=CH{uLY(o5qxg7tP=C|F${?}LzMbbft_Eq%6@AffSqK1E9$33 zsRtJ}67f9wmLA*bh)RTv+pqf8+tW*Vgt2Wl>aE#FgjPi^p34V7k_8`r5*kM8o!M`5 zJ5qhvZ=CUdHix0|hRNP}M+eAk13Iho!@$tkE$qNm(|Zh9P_m-Ck!)JC2Ub)INnfRedE*2wHz{z? zTGJz@=5ywvGZ9lN&6O$JgI`O@eiI}&Tp64EdMDyw{#j-GH0PP@TPm%gTKB-vv4t;I z&aUrT&@avL)z*N_3lacc{22mYltnsw1Mnl5l@-5$tVdV{F)bY7dOCrJXR2U)Um9vo=hH>KeaTp%_3 zJN-ZaAG1VZV}&(C+dPKAe|rPpQCTBl7fdtVCE0mvyPZKY z`do@75~)uM$|m?9t8gvuHv4Usp(Xv+RU`3-N|J>uR4>Jfew}y>m1|VG{tZ${p=zQN zrB>1XI0ik2`t%8>`}jA_5j9`gj>FZNJ@v~hQ^vfzgY!dpH9be|5GqDPxs9xy zxI*CWXGwD2)-v-7Y2b=Kj{g!K`fnnR{pdi%!^;o;b_@4tqJ9s5rx2=p7tOP;VSk*O zo1awO+b5@^YzI=So;=QAT+2FIiRT|2P!^}T7{Cl1Q{rlSXc?4Gi4j3Rntw#kG>V)= z#6%HT17>|>wJJGM(c4!%4-bAkiTr!{sT$^tT)9m-Oaj$M6LVm3l`EeeWTJ95%6&DN zYxOG#CP;N2R`o?H@b!pNo9MW24m;?^6f@`ZAhvRl%BUeZ(BX%NFzYaQN`=?FS|`Co zY@o_)n&d^ksik<*AB`Qrmdy@ThW7@TpM&0H@!tS82Quwu2g@-$Kr%x1<|~vMA)K8z zoVoQ1)Fxc^W(sKXc`J*7->-WJocuT2f)>)W?O+gB!NL35j-9GravY>@7Ef4i$nUjZ z^4yjjx&}p;(%&-`{joKo=yZJ=OWJ8ho>an>2D*pL{uVNLRakEJYR402ROPFA4~D>e zoEX&<D9=Ki|ev{MjI?{k^CGPDN1#|t`$Ck+`K@S z+-;`5#^gm+lrM%uC8VUu9y;&+oE9O@18B2A#IHI z+HxY`BF9;N>Xwe|oOy=1S^2nphk2qIcDa(!!8MffBYt&Dc!$I0pg8)K%S?SRo%?+* z1Gf_SjbCv;zZ3H-4RI6qEn^hE{W&t+TY_Bwb)430(C``C&waamG~tejSR!m$b7z-- z?(-Z+?Q@`BTYM9~I2BI7F?g`!3VTPA@*s<32T5P@RgGHrS+e565q!rfA>$CA4s>sS zgGeJhf0+U*AEP7qj?>g540PFbMcIhIP&M(3psu)U5mRFY7*#(GFE;Q_GoE$v_<8hO z979Rb743tpn#~3zP-Qj(e_luG+yOp^jVs*=*3^)#4PZf(2!ZU!z_TB#&{fKR@UZyw zj}#E>+XI48qet1b~9(qNs~4DWk=V*6|S>;W)Tx-Q@xi|L>7a|PTnF0X)Q4H z5(Pm~X&~4G59j1gdGw$wqn-mqwH@PTE?4*d^yW9s0r^fdnA=T2taoU#&}_pO14V7w z169spe z^a*?@I8g4|EEI+`j^nh_<4fRE&xewQ4+(sSYwfga=RbRdO{(wpk#Vv++W(-g`GH|x zZ}sAIMu-S?X$L6~<$~X!Oh+0QW%=Ql1^D}r8UHUsl3@@*)awB{iyo?&GzyW|vIJos z&YI7aHQ}EvNLe-8$|eqEXe<=%x6pASEh)txBTeGh2^5sZRP&zi;^)1+sTkQ8qXHkq zTV2S~EhrY>Wta+9b1_NYf-9dEk(s0LSdbjOk^~X`HeV`=+;h{EKcrOeZTwttZMCB2 z@*E;!lj!uP<^tT!N3OPbw2wRPd7&jL+k1Mt;D)rYKL(uR>-9KHK6AV%EUTz6KNB6 zAMg+ejf{8AKtpF7c`+dNf*Lk0gr&{i{u_C_m#co>IYOwp&ni3upYO*jm5L7>WgJ$O zliqr}!IuTz+Sb>MHkS8qbRSdoN}h&2cWo=a0^ZzUJwNjhaSeE*PWrmLy6*4fnF8j{ z8>fHeQo~PK2nh-4-u`;{`hl4u)hcV4U65S8oPP8#0i6&&{iGduBF6(HkNDj%2S!ew zBw0_^_V@gbIi||L~$C}Y;Q$hESVy=X^!0p_>{cioQciLAF;|-9mKgE+_RNE+Su=6 z2%QP0Uh9VvPEd!3CG{!=Y06~qxG{2h;p=`ND5Q}Aan8#$*S!wXF5o!-Fi6+(B1#Ri z;hLsTC-5$G(%x%UV?cdjbgb=u6La6U(jk#KBDyGslzz@cpR8o98wXeJXopDccBDR` zV}{M+-^yAs<6gE36(dAA<{qJAMP#|J_^DEx+Cj}{Z7#ib##m>JLVGybf_K|pf)xF% zqnaC};+qQUx`nl-xZFH=*)q=3hVz3;46Z$7No*ztY};1A{&Dxyc_Ln>a0S&z)uADk zzE53k&@P|VxqPT-QTP21d$vrttpgkE%9+#skQ5S<2`|OkE-id&JQ)AA&6#9o-Lh~>=5(Y9q|B(vJ1fT!lO-0G5A$F4lD9<9tCP-X@S^>PGrTz7bJ zst!(N?nv=uGamBj^ltpzV`n~4fD>Nf-@vf=%1#K|XA--o?1>-C8%Wc`i<@4iU1y)a z*$2KwNd@H=c{s=2VlsX}n)%E&C=Un%M{wi)X;K@mE%Hb9pX?K3I({a{F4OhfDhFUJ zISV#pf2<&@ceqiRNLKH@Md021nb930MX*r72dG+V2}x`sAtV%6Fcv@W)=+No5j@@G zD3A?dz~aQN&!bdnIJD9VjsT+sXbst-6XL<)KKrHEj346KpmQy^?%+UV6C@Pk4g-a| zd(wus-gOWcZuuU!9GnP_rK$AtSM`-OhOD2p4!Z}Ejof^#Zow`vOr>Z3zHS3yXB1ss zm8xer*HDX0H~!#d)-Y;8_b)D1R+&Y7i6Qfs2gh0T`#a~i}bM6A7&WE~Owy7)d zp0wu>wYv~X{epw|aBbzU_#`5b*J9Crj{ym8Fd&G#?1?)3O} zT(8r?YJ9I{Aa6<8YmB2mU-h?g7}d9>q7Rr*qvG;#UN<+MIYdPbtdU?TeW+m`lPnck zmNObofGV@#j$9zVY%lv!LL_SQ_$Ot$x!4#%n~&ErK5tA!26)$LJAV!;jp_@@H-5;w zuky2bYbBvG4Z;!2aB~K$52APryhrS1@|l}w9fIUfZhbXq|JqsZdw(D?73M8KR5C+4 zpM+=0{dsB)hzzApEXf0cGQ6tCZL*IV10|!_OkE~>F-%hJhrj^cEK;`>*fH>!Jk#^z- zo~?*~1M9&J;3vkQ$)c4U@tyZA^{z4tsns3QAMwyBTP^Mho4^ls(Q-tUNrh^qjr@i)3M9jXef@^Kqaq1C^*v|o>+tw3bdF!2Q&RiPTMdWU3YSGp7EM35*WJE zPgn>xCU4|Jo9x#!!mW9(A1XAqTigsvTAT|M*%|vGYx>s3GSV$#{}2oqTE39^u{ux| zK?M5sKWA0*B(z8LpG6IJbq)OdX|Htoegkw%)D@A)NgYE%$^B7Uq%1|^ZJ{85w09v4 zYf4qMiWDrOj4P<2UA+-4N&^#n-MEn`7kSX-BNKe$n_aR3qLuZ2^L&2p5J~Ps_Vt0f z-E&IU0_4~$f#G67CPpb!y10cF$l2{B=WE_y-Oo+88rMFZx&2VDu~;=wM-xbX+lz8^ zjjiqDc!NeIF(XKWCaya!Gd(-jj`m#jPCa{dDF+n38kk1Y5yj)Z7jD`<7TQPq-X5EuClIrQq8eynmExh}GKySN!2bN!O z)QY{yA$`$HowQ&qQZusUnPQsso)&I6iF(+7k<94U2*~;|q8IB14@#e?XV{y-kVN6- zg@pcz~9pYMWmQ7c`rwt9~X@b7BDG7*X0(VTPGhnXfU8Wv>q(% zICa)Q8>^T!+Mmu~e2@sag&~`|wlS7X13;fgu8Dx#I#3)pgaNG*wU%hr%|qiG45VnF zncEO8CvQNn!Lk~-O*jPfNmGg`#!SSUhK9dzu-2|obN*9e`6gP8IlVE2nB<1SSCR+u znJA^^AB~eZGZ_k5M?Kc;NO492a^< zD(OI5SjqR(1k4so8MqvHBP*lVJ+0p>Wr5qk2fH;hWo;l%*a{95?9(O84BpOqUBGu@ z4-B4L^v<5Qw2#Phi;AdTEJ>c+wcZ`38;TP_r>@WX%6Z&^eX>7Gzr}|G{2up^`Ib=F z_HhmDzY*_$cDC^oMs$t=SdG|(J`-E7QR)t}#jst8(lBds7$tqyo)wuR(TnXD;HD?& zY@(DSpcr9RXb$|OyMIyTTO9Ljr3INCZ9ewi=bJoV1roaX!Z_>Mt0x`+1g@e{z}xb| zmXYkCnEH%2{Q2@TF30W}+^k^&>24G6;NiiM>q_=g=%wx7%u|s{uN_!+{~7PQaH8|( zhK=PfOX%ti1&aF#c25-)9bP{(;Vyd@#D2BDrO&ILA0=P9nN&M^LS4w>dSvO%MY_RFGjTLpgeDEhQg@nk6^FWx zl*1=jKElH-&bd!hexfk5o7{l3-K~G~6!fNL)3)D$?g+Y#u}39(PG7s4)nuV<^(QBN zXEY?pz4ZNhfdfw1m&(tzk7j{+4IT_egQqih|Lz46Fv@k+dkj!;2tQrWiL2rWNI`t- z+r?qjtQz@ov(`8{y5ynavvW(N&@7JSPV6X&ni@F*H4m_7hDJ*lEotBEu0HD0GP>8}hQ=Q^gWa$^DgRl8f-9`uoMt*CV_7YD0Egx;jIC)t^6np4v*xxLmL5483$3iI?g~6<#XaWDLKi!@p^=>y_CBu6DxggMalW z0_MBD$pItzRBsP4mVPw=k&*1O9{``n?OO#PitQNlQ-D;y>$`if@y?A)BI<_)1BGd} zAesr2GRRXSdd#;E53{@ton$?hK{Z}}iJm*(y@NRxXB;M=VEam~zd?5!-6H?P{_A-3 z6S0umA&#+f|AgMkZO1Q)+0Gby&@Zs~yu~L$--sW|Z!_$TK}QCZ{6~gZX2NODp0EDH zfKk)g*zt_urKYOJDJ2R#ibYF;LGWs4TyC+QN(3lN)aeD#ms5In`o7?jogs4Ymw68r<(Dizy z3D%rSC$?QsR?#pkdbAU;wBl>%pan8mN?N$qgA`JtV~}qz6GctuLc#YZxc}J-`&Z0Ed_1V z8EWXffc;wq$w1Pr4$&=KbyUS4Nv8uV66VLk$}hEn>K)G z3Qt%*@N;9Mz=O%;X02H+lSy$>EQTxd(VrQv|d?Kt>y>R-cQ8N zNasEg2>Pd$8fo>~1~O`j+8f_CD(BLzT^EtoRV_S4A2%O9ym~Fd}g7aJOp6oAm)VsHR?N=@xQjq2#wO5j58P;{k%biE0#LR0{;< zjKU(Ns@TS|lg*YX1V%kO&@VTq2Ql7J+Sw3ymOqDZDrM*>vxc$;az)Lxk-9#RjK~s~ zDg|YM#Utg_jlVP$!r{do1Bvy7X7P9$?{FN*wpwKB9Q3IYP(4Th#_nWWYSvU%mC90r;%&@z{ZL@Cx zkoW4@4a}_@xQ1*yp%HGWK+^_oVZ5}yb1i*&o0xh1@QX*OJ<|)Np^braiW;1Q4Eo8> z5OGMp^IBIAAF5uXOJH}t`5MswXb*rkM7E0>R&wF?wP$&j-!YX&dFV4)9l{Y>1k_l6H^nM(Je)cVCwh7RUk zT~YMb=gYyCOj=6n!~J}=xyYEK&5=_h^JRo5n)uCp)&QB=)A@*A6?sp&W!duh5gIM;2usc^#n4idm3 zWs`3neKWjR{0dl5y1tv|5~vPhnxEnvEH~5Tf-oz5(RFEXk|>yh{UmAiqg)l&2X~oY zxrI)vPtCEu&M2d_ULK2E7BFCDe^H+Nj?XvCh&>lUleB)ln&Ety9zBrLNg;X1pljbB z;cw-6qC%p{pe;mt_x)eO4TA!r%T(?$HR-wr%NvP?PI2B^B;D|Po=wlyZyYu6hvt4i zR-b&~vmuQf8AN*Qn1=cnv)vpwC8JXr2)ghYj|JgFfA?cQ%dFZ-Q)?WeGj5COpn8a_ z)+Cou7|2Jf3Hj4Ue<^^i5ju%;Wrw4{MGVY%a$ymxcl{407l9p=!x`9zKw96Z-(9_JX@pGlG`d>lQiNRkUc>PDRL)y_Y=c?a+qKAlJ zD;%lYyMK4EkmXk3dXfGR+XUElps^!M?9h^hHLUqK!f4x+h7}|w+W`uj<7W)&Ia`nI z!lRg+afF&)=kbkw&$P5q(X{-A!>-$j6;>Y|XgjGq5iI2NybzTCDPi#vi!IfYnWW)T{VNa=DoiJa{S|o|nthMT=jy>r&6vXtzu|cJ z0C#8pcw#@x8(#1j-Mp=?+19&IkpJj)6ZpmDd$@blW}d$i;z%%m9Hlu3LA1`Ry`T@9 zRs+?a6lhhfJX{Sejto26!Y;WbSAII9~GXAMrY82BVF zETuxKj@=aBP z6|%XFxVLytFZ5KR@+THpO@Z~1TmY`~A~%jzQ<3N<4f2!r5i)>6UgDJK;)dp=UmCyszq}seEqYU zdWM*rAVM;XIP^&9|1Y-v@SD&g&ylI^H^GLM@wt@BCE+wexQQWOi6#f?*}UJak_jtP z52WRPqaY{9IwqMG(wBX#hp0^viLn|pE(tg1&8~Y39!z-bfM3I(MLeJt9C4nZ%ue&| z16%V8IXSSxQ)>+l$jm4)H1@ORpH2HF^4LMC8ZoNx86dUzw}9&2U?v&$`yD%b(eNwJ zddtf|ts3ragFWrimTfU#%K?9&sq70+3(%?&*IqreEz`dq<#2BvvRJ@vu@^PDHYMksL{BTK=cYln-uf|WD9zP`E0d9P;IpZVax99^I z6nF5KvqLIrW%k(q-0+=f)rP01fNv<7&ec=I+NV>q#+e|tWe;ubYDQjyT&n(p#9CQ z|1a07Z~7UQck7Rr;NA-7DMcA@11MDPapgz&{{@?_u7tG=m=IN?A&vy5rC>I`8XWm0 zY}AdFrbP9XuyaZ#9ps$ghBYxCEWl6v7;Na!3w5B<$_2FflGyyrI4CvrY3@V=Ia{-< z|B`zDu%H@iQBankGL6T7P-H1f#zm87(%^R~v$5!=Aw@?l35E1WX>geyCqg19)%C_C zzzM|4T6$mYQWQn*CDdz0dGZ#gPZSRf?$lOo_Q7y(k6#MCs6Bk|9Oa|-e2_{1F|l!p zYb|jG#Qv~~*oiO4%4#Dq`mY}m&8(tbW$NLnVxUwppL%btVCYA-$vQOY9D=hSxpLl$ zmZ&+X#x~j2t@os|wR7gmGzK&_gkqw1$!q23|BTznkfA&}1g+1oq!fXJqkM4a_@yS& z#r~ot;V5gs>$`tkjsdePeYTe2`ifvrGQM+tX1Zw-v-KH}S4Q#HI%SO~eC4Q0P^WvR z&F1W{BInL3fl92C()_e#lbsrx@JyDi%QsEdp(1P!L%_FM=(=Ki4Tuq4BS2_9Nr%Nd zSj6J_P8;35gk``s76W&W_L6;qUFt^ap?4cUw!DMpu8Oe_`7| zb;X-k;7OrU4WM(-{3%o3G&n*x-U=Gcr3 z?E6^?Ue2|~6v`-jb4|Ne4trqpbI6;QUmnG`-~YL;2`Sf?r2L@cn9*J)zAvCt2x(T< zaM2;5Pzd_Q&;*r;!DhQ=<0g0^K*~TJu5#<+k?93^0lwH2_O>f~3chiZL5vTqsyjw@Br99CzYTy&k~C0iOm6%Oty69fh>Iiy*k=O0lqh-X1qy(77Pwc(7+q*4JTcoI z_Mq{pBH^>El%*UN$-A>qs7#&)E$lc?RzdTn0!QdilWJT*ZCwq%_lhuGgHb(tQslE( z0O|%x@t6Dgdp>>M-@9rYxovVOz3Ak+EV*JfelW0Kk;EMouAa`o9wV>v3-;1EMr=(4eDN!V2 z<`)%9g|aLPL~h(Jn|p5yGCViQ@}np-ys6aP~EA{Q7SlX)F529w62kFkHL2GyYBOd2{U_Trl~D0_dG;*$*3Zz~^L z`9y{}_i%_3W=*YZNsYYke42sx!~wx)U$;C>Oo2TLMmm$fnUyae94#79_2x4 z-&u@L*~S&I_;lTR;-QlcD?E4lCDMDf;AcST4@VG}fF+={5Z}Q+p*#a*Ej&a`4`Y0c zH3}#k5C!V>AM8mzq4zXixsrV5k1h)K9Cmyi1&Ok*Z-bdH$wYs`p6+(5;#dA!Gje6z zgkmbd0PZ+y{bGP1wC+hZQN{eQ39fO0#EZeDPpAv*BmYOvSDT{b;9C28BiO^w z@&f}gxGV4~!@YlVBEk1n`OisgC0;j&`^ltyoNXZxPVLVsvD^uDYtzb*_+SO)Le|Wf z$8Z%nMIwpx1PVwSgpgG);y3X@&hiERV@Ls+MlXfW+paH3vNr{-#FDDcxVU92mbD3e zUCB^7h-(yq6ExnMl+%FQO9uXon-wmf;I2XFm`}g7C&sm*55#kFJ?mFkCX?!dKPEX+ zZDiNf)|%BiNhV=-@@^*mEE&gq;e{{ffK&G@+7|LE)^Nz|mvmXA>^{-z&PA<4dBoIH z;bhzdc$Y;!SH{M&Dpvb%K4|>64m02Y0#6Hdc)qrh6VZ4Za?w-**^x&RaVC z9ce=!i`yP!?CG*Q*?1*_O0#xStf4)ROE~yE>pWAqyoTgGwPr6J9KuX@;P6DfUn_hW zu#X58uK12&+@2h-Cn={yQM~&Ty*)I65myOjqLfAH{#?fpJq(Ncd|sEbtVB>hC~m^A zABCP7!bq)Q_hB-_wOm=43j9usqo4VOkQ|sx7lbK%*mzX-pmve5q;;Ze`l0+LFgV`Y zOG%@rd6fgZvv9(jpSN2R*+_?qU{bh!4+FI?W|qM$Khw>pDHrm#c8CV`=$OXuZgyIF z-;`yrgiR{jxUYe4FR$0k;fD{~tC&%bytNTrUb?JAEPO%A&xUHsWfaVS>O`ySa&OL1#ZBw`VWZ4LmPc z{wSYPce5AfM$oL=35a(%1|phh z#=x)s2DUNsz{4K{wWaEj!I;GN0QK{QHAy;j4p(_sdcBWniBl8=rPxp{8E(}Z(o4OT<=MPPD(Qz-yS9ADZ#(Vo#Kpe$&oDQx5 zwv_tFHQ3y?XVj6oMD3?`$ZsKaLN3>$0>!1J1_}Ltj^Yba=08=iUUvh?&}B2DcO3oG zgNa=h2zh!0M;J9c3i+4U$@yYwG16@J4C`$08++P}n3iIgfaaVV{~OEC8L^53MXqFV zNrp1+e@H@TKi5DaDK#cZQ*{g>ZJ|Vk3gopBOojZ9;d2V^%v<(T9tU$1?p5_g&^I(TZt&cJg?kXprd z$~-qh0FN&`9cM8=n!aP;_|`R2aX3miek5F>9ad}4FJwg=BP@nNTNPWmv?O$|HF=l+ z#K)bOA?N{nprCMb}4-i4PzQxK66FuKV?q*ai)y}Fhd zM7OijR#!-zqC}qi{kj_Mck^+cv-s65kcCZcWg-|6htB((9VGG?*Z~L5)d2N!+SVg_ zrE$Wjac!@ZojxGUp_5xS`6f;9Jyzo-Njv^caI`fHsMxuIUd<<;fb29Py`iV~Fc0W; zxr7DM-vy;|hVe_OCv^hA(E*!=4ORY`b2P7c6Nm|BqelkG2=CTjb0-fmhP*=(R>Km? zwPHTe<@;$;BwmN9r9UW#v@}2AO1a&NmVae0Iky0CqM4sBR|7}mWWL_?S5!vJg#RYM z%+PSK+Z0!57_AlXv&-h@GZe?rgM9pDY4a@xg&a@HZx=U6OOA8wc+-Ec;7Y+KuI20O zBW%et!Z#*9YLq59oN$Q)bH>jH&qATW%lOAzZVLWQY zD-VY^n&Oe`yp`F2O$$ZIsti};eHQD8>3}EbHLn*ehb@Z_Td-YEmpdH8X}zD9(aN3p zEE?_XK<06X*?;w|)fQ#5=CBV>=#vP#L={^zeU)#t5&7zak6f2$nzf4m2KX*93YC@7 zva=dNqv%YGyyu5DAYc9jQH@`Y;9 zBDZf*8-3i)`G}gqh!ihypRzoSm=?c-b-_N*!RylZo!}y%V}NmIM4!gz#%JEP)}=gJ zj)QhlFn93B`l#Wc58@=mzWXFkr$3}vKVu>_5ZrxID;Bg%bx^pN6^V;_r=dbbxWo3B zn0Ztg%1yI73mL#ZTaRXZjcR;8j#Jn^46OTM*b(F`N<7!Fgii}SdqaSh;qnl$$9D}| z1dRp2u#|C9E2h_clX?J)#OXTg6Sal5gz4BFanl-Jl0 zZE(Xyy1#1;`5sE)*ZA^RAZ-{hj|I|Fr$7Ub%o!*O<~%Ie_%;@Z7yjpw_E_`|nd!+z zAmQbt$?Y~z7&Wi&GSxDE%V~DA?UQLDCSFNspbQi#c>Mj|zrXNUw4`B^P9W)nW;AjRE0C1L`-bpKa1bz$9iIwp3%jF z=w8T0_|tZ11i37YJ8Cx~>^xT!%k?2lLh>}-{wy*HA__#~V&8cp%yS<8T#^weSr}0S z5mF=`K^(jP-LW4T{f;Jb@PqsIz=1GjY0kss@z03eZ42LT5IH8z>vERB;8-e(V{uo7 zmrVQ`HSu$hO0)cXf;HDdl0uwy8q!T1=TC0+X`ZRSvlZib-Eu?yv!@Re z!qB^E4GI(*MMh6rCOadmMt@H;quv}5Iuabnw9et_eab-rzx`)LPRw(=5cv^_z+${F z&39lAj7F5DqM#)PGJY5sqy&+x6`+K+9|OXxal=4wpV1Kz%zX*7dk!|+!H3}>-q^O0 zM)Q$k(}m#k8jr5B&lB&s3x#Qibjr|AOo1i*%uC>yTXCZ+5#9SSwXH?I7WP^21v+LJ zlW(|StW4U6se$!fX7Ou5u&WX9B}FK z?~mW#zpIkRv~=Q-@X~7ppNw%T^parQ%>!S>Rbf;qQ4ukz@gM}At1XiE^OXFv<_=eT zx+vr{B9!`ofHg8?;(p$IzbT}trGkGXJ~s|;N6afdDcE044O=4?9YNf+X5s4i99DR( z74@~RiolcFdAx;FVS^x##f{xOm&K7Cf~dOn`&S5Q9mPSlFVMF?yCTWBSX0@I%?A=6YB`voBxpHgWs_ zgm|{+$-R7W);}bl19+zhNdo?ShDFl+VDjAc!q9IVC-q_IdUpVWyB59A*Ma^-*|=YT zIVtFL_We7M>GXx{70$k!z8xS6&WhRX`vEVnFFqV|)?2`DGrQNYARCX;+4h8DF3<&N zsuc8JQ<3-A$u(_R;1X9(DPGXH(dQWPkbgw&8bWBleI@Rq#jpUe=^=F4voBz z*4m{mu@Kq*c*k9>7cV`ngipp;l}I3%HKK4f0-ub5U-j)E7l*{}VPXyHv4kC#*tX+q zww5yM4e~!Vs`zua8Ta;#RBYS%h@0=ICGcG5? zJgRF^J(jPHqbF`XrYyHV_me$QvrzJzM< zY(g~WvK{ER`X)yaTh5)I32+h}BDaM(%_9giwmbxA9toAiLZXra(i73sGRbpax85Cm z5vx{g;`dF@jMYnTLayGV=}<=am3e)OHI+#tnd z!^dNGH?WB~=pWg!GJ`*W1@A$})D5(pBN#L_LjVm+GEMtH^PdRP1E54wTk|ay8iq>U zBXKiyApK*tiTL`Ph(GbvHl)UUssj%$ESyJsuEoCh>H#S=LNcCYlB9ddzqWZcv= zF2E~V4dl*G{#!)5yft65Z98LLNrMr1U&2Kl#}dJ@N>cbW@5KrBYToJG=ijHR#0+A8 zK^RcaGw8hIxYBd+5}<=od3Pb34s%u1?*H7a9DAGch}a@=ZYh)=S+pLm@D5^-cv?hox4aq2VKwWm&DV(^?C#2eYUqbPjkDsy8(k2PiAlNz{z#v>V! z{isI1MQ*g!PAL?y7c=TpVnNDw4DARH6%A-Bk3=|g^P;V+9ri3BWw5Szd6_hNUZ>38 z>yvw-B8L@)29>;HaI)CyuRmx<@k2GntM+LYi1@G46fK>&`*FDBcf*J#NhU>2{5;|> z(s;`WXt&{C$V=Zrj0*T~_xsMq>do_k>@U6S#{PFSqehnkV{@a?TMPF%mQsgyc*I%l zM5!EE4KoRnHye%J65}G17d+?RkJ%F~Wwne(F59bw*n4#{5FheY)TTX|$zirKCv9^b zF=#d0Z~Ugb?&=66cBS+!YQ{!*vhLKO;uLu2Lbn5VSuddFeF-;<y>7NHsSp2Cy;4-w^5C0>5pnCud-Op`d6H*LhW1FMLIW=yvy`XKPYuIFU zk#;^-9<9HLO}W(TjiBuWIA>Uup|`bwcPNu>;5J6$_8Eo_R6BkVURnU=vj#o%wt;%k zrqQOJLHl-2&j|>FsI>)XghPgSz4wWUs4YJz|1 zf7=ikxjiBo|6hKkI|9th`DY*(u^iPa)*ZAcDMNHlgLaXaz@bQ|nXWS)#2Cgy65W9*4^ma5VOrpB%x`y%J9ahv5ZY(F-EY1FUr>8nfj5NnivP*G}8j;d; zVai7UHcuoVXW@g6IB`jyQWRBhiQpv0W=z%9jBI;3a>-xdc98UfT?KWP5^>*JV&#Ez z*2Fn{8MXL{zv1DwShwH1g#R#?1qHWosFHxGac~~v(7TTYu2iUR56!#mrq9@waAf2xc$ zZm(x;9&Cd@Z`Ix-`67P42#j1m1f?^mCmE;&oQrR;SeKV*;=iG^9%liQ9|5)zotG)V zwv&pQJo~HeEey0m8Ec~I68823*ms(Wb{~V@!z>Tp%T(&a6xP5Be9RqzW3exD(1j1a z8?{Juzh@^>jj(|08g_8gzVSWR9mw62c}@H8eIh8!V}=D>)A+H)WxG8*{^^8Q(SXHz z_jQ6eY+xo(PW+GHe}sW5K{8vv6X3YQ3hN&UiX){ zKtxmUhl<}V@1!^{9#?mtxb`tU*(3|Ik-uahEpI%C%u1$TGw-jV_(|_B(ZKskr7q6t z51t6H>@r?;q-5X8oA12R!jH&WF_Im!#nF#k5=)A$_N%8Qz1kezjD zWQS7L4M%f70x&S71J;#cnPgzUf8vD`BT#Q35-xY z6<#mBrKr!tsQXwW61VQ*m5N36ZD&+w>#&xYTXf34CzF_vAy%gZhr>#T#5(rC3$71T z@Yg)f_hM_9gLPabm%dD>i|KRG%9s{3dFM=sL@^x_GzjH$sU9aKI2=&QM)e7k>ZshW z5)+<>$wX_$Gvp1Q44J*Ts?Md+{!W*n_5gJ>&#YgL=%>A28t|Gw%4#UoPaB0W4<=Sg zT2X*-$^}l`B#@;1!}Ag#I{hA)c#a?gO(9rIXBPl3qWuB@?+T`O3~YGmFWrn9AYhqA zOexXZT*|k<);zO9eHbw?1&uLHre>huga9?d1g>k~v0oM)b7Lsx-+|jo*e9;}>)8>k z_H%=dQ{D-4OM+>q8@ZM9%HGHqXb;$--f=Eod@O$dznM$xR(Kbinv0R^lVddu?(q^p zd+F8wQK4Pt4$GmkKtH6amIk`$F#UXW@2H0YS7Q@L*m6fLpV7L7-hnyC(5XO7oO$qd z3y&fFt1hv%HeAhtysunzOZPZxr_w3(w<% z==Yf^brX#4+~X+mYMOj-K-*0+pROSE;I2?CIYilENFg#oyk8^H741<{E+q6c>(iOU zNkT7vJ^4*mB)JNXfq~PgEu{-=nKCy9Wk`l@_KLIOV4%(tSRLU)6O!S#EFd5cr-fthoZjpSpLaK=k@0(1| z05_TEk@CL~HTn=zr)$$J_c91G@NNY(4ygtRP5oy9s<^&b&-`hO1F9+voRq;_y+f4q5qTa}|b3n55OZ6WW?M$9) zo_%Ocyu+L_=;Nv2w)g*U%X%kEey3_4LE^h!&>#fVlm2rm zdb%H}g<%3$c1weQsh0L0Hq%|wL2=MXs00B~t}fHh)I6h@Z;D;_;X}mfWJjtxtgesJ z`xvCTij00gPUB~PRqx7p zOFfw_A&dB~rD^Kv+3&S2-v9b#BP&7@^J}vjpLl1yXncvC$}a?(YPXoAV89a0NEyN5 zlX#Ihf$e0{TEu**&*ToffzUb9W_|X{S(D_9_<%hdZOsB& z3La;f`l-(f)wMI(9 zm1A}G3wPc$zayO1M~O;{qZrZ1I#!UyNsnE^9At=-zC*pCd@0_j{sgC{n2Cya7Gq9( zE2QCQK42Ep9Px6~6+vs0E1{Is)2x)nE6u;UnZJHJ<)etv5OWB09&qi-ycqq0j2Cp= z_mgqzHW+im zd3)#YWO`%CSHo6j(CwZ`=s&M2XK9U8XY>YZsi>ZMmdos$>WIXinuA+k>3x>;TsBJH z{dE!ld%ysG*a%KUa16a@oQ0w4Lg<9+)@5wT(mJ=!&a(YC;b<;9z# z1LjC98DmVGBhi=1iO8ZEyy5^6$nr_;*-rn3t}k4Hj&+pjj|I<{&O<`@d&TFx*rGiJ z(al5<+}OUZmajZ1P0ruq&Q84>bpln#m*5$BCZZ(WsF?^eDl1zY8%CAz z$SE;X$^a<@af~G-Dn*j@v;689nPVsy)4V!adZco>757o%==%$wD5c1yi!;wX3|x4d zEG%0-AcPehZAu}R9bX12yf|@RD+hgtcx_Q9QjhjcO4^%!YuhD}`YuW38d9Q9Xa$4> zUUhlLG-8Z27p2bEu3ddi0U!Un1c5oxk#`r`6u&vW@wM_)MK_>Gs!%0uXX;^_zv@fW zwM+e&DaoiEnyPULRy`a6__up0jzD8p>WD82FD3ll$;Ux4CGPol0*bZsPy+6Q8()-@ zPg(#Yh~n;ZPzRD+r(V2tM2CNqKypq|OS04S1M}WXWbL96k>;cM1h1y4nMgx?ncMKC1>%w+#SWqBY@~C}zPGaArW_0N;HAVxTS}K(J z+!k1_a6|R7fQq{vpi$a~=gqZ0XhIEwcK@a(8hO3%=UTZ~hb;nu9}RukkB7am-erep zchF{e^qkdi>P*E3tjhjhbCDy=RxvxKQ9)Lk&4MT z6&$LV=v+D9CgYg1*gDt91#5C({H#!AN^e6rS@P>^{|MN6@qgW;}EYbdkx0hQLSm zt7L;j|CacJ1R|!K{<2qwGh|(~u6h=)NqC!{Du z{--h&7_zg`Gy}>$i!$!TaQZF&I!NS*jmSB50;%Jt=aE~AU8Y2;=WOyDv&;0EVt9Yz zwTI|`XKBP(_DYX3xTaaetdK^nuq#2UNlEwVsJc7JE`%v|j{Q(!PABFb_EIcU$B8S*fVcmbFFug!1NAI>M ziQML3^~_r}x)M*Jy_^p~Y9ZL^>$9^rPPtJD_y>PO34g3IF9 zPS{L>xAflFdB81NR+lltN!|$%w6jK-vigFZ>iMcWKVq3tMQ!fEpJ?AgB;d3Cn3@Ni zuzLUSEeH++uj2i>>wDLY(D`HcRqrl&z%Au5O;WM)wXrArHbBwItp6o~5_H&;4eXxFJzS6k;Uq*8t*HDNWxNFFX9b^^f@>Q;Pwi^)o>o8o(l)QsG;6-G4rdXumg+~;rYbjc z$T!xqu2TxzX3yA-i>ic=h`q$^K>7dtYyrSeIFzaitAtSRIAdMQ2A}UQUys_|Rj+;2z0Wn%KH2KG^Wul3 zn0{&QMVH;L!btIWeks~hRRz+>Z;vvXndhQw>Rn~O&SK2yo&_=Xjf>;O33q|!m?(DH zk#VYMd=hvq3&n;34wr5CdA)yu-;3U`au#3RSzQIC)0X(w)bB$WV#ZyNj6AxzoyFg< zX(FWInhi|TAb~pAfq(dhS3T?$Hhu;By}vxbChCJR(Og{QNd)Q0eHbUE9bAGA;Ef-# z)JU8Q=gV{KG|ke2L<~sa)!gRfym<~)0pDPix=3J#1?)x(10!+IS|9wAjj~igOIpw! zJr+?YADM8o<+L=lX>hR;^J{(nlu`PxdlYz9nDWcsn1DN60N<4ufwjvdHLP}2bH@=7 zxF~Sq?YyUU+fr!k|k)BaAhQuiwV1kVk(Y8@q2y z{Ol`PRoKw5b)LsODc9sg()z0o>wy2o+_4P`&HNZzf#^iU*{9S2y{9|@rV^8Kh0SKqBhQRa_PM6~_ zbHGFDx;%>67(v7r5+;~eLn9lfNg(}{Ao{JT$b0fSdN@MoX*#^zN3nrkM<|9Jo{3x> zScgk#^Q2IlT5PHYL=~^^w*O0oyrfgq-F_I0aFS_ej0xE>4f|%X!7n||_kA|<5Zo{E zp1L3Nqr%5V*C6oetaQQd^aphPL)N^7i_H9M8#>t%xDEowfQpak{iuARn>`P$MuT?o zJ#IPXqqFTY&(#B7mAwi`w|e8^rZUA8!lW7OtCrMTHRp+>vkX6Jbq^fF{FXcuj>AR0 zX&ao6!!4TG(|l)H^G6&M8EyZjxOh-{O`U-c_X5g)qwPcsU*s`$n3sUIK7B|O3|vXj ziuMXXSOdG3#h$T5N%4cgJk!?GFL=@h2b|(vK0ciUqmG384;36l?U(VU@21 zCm3e7`S;i>Pj?HvXF-hH&Bq)g>I=l1p8>+dB{Bc<9?jTET6Hg%-NkL5{*dU`LEvVIJ$XwJYzniL)}Dmc?>PrNOD4Z zT3@y3kJlxNeP`lL$h|CLQ(zg5#TxNbP)y+SFL`=fJKccA{uabWmPC=KsD-v}X$ysXU9J5qBY^P!ymKhC%2tFd?&#i^d?WSa- zx|h6^UX32US}Tf$1$|j}j63?eCH%Q0d$KTi^UR+*ME@_x#z4@wG3q)&(b-iAa?}Ew z7n75qgFqV!r7FQU{*8ngm;`4Lao{YzHGU4L??P+eU zm^s4490X?l`Y^$=K)W>nT8OU33;wJZOC7TpuB`4vj=VV`{}`DooaTIXhP(niyFkG9 z3|PDH`9)I)9PP&bTQD1iLX=KU%Ka{|oP6%lhpcz!oH>}^;QY&Uh<3868IUtnx9}8L zJ{@!|Gr3X<;NJ_zdkQ0gWx5>y64F1(@KS-+f)Qs7CXBw78OQfPD>cF};9L7zL5_S# zA8pfjB4UUnZ_$8@hB6)Ra`lKyC_NZVF9>wr}ML_R_{B+=P#y(C>xC?B?U~? zF0LhLe@`m#t+w2%ghaoJDB31{GPV0yIRWIWZ zrG_uMKQbXk0uj_*_?wF#mp-@$Gr;vVIMUG@bx(8RvB!J)J4LsLb>OJEeAUSPxWe@n z%Psr_6&Z8n>_euLq)6S`Ki8&k5-QDbY zfQU88gL1C%fz%2w)SD(R0o0pHkY7BPUnt50C)+H+WQ9+Vpj~xQW}a<-pdAa>b$?mx zi&N3){F^6Ja)Kg7nq5Jv@GQxTbn73;dj( zIDgmPNSQysrtEXDw_FwAq8uOXt_HTXyA%W@@ zVBOa5aX#(P=J7fwv{aHe((od3hGSsydsJ^5N1^ri(u$7?sa>_z8%)GA*uzu{>{ z!g?N>TakP5%2NE8rw@g>@BHIAtE2)+B(%tX$Bi|Q@*Vk2-0>48tNSv?wsd?VsfOKTJK)6M2wd{`Ls>*Gv_@qU2awGShv?Ia)Z%ss^5UKz9$xYa?DDrUb5XICK#C znD82<`DnkrYC84qEPGi?2rkM==ptk=1l`+k&U}kmYq_nK)9U98M<#CCN56sxRmISo zA=eS_5+tyzO#xMM1_dCkLT^v^Hg5fm>n&T^r=vjE@iBGjI=`r3==#>D-7c5=BYY+ zzzNCwf3>sclf$;=LpnW#Hi!35yIoJE4-Z#$#~@7eYC#eq|4mJ4WdC9xO-*;uoIG}T zROuQy9UOzw{#S#nYBBp7sUEH8MW2oWdCw9R!>)%jgW@rQ1=LQ?SnnIiSSMv5B(huW zb(G|>GevO4ZqL}K%whC_G4t@DPz`qdwojX#qp~;jc{+k8_wu3|o=SVHV#9vN=7O7BnJ=qkk*oUUAR0~$C?7fFMclQmy>Z$#bij>sizju zq6FmK3krC%CIe!JJV}5$5Fe=*?W8Wb#$-A@a;xrrK~uHD=j1@5+PjCX?(yFlbq}(R z-Zg+r77KYN>c=guWgHB*{i_R$=pjq;FItbZa=ZVQ&cBr(-G0CYMkrr=RIp5Ke8zG2 z^bC!|Lz38>hkS%&%-AHnT;JnB-qsrT0eXLCgys+Bm>13aRvEVjL@*NdqS*B=JZd0eFFofl5P8kvW9l7*_TCk<$zKX zY}?F_n+>vM`|h!$#R{J3+s5va-v@{^>oX6Iqevm;&9lgl&7AX0;I;aW(A)k z5}nX*V{f|rj`(3#xwSKImIn6^e>`Pgj` z12c6rxr`P6w`X`y9iiT|opWi7(Bl|O?2VA{UhTg0yr%uX?hn3hM9V&ZkSqd^h2dmH zY9*SK;A%)||ptqbD)RjBgdP7&>zyfQPqAhv<<`&geC zi6D_*rr2k>0-B_+os!?Z4jbv>C%*ZfoOhELZ#{jN z1$}p(hm8-MY4}R9oO=(+m_nysgKt%)y6my=SK3rM)vydg9L1nd z&$$igw4@Z3Gqw$HtV@`x7Yke`S+r&nE-k;9%ZpNvE8vS)94*g-gHmwEKW}_w>ccxzeAXQWE8GrSt z;N%=h=g>3gnL$SY4r;T}pEK%^P;@}S{*x;bGR6mZ?Ko(}(TBjz&c_0d0GPJ&O&gEW z(6CDzI+!EyXHE+4ZzVOY`(QQJgA@mUxhCWYOe||?$s@ex5 zpxXOSqU-2Dm}x}Vi~2vlJXo$!Gd!?jaHSb&OQOTP>u6rSXXw8u^Ci%0(eDJIhNDq@ z91+ZnRVLT|bc{>U`Tm+(q}00h<5(Gkfc=~tr>;bablL(+(g|gosVrNB^l}6d^NDin zP=-Q-c8`uExFRb|+x7t~m)2PVB({*LLYF;zf|T{;*jz`Zrj!~|KC`fx23Aei=!7(m zAblTDsd&I#0=-uZr@G?YxoYLA_@2K#CrZW`9n7__`OsFdMsow=D)@j>Dw5tjysL*y ziqk6i4%rDqpu`6(&pLxo(%JTss@W3=~WG@KA;%WtBhwsAY7}83k9NeaHS(cjp#O~1KS+Y2d^n;=iMvSc_jK}EUx71iLg z+}gJ&CjIOmqs+7KjOFTo+V^9w7B%DfzdZ4=0w%mkEWf0Gnc@Je=Ipv)>Ud!JNB2XM zYG#1Wr}9bAfA6i^mUe~9SJ^8E!=m|7iLPf4Z`{Q%#1~F;eg5eLfu9Im*$A$^!88d7 zijF;ALT5UU_lTF7jKS5n{AuKC-xZ^dU@uij*YhGeJEyxR%wzE$grAgl)%8{HkTP%u zaVzO*na* zj^ittMr+k1pE;&cF?PBQR(U?_(gflHPszULB!V3hW0JYW%mzhO7JfR{fq7iR9Z)N& z&onX2#}T)LuC>dT3kod{R<47$IZ22a#}(|A-BQf9Gy@8*`x1y){fC&$#QIccOb>RP z%;EW-7`;CJGjO&}^|_SUpmAv8-NHkg;h_y7jUHq3_KI2MnfAi+Y;?^fEsQ^y#=QGr zy3d`!ZktaC*e*^eAD=mEqW}4r>*37BW8TbJ7-#V4klcpv3~b}kDN!G$WP`<7S@-@3 zQ4ZyK=7=?qyY}-xYznp_RY-gDxh-+xjjM>GDnX_?=RxBVr`Gq1Ln>~!nIaX@&4}t5 zaRwHa_sz$G>okio!$>t^XX!77U40}^e0J=-^;W#TEK33h%Xon&DEc>sN=UWop&Mw+ z(aFs~dCWJBqjwCbH`Tzw86fT`m@-NlX#*mzBS@2Yhee>5`nM17900$8X(J;r%WWF% zJ_jDy)QcrdH{lM76Sxt0&ll=@7KRADsG9+BM6qm}WQE8-2AWntmuaW<*ey4A!qk6r z&%P@eUo{R{3;JO4!_lHaD4`^9m9MnrE`Dz4|9o5JzYInFXjtM=!&+2Y8c`#T!IFpX z>p#03Zvm>{qs#SQs7#jN-#=CL6&cI*WbWs&q|yk)B`S)fI*07v8)qfWP{4Ui=|W4u z2)9c;iW*9$C&^b~(F}TGd#n0|{lTBpHW@?E^>SZYhtGU8$e|s^n^GISQqZk~bF@#=JHP*m>f})zyva(ET7r&eEq4mV2gq+i_7fjWO zjOqyxD=|%o?(ZG9KmNNOe8!B47RJ0mB~IrqPTQWFuH`7>2aVU0#~~zRs;@%rf$}f? znDW?K#sELm_E2|!z}c5^fj)cagqkT>383Hkl^3nI+{^cjtqYxRe?T-k^V$8E3_Lk8 zx!HZW;g#+LKKMn!g{!SAYX2CbAp3XZrb6w5!yj_wICt6~{^?g;A+8Y2oo(qZ2<*ex zc7lTyb{=t4v1X0@As%lf*d;D`P>oi82ka7j`5@Ib5N!c8tVefvVLAroW4OFsurJG- zgE9m0ui-~Vk%IcOJ zzL02mhzXNYJq7pjNupK+{UO|-z{+NsQCcg4$*qEf3B#n>yndVNbD@B1;>qz~XxSMX zZm7JxWr$0OB-R&($g_J&u@O>?n<4H=IbEa-C#uEev3(1D8}pGJ4~~kD?m{kBq!lDm z=AXh47)|Hs6H(Xkq-X50;RY%W#NfZZ{c44i2F4=O`0C+zcO{U)xA>w zflM=)4gWx*SyJvR=;Yh=geagVw(B&$x&g1AhQ6LN1%W=my;o|!kPN9zM9b4i9VBio zG1&&qvC2DnC=GAigNjAE0?rWLoUXx#@sbk6VkWqbHw-I`FjC*m!qOk0cMQ0phWMu4 zPfPhztHTE%KHYK;lN*3=Gy??VA19*kHIX=t0gNMVf?s|B`9C`ad#SJ&v0=<9H8w|mfUwlleUla;*OFo-(+x2_idKiRI{rMmdvF}YAyCpwfrd?(ww;~* zTdh>|e16$cm^St1&$?5fz;UG7gr!k^P?OCDsoEQ<>YHZ`$2W=z|MO7(Un(<@CjM&{ zx+=TVZ!Uh#cAQe#(h}b1VU1NN96Zj*wtU*lFx~D#!oH02W!<~6{hFEd2j{V-?pw3y z9h*4Y7yeT+ZJptf^r?|g*ZO$Eo_?B9z=5eHQhgpC^icA0nZthQc5D`Ayd)$1y&tJE zB|;LL+s7L6bh~7UR<1%xspNbxQokB3a!VW&yF%HBvpS3?e<&L5WiC|6QHS6!FSw;X zWTUwyu%`ahATEi`)ru~A$HVk{gsHwNS)cjG(*ia~9MXeomH#ic{O7RVr*uQXFr7f6 zMLeJ1bfE$--h(w@74EK*^QLy)sEd|#r0%{@qS$_JgcYi*z_-9~kbiNRcb0%M7t6T9 zsUIUHX0sf!^6_c>kozC{E-XbeiMsrsADV6(cqW9a@jkD+r-`{puVF0NS>FyQ~>5?1-B!!XgknZkbIRA6q z-|PB4&$i9WbKcCH+p*TM*1mss8??zR`@OKk(}s^pzS#zmgh=)7&Z;%kbIe}>`0|YO z0jveDhnAy%2oJL!pNysw*9Ev|%FfR7fiCMhAEGT)jtk-_ez7gWZGS+opG|3%s0udP zK6PJ_e->a~fI!nX`bQe)fxQr*L=#j5 z3!htEoG6x7_}pt`_THvHa9#r20%(XaYR%x-t-=2ew5gf$U*|&m%Nu$--r0)QCtD^^ zBgCut7jK&@oHMm>2l{ewOx-Yb;S~I0)Yo$)Z2xYxgr%6t2NS+q$M)Citv`|y`}^}@ zF!B&PC*Y}^BpnY|i2Ed(AGhYOu^R4bAgld=61<;DK>8+~vgB8elG%wmnBu8xuDUcQ<^OJv{kUN%We!k1O7HK72 z&skmJL|{=A-3-3B;xsb8Py1>xe2$;0sD2#(DMTPqZzAo69a4dH03FEDP76Wu&eZw2cXNAkw!q28dyh~tkQd;!4O*&pz@XZ;T8$I&KA1w`nP(6^> zsN=7BOg+4Mt1eKrGpZK>b$zH{qm(^y@NBJ<7Z=OM!qdS{K}MM?jK(C}n6TIA6xjntGf zM~3Q4g;8*+l}>+z)Ca%%$3g_u%JjS6_uJ?U@c7e4&9$|k#~TqaL&_h(c5!Sv`ta1< zOjB58SMKI_XO;-6*JhyfA2f&M#aCTxj><;V7!vvu2UHX-wBZXm!W=^K0wN8c4c3=- zIX;JIhItObVV)Aax9mr8?)X^7Eb3Jyuyj6$pWt(i_CNQ^+|p@?}EYHL+B=)4sRPMa5+M^o7W4yA>Qh8DB+p8^(nf8$Gn zJceA$${?U)xJ=-&+_wMHMoArt+AiY-dO=i&Y7+dBcn?o5GYj$Z0N_&hjO##ruPa6J z=|!(H`PHjcslT`&?)Mj(h_nn&(3Fgzgj2r+AFc z4ojYb>ILw`tf5jNg%^I1P5!I$R-l_*qJ0!Kd5Vl1f3lai=Du4zzgr zTAj+1Fj!R=DMxQygAkL#>zFPDaBlp$bp3)XwU_lQrZL3Y;=R8RVs1J$PGxgeK@Cvo z;UUm(v|=NVg5kXq{qt6n=Pk!Dc_9&74Us;Vr7_>q)CC^-re-FcIK{dH$+$bx^)LWV z$HyV4#V-cxdAe7p^RqiAgphblT$X~v{fG42k0kcYum0QNd~@(#TdOYpqNu-yyLyvo z2G0wm-NzBO_E0;84`KK$5hq9cS{QJ3unTAWXf0y;2VEz8; zgJX1~@;zV6Kh?7+Ff(ysRhLwS3AuF}vC?T-7$I!~c|k6ih?)n}N=LpGN0uOje-O(qT6KfwYWS&Op8XK*39V z?0KMzwp8(E(^sAW&Oz)y<6Y)5fN867Ul&^>hyjRAi~4yQ;OuLD}J0`tO6+ zQj~0FX^}nhIcY8}dG~L9COyvSr#| z@7d)xFX6PtwMBn}`r?f{vDDfMDuPWX7{4bZ9didzxEw(MtWjiU`-ti}}BOV?|2 z7H;;;V;Ls!{}B<5U~0S@BjS}4@in;2qxQ%OJ+F0Qk|pKRGax0kNdGeNtIPGpdGEWL{Q){|@a2pt!Cy*5`3VpzM zgpC&z#v1d;U902h(-^};&?j`}*7C~5sofKt<|E;;kxT_D<<>_37D-tD*QxN4TVdWv zZQ;vNE1{h}$cwj(dfNP)o58$6X)E%h>AZ%9MT|#`tu0=dRNHMm zi!wxG1imN<{mbsGUQ1rLj9&^+5gE(J=h9!>L^2ZRs5!Vaa11j$+dgV9TO%KijWsOv z=@Mlg>2Az1Axmmm=4%iD%_{l4$qeWQk8G~pID!+6e#^xO^yD3Fp(;kf-Jkr}Oql%i z_x1`(<8x=}f@Ex4-gCj8q`zI>47b5t@x+L?;1rq$7b5d9LTN zerQX(GFgT>Y#&#~7B7 zC}NQEaicvU?GNkc&uQgK`d6BgWKfcxA5fxNS~PsZ&0}?kMsUF59i6$$ixkqrQVz~q zF0K7lF!vFubBbId%69d zQ%_G+oBr@JBQe?3H$U(kRDoIvvEa*WBIFy^6_k>15;Z#TM6eZr{SS?lFz1u}NM2t(T7em9N^%GvuQMKki?pVABkkX9jm zzcPUz8;keU`}LDN^Pp*?4Adw8+DXpdDAF5-0oejf`LN*>j*HXrELLqlSG^y2D_05~ zuVurrU~y(9llZScZ;MySEKnR&kN6-do#y>^mvG*YjC@(@Vieyd#WW zDQ*!<^xO?uNAc=8L*`v&TyG;1p>ucmJHhw@DjjEkSQCMcB01&zM4+y5%?#;EGNeBx zSSP_ab;gTm~60*wTX6|5vs zx&SO(4y=&u8Ior;Iy4}IlYdZ9RG0iYP~es6Ef2niDVB3UO9BQaqHhR;$LmOrcD*BQ++40clL2A50$3kg2mAOuQlf`>DrSYv;d!l3- zZ&70k*7=USEWh@wSz@AVxjbm%ZIqW6+em>eUnT6BP)TARaOCO3Bl{<=G*;`&!37B=h)Fm zv@C@G%Wqt~9A&Q0pIN`MZHmT-3AxGLsr?48PAq8$YGgb^{YZI&Eq(TlTjJm{?eVLE zIiEwNOV{Fh!$c;qYn1h`1XQ7N>H+9Bb+1nBvOn<;<2C+DH|w+0Qgn`IB9J4JZklwr z2OaDC$S9b4U}mGJOFQtfS*&9Uhc~H12>~deuvk0AW+aJG%;YL?*O<$gGerE z$A6%_|C?_-5qXqEIo@$zjD|s>Z3k+GYwh~fozC z=NRnzw=#FgwyQ|gh^DOapOmi|`qDdWU1P4#l~NSkJVPE$%0)tmm}OSQBP(8FVnFa; z;j^DKoA@54cXD`1xFl`&w^N6I_)D3hww=E*SsEk9OB+vj(7;r5ZRXO%RNA~)2?z`}UJ!jyMsNAhw#fNZw1qnkn7)yr#;+y1Hygjk4st#LngU+0Zyxpjw_54c zT&--~ZB)ahVsC!nKh`9m1_UkJ!TU{p-4@^dCwnUnlRi)4>ffs@mtNP=!?ewH=G-$P zWdH%bE3cvC*MoYi5x+XiqH4F+TLBeH&JqNVh1TSN48Wgm_3@-DQXvTMI!_^eqzX-M zBS+OePhX1crYhb7oAc;_J(=S(yLKAR58g!Hd4-mWspby+R*+}!5u~0Jdu1{Cfc^8v zsz(D+(`TZ+jiP0cnnj3ZWm zc~QtLY{MQxz_OF*j8A<@{GrE)On@!QNSBz2cW{qGAw+ft$^f3dM~{Il2qq_oD$%;a zFxj(TZzR65uBk;tS`Kc6L~$%J4t7~&n$4YdFIn&#J7ic(AY2&EtaZy?@)AyW)DVV_ zGz$pC2y z1Yl-Cfq;DcE%s)jc;=x|g1?|ljPS&~Z8z+r=JRe<%pvg)PQB963MaDnt# zYu}USm}W=&l`(GCqxih~GYx8?P21TscbTJD3tVi9>RPW^9NlH~@})w)<+KctU;0p#9b>=<`$53a+= zWBLrAee^m`YOOVT+Q}>fNhbK>q+KC+7Xa*Bh%I}GJ9EL;Z|tM3fH zzZ|?EMsB4`kAJsrCa8W7kQQ^PIz@d=CDF4>*N;`gme=efn}qm(VBB&^=9MeVoZl9s zHdXXIxu+N@ZYb|r&CRP*j|JNKybVM z0;0Bfv@`aBUq-GK0Q{zX+%fXs-V7UCJ`9~hhc*);*p*Iostntl5c~bqhq$IbHGv%~ zbSoEn|I6b=OIj&@`EFsFU3qmHEkA0z8TN|pA6JVy3-hV5>o)@~T7GxEK)g44jvudO zDx1{iK_%v$GsgE!4 z#8{gYpWp|p!kDa?nWA`Aekk2C;FK=f7F#9=@wIMW*h^=~iRB@WugN>ZY_VQSnsoBBgSGm3%?I`EEZ&sLk)^8mDKh))l*)Al%H6Gcy1eHGOM|R}3~f$o zwE~^EtGJb` zQ;PMQUeMI`4MT?py!Trj$T|ZF-M3s-r8jc1FHJ*(O@dhD)C$qZJFqrM_=`l=4^+FeiRp#pi#e`_dVk`hT%Ksuvnec%E0&$wq$4EylYj z$HpCL%=a+Yj_r=ed!@;JR@@z+Ef_Ys$%>@JDSnoT$J9(sDukUC;6j6NfGLke9%QowzSv&X*S(T!_0q9jeR0lMp8r_m(6K zxDZ^q;xt1og76m3G-|!D=R5G-dF87fX4!qsN zB|-C>=&UozYfdJ{oAUp^|NXFi8p^nezTy{IMZAf6z4Qvzz4{YKlk4t}osGG7Sk(Vin9GC8V_9L>VR&UWC9VjTy;4gdlStFHHAe4bxM5kOI{|vZcpDF?3RirOuq6rMC8Fq)29RTy46t z_oqnAwArq_Jv~T9Tiu$c+Ns}G!l~>96l6bR)OR;NETFG&#wgmBaCygGHuOsZCMW~x z>?<6V#=t{Pt5pYO)_>?wQf^e5U_Hz)b%+DUZ>B3~iz78@_UI_B{b%KN3Q_u@uruDd z9^(clK--KVu{NTBWPVxWZChJiJw>G5JN8!lH~E4~?W*iaOXT448@VVw*IU`mnSby_}7W%{;@yQAhWJ|0_ zgq^B5u8rA5U!XbjD}W*JFoX7 z6J^pQntvQ5#_j0*Ioapecv{S#$A0%x0iH)j3!4tbF7_N-@?3Ne<`2E;#J`PNL40!#KJHtYba&_p~N<71tzbQ~HNJZS0CJ1jpcQHLjAxg2%-qy6JS&%?em zgXgrosZi1u31*ML^LAiady8)}X{x>g$q_NigNbw!mbsfm4v&)1p)>w#_ifgx^O6D6~DL$^i(H@Ey-4>GBCb8JEm(W78ZI46e9l`6nuR{A1 zqo}{uTqk#T3P2v;E&{aYIT09Kw{M`9MNy#ZQF)07=h47{Z4~@42zZE&DP*0zK(}|X zy0lhkm1gcy*;TxJ`VBN+v}u@lS{?2Px`z{L{@b9xf6v3^uQ*5Cqt{OJX1Ut-AR3Kz z8%Fd6CfMfU2Mp12oStF*D{9EXNkTD2ZC{5EFv3yvonDFW-EKBI(``5Rl-Sl~h$kV; zpbMi5RJ?rkfpTqS_rv=~A1-v5O`kB&;XITDXIAuoqXp>JM>td%u5}5s=(hU;B@@FR zeU8&4qgd^;G7PLky*h=+ITFCgA)C@xY%gW`j%%HtaWJiCdNGS>8u;WFudJ+pAOO&sQn=!DP3m{`;YQM4`uB8c-}#cqn|iKOkRp% z`BhoA;1Mq@zN_T$1xKuRhVG5gtY!&K^Wx9JG>JhkHwB{7c5Yq6&;*<&smB2xub0>h zpfpB@o_?>F$}uQ~biq~bpED#!Qt2MBJmXT!Xs;oXUw1mdi;1(&e+hmimC_}1y?HyA z`IX)KRdQ@8ayE~ZsY3GWO8ausWo`E z@(sSRzP6!_@WyvV@VVeJ56?^bYvk|ycyPLe`@}r93HZC@Db8^rhydOA<+HN5U;Ry| z4l=u0UFYn8W?V6p_SMf`|GwWFn7G3F99~hlwS5Qwv%s8valuL?T#T`!LO6nsAecd? z7NS?$aI~bDsA43$KN12p|XB2&~U&m3oKIWMLDAs+cg|5$=f)rB^ z9*#cDSU9n&KFmmsl}v z7>lWE-^AQ7Jw}uQadoom)usj3W|b5}nv)s-9S z;N|N_jjGr1GioM1vv}mEInhB_b=k!03lVU_lWs2qPMhPg{4ZP)Ep}GY6BbKB@+db> zE9O=+EB70*)|4Za)p=HQmgJ2LI!p38R=wcoye?yN)sv;y6HNu#+kIXQL#P}l*MV>= z$<;N<^yo9P8k&O)`ACy#P$bi$$WWtox|gPLvzWHPe5(7veWCO32wpjFU*9tc%M09; zt!IOniYrY#>`J)|-xR&&+MBI1r;T<5=2?;IP8I-DFbrqe#dO5^S=41!lX}-$pCo3$ zIS4Bvx2Kakh^*o2gc0Y`tgiRIb@a{Iw8ZlJpFqT$gFt|hyW$ERI9VR&&;|npu#Q`S zX_AnCM`aHlY;s{zSR0jv)S65jp>lG?P?4`e=QH5S0GHcfq}a;u@jWuP<@32`+9|4& z1ejv~C%pX-z;)lSkL~*t_Z8V`fnulx4h+psUo~Y$apSQVa@~#>q6Wq^Es=Hj!7rc;tc*-W2`6r&jY7tX| z;^!yQD3Y4VGH;qj5udn~a!oKf=j>`yMTCo)umQZsbT8*q+z4 z5=}q(>K=*~yv-=thFnXB zP9KrWQ?U^+1kzov7g+?JofGeRAijaXRROripJBYH-(ZrZtN)UU8Y5X=QjMN0cR_B;D`AQFo}h zGQ~4Hbbw5-jFDb5Q5=_B^T%7N=j}kk=KS_|u9P~d@6nzyO-S-q zRWo_=?GUmiGS65z-?xywT+jIfl7A88euN8Ke|^cOe|*+9^S$g$%>6Xzm`w-;MnkGS3_(rpZsOce%*{#>{<=dUm5qoaMTX8IHC2L6jOq>-s5#);a@&B*ZY&c1K`4HeJw zG0S!{$Ee2Rb0d|F^xPk_zv754DjsGlEwbKii6jO$A3T}Q6%d$6TKo!ib6qu= z7_0K}X7FrJ)}NDhIsCn;!2zRzIO}ZhHzxl))jw_)(^dA%T3|!@KVM5_@|FvUs{^Sm zV`W6fDkaJjKa+gF)X2QLRA-5ait?hsD?o$@F3W5*hQrd?;wNw)dYgx?ckslqKkqf> z#e&+L=$xK@l05g1S2`8BXcVNaaWmgi-DbmN`JW-4q*;JpghT4Lk~T|e=q9GZ7r{_{ zjf31+bKzd&&Lk0=Zz5YfFTF!KLzGFhcMYmS(VTN!cvM*Gf~#{Vr{Dwr%TSRJUaI*8 zyx#>q6mGGIu!FCqv*FVmAd);uZ@X!J_j%W8g?=NTn}pd+i7UI^HUkQb0kl5n+}lWC zodb;l4e+Xs7VeEj0B093iQl*0!5K<`ri{8Ur%mA1aJlIfBvmGG??@W%OvX;k@c*cE z82NXVe%n$jlU0?=Ly`&ddX%^`Oux6iQF%RtUJF)bXraaK zgJB)W6bONpxG-LJJf`hae6=`_s5JgF5Lb0y3# zmDB8}vkuSN+Bl4T%I+#38123Kvi<#sjeW$3`+MRq7!Nk2DqbNOhN|b783Y*N63FAuhHU=U_y}D3+!eGnahloq{ z3sUA_o}P9#3N7EeTPwh3Ps~5^=l3buhfs2X^7)czQbDQt$Gx?2f~IdTj|!9aL1T(T zeU%N+o!fBQfw_kYxGRo63<-ABaFy#6uEg2=2I6_&NKp2*=QV6V_%W7j=-rHfI?Fow zlegI=1fh~g_Snt!NP8iW>-6^+<$wn!uJ&~=>fVI}#BSK0J>9Bn`AB>N|JXi;o0GE1 zd=1=yO6tG59Zv%k>0!~LsvRxM0O|U>>wMf7K~{hhZQXJk=Nupp|BV6`A~5fNyp0K5 z_y#ncQKzEB0pa6AW~F}(8ic=(-*YM~`EKp90$;_%k{J7^J04uO42==>8c?h$Nqkcv~20-dT_`s0Q(NSHud+-ctuZrsu5K0s@iV4kQeOZb50&tdejx$$Y~5Eten(~n1WP?%RNBTmXQ zekt*IB~)~~Lz0nW_7y&4dObFIJYft|( z3?#j8tvdRcXwhhu$0NW$?1jp6RvBwf@`H@G9^zKsRMpHgF#>MeY)XUQ@3VX6qU~cW zF6x7b0wmS6MDG$gm@)dTkP_Lx8MRC*%C^yvj-3pb7|hKzSnAOMt1tVk-H7J( zJEPO-InH^gOP^n#7N{D4NfAqylB7N%et31~H_t+VXEf|lyydzxkl}l~Le1R7 z7)pid-gJQP>qoj+^vK7b4cz?ZAkDK6EWOVYVsgW^*j_xv`)sbwVw#h*CYkjqjGqo$ z>){QqV9eP;U1rlq)!f6Dp`^+^{@mm~^xLt1e*5mFYww-V8BYq~?530PUj_8N(@mK+ z>wb4g7X{>O=BC_%j0O}>fr%JNv*q)(PI=e=XU%ylGn=tXjQV@~X*Wz!;O>{1K5A2} z1y50qS#{_>-g`+e)v0~A_PVd@X$hvDsqR%euX-ftB`kqhQaGMx97(Qj`C8!h>;HAG zAMO-XH04f$tpyb3tb4?G#%N~NF(Q}eFP{Onx z1xLL-{x}6v(#KS@-#qiB?&)@U&z-%Yq1FV(rLHlO4@b-%;4C-8hfa~S|7X^&*3U4jFr2M(>t$i{! zWEHkX!bXIUGz%LLSP;jLOU0^65A7%Tsi@QnZ^2~NkG`GE;4JwShP`UIqLcDG(5<%tD_3r<=*JM zw7MAPXM7V9b6j%r$eEa?TVIA(6zYpeQ=3I0(-|N-4&_=oy&#H`YetcGvT5wjc(_0C zUCu?zVY(wnv{oHk?J&Qd<0vLQPk7-{sSxi!cG8}Ji^2JtJ(lvrIcem+Hp^?1{%Usa zHL;GwLT}q*=bgy{>-_iZoth>Wjb<`k@|-m%E7U>a9nXhlyeIJbi>>vCK-UO~ zibtUv=6_#YY6n--f!f8*CkR$vEN^F zt%KU`*Jo;KNypZu*uE#1YmbzcJ6w5}-z^DqwG$05>v&|>i^Cr?-r=1ekH=*K#=}Lq zt`cX%cTiVgrT|?8(XOH4d+VR~vjDcTZWam{ok0_VW2J8vd~wi}$KZ+Y9mO}SP*V5N z=0C(J!v6%94>%-l^(om1l%DrC;w6MjTPpsB(Fi}EyzYFaTZs`StM`Hk391tipB0w zAB&$oKxd(&VM`5y)FCO^#CMo2&D7)7c`wN5jHh57f$D?xWG|VGj3%Nl=6vIyiSLV< zHqkkw$46A{95iiiG|tg4>m!*sFtabWO2a<3%L^**BeezM6s8JDf+)gp2MR*)F;_=F zDP)A#v(xceZxmoF(*0E+_CeOGZ!8>SGu=#hoXoPY$CA2tiznDw6jO58ltCni0wjdG~Wu7I6CSC;Ku<=S8j! z_Qm$Aly6(~r&-kMAUnJ?FGETv9u}WJn2zB*HL)W^swzClyi%&$OYVIwQSd5RU52al z^4A+i>!$Bh^KepBbEQjN_3g=B%pXO&z=%8n+}VE^Shqfx^{B;t)wsfP1*beNIW#J` zyR_`74ruP@;uF6pIcoOSi56fjze??Fm`#j|)cxYtqWuKz1M(PhymfXzDeg2FN2ZUv zM!!(60+!U|nxo!_n3CSz1N$iaq~d|(<%q@pZ-c)FD{7xPR#jGhbHOkndie+U{ey}3 zHZzOoHFmoSSkLP#Uc8WyUh6kz(|U-(KBB>*>PakL?=(R3JFQ;P$o5ZM0IyOCZ1kjt zYv^U`eBFoVpQQ9G6)OXZ>GVxe2niJwT>oCcgBpCF)gikFhymkR7wF6!duJU^MdcKDi3^*+ z-OZ0;SVFk@6Z8k%6vE`Yt>NTE)Tg#k&Z*$=N11$__DEjJ9s1nwfELDLMa6YSTN-dQ zPg(L{F^SJ~dG$vUhXM`yt9!qOGwYvCNEhFK-_iuFl1pF2B-bUZ!>Wl&%%NlzS- zV~DqRy9P(NE|Ga)&RGI+t@wBAi?OH+h4Aqfe|@-9 zb~`7n%#)y!(MLqf_rL8E%2nJM_@M(!u7(q_A>qa)r?*MWuVAI;`|cZW`sL;s!)ICmS@^Eb3Z+7g>Bw4r?Aq8$3!mZL?M^rNtevl}zVb3mDFbUCrRyl}};| zcweJ-k(?B7dKm6H>n(bjaT;*BQ8RQ`B{5dkVS7ptOJuyIsB~)OA;I^hm5ZdB+AiR7 zf#t^RGF7>l_qn^6Nz2qJ-PvS{m{h8V@&4?Yn$J#d#FkUW!gL7NQzxP35&e&-<+~Q83y_xv(5mwt7&_bkeqU01Kb={>4izwv zj7%WnQ2OWZ53gBF&q$D)|D$nMBOFrnpzH4>Y{rpvJopV5b>J6sX2kef`ojHL>X9MR ziWdER@3-+Mr<-~V3|`FoMH5{dDJQ2NbJObkn=NsBhoO6^J^F=yF;TPaFPUJND$?WABjnlISTUD{r~(!6WnfNei0O%BtoUi3mZ?ixTH55kOo33I14=1h-^)mq z-l2fpi>2%*?_@2QpGni(X#S*Dw^DY8mHJ@S^*O(KKtD#+(@#|=_T}(NFNUeIK56cp zqx;hzw)Yg)-8NDEQf#BLr7zb{y+^Qr-Tcbbxpwzyuq-*XGAwSN7P8h9TZY?EpWS$$ z+#`^yh%QYzrtB`{iuRmYp~OJW830Fve;R^K7~jr5nJ$~!1*;U7`0M%=Iqv}DDit}#4Kgnh>EItoF7_+ z(67~2fEk@Qtlwrl~V}vKG=OSpeQ^@@sYbg`gXKK%nef2_-@VF zE$x*xljT|+t1v6fUX)&eaAwX=tw@?IMN+E8wk@<&1>WsXW}0Mn7v+Y8m2oMB59Gq* zw(y5qvlIU^KsL=DhwSANZJobJB06Wwz@t5F=rj0KJ8>i2+sONw>!(sg(1bb`Ee?0Y z);i?mnQ0Fm%UC|WG7qzW7PDWnlmZN=h zSA`__x6+d7`5V|r3Ti1-72h1+nwpq9vw5-PYDhA&uwyIouhN#DeLH)WYyYX<(VNHc z4Bq1Geo%gK_Hlv(@J|NX#VQ>|KT0%LN4T8F(9yd{H}<|8Qdb9uv96n~dc|F_@DZM( zhV_`9TtcGEv%C-M-1~hMX@|1OaJ|yN2X3b9x~CFl5=QGll0cRo^3TmOEa>gQDZGQ@ z?@+U{W+%bBy4@S)lX@mG^%P5XKlbgNtuJ$U;e2N^X0I+SYGQ?XFOV5^f39P`mD<_i z^ggt{*6I*FUh4g|9N!z$6ME(Pg&l^Vr=#*(YNKglv0Y{c7J!U}*Y_MZi4Ui%@70N| z`!3*~Y&=8ZLN~OgfVfspyea#5`2n{XXY6qW=T#!m1!DQvM; zi1$Q%5Ukl#CzYT1LqW9Rq*5gf7Gn<+vDVNkcti`IdBPU%dxDo>Nvato)v@pz@cKS- zBEb9k%OSqSQprGsBJCKH_AQgjDQ7km^yJTSl=Oz2kB)SJ#F@GK-*FJ?uUzPPVfW3J z&=+&lG#p+CD4}84k(;Z+xbPRJUd9!8H&1${;29B_jb@+)G5(+&SZ~3xU<`?%UWExq z-kvTrP^T@GD4FDcdUnKPy33>l*NSEwSkQ5v>7W#@$-PPX&9i3P`r(%olXao%h^@}8 zQSME>+@+uAuiM$Z1ifipbI#uPC4>WE!y;Au^q8mjut5)tQNC=o`>zbT2RHk>?>bNQ zI%G}y(mAb6pU&Le?Y4Cx-c%K~>#Y@QmxQbT!TqGa)rk6xHN8PDw-NR3v3k2@k<>Fpatz^@JTOX4U>6lOMtv(e%a($wT z>NqTQu34gbb7(n#R3>4LsSQlIq%S>0AcfB^{OE3zsjeaUUSG(l*v;-+HItl-0C}oP zz-zWW16^(OfmR8GQI#qBM41M3&VyM(y}s@2)(B;)=0L+2wlzrD0dqT6wZ#8*ExnCc z2j7}!_vsZ|y{i(KL`jxDs?l?ZNl=+4kesSMWozD=yLK+vODyZ#_1yQe|EJOE-CVmd zWAnS^K20{C<-rWD)r6f2@V*q?Dq}yV9B6TJ7(BpdZ`^i+I3RKtWXyIr$yijvZq_XA zSS7fFdmMv1qs*Vdo~!m7guaDr+O7&kLb)er>mQh(F0_tz*QP^bB_ugF{Dt>l@2QN1 zWCgH67-Hpvyr0FyZVXev{mGa=N4t1!3wh~q$F8j#*L2KWY0-|<)I>K4Tn$`>$MUVh z(r{oC5SK(rlsGN>na2vmE%waCohFOSZ+*a=xlc!KoVV=9owkN^=GKS&qUpX`zkP+_ zH|z?RmEU0pBNFN3>H*QlPdk3RtlWKZCCfGJ#OnoSSxvN3(R*s$@S_S0bxumwNKXKr zzgoT793Rs41F|^qk>!oLh$LeQ&W)(k@ByCor7(sBL}0;9|CSQj^EhqM9h2mT*Y_Ka z{D_VPWfPYHovn+Dx&-Jj{R_{2uwdHW1vLV23BIdplW5o~p0nhq)HbL%qiesO=aA$7 zm5l^1w^J-PF)JM|$xgsu1Rkl9_onQ-DIX2J+p4zRlxE0q{3)H2-m&NnzZUxKV6I)4 zMs3Fz(`XdkH@d$bvdJO{`^uM|*PXfQWxpp5PxWg@diMjTQ0YVXP3C%RbeWj;QO21^ z>+Q1Z2h>sdZLT(rcp0$BashWW0+dZS%2q~bRmW>8$-P9cX4S(R=axDA4yRRvfoac$>09 zPc_{K*LgYignI?$!)lCazmKoBsoD2vG50(|W|C))E!SEym}iEvmgr5pvnd zIn?I(G;v=hl(a(?Pd87E2eY8m_18B zeeRU?H6McTwh_;TnzAdUG^jal2F4uT>MqeUij>$CQd6cneV zjOS&H>PiOi`hRcDW|Z(yy@bWY?4{rsO{|BBQBS6 zaLXjL)&VhBzh}KJJUIjoiNK^^rRsf8%Nvk# z?=#H5B+UBEYKNXD9ubKfZ+6J9EJ_lOD~7Lfe8|0vF6f-;vLh2Z7Q2LpsAqI)g3aEi zSH2CHH=dEKa87MN9#X5ldkESRI2hZcp69?2Jl!*Mk!*MIC^O-Q-+S|6S^Nf`$k#?# z94?pM=3W_11Ghd0=*U5acVRUM`3+lHGiry67?5|i1bDz>y8oZbLTEXEe4hSZK$Kz& zkzMwQd+CQX4iAi)xLOuts{*DJ75p(ATGmx z7lGMNIA}j*CZ6Qad@%5b3)^dSk^A?a+?!m6DmZRIbaO~!40~Qfs1*t7!C{2u|Z12j>L_5z=E?CpCI}?^LvBt+{K(XcIbe;*hRXBpgm{!CM8rl%Gg0imRx&$<S^)nXb-G{NGGvMQIDzMEUk*Y~TYM!=p~K1wKMLYSz)N6I%m*4$4J z)|!9a&UX!jbV-wB(+ygPQpsSGwJIxs>J*9rr-cf5xaqp9Bx zGA_ok`w6O#81!sD)!U!62l2oRL*0w~WQ$~*6W)ot)Is5$QmM)OB{7Ooc^)EsM?Tap zaljo^?)(a%cQ1+ESXAsVbwQa;sV7LQ`z_2xQ~`?F?ya|GWBnU5s~2#w_JVu8i|X6x zE$ihw{m7CZfiK;g{Z27PhoDj0%|Jg`@qgV&Bk|Rt60)Mn8#iSAEoih)4YzPW!!Rzx z9dF=vQ??-Uoz?#;4adVZ>7zMH&KwZK7af7S;j#P89+G}J7KF5!@FRBPa=i@nFZE{Q z7l!te#L~%1-Kg9-$zLJ(nYX`K5IjBx0=eXwWlE%Mw7=VgAT2_C9W$oIuV#zuF~1X1 zm*diCO$m1px=)#wIaZQI57uuV7Y|lbg--HHh*%rH>vEBFQ7Xifzr7kOE}$ra`M|bA0onnrL^W>&RC(v;#!f?}<*2(YLA4#t z=g-F%<(Z9jhoaQfc3<knQMVQv%f_{%Z+|Iu_6ZcVrE z_f@fJq@<*zQw3>-(a0F#Xr!b?N}3sT*O*8t9m1qTLTMNwor1u|=-8+c`~3F$et&_c`Z2PaC0)?^KK^JF?Ei6@od0F>hP%pIRZJQRM)y$o3{Ir+$L1D$NS0 z4+y9W_ZFcYFLXt0f8x+(=K(x#Ejs7^Eq$iBOXR9tZ}m#$+v&>E=gJe>?x0kVK4KP)Fu9 zbvQNe=2<3tV>BU?;g*S}uDocUL(=y>TxlpxK^=qaZL2Fq!|%eD&MkBcZ7Ur3UrLPuoWvNneeUxWJ0RyEM(6q6SesXDb52DMj7X$G8>jP+>7v?y9O z&6s=~pQGl;9RgZUEOz3Wu6q{P?ZA}^D^>;~42fbY26BQOwWn9#{G2kvWf7mr|1?w8 z5HMSg{mO<{%K|WORhcHafWW?aSqo5s1Kk86$32%dA*Vczb_-7G)RU>#eaib#PA(rD zpQ~J0-*RjIX=$n#)bdD$SpD?g*F+7{t^hurm(sRx`lU5 zWaKuSQCUc0-yN>?V_X}Lk?>^|*r5cmxoPDW5G^g0bs^!yHXKxiqvnzb zN;y(98n&{mXNbcn-pD@qSTBf8Vjq5vGdnMIT~}?|2&%wm$OotHRzubN*i0vdY}>px zrsI>TKa>9K;gziKAkzFsyC$zV%2@atbme>gKT{OU+3LoNje($Q>n4^}Qd`$L$O(S8 zrVVV6pq}4Z?KqISk^T@m2`Gy!ms?ycnhw<=fksg;k;672E{(mJL2Q*oPCa4;gR5RU zSC#P@{8U5I{EV`WJTv%O+Jr) zk(&9sVj+;_qylHC`VU{g70gIhNk7e3Atj{Dk9pP9N) zSJgHL;DXlneg=t#{VFC4Y`x{fG%3u0;r5JQm1ybA({ENAoz>+iYEbFQ_MAOoezh75 z2k@dsL_}awgrgAdz7YY2drn;?s$ah}6r`bmGQ_}Wk#_oOKHG5?p$0~q$+%b@o9fj3 zpeHi%@;$P=oe7UBr6FbCrk!65gH1<9-WTtMEboFuuvYmJ24 zN(Jrke#*N(X9dN8k44(59#Ez$=~0h&vNCGSK<#DE-;c#g=X7LapJyVP#AA|St5Y9> zx8?uhduvzCAcBw6Q(V-_cx006bR)AR(JC-yjrcsl-R9p*J?iIA{m1B=%GM%+&K^lH zD=$+W#SK1=uC9B6qZen}d>3=Szk6Kx+vm#?_(vRw<{mYUkBhc0b$$DXvnd7jKEvQz zrhaoIyK5DT2$(-fhfOPR9drfuup&@UVLp2EbL`m+H3nbk-!>E@Asi!a82yBcsnYi& zvLd8a3tjUCg(&*ekt95n`^M!c0+v?&AQ?7IWko^bIN^Jp@_m+ z_3=nhoC1W`81q|J;-s>n{VaB%s0P6v0$LU`wq$gsH?X)hv}&i|FI%HI%7{>_h%uJ9 zm};X@sT1weo$&Y^m*fl4WxqYfU2wzr<`YTLB2us-KVgvZn$-m>13}XAWV9pM!;qa% z!7OzLiH3n|BP!4>&hvdWjUklLhhBHJR@@ckY3Oa=FRe_tL!j>y%bELzPg$#UzRGLN zxR^yhwU}(+#VN5YTFgMc^a7q#EB&o&_mn|l@3IVwpY{PkI#w9qpt;dTOyta-s*Fp0 z?j$L^(lasrh>XT_@t=_$3&Zi3&z>&j{S#&V=2h6bWrS2FBXQICJ&*;c8UbUphe{Ca zVVhaOX&Wxvcf62@T@f_`3?Kj&|7SxTj=H-JD$0F!XC12l>bHRX?mvwPK#CxCfdE+n zK+=EgLRwzrJq&`HheJu(d*gMcddE8M@rdt&Xk6;wS#W|d-Q%e8wB>dZ^?U0Jli~U^ zVq$~)Il?4=&otIK_IJg%;72a@X1WirsB)*0>Q`7;PjbvK{AkNQ{b+u=tEC)4V#(pL^xxFrPUo*pOXSGgu7v8^!)%jtBSces*wN`DClE30=XkcxEmi)b7aw~H& ztKT1*6I_G1Y2J=EGM2hz(@VVXX+%vyT#O9^sOspxM0PUuD0%j(xseHzzYhA{JUj(y zM>^3|WF2RUHLsn_2*-U&z50#+7k`p4^UbU#CC|{HjeYN-HV*RYHdWNi1u^%F2jK1+ z+3m{W>`PpN9Vdbk$y#ED*kZr<>h%e@+PGv+-=WA$oNq0kZbV*H$`i}l0Vm9Z^^!V- zHu2aE*EW2HmPfSw^IgJRsF_{T%jRTBoi?LV>f>ngNe zwe5+!O~uByZuS@`k}JSx^^Xx2^1VHM*zPYdI>`Vp-xiaDq()px^|&AZVsz5a7#yHVM*udMV-_j z!@J#CAAis6b&hJ(nfXf$q4z%bgHk#mtJ%0#J>6)%a2_?mqIlYEHT*yZ z#D#WGs13Q^eKu^vIa@ja@zXEd99nV0aQl~%30q-crMQeH=`Mu=NvlMrk8@bqR5zWN zf-TbfO9VQd&k*uOJ|6GyMJ(iUPxY?}D#f?hg13VzvleRmfpKf%u;N!i0DsFlFhtQ? z;5uQDo%fbu zY}I>EB4ThVY!gP}8>DlISWk~Hr;Ch%#$SoPqc>7@?+n2Y5fuhyO-8f=LK^7}Z;#Kl zVPR|NOE@tio#ekfK*zM?mLVDb(cFaWWX9#q`u9u(sdT2lydl-ijpw0nw-=v1 zWCZoCuk*_f4XJ(cq?f-7r8|aO(Fp0&N>}}i)L?#5!>2c4H9ygwEj6IW(1wm-T2$?P z?XOf-x1qgj-&{LO{+y*tCd?!Va!pJf6JmVBrlYxR^kbZXF6xRQ(=Nf-RS0DRWy`L9 zEao=7!hu_eq;S#=i>4Q=;o>dtmWK`oSX!cRpKaeRvLOwao9d z;zG)I^}7^xfL8gsqZrAGER^3jZ9G(^_EcpWSr#k}ECP@9h?k3rbnrL0M9hx`qVO6X z!{-8A_PrP{zDJY{ImjDWknH)(bg?l7Uc^<J4 z%imEeR$bZ_K3PG-EO{83gsWO3#rXV-}@RaoHkH-Yk?Ir0eYsFgollL8 z{Q3(`^n8)2EJoLrfEW-Txbx`klr3J5rmj{2K1H=|xmIv&b7wtMQn0eCuVfpv^|?9x zv@q7RT)l!qSr%P_%9(kblVBBoZEWcWdS2UIJD7=qr%Ft}>21YhC5fDUqcQ6T)h|GX zOx+t^bU&kUw{)YLOdoU6ey|}wEDn{0-c+4s`LT{i1eeJbKJ%Vvj7sdDYv6iVAU2wP zJjLZ&qkoqSwfV=8OOxn#nIag(i@ zsa#IHi`!X)4R+o!Gl9eB0%#ZOeAspZ-22Pq#6APN=L{@1j;STeHz3w}75zOfcI2$P zjBXMBUIZCQ(u?`_SCXpgrFDaYB`L^MbYU>&s(UNT?jO6mm$@R7>OcH^BgnK^bbsYM zAoR5Y3H3okYVY{}GpBEEt`b{40dEP@RwpAUY9_TNYA_eY*0|q>jLSg zIDMgxxDq^sJ*$f;#9x7dJ(D(UqG=|+m@L;6ZP=6Qrm)^to^8tY@{YDSN_6b9J;-oa zJNSBw)XS!Ra2>T!7xl(?@JJB}=v*6_;TWx&F6iEGswM|xAAm_>ZfPj5VD_2v$K}nW zxNMrK)yZ!oHG9t7{m1$JmjyXoDq}R{ACF2+R1b66rvs=Jd+Y4+3eQDn^7Rvf>3)kgk?l6*i_Qv1 zg>H?D0x9b_a6-=W0miw0|IOqEVc(P|9y^kx@8E`p2vZOO*!ws_R%@+{E znyXcE^_XTwi;7M3d_xD=1c(@BRAiiz0RPAANy%N5h{U`Znm1>8io2q|!gu%St_4Nh z@14zH*MEV51yv}>PtL~qI+OlcE4(W4~H_a|DmhMA!q<~HH%MRa~(fkWu?gj?wyDHxeR$U({ehU3#lRUy7 zBP*B`#xy#s-AXz4sf%M*n>&^9=jU{+S49{n?b9wHynIf?$2Gq;h$H{ysLD%&jm{QQ zo{jCjg;Pm^V}if*WB4(iH>9xr7g0=Gx411^vnwPYGO*{&@@sZ6J8&;wUKb-r^aoaC z?JXHaLW-t}1i=mLjW~h{erBiWDi>_$0u#s9cTo27(37l>t_M9|6O`n3HA0sh|!{LVg^fTlee0;d$X=~1jGfpZpHTh7kENT$Ue;8n$Z zu_sCTlOQeIW;Dn|@VI;cyY;U03V9m)oINp#@1u5Bt}xF`VM9F6F|yIZ)NzQQhh-F&(*IadLS$sGwWST0HYED z-0Ftg{uPkbiTeMhe}Q+;=yVw=TI25B-0e*opQE@oEdBl4aphm;|El zElMgn3W}~_a}PefbX%E1b@r%*Z^q$JqmhM6t`y>9ls&pYzii~Y7Um< zSr?BqitKF2M&JjP6H!xLtaxbSEM_K>>~y7|_q8HNi~`}7*n`L< zYF>o)qHZI*7pga6I9TwuFUA6jRWnpLo?S`0`enJ~IU#wJi18nI5An)6k+vNxdIF94cbWj`*s)_W!NrNx$2l{okRUbafcq5!bN`6~Tclr!wQYpKGTCAB0XoW`n@Mj-?+z3^DSoam^|Alk z_HC6q+$y)*Nt)O4FXI`W{Eksjq7k40VEypHS zwe;}H0z1Pug7D76l?!SkmNf}3_-n&$aHs)e3r$~b;Yj6^mFl;j1J44XcPsl{RQmMR z`2%xTDOx0lAg#|^sTI-eYkHNlc{N+>IU)g=7M{}4uSgLqA&kn%S6O8IU|CZ;$^iAJ zd}_izuSlr5-R?Ga;&9@9rKH;FVo=mt0ez_Y2d2gcQ7y;q4?K~0@qnH6F|PTN@2j_L zd2>|KciOSax0T#fhIqNlLh3X-)rxX#!8Z4Yj*$;ps}qg|ko?VcUaWvs8mU6Dv0vk($^#N_UZ!;XAz6S~6F2v)=`~UHMOnv(K+3f9W zf}^-;(D{moY>2$*<{dwEMIdJI>kYkBipMtSNn4>RGE8bDgM*804Qdl{IgRq_tT5it zxX;2qGeHT}#_#+M5|VBBaQdX|*yP~P0ai>n;M<2!pNLdKWpM~SrX|;so-l@vHPC@c_1y8<&^$1_SFLtF-Pd7xnCqb#& zSjvj&=52xYP49deG3((f>J{^(R|{&fA1Y+83H&s4L#r;AOkv5^F~aS*-*2#@)GgoM z>y^KFffyJTMXKb$jtm48QnUFQhfIIDOnP7l-Ed4e<2A6`Yy17^@rxr_vMk!Wnwoa1 z#9atfn+>%;3o5|I=zia-4kls=ZwQO_BaQwHmfP*G%P%d4y7CHwmJLNcO_&gR9vuCn zA4vWt-E}#ZT^4Q`AQ=y9l8PtI1f%LcL~L_8=xruY@Q(kTh6bt{ zPZeczop$o&J}wF5tNj_g&2guDb@qq(4etKPK`xrW^>6zb6w@G{%tYyS^EjKcM7QOLnCh z58~7tf2{vSX7j8pj6;x@Lh#74BBMbX_<*Z8UV;cE9}Yo_Rq4v*!pUT3`hlU>>U6c&=Mf_7k@OOx7^~qo%;wysk;@snS%I)8PEOIPRb|DT*YJ zeWLCg+TWb)1)@_HBO$AX1e@~s4d9;EC<=!9pW-V;)lpi_7XB$$IdNV{$g=tAU!KVI zGWCax_N%$O!3k?-i(CPl<^0Bq#pK4p!H~@J>7HfpEo1Y-*TVqq$b%eFP_wYHBZat` zcPI57CHR-{S(a}txAqz1bZRAv4-Wd44YaP$Rb)ze7v#~iL-WbCokgTX`h0Z_Wba4a zE$T?C3l$&i_U*^&wu(pCcLZ)4C+D{dr-kz&2EndE8Dd>l&|7ar)(3>(qb^5Hx%&CN z(lw_dR@{*SZp~Pn44suNVi=Ar(pEMiVx!9v6L^+m%@vSC5plk=;yvM=L2M-tuk{PI zVm@w=qh~H2#j^Ondp@9t99V1`+kZ(MSeM_GuVs=T*m>2JwZJSYb3>Qxs2XZ&+1>Ro z@0>1AZ-asqa&l5w%O>cZjOBqIJ}nmSmEerw;Zg?BjIA234fTCpi>l8-sRYORS`awC zQ>H~KFw39z#Du9iD0A*306!UIsO2;QZrbYDyh1u&Vw%c#L7FcItIr9eWv{=_jFk)l zvK&P%&8MVV=a!J-&ra&)qUIj{&GYGa{E!EdY^enHSv%_5go(C!Qb5Q5#7qG-&WA9| zio9EQlCBzF6#nY@<-_IMDKHyR!5XMPWL%+Q0(`%^0lXH`-J#0O_y3=pS(C|VB^TU9 z`DdTP-|wxXucVgEKt@LWU$aQ;vun+KNXs}*3r=0)nz}@di->N!Hm$YA(j!7r0yUdF zQ%~-BKN4+ZC(L1Wu=Vmo0|Qk}1B7K-^X8pYig8_X#ej@EqVPer*&k^8>rNFq(4~xG zayeNA|KZthI~Z2aQh5CfseBpe-RN;2F5cXJk7lVHnj9H{pHIyuL7DWNoDn5D%lda5 zYwVudoFl4-!yk!2Qc-@kVrRAq9W}%4s2InmyE2V>He}xG^60IDH(E7D*{L$*8Dn$8 ze-seV;v5c4ma5>Fbrmuxs{rd(rp{huD@f?tI+Ok~aeL^hX27YpZh`N)aO!igL|rnI zUJBFDa3r*QA_!^lcyM&H(|*Nu=T0IAyUzqGe1U7j93$<2w`DfoAWK0{pFJrtAYU>o z#Y+&UWR&&KsMXhi9nvJ|kbRGBmXyQ>hmJX<17lwqKU70e8b0QU=VGaZMa`ReEddQ6 z4H9;$~*?qZ8_Wk88@Sz~T6cA_)FY2Ohm7^CnoMVdD-5-U4VBKaJi zq`CyYJpq(Ho2VcvdAyxh`hPY^lytkx`F0Z;8`t!n3Tx~b*lJtkZ8JX&VVhq%?0X>%q9G~G|$;RQ5 zT`-=f+SM!qBLgX+-rP1zh&cBx1;iCdDf;2@SLzDGrU|@|dan1dK#mH7K?pX7re)9U zK<~wQZ&u%J$}fkjJHE{&a(FvkmyqX;58gH@W-_7zvDJya(8^v!a}90(D6CN(Q$9Qu zm)WEnG_X~Ivb7>?ENLs9)l?W*C;KGhm!?0YxA^h?#<}j*e`Dxo-D*!P-$@6jVvO%w z;)8ahJqw2bk~-M>LUfyZ`*YW0OU&X`yb?mylL}?g#5F;%-UBULWE_37BNpLI^ye@S zGfB|Tc5aM?{9(cl+*Q)c9UqnSN$flr2XvvvM=wRECQgkXk50N+0h^w&_1s24Q5A?W zxOA}T^@UiLfcNz{^YQ&owx7k$D8Jk^iLY5lk$lN|7<;yEb;oVJ`u0;`Jmi0qz}l@~yD?B&{!vQzBRH=#7`~ z`2@S(e22nziun>mqg85*nm#*Nlo_Xx#7>gU{h}I+x*nwPXH?5OamInGap)zCAUZ8F zUN^+n;|H|oHP@*OGR~}^D9M~$U6sGvmCN?$xXT4Un@&7j`p_`4(9pc&aZZ>$AGU0_ zI#aHw6YKKB>6NmJV9is}xxv(~_^XU2$}?mik+HsE#m3>%E5SmLK}gxVQG>ZaWXlU) z6IU{wWAql)`~3sx`WNQkBG)rAExO-ugB)}b{^6q!3YulQ9+%WYJEEj07UP~ zl$oXM`f|3GEuzkPsJ;xh8@7Is0T97<6y91iLq3U;`x%II+f=%DUCBVLJzmjB@JdTS>^`XN1J=h- z&qU;e{hV*o{Z0ln8O_%z%Ou7v{o}|xZph1O)wo=L#C#*EbjaOCBH4eRBLz?gQu7a{ zNQ$1rVVg6mwj8*)eAu@8m3XYm$?FD6#_1xyc6~B=d(g=4y@cTt^gK)a>)a8!-Coc2b(0FFali*tKG^vV z0>&KP^ZSc48z(>Qj`HA5z?Th3sf-7?#=Af1cfMpNx&55JwP z;oRXqgX=1#zg}80|1c%@1aWn5z&v4u?mh*yc$}drZuC*_5_eSUah@(~lHZFyzhpvk zua+mPI^1Ij(XEoaDR|k$f4~%!RAdmE?E1rdc?L6N!2>kH%4t_mJw7b7rYhq>(Ngkr&Z5+7gZ4WhAB(Wjnh;@PJ*@(ajM%8PL&$6dU*3h z%Ky_W2G)o5^cmg%4oQ^9f7v4^@2hpEu_<{*oU$(-0;&o^Yttg+S7A9gnE9H~@Fljw zTH&jsMIo<({HgFQhRQsPpC`{3^*0#&TPUxX2Xc*UDsgs9A8m1@zFzDV+SLV#oed5R zSmeSEloCm=Pu37jCxMzL7gh&OYoCd}LP(%Q(5%s-Ytb*57*~8FqaVW?F*Z5!z>ZJ% zs9?4>>|60s+xcluK5_BE6G~gHkfWmiY@K;7Pl_j70x@SkA{sUW#lK5AQ7*$-mBvcuMwb{nL}cM*e=bs`)0s-EKsoV^ z5DrsAs(W7R@QHecsts$L2B9U#UCnw9Xoj`;?Bgm++Sr9=6DJem?&phEhrHsD001 zCKPc`w|mI1Vnn<42AfVR^*>&%-T_Lf$GpRNQeCCkNUf1?1HeQG{GWm@|C{NVAwD=0 zd8+>E>H%P*59*&sxS06Yr_~9uNpNrM#u!X10$%r5IP8K&_!y?tZq|`X)aRfW-^SV^ zOxHZmXiuFG13D1K!(_wkUWjRNfeRYa6^3JIBXA0js5EWAf6yxrnC~sCM@SQ2OFsyf z4k6|M*K>KaUNU?Ie6&kk;~wSA1TJXGG<`j_>epnr>f=zJd*e;hl?<^r<}va1k!~em z{87Ay`U1Z;CMcAC9BBOtsDI!mfLk>V2swQJ5%(2;esL}rJ3W-p^j4p3QmFZk@XT{x zrGzWg{U_#)24SFiG#X}}hLK8E{%fG0ACepXbc&ZN>vS3MvLcwKqBNM_I!hFY&pU4F zaI*Fj*(M}2_q<(BoPh{j-dDu!kKIHp(cyXZO0<1DO9Bgh$iQKaoA4)`>^}L;&rLoa$~5{9 zp*-xiWJF$7HYDw8NS!$S)T)1O)*Uz6{+h;AQdl0AwAR@6P1c5o$pE7ELZ?+}ali0j zpol-aQfRcFaBmfLpu=aa0a8>qj8Y(^&Y@Al?*avJys*`k{NV4x_nr^?9i_n?lH*EF zD|!`_LKysWlJwW(*eyRc(y?wP$h50VdRW&X!j=Z^4)c-(~;=P znZT!s^U9FYdm5hB)TEhf7na4|N}O`j_}5@Lxgu3g=^z5gPYenjsSO{J)-)m$QhIof zjjoj0Tgj*Nn@@Py*KWcB*2QRo*M~`y90_Z6hkKoTd#GPwDG;*pCFDl(`c&ih|NOL4 zOXxh%Fu)ZxqV&@yeCKCHXoSu0EqZJV&#z{OVl;pMmsX9Vi zJ{IrI+kH^tfKzChiqokyGyT*;-b1tiCz-)Zs&{-#yZ%9TD$F2T(@b+kz#=Gh-7rZ5 zc0G`8)aC5{y(k+$y2>ArvbB;ah7ZP4DgGwXw?ss5*963Bs;6Ex?Z2j$#c}Wua^PtLHGoglAnzO_rKE) z?JEHe=(fFM>CeQXI=7zr8KFREQJ}t%vlr)AF+sz2O=uh@i{ z<`RppZo*FE+MXQ1hyQ1#2_KnabmcumpJA$0oT(1CwW_~3d12ZATdH_=64$2g8fmTa z%=)`PKmp%M4THeAgVYO$4~hDMxZUjj*C`;@Pg?PsG7lMd#n{XhlP{slR-CWIF<6Yx zpuPC(TxecJIwMtZ_&#oZQjTx?)R*d-{hS2Uobz``nT`sNt$Us2l(4vL?r8NuR8pLl z8Po2dKwgG9rOzPY0dEF{wQiOe2CpUXCN*q&OEUu$Gpaqon42#&TG&NJQ*+qF!~u?Z z5Fcdy;-KHedC%f){zWUdFzjnLru64D59hP~$SDcr78 zBSS|u8f%|*YU;2nlO+}vjYZT@f2{WsS*~J@*hNO_DQ*j4OIEwP*cg}W6)^Ig1f`oV zD}s(Z31fch#K{L~rLd|Jyl zo+8$wbI=G_JYF;giz11>R7QY9!}c2bUZdgoA*Inaml143Z@*D=9Df#71r|? zbX#7(2Y%Y-`cKUyQ2N}d1n6jE40)INzddr-JL(D7CM3dK*mCZD5{al=|B@v)>gxD& z{yX@;G3rV-pz4`JfJV~uGmK6bTQd1fi?_GmaUq)!^*MpCg+xQ&psW7y=V~OJW~Kha z)%{8WpIAjZ@uj(cFQH#81>q0ZAN{0hxup^F+VsUZd-D8)>@H~}SvG@8GWH@my_}jp z=Aqm&mt8-l-PwT{|%2JC|56||qQz}3DnNc#DhKd`s zM~I2(P-;H+8)OiYlV~omH~Huh0LI8L7B*Ka@dWH3pwL*d>(>N0ZrZAg@|kZ|=Q#H% z1y#%lXK*~u5*zm#I_}zxD9*%S2TFED&IYcTW&ymJMW|!z);rAF)ouaa8|Pw#$9K~- zqmE8}1#<$EYcP2KLvZn?-%*hv5s9N1mV>Su7s;CCy9f|+P)|dyrHX6FV#_|{&AfeLF!ew%N-mx{jw_ zTuo2VU+r`SyL(PUz_!x15U|j!b@1u+ zLQ)o+8kY7#hrCODpDUXlhcAtE7H4 zrCp(y(amNgx!-6vMR+p#Su9pOGEMm^jQs8f3efRsy^twc!TT5wOs;UXr`n;)3 zrFndCJ!W_0zWHj|DPi~vpx+ZKxmIHiR#ylp60GlUNj$frzbpfkc~}z^9}Dgvxk;Q! z6=IamxAGipMC2353Cb8fFrwp$a~oK)PUpzsZK_t43$cM8B|~0`>!(>_!AM4 zy4j8|OGYY$gUbxD2|43f}hM%9MR^IEqb z+T|s0fU~Xh{1ob#6BY{tOBhEp6E^MUQu37l?DzW>w#ZjYlr+2wiZktL7`J(UL$v%7 zBd>X`!D6stc4Tn2cX8EPR4IZGgux)^mB2Qyy;>WDom7iLwC^kMCZ{dvd4Bb)aF*W4 zG`sqnM**vs2nx{A-WDiSdEcKkFsUseNSxFL<(vtD=v@B1^L!oYs7@RELN7bhVsdq7 z1`P3Nnds;q&S~v2bw!`)DSc=biAaq>1-HTiT%U*h@tSU26&n7Q__gBe*d~ueRTIvh zltV}?vbk{0EEqiocM99zSatC}>KS)C`IpgrOPOGv7J1$>00^d5i=nzkK>~$ z?`BF_Na>4K&AnMoYHA)kU4$MgAqZLHfJE>?fs*!)3oPpINsCX0(ec?4m#^j$CN=aG z`rDrr@c#VI3KeYk=f8&>yMbB1um^li+3vlgxB;3~R7 zW0`gHcDuBoZrHuVA4!WAz71Te(LOZhp;NpS0hz2 zc%CTZ8(Kf3a@747v{v}DN6uLbGB#3+)w|s7bz|g?{jJcBq%~DxB#D>+gUebQvv;p! zVOe5XsdP@iH>Ubud^Nb!+QQ!18%1x9ebk*LKN;kl@Dc$C1ljW(jhI@nWTHI5!kaRg zZldn~U{RLN;94J_lN!x+px<7d)U>68m@k{*-bi@{lDx|`+N7F>+8;HdmK0xE({zh7 z*t*`EpqtEY; zVi9+mtzc=GR$eSdqwy<>LRj5L zlN@}uEFaqIyWsTQG=b?l>xA3=zhhG!!?WT^G@B-u(B72YL43B=O!k-dcm|v6EGmXf zZNd=(ACi+faUQn4N>&G#`9$pYJrRX3AK0g9p83Mbd)2s$hRPqtqte&C8@b%d!}%=p zC?BMUsrr4SD&35-LeNZ(O=>xwU4;n_cnZ6r3x_8^vh=B?5Ji^_UQ0OfB_^8^_I zbATy_SGvvQHIuo!Ua=1G)V&q+&O+Z^lA4m#~hAYKG_+P9Tx{;NVTN>UkkpGtA!Pb>A zZX{rUub_1pJq^p!8f2_`Kk5c@q*lp*c8fuy-q$w#v}LJ1$tXRn@y+L!Y9+M4g+^A( zKI^K|f15~`YWrOZrD>6|Me%1sKFX0nW#r}Ni$@*BW6Q9wBrz*e=Tg}A*p?x6*Jm#Z?P4UEv zvF7!E{C7M}PhObZu-~Q3iR&9Q*f?Q!O#!TSTVI!Zuiji9Fim|gETvEHEEcR4zh~$t zrMAW(FG31gA1ba}*>UgcE8z{tN4?j@gL{6V1 zbxRdUM|!BVc(4hjVmfUHu$tj}^| z+!Xl!AVCd+LtpxjsWdhsISfydKJUi|1^zTjxtIP)`1_mx#wjzBsUTiWqN_Tck43xl zMTgz99}uUbUksE*DvgB+v&zY;B^zTUzZ0dV14}#PXyKcu%~nO^I-)TtGp~oc1&|8& z*(O>;4Yv$Jf4T~fwwuzDSM4oF)-cTtF%_b_gnv0g?y(fJV%Sec$1Fhi6k)*@B@J&3 znTtm&J&W;(yR&#xgfsDyP z<&E->RJ(!)VdGph89cz5ARq?^=x1U&%G6bvb!#2xg@0{o5|2u^5@`&_E-FNRBF`m! zSV&R>L-Fc6R%tT;6KX{Tec7HVb~kU`1nem zcYUjoas#G+sKltf%xq%hQ}EBn&8o?^us=N_wRdj5%~ROpD-!cv^K5lITW|4j%9zv4 zPWV+pEF%2~IsuS2QTX)vR74mt12;YYA6d`J?}rXpwdy=nX!%pB;C-x!d9J-n`Tvzo zY+%CZl8yqh{Gw~%nkLG#vbm~miN%pSmzWLetR#Foz8Q{%#cOi=5#W;kpFy62F zE+hI3_dY7k{f(y3C&@@eEuN!tfBte|j4(^1k0Mt;Cd0t~TWVI7O>;P>bu(0B3wryam5$Iz2Nwih2{yUz)I zf3M`4fi%@$1L|~B^BzZv(&0mb*RDMtZCuh5^XkB`TyuzWLym3nRo<8LCwO%afiXnkx~Is5^)Ndxt09_?@E$cg3`l<89YsE z=!c`;FTtrXn^`hY^I$h`)N-sO`|3Uj|0;E3f7w0RYLmMBZe-H;H=Qes!B4#1!ff9v zoR!E6aYh(Tn=fO9EAnziR_pD^F!Fa15Kb=DOMSI{*b2X$6&x2|@j3W58YYrhB5}p& zuGgh6kjdGmfj$`{=BVnZy4x+>EZM{t=LeP;z|i=lRQ!@|v$x%|EI{akgg~CJxh5$E z4ddkIJhT{X_Cp=NF_ZNA-7LyL3Njp)Cq){fd7&5p7la>u#d>{Qd@|-s>q%6QXCTYX zl#7iTjec_j_wM4!WASNz9c+HTdoV*&jso%d4J|X50D*zPf zw?$qZZ+KJ(zZ%o4%tel^^&kBk7a%msI;=SbkP@)}ic#*MzBZ@-?TS;WyNiunSK?nB z&N6$wrBN8My3=3(F66(8zU{SR!4;Wob>i~$W03SGxzxSx%VFI8mio1jUZd!6Cf!WQ zq3^l%Z_YI~`LD2=*{bs5@dhd3lLvvnfM044| z>-ge>2XGFb;#p-^uEq*knSeG$Sbu92wpsFrf8+Dh(^d7(brQ z!%E(WkV9G_Fk^q^Dc`7rKFIV=4K7*=Gz&7!BdVDp5wM-3_5u&>PF z-)av2LY$tV!|q;x_v(nq?4vU zigq)LWxwUQMr_A{xtjbKo+TG3Mnv=KXJ=XZJ36b}Njj<8~J~>!c z*rxf<%~7whEZNY)RgWT_YvGjeJ(-F_T>`q@veyezUPooNI?XeT4ZXs}aBD{CCK2sf& zz8qN8vEU58<*yaIPrjGZbvYNx0RG+hV*eaDRz|0#x^SFN@l~I4O_x$t!|vR__O=4g zaF7ND_AVw)5>WR}ha;=KNNoTkl!xM9fC!4&Dw3peoC!;p$>RZxmE}fsP|+2avr{s2 zmzf{gX)-!oB@SI>AIut_+kQ{(NDYq_uO95wcq{Q>cRm46&3(LM8IZw9%=o2v;cjG5 zE|?H0r~1%q0$1hw+~}?cUol!ceWOvMQ4uKDax~h-)R_oEy_kF^F6jokdS?ClKbEdK ztm(FmsvzCnIZ7Jo6qvMxNH+teQ@W%2WMk8Ck?VB{4{xP67dO}v z^Vw)X@OO<5lE-vnTUiYt>zaIcRqDDlahIhYE2VxB2@x-)Hf__z`Lif=xE=R}?PE78 zSOoTHH;-#$%zhELT>sSb#9I%bv}S~LvgJx+qMl!SQs*Uf#%eGEvE};Qr?L&1Sl#* zWnC8X*PanpR^65^j%C~)HulM$cmVs3G(}CgiQj5A-I=OM2&S<0eXq;a^kWWLoZ%jN6Tz>tRm9>L!0zQ9P=zlcBV^aHv^pul7SWrBh z(1hQ^H-+8a5CJ|NZ9uTG-A6!!{~9JpA&QGAG5xcDj)0=k0V(qDELo?` zXzPlZh-t!^Fj--!fLpCO0z)j)ULcp4qcPmBOg3W733{ z#C*NYu-9z^(|G;<`}u*d?Wdzidq>z$uFP@LAFn}gMT z;$pwPa^0Mg^=fQ{ ziMS_O;w=&jronDfSEJrmKry_%Lfo`90&Xl-0We<%HZFY%P+1J~xsmmfq|DZ$iDB13 za1-`DmiIj>WuF(4)^QcP2N~F~c57=DRy0RTsHmtID2q^Juu0Adh=PIxnuT(G5H?H-3GHkUbXTz{Ot#G5V zn*cRDCX-u%yx~Wxe~bSdP-ve$5VsXfneR)wYSxeNUW4B)?ka?zXgyQ|k` zH{%=a4<-T(@noQxxz&`>FdJ)N*Bj%8>udlY6P~xFz_b~|`3sY8$-ZvCIc$C&>xJ$} ze^9W8H>mhZekIKPViWwHuT5SyJ(~B!#SC|hvgqNMfpJbKMetw^^?>EeH&`mosBIOO znV-NHWAF1&qY60q)i)<+8JrSszP+`W-unH^mNQpK@5icoV_#*O&wkV!8NC*z?T0?0 z$n4uqo_lk=f#qWC=i5FmIb<)lgXpi<0A=ZjxfCA2FG2H{$aSjU>sQ=3|SAkA@ODbY2%Wf?v<+y$I)k*0?ZGg*ZsjxSK_N}7wfqUOqf;-Ff zSJY_vL%=Tgch-Moe`|Cq`>UOZ76SkX#Ze5hu%XJs=d+{vFK|~Kirh-%Z9l#mEh!GB z->FCpIKOmF*S?qojSGZ-8tBNHYR)7x@4_4=MWL|g8FN+jvb7FQSZDNE1TAQi3o5(+ zoaPo!6i?|nZ&NAeW920%Qb&)x2KL=sCaA`$b0pMyp`U1#Aw)8uRW8TXcRrHoX|^Rj zf_>A9i!D?xX}&3{B3#_((3x&}VK1Mw@#1pqE+PV?EZ>_~1?h|@6Nx?tCfBm?fUUGV zJn}7}WJbod?m+c2$K{9|_LuAOTRioz@G>iM((XbaIdw(}3UCSyk}rPV50;#>xyWCY z_r2=0YdUFu#g4q%o6fGZv0sM7?_Y~&ss=A?cl-pKJ|GkVKJQ*7_=IU?b9A?Ube{Ls z`ks{^?$mO}trO8bn5?CkjnUWMBYyPZK_^$UDPJ~e*$s1@rh$S&}KY4NF zOB|)7ld9Fl^u1R8s%QeAKH^t(^(!6fggsy40FUN-U0{-WS$6DRz(e$Q-RJ*e@*K-k zlKtaBO&%i3eb1Cv;T!v}r>##$%_Qol-`0L<+>@(MeiDyt<$FL5uo*{M`p;9__jXzE zsNCr|XDWt#zK1W{boE&c>}a6SSUPy@WneIpN%>W^37R9Cm5^ry!3hpoy;s83WhBo% zsnNZZ3Y`@qza?5sc1jc`VP7&7dEpyR6jNyya_7Wk6T%Al?uz>7Ppo~KD1chrk9J=* zwK+I#Hk{&Pl}6R=D`HHIp>&}Eq>wa5HRHuE2bR#&S6zUqI4Kq+nx-|@M8P_;-Mg$u zHBU%0Fant;RVLnoOAY_sa$)$|z^)yC;hwva@UZ9Pj73S$cG9+7b~-}{W!$Pxh!-&`MnLxN4H!H9nSe zdPVBgeWCYeFvSYSJj+pv51W3oBxib9$?+xSMABK~@3L_A9&2$EtGr1o9`7k8A6IX6 zByIm+H!dYgQ*E=T@+OQw5W4oqsZv_ZiXRpGwBOIN<{LM8+Oc`hkd`+q5*Oj#OpA(p<#ob!RARuQbNANr%Am*$vJ7n zGcz*-dsJ!6)UngMpCsGk7bCr ze7}_;CHj~)+)i@Ucr^x6EGp9%$Mb59O5f`N&JF8El^CZj=8cK z?^+-B&14VJ6>F5S4F`qV3DmPoaH&3{xxihwY$yIBJYe`N20MAxPHgo+1fFw64BsyA zhP|>V(WD;y{D~Szhl13}C~0c^b_mmtgg2v1VtP6o;OlPG>^iUD_NPP?{@M7khZ8~K z+C1Q>^SIvuE`KbYa$q@s#LU6&DEL2KK%I!5UJl-va2b^9d0}U@JT&f-K!&~EFs@?d zbzt<-QQ+Uyf)tNol@r|zzCIjw-Tv<393~*;TyeMnTChg?$}O8K${SIWUgRvYL09OP zR&>V~ZEbBayp&Kdpr%JP$?VgI;!jRkcE&}to~-1nZ2Oo;J-5fqhUs_XYcw`I2x028w9*V=GXLr8|VS_6s^A zm^uxNY0dQ7@Ag+`uf6g}+vcJ*=LG&Z-38vSjRqZiZ#%p%4d25McK(fqtrMoN+<%(1 zilNCOMcSqtrvQFaTauJq%oV8rZ8BQ9cLmgtL1+@rv(m=E7u%=gjACqA-Kj19MqW?hc*Oa)U@LBv&XwR34^ z4+a*JssPS|!ix)m_xTN*H z`eCJ0g}Rn_-hOA)_;88fUhogRF=yZ#Vr{A6FepXKb$1;(lLUx}s*-@Mx3e z7gJ`JMo;wAP{Gdg`==ogHcC(CSbdV|D;S}YLwD2BP6;et9%euz#GX?PCAWMT-1Q8` zt|%8yH4qfew?MRBo}g`4EzLrqo1D(lzTvj+s2cff7P(@}LM5+5Rx{H6)i)bzrjGZ! z)Vtq{bS(ikIBS+`Zr7ROijG%s6^zbr7lCI(#63`k(z&@3wN^)xz#6C3u1biUNZV3k zJY4STL=oP8E&xY^e%&o?Uo?^d{PB{MWM0=lX-p{P-J0G}z&lba#w_ky?1*ONE6_!*+Wge3xqFfp%Ia1@T^Ng6Cih``zp}S{ zbH-&2!H6^P=NeHVMdKu?(Hqoh=zxp5x!2rz-f&Yk1BJjMJsniRr@77u`{#^n7iY9vZ3Zz`ZOZ{yk) z_=^yTkHGYfEhNY;KQ|GOcEx1VN;W=ZlrN{t`xmHjO;G^1f-a}@dC=DhX`ah42T7AaZ( z<#j}~7lN)M@Tw8AZzAz~KQVgL!-Uag3S&+rA4k{11%0O(zWjms2m($XEMe6uf?oq> z!T=>BF9MZ7@5!q*ltV2!R6s6yP}7u-4@K+A36^ypj0rf1HS1?blOn-MlX4qQ#VHYXK7oiQ(2b58el-gOL$$oa_??YiprCQWZk^&!$;of-< z1Ye(P^YOy*-M~*VjW7?8^H3yjl^{?LVF*D=7L)I;wKDM6XBVw+y+T@gg{N^6-8vUH(Wf5_X`eVxqJ#7{ znb2clg~a$zt7}mk!}4m1)C^KwtZkN`3$VFd6#e$x3qnjbU52#Ivx=vV=SuvQ&$EEf zR>s^B5K1OGNkn~v*m*)*zM*Va`3JUot(wCu>J9u(?AZGDY{}=0M`7e)zQ#HJe2Ll& zBPtvx_j$s4{CftxM;wdE-L6|;}1FAG+LEf?6Z zIi zs`mD?C8hG6dYxW-BLas%X@07vv8`{pWR#TeyZ+LWx5|pRZC$P`n|`F0%Ec8(%R&W@ zla7gxu!kNxmB)s~?Uzk>Xp|mKJbuoj!RuSE>VtXx3tTye%|-PM^Ez6*m_)D7#Ea?@ z&1&beW8&L;rFG-8WUtwwrKWvJi$&9eR%C< z-f+iDHbz~10*$QvX_~xANAIjFXm0x!8)Z=@d$ein%(IlFpNYR?-oIi}jm&SJ_7%+m z|6yZejEE-!DztwCDxjEejN*G)IjEpYyCiB8dTc?rG=ZS^D4O^_S2Xp}2)Q6el9AIo zk2$Ar?q#78?@^{XzNZXZlhjlf8?a4G56h6}l@kqJlaH%;sOGe>QcZC^I-6U))i=Hd z?FlZt&H)H2)HtWf!mM-Su&3=NwqRUMmAw*Y_V9oQZIh~6)w=RmNUlqhmpYr5o{k@` zr;b=vAwlO&;z=&w-hY!RKYKQq4HU^;O*>5sHg!UvXr9GJcV*q?mS;uM8~n}xi*kP7 zUz>OGouw$_xa@)Q(cenbzfrHC^qt0%p$2Sc$QrY@{_D-Rc|ZN)Gp($Q>Frjrles5$ zin7WFmNAeLf}j#nIN?2iKx|&Pnq0O2Ge-j=evWJ`!RYlK%h^qK-Vgh)Dr>IXCCE%- z5AuujT%6QA1Hu1HoXoa^y`8rB3oUlg$hSDb7fceTyL8(A`s7+btN{i_%;)9&yZbcD z*yTi&?DII0PAma6fkv~%7|zW1=Nt~At!*q4*&2s`q1keJUynH`nl0?$N~3JUQOVK~ zohExVtQ9E-vdBn!t%*4LafRi2f?aH&)Xwzy;~?L2+(`fJfCXO$K&Lt2wFoIN*;(J- zmjIA)?MqAlVyNM(Bw*dmhW@7)(9m8u`Sw>%g>U|Oqxx=(IGSjCV`gz}V=sFZ>2Ipa z0oqJSMO<#D>*x)R^Hb>lUh>t^SuDT?5;w4AB8dEHIQ1iT(;4tBiL2p91U=AoTX)A0 zDZR%z#PVVKQp0}*2SYVHp{V+9{qU@&$W>fxxyuOwzF8QRiJCK((BCz*yHfzQoSGVM zc?k0nkp>-F!;YMcyd!Rc_4ZcqMpF!G87MU1Z}XNtv+q6y{IcIKvcs;kJx#Wfu2^ht zHnweOhhI(+saH)TIF8FqDqEIa92zgX2Y^-fjF-1mobP?psp_VlH9gKoNUev&9^h!DDBfh#9zR>nQK^xzKfrVMk!=%0<03otgiz}`QMLBuJNjj=S3}-=jEjjQy>WBb zzCf0^4WF?kWUks}#=7)8Wh8fNx?&qI@{r1fa@_!i2z0^*rbCm*Vhgf)3j5k!XA4#y z!;wPukK)xV{_=j}G{_Y#xK`c1*M%STWAqoe*DqE3*AUV`4cR8GFY|L>8dGMA@_CLt*Y>j+dn+Uj8hODc~36Z zi_LMh?rS=@m6>W(g5K5fhtPmBpG?Bt6Y`7-`w&W%-^$6)+zdelGBBO7 zBcoflc?7tnSpNA321Z&Y*qaI+%xG$$Ry*iin$%^yPsGF zLAP+|`q;DUi(BnstC8&M-qjs?bRPH9d7*zRPMx}+P*7xA&XZ1(yjZM)9l_G2?@H?q zEv)deRZq-Td9M$1{@={jNkk-PY7xoD%$>dr{q}SDCC3^{FN_E{Gwi>6nP7aI3ss0K zE7I3kvgTIOi`$geK@0sV^X8oMg{>s1THk)nO^i}t4cTyoFqU8@_t>OoG0NZ3P-y$Z zJ>44=eE7m`EmL54Uw%ID_C4eLKfb)*^lG$Bb9IbE?f$&pC=?w|w4;Qt05ciWvMm;= z|89G<+nT9Wl-~geDE2;sSg=@V8Q^_uuaBw!61tcxeKjD@7S4bBn9bDeXlC$FD+s{9 zuF>J+g4;y*{^m7pWFC`DTT$h=IiYxxbnX!G5G$=*O)sz@KDBay!uwkW7<-lGeQJOX z=uCqtBykw@?4xrH{N{JJqKNz^HpVKx%=#>yXxl?Df86k;mBAP1Uo`WiF*#UWy$z1v z|Kt4ojZG^F>2mk(zuFWFbS{m0i0jW&+pP+% zzQtYhOqebo)gOJO5JXikaCf%oN>V@hZ)ETs8JZLa8P;4qjU2fW^-teXNDm9|4TaK5 z03EC89@5mSG7Cr4>9h8pmr_5J2e3}Qnak2yUTq0hP(~j3I z7ZGcHU0>+PGP-^ndE?Pry+00wy&JQM4K;mQqj^ay`i6guc6;!)LSl#KY?Kiw=CgK5 znd|Sr&HS&2LS~CBQ{#V@|5s4(RsTm>vGe(5=4QW)slP=FO+D?pP#ey#^;iMe*^DlzK_NI*9&a! zBKW8sGDLA!FjV6_$=ZvAZaEDm$L>Ks;_MmqnRcSka)H4Gd zgLb}7O4v)Yp7%gDS|S_%vs5zM&MJ`ft=PL-*W$BOgkLhQXm8_6c<)hfGmJ5>5ro8KW&Xw@jC({o9!83>unaQN_y=k>wZ9ObxYWp7~?! z6SD)i)K{CsOnineQJeOC;;$_Hj`;tcY>ZBY9S9ZkFlU|4=HH@2hE}znT#69ZHdA=& zh=-jp%n~xyS{4T-oR;ku7XP<1`5QGnaTQe-V5~RK>m?{~Dp}ip)H4L+NzA1Qz)O9% z{Erm}3-t0}o-|Y;#QIQi-7SC6?ZFpoRJ7$`G@pb7;E38e7%5wYfG&>UfxXxPBNRdZ zyf6}-=u&3H;g9DbxWSl~m9a5c-PZ07M&|pJ{m(A71e z=RZY=W`jn%6cU7cJ~273P0I;cxcAHoyIH?neb^DPrv8ffAH<*NC(|!GP?pGS&!C?b z++4DRM8*l9Oc84NkpIz8tjtFO9gmoI2QS8Ja`6GRv zm}_CV;L514LTd@q@O&Hl66s?ONAL;!kP^7=9*6jlXl!JffL1Yc`ETfi)2Yb0lkzv? z0+^)sYU%B~_A=%Fex&zreD6lWBP4G$(1$Vb4)+IzBHM0_@|r~E6i7$`+eZWv-e10_ zo~rYlfjtBOOAyunXZ6l7f2?&3v6+>lMl6)-zow=OVlw=cSf4JB5~`k`y>z}B9VNqY zl#k=+N!NreMCUF)eQ^*Y`5qI60!VXssRpk=Iq+htY@~ipiinZshd*uY3E)3}%0q%I zvwR}Re-X7v%T{S*WNAMZR zFSo4n6W!2qj?nPE>Kpm1Z*)tsg%L(%Y6Kk{8<2|~p{KKahshvLEkV(Pl_?Zn!-*tQ z!@$8V&LA%j`oy)h^)3(Q%MwdE`&Jf*lS|hWpkiCsl|^)Ci%>t_kc^}Aa3_atNd9Hye~*Rv^A`?Qw^xLX&hI1- zdAh#m<%<#J~>))HE8Kr9PlLe02p!M*f<(nj(J zBk{D4T@EBJ=`FCPC?@leN{5;jCW9Ebmd zJ(wY1goNECAXPcftmKn2~*Yr=w%N&NT8sJ$ZP$BzmwT34GR`o_9YM ztX8f)SKbgYtZwf8%0M+h3$Z{;X#AA%We8c3Y$n@Blpon>VI$6;N_7Ow?q5v6=1HZ- zi0Sh4>Dz2@kavW(kQm#|zWE}~Pax%%L5b}Ujql|rO7UMRoE?%FzoTIvDmR$xl0V(L z84j$=x6;^?vspgC;Zf^5=&{u6?k|iKgq^wfr zU{(?014=@(@0l~7gLHLXP!d2cxgMN!LOv(%Su> z6$;fMxr$z~E%YZlvXdDRyt=B=UCuQRrn7dNgU{Av>;(UHnoDY1Zc{$XXRkW_7p~Y* z@%iXgI((|}S$s$?GJm(eT74@bLf+ZZ5#{17sw!C9*Ksg|FY%!V5_HIF2wPp9a{4`B zR~c>yCX!%i_;NMhM29{kPD9h@=lsy&mIrH-MVy4e3o_K-9%W{~Y4B1mUOMj{A$>cN zm@&p4Tf7JM$OO0Hf@q6Q9l%Volr{@sCd!q=FWbl{kmkb}TLBu1C8450E8C~<;4j%I zcwetVpkd>+)b6u@y7U6aoF_tdHiz!M>x1%BI z{$*6~C7qH?0nl5wATuN19$jYhh@6Q6dpujhj6zTM3o;%}g)vj}XEx(@&Mr7I)K9wP zeqvYH(HJp~wj)Nljfjm4mGKX<8tcG9sHE}`!6(%no3J=zeNLUhIX;R73wtk^DAG}7 zulWS^>zhB;S2X~-_7Wbf)DKEc>o73UX1RmJ?;wQR&?9uI)MEpFbpnrW}u|miN|XO zR^qZ3sdhpnmMzPsNP#`HAxdb;cuPEHv-g}M_~g^JPCPT6G6t4bJYVCE{SOX}e8pxU zcnGEI*~9r-Exl|ybbnEVq++M@5*QJ3W)A46&LgXcVnu!134qXyaSJktY>@La57;k~ z<|)04Ogk_u%+W~p{W_!yqQE83$9>YIZ^z~?u7cj8 zx>lr5p{_I#N90p%x7S&N*P-9O=P8dk0hVu%+-A$ujOiKJ;{bQFvsWDpb~jXbm2FKn zA4td&p_=1hgrkN)@EA7{ysQvo|I8CS6Ly>@9~cC6d8aWn%f zX*^^>*Gqo*>JFU;5abxp2MUGhKJq=FG$!eQ$oo$j7+O`z&&?B=q zaBk*1!U7;9+l=9$Mi;OL*i8bVLEa}q0t}b`_iKBU_ryU?X8(L$OqqC_7PBzn2TUx^V(Yh;g@W z1|IE66E)+<8kSDD$2-HSU5tH>j^m*{SM1KH%DfehFJ7?>rkCn?OR%`*>C1| zGnv#?NY9X!9J(g$MHU-nX}~(@$(KS+LeIfWabbMLI$rS|vTJ=YBdm*ES@cfxHy+*U zt#}N#9z{L|i=T)}8#*z&HVlav2d%8044X6-S*-5_@FNBlX+@30ZeLc@M`;PeK8n`l zHB1wsLQA!vTr2eUvQw-##q^H0L3JA+*ych|ar<$JIU;SvHBRCGV`|5l0T00TOM&wQ3&b0Y>Mf91{hYo<*tkkFiI4KpqNca9YAED- zlJX=|5Q+8m>TV$VdYBEjZjTTkYh^(qFA^Z*z%;D$6eo6wLTVm&5`^RG`}au?jX(mP z057F#XMD4jfX|a1{1g!Pm$0CDLeJ;9-gUITQ=sbhYbxx@}hXr+ont&qbB#gHb!wI3T9{}lZGin{@(a-W$QIO@(!X+2*mX1VCQ6#H9w9n5|*&J%su z6G<0xcG+i(u~ao=G%E)_mW&3wF%5;CqA^B+ zsBy-Rk6-khI&*aQr>*nCxXgn?Ntwb`-|A}ly8N7^76TE94+I;vSWr%D%GsNz5Ud(I z`_9DD6gXAj5s4sk#2G}w@F-6f^L8bO*hv9(X#j@~*qrW@i+@fRk|`Vygnkgoec#cT zh_-G+2D$ly^Wt8tJGdI6|0XhQ?t5h@D;=38Z!0^f!4ZSM`n zoMiqv4^fyK9xoR@bSm55B`-L4xB9W19hI|n{uG4Cm_+UNffT1By3`lA1QLQIV$IKM zul)(iVac<<5L{Zk6u@}d+YPa=FFh67d?vwZSV(`y@j!1nqE1Fu`3!Bu9Ocl$jxE6M zoUyBo1S{7O>wkS*K7U?4XJ*b5j$D^U=C6PHR)H~0)?^TEiyv`28sJ{|3sPmJ5T{n* zHZK`A3W#DJrS zSX}{0{8naqvZ3FV{)ZnjyBbr4agdcL!=06noq_<~8F$LXYz9RSE4M(+sovLEAWWWg zpki?|>h*@bn+RgzTziTf5;oc*D}L#&wUmSzi#Y;`a^Zb`8W;zW&R#JpNgKSaJE;bC z(t?y@u~Pbbie-WWe6P8OgwwLPFk)sd%K@TC?@yzQGxktJIKDN}cIpl~ zI*zzFs@Qez;L}|Hc9*DVEem0Azu)m25xHxhznHh#CZv4OF#7mXds%Y{o7VVr^K_9_SMw%ulJ4j1seh-Bm%u^Q!5s+$#?@T3MBa zDuwjvFeaJ5d^6Kv0@jmA(s@*42>lAkyDqw?b>en>3Ew9yj|YlW4@wb}Mh3gTjx`xc zf=GSojX3SN{zLd|8YKUnXSt^LoNn4(Fd!T)$~kT29BtM4qRlJfKS_8SC#Uosi|Ty3 zjz5>&NmYG+2+yI2jbXHr`X&)V*+%zUvULO}GmdOaWGr<&>?Z4zckE7w8|JbNSyUh| zE$`CCCl#d}De*~Yyx)5i=Y(wOPeq};KZz*KAmfff=uO%hV8Qf5JNoFAJi!x<}>u-5F? z37-m0_>8*_Tr^|{N)sVA7hN@Dy)&NrRvhPJ#sxy!7xD@BDjDE&{80x8arh8b1UNJ*%8a(?ID?^ z%uSTr4fLejkeR?^&m9D#%U{ga3)O14!@iCWWlt?XkJcQ&%zHCyU2)CvzL`i=EA;)L zqS=Qks_+ez*W9itLZCRp;Q`TF^eJlUShM%)8&}Cokt2WF1o9zu8_rylo@r0v%Iq`k z&e_$*U*Wi$n}fHd4bzE8vOolx?&<;eJN#BL2YN$nPz{pLS+;Z@rDjuWf_{zrTE`kIh^Rnwk1|P?%M9+-5DIjPR5)1B+1- zdto=04Xf9l&NL>5jfyxawcvN%c`V16y}!L(pFnSsX``f$G2hCUo}j|;s$|)KHZ=`( zDbBbS73Yt5K4f|tUch2;0IJlVV8(d}{Q;1f46wT~)q}(E)Vszz2;d+|;SqiTf$>00 zz}8{B2xm`%){h}=&Watc2Z1~9g%M32R#k@K;oF$OVJm}oOR>3;H;KI1Ya0p_;TRqNgi#l9MG^J5;_9X> zCCG-$-HLw-r*^$ut!G%`oYg*SgVK zAjeKv-QI8uBD~crcbG8|u9$>BqiQy;mmdSyyaXL}b6{i=W#1lp;tB#**cH>2&E^^5 z$mjC|w#qTa;+-;+l z4WZv+cp+U#sOG{m_o#VJ5%!|^IA+D)zD2H@&POJ31br87I{IBshyJl+(Ay#aToSSB zcj}JC`4M6NDPLG4zn0=Lb@JoCYAKmzRmqcHD1D{rsg`FL;`v3cM!*I;-$!}^b;A|G zt`DM@@jFmom0S^sR5$6oKPmLc2Q#0nMUz@33$(odNe{MS3}NphWB-IW1g!iP>5#DC z;{`?gD9Z5+mTHVVd8$Ri=#alw?LuU5`5RC%Czv$1Y{HYyt*U_@tWmM>)t)u>OYj8^ zP!X-WVZdOFNAP8g(`ZgtXx6Bpk^DiYqbwUx&`uyp%Ss0=4v%k@4N5(rK@*MBJ+xV) zO+yCx`sIt~y*Ji2MlLSBo=1^5idg@ODHiPJVjc(s6T)G3cdhLe3%FC{^YWkXJc)2t zy&~OFLOKgYBO3@={vHucrSLkt7`<@@-xTil&|t=lRS8Q`BYfqh1SQ@KA`(LbO~q%V z7?$bfjH%N2a98zv!YmdPjfiB9)6-+;b%k|0cl<|6p5+?w5=-2U-7WHSF#!k89WHaNj!P8e*Ma+$K$&Qz7cfxC84`S-#iKp7qQx zx);ep%`g1zSj^hymjW)Z@gxM9slm^driT`z>5Z{FcZ^4*&n8xdCzCq7est_9gPIqWa#N3A_}g;Ds-cdI zr`j&m0mR*wIxN73bEUS zc$+w$^<}q!sA>PZQwGu*&$Gy$&k^W2dbIz&9lGBkpDj;HtzXM+o%p<6=P+2tB1_S}gs8TiHe-ErQe%`6y$$E>`mheb3rM2R(y6o@SC{YEM*i-sekN z9;HqH4={QC1_v%Fx`d>y6`NEGRMbA!zM&foi~6T0)pBoXW4o%Q!?7W0+mMBVB* z`xrLE(51F?lG98>eA{(;bk&!Z*OBsT;@&CuOCBIxVuS-J>&=zO9ivoYvbl17&2L;$ zzbk-r^5Vq?n$8a`{OA)Ux{v1Kgp`kiJk7LZWh+EM6_TSm%vcyOY1ig>b^iE{oucMZzeKm1tK$hSKFOoIdopdn{5EIT@ zxs!6|Cu>XcSn|moYU6)vgey}kXdLP(Id+;?rs7Z)W3+#ewIMA+J*W2ia_z1awe~1F z)T1s5R5i{TynWVTk;!3~k4SOIs@IN}gyZ;L(tjH^VH5K(&0=KBqXl+*aB;Spd_EGd z<#rdJK4$hI{5KpI#g#vuH*`PV>dJPmX~4> zZ4(35_YKkRkV`{ie$RYD8RO#a9 zX~{Y^=J!FztE0CgT`c|qE0!&&r;AJ+e_fA>ur?*V&%yrIt`pOqByoq4yD*JBz@PKC zx2P{b>&}(z?rR;DBob8S{s}&Dn>&>ve%$WxptLpbP@lIqswkk1+*KD5pk|13t92F_ zE5G!Ogy)_*`P4}tkg9{Bf)IWVlDEt{O%rp?UR~uqcBpfezozUH`h1tkYc|G1gW)M4 zd7(?h;wBj;1kaF8_Jy@x%>NZ5Sk=Zw4s;o|nkAad@qhv2lq1509NmwQ^E#V5T$5Tw zY!L}_dL1F)IfVCSV)u-RY6~%Vak%0{jBjSDsSp!hIWB!tLZ)wvxnqkpVqqLM+h%T# zk{8VxnTzQ(9f(X92hJ01-#gx{<2Syh)Uk0T8cP{P6Sgy&(Ibmt-ALP)(7#Ud5rJaK zr*vYw69Q&s+3acbXF%On3VRQGae&zuCZf6lCCj43Lbl5IZUvV0%hQRNq_crK43-3( zuwvLxZoNj|AO8KPrG{zidWf+D5su_QyQ@SP-Xh13GG|X=j3lvn@zRFXcc0lYy!0{` zh-I5(3aDnZDCkJNX)3Yk_Z*o531l`G_#jdGTnh8+x9i2Kq#;wMLZJB}p6H`zh#5-| za&IYX>2lM14BX@R4L2SdKv$RQYy!jRo6O(#La%cq`}ENcHI z9)9~}E9)I6FreL2RR(BiwV+sg0&$c(!J|pe3NyCf7MU$CGhf@t`&~wdE=iJnm=A)Y zky6+N93x@MT9HAfUdD`pd^CS{eE=J`6Bif0S$7AZC*8BD1UeFqonIK9W!9cBW9PS6 zhbX4xkZ(ZiIExHSpBS^C65scXIb(Pj7%#)xja}=r!q=6u4LFk9RhXU7q%f=dBOvQYvQs54YISljWPhc35s!T~4izu!h75igH~UnAC6!T}eMTv+q}VY7cN7!uvXAo> z)z`;zr+%oMkm!O%_y*m&>Y%6KReN^aUmvd~7x6p}#SCsT>AfcC3Jm^hD%IRFd5ceX zw|8!O)gnn)CbP9dEmM zPPYipK8PdoYbjM~uFhW!apoLQA7~PVC1m}T-F}Nsp1ma#QHO<^9!_q4*SR{g$^xHH zjM;CZjqx5@7E!NiJ9$H_xv|UkcJX4NXfZ@BYNmsVLh8^U{iZ8D2@NJHxirgLyA1%p zwslUNXM6pcLDl`0uY>fIaXfNQ=io!HV&AGdqR}?`>?sq~f@UY)SKBq^0br;MDB>(9 zFO1)=^+5_|`O7i7ptlzUc4S710anRJlo2nOR*YN7STI`mr#lhRZcEl@()2`d})QA9>MnUmN{$aFBsx zy_s6UIEk!0&xma5DQjjZ*f-xqy9nJM2Q!{`UzQmuhrTXKZzwwI)lEJwFf37c=1i3R z`xd2dQ$Yv_Rn{aKgzyM{^<e5ii(tvAR&jq80O+XP6*^xJdh8(i_rx0aFJ<#qZ~AbIbVOvZHtr z8zzU8N0EJ)Qz&u>q!WA)-hPpVpPDQ-~3<_QhB35NEYR#}Lq!rtJEG3-%% z(2VrL7qnTfgcuC zP`W*RODp?M+}uPpFOlnVbr@~Bx|vvSC&{d@`Xi^J+6uJXTW={#^W^la=eO5NQNUxW z1lH}RTx#-zSJbKZ*9rv6Vgc58VKPxsCxr))Mz*W?M;C*+eDq?GI%JNn#?_dof9DPv z@<*?8We7-G9$fd>9PJ?^6aUXz$Px>R7QG`DL)aR`wE5nXMMf^f2AU*!y!S=qbXvND z91e%k{qyYRIQ%C`??^AM^)*u^ou|=$t#U zib71HP3!_X_8?l@I2`MjB99>K!Y>e~mzgYl^YmN7U>M-?9{qOFIey8eo zr_~%=L-+Oc8QIEzY%ksR22q_z$5DH8ie@RKLG363w@r?PxT`VLmpuCuJ9g5o35xes zLQj6|B_Hg5Il?$eQ1Xfs;s?Crya7cotpC1cNRyoJ6>M7uHrJhoERii*0&zXcfmJwN zL^5$%9ULzqTPiMFSCSy3KQ1f!B<+$|TIEegX)>4_*qC``Y}4 z37u?Y;%_DHJz4u)swJ6Jywr+evt#JEZa_?}8uQMP^o%#6B%6xZ=P}$x__W5xzmlG9 zv<>zal`8B!{nA2*6jUZtrLs9NPoXaRkybo$c&Hvg!GT7evw{wyE(Z7c*^VMR5zjBP zuN#HrBiDUNM?ZcW7-2kkw8Pzw`P7ZGpcXOtTax`@w*dbzuiHR>JpAE2GO*R7pGvx; z0oh&LG0O`(Rh4%>TlgcWXT@|c_Ik9c-e23n`98E{e5sXCrrkq0!yC`G#WhUKvwX$}J-3 zdILsDajZ_cMGUh5|Jtv?@9!+mgRg6(i74KdMK6xuZ=;78QoQDQe|CI`Ea zjm9q`8SlfHA#4+Nhm-QJGIe$EQZiQo z`rLtNszd5O*%2Uf3;JI}`g%h9l4vp**$vHbm1e^t?QDWh>h-cTUNUHSzHy6!R^f0` zQd4VT)FqK}s8^fK^In{Z2!4~*qFMZWlF`_l4Fw$vic*H-y?_Zv(uZwNb}x^fi#&?A zsKdphNM)1^f&kNR-55IiY>pMAP*Smy-=2Ipqpw~pqzM537U#3!89#OG5dg6R4R~V5v$TGF!-95ZlX8TnNL={lLrrz%NgR{ zFyCdnYk#uB>;9E8lIW8-H_>=e#L$ni&EfI~ve=MDXG|aE`Ad_yi;*oy0Opxka3VZdlWgta_7OLZLvXyM;DOJde&}MiaE!T@;$_@`- z`yox4p#(-W%fK9`^w&RmK#w-5fKP{HB{@<#k0lDJJI9v3FQ$EhuA)d-ay%pRh)6uN z(pm`4#1=?^56Rn&ifu$iL|3JcET#LJX7}#o$0$*$(^?>tHw3b|0=}9qS#xEbs>vj! z!LSaC92wYQd^!LXhhskS@`@Li{_GOi5Z-c&X>`pOPp;b4IsZFaclfJ+G z$PDQVvvO1FnV1+!nr|;ks)UKIJ8U%W-GT7*E=IzYrr5tADI!Y1=n<2IVw>k)!GqNy z29O_FI>J8z2ykO}|7BpKG2+qdg$Zro;yw6GW!tCEqZXx4t;6E2X;eWAGZ0H+N{o+5 z-rsUNIPA#>4(qFaPYN=h#Njt69@=ZpUJlkmN=tcOkkSQ-nC5g61~n&0pUwpb!EN zEB0+CGNju=*UtpgaJ(HqZ|QveX!1QAUNw-_sd(PBxQ}?^iK`x<_IlIjb!_qVbDEN9 zz{QMRqYS;Bt&G9VSXt|e{B#FffDqc zHk^%Qfc8;1CY*aXU6+HZMt1xBgE+`|RE9~b)9W$8o@k~JNugj9LcR{Hk* z$HLG4O_d3*Y-|X-TNz_eFe!#4=3~Q~d4o88mY!Fx1s)4?k$9XcH1m%Fycjr-S6uo* zpPTi90VYkW*<8t=&8ba*EWhAX1G2v9EP;wra@rkg;HhrZB6T^|Nk)TEeRawHmDHcW zXPW(1#ay>=AK{J<7-IJaKkNeocgr$&21(6$p;Pmw|Kf?LnCB@7SHxWZh)@mSc%fB? zGe^UY{!)FV{z})-Zs4K*OP*^=Se-0~So9~27$t)21Z0NeeUO(klMb#1B;zJ?<7D8t zd6}rTz`Tq7vbxz!)3eM}qXxNXRjEN~oKt*2iB5Qf;n#Nof)S(zinV>{J=RdV+O9e2WKxMzxUDfKD7)T)Y8f?k_7F z!2ic96<4?l3Gc=ofO<$QiFLdek4by8N)Wx`pV^Kd6|G2*rVL0w%#{*sM-vsRWe9em zb$0g>^iij4+?QTA7z^WG?H>ednwp5p9tbzohd^fb3+@#!fc@d!qUslS#{Z@M?LW$n z_$#HUy2UbA221`Of4Mm}yV7|m-Bo;jyo_`V+#Jd<1L}`uV(l6}3q2y;T&o>Ph#`69 zLlP2m6goO?Mm72Yrh|oBXkUC1I@?8arpPj zqdDB(TKznLO|=f^W-aPNHB0rk$j9o~-v?i;iY0b2Me4|A4;uVZZZZADkG$hWlS$7Q z>kn4LBFrwF4v;f)(TX9*A^a?ZAg2l-O9ydOs-j4LJ3e0Nwd^MOV6y#*`&B|zs$i`e zcXKYZDof{Ul=wxF;PaS>EV8HU{qF>Go8=Y_w9)SF@VW3L0F($R16?(YX@9_pWLTYv zR#Llg8u|YHmuLsMo*lvQhJGNodAP{nKUL97y{LtR7tnzI5S}uPivI33TTP{8bh*XweF19p2>TnUQBws}~>`G?Ie|M()u?=B#D+Q4TyR`2CVw(TVgC#8`PGWdAViPb=t~)uTBAKxyN`k zXvh`b2+rFxF4NCUEmy56UPoS?!|K7HrzKaUs*fE-LPAtMjr`dn4(QTWiwJ#W)A+C} zm*l0TTmpUtI>^zU-(!pWKD+*1pKrfHsB`phK?!{MijlWRy*HeN=k#Nq6$1WOgX116 zX@^xt?ArX(d4ffF;R(3Evr%ygq>iKgcKWjiN<#?0k~n zDP~EX2H)DAE=ZtN?epxWkV$jUo9GJ?`!9m8n0I&>8SG?&s)Y1<9~iu5@m*;2pZL&k zkeV6F>AenbcXQgqmm=c23_N1NLXU6?M;y7d7$NgDf8>3Y9ptqdFswyf{*nJV5#jzIByIKmWHN zL}J95Tb&s^we&)Wuj`innr|f)buyIb<>pbhavE9<`}x+9ER^UaL%GNnvy~kk@Y{tY zP3$>v&MZJ^UbA^v@Y`@lNr_fgm}DE1T-hfk^)Ze$F|6cQmTE|vWT@6|XvyRvYrxI+ z5I%i~+~fm1?5nT&NiWatw?kL$al*jJ%(?--*I&_k32ZN8skE6wFT|GtrKta2UAtEP zKS`#gX2rDX{r|EgXbcGc*$*@mL7;vieaX{_z%ZTny7+}v3j)P(Ddm;1x$KLfCz~9BZ6(f3c$O+bE-27)-;~I{^h)L|cC>*PVcyoXFRX{lDhK!7LA%!kBc5R& zx?FzZ9>K4m`okPFA|z*OpJ@tzOqH=L%od_<0CCbjb;8ky%5)`LbFeV3$-=zw&;3W} zU5o4|Z@&>T*%TMHnHH*2DO+l~RLte$FSIBg+ma&lA2BbNM?#%{@t-_hGOLRF)HUg# zF3>wV){jvODqQ6cfYSV(0NU#p$da3(%eK7!4(Y;yuW}9C?a7nin#T)`=xfAnAn4Jc(Yk90qnAd5Vyu6ipb+m&z~V^d4j-2D+1Q?Z+`Q6q|4sG0 z%%*ND=p!z&&$Cr?b>M4D5Fv72T8Yky#ls3-@wz3QGPTrr`WvwFnu#EU&2tLrkC2OW zdFMqKKo)eW?Q6|a*b^CF^DtStjHU2jMSM?-LHt{B61Erpt7M6iJ`i&yhxie*T zqY@2ur3fs))Y?@heVkYmYrSm}qdGnH>`Mabdu zFKdg8`#2?HJi=lNG9BP2)qv%1U6AC02`MNW9z#Tf{hD5`B)ulSJi#dKRUxi*yp7hB zLbBztVs6%7&6;0f4Ie)+23VLVzha4xN6Syv5F^fC)FqG(^0karSRN2U)~+x`)zt|d zXso1CHe~D)ct6~n3Kmi3Vjru|AyEmemDjm{KD{*|>rOWZke`($e$odTz3ji&nl}kQ z8Cyn{ZWWkBy}gimtaloiPeD8+UwZN3TKb~UFX<68*fuIw2JZ~7LH1BDFy=TG76gMb z&+of)`- z?ldWf4rgaUbDu3NHj7+nJ{ZI1(|XNUK-cdnG4U>METpjlI>_TJBO@&RSKRDC3B?qR3Wbi9gY4KuaUQ5;pQ4i61&6RGch?gO>zPvBfsDKQ#|M0Hl>Rk$3 z+&dO@J{NIgtU*NkxvHrYt0H8uRbkQeYH|n-n?^D98s^$C@sFs0}2-i`yBqy zL!|2m?(th0nzid{h~g~o%T3+f7m;3r^Ql>!Jtb;_2g{Gnwrt_;}Q7^Rk}?* ztn^QA9FMC)qW;-C|7b@#PS);cTbeVw2)41u6;y#1e|?G84>F_8RzPl}lOX@JLxWbRRf{acL3qqV_E?A--1T4S<{hUYI#(@K%0 zUH(EQN!Li#70bn7Ql&S_YvX0n)lAAB%Jia)McRRTQeSMP8X{`x#SN=AG;}u@^*s2D zxvkj9Jvmogy}0sB!hjtC9ePAH7tGt=G{25DoSZezH339bgUse4nmOZAEbnz} z!jh65F_2@?DzlCW+uucs<#yS^qWWxIlH^8D{vvV~pznCUdo1DDH+~V($_*1>kX7;0 z&xR$R*7b%S-;~IHRnKVd-95>D9BC=OE+ky7XId2!Du?Hz9l{F+yi!4)L~D!#@=>XY zqD0LU_U}nmRbvEi&ApR_+clEVm1f1`#J~|@TK>}Z*PVLIk!?FkQo)fl62*o zNtg{43_z;WHUO>vHC^CGorGbgnq!4ZNb8ZqF;KbAHZ#qRypZFWcPbh_`<=X)TzSn; z1wTK2-|VpmE9_#9oc4%82%ldFgz0 zwUVWjiZ2;N>rdY9FSuW>DOZS#j3z71otV?|A}zaZxKbrno&8ysLa$f$=WQE0q?@_7 zYr}9FnN(q?v?Aw%lgIw!a8zVz`+cx!^)W)T*oyg8qPZ&fD+V5~V98;{{?bl{>+Vs%)?d|W?-yf|PyIGc?0@nSIczd5FfrcF7rQ+H$xd;j*5 zEO?h(z_E&H3g?lA+k`RMCe7aGun*`!=HsvUX#qQDAiXJ z;?q$=Z!VSv->YNrbp|4lIk{E_-i1fEMB}4TfBV>iNG{Y40_;CpPFzV+%bJ?l%ECU3 z+fCwNlA)%eirHU%hqt!a=xuCmelHnitm?+|)>d}(38H zn|DA~oeoKFE(->F;za)D%ZM1_m%W)-?l2B4$c=-_JFY-VP=Qk!L-}YRMr} zgRJiEr9TnoO`W&~IYNh*TR}lrI&oUJ!>3*vV+Hi>KJJtFRLd-i#hiC5BC-6~H0*}f=uRELSx zgQM)aDS(WX#a4aeboq&+Xm8?(iuaXNKMFC9N|Lc7yg2tcga(UfiM(}b2Is58;n>1YJg`>Rc_Sm538xv12B+DCXQHF7)y_7mA zIZK6Sy}vW9^&soUcpn&ZIghs)WA<`f)z}{k2>z)J+hka8bM{!fa`YgmRbJ3%O$P1%XeujJW$2>q`AO zXFtuJ8lsaUCe!Q*)_&S*5P_J4f87h%ta%(n^YVj49ITMzs*{5hAktLV$1#T~uT~%b zF@4}M zAy*e+_wfSp;7Gl{7G#$CoBQzW-785GasO<9%zWpi-fKqUWub`Dt;*EC7lGih^|C9o z2XOn;f24sz3>QOck~>tC{3-4dCF0#x-Nr4oSS>tnxXJD-b@HVTt7_FXorQ(-lloa+ z3!)ev=T0S~jo7B5Jj)znQ z|5c|Z;nB#XNHI?`5&XOssPR}q={0x{)=Xe@CZgiH%UDHyp+WC993$OXpnbm*q7@x3{+eU9%RcEMrhwJFoSu}C*Fyq8IE_7 zsBf@#HudJJaVw8fzUZsSGG77Ac8=Vb{H+Um@?4kV+)~tevdQ8%o-wI}M*dmwF8u9& zZV{~X`O|5@`stLgnEq+)$*`IHL0lt$M{)SiJM3RDv>w{e8gH3>FZw%=YE4lZNWE4B zo-61X@kU4?(2Yl%Kt}CfdpN{xUC(y}?Ch$5FDB};O0R+yw73n;Kd3cfW$+U#b$s-W z`S6qGdiBH5*CxLYEiJbE8qewYi3Oq`Xfg-h+`Pm|(fP0*!WSMNWdAId%WS|!x8bHz zp4II6dV8ahBfpCp3Z$7#QvQ89CYo(mLNrE9$6zlel#4yI)BJlTHY|<@M8Kiv)=2Ll z13slsF{gGnmH2a)k5uP_`Am7%TfJ0_17qdOB1*8BO?d_G> zOz3>v8GU`&?Fk_okCu_!QBUual_`)spX$R3=Dks8n1Q#~$1s(1${364e|~i2_&qAK zvc1Aub?D1Z_w1{a3tA_}y=|mgK0t7?dfK+gmwzpCx@?qUxc zI^e#acuXlkDopJ@@IqsJnRkDSzxYZdYv#aXEk?`qP*)Vr0s31n zAz3XgDj%V;T)Lz1d6|XBLn>>)@m==rlWeJMx=b5DJih4&Q^#(YN+Qa!UY z%0$=yu*OgyOnz3HUqn};y1kt?`PkQd0ld8yV% z;8`b@G>HO*5mk!Otfb6PBD&MD1ckxm8`0I5iV*K8XNcEhM!?^S7X!(#B zx4T$ZU^QT5utB13cW8^I2{H&csrcE@_LEmJERIcNv{fJzM^A;QcXGXc;X044!<9Nq ze|>mNoJtZ0;07SzMB2=!y(g1PH`#`QV7T zr$-suu&|(YPQwY`-cG`%IwmRXIiY*V52=Cky7IpZgegGq$zP-Nyx#Un!tuC|Siw`D zcxs%!jJ19dRX1hI`?+I~oATCBzgN{=rFw?Cde?iNkSWKg0_|pzw;AK1gZNF(P_^yy z`uemjLN`-n*KOb47gvzUqCxuafuT(JP znJ7_<_N981myhd1?S__Zh~tSMIiwY;V)nMy za{S1moWSw>MH8)Yn93(&PK{-aCUPGgy`Y2F4D-A7SL^B1u`{}vO#B^DDQd|)I=&aN zI-ckAuew-2ICC5ouf!y-3@P52hbEqj>bvRej#c6XsJ(aMn*}gg9rS7%QGu0-!0muf zIC*Yq7@$NF?Dko5TG`O2I)fQPFDJ!N!COy))^a7*1elzfKvndp5S36{q0!svTfQnh zWkoN^3#k`z#0*+GXHVJcf3VcA>bBscxy@4a_Do9R^Vf^Q$%|s26J?Tqg6gMcs~h{v z;z``-(5BnV%B{e5x{ND~%cg8yu~C2DEZhBze;ZO^mKxJ_H10-u-TA`5yh!$|SQ8vk zozwHp@z1`IpH=(%$bd8XPNxGIl@!s#;q_B#_RS_B??409XvkxE>SSW#Lso2B5YEkVP){lMRsSM9FHMw&yh@U6c5Q9o8 zPNv%X*nTgAzw&)7&*;t1_QkNUm{$yyv#)=YXF!lulu{psCid}yQlPOv7RFNE-KTHH z3|k8OsIoJ?EJwpsm(i&6r4W*M>b?s4IjUN)gF0p$)s9-#wWaDrh>CkP> zR}(7@hjE#&t3Jo2(V2Tt)RdsT9i6u|nL9%~oxZsgilKFDsbt9Q_lHVin05+$8O%~ZK* zcnC1>^Fe=3@JYr0Y$DcDNX3Fh8+P--O<}yJt4z!QEbFtc#NC+%=m78nRbuGD+J^T_pqjIg1- zto!+prqt&-+3!-I$8!u7D?w~d@VMEq(?4aqEj?gtvGrFE%2g0rFP|(2Cdp zjZkC#&r|i|M@E`#xr7t9ua1(S0K= z{&Zux%@Id$gHkg3J4axUpi;Moc&P+kz6kNKC2-b{!y&j`xxC{;BB;Pg?SJ*xX6#T4 zbq>Az`X@)v!NVo_{#_q=NzcQX%J%(`Kfcq$anExAVtnYd`{{0)Nk`W^HLr z`2J#AS9+ABepV%^qydkm3uEYD||cgKT+lfnV~{QS)oMjzT)<}!26N?g^v)thYoco}AqRUh|e%$LVesWAX} z1^D^1p@ngBYS!#~w_k2NdvNb5Su9P@&&MSkBch3{?}g2j+T@)&p`q8h5o_~f!Q3ae z;@!|(S4ta$Ig0L3Zl{Of704H!=LQu0CF_qpt9Pk<{H6|4>_J zjH6N9rn}URJ#$%aEOG4G68TY)r>G1)Tr%}CicS9bJi?KUY{lw@!{J-J3TY-&ArLvG zW}wl0#J$JK%CfkxF4{=NcycBLn?{hDQr~3289(K%Vg!q<$K6|CO24px(klqUXTN&* zjx~J5Ye*(&pAQ>4b$q&h3lrX!f`?R~bydL2JWe{UjU>>-o*=*&MYo!&f#L5)NnwJ9 zqxjVY_?9NPDoJq`-2fNy6JM#QxDXBT+c11SyVT|K^v8|8Ha#hqZofNkKtz4W#*aNA zp54jY1Uuvh=1A{em$x{htMim8;VL&0SmW?jh^(%@zFsK47-Fo52XA98US8<4apR7N zL(Zt36Z*_F_OZ|OjrwXIj`%ArDXpiPfGFf&Pci>h7qEP;z)lhLbdF-M!D?S$ir}LT zsgolxX$gpCwfLcr!>vI#%K6Ju5)m`aGN_WJWopTwSS;4FCa=_87L6nB?>)O>U}gCz6@hll^OJG{=T%OCP zbrvJ1361}EG?x1_@_XhTEz&hC&!^+=dwPup5&}j;&Ayj=p?P zxla+*ZxgTY*m)|?qkiJ8^~`T)N5AaCBOEdnld`?7aDV^bmJiM$AKbUa6~`eBLf*fn zuzT|tDcMqN2V|(#O0zmgM3C+NR=Z79J0ZAZ<|Xf1^etQmw!jgUeb;@=8J2rhN;fQD0V<5M}qq`kdI7cUpb!^=+bmM z`g|0)yfnXH#~3V_TZuskS>1U}+BM7J9Gjd0mG${iAFrFk)*b>eDii$QKJth0GprAk zxF;VUbzB#;fg41bkP+Z(Oa(g68Ns%|(&Mk%bfkYkhNIZD%bF2nT5wJ>j8SI#Q6NMK zV<^fstVc--OT1WCDH_#UR(0uGW6hC>ag>>b#{VLjc~v0-1s>X3Q_I|&#a(5){&vcc8J{P|~;AwN;&%li#qTdW95Kn>x z*DFV-NQ+h-4O2YFKC6m92R@N<>*uFKg7&ZA@f1ZDlXZP2*9*3_N+$nI+}c0X&-M%Q z<3gQw~vs<96bhUyq$KnrKt5xkg`QYOwN0ygdjD$s`% z#(;U|P6!STXQ>>SbJ7K~tO*Z{lTlu7N>-2ZCo`5UjQed%s4IWMODwvL6mA>0m)riD zT&+gcqoihjtJ@6q^8UAv?0yAORFv|4xAf7rQP8BvE7e`0Hp!Dszz`^&|gPpt+U#IDu}-IM~+Ro0FU<@-;a@( zEULA5W79kNOCy`I_|ogjL#!`$=8f2kPKbP>v07(zj4uKRKb@2yH5I{%U;x}aH?y|; zPT2v`y?o}#(RmVb{sfi10RJ`zvD|h_dVx0X*E{IBxA$v%Ja8YbOkU)gb+)KU-0Xd? z#du;j5#a2NczleMntv%cCX`Jou}wA}UWBNX16 zNk8Y_sm5b@sEW3U|GC>(7|+kN4ZNcFKK&|@s{cF~$Xff5`m7jYUi()nfw(7!2G*&z zNPg)^1$l1^noJIjVYrERRzJ;IM08D?1i6nO;R@x=4{-K>B>Go)=Z}QLsy5W29UH$L z-lMDYY$+@iL3sT?&wlUI8e=E?8q==5DnpDm>Vvz{V@G2C8~gxD_Wpdf6Y(3r3$306 z>ML>_W2B}gO{P$6l420m-D>;rpd9k_iyLG(Sno#{%8`37q~>b3I5=4T@ZId&729%t z7w`WWPWPPr&!g}7^u#^YTWsF3ZOQM8)P*mkp_F)^Z~fjXWDeEVAq&X6-oG*&b^48;5RkryVB}hvYW{~mdw4!hlzsFCrii~{Wmjr9PG+F>=<%RawP=t5%r?#){sCf zFFJLH1TfYNO7(DvBaW|e&;8hB%w08+h$CCM(18^eFn*qR9Mioxehc@#JIqwZCBN}Q z&bCCY3I5T0-L(C6x;1>r$sw(mY5_#H#mD`N#7%YJGIYPF_7p6(oQCs5&HF>W_u*z{ zHqE2{^YaJb$(Mj38b_GzDRlr~J)59I|@E`)8AB+5-1Gbt>ZB06w4{cU<(G%JVZvRl@h`0FL!TcW_ZXWxy zS}>@1=I0rU-@MB{EBX2D{bYPI@qhS9-M$omHt_ybrv`k>kuKOKDlmVKwEp$+#^*69 zKuCe17S8s;M}N%biG@N7V@-PcIAP9>AJy-lnq83fTb52mVvJ*gffjaa#D0MS%atLILy{Qui`MMicw5BCaGK8%k%H=1A1T zMshqI1Rl9}_;x&NuotC@bk5lV!kks5=5T--7`G-D6u+1P`V2r<-Zbb^+!ZoE!LE_^ zUR`D=2%_>E;#tux&u+lak=n)j8!8#hyq1aM;%?Kw^YYzg+G=f`8!;(>xRFu?qT)Kdw<)-&%%D`q;a&UHSB#~OhN|O z6BQDPVZ5J%;^SBz)eQly4qtDzVOzcz8ulaHq7>e#|91^&uZfbLv9YB18Bv9=Vdf+^ z@_oC}-Y2aam4br8xDk1n{02En0-KvX$gcvQc=)6y{Lxhkhrsex zY`kM)*^52dtZgR6G^zP*cr!H0<*MZrr{;TIPmh_*Md8cUI0_XhZvf?#t@!?|!ibplq!;zT?jTq(4RiUbBlM7?Z% zxixZy89ARuT{D+vs!2%{_Wy@I?2!Pm&zPmQgua?Nxf54+*cJGsNnn*ViKakyNYcR#Mzi zGB^W@w?DsTpOKR0a1+-cYc?{X>&E85Ay!$^cZKc@FgLs2Z02D<>O0UFoPVrZ+YMc* z@%HQ^mBfDsC2OzD7;f}_Lt<&B1zKQ|O?-Q*gY@77u*v%2WxV82dUvMH2c~T{BrKs_ z|LqufZ;aLdUr5&Cu$)p?srUU1nZFSUOzkyx?AqMF6+AL~zMD(VrHJKDx%COO#&t90 z0VpS(T|SJ9-?KODudgRcTwRh|=ca2(li|o=^{$cTI$Cq4G5_aVHoC4?QnfIKo{_cF zit}hxwIL61C6qa4II%=nz|l3nTtLOB@ALL^YHj8%)z5`nWEko%Mzf9m#?I;K(Nu;e z;HC(76o;ep-~KJs?*o&Q*lk<6Q+M$VRZ0}XeYtwEW#jT0_N<2(Df=VW0ft)4$pyfb zel5asJ0$LQ=(W~5!Un&Ab4e%=Tn zq|egY>iMdhyAIZ0BRle)jZQxU$%8~;vMC?Y?A^acYLJ033Mz2#NkA%KFGiFe471!E z=0U|5CHaW+bL2`#!8d#x(!DV;;E-NsLS4~_J^^L(-1r8Bg3>(3^3`=d?|KbFJlys5 zNb9`aC~3hXg@WcTX-|le$PQ}2Pzy69dI(?vdSTWh?Uv?>LTUEEi4}r6gaW;%i%ENwW&N%*A?;yAhpywZi@_oh@;+chrCg^mdmF~5fBB@J=GV&7@Po;! zGpL>^3QCs0u7x^@1Vx)9-<9H1tF9Boh&8tGn09s+6Q@t$yN$#j;@=OU)Ai< zRm_A8>!%&dV!9Z8*(>+qfG|#pwOJ$(V27?>i@{=yuGtjjv9^pQ@L82cI)MxULq!>F zCAse5in2;a2eC5*5cU&a+I`ucxd{r#PA(^pNbtYx7z=SZnv0I|L1)=|2N|>8>_6kD zCS5-7ko-&U!unJ8u+DZGy6K@z`MZu*<}=v(#2iBykegMt+!#Z=u}B$cU2cfKnH$8xlwSPnq_?g?baSb$ITZ&% z=W0<0A!ME<)C3cll=ZtJe~!m9<*>=FX%gQR^z;yaMnu-FDctnA2M17XE$s^U{BpGN zHjsVOIn+c=M*I*b^%V{`-uGFNUC{fLH~uE};ZdfG1Aua&C98C`=*j7T3rl8Y#moRB z=tqx_^ucN=JTGbKVMRv1qPoQ!W!CngW8WT!Z_$%6ZIRa@b=a!Ru8H#d;6=Qn9Qpm- zQ`|z;)1HEIzV*B)ZCIl@Jp%=thx`ZptV*#AY~^>tcGZ{l`m2^}(rf)t3q0r}cbw(m z_AM7&p0I2>UP@;G9~WMC7-4kpEt*8DOsCD=her6XBxY+z-bAYxN~quSfV49HVu2}f z9RWkry@d!Fzom+f#J>8yQIqeALf|Z%M^k-hxqUcjcl!=YC+(WT8noTXvum*0VWwV9 z%V`#HK9DCst7=Nnl3$9rr9Wz{c6uBASsd@IJ7AjVzVG-{GYJ9#5C6Iz;PK2z7qjkW zM;>*wYB?ASEdTUmJU2}c9&YBd1*s-QGL@m0^WWQxA(E_Ll}(3tUO|X(`W2Q~#*2C3 z7yY%Tlvde9+_)xD~>@d4iH% zJYs7=$Cg_h5hOi+XCq8iU&v7dWF0S7YtHW$YKSgcmhbhqufm2nI0LpG!YNJMlo>-b%s{|x|qUcxzBgxv(J!{fc=qSSj)s+(=X zuw?kXi>-itUIzXDDr6P&XGr39e=tUa=XyJiyV?F@E7x9q{io`#ADt2}BVa^CXcm=` zORkzuskfll)6ck7j^rMa8V_%}B%UA6HK%7&^qkagz97as8IN?EcnBo*y?t1CVQmHO zKfwvQQi|D@Shl4^-16oUXXfwc($REu+M73C|2_{(8VRPSzEQ_YxlT@jlr6euy6qs} zxFo$Q=3QB3^6%7gBgt?_@+v4cP^)}mFMYW0*?4|AUyis z1nwGY%Cn|vYEnYEBZqq6s9keCVx}X2K z4YnPBjw)rQfKV?2Vg--`WGmI=4#eCW$QYt?;^vHP~_MY;_M zCdpYa!uiV_4y~145Xd|5kJbLG!yRX6GQ$9p)kZ~E`iWR3GE`7bDbGjK)NpBLM!MMr z!RR#6v{XNv*9;0IJ#aP&mgas&hraRSHmsEXx2g|ODWQNDRQqbTHzuGGTGcfUZG5h!dnoi9>U7b{wLXj& z5Z|^0zOFn*<}!c;dTE`7ai~I|(`=(Ov>bQZl29|$an8ZWR*A)0=)>Nh?=taE=jX<2 z2B9z4MHavqR=LKxY`)zm0XP1H)r2a0#%#(YGdFzp#U;7CZY+5jK2bMaM-k~`^Dmju zW3W8y()i{eF5bPRD%B0El|+ zzhB*Q7a$JrE~KL!OD%AIxy>2FMLd*vEE=U5c6^HDl0|+eSg#=RE)O48J)a~q;=0X3 zd56+-eV?Iff0aTmN&j89Lm#!Ihv)0N*izp4CWjk#2^ccl7P|q8f1k} z%LTGeyBbX`b`J8P#krqZ_NG z(3N_2jY7-+h{e_oe8kye5FwqUmdN3q5qKwDr!op-R?!q+~a9;CA}3` zDb9gcg1+m>XrrGKSBsm~4vk@|UHWEee%@*7UaAh4k9=HSnc8crMLLZgP2>OZ^xg4P zzwiIDw`1>hoMR-j?9IVB_9!zeN(fmQm3ipc94942oKV@Tlubs-9--{ALU#7=KJU-> z@%yib9IyM__jO;_^Lk#->w3*{D0HL<+#+SZRMB!C<~9+{`c}Zgg{N}y61p;KSiNxT zqH<{Jf_?1x_UpiEJb;Pjm>9hGz6!aXtt(r!)%9qR$ev`siwskBMtrbthj$-?3)S3W zr(&_(Z8WHwUeQuMqVTdqllJ_$?}37;**pdT9wmEyQuz`C>nM)J(wQT)@#0E|=T&V= zPA^b-w&XleT`gOtVS#t!ToM`l60nQ+zSAszYJ;dD)leEXTExWYGL<`CW^u&B{k%L4 zP{f^(0{ko`yB-n?XvVpTmh+%{0qEqCIK|s!Uo_=Jhqi!+34=2J-hr|&*P0JfgvT}r zFz$zs)P;j8Rr;a%DZSt83$=8WbH~k)2sXUOZOu1Z$mCps_k%!BL+2kwh zeeds9X4d^)jvPWsm<^Z?rfH=zWvDgA*tlNrwF+9J;-4)SoJF|Yuv zZ}ZXbLFg~%G(9wZ(hzc0F->|>(m*>&w2x8{uTd(>Y2A5Kq*RmaNo;dBiOB62b{(bD z$LXG1;B_ZT6}imEt>eub&jdW|&nU|j`C6bJW&#FK?=5Mb>sS7jm5Ca=fU0s&PgIg+ zs=}Uksi6T`ZdEF%*3wdA-J?d!Oyz%`M1eCCX!ddM&upp#)+3FqJ>j%sJS_J2jFA&Nm zT^_NY+mpGSsf%AS97yOJ{s8Kvyst!2JqY6YOXgzIdJLA&(U-W=&6^RJ2M6>)0bSDj zEvx@B`-~Eey2#c`B1;-vs52nFX1Y*qT=dds!ZqP^L(!XAyYHzq$xws1~o$fenHbGI!`@WEOa-QL|AXz1dQ zg70why+4$k>Hs;o=-r1aopB`%Ciw(JZ6AR!d7mp>0dd%Py7M(^t%!_Fo09V8MCrT? zX(xKt>+bhDlPsq6JsPy&wY`WW5)Nj^ka;qFTq4O$F#I&#q`o3NZtt5$$+AOMz&f%V zR~NA6c^E|7l^yP-ws3P!HRr}U<8qIw({8r1yg_LOb!(_r$IUtYBwic{$g@f*rW$A0 zF@`1UnHE-VU;3VQdoonku)n=JAiX}!q>cQ;!<+cyA#`U{sc!T6_$?Tsm!Gd8o#3Af z%+mHqw14|P6526@BTU{T-xUh>a-VRkOhhs^vU>YapsKH(1! zDKZbW*iOhGiVNZ>ba`GMjkw+-h3EwcTQ;N?g6QSQ9XNFi?np6nL&E@NQE$$mBCl)TRt7WPo*Ax+Ua|>Z?DZfX6twHRwF3H&*!E#H1^bd6~1a62l3{Kl0GLJ)7lELzuERt!;Ta#kpW3a6z2Zo7cyD(j z1p9w~#cAn2WzK$Z8Bx|o){?Jkp(*jYfc<&Y?ZWw85Nn1J@w@bjni$?ig2{*)kxtya z+FapK>MHP|G_+bp6W6G`HU4~$=Uv`W-Ne78_Yn;Kj#$brgyK8R{7zquk~wN~|C`&N zeB#|so6E{i%G8v4-B0(TkxJrVPsyFVE%8>tTX~jVskeZ$bz^xYphP)4W7)p+_PI6{ zbl~Q7n$2CXYCMeI4(T{CyXYpKA+s0t8dZZVdBx1w6F7p_^ z-|kJlN@g*X@-P{(j%T_a!ppjh6Zq%w9C+ll2{wI&$$cAbDWB~{WQ zOKjDcVz7|?>}PlrIl$wLG0{u;r}Onat|2X446VzO>vvIL;kj+Mj?kp7wCGq!4#7*`JNp3Bjo6N{C!! z4|;APPz8=Jzh#0xrL}0J`iTF%vtbEuFvN0Tz&%CwU(@y{iulaV2EK_NpO!O$>ir*p zSj~Hh;o(_5x%%bLUg0mx0yW@!_<7##cd5Y*_+C^686=lIvsNxj0R>7}hq;$oCDqxQ zO8N~;@k@@EBOVw}JcWTP%$by1B2)8eIUa`>Ricd^ea9VFaO9FWrVqu;}};{7ld zZr~ptw$lY5E+X;;ILW&`pFUpXt`pN$-zsu+yEwH?|DVQ->`DQ@?^O%`p4R)n-lr@{ z59iW}e}3WQayQ4a4W2AOeDk#|7rm<%BKG}EnE1G8FPOXcUK?rAYO@jCNUw{ToMb<8 z(OLRyqhix05E8nHz#*u|!dGGH$61zLWe?mmoX>VZqJVMgQp%2U(!Y#vO-_2T#y?x; zImCBHQU?<>7`_ioxy_@bYXAK0!SBge>-x;hfl&`}eq&WVdW6W8yfgnH^!G&H2D zr1Ps-XTMc^hz#en#=*+B6}ySFkK0oJxl`#rf6Fflq?^UXs*Lb4n;Nsfx%Fcz6Gs3D z!8{-FP%;TB_3zd?Jz-O$f`-&QX6L~^4c_+s7g?Hr^aL3IFJBFY!L`d3O^^lp(c zHgPDi@jFGF)m1EavkAsmiE9YOK=4lOl{`;gZ|hub&QbgNQKaiD<*ds>JfZCpAG>bDJh-J0^m~TM=tw! zFRNH>k1zMh>r$fBSzsMS<+N)T=lnsAzJK&;IMV^{;Cx;Ep92AT9NVaU&`Bgx<}0%I z`CsNXm#7s+{cCImI&r-5`#={=LuJ@G0Nv@88oD|B6d@dDiy7reJ~( zNu3p0#h?GsRf{1YH~xJV{@|BkVErAI@hU?HW^YHy#4% zmw;P!6{AP^F=*T43fB-~GN-PCMVM_pd|kl%Zq({;V#^u#8z1l9AAcqpT^{`DJlel1 zLg9CXn)o-dhPGHZ^P^%>GR?-8*#>7D#;1z?B?A<#Q+)$JTqYQ`*8C3Wau`~in2(04 z8xLBJ2Y!t`yLjERU1hQw_TynXf31}$z#M8E_FM0&_Sclsvyx1>BRo*Xfeg9_3;?EJ z4KgGO>aTlziP%Xb6w+4@_|HNui;DlR8cJ6vk@>>^v2ES!qMMf9uYX)mTpv277aGUS z*Kne_6@0Ee^^?H5hFzQ;X2&p%S2dn&ell*E`?vUS1NU!fx$=dA@66sA=fC8$=*5Jc zhvFojBT^Mj2X^@bJJT9IGtFbTqv+|KEX};c-R7#QA=+rBU7d|=12pBMD~^ND$kj3l z8p&pLf)C)ukeyw!7ygNJmz4X}ZMu5U_qhn~5pf5I>h8FH z85gzv$vQ_g7<&R0K@+^9XQdYFc=_@hr7ei?$U`^o?%@QWIvMhPi~$5S=$} zCx3bDhevO)BVvz|@3wC1J9sf{Z7HzcN-NRj)?KIIvBvGw#^l(yq`!>Ps-+lKAf~l% zND?)-IK5Q}i;1)gRPg!1@lQeX8pE+7v~s~f0f{wDD_Iro4!pS)UU*87ipJCaIotGE zTao%)e6i88dh!~Xm?XL!9xv`7{?|Sa0^aMS^x$7EP31V1mn0?ADrT3FB7EcvD(2KkIUSx?MZ;8J^3kbr^S#JgDtwrwl6KV?xbMnm=!B9^twFBZSMtnjgr7xC^m znX-L(fs01y@-U4M%#@j64bceWm`dnKBb}>VnmUs;{zWM+N3=Kj+qXL`Xt~3K=~KP# zXxO(H7yT^?PN57QI8_10^Yin0g+dYzx6S%wM(j^+A=u>iu2NPY5Iq-Du-Ms=-4FrC zj=Bem$%WJ9FM$k?AjiYEVSLF@3E1@aT4;tw`MU;2*Erq^I>(|c`WYPAGlw{~m`8gQ zF@o}UkIhbtT)6sTFzG~4tHA+U7;>Qw0{_Zq4&F0=aCWp}?Gm{dEggB-5!}AD;2pvf zclV~#+39$QM#}`0taqd{^qxz-z#^plowROm{w+5S=#z^2oA;VeA}(6wJMIi#&(yLT zWZ8l+bSRVe>1*XaYiG-j-XpmgVUF3&J=QlXW-4WGfAPt$Kc+m7JnNHpp}^z`7it(t zMXO>5e}63(h_9E`_)jV$PXz=44{E1t*zI+DpS^r-o=cEASM0qKk-wghKA}LL(XLEsC?vC^FPFFfz2k%G|%J zMKu1SKZ>N~jgwzm^pXdx%ax{vPL}W16>hvKy)s`MsHdqrU97g;jr%5Gq8U@0@9M|V zuM~r^H>VuZsu3Y7rTWXQol`qW+Gqm(SN`u%OO}qb*Jm(1Nh_j8Ya-a?%#j85Nr4)B z@1E;a=CYk`@8`+?1i$ru1dV9n?8~MlMtH;|jy;dFY|$O)EV-?~t7enav3|9cXa


0j)QI8WmzY7;`Is|}b9e}ilf!8R@21_QIceH{ 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 RHtxSK1Sx_Qs^s2<{s*a>@#Fvi literal 0 HcmV?d00001 From 64cb79fd3b2d3a8ea8f9fb59477a235ee5ed17f8 Mon Sep 17 00:00:00 2001 From: y09n Date: Tue, 3 Dec 2024 21:17:08 +0900 Subject: [PATCH 16/17] =?UTF-8?q?chore(input):=20Input=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A6=B4=EB=A6=AC=EC=A6=88=20(#4?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/honest-ghosts-speak.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/honest-ghosts-speak.md diff --git a/.changeset/honest-ghosts-speak.md b/.changeset/honest-ghosts-speak.md new file mode 100644 index 0000000..6688a91 --- /dev/null +++ b/.changeset/honest-ghosts-speak.md @@ -0,0 +1,5 @@ +--- +"@sipe-team/input": patch +--- + +chore(input): bump version From 3e9718f9ba038885bf5520ad8a78abec80621ad5 Mon Sep 17 00:00:00 2001 From: y09n Date: Tue, 3 Dec 2024 21:20:44 +0900 Subject: [PATCH 17/17] Version Packages (#48) Co-authored-by: github-actions[bot] --- .changeset/honest-ghosts-speak.md | 5 ----- packages/Input/CHANGELOG.md | 7 +++++++ packages/Input/package.json | 6 ++++-- 3 files changed, 11 insertions(+), 7 deletions(-) delete mode 100644 .changeset/honest-ghosts-speak.md create mode 100644 packages/Input/CHANGELOG.md diff --git a/.changeset/honest-ghosts-speak.md b/.changeset/honest-ghosts-speak.md deleted file mode 100644 index 6688a91..0000000 --- a/.changeset/honest-ghosts-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sipe-team/input": patch ---- - -chore(input): bump version diff --git a/packages/Input/CHANGELOG.md b/packages/Input/CHANGELOG.md new file mode 100644 index 0000000..0bb799b --- /dev/null +++ b/packages/Input/CHANGELOG.md @@ -0,0 +1,7 @@ +# @sipe-team/input + +## 0.0.1 + +### Patch Changes + +- 64cb79f: chore(input): bump version diff --git a/packages/Input/package.json b/packages/Input/package.json index 99bbc5a..16cf71a 100644 --- a/packages/Input/package.json +++ b/packages/Input/package.json @@ -1,7 +1,7 @@ { "name": "@sipe-team/input", "description": "Input component for Sipe Design System", - "version": "0.0.0", + "version": "0.0.1", "license": "MIT", "repository": { "type": "git", @@ -9,7 +9,9 @@ }, "type": "module", "exports": "./src/index.ts", - "files": ["dist"], + "files": [ + "dist" + ], "scripts": { "build": "tsup", "build:storybook": "storybook build",